From 6256c88907e2fd9760c30e0db6fc2d082ef55414 Mon Sep 17 00:00:00 2001 From: Nathan Rijksen Date: Wed, 18 Sep 2024 15:03:38 -0700 Subject: [PATCH 001/336] Fix exec should bypass async; not export env --- internal/runners/exec/exec.go | 2 +- internal/runners/export/env.go | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/internal/runners/exec/exec.go b/internal/runners/exec/exec.go index 6ddca60d0a..038d1354a9 100644 --- a/internal/runners/exec/exec.go +++ b/internal/runners/exec/exec.go @@ -126,7 +126,7 @@ func (s *Exec) Run(params *Params, args ...string) (rerr error) { s.out.Notice(locale.Tr("operating_message", projectNamespace, projectDir)) - rt, err := runtime_runbit.Update(s.prime, trigger, runtime_runbit.WithoutHeaders()) + rt, err := runtime_runbit.Update(s.prime, trigger, runtime_runbit.WithoutHeaders(), runtime_runbit.WithIgnoreAsync()) if err != nil { return errs.Wrap(err, "Could not initialize runtime") } diff --git a/internal/runners/export/env.go b/internal/runners/export/env.go index c2c9e86c92..73f2f073f3 100644 --- a/internal/runners/export/env.go +++ b/internal/runners/export/env.go @@ -47,7 +47,7 @@ func (e *Env) Run() error { e.project.Dir()), ) - rt, err := runtime_runbit.Update(e.prime, trigger.TriggerActivate, runtime_runbit.WithoutHeaders(), runtime_runbit.WithIgnoreAsync()) + rt, err := runtime_runbit.Update(e.prime, trigger.TriggerActivate, runtime_runbit.WithoutHeaders()) if err != nil { return locale.WrapError(err, "err_export_new_runtime", "Could not initialize runtime") } From c683f777a3fb33330fb262a89cb3e5bbe8610a85 Mon Sep 17 00:00:00 2001 From: ActiveState CLI Automation Date: Tue, 29 Oct 2024 10:49:49 -0700 Subject: [PATCH 002/336] Update version.txt --- version.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/version.txt b/version.txt index f7ccf07ba8..ea2909f230 100644 --- a/version.txt +++ b/version.txt @@ -1 +1 @@ -0.47.0-RC1 +0.48.0-RC1 \ No newline at end of file From 91ae9f7436df7d63d7a448c45dce9fa27bf62d8b Mon Sep 17 00:00:00 2001 From: mitchell Date: Tue, 29 Oct 2024 13:20:04 -0400 Subject: [PATCH 003/336] Do not log JSON output pipe errors to rollbar. The system is hanging up on us and there is nothing we can do about it. --- internal/output/json.go | 25 +++++++++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) diff --git a/internal/output/json.go b/internal/output/json.go index 17aa06fd74..1d572c1a42 100644 --- a/internal/output/json.go +++ b/internal/output/json.go @@ -2,8 +2,11 @@ package output import ( "encoding/json" + "errors" "fmt" "io" + "runtime" + "syscall" "github.com/ActiveState/cli/internal/colorize" "github.com/ActiveState/cli/internal/locale" @@ -63,7 +66,11 @@ func (f *JSON) Fprint(writer io.Writer, value interface{}) { _, err := writer.Write(b) if err != nil { - multilog.Error("Could not write json output, error: %v", err) + if isPipeClosedError(err) { + logging.Error("Could not write json output, error: %v", err) // do not log to rollbar + } else { + multilog.Error("Could not write json output, error: %v", err) + } } } @@ -92,8 +99,22 @@ func (f *JSON) Error(value interface{}) { _, err = f.cfg.OutWriter.Write(b) if err != nil { - multilog.Error("Could not write json output, error: %v", err) + if isPipeClosedError(err) { + logging.Error("Could not write json output, error: %v", err) // do not log to rollbar + } else { + multilog.Error("Could not write json output, error: %v", err) + } + } +} + +func isPipeClosedError(err error) bool { + pipeErr := errors.Is(err, syscall.EPIPE) + if runtime.GOOS == "windows" && errors.Is(err, syscall.Errno(242)) { + // Note: 232 is Windows error code ERROR_NO_DATA, "The pipe is being closed". + // See https://go.dev/src/os/pipe_test.go + pipeErr = true } + return pipeErr } // Notice is ignored by JSON, as they are considered as non-critical output and there's currently no reliable way to From 716f1ee3670638e392010cd65b4c269e2ac2d51a Mon Sep 17 00:00:00 2001 From: mitchell Date: Wed, 30 Oct 2024 09:47:22 -0400 Subject: [PATCH 004/336] Use the correct error code. --- internal/output/json.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/output/json.go b/internal/output/json.go index 1d572c1a42..ad2b8e2939 100644 --- a/internal/output/json.go +++ b/internal/output/json.go @@ -109,7 +109,7 @@ func (f *JSON) Error(value interface{}) { func isPipeClosedError(err error) bool { pipeErr := errors.Is(err, syscall.EPIPE) - if runtime.GOOS == "windows" && errors.Is(err, syscall.Errno(242)) { + if runtime.GOOS == "windows" && errors.Is(err, syscall.Errno(232)) { // Note: 232 is Windows error code ERROR_NO_DATA, "The pipe is being closed". // See https://go.dev/src/os/pipe_test.go pipeErr = true From b18d59a3764a20b8bedbc91f349817d9767c47fe Mon Sep 17 00:00:00 2001 From: mitchell Date: Wed, 30 Oct 2024 10:16:03 -0400 Subject: [PATCH 005/336] Do not report user-facing errors to Rollbar. --- internal/runbits/errors/errors.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/runbits/errors/errors.go b/internal/runbits/errors/errors.go index eb7cd1c865..f60a8e138a 100644 --- a/internal/runbits/errors/errors.go +++ b/internal/runbits/errors/errors.go @@ -225,5 +225,5 @@ func ReportError(err error, cmd *captain.Command, an analytics.Dispatcher) { } func IsReportableError(err error) bool { - return !locale.IsInputError(err) && !errs.IsExternalError(err) && !errs.IsSilent(err) + return !locale.IsInputError(err) && !errs.IsExternalError(err) && !errs.IsSilent(err) && !errs.IsUserFacing(err) } From 48614a3d36add9b799a2efa5d6976817fa2074a2 Mon Sep 17 00:00:00 2001 From: mitchell Date: Thu, 31 Oct 2024 18:47:16 -0400 Subject: [PATCH 006/336] Initial support for rendering wrapped, bulleted lists. Also do not put wrapped links on their own line. --- internal/colorize/{cropped.go => wrap.go} | 23 ++--- .../{cropped_test.go => wrap_test.go} | 36 ++++---- internal/output/plain.go | 10 +-- internal/output/renderers/bulletlist.go | 89 +++++++++++++++++++ .../runbits/dependencies/changesummary.go | 10 +-- internal/runbits/dependencies/summary.go | 12 +-- internal/runners/artifacts/artifacts.go | 21 +++-- internal/runners/cve/cve.go | 9 +- internal/table/table.go | 4 +- 9 files changed, 150 insertions(+), 64 deletions(-) rename internal/colorize/{cropped.go => wrap.go} (79%) rename internal/colorize/{cropped_test.go => wrap_test.go} (62%) create mode 100644 internal/output/renderers/bulletlist.go diff --git a/internal/colorize/cropped.go b/internal/colorize/wrap.go similarity index 79% rename from internal/colorize/cropped.go rename to internal/colorize/wrap.go index 793a139513..74ca14e77b 100644 --- a/internal/colorize/cropped.go +++ b/internal/colorize/wrap.go @@ -5,14 +5,14 @@ import ( "strings" ) -type CroppedLines []CroppedLine +type WrappedLines []WrappedLine -type CroppedLine struct { +type WrappedLine struct { Line string Length int } -func (c CroppedLines) String() string { +func (c WrappedLines) String() string { var result string for _, crop := range c { result = result + crop.Line @@ -22,8 +22,9 @@ func (c CroppedLines) String() string { } var indentRegexp = regexp.MustCompile(`^([ ]+)`) +var isLinkRegexp = regexp.MustCompile(`\s*(\[[^\]]+\])?https?://`) -func GetCroppedText(text string, maxLen int, includeLineEnds bool) CroppedLines { +func Wrap(text string, maxLen int, includeLineEnds bool, continuation string) WrappedLines { indent := "" if indentMatch := indentRegexp.FindStringSubmatch(text); indentMatch != nil { indent = indentMatch[0] @@ -32,11 +33,13 @@ func GetCroppedText(text string, maxLen int, includeLineEnds bool) CroppedLines } } - entries := make([]CroppedLine, 0) + maxLen -= len(continuation) + + entries := make([]WrappedLine, 0) colorCodes := colorRx.FindAllStringSubmatchIndex(text, -1) isLineEnd := false - entry := CroppedLine{} + entry := WrappedLine{} for pos, amend := range text { inColorTag := inRange(pos, colorCodes) @@ -69,8 +72,8 @@ func GetCroppedText(text string, maxLen int, includeLineEnds bool) CroppedLines } } // Extract the word from the current line if it doesn't start the line. - if i > 0 && i < len(entry.Line)-1 { - wrapped = indent + entry.Line[i:] + if i > 0 && i < len(entry.Line)-1 && !isLinkRegexp.MatchString(entry.Line[i:]) { + wrapped = indent + continuation + entry.Line[i:] entry.Line = entry.Line[:i] entry.Length -= wrappedLength isLineEnd = true // emulate for wrapping purposes @@ -79,11 +82,11 @@ func GetCroppedText(text string, maxLen int, includeLineEnds bool) CroppedLines } } entries = append(entries, entry) - entry = CroppedLine{Line: wrapped, Length: wrappedLength} + entry = WrappedLine{Line: wrapped, Length: wrappedLength} } if isLineEnd && includeLineEnds { - entries = append(entries, CroppedLine{"\n", 1}) + entries = append(entries, WrappedLine{"\n", 1}) } } diff --git a/internal/colorize/cropped_test.go b/internal/colorize/wrap_test.go similarity index 62% rename from internal/colorize/cropped_test.go rename to internal/colorize/wrap_test.go index c16dac4544..f4d793c8a0 100644 --- a/internal/colorize/cropped_test.go +++ b/internal/colorize/wrap_test.go @@ -7,7 +7,7 @@ import ( "testing" ) -func Test_GetCroppedText(t *testing.T) { +func Test_Wrap(t *testing.T) { type args struct { text string maxLen int @@ -15,74 +15,74 @@ func Test_GetCroppedText(t *testing.T) { tests := []struct { name string args args - want CroppedLines + want WrappedLines }{ { "No split", args{"[HEADING]Hello[/RESET]", 5}, - []CroppedLine{{"[HEADING]Hello[/RESET]", 5}}, + []WrappedLine{{"[HEADING]Hello[/RESET]", 5}}, }, { "Split", args{"[HEADING]Hello[/RESET]", 3}, - []CroppedLine{{"[HEADING]Hel", 3}, {"lo[/RESET]", 2}}, + []WrappedLine{{"[HEADING]Hel", 3}, {"lo[/RESET]", 2}}, }, { "Split multiple", args{"[HEADING]Hello World[/RESET]", 3}, - []CroppedLine{{"[HEADING]Hel", 3}, {"lo ", 3}, {"Wor", 3}, {"ld[/RESET]", 2}}, + []WrappedLine{{"[HEADING]Hel", 3}, {"lo ", 3}, {"Wor", 3}, {"ld[/RESET]", 2}}, }, { "Split multiple no match", args{"Hello World", 3}, - []CroppedLine{{"Hel", 3}, {"lo ", 3}, {"Wor", 3}, {"ld", 2}}, + []WrappedLine{{"Hel", 3}, {"lo ", 3}, {"Wor", 3}, {"ld", 2}}, }, { "No split no match", args{"Hello", 5}, - []CroppedLine{{"Hello", 5}}, + []WrappedLine{{"Hello", 5}}, }, { "Split multi-byte characters", args{"✔ol1✔ol2✔ol3", 4}, - []CroppedLine{{"✔ol1", 4}, {"✔ol2", 4}, {"✔ol3", 4}}, + []WrappedLine{{"✔ol1", 4}, {"✔ol2", 4}, {"✔ol3", 4}}, }, { "No split multi-byte character with tags", args{"[HEADING]✔ Some Text[/RESET]", 20}, - []CroppedLine{{"[HEADING]✔ Some Text[/RESET]", 11}}, + []WrappedLine{{"[HEADING]✔ Some Text[/RESET]", 11}}, }, { "Split multi-byte character with tags", args{"[HEADING]✔ Some Text[/RESET]", 6}, - []CroppedLine{{"[HEADING]✔ Some", 6}, {" Text[/RESET]", 5}}, + []WrappedLine{{"[HEADING]✔ Some", 6}, {" Text[/RESET]", 5}}, }, { "Split multi-byte character with tags by words", args{"[HEADING]✔ Some Text[/RESET]", 10}, - []CroppedLine{{"[HEADING]✔ Some ", 7}, {"Text[/RESET]", 4}}, + []WrappedLine{{"[HEADING]✔ Some ", 7}, {"Text[/RESET]", 4}}, }, { "Split line break", args{"[HEADING]Hel\nlo[/RESET]", 5}, - []CroppedLine{{"[HEADING]Hel", 3}, {"lo[/RESET]", 2}}, + []WrappedLine{{"[HEADING]Hel", 3}, {"lo[/RESET]", 2}}, }, { "Split nested", args{"[HEADING][NOTICE]Hello[/RESET][/RESET]", 3}, - []CroppedLine{{"[HEADING][NOTICE]Hel", 3}, {"lo[/RESET][/RESET]", 2}}, + []WrappedLine{{"[HEADING][NOTICE]Hel", 3}, {"lo[/RESET][/RESET]", 2}}, }, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - if got := GetCroppedText(tt.args.text, tt.args.maxLen, false); !reflect.DeepEqual(got, tt.want) { - t.Errorf("getCroppedText() = %v, want %v", got, tt.want) + if got := Wrap(tt.args.text, tt.args.maxLen, false, ""); !reflect.DeepEqual(got, tt.want) { + t.Errorf("Wrap() = %v, want %v", got, tt.want) } }) } } -func Test_GetCroppedTextAsString(t *testing.T) { +func Test_WrapAsString(t *testing.T) { tests := []struct { name string text string @@ -119,11 +119,11 @@ func Test_GetCroppedTextAsString(t *testing.T) { } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - if got := GetCroppedText(tt.text, 999, true); !reflect.DeepEqual(got.String(), tt.text) { + if got := Wrap(tt.text, 999, true, ""); !reflect.DeepEqual(got.String(), tt.text) { escape := func(v string) string { return strings.Replace(v, "\n", "\\n", -1) } - t.Errorf("getCroppedText() = %v, want %v (crop data: %s)", escape(got.String()), escape(tt.text), escape(fmt.Sprintf("%#v", got))) + t.Errorf("Wrap() = %v, want %v (crop data: %s)", escape(got.String()), escape(tt.text), escape(fmt.Sprintf("%#v", got))) } }) } diff --git a/internal/output/plain.go b/internal/output/plain.go index 3859303cf9..a927ced6f1 100644 --- a/internal/output/plain.go +++ b/internal/output/plain.go @@ -103,7 +103,7 @@ func (f *Plain) write(writer io.Writer, value interface{}) { // writeNow is a little helper that just writes the given value to the requested writer (no marshalling) func (f *Plain) writeNow(writer io.Writer, value string) { if f.Config().Interactive { - value = wordWrap(value) + value = colorize.Wrap(value, termutils.GetWidth(), true, "").String() } _, err := colorize.Colorize(value, writer, !f.cfg.Colored) if err != nil { @@ -111,14 +111,6 @@ func (f *Plain) writeNow(writer io.Writer, value string) { } } -func wordWrap(text string) string { - return wordWrapWithWidth(text, termutils.GetWidth()) -} - -func wordWrapWithWidth(text string, width int) string { - return colorize.GetCroppedText(text, width, true).String() -} - const nilText = "" // sprint will marshal and return the given value as a string diff --git a/internal/output/renderers/bulletlist.go b/internal/output/renderers/bulletlist.go new file mode 100644 index 0000000000..947013a5d0 --- /dev/null +++ b/internal/output/renderers/bulletlist.go @@ -0,0 +1,89 @@ +package renderers + +import ( + "fmt" + "strings" + + "github.com/ActiveState/cli/internal/colorize" + "github.com/ActiveState/cli/internal/multilog" + "github.com/ActiveState/cli/internal/output" + "github.com/ActiveState/cli/internal/termutils" +) + +type bulletList struct { + prefix string + items []string + bullets []string +} + +// BulletTree outputs a list like: +// +// ├─ one +// ├─ two +// │ wrapped +// └─ three +var BulletTree = []string{output.TreeMid, output.TreeMid, output.TreeLink, output.TreeEnd} + +// HeadedBulletTree outputs a list like: +// +// one +// ├─ two +// │ wrapped +// └─ three +var HeadedBulletTree = []string{"", output.TreeMid, output.TreeLink, output.TreeEnd} + +// NewBulletList returns a printable list of items prefixed with the given set of bullets. +// The set of bullets should contain four items: the bullet for the first item (e.g. ""); the +// bullet for each subsequent item (e.g. "├─"); the bullet for an item's wrapped lines, if any +// (e.g. "│"); and the bullet for the last item (e.g. "└─"). +// The returned list can be passed to a plain printer. It should not be passed to a structured +// printer. +func NewBulletList(prefix string, bullets, items []string) *bulletList { + if len(bullets) != 4 { + multilog.Error("Invalid bullet list: 4 bullets required") + bullets = BulletTree + } + return &bulletList{prefix, items, bullets} +} + +func (b *bulletList) MarshalOutput(format output.Format) interface{} { + out := make([]string, len(b.items)) + + // Determine the indentation of each item. + // If the prefix is pure indentation, then the indent is that prefix. + // If the prefix is not pure indentation, then the indent is the number of characters between + // the first non-space character and the end of the prefix. + // For example, both "* " and " * " have and indent of 2 because items should be indented to + // match the bullet item's left margin (note that wrapping will auto-indent to match the leading + // space in the second example). + indent := b.prefix + if nonIndent := strings.TrimLeft(b.prefix, " "); nonIndent != "" { + indent = strings.Repeat(" ", len(nonIndent)) + } + + for i, item := range b.items { + bullet := b.bullets[0] + if len(b.items) == 1 { + bullet = b.bullets[3] // special case list length of one; use last bullet + } + + if i == 0 { + if bullet != "" { + bullet += " " + } + item = b.prefix + bullet + item + } else { + bullet = b.bullets[1] + continuation := indent + b.bullets[2] + " " + if i == len(b.items)-1 { + bullet = b.bullets[3] // this is the last item + continuation = " " + } + wrapped := colorize.Wrap(item, termutils.GetWidth()-len(indent), true, continuation).String() + item = fmt.Sprintf("%s%s %s", indent, bullet, wrapped) + } + out[i] = item + } + + return strings.Join(out, "\n") +} diff --git a/internal/runbits/dependencies/changesummary.go b/internal/runbits/dependencies/changesummary.go index 38720f40d1..75e9a760f6 100644 --- a/internal/runbits/dependencies/changesummary.go +++ b/internal/runbits/dependencies/changesummary.go @@ -9,6 +9,7 @@ import ( "github.com/ActiveState/cli/internal/locale" "github.com/ActiveState/cli/internal/logging" "github.com/ActiveState/cli/internal/output" + "github.com/ActiveState/cli/internal/output/renderers" "github.com/ActiveState/cli/internal/sliceutils" "github.com/ActiveState/cli/pkg/buildplan" ) @@ -107,12 +108,8 @@ func OutputChangeSummary(out output.Outputer, newBuildPlan *buildplan.BuildPlan, // └─ name@oldVersion → name@newVersion (Updated) // depending on whether or not it has subdependencies, and whether or not showUpdatedPackages is // `true`. + items := make([]string, len(directDependencies)) for i, ingredient := range directDependencies { - prefix := output.TreeMid - if i == len(directDependencies)-1 { - prefix = output.TreeEnd - } - // Retrieve runtime dependencies, and then filter out any dependencies that are common between all added ingredients. runtimeDeps := ingredient.RuntimeDependencies(true) runtimeDeps = runtimeDeps.Filter(func(i *buildplan.Ingredient) bool { _, ok := commonDependencies[i.IngredientID]; return !ok }) @@ -130,8 +127,9 @@ func OutputChangeSummary(out output.Outputer, newBuildPlan *buildplan.BuildPlan, item = fmt.Sprintf("[ACTIONABLE]%s@%s[/RESET] → %s (%s)", oldVersion.Name, oldVersion.Version, item, locale.Tl("updated", "updated")) } - out.Notice(fmt.Sprintf(" [DISABLED]%s[/RESET] %s", prefix, item)) + items[i] = item } + out.Notice(renderers.NewBulletList(" ", renderers.BulletTree, items)) out.Notice("") // blank line } diff --git a/internal/runbits/dependencies/summary.go b/internal/runbits/dependencies/summary.go index 33fc2f6a49..a9008ac3a5 100644 --- a/internal/runbits/dependencies/summary.go +++ b/internal/runbits/dependencies/summary.go @@ -7,6 +7,7 @@ import ( "github.com/ActiveState/cli/internal/locale" "github.com/ActiveState/cli/internal/output" + "github.com/ActiveState/cli/internal/output/renderers" "github.com/ActiveState/cli/pkg/buildplan" ) @@ -27,12 +28,8 @@ func OutputSummary(out output.Outputer, directDependencies buildplan.Artifacts) out.Notice("") // blank line out.Notice(locale.Tl("setting_up_dependencies", " Setting up the following dependencies:")) + items := make([]string, len(ingredients)) for i, ingredient := range ingredients { - prefix := " " + output.TreeMid - if i == len(ingredients)-1 { - prefix = " " + output.TreeEnd - } - subDependencies := ingredient.RuntimeDependencies(true) if _, isCommon := commonDependencies[ingredient.IngredientID]; !isCommon { // If the ingredient is itself not a common sub-dependency; filter out any common sub dependencies so we don't @@ -44,10 +41,9 @@ func OutputSummary(out output.Outputer, directDependencies buildplan.Artifacts) subdepLocale = locale.Tl("summary_subdeps", "([ACTIONABLE]{{.V0}}[/RESET] sub-dependencies)", strconv.Itoa(numSubs)) } - item := fmt.Sprintf("[ACTIONABLE]%s@%s[/RESET] %s", ingredient.Name, ingredient.Version, subdepLocale) - - out.Notice(fmt.Sprintf("[DISABLED]%s[/RESET] %s", prefix, item)) + items[i] = fmt.Sprintf("[ACTIONABLE]%s@%s[/RESET] %s", ingredient.Name, ingredient.Version, subdepLocale) } + out.Notice(renderers.NewBulletList(" ", renderers.BulletTree, items)) out.Notice("") // blank line } diff --git a/internal/runners/artifacts/artifacts.go b/internal/runners/artifacts/artifacts.go index 078d2668a1..6d28db8ab0 100644 --- a/internal/runners/artifacts/artifacts.go +++ b/internal/runners/artifacts/artifacts.go @@ -12,6 +12,7 @@ import ( "github.com/ActiveState/cli/internal/errs" "github.com/ActiveState/cli/internal/locale" "github.com/ActiveState/cli/internal/output" + "github.com/ActiveState/cli/internal/output/renderers" "github.com/ActiveState/cli/internal/primer" buildplanner_runbit "github.com/ActiveState/cli/internal/runbits/buildplanner" "github.com/ActiveState/cli/pkg/buildplan" @@ -204,9 +205,13 @@ func (b *Artifacts) outputPlain(out *StructuredOutput, fullID bool) error { for _, artifact := range platform.Artifacts { switch { case len(artifact.Errors) > 0: - b.out.Print(fmt.Sprintf(" • %s ([ERROR]%s[/RESET])", artifact.Name, locale.T("artifact_status_failed"))) - b.out.Print(fmt.Sprintf(" %s %s: [ERROR]%s[/RESET]", output.TreeMid, locale.T("artifact_status_failed_message"), strings.Join(artifact.Errors, ": "))) - b.out.Print(fmt.Sprintf(" %s %s: [ACTIONABLE]%s[/RESET]", output.TreeEnd, locale.T("artifact_status_failed_log"), artifact.LogURL)) + b.out.Print(renderers.NewBulletList(" • ", + renderers.HeadedBulletTree, + []string{ + fmt.Sprintf("%s ([ERROR]%s[/RESET])", artifact.Name, locale.T("artifact_status_failed")), + fmt.Sprintf("%s: [ERROR]%s[/RESET]", locale.T("artifact_status_failed_message"), strings.Join(artifact.Errors, ": ")), + fmt.Sprintf("%s: [ACTIONABLE]%s[/RESET]", locale.T("artifact_status_failed_log"), artifact.LogURL), + })) continue case artifact.status == types.ArtifactSkipped: b.out.Print(fmt.Sprintf(" • %s ([NOTICE]%s[/RESET])", artifact.Name, locale.T("artifact_status_skipped"))) @@ -228,9 +233,13 @@ func (b *Artifacts) outputPlain(out *StructuredOutput, fullID bool) error { for _, artifact := range platform.Packages { switch { case len(artifact.Errors) > 0: - b.out.Print(fmt.Sprintf(" • %s ([ERROR]%s[/RESET])", artifact.Name, locale.T("artifact_status_failed"))) - b.out.Print(fmt.Sprintf(" %s %s: [ERROR]%s[/RESET]", output.TreeMid, locale.T("artifact_status_failed_message"), strings.Join(artifact.Errors, ": "))) - b.out.Print(fmt.Sprintf(" %s %s: [ACTIONABLE]%s[/RESET]", output.TreeEnd, locale.T("artifact_status_failed_log"), artifact.LogURL)) + b.out.Print(renderers.NewBulletList(" • ", + renderers.HeadedBulletTree, + []string{ + fmt.Sprintf("%s ([ERROR]%s[/RESET])", artifact.Name, locale.T("artifact_status_failed")), + fmt.Sprintf("%s: [ERROR]%s[/RESET]", locale.T("artifact_status_failed_message"), strings.Join(artifact.Errors, ": ")), + fmt.Sprintf("%s: [ACTIONABLE]%s[/RESET]", locale.T("artifact_status_failed_log"), artifact.LogURL), + })) continue case artifact.status == types.ArtifactSkipped: b.out.Print(fmt.Sprintf(" • %s ([NOTICE]%s[/RESET])", artifact.Name, locale.T("artifact_status_skipped"))) diff --git a/internal/runners/cve/cve.go b/internal/runners/cve/cve.go index 20f6e51116..f1f886307b 100644 --- a/internal/runners/cve/cve.go +++ b/internal/runners/cve/cve.go @@ -10,6 +10,7 @@ import ( "github.com/ActiveState/cli/internal/errs" "github.com/ActiveState/cli/internal/locale" "github.com/ActiveState/cli/internal/output" + "github.com/ActiveState/cli/internal/output/renderers" "github.com/ActiveState/cli/internal/primer" "github.com/ActiveState/cli/internal/runbits/rationalize" "github.com/ActiveState/cli/pkg/localcommit" @@ -193,17 +194,15 @@ func (rd *cveOutput) MarshalOutput(format output.Format) interface{} { return false }) + items := make([]string, len(ap.Details)) for i, d := range ap.Details { - bar := output.TreeMid - if i == len(ap.Details)-1 { - bar = output.TreeEnd - } severity := d.Severity if severity == "CRITICAL" { severity = fmt.Sprintf("[ERROR]%-10s[/RESET]", severity) } - rd.output.Print(fmt.Sprintf(" %s %-10s [ACTIONABLE]%s[/RESET]", bar, severity, d.CveID)) + items[i] = fmt.Sprintf("%-10s [ACTIONABLE]%s[/RESET]", severity, d.CveID) } + rd.output.Print(renderers.NewBulletList("", renderers.BulletTree, items)) rd.output.Print("") } diff --git a/internal/table/table.go b/internal/table/table.go index b609daa29f..56924766f1 100644 --- a/internal/table/table.go +++ b/internal/table/table.go @@ -180,9 +180,9 @@ func renderRow(providedColumns []string, colWidths []int) string { widths[len(widths)-1] = mathutils.Total(colWidths[len(widths)-1:]...) } - croppedColumns := []colorize.CroppedLines{} + croppedColumns := []colorize.WrappedLines{} for n, column := range providedColumns { - croppedColumns = append(croppedColumns, colorize.GetCroppedText(column, widths[n]-(padding*2), false)) + croppedColumns = append(croppedColumns, colorize.Wrap(column, widths[n]-(padding*2), false, "")) } var rendered = true From df7ebad2e11ff5de76b58911def41e3fbbe18277 Mon Sep 17 00:00:00 2001 From: mdrakos Date: Fri, 1 Nov 2024 13:00:37 -0700 Subject: [PATCH 007/336] Handle pannics in the poller --- cmd/state-svc/internal/resolver/resolver.go | 33 ++++++++------------- internal/poller/poller.go | 11 ++++++- internal/runbits/panics/panics.go | 7 +++++ 3 files changed, 30 insertions(+), 21 deletions(-) diff --git a/cmd/state-svc/internal/resolver/resolver.go b/cmd/state-svc/internal/resolver/resolver.go index 7995751f88..512f5e921d 100644 --- a/cmd/state-svc/internal/resolver/resolver.go +++ b/cmd/state-svc/internal/resolver/resolver.go @@ -24,9 +24,9 @@ import ( "github.com/ActiveState/cli/internal/graph" "github.com/ActiveState/cli/internal/logging" configMediator "github.com/ActiveState/cli/internal/mediators/config" - "github.com/ActiveState/cli/internal/multilog" "github.com/ActiveState/cli/internal/poller" "github.com/ActiveState/cli/internal/rtutils/ptr" + "github.com/ActiveState/cli/internal/runbits/panics" "github.com/ActiveState/cli/internal/updater" "github.com/ActiveState/cli/pkg/platform/authentication" "github.com/ActiveState/cli/pkg/projectfile" @@ -50,6 +50,7 @@ type Resolver struct { // var _ genserver.ResolverRoot = &Resolver{} // Must implement ResolverRoot func New(cfg *config.Instance, an *sync.Client, auth *authentication.Auth) (*Resolver, error) { + defer func() { panics.LogAndPanic(recover(), debug.Stack()) }() msg, err := messages.New(cfg, auth) if err != nil { return nil, errs.Wrap(err, "Could not initialize messages") @@ -110,7 +111,7 @@ func (r *Resolver) Query() genserver.QueryResolver { return r } func (r *Resolver) Mutation() genserver.MutationResolver { return r } func (r *Resolver) Version(ctx context.Context) (*graph.Version, error) { - defer func() { handlePanics(recover(), debug.Stack()) }() + defer func() { panics.LogAndPanic(recover(), debug.Stack()) }() r.an.EventWithLabel(anaConsts.CatStateSvc, "endpoint", "Version") logging.Debug("Version resolver") @@ -126,7 +127,7 @@ func (r *Resolver) Version(ctx context.Context) (*graph.Version, error) { } func (r *Resolver) AvailableUpdate(ctx context.Context, desiredChannel, desiredVersion string) (*graph.AvailableUpdate, error) { - defer func() { handlePanics(recover(), debug.Stack()) }() + defer func() { panics.LogAndPanic(recover(), debug.Stack()) }() if desiredChannel == "" { desiredChannel = constants.ChannelName @@ -174,7 +175,7 @@ func (r *Resolver) AvailableUpdate(ctx context.Context, desiredChannel, desiredV } func (r *Resolver) Projects(ctx context.Context) ([]*graph.Project, error) { - defer func() { handlePanics(recover(), debug.Stack()) }() + defer func() { panics.LogAndPanic(recover(), debug.Stack()) }() r.an.EventWithLabel(anaConsts.CatStateSvc, "endpoint", "Projects") logging.Debug("Projects resolver") @@ -194,7 +195,7 @@ func (r *Resolver) Projects(ctx context.Context) ([]*graph.Project, error) { } func (r *Resolver) AnalyticsEvent(_ context.Context, category, action, source string, _label *string, dimensionsJson string) (*graph.AnalyticsEventResponse, error) { - defer func() { handlePanics(recover(), debug.Stack()) }() + defer func() { panics.LogAndPanic(recover(), debug.Stack()) }() logging.Debug("Analytics event resolver: %s - %s: %s (%s)", category, action, ptr.From(_label, "NIL"), source) @@ -228,7 +229,7 @@ func (r *Resolver) AnalyticsEvent(_ context.Context, category, action, source st } func (r *Resolver) ReportRuntimeUsage(_ context.Context, pid int, exec, source string, dimensionsJSON string) (*graph.ReportRuntimeUsageResponse, error) { - defer func() { handlePanics(recover(), debug.Stack()) }() + defer func() { panics.LogAndPanic(recover(), debug.Stack()) }() logging.Debug("Runtime usage resolver: %d - %s", pid, exec) var dims *dimensions.Values @@ -242,26 +243,26 @@ func (r *Resolver) ReportRuntimeUsage(_ context.Context, pid int, exec, source s } func (r *Resolver) CheckMessages(ctx context.Context, command string, flags []string) ([]*graph.MessageInfo, error) { - defer func() { handlePanics(recover(), debug.Stack()) }() + defer func() { panics.LogAndPanic(recover(), debug.Stack()) }() logging.Debug("Check messages resolver") return r.messages.Check(command, flags) } func (r *Resolver) ConfigChanged(ctx context.Context, key string) (*graph.ConfigChangedResponse, error) { - defer func() { handlePanics(recover(), debug.Stack()) }() + defer func() { panics.LogAndPanic(recover(), debug.Stack()) }() go configMediator.NotifyListeners(key) return &graph.ConfigChangedResponse{Received: true}, nil } func (r *Resolver) FetchLogTail(ctx context.Context) (string, error) { - defer func() { handlePanics(recover(), debug.Stack()) }() + defer func() { panics.LogAndPanic(recover(), debug.Stack()) }() return logging.ReadTail(), nil } func (r *Resolver) GetProcessesInUse(ctx context.Context, execDir string) ([]*graph.ProcessInfo, error) { - defer func() { handlePanics(recover(), debug.Stack()) }() + defer func() { panics.LogAndPanic(recover(), debug.Stack()) }() inUse := r.rtwatch.GetProcessesInUse(execDir) processes := make([]*graph.ProcessInfo, 0, len(inUse)) @@ -272,7 +273,7 @@ func (r *Resolver) GetProcessesInUse(ctx context.Context, execDir string) ([]*gr } func (r *Resolver) GetJwt(ctx context.Context) (*graph.Jwt, error) { - defer func() { handlePanics(recover(), debug.Stack()) }() + defer func() { panics.LogAndPanic(recover(), debug.Stack()) }() if err := r.auth.MaybeRenew(); err != nil { return nil, errs.Wrap(err, "Could not renew auth token") @@ -308,7 +309,7 @@ func (r *Resolver) GetJwt(ctx context.Context) (*graph.Jwt, error) { } func (r *Resolver) HashGlobs(ctx context.Context, wd string, globs []string) (*graph.GlobResult, error) { - defer func() { handlePanics(recover(), debug.Stack()) }() + defer func() { panics.LogAndPanic(recover(), debug.Stack()) }() hash, files, err := r.fileHasher.HashFiles(wd, globs) if err != nil { @@ -341,11 +342,3 @@ func (r *Resolver) SetCache(ctx context.Context, key string, value string, expir r.globalCache.Set(key, value, time.Duration(expiry)*time.Second) return &graphqltypes.Void{}, nil } - -func handlePanics(recovered interface{}, stack []byte) { - if recovered != nil { - multilog.Error("Panic: %v", recovered) - logging.Debug("Stack: %s", string(stack)) - panic(recovered) // We're only logging the panic, not interrupting it - } -} diff --git a/internal/poller/poller.go b/internal/poller/poller.go index 56de212f85..563caa9a0b 100644 --- a/internal/poller/poller.go +++ b/internal/poller/poller.go @@ -1,6 +1,7 @@ package poller import ( + "runtime/debug" "sync" "time" @@ -8,6 +9,7 @@ import ( "github.com/ActiveState/cli/internal/logging" "github.com/ActiveState/cli/internal/multilog" "github.com/ActiveState/cli/internal/runbits/errors" + "github.com/ActiveState/cli/internal/runbits/panics" ) type Poller struct { @@ -19,8 +21,15 @@ type Poller struct { } func New(interval time.Duration, pollFunc func() (interface{}, error)) *Poller { + wrappedFn := func() (interface{}, error) { + defer func() { + panics.LogAndPanic(recover(), debug.Stack()) + }() + return pollFunc() + } + p := &Poller{ - pollFunc: pollFunc, + pollFunc: wrappedFn, done: make(chan struct{}), } go p.start(interval) diff --git a/internal/runbits/panics/panics.go b/internal/runbits/panics/panics.go index 7dd3f3fc5f..ed710415dc 100644 --- a/internal/runbits/panics/panics.go +++ b/internal/runbits/panics/panics.go @@ -34,3 +34,10 @@ func LogPanics(recovered interface{}, stack []byte) bool { } return false } + +// LogAndPanic produces actionable output for panic events (that shouldn't happen) and panics +func LogAndPanic(recovered interface{}, stack []byte) { + multilog.Error("Panic: %v", recovered) + logging.Debug("Stack: %s", string(stack)) + panic(recovered) +} From 675c46e0e710ee2216fe20b1f6743e32c4fecca6 Mon Sep 17 00:00:00 2001 From: mdrakos Date: Fri, 1 Nov 2024 13:00:55 -0700 Subject: [PATCH 008/336] Handle potential panics in messages --- cmd/state-svc/internal/messages/messages.go | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/cmd/state-svc/internal/messages/messages.go b/cmd/state-svc/internal/messages/messages.go index 88cdf78f9e..a377b5d911 100644 --- a/cmd/state-svc/internal/messages/messages.go +++ b/cmd/state-svc/internal/messages/messages.go @@ -74,7 +74,11 @@ func (m *Messages) Check(command string, flags []string) ([]*graph.MessageInfo, if cacheValue == nil { return []*graph.MessageInfo{}, nil } - allMessages := cacheValue.([]*graph.MessageInfo) + + allMessages, ok := cacheValue.([]*graph.MessageInfo) + if !ok { + return nil, errs.New("Could not get messages from cache") + } conditionParams := *m.baseParams // copy conditionParams.UserEmail = m.auth.Email() @@ -110,7 +114,11 @@ func check(params *ConditionParams, messages []*graph.MessageInfo, lastReportMap logging.Debug("Checking message %s", message.ID) // Ensure we don't show the same message too often if lastReport, ok := lastReportMap[message.ID]; ok { - lastReportTime, err := time.Parse(time.RFC3339, lastReport.(string)) + lr, ok := lastReport.(string) + if !ok { + return nil, errs.New("Could not get last reported time for message %s as it's not a string", message.ID) + } + lastReportTime, err := time.Parse(time.RFC3339, lr) if err != nil { return nil, errs.New("Could not parse last reported time for message %s as it's not a valid RFC3339 value: %v", message.ID, lastReport) } From 6c49aed4209689bc7e350536a3db45d18997175a Mon Sep 17 00:00:00 2001 From: mdrakos Date: Fri, 1 Nov 2024 13:22:52 -0700 Subject: [PATCH 009/336] Remove panic check on New resolver --- cmd/state-svc/internal/resolver/resolver.go | 1 - 1 file changed, 1 deletion(-) diff --git a/cmd/state-svc/internal/resolver/resolver.go b/cmd/state-svc/internal/resolver/resolver.go index 512f5e921d..ca591fe87d 100644 --- a/cmd/state-svc/internal/resolver/resolver.go +++ b/cmd/state-svc/internal/resolver/resolver.go @@ -50,7 +50,6 @@ type Resolver struct { // var _ genserver.ResolverRoot = &Resolver{} // Must implement ResolverRoot func New(cfg *config.Instance, an *sync.Client, auth *authentication.Auth) (*Resolver, error) { - defer func() { panics.LogAndPanic(recover(), debug.Stack()) }() msg, err := messages.New(cfg, auth) if err != nil { return nil, errs.Wrap(err, "Could not initialize messages") From 5e42cff49f5ef762d506aea5bb6443a744ce1984 Mon Sep 17 00:00:00 2001 From: mdrakos Date: Fri, 1 Nov 2024 13:23:52 -0700 Subject: [PATCH 010/336] Nil check recovered --- internal/runbits/panics/panics.go | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/internal/runbits/panics/panics.go b/internal/runbits/panics/panics.go index ed710415dc..d743f7a5e8 100644 --- a/internal/runbits/panics/panics.go +++ b/internal/runbits/panics/panics.go @@ -37,7 +37,9 @@ func LogPanics(recovered interface{}, stack []byte) bool { // LogAndPanic produces actionable output for panic events (that shouldn't happen) and panics func LogAndPanic(recovered interface{}, stack []byte) { - multilog.Error("Panic: %v", recovered) - logging.Debug("Stack: %s", string(stack)) - panic(recovered) + if recovered != nil { + multilog.Error("Panic: %v", recovered) + logging.Debug("Stack: %s", string(stack)) + panic(recovered) // We're only logging the panic, not interrupting it + } } From 55a07c08c1461aedaa8dc9ddd6fc6c30c4ba3516 Mon Sep 17 00:00:00 2001 From: mitchell Date: Fri, 1 Nov 2024 18:07:06 -0400 Subject: [PATCH 011/336] Do not colorize wrapping continuation characters. --- internal/colorize/wrap.go | 27 ++++++++++++++++++++++++- internal/output/renderers/bulletlist.go | 14 ++++++------- 2 files changed, 33 insertions(+), 8 deletions(-) diff --git a/internal/colorize/wrap.go b/internal/colorize/wrap.go index 74ca14e77b..721ec366de 100644 --- a/internal/colorize/wrap.go +++ b/internal/colorize/wrap.go @@ -1,8 +1,11 @@ package colorize import ( + "fmt" "regexp" "strings" + + "github.com/ActiveState/cli/internal/logging" ) type WrappedLines []WrappedLine @@ -37,6 +40,7 @@ func Wrap(text string, maxLen int, includeLineEnds bool, continuation string) Wr entries := make([]WrappedLine, 0) colorCodes := colorRx.FindAllStringSubmatchIndex(text, -1) + colorNames := colorRx.FindAllStringSubmatch(text, -1) isLineEnd := false entry := WrappedLine{} @@ -73,7 +77,15 @@ func Wrap(text string, maxLen int, includeLineEnds bool, continuation string) Wr } // Extract the word from the current line if it doesn't start the line. if i > 0 && i < len(entry.Line)-1 && !isLinkRegexp.MatchString(entry.Line[i:]) { - wrapped = indent + continuation + entry.Line[i:] + tag := colorTag(pos, colorCodes, colorNames) + if continuation != "" && tag != "" { + // Do not colorize the continuation. + wrapped = fmt.Sprintf("%s[/RESET]%s%s%s", indent, continuation, tag, entry.Line[i:]) + } else { + wrapped = indent + continuation + entry.Line[i:] + } + logging.Debug("continuation: '%s'", continuation) + logging.Debug("wrapped: '%s'", wrapped) entry.Line = entry.Line[:i] entry.Length -= wrappedLength isLineEnd = true // emulate for wrapping purposes @@ -103,6 +115,19 @@ func inRange(pos int, ranges [][]int) bool { return false } +// colorTag returns the currently active color tag (if any) at the given position. +func colorTag(pos int, ranges [][]int, names [][]string) string { + for i, intRange := range ranges { + if pos < intRange[0] { + continue // before [COLOR] + } + if i < len(ranges)-1 || pos < ranges[i+1][0] { + return names[i][0] // missing [/RESET] or between [COLOR] and [/RESET] + } + } + return "" +} + func isSpace(b byte) bool { return b == ' ' || b == '\t' } func isUTF8TrailingByte(b byte) bool { diff --git a/internal/output/renderers/bulletlist.go b/internal/output/renderers/bulletlist.go index 947013a5d0..49c98145b3 100644 --- a/internal/output/renderers/bulletlist.go +++ b/internal/output/renderers/bulletlist.go @@ -1,7 +1,6 @@ package renderers import ( - "fmt" "strings" "github.com/ActiveState/cli/internal/colorize" @@ -22,7 +21,7 @@ type bulletList struct { // ├─ two // │ wrapped // └─ three -var BulletTree = []string{output.TreeMid, output.TreeMid, output.TreeLink, output.TreeEnd} +var BulletTree = []string{output.TreeMid, output.TreeMid, output.TreeLink + " ", output.TreeEnd} // HeadedBulletTree outputs a list like: // @@ -30,7 +29,7 @@ var BulletTree = []string{output.TreeMid, output.TreeMid, output.TreeLink, outpu // ├─ two // │ wrapped // └─ three -var HeadedBulletTree = []string{"", output.TreeMid, output.TreeLink, output.TreeEnd} +var HeadedBulletTree = []string{"", output.TreeMid, output.TreeLink + " ", output.TreeEnd} // NewBulletList returns a printable list of items prefixed with the given set of bullets. // The set of bullets should contain four items: the bullet for the first item (e.g. ""); the @@ -73,14 +72,15 @@ func (b *bulletList) MarshalOutput(format output.Format) interface{} { } item = b.prefix + bullet + item } else { - bullet = b.bullets[1] + bullet = b.bullets[1] + " " continuation := indent + b.bullets[2] + " " if i == len(b.items)-1 { - bullet = b.bullets[3] // this is the last item + bullet = b.bullets[3] + " " // this is the last item continuation = " " } - wrapped := colorize.Wrap(item, termutils.GetWidth()-len(indent), true, continuation).String() - item = fmt.Sprintf("%s%s %s", indent, bullet, wrapped) + maxWidth := termutils.GetWidth() - len(indent) - len(bullet) + wrapped := colorize.Wrap(item, maxWidth, true, continuation).String() + item = indent + bullet + wrapped } out[i] = item } From 406f7904345e6d14f6104f43c244de71da1f0dca Mon Sep 17 00:00:00 2001 From: mdrakos Date: Tue, 5 Nov 2024 13:49:25 -0800 Subject: [PATCH 012/336] Update graphQL response handling --- go.mod | 5 +- go.sum | 6 +- internal/gqlclient/gqlclient.go | 7 +- .../graphql/graphql.go | 128 +++++- internal/graphql/graphql_json_test.go | 107 +++++ internal/graphql/graphql_multipart_test.go | 188 ++++++++ internal/graphql/graphql_test.go | 376 ++++++++++++++++ internal/runners/packages/list.go | 2 +- .../buildplanner/response/buildexpression.go | 7 - .../api/buildplanner/response/buildtarget.go | 7 - .../api/buildplanner/response/commit.go | 41 -- .../api/buildplanner/response/commiterror.go | 4 +- .../buildplanner/response/createproject.go | 8 +- .../api/buildplanner/response/mergecommit.go | 12 +- .../api/buildplanner/response/project.go | 39 ++ .../api/buildplanner/response/revertcommit.go | 6 +- .../api/buildplanner/response/stagecommit.go | 8 - pkg/platform/api/graphql/model/publish.go | 4 - pkg/platform/api/graphql/model/vcs.go | 6 - pkg/platform/api/graphql/request/vcs.go | 25 +- .../api/hasura_inventory/model/inventory.go | 4 - pkg/platform/api/mediator/model/cve.go | 8 - .../api/mediator/model/supportedlangs.go | 6 +- .../vulnerabilities/model/vulnerabilities.go | 4 - pkg/platform/model/buildplanner/build.go | 28 +- .../model/buildplanner/buildplanner.go | 2 +- .../model/buildplanner/buildscript.go | 14 +- pkg/platform/model/buildplanner/commit.go | 60 +-- pkg/platform/model/buildplanner/project.go | 12 +- pkg/platform/model/buildplanner/publish.go | 8 +- pkg/platform/model/checkpoints.go | 32 +- pkg/platform/model/cve.go | 12 +- pkg/platform/model/inventory.go | 6 +- pkg/platform/model/organizations.go | 8 +- pkg/platform/model/projects.go | 8 +- pkg/platform/model/supportedlangs.go | 4 +- pkg/platform/model/svc.go | 18 +- pkg/platform/model/vulnerabilities.go | 4 +- .../github.com/ActiveState/graphql/.gitignore | 14 - .../ActiveState/graphql/.travis.yml | 16 - vendor/github.com/ActiveState/graphql/LICENSE | 201 --------- .../github.com/ActiveState/graphql/README.md | 67 --- vendor/github.com/matryer/is/.gitignore | 24 ++ vendor/github.com/matryer/is/.travis.yml | 40 ++ vendor/github.com/matryer/is/LICENSE | 21 + vendor/github.com/matryer/is/README.md | 43 ++ vendor/github.com/matryer/is/is-1.7.go | 64 +++ vendor/github.com/matryer/is/is-before-1.7.go | 23 + vendor/github.com/matryer/is/is.go | 403 ++++++++++++++++++ vendor/modules.txt | 8 +- 50 files changed, 1607 insertions(+), 541 deletions(-) rename {vendor/github.com/ActiveState => internal}/graphql/graphql.go (71%) create mode 100644 internal/graphql/graphql_json_test.go create mode 100644 internal/graphql/graphql_multipart_test.go create mode 100644 internal/graphql/graphql_test.go delete mode 100644 pkg/platform/api/buildplanner/response/buildexpression.go delete mode 100644 pkg/platform/api/buildplanner/response/buildtarget.go delete mode 100644 pkg/platform/api/buildplanner/response/stagecommit.go delete mode 100644 vendor/github.com/ActiveState/graphql/.gitignore delete mode 100644 vendor/github.com/ActiveState/graphql/.travis.yml delete mode 100644 vendor/github.com/ActiveState/graphql/LICENSE delete mode 100644 vendor/github.com/ActiveState/graphql/README.md create mode 100644 vendor/github.com/matryer/is/.gitignore create mode 100644 vendor/github.com/matryer/is/.travis.yml create mode 100644 vendor/github.com/matryer/is/LICENSE create mode 100644 vendor/github.com/matryer/is/README.md create mode 100644 vendor/github.com/matryer/is/is-1.7.go create mode 100644 vendor/github.com/matryer/is/is-before-1.7.go create mode 100644 vendor/github.com/matryer/is/is.go diff --git a/go.mod b/go.mod index b512502678..d98d578d24 100644 --- a/go.mod +++ b/go.mod @@ -69,7 +69,6 @@ require ( ) require ( - github.com/ActiveState/graphql v0.0.0-20230719154233-6949037a6e48 github.com/brunoga/deep v1.2.4 github.com/cespare/xxhash v1.1.0 github.com/charmbracelet/bubbles v0.18.0 @@ -143,10 +142,10 @@ require ( github.com/josharian/intern v1.0.0 // indirect github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51 // indirect github.com/kevinburke/ssh_config v1.2.0 // indirect - github.com/labstack/gommon v0.3.1 // indirect + github.com/labstack/gommon v0.3.1 github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0 // indirect github.com/mailru/easyjson v0.7.7 // indirect - github.com/matryer/is v1.2.0 // indirect + github.com/matryer/is v1.4.1 github.com/mattn/go-colorable v0.1.13 // indirect github.com/mattn/go-isatty v0.0.20 // indirect github.com/mattn/go-sqlite3 v1.14.7 // indirect diff --git a/go.sum b/go.sum index f68dcce819..73a9c3d8a7 100644 --- a/go.sum +++ b/go.sum @@ -17,8 +17,6 @@ github.com/99designs/gqlgen v0.17.54 h1:AsF49k/7RJlwA00RQYsYN0T8cQuaosnV/7G1dHC3 github.com/99designs/gqlgen v0.17.54/go.mod h1:77/+pVe6zlTsz++oUg2m8VLgzdUPHxjoAG3BxI5y8Rc= github.com/ActiveState/go-ogle-analytics v0.0.0-20170510030904-9b3f14901527 h1:lW+qgVXf/iAnSs8SgagWxh8d6nsbpmwyhmeg9/fp0Os= github.com/ActiveState/go-ogle-analytics v0.0.0-20170510030904-9b3f14901527/go.mod h1:/9SyzKLlJSuIa7WAsLUUhHqTK9+PtZD8cKF8G4SLpa0= -github.com/ActiveState/graphql v0.0.0-20230719154233-6949037a6e48 h1:UCx/ObpVRgC4fp2OlJM2iNdMMu+K87/aPxKrQ1WRLj4= -github.com/ActiveState/graphql v0.0.0-20230719154233-6949037a6e48/go.mod h1:NhUbNQ8UpfnC6nZvZ8oThqYSCE/G8FQp9JUrK9jXJs0= github.com/ActiveState/pty v0.0.0-20230628221854-6fb90eb08a14 h1:RdhhSiwmgyUaaF2GBNrbqTwE5SM+MaVjwf91Ua+CK8c= github.com/ActiveState/pty v0.0.0-20230628221854-6fb90eb08a14/go.mod h1:5mM6vNRQwshCjlkOnVpwC//4ZpkiC6nmZr8lPOxJdXs= github.com/ActiveState/termtest v0.7.3-0.20240703202616-34f7899287a4 h1:aYm+l6fT6sg+xEfO2+uSt0UJqw7WECwwqvSR7zaL/yI= @@ -477,8 +475,8 @@ github.com/maruel/natural v1.1.0 h1:2z1NgP/Vae+gYrtC0VuvrTJ6U35OuyUqDdfluLqMWuQ= github.com/maruel/natural v1.1.0/go.mod h1:eFVhYCcUOfZFxXoDZam8Ktya72wa79fNC3lc/leA0DQ= github.com/mash/go-tempfile-suffix v0.0.0-20150731093933-48f0f8a3a5ab h1:2lWb5W+cZTlTIrJUuzVMrs6vcEvY0ydkkMH66EdPaqc= github.com/mash/go-tempfile-suffix v0.0.0-20150731093933-48f0f8a3a5ab/go.mod h1:oBJAJTenVXse2frk3J4anZ7funxla2ZdJHFQShkD43k= -github.com/matryer/is v1.2.0 h1:92UTHpy8CDwaJ08GqLDzhhuixiBUUD1p3AU6PHddz4A= -github.com/matryer/is v1.2.0/go.mod h1:2fLPjFQM9rhQ15aVEtbuwhJinnOqrmgXPNdZsdwlWXA= +github.com/matryer/is v1.4.1 h1:55ehd8zaGABKLXQUe2awZ99BD/PTc2ls+KV/dXphgEQ= +github.com/matryer/is v1.4.1/go.mod h1:8I/i5uYgLzgsgEloJE1U6xx5HkBQpAZvepWuujKwMRU= github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= github.com/mattn/go-colorable v0.1.2/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= github.com/mattn/go-colorable v0.1.11/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4= diff --git a/internal/gqlclient/gqlclient.go b/internal/gqlclient/gqlclient.go index bb6f23be9b..5580fd0ac6 100644 --- a/internal/gqlclient/gqlclient.go +++ b/internal/gqlclient/gqlclient.go @@ -14,12 +14,12 @@ import ( "github.com/ActiveState/cli/internal/constants" "github.com/ActiveState/cli/internal/errs" + "github.com/ActiveState/cli/internal/graphql" "github.com/ActiveState/cli/internal/logging" "github.com/ActiveState/cli/internal/profile" "github.com/ActiveState/cli/internal/singleton/uniqid" "github.com/ActiveState/cli/internal/strutils" "github.com/ActiveState/cli/pkg/platform/api" - "github.com/ActiveState/graphql" "github.com/pkg/errors" ) @@ -44,6 +44,11 @@ type RequestWithFiles interface { Files() []File } +type RequestWithMultiQuery interface { + Request + IsMultiQuery() bool +} + type Header map[string][]string type graphqlClient = graphql.Client diff --git a/vendor/github.com/ActiveState/graphql/graphql.go b/internal/graphql/graphql.go similarity index 71% rename from vendor/github.com/ActiveState/graphql/graphql.go rename to internal/graphql/graphql.go index 452ad84baa..7085f0448c 100644 --- a/vendor/github.com/ActiveState/graphql/graphql.go +++ b/internal/graphql/graphql.go @@ -39,6 +39,8 @@ import ( "io" "mime/multipart" "net/http" + "strings" + "unicode" "github.com/pkg/errors" ) @@ -108,8 +110,10 @@ func (c *Client) runWithJSON(ctx context.Context, req *Request, resp interface{} } c.logf(">> variables: %v", req.vars) c.logf(">> query: %s", req.q) + + intermediateResp := make(map[string]interface{}) gr := &graphResponse{ - Data: resp, + Data: &intermediateResp, } r, err := http.NewRequest(http.MethodPost, c.endpoint, &requestBody) if err != nil { @@ -141,7 +145,31 @@ func (c *Client) runWithJSON(ctx context.Context, req *Request, resp interface{} // return first error return gr.Errors[0] } - return nil + + if req.dataPath != "" { + val, err := findValueByPath(intermediateResp, req.dataPath) + if err != nil { + // If the response is empty, return nil instead of an error + if len(intermediateResp) == 0 { + return nil + } + return err + } + data, err := json.Marshal(val) + if err != nil { + return errors.Wrap(err, "remarshaling response") + } + return json.Unmarshal(data, resp) + } + + data, err := json.Marshal(intermediateResp) + if err != nil { + return errors.Wrap(err, "remarshaling response") + } + if resp == nil { + return nil + } + return json.Unmarshal(data, resp) } func (c *Client) runWithPostFields(ctx context.Context, req *Request, resp interface{}) error { @@ -175,8 +203,9 @@ func (c *Client) runWithPostFields(ctx context.Context, req *Request, resp inter c.logf(">> variables: %s", variablesBuf.String()) c.logf(">> files: %d", len(req.files)) c.logf(">> query: %s", req.q) + intermediateResp := make(map[string]interface{}) gr := &graphResponse{ - Data: resp, + Data: &intermediateResp, } r, err := http.NewRequest(http.MethodPost, c.endpoint, &requestBody) if err != nil { @@ -208,7 +237,27 @@ func (c *Client) runWithPostFields(ctx context.Context, req *Request, resp inter // return first error return gr.Errors[0] } - return nil + + if req.dataPath != "" { + val, err := findValueByPath(intermediateResp, req.dataPath) + if err != nil { + return errors.Wrap(err, "finding value by path") + } + data, err := json.Marshal(val) + if err != nil { + return errors.Wrap(err, "remarshaling response") + } + return json.Unmarshal(data, resp) + } + + data, err := json.Marshal(intermediateResp) + if err != nil { + return errors.Wrap(err, "remarshaling response") + } + if resp == nil { + return nil + } + return json.Unmarshal(data, resp) } // WithHTTPClient specifies the underlying http.Client to use when @@ -249,9 +298,10 @@ type graphResponse struct { // Request is a GraphQL request. type Request struct { - q string - vars map[string]interface{} - files []file + q string + vars map[string]interface{} + files []file + dataPath string // Header represent any request headers that will be set // when the request is made. @@ -261,12 +311,48 @@ type Request struct { // NewRequest makes a new Request with the specified string. func NewRequest(q string) *Request { req := &Request{ - q: q, - Header: make(map[string][]string), + q: q, + Header: make(map[string][]string), + dataPath: inferDataPath(q), } return req } +// inferDataPath attempts to extract the first field name after the operation type +// as the data path. Returns empty string if unable to infer. +// For example, given the query: +// +// query { user { name } } +// +// it will return "user". +// The dataPath is used to signal to the client where it should start unmarshaling the response. +func inferDataPath(query string) string { + query = strings.TrimSpace(query) + if query == "" { + return "" + } + + startIdx := strings.Index(query, "{") + if startIdx == -1 { + return "" + } + query = query[startIdx+1:] + query = strings.TrimSpace(query) + if query == "" || query == "}" { + return "" + } + + var result strings.Builder + for _, ch := range query { + if ch == '(' || ch == '{' || unicode.IsSpace(ch) || ch == ':' { + break + } + result.WriteRune(ch) + } + + return strings.TrimSpace(result.String()) +} + // Var sets a variable. func (req *Request) Var(key string, value interface{}) { if req.vars == nil { @@ -286,9 +372,33 @@ func (req *Request) File(fieldname, filename string, r io.Reader) { }) } +// DataPath sets the path to the data field in the response. +// This is useful if you want to unmarshal a nested object. +// If not set, it will use the automatically inferred path. +func (req *Request) DataPath(path string) { + req.dataPath = path +} + // file represents a file to upload. type file struct { Field string Name string R io.Reader } + +func findValueByPath(data map[string]interface{}, path string) (interface{}, error) { + if val, ok := data[path]; ok { + return val, nil + } + + // Recursively search through nested maps + for _, val := range data { + if nestedMap, ok := val.(map[string]interface{}); ok { + if found, err := findValueByPath(nestedMap, path); err == nil { + return found, nil + } + } + } + + return nil, fmt.Errorf("path %q not found in response", path) +} diff --git a/internal/graphql/graphql_json_test.go b/internal/graphql/graphql_json_test.go new file mode 100644 index 0000000000..71f7f56d0e --- /dev/null +++ b/internal/graphql/graphql_json_test.go @@ -0,0 +1,107 @@ +package graphql + +import ( + "context" + "io" + "io/ioutil" + "net/http" + "net/http/httptest" + "testing" + "time" + + "github.com/matryer/is" +) + +func TestDoJSON(t *testing.T) { + is := is.New(t) + var calls int + srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + calls++ + is.Equal(r.Method, http.MethodPost) + b, err := ioutil.ReadAll(r.Body) + is.NoErr(err) + is.Equal(string(b), `{"query":"query {}","variables":null}`+"\n") + io.WriteString(w, `{ + "data": { + "something": "yes" + } + }`) + })) + defer srv.Close() + + ctx := context.Background() + client := NewClient(srv.URL) + + ctx, cancel := context.WithTimeout(ctx, 1*time.Second) + defer cancel() + var responseData map[string]interface{} + err := client.Run(ctx, &Request{q: "query {}"}, &responseData) + is.NoErr(err) + is.Equal(calls, 1) // calls + is.Equal(responseData["something"], "yes") +} + +func TestQueryJSON(t *testing.T) { + is := is.New(t) + + var calls int + srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + calls++ + b, err := ioutil.ReadAll(r.Body) + is.NoErr(err) + is.Equal(string(b), `{"query":"query {}","variables":{"username":"matryer"}}`+"\n") + _, err = io.WriteString(w, `{"data":{"value":"some data"}}`) + is.NoErr(err) + })) + defer srv.Close() + ctx, cancel := context.WithTimeout(context.Background(), 1*time.Second) + defer cancel() + + client := NewClient(srv.URL) + + req := NewRequest("query {}") + req.Var("username", "matryer") + + // check variables + is.True(req != nil) + is.Equal(req.vars["username"], "matryer") + + var resp struct { + Value string + } + err := client.Run(ctx, req, &resp) + is.NoErr(err) + is.Equal(calls, 1) + + is.Equal(resp.Value, "some data") +} + +func TestHeader(t *testing.T) { + is := is.New(t) + + var calls int + srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + calls++ + is.Equal(r.Header.Get("X-Custom-Header"), "123") + + _, err := io.WriteString(w, `{"data":{"value":"some data"}}`) + is.NoErr(err) + })) + defer srv.Close() + ctx, cancel := context.WithTimeout(context.Background(), 1*time.Second) + defer cancel() + + client := NewClient(srv.URL) + + req := NewRequest("query {}") + req.Header.Set("X-Custom-Header", "123") + + var resp struct { + Value string + } + err := client.Run(ctx, req, &resp) + is.NoErr(err) + is.Equal(calls, 1) + + is.Equal(resp.Value, "some data") +} diff --git a/internal/graphql/graphql_multipart_test.go b/internal/graphql/graphql_multipart_test.go new file mode 100644 index 0000000000..1756d95a39 --- /dev/null +++ b/internal/graphql/graphql_multipart_test.go @@ -0,0 +1,188 @@ +package graphql + +import ( + "context" + "io" + "io/ioutil" + "net/http" + "net/http/httptest" + "strings" + "testing" + "time" + + "github.com/matryer/is" +) + +func TestWithClient(t *testing.T) { + is := is.New(t) + var calls int + testClient := &http.Client{ + Transport: roundTripperFunc(func(req *http.Request) (*http.Response, error) { + calls++ + resp := &http.Response{ + Body: ioutil.NopCloser(strings.NewReader(`{"data":{"key":"value"}}`)), + } + return resp, nil + }), + } + + ctx := context.Background() + client := NewClient("", WithHTTPClient(testClient), UseMultipartForm()) + + req := NewRequest(``) + client.Run(ctx, req, nil) + + is.Equal(calls, 1) // calls +} + +func TestDoUseMultipartForm(t *testing.T) { + is := is.New(t) + var calls int + srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + calls++ + is.Equal(r.Method, http.MethodPost) + query := r.FormValue("query") + is.Equal(query, `query {}`) + io.WriteString(w, `{ + "data": { + "something": "yes" + } + }`) + })) + defer srv.Close() + + ctx := context.Background() + client := NewClient(srv.URL, UseMultipartForm()) + + ctx, cancel := context.WithTimeout(ctx, 1*time.Second) + defer cancel() + var responseData map[string]interface{} + err := client.Run(ctx, &Request{q: "query {}"}, &responseData) + is.NoErr(err) + is.Equal(calls, 1) // calls + is.Equal(responseData["something"], "yes") +} + +func TestDoErr(t *testing.T) { + is := is.New(t) + var calls int + srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + calls++ + is.Equal(r.Method, http.MethodPost) + query := r.FormValue("query") + is.Equal(query, `query {}`) + io.WriteString(w, `{ + "errors": [{ + "message": "Something went wrong" + }] + }`) + })) + defer srv.Close() + + ctx := context.Background() + client := NewClient(srv.URL, UseMultipartForm()) + + ctx, cancel := context.WithTimeout(ctx, 1*time.Second) + defer cancel() + var responseData map[string]interface{} + err := client.Run(ctx, &Request{q: "query {}"}, &responseData) + is.True(err != nil) + is.Equal(err.Error(), "graphql: Something went wrong") +} + +func TestDoNoResponse(t *testing.T) { + is := is.New(t) + var calls int + srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + calls++ + is.Equal(r.Method, http.MethodPost) + query := r.FormValue("query") + is.Equal(query, `query {}`) + io.WriteString(w, `{ + "data": { + "something": "yes" + } + }`) + })) + defer srv.Close() + + ctx := context.Background() + client := NewClient(srv.URL, UseMultipartForm()) + + ctx, cancel := context.WithTimeout(ctx, 1*time.Second) + defer cancel() + err := client.Run(ctx, &Request{q: "query {}"}, nil) + is.NoErr(err) + is.Equal(calls, 1) // calls +} + +func TestQuery(t *testing.T) { + is := is.New(t) + + var calls int + srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + calls++ + query := r.FormValue("query") + is.Equal(query, "query {}") + is.Equal(r.FormValue("variables"), `{"username":"matryer"}`+"\n") + _, err := io.WriteString(w, `{"data":{"value":"some data"}}`) + is.NoErr(err) + })) + defer srv.Close() + ctx, cancel := context.WithTimeout(context.Background(), 1*time.Second) + defer cancel() + + client := NewClient(srv.URL, UseMultipartForm()) + + req := NewRequest("query {}") + req.Var("username", "matryer") + + // check variables + is.True(req != nil) + is.Equal(req.vars["username"], "matryer") + + var resp struct { + Value string + } + err := client.Run(ctx, req, &resp) + is.NoErr(err) + is.Equal(calls, 1) + + is.Equal(resp.Value, "some data") + +} + +func TestFile(t *testing.T) { + is := is.New(t) + + var calls int + srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + calls++ + file, header, err := r.FormFile("file") + is.NoErr(err) + defer file.Close() + is.Equal(header.Filename, "filename.txt") + + b, err := ioutil.ReadAll(file) + is.NoErr(err) + is.Equal(string(b), `This is a file`) + + _, err = io.WriteString(w, `{"data":{"value":"some data"}}`) + is.NoErr(err) + })) + defer srv.Close() + ctx, cancel := context.WithTimeout(context.Background(), 1*time.Second) + defer cancel() + client := NewClient(srv.URL, UseMultipartForm()) + f := strings.NewReader(`This is a file`) + req := NewRequest("query {}") + req.File("file", "filename.txt", f) + err := client.Run(ctx, req, nil) + is.NoErr(err) +} + +type roundTripperFunc func(req *http.Request) (*http.Response, error) + +func (fn roundTripperFunc) RoundTrip(req *http.Request) (*http.Response, error) { + return fn(req) +} diff --git a/internal/graphql/graphql_test.go b/internal/graphql/graphql_test.go new file mode 100644 index 0000000000..0911274e0a --- /dev/null +++ b/internal/graphql/graphql_test.go @@ -0,0 +1,376 @@ +package graphql + +import ( + "context" + "encoding/json" + "net/http" + "net/http/httptest" + "testing" +) + +func TestClient_DataPath(t *testing.T) { + mockResponse := map[string]interface{}{ + "data": map[string]interface{}{ + "users": map[string]interface{}{ + "items": []map[string]interface{}{ + {"id": "1", "name": "Alice"}, + {"id": "2", "name": "Bob"}, + }, + }, + }, + } + + server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + json.NewEncoder(w).Encode(mockResponse) + })) + defer server.Close() + + client := NewClient(server.URL) + + tests := []struct { + name string + query string + dataPath string + want interface{} + }{ + { + name: "no data path", + query: `{ + users { + items { + id + name + } + } + }`, + dataPath: "", + want: map[string]interface{}{ + "users": map[string]interface{}{ + "items": []interface{}{ + map[string]interface{}{"id": "1", "name": "Alice"}, + map[string]interface{}{"id": "2", "name": "Bob"}, + }, + }, + }, + }, + { + name: "with data path to users", + query: `{ + users { + items { + id + name + } + } + }`, + dataPath: "users", + want: map[string]interface{}{ + "items": []interface{}{ + map[string]interface{}{"id": "1", "name": "Alice"}, + map[string]interface{}{"id": "2", "name": "Bob"}, + }, + }, + }, + { + name: "named query without data path", + query: `query GetUsers { + users { + items { + id + name + } + } + }`, + dataPath: "", + want: map[string]interface{}{ + "users": map[string]interface{}{ + "items": []interface{}{ + map[string]interface{}{"id": "1", "name": "Alice"}, + map[string]interface{}{"id": "2", "name": "Bob"}, + }, + }, + }, + }, + { + name: "named query with data path", + query: `query GetUsers { + users { + items { + id + name + } + } + }`, + dataPath: "users", + want: map[string]interface{}{ + "items": []interface{}{ + map[string]interface{}{"id": "1", "name": "Alice"}, + map[string]interface{}{"id": "2", "name": "Bob"}, + }, + }, + }, + { + name: "named mutation", + query: `mutation CreateUser { + users { + items { + id + name + } + } + }`, + dataPath: "users", + want: map[string]interface{}{ + "items": []interface{}{ + map[string]interface{}{"id": "1", "name": "Alice"}, + map[string]interface{}{"id": "2", "name": "Bob"}, + }, + }, + }, + { + name: "anonymous query with items data path", + query: `{ + users { + items { + id + name + } + } + }`, + dataPath: "items", + want: []interface{}{ + map[string]interface{}{"id": "1", "name": "Alice"}, + map[string]interface{}{"id": "2", "name": "Bob"}, + }, + }, + { + name: "named query with items data path", + query: `query GetUsers { + users { + items { + id + name + } + } + }`, + dataPath: "items", + want: []interface{}{ + map[string]interface{}{"id": "1", "name": "Alice"}, + map[string]interface{}{"id": "2", "name": "Bob"}, + }, + }, + { + name: "named mutation with items data path", + query: `mutation CreateUser { + users { + items { + id + name + } + } + }`, + dataPath: "items", + want: []interface{}{ + map[string]interface{}{"id": "1", "name": "Alice"}, + map[string]interface{}{"id": "2", "name": "Bob"}, + }, + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + req := NewRequest(tt.query) + req.DataPath(tt.dataPath) + + var resp interface{} + err := client.Run(context.Background(), req, &resp) + if err != nil { + t.Fatalf("unexpected error: %v", err) + } + + got, err := json.Marshal(resp) + if err != nil { + t.Fatalf("failed to marshal response: %v", err) + } + + want, err := json.Marshal(tt.want) + if err != nil { + t.Fatalf("failed to marshal expected result: %v", err) + } + + if string(got) != string(want) { + t.Errorf("got %s, want %s", got, want) + } + }) + } +} + +func Test_inferDataPath(t *testing.T) { + tests := []struct { + name string + query string + want string + }{ + { + name: "simple query", + query: `{ + users { + id + name + } + }`, + want: "users", + }, + { + name: "query with variables", + query: `query ($id: ID!) { + user(id: $id) { + name + email + } + }`, + want: "user", + }, + { + name: "query with operation name", + query: `query GetUser { + user { + name + } + }`, + want: "user", + }, + { + name: "query with multiple fields", + query: `{ + user { + name + } + posts { + title + } + }`, + want: "user", + }, + { + name: "empty query", + query: "", + want: "", + }, + { + name: "alternate empty query", + query: `query { + query {} + }`, + want: "query", + }, + { + name: "malformed query", + query: `query { + badly formatted* + }`, + want: "badly", + }, + { + name: "named mutation", + query: `mutation CreateUser($input: UserInput!) { + createUser(input: $input) { + id + name + } + }`, + want: "createUser", + }, + { + name: "named query with aliases", + query: `query GetUserDetails { + userInfo: user { + profile { + firstName + lastName + } + settings { + theme + } + } + }`, + want: "userInfo", + }, + { + name: "complex nested query", + query: `query FetchDashboard { + dashboard { + widgets { + id + data { + chart { + points + } + } + } + } + }`, + want: "dashboard", + }, + { + name: "query with fragments", + query: `query GetUserWithPosts { + user { + ...UserFields + posts { + ...PostFields + } + } + } + + fragment UserFields on User { + id + name + } + + fragment PostFields on Post { + title + content + }`, + want: "user", + }, + { + name: "subscription", + query: `subscription OnUserUpdate { + userUpdated { + id + status + } + }`, + want: "userUpdated", + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + if got := inferDataPath(tt.query); got != tt.want { + t.Errorf("inferDataPath() = %v, want %v", got, tt.want) + } + }) + } +} + +func TestNewRequest_DataPathInference(t *testing.T) { + query := `{ + users { + id + name + } + }` + + req := NewRequest(query) + if req.dataPath != "users" { + t.Errorf("NewRequest() dataPath = %v, want %v", req.dataPath, "users") + } + + // Test that manual override works + req.DataPath("override") + if req.dataPath != "override" { + t.Errorf("DataPath() override failed, got = %v, want %v", req.dataPath, "override") + } +} diff --git a/internal/runners/packages/list.go b/internal/runners/packages/list.go index 4c39904eb9..efd27d0707 100644 --- a/internal/runners/packages/list.go +++ b/internal/runners/packages/list.go @@ -242,7 +242,7 @@ func fetchCheckpoint(commit *strfmt.UUID, auth *authentication.Auth) ([]*gqlMode return nil, nil } - checkpoint, _, err := model.FetchCheckpointForCommit(*commit, auth) + checkpoint, err := model.FetchCheckpointForCommit(*commit, auth) if err != nil && errors.Is(err, model.ErrNoData) { return nil, locale.WrapExternalError(err, "package_no_data") } diff --git a/pkg/platform/api/buildplanner/response/buildexpression.go b/pkg/platform/api/buildplanner/response/buildexpression.go deleted file mode 100644 index f8e9fefc2c..0000000000 --- a/pkg/platform/api/buildplanner/response/buildexpression.go +++ /dev/null @@ -1,7 +0,0 @@ -package response - -type BuildExpressionResponse struct { - Type string `json:"__typename"` - Commit *Commit `json:"commit"` - *Error -} diff --git a/pkg/platform/api/buildplanner/response/buildtarget.go b/pkg/platform/api/buildplanner/response/buildtarget.go deleted file mode 100644 index 2154156480..0000000000 --- a/pkg/platform/api/buildplanner/response/buildtarget.go +++ /dev/null @@ -1,7 +0,0 @@ -package response - -type BuildTargetResult struct { - Build *BuildResponse `json:"buildCommitTarget"` - *Error - *NotFoundError -} diff --git a/pkg/platform/api/buildplanner/response/commit.go b/pkg/platform/api/buildplanner/response/commit.go index 127613883b..0ae4103535 100644 --- a/pkg/platform/api/buildplanner/response/commit.go +++ b/pkg/platform/api/buildplanner/response/commit.go @@ -10,47 +10,6 @@ import ( "github.com/go-openapi/strfmt" ) -type ProjectCommitResponse struct { - Project *ProjectResponse `json:"project"` -} - -// PostProcess must satisfy gqlclient.PostProcessor interface -func (c *ProjectCommitResponse) PostProcess() error { - if c.Project == nil { - return errs.New("Project is nil") - } - - if IsErrorResponse(c.Project.Type) { - return ProcessProjectError(c.Project, "Could not get build from project response") - } - - if c.Project.Commit == nil { - return errs.New("Commit is nil") - } - - if IsErrorResponse(c.Project.Type) { - return ProcessProjectError(c.Project, "Could not get build from project response") - } - - if c.Project.Commit == nil { - return errs.New("Commit is nil") - } - - if IsErrorResponse(c.Project.Commit.Type) { - return ProcessCommitError(c.Project.Commit, "Could not get build from commit from project response") - } - - if c.Project.Commit.Build == nil { - return errs.New("Commit does not contain build") - } - - if IsErrorResponse(c.Project.Commit.Build.Type) { - return ProcessBuildError(c.Project.Commit.Build, "Could not get build from project commit response") - } - - return nil -} - func ProcessBuildError(build *BuildResponse, fallbackMessage string) error { logging.Debug("ProcessBuildError: build.Type=%s", build.Type) if build.Type == types.PlanningErrorType { diff --git a/pkg/platform/api/buildplanner/response/commiterror.go b/pkg/platform/api/buildplanner/response/commiterror.go index e5efef0793..f517f1fba4 100644 --- a/pkg/platform/api/buildplanner/response/commiterror.go +++ b/pkg/platform/api/buildplanner/response/commiterror.go @@ -73,7 +73,7 @@ type RevertCommitError struct { func (m *RevertCommitError) Error() string { return m.Message } -func ProcessRevertCommitError(rcErr *revertedCommit, fallbackMessage string) error { +func ProcessRevertCommitError(rcErr *RevertedCommit, fallbackMessage string) error { if rcErr.Type != "" { return &RevertCommitError{rcErr.Type, rcErr.Message} } @@ -87,7 +87,7 @@ type MergedCommitError struct { func (m *MergedCommitError) Error() string { return m.Message } -func ProcessMergedCommitError(mcErr *mergedCommit, fallbackMessage string) error { +func ProcessMergedCommitError(mcErr *MergedCommit, fallbackMessage string) error { if mcErr.Type != "" { return &MergedCommitError{mcErr.Type, mcErr.Message} } diff --git a/pkg/platform/api/buildplanner/response/createproject.go b/pkg/platform/api/buildplanner/response/createproject.go index ba8984a1e5..1db41851a9 100644 --- a/pkg/platform/api/buildplanner/response/createproject.go +++ b/pkg/platform/api/buildplanner/response/createproject.go @@ -4,7 +4,7 @@ import ( "github.com/ActiveState/cli/internal/errs" ) -type projectCreated struct { +type ProjectCreated struct { Type string `json:"__typename"` Commit *Commit `json:"commit"` *Error @@ -13,10 +13,6 @@ type projectCreated struct { *ForbiddenError } -type CreateProjectResult struct { - ProjectCreated *projectCreated `json:"createProject"` -} - type ProjectCreatedError struct { Type string Message string @@ -24,7 +20,7 @@ type ProjectCreatedError struct { func (p *ProjectCreatedError) Error() string { return p.Message } -func ProcessProjectCreatedError(pcErr *projectCreated, fallbackMessage string) error { +func ProcessProjectCreatedError(pcErr *ProjectCreated, fallbackMessage string) error { if pcErr.Error == nil { return errs.New(fallbackMessage) } diff --git a/pkg/platform/api/buildplanner/response/mergecommit.go b/pkg/platform/api/buildplanner/response/mergecommit.go index c112011421..aec9a7de68 100644 --- a/pkg/platform/api/buildplanner/response/mergecommit.go +++ b/pkg/platform/api/buildplanner/response/mergecommit.go @@ -1,6 +1,9 @@ package response -type mergedCommit struct { +// MergedCommit is the result of a merge commit mutation. +// The resulting commit is only pushed to the platform automatically if the target ref was a named +// branch and the merge strategy was FastForward. +type MergedCommit struct { Type string `json:"__typename"` Commit *Commit `json:"commit"` *Error @@ -12,10 +15,3 @@ type mergedCommit struct { *HeadOnBranchMovedError *NoChangeSinceLastCommitError } - -// MergeCommitResult is the result of a merge commit mutation. -// The resulting commit is only pushed to the platform automatically if the target ref was a named -// branch and the merge strategy was FastForward. -type MergeCommitResult struct { - MergedCommit *mergedCommit `json:"mergeCommit"` -} diff --git a/pkg/platform/api/buildplanner/response/project.go b/pkg/platform/api/buildplanner/response/project.go index 4fb2efefc5..356ef619ed 100644 --- a/pkg/platform/api/buildplanner/response/project.go +++ b/pkg/platform/api/buildplanner/response/project.go @@ -1,8 +1,47 @@ package response +import "github.com/ActiveState/cli/internal/errs" + // ProjectResponse contains the commit and any errors. type ProjectResponse struct { Type string `json:"__typename"` Commit *Commit `json:"commit"` *Error } + +// PostProcess must satisfy gqlclient.PostProcessor interface +func (pr *ProjectResponse) PostProcess() error { + if pr == nil { + return errs.New("Project is nil") + } + + if IsErrorResponse(pr.Type) { + return ProcessProjectError(pr, "Could not get build from project response") + } + + if pr.Commit == nil { + return errs.New("Commit is nil") + } + + if IsErrorResponse(pr.Type) { + return ProcessProjectError(pr, "Could not get build from project response") + } + + if pr.Commit == nil { + return errs.New("Commit is nil") + } + + if IsErrorResponse(pr.Commit.Type) { + return ProcessCommitError(pr.Commit, "Could not get build from commit from project response") + } + + if pr.Commit.Build == nil { + return errs.New("Commit does not contain build") + } + + if IsErrorResponse(pr.Commit.Build.Type) { + return ProcessBuildError(pr.Commit.Build, "Could not get build from project commit response") + } + + return nil +} diff --git a/pkg/platform/api/buildplanner/response/revertcommit.go b/pkg/platform/api/buildplanner/response/revertcommit.go index 525c380a65..10237ad224 100644 --- a/pkg/platform/api/buildplanner/response/revertcommit.go +++ b/pkg/platform/api/buildplanner/response/revertcommit.go @@ -4,14 +4,10 @@ import ( "github.com/go-openapi/strfmt" ) -type revertedCommit struct { +type RevertedCommit struct { Type string `json:"__typename"` Commit *Commit `json:"commit"` CommonAncestor strfmt.UUID `json:"commonAncestorID"` ConflictPaths []string `json:"conflictPaths"` *Error } - -type RevertCommitResult struct { - RevertedCommit *revertedCommit `json:"revertCommit"` -} diff --git a/pkg/platform/api/buildplanner/response/stagecommit.go b/pkg/platform/api/buildplanner/response/stagecommit.go deleted file mode 100644 index f64312f56d..0000000000 --- a/pkg/platform/api/buildplanner/response/stagecommit.go +++ /dev/null @@ -1,8 +0,0 @@ -package response - -// StageCommitResult is the result of a stage commit mutation. -// It contains the resulting commit from the operation and any errors. -// The resulting commit is NOT pushed to the platform automatically. -type StageCommitResult struct { - Commit *Commit `json:"stageCommit"` -} diff --git a/pkg/platform/api/graphql/model/publish.go b/pkg/platform/api/graphql/model/publish.go index f818ef95c4..0a5479661f 100644 --- a/pkg/platform/api/graphql/model/publish.go +++ b/pkg/platform/api/graphql/model/publish.go @@ -6,7 +6,3 @@ type PublishResult struct { IngredientVersionID string `json:"ingredientVersionID"` Revision int `json:"revision"` } - -type PublishResponse struct { - Result PublishResult `json:"publish"` -} diff --git a/pkg/platform/api/graphql/model/vcs.go b/pkg/platform/api/graphql/model/vcs.go index bd9d87b891..b32732873e 100644 --- a/pkg/platform/api/graphql/model/vcs.go +++ b/pkg/platform/api/graphql/model/vcs.go @@ -14,9 +14,3 @@ type Requirement struct { type Commit struct { AtTime strfmt.DateTime `json:"at_time"` } - -type Checkpoint struct { - Requirements []*Requirement `json:"vcs_checkpoints"` - Commit *Commit `json:"vcs_commits_by_pk"` -} - diff --git a/pkg/platform/api/graphql/request/vcs.go b/pkg/platform/api/graphql/request/vcs.go index 70dec20ce0..2dfc59d578 100644 --- a/pkg/platform/api/graphql/request/vcs.go +++ b/pkg/platform/api/graphql/request/vcs.go @@ -23,13 +23,32 @@ func (p *checkpointByCommit) Query() string { version_constraint constraint_json } + }` +} + +func (p *checkpointByCommit) Vars() (map[string]interface{}, error) { + return p.vars, nil +} + +// New request type for commit details +func CommitByID(commitID strfmt.UUID) *commitByID { + return &commitByID{vars: map[string]interface{}{ + "commit_id": commitID, + }} +} + +type commitByID struct { + vars map[string]interface{} +} + +func (p *commitByID) Query() string { + return `query ($commit_id: uuid!) { vcs_commits_by_pk(commit_id: $commit_id) { at_time } - } - ` + }` } -func (p *checkpointByCommit) Vars() (map[string]interface{}, error) { +func (p *commitByID) Vars() (map[string]interface{}, error) { return p.vars, nil } diff --git a/pkg/platform/api/hasura_inventory/model/inventory.go b/pkg/platform/api/hasura_inventory/model/inventory.go index 689cc89ddf..5c03030c92 100644 --- a/pkg/platform/api/hasura_inventory/model/inventory.go +++ b/pkg/platform/api/hasura_inventory/model/inventory.go @@ -7,7 +7,3 @@ import ( type LastIngredientRevisionTime struct { RevisionTime strfmt.DateTime `json:"revision_time"` } - -type LatestRevisionResponse struct { - RevisionTimes []LastIngredientRevisionTime `json:"last_ingredient_revision_time"` -} diff --git a/pkg/platform/api/mediator/model/cve.go b/pkg/platform/api/mediator/model/cve.go index 1422a5af2f..1f62cddf9d 100644 --- a/pkg/platform/api/mediator/model/cve.go +++ b/pkg/platform/api/mediator/model/cve.go @@ -41,10 +41,6 @@ type ProjectVulnerabilities struct { Message *string `json:"message,omitempty"` } -type ProjectResponse struct { - ProjectVulnerabilities `json:"project"` -} - type CommitVulnerabilities struct { CommitID string `json:"commit_id"` VulnerabilityHistogram []SeverityCount `json:"vulnerability_histogram"` @@ -53,10 +49,6 @@ type CommitVulnerabilities struct { Message *string `json:"message,omitempty"` } -type CommitResponse struct { - CommitVulnerabilities `json:"commit"` -} - type SeverityCount struct { Severity string `json:"severity"` Count int `json:"count"` diff --git a/pkg/platform/api/mediator/model/supportedlangs.go b/pkg/platform/api/mediator/model/supportedlangs.go index 9d656799f0..a1044efe23 100644 --- a/pkg/platform/api/mediator/model/supportedlangs.go +++ b/pkg/platform/api/mediator/model/supportedlangs.go @@ -1,10 +1,6 @@ package model -// SupportedLanguagesResponse is a struct for the payload of the supported languages mediator endpoint -type SupportedLanguagesResponse struct { - Languages []SupportedLanguage `json:"unstableSupportedLanguages"` -} - +// SupportedLanguage is a struct for the payload of the supported languages mediator endpoint type SupportedLanguage struct { Name string `json:"name"` DefaultVersion string `json:"default_version"` diff --git a/pkg/platform/api/vulnerabilities/model/vulnerabilities.go b/pkg/platform/api/vulnerabilities/model/vulnerabilities.go index dd37854d05..f6e3a63c93 100644 --- a/pkg/platform/api/vulnerabilities/model/vulnerabilities.go +++ b/pkg/platform/api/vulnerabilities/model/vulnerabilities.go @@ -7,10 +7,6 @@ const ( SeverityLow = "low" ) -type VulnerabilitiesResponse struct { - Vulnerabilities []VulnerableIngredientsFilter `json:"vulnerabilities"` -} - type VulnerableIngredientsFilter struct { Name string `json:"name"` PrimaryNamespace string `json:"primary_namespace"` diff --git a/pkg/platform/model/buildplanner/build.go b/pkg/platform/model/buildplanner/build.go index feef9b1a28..ea5196ab2f 100644 --- a/pkg/platform/model/buildplanner/build.go +++ b/pkg/platform/model/buildplanner/build.go @@ -10,6 +10,7 @@ import ( "github.com/ActiveState/cli/internal/errs" "github.com/ActiveState/cli/internal/gqlclient" + "github.com/ActiveState/cli/internal/graphql" "github.com/ActiveState/cli/internal/locale" "github.com/ActiveState/cli/internal/logging" "github.com/ActiveState/cli/internal/rtutils/ptr" @@ -20,7 +21,6 @@ import ( "github.com/ActiveState/cli/pkg/platform/api/buildplanner/response" "github.com/ActiveState/cli/pkg/platform/api/buildplanner/types" "github.com/ActiveState/cli/pkg/platform/api/reqsimport" - "github.com/ActiveState/graphql" "github.com/go-openapi/strfmt" ) @@ -58,7 +58,7 @@ const fetchCommitCacheExpiry = time.Hour * 12 func (b *BuildPlanner) FetchCommit(commitID strfmt.UUID, owner, project string, target *string) (*Commit, error) { logging.Debug("FetchCommit, commitID: %s, owner: %s, project: %s", commitID, owner, project) - resp := &response.ProjectCommitResponse{} + resp := &response.ProjectResponse{} cacheKey := strings.Join([]string{"FetchCommit", commitID.String(), owner, project, ptr.From(target, "")}, "-") respRaw, err := b.cache.GetCache(cacheKey) @@ -78,7 +78,7 @@ func (b *BuildPlanner) FetchCommit(commitID strfmt.UUID, owner, project string, } return nil, err } - if resp.Project.Commit.Build.Status == raw.Completed { + if resp.Commit.Build.Status == raw.Completed { respBytes, err := json.Marshal(resp) if err != nil { return nil, errs.Wrap(err, "failed to marshal cache") @@ -92,14 +92,14 @@ func (b *BuildPlanner) FetchCommit(commitID strfmt.UUID, owner, project string, // The BuildPlanner will return a build plan with a status of // "planning" if the build plan is not ready yet. We need to // poll the BuildPlanner until the build is ready. - if resp.Project.Commit.Build.Status == raw.Planning { - resp.Project.Commit.Build, err = b.pollBuildPlanned(commitID.String(), owner, project, target) + if resp.Commit.Build.Status == raw.Planning { + resp.Commit.Build, err = b.pollBuildPlanned(commitID.String(), owner, project, target) if err != nil { return nil, errs.Wrap(err, "failed to poll build plan") } } - commit := resp.Project.Commit + commit := resp.Commit bp, err := buildplan.Unmarshal(commit.Build.RawMessage) if err != nil { @@ -230,7 +230,7 @@ func VersionStringToRequirements(version string) ([]types.VersionRequirement, er // pollBuildPlanned polls the buildplan until it has passed the planning stage (ie. it's either planned or further along). func (b *BuildPlanner) pollBuildPlanned(commitID, owner, project string, target *string) (*response.BuildResponse, error) { - resp := &response.ProjectCommitResponse{} + resp := &response.ProjectResponse{} ticker := time.NewTicker(pollInterval) for { select { @@ -244,7 +244,7 @@ func (b *BuildPlanner) pollBuildPlanned(commitID, owner, project string, target return nil, errs.New("Build plan response is nil") } - build := resp.Project.Commit.Build + build := resp.Commit.Build if build.Status != raw.Planning { return build, nil @@ -265,18 +265,18 @@ func (e ErrFailedArtifacts) Error() string { func (bp *BuildPlanner) BuildTarget(owner, project, commitID, target string) error { logging.Debug("BuildTarget, owner: %s, project: %s, commitID: %s, target: %s", owner, project, commitID, target) - resp := &response.BuildTargetResult{} + resp := &response.BuildResponse{} err := bp.client.Run(request.Evaluate(owner, project, commitID, target), resp) if err != nil { return processBuildPlannerError(err, "Failed to evaluate target") } - if resp.Build == nil { + if resp == nil { return errs.New("Build is nil") } - if response.IsErrorResponse(resp.Build.Type) { - return response.ProcessBuildError(resp.Build, "Could not process error response from evaluate target") + if response.IsErrorResponse(resp.Type) { + return response.ProcessBuildError(resp, "Could not process error response from evaluate target") } return nil @@ -285,7 +285,7 @@ func (bp *BuildPlanner) BuildTarget(owner, project, commitID, target string) err // WaitForBuild polls the build until it has passed the completed stage (ie. it's either successful or failed). func (b *BuildPlanner) WaitForBuild(commitID strfmt.UUID, owner, project string, target *string) error { failedArtifacts := map[strfmt.UUID]*response.ArtifactResponse{} - resp := &response.ProjectCommitResponse{} + resp := &response.ProjectResponse{} ticker := time.NewTicker(pollInterval) for { select { @@ -299,7 +299,7 @@ func (b *BuildPlanner) WaitForBuild(commitID strfmt.UUID, owner, project string, return errs.New("Build plan response is nil") } - build := resp.Project.Commit.Build + build := resp.Commit.Build // If the build status is planning it may not have any artifacts yet. if build.Status == raw.Planning { diff --git a/pkg/platform/model/buildplanner/buildplanner.go b/pkg/platform/model/buildplanner/buildplanner.go index 72468b839b..dd566307ba 100644 --- a/pkg/platform/model/buildplanner/buildplanner.go +++ b/pkg/platform/model/buildplanner/buildplanner.go @@ -4,10 +4,10 @@ import ( "time" "github.com/ActiveState/cli/internal/gqlclient" + "github.com/ActiveState/cli/internal/graphql" "github.com/ActiveState/cli/internal/logging" "github.com/ActiveState/cli/pkg/platform/api" "github.com/ActiveState/cli/pkg/platform/authentication" - "github.com/ActiveState/graphql" ) const clientDeprecationErrorKey = "CLIENT_DEPRECATION_ERROR" diff --git a/pkg/platform/model/buildplanner/buildscript.go b/pkg/platform/model/buildplanner/buildscript.go index c6fcc6a2ee..3826a220f3 100644 --- a/pkg/platform/model/buildplanner/buildscript.go +++ b/pkg/platform/model/buildplanner/buildscript.go @@ -14,7 +14,7 @@ import ( func (b *BuildPlanner) GetBuildScript(commitID string) (*buildscript.BuildScript, error) { logging.Debug("GetBuildScript, commitID: %s", commitID) - resp := &bpResp.BuildExpressionResponse{} + resp := &bpResp.Commit{} cacheKey := strings.Join([]string{"GetBuildScript", commitID}, "-") respRaw, err := b.cache.GetCache(cacheKey) @@ -39,21 +39,21 @@ func (b *BuildPlanner) GetBuildScript(commitID string) (*buildscript.BuildScript } } - if resp.Commit == nil { + if resp == nil { return nil, errs.New("Commit is nil") } - if bpResp.IsErrorResponse(resp.Commit.Type) { - return nil, bpResp.ProcessCommitError(resp.Commit, "Could not get build expression from commit") + if bpResp.IsErrorResponse(resp.Type) { + return nil, bpResp.ProcessCommitError(resp, "Could not get build expression from commit") } - if resp.Commit.Expression == nil { + if resp.Expression == nil { return nil, errs.New("Commit does not contain expression") } script := buildscript.New() - script.SetAtTime(time.Time(resp.Commit.AtTime), false) - if err := script.UnmarshalBuildExpression(resp.Commit.Expression); err != nil { + script.SetAtTime(time.Time(resp.AtTime), false) + if err := script.UnmarshalBuildExpression(resp.Expression); err != nil { return nil, errs.Wrap(err, "failed to parse build expression") } diff --git a/pkg/platform/model/buildplanner/commit.go b/pkg/platform/model/buildplanner/commit.go index 3086d32930..10d2bef641 100644 --- a/pkg/platform/model/buildplanner/commit.go +++ b/pkg/platform/model/buildplanner/commit.go @@ -45,80 +45,80 @@ func (b *BuildPlanner) StageCommit(params StageCommitParams) (*Commit, error) { // With the updated build expression call the stage commit mutation request := request.StageCommit(params.Owner, params.Project, params.ParentCommit, params.Description, script.AtTime(), expression) - resp := &response.StageCommitResult{} + resp := &response.Commit{} if err := b.client.Run(request, resp); err != nil { return nil, processBuildPlannerError(err, "failed to stage commit") } - if resp.Commit == nil { + if resp == nil { return nil, errs.New("Staged commit is nil") } - if response.IsErrorResponse(resp.Commit.Type) { - return nil, response.ProcessCommitError(resp.Commit, "Could not process error response from stage commit") + if response.IsErrorResponse(resp.Type) { + return nil, response.ProcessCommitError(resp, "Could not process error response from stage commit") } - if resp.Commit.CommitID == "" { + if resp.CommitID == "" { return nil, errs.New("Staged commit does not contain commitID") } - if response.IsErrorResponse(resp.Commit.Build.Type) { - return &Commit{resp.Commit, nil, nil}, response.ProcessBuildError(resp.Commit.Build, "Could not process error response from stage commit") + if response.IsErrorResponse(resp.Build.Type) { + return &Commit{resp, nil, nil}, response.ProcessBuildError(resp.Build, "Could not process error response from stage commit") } // The BuildPlanner will return a build plan with a status of // "planning" if the build plan is not ready yet. We need to // poll the BuildPlanner until the build is ready. - if resp.Commit.Build.Status == raw.Planning { - resp.Commit.Build, err = b.pollBuildPlanned(resp.Commit.CommitID.String(), params.Owner, params.Project, nil) + if resp.Build.Status == raw.Planning { + resp.Build, err = b.pollBuildPlanned(resp.CommitID.String(), params.Owner, params.Project, nil) if err != nil { return nil, errs.Wrap(err, "failed to poll build plan") } } - bp, err := buildplan.Unmarshal(resp.Commit.Build.RawMessage) + bp, err := buildplan.Unmarshal(resp.Build.RawMessage) if err != nil { return nil, errs.Wrap(err, "failed to unmarshal build plan") } stagedScript := buildscript.New() - stagedScript.SetAtTime(time.Time(resp.Commit.AtTime), false) - if err := stagedScript.UnmarshalBuildExpression(resp.Commit.Expression); err != nil { + stagedScript.SetAtTime(time.Time(resp.AtTime), false) + if err := stagedScript.UnmarshalBuildExpression(resp.Expression); err != nil { return nil, errs.Wrap(err, "failed to parse build expression") } - return &Commit{resp.Commit, bp, stagedScript}, nil + return &Commit{resp, bp, stagedScript}, nil } func (b *BuildPlanner) RevertCommit(organization, project, parentCommitID, commitID string) (strfmt.UUID, error) { logging.Debug("RevertCommit, organization: %s, project: %s, commitID: %s", organization, project, commitID) - resp := &response.RevertCommitResult{} + resp := &response.RevertedCommit{} err := b.client.Run(request.RevertCommit(organization, project, parentCommitID, commitID), resp) if err != nil { return "", processBuildPlannerError(err, "Failed to revert commit") } - if resp.RevertedCommit == nil { + if resp == nil { return "", errs.New("Revert commit response is nil") } - if response.IsErrorResponse(resp.RevertedCommit.Type) { - return "", response.ProcessRevertCommitError(resp.RevertedCommit, "Could not revert commit") + if response.IsErrorResponse(resp.Type) { + return "", response.ProcessRevertCommitError(resp, "Could not revert commit") } - if resp.RevertedCommit.Commit == nil { + if resp.Commit == nil { return "", errs.New("Revert commit's commit is nil'") } - if response.IsErrorResponse(resp.RevertedCommit.Commit.Type) { - return "", response.ProcessCommitError(resp.RevertedCommit.Commit, "Could not process error response from revert commit") + if response.IsErrorResponse(resp.Commit.Type) { + return "", response.ProcessCommitError(resp.Commit, "Could not process error response from revert commit") } - if resp.RevertedCommit.Commit.CommitID == "" { + if resp.Commit.CommitID == "" { return "", errs.New("Commit does not contain commitID") } - return resp.RevertedCommit.Commit.CommitID, nil + return resp.Commit.CommitID, nil } type MergeCommitParams struct { @@ -132,27 +132,27 @@ type MergeCommitParams struct { func (b *BuildPlanner) MergeCommit(params *MergeCommitParams) (strfmt.UUID, error) { logging.Debug("MergeCommit, owner: %s, project: %s", params.Owner, params.Project) request := request.MergeCommit(params.Owner, params.Project, params.TargetRef, params.OtherRef, params.Strategy) - resp := &response.MergeCommitResult{} + resp := &response.MergedCommit{} err := b.client.Run(request, resp) if err != nil { return "", processBuildPlannerError(err, "Failed to merge commit") } - if resp.MergedCommit == nil { + if resp == nil { return "", errs.New("MergedCommit is nil") } - if response.IsErrorResponse(resp.MergedCommit.Type) { - return "", response.ProcessMergedCommitError(resp.MergedCommit, "Could not merge commit") + if response.IsErrorResponse(resp.Type) { + return "", response.ProcessMergedCommitError(resp, "Could not merge commit") } - if resp.MergedCommit.Commit == nil { + if resp.Commit == nil { return "", errs.New("Merge commit's commit is nil'") } - if response.IsErrorResponse(resp.MergedCommit.Commit.Type) { - return "", response.ProcessCommitError(resp.MergedCommit.Commit, "Could not process error response from merge commit") + if response.IsErrorResponse(resp.Commit.Type) { + return "", response.ProcessCommitError(resp.Commit, "Could not process error response from merge commit") } - return resp.MergedCommit.Commit.CommitID, nil + return resp.Commit.CommitID, nil } diff --git a/pkg/platform/model/buildplanner/project.go b/pkg/platform/model/buildplanner/project.go index 9eb7dcb34d..fbb501e786 100644 --- a/pkg/platform/model/buildplanner/project.go +++ b/pkg/platform/model/buildplanner/project.go @@ -60,22 +60,22 @@ func (b *BuildPlanner) CreateProject(params *CreateProjectParams) (strfmt.UUID, // Create the project. request := request.CreateProject(params.Owner, params.Project, params.Private, expression, params.Description) - resp := &response.CreateProjectResult{} + resp := &response.ProjectCreated{} if err := b.client.Run(request, resp); err != nil { return "", processBuildPlannerError(err, "Failed to create project") } - if resp.ProjectCreated == nil { + if resp == nil { return "", errs.New("ProjectCreated is nil") } - if response.IsErrorResponse(resp.ProjectCreated.Type) { - return "", response.ProcessProjectCreatedError(resp.ProjectCreated, "Could not create project") + if response.IsErrorResponse(resp.Type) { + return "", response.ProcessProjectCreatedError(resp, "Could not create project") } - if resp.ProjectCreated.Commit == nil { + if resp.Commit == nil { return "", errs.New("ProjectCreated.Commit is nil") } - return resp.ProjectCreated.Commit.CommitID, nil + return resp.Commit.CommitID, nil } diff --git a/pkg/platform/model/buildplanner/publish.go b/pkg/platform/model/buildplanner/publish.go index 4f23d06802..3b6ca644f9 100644 --- a/pkg/platform/model/buildplanner/publish.go +++ b/pkg/platform/model/buildplanner/publish.go @@ -11,15 +11,15 @@ func (b *BuildPlanner) Publish(vars request.PublishVariables, filepath string) ( if err != nil { return nil, errs.Wrap(err, "Could not create publish request") } - res := graphModel.PublishResponse{} + res := graphModel.PublishResult{} if err := b.client.Run(pr, &res); err != nil { return nil, processBuildPlannerError(err, "Publish failed") } - if res.Result.Error != "" { - return nil, errs.New("API responded with error: %s", res.Result.Error) + if res.Error != "" { + return nil, errs.New("API responded with error: %s", res.Error) } - return &res.Result, nil + return &res, nil } diff --git a/pkg/platform/model/checkpoints.go b/pkg/platform/model/checkpoints.go index 87f491a940..3ca70b00d2 100644 --- a/pkg/platform/model/checkpoints.go +++ b/pkg/platform/model/checkpoints.go @@ -11,7 +11,6 @@ import ( "github.com/ActiveState/cli/internal/constants" "github.com/ActiveState/cli/internal/errs" - "github.com/ActiveState/cli/internal/locale" "github.com/ActiveState/cli/internal/logging" "github.com/ActiveState/cli/pkg/platform/api/graphql" gqlModel "github.com/ActiveState/cli/pkg/platform/api/graphql/model" @@ -35,7 +34,7 @@ type Language struct { // GetRequirement searches a commit for a requirement by name. func GetRequirement(commitID strfmt.UUID, namespace Namespace, requirement string, auth *authentication.Auth) (*gqlModel.Requirement, error) { - chkPt, _, err := FetchCheckpointForCommit(commitID, auth) + chkPt, err := FetchCheckpointForCommit(commitID, auth) if err != nil { return nil, err } @@ -53,7 +52,7 @@ func GetRequirement(commitID strfmt.UUID, namespace Namespace, requirement strin // FetchLanguagesForCommit fetches a list of language names for the given commit func FetchLanguagesForCommit(commitID strfmt.UUID, auth *authentication.Auth) ([]Language, error) { - checkpoint, _, err := FetchCheckpointForCommit(commitID, auth) + checkpoint, err := FetchCheckpointForCommit(commitID, auth) if err != nil { return nil, err } @@ -95,25 +94,38 @@ func FetchLanguagesForBuildScript(script *buildscript.BuildScript) ([]Language, } // FetchCheckpointForCommit fetches the checkpoint for the given commit -func FetchCheckpointForCommit(commitID strfmt.UUID, auth *authentication.Auth) ([]*gqlModel.Requirement, strfmt.DateTime, error) { +func FetchCheckpointForCommit(commitID strfmt.UUID, auth *authentication.Auth) ([]*gqlModel.Requirement, error) { logging.Debug("fetching checkpoint (%s)", commitID.String()) request := request.CheckpointByCommit(commitID) gql := graphql.New(auth) - response := gqlModel.Checkpoint{} + response := []*gqlModel.Requirement{} err := gql.Run(request, &response) if err != nil { - return nil, strfmt.DateTime{}, errs.Wrap(err, "gql.Run failed") + return nil, errs.Wrap(err, "gql.Run failed") } - logging.Debug("Returning %d requirements", len(response.Requirements)) + logging.Debug("Returning %d requirements", len(response)) - if response.Commit == nil { - return nil, strfmt.DateTime{}, locale.WrapError(ErrNoData, "err_no_data_found") + return response, nil +} + +func FetchAtTimeForCommit(commitID strfmt.UUID, auth *authentication.Auth) (strfmt.DateTime, error) { + logging.Debug("fetching atTime for commit (%s)", commitID.String()) + + request := request.CommitByID(commitID) + + gql := graphql.New(auth) + response := gqlModel.Commit{} + err := gql.Run(request, &response) + if err != nil { + return strfmt.DateTime{}, errs.Wrap(err, "gql.Run failed") } - return response.Requirements, response.Commit.AtTime, nil + logging.Debug("Returning %s", response.AtTime) + + return response.AtTime, nil } func GqlReqsToMonoCheckpoint(requirements []*gqlModel.Requirement) []*mono_models.Checkpoint { diff --git a/pkg/platform/model/cve.go b/pkg/platform/model/cve.go index 040086e2df..97a9696026 100644 --- a/pkg/platform/model/cve.go +++ b/pkg/platform/model/cve.go @@ -27,22 +27,22 @@ func FetchProjectVulnerabilities(auth *authentication.Auth, org, project string) ) } req := request.VulnerabilitiesByProject(org, project) - var resp model.ProjectResponse + var resp model.ProjectVulnerabilities med := mediator.New(auth) err := med.Run(req, &resp) if err != nil { return nil, errs.Wrap(err, "Failed to run mediator request.") } - msg := resp.ProjectVulnerabilities.Message + msg := resp.Message if msg != nil { - if resp.ProjectVulnerabilities.TypeName == "NotFound" { + if resp.TypeName == "NotFound" { return nil, &ErrProjectNotFound{org, project} } return nil, locale.NewError("project_vulnerability_err", "Request to retrieve vulnerability information failed with error: {{.V0}}", *msg) } - return &resp.ProjectVulnerabilities, nil + return &resp, nil } // FetchCommitVulnerabilities returns the vulnerability information of a project @@ -55,7 +55,7 @@ func FetchCommitVulnerabilities(auth *authentication.Auth, commitID string) (*mo ) } req := request.VulnerabilitiesByCommit(commitID) - var resp model.CommitResponse + var resp model.CommitVulnerabilities med := mediator.New(auth) err := med.Run(req, &resp) if err != nil { @@ -67,7 +67,7 @@ func FetchCommitVulnerabilities(auth *authentication.Auth, commitID string) (*mo return nil, locale.NewError("commit_vulnerability_err", "Request to retrieve vulnerability information for commit {{.V0}} failed with error: {{.V1}}", commitID, *msg) } - return removeModerateSeverity(resp.CommitVulnerabilities), nil + return removeModerateSeverity(resp), nil } func removeModerateSeverity(cv model.CommitVulnerabilities) *model.CommitVulnerabilities { diff --git a/pkg/platform/model/inventory.go b/pkg/platform/model/inventory.go index aa4176e151..ab719b75f6 100644 --- a/pkg/platform/model/inventory.go +++ b/pkg/platform/model/inventory.go @@ -300,7 +300,7 @@ func FetchPlatformsMap() (map[strfmt.UUID]*Platform, error) { } func FetchPlatformsForCommit(commitID strfmt.UUID, auth *authentication.Auth) ([]*Platform, error) { - checkpt, _, err := FetchCheckpointForCommit(commitID, auth) + checkpt, err := FetchCheckpointForCommit(commitID, auth) if err != nil { return nil, err } @@ -636,14 +636,14 @@ func FetchLatestTimeStamp(auth *authentication.Auth) (time.Time, error) { func FetchLatestRevisionTimeStamp(auth *authentication.Auth) (time.Time, error) { client := hsInventory.New(auth) request := hsInventoryRequest.NewLatestRevision() - response := hsInventoryModel.LatestRevisionResponse{} + response := []hsInventoryModel.LastIngredientRevisionTime{} err := client.Run(request, &response) if err != nil { return time.Now(), errs.Wrap(err, "Failed to get latest change time") } // Increment time by 1 second to work around API precision issue where same second comparisons can fall on either side - t := time.Time(response.RevisionTimes[0].RevisionTime) + t := time.Time(response[0].RevisionTime) t = t.Add(time.Second) return t, nil diff --git a/pkg/platform/model/organizations.go b/pkg/platform/model/organizations.go index 6afba14bed..dd5ff56dfb 100644 --- a/pkg/platform/model/organizations.go +++ b/pkg/platform/model/organizations.go @@ -125,17 +125,17 @@ func FetchOrganizationsByIDs(ids []strfmt.UUID, auth *authentication.Auth) ([]mo request := request.OrganizationsByIDs(ids) gql := graphql.New(auth) - response := model.Organizations{} + response := []model.Organization{} err := gql.Run(request, &response) if err != nil { return nil, errs.Wrap(err, "gql.Run failed") } - if len(response.Organizations) != len(ids) { - logging.Debug("Organization membership mismatch: %d members returned for %d members requested. Caller must account for this.", len(response.Organizations), len(ids)) + if len(response) != len(ids) { + logging.Debug("Organization membership mismatch: %d members returned for %d members requested. Caller must account for this.", len(response), len(ids)) } - return response.Organizations, nil + return response, nil } func processOrgErrorResponse(err error) error { diff --git a/pkg/platform/model/projects.go b/pkg/platform/model/projects.go index 9adb161b63..4a31c69333 100644 --- a/pkg/platform/model/projects.go +++ b/pkg/platform/model/projects.go @@ -55,17 +55,17 @@ func FetchProjectByName(orgName string, projectName string, auth *authentication request := request.ProjectByOrgAndName(orgName, projectName) gql := graphql.New(auth) - response := model.Projects{} + response := []model.Project{} err := gql.Run(request, &response) if err != nil { return nil, errs.Wrap(err, "GraphQL request failed") } - if len(response.Projects) == 0 { + if len(response) == 0 { return nil, &ErrProjectNotFound{orgName, projectName} } - return response.Projects[0].ToMonoProject() + return response[0].ToMonoProject() } // FetchOrganizationProjects fetches the projects for an organization @@ -105,7 +105,7 @@ func LanguageByCommit(commitID strfmt.UUID, auth *authentication.Auth) (Language } func FetchTimeStampForCommit(commitID strfmt.UUID, auth *authentication.Auth) (*time.Time, error) { - _, atTime, err := FetchCheckpointForCommit(commitID, auth) + atTime, err := FetchAtTimeForCommit(commitID, auth) if err != nil { return nil, errs.Wrap(err, "Unable to fetch checkpoint for commit ID") } diff --git a/pkg/platform/model/supportedlangs.go b/pkg/platform/model/supportedlangs.go index 3241f133dc..85ee940485 100644 --- a/pkg/platform/model/supportedlangs.go +++ b/pkg/platform/model/supportedlangs.go @@ -11,11 +11,11 @@ import ( func FetchSupportedLanguages(osPlatformName string) ([]model.SupportedLanguage, error) { kernelName := HostPlatformToKernelName(osPlatformName) req := request.SupportedLanguages(kernelName) - var resp model.SupportedLanguagesResponse + var resp []model.SupportedLanguage med := mediator.New(nil) err := med.Run(req, &resp) if err != nil { return nil, errs.Wrap(err, "Failed to run mediator request.") } - return resp.Languages, nil + return resp, nil } diff --git a/pkg/platform/model/svc.go b/pkg/platform/model/svc.go index 613f952236..1505040a8c 100644 --- a/pkg/platform/model/svc.go +++ b/pkg/platform/model/svc.go @@ -12,12 +12,12 @@ import ( "github.com/ActiveState/cli/internal/errs" "github.com/ActiveState/cli/internal/gqlclient" "github.com/ActiveState/cli/internal/graph" + "github.com/ActiveState/cli/internal/graphql" "github.com/ActiveState/cli/internal/logging" "github.com/ActiveState/cli/internal/profile" "github.com/ActiveState/cli/internal/rtutils/ptr" "github.com/ActiveState/cli/pkg/platform/api/mono/mono_models" "github.com/ActiveState/cli/pkg/platform/api/svc/request" - "github.com/ActiveState/graphql" ) var SvcTimeoutMinimal = time.Millisecond * 500 @@ -130,12 +130,12 @@ func (m *SvcModel) CheckMessages(ctx context.Context, command string, flags []st defer profile.Measure("svc:CheckMessages", time.Now()) r := request.NewMessagingRequest(command, flags) - resp := graph.CheckMessagesResponse{} + resp := []*graph.MessageInfo{} if err := m.request(ctx, r, &resp); err != nil { return nil, errs.Wrap(err, "Error sending messages request") } - return resp.Messages, nil + return resp, nil } func (m *SvcModel) ConfigChanged(ctx context.Context, key string) error { @@ -170,12 +170,12 @@ func (m *SvcModel) GetProcessesInUse(ctx context.Context, execDir string) ([]*gr defer profile.Measure("svc:GetProcessesInUse", time.Now()) req := request.NewGetProcessesInUse(execDir) - response := graph.GetProcessesInUseResponse{} + response := []*graph.ProcessInfo{} if err := m.request(ctx, req, &response); err != nil { return nil, errs.Wrap(err, "Error sending GetProcessesInUse request to state-svc") } - return response.Processes, nil + return response, nil } // GetJWT grabs the JWT from the svc, if it exists. @@ -205,14 +205,14 @@ func (m *SvcModel) GetCache(key string) (result string, _ error) { defer profile.Measure("svc:GetCache", time.Now()) req := request.NewGetCache(key) - response := make(map[string]string) + var response string if err := m.request(context.Background(), req, &response); err != nil { return "", errs.Wrap(err, "Error sending GetCache request to state-svc") } - if entry, ok := response["getCache"]; ok { - return entry, nil + if response != "" { + return response, nil } - return "", errs.New("svcModel.GetCache() did not return an expected value") + return "", nil } func (m *SvcModel) SetCache(key, value string, expiry time.Duration) error { diff --git a/pkg/platform/model/vulnerabilities.go b/pkg/platform/model/vulnerabilities.go index f8e57aeffa..d50f57e409 100644 --- a/pkg/platform/model/vulnerabilities.go +++ b/pkg/platform/model/vulnerabilities.go @@ -69,14 +69,14 @@ func FetchVulnerabilitiesForIngredients(auth *authentication.Auth, ingredients [ med := vulnerabilities.New(auth) req := request.VulnerabilitiesByIngredients(requestIngredients) - var resp model.VulnerabilitiesResponse + var resp []model.VulnerableIngredientsFilter err := med.Run(req, &resp) if err != nil { return nil, errs.Wrap(err, "Failed to run vulnerabilities request") } vulnerabilities := make(map[string]*VulnerabilityIngredient) - for _, v := range resp.Vulnerabilities { + for _, v := range resp { key := fmt.Sprintf("%s/%s/%s", v.PrimaryNamespace, v.Name, v.Version) if _, ok := vulnerabilities[key]; !ok { vulnerabilities[key] = &VulnerabilityIngredient{ diff --git a/vendor/github.com/ActiveState/graphql/.gitignore b/vendor/github.com/ActiveState/graphql/.gitignore deleted file mode 100644 index a1338d6851..0000000000 --- a/vendor/github.com/ActiveState/graphql/.gitignore +++ /dev/null @@ -1,14 +0,0 @@ -# Binaries for programs and plugins -*.exe -*.dll -*.so -*.dylib - -# Test binary, build with `go test -c` -*.test - -# Output of the go coverage tool, specifically when used with LiteIDE -*.out - -# Project-local glide cache, RE: https://github.com/Masterminds/glide/issues/736 -.glide/ diff --git a/vendor/github.com/ActiveState/graphql/.travis.yml b/vendor/github.com/ActiveState/graphql/.travis.yml deleted file mode 100644 index 715ae6a2ca..0000000000 --- a/vendor/github.com/ActiveState/graphql/.travis.yml +++ /dev/null @@ -1,16 +0,0 @@ -language: go - -go: - - 1.7.x - - 1.8.x - - 1.9.x - -before_install: - - go get github.com/golang/lint/golint - -before_script: - - go vet ./... - - golint ./... - -script: - - go test -v ./... diff --git a/vendor/github.com/ActiveState/graphql/LICENSE b/vendor/github.com/ActiveState/graphql/LICENSE deleted file mode 100644 index 9b0dfaa85e..0000000000 --- a/vendor/github.com/ActiveState/graphql/LICENSE +++ /dev/null @@ -1,201 +0,0 @@ - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright 2017 Machine Box, Ltd. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. diff --git a/vendor/github.com/ActiveState/graphql/README.md b/vendor/github.com/ActiveState/graphql/README.md deleted file mode 100644 index 2836c7eee2..0000000000 --- a/vendor/github.com/ActiveState/graphql/README.md +++ /dev/null @@ -1,67 +0,0 @@ -# graphql [![GoDoc](https://godoc.org/github.com/machinebox/graphql?status.png)](http://godoc.org/github.com/machinebox/graphql) [![Build Status](https://travis-ci.org/machinebox/graphql.svg?branch=master)](https://travis-ci.org/machinebox/graphql) [![Go Report Card](https://goreportcard.com/badge/github.com/machinebox/graphql)](https://goreportcard.com/report/github.com/machinebox/graphql) - -Low-level GraphQL client for Go. - -* Simple, familiar API -* Respects `context.Context` timeouts and cancellation -* Build and execute any kind of GraphQL request -* Use strong Go types for response data -* Use variables and upload files -* Simple error handling - -## Installation -Make sure you have a working Go environment. To install graphql, simply run: - -``` -$ go get github.com/machinebox/graphql -``` - -## Usage - -```go -import "context" - -// create a client (safe to share across requests) -client := graphql.NewClient("https://machinebox.io/graphql") - -// make a request -req := graphql.NewRequest(` - query ($key: String!) { - items (id:$key) { - field1 - field2 - field3 - } - } -`) - -// set any variables -req.Var("key", "value") - -// set header fields -req.Header.Set("Cache-Control", "no-cache") - -// define a Context for the request -ctx := context.Background() - -// run it and capture the response -var respData ResponseStruct -if err := client.Run(ctx, req, &respData); err != nil { - log.Fatal(err) -} -``` - -### File support via multipart form data - -By default, the package will send a JSON body. To enable the sending of files, you can opt to -use multipart form data instead using the `UseMultipartForm` option when you create your `Client`: - -``` -client := graphql.NewClient("https://machinebox.io/graphql", graphql.UseMultipartForm()) -``` - -For more information, [read the godoc package documentation](http://godoc.org/github.com/machinebox/graphql) or the [blog post](https://blog.machinebox.io/a-graphql-client-library-for-go-5bffd0455878). - -## Thanks - -Thanks to [Chris Broadfoot](https://github.com/broady) for design help. diff --git a/vendor/github.com/matryer/is/.gitignore b/vendor/github.com/matryer/is/.gitignore new file mode 100644 index 0000000000..daf913b1b3 --- /dev/null +++ b/vendor/github.com/matryer/is/.gitignore @@ -0,0 +1,24 @@ +# Compiled Object files, Static and Dynamic libs (Shared Objects) +*.o +*.a +*.so + +# Folders +_obj +_test + +# Architecture specific extensions/prefixes +*.[568vq] +[568vq].out + +*.cgo1.go +*.cgo2.c +_cgo_defun.c +_cgo_gotypes.go +_cgo_export.* + +_testmain.go + +*.exe +*.test +*.prof diff --git a/vendor/github.com/matryer/is/.travis.yml b/vendor/github.com/matryer/is/.travis.yml new file mode 100644 index 0000000000..ff6379e03e --- /dev/null +++ b/vendor/github.com/matryer/is/.travis.yml @@ -0,0 +1,40 @@ +os: + - linux + - osx + - windows + +language: go + +sudo: required + +go: + # "1.x" always refers to the latest Go version, inc. the patch release. + # e.g. "1.x" is 1.13 until 1.13.1 is available. + - 1.x + - 1.6.x + - 1.7.x + - 1.8.x + - 1.9.x + - 1.10.x + - 1.11.x + - 1.12.x + - 1.13.x + - 1.14.x + - tip + +matrix: + allow_failures: + - os: windows + go: tip + exclude: + # OSX 1.6.4 is not present in travis. + # https://github.com/travis-ci/travis-ci/issues/10309 + - go: 1.6.x + os: osx + +install: + - go get -d -v ./... + +script: + - go build -v ./... + - go test ./... diff --git a/vendor/github.com/matryer/is/LICENSE b/vendor/github.com/matryer/is/LICENSE new file mode 100644 index 0000000000..3154c1540d --- /dev/null +++ b/vendor/github.com/matryer/is/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2017-2018 Mat Ryer + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/vendor/github.com/matryer/is/README.md b/vendor/github.com/matryer/is/README.md new file mode 100644 index 0000000000..1ea022febb --- /dev/null +++ b/vendor/github.com/matryer/is/README.md @@ -0,0 +1,43 @@ +# is [![GoDoc](https://godoc.org/github.com/matryer/is?status.png)](http://godoc.org/github.com/matryer/is) [![Go Report Card](https://goreportcard.com/badge/github.com/matryer/is)](https://goreportcard.com/report/github.com/matryer/is) [![Build Status](https://travis-ci.org/matryer/is.svg?branch=master)](https://travis-ci.org/matryer/is) +Professional lightweight testing mini-framework for Go. + +* Easy to write and read +* [Beautifully simple API](https://pkg.go.dev/github.com/matryer/is) with everything you need: `is.Equal`, `is.True`, `is.NoErr`, and `is.Fail` +* Use comments to add descriptions (which show up when tests fail) + +Failures are very easy to read: + +![Examples of failures](https://github.com/matryer/is/raw/master/misc/delicious-failures.png) + +### Usage + +The following code shows a range of useful ways you can use +the helper methods: + +```go +func Test(t *testing.T) { + + is := is.New(t) + + signedin, err := isSignedIn(ctx) + is.NoErr(err) // isSignedIn error + is.Equal(signedin, true) // must be signed in + + body := readBody(r) + is.True(strings.Contains(body, "Hi there")) + +} +``` + +## Color + +To turn off the colors, run `go test` with the `-nocolor` flag, +or with the env var [`NO_COLOR` (with any value)](https://no-color.org). + +``` +go test -nocolor +``` + +``` +NO_COLOR=1 go test +``` diff --git a/vendor/github.com/matryer/is/is-1.7.go b/vendor/github.com/matryer/is/is-1.7.go new file mode 100644 index 0000000000..c75e473fe2 --- /dev/null +++ b/vendor/github.com/matryer/is/is-1.7.go @@ -0,0 +1,64 @@ +// +build go1.7 + +package is + +import ( + "regexp" + "runtime" +) + +// Helper marks the calling function as a test helper function. +// When printing file and line information, that function will be skipped. +// +// Available with Go 1.7 and later. +func (is *I) Helper() { + is.helpers[callerName(1)] = struct{}{} +} + +// callerName gives the function name (qualified with a package path) +// for the caller after skip frames (where 0 means the current function). +func callerName(skip int) string { + // Make room for the skip PC. + var pc [1]uintptr + n := runtime.Callers(skip+2, pc[:]) // skip + runtime.Callers + callerName + if n == 0 { + panic("is: zero callers found") + } + frames := runtime.CallersFrames(pc[:n]) + frame, _ := frames.Next() + return frame.Function +} + +// The maximum number of stack frames to go through when skipping helper functions for +// the purpose of decorating log messages. +const maxStackLen = 50 + +var reIsSourceFile = regexp.MustCompile(`is(-1.7)?\.go$`) + +func (is *I) callerinfo() (path string, line int, ok bool) { + var pc [maxStackLen]uintptr + // Skip two extra frames to account for this function + // and runtime.Callers itself. + n := runtime.Callers(2, pc[:]) + if n == 0 { + panic("is: zero callers found") + } + frames := runtime.CallersFrames(pc[:n]) + var firstFrame, frame runtime.Frame + for more := true; more; { + frame, more = frames.Next() + if reIsSourceFile.MatchString(frame.File) { + continue + } + if firstFrame.PC == 0 { + firstFrame = frame + } + if _, ok := is.helpers[frame.Function]; ok { + // Frame is inside a helper function. + continue + } + return frame.File, frame.Line, true + } + // If no "non-helper" frame is found, the first non is frame is returned. + return firstFrame.File, firstFrame.Line, true +} diff --git a/vendor/github.com/matryer/is/is-before-1.7.go b/vendor/github.com/matryer/is/is-before-1.7.go new file mode 100644 index 0000000000..c62f87208c --- /dev/null +++ b/vendor/github.com/matryer/is/is-before-1.7.go @@ -0,0 +1,23 @@ +// +build !go1.7 + +package is + +import ( + "regexp" + "runtime" +) + +var reIsSourceFile = regexp.MustCompile("is(-before-1.7)?\\.go$") + +func (is *I) callerinfo() (path string, line int, ok bool) { + for i := 0; ; i++ { + _, path, line, ok = runtime.Caller(i) + if !ok { + return + } + if reIsSourceFile.MatchString(path) { + continue + } + return path, line, true + } +} diff --git a/vendor/github.com/matryer/is/is.go b/vendor/github.com/matryer/is/is.go new file mode 100644 index 0000000000..305c1537db --- /dev/null +++ b/vendor/github.com/matryer/is/is.go @@ -0,0 +1,403 @@ +// Package is provides a lightweight extension to the +// standard library's testing capabilities. +// +// Comments on the assertion lines are used to add +// a description. +// +// The following failing test: +// +// func Test(t *testing.T) { +// is := is.New(t) +// a, b := 1, 2 +// is.Equal(a, b) // expect to be the same +// } +// +// Will output: +// +// your_test.go:123: 1 != 2 // expect to be the same +// +// Usage +// +// The following code shows a range of useful ways you can use +// the helper methods: +// +// func Test(t *testing.T) { +// // always start tests with this +// is := is.New(t) +// +// signedin, err := isSignedIn(ctx) +// is.NoErr(err) // isSignedIn error +// is.Equal(signedin, true) // must be signed in +// +// body := readBody(r) +// is.True(strings.Contains(body, "Hi there")) +// } +package is + +import ( + "bufio" + "bytes" + "flag" + "fmt" + "io" + "os" + "path/filepath" + "reflect" + "strconv" + "strings" +) + +// T reports when failures occur. +// testing.T implements this interface. +type T interface { + // Fail indicates that the test has failed but + // allowed execution to continue. + // Fail is called in relaxed mode (via NewRelaxed). + Fail() + // FailNow indicates that the test has failed and + // aborts the test. + // FailNow is called in strict mode (via New). + FailNow() +} + +// I is the test helper harness. +type I struct { + t T + fail func() + out io.Writer + colorful bool + + helpers map[string]struct{} // functions to be skipped when writing file/line info +} + +var noColorFlag bool + +func init() { + var envNoColor bool + + // prefer https://no-color.org (with any value) + if _, ok := os.LookupEnv("NO_COLOR"); ok { + envNoColor = true + } + + if v, ok := os.LookupEnv("IS_NO_COLOR"); ok { + if b, err := strconv.ParseBool(v); err == nil { + envNoColor = b + } + } + + flag.BoolVar(&noColorFlag, "nocolor", envNoColor, "turns off colors") +} + +// New makes a new testing helper using the specified +// T through which failures will be reported. +// In strict mode, failures call T.FailNow causing the test +// to be aborted. See NewRelaxed for alternative behavior. +func New(t T) *I { + return &I{t, t.FailNow, os.Stdout, !noColorFlag, map[string]struct{}{}} +} + +// NewRelaxed makes a new testing helper using the specified +// T through which failures will be reported. +// In relaxed mode, failures call T.Fail allowing +// multiple failures per test. +func NewRelaxed(t T) *I { + return &I{t, t.Fail, os.Stdout, !noColorFlag, map[string]struct{}{}} +} + +func (is *I) log(args ...interface{}) { + s := is.decorate(fmt.Sprint(args...)) + fmt.Fprintf(is.out, s) + is.fail() +} + +func (is *I) logf(format string, args ...interface{}) { + is.log(fmt.Sprintf(format, args...)) +} + +// Fail immediately fails the test. +// +// func Test(t *testing.T) { +// is := is.New(t) +// is.Fail() // TODO: write this test +// } +// +// In relaxed mode, execution will continue after a call to +// Fail, but that test will still fail. +func (is *I) Fail() { + is.log("failed") +} + +// True asserts that the expression is true. The expression +// code itself will be reported if the assertion fails. +// +// func Test(t *testing.T) { +// is := is.New(t) +// val := method() +// is.True(val != nil) // val should never be nil +// } +// +// Will output: +// +// your_test.go:123: not true: val != nil +func (is *I) True(expression bool) { + if !expression { + is.log("not true: $ARGS") + } +} + +// Equal asserts that a and b are equal. +// +// func Test(t *testing.T) { +// is := is.New(t) +// a := greet("Mat") +// is.Equal(a, "Hi Mat") // greeting +// } +// +// Will output: +// +// your_test.go:123: Hey Mat != Hi Mat // greeting +func (is *I) Equal(a, b interface{}) { + if areEqual(a, b) { + return + } + if isNil(a) || isNil(b) { + is.logf("%s != %s", is.valWithType(a), is.valWithType(b)) + } else if reflect.ValueOf(a).Type() == reflect.ValueOf(b).Type() { + is.logf("%v != %v", a, b) + } else { + is.logf("%s != %s", is.valWithType(a), is.valWithType(b)) + } +} + +// New is a method wrapper around the New function. +// It allows you to write subtests using a similar +// pattern: +// +// func Test(t *testing.T) { +// is := is.New(t) +// t.Run("sub", func(t *testing.T) { +// is := is.New(t) +// // TODO: test +// }) +// } +func (is *I) New(t T) *I { + return New(t) +} + +// NewRelaxed is a method wrapper around the NewRelaxed +// method. It allows you to write subtests using a similar +// pattern: +// +// func Test(t *testing.T) { +// is := is.NewRelaxed(t) +// t.Run("sub", func(t *testing.T) { +// is := is.NewRelaxed(t) +// // TODO: test +// }) +// } +func (is *I) NewRelaxed(t T) *I { + return NewRelaxed(t) +} + +func (is *I) valWithType(v interface{}) string { + if isNil(v) { + return "" + } + if is.colorful { + return fmt.Sprintf("%[1]s%[3]T(%[2]s%[3]v%[1]s)%[2]s", colorType, colorNormal, v) + } + return fmt.Sprintf("%[1]T(%[1]v)", v) +} + +// NoErr asserts that err is nil. +// +// func Test(t *testing.T) { +// is := is.New(t) +// val, err := getVal() +// is.NoErr(err) // getVal error +// is.True(len(val) > 10) // val cannot be short +// } +// +// Will output: +// +// your_test.go:123: err: not found // getVal error +func (is *I) NoErr(err error) { + if err != nil { + is.logf("err: %s", err.Error()) + } +} + +// isNil gets whether the object is nil or not. +func isNil(object interface{}) bool { + if object == nil { + return true + } + value := reflect.ValueOf(object) + kind := value.Kind() + if kind >= reflect.Chan && kind <= reflect.Slice && value.IsNil() { + return true + } + return false +} + +// areEqual gets whether a equals b or not. +func areEqual(a, b interface{}) bool { + if isNil(a) && isNil(b) { + return true + } + if isNil(a) || isNil(b) { + return false + } + if reflect.DeepEqual(a, b) { + return true + } + aValue := reflect.ValueOf(a) + bValue := reflect.ValueOf(b) + return aValue == bValue +} + +// loadComment gets the Go comment from the specified line +// in the specified file. +func loadComment(path string, line int) (string, bool) { + f, err := os.Open(path) + if err != nil { + return "", false + } + defer f.Close() + s := bufio.NewScanner(f) + i := 1 + for s.Scan() { + if i != line { + i++ + continue + } + + text := s.Text() + commentI := strings.Index(text, "// ") + if commentI == -1 { + return "", false // no comment + } + text = text[commentI+2:] + text = strings.TrimSpace(text) + return text, true + } + return "", false +} + +// loadArguments gets the arguments from the function call +// on the specified line of the file. +func loadArguments(path string, line int) (string, bool) { + f, err := os.Open(path) + if err != nil { + return "", false + } + defer f.Close() + s := bufio.NewScanner(f) + i := 1 + for s.Scan() { + if i != line { + i++ + continue + } + text := s.Text() + braceI := strings.Index(text, "(") + if braceI == -1 { + return "", false + } + text = text[braceI+1:] + cs := bufio.NewScanner(strings.NewReader(text)) + cs.Split(bufio.ScanBytes) + j := 0 + c := 1 + for cs.Scan() { + switch cs.Text() { + case ")": + c-- + case "(": + c++ + } + if c == 0 { + break + } + j++ + } + text = text[:j] + return text, true + } + return "", false +} + +// decorate prefixes the string with the file and line of the call site +// and inserts the final newline if needed and indentation tabs for formatting. +// this function was copied from the testing framework and modified. +func (is *I) decorate(s string) string { + path, lineNumber, ok := is.callerinfo() // decorate + log + public function. + file := filepath.Base(path) + if ok { + // Truncate file name at last file name separator. + if index := strings.LastIndex(file, "/"); index >= 0 { + file = file[index+1:] + } else if index = strings.LastIndex(file, "\\"); index >= 0 { + file = file[index+1:] + } + } else { + file = "???" + lineNumber = 1 + } + buf := new(bytes.Buffer) + // Every line is indented at least one tab. + buf.WriteByte('\t') + if is.colorful { + buf.WriteString(colorFile) + } + fmt.Fprintf(buf, "%s:%d: ", file, lineNumber) + if is.colorful { + buf.WriteString(colorNormal) + } + + s = escapeFormatString(s) + + lines := strings.Split(s, "\n") + if l := len(lines); l > 1 && lines[l-1] == "" { + lines = lines[:l-1] + } + for i, line := range lines { + if i > 0 { + // Second and subsequent lines are indented an extra tab. + buf.WriteString("\n\t\t") + } + // expand arguments (if $ARGS is present) + if strings.Contains(line, "$ARGS") { + args, _ := loadArguments(path, lineNumber) + line = strings.Replace(line, "$ARGS", args, -1) + } + buf.WriteString(line) + } + comment, ok := loadComment(path, lineNumber) + if ok { + if is.colorful { + buf.WriteString(colorComment) + } + buf.WriteString(" // ") + comment = escapeFormatString(comment) + buf.WriteString(comment) + if is.colorful { + buf.WriteString(colorNormal) + } + } + buf.WriteString("\n") + return buf.String() +} + +// escapeFormatString escapes strings for use in formatted functions like Sprintf. +func escapeFormatString(fmt string) string { + return strings.Replace(fmt, "%", "%%", -1) +} + +const ( + colorNormal = "\u001b[39m" + colorComment = "\u001b[31m" + colorFile = "\u001b[90m" + colorType = "\u001b[90m" +) diff --git a/vendor/modules.txt b/vendor/modules.txt index c9d9d75f5b..aa4ea8fdd8 100644 --- a/vendor/modules.txt +++ b/vendor/modules.txt @@ -16,9 +16,6 @@ github.com/99designs/gqlgen/graphql/playground # github.com/ActiveState/go-ogle-analytics v0.0.0-20170510030904-9b3f14901527 ## explicit github.com/ActiveState/go-ogle-analytics -# github.com/ActiveState/graphql v0.0.0-20230719154233-6949037a6e48 -## explicit -github.com/ActiveState/graphql # github.com/ActiveState/pty v0.0.0-20230628221854-6fb90eb08a14 ## explicit; go 1.13 github.com/ActiveState/pty @@ -464,8 +461,9 @@ github.com/maruel/natural # github.com/mash/go-tempfile-suffix v0.0.0-20150731093933-48f0f8a3a5ab ## explicit github.com/mash/go-tempfile-suffix -# github.com/matryer/is v1.2.0 -## explicit +# github.com/matryer/is v1.4.1 +## explicit; go 1.14 +github.com/matryer/is # github.com/mattn/go-colorable v0.1.13 ## explicit; go 1.15 github.com/mattn/go-colorable From bbfb2faf87c5d20fb31a04fd0e4e7c6ab7979a41 Mon Sep 17 00:00:00 2001 From: Mike Drakos Date: Tue, 5 Nov 2024 13:54:43 -0800 Subject: [PATCH 013/336] Apply suggestions from code review Co-authored-by: Nathan Rijksen --- cmd/state-svc/internal/messages/messages.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cmd/state-svc/internal/messages/messages.go b/cmd/state-svc/internal/messages/messages.go index a377b5d911..cecd8a9471 100644 --- a/cmd/state-svc/internal/messages/messages.go +++ b/cmd/state-svc/internal/messages/messages.go @@ -77,7 +77,7 @@ func (m *Messages) Check(command string, flags []string) ([]*graph.MessageInfo, allMessages, ok := cacheValue.([]*graph.MessageInfo) if !ok { - return nil, errs.New("Could not get messages from cache") + return nil, errs.New("cacheValue has unexpected type: %T", cacheValue) } conditionParams := *m.baseParams // copy @@ -116,7 +116,7 @@ func check(params *ConditionParams, messages []*graph.MessageInfo, lastReportMap if lastReport, ok := lastReportMap[message.ID]; ok { lr, ok := lastReport.(string) if !ok { - return nil, errs.New("Could not get last reported time for message %s as it's not a string", message.ID) + return nil, errs.New("Could not get last reported time for message %s as it's not a string: %T", message.ID, lastReport) } lastReportTime, err := time.Parse(time.RFC3339, lr) if err != nil { From fe8713a087070c2cd54dcc34ea9dea2ac912374e Mon Sep 17 00:00:00 2001 From: mdrakos Date: Tue, 5 Nov 2024 14:02:05 -0800 Subject: [PATCH 014/336] Move panic handling --- cmd/state-svc/internal/messages/messages.go | 5 +++++ cmd/state-svc/internal/resolver/resolver.go | 6 ++++++ internal/poller/poller.go | 11 +---------- 3 files changed, 12 insertions(+), 10 deletions(-) diff --git a/cmd/state-svc/internal/messages/messages.go b/cmd/state-svc/internal/messages/messages.go index cecd8a9471..1495a8a1b2 100644 --- a/cmd/state-svc/internal/messages/messages.go +++ b/cmd/state-svc/internal/messages/messages.go @@ -4,6 +4,7 @@ import ( "encoding/json" "fmt" "os" + "runtime/debug" "sync" "time" @@ -15,6 +16,7 @@ import ( "github.com/ActiveState/cli/internal/httputil" "github.com/ActiveState/cli/internal/logging" "github.com/ActiveState/cli/internal/poller" + "github.com/ActiveState/cli/internal/runbits/panics" "github.com/ActiveState/cli/internal/strutils" auth "github.com/ActiveState/cli/pkg/platform/authentication" "github.com/ActiveState/cli/pkg/sysinfo" @@ -43,6 +45,9 @@ func New(cfg *config.Instance, auth *auth.Auth) (*Messages, error) { } poll := poller.New(1*time.Hour, func() (interface{}, error) { + defer func() { + panics.LogAndPanic(recover(), debug.Stack()) + }() resp, err := fetch() return resp, err }) diff --git a/cmd/state-svc/internal/resolver/resolver.go b/cmd/state-svc/internal/resolver/resolver.go index ca591fe87d..ba91441e7f 100644 --- a/cmd/state-svc/internal/resolver/resolver.go +++ b/cmd/state-svc/internal/resolver/resolver.go @@ -57,6 +57,9 @@ func New(cfg *config.Instance, an *sync.Client, auth *authentication.Auth) (*Res upchecker := updater.NewDefaultChecker(cfg, an) pollUpdate := poller.New(1*time.Hour, func() (interface{}, error) { + defer func() { + panics.LogAndPanic(recover(), debug.Stack()) + }() logging.Debug("Poller checking for update info") return upchecker.CheckFor(constants.ChannelName, "") }) @@ -71,6 +74,9 @@ func New(cfg *config.Instance, an *sync.Client, auth *authentication.Auth) (*Res } pollAuth := poller.New(time.Duration(int64(time.Millisecond)*pollRate), func() (interface{}, error) { + defer func() { + panics.LogAndPanic(recover(), debug.Stack()) + }() if auth.SyncRequired() { return nil, auth.Sync() } diff --git a/internal/poller/poller.go b/internal/poller/poller.go index 563caa9a0b..56de212f85 100644 --- a/internal/poller/poller.go +++ b/internal/poller/poller.go @@ -1,7 +1,6 @@ package poller import ( - "runtime/debug" "sync" "time" @@ -9,7 +8,6 @@ import ( "github.com/ActiveState/cli/internal/logging" "github.com/ActiveState/cli/internal/multilog" "github.com/ActiveState/cli/internal/runbits/errors" - "github.com/ActiveState/cli/internal/runbits/panics" ) type Poller struct { @@ -21,15 +19,8 @@ type Poller struct { } func New(interval time.Duration, pollFunc func() (interface{}, error)) *Poller { - wrappedFn := func() (interface{}, error) { - defer func() { - panics.LogAndPanic(recover(), debug.Stack()) - }() - return pollFunc() - } - p := &Poller{ - pollFunc: wrappedFn, + pollFunc: pollFunc, done: make(chan struct{}), } go p.start(interval) From e190d885db28d2e8a3be0ff8364e6cf87119b187 Mon Sep 17 00:00:00 2001 From: mdrakos Date: Tue, 5 Nov 2024 14:06:59 -0800 Subject: [PATCH 015/336] Fix JWT response --- internal/graph/response.go | 8 -------- pkg/platform/model/svc.go | 4 ++-- 2 files changed, 2 insertions(+), 10 deletions(-) diff --git a/internal/graph/response.go b/internal/graph/response.go index 52add42637..fb8e33bbde 100644 --- a/internal/graph/response.go +++ b/internal/graph/response.go @@ -1,9 +1,5 @@ package graph -import ( - "encoding/json" -) - type VersionResponse struct { Version Version `json:"version"` } @@ -24,10 +20,6 @@ type GetProcessesInUseResponse struct { Processes []*ProcessInfo `json:"getProcessesInUse"` } -type GetJWTResponse struct { - Payload json.RawMessage `json:"getJWT"` -} - type HashGlobsResponse struct { Response GlobResult `json:"hashGlobs"` } diff --git a/pkg/platform/model/svc.go b/pkg/platform/model/svc.go index 1505040a8c..da1ae109b0 100644 --- a/pkg/platform/model/svc.go +++ b/pkg/platform/model/svc.go @@ -186,13 +186,13 @@ func (m *SvcModel) GetJWT(ctx context.Context) (*mono_models.JWT, error) { defer profile.Measure("svc:GetJWT", time.Now()) r := request.NewJWTRequest() - resp := graph.GetJWTResponse{} + var resp json.RawMessage if err := m.request(ctx, r, &resp); err != nil { return nil, errs.Wrap(err, "Error sending messages request") } jwt := &mono_models.JWT{} - err := json.Unmarshal(resp.Payload, &jwt) + err := json.Unmarshal(resp, &jwt) if err != nil { return nil, errs.Wrap(err, "Error unmarshaling JWT") } From e30cf4374366bac08a3161a1988a063ad9b7688a Mon Sep 17 00:00:00 2001 From: mdrakos Date: Tue, 5 Nov 2024 14:23:41 -0800 Subject: [PATCH 016/336] Update remaining service gql responses --- internal/graph/response.go | 25 ------------------------- pkg/platform/model/svc.go | 16 ++++++++-------- 2 files changed, 8 insertions(+), 33 deletions(-) delete mode 100644 internal/graph/response.go diff --git a/internal/graph/response.go b/internal/graph/response.go deleted file mode 100644 index fb8e33bbde..0000000000 --- a/internal/graph/response.go +++ /dev/null @@ -1,25 +0,0 @@ -package graph - -type VersionResponse struct { - Version Version `json:"version"` -} - -type ProjectsResponse struct { - Projects []*Project `json:"projects"` -} - -type AvailableUpdateResponse struct { - AvailableUpdate AvailableUpdate `json:"availableUpdate"` -} - -type CheckMessagesResponse struct { - Messages []*MessageInfo `json:"checkMessages"` -} - -type GetProcessesInUseResponse struct { - Processes []*ProcessInfo `json:"getProcessesInUse"` -} - -type HashGlobsResponse struct { - Response GlobResult `json:"hashGlobs"` -} diff --git a/pkg/platform/model/svc.go b/pkg/platform/model/svc.go index da1ae109b0..f121af7eee 100644 --- a/pkg/platform/model/svc.go +++ b/pkg/platform/model/svc.go @@ -65,20 +65,20 @@ func (m *SvcModel) request(ctx context.Context, request gqlclient.Request, resp func (m *SvcModel) StateVersion(ctx context.Context) (*graph.Version, error) { r := request.NewVersionRequest() - resp := graph.VersionResponse{} + resp := graph.Version{} if err := m.request(ctx, r, &resp); err != nil { return nil, err } - return &resp.Version, nil + return &resp, nil } func (m *SvcModel) LocalProjects(ctx context.Context) ([]*graph.Project, error) { r := request.NewLocalProjectsRequest() - response := graph.ProjectsResponse{Projects: []*graph.Project{}} + response := []*graph.Project{} if err := m.request(ctx, r, &response); err != nil { return nil, err } - return response.Projects, nil + return response, nil } // CheckUpdate returns cached update information. There is no guarantee that @@ -88,12 +88,12 @@ func (m *SvcModel) LocalProjects(ctx context.Context) ([]*graph.Project, error) func (m *SvcModel) CheckUpdate(ctx context.Context, desiredChannel, desiredVersion string) (*graph.AvailableUpdate, error) { defer profile.Measure("svc:CheckUpdate", time.Now()) r := request.NewAvailableUpdate(desiredChannel, desiredVersion) - u := graph.AvailableUpdateResponse{} + u := graph.AvailableUpdate{} if err := m.request(ctx, r, &u); err != nil { return nil, errs.Wrap(err, "Error checking if update is available.") } - return &u.AvailableUpdate, nil + return &u, nil } func (m *SvcModel) Ping() error { @@ -230,11 +230,11 @@ func (m *SvcModel) HashGlobs(wd string, globs []string) (*graph.GlobResult, erro defer profile.Measure("svc:HashGlobs", time.Now()) req := request.NewHashGlobs(wd, globs) - res := graph.HashGlobsResponse{} + res := graph.GlobResult{} if err := m.request(context.Background(), req, &res); err != nil { return nil, errs.Wrap(err, "Error sending HashGlobs request to state-svc") } - return &res.Response, errs.New("svcModel.HashGlobs() did not return an expected value") + return &res, errs.New("svcModel.HashGlobs() did not return an expected value") } func jsonFromMap(m map[string]interface{}) string { From 7a8ba61b96e0d99f23cdc2057083286dc72046a8 Mon Sep 17 00:00:00 2001 From: mdrakos Date: Tue, 5 Nov 2024 15:50:45 -0800 Subject: [PATCH 017/336] Do not depend on environment variables --- activestate.yaml | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/activestate.yaml b/activestate.yaml index 0f18c9cfdb..8a50fe411d 100644 --- a/activestate.yaml +++ b/activestate.yaml @@ -391,14 +391,10 @@ scripts: value: | set -e - TARGET_BRANCH=$GITHUB_BASE_REF - if [ "$GITHUB_BASE_REF" == "" ]; then - TARGET_BRANCH="master" - fi - - git fetch --quiet origin $TARGET_BRANCH:refs/remotes/origin/$TARGET_BRANCH + git fetch --quiet origin master - CHANGED=$(git diff --name-only origin/$TARGET_BRANCH | grep -v testdata | grep -v vendor) + MERGE_BASE=$(git merge-base HEAD origin/master) + CHANGED=$(git diff --name-only $MERGE_BASE...HEAD | grep -v testdata | grep -v vendor) NO_NEWLINE=0 for FILE in $CHANGED; do if file "$FILE" | grep -q -E 'text|ASCII'; then From 7088da3b0b3c4354a09e7d232705de2eff81eeed Mon Sep 17 00:00:00 2001 From: mdrakos Date: Tue, 5 Nov 2024 15:58:58 -0800 Subject: [PATCH 018/336] Debug script --- activestate.yaml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/activestate.yaml b/activestate.yaml index 8a50fe411d..fecc086cf9 100644 --- a/activestate.yaml +++ b/activestate.yaml @@ -392,9 +392,12 @@ scripts: set -e git fetch --quiet origin master + echo "Checking format for changes since master" MERGE_BASE=$(git merge-base HEAD origin/master) + echo "Merge base: $MERGE_BASE" CHANGED=$(git diff --name-only $MERGE_BASE...HEAD | grep -v testdata | grep -v vendor) + echo "Changed files: $CHANGED" NO_NEWLINE=0 for FILE in $CHANGED; do if file "$FILE" | grep -q -E 'text|ASCII'; then From 9f7a82e000b68b2eaecd8b9a5abd35c22529fa97 Mon Sep 17 00:00:00 2001 From: mdrakos Date: Tue, 5 Nov 2024 16:03:54 -0800 Subject: [PATCH 019/336] More debugging --- activestate.yaml | 36 ++++++++++++++++++++++++++---------- 1 file changed, 26 insertions(+), 10 deletions(-) diff --git a/activestate.yaml b/activestate.yaml index fecc086cf9..09bdeb5923 100644 --- a/activestate.yaml +++ b/activestate.yaml @@ -390,30 +390,46 @@ scripts: description: "Checks if the code is formatted correctly" value: | set -e + set -x - git fetch --quiet origin master + echo "Starting check-format script" + + if ! git fetch --quiet origin master; then + echo "Error: Failed to fetch from origin" + exit 1 + fi echo "Checking format for changes since master" - MERGE_BASE=$(git merge-base HEAD origin/master) + MERGE_BASE=$(git merge-base HEAD origin/master) || { + echo "Error: Could not find merge base with origin/master" + exit 1 + } echo "Merge base: $MERGE_BASE" - CHANGED=$(git diff --name-only $MERGE_BASE...HEAD | grep -v testdata | grep -v vendor) + + CHANGED=$(git diff --name-only $MERGE_BASE...HEAD | grep -v testdata | grep -v vendor) || true + if [ -z "$CHANGED" ]; then + echo "No relevant changed files found" + exit 0 + } echo "Changed files: $CHANGED" + NO_NEWLINE=0 for FILE in $CHANGED; do + echo "Checking file: $FILE" + if [ ! -f "$FILE" ]; then + echo "Warning: File no longer exists: $FILE" + continue + } if file "$FILE" | grep -q -E 'text|ASCII'; then + echo "File is text: $FILE" if [ $(tail -c 1 "$FILE" | wc -l) -eq 0 ]; then echo "Missing newline at end of file: $FILE" NO_NEWLINE=1 fi + else + echo "Skipping non-text file: $FILE" fi done - - if [ "$NO_NEWLINE" -ne 0 ]; then - echo "Error: Some text files are missing a newline at the end." - exit 1 - else - echo "Success: All modified text files end with a newline." - fi - name: grab-mergecommits language: bash standalone: true From 837c4b305e43b7dac1a5ceab40cd2c5620260815 Mon Sep 17 00:00:00 2001 From: mdrakos Date: Tue, 5 Nov 2024 16:10:01 -0800 Subject: [PATCH 020/336] More debugging --- activestate.yaml | 26 +++++++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/activestate.yaml b/activestate.yaml index 09bdeb5923..eab74a3ea2 100644 --- a/activestate.yaml +++ b/activestate.yaml @@ -393,15 +393,39 @@ scripts: set -x echo "Starting check-format script" + + # Check if origin exists + if ! git remote get-url origin; then + echo "Error: 'origin' remote is not configured" + exit 1 + fi - if ! git fetch --quiet origin master; then + # Show current git status + echo "Current branch: $(git branch --show-current)" + echo "Git remotes:" + git remote -v + + # Fetch with more verbose output + echo "Fetching from origin..." + if ! git fetch --verbose origin master; then echo "Error: Failed to fetch from origin" exit 1 fi + + # Verify master branch exists + if ! git show-ref --verify --quiet refs/remotes/origin/master; then + echo "Error: origin/master branch does not exist" + echo "Current HEAD: $(git rev-parse HEAD)" + echo "Origin master: $(git rev-parse origin/master)" + exit 1 + fi + echo "Checking format for changes since master" MERGE_BASE=$(git merge-base HEAD origin/master) || { echo "Error: Could not find merge base with origin/master" + echo "Current HEAD: $(git rev-parse HEAD)" + echo "Origin master: $(git rev-parse origin/master)" exit 1 } echo "Merge base: $MERGE_BASE" From 5b391b6a8d5c91c1f2602645c1e33edcabccaa63 Mon Sep 17 00:00:00 2001 From: mdrakos Date: Tue, 5 Nov 2024 16:17:20 -0800 Subject: [PATCH 021/336] Try to reconcile shallow clone --- activestate.yaml | 42 +++++++++++++++++++----------------------- 1 file changed, 19 insertions(+), 23 deletions(-) diff --git a/activestate.yaml b/activestate.yaml index eab74a3ea2..ba8535ce1f 100644 --- a/activestate.yaml +++ b/activestate.yaml @@ -394,42 +394,38 @@ scripts: echo "Starting check-format script" - # Check if origin exists - if ! git remote get-url origin; then - echo "Error: 'origin' remote is not configured" - exit 1 + if git rev-parse --is-shallow-repository; then + echo "Detected shallow clone, fetching complete history..." + git fetch --unshallow origin master || { + echo "Failed to unshallow repository" + exit 1 + } fi - # Show current git status - echo "Current branch: $(git branch --show-current)" - echo "Git remotes:" - git remote -v - - # Fetch with more verbose output - echo "Fetching from origin..." - if ! git fetch --verbose origin master; then - echo "Error: Failed to fetch from origin" + echo "Fetching master branch..." + git fetch origin master:refs/remotes/origin/master || { + echo "Failed to fetch master branch" exit 1 - fi + } - # Verify master branch exists - if ! git show-ref --verify --quiet refs/remotes/origin/master; then - echo "Error: origin/master branch does not exist" - echo "Current HEAD: $(git rev-parse HEAD)" - echo "Origin master: $(git rev-parse origin/master)" - exit 1 + # If we're in detached HEAD state, create a temporary branch + if [ -z "$(git branch --show-current)" ]; then + echo "Detected detached HEAD state, creating temporary branch..." + git branch temp_format_check HEAD || { + echo "Failed to create temporary branch" + exit 1 + } + git checkout temp_format_check fi echo "Checking format for changes since master" - MERGE_BASE=$(git merge-base HEAD origin/master) || { echo "Error: Could not find merge base with origin/master" echo "Current HEAD: $(git rev-parse HEAD)" echo "Origin master: $(git rev-parse origin/master)" exit 1 } - echo "Merge base: $MERGE_BASE" - + CHANGED=$(git diff --name-only $MERGE_BASE...HEAD | grep -v testdata | grep -v vendor) || true if [ -z "$CHANGED" ]; then echo "No relevant changed files found" From cdef753795f3152cb508e9a44ff7c842db845c25 Mon Sep 17 00:00:00 2001 From: mdrakos Date: Tue, 5 Nov 2024 16:22:45 -0800 Subject: [PATCH 022/336] Fix syntax error --- activestate.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/activestate.yaml b/activestate.yaml index ba8535ce1f..e1308e03f4 100644 --- a/activestate.yaml +++ b/activestate.yaml @@ -430,7 +430,7 @@ scripts: if [ -z "$CHANGED" ]; then echo "No relevant changed files found" exit 0 - } + fi echo "Changed files: $CHANGED" NO_NEWLINE=0 @@ -439,7 +439,7 @@ scripts: if [ ! -f "$FILE" ]; then echo "Warning: File no longer exists: $FILE" continue - } + fi if file "$FILE" | grep -q -E 'text|ASCII'; then echo "File is text: $FILE" if [ $(tail -c 1 "$FILE" | wc -l) -eq 0 ]; then From 416aa32be27794276ea1c98a6e59fad3f3eded39 Mon Sep 17 00:00:00 2001 From: mdrakos Date: Tue, 5 Nov 2024 16:29:03 -0800 Subject: [PATCH 023/336] Clean up script --- activestate.yaml | 17 ----------------- 1 file changed, 17 deletions(-) diff --git a/activestate.yaml b/activestate.yaml index e1308e03f4..e80c19130c 100644 --- a/activestate.yaml +++ b/activestate.yaml @@ -390,10 +390,7 @@ scripts: description: "Checks if the code is formatted correctly" value: | set -e - set -x - echo "Starting check-format script" - if git rev-parse --is-shallow-repository; then echo "Detected shallow clone, fetching complete history..." git fetch --unshallow origin master || { @@ -402,27 +399,13 @@ scripts: } fi - echo "Fetching master branch..." git fetch origin master:refs/remotes/origin/master || { echo "Failed to fetch master branch" exit 1 } - # If we're in detached HEAD state, create a temporary branch - if [ -z "$(git branch --show-current)" ]; then - echo "Detected detached HEAD state, creating temporary branch..." - git branch temp_format_check HEAD || { - echo "Failed to create temporary branch" - exit 1 - } - git checkout temp_format_check - fi - - echo "Checking format for changes since master" MERGE_BASE=$(git merge-base HEAD origin/master) || { echo "Error: Could not find merge base with origin/master" - echo "Current HEAD: $(git rev-parse HEAD)" - echo "Origin master: $(git rev-parse origin/master)" exit 1 } From 3db6eb745ecb48e696abee993a5e79aaadd98b9f Mon Sep 17 00:00:00 2001 From: mitchell Date: Tue, 5 Nov 2024 17:48:11 -0500 Subject: [PATCH 024/336] Refactor wrapping, support multiple tags after continuations, and added unit test. --- internal/colorize/wrap.go | 100 +++++++++++++++++++++------------ internal/colorize/wrap_test.go | 31 +++++++++- 2 files changed, 93 insertions(+), 38 deletions(-) diff --git a/internal/colorize/wrap.go b/internal/colorize/wrap.go index 721ec366de..d40234b0be 100644 --- a/internal/colorize/wrap.go +++ b/internal/colorize/wrap.go @@ -4,8 +4,7 @@ import ( "fmt" "regexp" "strings" - - "github.com/ActiveState/cli/internal/logging" + "unicode/utf8" ) type WrappedLines []WrappedLine @@ -17,8 +16,8 @@ type WrappedLine struct { func (c WrappedLines) String() string { var result string - for _, crop := range c { - result = result + crop.Line + for _, wrapped := range c { + result = result + wrapped.Line } return result @@ -28,43 +27,56 @@ var indentRegexp = regexp.MustCompile(`^([ ]+)`) var isLinkRegexp = regexp.MustCompile(`\s*(\[[^\]]+\])?https?://`) func Wrap(text string, maxLen int, includeLineEnds bool, continuation string) WrappedLines { + // Determine indentation of wrapped lines based on any leading indentation. indent := "" if indentMatch := indentRegexp.FindStringSubmatch(text); indentMatch != nil { indent = indentMatch[0] if len(text) > len(indent) && strings.HasPrefix(text[len(indent):], "• ") { + // If text to wrap is a bullet item, indent extra to be flush after bullet. indent += " " } } - maxLen -= len(continuation) + // If wrapping includes continuation text, reduce maximum wrapping length accordingly. + maxLen -= utf8.RuneCountInString(StripColorCodes(continuation)) entries := make([]WrappedLine, 0) colorCodes := colorRx.FindAllStringSubmatchIndex(text, -1) colorNames := colorRx.FindAllStringSubmatch(text, -1) - isLineEnd := false entry := WrappedLine{} + // Iterate over the text, one character at a time, and construct wrapped lines while doing so. for pos, amend := range text { - inColorTag := inRange(pos, colorCodes) - - isLineEnd = amend == '\n' + isLineEnd := amend == '\n' + isTextEnd := pos == len(text)-1 + // Add the current character to the wrapped line. + // Update the wrapped line's length as long as the added character is not part of a tag like + // [ERROR] or [/RESET]. if !isLineEnd { entry.Line += string(amend) - if !inColorTag { + if !inRange(pos, colorCodes) { entry.Length++ } } - - // Ensure the next position is not within a color tag and check conditions that would end this entry - if isLineEnd || (!inRange(pos+1, colorCodes) && (entry.Length == maxLen || pos == len(text)-1)) { - wrapped := "" - wrappedLength := len(indent) - nextCharIsSpace := pos+1 < len(text) && isSpace(text[pos+1]) - if !isLineEnd && entry.Length == maxLen && !nextCharIsSpace && pos < len(text)-1 { - // Put the current word on the next line, if possible. - // Find the start of the current word and its printed length, taking color ranges and - // multi-byte characters into account. + atWrapPosition := entry.Length == maxLen + + // When we've reached the end of the line, either naturally (line or text end), or when we've + // reached the wrap position (maximum length), we need to wrap the current word (if any) and + // set up the next (wrapped) line. + // Note that if we've reached the wrap position but there's a tag immediately after it, we want + // to include the tag, so do not wrap in that case. + if isLineEnd || isTextEnd || (atWrapPosition && !inRange(pos+1, colorCodes)) { + wrapped := "" // the start of the next (wrapped) line + wrappedLength := len(indent) // the current length of the next (wrapped) line + + // We need to prepare the next (wrapped) line unless we're at line end, text end, not at wrap + // position, or the next character is a space (i.e. no wrapping needed). + nextCharIsSpace := !isTextEnd && isSpace(text[pos+1]) + if !isLineEnd && !isTextEnd && atWrapPosition && !nextCharIsSpace { + // Determine the start of the current word along with its printed length (taking color + // ranges and multi-byte characters into account). + // We need to know these things in order to put it on the next line (if possible). i := len(entry.Line) - 1 for ; i > 0; i-- { if isSpace(entry.Line[i]) { @@ -75,24 +87,33 @@ func Wrap(text string, maxLen int, includeLineEnds bool, continuation string) Wr wrappedLength++ } } - // Extract the word from the current line if it doesn't start the line. - if i > 0 && i < len(entry.Line)-1 && !isLinkRegexp.MatchString(entry.Line[i:]) { - tag := colorTag(pos, colorCodes, colorNames) - if continuation != "" && tag != "" { - // Do not colorize the continuation. - wrapped = fmt.Sprintf("%s[/RESET]%s%s%s", indent, continuation, tag, entry.Line[i:]) - } else { - wrapped = indent + continuation + entry.Line[i:] - } - logging.Debug("continuation: '%s'", continuation) - logging.Debug("wrapped: '%s'", wrapped) + + // We can wrap this word on the next line as long as it's not at the beginning of the + // current line and it's not part of a hyperlink. + canWrap := i > 0 && !isLinkRegexp.MatchString(entry.Line[i:]) + if canWrap { + wrapped = entry.Line[i:] entry.Line = entry.Line[:i] entry.Length -= wrappedLength isLineEnd = true // emulate for wrapping purposes + + // Prepend the continuation string to the wrapped line, and indent it as necessary. + // The continuation itself should not be tagged with anything like [ERROR], but any text + // after the continuation should be tagged. + if continuation != "" { + if tags := colorTags(pos, colorCodes, colorNames); len(tags) > 0 { + wrapped = fmt.Sprintf("%s[/RESET]%s%s%s", indent, continuation, strings.Join(tags, ""), wrapped) + } else { + wrapped = indent + continuation + wrapped + } + } else { + wrapped = indent + wrapped + } } else { wrappedLength = len(indent) // reset } } + entries = append(entries, entry) entry = WrappedLine{Line: wrapped, Length: wrappedLength} } @@ -115,17 +136,22 @@ func inRange(pos int, ranges [][]int) bool { return false } -// colorTag returns the currently active color tag (if any) at the given position. -func colorTag(pos int, ranges [][]int, names [][]string) string { +// colorTags returns the currently active color tags (if any) at the given position. +func colorTags(pos int, ranges [][]int, names [][]string) []string { + tags := make([]string, 0) for i, intRange := range ranges { if pos < intRange[0] { - continue // before [COLOR] + break // before [COLOR] } - if i < len(ranges)-1 || pos < ranges[i+1][0] { - return names[i][0] // missing [/RESET] or between [COLOR] and [/RESET] + if pos > intRange[0] { + if names[i][1] == "/RESET" { + tags = make([]string, 0) // clear + } else { + tags = append(tags, names[i][0]) + } } } - return "" + return tags } func isSpace(b byte) bool { return b == ' ' || b == '\t' } diff --git a/internal/colorize/wrap_test.go b/internal/colorize/wrap_test.go index f4d793c8a0..2c5d61dfda 100644 --- a/internal/colorize/wrap_test.go +++ b/internal/colorize/wrap_test.go @@ -5,6 +5,8 @@ import ( "reflect" "strings" "testing" + + "github.com/stretchr/testify/assert" ) func Test_Wrap(t *testing.T) { @@ -123,8 +125,35 @@ func Test_WrapAsString(t *testing.T) { escape := func(v string) string { return strings.Replace(v, "\n", "\\n", -1) } - t.Errorf("Wrap() = %v, want %v (crop data: %s)", escape(got.String()), escape(tt.text), escape(fmt.Sprintf("%#v", got))) + t.Errorf("Wrap() = %v, want %v (wrap data: %s)", escape(got.String()), escape(tt.text), escape(fmt.Sprintf("%#v", got))) } }) } } + +func TestWrapBullet(t *testing.T) { + lines := Wrap(" • This is a bullet", 15, true, "") + assert.Equal(t, " • This is a \n bullet", lines.String()) +} + +func TestWrapContinuation(t *testing.T) { + // Test normal wrapping with no continuation. + lines := Wrap("This is an error", 9, true, "") + assert.Equal(t, "This is \nan error", lines.String()) + + // Verify continuations are not tagged. + lines = Wrap("[ERROR]This is an error[/RESET]", 10, true, "|") + assert.Equal(t, "[ERROR]This is \n[/RESET]|[ERROR]an error[/RESET]", lines.String()) + + // Verify only active tags come after continuations. + lines = Wrap("[BOLD]This is not[/RESET] an error", 10, true, "|") + assert.Equal(t, "[BOLD]This is \n[/RESET]|[BOLD]not[/RESET] an \n|error", lines.String()) + + // Verify continuations are not tagged, even if [/RESET] is omitted. + lines = Wrap("[ERROR]This is an error", 10, true, "|") + assert.Equal(t, "[ERROR]This is \n[/RESET]|[ERROR]an error", lines.String()) + + // Verify multiple tags are restored after continuations. + lines = Wrap("[BOLD][RED]This is a bold, red message[/RESET]", 11, true, "|") + assert.Equal(t, "[BOLD][RED]This is a \n[/RESET]|[BOLD][RED]bold, red \n[/RESET]|[BOLD][RED]message[/RESET]", lines.String()) +} From fe25e87c3385a56c9f664e848e3634d1c4c752d2 Mon Sep 17 00:00:00 2001 From: mitchell Date: Wed, 6 Nov 2024 11:56:21 -0500 Subject: [PATCH 025/336] Use struct for bullet list bullets, added tests, and use String() method instead of output marshaler method. --- internal/output/renderers/bulletlist.go | 73 ++++++++++++------- internal/output/renderers/bulletlist_test.go | 33 +++++++++ .../runbits/dependencies/changesummary.go | 2 +- internal/runbits/dependencies/summary.go | 2 +- internal/runners/artifacts/artifacts.go | 4 +- internal/runners/cve/cve.go | 2 +- 6 files changed, 83 insertions(+), 33 deletions(-) create mode 100644 internal/output/renderers/bulletlist_test.go diff --git a/internal/output/renderers/bulletlist.go b/internal/output/renderers/bulletlist.go index 49c98145b3..ca760beed4 100644 --- a/internal/output/renderers/bulletlist.go +++ b/internal/output/renderers/bulletlist.go @@ -2,50 +2,58 @@ package renderers import ( "strings" + "unicode/utf8" "github.com/ActiveState/cli/internal/colorize" - "github.com/ActiveState/cli/internal/multilog" "github.com/ActiveState/cli/internal/output" "github.com/ActiveState/cli/internal/termutils" ) +type Bullets struct { + Start string + Mid string + Link string + End string +} + type bulletList struct { prefix string items []string - bullets []string + bullets Bullets } // BulletTree outputs a list like: // // ├─ one // ├─ two -// │ wrapped +// │ wrapped // └─ three -var BulletTree = []string{output.TreeMid, output.TreeMid, output.TreeLink + " ", output.TreeEnd} +var BulletTree = Bullets{output.TreeMid, output.TreeMid, output.TreeLink + " ", output.TreeEnd} + +// BulletTreeDisabled is like BulletTree, but tags the tree glyphs with [DISABLED]. +var BulletTreeDisabled = Bullets{ + "[DISABLED]" + output.TreeMid + "[/RESET]", + "[DISABLED]" + output.TreeMid + "[/RESET]", + "[DISABLED]" + output.TreeLink + " [/RESET]", + "[DISABLED]" + output.TreeEnd + "[/RESET]", +} // HeadedBulletTree outputs a list like: // // one // ├─ two -// │ wrapped +// │ wrapped // └─ three -var HeadedBulletTree = []string{"", output.TreeMid, output.TreeLink + " ", output.TreeEnd} +var HeadedBulletTree = Bullets{"", output.TreeMid, output.TreeLink + " ", output.TreeEnd} -// NewBulletList returns a printable list of items prefixed with the given set of bullets. -// The set of bullets should contain four items: the bullet for the first item (e.g. ""); the -// bullet for each subsequent item (e.g. "├─"); the bullet for an item's wrapped lines, if any -// (e.g. "│"); and the bullet for the last item (e.g. "└─"). -// The returned list can be passed to a plain printer. It should not be passed to a structured -// printer. -func NewBulletList(prefix string, bullets, items []string) *bulletList { - if len(bullets) != 4 { - multilog.Error("Invalid bullet list: 4 bullets required") - bullets = BulletTree - } +func NewBulletList(prefix string, bullets Bullets, items []string) *bulletList { return &bulletList{prefix, items, bullets} } -func (b *bulletList) MarshalOutput(format output.Format) interface{} { +// str is the business logic for returning a bullet list's string representation for a given +// maximum width. Clients should call String() instead. Only tests should directly call this +// function. +func (b *bulletList) str(maxWidth int) string { out := make([]string, len(b.items)) // Determine the indentation of each item. @@ -61,29 +69,38 @@ func (b *bulletList) MarshalOutput(format output.Format) interface{} { } for i, item := range b.items { - bullet := b.bullets[0] + bullet := b.bullets.Start if len(b.items) == 1 { - bullet = b.bullets[3] // special case list length of one; use last bullet + bullet = b.bullets.End // special case list length of one; use last bullet } + prefix := "" + continuation := "" if i == 0 { if bullet != "" { bullet += " " } - item = b.prefix + bullet + item + prefix = b.prefix + bullet } else { - bullet = b.bullets[1] + " " - continuation := indent + b.bullets[2] + " " + bullet = b.bullets.Mid + " " + continuation = indent + b.bullets.Link + " " if i == len(b.items)-1 { - bullet = b.bullets[3] + " " // this is the last item + bullet = b.bullets.End + " " // this is the last item continuation = " " } - maxWidth := termutils.GetWidth() - len(indent) - len(bullet) - wrapped := colorize.Wrap(item, maxWidth, true, continuation).String() - item = indent + bullet + wrapped + prefix = indent + bullet } - out[i] = item + wrapped := colorize.Wrap(item, maxWidth-len(indent)-bulletLength(bullet), true, continuation).String() + out[i] = prefix + wrapped } return strings.Join(out, "\n") } + +func (b *bulletList) String() string { + return b.str(termutils.GetWidth()) +} + +func bulletLength(bullet string) int { + return utf8.RuneCountInString(colorize.StripColorCodes(bullet)) +} diff --git a/internal/output/renderers/bulletlist_test.go b/internal/output/renderers/bulletlist_test.go new file mode 100644 index 0000000000..ad8f85102b --- /dev/null +++ b/internal/output/renderers/bulletlist_test.go @@ -0,0 +1,33 @@ +package renderers + +import ( + "testing" + + "github.com/stretchr/testify/assert" +) + +func TestBulletTree(t *testing.T) { + assert.Equal(t, "├─ one\n├─ two \n│ wrapped\n└─ three", + NewBulletList("", BulletTree, []string{"one", "two wrapped", "three"}).str(13)) +} + +func TestBulletTreeDisabled(t *testing.T) { + assert.Equal(t, "[DISABLED]├─[/RESET] one\n[DISABLED]├─[/RESET] two \n[DISABLED]│ [/RESET] wrapped\n[DISABLED]└─[/RESET] three", + NewBulletList("", BulletTreeDisabled, []string{"one", "two wrapped", "three"}).str(13)) +} + +func TestHeadedBulletTree(t *testing.T) { + assert.Equal(t, "one\n├─ two \n│ wrapped\n└─ three", + NewBulletList("", HeadedBulletTree, []string{"one", "two wrapped", "three"}).str(13)) +} + +func TestUnwrappedLink(t *testing.T) { + assert.Equal(t, "├─ one\n└─ https://host:port/path#anchor", + NewBulletList("", BulletTree, []string{"one", "https://host:port/path#anchor"}).str(10)) +} + +func TestIndented(t *testing.T) { + // Note: use max width of 17 instead of 15 to account for extra continuation indent (2+2). + assert.Equal(t, " ├─ one\n ├─ two \n │ wrapped\n └─ three", + NewBulletList(" ", BulletTree, []string{"one", "two wrapped", "three"}).str(17)) +} diff --git a/internal/runbits/dependencies/changesummary.go b/internal/runbits/dependencies/changesummary.go index 75e9a760f6..a1c94ea6b4 100644 --- a/internal/runbits/dependencies/changesummary.go +++ b/internal/runbits/dependencies/changesummary.go @@ -130,6 +130,6 @@ func OutputChangeSummary(out output.Outputer, newBuildPlan *buildplan.BuildPlan, items[i] = item } - out.Notice(renderers.NewBulletList(" ", renderers.BulletTree, items)) + out.Notice(renderers.NewBulletList(" ", renderers.BulletTreeDisabled, items).String()) out.Notice("") // blank line } diff --git a/internal/runbits/dependencies/summary.go b/internal/runbits/dependencies/summary.go index a9008ac3a5..ac14f260df 100644 --- a/internal/runbits/dependencies/summary.go +++ b/internal/runbits/dependencies/summary.go @@ -44,6 +44,6 @@ func OutputSummary(out output.Outputer, directDependencies buildplan.Artifacts) items[i] = fmt.Sprintf("[ACTIONABLE]%s@%s[/RESET] %s", ingredient.Name, ingredient.Version, subdepLocale) } - out.Notice(renderers.NewBulletList(" ", renderers.BulletTree, items)) + out.Notice(renderers.NewBulletList(" ", renderers.BulletTreeDisabled, items).String()) out.Notice("") // blank line } diff --git a/internal/runners/artifacts/artifacts.go b/internal/runners/artifacts/artifacts.go index 6d28db8ab0..22734c783d 100644 --- a/internal/runners/artifacts/artifacts.go +++ b/internal/runners/artifacts/artifacts.go @@ -211,7 +211,7 @@ func (b *Artifacts) outputPlain(out *StructuredOutput, fullID bool) error { fmt.Sprintf("%s ([ERROR]%s[/RESET])", artifact.Name, locale.T("artifact_status_failed")), fmt.Sprintf("%s: [ERROR]%s[/RESET]", locale.T("artifact_status_failed_message"), strings.Join(artifact.Errors, ": ")), fmt.Sprintf("%s: [ACTIONABLE]%s[/RESET]", locale.T("artifact_status_failed_log"), artifact.LogURL), - })) + }).String()) continue case artifact.status == types.ArtifactSkipped: b.out.Print(fmt.Sprintf(" • %s ([NOTICE]%s[/RESET])", artifact.Name, locale.T("artifact_status_skipped"))) @@ -239,7 +239,7 @@ func (b *Artifacts) outputPlain(out *StructuredOutput, fullID bool) error { fmt.Sprintf("%s ([ERROR]%s[/RESET])", artifact.Name, locale.T("artifact_status_failed")), fmt.Sprintf("%s: [ERROR]%s[/RESET]", locale.T("artifact_status_failed_message"), strings.Join(artifact.Errors, ": ")), fmt.Sprintf("%s: [ACTIONABLE]%s[/RESET]", locale.T("artifact_status_failed_log"), artifact.LogURL), - })) + }).String()) continue case artifact.status == types.ArtifactSkipped: b.out.Print(fmt.Sprintf(" • %s ([NOTICE]%s[/RESET])", artifact.Name, locale.T("artifact_status_skipped"))) diff --git a/internal/runners/cve/cve.go b/internal/runners/cve/cve.go index f1f886307b..96c24a24f4 100644 --- a/internal/runners/cve/cve.go +++ b/internal/runners/cve/cve.go @@ -202,7 +202,7 @@ func (rd *cveOutput) MarshalOutput(format output.Format) interface{} { } items[i] = fmt.Sprintf("%-10s [ACTIONABLE]%s[/RESET]", severity, d.CveID) } - rd.output.Print(renderers.NewBulletList("", renderers.BulletTree, items)) + rd.output.Print(renderers.NewBulletList("", renderers.BulletTree, items).String()) rd.output.Print("") } From 7ff9681a6bcde56a8fecd5bc4062c06210d41f21 Mon Sep 17 00:00:00 2001 From: mdrakos Date: Wed, 6 Nov 2024 09:27:16 -0800 Subject: [PATCH 026/336] Cleanup script --- activestate.yaml | 23 ++++------------------- 1 file changed, 4 insertions(+), 19 deletions(-) diff --git a/activestate.yaml b/activestate.yaml index e80c19130c..91f5a44eb9 100644 --- a/activestate.yaml +++ b/activestate.yaml @@ -391,24 +391,14 @@ scripts: value: | set -e - if git rev-parse --is-shallow-repository; then + if [ "$(git rev-parse --is-shallow-repository)" = "true" ]; then echo "Detected shallow clone, fetching complete history..." - git fetch --unshallow origin master || { - echo "Failed to unshallow repository" - exit 1 - } + git fetch --unshallow origin master fi - git fetch origin master:refs/remotes/origin/master || { - echo "Failed to fetch master branch" - exit 1 - } + git fetch origin master:refs/remotes/origin/master - MERGE_BASE=$(git merge-base HEAD origin/master) || { - echo "Error: Could not find merge base with origin/master" - exit 1 - } - + MERGE_BASE=$(git merge-base HEAD origin/master) CHANGED=$(git diff --name-only $MERGE_BASE...HEAD | grep -v testdata | grep -v vendor) || true if [ -z "$CHANGED" ]; then echo "No relevant changed files found" @@ -418,19 +408,14 @@ scripts: NO_NEWLINE=0 for FILE in $CHANGED; do - echo "Checking file: $FILE" if [ ! -f "$FILE" ]; then - echo "Warning: File no longer exists: $FILE" continue fi if file "$FILE" | grep -q -E 'text|ASCII'; then - echo "File is text: $FILE" if [ $(tail -c 1 "$FILE" | wc -l) -eq 0 ]; then echo "Missing newline at end of file: $FILE" NO_NEWLINE=1 fi - else - echo "Skipping non-text file: $FILE" fi done - name: grab-mergecommits From 85a8031419e0faea4bdaffb6e0978181d35ca7f1 Mon Sep 17 00:00:00 2001 From: mdrakos Date: Wed, 6 Nov 2024 09:53:41 -0800 Subject: [PATCH 027/336] Don't check if target branch is master --- activestate.yaml | 28 +++++++++++++--------------- 1 file changed, 13 insertions(+), 15 deletions(-) diff --git a/activestate.yaml b/activestate.yaml index 91f5a44eb9..e3cd66155a 100644 --- a/activestate.yaml +++ b/activestate.yaml @@ -389,28 +389,19 @@ scripts: standalone: true description: "Checks if the code is formatted correctly" value: | - set -e - - if [ "$(git rev-parse --is-shallow-repository)" = "true" ]; then - echo "Detected shallow clone, fetching complete history..." - git fetch --unshallow origin master + TARGET_BRANCH=$GITHUB_BASE_REF + if [ "$GITHUB_BASE_REF" == "" ]; then + TARGET_BRANCH="master" fi - git fetch origin master:refs/remotes/origin/master - - MERGE_BASE=$(git merge-base HEAD origin/master) - CHANGED=$(git diff --name-only $MERGE_BASE...HEAD | grep -v testdata | grep -v vendor) || true - if [ -z "$CHANGED" ]; then - echo "No relevant changed files found" + if [ "$TARGET_BRANCH" == "master" ]; then + echo "Target branch is master, not checking for newlines" exit 0 fi - echo "Changed files: $CHANGED" + CHANGED=$(git diff --name-only origin/$TARGET_BRANCH | grep -v testdata | grep -v vendor) NO_NEWLINE=0 for FILE in $CHANGED; do - if [ ! -f "$FILE" ]; then - continue - fi if file "$FILE" | grep -q -E 'text|ASCII'; then if [ $(tail -c 1 "$FILE" | wc -l) -eq 0 ]; then echo "Missing newline at end of file: $FILE" @@ -418,6 +409,13 @@ scripts: fi fi done + + if [ "$NO_NEWLINE" -ne 0 ]; then + echo "Error: Some text files are missing a newline at the end." + exit 1 + else + echo "Success: All modified text files end with a newline." + fi - name: grab-mergecommits language: bash standalone: true From 5112a8c4dcb7fd9530afc60282b1e1da97cd583b Mon Sep 17 00:00:00 2001 From: mdrakos Date: Wed, 6 Nov 2024 09:59:29 -0800 Subject: [PATCH 028/336] Put back --- activestate.yaml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/activestate.yaml b/activestate.yaml index e3cd66155a..ef353eebef 100644 --- a/activestate.yaml +++ b/activestate.yaml @@ -389,6 +389,8 @@ scripts: standalone: true description: "Checks if the code is formatted correctly" value: | + set -e + TARGET_BRANCH=$GITHUB_BASE_REF if [ "$GITHUB_BASE_REF" == "" ]; then TARGET_BRANCH="master" From 329c41200a8f4afa22743e55bd757d72e2325c6d Mon Sep 17 00:00:00 2001 From: mdrakos Date: Wed, 6 Nov 2024 10:14:21 -0800 Subject: [PATCH 029/336] Add back git fetch --- activestate.yaml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/activestate.yaml b/activestate.yaml index ef353eebef..8d021d9ce1 100644 --- a/activestate.yaml +++ b/activestate.yaml @@ -401,6 +401,8 @@ scripts: exit 0 fi + git fetch --quiet origin $TARGET_BRANCH:refs/remotes/origin/$TARGET_BRANCH + CHANGED=$(git diff --name-only origin/$TARGET_BRANCH | grep -v testdata | grep -v vendor) NO_NEWLINE=0 for FILE in $CHANGED; do From d2a7df34902c384fc0af7059f3e4a5d58ead15bc Mon Sep 17 00:00:00 2001 From: mdrakos Date: Wed, 6 Nov 2024 11:23:32 -0800 Subject: [PATCH 030/336] Add back empty response check --- pkg/platform/model/checkpoints.go | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/pkg/platform/model/checkpoints.go b/pkg/platform/model/checkpoints.go index 3ca70b00d2..2cc16dddb6 100644 --- a/pkg/platform/model/checkpoints.go +++ b/pkg/platform/model/checkpoints.go @@ -11,6 +11,7 @@ import ( "github.com/ActiveState/cli/internal/constants" "github.com/ActiveState/cli/internal/errs" + "github.com/ActiveState/cli/internal/locale" "github.com/ActiveState/cli/internal/logging" "github.com/ActiveState/cli/pkg/platform/api/graphql" gqlModel "github.com/ActiveState/cli/pkg/platform/api/graphql/model" @@ -108,6 +109,10 @@ func FetchCheckpointForCommit(commitID strfmt.UUID, auth *authentication.Auth) ( logging.Debug("Returning %d requirements", len(response)) + if len(response) == 0 { + return nil, locale.WrapError(ErrNoData, "err_no_data_found") + } + return response, nil } From 18ce970353919ff545ad66df13c17d408ca01dd2 Mon Sep 17 00:00:00 2001 From: mdrakos Date: Wed, 6 Nov 2024 15:59:21 -0800 Subject: [PATCH 031/336] Remove unused interface --- internal/gqlclient/gqlclient.go | 5 ----- 1 file changed, 5 deletions(-) diff --git a/internal/gqlclient/gqlclient.go b/internal/gqlclient/gqlclient.go index 5580fd0ac6..273a6e7b5a 100644 --- a/internal/gqlclient/gqlclient.go +++ b/internal/gqlclient/gqlclient.go @@ -44,11 +44,6 @@ type RequestWithFiles interface { Files() []File } -type RequestWithMultiQuery interface { - Request - IsMultiQuery() bool -} - type Header map[string][]string type graphqlClient = graphql.Client From 110c0db277e18ba873406ab0bb3630e00db892ed Mon Sep 17 00:00:00 2001 From: mitchell Date: Thu, 7 Nov 2024 10:54:25 -0500 Subject: [PATCH 032/336] CVE report should include changed requirements. Previously it would only show for added requirements. If a requirement changes versions, we should include it in the CVE report. --- internal/runbits/cves/cves.go | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/internal/runbits/cves/cves.go b/internal/runbits/cves/cves.go index a810fae39b..b9b598482b 100644 --- a/internal/runbits/cves/cves.go +++ b/internal/runbits/cves/cves.go @@ -77,7 +77,7 @@ func (c *CveReport) Report(newBuildPlan *buildplan.BuildPlan, oldBuildPlan *buil } } - names := addedRequirements(oldBuildPlan, newBuildPlan) + names := changedRequirements(oldBuildPlan, newBuildPlan) pg := output.StartSpinner(c.prime.Output(), locale.Tr("progress_cve_search", strings.Join(names, ", ")), constants.TerminalAnimationInterval) ingredientVulnerabilities, err := model.FetchVulnerabilitiesForIngredients(c.prime.Auth(), ingredients) @@ -235,7 +235,7 @@ func (c *CveReport) promptForSecurity() (bool, error) { return confirm, nil } -func addedRequirements(oldBuildPlan *buildplan.BuildPlan, newBuildPlan *buildplan.BuildPlan) []string { +func changedRequirements(oldBuildPlan *buildplan.BuildPlan, newBuildPlan *buildplan.BuildPlan) []string { var names []string var oldRequirements buildplan.Requirements if oldBuildPlan != nil { @@ -243,13 +243,16 @@ func addedRequirements(oldBuildPlan *buildplan.BuildPlan, newBuildPlan *buildpla } newRequirements := newBuildPlan.Requirements() - oldReqs := make(map[string]bool) + oldReqs := make(map[string]string) for _, req := range oldRequirements { - oldReqs[qualifiedName(req)] = true + oldReqs[qualifiedName(req)] = req.Ingredient.Version } for _, req := range newRequirements { - if oldReqs[qualifiedName(req)] || req.Namespace == buildplan.NamespaceInternal { + if req.Namespace == buildplan.NamespaceInternal { + continue + } + if version, exists := oldReqs[qualifiedName(req)]; exists && version == req.Ingredient.Version { continue } names = append(names, req.Name) From 3c0d5fcfd39b31acd18ad76f114894d6d89adfec Mon Sep 17 00:00:00 2001 From: mitchell Date: Thu, 7 Nov 2024 16:08:41 -0500 Subject: [PATCH 033/336] `state commit` should not poll for build result. --- internal/runners/commit/commit.go | 2 +- pkg/platform/model/buildplanner/build.go | 10 +++++++++- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/internal/runners/commit/commit.go b/internal/runners/commit/commit.go index 1ac478ce50..4b7b208ccc 100644 --- a/internal/runners/commit/commit.go +++ b/internal/runners/commit/commit.go @@ -160,7 +160,7 @@ func (c *Commit) Run() (rerr error) { } // Get old buildplan. - oldCommit, err := bp.FetchCommit(localCommitID, proj.Owner(), proj.Name(), nil) + oldCommit, err := bp.FetchCommitNoPoll(localCommitID, proj.Owner(), proj.Name(), nil) if err != nil { return errs.Wrap(err, "Failed to fetch old commit") } diff --git a/pkg/platform/model/buildplanner/build.go b/pkg/platform/model/buildplanner/build.go index feef9b1a28..867e056396 100644 --- a/pkg/platform/model/buildplanner/build.go +++ b/pkg/platform/model/buildplanner/build.go @@ -57,6 +57,14 @@ func (c *client) Run(req gqlclient.Request, resp interface{}) error { const fetchCommitCacheExpiry = time.Hour * 12 func (b *BuildPlanner) FetchCommit(commitID strfmt.UUID, owner, project string, target *string) (*Commit, error) { + return b.fetchCommit(commitID, owner, project, target, true) +} + +func (b *BuildPlanner) FetchCommitNoPoll(commitID strfmt.UUID, owner, project string, target *string) (*Commit, error) { + return b.fetchCommit(commitID, owner, project, target, false) +} + +func (b *BuildPlanner) fetchCommit(commitID strfmt.UUID, owner, project string, target *string, poll bool) (*Commit, error) { logging.Debug("FetchCommit, commitID: %s, owner: %s, project: %s", commitID, owner, project) resp := &response.ProjectCommitResponse{} @@ -92,7 +100,7 @@ func (b *BuildPlanner) FetchCommit(commitID strfmt.UUID, owner, project string, // The BuildPlanner will return a build plan with a status of // "planning" if the build plan is not ready yet. We need to // poll the BuildPlanner until the build is ready. - if resp.Project.Commit.Build.Status == raw.Planning { + if poll && resp.Project.Commit.Build.Status == raw.Planning { resp.Project.Commit.Build, err = b.pollBuildPlanned(commitID.String(), owner, project, target) if err != nil { return nil, errs.Wrap(err, "failed to poll build plan") From d4caca7d365309e48db4e82c6b7bc1506ef99e00 Mon Sep 17 00:00:00 2001 From: mitchell Date: Thu, 7 Nov 2024 16:35:17 -0500 Subject: [PATCH 034/336] Fix failing tests. --- test/integration/publish_int_test.go | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/test/integration/publish_int_test.go b/test/integration/publish_int_test.go index 5e1caf8def..a8963c8724 100644 --- a/test/integration/publish_int_test.go +++ b/test/integration/publish_int_test.go @@ -52,10 +52,12 @@ func (suite *PublishIntegrationTestSuite) TestPublish() { expect expect } - tempFile := fileutils.TempFilePath("", "*.zip") + tempFile := fileutils.TempFilePath("", ".zip") + suite.Require().NoError(fileutils.Touch(tempFile)) defer os.Remove(tempFile) - tempFileInvalid := fileutils.TempFilePath("", "*.notzip") + tempFileInvalid := fileutils.TempFilePath("", ".notzip") + suite.Require().NoError(fileutils.Touch(tempFileInvalid)) defer os.Remove(tempFileInvalid) ts := e2e.New(suite.T(), false) From b1c60863e9a7d3fff7e3c91e20d53104d34f7a50 Mon Sep 17 00:00:00 2001 From: mitchell Date: Thu, 7 Nov 2024 17:37:54 -0500 Subject: [PATCH 035/336] `state commit`, `state push`, and `state reset` should not fail if there is no work to be don --- internal/runners/commit/commit.go | 11 ++--------- internal/runners/push/push.go | 12 +++++++++--- internal/runners/push/rationalize.go | 15 --------------- internal/runners/reset/reset.go | 3 ++- test/integration/commit_int_test.go | 2 +- test/integration/push_int_test.go | 7 +------ test/integration/reset_int_test.go | 2 +- 7 files changed, 16 insertions(+), 36 deletions(-) diff --git a/internal/runners/commit/commit.go b/internal/runners/commit/commit.go index 4b7b208ccc..08a7f2f12b 100644 --- a/internal/runners/commit/commit.go +++ b/internal/runners/commit/commit.go @@ -35,8 +35,6 @@ func New(p primeable) *Commit { return &Commit{p} } -var ErrNoChanges = errors.New("buildscript has no changes") - func rationalizeError(err *error) { var buildPlannerErr *bpResp.BuildPlannerError @@ -44,12 +42,6 @@ func rationalizeError(err *error) { case err == nil: return - case errors.Is(*err, ErrNoChanges): - *err = errs.WrapUserFacing(*err, locale.Tl( - "commit_notice_no_change", - "Your buildscript contains no new changes. No commit necessary.", - ), errs.SetInput()) - case errors.Is(*err, buildscript_runbit.ErrBuildscriptNotExist): *err = errs.WrapUserFacing(*err, locale.T("err_buildscript_not_exist")) @@ -109,7 +101,8 @@ func (c *Commit) Run() (rerr error) { // Check if there is anything to commit if equals { - return ErrNoChanges + out.Notice(locale.Tl("commit_notice_no_change", "Your buildscript contains no new changes. No commit necessary.")) + return nil } pg := output.StartSpinner(out, locale.T("progress_commit"), constants.TerminalAnimationInterval) diff --git a/internal/runners/push/push.go b/internal/runners/push/push.go index df61f99e2f..ca1c774161 100644 --- a/internal/runners/push/push.go +++ b/internal/runners/push/push.go @@ -13,6 +13,7 @@ import ( "github.com/ActiveState/cli/internal/rtutils/ptr" "github.com/ActiveState/cli/internal/runbits/rationalize" "github.com/ActiveState/cli/pkg/localcommit" + bpResp "github.com/ActiveState/cli/pkg/platform/api/buildplanner/response" "github.com/ActiveState/cli/pkg/platform/api/buildplanner/types" "github.com/ActiveState/cli/pkg/platform/api/mono/mono_models" "github.com/ActiveState/cli/pkg/platform/authentication" @@ -65,8 +66,7 @@ const ( ) var ( - errNoChanges = errors.New("no changes") - errNoCommit = errors.New("no commit") + errNoCommit = errors.New("no commit") ) type errProjectNameInUse struct { @@ -234,7 +234,8 @@ func (r *Push) Run(params PushParams) (rerr error) { // Check if branch is already up to date if branch.CommitID != nil && branch.CommitID.String() == commitID.String() { - return errNoChanges + r.out.Notice(locale.T("push_no_changes")) + return nil } // Perform the (fast-forward) push. @@ -246,6 +247,11 @@ func (r *Push) Run(params PushParams) (rerr error) { Strategy: types.MergeCommitStrategyFastForward, }) if err != nil { + var mergeCommitErr *bpResp.MergedCommitError + if errors.As(err, &mergeCommitErr) && mergeCommitErr.Type == types.NoChangeSinceLastCommitErrorType { + r.out.Notice(locale.T("push_no_changes")) + return nil + } return errs.Wrap(err, "Could not push") } } diff --git a/internal/runners/push/rationalize.go b/internal/runners/push/rationalize.go index 90af8e6774..762ed5c55a 100644 --- a/internal/runners/push/rationalize.go +++ b/internal/runners/push/rationalize.go @@ -52,13 +52,6 @@ func rationalizeError(err *error) { errs.SetInput(), ) - // No changes made - case errors.Is(*err, errNoChanges): - *err = errs.WrapUserFacing(*err, - locale.T("push_no_changes"), - errs.SetInput(), - ) - // Project name is already in use case errors.As(*err, &projectNameInUseErr): *err = errs.WrapUserFacing(*err, @@ -86,14 +79,6 @@ func rationalizeError(err *error) { *err = errs.WrapUserFacing(*err, locale.T("err_push_target_invalid_history"), errs.SetInput()) - - // No changes made - case types.NoChangeSinceLastCommitErrorType: - *err = errs.WrapUserFacing(*err, - locale.T("push_no_changes"), - errs.SetInput(), - ) - } } } diff --git a/internal/runners/reset/reset.go b/internal/runners/reset/reset.go index c046635e63..45e042e725 100644 --- a/internal/runners/reset/reset.go +++ b/internal/runners/reset/reset.go @@ -86,7 +86,8 @@ func (r *Reset) Run(params *Params) error { return errs.Wrap(err, "Unable to get local commit") } if *latestCommit == localCommitID { - return locale.NewInputError("err_reset_latest", "You are already on the latest commit") + r.out.Notice(locale.Tl("err_reset_latest", "You are already on the latest commit")) + return nil } commitID = *latestCommit diff --git a/test/integration/commit_int_test.go b/test/integration/commit_int_test.go index 9dbe1c22b4..77e549d7ea 100644 --- a/test/integration/commit_int_test.go +++ b/test/integration/commit_int_test.go @@ -35,7 +35,7 @@ func (suite *CommitIntegrationTestSuite) TestCommitManualBuildScriptMod() { cp := ts.Spawn("commit") cp.Expect("no new changes") - cp.ExpectExitCode(1) + cp.ExpectExitCode(0) _, err = buildscript_runbit.ScriptFromProject(proj) suite.Require().NoError(err) // verify validity diff --git a/test/integration/push_int_test.go b/test/integration/push_int_test.go index a19dd5323b..6a6e03514f 100644 --- a/test/integration/push_int_test.go +++ b/test/integration/push_int_test.go @@ -259,12 +259,7 @@ func (suite *PushIntegrationTestSuite) TestPush_NoChanges() { ts.LoginAsPersistentUser() cp := ts.Spawn("push") cp.Expect("no local changes to push") - cp.ExpectExitCode(1) - ts.IgnoreLogErrors() - - if strings.Count(cp.Snapshot(), " x ") != 1 { - suite.Fail("Expected exactly ONE error message, got: ", cp.Snapshot()) - } + cp.ExpectExitCode(0) } func (suite *PushIntegrationTestSuite) TestPush_NameInUse() { diff --git a/test/integration/reset_int_test.go b/test/integration/reset_int_test.go index e7cc862ea9..9b3199ee60 100644 --- a/test/integration/reset_int_test.go +++ b/test/integration/reset_int_test.go @@ -51,7 +51,7 @@ func (suite *ResetIntegrationTestSuite) TestReset() { cp = ts.Spawn("reset") cp.Expect("You are already on the latest commit") - cp.ExpectNotExitCode(0) + cp.ExpectExitCode(0) cp = ts.Spawn("reset", "00000000-0000-0000-0000-000000000000") cp.Expect("The given commit ID does not exist") From 3b1998bf755a4113ef4f27f59dc746f777d85219 Mon Sep 17 00:00:00 2001 From: mdrakos Date: Thu, 7 Nov 2024 15:17:21 -0800 Subject: [PATCH 036/336] Remove path inference and use length --- internal/graphql/graphql.go | 112 ++------ internal/graphql/graphql_json_test.go | 14 +- internal/graphql/graphql_multipart_test.go | 6 +- internal/graphql/graphql_test.go | 293 +++++---------------- 4 files changed, 101 insertions(+), 324 deletions(-) diff --git a/internal/graphql/graphql.go b/internal/graphql/graphql.go index 7085f0448c..cfd400b710 100644 --- a/internal/graphql/graphql.go +++ b/internal/graphql/graphql.go @@ -39,8 +39,6 @@ import ( "io" "mime/multipart" "net/http" - "strings" - "unicode" "github.com/pkg/errors" ) @@ -146,30 +144,7 @@ func (c *Client) runWithJSON(ctx context.Context, req *Request, resp interface{} return gr.Errors[0] } - if req.dataPath != "" { - val, err := findValueByPath(intermediateResp, req.dataPath) - if err != nil { - // If the response is empty, return nil instead of an error - if len(intermediateResp) == 0 { - return nil - } - return err - } - data, err := json.Marshal(val) - if err != nil { - return errors.Wrap(err, "remarshaling response") - } - return json.Unmarshal(data, resp) - } - - data, err := json.Marshal(intermediateResp) - if err != nil { - return errors.Wrap(err, "remarshaling response") - } - if resp == nil { - return nil - } - return json.Unmarshal(data, resp) + return c.marshalResponse(intermediateResp, resp) } func (c *Client) runWithPostFields(ctx context.Context, req *Request, resp interface{}) error { @@ -238,25 +213,32 @@ func (c *Client) runWithPostFields(ctx context.Context, req *Request, resp inter return gr.Errors[0] } - if req.dataPath != "" { - val, err := findValueByPath(intermediateResp, req.dataPath) - if err != nil { - return errors.Wrap(err, "finding value by path") - } - data, err := json.Marshal(val) - if err != nil { - return errors.Wrap(err, "remarshaling response") + return c.marshalResponse(intermediateResp, resp) +} + +// marshalResponse handles marshaling the intermediate response and unmarshaling it into the final response object +func (c *Client) marshalResponse(intermediateResp map[string]interface{}, resp interface{}) error { + // If resp is nil, no need to process further + if resp == nil { + return nil + } + + // Handle single-value response case + if len(intermediateResp) == 1 { + for _, val := range intermediateResp { + data, err := json.Marshal(val) + if err != nil { + return errors.Wrap(err, "remarshaling response") + } + return json.Unmarshal(data, resp) } - return json.Unmarshal(data, resp) } + // Handle multi-value response case data, err := json.Marshal(intermediateResp) if err != nil { return errors.Wrap(err, "remarshaling response") } - if resp == nil { - return nil - } return json.Unmarshal(data, resp) } @@ -298,10 +280,9 @@ type graphResponse struct { // Request is a GraphQL request. type Request struct { - q string - vars map[string]interface{} - files []file - dataPath string + q string + vars map[string]interface{} + files []file // Header represent any request headers that will be set // when the request is made. @@ -311,48 +292,12 @@ type Request struct { // NewRequest makes a new Request with the specified string. func NewRequest(q string) *Request { req := &Request{ - q: q, - Header: make(map[string][]string), - dataPath: inferDataPath(q), + q: q, + Header: make(map[string][]string), } return req } -// inferDataPath attempts to extract the first field name after the operation type -// as the data path. Returns empty string if unable to infer. -// For example, given the query: -// -// query { user { name } } -// -// it will return "user". -// The dataPath is used to signal to the client where it should start unmarshaling the response. -func inferDataPath(query string) string { - query = strings.TrimSpace(query) - if query == "" { - return "" - } - - startIdx := strings.Index(query, "{") - if startIdx == -1 { - return "" - } - query = query[startIdx+1:] - query = strings.TrimSpace(query) - if query == "" || query == "}" { - return "" - } - - var result strings.Builder - for _, ch := range query { - if ch == '(' || ch == '{' || unicode.IsSpace(ch) || ch == ':' { - break - } - result.WriteRune(ch) - } - - return strings.TrimSpace(result.String()) -} - // Var sets a variable. func (req *Request) Var(key string, value interface{}) { if req.vars == nil { @@ -372,13 +317,6 @@ func (req *Request) File(fieldname, filename string, r io.Reader) { }) } -// DataPath sets the path to the data field in the response. -// This is useful if you want to unmarshal a nested object. -// If not set, it will use the automatically inferred path. -func (req *Request) DataPath(path string) { - req.dataPath = path -} - // file represents a file to upload. type file struct { Field string diff --git a/internal/graphql/graphql_json_test.go b/internal/graphql/graphql_json_test.go index 71f7f56d0e..3cd6dde068 100644 --- a/internal/graphql/graphql_json_test.go +++ b/internal/graphql/graphql_json_test.go @@ -23,7 +23,9 @@ func TestDoJSON(t *testing.T) { is.Equal(string(b), `{"query":"query {}","variables":null}`+"\n") io.WriteString(w, `{ "data": { - "something": "yes" + "query": { + "something": "yes" + } } }`) })) @@ -50,7 +52,7 @@ func TestQueryJSON(t *testing.T) { b, err := ioutil.ReadAll(r.Body) is.NoErr(err) is.Equal(string(b), `{"query":"query {}","variables":{"username":"matryer"}}`+"\n") - _, err = io.WriteString(w, `{"data":{"value":"some data"}}`) + _, err = io.WriteString(w, `{"data":{"query":{"value":"some data"}}}`) is.NoErr(err) })) defer srv.Close() @@ -84,7 +86,13 @@ func TestHeader(t *testing.T) { calls++ is.Equal(r.Header.Get("X-Custom-Header"), "123") - _, err := io.WriteString(w, `{"data":{"value":"some data"}}`) + _, err := io.WriteString(w, `{ + "data": { + "query": { + "value": "some data" + } + } + }`) is.NoErr(err) })) defer srv.Close() diff --git a/internal/graphql/graphql_multipart_test.go b/internal/graphql/graphql_multipart_test.go index 1756d95a39..7ae97b5a9f 100644 --- a/internal/graphql/graphql_multipart_test.go +++ b/internal/graphql/graphql_multipart_test.go @@ -45,7 +45,9 @@ func TestDoUseMultipartForm(t *testing.T) { is.Equal(query, `query {}`) io.WriteString(w, `{ "data": { - "something": "yes" + "query": { + "something": "yes" + } } }`) })) @@ -125,7 +127,7 @@ func TestQuery(t *testing.T) { query := r.FormValue("query") is.Equal(query, "query {}") is.Equal(r.FormValue("variables"), `{"username":"matryer"}`+"\n") - _, err := io.WriteString(w, `{"data":{"value":"some data"}}`) + _, err := io.WriteString(w, `{"data":{"query":{"value":"some data"}}}`) is.NoErr(err) })) defer srv.Close() diff --git a/internal/graphql/graphql_test.go b/internal/graphql/graphql_test.go index 0911274e0a..1a24c533f3 100644 --- a/internal/graphql/graphql_test.go +++ b/internal/graphql/graphql_test.go @@ -8,7 +8,7 @@ import ( "testing" ) -func TestClient_DataPath(t *testing.T) { +func TestClient_SingleField(t *testing.T) { mockResponse := map[string]interface{}{ "data": map[string]interface{}{ "users": map[string]interface{}{ @@ -28,33 +28,12 @@ func TestClient_DataPath(t *testing.T) { client := NewClient(server.URL) tests := []struct { - name string - query string - dataPath string - want interface{} + name string + query string + want interface{} }{ { - name: "no data path", - query: `{ - users { - items { - id - name - } - } - }`, - dataPath: "", - want: map[string]interface{}{ - "users": map[string]interface{}{ - "items": []interface{}{ - map[string]interface{}{"id": "1", "name": "Alice"}, - map[string]interface{}{"id": "2", "name": "Bob"}, - }, - }, - }, - }, - { - name: "with data path to users", + name: "basic query", query: `{ users { items { @@ -63,7 +42,6 @@ func TestClient_DataPath(t *testing.T) { } } }`, - dataPath: "users", want: map[string]interface{}{ "items": []interface{}{ map[string]interface{}{"id": "1", "name": "Alice"}, @@ -72,7 +50,7 @@ func TestClient_DataPath(t *testing.T) { }, }, { - name: "named query without data path", + name: "named query", query: `query GetUsers { users { items { @@ -81,27 +59,6 @@ func TestClient_DataPath(t *testing.T) { } } }`, - dataPath: "", - want: map[string]interface{}{ - "users": map[string]interface{}{ - "items": []interface{}{ - map[string]interface{}{"id": "1", "name": "Alice"}, - map[string]interface{}{"id": "2", "name": "Bob"}, - }, - }, - }, - }, - { - name: "named query with data path", - query: `query GetUsers { - users { - items { - id - name - } - } - }`, - dataPath: "users", want: map[string]interface{}{ "items": []interface{}{ map[string]interface{}{"id": "1", "name": "Alice"}, @@ -119,7 +76,6 @@ func TestClient_DataPath(t *testing.T) { } } }`, - dataPath: "users", want: map[string]interface{}{ "items": []interface{}{ map[string]interface{}{"id": "1", "name": "Alice"}, @@ -128,7 +84,7 @@ func TestClient_DataPath(t *testing.T) { }, }, { - name: "anonymous query with items data path", + name: "anonymous query", query: `{ users { items { @@ -137,42 +93,11 @@ func TestClient_DataPath(t *testing.T) { } } }`, - dataPath: "items", - want: []interface{}{ - map[string]interface{}{"id": "1", "name": "Alice"}, - map[string]interface{}{"id": "2", "name": "Bob"}, - }, - }, - { - name: "named query with items data path", - query: `query GetUsers { - users { - items { - id - name - } - } - }`, - dataPath: "items", - want: []interface{}{ - map[string]interface{}{"id": "1", "name": "Alice"}, - map[string]interface{}{"id": "2", "name": "Bob"}, - }, - }, - { - name: "named mutation with items data path", - query: `mutation CreateUser { - users { - items { - id - name - } - } - }`, - dataPath: "items", - want: []interface{}{ - map[string]interface{}{"id": "1", "name": "Alice"}, - map[string]interface{}{"id": "2", "name": "Bob"}, + want: map[string]interface{}{ + "items": []interface{}{ + map[string]interface{}{"id": "1", "name": "Alice"}, + map[string]interface{}{"id": "2", "name": "Bob"}, + }, }, }, } @@ -180,7 +105,6 @@ func TestClient_DataPath(t *testing.T) { for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { req := NewRequest(tt.query) - req.DataPath(tt.dataPath) var resp interface{} err := client.Run(context.Background(), req, &resp) @@ -205,172 +129,77 @@ func TestClient_DataPath(t *testing.T) { } } -func Test_inferDataPath(t *testing.T) { +func TestClient_MultipleFields(t *testing.T) { + mockResponse := map[string]interface{}{ + "data": map[string]interface{}{ + "users": map[string]interface{}{"id": "1", "name": "Alice"}, + "items": []map[string]interface{}{ + {"id": "1", "name": "Alice"}, + {"id": "2", "name": "Bob"}, + }, + }, + } + + server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + json.NewEncoder(w).Encode(mockResponse) + })) + defer server.Close() + + client := NewClient(server.URL) + tests := []struct { name string query string - want string + want interface{} }{ { - name: "simple query", + name: "basic query", query: `{ users { id name } - }`, - want: "users", - }, - { - name: "query with variables", - query: `query ($id: ID!) { - user(id: $id) { - name - email - } - }`, - want: "user", - }, - { - name: "query with operation name", - query: `query GetUser { - user { - name - } - }`, - want: "user", - }, - { - name: "query with multiple fields", - query: `{ - user { - name - } - posts { - title - } - }`, - want: "user", - }, - { - name: "empty query", - query: "", - want: "", - }, - { - name: "alternate empty query", - query: `query { - query {} - }`, - want: "query", - }, - { - name: "malformed query", - query: `query { - badly formatted* - }`, - want: "badly", - }, - { - name: "named mutation", - query: `mutation CreateUser($input: UserInput!) { - createUser(input: $input) { + items { id name } }`, - want: "createUser", - }, - { - name: "named query with aliases", - query: `query GetUserDetails { - userInfo: user { - profile { - firstName - lastName - } - settings { - theme - } - } - }`, - want: "userInfo", - }, - { - name: "complex nested query", - query: `query FetchDashboard { - dashboard { - widgets { - id - data { - chart { - points - } - } - } - } - }`, - want: "dashboard", - }, - { - name: "query with fragments", - query: `query GetUserWithPosts { - user { - ...UserFields - posts { - ...PostFields - } - } - } - - fragment UserFields on User { - id - name - } - - fragment PostFields on Post { - title - content - }`, - want: "user", - }, - { - name: "subscription", - query: `subscription OnUserUpdate { - userUpdated { - id - status - } - }`, - want: "userUpdated", + want: map[string]interface{}{ + "users": map[string]interface{}{ + "id": "1", + "name": "Alice", + }, + "items": []interface{}{ + map[string]interface{}{"id": "1", "name": "Alice"}, + map[string]interface{}{"id": "2", "name": "Bob"}, + }, + }, }, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - if got := inferDataPath(tt.query); got != tt.want { - t.Errorf("inferDataPath() = %v, want %v", got, tt.want) + req := NewRequest(tt.query) + + var resp interface{} + err := client.Run(context.Background(), req, &resp) + if err != nil { + t.Fatalf("unexpected error: %v", err) } - }) - } -} -func TestNewRequest_DataPathInference(t *testing.T) { - query := `{ - users { - id - name - } - }` + got, err := json.Marshal(resp) + if err != nil { + t.Fatalf("failed to marshal response: %v", err) + } - req := NewRequest(query) - if req.dataPath != "users" { - t.Errorf("NewRequest() dataPath = %v, want %v", req.dataPath, "users") - } + want, err := json.Marshal(tt.want) + if err != nil { + t.Fatalf("failed to marshal expected result: %v", err) + } - // Test that manual override works - req.DataPath("override") - if req.dataPath != "override" { - t.Errorf("DataPath() override failed, got = %v, want %v", req.dataPath, "override") + if string(got) != string(want) { + t.Errorf("got %s, want %s", got, want) + } + }) } } From 04f13089d15ab8c09b950732e382612842cc5175 Mon Sep 17 00:00:00 2001 From: mdrakos Date: Thu, 7 Nov 2024 16:46:50 -0800 Subject: [PATCH 037/336] Cleanup --- internal/graphql/graphql.go | 21 --------------------- 1 file changed, 21 deletions(-) diff --git a/internal/graphql/graphql.go b/internal/graphql/graphql.go index cfd400b710..780a2c6d46 100644 --- a/internal/graphql/graphql.go +++ b/internal/graphql/graphql.go @@ -216,14 +216,11 @@ func (c *Client) runWithPostFields(ctx context.Context, req *Request, resp inter return c.marshalResponse(intermediateResp, resp) } -// marshalResponse handles marshaling the intermediate response and unmarshaling it into the final response object func (c *Client) marshalResponse(intermediateResp map[string]interface{}, resp interface{}) error { - // If resp is nil, no need to process further if resp == nil { return nil } - // Handle single-value response case if len(intermediateResp) == 1 { for _, val := range intermediateResp { data, err := json.Marshal(val) @@ -234,7 +231,6 @@ func (c *Client) marshalResponse(intermediateResp map[string]interface{}, resp i } } - // Handle multi-value response case data, err := json.Marshal(intermediateResp) if err != nil { return errors.Wrap(err, "remarshaling response") @@ -323,20 +319,3 @@ type file struct { Name string R io.Reader } - -func findValueByPath(data map[string]interface{}, path string) (interface{}, error) { - if val, ok := data[path]; ok { - return val, nil - } - - // Recursively search through nested maps - for _, val := range data { - if nestedMap, ok := val.(map[string]interface{}); ok { - if found, err := findValueByPath(nestedMap, path); err == nil { - return found, nil - } - } - } - - return nil, fmt.Errorf("path %q not found in response", path) -} From be89fa82963c6f17eaafcc88ba1081e32e9065ad Mon Sep 17 00:00:00 2001 From: mitchell Date: Fri, 8 Nov 2024 14:29:15 -0500 Subject: [PATCH 038/336] Declining the security prompt should cancel `state commit`. --- internal/runners/commit/commit.go | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/internal/runners/commit/commit.go b/internal/runners/commit/commit.go index 08a7f2f12b..cdf503db46 100644 --- a/internal/runners/commit/commit.go +++ b/internal/runners/commit/commit.go @@ -122,20 +122,6 @@ func (c *Commit) Run() (rerr error) { return errs.Wrap(err, "Could not update project to reflect build script changes.") } - // Update local commit ID - if err := localcommit.Set(proj.Dir(), stagedCommit.CommitID.String()); err != nil { - return errs.Wrap(err, "Could not set local commit ID") - } - - // Update our local build expression to match the committed one. This allows our API a way to ensure forward compatibility. - newScript, err := bp.GetBuildScript(stagedCommit.CommitID.String()) - if err != nil { - return errs.Wrap(err, "Unable to get the remote build script") - } - if err := buildscript_runbit.Update(proj, newScript); err != nil { - return errs.Wrap(err, "Could not update local build script") - } - pg.Stop(locale.T("progress_success")) pg = nil @@ -169,6 +155,20 @@ func (c *Commit) Run() (rerr error) { return errs.Wrap(err, "Could not report CVEs") } + // Update local commit ID + if err := localcommit.Set(proj.Dir(), stagedCommit.CommitID.String()); err != nil { + return errs.Wrap(err, "Could not set local commit ID") + } + + // Update our local build expression to match the committed one. This allows our API a way to ensure forward compatibility. + newScript, err := bp.GetBuildScript(stagedCommit.CommitID.String()) + if err != nil { + return errs.Wrap(err, "Unable to get the remote build script") + } + if err := buildscript_runbit.Update(proj, newScript); err != nil { + return errs.Wrap(err, "Could not update local build script") + } + out.Notice("") // blank line out.Print(output.Prepare( locale.Tl( From 09dcb48e54cff87e3397cf2de7a1c48c680a4326 Mon Sep 17 00:00:00 2001 From: mitchell Date: Fri, 8 Nov 2024 15:22:43 -0500 Subject: [PATCH 039/336] Target & Verify action should append to Jira labels, not overwrite. --- scripts/internal/workflow-helpers/jira.go | 1 + 1 file changed, 1 insertion(+) diff --git a/scripts/internal/workflow-helpers/jira.go b/scripts/internal/workflow-helpers/jira.go index a250ea64a4..77699eaa7a 100644 --- a/scripts/internal/workflow-helpers/jira.go +++ b/scripts/internal/workflow-helpers/jira.go @@ -181,6 +181,7 @@ func UpdateJiraFixVersion(client *jira.Client, issue *jira.Issue, versionID stri Key: issue.Key, Fields: &jira.IssueFields{ FixVersions: []*jira.FixVersion{{ID: versionID}}, + Labels: issue.Fields.Labels, }, } From d092e16a2f8129ef621e88c8bcb211b0c42e6f9c Mon Sep 17 00:00:00 2001 From: mdrakos Date: Fri, 8 Nov 2024 13:37:51 -0800 Subject: [PATCH 040/336] Log retries --- internal/retryhttp/client.go | 2 ++ 1 file changed, 2 insertions(+) diff --git a/internal/retryhttp/client.go b/internal/retryhttp/client.go index a26478119d..9e99c29169 100644 --- a/internal/retryhttp/client.go +++ b/internal/retryhttp/client.go @@ -12,6 +12,7 @@ import ( "time" "github.com/ActiveState/cli/internal/constants" + "github.com/ActiveState/cli/internal/logging" "github.com/hashicorp/go-cleanhttp" "github.com/hashicorp/go-retryablehttp" "github.com/thoas/go-funk" @@ -139,6 +140,7 @@ func normalizeResponse(res *http.Response, err error) (*http.Response, error) { } func normalizeRetryResponse(res *http.Response, err error, numTries int) (*http.Response, error) { + logging.Debug("Retry failed with error: %v, after %d tries", err, numTries) if err2, ok := err.(net.Error); ok && err2.Timeout() { return res, locale.WrapExternalError(&UserNetworkError{-1}, "err_user_network_timeout", "", locale.Tr("err_user_network_solution", constants.ForumsURL)) } From e1a5947706ebbc2e00614b0631ba90f5aa481b63 Mon Sep 17 00:00:00 2001 From: mitchell Date: Tue, 12 Nov 2024 14:42:30 -0500 Subject: [PATCH 041/336] Added dashboard build progress details URL. --- internal/constants/constants.go | 3 +++ internal/locale/locales/en-us.yaml | 4 +++- internal/runbits/runtime/progress/progress.go | 1 + internal/runbits/runtime/runtime.go | 19 +++++++++++++++++++ pkg/runtime/events/events.go | 1 + pkg/runtime/options.go | 4 ++++ pkg/runtime/setup.go | 2 ++ test/integration/runtime_int_test.go | 3 ++- 8 files changed, 35 insertions(+), 2 deletions(-) diff --git a/internal/constants/constants.go b/internal/constants/constants.go index b8f054e96e..f64eb5650d 100644 --- a/internal/constants/constants.go +++ b/internal/constants/constants.go @@ -493,3 +493,6 @@ const OverrideShellEnvVarName = "ACTIVESTATE_CLI_SHELL_OVERRIDE" // IgnoreEnvEnvVarName is the environment variable to set for skipping specific environment variables during runtime setup. const IgnoreEnvEnvVarName = "ACTIVESTATE_CLI_IGNORE_ENV" + +// ProgressUrlPathName is the trailing path for a project's build progress. +const BuildProgressUrlPathName = "distributions" diff --git a/internal/locale/locales/en-us.yaml b/internal/locale/locales/en-us.yaml index 9a4deb3a3a..7030506100 100644 --- a/internal/locale/locales/en-us.yaml +++ b/internal/locale/locales/en-us.yaml @@ -1127,7 +1127,9 @@ progress_solve_preruntime: progress_pkg_nolang: other: "• Searching for [ACTIONABLE]{{.V0}}[/RESET] across all languages in the ActiveState Catalog" progress_build_log: - other: "Build Log [ACTIONABLE]{{.V0}}[/RESET]" + other: "Build Log: [ACTIONABLE]{{.V0}}[/RESET]" +progress_build_url: + other: "Detailed Progress: [ACTIONABLE]{{.V0}}[/RESET]" progress_completed: other: "[SUCCESS]✔ All dependencies have been installed and verified[/RESET]" progress_failed: diff --git a/internal/runbits/runtime/progress/progress.go b/internal/runbits/runtime/progress/progress.go index a071d5774e..2d902f0a42 100644 --- a/internal/runbits/runtime/progress/progress.go +++ b/internal/runbits/runtime/progress/progress.go @@ -147,6 +147,7 @@ func (p *ProgressDigester) Handle(ev events.Event) error { // already progressbars being displayed which won't play nice with newly printed output. if v.RequiresBuild { p.out.Notice(locale.Tr("progress_build_log", v.LogFilePath)) + p.out.Notice(locale.Tr("progress_build_url", v.ProgressUrl)) } p.recipeID = v.RecipeID diff --git a/internal/runbits/runtime/runtime.go b/internal/runbits/runtime/runtime.go index f4b72ba59b..5cd987d89d 100644 --- a/internal/runbits/runtime/runtime.go +++ b/internal/runbits/runtime/runtime.go @@ -1,6 +1,7 @@ package runtime_runbit import ( + "net/url" "os" anaConsts "github.com/ActiveState/cli/internal/analytics/constants" @@ -252,6 +253,24 @@ func Update( if opts.Archive != nil { rtOpts = append(rtOpts, runtime.WithArchive(opts.Archive.Dir, opts.Archive.PlatformID, checkout.ArtifactExt)) } + if commit.BuildPlan().IsBuildInProgress() { + // Build progress URL is of the form + // https://///distributions?branch=&commitID= + host := constants.DefaultAPIHost + if hostOverride := os.Getenv(constants.APIHostEnvVarName); hostOverride != "" { + host = hostOverride + } + path, err := url.JoinPath(proj.Owner(), proj.Name(), constants.BuildProgressUrlPathName) + if err != nil { + return nil, errs.Wrap(err, "Could not construct progress url path") + } + u := &url.URL{Scheme: "https", Host: host, Path: path} + q := u.Query() + q.Set("branch", proj.BranchName()) + q.Set("commitID", commitID.String()) + u.RawQuery = q.Encode() + rtOpts = append(rtOpts, runtime.WithBuildProgressUrl(u.String())) + } if err := rt.Update(buildPlan, rtHash, rtOpts...); err != nil { return nil, locale.WrapError(err, "err_packages_update_runtime_install") diff --git a/pkg/runtime/events/events.go b/pkg/runtime/events/events.go index 9585c182b3..1f9ffebfcf 100644 --- a/pkg/runtime/events/events.go +++ b/pkg/runtime/events/events.go @@ -37,6 +37,7 @@ type Start struct { RequiresBuild bool LogFilePath string + ProgressUrl string ArtifactsToBuild buildplan.ArtifactIDMap ArtifactsToDownload buildplan.ArtifactIDMap diff --git a/pkg/runtime/options.go b/pkg/runtime/options.go index dd150afaef..19492243cf 100644 --- a/pkg/runtime/options.go +++ b/pkg/runtime/options.go @@ -13,6 +13,10 @@ func WithBuildlogFilePath(path string) SetOpt { return func(opts *Opts) { opts.BuildlogFilePath = path } } +func WithBuildProgressUrl(url string) SetOpt { + return func(opts *Opts) { opts.BuildProgressUrl = url } +} + func WithPreferredLibcVersion(version string) SetOpt { return func(opts *Opts) { opts.PreferredLibcVersion = version } } diff --git a/pkg/runtime/setup.go b/pkg/runtime/setup.go index b59229af79..d35ca25805 100644 --- a/pkg/runtime/setup.go +++ b/pkg/runtime/setup.go @@ -46,6 +46,7 @@ type Opts struct { PreferredLibcVersion string EventHandlers []events.HandlerFunc BuildlogFilePath string + BuildProgressUrl string FromArchive *fromArchive @@ -200,6 +201,7 @@ func (s *setup) RunAndWait() (rerr error) { RecipeID: s.buildplan.LegacyRecipeID(), RequiresBuild: s.buildplan.IsBuildInProgress() && len(s.toDownload) > 0, LogFilePath: s.opts.BuildlogFilePath, + ProgressUrl: s.opts.BuildProgressUrl, ArtifactsToBuild: s.toBuild, ArtifactsToDownload: s.toDownload, ArtifactsToUnpack: s.toUnpack, diff --git a/test/integration/runtime_int_test.go b/test/integration/runtime_int_test.go index 55b440c199..cb22734c18 100644 --- a/test/integration/runtime_int_test.go +++ b/test/integration/runtime_int_test.go @@ -169,7 +169,8 @@ func (suite *RuntimeIntegrationTestSuite) TestBuildInProgress() { ts.PrepareEmptyProject() cp = ts.Spawn("install", "private/"+e2e.PersistentUsername+"/hello-world", "--ts", "now") - cp.Expect("Build Log") + cp.Expect("Build Log:") + cp.Expect("Detailed Progress:") cp.Expect("Building") cp.Expect("All dependencies have been installed and verified", e2e.RuntimeBuildSourcingTimeoutOpt) cp.Expect("Added: private/" + e2e.PersistentUsername + "/hello-world") From 2bf0030e9269e605296b89833d9832e2bf0de1cc Mon Sep 17 00:00:00 2001 From: mdrakos Date: Wed, 13 Nov 2024 11:43:14 -0800 Subject: [PATCH 042/336] Debug test --- internal/testhelpers/e2e/env.go | 1 + 1 file changed, 1 insertion(+) diff --git a/internal/testhelpers/e2e/env.go b/internal/testhelpers/e2e/env.go index 38cb7cb14b..7270368d84 100644 --- a/internal/testhelpers/e2e/env.go +++ b/internal/testhelpers/e2e/env.go @@ -40,6 +40,7 @@ func sandboxedTestEnvironment(t *testing.T, dirs *Dirs, updatePath bool, extraEn constants.ServiceSockDir + "=" + dirs.SockRoot, constants.HomeEnvVarName + "=" + dirs.HomeDir, systemHomeEnvVarName + "=" + dirs.HomeDir, + constants.DebugServiceRequestsEnvVarName + "=true", "NO_COLOR=true", "CI=true", }...) From 6a243fa7a4b59819b4c550120d278f7684935867 Mon Sep 17 00:00:00 2001 From: mitchell Date: Wed, 13 Nov 2024 15:11:45 -0500 Subject: [PATCH 043/336] Add a bit of lag to the JWT renewal time. It was possible to land within the interval between actual expired time and expected expired time. --- pkg/platform/authentication/auth.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/platform/authentication/auth.go b/pkg/platform/authentication/auth.go index 2b0c3a7936..6bd4b9c2cc 100644 --- a/pkg/platform/authentication/auth.go +++ b/pkg/platform/authentication/auth.go @@ -317,7 +317,7 @@ func (s *Auth) UpdateSession(accessToken *mono_models.JWT) { s.bearerToken = accessToken.Token clientAuth := httptransport.BearerToken(s.bearerToken) s.clientAuth = &clientAuth - s.lastRenewal = ptr.To(time.Now()) + s.lastRenewal = ptr.To(time.Now().Add(-1 * time.Minute)) // the renewal happened up to a few seconds ago, not now persist = s } From 8ef7da780754695e985177a3fb1c7e538940eea4 Mon Sep 17 00:00:00 2001 From: mdrakos Date: Wed, 13 Nov 2024 12:58:51 -0800 Subject: [PATCH 044/336] Apply same unmarshalling to gqlclient --- internal/gqlclient/gqlclient.go | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/internal/gqlclient/gqlclient.go b/internal/gqlclient/gqlclient.go index 273a6e7b5a..a9589bc51f 100644 --- a/internal/gqlclient/gqlclient.go +++ b/internal/gqlclient/gqlclient.go @@ -312,8 +312,9 @@ func (c *Client) runWithFiles(ctx context.Context, gqlReq RequestWithFiles, resp logging.Debug("gqlclient: response: %s", responseData) } + intermediateResp := make(map[string]interface{}) gr := &graphResponse{ - Data: response, + Data: &intermediateResp, } req = req.WithContext(ctx) c.Log(fmt.Sprintf(">> Raw Request: %s\n", req.URL.String())) @@ -371,5 +372,20 @@ func (c *Client) runWithFiles(ctx context.Context, gqlReq RequestWithFiles, resp if err := json.Unmarshal(resp, &gr); err != nil { return errors.Wrap(err, "decoding response") } - return nil + + if len(intermediateResp) == 1 { + for _, val := range intermediateResp { + data, err := json.Marshal(val) + if err != nil { + return errors.Wrap(err, "remarshaling response") + } + return json.Unmarshal(data, response) + } + } + + data, err := json.Marshal(intermediateResp) + if err != nil { + return errors.Wrap(err, "remarshaling response") + } + return json.Unmarshal(data, response) } From 9f1af8ed3e65f195dc5c4bfbe6dc7e85e3b2403e Mon Sep 17 00:00:00 2001 From: mdrakos Date: Wed, 13 Nov 2024 13:11:13 -0800 Subject: [PATCH 045/336] Remove debug code --- internal/testhelpers/e2e/env.go | 1 - 1 file changed, 1 deletion(-) diff --git a/internal/testhelpers/e2e/env.go b/internal/testhelpers/e2e/env.go index 7270368d84..38cb7cb14b 100644 --- a/internal/testhelpers/e2e/env.go +++ b/internal/testhelpers/e2e/env.go @@ -40,7 +40,6 @@ func sandboxedTestEnvironment(t *testing.T, dirs *Dirs, updatePath bool, extraEn constants.ServiceSockDir + "=" + dirs.SockRoot, constants.HomeEnvVarName + "=" + dirs.HomeDir, systemHomeEnvVarName + "=" + dirs.HomeDir, - constants.DebugServiceRequestsEnvVarName + "=true", "NO_COLOR=true", "CI=true", }...) From 2ecd5c7ace6628e7f2e94d3266fbf32793ef3ce7 Mon Sep 17 00:00:00 2001 From: mdrakos Date: Thu, 14 Nov 2024 10:02:10 -0800 Subject: [PATCH 046/336] Add comment --- internal/gqlclient/gqlclient.go | 2 ++ 1 file changed, 2 insertions(+) diff --git a/internal/gqlclient/gqlclient.go b/internal/gqlclient/gqlclient.go index a9589bc51f..d9e4c1ae60 100644 --- a/internal/gqlclient/gqlclient.go +++ b/internal/gqlclient/gqlclient.go @@ -373,6 +373,8 @@ func (c *Client) runWithFiles(ctx context.Context, gqlReq RequestWithFiles, resp return errors.Wrap(err, "decoding response") } + // If the response is a single object, meaning we only have a single query in the request, we can unmarshal the + // response directly to the response type. Otherwise, we need to marshal the response as we normally would. if len(intermediateResp) == 1 { for _, val := range intermediateResp { data, err := json.Marshal(val) From e862c58b097d0a50b2ed9950492c351378aa7e4f Mon Sep 17 00:00:00 2001 From: mitchell Date: Thu, 14 Nov 2024 15:28:58 -0500 Subject: [PATCH 047/336] Reduce JWT lifetime instead. --- pkg/platform/authentication/auth.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pkg/platform/authentication/auth.go b/pkg/platform/authentication/auth.go index 6bd4b9c2cc..8e1a1f8db3 100644 --- a/pkg/platform/authentication/auth.go +++ b/pkg/platform/authentication/auth.go @@ -37,8 +37,8 @@ type ErrTokenRequired struct{ *locale.LocalizedError } var errNotYetGranted = locale.NewInputError("err_auth_device_noauth") // jwtLifetime is the lifetime of the JWT. This is defined by the API, but the API doesn't communicate this. -// We drop a minute from this to avoid race conditions with the API. -const jwtLifetime = (1 * time.Hour) - (1 * time.Minute) +// We drop 10 minutes from this to be on the safe side and avoid race conditions with the API. +const jwtLifetime = (1 * time.Hour) - (10 * time.Minute) // Auth is the base structure used to record the authenticated state type Auth struct { @@ -317,7 +317,7 @@ func (s *Auth) UpdateSession(accessToken *mono_models.JWT) { s.bearerToken = accessToken.Token clientAuth := httptransport.BearerToken(s.bearerToken) s.clientAuth = &clientAuth - s.lastRenewal = ptr.To(time.Now().Add(-1 * time.Minute)) // the renewal happened up to a few seconds ago, not now + s.lastRenewal = ptr.To(time.Now()) persist = s } From b5451fce73adb7ce5e620c7ea47f39e885a0d9c2 Mon Sep 17 00:00:00 2001 From: mitchell Date: Fri, 15 Nov 2024 15:44:35 -0500 Subject: [PATCH 048/336] Initial support for enabling prompts to react to `--force` flag. --- cmd/state/internal/cmdtree/clean.go | 14 ++++++-- cmd/state/internal/cmdtree/packages.go | 9 +++++ cmd/state/internal/cmdtree/reset.go | 4 ++- cmd/state/internal/cmdtree/revert.go | 4 ++- cmd/state/internal/cmdtree/update.go | 8 +++-- cmd/state/internal/cmdtree/use.go | 4 ++- internal/locale/locales/en-us.yaml | 6 ++++ internal/prompt/prompt.go | 49 ++++++++++++++++++++----- internal/runbits/auth/keypair.go | 20 ++++++----- internal/runbits/auth/login.go | 2 +- internal/runbits/cves/cves.go | 29 +++++++-------- internal/runners/clean/cache.go | 50 ++++++++++++++------------ internal/runners/clean/config.go | 26 ++++++++------ internal/runners/clean/uninstall.go | 32 +++++++++-------- internal/runners/projects/delete.go | 10 ++++-- internal/runners/projects/edit.go | 13 +++---- internal/runners/projects/move.go | 13 +++---- internal/runners/publish/publish.go | 12 +++---- internal/runners/push/push.go | 20 +++++++---- internal/runners/reset/reset.go | 10 +++--- internal/runners/revert/revert.go | 10 +++--- internal/runners/scripts/edit.go | 4 +-- internal/runners/update/lock.go | 18 +++++----- internal/runners/update/unlock.go | 22 ++++++------ internal/runners/upgrade/upgrade.go | 6 +++- internal/runners/use/reset.go | 13 ++++--- test/integration/projects_int_test.go | 2 +- 27 files changed, 257 insertions(+), 153 deletions(-) diff --git a/cmd/state/internal/cmdtree/clean.go b/cmd/state/internal/cmdtree/clean.go index 758f6bb4a1..37ca6cfbe8 100644 --- a/cmd/state/internal/cmdtree/clean.go +++ b/cmd/state/internal/cmdtree/clean.go @@ -59,7 +59,12 @@ func newCleanUninstallCommand(prime *primer.Values, globals *globalOptions) *cap return err } - params.NonInteractive = globals.NonInteractive // distinct from --force + if globals.NonInteractive { + prime.Prompt().SetInteractive(false) + } + if params.Force { + prime.Prompt().EnableForce() + } return runner.Run(¶ms) }, ) @@ -83,7 +88,9 @@ func newCleanCacheCommand(prime *primer.Values, globals *globalOptions) *captain }, }, func(ccmd *captain.Command, _ []string) error { - params.Force = globals.NonInteractive + if globals.NonInteractive { + prime.Prompt().SetInteractive(false) + } return runner.Run(¶ms) }, ) @@ -107,6 +114,9 @@ func newCleanConfigCommand(prime *primer.Values) *captain.Command { }, []*captain.Argument{}, func(ccmd *captain.Command, _ []string) error { + if params.Force { + prime.Prompt().EnableForce() + } return runner.Run(¶ms) }, ) diff --git a/cmd/state/internal/cmdtree/packages.go b/cmd/state/internal/cmdtree/packages.go index 636dc02dc3..820b189927 100644 --- a/cmd/state/internal/cmdtree/packages.go +++ b/cmd/state/internal/cmdtree/packages.go @@ -54,6 +54,7 @@ func newInstallCommand(prime *primer.Values) *captain.Command { runner := install.New(prime, model.NamespacePackage) params := install.Params{} + force := false var packagesRaw string cmd := captain.NewCommand( @@ -67,6 +68,11 @@ func newInstallCommand(prime *primer.Values) *captain.Command { Description: locale.T("package_flag_ts_description"), Value: ¶ms.Timestamp, }, + { + Name: "force", + Description: locale.Tl("package_flag_force_description", "Ignore security policy preventing packages with CVEs from being installed (not recommended)"), + Value: &force, + }, }, []*captain.Argument{ { @@ -82,6 +88,9 @@ func newInstallCommand(prime *primer.Values) *captain.Command { return locale.WrapInputError(err, "err_install_packages_args", "Invalid install arguments") } } + if force { + prime.Prompt().EnableForce() + } return runner.Run(params) }, ) diff --git a/cmd/state/internal/cmdtree/reset.go b/cmd/state/internal/cmdtree/reset.go index 44f550cc09..2a86485ab7 100644 --- a/cmd/state/internal/cmdtree/reset.go +++ b/cmd/state/internal/cmdtree/reset.go @@ -25,7 +25,9 @@ func newResetCommand(prime *primer.Values, globals *globalOptions) *captain.Comm }, }, func(ccmd *captain.Command, args []string) error { - params.Force = globals.NonInteractive + if globals.NonInteractive { + prime.Prompt().SetInteractive(false) + } return runner.Run(params) }, ).SetGroup(VCSGroup).SetSupportsStructuredOutput() diff --git a/cmd/state/internal/cmdtree/revert.go b/cmd/state/internal/cmdtree/revert.go index 8d01f8b34c..6150d53bf1 100644 --- a/cmd/state/internal/cmdtree/revert.go +++ b/cmd/state/internal/cmdtree/revert.go @@ -32,7 +32,9 @@ func newRevertCommand(prime *primer.Values, globals *globalOptions) *captain.Com }, }, func(ccmd *captain.Command, args []string) error { - params.Force = globals.NonInteractive + if globals.NonInteractive { + prime.Prompt().SetInteractive(false) + } return runner.Run(params) }, ).SetGroup(VCSGroup).SetSupportsStructuredOutput() diff --git a/cmd/state/internal/cmdtree/update.go b/cmd/state/internal/cmdtree/update.go index a027d6dbe6..45f20cab21 100644 --- a/cmd/state/internal/cmdtree/update.go +++ b/cmd/state/internal/cmdtree/update.go @@ -52,7 +52,9 @@ func newUpdateLockCommand(prime *primer.Values, globals *globalOptions) *captain }, []*captain.Argument{}, func(cmd *captain.Command, args []string) error { - params.NonInteractive = globals.NonInteractive + if globals.NonInteractive { + prime.Prompt().SetInteractive(false) + } return runner.Run(¶ms) }, ) @@ -73,7 +75,9 @@ func newUpdateUnlockCommand(prime *primer.Values, globals *globalOptions) *capta []*captain.Flag{}, []*captain.Argument{}, func(cmd *captain.Command, args []string) error { - params.NonInteractive = globals.NonInteractive + if globals.NonInteractive { + prime.Prompt().SetInteractive(false) + } return runner.Run(¶ms) }, ) diff --git a/cmd/state/internal/cmdtree/use.go b/cmd/state/internal/cmdtree/use.go index 2971339b51..5c4bd8d9bf 100644 --- a/cmd/state/internal/cmdtree/use.go +++ b/cmd/state/internal/cmdtree/use.go @@ -44,7 +44,9 @@ func newUseResetCommand(prime *primer.Values, globals *globalOptions) *captain.C []*captain.Flag{}, []*captain.Argument{}, func(_ *captain.Command, _ []string) error { - params.Force = globals.NonInteractive + if globals.NonInteractive { + prime.Prompt().SetInteractive(false) + } return use.NewReset(prime).Run(params) }, ) diff --git a/internal/locale/locales/en-us.yaml b/internal/locale/locales/en-us.yaml index 7030506100..add273ea81 100644 --- a/internal/locale/locales/en-us.yaml +++ b/internal/locale/locales/en-us.yaml @@ -1165,6 +1165,12 @@ warning_vulnerable_short: prompt_continue_pkg_operation: other: | Do you want to continue installing this dependency despite its vulnerabilities? +prompt_continue_force: + other: "Continuing because the '[ACTIONABLE]--force[/RESET]' flag is set." +prompt_continue_non_interactive: + other: "Continuting because State Tool is running in non-interactive mode." +prompt_abort_non_interactive: + other: "Aborting because State Tool is running in non-interactive mode. To bypass you can use the '[ACTIONABLE]--force[/RESET]' flag." unstable_command_warning: other: | This command is still in beta. If you want to opt-in to unstable features, run the following command: diff --git a/internal/prompt/prompt.go b/internal/prompt/prompt.go index be6def602c..4735947305 100644 --- a/internal/prompt/prompt.go +++ b/internal/prompt/prompt.go @@ -9,23 +9,37 @@ import ( "gopkg.in/AlecAivazis/survey.v1/terminal" "github.com/ActiveState/cli/internal/analytics/constants" + "github.com/ActiveState/cli/internal/errs" "github.com/ActiveState/cli/internal/locale" "github.com/ActiveState/cli/internal/logging" "github.com/ActiveState/cli/internal/output" ) +type ConfirmKind int + +const ( + // A confirm prompt was completed by the user. + User ConfirmKind = iota + // A confirm prompt was completed in non-interactive mode. + NonInteractive + // A confirm prompt was completed via --force. + Force +) + type EventDispatcher interface { EventWithLabel(category, action string, label string, dim ...*dimensions.Values) } -// Prompter is the interface used to run our prompt from, useful for mocking in tests +// Prompter is the interface used to run our prompt from type Prompter interface { Input(title, message string, defaultResponse *string, flags ...ValidatorFlag) (string, error) InputAndValidate(title, message string, defaultResponse *string, validator ValidatorFunc, flags ...ValidatorFlag) (string, error) Select(title, message string, choices []string, defaultResponse *string) (string, error) - Confirm(title, message string, defaultChoice *bool) (bool, error) + Confirm(title, message string, defaultChoice *bool, forcedChoice *bool) (bool, ConfirmKind, error) InputSecret(title, message string, flags ...ValidatorFlag) (string, error) IsInteractive() bool + SetInteractive(bool) + EnableForce() } // ValidatorFunc is a function pass to the Prompter to perform validation @@ -39,11 +53,12 @@ type Prompt struct { out output.Outputer analytics EventDispatcher isInteractive bool + isForced bool } // New creates a new prompter func New(isInteractive bool, an EventDispatcher) Prompter { - return &Prompt{output.Get(), an, isInteractive} + return &Prompt{output.Get(), an, isInteractive, false} } // IsInteractive checks if the prompts can be interactive or should just return default values @@ -51,6 +66,16 @@ func (p *Prompt) IsInteractive() bool { return p.isInteractive } +func (p *Prompt) SetInteractive(interactive bool) { + p.isInteractive = interactive +} + +// EnableForce forces confirm prompts to return the force value (which is often different from the +// non-interactive value). +func (p *Prompt) EnableForce() { + p.isForced = true +} + // ValidatorFlag represents flags for prompt functions to change their behavior on. type ValidatorFlag int @@ -158,13 +183,21 @@ func (p *Prompt) Select(title, message string, choices []string, defaultChoice * } // Confirm prompts user for yes or no response. -func (p *Prompt) Confirm(title, message string, defaultChoice *bool) (bool, error) { +func (p *Prompt) Confirm(title, message string, defaultChoice *bool, forcedChoice *bool) (bool, ConfirmKind, error) { + if p.isForced { + if forcedChoice == nil { + return false, Force, errs.New("No force option given for force-enabled prompt") + } + logging.Debug("Prompt %s confirmed with choice %v in force mode", title, forcedChoice) + return *forcedChoice, Force, nil + } + if !p.isInteractive { if defaultChoice != nil { logging.Debug("Prompt %s confirmed with default choice %v in non-interactive mode", title, defaultChoice) - return *defaultChoice, nil + return *defaultChoice, NonInteractive, nil } - return false, interactiveInputError(message) + return false, NonInteractive, interactiveInputError(message) } if title != "" { p.out.Notice(output.Emphasize(title)) @@ -186,11 +219,11 @@ func (p *Prompt) Confirm(title, message string, defaultChoice *bool) (bool, erro if err == terminal.InterruptErr { p.analytics.EventWithLabel(constants.CatPrompt, title, "interrupt") } - return false, locale.NewInputError(err.Error()) + return false, User, locale.NewInputError(err.Error()) } p.analytics.EventWithLabel(constants.CatPrompt, title, translateConfirm(resp)) - return resp, nil + return resp, User, nil } func translateConfirm(confirm bool) string { diff --git a/internal/runbits/auth/keypair.go b/internal/runbits/auth/keypair.go index 611060376e..c92ee7974b 100644 --- a/internal/runbits/auth/keypair.go +++ b/internal/runbits/auth/keypair.go @@ -9,6 +9,7 @@ import ( "github.com/ActiveState/cli/internal/locale" "github.com/ActiveState/cli/internal/output" "github.com/ActiveState/cli/internal/prompt" + "github.com/ActiveState/cli/internal/rtutils/ptr" secretsapi "github.com/ActiveState/cli/pkg/platform/api/secrets" secretsModels "github.com/ActiveState/cli/pkg/platform/api/secrets/secrets_models" "github.com/ActiveState/cli/pkg/platform/authentication" @@ -112,19 +113,20 @@ func promptForPreviousPassphrase(prompt prompt.Prompter) (string, error) { return passphrase, nil } -func promptUserToRegenerateKeypair(passphrase string, cfg keypairs.Configurable, out output.Outputer, prompt prompt.Prompter, auth *authentication.Auth) error { - var err error +func promptUserToRegenerateKeypair(passphrase string, cfg keypairs.Configurable, out output.Outputer, prmpt prompt.Prompter, auth *authentication.Auth) error { // previous passphrase is invalid, inform user and ask if they want to generate a new keypair out.Notice(locale.T("auth_generate_new_keypair_message")) - yes, err := prompt.Confirm("", locale.T("auth_confirm_generate_new_keypair_prompt"), new(bool)) + yes, kind, err := prmpt.Confirm("", locale.T("auth_confirm_generate_new_keypair_prompt"), ptr.To(false), nil) if err != nil { - return err + return errs.Wrap(err, "Unable to confirm") } - if yes { - _, err = keypairs.GenerateAndSaveEncodedKeypair(cfg, secretsapi.Get(auth), passphrase, constants.DefaultRSABitLength, auth) - // TODO delete user's secrets - } else { - err = locale.NewError("auth_err_unrecoverable_keypair") + if !yes { + if kind == prompt.NonInteractive { + return locale.NewInputError("prompt_abort_non_interactive") + } + return locale.NewInputError("auth_err_unrecoverable_keypair") } + _, err = keypairs.GenerateAndSaveEncodedKeypair(cfg, secretsapi.Get(auth), passphrase, constants.DefaultRSABitLength, auth) + // TODO delete user's secrets return err } diff --git a/internal/runbits/auth/login.go b/internal/runbits/auth/login.go index 1159613f9a..785a759f02 100644 --- a/internal/runbits/auth/login.go +++ b/internal/runbits/auth/login.go @@ -266,7 +266,7 @@ func authenticateWithBrowser(out output.Outputer, auth *authentication.Auth, pro var cont bool var err error for !cont { - cont, err = prompt.Confirm(locale.Tl("continue", "Continue?"), locale.T("auth_press_enter"), ptr.To(false)) + cont, _, err = prompt.Confirm(locale.Tl("continue", "Continue?"), locale.T("auth_press_enter"), ptr.To(false), nil) if err != nil { return errs.Wrap(err, "Prompt failed") } diff --git a/internal/runbits/cves/cves.go b/internal/runbits/cves/cves.go index b9b598482b..0ecb893c8f 100644 --- a/internal/runbits/cves/cves.go +++ b/internal/runbits/cves/cves.go @@ -12,6 +12,7 @@ import ( configMediator "github.com/ActiveState/cli/internal/mediators/config" "github.com/ActiveState/cli/internal/output" "github.com/ActiveState/cli/internal/primer" + "github.com/ActiveState/cli/internal/prompt" "github.com/ActiveState/cli/internal/rtutils/ptr" "github.com/ActiveState/cli/pkg/buildplan" vulnModel "github.com/ActiveState/cli/pkg/platform/api/vulnerabilities/model" @@ -104,20 +105,24 @@ func (c *CveReport) Report(newBuildPlan *buildplan.BuildPlan, oldBuildPlan *buil } c.summarizeCVEs(vulnerabilities) - cont, err := c.promptForSecurity() + + confirm, kind, err := c.prime.Prompt().Confirm("", locale.Tr("prompt_continue_pkg_operation"), ptr.To(false), ptr.To(true)) if err != nil { - return errs.Wrap(err, "Failed to prompt for security") + return errs.Wrap(err, "Unable to confirm") } - - if !cont { - if !c.prime.Prompt().IsInteractive() { + if !confirm { + if kind == prompt.NonInteractive { return errs.AddTips( - locale.NewInputError("err_pkgop_security_prompt", "Operation aborted due to security prompt"), + locale.NewInputError("prompt_abort_non_interactive"), locale.Tl("more_info_prompt", "To disable security prompting run: [ACTIONABLE]state config set security.prompt.enabled false[/RESET]"), ) } - return locale.NewInputError("err_pkgop_security_prompt", "Operation aborted due to security prompt") + return locale.NewInputError("err_pkgop_security_prompt", "Operation aborted by user") + } + if kind == prompt.Force { + c.prime.Output().Notice(locale.T("prompt_continue_force")) } + c.prime.Output().Notice("") // Empty line return nil } @@ -225,16 +230,6 @@ func (c *CveReport) summarizeCVEs(vulnerabilities model.VulnerableIngredientsByL out.Print("") } -func (c *CveReport) promptForSecurity() (bool, error) { - confirm, err := c.prime.Prompt().Confirm("", locale.Tr("prompt_continue_pkg_operation"), ptr.To(false)) - if err != nil { - return false, locale.WrapError(err, "err_pkgop_confirm", "Need a confirmation.") - } - c.prime.Output().Notice("") // Empty line - - return confirm, nil -} - func changedRequirements(oldBuildPlan *buildplan.BuildPlan, newBuildPlan *buildplan.BuildPlan) []string { var names []string var oldRequirements buildplan.Requirements diff --git a/internal/runners/clean/cache.go b/internal/runners/clean/cache.go index e4f48eb14a..e8ca73adf4 100644 --- a/internal/runners/clean/cache.go +++ b/internal/runners/clean/cache.go @@ -11,6 +11,7 @@ import ( "github.com/ActiveState/cli/internal/locale" "github.com/ActiveState/cli/internal/logging" "github.com/ActiveState/cli/internal/output" + "github.com/ActiveState/cli/internal/prompt" "github.com/ActiveState/cli/internal/svcctl" "github.com/ActiveState/cli/pkg/projectfile" "github.com/ActiveState/cli/pkg/runtime_helpers" @@ -20,13 +21,12 @@ type Cache struct { prime primeable output output.Outputer config configurable - confirm promptable + confirm prompt.Prompter path string ipComm svcctl.IPCommunicator } type CacheParams struct { - Force bool Project string } @@ -34,7 +34,7 @@ func NewCache(prime primeable) *Cache { return newCache(prime, prime.Output(), prime.Config(), prime.Prompt(), prime.IPComm()) } -func newCache(prime primeable, output output.Outputer, cfg configurable, confirm promptable, ipComm svcctl.IPCommunicator) *Cache { +func newCache(prime primeable, output output.Outputer, cfg configurable, confirm prompt.Prompter, ipComm svcctl.IPCommunicator) *Cache { return &Cache{ prime: prime, output: output, @@ -58,7 +58,7 @@ func (c *Cache) Run(params *CacheParams) error { } for _, projectPath := range paths { - err := c.removeProjectCache(projectPath, params.Project, params.Force) + err := c.removeProjectCache(projectPath, params.Project) if err != nil { return err } @@ -66,18 +66,20 @@ func (c *Cache) Run(params *CacheParams) error { return nil } - return c.removeCache(c.path, params.Force) + return c.removeCache(c.path) } -func (c *Cache) removeCache(path string, force bool) error { - if !force { - ok, err := c.confirm.Confirm(locale.T("confirm"), locale.T("clean_cache_confirm"), new(bool)) - if err != nil { - return err - } - if !ok { - return locale.NewInputError("err_clean_cache_not_confirmed", "Cleaning of cache aborted by user") - } +func (c *Cache) removeCache(path string) error { + defaultValue := !c.prime.Prompt().IsInteractive() + ok, kind, err := c.prime.Prompt().Confirm(locale.T("confirm"), locale.T("clean_cache_confirm"), &defaultValue, nil) + if err != nil { + return errs.Wrap(err, "Could not confirm") + } + if !ok { + return locale.NewInputError("err_clean_cache_not_confirmed", "Cleaning of cache aborted by user") + } + if kind == prompt.NonInteractive { + c.prime.Output().Notice(locale.T("prompt_continue_non_interactive")) } inUse, err := c.checkPathInUse(path) @@ -97,15 +99,17 @@ func (c *Cache) removeCache(path string, force bool) error { return nil } -func (c *Cache) removeProjectCache(projectDir, namespace string, force bool) error { - if !force { - ok, err := c.confirm.Confirm(locale.T("confirm"), locale.Tr("clean_cache_artifact_confirm", namespace), new(bool)) - if err != nil { - return err - } - if !ok { - return locale.NewInputError("err_clean_cache_artifact_not_confirmed", "Cleaning of cached runtime aborted by user") - } +func (c *Cache) removeProjectCache(projectDir, namespace string) error { + defaultValue := !c.prime.Prompt().IsInteractive() + ok, kind, err := c.prime.Prompt().Confirm(locale.T("confirm"), locale.Tr("clean_cache_artifact_confirm", namespace), &defaultValue, nil) + if err != nil { + return errs.Wrap(err, "Could not confirm") + } + if !ok { + return locale.NewInputError("err_clean_cache_artifact_not_confirmed", "Cleaning of cached runtime aborted by user") + } + if kind == prompt.NonInteractive { + c.prime.Output().Notice(locale.T("prompt_continue_non_interactive")) } inUse, err := c.checkPathInUse(projectDir) diff --git a/internal/runners/clean/config.go b/internal/runners/clean/config.go index 333b2b0375..6524b86371 100644 --- a/internal/runners/clean/config.go +++ b/internal/runners/clean/config.go @@ -8,6 +8,7 @@ import ( "github.com/ActiveState/cli/internal/locale" "github.com/ActiveState/cli/internal/logging" "github.com/ActiveState/cli/internal/output" + "github.com/ActiveState/cli/internal/prompt" "github.com/ActiveState/cli/internal/rtutils/ptr" "github.com/ActiveState/cli/internal/svcctl" "github.com/ActiveState/cli/pkg/project" @@ -25,7 +26,7 @@ type configurable interface { type Config struct { output output.Outputer - confirm promptable + confirm prompt.Prompter cfg configurable ipComm svcctl.IPCommunicator } @@ -38,7 +39,7 @@ func NewConfig(prime primeable) *Config { return newConfig(prime.Output(), prime.Prompt(), prime.Config(), prime.IPComm()) } -func newConfig(out output.Outputer, confirm promptable, cfg configurable, ipComm svcctl.IPCommunicator) *Config { +func newConfig(out output.Outputer, confirm prompt.Prompter, cfg configurable, ipComm svcctl.IPCommunicator) *Config { return &Config{ output: out, confirm: confirm, @@ -52,14 +53,19 @@ func (c *Config) Run(params *ConfigParams) error { return locale.NewError("err_clean_cache_activated") } - if !params.Force { - ok, err := c.confirm.Confirm(locale.T("confirm"), locale.T("clean_config_confirm"), ptr.To(true)) - if err != nil { - return locale.WrapError(err, "err_clean_config_confirm", "Could not confirm clean config choice") - } - if !ok { - return locale.NewInputError("err_clean_config_aborted", "Cleaning of config aborted by user") - } + defaultChoice := !c.confirm.IsInteractive() + ok, kind, err := c.confirm.Confirm(locale.T("confirm"), locale.T("clean_config_confirm"), &defaultChoice, ptr.To(true)) + if err != nil { + return errs.Wrap(err, "Unable to confirm") + } + if !ok { + return locale.NewInputError("err_clean_config_aborted", "Cleaning of config aborted by user") + } + switch kind { + case prompt.NonInteractive: + c.output.Notice(locale.T("prompt_continue_non_interactive")) + case prompt.Force: + c.output.Notice(locale.T("prompt_continue_force")) } if err := stopServices(c.cfg, c.output, c.ipComm, params.Force); err != nil { diff --git a/internal/runners/clean/uninstall.go b/internal/runners/clean/uninstall.go index 8b6071e1a7..1b888697c1 100644 --- a/internal/runners/clean/uninstall.go +++ b/internal/runners/clean/uninstall.go @@ -13,27 +13,23 @@ import ( "github.com/ActiveState/cli/internal/logging" "github.com/ActiveState/cli/internal/output" "github.com/ActiveState/cli/internal/primer" + "github.com/ActiveState/cli/internal/prompt" + "github.com/ActiveState/cli/internal/rtutils/ptr" "github.com/ActiveState/cli/internal/svcctl" ) -type promptable interface { - Confirm(title, message string, defaultChoice *bool) (bool, error) - Select(title, message string, choices []string, defaultChoice *string) (string, error) -} - type Uninstall struct { out output.Outputer - prompt promptable + prompt prompt.Prompter cfg *config.Instance ipComm svcctl.IPCommunicator an analytics.Dispatcher } type UninstallParams struct { - Force bool - NonInteractive bool - All bool - Prompt bool + Force bool + All bool + Prompt bool } type primeable interface { @@ -49,7 +45,7 @@ func NewUninstall(prime primeable) (*Uninstall, error) { return newUninstall(prime.Output(), prime.Prompt(), prime.Config(), prime.IPComm(), prime.Analytics()) } -func newUninstall(out output.Outputer, prompt promptable, cfg *config.Instance, ipComm svcctl.IPCommunicator, an analytics.Dispatcher) (*Uninstall, error) { +func newUninstall(out output.Outputer, prompt prompt.Prompter, cfg *config.Instance, ipComm svcctl.IPCommunicator, an analytics.Dispatcher) (*Uninstall, error) { return &Uninstall{ out: out, prompt: prompt, @@ -81,19 +77,25 @@ func (u *Uninstall) Run(params *UninstallParams) error { if selection == choices[1] { params.All = true } - } else if !params.Force { - defaultChoice := params.NonInteractive + } else { + defaultChoice := !u.prompt.IsInteractive() confirmMessage := locale.T("uninstall_confirm") if params.All { confirmMessage = locale.T("uninstall_confirm_all") } - ok, err := u.prompt.Confirm(locale.T("confirm"), confirmMessage, &defaultChoice) + ok, kind, err := u.prompt.Confirm(locale.T("confirm"), confirmMessage, &defaultChoice, ptr.To(true)) if err != nil { - return locale.WrapError(err, "err_uninstall_confirm", "Could not confirm uninstall choice") + return errs.Wrap(err, "Unable to confirm") } if !ok { return locale.NewInputError("err_uninstall_aborted", "Uninstall aborted by user") } + switch kind { + case prompt.NonInteractive: + u.out.Notice(locale.T("prompt_continue_non_interactive")) + case prompt.Force: + u.out.Notice(locale.T("prompt_continue_force")) + } } if err := stopServices(u.cfg, u.out, u.ipComm, params.Force); err != nil { diff --git a/internal/runners/projects/delete.go b/internal/runners/projects/delete.go index 2cae69944a..20912814eb 100644 --- a/internal/runners/projects/delete.go +++ b/internal/runners/projects/delete.go @@ -1,6 +1,7 @@ package projects import ( + "github.com/ActiveState/cli/internal/errs" "github.com/ActiveState/cli/internal/locale" "github.com/ActiveState/cli/internal/output" "github.com/ActiveState/cli/internal/prompt" @@ -36,14 +37,17 @@ func (d *Delete) Run(params *DeleteParams) error { return locale.NewInputError("err_projects_delete_authenticated", "You need to be authenticated to delete a project.") } - defaultChoice := !d.out.Config().Interactive - confirm, err := d.prompt.Confirm("", locale.Tl("project_delete_confim", "Are you sure you want to delete the project {{.V0}}?", params.Project.String()), &defaultChoice) + defaultChoice := !d.prompt.IsInteractive() + confirm, kind, err := d.prompt.Confirm("", locale.Tl("project_delete_confim", "Are you sure you want to delete the project {{.V0}}?", params.Project.String()), &defaultChoice, nil) if err != nil { - return locale.WrapError(err, "err_project_delete_confirm", "Could not confirm delete choice") + return errs.Wrap(err, "Unable to confirm") } if !confirm { return locale.NewInputError("err_project_delete_aborted", "Delete aborted by user") } + if kind == prompt.NonInteractive { + d.out.Notice(locale.T("prompt_continue_non_interactive")) + } err = model.DeleteProject(params.Project.Owner, params.Project.Project, d.auth) if err != nil { diff --git a/internal/runners/projects/edit.go b/internal/runners/projects/edit.go index 1bf55860de..8919008058 100644 --- a/internal/runners/projects/edit.go +++ b/internal/runners/projects/edit.go @@ -90,15 +90,16 @@ func (e *Edit) Run(params *EditParams) error { editMsg += locale.Tl("edit_prompt_confirm", "Continue?") - defaultChoice := !e.out.Config().Interactive - edit, err := e.prompt.Confirm("", editMsg, &defaultChoice) + defaultChoice := !e.prompt.IsInteractive() + edit, kind, err := e.prompt.Confirm("", editMsg, &defaultChoice, nil) if err != nil { - return locale.WrapError(err, "err_edit_prompt", "Could not prompt for edit confirmation") + return errs.Wrap(err, "Unable to confirm") } - if !edit { - e.out.Print(locale.Tl("edit_cancelled", "Project edit cancelled")) - return nil + return locale.NewInputError("edit_cancelled", "Project edit cancelled") + } + if kind == prompt.NonInteractive { + e.out.Notice(locale.T("prompt_continue_non_interactive")) } if err = model.EditProject(params.Namespace.Owner, params.Namespace.Project, editable, e.auth); err != nil { diff --git a/internal/runners/projects/move.go b/internal/runners/projects/move.go index c3d4b40c31..fa9e7ed2a1 100644 --- a/internal/runners/projects/move.go +++ b/internal/runners/projects/move.go @@ -41,15 +41,16 @@ func (m *Move) Run(params *MoveParams) error { return locale.NewInputError("err_project_move_auth", "In order to move your project you need to be authenticated. Please run '[ACTIONABLE]state auth[/RESET]' to authenticate.") } - defaultChoice := !m.out.Config().Interactive - move, err := m.prompt.Confirm("", locale.Tr("move_prompt", params.Namespace.String(), params.NewOwner, params.Namespace.Project), &defaultChoice) + defaultChoice := !m.prompt.IsInteractive() + move, kind, err := m.prompt.Confirm("", locale.Tr("move_prompt", params.Namespace.String(), params.NewOwner, params.Namespace.Project), &defaultChoice, nil) if err != nil { - return locale.WrapError(err, "err_move_prompt", "Could not prompt for move confirmation") + return errs.Wrap(err, "Unable to confirm") } - if !move { - m.out.Print(locale.Tl("move_cancelled", "Project move aborted by user")) - return nil + return locale.NewInputError("move_cancelled", "Project move aborted by user") + } + if kind == prompt.NonInteractive { + m.out.Notice(locale.T("prompt_continue_non_interactive")) } if err = model.MoveProject(params.Namespace.Owner, params.Namespace.Project, params.NewOwner, m.auth); err != nil { diff --git a/internal/runners/publish/publish.go b/internal/runners/publish/publish.go index 6964d1c98b..2b8af90997 100644 --- a/internal/runners/publish/publish.go +++ b/internal/runners/publish/publish.go @@ -218,22 +218,22 @@ func (r *Runner) Run(params *Params) error { return errs.Wrap(err, "Could not marshal publish variables") } - cont, err := r.prompt.Confirm( + cont, kind, err := r.prompt.Confirm( "", locale.Tl("uploadingredient_confirm", `Prepared the following ingredient: {{.V0}} Do you want to publish this ingredient? -`, string(b)), - ptr.To(true), - ) +`, string(b)), ptr.To(true), nil) if err != nil { return errs.Wrap(err, "Confirmation failed") } if !cont { - r.out.Print(locale.Tl("uploadingredient_cancel", "Publish cancelled")) - return nil + return locale.NewInputError("uploadingredient_cancel", "Publish cancelled") + } + if kind == prompt.NonInteractive { + r.out.Notice(locale.T("prompt_continue_non_interactive")) } r.out.Notice(locale.Tl("uploadingredient_uploading", "Publishing ingredient...")) diff --git a/internal/runners/push/push.go b/internal/runners/push/push.go index ca1c774161..10f935dfe8 100644 --- a/internal/runners/push/push.go +++ b/internal/runners/push/push.go @@ -128,10 +128,15 @@ func (r *Push) Run(params PushParams) (rerr error) { // Ask to create a copy if the user does not have org permissions if intend&pushFromNoPermission > 0 && !params.Namespace.IsValid() { - var err error - createCopy, err := r.prompt.Confirm("", locale.T("push_prompt_not_authorized"), ptr.To(true)) - if err != nil || !createCopy { - return err + createCopy, kind, err := r.prompt.Confirm("", locale.T("push_prompt_not_authorized"), ptr.To(true), nil) + if err != nil { + return errs.Wrap(err, "Unable to confirm") + } + if !createCopy { + return nil + } + if kind == prompt.NonInteractive { + r.out.Notice(locale.T("prompt_continue_non_interactive")) } } @@ -167,16 +172,19 @@ func (r *Push) Run(params PushParams) (rerr error) { // If the user didn't necessarily intend to create the project we should ask them for confirmation if intend&intendCreateProject == 0 { - createProject, err := r.prompt.Confirm( + createProject, kind, err := r.prompt.Confirm( locale.Tl("create_project", "Create Project"), locale.Tl("push_confirm_create_project", "You are about to create the project [NOTICE]{{.V0}}[/RESET]. Continue?", targetNamespace.String()), - ptr.To(true)) + ptr.To(true), nil) if err != nil { return errs.Wrap(err, "Confirmation failed") } if !createProject { return rationalize.ErrActionAborted } + if kind == prompt.NonInteractive { + r.out.Notice(locale.T("prompt_continue_non_interactive")) + } } r.out.Notice(locale.Tl("push_creating_project", "Creating project [NOTICE]{{.V1}}[/RESET] under [NOTICE]{{.V0}}[/RESET] on the ActiveState Platform", targetNamespace.Owner, targetNamespace.Project)) diff --git a/internal/runners/reset/reset.go b/internal/runners/reset/reset.go index 45e042e725..944842bf67 100644 --- a/internal/runners/reset/reset.go +++ b/internal/runners/reset/reset.go @@ -26,7 +26,6 @@ import ( const local = "LOCAL" type Params struct { - Force bool CommitID string } @@ -117,14 +116,17 @@ func (r *Reset) Run(params *Params) error { } r.out.Notice(locale.Tl("reset_commit", "Your project will be reset to [ACTIONABLE]{{.V0}}[/RESET]\n", commitID.String())) if commitID != localCommitID { - defaultChoice := params.Force || !r.out.Config().Interactive - confirm, err := r.prompt.Confirm("", locale.Tl("reset_confim", "Resetting is destructive. You will lose any changes that were not pushed. Are you sure you want to do this?"), &defaultChoice) + defaultChoice := !r.prime.Prompt().IsInteractive() + confirm, kind, err := r.prime.Prompt().Confirm("", locale.Tl("reset_confim", "Resetting is destructive. You will lose any changes that were not pushed. Are you sure you want to do this?"), &defaultChoice, nil) if err != nil { - return locale.WrapError(err, "err_reset_confirm", "Could not confirm reset choice") + return errs.Wrap(err, "Unable to confirm") } if !confirm { return locale.NewInputError("err_reset_aborted", "Reset aborted by user") } + if kind == prompt.NonInteractive { + r.prime.Output().Notice(locale.T("prompt_continue_non_interactive")) + } } err = localcommit.Set(r.project.Dir(), commitID.String()) diff --git a/internal/runners/revert/revert.go b/internal/runners/revert/revert.go index 60da9a2441..335bab3af4 100644 --- a/internal/runners/revert/revert.go +++ b/internal/runners/revert/revert.go @@ -40,7 +40,6 @@ type Revert struct { type Params struct { CommitID string To bool - Force bool } type primeable interface { @@ -139,14 +138,17 @@ func (r *Revert) Run(params *Params) (rerr error) { } } - defaultChoice := params.Force || !r.out.Config().Interactive - revert, err := r.prompt.Confirm("", locale.Tl("revert_confirm", "Continue?"), &defaultChoice) + defaultChoice := !r.prime.Prompt().IsInteractive() + revert, kind, err := r.prime.Prompt().Confirm("", locale.Tl("revert_confirm", "Continue?"), &defaultChoice, nil) if err != nil { - return locale.WrapError(err, "err_revert_confirm", "Could not confirm revert choice") + return errs.Wrap(err, "Unable to confirm") } if !revert { return locale.NewInputError("err_revert_aborted", "Revert aborted by user") } + if kind == prompt.NonInteractive { + r.prime.Output().Notice(locale.T("prompt_continue_non_interactive")) + } revertCommit, err := revertFunc(revertParams, bp) if err != nil { diff --git a/internal/runners/scripts/edit.go b/internal/runners/scripts/edit.go index fa34bc2ce6..3f3e04be19 100644 --- a/internal/runners/scripts/edit.go +++ b/internal/runners/scripts/edit.go @@ -15,6 +15,7 @@ import ( "github.com/ActiveState/cli/internal/osutils" "github.com/ActiveState/cli/internal/output" "github.com/ActiveState/cli/internal/prompt" + "github.com/ActiveState/cli/internal/rtutils/ptr" "github.com/ActiveState/cli/internal/runbits/rationalize" "github.com/ActiveState/cli/internal/scriptfile" "github.com/ActiveState/cli/pkg/project" @@ -236,8 +237,7 @@ func startInteractive(sw *scriptWatcher, scriptName string, output output.Output go sw.run(scriptName, output, cfg, proj) for { - doneConfirmDefault := true - doneEditing, err := prompt.Confirm("", locale.T("prompt_done_editing"), &doneConfirmDefault) + doneEditing, _, err := prompt.Confirm("", locale.T("prompt_done_editing"), ptr.To(true), nil) if err != nil { return errs.Wrap(err, "Prompter returned with failure.") } diff --git a/internal/runners/update/lock.go b/internal/runners/update/lock.go index 4be61c0b72..707d01b8a7 100644 --- a/internal/runners/update/lock.go +++ b/internal/runners/update/lock.go @@ -41,8 +41,7 @@ func (stv *StateToolChannelVersion) Type() string { } type LockParams struct { - Channel StateToolChannelVersion - NonInteractive bool + Channel StateToolChannelVersion } type Lock struct { @@ -72,8 +71,8 @@ func (l *Lock) Run(params *LockParams) error { l.out.Notice(locale.Tl("locking_version", "Locking State Tool version for current project.")) - if l.project.IsLocked() && !params.NonInteractive { - if err := confirmLock(l.prompt); err != nil { + if l.project.IsLocked() { + if err := confirmLock(l.prompt, l.out); err != nil { return locale.WrapError(err, "err_update_lock_confirm", "Could not confirm whether to lock update.") } } @@ -128,17 +127,20 @@ func (l *Lock) Run(params *LockParams) error { return nil } -func confirmLock(prom prompt.Prompter) error { +func confirmLock(prom prompt.Prompter, out output.Outputer) error { + defaultChoice := !prom.IsInteractive() msg := locale.T("confirm_update_locked_version_prompt") - confirmed, err := prom.Confirm(locale.T("confirm"), msg, new(bool)) + confirmed, kind, err := prom.Confirm(locale.T("confirm"), msg, &defaultChoice, nil) if err != nil { - return err + return errs.Wrap(err, "Unable to confirm") } - if !confirmed { return locale.NewInputError("err_update_lock_noconfirm", "Cancelling by your request.") } + if kind == prompt.NonInteractive { + out.Notice(locale.T("prompt_continue_non_interactive")) + } return nil } diff --git a/internal/runners/update/unlock.go b/internal/runners/update/unlock.go index 91021941d7..8eae02f42d 100644 --- a/internal/runners/update/unlock.go +++ b/internal/runners/update/unlock.go @@ -2,6 +2,7 @@ package update import ( "github.com/ActiveState/cli/internal/constants" + "github.com/ActiveState/cli/internal/errs" "github.com/ActiveState/cli/internal/locale" "github.com/ActiveState/cli/internal/multilog" "github.com/ActiveState/cli/internal/output" @@ -13,7 +14,6 @@ import ( ) type UnlockParams struct { - NonInteractive bool } type Unlock struct { @@ -44,15 +44,13 @@ func (u *Unlock) Run(params *UnlockParams) error { u.out.Notice(locale.Tl("unlocking_version", "Unlocking State Tool version for current project.")) - if !params.NonInteractive { - err := confirmUnlock(u.prompt) - if err != nil { - return locale.WrapError(err, "err_update_unlock_confirm", "Unlock cancelled by user.") - } + err := confirmUnlock(u.prompt, u.out) + if err != nil { + return locale.WrapError(err, "err_update_unlock_confirm", "Unlock cancelled by user.") } // Invalidate the installer version lock. - err := u.cfg.Set(updater.CfgKeyInstallVersion, "") + err = u.cfg.Set(updater.CfgKeyInstallVersion, "") if err != nil { multilog.Error("Failed to invalidate installer version lock on `state update lock` invocation: %v", err) } @@ -71,18 +69,20 @@ func (u *Unlock) Run(params *UnlockParams) error { return nil } -func confirmUnlock(prom prompt.Prompter) error { +func confirmUnlock(prom prompt.Prompter, out output.Outputer) error { msg := locale.T("confirm_update_unlocked_version_prompt") defaultChoice := !prom.IsInteractive() - confirmed, err := prom.Confirm(locale.T("confirm"), msg, &defaultChoice) + confirmed, kind, err := prom.Confirm(locale.T("confirm"), msg, &defaultChoice, nil) if err != nil { - return err + return errs.Wrap(err, "Unable to confirm") } - if !confirmed { return locale.NewInputError("err_update_lock_noconfirm", "Cancelling by your request.") } + if kind == prompt.NonInteractive { + out.Notice(locale.T("prompt_continue_non_interactive")) + } return nil } diff --git a/internal/runners/upgrade/upgrade.go b/internal/runners/upgrade/upgrade.go index eb82b499c2..22d8caeb2f 100644 --- a/internal/runners/upgrade/upgrade.go +++ b/internal/runners/upgrade/upgrade.go @@ -12,6 +12,7 @@ import ( "github.com/ActiveState/cli/internal/locale" "github.com/ActiveState/cli/internal/output" "github.com/ActiveState/cli/internal/primer" + "github.com/ActiveState/cli/internal/prompt" "github.com/ActiveState/cli/internal/rtutils/ptr" "github.com/ActiveState/cli/internal/runbits/commits_runbit" "github.com/ActiveState/cli/internal/runbits/rationalize" @@ -283,13 +284,16 @@ func (u *Upgrade) renderUserFacing(changes []structuredChange, expand bool) erro out.Print(tbl.Render()) out.Notice(" ") // Empty line (prompts use Notice) - confirm, err := u.prime.Prompt().Confirm("", locale.Tr("upgrade_confirm"), ptr.To(true)) + confirm, kind, err := u.prime.Prompt().Confirm("", locale.Tr("upgrade_confirm"), ptr.To(true), nil) if err != nil { return errs.Wrap(err, "confirmation failed") } if !confirm { return ErrAbort } + if kind == prompt.NonInteractive { + u.prime.Output().Notice(locale.T("prompt_continue_non_interactive")) + } return nil } diff --git a/internal/runners/use/reset.go b/internal/runners/use/reset.go index c8a570423e..85e5b0283e 100644 --- a/internal/runners/use/reset.go +++ b/internal/runners/use/reset.go @@ -4,6 +4,7 @@ import ( "runtime" "github.com/ActiveState/cli/internal/config" + "github.com/ActiveState/cli/internal/errs" "github.com/ActiveState/cli/internal/globaldefault" "github.com/ActiveState/cli/internal/locale" "github.com/ActiveState/cli/internal/logging" @@ -20,7 +21,6 @@ type Reset struct { } type ResetParams struct { - Force bool } func NewReset(prime primeable) *Reset { @@ -39,15 +39,18 @@ func (u *Reset) Run(params *ResetParams) error { return locale.NewInputError(locale.T("use_reset_notice_not_reset")) } - defaultChoice := params.Force || !u.out.Config().Interactive - ok, err := u.prompt.Confirm(locale.T("confirm"), - locale.Tl("use_reset_confirm", "You are about to stop using your project runtime. Continue?"), &defaultChoice) + defaultChoice := !u.prompt.IsInteractive() + ok, kind, err := u.prompt.Confirm(locale.T("confirm"), + locale.Tl("use_reset_confirm", "You are about to stop using your project runtime. Continue?"), &defaultChoice, nil) if err != nil { - return err + return errs.Wrap(err, "Unable to confirm") } if !ok { return locale.NewInputError("err_reset_aborted", "Reset aborted by user") } + if kind == prompt.NonInteractive { + u.out.Notice(locale.T("prompt_continue_non_interactive")) + } reset, err := globaldefault.ResetDefaultActivation(u.subshell, u.config) if err != nil { diff --git a/test/integration/projects_int_test.go b/test/integration/projects_int_test.go index d60c8f335a..7316466515 100644 --- a/test/integration/projects_int_test.go +++ b/test/integration/projects_int_test.go @@ -161,7 +161,7 @@ func (suite *ProjectsIntegrationTestSuite) TestMove() { cp.Expect("Continue? (y/N)") cp.SendLine("n") cp.Expect("aborted") - cp.ExpectExitCode(0) + cp.ExpectNotExitCode(0) } func TestProjectsIntegrationTestSuite(t *testing.T) { From 1fdc129a9b5312b4fe660536ba4d5b9799c31791 Mon Sep 17 00:00:00 2001 From: mitchell Date: Fri, 15 Nov 2024 15:56:30 -0500 Subject: [PATCH 049/336] Use prompt accessors instead of Confirm return values. --- internal/prompt/prompt.go | 32 ++++++++++++----------------- internal/runbits/auth/keypair.go | 5 +---- internal/runbits/auth/login.go | 2 +- internal/runbits/cves/cves.go | 7 +++---- internal/runners/clean/cache.go | 8 ++++---- internal/runners/clean/config.go | 8 ++++---- internal/runners/clean/uninstall.go | 8 ++++---- internal/runners/projects/delete.go | 4 ++-- internal/runners/projects/edit.go | 4 ++-- internal/runners/projects/move.go | 4 ++-- internal/runners/publish/publish.go | 4 ++-- internal/runners/push/push.go | 8 ++++---- internal/runners/reset/reset.go | 4 ++-- internal/runners/revert/revert.go | 4 ++-- internal/runners/scripts/edit.go | 2 +- internal/runners/update/lock.go | 4 ++-- internal/runners/update/unlock.go | 4 ++-- internal/runners/upgrade/upgrade.go | 5 ++--- internal/runners/use/reset.go | 4 ++-- 19 files changed, 55 insertions(+), 66 deletions(-) diff --git a/internal/prompt/prompt.go b/internal/prompt/prompt.go index 4735947305..07c004c9d4 100644 --- a/internal/prompt/prompt.go +++ b/internal/prompt/prompt.go @@ -15,17 +15,6 @@ import ( "github.com/ActiveState/cli/internal/output" ) -type ConfirmKind int - -const ( - // A confirm prompt was completed by the user. - User ConfirmKind = iota - // A confirm prompt was completed in non-interactive mode. - NonInteractive - // A confirm prompt was completed via --force. - Force -) - type EventDispatcher interface { EventWithLabel(category, action string, label string, dim ...*dimensions.Values) } @@ -35,11 +24,12 @@ type Prompter interface { Input(title, message string, defaultResponse *string, flags ...ValidatorFlag) (string, error) InputAndValidate(title, message string, defaultResponse *string, validator ValidatorFunc, flags ...ValidatorFlag) (string, error) Select(title, message string, choices []string, defaultResponse *string) (string, error) - Confirm(title, message string, defaultChoice *bool, forcedChoice *bool) (bool, ConfirmKind, error) + Confirm(title, message string, defaultChoice *bool, forcedChoice *bool) (bool, error) InputSecret(title, message string, flags ...ValidatorFlag) (string, error) IsInteractive() bool SetInteractive(bool) EnableForce() + IsForceEnabled() bool } // ValidatorFunc is a function pass to the Prompter to perform validation @@ -76,6 +66,10 @@ func (p *Prompt) EnableForce() { p.isForced = true } +func (p *Prompt) IsForceEnabled() bool { + return p.isForced +} + // ValidatorFlag represents flags for prompt functions to change their behavior on. type ValidatorFlag int @@ -183,21 +177,21 @@ func (p *Prompt) Select(title, message string, choices []string, defaultChoice * } // Confirm prompts user for yes or no response. -func (p *Prompt) Confirm(title, message string, defaultChoice *bool, forcedChoice *bool) (bool, ConfirmKind, error) { +func (p *Prompt) Confirm(title, message string, defaultChoice *bool, forcedChoice *bool) (bool, error) { if p.isForced { if forcedChoice == nil { - return false, Force, errs.New("No force option given for force-enabled prompt") + return false, errs.New("No force option given for force-enabled prompt") } logging.Debug("Prompt %s confirmed with choice %v in force mode", title, forcedChoice) - return *forcedChoice, Force, nil + return *forcedChoice, nil } if !p.isInteractive { if defaultChoice != nil { logging.Debug("Prompt %s confirmed with default choice %v in non-interactive mode", title, defaultChoice) - return *defaultChoice, NonInteractive, nil + return *defaultChoice, nil } - return false, NonInteractive, interactiveInputError(message) + return false, interactiveInputError(message) } if title != "" { p.out.Notice(output.Emphasize(title)) @@ -219,11 +213,11 @@ func (p *Prompt) Confirm(title, message string, defaultChoice *bool, forcedChoic if err == terminal.InterruptErr { p.analytics.EventWithLabel(constants.CatPrompt, title, "interrupt") } - return false, User, locale.NewInputError(err.Error()) + return false, locale.NewInputError(err.Error()) } p.analytics.EventWithLabel(constants.CatPrompt, title, translateConfirm(resp)) - return resp, User, nil + return resp, nil } func translateConfirm(confirm bool) string { diff --git a/internal/runbits/auth/keypair.go b/internal/runbits/auth/keypair.go index c92ee7974b..b91c44671b 100644 --- a/internal/runbits/auth/keypair.go +++ b/internal/runbits/auth/keypair.go @@ -116,14 +116,11 @@ func promptForPreviousPassphrase(prompt prompt.Prompter) (string, error) { func promptUserToRegenerateKeypair(passphrase string, cfg keypairs.Configurable, out output.Outputer, prmpt prompt.Prompter, auth *authentication.Auth) error { // previous passphrase is invalid, inform user and ask if they want to generate a new keypair out.Notice(locale.T("auth_generate_new_keypair_message")) - yes, kind, err := prmpt.Confirm("", locale.T("auth_confirm_generate_new_keypair_prompt"), ptr.To(false), nil) + yes, err := prmpt.Confirm("", locale.T("auth_confirm_generate_new_keypair_prompt"), ptr.To(false), nil) if err != nil { return errs.Wrap(err, "Unable to confirm") } if !yes { - if kind == prompt.NonInteractive { - return locale.NewInputError("prompt_abort_non_interactive") - } return locale.NewInputError("auth_err_unrecoverable_keypair") } _, err = keypairs.GenerateAndSaveEncodedKeypair(cfg, secretsapi.Get(auth), passphrase, constants.DefaultRSABitLength, auth) diff --git a/internal/runbits/auth/login.go b/internal/runbits/auth/login.go index 785a759f02..ac902ef2aa 100644 --- a/internal/runbits/auth/login.go +++ b/internal/runbits/auth/login.go @@ -266,7 +266,7 @@ func authenticateWithBrowser(out output.Outputer, auth *authentication.Auth, pro var cont bool var err error for !cont { - cont, _, err = prompt.Confirm(locale.Tl("continue", "Continue?"), locale.T("auth_press_enter"), ptr.To(false), nil) + cont, err = prompt.Confirm(locale.Tl("continue", "Continue?"), locale.T("auth_press_enter"), ptr.To(false), nil) if err != nil { return errs.Wrap(err, "Prompt failed") } diff --git a/internal/runbits/cves/cves.go b/internal/runbits/cves/cves.go index 0ecb893c8f..a82649c489 100644 --- a/internal/runbits/cves/cves.go +++ b/internal/runbits/cves/cves.go @@ -12,7 +12,6 @@ import ( configMediator "github.com/ActiveState/cli/internal/mediators/config" "github.com/ActiveState/cli/internal/output" "github.com/ActiveState/cli/internal/primer" - "github.com/ActiveState/cli/internal/prompt" "github.com/ActiveState/cli/internal/rtutils/ptr" "github.com/ActiveState/cli/pkg/buildplan" vulnModel "github.com/ActiveState/cli/pkg/platform/api/vulnerabilities/model" @@ -106,12 +105,12 @@ func (c *CveReport) Report(newBuildPlan *buildplan.BuildPlan, oldBuildPlan *buil c.summarizeCVEs(vulnerabilities) - confirm, kind, err := c.prime.Prompt().Confirm("", locale.Tr("prompt_continue_pkg_operation"), ptr.To(false), ptr.To(true)) + confirm, err := c.prime.Prompt().Confirm("", locale.Tr("prompt_continue_pkg_operation"), ptr.To(false), ptr.To(true)) if err != nil { return errs.Wrap(err, "Unable to confirm") } if !confirm { - if kind == prompt.NonInteractive { + if !c.prime.Prompt().IsInteractive() { return errs.AddTips( locale.NewInputError("prompt_abort_non_interactive"), locale.Tl("more_info_prompt", "To disable security prompting run: [ACTIONABLE]state config set security.prompt.enabled false[/RESET]"), @@ -119,7 +118,7 @@ func (c *CveReport) Report(newBuildPlan *buildplan.BuildPlan, oldBuildPlan *buil } return locale.NewInputError("err_pkgop_security_prompt", "Operation aborted by user") } - if kind == prompt.Force { + if c.prime.Prompt().IsForceEnabled() { c.prime.Output().Notice(locale.T("prompt_continue_force")) } c.prime.Output().Notice("") // Empty line diff --git a/internal/runners/clean/cache.go b/internal/runners/clean/cache.go index e8ca73adf4..bbb87ede43 100644 --- a/internal/runners/clean/cache.go +++ b/internal/runners/clean/cache.go @@ -71,14 +71,14 @@ func (c *Cache) Run(params *CacheParams) error { func (c *Cache) removeCache(path string) error { defaultValue := !c.prime.Prompt().IsInteractive() - ok, kind, err := c.prime.Prompt().Confirm(locale.T("confirm"), locale.T("clean_cache_confirm"), &defaultValue, nil) + ok, err := c.prime.Prompt().Confirm(locale.T("confirm"), locale.T("clean_cache_confirm"), &defaultValue, nil) if err != nil { return errs.Wrap(err, "Could not confirm") } if !ok { return locale.NewInputError("err_clean_cache_not_confirmed", "Cleaning of cache aborted by user") } - if kind == prompt.NonInteractive { + if !c.prime.Prompt().IsInteractive() { c.prime.Output().Notice(locale.T("prompt_continue_non_interactive")) } @@ -101,14 +101,14 @@ func (c *Cache) removeCache(path string) error { func (c *Cache) removeProjectCache(projectDir, namespace string) error { defaultValue := !c.prime.Prompt().IsInteractive() - ok, kind, err := c.prime.Prompt().Confirm(locale.T("confirm"), locale.Tr("clean_cache_artifact_confirm", namespace), &defaultValue, nil) + ok, err := c.prime.Prompt().Confirm(locale.T("confirm"), locale.Tr("clean_cache_artifact_confirm", namespace), &defaultValue, nil) if err != nil { return errs.Wrap(err, "Could not confirm") } if !ok { return locale.NewInputError("err_clean_cache_artifact_not_confirmed", "Cleaning of cached runtime aborted by user") } - if kind == prompt.NonInteractive { + if !c.prime.Prompt().IsInteractive() { c.prime.Output().Notice(locale.T("prompt_continue_non_interactive")) } diff --git a/internal/runners/clean/config.go b/internal/runners/clean/config.go index 6524b86371..c0aeebc2dd 100644 --- a/internal/runners/clean/config.go +++ b/internal/runners/clean/config.go @@ -54,17 +54,17 @@ func (c *Config) Run(params *ConfigParams) error { } defaultChoice := !c.confirm.IsInteractive() - ok, kind, err := c.confirm.Confirm(locale.T("confirm"), locale.T("clean_config_confirm"), &defaultChoice, ptr.To(true)) + ok, err := c.confirm.Confirm(locale.T("confirm"), locale.T("clean_config_confirm"), &defaultChoice, ptr.To(true)) if err != nil { return errs.Wrap(err, "Unable to confirm") } if !ok { return locale.NewInputError("err_clean_config_aborted", "Cleaning of config aborted by user") } - switch kind { - case prompt.NonInteractive: + switch { + case !c.confirm.IsInteractive(): c.output.Notice(locale.T("prompt_continue_non_interactive")) - case prompt.Force: + case c.confirm.IsForceEnabled(): c.output.Notice(locale.T("prompt_continue_force")) } diff --git a/internal/runners/clean/uninstall.go b/internal/runners/clean/uninstall.go index 1b888697c1..d8c671cc44 100644 --- a/internal/runners/clean/uninstall.go +++ b/internal/runners/clean/uninstall.go @@ -83,17 +83,17 @@ func (u *Uninstall) Run(params *UninstallParams) error { if params.All { confirmMessage = locale.T("uninstall_confirm_all") } - ok, kind, err := u.prompt.Confirm(locale.T("confirm"), confirmMessage, &defaultChoice, ptr.To(true)) + ok, err := u.prompt.Confirm(locale.T("confirm"), confirmMessage, &defaultChoice, ptr.To(true)) if err != nil { return errs.Wrap(err, "Unable to confirm") } if !ok { return locale.NewInputError("err_uninstall_aborted", "Uninstall aborted by user") } - switch kind { - case prompt.NonInteractive: + switch { + case !u.prompt.IsInteractive(): u.out.Notice(locale.T("prompt_continue_non_interactive")) - case prompt.Force: + case u.prompt.IsForceEnabled(): u.out.Notice(locale.T("prompt_continue_force")) } } diff --git a/internal/runners/projects/delete.go b/internal/runners/projects/delete.go index 20912814eb..6c1aae3a7e 100644 --- a/internal/runners/projects/delete.go +++ b/internal/runners/projects/delete.go @@ -38,14 +38,14 @@ func (d *Delete) Run(params *DeleteParams) error { } defaultChoice := !d.prompt.IsInteractive() - confirm, kind, err := d.prompt.Confirm("", locale.Tl("project_delete_confim", "Are you sure you want to delete the project {{.V0}}?", params.Project.String()), &defaultChoice, nil) + confirm, err := d.prompt.Confirm("", locale.Tl("project_delete_confim", "Are you sure you want to delete the project {{.V0}}?", params.Project.String()), &defaultChoice, nil) if err != nil { return errs.Wrap(err, "Unable to confirm") } if !confirm { return locale.NewInputError("err_project_delete_aborted", "Delete aborted by user") } - if kind == prompt.NonInteractive { + if !d.prompt.IsInteractive() { d.out.Notice(locale.T("prompt_continue_non_interactive")) } diff --git a/internal/runners/projects/edit.go b/internal/runners/projects/edit.go index 8919008058..741d588f92 100644 --- a/internal/runners/projects/edit.go +++ b/internal/runners/projects/edit.go @@ -91,14 +91,14 @@ func (e *Edit) Run(params *EditParams) error { editMsg += locale.Tl("edit_prompt_confirm", "Continue?") defaultChoice := !e.prompt.IsInteractive() - edit, kind, err := e.prompt.Confirm("", editMsg, &defaultChoice, nil) + edit, err := e.prompt.Confirm("", editMsg, &defaultChoice, nil) if err != nil { return errs.Wrap(err, "Unable to confirm") } if !edit { return locale.NewInputError("edit_cancelled", "Project edit cancelled") } - if kind == prompt.NonInteractive { + if !e.prompt.IsInteractive() { e.out.Notice(locale.T("prompt_continue_non_interactive")) } diff --git a/internal/runners/projects/move.go b/internal/runners/projects/move.go index fa9e7ed2a1..858dbead14 100644 --- a/internal/runners/projects/move.go +++ b/internal/runners/projects/move.go @@ -42,14 +42,14 @@ func (m *Move) Run(params *MoveParams) error { } defaultChoice := !m.prompt.IsInteractive() - move, kind, err := m.prompt.Confirm("", locale.Tr("move_prompt", params.Namespace.String(), params.NewOwner, params.Namespace.Project), &defaultChoice, nil) + move, err := m.prompt.Confirm("", locale.Tr("move_prompt", params.Namespace.String(), params.NewOwner, params.Namespace.Project), &defaultChoice, nil) if err != nil { return errs.Wrap(err, "Unable to confirm") } if !move { return locale.NewInputError("move_cancelled", "Project move aborted by user") } - if kind == prompt.NonInteractive { + if !m.prompt.IsInteractive() { m.out.Notice(locale.T("prompt_continue_non_interactive")) } diff --git a/internal/runners/publish/publish.go b/internal/runners/publish/publish.go index 2b8af90997..239a5233bb 100644 --- a/internal/runners/publish/publish.go +++ b/internal/runners/publish/publish.go @@ -218,7 +218,7 @@ func (r *Runner) Run(params *Params) error { return errs.Wrap(err, "Could not marshal publish variables") } - cont, kind, err := r.prompt.Confirm( + cont, err := r.prompt.Confirm( "", locale.Tl("uploadingredient_confirm", `Prepared the following ingredient: @@ -232,7 +232,7 @@ Do you want to publish this ingredient? if !cont { return locale.NewInputError("uploadingredient_cancel", "Publish cancelled") } - if kind == prompt.NonInteractive { + if !r.prompt.IsInteractive() { r.out.Notice(locale.T("prompt_continue_non_interactive")) } diff --git a/internal/runners/push/push.go b/internal/runners/push/push.go index 10f935dfe8..d4db851d73 100644 --- a/internal/runners/push/push.go +++ b/internal/runners/push/push.go @@ -128,14 +128,14 @@ func (r *Push) Run(params PushParams) (rerr error) { // Ask to create a copy if the user does not have org permissions if intend&pushFromNoPermission > 0 && !params.Namespace.IsValid() { - createCopy, kind, err := r.prompt.Confirm("", locale.T("push_prompt_not_authorized"), ptr.To(true), nil) + createCopy, err := r.prompt.Confirm("", locale.T("push_prompt_not_authorized"), ptr.To(true), nil) if err != nil { return errs.Wrap(err, "Unable to confirm") } if !createCopy { return nil } - if kind == prompt.NonInteractive { + if !r.prompt.IsInteractive() { r.out.Notice(locale.T("prompt_continue_non_interactive")) } } @@ -172,7 +172,7 @@ func (r *Push) Run(params PushParams) (rerr error) { // If the user didn't necessarily intend to create the project we should ask them for confirmation if intend&intendCreateProject == 0 { - createProject, kind, err := r.prompt.Confirm( + createProject, err := r.prompt.Confirm( locale.Tl("create_project", "Create Project"), locale.Tl("push_confirm_create_project", "You are about to create the project [NOTICE]{{.V0}}[/RESET]. Continue?", targetNamespace.String()), ptr.To(true), nil) @@ -182,7 +182,7 @@ func (r *Push) Run(params PushParams) (rerr error) { if !createProject { return rationalize.ErrActionAborted } - if kind == prompt.NonInteractive { + if !r.prompt.IsInteractive() { r.out.Notice(locale.T("prompt_continue_non_interactive")) } } diff --git a/internal/runners/reset/reset.go b/internal/runners/reset/reset.go index 944842bf67..2f27cd1931 100644 --- a/internal/runners/reset/reset.go +++ b/internal/runners/reset/reset.go @@ -117,14 +117,14 @@ func (r *Reset) Run(params *Params) error { r.out.Notice(locale.Tl("reset_commit", "Your project will be reset to [ACTIONABLE]{{.V0}}[/RESET]\n", commitID.String())) if commitID != localCommitID { defaultChoice := !r.prime.Prompt().IsInteractive() - confirm, kind, err := r.prime.Prompt().Confirm("", locale.Tl("reset_confim", "Resetting is destructive. You will lose any changes that were not pushed. Are you sure you want to do this?"), &defaultChoice, nil) + confirm, err := r.prime.Prompt().Confirm("", locale.Tl("reset_confim", "Resetting is destructive. You will lose any changes that were not pushed. Are you sure you want to do this?"), &defaultChoice, nil) if err != nil { return errs.Wrap(err, "Unable to confirm") } if !confirm { return locale.NewInputError("err_reset_aborted", "Reset aborted by user") } - if kind == prompt.NonInteractive { + if !r.prime.Prompt().IsInteractive() { r.prime.Output().Notice(locale.T("prompt_continue_non_interactive")) } } diff --git a/internal/runners/revert/revert.go b/internal/runners/revert/revert.go index 335bab3af4..0618528826 100644 --- a/internal/runners/revert/revert.go +++ b/internal/runners/revert/revert.go @@ -139,14 +139,14 @@ func (r *Revert) Run(params *Params) (rerr error) { } defaultChoice := !r.prime.Prompt().IsInteractive() - revert, kind, err := r.prime.Prompt().Confirm("", locale.Tl("revert_confirm", "Continue?"), &defaultChoice, nil) + revert, err := r.prime.Prompt().Confirm("", locale.Tl("revert_confirm", "Continue?"), &defaultChoice, nil) if err != nil { return errs.Wrap(err, "Unable to confirm") } if !revert { return locale.NewInputError("err_revert_aborted", "Revert aborted by user") } - if kind == prompt.NonInteractive { + if !r.prime.Prompt().IsInteractive() { r.prime.Output().Notice(locale.T("prompt_continue_non_interactive")) } diff --git a/internal/runners/scripts/edit.go b/internal/runners/scripts/edit.go index 3f3e04be19..59d74333c9 100644 --- a/internal/runners/scripts/edit.go +++ b/internal/runners/scripts/edit.go @@ -237,7 +237,7 @@ func startInteractive(sw *scriptWatcher, scriptName string, output output.Output go sw.run(scriptName, output, cfg, proj) for { - doneEditing, _, err := prompt.Confirm("", locale.T("prompt_done_editing"), ptr.To(true), nil) + doneEditing, err := prompt.Confirm("", locale.T("prompt_done_editing"), ptr.To(true), nil) if err != nil { return errs.Wrap(err, "Prompter returned with failure.") } diff --git a/internal/runners/update/lock.go b/internal/runners/update/lock.go index 707d01b8a7..9ad15b52b9 100644 --- a/internal/runners/update/lock.go +++ b/internal/runners/update/lock.go @@ -131,14 +131,14 @@ func confirmLock(prom prompt.Prompter, out output.Outputer) error { defaultChoice := !prom.IsInteractive() msg := locale.T("confirm_update_locked_version_prompt") - confirmed, kind, err := prom.Confirm(locale.T("confirm"), msg, &defaultChoice, nil) + confirmed, err := prom.Confirm(locale.T("confirm"), msg, &defaultChoice, nil) if err != nil { return errs.Wrap(err, "Unable to confirm") } if !confirmed { return locale.NewInputError("err_update_lock_noconfirm", "Cancelling by your request.") } - if kind == prompt.NonInteractive { + if !prom.IsInteractive() { out.Notice(locale.T("prompt_continue_non_interactive")) } diff --git a/internal/runners/update/unlock.go b/internal/runners/update/unlock.go index 8eae02f42d..d3d5e99921 100644 --- a/internal/runners/update/unlock.go +++ b/internal/runners/update/unlock.go @@ -73,14 +73,14 @@ func confirmUnlock(prom prompt.Prompter, out output.Outputer) error { msg := locale.T("confirm_update_unlocked_version_prompt") defaultChoice := !prom.IsInteractive() - confirmed, kind, err := prom.Confirm(locale.T("confirm"), msg, &defaultChoice, nil) + confirmed, err := prom.Confirm(locale.T("confirm"), msg, &defaultChoice, nil) if err != nil { return errs.Wrap(err, "Unable to confirm") } if !confirmed { return locale.NewInputError("err_update_lock_noconfirm", "Cancelling by your request.") } - if kind == prompt.NonInteractive { + if !prom.IsInteractive() { out.Notice(locale.T("prompt_continue_non_interactive")) } diff --git a/internal/runners/upgrade/upgrade.go b/internal/runners/upgrade/upgrade.go index 22d8caeb2f..41f2207cf6 100644 --- a/internal/runners/upgrade/upgrade.go +++ b/internal/runners/upgrade/upgrade.go @@ -12,7 +12,6 @@ import ( "github.com/ActiveState/cli/internal/locale" "github.com/ActiveState/cli/internal/output" "github.com/ActiveState/cli/internal/primer" - "github.com/ActiveState/cli/internal/prompt" "github.com/ActiveState/cli/internal/rtutils/ptr" "github.com/ActiveState/cli/internal/runbits/commits_runbit" "github.com/ActiveState/cli/internal/runbits/rationalize" @@ -284,14 +283,14 @@ func (u *Upgrade) renderUserFacing(changes []structuredChange, expand bool) erro out.Print(tbl.Render()) out.Notice(" ") // Empty line (prompts use Notice) - confirm, kind, err := u.prime.Prompt().Confirm("", locale.Tr("upgrade_confirm"), ptr.To(true), nil) + confirm, err := u.prime.Prompt().Confirm("", locale.Tr("upgrade_confirm"), ptr.To(true), nil) if err != nil { return errs.Wrap(err, "confirmation failed") } if !confirm { return ErrAbort } - if kind == prompt.NonInteractive { + if !u.prime.Prompt().IsInteractive() { u.prime.Output().Notice(locale.T("prompt_continue_non_interactive")) } diff --git a/internal/runners/use/reset.go b/internal/runners/use/reset.go index 85e5b0283e..9fa5aa26e8 100644 --- a/internal/runners/use/reset.go +++ b/internal/runners/use/reset.go @@ -40,7 +40,7 @@ func (u *Reset) Run(params *ResetParams) error { } defaultChoice := !u.prompt.IsInteractive() - ok, kind, err := u.prompt.Confirm(locale.T("confirm"), + ok, err := u.prompt.Confirm(locale.T("confirm"), locale.Tl("use_reset_confirm", "You are about to stop using your project runtime. Continue?"), &defaultChoice, nil) if err != nil { return errs.Wrap(err, "Unable to confirm") @@ -48,7 +48,7 @@ func (u *Reset) Run(params *ResetParams) error { if !ok { return locale.NewInputError("err_reset_aborted", "Reset aborted by user") } - if kind == prompt.NonInteractive { + if !u.prompt.IsInteractive() { u.out.Notice(locale.T("prompt_continue_non_interactive")) } From 918a41c94670469f5827c03353dae4a9b449dd49 Mon Sep 17 00:00:00 2001 From: mitchell Date: Fri, 15 Nov 2024 16:18:11 -0500 Subject: [PATCH 050/336] Updated prompt.Confirm callers outside state tool. --- cmd/state-installer/installer.go | 2 +- cmd/state-remote-installer/main.go | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/cmd/state-installer/installer.go b/cmd/state-installer/installer.go index 65ce101cb5..b5fef2a594 100644 --- a/cmd/state-installer/installer.go +++ b/cmd/state-installer/installer.go @@ -55,7 +55,7 @@ func (i *Installer) Install() (rerr error) { } if isAdmin && !i.Params.force && !i.Params.isUpdate && !i.Params.nonInteractive { prompter := prompt.New(true, i.an) - confirm, err := prompter.Confirm("", locale.T("installer_prompt_is_admin"), ptr.To(false)) + confirm, err := prompter.Confirm("", locale.T("installer_prompt_is_admin"), ptr.To(false), nil) if err != nil { return errs.Wrap(err, "Unable to confirm") } diff --git a/cmd/state-remote-installer/main.go b/cmd/state-remote-installer/main.go index c5c08b4fb5..2ca3c36f75 100644 --- a/cmd/state-remote-installer/main.go +++ b/cmd/state-remote-installer/main.go @@ -174,7 +174,7 @@ func main() { func execute(out output.Outputer, prompt prompt.Prompter, cfg *config.Instance, an analytics.Dispatcher, args []string, params *Params) error { msg := locale.Tr("tos_disclaimer", constants.TermsOfServiceURLLatest) msg += locale.Tr("tos_disclaimer_prompt", constants.TermsOfServiceURLLatest) - cont, err := prompt.Confirm(locale.Tr("install_remote_title"), msg, ptr.To(true)) + cont, err := prompt.Confirm(locale.Tr("install_remote_title"), msg, ptr.To(true), nil) if err != nil { return errs.Wrap(err, "Could not prompt for confirmation") } From c795a06dbca97a0dbfeac2939d2b0fc60497852e Mon Sep 17 00:00:00 2001 From: mitchell Date: Mon, 18 Nov 2024 10:57:47 -0500 Subject: [PATCH 051/336] Fixed failing integration test. --- internal/runbits/runtime/runtime.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/runbits/runtime/runtime.go b/internal/runbits/runtime/runtime.go index 5cd987d89d..83b995ff75 100644 --- a/internal/runbits/runtime/runtime.go +++ b/internal/runbits/runtime/runtime.go @@ -253,7 +253,7 @@ func Update( if opts.Archive != nil { rtOpts = append(rtOpts, runtime.WithArchive(opts.Archive.Dir, opts.Archive.PlatformID, checkout.ArtifactExt)) } - if commit.BuildPlan().IsBuildInProgress() { + if buildPlan.IsBuildInProgress() { // Build progress URL is of the form // https://///distributions?branch=&commitID= host := constants.DefaultAPIHost From 568a074d2188abd1b5d276a88064052580edf0b7 Mon Sep 17 00:00:00 2001 From: mitchell Date: Mon, 18 Nov 2024 11:17:42 -0500 Subject: [PATCH 052/336] Remove mock. --- internal/prompt/mock/mock.go | 77 ------------------------------------ 1 file changed, 77 deletions(-) delete mode 100644 internal/prompt/mock/mock.go diff --git a/internal/prompt/mock/mock.go b/internal/prompt/mock/mock.go deleted file mode 100644 index e32a2b08c1..0000000000 --- a/internal/prompt/mock/mock.go +++ /dev/null @@ -1,77 +0,0 @@ -package mock - -import ( - "reflect" - - "github.com/ActiveState/cli/internal/prompt" - - tmock "github.com/stretchr/testify/mock" -) - -var _ prompt.Prompter = &Mock{} - -// Mock the struct to mock the Prompt struct -type Mock struct { - tmock.Mock -} - -// Init an object -func Init() *Mock { - return &Mock{} -} - -// Close it -func (m *Mock) Close() { -} - -// Input prompts the user for input -func (m *Mock) Input(title, message string, defaultResponse *string, flags ...prompt.ValidatorFlag) (string, error) { - args := m.Called(title, message, defaultResponse, flags) - return args.String(0), failure(args.Get(1)) -} - -// InputAndValidate prompts the user for input witha customer validator and validation flags -func (m *Mock) InputAndValidate(title, message string, defaultResponse *string, validator prompt.ValidatorFunc, flags ...prompt.ValidatorFlag) (response string, err error) { - args := m.Called(message, message, defaultResponse, validator) - return args.String(0), failure(args.Get(1)) -} - -// Select prompts the user to select one entry from multiple choices -func (m *Mock) Select(title, message string, choices []string, defaultChoice *string) (string, error) { - args := m.Called(title, message, choices, defaultChoice) - return args.String(0), failure(args.Get(1)) -} - -// Confirm prompts user for yes or no response. -func (m *Mock) Confirm(title, message string, defaultChoice *bool) (bool, error) { - args := m.Called(title, message, defaultChoice) - return args.Bool(0), failure(args.Get(1)) -} - -// InputSecret prompts the user for input and obfuscates the text in stdout. -// Will fail if empty. -func (m *Mock) InputSecret(title, message string, flags ...prompt.ValidatorFlag) (response string, err error) { - args := m.Called(title, message) - return args.String(0), failure(args.Get(1)) -} - -// OnMethod behaves like mock.On but disregards whether arguments match or not -func (m *Mock) OnMethod(methodName string) *tmock.Call { - methodType := reflect.ValueOf(m).MethodByName(methodName).Type() - anyArgs := []interface{}{} - for i := 0; i < methodType.NumIn(); i++ { - anyArgs = append(anyArgs, tmock.Anything) - } - return m.On(methodName, anyArgs...) -} - -func (m *Mock) IsInteractive() bool { - return true -} - -func failure(arg interface{}) error { - if arg == nil { - return nil - } - return arg.(error) -} From 4113b3e0cdc322959f476ba01c67693b386b1000 Mon Sep 17 00:00:00 2001 From: mitchell Date: Mon, 18 Nov 2024 12:32:48 -0500 Subject: [PATCH 053/336] Updated integration tests with non-interactive and force notices. --- internal/locale/locales/en-us.yaml | 2 +- internal/runners/push/push.go | 2 +- test/integration/package_int_test.go | 48 ++++++++++++++++++++++++ test/integration/reset_int_test.go | 1 + test/integration/update_lock_int_test.go | 1 + 5 files changed, 52 insertions(+), 2 deletions(-) diff --git a/internal/locale/locales/en-us.yaml b/internal/locale/locales/en-us.yaml index add273ea81..b5a42a0105 100644 --- a/internal/locale/locales/en-us.yaml +++ b/internal/locale/locales/en-us.yaml @@ -1168,7 +1168,7 @@ prompt_continue_pkg_operation: prompt_continue_force: other: "Continuing because the '[ACTIONABLE]--force[/RESET]' flag is set." prompt_continue_non_interactive: - other: "Continuting because State Tool is running in non-interactive mode." + other: "Continuing because State Tool is running in non-interactive mode." prompt_abort_non_interactive: other: "Aborting because State Tool is running in non-interactive mode. To bypass you can use the '[ACTIONABLE]--force[/RESET]' flag." unstable_command_warning: diff --git a/internal/runners/push/push.go b/internal/runners/push/push.go index d4db851d73..8c828f2f13 100644 --- a/internal/runners/push/push.go +++ b/internal/runners/push/push.go @@ -333,7 +333,7 @@ func (r *Push) promptNamespace() (*project.Namespaced, error) { owner := r.auth.WhoAmI() owner, err := r.prompt.Input("", locale.T("push_prompt_owner"), &owner) if err != nil { - return nil, locale.WrapError(err, "err_push_get_owner", "Could not deterimine project owner") + return nil, locale.WrapError(err, "err_push_get_owner", "Could not determine project owner") } var name string diff --git a/test/integration/package_int_test.go b/test/integration/package_int_test.go index 8ac91a19f2..60983fc0bd 100644 --- a/test/integration/package_int_test.go +++ b/test/integration/package_int_test.go @@ -600,6 +600,54 @@ func (suite *PackageIntegrationTestSuite) TestCVE_Prompt() { cp.ExpectExitCode(0) } +func (suite *PackageIntegrationTestSuite) TestCVE_NonInteractive() { + suite.OnlyRunForTags(tagsuite.Package) + ts := e2e.New(suite.T(), false) + defer ts.Close() + + ts.LoginAsPersistentUser() + + ts.PrepareProject("ActiveState-CLi/small-python", "5a1e49e5-8ceb-4a09-b605-ed334474855b") + + cp := ts.Spawn("config", "set", constants.AsyncRuntimeConfig, "true") + cp.ExpectExitCode(0) + + cp = ts.Spawn("config", "set", "security.prompt.level", "high") + cp.ExpectExitCode(0) + + cp = ts.Spawn("config", "set", constants.SecurityPromptConfig, "true") + cp.ExpectExitCode(0) + + cp = ts.Spawn("install", "urllib3@2.0.2", "--ts=2024-09-10T16:36:34.393Z", "--non-interactive") + cp.ExpectRe(`Warning: Dependency has .* vulnerabilities`, e2e.RuntimeSolvingTimeoutOpt) + cp.Expect("Aborting because State Tool is running in non-interactive mode") + cp.ExpectNotExitCode(0) +} + +func (suite *PackageIntegrationTestSuite) TestCVE_Force() { + suite.OnlyRunForTags(tagsuite.Package) + ts := e2e.New(suite.T(), false) + defer ts.Close() + + ts.LoginAsPersistentUser() + + ts.PrepareProject("ActiveState-CLi/small-python", "5a1e49e5-8ceb-4a09-b605-ed334474855b") + + cp := ts.Spawn("config", "set", constants.AsyncRuntimeConfig, "true") + cp.ExpectExitCode(0) + + cp = ts.Spawn("config", "set", "security.prompt.level", "high") + cp.ExpectExitCode(0) + + cp = ts.Spawn("config", "set", constants.SecurityPromptConfig, "true") + cp.ExpectExitCode(0) + + cp = ts.Spawn("install", "urllib3@2.0.2", "--ts=2024-09-10T16:36:34.393Z", "--force") + cp.ExpectRe(`Warning: Dependency has .* vulnerabilities`, e2e.RuntimeSolvingTimeoutOpt) + cp.Expect("Continuing because the '--force' flag is set") + cp.ExpectExitCode(0) +} + func (suite *PackageIntegrationTestSuite) TestCVE_Indirect() { suite.OnlyRunForTags(tagsuite.Package) ts := e2e.New(suite.T(), false) diff --git a/test/integration/reset_int_test.go b/test/integration/reset_int_test.go index 9b3199ee60..98ae43997f 100644 --- a/test/integration/reset_int_test.go +++ b/test/integration/reset_int_test.go @@ -90,6 +90,7 @@ func (suite *ResetIntegrationTestSuite) TestRevertInvalidURL() { cp.ExpectNotExitCode(0) cp = ts.Spawn("reset", "-n") + cp.Expect("Continuing because State Tool is running in non-interactive mode") cp.Expect("Successfully reset to commit: " + commitID.String()) cp.ExpectExitCode(0) } diff --git a/test/integration/update_lock_int_test.go b/test/integration/update_lock_int_test.go index 6e9f9add34..471c4b8527 100644 --- a/test/integration/update_lock_int_test.go +++ b/test/integration/update_lock_int_test.go @@ -203,6 +203,7 @@ func (suite *UpdateIntegrationTestSuite) TestLockUnlock() { e2e.OptArgs("update", "unlock", "-n"), e2e.OptAppendEnv(suite.env(false, false)...), ) + cp.Expect("Continuing because State Tool is running in non-interactive mode") cp.Expect("unlocked") data, err = os.ReadFile(pjfile.Path()) From 3eb0e78c456d1450d31c5b3003acf71097c655fc Mon Sep 17 00:00:00 2001 From: mitchell Date: Mon, 18 Nov 2024 15:26:35 -0500 Subject: [PATCH 054/336] Fixed interline diffs. Do not try to clean up the line diff, as it may end up inadvertently combining lines. --- internal/runbits/buildscript/buildscript.go | 1 - 1 file changed, 1 deletion(-) diff --git a/internal/runbits/buildscript/buildscript.go b/internal/runbits/buildscript/buildscript.go index 4972405f75..b8443447f7 100644 --- a/internal/runbits/buildscript/buildscript.go +++ b/internal/runbits/buildscript/buildscript.go @@ -33,7 +33,6 @@ func generateDiff(script *buildscript.BuildScript, otherScript *buildscript.Buil scriptLines, newScriptLines, lines := diff.DiffLinesToChars(string(sb1), string(sb2)) hunks := diff.DiffMain(scriptLines, newScriptLines, false) hunks = diff.DiffCharsToLines(hunks, lines) - hunks = diff.DiffCleanupSemantic(hunks) for i := 0; i < len(hunks); i++ { switch hunk := hunks[i]; hunk.Type { case diffmatchpatch.DiffEqual: From 8321e42d804b7bfc76ca3fff4ca962505de1ad96 Mon Sep 17 00:00:00 2001 From: mdrakos Date: Mon, 18 Nov 2024 14:32:59 -0800 Subject: [PATCH 055/336] Reorganize error handling --- .../buildplanner/request/buildexpression.go | 6 +- .../api/buildplanner/request/commit.go | 32 +++---- .../api/buildplanner/request/createproject.go | 85 ++++++++++++------- .../api/buildplanner/request/evaluate.go | 30 +++---- .../api/buildplanner/request/mergecommit.go | 85 ++++++++++--------- .../api/buildplanner/request/revertcommit.go | 71 +++++++++------- .../api/buildplanner/request/stagecommit.go | 79 ++++++++--------- .../api/buildplanner/response/build.go | 4 +- .../api/buildplanner/response/commit.go | 34 +------- .../api/buildplanner/response/commiterror.go | 31 +------ .../buildplanner/response/createproject.go | 3 - .../api/buildplanner/response/mergecommit.go | 8 +- .../api/buildplanner/response/pushcommit.go | 10 --- .../api/buildplanner/response/revertcommit.go | 1 + .../api/buildplanner/response/shared.go | 29 +++---- .../api/buildplanner/response/solveerror.go | 41 ++++++--- pkg/platform/api/buildplanner/types/errors.go | 1 + pkg/platform/api/graphql/request/publish.go | 26 +++--- 18 files changed, 268 insertions(+), 308 deletions(-) delete mode 100644 pkg/platform/api/buildplanner/response/pushcommit.go diff --git a/pkg/platform/api/buildplanner/request/buildexpression.go b/pkg/platform/api/buildplanner/request/buildexpression.go index f07f097086..b98ae68672 100644 --- a/pkg/platform/api/buildplanner/request/buildexpression.go +++ b/pkg/platform/api/buildplanner/request/buildexpression.go @@ -19,11 +19,7 @@ query ($commitID: ID!) { atTime expr } - ... on Error{ - __typename - message - } - ... on NotFound { + ... on Error { __typename message } diff --git a/pkg/platform/api/buildplanner/request/commit.go b/pkg/platform/api/buildplanner/request/commit.go index 366a157cac..d479ac79de 100644 --- a/pkg/platform/api/buildplanner/request/commit.go +++ b/pkg/platform/api/buildplanner/request/commit.go @@ -147,7 +147,7 @@ query ($commitID: String!, $organization: String!, $project: String!, $target: S name namespace version_requirements: versionRequirements { - comparator + comparator version } } @@ -155,12 +155,20 @@ query ($commitID: String!, $organization: String!, $project: String!, $target: S } } ... on Error { + __typename message } - ... on PlanningError { - message + ... on ErrorWithSubErrors { + __typename subErrors { __typename + buildExprPath + ... on RemediableError { + possibleRemediations { + description + suggestedPriority + } + } ... on GenericSolveError { path message @@ -185,23 +193,12 @@ query ($commitID: String!, $organization: String!, $project: String!, $target: S parameters } } - ... on TargetNotFound { - message - requestedTarget - possibleTargets - } } } } } ... on Error { - message - } - ... on NotFound { __typename - type - resource - mayNeedAuthentication message } } @@ -210,13 +207,6 @@ query ($commitID: String!, $organization: String!, $project: String!, $target: S __typename message } - ... on NotFound { - __typename - type - resource - mayNeedAuthentication - message - } } } ` diff --git a/pkg/platform/api/buildplanner/request/createproject.go b/pkg/platform/api/buildplanner/request/createproject.go index 8f3c52aca0..f24959d2a8 100644 --- a/pkg/platform/api/buildplanner/request/createproject.go +++ b/pkg/platform/api/buildplanner/request/createproject.go @@ -18,37 +18,60 @@ type createProject struct { func (c *createProject) Query() string { return ` mutation ($organization: String!, $project: String!, $private: Boolean!, $expr: BuildExpr!, $description: String!) { - createProject(input:{organization:$organization, project:$project, private:$private, expr:$expr, description:$description}) { - ... on ProjectCreated { - __typename - commit { - __typename - commitId - } - } - ... on AlreadyExists { - __typename - message - } - ... on NotFound { - __typename - message - } - ... on ParseError { - __typename - message - path - } - ... on ValidationError { - __typename - message - } - ... on Forbidden { - __typename - message - } - } -}` + createProject( + input: {organization: $organization, project: $project, private: $private, expr: $expr, description: $description} + ) { + ... on ProjectCreated { + __typename + commit { + __typename + commitId + } + } + ... on Error { + __typename + message + } + ... on ErrorWithSubErrors { + __typename + subErrors { + __typename + buildExprPath + ... on RemediableError { + possibleRemediations { + description + suggestedPriority + } + } + ... on GenericSolveError { + path + message + isTransient + validationErrors { + error + jsonPath + } + } + ... on RemediableSolveError { + path + message + isTransient + errorType + validationErrors { + error + jsonPath + } + suggestedRemediations { + remediationType + command + parameters + } + } + } + } + } +} +` } func (c *createProject) Vars() (map[string]interface{}, error) { diff --git a/pkg/platform/api/buildplanner/request/evaluate.go b/pkg/platform/api/buildplanner/request/evaluate.go index acabfdc7cf..6ddbd26876 100644 --- a/pkg/platform/api/buildplanner/request/evaluate.go +++ b/pkg/platform/api/buildplanner/request/evaluate.go @@ -23,13 +23,23 @@ mutation ($organization: String!, $project: String!, $commitId: String!, $target __typename status } - ... on PlanningError { + ... on Error { __typename message + } + ... on ErrorWithSubErrors { + __typename subErrors { __typename + buildExprPath + ... on RemediableError { + possibleRemediations { + description + suggestedPriority + } + } ... on GenericSolveError { - buildExprPath + path message isTransient validationErrors { @@ -38,7 +48,7 @@ mutation ($organization: String!, $project: String!, $commitId: String!, $target } } ... on RemediableSolveError { - buildExprPath + path message isTransient errorType @@ -52,21 +62,11 @@ mutation ($organization: String!, $project: String!, $commitId: String!, $target parameters } } - ... on TargetNotFound { - message - requestedTarget - possibleTargets - } } } - ... on NotFound { - type - message - resource - mayNeedAuthentication - } } -}` +} +` } func (b *evaluate) Vars() (map[string]interface{}, error) { diff --git a/pkg/platform/api/buildplanner/request/mergecommit.go b/pkg/platform/api/buildplanner/request/mergecommit.go index b1868d5f2d..f9423fae36 100644 --- a/pkg/platform/api/buildplanner/request/mergecommit.go +++ b/pkg/platform/api/buildplanner/request/mergecommit.go @@ -21,52 +21,55 @@ type mergeCommit struct { func (b *mergeCommit) Query() string { return ` mutation ($organization: String!, $project: String!, $targetRef: String!, $otherRef: String!, $strategy: MergeStrategy) { - mergeCommit(input:{organization:$organization, project:$project, targetVcsRef:$targetRef, otherVcsRef:$otherRef, strategy:$strategy}) { - ... on MergedCommit { - commit { - __typename - commitId - } - } - ... on MergeConflict { - __typename - message - } - ... on FastForwardError { - __typename - message - } - ... on NoCommonBaseFound { - __typename - message - } - ... on NotFound { - __typename - message - mayNeedAuthentication + mergeCommit( + input: {organization: $organization, project: $project, targetVcsRef: $targetRef, otherVcsRef: $otherRef, strategy: $strategy} + ) { + ... on MergedCommit { + commit { + __typename + commitId + } } - ... on ParseError { + ... on Error { __typename message } - ... on ValidationError { + ... on ErrorWithSubErrors { __typename - message - } - ... on Forbidden { - __typename - message - } - ... on HeadOnBranchMoved { - __typename - message - commitId - branchId - } - ... on NoChangeSinceLastCommit { - __typename - message - commitId + subErrors { + __typename + buildExprPath + ... on RemediableError { + possibleRemediations { + description + suggestedPriority + } + } + ... on GenericSolveError { + path + message + isTransient + validationErrors { + error + jsonPath + } + } + ... on RemediableSolveError { + path + message + isTransient + errorType + validationErrors { + error + jsonPath + } + suggestedRemediations { + remediationType + command + parameters + } + } + } } } } diff --git a/pkg/platform/api/buildplanner/request/revertcommit.go b/pkg/platform/api/buildplanner/request/revertcommit.go index 1a2e4fbe5a..5cbf609ba2 100644 --- a/pkg/platform/api/buildplanner/request/revertcommit.go +++ b/pkg/platform/api/buildplanner/request/revertcommit.go @@ -35,45 +35,50 @@ mutation ($organization: String!, $project: String!, $commitId: String!, $target commitId } } - ... on RevertConflict { + ... on Error { __typename message - commitId - targetCommitId - conflictPaths } - ... on CommitHasNoParent { + ... on ErrorWithSubErrors { __typename - message - } - ... on NotFound { - __typename - message - mayNeedAuthentication - } - ... on ParseError { - __typename - message - path - } - ... on ValidationError { - __typename - message - } - ... on Forbidden { - __typename - message - } - ... on HeadOnBranchMoved { - __typename - message - } - ... on NoChangeSinceLastCommit { - message - commitId + subErrors { + __typename + buildExprPath + ... on RemediableError { + possibleRemediations { + description + suggestedPriority + } + } + ... on GenericSolveError { + path + message + isTransient + validationErrors { + error + jsonPath + } + } + ... on RemediableSolveError { + path + message + isTransient + errorType + validationErrors { + error + jsonPath + } + suggestedRemediations { + remediationType + command + parameters + } + } + } } } -}` +} +` } func (r *revertCommit) Vars() (map[string]interface{}, error) { diff --git a/pkg/platform/api/buildplanner/request/stagecommit.go b/pkg/platform/api/buildplanner/request/stagecommit.go index 16b5f9d30c..7eb6788fc1 100644 --- a/pkg/platform/api/buildplanner/request/stagecommit.go +++ b/pkg/platform/api/buildplanner/request/stagecommit.go @@ -159,12 +159,20 @@ mutation ($organization: String!, $project: String!, $parentCommit: ID!, $descri } } ... on Error { + __typename message } - ... on PlanningError { - message + ... on ErrorWithSubErrors { + __typename subErrors { __typename + buildExprPath + ... on RemediableError { + possibleRemediations { + description + suggestedPriority + } + } ... on GenericSolveError { path message @@ -189,11 +197,6 @@ mutation ($organization: String!, $project: String!, $parentCommit: ID!, $descri parameters } } - ... on TargetNotFound { - message - requestedTarget - possibleTargets - } } } } @@ -202,41 +205,41 @@ mutation ($organization: String!, $project: String!, $parentCommit: ID!, $descri __typename message } - ... on NotFound { - __typename - message - type - resource - mayNeedAuthentication - } - ... on ParseError { - __typename - message - path - } - ... on Forbidden { - __typename - operation - message - resource - } - ... on HeadOnBranchMoved { - __typename - commitId - branchId - message - } - ... on NoChangeSinceLastCommit { - __typename - commitId - message - } - ... on ValidationError { + ... on ErrorWithSubErrors { __typename subErrors { __typename - message buildExprPath + ... on RemediableError { + possibleRemediations { + description + suggestedPriority + } + } + ... on GenericSolveError { + path + message + isTransient + validationErrors { + error + jsonPath + } + } + ... on RemediableSolveError { + path + message + isTransient + errorType + validationErrors { + error + jsonPath + } + suggestedRemediations { + remediationType + command + parameters + } + } } } } diff --git a/pkg/platform/api/buildplanner/response/build.go b/pkg/platform/api/buildplanner/response/build.go index 063cdaf7c3..af823e811d 100644 --- a/pkg/platform/api/buildplanner/response/build.go +++ b/pkg/platform/api/buildplanner/response/build.go @@ -15,12 +15,12 @@ type ArtifactResponse struct { } type BuildResponse struct { - *Error - *PlanningError Type string `json:"__typename"` Artifacts []ArtifactResponse `json:"artifacts"` Status string `json:"status"` RawMessage json.RawMessage `json:"rawMessage"` + *Error + *ErrorWithSubErrors } func (b *BuildResponse) MarshalJSON() ([]byte, error) { diff --git a/pkg/platform/api/buildplanner/response/commit.go b/pkg/platform/api/buildplanner/response/commit.go index 0ae4103535..b8923ed37f 100644 --- a/pkg/platform/api/buildplanner/response/commit.go +++ b/pkg/platform/api/buildplanner/response/commit.go @@ -38,7 +38,7 @@ func processPlanningError(message string, subErrors []*BuildExprError) error { } } - if se.Type != types.RemediableSolveErrorType && se.Type != types.GenericSolveErrorType { + if se.Type != types.RemediableSolveErrorType && se.Type != types.GenericSolveErrorType && se.Type != types.RemediableError { continue } @@ -70,32 +70,6 @@ func ProcessProjectError(project *ProjectResponse, fallbackMessage string) error return errs.New(fallbackMessage) } -// PlanningError represents an error that occurred during planning. -type PlanningError struct { - SubErrors []*BuildExprError `json:"subErrors"` -} - -// BuildExprError represents a location in the build script where an error occurred. -type BuildExprError struct { - Type string `json:"__typename"` - BuildExprPath string `json:"buildExprPath"` - Message string `json:"message"` - IsTransient bool `json:"isTransient"` - ValidationErrors []*SolverErrorValidationError `json:"validationErrors"` - *TargetNotFound - *RemediableSolveError -} - -type TargetNotFound struct { - Type string `json:"__typename"` - RequestedTarget string `json:"requestedTarget"` - PossibleTargets []string `json:"possibleTargets"` -} - -type ValidationError struct { - SubErrors []*BuildExprError `json:"subErrors"` -} - // Commit contains the build and any errors. type Commit struct { Type string `json:"__typename"` @@ -105,9 +79,5 @@ type Commit struct { ParentID strfmt.UUID `json:"parentId"` Build *BuildResponse `json:"build"` *Error - *ParseError - *ValidationError - *ForbiddenError - *HeadOnBranchMovedError - *NoChangeSinceLastCommitError + *ErrorWithSubErrors } diff --git a/pkg/platform/api/buildplanner/response/commiterror.go b/pkg/platform/api/buildplanner/response/commiterror.go index f517f1fba4..02d50dc558 100644 --- a/pkg/platform/api/buildplanner/response/commiterror.go +++ b/pkg/platform/api/buildplanner/response/commiterror.go @@ -6,7 +6,6 @@ import ( "github.com/ActiveState/cli/internal/errs" "github.com/ActiveState/cli/internal/locale" "github.com/ActiveState/cli/pkg/platform/api/buildplanner/types" - "github.com/go-openapi/strfmt" ) type CommitError struct { @@ -29,7 +28,7 @@ func ProcessCommitError(commit *Commit, fallbackMessage string) error { case types.ParseErrorType: return &CommitError{ commit.Type, commit.Message, - locale.NewInputError("err_buildplanner_parse_error", "The platform failed to parse the build expression. Received message: {{.V0}}. Path: {{.V1}}", commit.Message, commit.ParseError.Path), + locale.NewInputError("err_buildplanner_parse_error", "The platform failed to parse the build expression. Received message: {{.V0}}.", commit.Message), } case types.ValidationErrorType: var subErrorMessages []string @@ -49,7 +48,7 @@ func ProcessCommitError(commit *Commit, fallbackMessage string) error { case types.ForbiddenErrorType: return &CommitError{ commit.Type, commit.Message, - locale.NewInputError("err_buildplanner_forbidden", "Operation forbidden: {{.V0}}. Received message: {{.V1}}", commit.Operation, commit.Message), + locale.NewInputError("err_buildplanner_forbidden", "Operation forbidden, Received message: {{.V1}}", commit.Message), } case types.HeadOnBranchMovedErrorType: return errs.Wrap(&CommitError{ @@ -93,29 +92,3 @@ func ProcessMergedCommitError(mcErr *MergedCommit, fallbackMessage string) error } return errs.New(fallbackMessage) } - -// HeadOnBranchMovedError represents an error that occurred because the head on -// a remote branch has moved. -type HeadOnBranchMovedError struct { - HeadBranchID strfmt.UUID `json:"branchId"` -} - -// NoChangeSinceLastCommitError represents an error that occurred because there -// were no changes since the last commit. -type NoChangeSinceLastCommitError struct { - NoChangeCommitID strfmt.UUID `json:"commitId"` -} - -// MergeConflictError represents an error that occurred because of a merge conflict. -type MergeConflictError struct { - CommonAncestorID strfmt.UUID `json:"commonAncestorId"` - ConflictPaths []string `json:"conflictPaths"` -} - -// MergeError represents two different errors in the BuildPlanner's graphQL -// schema with the same fields. Those errors being: FastForwardError and -// NoCommonBaseFound. Inspect the Type field to determine which error it is. -type MergeError struct { - TargetVCSRef strfmt.UUID `json:"targetVcsRef"` - OtherVCSRef strfmt.UUID `json:"otherVcsRef"` -} diff --git a/pkg/platform/api/buildplanner/response/createproject.go b/pkg/platform/api/buildplanner/response/createproject.go index 1db41851a9..9531aa2efc 100644 --- a/pkg/platform/api/buildplanner/response/createproject.go +++ b/pkg/platform/api/buildplanner/response/createproject.go @@ -8,9 +8,6 @@ type ProjectCreated struct { Type string `json:"__typename"` Commit *Commit `json:"commit"` *Error - *NotFoundError - *ParseError - *ForbiddenError } type ProjectCreatedError struct { diff --git a/pkg/platform/api/buildplanner/response/mergecommit.go b/pkg/platform/api/buildplanner/response/mergecommit.go index aec9a7de68..1eb73019a0 100644 --- a/pkg/platform/api/buildplanner/response/mergecommit.go +++ b/pkg/platform/api/buildplanner/response/mergecommit.go @@ -7,11 +7,5 @@ type MergedCommit struct { Type string `json:"__typename"` Commit *Commit `json:"commit"` *Error - *MergeConflictError - *MergeError - *NotFoundError - *ParseError - *ForbiddenError - *HeadOnBranchMovedError - *NoChangeSinceLastCommitError + *ErrorWithSubErrors } diff --git a/pkg/platform/api/buildplanner/response/pushcommit.go b/pkg/platform/api/buildplanner/response/pushcommit.go deleted file mode 100644 index 4be1dd71a7..0000000000 --- a/pkg/platform/api/buildplanner/response/pushcommit.go +++ /dev/null @@ -1,10 +0,0 @@ -package response - -// PushCommitResult is the result of a push commit mutation. -// It contains the resulting commit from the operation and any errors. -// The resulting commit is pushed to the platform automatically. -type PushCommitResult struct { - Type string `json:"__typename"` - Commit *Commit `json:"pushCommit"` - *Error -} diff --git a/pkg/platform/api/buildplanner/response/revertcommit.go b/pkg/platform/api/buildplanner/response/revertcommit.go index 10237ad224..b624a7b85f 100644 --- a/pkg/platform/api/buildplanner/response/revertcommit.go +++ b/pkg/platform/api/buildplanner/response/revertcommit.go @@ -10,4 +10,5 @@ type RevertedCommit struct { CommonAncestor strfmt.UUID `json:"commonAncestorID"` ConflictPaths []string `json:"conflictPaths"` *Error + *ErrorWithSubErrors } diff --git a/pkg/platform/api/buildplanner/response/shared.go b/pkg/platform/api/buildplanner/response/shared.go index 627bfcb949..3b54830c32 100644 --- a/pkg/platform/api/buildplanner/response/shared.go +++ b/pkg/platform/api/buildplanner/response/shared.go @@ -93,25 +93,24 @@ func IsErrorResponse(errorType string) bool { errorType == types.ComitHasNoParentErrorType } -// NotFoundError represents an error that occurred because a resource was not found. -type NotFoundError struct { - Type string `json:"type"` - Resource string `json:"resource"` - MayNeedAuthentication bool `json:"mayNeedAuthentication"` -} - -// ParseError is an error that occurred while parsing the build expression. -type ParseError struct { - Path string `json:"path"` +// Error contains an error message. +type Error struct { + Message string `json:"message"` } -type ForbiddenError struct { - Operation string `json:"operation"` +type ErrorWithSubErrors struct { + SubErrors []*BuildExprError `json:"subErrors"` } -// Error contains an error message. -type Error struct { - Message string `json:"message"` +// BuildExprError represents a location in the build script where an error occurred. +type BuildExprError struct { + Type string `json:"__typename"` + Message string `json:"message"` + BuildExprPath []string `json:"buildExprPath"` + *TargetNotFoundError + *RemediableError + *GenericSolveError + *RemediableSolveError } type TargetNotFoundError struct { diff --git a/pkg/platform/api/buildplanner/response/solveerror.go b/pkg/platform/api/buildplanner/response/solveerror.go index 79bb58253d..09543a9a53 100644 --- a/pkg/platform/api/buildplanner/response/solveerror.go +++ b/pkg/platform/api/buildplanner/response/solveerror.go @@ -1,8 +1,16 @@ package response -import ( - "github.com/ActiveState/cli/pkg/platform/api/buildplanner/types" -) +import "github.com/ActiveState/cli/pkg/platform/api/buildplanner/types" + +// RemediableSolveError represents a solver error that can be remediated. +type RemediableError struct { + Remediations []*SolverErrorRemediation `json:"possibleRemediations"` +} + +type GenericSolveError struct { + IsTransient bool `json:"isTransient"` + ValidationErrors []*SolverErrorValidationError `json:"validationErrors"` +} // SolverErrorValidationError represents a validation error that occurred during planning. type SolverErrorValidationError struct { @@ -10,18 +18,17 @@ type SolverErrorValidationError struct { Error string `json:"error"` } -// RemediableSolveError represents a solver error that can be remediated. -type RemediableSolveError struct { - ErrorType string `json:"errorType"` - Remediations []*SolverErrorRemediation `json:"suggestedRemediations"` - Requirements []*types.Requirement `json:"requirements"` - Incompatibilities []*SolveErrorIncompatibility `json:"incompatibilities"` -} - // SolverErrorRemediation contains the recommeneded remediation for remediable error. type SolverErrorRemediation struct { - RemediationType string `json:"solveErrorRemediationType"` - Command string `json:"command"` + Description string `json:"description"` + SuggestedPriority string `json:"suggestedPriority"` +} + +type RemediableSolveError struct { + ErrorType string `json:"errorType"` + Incompatibilities []*SolveErrorIncompatibility `json:"incompatibilities"` + Requirements []*types.Requirement `json:"requirements"` + SuggestedRemediations []*SolverErrorRemediation `json:"suggestedRemediations"` } // SolverErrorIncompatibility represents a solver incompatibility error. @@ -33,12 +40,20 @@ type SolveErrorIncompatibility struct { // SolveErrorPackageIncompatibility represents a package incompatibility error. type SolveErrorPackageIncompatibility struct { + Type string `json:"type"` Feature string `json:"feature"` Namespace string `json:"namespace"` } // SolveErrorPlatformIncompatibility represents a platform incompatibility error. type SolveErrorPlatformIncompatibility struct { + Type string `json:"type"` PlatformID string `json:"platformID"` PlatformKernel string `json:"platformKernel"` } + +const ( + SolveErrorIncompatibilityTypeDependency = "DEPENDENCY" + SolveErrorIncompatibilityTypePlatform = "PLATFORM" + SolveErrorIncompatibilityTypeRequirement = "REQUIREMENT" +) diff --git a/pkg/platform/api/buildplanner/types/errors.go b/pkg/platform/api/buildplanner/types/errors.go index e3f234d30a..e4dd6d894a 100644 --- a/pkg/platform/api/buildplanner/types/errors.go +++ b/pkg/platform/api/buildplanner/types/errors.go @@ -10,6 +10,7 @@ const ( HeadOnBranchMovedErrorType = "HeadOnBranchMoved" ForbiddenErrorType = "Forbidden" GenericSolveErrorType = "GenericSolveError" + RemediableError = "RemediableError" RemediableSolveErrorType = "RemediableSolveError" PlanningErrorType = "PlanningError" MergeConflictType = "MergeConflict" diff --git a/pkg/platform/api/graphql/request/publish.go b/pkg/platform/api/graphql/request/publish.go index 551bdb9e06..45b7313dd2 100644 --- a/pkg/platform/api/graphql/request/publish.go +++ b/pkg/platform/api/graphql/request/publish.go @@ -202,19 +202,19 @@ func (p *PublishInput) Files() []gqlclient.File { func (p *PublishInput) Query() string { return ` - mutation ($input: PublishInput!) { - publish(input: $input) { - ... on CreatedIngredientVersionRevision { - ingredientID - ingredientVersionID - revision - } - ... on Error{ - __typename - error: message - } - } - } +mutation ($input: PublishInput!) { + publish(input: $input) { + ... on CreatedIngredientVersionRevision { + ingredientID + ingredientVersionID + revision + } + ... on Error { + __typename + error: message + } + } +} ` } From 2ccc89d0db20a9a3d2109d3d92f9379c51b7e122 Mon Sep 17 00:00:00 2001 From: mdrakos Date: Mon, 18 Nov 2024 15:55:25 -0800 Subject: [PATCH 056/336] Simplify sub errors --- .../api/buildplanner/request/commit.go | 13 ---------- .../api/buildplanner/request/createproject.go | 13 ---------- .../api/buildplanner/request/evaluate.go | 13 ---------- .../api/buildplanner/request/mergecommit.go | 13 ---------- .../api/buildplanner/request/revertcommit.go | 13 ---------- .../api/buildplanner/request/stagecommit.go | 26 ------------------- 6 files changed, 91 deletions(-) diff --git a/pkg/platform/api/buildplanner/request/commit.go b/pkg/platform/api/buildplanner/request/commit.go index d479ac79de..052ab021c8 100644 --- a/pkg/platform/api/buildplanner/request/commit.go +++ b/pkg/platform/api/buildplanner/request/commit.go @@ -163,14 +163,7 @@ query ($commitID: String!, $organization: String!, $project: String!, $target: S subErrors { __typename buildExprPath - ... on RemediableError { - possibleRemediations { - description - suggestedPriority - } - } ... on GenericSolveError { - path message isTransient validationErrors { @@ -179,7 +172,6 @@ query ($commitID: String!, $organization: String!, $project: String!, $target: S } } ... on RemediableSolveError { - path message isTransient errorType @@ -187,11 +179,6 @@ query ($commitID: String!, $organization: String!, $project: String!, $target: S error jsonPath } - suggestedRemediations { - remediationType - command - parameters - } } } } diff --git a/pkg/platform/api/buildplanner/request/createproject.go b/pkg/platform/api/buildplanner/request/createproject.go index f24959d2a8..84f978346b 100644 --- a/pkg/platform/api/buildplanner/request/createproject.go +++ b/pkg/platform/api/buildplanner/request/createproject.go @@ -37,14 +37,7 @@ mutation ($organization: String!, $project: String!, $private: Boolean!, $expr: subErrors { __typename buildExprPath - ... on RemediableError { - possibleRemediations { - description - suggestedPriority - } - } ... on GenericSolveError { - path message isTransient validationErrors { @@ -53,7 +46,6 @@ mutation ($organization: String!, $project: String!, $private: Boolean!, $expr: } } ... on RemediableSolveError { - path message isTransient errorType @@ -61,11 +53,6 @@ mutation ($organization: String!, $project: String!, $private: Boolean!, $expr: error jsonPath } - suggestedRemediations { - remediationType - command - parameters - } } } } diff --git a/pkg/platform/api/buildplanner/request/evaluate.go b/pkg/platform/api/buildplanner/request/evaluate.go index 6ddbd26876..e9a4f40a08 100644 --- a/pkg/platform/api/buildplanner/request/evaluate.go +++ b/pkg/platform/api/buildplanner/request/evaluate.go @@ -32,14 +32,7 @@ mutation ($organization: String!, $project: String!, $commitId: String!, $target subErrors { __typename buildExprPath - ... on RemediableError { - possibleRemediations { - description - suggestedPriority - } - } ... on GenericSolveError { - path message isTransient validationErrors { @@ -48,7 +41,6 @@ mutation ($organization: String!, $project: String!, $commitId: String!, $target } } ... on RemediableSolveError { - path message isTransient errorType @@ -56,11 +48,6 @@ mutation ($organization: String!, $project: String!, $commitId: String!, $target error jsonPath } - suggestedRemediations { - remediationType - command - parameters - } } } } diff --git a/pkg/platform/api/buildplanner/request/mergecommit.go b/pkg/platform/api/buildplanner/request/mergecommit.go index f9423fae36..4f360b71f1 100644 --- a/pkg/platform/api/buildplanner/request/mergecommit.go +++ b/pkg/platform/api/buildplanner/request/mergecommit.go @@ -39,14 +39,7 @@ mutation ($organization: String!, $project: String!, $targetRef: String!, $other subErrors { __typename buildExprPath - ... on RemediableError { - possibleRemediations { - description - suggestedPriority - } - } ... on GenericSolveError { - path message isTransient validationErrors { @@ -55,7 +48,6 @@ mutation ($organization: String!, $project: String!, $targetRef: String!, $other } } ... on RemediableSolveError { - path message isTransient errorType @@ -63,11 +55,6 @@ mutation ($organization: String!, $project: String!, $targetRef: String!, $other error jsonPath } - suggestedRemediations { - remediationType - command - parameters - } } } } diff --git a/pkg/platform/api/buildplanner/request/revertcommit.go b/pkg/platform/api/buildplanner/request/revertcommit.go index 5cbf609ba2..30aff4dc07 100644 --- a/pkg/platform/api/buildplanner/request/revertcommit.go +++ b/pkg/platform/api/buildplanner/request/revertcommit.go @@ -44,14 +44,7 @@ mutation ($organization: String!, $project: String!, $commitId: String!, $target subErrors { __typename buildExprPath - ... on RemediableError { - possibleRemediations { - description - suggestedPriority - } - } ... on GenericSolveError { - path message isTransient validationErrors { @@ -60,7 +53,6 @@ mutation ($organization: String!, $project: String!, $commitId: String!, $target } } ... on RemediableSolveError { - path message isTransient errorType @@ -68,11 +60,6 @@ mutation ($organization: String!, $project: String!, $commitId: String!, $target error jsonPath } - suggestedRemediations { - remediationType - command - parameters - } } } } diff --git a/pkg/platform/api/buildplanner/request/stagecommit.go b/pkg/platform/api/buildplanner/request/stagecommit.go index 7eb6788fc1..e58a218966 100644 --- a/pkg/platform/api/buildplanner/request/stagecommit.go +++ b/pkg/platform/api/buildplanner/request/stagecommit.go @@ -167,14 +167,7 @@ mutation ($organization: String!, $project: String!, $parentCommit: ID!, $descri subErrors { __typename buildExprPath - ... on RemediableError { - possibleRemediations { - description - suggestedPriority - } - } ... on GenericSolveError { - path message isTransient validationErrors { @@ -183,7 +176,6 @@ mutation ($organization: String!, $project: String!, $parentCommit: ID!, $descri } } ... on RemediableSolveError { - path message isTransient errorType @@ -191,11 +183,6 @@ mutation ($organization: String!, $project: String!, $parentCommit: ID!, $descri error jsonPath } - suggestedRemediations { - remediationType - command - parameters - } } } } @@ -210,14 +197,7 @@ mutation ($organization: String!, $project: String!, $parentCommit: ID!, $descri subErrors { __typename buildExprPath - ... on RemediableError { - possibleRemediations { - description - suggestedPriority - } - } ... on GenericSolveError { - path message isTransient validationErrors { @@ -226,7 +206,6 @@ mutation ($organization: String!, $project: String!, $parentCommit: ID!, $descri } } ... on RemediableSolveError { - path message isTransient errorType @@ -234,11 +213,6 @@ mutation ($organization: String!, $project: String!, $parentCommit: ID!, $descri error jsonPath } - suggestedRemediations { - remediationType - command - parameters - } } } } From 759d1a9e077415ebd22d289ff42e342fff9aef75 Mon Sep 17 00:00:00 2001 From: mdrakos Date: Mon, 18 Nov 2024 16:14:36 -0800 Subject: [PATCH 057/336] More error cleanup --- .../api/buildplanner/request/commit.go | 1 - .../api/buildplanner/request/createproject.go | 1 - .../api/buildplanner/request/evaluate.go | 1 - .../api/buildplanner/request/mergecommit.go | 1 - .../api/buildplanner/request/revertcommit.go | 1 - .../api/buildplanner/request/stagecommit.go | 2 - .../api/buildplanner/response/shared.go | 7 +-- .../api/buildplanner/response/solveerror.go | 47 ------------------- 8 files changed, 2 insertions(+), 59 deletions(-) diff --git a/pkg/platform/api/buildplanner/request/commit.go b/pkg/platform/api/buildplanner/request/commit.go index 052ab021c8..23893de175 100644 --- a/pkg/platform/api/buildplanner/request/commit.go +++ b/pkg/platform/api/buildplanner/request/commit.go @@ -162,7 +162,6 @@ query ($commitID: String!, $organization: String!, $project: String!, $target: S __typename subErrors { __typename - buildExprPath ... on GenericSolveError { message isTransient diff --git a/pkg/platform/api/buildplanner/request/createproject.go b/pkg/platform/api/buildplanner/request/createproject.go index 84f978346b..bd9fb6cc03 100644 --- a/pkg/platform/api/buildplanner/request/createproject.go +++ b/pkg/platform/api/buildplanner/request/createproject.go @@ -36,7 +36,6 @@ mutation ($organization: String!, $project: String!, $private: Boolean!, $expr: __typename subErrors { __typename - buildExprPath ... on GenericSolveError { message isTransient diff --git a/pkg/platform/api/buildplanner/request/evaluate.go b/pkg/platform/api/buildplanner/request/evaluate.go index e9a4f40a08..1c1b3be910 100644 --- a/pkg/platform/api/buildplanner/request/evaluate.go +++ b/pkg/platform/api/buildplanner/request/evaluate.go @@ -31,7 +31,6 @@ mutation ($organization: String!, $project: String!, $commitId: String!, $target __typename subErrors { __typename - buildExprPath ... on GenericSolveError { message isTransient diff --git a/pkg/platform/api/buildplanner/request/mergecommit.go b/pkg/platform/api/buildplanner/request/mergecommit.go index 4f360b71f1..ed10ee4893 100644 --- a/pkg/platform/api/buildplanner/request/mergecommit.go +++ b/pkg/platform/api/buildplanner/request/mergecommit.go @@ -38,7 +38,6 @@ mutation ($organization: String!, $project: String!, $targetRef: String!, $other __typename subErrors { __typename - buildExprPath ... on GenericSolveError { message isTransient diff --git a/pkg/platform/api/buildplanner/request/revertcommit.go b/pkg/platform/api/buildplanner/request/revertcommit.go index 30aff4dc07..9c88b8e399 100644 --- a/pkg/platform/api/buildplanner/request/revertcommit.go +++ b/pkg/platform/api/buildplanner/request/revertcommit.go @@ -43,7 +43,6 @@ mutation ($organization: String!, $project: String!, $commitId: String!, $target __typename subErrors { __typename - buildExprPath ... on GenericSolveError { message isTransient diff --git a/pkg/platform/api/buildplanner/request/stagecommit.go b/pkg/platform/api/buildplanner/request/stagecommit.go index e58a218966..b1ec1166e6 100644 --- a/pkg/platform/api/buildplanner/request/stagecommit.go +++ b/pkg/platform/api/buildplanner/request/stagecommit.go @@ -166,7 +166,6 @@ mutation ($organization: String!, $project: String!, $parentCommit: ID!, $descri __typename subErrors { __typename - buildExprPath ... on GenericSolveError { message isTransient @@ -196,7 +195,6 @@ mutation ($organization: String!, $project: String!, $parentCommit: ID!, $descri __typename subErrors { __typename - buildExprPath ... on GenericSolveError { message isTransient diff --git a/pkg/platform/api/buildplanner/response/shared.go b/pkg/platform/api/buildplanner/response/shared.go index 3b54830c32..b714d06b4a 100644 --- a/pkg/platform/api/buildplanner/response/shared.go +++ b/pkg/platform/api/buildplanner/response/shared.go @@ -104,13 +104,10 @@ type ErrorWithSubErrors struct { // BuildExprError represents a location in the build script where an error occurred. type BuildExprError struct { - Type string `json:"__typename"` - Message string `json:"message"` - BuildExprPath []string `json:"buildExprPath"` + Type string `json:"__typename"` + Message string `json:"message"` *TargetNotFoundError - *RemediableError *GenericSolveError - *RemediableSolveError } type TargetNotFoundError struct { diff --git a/pkg/platform/api/buildplanner/response/solveerror.go b/pkg/platform/api/buildplanner/response/solveerror.go index 09543a9a53..d662d8d1fa 100644 --- a/pkg/platform/api/buildplanner/response/solveerror.go +++ b/pkg/platform/api/buildplanner/response/solveerror.go @@ -1,12 +1,5 @@ package response -import "github.com/ActiveState/cli/pkg/platform/api/buildplanner/types" - -// RemediableSolveError represents a solver error that can be remediated. -type RemediableError struct { - Remediations []*SolverErrorRemediation `json:"possibleRemediations"` -} - type GenericSolveError struct { IsTransient bool `json:"isTransient"` ValidationErrors []*SolverErrorValidationError `json:"validationErrors"` @@ -17,43 +10,3 @@ type SolverErrorValidationError struct { JSONPath string `json:"jsonPath"` Error string `json:"error"` } - -// SolverErrorRemediation contains the recommeneded remediation for remediable error. -type SolverErrorRemediation struct { - Description string `json:"description"` - SuggestedPriority string `json:"suggestedPriority"` -} - -type RemediableSolveError struct { - ErrorType string `json:"errorType"` - Incompatibilities []*SolveErrorIncompatibility `json:"incompatibilities"` - Requirements []*types.Requirement `json:"requirements"` - SuggestedRemediations []*SolverErrorRemediation `json:"suggestedRemediations"` -} - -// SolverErrorIncompatibility represents a solver incompatibility error. -type SolveErrorIncompatibility struct { - Type string `json:"type"` - *SolveErrorPackageIncompatibility - *SolveErrorPlatformIncompatibility -} - -// SolveErrorPackageIncompatibility represents a package incompatibility error. -type SolveErrorPackageIncompatibility struct { - Type string `json:"type"` - Feature string `json:"feature"` - Namespace string `json:"namespace"` -} - -// SolveErrorPlatformIncompatibility represents a platform incompatibility error. -type SolveErrorPlatformIncompatibility struct { - Type string `json:"type"` - PlatformID string `json:"platformID"` - PlatformKernel string `json:"platformKernel"` -} - -const ( - SolveErrorIncompatibilityTypeDependency = "DEPENDENCY" - SolveErrorIncompatibilityTypePlatform = "PLATFORM" - SolveErrorIncompatibilityTypeRequirement = "REQUIREMENT" -) From 84b42c223a47666c79fd3d1996e9bdabd53710fa Mon Sep 17 00:00:00 2001 From: mdrakos Date: Tue, 19 Nov 2024 13:28:04 -0800 Subject: [PATCH 058/336] Add date recognition to messages --- cmd/state-svc/internal/messages/messages.go | 44 +- .../internal/messages/messages_test.go | 132 ++- .../internal/server/generated/generated.go | 876 ++++++++++++++---- cmd/state-svc/schema/schema.graphqls | 2 + internal/graph/generated.go | 2 + test/integration/msg_int_test.go | 108 ++- 6 files changed, 963 insertions(+), 201 deletions(-) diff --git a/cmd/state-svc/internal/messages/messages.go b/cmd/state-svc/internal/messages/messages.go index 1495a8a1b2..1717053654 100644 --- a/cmd/state-svc/internal/messages/messages.go +++ b/cmd/state-svc/internal/messages/messages.go @@ -44,7 +44,7 @@ func New(cfg *config.Instance, auth *auth.Auth) (*Messages, error) { return nil, errs.Wrap(err, "Could not parse state version") } - poll := poller.New(1*time.Hour, func() (interface{}, error) { + poll := poller.New(10*time.Minute, func() (interface{}, error) { defer func() { panics.LogAndPanic(recover(), debug.Stack()) }() @@ -112,11 +112,39 @@ func (m *Messages) Check(command string, flags []string) ([]*graph.MessageInfo, return msgs, nil } +func messageInDateRange(message *graph.MessageInfo, baseTime time.Time) (bool, error) { + logging.Debug("Checking message %s in date range with base time %s", message.ID, baseTime.Format(time.RFC3339)) + if message.StartDate != "" { + startDate, err := time.Parse(time.RFC3339, message.StartDate) + if err != nil { + return false, errs.Wrap(err, "Could not parse start date for message %s", message.ID) + } + if baseTime.Before(startDate) { + logging.Debug("Skipping message %s as it is before start date %s", message.ID, startDate.Format(time.RFC3339)) + return false, nil + } + } + + if message.EndDate != "" { + endDate, err := time.Parse(time.RFC3339, message.EndDate) + if err != nil { + return false, errs.Wrap(err, "Could not parse end date for message %s", message.ID) + } + if baseTime.After(endDate) { + logging.Debug("Skipping message %s as it is after end date %s", message.ID, endDate.Format(time.RFC3339)) + return false, nil + } + } + + return true, nil +} + func check(params *ConditionParams, messages []*graph.MessageInfo, lastReportMap map[string]interface{}, baseTime time.Time) ([]*graph.MessageInfo, error) { funcMap := conditionFuncMap() filteredMessages := []*graph.MessageInfo{} for _, message := range messages { logging.Debug("Checking message %s", message.ID) + // Ensure we don't show the same message too often if lastReport, ok := lastReportMap[message.ID]; ok { lr, ok := lastReport.(string) @@ -140,11 +168,23 @@ func check(params *ConditionParams, messages []*graph.MessageInfo, lastReportMap } } + // Check if message is within date range + inRange, err := messageInDateRange(message, baseTime) + if err != nil { + logging.Warning("Could not check if message %s is in date range: %v", message.ID, err) + continue + } + if !inRange { + logging.Debug("Skipping message %s as it is outside of its date range", message.ID) + continue + } + // Validate the conditional if message.Condition != "" { result, err := strutils.ParseTemplate(fmt.Sprintf(`{{%s}}`, message.Condition), params, funcMap) if err != nil { - return nil, errs.Wrap(err, "Could not parse condition template for message %s", message.ID) + logging.Warning("Could not parse condition template for message %s: %v", message.ID, err) + continue } if result == "true" { logging.Debug("Including message %s as condition %s evaluated to %s", message.ID, message.Condition, result) diff --git a/cmd/state-svc/internal/messages/messages_test.go b/cmd/state-svc/internal/messages/messages_test.go index ffaf24f92a..186bc6719e 100644 --- a/cmd/state-svc/internal/messages/messages_test.go +++ b/cmd/state-svc/internal/messages/messages_test.go @@ -11,6 +11,7 @@ import ( ) func Test_check(t *testing.T) { + baseTime := time.Now() type args struct { params *ConditionParams messages []*graph.MessageInfo @@ -31,7 +32,7 @@ func Test_check(t *testing.T) { {ID: "A"}, {ID: "B"}, {ID: "C"}, }, lastReportMap: map[string]interface{}{}, - baseTime: time.Now(), + baseTime: baseTime, }, []string{"A", "B", "C"}, false, @@ -48,7 +49,7 @@ func Test_check(t *testing.T) { {ID: "C", Condition: `eq .Command "foobar"`}, }, lastReportMap: map[string]interface{}{}, - baseTime: time.Now(), + baseTime: baseTime, }, []string{"B"}, false, @@ -64,7 +65,7 @@ func Test_check(t *testing.T) { {ID: "B", Condition: `contains .UserEmail "fred"`}, }, lastReportMap: map[string]interface{}{}, - baseTime: time.Now(), + baseTime: baseTime, }, []string{"A"}, false, @@ -80,7 +81,7 @@ func Test_check(t *testing.T) { {ID: "B", Condition: `hasPrefix .UserEmail "org"`}, }, lastReportMap: map[string]interface{}{}, - baseTime: time.Now(), + baseTime: baseTime, }, []string{"A"}, false, @@ -96,7 +97,7 @@ func Test_check(t *testing.T) { {ID: "B", Condition: `hasSuffix .UserEmail "org"`}, }, lastReportMap: map[string]interface{}{}, - baseTime: time.Now(), + baseTime: baseTime, }, []string{"B"}, false, @@ -112,7 +113,7 @@ func Test_check(t *testing.T) { {ID: "B", Condition: `regexMatch .UserEmail "^doe.org$"`}, }, lastReportMap: map[string]interface{}{}, - baseTime: time.Now(), + baseTime: baseTime, }, []string{"A"}, false, @@ -128,7 +129,7 @@ func Test_check(t *testing.T) { {ID: "B", Condition: `regexMatch .UserEmail ".*("`}, }, lastReportMap: map[string]interface{}{}, - baseTime: time.Now(), + baseTime: baseTime, }, []string{"A"}, false, @@ -150,7 +151,7 @@ func Test_check(t *testing.T) { {ID: "H", Condition: `eq .StateVersion.Build "foo"`}, }, lastReportMap: map[string]interface{}{}, - baseTime: time.Now(), + baseTime: baseTime, }, []string{"A", "B", "C", "D"}, false, @@ -165,10 +166,10 @@ func Test_check(t *testing.T) { {ID: "C", Repeat: graph.MessageRepeatTypeDisabled}, }, lastReportMap: map[string]interface{}{ - "A": time.Now(), - "C": time.Now(), + "A": baseTime.Format(time.RFC3339), + "C": baseTime.Format(time.RFC3339), }, - baseTime: time.Now(), + baseTime: baseTime, }, []string{"B"}, false, @@ -183,10 +184,10 @@ func Test_check(t *testing.T) { {ID: "C", Repeat: graph.MessageRepeatTypeConstantly}, }, lastReportMap: map[string]interface{}{ - "A": time.Now(), - "C": time.Now().Add(-time.Hour * 24 * 30), + "A": baseTime.Format(time.RFC3339), + "C": baseTime.Add(-time.Hour * 24 * 30).Format(time.RFC3339), }, - baseTime: time.Now(), + baseTime: baseTime, }, []string{"A", "B", "C"}, false, @@ -201,11 +202,11 @@ func Test_check(t *testing.T) { {ID: "C", Repeat: graph.MessageRepeatTypeHourly}, }, lastReportMap: map[string]interface{}{ - "A": time.Now(), - "B": time.Now().Add(-time.Hour), - "C": time.Now(), + "A": baseTime.Format(time.RFC3339), + "B": baseTime.Add(-time.Hour).Format(time.RFC3339), + "C": baseTime.Format(time.RFC3339), }, - baseTime: time.Now(), + baseTime: baseTime, }, []string{"B"}, false, @@ -220,11 +221,11 @@ func Test_check(t *testing.T) { {ID: "C", Repeat: graph.MessageRepeatTypeHourly}, }, lastReportMap: map[string]interface{}{ - "A": time.Now(), - "B": time.Now().Add(-time.Hour * 24), - "C": time.Now(), + "A": baseTime.Format(time.RFC3339), + "B": baseTime.Add(-time.Hour * 24).Format(time.RFC3339), + "C": baseTime.Format(time.RFC3339), }, - baseTime: time.Now(), + baseTime: baseTime, }, []string{"B"}, false, @@ -239,11 +240,11 @@ func Test_check(t *testing.T) { {ID: "C", Repeat: graph.MessageRepeatTypeHourly}, }, lastReportMap: map[string]interface{}{ - "A": time.Now(), - "B": time.Now().Add(-time.Hour * 24 * 7), - "C": time.Now(), + "A": baseTime.Format(time.RFC3339), + "B": baseTime.Add(-time.Hour * 24 * 7).Format(time.RFC3339), + "C": baseTime.Format(time.RFC3339), }, - baseTime: time.Now(), + baseTime: baseTime, }, []string{"B"}, false, @@ -258,15 +259,86 @@ func Test_check(t *testing.T) { {ID: "C", Repeat: graph.MessageRepeatTypeHourly}, }, lastReportMap: map[string]interface{}{ - "A": time.Now(), - "B": time.Now().Add(-time.Hour * 24 * 7 * 30), - "C": time.Now(), + "A": baseTime.Format(time.RFC3339), + "B": baseTime.Add(-time.Hour * 24 * 7 * 30).Format(time.RFC3339), + "C": baseTime.Format(time.RFC3339), }, - baseTime: time.Now(), + baseTime: baseTime, }, []string{"B"}, false, }, + { + "Date Range - Within Range", + args{ + params: &ConditionParams{}, + messages: []*graph.MessageInfo{ + {ID: "A", StartDate: baseTime.Add(-24 * time.Hour).Format(time.RFC3339), EndDate: baseTime.Add(24 * time.Hour).Format(time.RFC3339)}, + {ID: "B", StartDate: baseTime.Add(-1 * time.Hour).Format(time.RFC3339), EndDate: baseTime.Add(1 * time.Hour).Format(time.RFC3339)}, + {ID: "C", StartDate: baseTime.Add(1 * time.Hour).Format(time.RFC3339), EndDate: baseTime.Add(24 * time.Hour).Format(time.RFC3339)}, + }, + lastReportMap: map[string]interface{}{}, + baseTime: baseTime, + }, + []string{"A", "B"}, + false, + }, + { + "Date Range - No Dates Specified", + args{ + params: &ConditionParams{}, + messages: []*graph.MessageInfo{ + {ID: "A"}, + {ID: "B", StartDate: baseTime.Add(-1 * time.Hour).Format(time.RFC3339)}, + {ID: "C", EndDate: baseTime.Add(1 * time.Hour).Format(time.RFC3339)}, + }, + lastReportMap: map[string]interface{}{}, + baseTime: baseTime, + }, + []string{"A", "B", "C"}, + false, + }, + { + "Date Range - Invalid Date Format", + args{ + params: &ConditionParams{}, + messages: []*graph.MessageInfo{ + {ID: "A", StartDate: "invalid-date"}, + }, + lastReportMap: map[string]interface{}{}, + baseTime: baseTime, + }, + []string{}, + true, + }, + { + "Date Range - Only Start Date", + args{ + params: &ConditionParams{}, + messages: []*graph.MessageInfo{ + {ID: "A", StartDate: baseTime.Add(-1 * time.Hour).Format(time.RFC3339)}, + {ID: "B", StartDate: baseTime.Add(1 * time.Hour).Format(time.RFC3339)}, + }, + lastReportMap: map[string]interface{}{}, + baseTime: baseTime, + }, + []string{"A"}, + false, + }, + { + "Date Range - Only End Date", + args{ + params: &ConditionParams{}, + messages: []*graph.MessageInfo{ + {ID: "A", EndDate: baseTime.Add(1 * time.Hour).Format(time.RFC3339)}, + {ID: "B", EndDate: baseTime.Add(-1 * time.Hour).Format(time.RFC3339)}, + }, + lastReportMap: map[string]interface{}{}, + baseTime: baseTime, + }, + []string{"A"}, + false, + }, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { diff --git a/cmd/state-svc/internal/server/generated/generated.go b/cmd/state-svc/internal/server/generated/generated.go index 16617b4d7b..cfb794c9ee 100644 --- a/cmd/state-svc/internal/server/generated/generated.go +++ b/cmd/state-svc/internal/server/generated/generated.go @@ -81,11 +81,13 @@ type ComplexityRoot struct { MessageInfo struct { Condition func(childComplexity int) int + EndDate func(childComplexity int) int ID func(childComplexity int) int Interrupt func(childComplexity int) int Message func(childComplexity int) int Placement func(childComplexity int) int Repeat func(childComplexity int) int + StartDate func(childComplexity int) int } Mutation struct { @@ -288,6 +290,13 @@ func (e *executableSchema) Complexity(typeName, field string, childComplexity in return e.complexity.MessageInfo.Condition(childComplexity), true + case "MessageInfo.endDate": + if e.complexity.MessageInfo.EndDate == nil { + break + } + + return e.complexity.MessageInfo.EndDate(childComplexity), true + case "MessageInfo.id": if e.complexity.MessageInfo.ID == nil { break @@ -323,6 +332,13 @@ func (e *executableSchema) Complexity(typeName, field string, childComplexity in return e.complexity.MessageInfo.Repeat(childComplexity), true + case "MessageInfo.startDate": + if e.complexity.MessageInfo.StartDate == nil { + break + } + + return e.complexity.MessageInfo.StartDate(childComplexity), true + case "Mutation.setCache": if e.complexity.Mutation.SetCache == nil { break @@ -739,6 +755,8 @@ type MessageInfo { id: String! message: String! condition: String! + startDate: String! + endDate: String! repeat: MessageRepeatType! interrupt: MessageInterruptType! placement: MessagePlacementType! @@ -812,290 +830,710 @@ var parsedSchema = gqlparser.MustLoadSchema(sources...) func (ec *executionContext) field_Mutation_setCache_args(ctx context.Context, rawArgs map[string]interface{}) (map[string]interface{}, error) { var err error args := map[string]interface{}{} - var arg0 string - if tmp, ok := rawArgs["key"]; ok { - ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("key")) - arg0, err = ec.unmarshalNString2string(ctx, tmp) - if err != nil { - return nil, err - } + arg0, err := ec.field_Mutation_setCache_argsKey(ctx, rawArgs) + if err != nil { + return nil, err } args["key"] = arg0 - var arg1 string - if tmp, ok := rawArgs["value"]; ok { - ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("value")) - arg1, err = ec.unmarshalNString2string(ctx, tmp) - if err != nil { - return nil, err - } + arg1, err := ec.field_Mutation_setCache_argsValue(ctx, rawArgs) + if err != nil { + return nil, err } args["value"] = arg1 - var arg2 int - if tmp, ok := rawArgs["expiry"]; ok { - ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("expiry")) - arg2, err = ec.unmarshalNInt2int(ctx, tmp) - if err != nil { - return nil, err - } + arg2, err := ec.field_Mutation_setCache_argsExpiry(ctx, rawArgs) + if err != nil { + return nil, err } args["expiry"] = arg2 return args, nil } +func (ec *executionContext) field_Mutation_setCache_argsKey( + ctx context.Context, + rawArgs map[string]interface{}, +) (string, error) { + // We won't call the directive if the argument is null. + // Set call_argument_directives_with_null to true to call directives + // even if the argument is null. + _, ok := rawArgs["key"] + if !ok { + var zeroVal string + return zeroVal, nil + } + + ctx = graphql.WithPathContext(ctx, graphql.NewPathWithField("key")) + if tmp, ok := rawArgs["key"]; ok { + return ec.unmarshalNString2string(ctx, tmp) + } + + var zeroVal string + return zeroVal, nil +} + +func (ec *executionContext) field_Mutation_setCache_argsValue( + ctx context.Context, + rawArgs map[string]interface{}, +) (string, error) { + // We won't call the directive if the argument is null. + // Set call_argument_directives_with_null to true to call directives + // even if the argument is null. + _, ok := rawArgs["value"] + if !ok { + var zeroVal string + return zeroVal, nil + } + + ctx = graphql.WithPathContext(ctx, graphql.NewPathWithField("value")) + if tmp, ok := rawArgs["value"]; ok { + return ec.unmarshalNString2string(ctx, tmp) + } + + var zeroVal string + return zeroVal, nil +} + +func (ec *executionContext) field_Mutation_setCache_argsExpiry( + ctx context.Context, + rawArgs map[string]interface{}, +) (int, error) { + // We won't call the directive if the argument is null. + // Set call_argument_directives_with_null to true to call directives + // even if the argument is null. + _, ok := rawArgs["expiry"] + if !ok { + var zeroVal int + return zeroVal, nil + } + + ctx = graphql.WithPathContext(ctx, graphql.NewPathWithField("expiry")) + if tmp, ok := rawArgs["expiry"]; ok { + return ec.unmarshalNInt2int(ctx, tmp) + } + + var zeroVal int + return zeroVal, nil +} func (ec *executionContext) field_Query___type_args(ctx context.Context, rawArgs map[string]interface{}) (map[string]interface{}, error) { var err error args := map[string]interface{}{} - var arg0 string - if tmp, ok := rawArgs["name"]; ok { - ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("name")) - arg0, err = ec.unmarshalNString2string(ctx, tmp) - if err != nil { - return nil, err - } + arg0, err := ec.field_Query___type_argsName(ctx, rawArgs) + if err != nil { + return nil, err } args["name"] = arg0 return args, nil } +func (ec *executionContext) field_Query___type_argsName( + ctx context.Context, + rawArgs map[string]interface{}, +) (string, error) { + // We won't call the directive if the argument is null. + // Set call_argument_directives_with_null to true to call directives + // even if the argument is null. + _, ok := rawArgs["name"] + if !ok { + var zeroVal string + return zeroVal, nil + } + + ctx = graphql.WithPathContext(ctx, graphql.NewPathWithField("name")) + if tmp, ok := rawArgs["name"]; ok { + return ec.unmarshalNString2string(ctx, tmp) + } + + var zeroVal string + return zeroVal, nil +} func (ec *executionContext) field_Query_analyticsEvent_args(ctx context.Context, rawArgs map[string]interface{}) (map[string]interface{}, error) { var err error args := map[string]interface{}{} - var arg0 string - if tmp, ok := rawArgs["category"]; ok { - ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("category")) - arg0, err = ec.unmarshalNString2string(ctx, tmp) - if err != nil { - return nil, err - } + arg0, err := ec.field_Query_analyticsEvent_argsCategory(ctx, rawArgs) + if err != nil { + return nil, err } args["category"] = arg0 - var arg1 string - if tmp, ok := rawArgs["action"]; ok { - ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("action")) - arg1, err = ec.unmarshalNString2string(ctx, tmp) - if err != nil { - return nil, err - } + arg1, err := ec.field_Query_analyticsEvent_argsAction(ctx, rawArgs) + if err != nil { + return nil, err } args["action"] = arg1 - var arg2 string - if tmp, ok := rawArgs["source"]; ok { - ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("source")) - arg2, err = ec.unmarshalNString2string(ctx, tmp) - if err != nil { - return nil, err - } + arg2, err := ec.field_Query_analyticsEvent_argsSource(ctx, rawArgs) + if err != nil { + return nil, err } args["source"] = arg2 - var arg3 *string - if tmp, ok := rawArgs["label"]; ok { - ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("label")) - arg3, err = ec.unmarshalOString2ᚖstring(ctx, tmp) - if err != nil { - return nil, err - } + arg3, err := ec.field_Query_analyticsEvent_argsLabel(ctx, rawArgs) + if err != nil { + return nil, err } args["label"] = arg3 - var arg4 string - if tmp, ok := rawArgs["dimensionsJson"]; ok { - ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("dimensionsJson")) - arg4, err = ec.unmarshalNString2string(ctx, tmp) - if err != nil { - return nil, err - } + arg4, err := ec.field_Query_analyticsEvent_argsDimensionsJSON(ctx, rawArgs) + if err != nil { + return nil, err } args["dimensionsJson"] = arg4 return args, nil } +func (ec *executionContext) field_Query_analyticsEvent_argsCategory( + ctx context.Context, + rawArgs map[string]interface{}, +) (string, error) { + // We won't call the directive if the argument is null. + // Set call_argument_directives_with_null to true to call directives + // even if the argument is null. + _, ok := rawArgs["category"] + if !ok { + var zeroVal string + return zeroVal, nil + } + + ctx = graphql.WithPathContext(ctx, graphql.NewPathWithField("category")) + if tmp, ok := rawArgs["category"]; ok { + return ec.unmarshalNString2string(ctx, tmp) + } + + var zeroVal string + return zeroVal, nil +} + +func (ec *executionContext) field_Query_analyticsEvent_argsAction( + ctx context.Context, + rawArgs map[string]interface{}, +) (string, error) { + // We won't call the directive if the argument is null. + // Set call_argument_directives_with_null to true to call directives + // even if the argument is null. + _, ok := rawArgs["action"] + if !ok { + var zeroVal string + return zeroVal, nil + } + + ctx = graphql.WithPathContext(ctx, graphql.NewPathWithField("action")) + if tmp, ok := rawArgs["action"]; ok { + return ec.unmarshalNString2string(ctx, tmp) + } + + var zeroVal string + return zeroVal, nil +} + +func (ec *executionContext) field_Query_analyticsEvent_argsSource( + ctx context.Context, + rawArgs map[string]interface{}, +) (string, error) { + // We won't call the directive if the argument is null. + // Set call_argument_directives_with_null to true to call directives + // even if the argument is null. + _, ok := rawArgs["source"] + if !ok { + var zeroVal string + return zeroVal, nil + } + + ctx = graphql.WithPathContext(ctx, graphql.NewPathWithField("source")) + if tmp, ok := rawArgs["source"]; ok { + return ec.unmarshalNString2string(ctx, tmp) + } + + var zeroVal string + return zeroVal, nil +} + +func (ec *executionContext) field_Query_analyticsEvent_argsLabel( + ctx context.Context, + rawArgs map[string]interface{}, +) (*string, error) { + // We won't call the directive if the argument is null. + // Set call_argument_directives_with_null to true to call directives + // even if the argument is null. + _, ok := rawArgs["label"] + if !ok { + var zeroVal *string + return zeroVal, nil + } + + ctx = graphql.WithPathContext(ctx, graphql.NewPathWithField("label")) + if tmp, ok := rawArgs["label"]; ok { + return ec.unmarshalOString2ᚖstring(ctx, tmp) + } + + var zeroVal *string + return zeroVal, nil +} + +func (ec *executionContext) field_Query_analyticsEvent_argsDimensionsJSON( + ctx context.Context, + rawArgs map[string]interface{}, +) (string, error) { + // We won't call the directive if the argument is null. + // Set call_argument_directives_with_null to true to call directives + // even if the argument is null. + _, ok := rawArgs["dimensionsJson"] + if !ok { + var zeroVal string + return zeroVal, nil + } + + ctx = graphql.WithPathContext(ctx, graphql.NewPathWithField("dimensionsJson")) + if tmp, ok := rawArgs["dimensionsJson"]; ok { + return ec.unmarshalNString2string(ctx, tmp) + } + + var zeroVal string + return zeroVal, nil +} func (ec *executionContext) field_Query_availableUpdate_args(ctx context.Context, rawArgs map[string]interface{}) (map[string]interface{}, error) { var err error args := map[string]interface{}{} - var arg0 string - if tmp, ok := rawArgs["desiredChannel"]; ok { - ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("desiredChannel")) - arg0, err = ec.unmarshalNString2string(ctx, tmp) - if err != nil { - return nil, err - } + arg0, err := ec.field_Query_availableUpdate_argsDesiredChannel(ctx, rawArgs) + if err != nil { + return nil, err } args["desiredChannel"] = arg0 - var arg1 string - if tmp, ok := rawArgs["desiredVersion"]; ok { - ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("desiredVersion")) - arg1, err = ec.unmarshalNString2string(ctx, tmp) - if err != nil { - return nil, err - } + arg1, err := ec.field_Query_availableUpdate_argsDesiredVersion(ctx, rawArgs) + if err != nil { + return nil, err } args["desiredVersion"] = arg1 return args, nil } +func (ec *executionContext) field_Query_availableUpdate_argsDesiredChannel( + ctx context.Context, + rawArgs map[string]interface{}, +) (string, error) { + // We won't call the directive if the argument is null. + // Set call_argument_directives_with_null to true to call directives + // even if the argument is null. + _, ok := rawArgs["desiredChannel"] + if !ok { + var zeroVal string + return zeroVal, nil + } + + ctx = graphql.WithPathContext(ctx, graphql.NewPathWithField("desiredChannel")) + if tmp, ok := rawArgs["desiredChannel"]; ok { + return ec.unmarshalNString2string(ctx, tmp) + } + + var zeroVal string + return zeroVal, nil +} + +func (ec *executionContext) field_Query_availableUpdate_argsDesiredVersion( + ctx context.Context, + rawArgs map[string]interface{}, +) (string, error) { + // We won't call the directive if the argument is null. + // Set call_argument_directives_with_null to true to call directives + // even if the argument is null. + _, ok := rawArgs["desiredVersion"] + if !ok { + var zeroVal string + return zeroVal, nil + } + + ctx = graphql.WithPathContext(ctx, graphql.NewPathWithField("desiredVersion")) + if tmp, ok := rawArgs["desiredVersion"]; ok { + return ec.unmarshalNString2string(ctx, tmp) + } + + var zeroVal string + return zeroVal, nil +} func (ec *executionContext) field_Query_checkMessages_args(ctx context.Context, rawArgs map[string]interface{}) (map[string]interface{}, error) { var err error args := map[string]interface{}{} - var arg0 string - if tmp, ok := rawArgs["command"]; ok { - ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("command")) - arg0, err = ec.unmarshalNString2string(ctx, tmp) - if err != nil { - return nil, err - } + arg0, err := ec.field_Query_checkMessages_argsCommand(ctx, rawArgs) + if err != nil { + return nil, err } args["command"] = arg0 - var arg1 []string - if tmp, ok := rawArgs["flags"]; ok { - ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("flags")) - arg1, err = ec.unmarshalNString2ᚕstringᚄ(ctx, tmp) - if err != nil { - return nil, err - } + arg1, err := ec.field_Query_checkMessages_argsFlags(ctx, rawArgs) + if err != nil { + return nil, err } args["flags"] = arg1 return args, nil } +func (ec *executionContext) field_Query_checkMessages_argsCommand( + ctx context.Context, + rawArgs map[string]interface{}, +) (string, error) { + // We won't call the directive if the argument is null. + // Set call_argument_directives_with_null to true to call directives + // even if the argument is null. + _, ok := rawArgs["command"] + if !ok { + var zeroVal string + return zeroVal, nil + } + + ctx = graphql.WithPathContext(ctx, graphql.NewPathWithField("command")) + if tmp, ok := rawArgs["command"]; ok { + return ec.unmarshalNString2string(ctx, tmp) + } + + var zeroVal string + return zeroVal, nil +} + +func (ec *executionContext) field_Query_checkMessages_argsFlags( + ctx context.Context, + rawArgs map[string]interface{}, +) ([]string, error) { + // We won't call the directive if the argument is null. + // Set call_argument_directives_with_null to true to call directives + // even if the argument is null. + _, ok := rawArgs["flags"] + if !ok { + var zeroVal []string + return zeroVal, nil + } + + ctx = graphql.WithPathContext(ctx, graphql.NewPathWithField("flags")) + if tmp, ok := rawArgs["flags"]; ok { + return ec.unmarshalNString2ᚕstringᚄ(ctx, tmp) + } + + var zeroVal []string + return zeroVal, nil +} func (ec *executionContext) field_Query_configChanged_args(ctx context.Context, rawArgs map[string]interface{}) (map[string]interface{}, error) { var err error args := map[string]interface{}{} - var arg0 string - if tmp, ok := rawArgs["key"]; ok { - ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("key")) - arg0, err = ec.unmarshalNString2string(ctx, tmp) - if err != nil { - return nil, err - } + arg0, err := ec.field_Query_configChanged_argsKey(ctx, rawArgs) + if err != nil { + return nil, err } args["key"] = arg0 return args, nil } +func (ec *executionContext) field_Query_configChanged_argsKey( + ctx context.Context, + rawArgs map[string]interface{}, +) (string, error) { + // We won't call the directive if the argument is null. + // Set call_argument_directives_with_null to true to call directives + // even if the argument is null. + _, ok := rawArgs["key"] + if !ok { + var zeroVal string + return zeroVal, nil + } + + ctx = graphql.WithPathContext(ctx, graphql.NewPathWithField("key")) + if tmp, ok := rawArgs["key"]; ok { + return ec.unmarshalNString2string(ctx, tmp) + } + + var zeroVal string + return zeroVal, nil +} func (ec *executionContext) field_Query_getCache_args(ctx context.Context, rawArgs map[string]interface{}) (map[string]interface{}, error) { var err error args := map[string]interface{}{} - var arg0 string - if tmp, ok := rawArgs["key"]; ok { - ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("key")) - arg0, err = ec.unmarshalNString2string(ctx, tmp) - if err != nil { - return nil, err - } + arg0, err := ec.field_Query_getCache_argsKey(ctx, rawArgs) + if err != nil { + return nil, err } args["key"] = arg0 return args, nil } +func (ec *executionContext) field_Query_getCache_argsKey( + ctx context.Context, + rawArgs map[string]interface{}, +) (string, error) { + // We won't call the directive if the argument is null. + // Set call_argument_directives_with_null to true to call directives + // even if the argument is null. + _, ok := rawArgs["key"] + if !ok { + var zeroVal string + return zeroVal, nil + } + + ctx = graphql.WithPathContext(ctx, graphql.NewPathWithField("key")) + if tmp, ok := rawArgs["key"]; ok { + return ec.unmarshalNString2string(ctx, tmp) + } + + var zeroVal string + return zeroVal, nil +} func (ec *executionContext) field_Query_getProcessesInUse_args(ctx context.Context, rawArgs map[string]interface{}) (map[string]interface{}, error) { var err error args := map[string]interface{}{} - var arg0 string - if tmp, ok := rawArgs["execDir"]; ok { - ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("execDir")) - arg0, err = ec.unmarshalNString2string(ctx, tmp) - if err != nil { - return nil, err - } + arg0, err := ec.field_Query_getProcessesInUse_argsExecDir(ctx, rawArgs) + if err != nil { + return nil, err } args["execDir"] = arg0 return args, nil } +func (ec *executionContext) field_Query_getProcessesInUse_argsExecDir( + ctx context.Context, + rawArgs map[string]interface{}, +) (string, error) { + // We won't call the directive if the argument is null. + // Set call_argument_directives_with_null to true to call directives + // even if the argument is null. + _, ok := rawArgs["execDir"] + if !ok { + var zeroVal string + return zeroVal, nil + } + + ctx = graphql.WithPathContext(ctx, graphql.NewPathWithField("execDir")) + if tmp, ok := rawArgs["execDir"]; ok { + return ec.unmarshalNString2string(ctx, tmp) + } + + var zeroVal string + return zeroVal, nil +} func (ec *executionContext) field_Query_hashGlobs_args(ctx context.Context, rawArgs map[string]interface{}) (map[string]interface{}, error) { var err error args := map[string]interface{}{} - var arg0 string - if tmp, ok := rawArgs["wd"]; ok { - ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("wd")) - arg0, err = ec.unmarshalNString2string(ctx, tmp) - if err != nil { - return nil, err - } + arg0, err := ec.field_Query_hashGlobs_argsWd(ctx, rawArgs) + if err != nil { + return nil, err } args["wd"] = arg0 - var arg1 []string - if tmp, ok := rawArgs["globs"]; ok { - ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("globs")) - arg1, err = ec.unmarshalNString2ᚕstringᚄ(ctx, tmp) - if err != nil { - return nil, err - } + arg1, err := ec.field_Query_hashGlobs_argsGlobs(ctx, rawArgs) + if err != nil { + return nil, err } args["globs"] = arg1 return args, nil } +func (ec *executionContext) field_Query_hashGlobs_argsWd( + ctx context.Context, + rawArgs map[string]interface{}, +) (string, error) { + // We won't call the directive if the argument is null. + // Set call_argument_directives_with_null to true to call directives + // even if the argument is null. + _, ok := rawArgs["wd"] + if !ok { + var zeroVal string + return zeroVal, nil + } + + ctx = graphql.WithPathContext(ctx, graphql.NewPathWithField("wd")) + if tmp, ok := rawArgs["wd"]; ok { + return ec.unmarshalNString2string(ctx, tmp) + } + + var zeroVal string + return zeroVal, nil +} + +func (ec *executionContext) field_Query_hashGlobs_argsGlobs( + ctx context.Context, + rawArgs map[string]interface{}, +) ([]string, error) { + // We won't call the directive if the argument is null. + // Set call_argument_directives_with_null to true to call directives + // even if the argument is null. + _, ok := rawArgs["globs"] + if !ok { + var zeroVal []string + return zeroVal, nil + } + + ctx = graphql.WithPathContext(ctx, graphql.NewPathWithField("globs")) + if tmp, ok := rawArgs["globs"]; ok { + return ec.unmarshalNString2ᚕstringᚄ(ctx, tmp) + } + + var zeroVal []string + return zeroVal, nil +} func (ec *executionContext) field_Query_reportRuntimeUsage_args(ctx context.Context, rawArgs map[string]interface{}) (map[string]interface{}, error) { var err error args := map[string]interface{}{} - var arg0 int - if tmp, ok := rawArgs["pid"]; ok { - ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("pid")) - arg0, err = ec.unmarshalNInt2int(ctx, tmp) - if err != nil { - return nil, err - } + arg0, err := ec.field_Query_reportRuntimeUsage_argsPid(ctx, rawArgs) + if err != nil { + return nil, err } args["pid"] = arg0 - var arg1 string - if tmp, ok := rawArgs["exec"]; ok { - ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("exec")) - arg1, err = ec.unmarshalNString2string(ctx, tmp) - if err != nil { - return nil, err - } + arg1, err := ec.field_Query_reportRuntimeUsage_argsExec(ctx, rawArgs) + if err != nil { + return nil, err } args["exec"] = arg1 - var arg2 string - if tmp, ok := rawArgs["source"]; ok { - ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("source")) - arg2, err = ec.unmarshalNString2string(ctx, tmp) - if err != nil { - return nil, err - } + arg2, err := ec.field_Query_reportRuntimeUsage_argsSource(ctx, rawArgs) + if err != nil { + return nil, err } args["source"] = arg2 - var arg3 string - if tmp, ok := rawArgs["dimensionsJson"]; ok { - ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("dimensionsJson")) - arg3, err = ec.unmarshalNString2string(ctx, tmp) - if err != nil { - return nil, err - } + arg3, err := ec.field_Query_reportRuntimeUsage_argsDimensionsJSON(ctx, rawArgs) + if err != nil { + return nil, err } args["dimensionsJson"] = arg3 return args, nil } +func (ec *executionContext) field_Query_reportRuntimeUsage_argsPid( + ctx context.Context, + rawArgs map[string]interface{}, +) (int, error) { + // We won't call the directive if the argument is null. + // Set call_argument_directives_with_null to true to call directives + // even if the argument is null. + _, ok := rawArgs["pid"] + if !ok { + var zeroVal int + return zeroVal, nil + } + + ctx = graphql.WithPathContext(ctx, graphql.NewPathWithField("pid")) + if tmp, ok := rawArgs["pid"]; ok { + return ec.unmarshalNInt2int(ctx, tmp) + } + + var zeroVal int + return zeroVal, nil +} + +func (ec *executionContext) field_Query_reportRuntimeUsage_argsExec( + ctx context.Context, + rawArgs map[string]interface{}, +) (string, error) { + // We won't call the directive if the argument is null. + // Set call_argument_directives_with_null to true to call directives + // even if the argument is null. + _, ok := rawArgs["exec"] + if !ok { + var zeroVal string + return zeroVal, nil + } + + ctx = graphql.WithPathContext(ctx, graphql.NewPathWithField("exec")) + if tmp, ok := rawArgs["exec"]; ok { + return ec.unmarshalNString2string(ctx, tmp) + } + + var zeroVal string + return zeroVal, nil +} + +func (ec *executionContext) field_Query_reportRuntimeUsage_argsSource( + ctx context.Context, + rawArgs map[string]interface{}, +) (string, error) { + // We won't call the directive if the argument is null. + // Set call_argument_directives_with_null to true to call directives + // even if the argument is null. + _, ok := rawArgs["source"] + if !ok { + var zeroVal string + return zeroVal, nil + } + + ctx = graphql.WithPathContext(ctx, graphql.NewPathWithField("source")) + if tmp, ok := rawArgs["source"]; ok { + return ec.unmarshalNString2string(ctx, tmp) + } + + var zeroVal string + return zeroVal, nil +} + +func (ec *executionContext) field_Query_reportRuntimeUsage_argsDimensionsJSON( + ctx context.Context, + rawArgs map[string]interface{}, +) (string, error) { + // We won't call the directive if the argument is null. + // Set call_argument_directives_with_null to true to call directives + // even if the argument is null. + _, ok := rawArgs["dimensionsJson"] + if !ok { + var zeroVal string + return zeroVal, nil + } + + ctx = graphql.WithPathContext(ctx, graphql.NewPathWithField("dimensionsJson")) + if tmp, ok := rawArgs["dimensionsJson"]; ok { + return ec.unmarshalNString2string(ctx, tmp) + } + + var zeroVal string + return zeroVal, nil +} func (ec *executionContext) field___Type_enumValues_args(ctx context.Context, rawArgs map[string]interface{}) (map[string]interface{}, error) { var err error args := map[string]interface{}{} - var arg0 bool - if tmp, ok := rawArgs["includeDeprecated"]; ok { - ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("includeDeprecated")) - arg0, err = ec.unmarshalOBoolean2bool(ctx, tmp) - if err != nil { - return nil, err - } + arg0, err := ec.field___Type_enumValues_argsIncludeDeprecated(ctx, rawArgs) + if err != nil { + return nil, err } args["includeDeprecated"] = arg0 return args, nil } +func (ec *executionContext) field___Type_enumValues_argsIncludeDeprecated( + ctx context.Context, + rawArgs map[string]interface{}, +) (bool, error) { + // We won't call the directive if the argument is null. + // Set call_argument_directives_with_null to true to call directives + // even if the argument is null. + _, ok := rawArgs["includeDeprecated"] + if !ok { + var zeroVal bool + return zeroVal, nil + } + + ctx = graphql.WithPathContext(ctx, graphql.NewPathWithField("includeDeprecated")) + if tmp, ok := rawArgs["includeDeprecated"]; ok { + return ec.unmarshalOBoolean2bool(ctx, tmp) + } + + var zeroVal bool + return zeroVal, nil +} func (ec *executionContext) field___Type_fields_args(ctx context.Context, rawArgs map[string]interface{}) (map[string]interface{}, error) { var err error args := map[string]interface{}{} - var arg0 bool - if tmp, ok := rawArgs["includeDeprecated"]; ok { - ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("includeDeprecated")) - arg0, err = ec.unmarshalOBoolean2bool(ctx, tmp) - if err != nil { - return nil, err - } + arg0, err := ec.field___Type_fields_argsIncludeDeprecated(ctx, rawArgs) + if err != nil { + return nil, err } args["includeDeprecated"] = arg0 return args, nil } +func (ec *executionContext) field___Type_fields_argsIncludeDeprecated( + ctx context.Context, + rawArgs map[string]interface{}, +) (bool, error) { + // We won't call the directive if the argument is null. + // Set call_argument_directives_with_null to true to call directives + // even if the argument is null. + _, ok := rawArgs["includeDeprecated"] + if !ok { + var zeroVal bool + return zeroVal, nil + } + + ctx = graphql.WithPathContext(ctx, graphql.NewPathWithField("includeDeprecated")) + if tmp, ok := rawArgs["includeDeprecated"]; ok { + return ec.unmarshalOBoolean2bool(ctx, tmp) + } + + var zeroVal bool + return zeroVal, nil +} // endregion ***************************** args.gotpl ***************************** @@ -1871,6 +2309,94 @@ func (ec *executionContext) fieldContext_MessageInfo_condition(_ context.Context return fc, nil } +func (ec *executionContext) _MessageInfo_startDate(ctx context.Context, field graphql.CollectedField, obj *graph.MessageInfo) (ret graphql.Marshaler) { + fc, err := ec.fieldContext_MessageInfo_startDate(ctx, field) + if err != nil { + return graphql.Null + } + ctx = graphql.WithFieldContext(ctx, fc) + defer func() { + if r := recover(); r != nil { + ec.Error(ctx, ec.Recover(ctx, r)) + ret = graphql.Null + } + }() + resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) { + ctx = rctx // use context from middleware stack in children + return obj.StartDate, nil + }) + if err != nil { + ec.Error(ctx, err) + return graphql.Null + } + if resTmp == nil { + if !graphql.HasFieldError(ctx, fc) { + ec.Errorf(ctx, "must not be null") + } + return graphql.Null + } + res := resTmp.(string) + fc.Result = res + return ec.marshalNString2string(ctx, field.Selections, res) +} + +func (ec *executionContext) fieldContext_MessageInfo_startDate(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { + fc = &graphql.FieldContext{ + Object: "MessageInfo", + Field: field, + IsMethod: false, + IsResolver: false, + Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return nil, errors.New("field of type String does not have child fields") + }, + } + return fc, nil +} + +func (ec *executionContext) _MessageInfo_endDate(ctx context.Context, field graphql.CollectedField, obj *graph.MessageInfo) (ret graphql.Marshaler) { + fc, err := ec.fieldContext_MessageInfo_endDate(ctx, field) + if err != nil { + return graphql.Null + } + ctx = graphql.WithFieldContext(ctx, fc) + defer func() { + if r := recover(); r != nil { + ec.Error(ctx, ec.Recover(ctx, r)) + ret = graphql.Null + } + }() + resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) { + ctx = rctx // use context from middleware stack in children + return obj.EndDate, nil + }) + if err != nil { + ec.Error(ctx, err) + return graphql.Null + } + if resTmp == nil { + if !graphql.HasFieldError(ctx, fc) { + ec.Errorf(ctx, "must not be null") + } + return graphql.Null + } + res := resTmp.(string) + fc.Result = res + return ec.marshalNString2string(ctx, field.Selections, res) +} + +func (ec *executionContext) fieldContext_MessageInfo_endDate(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { + fc = &graphql.FieldContext{ + Object: "MessageInfo", + Field: field, + IsMethod: false, + IsResolver: false, + Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return nil, errors.New("field of type String does not have child fields") + }, + } + return fc, nil +} + func (ec *executionContext) _MessageInfo_repeat(ctx context.Context, field graphql.CollectedField, obj *graph.MessageInfo) (ret graphql.Marshaler) { fc, err := ec.fieldContext_MessageInfo_repeat(ctx, field) if err != nil { @@ -2635,6 +3161,10 @@ func (ec *executionContext) fieldContext_Query_checkMessages(ctx context.Context return ec.fieldContext_MessageInfo_message(ctx, field) case "condition": return ec.fieldContext_MessageInfo_condition(ctx, field) + case "startDate": + return ec.fieldContext_MessageInfo_startDate(ctx, field) + case "endDate": + return ec.fieldContext_MessageInfo_endDate(ctx, field) case "repeat": return ec.fieldContext_MessageInfo_repeat(ctx, field) case "interrupt": @@ -5695,6 +6225,16 @@ func (ec *executionContext) _MessageInfo(ctx context.Context, sel ast.SelectionS if out.Values[i] == graphql.Null { out.Invalids++ } + case "startDate": + out.Values[i] = ec._MessageInfo_startDate(ctx, field, obj) + if out.Values[i] == graphql.Null { + out.Invalids++ + } + case "endDate": + out.Values[i] = ec._MessageInfo_endDate(ctx, field, obj) + if out.Values[i] == graphql.Null { + out.Invalids++ + } case "repeat": out.Values[i] = ec._MessageInfo_repeat(ctx, field, obj) if out.Values[i] == graphql.Null { diff --git a/cmd/state-svc/schema/schema.graphqls b/cmd/state-svc/schema/schema.graphqls index 2d0cb8b23d..9f71c26909 100644 --- a/cmd/state-svc/schema/schema.graphqls +++ b/cmd/state-svc/schema/schema.graphqls @@ -55,6 +55,8 @@ type MessageInfo { id: String! message: String! condition: String! + startDate: String! + endDate: String! repeat: MessageRepeatType! interrupt: MessageInterruptType! placement: MessagePlacementType! diff --git a/internal/graph/generated.go b/internal/graph/generated.go index a9c307c88d..61f7178059 100644 --- a/internal/graph/generated.go +++ b/internal/graph/generated.go @@ -44,6 +44,8 @@ type MessageInfo struct { ID string `json:"id"` Message string `json:"message"` Condition string `json:"condition"` + StartDate string `json:"startDate"` + EndDate string `json:"endDate"` Repeat MessageRepeatType `json:"repeat"` Interrupt MessageInterruptType `json:"interrupt"` Placement MessagePlacementType `json:"placement"` diff --git a/test/integration/msg_int_test.go b/test/integration/msg_int_test.go index 0224d3ad3d..08a983cd63 100644 --- a/test/integration/msg_int_test.go +++ b/test/integration/msg_int_test.go @@ -36,6 +36,7 @@ func (suite *MsgIntegrationTestSuite) TestMessage_Basic() { Name string MessageJson string ExpectRepeat bool + ExpectShown bool }{ { "Defaults", @@ -44,6 +45,7 @@ func (suite *MsgIntegrationTestSuite) TestMessage_Basic() { "Message": "This is a [NOTICE]simple[/RESET] message" }]`, false, + true, }, { "Repeat Hourly", @@ -53,6 +55,7 @@ func (suite *MsgIntegrationTestSuite) TestMessage_Basic() { "Repeat": "Hourly" }]`, false, + true, }, { "Repeat Constantly", @@ -62,6 +65,103 @@ func (suite *MsgIntegrationTestSuite) TestMessage_Basic() { "Repeat": "Constantly" }]`, true, + true, + }, + { + "Within Date Range", + fmt.Sprintf(`[{ + "ID": "simple", + "Message": "This is a [NOTICE]simple[/RESET] message", + "StartDate": "%s", + "EndDate": "%s" + }]`, + time.Now().Add(-1*time.Hour).Format(time.RFC3339), + time.Now().Add(1*time.Hour).Format(time.RFC3339)), + false, + true, + }, + { + "Outside Date Range", + fmt.Sprintf(`[{ + "ID": "simple", + "Message": "This is a [NOTICE]simple[/RESET] message", + "StartDate": "%s", + "EndDate": "%s" + }]`, + time.Now().Add(1*time.Hour).Format(time.RFC3339), + time.Now().Add(2*time.Hour).Format(time.RFC3339)), + false, + false, + }, + { + "Only Start Date - Valid", + fmt.Sprintf(`[{ + "ID": "simple", + "Message": "This is a [NOTICE]simple[/RESET] message", + "StartDate": "%s" + }]`, + time.Now().Add(-1*time.Hour).Format(time.RFC3339)), + false, + true, + }, + { + "Only End Date - Valid", + fmt.Sprintf(`[{ + "ID": "simple", + "Message": "This is a [NOTICE]simple[/RESET] message", + "EndDate": "%s" + }]`, + time.Now().Add(1*time.Hour).Format(time.RFC3339)), + false, + true, + }, + { + "Outside Date Range - Future", + fmt.Sprintf(`[{ + "ID": "simple", + "Message": "This is a [NOTICE]simple[/RESET] message", + "StartDate": "%s", + "EndDate": "%s" + }]`, + time.Now().Add(1*time.Hour).Format(time.RFC3339), + time.Now().Add(2*time.Hour).Format(time.RFC3339)), + false, + false, + }, + { + "Outside Date Range - Past", + fmt.Sprintf(`[{ + "ID": "simple", + "Message": "This is a [NOTICE]simple[/RESET] message", + "StartDate": "%s", + "EndDate": "%s" + }]`, + time.Now().Add(-2*time.Hour).Format(time.RFC3339), + time.Now().Add(-1*time.Hour).Format(time.RFC3339)), + false, + false, + }, + { + "Only Start Date - Invalid", + fmt.Sprintf(`[{ + "ID": "simple", + "Message": "This is a [NOTICE]simple[/RESET] message", + "StartDate": "%s" + }]`, + time.Now().Add(1*time.Hour).Format(time.RFC3339)), + false, + false, + }, + { + "Only End Date - Invalid", + fmt.Sprintf(`[{ + "ID": "simple", + "Message": "This is a [NOTICE]simple[/RESET] message", + "EndDate": "%s" + }]`, + time.Now().Add(-1*time.Hour).Format(time.RFC3339)), + false, + false, }, } for _, tt := range tests { @@ -73,7 +173,13 @@ func (suite *MsgIntegrationTestSuite) TestMessage_Basic() { suite.Require().NoError(err) cp := ts.SpawnWithOpts(e2e.OptArgs("--version"), e2e.OptAppendEnv(constants.MessagesOverrideEnvVarName+"="+msgFile)) - cp.Expect(`This is a simple message`) + + if !tt.ExpectShown { + suite.Require().NotContains(cp.Output(), "This is a simple message", "Message should not appear when outside date range") + } else { + cp.Expect(`This is a simple message`) + } + cp.Expect("ActiveState CLI by ActiveState Software Inc.") cp.ExpectExitCode(0) From 975776b3d4b34030d30a8541b3add6d377c2e521 Mon Sep 17 00:00:00 2001 From: mdrakos Date: Tue, 19 Nov 2024 13:56:59 -0800 Subject: [PATCH 059/336] Remove debug logs --- cmd/state-svc/internal/messages/messages.go | 3 --- 1 file changed, 3 deletions(-) diff --git a/cmd/state-svc/internal/messages/messages.go b/cmd/state-svc/internal/messages/messages.go index 1717053654..37581d067b 100644 --- a/cmd/state-svc/internal/messages/messages.go +++ b/cmd/state-svc/internal/messages/messages.go @@ -113,14 +113,12 @@ func (m *Messages) Check(command string, flags []string) ([]*graph.MessageInfo, } func messageInDateRange(message *graph.MessageInfo, baseTime time.Time) (bool, error) { - logging.Debug("Checking message %s in date range with base time %s", message.ID, baseTime.Format(time.RFC3339)) if message.StartDate != "" { startDate, err := time.Parse(time.RFC3339, message.StartDate) if err != nil { return false, errs.Wrap(err, "Could not parse start date for message %s", message.ID) } if baseTime.Before(startDate) { - logging.Debug("Skipping message %s as it is before start date %s", message.ID, startDate.Format(time.RFC3339)) return false, nil } } @@ -131,7 +129,6 @@ func messageInDateRange(message *graph.MessageInfo, baseTime time.Time) (bool, e return false, errs.Wrap(err, "Could not parse end date for message %s", message.ID) } if baseTime.After(endDate) { - logging.Debug("Skipping message %s as it is after end date %s", message.ID, endDate.Format(time.RFC3339)) return false, nil } } From 1412ea34cbf62860cbc21b6c5c8782da1bdd5b6b Mon Sep 17 00:00:00 2001 From: mdrakos Date: Tue, 19 Nov 2024 13:57:07 -0800 Subject: [PATCH 060/336] Rename tests --- test/integration/msg_int_test.go | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/test/integration/msg_int_test.go b/test/integration/msg_int_test.go index 08a983cd63..fbf16e3ab9 100644 --- a/test/integration/msg_int_test.go +++ b/test/integration/msg_int_test.go @@ -94,7 +94,7 @@ func (suite *MsgIntegrationTestSuite) TestMessage_Basic() { false, }, { - "Only Start Date - Valid", + "Only Start Date - Inside Range", fmt.Sprintf(`[{ "ID": "simple", "Message": "This is a [NOTICE]simple[/RESET] message", @@ -105,7 +105,7 @@ func (suite *MsgIntegrationTestSuite) TestMessage_Basic() { true, }, { - "Only End Date - Valid", + "Only End Date - Inside Range", fmt.Sprintf(`[{ "ID": "simple", "Message": "This is a [NOTICE]simple[/RESET] message", @@ -142,7 +142,7 @@ func (suite *MsgIntegrationTestSuite) TestMessage_Basic() { false, }, { - "Only Start Date - Invalid", + "Only Start Date - Outside Range", fmt.Sprintf(`[{ "ID": "simple", "Message": "This is a [NOTICE]simple[/RESET] message", @@ -153,7 +153,7 @@ func (suite *MsgIntegrationTestSuite) TestMessage_Basic() { false, }, { - "Only End Date - Invalid", + "Only End Date - Outside Range", fmt.Sprintf(`[{ "ID": "simple", "Message": "This is a [NOTICE]simple[/RESET] message", From 574ff6b99f2eeca354a04f2b2b3ab3a2a16ec556 Mon Sep 17 00:00:00 2001 From: mitchell Date: Tue, 19 Nov 2024 17:55:59 -0500 Subject: [PATCH 061/336] Added "--portable" flag to `state checkout` for copying runtime files instead of linking them. Also make `state deploy` runtimes portable by default. --- cmd/state/internal/cmdtree/checkout.go | 5 +++++ internal/assets/contents/activestate.yaml.cache.tpl | 1 + internal/runbits/checkout/checkout.go | 7 ++++--- internal/runbits/runtime/runtime.go | 3 +++ internal/runners/activate/activate.go | 2 +- internal/runners/checkout/checkout.go | 3 ++- internal/runners/deploy/deploy.go | 2 +- pkg/project/project.go | 2 ++ pkg/projectfile/projectfile.go | 9 ++++++--- pkg/runtime/options.go | 4 ++++ pkg/runtime/setup.go | 3 ++- 11 files changed, 31 insertions(+), 10 deletions(-) diff --git a/cmd/state/internal/cmdtree/checkout.go b/cmd/state/internal/cmdtree/checkout.go index e83fc6ee1c..0e1c91ab23 100644 --- a/cmd/state/internal/cmdtree/checkout.go +++ b/cmd/state/internal/cmdtree/checkout.go @@ -26,6 +26,11 @@ func newCheckoutCommand(prime *primer.Values) *captain.Command { Description: locale.Tl("flag_state_checkout_runtime-path_description", "Path to store the runtime files"), Value: ¶ms.RuntimePath, }, + { + Name: "portable", + Description: locale.Tl("flag_state_checkout_portable_description", "Copy files to runtime-path instead of linking to them"), + Value: ¶ms.Portable, + }, { Name: "no-clone", Description: locale.Tl("flag_state_checkout_no_clone_description", "Do not clone the github repository associated with this project (if any)"), diff --git a/internal/assets/contents/activestate.yaml.cache.tpl b/internal/assets/contents/activestate.yaml.cache.tpl index fcf8468204..7adaa70bc0 100644 --- a/internal/assets/contents/activestate.yaml.cache.tpl +++ b/internal/assets/contents/activestate.yaml.cache.tpl @@ -1,2 +1,3 @@ # It is recommended that you do not commit this file as it contains configuration that is specific to your machine cache: {{ .Cache }} +portable: {{ .Portable }} diff --git a/internal/runbits/checkout/checkout.go b/internal/runbits/checkout/checkout.go index 8e25d88b4e..fccb4ec9a8 100644 --- a/internal/runbits/checkout/checkout.go +++ b/internal/runbits/checkout/checkout.go @@ -52,7 +52,7 @@ func New(repo git.Repository, prime primeable) *Checkout { return &Checkout{repo, prime} } -func (r *Checkout) Run(ns *project.Namespaced, branchName, cachePath, targetPath string, noClone, bareCheckout bool) (_ string, rerr error) { +func (r *Checkout) Run(ns *project.Namespaced, branchName, cachePath, targetPath string, noClone, bareCheckout, portable bool) (_ string, rerr error) { defer r.rationalizeError(&rerr) path, err := r.pathToUse(ns, targetPath) @@ -94,7 +94,7 @@ func (r *Checkout) Run(ns *project.Namespaced, branchName, cachePath, targetPath return "", errNoCommitID } - if err := CreateProjectFiles(path, cachePath, owner, proj, branchName, commitID.String(), language); err != nil { + if err := CreateProjectFiles(path, cachePath, owner, proj, branchName, commitID.String(), language, portable); err != nil { return "", errs.Wrap(err, "Could not create project files") } @@ -182,7 +182,7 @@ func (r *Checkout) fetchProject( return owner, proj, commitID, branchName, language, pj.RepoURL, nil } -func CreateProjectFiles(checkoutPath, cachePath, owner, name, branch, commitID, language string) error { +func CreateProjectFiles(checkoutPath, cachePath, owner, name, branch, commitID, language string, portable bool) error { configFile := filepath.Join(checkoutPath, constants.ConfigFileName) if !fileutils.FileExists(configFile) { _, err := projectfile.Create(&projectfile.CreateParams{ @@ -192,6 +192,7 @@ func CreateProjectFiles(checkoutPath, cachePath, owner, name, branch, commitID, Directory: checkoutPath, Language: language, Cache: cachePath, + Portable: portable, }) if err != nil { if osutils.IsAccessDeniedError(err) { diff --git a/internal/runbits/runtime/runtime.go b/internal/runbits/runtime/runtime.go index 83b995ff75..88305f47a6 100644 --- a/internal/runbits/runtime/runtime.go +++ b/internal/runbits/runtime/runtime.go @@ -271,6 +271,9 @@ func Update( u.RawQuery = q.Encode() rtOpts = append(rtOpts, runtime.WithBuildProgressUrl(u.String())) } + if proj.IsPortable() { + rtOpts = append(rtOpts, runtime.WithPortable()) + } if err := rt.Update(buildPlan, rtHash, rtOpts...); err != nil { return nil, locale.WrapError(err, "err_packages_update_runtime_install") diff --git a/internal/runners/activate/activate.go b/internal/runners/activate/activate.go index 1cf3c2f389..1edb95cb37 100644 --- a/internal/runners/activate/activate.go +++ b/internal/runners/activate/activate.go @@ -95,7 +95,7 @@ func (r *Activate) Run(params *ActivateParams) (rerr error) { } // Perform fresh checkout - pathToUse, err := r.activateCheckout.Run(params.Namespace, params.Branch, "", params.PreferredPath, false, false) + pathToUse, err := r.activateCheckout.Run(params.Namespace, params.Branch, "", params.PreferredPath, false, false, false) if err != nil { return locale.WrapError(err, "err_activate_pathtouse", "Could not figure out what path to use.") } diff --git a/internal/runners/checkout/checkout.go b/internal/runners/checkout/checkout.go index ea2105031e..5d4025d4d9 100644 --- a/internal/runners/checkout/checkout.go +++ b/internal/runners/checkout/checkout.go @@ -38,6 +38,7 @@ type Params struct { RuntimePath string NoClone bool Force bool + Portable bool } type primeable interface { @@ -121,7 +122,7 @@ func (u *Checkout) Run(params *Params) (rerr error) { u.out.Notice(locale.Tr("checking_out", ns.String())) - projectDir, err := u.checkout.Run(ns, params.Branch, params.RuntimePath, params.PreferredPath, params.NoClone, archive != nil) + projectDir, err := u.checkout.Run(ns, params.Branch, params.RuntimePath, params.PreferredPath, params.NoClone, archive != nil, params.Portable) if err != nil { return errs.Wrap(err, "Checkout failed") } diff --git a/internal/runners/deploy/deploy.go b/internal/runners/deploy/deploy.go index b69ac6587b..472c8ecffd 100644 --- a/internal/runners/deploy/deploy.go +++ b/internal/runners/deploy/deploy.go @@ -168,7 +168,7 @@ func (d *Deploy) install(params *Params, commitID strfmt.UUID) (rerr error) { if err := checkout.CreateProjectFiles( params.Path, params.Path, params.Namespace.Owner, params.Namespace.Project, - constants.DefaultBranchName, commitID.String(), "", + constants.DefaultBranchName, commitID.String(), "", true, ); err != nil { return errs.Wrap(err, "Could not create project files") } diff --git a/pkg/project/project.go b/pkg/project/project.go index 22c3d46c60..06ea03ccbe 100644 --- a/pkg/project/project.go +++ b/pkg/project/project.go @@ -255,6 +255,8 @@ func (p *Project) Lock() string { return p.projectfile.Lock } // Cache returns the cache information for this project func (p *Project) Cache() string { return p.projectfile.Cache } +func (p *Project) IsPortable() bool { return p.projectfile.Portable && p.projectfile.Cache != "" } + // Namespace returns project namespace func (p *Project) Namespace() *Namespaced { return &Namespaced{Owner: p.projectfile.Owner(), Project: p.projectfile.Name()} diff --git a/pkg/projectfile/projectfile.go b/pkg/projectfile/projectfile.go index 9761cbb17b..e3ebcc5c62 100644 --- a/pkg/projectfile/projectfile.go +++ b/pkg/projectfile/projectfile.go @@ -108,6 +108,7 @@ type Project struct { Jobs Jobs `yaml:"jobs,omitempty"` Private bool `yaml:"private,omitempty"` Cache string `yaml:"cache,omitempty"` + Portable bool `yaml:"portable,omitempty"` path string // "private" parsedURL projectURL // parsed url data parsedChannel string @@ -920,6 +921,7 @@ type CreateParams struct { path string ProjectURL string Cache string + Portable bool } // Create will create a new activestate.yaml with a projectURL for the given details @@ -1019,7 +1021,7 @@ func createCustom(params *CreateParams, lang language.Language) (*Project, error } if params.Cache != "" { - createErr := createHostFile(params.Directory, params.Cache) + createErr := createHostFile(params.Directory, params.Cache, params.Portable) if createErr != nil { return nil, errs.Wrap(createErr, "Could not create cache file") } @@ -1028,14 +1030,15 @@ func createCustom(params *CreateParams, lang language.Language) (*Project, error return Parse(params.path) } -func createHostFile(filePath, cachePath string) error { +func createHostFile(filePath, cachePath string, portable bool) error { user, err := user.Current() if err != nil { return errs.Wrap(err, "Could not get current user") } data := map[string]interface{}{ - "Cache": cachePath, + "Cache": cachePath, + "Portable": portable, } tplName := "activestate.yaml.cache.tpl" diff --git a/pkg/runtime/options.go b/pkg/runtime/options.go index 19492243cf..d5d57ceb49 100644 --- a/pkg/runtime/options.go +++ b/pkg/runtime/options.go @@ -21,6 +21,10 @@ func WithPreferredLibcVersion(version string) SetOpt { return func(opts *Opts) { opts.PreferredLibcVersion = version } } +func WithPortable() SetOpt { + return func(opts *Opts) { opts.Portable = true } +} + func WithArchive(dir string, platformID strfmt.UUID, ext string) SetOpt { return func(opts *Opts) { opts.FromArchive = &fromArchive{dir, platformID, ext} diff --git a/pkg/runtime/setup.go b/pkg/runtime/setup.go index d35ca25805..a1159454a2 100644 --- a/pkg/runtime/setup.go +++ b/pkg/runtime/setup.go @@ -47,6 +47,7 @@ type Opts struct { EventHandlers []events.HandlerFunc BuildlogFilePath string BuildProgressUrl string + Portable bool FromArchive *fromArchive @@ -467,7 +468,7 @@ func (s *setup) install(id strfmt.UUID) (rerr error) { return errs.Wrap(err, "Could not get env") } - if envDef.NeedsTransforms() || !s.supportsHardLinks { + if envDef.NeedsTransforms() || !s.supportsHardLinks || s.opts.Portable { if err := s.depot.DeployViaCopy(id, envDef.InstallDir, s.path); err != nil { return errs.Wrap(err, "Could not deploy artifact via copy") } From 7ba048cb3a57eb58c1f790dca1db81f58d9f3a8c Mon Sep 17 00:00:00 2001 From: mdrakos Date: Wed, 20 Nov 2024 13:48:18 -0800 Subject: [PATCH 062/336] Merge graphQL client code --- internal/gqlclient/gqlclient.go | 393 ----------------- internal/{gqlclient => graphql}/error.go | 2 +- internal/graphql/graphql.go | 395 ++++++++++++++++-- internal/graphql/graphql_json_test.go | 21 +- internal/graphql/graphql_multipart_test.go | 36 +- internal/graphql/graphql_shared_test.go | 43 ++ internal/graphql/graphql_test.go | 12 +- pkg/platform/api/graphql/graphql.go | 6 +- pkg/platform/api/graphql/request/publish.go | 8 +- .../api/hasura_inventory/inventory.go | 6 +- pkg/platform/api/mediator/mediator.go | 6 +- .../api/vulnerabilities/vulnerabilities.go | 6 +- pkg/platform/model/buildplanner/build.go | 3 +- .../model/buildplanner/buildplanner.go | 5 +- pkg/platform/model/svc.go | 9 +- 15 files changed, 470 insertions(+), 481 deletions(-) delete mode 100644 internal/gqlclient/gqlclient.go rename internal/{gqlclient => graphql}/error.go (95%) create mode 100644 internal/graphql/graphql_shared_test.go diff --git a/internal/gqlclient/gqlclient.go b/internal/gqlclient/gqlclient.go deleted file mode 100644 index d9e4c1ae60..0000000000 --- a/internal/gqlclient/gqlclient.go +++ /dev/null @@ -1,393 +0,0 @@ -package gqlclient - -import ( - "bytes" - "context" - "encoding/json" - "fmt" - "io" - "mime/multipart" - "net/http" - "os" - "strings" - "time" - - "github.com/ActiveState/cli/internal/constants" - "github.com/ActiveState/cli/internal/errs" - "github.com/ActiveState/cli/internal/graphql" - "github.com/ActiveState/cli/internal/logging" - "github.com/ActiveState/cli/internal/profile" - "github.com/ActiveState/cli/internal/singleton/uniqid" - "github.com/ActiveState/cli/internal/strutils" - "github.com/ActiveState/cli/pkg/platform/api" - "github.com/pkg/errors" -) - -type File struct { - Field string - Name string - R io.Reader -} - -type Request0 interface { - Query() string - Vars() map[string]interface{} -} - -type Request interface { - Query() string - Vars() (map[string]interface{}, error) -} - -type RequestWithFiles interface { - Request - Files() []File -} - -type Header map[string][]string - -type graphqlClient = graphql.Client - -// StandardizedErrors works around API's that don't follow the graphql standard -// It looks redundant because it needs to address two different API responses. -// https://activestatef.atlassian.net/browse/PB-4291 -type StandardizedErrors struct { - Message string - Error string - Errors []graphErr -} - -func (e StandardizedErrors) HasErrors() bool { - return len(e.Errors) > 0 || e.Error != "" -} - -// Values tells us all the relevant error messages returned. -// We don't include e.Error because it's an unhelpful generic error code redundant with the message. -func (e StandardizedErrors) Values() []string { - var errs []string - for _, err := range e.Errors { - errs = append(errs, err.Message) - } - if e.Message != "" { - errs = append(errs, e.Message) - } - return errs -} - -type graphResponse struct { - Data interface{} - Error string - Message string - Errors []graphErr -} - -type graphErr struct { - Message string -} - -func (e graphErr) Error() string { - return "graphql: " + e.Message -} - -type BearerTokenProvider interface { - BearerToken() string -} - -type Client struct { - *graphqlClient - url string - tokenProvider BearerTokenProvider - timeout time.Duration -} - -func NewWithOpts(url string, timeout time.Duration, opts ...graphql.ClientOption) *Client { - if timeout == 0 { - timeout = time.Second * 60 - } - - client := &Client{ - graphqlClient: graphql.NewClient(url, opts...), - timeout: timeout, - url: url, - } - if os.Getenv(constants.DebugServiceRequestsEnvVarName) == "true" { - client.EnableDebugLog() - } - return client -} - -func New(url string, timeout time.Duration) *Client { - return NewWithOpts(url, timeout, graphql.WithHTTPClient(api.NewHTTPClient())) -} - -// EnableDebugLog turns on debug logging -func (c *Client) EnableDebugLog() { - c.graphqlClient.Log = func(s string) { logging.Debug("graphqlClient log message: %s", s) } -} - -func (c *Client) SetTokenProvider(tokenProvider BearerTokenProvider) { - c.tokenProvider = tokenProvider -} - -func (c *Client) SetDebug(b bool) { - c.graphqlClient.Log = func(string) {} - if b { - c.graphqlClient.Log = func(s string) { - fmt.Fprintln(os.Stderr, s) - } - } -} - -func (c *Client) Run(request Request, response interface{}) error { - ctx := context.Background() - if c.timeout != 0 { - var cancel context.CancelFunc - ctx, cancel = context.WithTimeout(ctx, c.timeout) - defer cancel() - } - err := c.RunWithContext(ctx, request, response) - return err // Needs var so the cancel defer triggers at the right time -} - -type PostProcessor interface { - PostProcess() error -} - -func (c *Client) RunWithContext(ctx context.Context, request Request, response interface{}) (rerr error) { - defer func() { - if rerr != nil { - return - } - if postProcessor, ok := response.(PostProcessor); ok { - rerr = postProcessor.PostProcess() - } - }() - name := strutils.Summarize(request.Query(), 25) - defer profile.Measure(fmt.Sprintf("gqlclient:RunWithContext:(%s)", name), time.Now()) - - if fileRequest, ok := request.(RequestWithFiles); ok { - return c.runWithFiles(ctx, fileRequest, response) - } - - vars, err := request.Vars() - if err != nil { - return errs.Wrap(err, "Could not get variables") - } - - graphRequest := graphql.NewRequest(request.Query()) - for key, value := range vars { - graphRequest.Var(key, value) - } - - if fileRequest, ok := request.(RequestWithFiles); ok { - for _, file := range fileRequest.Files() { - graphRequest.File(file.Field, file.Name, file.R) - } - } - - var bearerToken string - if c.tokenProvider != nil { - bearerToken = c.tokenProvider.BearerToken() - if bearerToken != "" { - graphRequest.Header.Set("Authorization", "Bearer "+bearerToken) - } - } - - graphRequest.Header.Set("X-Requestor", uniqid.Text()) - - if err := c.graphqlClient.Run(ctx, graphRequest, &response); err != nil { - return NewRequestError(err, request) - } - - return nil -} - -type JsonRequest struct { - Query string `json:"query"` - Variables map[string]interface{} `json:"variables"` -} - -func (c *Client) runWithFiles(ctx context.Context, gqlReq RequestWithFiles, response interface{}) error { - // Construct the multi-part request. - bodyReader, bodyWriter := io.Pipe() - - req, err := http.NewRequest("POST", c.url, bodyReader) - if err != nil { - return errs.Wrap(err, "Could not create http request") - } - - req.Body = bodyReader - - mw := multipart.NewWriter(bodyWriter) - req.Header.Set("Content-Type", "multipart/form-data; boundary="+mw.Boundary()) - - vars, err := gqlReq.Vars() - if err != nil { - return errs.Wrap(err, "Could not get variables") - } - - varJson, err := json.Marshal(vars) - if err != nil { - return errs.Wrap(err, "Could not marshal vars") - } - - reqErrChan := make(chan error) - go func() { - defer bodyWriter.Close() - defer mw.Close() - defer close(reqErrChan) - - // Operations - operations, err := mw.CreateFormField("operations") - if err != nil { - reqErrChan <- errs.Wrap(err, "Could not create form field operations") - return - } - - jsonReq := JsonRequest{ - Query: gqlReq.Query(), - Variables: vars, - } - jsonReqV, err := json.Marshal(jsonReq) - if err != nil { - reqErrChan <- errs.Wrap(err, "Could not marshal json request") - return - } - if _, err := operations.Write(jsonReqV); err != nil { - reqErrChan <- errs.Wrap(err, "Could not write json request") - return - } - - // Map - if len(gqlReq.Files()) > 0 { - mapField, err := mw.CreateFormField("map") - if err != nil { - reqErrChan <- errs.Wrap(err, "Could not create form field map") - return - } - for n, f := range gqlReq.Files() { - if _, err := mapField.Write([]byte(fmt.Sprintf(`{"%d": ["%s"]}`, n, f.Field))); err != nil { - reqErrChan <- errs.Wrap(err, "Could not write map field") - return - } - } - // File upload - for n, file := range gqlReq.Files() { - part, err := mw.CreateFormFile(fmt.Sprintf("%d", n), file.Name) - if err != nil { - reqErrChan <- errs.Wrap(err, "Could not create form file") - return - } - - _, err = io.Copy(part, file.R) - if err != nil { - reqErrChan <- errs.Wrap(err, "Could not read file") - return - } - } - } - }() - - c.Log(fmt.Sprintf(">> query: %s", gqlReq.Query())) - c.Log(fmt.Sprintf(">> variables: %s", string(varJson))) - fnames := []string{} - for _, file := range gqlReq.Files() { - fnames = append(fnames, file.Name) - } - c.Log(fmt.Sprintf(">> files: %v", fnames)) - - // Run the request. - var bearerToken string - if c.tokenProvider != nil { - bearerToken = c.tokenProvider.BearerToken() - if bearerToken != "" { - req.Header.Set("Authorization", "Bearer "+bearerToken) - } - } - if os.Getenv(constants.DebugServiceRequestsEnvVarName) == "true" { - responseData, err := json.MarshalIndent(response, "", " ") - if err != nil { - return errs.Wrap(err, "failed to marshal response") - } - logging.Debug("gqlclient: response: %s", responseData) - } - - intermediateResp := make(map[string]interface{}) - gr := &graphResponse{ - Data: &intermediateResp, - } - req = req.WithContext(ctx) - c.Log(fmt.Sprintf(">> Raw Request: %s\n", req.URL.String())) - - var res *http.Response - resErrChan := make(chan error) - go func() { - var err error - res, err = http.DefaultClient.Do(req) - resErrChan <- err - }() - - // Due to the streaming uploads the request error can happen both before and after the http request itself, hence - // the creative select case you see before you. - wait := true - for wait { - select { - case err := <-reqErrChan: - if err != nil { - c.Log(fmt.Sprintf("Request Error: %s", err)) - return err - } - case err := <-resErrChan: - wait = false - if err != nil { - c.Log(fmt.Sprintf("Response Error: %s", err)) - return err - } - } - } - - if res == nil { - return errs.New("Received empty response") - } - - defer res.Body.Close() - var buf bytes.Buffer - if _, err := io.Copy(&buf, res.Body); err != nil { - c.Log(fmt.Sprintf("Read Error: %s", err)) - return errors.Wrap(err, "reading body") - } - resp := buf.Bytes() - c.Log(fmt.Sprintf("<< Response code: %d, body: %s\n", res.StatusCode, string(resp))) - - // Work around API's that don't follow the graphql standard - // https://activestatef.atlassian.net/browse/PB-4291 - standardizedErrors := StandardizedErrors{} - if err := json.Unmarshal(resp, &standardizedErrors); err != nil { - return errors.Wrap(err, "decoding error response") - } - if standardizedErrors.HasErrors() { - return errs.New(strings.Join(standardizedErrors.Values(), "\n")) - } - - if err := json.Unmarshal(resp, &gr); err != nil { - return errors.Wrap(err, "decoding response") - } - - // If the response is a single object, meaning we only have a single query in the request, we can unmarshal the - // response directly to the response type. Otherwise, we need to marshal the response as we normally would. - if len(intermediateResp) == 1 { - for _, val := range intermediateResp { - data, err := json.Marshal(val) - if err != nil { - return errors.Wrap(err, "remarshaling response") - } - return json.Unmarshal(data, response) - } - } - - data, err := json.Marshal(intermediateResp) - if err != nil { - return errors.Wrap(err, "remarshaling response") - } - return json.Unmarshal(data, response) -} diff --git a/internal/gqlclient/error.go b/internal/graphql/error.go similarity index 95% rename from internal/gqlclient/error.go rename to internal/graphql/error.go index f5c9e66a17..b8031b24c8 100644 --- a/internal/gqlclient/error.go +++ b/internal/graphql/error.go @@ -1,4 +1,4 @@ -package gqlclient +package graphql import "fmt" diff --git a/internal/graphql/graphql.go b/internal/graphql/graphql.go index 780a2c6d46..86278ae0bb 100644 --- a/internal/graphql/graphql.go +++ b/internal/graphql/graphql.go @@ -39,15 +39,84 @@ import ( "io" "mime/multipart" "net/http" + "os" + "strings" + "time" + "github.com/ActiveState/cli/internal/constants" + "github.com/ActiveState/cli/internal/errs" + "github.com/ActiveState/cli/internal/logging" + "github.com/ActiveState/cli/internal/profile" + "github.com/ActiveState/cli/internal/singleton/uniqid" + "github.com/ActiveState/cli/internal/strutils" + "github.com/ActiveState/cli/pkg/platform/api" "github.com/pkg/errors" ) +type Request interface { + Query() string + Vars() (map[string]interface{}, error) +} + +type RequestWithFiles interface { + Request + Files() []File +} + +type RequestWithHeaders interface { + Request + Headers() map[string][]string +} + +// StandardizedErrors works around API's that don't follow the graphql standard +// It looks redundant because it needs to address two different API responses. +// https://activestatef.atlassian.net/browse/PB-4291 +type StandardizedErrors struct { + Message string + Error string + Errors []graphErr +} + +func (e StandardizedErrors) HasErrors() bool { + return len(e.Errors) > 0 || e.Error != "" +} + +// Values tells us all the relevant error messages returned. +// We don't include e.Error because it's an unhelpful generic error code redundant with the message. +func (e StandardizedErrors) Values() []string { + var errs []string + for _, err := range e.Errors { + errs = append(errs, err.Message) + } + if e.Message != "" { + errs = append(errs, e.Message) + } + return errs +} + +type graphErr struct { + Message string +} + +func (e graphErr) Error() string { + return "graphql: " + e.Message +} + +type BearerTokenProvider interface { + BearerToken() string +} + +type PostProcessor interface { + PostProcess() error +} + // Client is a client for interacting with a GraphQL API. type Client struct { - endpoint string + url string httpClient *http.Client useMultipartForm bool + tokenProvider BearerTokenProvider + timeout time.Duration // Log is called with various debug information. // To log to standard out, use: @@ -55,11 +124,29 @@ type Client struct { Log func(s string) } -// NewClient makes a new Client capable of making GraphQL requests. -func NewClient(endpoint string, opts ...ClientOption) *Client { +func NewWithOpts(url string, timeout time.Duration, opts ...ClientOption) *Client { + if timeout == 0 { + timeout = time.Second * 60 + } + + c := newClient(url, opts...) + if os.Getenv(constants.DebugServiceRequestsEnvVarName) == "true" { + c.EnableDebugLog() + } + c.timeout = timeout + + return c +} + +func New(url string, timeout time.Duration) *Client { + return NewWithOpts(url, timeout, WithHTTPClient(api.NewHTTPClient())) +} + +// newClient makes a new Client capable of making GraphQL requests. +func newClient(endpoint string, opts ...ClientOption) *Client { c := &Client{ - endpoint: endpoint, - Log: func(string) {}, + url: endpoint, + Log: func(string) {}, } for _, optionFunc := range opts { optionFunc(c) @@ -74,27 +161,90 @@ func (c *Client) logf(format string, args ...interface{}) { c.Log(fmt.Sprintf(format, args...)) } -// Run executes the query and unmarshals the response from the data field +func (c *Client) EnableDebugLog() { + c.Log = func(s string) { + logging.Debug("graphqlClient log message: %s", s) + } +} + +func (c *Client) SetTokenProvider(tokenProvider BearerTokenProvider) { + c.tokenProvider = tokenProvider +} + +func (c *Client) Run(request Request, response interface{}) error { + ctx := context.Background() + if c.timeout != 0 { + var cancel context.CancelFunc + ctx, cancel = context.WithTimeout(ctx, c.timeout) + defer cancel() + } + if err := c.RunWithContext(ctx, request, response); err != nil { + return NewRequestError(err, request) + } + return nil +} + +// RunWithContext executes the query and unmarshals the response from the data field // into the response object. // Pass in a nil response object to skip response parsing. // If the request fails or the server returns an error, the first error // will be returned. -func (c *Client) Run(ctx context.Context, req *Request, resp interface{}) error { +func (c *Client) RunWithContext(ctx context.Context, req Request, resp interface{}) (rerr error) { + defer func() { + if rerr != nil { + return + } + if postProcessor, ok := resp.(PostProcessor); ok { + rerr = postProcessor.PostProcess() + } + }() + name := strutils.Summarize(req.Query(), 25) + defer profile.Measure(fmt.Sprintf("gqlclient:RunWithContext:(%s)", name), time.Now()) + select { case <-ctx.Done(): return ctx.Err() default: } - if len(req.files) > 0 && !c.useMultipartForm { - return errors.New("cannot send files with PostFields option") + + gqlRequest := newRequest(req.Query()) + vars, err := req.Vars() + if err != nil { + return errs.Wrap(err, "Could not get vars") + } + gqlRequest.vars = vars + + var bearerToken string + if c.tokenProvider != nil { + bearerToken = c.tokenProvider.BearerToken() + if bearerToken != "" { + gqlRequest.Header.Set("Authorization", "Bearer "+bearerToken) + } + } + + gqlRequest.Header.Set("X-Requestor", uniqid.Text()) + + if header, ok := req.(RequestWithHeaders); ok { + for key, values := range header.Headers() { + for _, value := range values { + gqlRequest.Header.Set(key, value) + } + } } + + if fileRequest, ok := req.(RequestWithFiles); ok { + gqlRequest.files = fileRequest.Files() + return c.runWithFiles(ctx, gqlRequest, resp) + } + if c.useMultipartForm { - return c.runWithPostFields(ctx, req, resp) + return c.runWithPostFields(ctx, gqlRequest, resp) } - return c.runWithJSON(ctx, req, resp) + + return c.runWithJSON(ctx, gqlRequest, resp) } -func (c *Client) runWithJSON(ctx context.Context, req *Request, resp interface{}) error { +func (c *Client) runWithJSON(ctx context.Context, req *GQLRequest, resp interface{}) error { var requestBody bytes.Buffer requestBodyObj := struct { Query string `json:"query"` @@ -113,7 +263,7 @@ func (c *Client) runWithJSON(ctx context.Context, req *Request, resp interface{} gr := &graphResponse{ Data: &intermediateResp, } - r, err := http.NewRequest(http.MethodPost, c.endpoint, &requestBody) + r, err := http.NewRequest(http.MethodPost, c.url, &requestBody) if err != nil { return err } @@ -147,7 +297,7 @@ func (c *Client) runWithJSON(ctx context.Context, req *Request, resp interface{} return c.marshalResponse(intermediateResp, resp) } -func (c *Client) runWithPostFields(ctx context.Context, req *Request, resp interface{}) error { +func (c *Client) runWithPostFields(ctx context.Context, req *GQLRequest, resp interface{}) error { var requestBody bytes.Buffer writer := multipart.NewWriter(&requestBody) if err := writer.WriteField("query", req.q); err != nil { @@ -163,6 +313,7 @@ func (c *Client) runWithPostFields(ctx context.Context, req *Request, resp inter return errors.Wrap(err, "encode variables") } } + for i := range req.files { part, err := writer.CreateFormFile(req.files[i].Field, req.files[i].Name) if err != nil { @@ -172,17 +323,19 @@ func (c *Client) runWithPostFields(ctx context.Context, req *Request, resp inter return errors.Wrap(err, "preparing file") } } + if err := writer.Close(); err != nil { return errors.Wrap(err, "close writer") } + c.logf(">> variables: %s", variablesBuf.String()) - c.logf(">> files: %d", len(req.files)) c.logf(">> query: %s", req.q) + c.logf(">> files: %d", len(req.files)) intermediateResp := make(map[string]interface{}) gr := &graphResponse{ Data: &intermediateResp, } - r, err := http.NewRequest(http.MethodPost, c.endpoint, &requestBody) + r, err := http.NewRequest(http.MethodPost, c.url, &requestBody) if err != nil { return err } @@ -216,6 +369,192 @@ func (c *Client) runWithPostFields(ctx context.Context, req *Request, resp inter return c.marshalResponse(intermediateResp, resp) } +type JsonRequest struct { + Query string `json:"query"` + Variables map[string]interface{} `json:"variables"` +} + +func (c *Client) runWithFiles(ctx context.Context, request *GQLRequest, response interface{}) error { + // Construct the multi-part request. + bodyReader, bodyWriter := io.Pipe() + + req, err := http.NewRequest("POST", c.url, bodyReader) + if err != nil { + return errs.Wrap(err, "Could not create http request") + } + + req.Body = bodyReader + + mw := multipart.NewWriter(bodyWriter) + req.Header.Set("Content-Type", "multipart/form-data; boundary="+mw.Boundary()) + + vars := request.vars + varJson, err := json.Marshal(vars) + if err != nil { + return errs.Wrap(err, "Could not marshal vars") + } + + reqErrChan := make(chan error) + go func() { + defer bodyWriter.Close() + defer mw.Close() + defer close(reqErrChan) + + // Operations + operations, err := mw.CreateFormField("operations") + if err != nil { + reqErrChan <- errs.Wrap(err, "Could not create form field operations") + return + } + + jsonReq := JsonRequest{ + Query: request.q, + Variables: vars, + } + jsonReqV, err := json.Marshal(jsonReq) + if err != nil { + reqErrChan <- errs.Wrap(err, "Could not marshal json request") + return + } + if _, err := operations.Write(jsonReqV); err != nil { + reqErrChan <- errs.Wrap(err, "Could not write json request") + return + } + + // Map + if len(request.files) > 0 { + mapField, err := mw.CreateFormField("map") + if err != nil { + reqErrChan <- errs.Wrap(err, "Could not create form field map") + return + } + for n, f := range request.files { + if _, err := mapField.Write([]byte(fmt.Sprintf(`{"%d": ["%s"]}`, n, f.Field))); err != nil { + reqErrChan <- errs.Wrap(err, "Could not write map field") + return + } + } + // File upload + for n, file := range request.files { + part, err := mw.CreateFormFile(fmt.Sprintf("%d", n), file.Name) + if err != nil { + reqErrChan <- errs.Wrap(err, "Could not create form file") + return + } + + _, err = io.Copy(part, file.R) + if err != nil { + reqErrChan <- errs.Wrap(err, "Could not read file") + return + } + } + } + }() + + c.Log(fmt.Sprintf(">> query: %s", request.q)) + c.Log(fmt.Sprintf(">> variables: %s", string(varJson))) + fnames := []string{} + for _, file := range request.files { + fnames = append(fnames, file.Name) + } + c.Log(fmt.Sprintf(">> files: %v", fnames)) + + // Run the request. + var bearerToken string + if c.tokenProvider != nil { + bearerToken = c.tokenProvider.BearerToken() + if bearerToken != "" { + req.Header.Set("Authorization", "Bearer "+bearerToken) + } + } + if os.Getenv(constants.DebugServiceRequestsEnvVarName) == "true" { + responseData, err := json.MarshalIndent(response, "", " ") + if err != nil { + return errs.Wrap(err, "failed to marshal response") + } + logging.Debug("gqlclient: response: %s", responseData) + } + + intermediateResp := make(map[string]interface{}) + gr := &graphResponse{ + Data: &intermediateResp, + } + req = req.WithContext(ctx) + c.Log(fmt.Sprintf(">> Raw Request: %s\n", req.URL.String())) + + var res *http.Response + resErrChan := make(chan error) + go func() { + var err error + res, err = http.DefaultClient.Do(req) + resErrChan <- err + }() + + // Due to the streaming uploads the request error can happen both before and after the http request itself, hence + // the creative select case you see before you. + wait := true + for wait { + select { + case err := <-reqErrChan: + if err != nil { + c.Log(fmt.Sprintf("Request Error: %s", err)) + return err + } + case err := <-resErrChan: + wait = false + if err != nil { + c.Log(fmt.Sprintf("Response Error: %s", err)) + return err + } + } + } + + if res == nil { + return errs.New("Received empty response") + } + + defer res.Body.Close() + var buf bytes.Buffer + if _, err := io.Copy(&buf, res.Body); err != nil { + c.Log(fmt.Sprintf("Read Error: %s", err)) + return errors.Wrap(err, "reading body") + } + resp := buf.Bytes() + c.Log(fmt.Sprintf("<< Response code: %d, body: %s\n", res.StatusCode, string(resp))) + + // Work around API's that don't follow the graphql standard + // https://activestatef.atlassian.net/browse/PB-4291 + standardizedErrors := StandardizedErrors{} + if err := json.Unmarshal(resp, &standardizedErrors); err != nil { + return errors.Wrap(err, "decoding error response") + } + if standardizedErrors.HasErrors() { + return errs.New(strings.Join(standardizedErrors.Values(), "\n")) + } + + if err := json.Unmarshal(resp, &gr); err != nil { + return errors.Wrap(err, "decoding response") + } + + // If the response is a single object, meaning we only have a single query in the request, we can unmarshal the + // response directly to the response type. Otherwise, we need to marshal the response as we normally would. + if len(intermediateResp) == 1 { + for _, val := range intermediateResp { + data, err := json.Marshal(val) + if err != nil { + return errors.Wrap(err, "remarshaling response") + } + return json.Unmarshal(data, response) + } + } + + data, err := json.Marshal(intermediateResp) + if err != nil { + return errors.Wrap(err, "remarshaling response") + } + return json.Unmarshal(data, response) +} + func (c *Client) marshalResponse(intermediateResp map[string]interface{}, resp interface{}) error { if resp == nil { return nil @@ -275,19 +614,19 @@ type graphResponse struct { } // Request is a GraphQL request. -type Request struct { +type GQLRequest struct { q string vars map[string]interface{} - files []file + files []File // Header represent any request headers that will be set // when the request is made. Header http.Header } -// NewRequest makes a new Request with the specified string. -func NewRequest(q string) *Request { - req := &Request{ +// newRequest makes a new Request with the specified string. +func newRequest(q string) *GQLRequest { + req := &GQLRequest{ q: q, Header: make(map[string][]string), } @@ -295,7 +634,7 @@ func NewRequest(q string) *Request { } // Var sets a variable. -func (req *Request) Var(key string, value interface{}) { +func (req *GQLRequest) Var(key string, value interface{}) { if req.vars == nil { req.vars = make(map[string]interface{}) } @@ -305,16 +644,20 @@ func (req *Request) Var(key string, value interface{}) { // File sets a file to upload. // Files are only supported with a Client that was created with // the UseMultipartForm option. -func (req *Request) File(fieldname, filename string, r io.Reader) { - req.files = append(req.files, file{ +func (req *GQLRequest) File(fieldname, filename string, r io.Reader) { + req.files = append(req.files, File{ Field: fieldname, Name: filename, R: r, }) } -// file represents a file to upload. -type file struct { +func (req *GQLRequest) Files() []File { + return req.files +} + +// File represents a File to upload. +type File struct { Field string Name string R io.Reader diff --git a/internal/graphql/graphql_json_test.go b/internal/graphql/graphql_json_test.go index 3cd6dde068..b2fbdda289 100644 --- a/internal/graphql/graphql_json_test.go +++ b/internal/graphql/graphql_json_test.go @@ -32,12 +32,12 @@ func TestDoJSON(t *testing.T) { defer srv.Close() ctx := context.Background() - client := NewClient(srv.URL) + client := newClient(srv.URL) ctx, cancel := context.WithTimeout(ctx, 1*time.Second) defer cancel() var responseData map[string]interface{} - err := client.Run(ctx, &Request{q: "query {}"}, &responseData) + err := client.RunWithContext(ctx, &TestRequest{"query {}", nil, nil}, &responseData) is.NoErr(err) is.Equal(calls, 1) // calls is.Equal(responseData["something"], "yes") @@ -59,10 +59,10 @@ func TestQueryJSON(t *testing.T) { ctx, cancel := context.WithTimeout(context.Background(), 1*time.Second) defer cancel() - client := NewClient(srv.URL) + client := newClient(srv.URL) - req := NewRequest("query {}") - req.Var("username", "matryer") + req := NewTestRequest("query {}") + req.vars["username"] = "matryer" // check variables is.True(req != nil) @@ -71,7 +71,7 @@ func TestQueryJSON(t *testing.T) { var resp struct { Value string } - err := client.Run(ctx, req, &resp) + err := client.RunWithContext(ctx, req, &resp) is.NoErr(err) is.Equal(calls, 1) @@ -99,15 +99,14 @@ func TestHeader(t *testing.T) { ctx, cancel := context.WithTimeout(context.Background(), 1*time.Second) defer cancel() - client := NewClient(srv.URL) - - req := NewRequest("query {}") - req.Header.Set("X-Custom-Header", "123") + client := newClient(srv.URL) + req := NewTestRequest("query {}") + req.headers["X-Custom-Header"] = []string{"123"} var resp struct { Value string } - err := client.Run(ctx, req, &resp) + err := client.RunWithContext(ctx, req, &resp) is.NoErr(err) is.Equal(calls, 1) diff --git a/internal/graphql/graphql_multipart_test.go b/internal/graphql/graphql_multipart_test.go index 7ae97b5a9f..a6734748ad 100644 --- a/internal/graphql/graphql_multipart_test.go +++ b/internal/graphql/graphql_multipart_test.go @@ -27,10 +27,9 @@ func TestWithClient(t *testing.T) { } ctx := context.Background() - client := NewClient("", WithHTTPClient(testClient), UseMultipartForm()) + client := newClient("", WithHTTPClient(testClient), UseMultipartForm()) - req := NewRequest(``) - client.Run(ctx, req, nil) + client.RunWithContext(ctx, NewTestRequest("query {}"), nil) is.Equal(calls, 1) // calls } @@ -54,12 +53,12 @@ func TestDoUseMultipartForm(t *testing.T) { defer srv.Close() ctx := context.Background() - client := NewClient(srv.URL, UseMultipartForm()) + client := newClient(srv.URL, UseMultipartForm()) ctx, cancel := context.WithTimeout(ctx, 1*time.Second) defer cancel() var responseData map[string]interface{} - err := client.Run(ctx, &Request{q: "query {}"}, &responseData) + err := client.RunWithContext(ctx, NewTestRequest("query {}"), &responseData) is.NoErr(err) is.Equal(calls, 1) // calls is.Equal(responseData["something"], "yes") @@ -82,12 +81,12 @@ func TestDoErr(t *testing.T) { defer srv.Close() ctx := context.Background() - client := NewClient(srv.URL, UseMultipartForm()) + client := newClient(srv.URL, UseMultipartForm()) ctx, cancel := context.WithTimeout(ctx, 1*time.Second) defer cancel() var responseData map[string]interface{} - err := client.Run(ctx, &Request{q: "query {}"}, &responseData) + err := client.RunWithContext(ctx, NewTestRequest("query {}"), &responseData) is.True(err != nil) is.Equal(err.Error(), "graphql: Something went wrong") } @@ -109,11 +108,11 @@ func TestDoNoResponse(t *testing.T) { defer srv.Close() ctx := context.Background() - client := NewClient(srv.URL, UseMultipartForm()) + client := newClient(srv.URL, UseMultipartForm()) ctx, cancel := context.WithTimeout(ctx, 1*time.Second) defer cancel() - err := client.Run(ctx, &Request{q: "query {}"}, nil) + err := client.RunWithContext(ctx, NewTestRequest("query {}"), nil) is.NoErr(err) is.Equal(calls, 1) // calls } @@ -134,10 +133,10 @@ func TestQuery(t *testing.T) { ctx, cancel := context.WithTimeout(context.Background(), 1*time.Second) defer cancel() - client := NewClient(srv.URL, UseMultipartForm()) + client := newClient(srv.URL, UseMultipartForm()) - req := NewRequest("query {}") - req.Var("username", "matryer") + req := NewTestRequest("query {}") + req.vars["username"] = "matryer" // check variables is.True(req != nil) @@ -146,7 +145,7 @@ func TestQuery(t *testing.T) { var resp struct { Value string } - err := client.Run(ctx, req, &resp) + err := client.RunWithContext(ctx, req, &resp) is.NoErr(err) is.Equal(calls, 1) @@ -160,7 +159,7 @@ func TestFile(t *testing.T) { var calls int srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { calls++ - file, header, err := r.FormFile("file") + file, header, err := r.FormFile("0") is.NoErr(err) defer file.Close() is.Equal(header.Filename, "filename.txt") @@ -175,11 +174,12 @@ func TestFile(t *testing.T) { defer srv.Close() ctx, cancel := context.WithTimeout(context.Background(), 1*time.Second) defer cancel() - client := NewClient(srv.URL, UseMultipartForm()) + client := newClient(srv.URL, UseMultipartForm()) f := strings.NewReader(`This is a file`) - req := NewRequest("query {}") - req.File("file", "filename.txt", f) - err := client.Run(ctx, req, nil) + req := NewTestRequestWithFiles("query {}") + req.files = append(req.files, File{Field: "file", Name: "filename.txt", R: f}) + var resp string + err := client.RunWithContext(ctx, req, &resp) is.NoErr(err) } diff --git a/internal/graphql/graphql_shared_test.go b/internal/graphql/graphql_shared_test.go new file mode 100644 index 0000000000..e20d924709 --- /dev/null +++ b/internal/graphql/graphql_shared_test.go @@ -0,0 +1,43 @@ +package graphql + +type TestRequest struct { + q string + vars map[string]interface{} + headers map[string][]string +} + +func NewTestRequest(q string) *TestRequest { + return &TestRequest{ + q: q, + vars: make(map[string]interface{}), + headers: make(map[string][]string), + } +} + +func (r *TestRequest) Query() string { + return r.q +} + +func (r *TestRequest) Vars() (map[string]interface{}, error) { + return r.vars, nil +} + +func (r *TestRequest) Headers() map[string][]string { + return r.headers +} + +type TestRequestWithFiles struct { + *TestRequest + files []File +} + +func NewTestRequestWithFiles(q string) *TestRequestWithFiles { + return &TestRequestWithFiles{ + TestRequest: NewTestRequest(q), + files: make([]File, 0), + } +} + +func (r *TestRequestWithFiles) Files() []File { + return r.files +} diff --git a/internal/graphql/graphql_test.go b/internal/graphql/graphql_test.go index 1a24c533f3..0bc1875361 100644 --- a/internal/graphql/graphql_test.go +++ b/internal/graphql/graphql_test.go @@ -25,7 +25,7 @@ func TestClient_SingleField(t *testing.T) { })) defer server.Close() - client := NewClient(server.URL) + client := newClient(server.URL) tests := []struct { name string @@ -104,10 +104,10 @@ func TestClient_SingleField(t *testing.T) { for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - req := NewRequest(tt.query) + req := NewTestRequest(tt.query) var resp interface{} - err := client.Run(context.Background(), req, &resp) + err := client.RunWithContext(context.Background(), req, &resp) if err != nil { t.Fatalf("unexpected error: %v", err) } @@ -145,7 +145,7 @@ func TestClient_MultipleFields(t *testing.T) { })) defer server.Close() - client := NewClient(server.URL) + client := newClient(server.URL) tests := []struct { name string @@ -179,10 +179,10 @@ func TestClient_MultipleFields(t *testing.T) { for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - req := NewRequest(tt.query) + req := NewTestRequest(tt.query) var resp interface{} - err := client.Run(context.Background(), req, &resp) + err := client.RunWithContext(context.Background(), req, &resp) if err != nil { t.Fatalf("unexpected error: %v", err) } diff --git a/pkg/platform/api/graphql/graphql.go b/pkg/platform/api/graphql/graphql.go index f0e01183cb..878a9d6653 100644 --- a/pkg/platform/api/graphql/graphql.go +++ b/pkg/platform/api/graphql/graphql.go @@ -1,14 +1,14 @@ package graphql import ( - "github.com/ActiveState/cli/internal/gqlclient" + "github.com/ActiveState/cli/internal/graphql" "github.com/ActiveState/cli/pkg/platform/api" "github.com/ActiveState/cli/pkg/platform/authentication" ) -func New(auth *authentication.Auth) *gqlclient.Client { +func New(auth *authentication.Auth) *graphql.Client { url := api.GetServiceURL(api.ServiceGraphQL) - c := gqlclient.New(url.String(), 0) + c := graphql.New(url.String(), 0) c.SetTokenProvider(auth) return c } diff --git a/pkg/platform/api/graphql/request/publish.go b/pkg/platform/api/graphql/request/publish.go index 551bdb9e06..966d210ce8 100644 --- a/pkg/platform/api/graphql/request/publish.go +++ b/pkg/platform/api/graphql/request/publish.go @@ -9,7 +9,7 @@ import ( "github.com/ActiveState/cli/internal/errs" "github.com/ActiveState/cli/internal/fileutils" - "github.com/ActiveState/cli/internal/gqlclient" + "github.com/ActiveState/cli/internal/graphql" "github.com/ActiveState/cli/internal/locale" yamlcomment "github.com/zijiren233/yaml-comment" "gopkg.in/yaml.v3" @@ -187,11 +187,11 @@ func (p *PublishInput) Close() error { return p.file.Close() } -func (p *PublishInput) Files() []gqlclient.File { +func (p *PublishInput) Files() []graphql.File { if p.file == nil { - return []gqlclient.File{} + return []graphql.File{} } - return []gqlclient.File{ + return []graphql.File{ { Field: "variables.input.file", // this needs to map to the graphql input, eg. variables.input.file Name: p.Variables.Name, diff --git a/pkg/platform/api/hasura_inventory/inventory.go b/pkg/platform/api/hasura_inventory/inventory.go index b4ddd8dc71..dbca50e093 100644 --- a/pkg/platform/api/hasura_inventory/inventory.go +++ b/pkg/platform/api/hasura_inventory/inventory.go @@ -1,13 +1,13 @@ package inventory import ( - "github.com/ActiveState/cli/internal/gqlclient" + "github.com/ActiveState/cli/internal/graphql" "github.com/ActiveState/cli/pkg/platform/api" "github.com/ActiveState/cli/pkg/platform/authentication" ) -func New(auth *authentication.Auth) *gqlclient.Client { - client := gqlclient.New(api.GetServiceURL(api.ServiceHasuraInventory).String(), 0) +func New(auth *authentication.Auth) *graphql.Client { + client := graphql.New(api.GetServiceURL(api.ServiceHasuraInventory).String(), 0) if auth != nil && auth.Authenticated() { client.SetTokenProvider(auth) diff --git a/pkg/platform/api/mediator/mediator.go b/pkg/platform/api/mediator/mediator.go index 193f43a45b..67d744fdec 100644 --- a/pkg/platform/api/mediator/mediator.go +++ b/pkg/platform/api/mediator/mediator.go @@ -1,14 +1,14 @@ package mediator import ( - "github.com/ActiveState/cli/internal/gqlclient" + "github.com/ActiveState/cli/internal/graphql" "github.com/ActiveState/cli/pkg/platform/api" "github.com/ActiveState/cli/pkg/platform/authentication" ) -func New(auth *authentication.Auth) *gqlclient.Client { +func New(auth *authentication.Auth) *graphql.Client { url := api.GetServiceURL(api.ServiceMediator) - c := gqlclient.New(url.String(), 0) + c := graphql.New(url.String(), 0) if auth != nil { c.SetTokenProvider(auth) } diff --git a/pkg/platform/api/vulnerabilities/vulnerabilities.go b/pkg/platform/api/vulnerabilities/vulnerabilities.go index 7e49978dc2..9861444cba 100644 --- a/pkg/platform/api/vulnerabilities/vulnerabilities.go +++ b/pkg/platform/api/vulnerabilities/vulnerabilities.go @@ -1,13 +1,13 @@ package vulnerabilities import ( - "github.com/ActiveState/cli/internal/gqlclient" + "github.com/ActiveState/cli/internal/graphql" "github.com/ActiveState/cli/pkg/platform/api" "github.com/ActiveState/cli/pkg/platform/authentication" ) -func New(auth *authentication.Auth) *gqlclient.Client { - client := gqlclient.New(api.GetServiceURL(api.ServiceVulnerabilities).String(), 0) +func New(auth *authentication.Auth) *graphql.Client { + client := graphql.New(api.GetServiceURL(api.ServiceVulnerabilities).String(), 0) // Most requests to this service require authentication if auth != nil && auth.Authenticated() { diff --git a/pkg/platform/model/buildplanner/build.go b/pkg/platform/model/buildplanner/build.go index 812d40385a..a9d6c9ad3b 100644 --- a/pkg/platform/model/buildplanner/build.go +++ b/pkg/platform/model/buildplanner/build.go @@ -9,7 +9,6 @@ import ( "time" "github.com/ActiveState/cli/internal/errs" - "github.com/ActiveState/cli/internal/gqlclient" "github.com/ActiveState/cli/internal/graphql" "github.com/ActiveState/cli/internal/locale" "github.com/ActiveState/cli/internal/logging" @@ -50,7 +49,7 @@ func (c *Commit) BuildScript() *buildscript.BuildScript { return c.buildscript } -func (c *client) Run(req gqlclient.Request, resp interface{}) error { +func (c *client) Run(req graphql.Request, resp interface{}) error { return c.gqlClient.Run(req, resp) } diff --git a/pkg/platform/model/buildplanner/buildplanner.go b/pkg/platform/model/buildplanner/buildplanner.go index dd566307ba..04533bbe6a 100644 --- a/pkg/platform/model/buildplanner/buildplanner.go +++ b/pkg/platform/model/buildplanner/buildplanner.go @@ -3,7 +3,6 @@ package buildplanner import ( "time" - "github.com/ActiveState/cli/internal/gqlclient" "github.com/ActiveState/cli/internal/graphql" "github.com/ActiveState/cli/internal/logging" "github.com/ActiveState/cli/pkg/platform/api" @@ -13,7 +12,7 @@ import ( const clientDeprecationErrorKey = "CLIENT_DEPRECATION_ERROR" type client struct { - gqlClient *gqlclient.Client + gqlClient *graphql.Client } type BuildPlanner struct { @@ -41,7 +40,7 @@ func NewBuildPlannerModel(auth *authentication.Auth, cache cacher) *BuildPlanner bpURL := api.GetServiceURL(api.ServiceBuildPlanner).String() logging.Debug("Using build planner at: %s", bpURL) - gqlClient := gqlclient.NewWithOpts(bpURL, 0, graphql.WithHTTPClient(api.NewHTTPClient())) + gqlClient := graphql.NewWithOpts(bpURL, 0, graphql.WithHTTPClient(api.NewHTTPClient())) if auth != nil && auth.Authenticated() { gqlClient.SetTokenProvider(auth) diff --git a/pkg/platform/model/svc.go b/pkg/platform/model/svc.go index c61a660b6a..1fde4a4576 100644 --- a/pkg/platform/model/svc.go +++ b/pkg/platform/model/svc.go @@ -10,7 +10,6 @@ import ( "github.com/ActiveState/cli/internal/condition" "github.com/ActiveState/cli/internal/errs" - "github.com/ActiveState/cli/internal/gqlclient" "github.com/ActiveState/cli/internal/graph" "github.com/ActiveState/cli/internal/graphql" "github.com/ActiveState/cli/internal/logging" @@ -23,7 +22,7 @@ import ( var SvcTimeoutMinimal = time.Millisecond * 500 type SvcModel struct { - client *gqlclient.Client + client *graphql.Client } // NewSvcModel returns a model for all client connections to a State Svc. This function returns an error if the State service is not yet ready to communicate. @@ -31,7 +30,7 @@ func NewSvcModel(port string) *SvcModel { localURL := "http://127.0.0.1" + port + "/query" return &SvcModel{ - client: gqlclient.NewWithOpts(localURL, 0, graphql.WithHTTPClient(&http.Client{})), + client: graphql.NewWithOpts(localURL, 0, graphql.WithHTTPClient(&http.Client{})), } } @@ -40,12 +39,12 @@ func (m *SvcModel) EnableDebugLog() { m.client.EnableDebugLog() } -func (m *SvcModel) request(ctx context.Context, request gqlclient.Request, resp interface{}) error { +func (m *SvcModel) request(ctx context.Context, request graphql.Request, resp interface{}) error { defer profile.Measure("SvcModel:request", time.Now()) err := m.client.RunWithContext(ctx, request, resp) if err != nil { - reqError := &gqlclient.RequestError{} + reqError := &graphql.RequestError{} if errors.As(err, &reqError) && (!condition.BuiltViaCI() || condition.InTest()) { vars, err := request.Vars() if err != nil { From b3a22a5ebff0bde5aa11ef3a267fb4351b870df1 Mon Sep 17 00:00:00 2001 From: mdrakos Date: Wed, 20 Nov 2024 14:11:33 -0800 Subject: [PATCH 063/336] Remove RemediableError type --- pkg/platform/api/buildplanner/response/commit.go | 2 +- pkg/platform/api/buildplanner/types/errors.go | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/pkg/platform/api/buildplanner/response/commit.go b/pkg/platform/api/buildplanner/response/commit.go index b8923ed37f..74e4ec204c 100644 --- a/pkg/platform/api/buildplanner/response/commit.go +++ b/pkg/platform/api/buildplanner/response/commit.go @@ -38,7 +38,7 @@ func processPlanningError(message string, subErrors []*BuildExprError) error { } } - if se.Type != types.RemediableSolveErrorType && se.Type != types.GenericSolveErrorType && se.Type != types.RemediableError { + if se.Type != types.RemediableSolveErrorType && se.Type != types.GenericSolveErrorType { continue } diff --git a/pkg/platform/api/buildplanner/types/errors.go b/pkg/platform/api/buildplanner/types/errors.go index e4dd6d894a..e3f234d30a 100644 --- a/pkg/platform/api/buildplanner/types/errors.go +++ b/pkg/platform/api/buildplanner/types/errors.go @@ -10,7 +10,6 @@ const ( HeadOnBranchMovedErrorType = "HeadOnBranchMoved" ForbiddenErrorType = "Forbidden" GenericSolveErrorType = "GenericSolveError" - RemediableError = "RemediableError" RemediableSolveErrorType = "RemediableSolveError" PlanningErrorType = "PlanningError" MergeConflictType = "MergeConflict" From 5f2e02e9e9258cb3e0df1e626af076f8bc3b78bd Mon Sep 17 00:00:00 2001 From: mdrakos Date: Wed, 20 Nov 2024 15:04:06 -0800 Subject: [PATCH 064/336] Minor cleanup --- internal/graphql/graphql.go | 26 +++++++++++--------------- 1 file changed, 11 insertions(+), 15 deletions(-) diff --git a/internal/graphql/graphql.go b/internal/graphql/graphql.go index 86278ae0bb..283e6c0b1e 100644 --- a/internal/graphql/graphql.go +++ b/internal/graphql/graphql.go @@ -227,7 +227,7 @@ func (c *Client) RunWithContext(ctx context.Context, req Request, resp interface if header, ok := req.(RequestWithHeaders); ok { for key, values := range header.Headers() { for _, value := range values { - gqlRequest.Header.Set(key, value) + gqlRequest.Header.Add(key, value) } } } @@ -244,7 +244,7 @@ func (c *Client) RunWithContext(ctx context.Context, req Request, resp interface return c.runWithJSON(ctx, gqlRequest, resp) } -func (c *Client) runWithJSON(ctx context.Context, req *GQLRequest, resp interface{}) error { +func (c *Client) runWithJSON(ctx context.Context, req *gqlRequest, resp interface{}) error { var requestBody bytes.Buffer requestBodyObj := struct { Query string `json:"query"` @@ -297,7 +297,7 @@ func (c *Client) runWithJSON(ctx context.Context, req *GQLRequest, resp interfac return c.marshalResponse(intermediateResp, resp) } -func (c *Client) runWithPostFields(ctx context.Context, req *GQLRequest, resp interface{}) error { +func (c *Client) runWithPostFields(ctx context.Context, req *gqlRequest, resp interface{}) error { var requestBody bytes.Buffer writer := multipart.NewWriter(&requestBody) if err := writer.WriteField("query", req.q); err != nil { @@ -369,12 +369,12 @@ func (c *Client) runWithPostFields(ctx context.Context, req *GQLRequest, resp in return c.marshalResponse(intermediateResp, resp) } -type JsonRequest struct { +type jsonRequest struct { Query string `json:"query"` Variables map[string]interface{} `json:"variables"` } -func (c *Client) runWithFiles(ctx context.Context, request *GQLRequest, response interface{}) error { +func (c *Client) runWithFiles(ctx context.Context, request *gqlRequest, response interface{}) error { // Construct the multi-part request. bodyReader, bodyWriter := io.Pipe() @@ -407,7 +407,7 @@ func (c *Client) runWithFiles(ctx context.Context, request *GQLRequest, response return } - jsonReq := JsonRequest{ + jsonReq := jsonRequest{ Query: request.q, Variables: vars, } @@ -614,7 +614,7 @@ type graphResponse struct { } // Request is a GraphQL request. -type GQLRequest struct { +type gqlRequest struct { q string vars map[string]interface{} files []File @@ -625,8 +625,8 @@ type GQLRequest struct { } // newRequest makes a new Request with the specified string. -func newRequest(q string) *GQLRequest { - req := &GQLRequest{ +func newRequest(q string) *gqlRequest { + req := &gqlRequest{ q: q, Header: make(map[string][]string), } @@ -634,7 +634,7 @@ func newRequest(q string) *GQLRequest { } // Var sets a variable. -func (req *GQLRequest) Var(key string, value interface{}) { +func (req *gqlRequest) Var(key string, value interface{}) { if req.vars == nil { req.vars = make(map[string]interface{}) } @@ -644,7 +644,7 @@ func (req *GQLRequest) Var(key string, value interface{}) { // File sets a file to upload. // Files are only supported with a Client that was created with // the UseMultipartForm option. -func (req *GQLRequest) File(fieldname, filename string, r io.Reader) { +func (req *gqlRequest) File(fieldname, filename string, r io.Reader) { req.files = append(req.files, File{ Field: fieldname, Name: filename, @@ -652,10 +652,6 @@ func (req *GQLRequest) File(fieldname, filename string, r io.Reader) { }) } -func (req *GQLRequest) Files() []File { - return req.files -} - // File represents a File to upload. type File struct { Field string From fbec1ec1cf0259dbf18674113e241d6fbc88c3c6 Mon Sep 17 00:00:00 2001 From: mdrakos Date: Wed, 20 Nov 2024 16:00:47 -0800 Subject: [PATCH 065/336] Rename messages to notifications --- cmd/state-svc/gqlgen.yml | 4 +- .../{messages => notifications}/condition.go | 2 +- .../notifications.go} | 122 +- .../notifications_test.go} | 80 +- cmd/state-svc/internal/resolver/resolver.go | 10 +- .../internal/server/generated/generated.go | 1212 ++++++----------- cmd/state-svc/schema/schema.graphqls | 18 +- .../messenger.go => notifier/notifier.go} | 58 +- cmd/state/main.go | 8 +- internal/constants/constants.go | 4 +- internal/graph/generated.go | 118 +- pkg/platform/api/svc/request/messaging.go | 31 - pkg/platform/api/svc/request/notification.go | 31 + pkg/platform/model/svc.go | 12 +- ...g_int_test.go => notification_int_test.go} | 84 +- 15 files changed, 687 insertions(+), 1107 deletions(-) rename cmd/state-svc/internal/{messages => notifications}/condition.go (98%) rename cmd/state-svc/internal/{messages/messages.go => notifications/notifications.go} (50%) rename cmd/state-svc/internal/{messages/messages_test.go => notifications/notifications_test.go} (78%) rename cmd/state/internal/cmdtree/exechandlers/{messenger/messenger.go => notifier/notifier.go} (53%) delete mode 100644 pkg/platform/api/svc/request/messaging.go create mode 100644 pkg/platform/api/svc/request/notification.go rename test/integration/{msg_int_test.go => notification_int_test.go} (62%) diff --git a/cmd/state-svc/gqlgen.yml b/cmd/state-svc/gqlgen.yml index 0c6a28fb70..476087864a 100644 --- a/cmd/state-svc/gqlgen.yml +++ b/cmd/state-svc/gqlgen.yml @@ -39,8 +39,8 @@ model: # gqlgen will search for any type names in the schema in these go packages # if they match it will use them, otherwise it will generate them. -autobind: - - "github.com/ActiveState/cli/internal/graph" +# autobind: +# - "github.com/ActiveState/cli/internal/graph" # This section declares type mapping between the GraphQL and go type systems # diff --git a/cmd/state-svc/internal/messages/condition.go b/cmd/state-svc/internal/notifications/condition.go similarity index 98% rename from cmd/state-svc/internal/messages/condition.go rename to cmd/state-svc/internal/notifications/condition.go index 5e39e8326e..2645dd98ea 100644 --- a/cmd/state-svc/internal/messages/condition.go +++ b/cmd/state-svc/internal/notifications/condition.go @@ -1,4 +1,4 @@ -package messages +package notifications import ( "regexp" diff --git a/cmd/state-svc/internal/messages/messages.go b/cmd/state-svc/internal/notifications/notifications.go similarity index 50% rename from cmd/state-svc/internal/messages/messages.go rename to cmd/state-svc/internal/notifications/notifications.go index 37581d067b..6d65b35393 100644 --- a/cmd/state-svc/internal/messages/messages.go +++ b/cmd/state-svc/internal/notifications/notifications.go @@ -1,4 +1,4 @@ -package messages +package notifications import ( "encoding/json" @@ -25,7 +25,7 @@ import ( const ConfigKeyLastReport = "messages.last_reported" -type Messages struct { +type Notifications struct { cfg *config.Instance auth *auth.Auth baseParams *ConditionParams @@ -33,7 +33,7 @@ type Messages struct { checkMutex sync.Mutex } -func New(cfg *config.Instance, auth *auth.Auth) (*Messages, error) { +func New(cfg *config.Instance, auth *auth.Auth) (*Notifications, error) { osVersion, err := sysinfo.OSVersion() if err != nil { return nil, errs.Wrap(err, "Could not get OS version") @@ -52,7 +52,7 @@ func New(cfg *config.Instance, auth *auth.Auth) (*Messages, error) { return resp, err }) - return &Messages{ + return &Notifications{ baseParams: &ConditionParams{ OS: sysinfo.OS().String(), OSVersion: NewVersionFromSysinfo(osVersion), @@ -65,22 +65,22 @@ func New(cfg *config.Instance, auth *auth.Auth) (*Messages, error) { }, nil } -func (m *Messages) Close() error { +func (m *Notifications) Close() error { m.poll.Close() return nil } -func (m *Messages) Check(command string, flags []string) ([]*graph.MessageInfo, error) { - // Prevent multiple checks at the same time, which could lead to the same message showing multiple times +func (m *Notifications) Check(command string, flags []string) ([]*graph.NotificationInfo, error) { + // Prevent multiple checks at the same time, which could lead to the same notification showing multiple times m.checkMutex.Lock() defer m.checkMutex.Unlock() cacheValue := m.poll.ValueFromCache() if cacheValue == nil { - return []*graph.MessageInfo{}, nil + return []*graph.NotificationInfo{}, nil } - allMessages, ok := cacheValue.([]*graph.MessageInfo) + allNotifications, ok := cacheValue.([]*graph.NotificationInfo) if !ok { return nil, errs.New("cacheValue has unexpected type: %T", cacheValue) } @@ -95,10 +95,10 @@ func (m *Messages) Check(command string, flags []string) ([]*graph.MessageInfo, conditionParams.UserID = id.String() } - logging.Debug("Checking %d messages with params: %#v", len(allMessages), conditionParams) + logging.Debug("Checking %d notifications with params: %#v", len(allNotifications), conditionParams) lastReportMap := m.cfg.GetStringMap(ConfigKeyLastReport) - msgs, err := check(&conditionParams, allMessages, lastReportMap, time.Now()) + msgs, err := check(&conditionParams, allNotifications, lastReportMap, time.Now()) if err != nil { return nil, errs.Wrap(err, "Could not check messages") } @@ -106,27 +106,27 @@ func (m *Messages) Check(command string, flags []string) ([]*graph.MessageInfo, lastReportMap[msg.ID] = time.Now().Format(time.RFC3339) } if err := m.cfg.Set(ConfigKeyLastReport, lastReportMap); err != nil { - return nil, errs.Wrap(err, "Could not save last reported messages") + return nil, errs.Wrap(err, "Could not save last reported notifications") } return msgs, nil } -func messageInDateRange(message *graph.MessageInfo, baseTime time.Time) (bool, error) { - if message.StartDate != "" { - startDate, err := time.Parse(time.RFC3339, message.StartDate) +func notificationInDateRange(notification *graph.NotificationInfo, baseTime time.Time) (bool, error) { + if notification.StartDate != "" { + startDate, err := time.Parse(time.RFC3339, notification.StartDate) if err != nil { - return false, errs.Wrap(err, "Could not parse start date for message %s", message.ID) + return false, errs.Wrap(err, "Could not parse start date for notification %s", notification.ID) } if baseTime.Before(startDate) { return false, nil } } - if message.EndDate != "" { - endDate, err := time.Parse(time.RFC3339, message.EndDate) + if notification.EndDate != "" { + endDate, err := time.Parse(time.RFC3339, notification.EndDate) if err != nil { - return false, errs.Wrap(err, "Could not parse end date for message %s", message.ID) + return false, errs.Wrap(err, "Could not parse end date for notification %s", notification.ID) } if baseTime.After(endDate) { return false, nil @@ -136,73 +136,73 @@ func messageInDateRange(message *graph.MessageInfo, baseTime time.Time) (bool, e return true, nil } -func check(params *ConditionParams, messages []*graph.MessageInfo, lastReportMap map[string]interface{}, baseTime time.Time) ([]*graph.MessageInfo, error) { +func check(params *ConditionParams, notifications []*graph.NotificationInfo, lastReportMap map[string]interface{}, baseTime time.Time) ([]*graph.NotificationInfo, error) { funcMap := conditionFuncMap() - filteredMessages := []*graph.MessageInfo{} - for _, message := range messages { - logging.Debug("Checking message %s", message.ID) + filteredNotifications := []*graph.NotificationInfo{} + for _, notification := range notifications { + logging.Debug("Checking notification %s", notification.ID) // Ensure we don't show the same message too often - if lastReport, ok := lastReportMap[message.ID]; ok { + if lastReport, ok := lastReportMap[notification.ID]; ok { lr, ok := lastReport.(string) if !ok { - return nil, errs.New("Could not get last reported time for message %s as it's not a string: %T", message.ID, lastReport) + return nil, errs.New("Could not get last reported time for notification %s as it's not a string: %T", notification.ID, lastReport) } lastReportTime, err := time.Parse(time.RFC3339, lr) if err != nil { - return nil, errs.New("Could not parse last reported time for message %s as it's not a valid RFC3339 value: %v", message.ID, lastReport) + return nil, errs.New("Could not parse last reported time for notification %s as it's not a valid RFC3339 value: %v", notification.ID, lastReport) } lastReportTimeAgo := baseTime.Sub(lastReportTime) - showMessage, err := repeatValid(message.Repeat, lastReportTimeAgo) + showNotification, err := repeatValid(notification.Repeat, lastReportTimeAgo) if err != nil { - return nil, errs.Wrap(err, "Could not validate repeat for message %s", message.ID) + return nil, errs.Wrap(err, "Could not validate repeat for notification %s", notification.ID) } - if !showMessage { - logging.Debug("Skipping message %s as it was shown %s ago", message.ID, lastReportTimeAgo) + if !showNotification { + logging.Debug("Skipping notification %s as it was shown %s ago", notification.ID, lastReportTimeAgo) continue } } // Check if message is within date range - inRange, err := messageInDateRange(message, baseTime) + inRange, err := notificationInDateRange(notification, baseTime) if err != nil { - logging.Warning("Could not check if message %s is in date range: %v", message.ID, err) + logging.Warning("Could not check if notification %s is in date range: %v", notification.ID, err) continue } if !inRange { - logging.Debug("Skipping message %s as it is outside of its date range", message.ID) + logging.Debug("Skipping notification %s as it is outside of its date range", notification.ID) continue } // Validate the conditional - if message.Condition != "" { - result, err := strutils.ParseTemplate(fmt.Sprintf(`{{%s}}`, message.Condition), params, funcMap) + if notification.Condition != "" { + result, err := strutils.ParseTemplate(fmt.Sprintf(`{{%s}}`, notification.Condition), params, funcMap) if err != nil { - logging.Warning("Could not parse condition template for message %s: %v", message.ID, err) + logging.Warning("Could not parse condition template for notification %s: %v", notification.ID, err) continue } if result == "true" { - logging.Debug("Including message %s as condition %s evaluated to %s", message.ID, message.Condition, result) - filteredMessages = append(filteredMessages, message) + logging.Debug("Including notification %s as condition %s evaluated to %s", notification.ID, notification.Condition, result) + filteredNotifications = append(filteredNotifications, notification) } else { - logging.Debug("Skipping message %s as condition %s evaluated to %s", message.ID, message.Condition, result) + logging.Debug("Skipping notification %s as condition %s evaluated to %s", notification.ID, notification.Condition, result) } } else { - logging.Debug("Including message %s as it has no condition", message.ID) - filteredMessages = append(filteredMessages, message) + logging.Debug("Including notification %s as it has no condition", notification.ID) + filteredNotifications = append(filteredNotifications, notification) } } - return filteredMessages, nil + return filteredNotifications, nil } -func fetch() ([]*graph.MessageInfo, error) { +func fetch() ([]*graph.NotificationInfo, error) { var body []byte var err error - if v := os.Getenv(constants.MessagesOverrideEnvVarName); v != "" { + if v := os.Getenv(constants.NotificationsOverrideEnvVarName); v != "" { body, err = fileutils.ReadFile(v) if err != nil { return nil, errs.Wrap(err, "Could not read messages override file") @@ -214,40 +214,40 @@ func fetch() ([]*graph.MessageInfo, error) { } } - var messages []*graph.MessageInfo - if err := json.Unmarshal(body, &messages); err != nil { + var notifications []*graph.NotificationInfo + if err := json.Unmarshal(body, ¬ifications); err != nil { return nil, errs.Wrap(err, "Could not unmarshall messages information") } // Set defaults - for _, message := range messages { - if message.Placement == "" { - message.Placement = graph.MessagePlacementTypeBeforeCmd + for _, notification := range notifications { + if notification.Placement == "" { + notification.Placement = graph.NotificationPlacementTypeBeforeCmd } - if message.Interrupt == "" { - message.Interrupt = graph.MessageInterruptTypeDisabled + if notification.Interrupt == "" { + notification.Interrupt = graph.NotificationInterruptTypeDisabled } - if message.Repeat == "" { - message.Repeat = graph.MessageRepeatTypeDisabled + if notification.Repeat == "" { + notification.Repeat = graph.NotificationRepeatTypeDisabled } } - return messages, nil + return notifications, nil } -func repeatValid(repeatType graph.MessageRepeatType, lastReportTimeAgo time.Duration) (bool, error) { +func repeatValid(repeatType graph.NotificationRepeatType, lastReportTimeAgo time.Duration) (bool, error) { switch repeatType { - case graph.MessageRepeatTypeConstantly: + case graph.NotificationRepeatTypeConstantly: return true, nil - case graph.MessageRepeatTypeDisabled: + case graph.NotificationRepeatTypeDisabled: return false, nil - case graph.MessageRepeatTypeHourly: + case graph.NotificationRepeatTypeHourly: return lastReportTimeAgo >= time.Hour, nil - case graph.MessageRepeatTypeDaily: + case graph.NotificationRepeatTypeDaily: return lastReportTimeAgo >= 24*time.Hour, nil - case graph.MessageRepeatTypeWeekly: + case graph.NotificationRepeatTypeWeekly: return lastReportTimeAgo >= 7*24*time.Hour, nil - case graph.MessageRepeatTypeMonthly: + case graph.NotificationRepeatTypeMonthly: return lastReportTimeAgo >= 30*24*time.Hour, nil default: return false, errs.New("Unknown repeat type: %s", repeatType) diff --git a/cmd/state-svc/internal/messages/messages_test.go b/cmd/state-svc/internal/notifications/notifications_test.go similarity index 78% rename from cmd/state-svc/internal/messages/messages_test.go rename to cmd/state-svc/internal/notifications/notifications_test.go index 186bc6719e..fae1dd5e3b 100644 --- a/cmd/state-svc/internal/messages/messages_test.go +++ b/cmd/state-svc/internal/notifications/notifications_test.go @@ -1,4 +1,4 @@ -package messages +package notifications import ( "reflect" @@ -14,7 +14,7 @@ func Test_check(t *testing.T) { baseTime := time.Now() type args struct { params *ConditionParams - messages []*graph.MessageInfo + notifications []*graph.NotificationInfo lastReportMap map[string]interface{} baseTime time.Time } @@ -28,7 +28,7 @@ func Test_check(t *testing.T) { "No special conditions", args{ params: &ConditionParams{}, - messages: []*graph.MessageInfo{ + notifications: []*graph.NotificationInfo{ {ID: "A"}, {ID: "B"}, {ID: "C"}, }, lastReportMap: map[string]interface{}{}, @@ -43,7 +43,7 @@ func Test_check(t *testing.T) { params: &ConditionParams{ Command: "foo", }, - messages: []*graph.MessageInfo{ + notifications: []*graph.NotificationInfo{ {ID: "A", Condition: `eq .Command "bar"`}, {ID: "B", Condition: `eq .Command "foo"`}, {ID: "C", Condition: `eq .Command "foobar"`}, @@ -60,7 +60,7 @@ func Test_check(t *testing.T) { params: &ConditionParams{ UserEmail: "john@doe.org", }, - messages: []*graph.MessageInfo{ + notifications: []*graph.NotificationInfo{ {ID: "A", Condition: `contains .UserEmail "john"`}, {ID: "B", Condition: `contains .UserEmail "fred"`}, }, @@ -76,7 +76,7 @@ func Test_check(t *testing.T) { params: &ConditionParams{ UserEmail: "john@doe.org", }, - messages: []*graph.MessageInfo{ + notifications: []*graph.NotificationInfo{ {ID: "A", Condition: `hasPrefix .UserEmail "john"`}, {ID: "B", Condition: `hasPrefix .UserEmail "org"`}, }, @@ -92,7 +92,7 @@ func Test_check(t *testing.T) { params: &ConditionParams{ UserEmail: "john@doe.org", }, - messages: []*graph.MessageInfo{ + notifications: []*graph.NotificationInfo{ {ID: "A", Condition: `hasSuffix .UserEmail "john"`}, {ID: "B", Condition: `hasSuffix .UserEmail "org"`}, }, @@ -108,7 +108,7 @@ func Test_check(t *testing.T) { params: &ConditionParams{ UserEmail: "john@doe.org", }, - messages: []*graph.MessageInfo{ + notifications: []*graph.NotificationInfo{ {ID: "A", Condition: `regexMatch .UserEmail ".*@doe.org$"`}, {ID: "B", Condition: `regexMatch .UserEmail "^doe.org$"`}, }, @@ -124,7 +124,7 @@ func Test_check(t *testing.T) { params: &ConditionParams{ UserEmail: "john@doe.org", }, - messages: []*graph.MessageInfo{ + notifications: []*graph.NotificationInfo{ {ID: "A", Condition: `regexMatch .UserEmail ".*@doe.org$"`}, {ID: "B", Condition: `regexMatch .UserEmail ".*("`}, }, @@ -140,7 +140,7 @@ func Test_check(t *testing.T) { params: &ConditionParams{ StateVersion: NewVersionFromSemver(semver.MustParse("7.8.9-SHA123456a7b")), }, - messages: []*graph.MessageInfo{ + notifications: []*graph.NotificationInfo{ {ID: "A", Condition: `eq .StateVersion.Major 7`}, {ID: "B", Condition: `eq .StateVersion.Minor 8`}, {ID: "C", Condition: `eq .StateVersion.Patch 9`}, @@ -160,10 +160,10 @@ func Test_check(t *testing.T) { "Repeat Disabled", args{ params: &ConditionParams{}, - messages: []*graph.MessageInfo{ - {ID: "A", Repeat: graph.MessageRepeatTypeDisabled}, - {ID: "B", Repeat: graph.MessageRepeatTypeDisabled}, - {ID: "C", Repeat: graph.MessageRepeatTypeDisabled}, + notifications: []*graph.NotificationInfo{ + {ID: "A", Repeat: graph.NotificationRepeatTypeDisabled}, + {ID: "B", Repeat: graph.NotificationRepeatTypeDisabled}, + {ID: "C", Repeat: graph.NotificationRepeatTypeDisabled}, }, lastReportMap: map[string]interface{}{ "A": baseTime.Format(time.RFC3339), @@ -178,10 +178,10 @@ func Test_check(t *testing.T) { "Repeat Constantly", args{ params: &ConditionParams{}, - messages: []*graph.MessageInfo{ - {ID: "A", Repeat: graph.MessageRepeatTypeConstantly}, - {ID: "B", Repeat: graph.MessageRepeatTypeConstantly}, - {ID: "C", Repeat: graph.MessageRepeatTypeConstantly}, + notifications: []*graph.NotificationInfo{ + {ID: "A", Repeat: graph.NotificationRepeatTypeConstantly}, + {ID: "B", Repeat: graph.NotificationRepeatTypeConstantly}, + {ID: "C", Repeat: graph.NotificationRepeatTypeConstantly}, }, lastReportMap: map[string]interface{}{ "A": baseTime.Format(time.RFC3339), @@ -196,10 +196,10 @@ func Test_check(t *testing.T) { "Repeat Hourly", args{ params: &ConditionParams{}, - messages: []*graph.MessageInfo{ - {ID: "A", Repeat: graph.MessageRepeatTypeHourly}, - {ID: "B", Repeat: graph.MessageRepeatTypeHourly}, - {ID: "C", Repeat: graph.MessageRepeatTypeHourly}, + notifications: []*graph.NotificationInfo{ + {ID: "A", Repeat: graph.NotificationRepeatTypeHourly}, + {ID: "B", Repeat: graph.NotificationRepeatTypeHourly}, + {ID: "C", Repeat: graph.NotificationRepeatTypeHourly}, }, lastReportMap: map[string]interface{}{ "A": baseTime.Format(time.RFC3339), @@ -215,10 +215,10 @@ func Test_check(t *testing.T) { "Repeat Daily", args{ params: &ConditionParams{}, - messages: []*graph.MessageInfo{ - {ID: "A", Repeat: graph.MessageRepeatTypeHourly}, - {ID: "B", Repeat: graph.MessageRepeatTypeHourly}, - {ID: "C", Repeat: graph.MessageRepeatTypeHourly}, + notifications: []*graph.NotificationInfo{ + {ID: "A", Repeat: graph.NotificationRepeatTypeHourly}, + {ID: "B", Repeat: graph.NotificationRepeatTypeHourly}, + {ID: "C", Repeat: graph.NotificationRepeatTypeHourly}, }, lastReportMap: map[string]interface{}{ "A": baseTime.Format(time.RFC3339), @@ -234,10 +234,10 @@ func Test_check(t *testing.T) { "Repeat Weekly", args{ params: &ConditionParams{}, - messages: []*graph.MessageInfo{ - {ID: "A", Repeat: graph.MessageRepeatTypeHourly}, - {ID: "B", Repeat: graph.MessageRepeatTypeHourly}, - {ID: "C", Repeat: graph.MessageRepeatTypeHourly}, + notifications: []*graph.NotificationInfo{ + {ID: "A", Repeat: graph.NotificationRepeatTypeHourly}, + {ID: "B", Repeat: graph.NotificationRepeatTypeHourly}, + {ID: "C", Repeat: graph.NotificationRepeatTypeHourly}, }, lastReportMap: map[string]interface{}{ "A": baseTime.Format(time.RFC3339), @@ -253,10 +253,10 @@ func Test_check(t *testing.T) { "Repeat Monthly", args{ params: &ConditionParams{}, - messages: []*graph.MessageInfo{ - {ID: "A", Repeat: graph.MessageRepeatTypeHourly}, - {ID: "B", Repeat: graph.MessageRepeatTypeHourly}, - {ID: "C", Repeat: graph.MessageRepeatTypeHourly}, + notifications: []*graph.NotificationInfo{ + {ID: "A", Repeat: graph.NotificationRepeatTypeHourly}, + {ID: "B", Repeat: graph.NotificationRepeatTypeHourly}, + {ID: "C", Repeat: graph.NotificationRepeatTypeHourly}, }, lastReportMap: map[string]interface{}{ "A": baseTime.Format(time.RFC3339), @@ -272,7 +272,7 @@ func Test_check(t *testing.T) { "Date Range - Within Range", args{ params: &ConditionParams{}, - messages: []*graph.MessageInfo{ + notifications: []*graph.NotificationInfo{ {ID: "A", StartDate: baseTime.Add(-24 * time.Hour).Format(time.RFC3339), EndDate: baseTime.Add(24 * time.Hour).Format(time.RFC3339)}, {ID: "B", StartDate: baseTime.Add(-1 * time.Hour).Format(time.RFC3339), EndDate: baseTime.Add(1 * time.Hour).Format(time.RFC3339)}, {ID: "C", StartDate: baseTime.Add(1 * time.Hour).Format(time.RFC3339), EndDate: baseTime.Add(24 * time.Hour).Format(time.RFC3339)}, @@ -287,7 +287,7 @@ func Test_check(t *testing.T) { "Date Range - No Dates Specified", args{ params: &ConditionParams{}, - messages: []*graph.MessageInfo{ + notifications: []*graph.NotificationInfo{ {ID: "A"}, {ID: "B", StartDate: baseTime.Add(-1 * time.Hour).Format(time.RFC3339)}, {ID: "C", EndDate: baseTime.Add(1 * time.Hour).Format(time.RFC3339)}, @@ -302,7 +302,7 @@ func Test_check(t *testing.T) { "Date Range - Invalid Date Format", args{ params: &ConditionParams{}, - messages: []*graph.MessageInfo{ + notifications: []*graph.NotificationInfo{ {ID: "A", StartDate: "invalid-date"}, }, lastReportMap: map[string]interface{}{}, @@ -315,7 +315,7 @@ func Test_check(t *testing.T) { "Date Range - Only Start Date", args{ params: &ConditionParams{}, - messages: []*graph.MessageInfo{ + notifications: []*graph.NotificationInfo{ {ID: "A", StartDate: baseTime.Add(-1 * time.Hour).Format(time.RFC3339)}, {ID: "B", StartDate: baseTime.Add(1 * time.Hour).Format(time.RFC3339)}, }, @@ -329,7 +329,7 @@ func Test_check(t *testing.T) { "Date Range - Only End Date", args{ params: &ConditionParams{}, - messages: []*graph.MessageInfo{ + notifications: []*graph.NotificationInfo{ {ID: "A", EndDate: baseTime.Add(1 * time.Hour).Format(time.RFC3339)}, {ID: "B", EndDate: baseTime.Add(-1 * time.Hour).Format(time.RFC3339)}, }, @@ -342,7 +342,7 @@ func Test_check(t *testing.T) { } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - got, err := check(tt.args.params, tt.args.messages, tt.args.lastReportMap, tt.args.baseTime) + got, err := check(tt.args.params, tt.args.notifications, tt.args.lastReportMap, tt.args.baseTime) if (err != nil) != tt.wantErr { t.Errorf("check() error = %v, wantErr %v", errs.JoinMessage(err), tt.wantErr) return diff --git a/cmd/state-svc/internal/resolver/resolver.go b/cmd/state-svc/internal/resolver/resolver.go index ba91441e7f..4f218fefb8 100644 --- a/cmd/state-svc/internal/resolver/resolver.go +++ b/cmd/state-svc/internal/resolver/resolver.go @@ -11,7 +11,7 @@ import ( "github.com/ActiveState/cli/cmd/state-svc/internal/graphqltypes" "github.com/ActiveState/cli/cmd/state-svc/internal/hash" - "github.com/ActiveState/cli/cmd/state-svc/internal/messages" + "github.com/ActiveState/cli/cmd/state-svc/internal/notifications" "github.com/ActiveState/cli/cmd/state-svc/internal/rtwatcher" genserver "github.com/ActiveState/cli/cmd/state-svc/internal/server/generated" "github.com/ActiveState/cli/internal/analytics/client/sync" @@ -35,7 +35,7 @@ import ( type Resolver struct { cfg *config.Instance - messages *messages.Messages + messages *notifications.Notifications updatePoller *poller.Poller authPoller *poller.Poller projectIDCache *projectcache.ID @@ -50,7 +50,7 @@ type Resolver struct { // var _ genserver.ResolverRoot = &Resolver{} // Must implement ResolverRoot func New(cfg *config.Instance, an *sync.Client, auth *authentication.Auth) (*Resolver, error) { - msg, err := messages.New(cfg, auth) + msg, err := notifications.New(cfg, auth) if err != nil { return nil, errs.Wrap(err, "Could not initialize messages") } @@ -247,9 +247,9 @@ func (r *Resolver) ReportRuntimeUsage(_ context.Context, pid int, exec, source s return &graph.ReportRuntimeUsageResponse{Received: true}, nil } -func (r *Resolver) CheckMessages(ctx context.Context, command string, flags []string) ([]*graph.MessageInfo, error) { +func (r *Resolver) CheckNotifications(ctx context.Context, command string, flags []string) ([]*graph.NotificationInfo, error) { defer func() { panics.LogAndPanic(recover(), debug.Stack()) }() - logging.Debug("Check messages resolver") + logging.Debug("Check notifications resolver") return r.messages.Check(command, flags) } diff --git a/cmd/state-svc/internal/server/generated/generated.go b/cmd/state-svc/internal/server/generated/generated.go index cfb794c9ee..b290494161 100644 --- a/cmd/state-svc/internal/server/generated/generated.go +++ b/cmd/state-svc/internal/server/generated/generated.go @@ -79,21 +79,21 @@ type ComplexityRoot struct { User func(childComplexity int) int } - MessageInfo struct { - Condition func(childComplexity int) int - EndDate func(childComplexity int) int - ID func(childComplexity int) int - Interrupt func(childComplexity int) int - Message func(childComplexity int) int - Placement func(childComplexity int) int - Repeat func(childComplexity int) int - StartDate func(childComplexity int) int - } - Mutation struct { SetCache func(childComplexity int, key string, value string, expiry int) int } + NotificationInfo struct { + Condition func(childComplexity int) int + EndDate func(childComplexity int) int + ID func(childComplexity int) int + Interrupt func(childComplexity int) int + Notification func(childComplexity int) int + Placement func(childComplexity int) int + Repeat func(childComplexity int) int + StartDate func(childComplexity int) int + } + Organization struct { Role func(childComplexity int) int URLname func(childComplexity int) int @@ -112,7 +112,7 @@ type ComplexityRoot struct { Query struct { AnalyticsEvent func(childComplexity int, category string, action string, source string, label *string, dimensionsJSON string) int AvailableUpdate func(childComplexity int, desiredChannel string, desiredVersion string) int - CheckMessages func(childComplexity int, command string, flags []string) int + CheckNotifications func(childComplexity int, command string, flags []string) int ConfigChanged func(childComplexity int, key string) int FetchLogTail func(childComplexity int) int GetCache func(childComplexity int, key string) int @@ -157,7 +157,7 @@ type QueryResolver interface { Projects(ctx context.Context) ([]*graph.Project, error) AnalyticsEvent(ctx context.Context, category string, action string, source string, label *string, dimensionsJSON string) (*graph.AnalyticsEventResponse, error) ReportRuntimeUsage(ctx context.Context, pid int, exec string, source string, dimensionsJSON string) (*graph.ReportRuntimeUsageResponse, error) - CheckMessages(ctx context.Context, command string, flags []string) ([]*graph.MessageInfo, error) + CheckNotifications(ctx context.Context, command string, flags []string) ([]*graph.NotificationInfo, error) ConfigChanged(ctx context.Context, key string) (*graph.ConfigChangedResponse, error) FetchLogTail(ctx context.Context) (string, error) GetProcessesInUse(ctx context.Context, execDir string) ([]*graph.ProcessInfo, error) @@ -283,73 +283,73 @@ func (e *executableSchema) Complexity(typeName, field string, childComplexity in return e.complexity.JWT.User(childComplexity), true - case "MessageInfo.condition": - if e.complexity.MessageInfo.Condition == nil { + case "Mutation.setCache": + if e.complexity.Mutation.SetCache == nil { break } - return e.complexity.MessageInfo.Condition(childComplexity), true - - case "MessageInfo.endDate": - if e.complexity.MessageInfo.EndDate == nil { - break + args, err := ec.field_Mutation_setCache_args(context.TODO(), rawArgs) + if err != nil { + return 0, false } - return e.complexity.MessageInfo.EndDate(childComplexity), true + return e.complexity.Mutation.SetCache(childComplexity, args["key"].(string), args["value"].(string), args["expiry"].(int)), true - case "MessageInfo.id": - if e.complexity.MessageInfo.ID == nil { + case "NotificationInfo.condition": + if e.complexity.NotificationInfo.Condition == nil { break } - return e.complexity.MessageInfo.ID(childComplexity), true + return e.complexity.NotificationInfo.Condition(childComplexity), true - case "MessageInfo.interrupt": - if e.complexity.MessageInfo.Interrupt == nil { + case "NotificationInfo.endDate": + if e.complexity.NotificationInfo.EndDate == nil { break } - return e.complexity.MessageInfo.Interrupt(childComplexity), true + return e.complexity.NotificationInfo.EndDate(childComplexity), true - case "MessageInfo.message": - if e.complexity.MessageInfo.Message == nil { + case "NotificationInfo.id": + if e.complexity.NotificationInfo.ID == nil { break } - return e.complexity.MessageInfo.Message(childComplexity), true + return e.complexity.NotificationInfo.ID(childComplexity), true - case "MessageInfo.placement": - if e.complexity.MessageInfo.Placement == nil { + case "NotificationInfo.interrupt": + if e.complexity.NotificationInfo.Interrupt == nil { break } - return e.complexity.MessageInfo.Placement(childComplexity), true + return e.complexity.NotificationInfo.Interrupt(childComplexity), true - case "MessageInfo.repeat": - if e.complexity.MessageInfo.Repeat == nil { + case "NotificationInfo.notification": + if e.complexity.NotificationInfo.Notification == nil { break } - return e.complexity.MessageInfo.Repeat(childComplexity), true + return e.complexity.NotificationInfo.Notification(childComplexity), true - case "MessageInfo.startDate": - if e.complexity.MessageInfo.StartDate == nil { + case "NotificationInfo.placement": + if e.complexity.NotificationInfo.Placement == nil { break } - return e.complexity.MessageInfo.StartDate(childComplexity), true + return e.complexity.NotificationInfo.Placement(childComplexity), true - case "Mutation.setCache": - if e.complexity.Mutation.SetCache == nil { + case "NotificationInfo.repeat": + if e.complexity.NotificationInfo.Repeat == nil { break } - args, err := ec.field_Mutation_setCache_args(context.TODO(), rawArgs) - if err != nil { - return 0, false + return e.complexity.NotificationInfo.Repeat(childComplexity), true + + case "NotificationInfo.startDate": + if e.complexity.NotificationInfo.StartDate == nil { + break } - return e.complexity.Mutation.SetCache(childComplexity, args["key"].(string), args["value"].(string), args["expiry"].(int)), true + return e.complexity.NotificationInfo.StartDate(childComplexity), true case "Organization.role": if e.complexity.Organization.Role == nil { @@ -417,17 +417,17 @@ func (e *executableSchema) Complexity(typeName, field string, childComplexity in return e.complexity.Query.AvailableUpdate(childComplexity, args["desiredChannel"].(string), args["desiredVersion"].(string)), true - case "Query.checkMessages": - if e.complexity.Query.CheckMessages == nil { + case "Query.checkNotifications": + if e.complexity.Query.CheckNotifications == nil { break } - args, err := ec.field_Query_checkMessages_args(context.TODO(), rawArgs) + args, err := ec.field_Query_checkNotifications_args(context.TODO(), rawArgs) if err != nil { return 0, false } - return e.complexity.Query.CheckMessages(childComplexity, args["command"].(string), args["flags"].([]string)), true + return e.complexity.Query.CheckNotifications(childComplexity, args["command"].(string), args["flags"].([]string)), true case "Query.configChanged": if e.complexity.Query.ConfigChanged == nil { @@ -731,7 +731,7 @@ type ReportRuntimeUsageResponse { received: Boolean! } -enum MessageRepeatType { +enum NotificationRepeatType { Disabled Constantly Hourly @@ -740,26 +740,26 @@ enum MessageRepeatType { Monthly } -enum MessageInterruptType { +enum NotificationInterruptType { Disabled Prompt Exit } -enum MessagePlacementType { +enum NotificationPlacementType { BeforeCmd AfterCmd } -type MessageInfo { +type NotificationInfo { id: String! - message: String! + notification: String! condition: String! startDate: String! endDate: String! - repeat: MessageRepeatType! - interrupt: MessageInterruptType! - placement: MessagePlacementType! + repeat: NotificationRepeatType! + interrupt: NotificationInterruptType! + placement: NotificationPlacementType! } type Organization { @@ -796,7 +796,7 @@ type Query { projects: [Project]! analyticsEvent(category: String!, action: String!, source: String!, label: String, dimensionsJson: String!): AnalyticsEventResponse reportRuntimeUsage(pid: Int!, exec: String!, source: String!, dimensionsJson: String!): ReportRuntimeUsageResponse - checkMessages(command: String!, flags: [String!]!): [MessageInfo!]! + checkNotifications(command: String!, flags: [String!]!): [NotificationInfo!]! configChanged(key: String!): ConfigChangedResponse fetchLogTail: String! getProcessesInUse(execDir: String!): [ProcessInfo!]! @@ -830,710 +830,290 @@ var parsedSchema = gqlparser.MustLoadSchema(sources...) func (ec *executionContext) field_Mutation_setCache_args(ctx context.Context, rawArgs map[string]interface{}) (map[string]interface{}, error) { var err error args := map[string]interface{}{} - arg0, err := ec.field_Mutation_setCache_argsKey(ctx, rawArgs) - if err != nil { - return nil, err + var arg0 string + if tmp, ok := rawArgs["key"]; ok { + ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("key")) + arg0, err = ec.unmarshalNString2string(ctx, tmp) + if err != nil { + return nil, err + } } args["key"] = arg0 - arg1, err := ec.field_Mutation_setCache_argsValue(ctx, rawArgs) - if err != nil { - return nil, err + var arg1 string + if tmp, ok := rawArgs["value"]; ok { + ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("value")) + arg1, err = ec.unmarshalNString2string(ctx, tmp) + if err != nil { + return nil, err + } } args["value"] = arg1 - arg2, err := ec.field_Mutation_setCache_argsExpiry(ctx, rawArgs) - if err != nil { - return nil, err + var arg2 int + if tmp, ok := rawArgs["expiry"]; ok { + ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("expiry")) + arg2, err = ec.unmarshalNInt2int(ctx, tmp) + if err != nil { + return nil, err + } } args["expiry"] = arg2 return args, nil } -func (ec *executionContext) field_Mutation_setCache_argsKey( - ctx context.Context, - rawArgs map[string]interface{}, -) (string, error) { - // We won't call the directive if the argument is null. - // Set call_argument_directives_with_null to true to call directives - // even if the argument is null. - _, ok := rawArgs["key"] - if !ok { - var zeroVal string - return zeroVal, nil - } - - ctx = graphql.WithPathContext(ctx, graphql.NewPathWithField("key")) - if tmp, ok := rawArgs["key"]; ok { - return ec.unmarshalNString2string(ctx, tmp) - } - - var zeroVal string - return zeroVal, nil -} - -func (ec *executionContext) field_Mutation_setCache_argsValue( - ctx context.Context, - rawArgs map[string]interface{}, -) (string, error) { - // We won't call the directive if the argument is null. - // Set call_argument_directives_with_null to true to call directives - // even if the argument is null. - _, ok := rawArgs["value"] - if !ok { - var zeroVal string - return zeroVal, nil - } - - ctx = graphql.WithPathContext(ctx, graphql.NewPathWithField("value")) - if tmp, ok := rawArgs["value"]; ok { - return ec.unmarshalNString2string(ctx, tmp) - } - - var zeroVal string - return zeroVal, nil -} - -func (ec *executionContext) field_Mutation_setCache_argsExpiry( - ctx context.Context, - rawArgs map[string]interface{}, -) (int, error) { - // We won't call the directive if the argument is null. - // Set call_argument_directives_with_null to true to call directives - // even if the argument is null. - _, ok := rawArgs["expiry"] - if !ok { - var zeroVal int - return zeroVal, nil - } - - ctx = graphql.WithPathContext(ctx, graphql.NewPathWithField("expiry")) - if tmp, ok := rawArgs["expiry"]; ok { - return ec.unmarshalNInt2int(ctx, tmp) - } - - var zeroVal int - return zeroVal, nil -} func (ec *executionContext) field_Query___type_args(ctx context.Context, rawArgs map[string]interface{}) (map[string]interface{}, error) { var err error args := map[string]interface{}{} - arg0, err := ec.field_Query___type_argsName(ctx, rawArgs) - if err != nil { - return nil, err + var arg0 string + if tmp, ok := rawArgs["name"]; ok { + ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("name")) + arg0, err = ec.unmarshalNString2string(ctx, tmp) + if err != nil { + return nil, err + } } args["name"] = arg0 return args, nil } -func (ec *executionContext) field_Query___type_argsName( - ctx context.Context, - rawArgs map[string]interface{}, -) (string, error) { - // We won't call the directive if the argument is null. - // Set call_argument_directives_with_null to true to call directives - // even if the argument is null. - _, ok := rawArgs["name"] - if !ok { - var zeroVal string - return zeroVal, nil - } - - ctx = graphql.WithPathContext(ctx, graphql.NewPathWithField("name")) - if tmp, ok := rawArgs["name"]; ok { - return ec.unmarshalNString2string(ctx, tmp) - } - - var zeroVal string - return zeroVal, nil -} func (ec *executionContext) field_Query_analyticsEvent_args(ctx context.Context, rawArgs map[string]interface{}) (map[string]interface{}, error) { var err error args := map[string]interface{}{} - arg0, err := ec.field_Query_analyticsEvent_argsCategory(ctx, rawArgs) - if err != nil { - return nil, err + var arg0 string + if tmp, ok := rawArgs["category"]; ok { + ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("category")) + arg0, err = ec.unmarshalNString2string(ctx, tmp) + if err != nil { + return nil, err + } } args["category"] = arg0 - arg1, err := ec.field_Query_analyticsEvent_argsAction(ctx, rawArgs) - if err != nil { - return nil, err + var arg1 string + if tmp, ok := rawArgs["action"]; ok { + ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("action")) + arg1, err = ec.unmarshalNString2string(ctx, tmp) + if err != nil { + return nil, err + } } args["action"] = arg1 - arg2, err := ec.field_Query_analyticsEvent_argsSource(ctx, rawArgs) - if err != nil { - return nil, err + var arg2 string + if tmp, ok := rawArgs["source"]; ok { + ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("source")) + arg2, err = ec.unmarshalNString2string(ctx, tmp) + if err != nil { + return nil, err + } } args["source"] = arg2 - arg3, err := ec.field_Query_analyticsEvent_argsLabel(ctx, rawArgs) - if err != nil { - return nil, err + var arg3 *string + if tmp, ok := rawArgs["label"]; ok { + ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("label")) + arg3, err = ec.unmarshalOString2ᚖstring(ctx, tmp) + if err != nil { + return nil, err + } } args["label"] = arg3 - arg4, err := ec.field_Query_analyticsEvent_argsDimensionsJSON(ctx, rawArgs) - if err != nil { - return nil, err + var arg4 string + if tmp, ok := rawArgs["dimensionsJson"]; ok { + ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("dimensionsJson")) + arg4, err = ec.unmarshalNString2string(ctx, tmp) + if err != nil { + return nil, err + } } args["dimensionsJson"] = arg4 return args, nil } -func (ec *executionContext) field_Query_analyticsEvent_argsCategory( - ctx context.Context, - rawArgs map[string]interface{}, -) (string, error) { - // We won't call the directive if the argument is null. - // Set call_argument_directives_with_null to true to call directives - // even if the argument is null. - _, ok := rawArgs["category"] - if !ok { - var zeroVal string - return zeroVal, nil - } - - ctx = graphql.WithPathContext(ctx, graphql.NewPathWithField("category")) - if tmp, ok := rawArgs["category"]; ok { - return ec.unmarshalNString2string(ctx, tmp) - } - - var zeroVal string - return zeroVal, nil -} - -func (ec *executionContext) field_Query_analyticsEvent_argsAction( - ctx context.Context, - rawArgs map[string]interface{}, -) (string, error) { - // We won't call the directive if the argument is null. - // Set call_argument_directives_with_null to true to call directives - // even if the argument is null. - _, ok := rawArgs["action"] - if !ok { - var zeroVal string - return zeroVal, nil - } - - ctx = graphql.WithPathContext(ctx, graphql.NewPathWithField("action")) - if tmp, ok := rawArgs["action"]; ok { - return ec.unmarshalNString2string(ctx, tmp) - } - - var zeroVal string - return zeroVal, nil -} - -func (ec *executionContext) field_Query_analyticsEvent_argsSource( - ctx context.Context, - rawArgs map[string]interface{}, -) (string, error) { - // We won't call the directive if the argument is null. - // Set call_argument_directives_with_null to true to call directives - // even if the argument is null. - _, ok := rawArgs["source"] - if !ok { - var zeroVal string - return zeroVal, nil - } - - ctx = graphql.WithPathContext(ctx, graphql.NewPathWithField("source")) - if tmp, ok := rawArgs["source"]; ok { - return ec.unmarshalNString2string(ctx, tmp) - } - - var zeroVal string - return zeroVal, nil -} - -func (ec *executionContext) field_Query_analyticsEvent_argsLabel( - ctx context.Context, - rawArgs map[string]interface{}, -) (*string, error) { - // We won't call the directive if the argument is null. - // Set call_argument_directives_with_null to true to call directives - // even if the argument is null. - _, ok := rawArgs["label"] - if !ok { - var zeroVal *string - return zeroVal, nil - } - - ctx = graphql.WithPathContext(ctx, graphql.NewPathWithField("label")) - if tmp, ok := rawArgs["label"]; ok { - return ec.unmarshalOString2ᚖstring(ctx, tmp) - } - - var zeroVal *string - return zeroVal, nil -} - -func (ec *executionContext) field_Query_analyticsEvent_argsDimensionsJSON( - ctx context.Context, - rawArgs map[string]interface{}, -) (string, error) { - // We won't call the directive if the argument is null. - // Set call_argument_directives_with_null to true to call directives - // even if the argument is null. - _, ok := rawArgs["dimensionsJson"] - if !ok { - var zeroVal string - return zeroVal, nil - } - - ctx = graphql.WithPathContext(ctx, graphql.NewPathWithField("dimensionsJson")) - if tmp, ok := rawArgs["dimensionsJson"]; ok { - return ec.unmarshalNString2string(ctx, tmp) - } - - var zeroVal string - return zeroVal, nil -} func (ec *executionContext) field_Query_availableUpdate_args(ctx context.Context, rawArgs map[string]interface{}) (map[string]interface{}, error) { var err error args := map[string]interface{}{} - arg0, err := ec.field_Query_availableUpdate_argsDesiredChannel(ctx, rawArgs) - if err != nil { - return nil, err + var arg0 string + if tmp, ok := rawArgs["desiredChannel"]; ok { + ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("desiredChannel")) + arg0, err = ec.unmarshalNString2string(ctx, tmp) + if err != nil { + return nil, err + } } args["desiredChannel"] = arg0 - arg1, err := ec.field_Query_availableUpdate_argsDesiredVersion(ctx, rawArgs) - if err != nil { - return nil, err + var arg1 string + if tmp, ok := rawArgs["desiredVersion"]; ok { + ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("desiredVersion")) + arg1, err = ec.unmarshalNString2string(ctx, tmp) + if err != nil { + return nil, err + } } args["desiredVersion"] = arg1 return args, nil } -func (ec *executionContext) field_Query_availableUpdate_argsDesiredChannel( - ctx context.Context, - rawArgs map[string]interface{}, -) (string, error) { - // We won't call the directive if the argument is null. - // Set call_argument_directives_with_null to true to call directives - // even if the argument is null. - _, ok := rawArgs["desiredChannel"] - if !ok { - var zeroVal string - return zeroVal, nil - } - - ctx = graphql.WithPathContext(ctx, graphql.NewPathWithField("desiredChannel")) - if tmp, ok := rawArgs["desiredChannel"]; ok { - return ec.unmarshalNString2string(ctx, tmp) - } - - var zeroVal string - return zeroVal, nil -} - -func (ec *executionContext) field_Query_availableUpdate_argsDesiredVersion( - ctx context.Context, - rawArgs map[string]interface{}, -) (string, error) { - // We won't call the directive if the argument is null. - // Set call_argument_directives_with_null to true to call directives - // even if the argument is null. - _, ok := rawArgs["desiredVersion"] - if !ok { - var zeroVal string - return zeroVal, nil - } - - ctx = graphql.WithPathContext(ctx, graphql.NewPathWithField("desiredVersion")) - if tmp, ok := rawArgs["desiredVersion"]; ok { - return ec.unmarshalNString2string(ctx, tmp) - } - - var zeroVal string - return zeroVal, nil -} -func (ec *executionContext) field_Query_checkMessages_args(ctx context.Context, rawArgs map[string]interface{}) (map[string]interface{}, error) { +func (ec *executionContext) field_Query_checkNotifications_args(ctx context.Context, rawArgs map[string]interface{}) (map[string]interface{}, error) { var err error args := map[string]interface{}{} - arg0, err := ec.field_Query_checkMessages_argsCommand(ctx, rawArgs) - if err != nil { - return nil, err + var arg0 string + if tmp, ok := rawArgs["command"]; ok { + ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("command")) + arg0, err = ec.unmarshalNString2string(ctx, tmp) + if err != nil { + return nil, err + } } args["command"] = arg0 - arg1, err := ec.field_Query_checkMessages_argsFlags(ctx, rawArgs) - if err != nil { - return nil, err + var arg1 []string + if tmp, ok := rawArgs["flags"]; ok { + ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("flags")) + arg1, err = ec.unmarshalNString2ᚕstringᚄ(ctx, tmp) + if err != nil { + return nil, err + } } args["flags"] = arg1 return args, nil } -func (ec *executionContext) field_Query_checkMessages_argsCommand( - ctx context.Context, - rawArgs map[string]interface{}, -) (string, error) { - // We won't call the directive if the argument is null. - // Set call_argument_directives_with_null to true to call directives - // even if the argument is null. - _, ok := rawArgs["command"] - if !ok { - var zeroVal string - return zeroVal, nil - } - - ctx = graphql.WithPathContext(ctx, graphql.NewPathWithField("command")) - if tmp, ok := rawArgs["command"]; ok { - return ec.unmarshalNString2string(ctx, tmp) - } - - var zeroVal string - return zeroVal, nil -} - -func (ec *executionContext) field_Query_checkMessages_argsFlags( - ctx context.Context, - rawArgs map[string]interface{}, -) ([]string, error) { - // We won't call the directive if the argument is null. - // Set call_argument_directives_with_null to true to call directives - // even if the argument is null. - _, ok := rawArgs["flags"] - if !ok { - var zeroVal []string - return zeroVal, nil - } - - ctx = graphql.WithPathContext(ctx, graphql.NewPathWithField("flags")) - if tmp, ok := rawArgs["flags"]; ok { - return ec.unmarshalNString2ᚕstringᚄ(ctx, tmp) - } - - var zeroVal []string - return zeroVal, nil -} func (ec *executionContext) field_Query_configChanged_args(ctx context.Context, rawArgs map[string]interface{}) (map[string]interface{}, error) { var err error args := map[string]interface{}{} - arg0, err := ec.field_Query_configChanged_argsKey(ctx, rawArgs) - if err != nil { - return nil, err + var arg0 string + if tmp, ok := rawArgs["key"]; ok { + ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("key")) + arg0, err = ec.unmarshalNString2string(ctx, tmp) + if err != nil { + return nil, err + } } args["key"] = arg0 return args, nil } -func (ec *executionContext) field_Query_configChanged_argsKey( - ctx context.Context, - rawArgs map[string]interface{}, -) (string, error) { - // We won't call the directive if the argument is null. - // Set call_argument_directives_with_null to true to call directives - // even if the argument is null. - _, ok := rawArgs["key"] - if !ok { - var zeroVal string - return zeroVal, nil - } - - ctx = graphql.WithPathContext(ctx, graphql.NewPathWithField("key")) - if tmp, ok := rawArgs["key"]; ok { - return ec.unmarshalNString2string(ctx, tmp) - } - - var zeroVal string - return zeroVal, nil -} func (ec *executionContext) field_Query_getCache_args(ctx context.Context, rawArgs map[string]interface{}) (map[string]interface{}, error) { var err error args := map[string]interface{}{} - arg0, err := ec.field_Query_getCache_argsKey(ctx, rawArgs) - if err != nil { - return nil, err + var arg0 string + if tmp, ok := rawArgs["key"]; ok { + ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("key")) + arg0, err = ec.unmarshalNString2string(ctx, tmp) + if err != nil { + return nil, err + } } args["key"] = arg0 return args, nil } -func (ec *executionContext) field_Query_getCache_argsKey( - ctx context.Context, - rawArgs map[string]interface{}, -) (string, error) { - // We won't call the directive if the argument is null. - // Set call_argument_directives_with_null to true to call directives - // even if the argument is null. - _, ok := rawArgs["key"] - if !ok { - var zeroVal string - return zeroVal, nil - } - - ctx = graphql.WithPathContext(ctx, graphql.NewPathWithField("key")) - if tmp, ok := rawArgs["key"]; ok { - return ec.unmarshalNString2string(ctx, tmp) - } - - var zeroVal string - return zeroVal, nil -} func (ec *executionContext) field_Query_getProcessesInUse_args(ctx context.Context, rawArgs map[string]interface{}) (map[string]interface{}, error) { var err error args := map[string]interface{}{} - arg0, err := ec.field_Query_getProcessesInUse_argsExecDir(ctx, rawArgs) - if err != nil { - return nil, err + var arg0 string + if tmp, ok := rawArgs["execDir"]; ok { + ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("execDir")) + arg0, err = ec.unmarshalNString2string(ctx, tmp) + if err != nil { + return nil, err + } } args["execDir"] = arg0 return args, nil } -func (ec *executionContext) field_Query_getProcessesInUse_argsExecDir( - ctx context.Context, - rawArgs map[string]interface{}, -) (string, error) { - // We won't call the directive if the argument is null. - // Set call_argument_directives_with_null to true to call directives - // even if the argument is null. - _, ok := rawArgs["execDir"] - if !ok { - var zeroVal string - return zeroVal, nil - } - - ctx = graphql.WithPathContext(ctx, graphql.NewPathWithField("execDir")) - if tmp, ok := rawArgs["execDir"]; ok { - return ec.unmarshalNString2string(ctx, tmp) - } - - var zeroVal string - return zeroVal, nil -} func (ec *executionContext) field_Query_hashGlobs_args(ctx context.Context, rawArgs map[string]interface{}) (map[string]interface{}, error) { var err error args := map[string]interface{}{} - arg0, err := ec.field_Query_hashGlobs_argsWd(ctx, rawArgs) - if err != nil { - return nil, err + var arg0 string + if tmp, ok := rawArgs["wd"]; ok { + ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("wd")) + arg0, err = ec.unmarshalNString2string(ctx, tmp) + if err != nil { + return nil, err + } } args["wd"] = arg0 - arg1, err := ec.field_Query_hashGlobs_argsGlobs(ctx, rawArgs) - if err != nil { - return nil, err + var arg1 []string + if tmp, ok := rawArgs["globs"]; ok { + ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("globs")) + arg1, err = ec.unmarshalNString2ᚕstringᚄ(ctx, tmp) + if err != nil { + return nil, err + } } args["globs"] = arg1 return args, nil } -func (ec *executionContext) field_Query_hashGlobs_argsWd( - ctx context.Context, - rawArgs map[string]interface{}, -) (string, error) { - // We won't call the directive if the argument is null. - // Set call_argument_directives_with_null to true to call directives - // even if the argument is null. - _, ok := rawArgs["wd"] - if !ok { - var zeroVal string - return zeroVal, nil - } - - ctx = graphql.WithPathContext(ctx, graphql.NewPathWithField("wd")) - if tmp, ok := rawArgs["wd"]; ok { - return ec.unmarshalNString2string(ctx, tmp) - } - - var zeroVal string - return zeroVal, nil -} - -func (ec *executionContext) field_Query_hashGlobs_argsGlobs( - ctx context.Context, - rawArgs map[string]interface{}, -) ([]string, error) { - // We won't call the directive if the argument is null. - // Set call_argument_directives_with_null to true to call directives - // even if the argument is null. - _, ok := rawArgs["globs"] - if !ok { - var zeroVal []string - return zeroVal, nil - } - - ctx = graphql.WithPathContext(ctx, graphql.NewPathWithField("globs")) - if tmp, ok := rawArgs["globs"]; ok { - return ec.unmarshalNString2ᚕstringᚄ(ctx, tmp) - } - - var zeroVal []string - return zeroVal, nil -} func (ec *executionContext) field_Query_reportRuntimeUsage_args(ctx context.Context, rawArgs map[string]interface{}) (map[string]interface{}, error) { var err error args := map[string]interface{}{} - arg0, err := ec.field_Query_reportRuntimeUsage_argsPid(ctx, rawArgs) - if err != nil { - return nil, err + var arg0 int + if tmp, ok := rawArgs["pid"]; ok { + ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("pid")) + arg0, err = ec.unmarshalNInt2int(ctx, tmp) + if err != nil { + return nil, err + } } args["pid"] = arg0 - arg1, err := ec.field_Query_reportRuntimeUsage_argsExec(ctx, rawArgs) - if err != nil { - return nil, err + var arg1 string + if tmp, ok := rawArgs["exec"]; ok { + ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("exec")) + arg1, err = ec.unmarshalNString2string(ctx, tmp) + if err != nil { + return nil, err + } } args["exec"] = arg1 - arg2, err := ec.field_Query_reportRuntimeUsage_argsSource(ctx, rawArgs) - if err != nil { - return nil, err + var arg2 string + if tmp, ok := rawArgs["source"]; ok { + ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("source")) + arg2, err = ec.unmarshalNString2string(ctx, tmp) + if err != nil { + return nil, err + } } args["source"] = arg2 - arg3, err := ec.field_Query_reportRuntimeUsage_argsDimensionsJSON(ctx, rawArgs) - if err != nil { - return nil, err + var arg3 string + if tmp, ok := rawArgs["dimensionsJson"]; ok { + ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("dimensionsJson")) + arg3, err = ec.unmarshalNString2string(ctx, tmp) + if err != nil { + return nil, err + } } args["dimensionsJson"] = arg3 return args, nil } -func (ec *executionContext) field_Query_reportRuntimeUsage_argsPid( - ctx context.Context, - rawArgs map[string]interface{}, -) (int, error) { - // We won't call the directive if the argument is null. - // Set call_argument_directives_with_null to true to call directives - // even if the argument is null. - _, ok := rawArgs["pid"] - if !ok { - var zeroVal int - return zeroVal, nil - } - - ctx = graphql.WithPathContext(ctx, graphql.NewPathWithField("pid")) - if tmp, ok := rawArgs["pid"]; ok { - return ec.unmarshalNInt2int(ctx, tmp) - } - - var zeroVal int - return zeroVal, nil -} - -func (ec *executionContext) field_Query_reportRuntimeUsage_argsExec( - ctx context.Context, - rawArgs map[string]interface{}, -) (string, error) { - // We won't call the directive if the argument is null. - // Set call_argument_directives_with_null to true to call directives - // even if the argument is null. - _, ok := rawArgs["exec"] - if !ok { - var zeroVal string - return zeroVal, nil - } - - ctx = graphql.WithPathContext(ctx, graphql.NewPathWithField("exec")) - if tmp, ok := rawArgs["exec"]; ok { - return ec.unmarshalNString2string(ctx, tmp) - } - - var zeroVal string - return zeroVal, nil -} - -func (ec *executionContext) field_Query_reportRuntimeUsage_argsSource( - ctx context.Context, - rawArgs map[string]interface{}, -) (string, error) { - // We won't call the directive if the argument is null. - // Set call_argument_directives_with_null to true to call directives - // even if the argument is null. - _, ok := rawArgs["source"] - if !ok { - var zeroVal string - return zeroVal, nil - } - - ctx = graphql.WithPathContext(ctx, graphql.NewPathWithField("source")) - if tmp, ok := rawArgs["source"]; ok { - return ec.unmarshalNString2string(ctx, tmp) - } - - var zeroVal string - return zeroVal, nil -} - -func (ec *executionContext) field_Query_reportRuntimeUsage_argsDimensionsJSON( - ctx context.Context, - rawArgs map[string]interface{}, -) (string, error) { - // We won't call the directive if the argument is null. - // Set call_argument_directives_with_null to true to call directives - // even if the argument is null. - _, ok := rawArgs["dimensionsJson"] - if !ok { - var zeroVal string - return zeroVal, nil - } - - ctx = graphql.WithPathContext(ctx, graphql.NewPathWithField("dimensionsJson")) - if tmp, ok := rawArgs["dimensionsJson"]; ok { - return ec.unmarshalNString2string(ctx, tmp) - } - - var zeroVal string - return zeroVal, nil -} func (ec *executionContext) field___Type_enumValues_args(ctx context.Context, rawArgs map[string]interface{}) (map[string]interface{}, error) { var err error args := map[string]interface{}{} - arg0, err := ec.field___Type_enumValues_argsIncludeDeprecated(ctx, rawArgs) - if err != nil { - return nil, err + var arg0 bool + if tmp, ok := rawArgs["includeDeprecated"]; ok { + ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("includeDeprecated")) + arg0, err = ec.unmarshalOBoolean2bool(ctx, tmp) + if err != nil { + return nil, err + } } args["includeDeprecated"] = arg0 return args, nil } -func (ec *executionContext) field___Type_enumValues_argsIncludeDeprecated( - ctx context.Context, - rawArgs map[string]interface{}, -) (bool, error) { - // We won't call the directive if the argument is null. - // Set call_argument_directives_with_null to true to call directives - // even if the argument is null. - _, ok := rawArgs["includeDeprecated"] - if !ok { - var zeroVal bool - return zeroVal, nil - } - - ctx = graphql.WithPathContext(ctx, graphql.NewPathWithField("includeDeprecated")) - if tmp, ok := rawArgs["includeDeprecated"]; ok { - return ec.unmarshalOBoolean2bool(ctx, tmp) - } - - var zeroVal bool - return zeroVal, nil -} func (ec *executionContext) field___Type_fields_args(ctx context.Context, rawArgs map[string]interface{}) (map[string]interface{}, error) { var err error args := map[string]interface{}{} - arg0, err := ec.field___Type_fields_argsIncludeDeprecated(ctx, rawArgs) - if err != nil { - return nil, err + var arg0 bool + if tmp, ok := rawArgs["includeDeprecated"]; ok { + ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("includeDeprecated")) + arg0, err = ec.unmarshalOBoolean2bool(ctx, tmp) + if err != nil { + return nil, err + } } args["includeDeprecated"] = arg0 return args, nil } -func (ec *executionContext) field___Type_fields_argsIncludeDeprecated( - ctx context.Context, - rawArgs map[string]interface{}, -) (bool, error) { - // We won't call the directive if the argument is null. - // Set call_argument_directives_with_null to true to call directives - // even if the argument is null. - _, ok := rawArgs["includeDeprecated"] - if !ok { - var zeroVal bool - return zeroVal, nil - } - - ctx = graphql.WithPathContext(ctx, graphql.NewPathWithField("includeDeprecated")) - if tmp, ok := rawArgs["includeDeprecated"]; ok { - return ec.unmarshalOBoolean2bool(ctx, tmp) - } - - var zeroVal bool - return zeroVal, nil -} // endregion ***************************** args.gotpl ***************************** @@ -2177,8 +1757,8 @@ func (ec *executionContext) fieldContext_JWT_user(_ context.Context, field graph return fc, nil } -func (ec *executionContext) _MessageInfo_id(ctx context.Context, field graphql.CollectedField, obj *graph.MessageInfo) (ret graphql.Marshaler) { - fc, err := ec.fieldContext_MessageInfo_id(ctx, field) +func (ec *executionContext) _Mutation_setCache(ctx context.Context, field graphql.CollectedField) (ret graphql.Marshaler) { + fc, err := ec.fieldContext_Mutation_setCache(ctx, field) if err != nil { return graphql.Null } @@ -2191,38 +1771,46 @@ func (ec *executionContext) _MessageInfo_id(ctx context.Context, field graphql.C }() resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) { ctx = rctx // use context from middleware stack in children - return obj.ID, nil + return ec.resolvers.Mutation().SetCache(rctx, fc.Args["key"].(string), fc.Args["value"].(string), fc.Args["expiry"].(int)) }) if err != nil { ec.Error(ctx, err) return graphql.Null } if resTmp == nil { - if !graphql.HasFieldError(ctx, fc) { - ec.Errorf(ctx, "must not be null") - } return graphql.Null } - res := resTmp.(string) + res := resTmp.(*graphqltypes.Void) fc.Result = res - return ec.marshalNString2string(ctx, field.Selections, res) + return ec.marshalOVoid2ᚖgithubᚗcomᚋActiveStateᚋcliᚋcmdᚋstateᚑsvcᚋinternalᚋgraphqltypesᚐVoid(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_MessageInfo_id(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_Mutation_setCache(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ - Object: "MessageInfo", + Object: "Mutation", Field: field, - IsMethod: false, - IsResolver: false, + IsMethod: true, + IsResolver: true, Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - return nil, errors.New("field of type String does not have child fields") + return nil, errors.New("field of type Void does not have child fields") }, } + defer func() { + if r := recover(); r != nil { + err = ec.Recover(ctx, r) + ec.Error(ctx, err) + } + }() + ctx = graphql.WithFieldContext(ctx, fc) + if fc.Args, err = ec.field_Mutation_setCache_args(ctx, field.ArgumentMap(ec.Variables)); err != nil { + ec.Error(ctx, err) + return fc, err + } return fc, nil } -func (ec *executionContext) _MessageInfo_message(ctx context.Context, field graphql.CollectedField, obj *graph.MessageInfo) (ret graphql.Marshaler) { - fc, err := ec.fieldContext_MessageInfo_message(ctx, field) +func (ec *executionContext) _NotificationInfo_id(ctx context.Context, field graphql.CollectedField, obj *graph.NotificationInfo) (ret graphql.Marshaler) { + fc, err := ec.fieldContext_NotificationInfo_id(ctx, field) if err != nil { return graphql.Null } @@ -2235,7 +1823,7 @@ func (ec *executionContext) _MessageInfo_message(ctx context.Context, field grap }() resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) { ctx = rctx // use context from middleware stack in children - return obj.Message, nil + return obj.ID, nil }) if err != nil { ec.Error(ctx, err) @@ -2252,9 +1840,9 @@ func (ec *executionContext) _MessageInfo_message(ctx context.Context, field grap return ec.marshalNString2string(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_MessageInfo_message(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_NotificationInfo_id(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ - Object: "MessageInfo", + Object: "NotificationInfo", Field: field, IsMethod: false, IsResolver: false, @@ -2265,8 +1853,8 @@ func (ec *executionContext) fieldContext_MessageInfo_message(_ context.Context, return fc, nil } -func (ec *executionContext) _MessageInfo_condition(ctx context.Context, field graphql.CollectedField, obj *graph.MessageInfo) (ret graphql.Marshaler) { - fc, err := ec.fieldContext_MessageInfo_condition(ctx, field) +func (ec *executionContext) _NotificationInfo_notification(ctx context.Context, field graphql.CollectedField, obj *graph.NotificationInfo) (ret graphql.Marshaler) { + fc, err := ec.fieldContext_NotificationInfo_notification(ctx, field) if err != nil { return graphql.Null } @@ -2279,7 +1867,7 @@ func (ec *executionContext) _MessageInfo_condition(ctx context.Context, field gr }() resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) { ctx = rctx // use context from middleware stack in children - return obj.Condition, nil + return obj.Notification, nil }) if err != nil { ec.Error(ctx, err) @@ -2296,9 +1884,9 @@ func (ec *executionContext) _MessageInfo_condition(ctx context.Context, field gr return ec.marshalNString2string(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_MessageInfo_condition(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_NotificationInfo_notification(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ - Object: "MessageInfo", + Object: "NotificationInfo", Field: field, IsMethod: false, IsResolver: false, @@ -2309,8 +1897,8 @@ func (ec *executionContext) fieldContext_MessageInfo_condition(_ context.Context return fc, nil } -func (ec *executionContext) _MessageInfo_startDate(ctx context.Context, field graphql.CollectedField, obj *graph.MessageInfo) (ret graphql.Marshaler) { - fc, err := ec.fieldContext_MessageInfo_startDate(ctx, field) +func (ec *executionContext) _NotificationInfo_condition(ctx context.Context, field graphql.CollectedField, obj *graph.NotificationInfo) (ret graphql.Marshaler) { + fc, err := ec.fieldContext_NotificationInfo_condition(ctx, field) if err != nil { return graphql.Null } @@ -2323,7 +1911,7 @@ func (ec *executionContext) _MessageInfo_startDate(ctx context.Context, field gr }() resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) { ctx = rctx // use context from middleware stack in children - return obj.StartDate, nil + return obj.Condition, nil }) if err != nil { ec.Error(ctx, err) @@ -2340,9 +1928,9 @@ func (ec *executionContext) _MessageInfo_startDate(ctx context.Context, field gr return ec.marshalNString2string(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_MessageInfo_startDate(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_NotificationInfo_condition(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ - Object: "MessageInfo", + Object: "NotificationInfo", Field: field, IsMethod: false, IsResolver: false, @@ -2353,8 +1941,8 @@ func (ec *executionContext) fieldContext_MessageInfo_startDate(_ context.Context return fc, nil } -func (ec *executionContext) _MessageInfo_endDate(ctx context.Context, field graphql.CollectedField, obj *graph.MessageInfo) (ret graphql.Marshaler) { - fc, err := ec.fieldContext_MessageInfo_endDate(ctx, field) +func (ec *executionContext) _NotificationInfo_startDate(ctx context.Context, field graphql.CollectedField, obj *graph.NotificationInfo) (ret graphql.Marshaler) { + fc, err := ec.fieldContext_NotificationInfo_startDate(ctx, field) if err != nil { return graphql.Null } @@ -2367,7 +1955,7 @@ func (ec *executionContext) _MessageInfo_endDate(ctx context.Context, field grap }() resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) { ctx = rctx // use context from middleware stack in children - return obj.EndDate, nil + return obj.StartDate, nil }) if err != nil { ec.Error(ctx, err) @@ -2384,9 +1972,9 @@ func (ec *executionContext) _MessageInfo_endDate(ctx context.Context, field grap return ec.marshalNString2string(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_MessageInfo_endDate(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_NotificationInfo_startDate(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ - Object: "MessageInfo", + Object: "NotificationInfo", Field: field, IsMethod: false, IsResolver: false, @@ -2397,8 +1985,8 @@ func (ec *executionContext) fieldContext_MessageInfo_endDate(_ context.Context, return fc, nil } -func (ec *executionContext) _MessageInfo_repeat(ctx context.Context, field graphql.CollectedField, obj *graph.MessageInfo) (ret graphql.Marshaler) { - fc, err := ec.fieldContext_MessageInfo_repeat(ctx, field) +func (ec *executionContext) _NotificationInfo_endDate(ctx context.Context, field graphql.CollectedField, obj *graph.NotificationInfo) (ret graphql.Marshaler) { + fc, err := ec.fieldContext_NotificationInfo_endDate(ctx, field) if err != nil { return graphql.Null } @@ -2411,7 +1999,7 @@ func (ec *executionContext) _MessageInfo_repeat(ctx context.Context, field graph }() resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) { ctx = rctx // use context from middleware stack in children - return obj.Repeat, nil + return obj.EndDate, nil }) if err != nil { ec.Error(ctx, err) @@ -2423,26 +2011,26 @@ func (ec *executionContext) _MessageInfo_repeat(ctx context.Context, field graph } return graphql.Null } - res := resTmp.(graph.MessageRepeatType) + res := resTmp.(string) fc.Result = res - return ec.marshalNMessageRepeatType2githubᚗcomᚋActiveStateᚋcliᚋinternalᚋgraphᚐMessageRepeatType(ctx, field.Selections, res) + return ec.marshalNString2string(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_MessageInfo_repeat(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_NotificationInfo_endDate(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ - Object: "MessageInfo", + Object: "NotificationInfo", Field: field, IsMethod: false, IsResolver: false, Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - return nil, errors.New("field of type MessageRepeatType does not have child fields") + return nil, errors.New("field of type String does not have child fields") }, } return fc, nil } -func (ec *executionContext) _MessageInfo_interrupt(ctx context.Context, field graphql.CollectedField, obj *graph.MessageInfo) (ret graphql.Marshaler) { - fc, err := ec.fieldContext_MessageInfo_interrupt(ctx, field) +func (ec *executionContext) _NotificationInfo_repeat(ctx context.Context, field graphql.CollectedField, obj *graph.NotificationInfo) (ret graphql.Marshaler) { + fc, err := ec.fieldContext_NotificationInfo_repeat(ctx, field) if err != nil { return graphql.Null } @@ -2455,7 +2043,7 @@ func (ec *executionContext) _MessageInfo_interrupt(ctx context.Context, field gr }() resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) { ctx = rctx // use context from middleware stack in children - return obj.Interrupt, nil + return obj.Repeat, nil }) if err != nil { ec.Error(ctx, err) @@ -2467,26 +2055,26 @@ func (ec *executionContext) _MessageInfo_interrupt(ctx context.Context, field gr } return graphql.Null } - res := resTmp.(graph.MessageInterruptType) + res := resTmp.(graph.NotificationRepeatType) fc.Result = res - return ec.marshalNMessageInterruptType2githubᚗcomᚋActiveStateᚋcliᚋinternalᚋgraphᚐMessageInterruptType(ctx, field.Selections, res) + return ec.marshalNNotificationRepeatType2githubᚗcomᚋActiveStateᚋcliᚋinternalᚋgraphᚐNotificationRepeatType(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_MessageInfo_interrupt(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_NotificationInfo_repeat(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ - Object: "MessageInfo", + Object: "NotificationInfo", Field: field, IsMethod: false, IsResolver: false, Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - return nil, errors.New("field of type MessageInterruptType does not have child fields") + return nil, errors.New("field of type NotificationRepeatType does not have child fields") }, } return fc, nil } -func (ec *executionContext) _MessageInfo_placement(ctx context.Context, field graphql.CollectedField, obj *graph.MessageInfo) (ret graphql.Marshaler) { - fc, err := ec.fieldContext_MessageInfo_placement(ctx, field) +func (ec *executionContext) _NotificationInfo_interrupt(ctx context.Context, field graphql.CollectedField, obj *graph.NotificationInfo) (ret graphql.Marshaler) { + fc, err := ec.fieldContext_NotificationInfo_interrupt(ctx, field) if err != nil { return graphql.Null } @@ -2499,7 +2087,7 @@ func (ec *executionContext) _MessageInfo_placement(ctx context.Context, field gr }() resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) { ctx = rctx // use context from middleware stack in children - return obj.Placement, nil + return obj.Interrupt, nil }) if err != nil { ec.Error(ctx, err) @@ -2511,26 +2099,26 @@ func (ec *executionContext) _MessageInfo_placement(ctx context.Context, field gr } return graphql.Null } - res := resTmp.(graph.MessagePlacementType) + res := resTmp.(graph.NotificationInterruptType) fc.Result = res - return ec.marshalNMessagePlacementType2githubᚗcomᚋActiveStateᚋcliᚋinternalᚋgraphᚐMessagePlacementType(ctx, field.Selections, res) + return ec.marshalNNotificationInterruptType2githubᚗcomᚋActiveStateᚋcliᚋinternalᚋgraphᚐNotificationInterruptType(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_MessageInfo_placement(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_NotificationInfo_interrupt(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ - Object: "MessageInfo", + Object: "NotificationInfo", Field: field, IsMethod: false, IsResolver: false, Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - return nil, errors.New("field of type MessagePlacementType does not have child fields") + return nil, errors.New("field of type NotificationInterruptType does not have child fields") }, } return fc, nil } -func (ec *executionContext) _Mutation_setCache(ctx context.Context, field graphql.CollectedField) (ret graphql.Marshaler) { - fc, err := ec.fieldContext_Mutation_setCache(ctx, field) +func (ec *executionContext) _NotificationInfo_placement(ctx context.Context, field graphql.CollectedField, obj *graph.NotificationInfo) (ret graphql.Marshaler) { + fc, err := ec.fieldContext_NotificationInfo_placement(ctx, field) if err != nil { return graphql.Null } @@ -2543,41 +2131,33 @@ func (ec *executionContext) _Mutation_setCache(ctx context.Context, field graphq }() resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) { ctx = rctx // use context from middleware stack in children - return ec.resolvers.Mutation().SetCache(rctx, fc.Args["key"].(string), fc.Args["value"].(string), fc.Args["expiry"].(int)) + return obj.Placement, nil }) if err != nil { ec.Error(ctx, err) return graphql.Null } if resTmp == nil { + if !graphql.HasFieldError(ctx, fc) { + ec.Errorf(ctx, "must not be null") + } return graphql.Null } - res := resTmp.(*graphqltypes.Void) + res := resTmp.(graph.NotificationPlacementType) fc.Result = res - return ec.marshalOVoid2ᚖgithubᚗcomᚋActiveStateᚋcliᚋcmdᚋstateᚑsvcᚋinternalᚋgraphqltypesᚐVoid(ctx, field.Selections, res) + return ec.marshalNNotificationPlacementType2githubᚗcomᚋActiveStateᚋcliᚋinternalᚋgraphᚐNotificationPlacementType(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_Mutation_setCache(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_NotificationInfo_placement(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ - Object: "Mutation", + Object: "NotificationInfo", Field: field, - IsMethod: true, - IsResolver: true, + IsMethod: false, + IsResolver: false, Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - return nil, errors.New("field of type Void does not have child fields") + return nil, errors.New("field of type NotificationPlacementType does not have child fields") }, } - defer func() { - if r := recover(); r != nil { - err = ec.Recover(ctx, r) - ec.Error(ctx, err) - } - }() - ctx = graphql.WithFieldContext(ctx, fc) - if fc.Args, err = ec.field_Mutation_setCache_args(ctx, field.ArgumentMap(ec.Variables)); err != nil { - ec.Error(ctx, err) - return fc, err - } return fc, nil } @@ -3116,8 +2696,8 @@ func (ec *executionContext) fieldContext_Query_reportRuntimeUsage(ctx context.Co return fc, nil } -func (ec *executionContext) _Query_checkMessages(ctx context.Context, field graphql.CollectedField) (ret graphql.Marshaler) { - fc, err := ec.fieldContext_Query_checkMessages(ctx, field) +func (ec *executionContext) _Query_checkNotifications(ctx context.Context, field graphql.CollectedField) (ret graphql.Marshaler) { + fc, err := ec.fieldContext_Query_checkNotifications(ctx, field) if err != nil { return graphql.Null } @@ -3130,7 +2710,7 @@ func (ec *executionContext) _Query_checkMessages(ctx context.Context, field grap }() resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) { ctx = rctx // use context from middleware stack in children - return ec.resolvers.Query().CheckMessages(rctx, fc.Args["command"].(string), fc.Args["flags"].([]string)) + return ec.resolvers.Query().CheckNotifications(rctx, fc.Args["command"].(string), fc.Args["flags"].([]string)) }) if err != nil { ec.Error(ctx, err) @@ -3142,12 +2722,12 @@ func (ec *executionContext) _Query_checkMessages(ctx context.Context, field grap } return graphql.Null } - res := resTmp.([]*graph.MessageInfo) + res := resTmp.([]*graph.NotificationInfo) fc.Result = res - return ec.marshalNMessageInfo2ᚕᚖgithubᚗcomᚋActiveStateᚋcliᚋinternalᚋgraphᚐMessageInfoᚄ(ctx, field.Selections, res) + return ec.marshalNNotificationInfo2ᚕᚖgithubᚗcomᚋActiveStateᚋcliᚋinternalᚋgraphᚐNotificationInfoᚄ(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_Query_checkMessages(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_Query_checkNotifications(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "Query", Field: field, @@ -3156,23 +2736,23 @@ func (ec *executionContext) fieldContext_Query_checkMessages(ctx context.Context Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { switch field.Name { case "id": - return ec.fieldContext_MessageInfo_id(ctx, field) - case "message": - return ec.fieldContext_MessageInfo_message(ctx, field) + return ec.fieldContext_NotificationInfo_id(ctx, field) + case "notification": + return ec.fieldContext_NotificationInfo_notification(ctx, field) case "condition": - return ec.fieldContext_MessageInfo_condition(ctx, field) + return ec.fieldContext_NotificationInfo_condition(ctx, field) case "startDate": - return ec.fieldContext_MessageInfo_startDate(ctx, field) + return ec.fieldContext_NotificationInfo_startDate(ctx, field) case "endDate": - return ec.fieldContext_MessageInfo_endDate(ctx, field) + return ec.fieldContext_NotificationInfo_endDate(ctx, field) case "repeat": - return ec.fieldContext_MessageInfo_repeat(ctx, field) + return ec.fieldContext_NotificationInfo_repeat(ctx, field) case "interrupt": - return ec.fieldContext_MessageInfo_interrupt(ctx, field) + return ec.fieldContext_NotificationInfo_interrupt(ctx, field) case "placement": - return ec.fieldContext_MessageInfo_placement(ctx, field) + return ec.fieldContext_NotificationInfo_placement(ctx, field) } - return nil, fmt.Errorf("no field named %q was found under type MessageInfo", field.Name) + return nil, fmt.Errorf("no field named %q was found under type NotificationInfo", field.Name) }, } defer func() { @@ -3182,7 +2762,7 @@ func (ec *executionContext) fieldContext_Query_checkMessages(ctx context.Context } }() ctx = graphql.WithFieldContext(ctx, fc) - if fc.Args, err = ec.field_Query_checkMessages_args(ctx, field.ArgumentMap(ec.Variables)); err != nil { + if fc.Args, err = ec.field_Query_checkNotifications_args(ctx, field.ArgumentMap(ec.Variables)); err != nil { ec.Error(ctx, err) return fc, err } @@ -6199,54 +5779,100 @@ func (ec *executionContext) _JWT(ctx context.Context, sel ast.SelectionSet, obj return out } -var messageInfoImplementors = []string{"MessageInfo"} +var mutationImplementors = []string{"Mutation"} -func (ec *executionContext) _MessageInfo(ctx context.Context, sel ast.SelectionSet, obj *graph.MessageInfo) graphql.Marshaler { - fields := graphql.CollectFields(ec.OperationContext, sel, messageInfoImplementors) +func (ec *executionContext) _Mutation(ctx context.Context, sel ast.SelectionSet) graphql.Marshaler { + fields := graphql.CollectFields(ec.OperationContext, sel, mutationImplementors) + ctx = graphql.WithFieldContext(ctx, &graphql.FieldContext{ + Object: "Mutation", + }) out := graphql.NewFieldSet(fields) deferred := make(map[string]*graphql.FieldSet) for i, field := range fields { + innerCtx := graphql.WithRootFieldContext(ctx, &graphql.RootFieldContext{ + Object: field.Name, + Field: field, + }) + switch field.Name { case "__typename": - out.Values[i] = graphql.MarshalString("MessageInfo") + out.Values[i] = graphql.MarshalString("Mutation") + case "setCache": + out.Values[i] = ec.OperationContext.RootResolverMiddleware(innerCtx, func(ctx context.Context) (res graphql.Marshaler) { + return ec._Mutation_setCache(ctx, field) + }) + default: + panic("unknown field " + strconv.Quote(field.Name)) + } + } + out.Dispatch(ctx) + if out.Invalids > 0 { + return graphql.Null + } + + atomic.AddInt32(&ec.deferred, int32(len(deferred))) + + for label, dfs := range deferred { + ec.processDeferredGroup(graphql.DeferredGroup{ + Label: label, + Path: graphql.GetPath(ctx), + FieldSet: dfs, + Context: ctx, + }) + } + + return out +} + +var notificationInfoImplementors = []string{"NotificationInfo"} + +func (ec *executionContext) _NotificationInfo(ctx context.Context, sel ast.SelectionSet, obj *graph.NotificationInfo) graphql.Marshaler { + fields := graphql.CollectFields(ec.OperationContext, sel, notificationInfoImplementors) + + out := graphql.NewFieldSet(fields) + deferred := make(map[string]*graphql.FieldSet) + for i, field := range fields { + switch field.Name { + case "__typename": + out.Values[i] = graphql.MarshalString("NotificationInfo") case "id": - out.Values[i] = ec._MessageInfo_id(ctx, field, obj) + out.Values[i] = ec._NotificationInfo_id(ctx, field, obj) if out.Values[i] == graphql.Null { out.Invalids++ } - case "message": - out.Values[i] = ec._MessageInfo_message(ctx, field, obj) + case "notification": + out.Values[i] = ec._NotificationInfo_notification(ctx, field, obj) if out.Values[i] == graphql.Null { out.Invalids++ } case "condition": - out.Values[i] = ec._MessageInfo_condition(ctx, field, obj) + out.Values[i] = ec._NotificationInfo_condition(ctx, field, obj) if out.Values[i] == graphql.Null { out.Invalids++ } case "startDate": - out.Values[i] = ec._MessageInfo_startDate(ctx, field, obj) + out.Values[i] = ec._NotificationInfo_startDate(ctx, field, obj) if out.Values[i] == graphql.Null { out.Invalids++ } case "endDate": - out.Values[i] = ec._MessageInfo_endDate(ctx, field, obj) + out.Values[i] = ec._NotificationInfo_endDate(ctx, field, obj) if out.Values[i] == graphql.Null { out.Invalids++ } case "repeat": - out.Values[i] = ec._MessageInfo_repeat(ctx, field, obj) + out.Values[i] = ec._NotificationInfo_repeat(ctx, field, obj) if out.Values[i] == graphql.Null { out.Invalids++ } case "interrupt": - out.Values[i] = ec._MessageInfo_interrupt(ctx, field, obj) + out.Values[i] = ec._NotificationInfo_interrupt(ctx, field, obj) if out.Values[i] == graphql.Null { out.Invalids++ } case "placement": - out.Values[i] = ec._MessageInfo_placement(ctx, field, obj) + out.Values[i] = ec._NotificationInfo_placement(ctx, field, obj) if out.Values[i] == graphql.Null { out.Invalids++ } @@ -6273,52 +5899,6 @@ func (ec *executionContext) _MessageInfo(ctx context.Context, sel ast.SelectionS return out } -var mutationImplementors = []string{"Mutation"} - -func (ec *executionContext) _Mutation(ctx context.Context, sel ast.SelectionSet) graphql.Marshaler { - fields := graphql.CollectFields(ec.OperationContext, sel, mutationImplementors) - ctx = graphql.WithFieldContext(ctx, &graphql.FieldContext{ - Object: "Mutation", - }) - - out := graphql.NewFieldSet(fields) - deferred := make(map[string]*graphql.FieldSet) - for i, field := range fields { - innerCtx := graphql.WithRootFieldContext(ctx, &graphql.RootFieldContext{ - Object: field.Name, - Field: field, - }) - - switch field.Name { - case "__typename": - out.Values[i] = graphql.MarshalString("Mutation") - case "setCache": - out.Values[i] = ec.OperationContext.RootResolverMiddleware(innerCtx, func(ctx context.Context) (res graphql.Marshaler) { - return ec._Mutation_setCache(ctx, field) - }) - default: - panic("unknown field " + strconv.Quote(field.Name)) - } - } - out.Dispatch(ctx) - if out.Invalids > 0 { - return graphql.Null - } - - atomic.AddInt32(&ec.deferred, int32(len(deferred))) - - for label, dfs := range deferred { - ec.processDeferredGroup(graphql.DeferredGroup{ - Label: label, - Path: graphql.GetPath(ctx), - FieldSet: dfs, - Context: ctx, - }) - } - - return out -} - var organizationImplementors = []string{"Organization"} func (ec *executionContext) _Organization(ctx context.Context, sel ast.SelectionSet, obj *graph.Organization) graphql.Marshaler { @@ -6568,7 +6148,7 @@ func (ec *executionContext) _Query(ctx context.Context, sel ast.SelectionSet) gr } out.Concurrently(i, func(ctx context.Context) graphql.Marshaler { return rrm(innerCtx) }) - case "checkMessages": + case "checkNotifications": field := field innerFunc := func(ctx context.Context, fs *graphql.FieldSet) (res graphql.Marshaler) { @@ -6577,7 +6157,7 @@ func (ec *executionContext) _Query(ctx context.Context, sel ast.SelectionSet) gr ec.Error(ctx, ec.Recover(ctx, r)) } }() - res = ec._Query_checkMessages(ctx, field) + res = ec._Query_checkNotifications(ctx, field) if res == graphql.Null { atomic.AddUint32(&fs.Invalids, 1) } @@ -7362,7 +6942,7 @@ func (ec *executionContext) marshalNInt2int(ctx context.Context, sel ast.Selecti return res } -func (ec *executionContext) marshalNMessageInfo2ᚕᚖgithubᚗcomᚋActiveStateᚋcliᚋinternalᚋgraphᚐMessageInfoᚄ(ctx context.Context, sel ast.SelectionSet, v []*graph.MessageInfo) graphql.Marshaler { +func (ec *executionContext) marshalNNotificationInfo2ᚕᚖgithubᚗcomᚋActiveStateᚋcliᚋinternalᚋgraphᚐNotificationInfoᚄ(ctx context.Context, sel ast.SelectionSet, v []*graph.NotificationInfo) graphql.Marshaler { ret := make(graphql.Array, len(v)) var wg sync.WaitGroup isLen1 := len(v) == 1 @@ -7386,7 +6966,7 @@ func (ec *executionContext) marshalNMessageInfo2ᚕᚖgithubᚗcomᚋActiveState if !isLen1 { defer wg.Done() } - ret[i] = ec.marshalNMessageInfo2ᚖgithubᚗcomᚋActiveStateᚋcliᚋinternalᚋgraphᚐMessageInfo(ctx, sel, v[i]) + ret[i] = ec.marshalNNotificationInfo2ᚖgithubᚗcomᚋActiveStateᚋcliᚋinternalᚋgraphᚐNotificationInfo(ctx, sel, v[i]) } if isLen1 { f(i) @@ -7406,43 +6986,43 @@ func (ec *executionContext) marshalNMessageInfo2ᚕᚖgithubᚗcomᚋActiveState return ret } -func (ec *executionContext) marshalNMessageInfo2ᚖgithubᚗcomᚋActiveStateᚋcliᚋinternalᚋgraphᚐMessageInfo(ctx context.Context, sel ast.SelectionSet, v *graph.MessageInfo) graphql.Marshaler { +func (ec *executionContext) marshalNNotificationInfo2ᚖgithubᚗcomᚋActiveStateᚋcliᚋinternalᚋgraphᚐNotificationInfo(ctx context.Context, sel ast.SelectionSet, v *graph.NotificationInfo) graphql.Marshaler { if v == nil { if !graphql.HasFieldError(ctx, graphql.GetFieldContext(ctx)) { ec.Errorf(ctx, "the requested element is null which the schema does not allow") } return graphql.Null } - return ec._MessageInfo(ctx, sel, v) + return ec._NotificationInfo(ctx, sel, v) } -func (ec *executionContext) unmarshalNMessageInterruptType2githubᚗcomᚋActiveStateᚋcliᚋinternalᚋgraphᚐMessageInterruptType(ctx context.Context, v interface{}) (graph.MessageInterruptType, error) { - var res graph.MessageInterruptType +func (ec *executionContext) unmarshalNNotificationInterruptType2githubᚗcomᚋActiveStateᚋcliᚋinternalᚋgraphᚐNotificationInterruptType(ctx context.Context, v interface{}) (graph.NotificationInterruptType, error) { + var res graph.NotificationInterruptType err := res.UnmarshalGQL(v) return res, graphql.ErrorOnPath(ctx, err) } -func (ec *executionContext) marshalNMessageInterruptType2githubᚗcomᚋActiveStateᚋcliᚋinternalᚋgraphᚐMessageInterruptType(ctx context.Context, sel ast.SelectionSet, v graph.MessageInterruptType) graphql.Marshaler { +func (ec *executionContext) marshalNNotificationInterruptType2githubᚗcomᚋActiveStateᚋcliᚋinternalᚋgraphᚐNotificationInterruptType(ctx context.Context, sel ast.SelectionSet, v graph.NotificationInterruptType) graphql.Marshaler { return v } -func (ec *executionContext) unmarshalNMessagePlacementType2githubᚗcomᚋActiveStateᚋcliᚋinternalᚋgraphᚐMessagePlacementType(ctx context.Context, v interface{}) (graph.MessagePlacementType, error) { - var res graph.MessagePlacementType +func (ec *executionContext) unmarshalNNotificationPlacementType2githubᚗcomᚋActiveStateᚋcliᚋinternalᚋgraphᚐNotificationPlacementType(ctx context.Context, v interface{}) (graph.NotificationPlacementType, error) { + var res graph.NotificationPlacementType err := res.UnmarshalGQL(v) return res, graphql.ErrorOnPath(ctx, err) } -func (ec *executionContext) marshalNMessagePlacementType2githubᚗcomᚋActiveStateᚋcliᚋinternalᚋgraphᚐMessagePlacementType(ctx context.Context, sel ast.SelectionSet, v graph.MessagePlacementType) graphql.Marshaler { +func (ec *executionContext) marshalNNotificationPlacementType2githubᚗcomᚋActiveStateᚋcliᚋinternalᚋgraphᚐNotificationPlacementType(ctx context.Context, sel ast.SelectionSet, v graph.NotificationPlacementType) graphql.Marshaler { return v } -func (ec *executionContext) unmarshalNMessageRepeatType2githubᚗcomᚋActiveStateᚋcliᚋinternalᚋgraphᚐMessageRepeatType(ctx context.Context, v interface{}) (graph.MessageRepeatType, error) { - var res graph.MessageRepeatType +func (ec *executionContext) unmarshalNNotificationRepeatType2githubᚗcomᚋActiveStateᚋcliᚋinternalᚋgraphᚐNotificationRepeatType(ctx context.Context, v interface{}) (graph.NotificationRepeatType, error) { + var res graph.NotificationRepeatType err := res.UnmarshalGQL(v) return res, graphql.ErrorOnPath(ctx, err) } -func (ec *executionContext) marshalNMessageRepeatType2githubᚗcomᚋActiveStateᚋcliᚋinternalᚋgraphᚐMessageRepeatType(ctx context.Context, sel ast.SelectionSet, v graph.MessageRepeatType) graphql.Marshaler { +func (ec *executionContext) marshalNNotificationRepeatType2githubᚗcomᚋActiveStateᚋcliᚋinternalᚋgraphᚐNotificationRepeatType(ctx context.Context, sel ast.SelectionSet, v graph.NotificationRepeatType) graphql.Marshaler { return v } diff --git a/cmd/state-svc/schema/schema.graphqls b/cmd/state-svc/schema/schema.graphqls index 9f71c26909..094c3b829d 100644 --- a/cmd/state-svc/schema/schema.graphqls +++ b/cmd/state-svc/schema/schema.graphqls @@ -31,7 +31,7 @@ type ReportRuntimeUsageResponse { received: Boolean! } -enum MessageRepeatType { +enum NotificationRepeatType { Disabled Constantly Hourly @@ -40,26 +40,26 @@ enum MessageRepeatType { Monthly } -enum MessageInterruptType { +enum NotificationInterruptType { Disabled Prompt Exit } -enum MessagePlacementType { +enum NotificationPlacementType { BeforeCmd AfterCmd } -type MessageInfo { +type NotificationInfo { id: String! - message: String! + notification: String! condition: String! startDate: String! endDate: String! - repeat: MessageRepeatType! - interrupt: MessageInterruptType! - placement: MessagePlacementType! + repeat: NotificationRepeatType! + interrupt: NotificationInterruptType! + placement: NotificationPlacementType! } type Organization { @@ -96,7 +96,7 @@ type Query { projects: [Project]! analyticsEvent(category: String!, action: String!, source: String!, label: String, dimensionsJson: String!): AnalyticsEventResponse reportRuntimeUsage(pid: Int!, exec: String!, source: String!, dimensionsJson: String!): ReportRuntimeUsageResponse - checkMessages(command: String!, flags: [String!]!): [MessageInfo!]! + checkNotifications(command: String!, flags: [String!]!): [NotificationInfo!]! configChanged(key: String!): ConfigChangedResponse fetchLogTail: String! getProcessesInUse(execDir: String!): [ProcessInfo!]! diff --git a/cmd/state/internal/cmdtree/exechandlers/messenger/messenger.go b/cmd/state/internal/cmdtree/exechandlers/notifier/notifier.go similarity index 53% rename from cmd/state/internal/cmdtree/exechandlers/messenger/messenger.go rename to cmd/state/internal/cmdtree/exechandlers/notifier/notifier.go index efbbb825ed..4c670a612a 100644 --- a/cmd/state/internal/cmdtree/exechandlers/messenger/messenger.go +++ b/cmd/state/internal/cmdtree/exechandlers/notifier/notifier.go @@ -1,4 +1,4 @@ -package messenger +package notifier import ( "fmt" @@ -16,20 +16,20 @@ import ( "golang.org/x/net/context" ) -type Messenger struct { - out output.Outputer - svcModel *model.SvcModel - messages []*graph.MessageInfo +type Notifier struct { + out output.Outputer + svcModel *model.SvcModel + notifications []*graph.NotificationInfo } -func New(out output.Outputer, svcModel *model.SvcModel) *Messenger { - return &Messenger{ +func New(out output.Outputer, svcModel *model.SvcModel) *Notifier { + return &Notifier{ out: out, svcModel: svcModel, } } -func (m *Messenger) OnExecStart(cmd *captain.Command, _ []string) error { +func (m *Notifier) OnExecStart(cmd *captain.Command, _ []string) error { if m.out.Type().IsStructured() { // No point showing messaging on non-plain output (eg. json) return nil @@ -42,23 +42,23 @@ func (m *Messenger) OnExecStart(cmd *captain.Command, _ []string) error { cmds := cmd.JoinedCommandNames() flags := cmd.ActiveFlagNames() - messages, err := m.svcModel.CheckMessages(context.Background(), cmds, flags) + notifications, err := m.svcModel.CheckNotifications(context.Background(), cmds, flags) if err != nil { - multilog.Error("Could not report messages as CheckMessages return an error: %s", errs.JoinMessage(err)) + multilog.Error("Could not report notifications as CheckNotifications return an error: %s", errs.JoinMessage(err)) } - m.messages = messages + m.notifications = notifications - logging.Debug("Received %d messages to print", len(messages)) + logging.Debug("Received %d notifications to print", len(notifications)) - if err := m.PrintByPlacement(graph.MessagePlacementTypeBeforeCmd); err != nil { + if err := m.PrintByPlacement(graph.NotificationPlacementTypeBeforeCmd); err != nil { return errs.Wrap(err, "message error occurred before cmd") } return nil } -func (m *Messenger) OnExecStop(cmd *captain.Command, _ []string) error { +func (m *Notifier) OnExecStop(cmd *captain.Command, _ []string) error { if m.out.Type().IsStructured() { // No point showing messaging on non-plain output (eg. json) return nil @@ -68,36 +68,36 @@ func (m *Messenger) OnExecStop(cmd *captain.Command, _ []string) error { return nil // do not print update/deprecation warnings/messages when running `state update` } - if err := m.PrintByPlacement(graph.MessagePlacementTypeAfterCmd); err != nil { + if err := m.PrintByPlacement(graph.NotificationPlacementTypeAfterCmd); err != nil { return errs.Wrap(err, "message error occurred before cmd") } return nil } -func (m *Messenger) PrintByPlacement(placement graph.MessagePlacementType) error { +func (m *Notifier) PrintByPlacement(placement graph.NotificationPlacementType) error { exit := []string{} - messages := []*graph.MessageInfo{} - for _, message := range m.messages { - if message.Placement != placement { - logging.Debug("Skipping message %s as it's placement (%s) does not match %s", message.ID, message.Placement, placement) - messages = append(messages, message) + notifications := []*graph.NotificationInfo{} + for _, notification := range m.notifications { + if notification.Placement != placement { + logging.Debug("Skipping notification %s as it's placement (%s) does not match %s", notification.ID, notification.Placement, placement) + notifications = append(notifications, notification) continue } - if placement == graph.MessagePlacementTypeAfterCmd { + if placement == graph.NotificationPlacementTypeAfterCmd { m.out.Notice("") // Line break after } - logging.Debug("Printing message: %s", message.ID) - m.out.Notice(message.Message) + logging.Debug("Printing notification: %s, %s", notification.ID, notification.Notification) + m.out.Notice(notification.Notification) - if placement == graph.MessagePlacementTypeBeforeCmd { + if placement == graph.NotificationPlacementTypeBeforeCmd { m.out.Notice("") // Line break before } - if message.Interrupt == graph.MessageInterruptTypePrompt { + if notification.Interrupt == graph.NotificationInterruptTypePrompt { if m.out.Config().Interactive { m.out.Print(locale.Tl("messenger_prompt_continue", "Press ENTER to continue.")) fmt.Scanln(ptr.To("")) // Wait for input from user @@ -106,12 +106,12 @@ func (m *Messenger) PrintByPlacement(placement graph.MessagePlacementType) error } } - if message.Interrupt == graph.MessageInterruptTypeExit { - exit = append(exit, message.ID) + if notification.Interrupt == graph.NotificationInterruptTypeExit { + exit = append(exit, notification.ID) } } - m.messages = messages + m.notifications = notifications if len(exit) > 0 { // It's the responsibility of the message to give the user context as to why this exit happened. diff --git a/cmd/state/main.go b/cmd/state/main.go index 84ae4a16fb..2788e8d1b9 100644 --- a/cmd/state/main.go +++ b/cmd/state/main.go @@ -10,7 +10,7 @@ import ( "time" "github.com/ActiveState/cli/cmd/state/internal/cmdtree" - "github.com/ActiveState/cli/cmd/state/internal/cmdtree/exechandlers/messenger" + "github.com/ActiveState/cli/cmd/state/internal/cmdtree/exechandlers/notifier" anAsync "github.com/ActiveState/cli/internal/analytics/client/async" anaConst "github.com/ActiveState/cli/internal/analytics/constants" "github.com/ActiveState/cli/internal/captain" @@ -247,9 +247,9 @@ func run(args []string, isInteractive bool, cfg *config.Instance, out output.Out logging.Debug("Could not find child command, error: %v", err) } - msger := messenger.New(out, svcmodel) - cmds.OnExecStart(msger.OnExecStart) - cmds.OnExecStop(msger.OnExecStop) + notifier := notifier.New(out, svcmodel) + cmds.OnExecStart(notifier.OnExecStart) + cmds.OnExecStop(notifier.OnExecStop) // Auto update to latest state tool version if possible. if updated, err := autoUpdate(svcmodel, args, childCmd, cfg, an, out); err == nil && updated { diff --git a/internal/constants/constants.go b/internal/constants/constants.go index f64eb5650d..56bd48c1a3 100644 --- a/internal/constants/constants.go +++ b/internal/constants/constants.go @@ -154,8 +154,8 @@ const OptinUnstableEnvVarName = "ACTIVESTATE_OPTIN_UNSTABLE" // ServiceSockDir overrides the default socket path root diriectory used by the state service const ServiceSockDir = "ACTIVESTATE_SVC_SOCK" -// MessagesOverrideEnvVarName is used to override the location of the messages file (for testing purposes - should hold local filepath) -const MessagesOverrideEnvVarName = "ACTIVESTATE_MESSAGES_OVERRIDE" +// NotificationsOverrideEnvVarName is used to override the location of the notifications file (for testing purposes - should hold local filepath) +const NotificationsOverrideEnvVarName = "ACTIVESTATE_NOTIFICATIONS_OVERRIDE" // DisableErrorTipsEnvVarName disables the display of tips in error messages. // This should only be used by the installer so-as not to pollute error message output. diff --git a/internal/graph/generated.go b/internal/graph/generated.go index 61f7178059..482806f028 100644 --- a/internal/graph/generated.go +++ b/internal/graph/generated.go @@ -40,18 +40,18 @@ type Jwt struct { User *User `json:"user"` } -type MessageInfo struct { - ID string `json:"id"` - Message string `json:"message"` - Condition string `json:"condition"` - StartDate string `json:"startDate"` - EndDate string `json:"endDate"` - Repeat MessageRepeatType `json:"repeat"` - Interrupt MessageInterruptType `json:"interrupt"` - Placement MessagePlacementType `json:"placement"` +type Mutation struct { } -type Mutation struct { +type NotificationInfo struct { + ID string `json:"id"` + Notification string `json:"notification"` + Condition string `json:"condition"` + StartDate string `json:"startDate"` + EndDate string `json:"endDate"` + Repeat NotificationRepeatType `json:"repeat"` + Interrupt NotificationInterruptType `json:"interrupt"` + Placement NotificationPlacementType `json:"placement"` } type Organization struct { @@ -95,135 +95,135 @@ type Version struct { State *StateVersion `json:"state"` } -type MessageInterruptType string +type NotificationInterruptType string const ( - MessageInterruptTypeDisabled MessageInterruptType = "Disabled" - MessageInterruptTypePrompt MessageInterruptType = "Prompt" - MessageInterruptTypeExit MessageInterruptType = "Exit" + NotificationInterruptTypeDisabled NotificationInterruptType = "Disabled" + NotificationInterruptTypePrompt NotificationInterruptType = "Prompt" + NotificationInterruptTypeExit NotificationInterruptType = "Exit" ) -var AllMessageInterruptType = []MessageInterruptType{ - MessageInterruptTypeDisabled, - MessageInterruptTypePrompt, - MessageInterruptTypeExit, +var AllNotificationInterruptType = []NotificationInterruptType{ + NotificationInterruptTypeDisabled, + NotificationInterruptTypePrompt, + NotificationInterruptTypeExit, } -func (e MessageInterruptType) IsValid() bool { +func (e NotificationInterruptType) IsValid() bool { switch e { - case MessageInterruptTypeDisabled, MessageInterruptTypePrompt, MessageInterruptTypeExit: + case NotificationInterruptTypeDisabled, NotificationInterruptTypePrompt, NotificationInterruptTypeExit: return true } return false } -func (e MessageInterruptType) String() string { +func (e NotificationInterruptType) String() string { return string(e) } -func (e *MessageInterruptType) UnmarshalGQL(v interface{}) error { +func (e *NotificationInterruptType) UnmarshalGQL(v interface{}) error { str, ok := v.(string) if !ok { return fmt.Errorf("enums must be strings") } - *e = MessageInterruptType(str) + *e = NotificationInterruptType(str) if !e.IsValid() { - return fmt.Errorf("%s is not a valid MessageInterruptType", str) + return fmt.Errorf("%s is not a valid NotificationInterruptType", str) } return nil } -func (e MessageInterruptType) MarshalGQL(w io.Writer) { +func (e NotificationInterruptType) MarshalGQL(w io.Writer) { fmt.Fprint(w, strconv.Quote(e.String())) } -type MessagePlacementType string +type NotificationPlacementType string const ( - MessagePlacementTypeBeforeCmd MessagePlacementType = "BeforeCmd" - MessagePlacementTypeAfterCmd MessagePlacementType = "AfterCmd" + NotificationPlacementTypeBeforeCmd NotificationPlacementType = "BeforeCmd" + NotificationPlacementTypeAfterCmd NotificationPlacementType = "AfterCmd" ) -var AllMessagePlacementType = []MessagePlacementType{ - MessagePlacementTypeBeforeCmd, - MessagePlacementTypeAfterCmd, +var AllNotificationPlacementType = []NotificationPlacementType{ + NotificationPlacementTypeBeforeCmd, + NotificationPlacementTypeAfterCmd, } -func (e MessagePlacementType) IsValid() bool { +func (e NotificationPlacementType) IsValid() bool { switch e { - case MessagePlacementTypeBeforeCmd, MessagePlacementTypeAfterCmd: + case NotificationPlacementTypeBeforeCmd, NotificationPlacementTypeAfterCmd: return true } return false } -func (e MessagePlacementType) String() string { +func (e NotificationPlacementType) String() string { return string(e) } -func (e *MessagePlacementType) UnmarshalGQL(v interface{}) error { +func (e *NotificationPlacementType) UnmarshalGQL(v interface{}) error { str, ok := v.(string) if !ok { return fmt.Errorf("enums must be strings") } - *e = MessagePlacementType(str) + *e = NotificationPlacementType(str) if !e.IsValid() { - return fmt.Errorf("%s is not a valid MessagePlacementType", str) + return fmt.Errorf("%s is not a valid NotificationPlacementType", str) } return nil } -func (e MessagePlacementType) MarshalGQL(w io.Writer) { +func (e NotificationPlacementType) MarshalGQL(w io.Writer) { fmt.Fprint(w, strconv.Quote(e.String())) } -type MessageRepeatType string +type NotificationRepeatType string const ( - MessageRepeatTypeDisabled MessageRepeatType = "Disabled" - MessageRepeatTypeConstantly MessageRepeatType = "Constantly" - MessageRepeatTypeHourly MessageRepeatType = "Hourly" - MessageRepeatTypeDaily MessageRepeatType = "Daily" - MessageRepeatTypeWeekly MessageRepeatType = "Weekly" - MessageRepeatTypeMonthly MessageRepeatType = "Monthly" + NotificationRepeatTypeDisabled NotificationRepeatType = "Disabled" + NotificationRepeatTypeConstantly NotificationRepeatType = "Constantly" + NotificationRepeatTypeHourly NotificationRepeatType = "Hourly" + NotificationRepeatTypeDaily NotificationRepeatType = "Daily" + NotificationRepeatTypeWeekly NotificationRepeatType = "Weekly" + NotificationRepeatTypeMonthly NotificationRepeatType = "Monthly" ) -var AllMessageRepeatType = []MessageRepeatType{ - MessageRepeatTypeDisabled, - MessageRepeatTypeConstantly, - MessageRepeatTypeHourly, - MessageRepeatTypeDaily, - MessageRepeatTypeWeekly, - MessageRepeatTypeMonthly, +var AllNotificationRepeatType = []NotificationRepeatType{ + NotificationRepeatTypeDisabled, + NotificationRepeatTypeConstantly, + NotificationRepeatTypeHourly, + NotificationRepeatTypeDaily, + NotificationRepeatTypeWeekly, + NotificationRepeatTypeMonthly, } -func (e MessageRepeatType) IsValid() bool { +func (e NotificationRepeatType) IsValid() bool { switch e { - case MessageRepeatTypeDisabled, MessageRepeatTypeConstantly, MessageRepeatTypeHourly, MessageRepeatTypeDaily, MessageRepeatTypeWeekly, MessageRepeatTypeMonthly: + case NotificationRepeatTypeDisabled, NotificationRepeatTypeConstantly, NotificationRepeatTypeHourly, NotificationRepeatTypeDaily, NotificationRepeatTypeWeekly, NotificationRepeatTypeMonthly: return true } return false } -func (e MessageRepeatType) String() string { +func (e NotificationRepeatType) String() string { return string(e) } -func (e *MessageRepeatType) UnmarshalGQL(v interface{}) error { +func (e *NotificationRepeatType) UnmarshalGQL(v interface{}) error { str, ok := v.(string) if !ok { return fmt.Errorf("enums must be strings") } - *e = MessageRepeatType(str) + *e = NotificationRepeatType(str) if !e.IsValid() { - return fmt.Errorf("%s is not a valid MessageRepeatType", str) + return fmt.Errorf("%s is not a valid NotificationRepeatType", str) } return nil } -func (e MessageRepeatType) MarshalGQL(w io.Writer) { +func (e NotificationRepeatType) MarshalGQL(w io.Writer) { fmt.Fprint(w, strconv.Quote(e.String())) } diff --git a/pkg/platform/api/svc/request/messaging.go b/pkg/platform/api/svc/request/messaging.go deleted file mode 100644 index a762e924ee..0000000000 --- a/pkg/platform/api/svc/request/messaging.go +++ /dev/null @@ -1,31 +0,0 @@ -package request - -type MessagingRequest struct { - command string - flags []string -} - -func NewMessagingRequest(command string, flags []string) *MessagingRequest { - return &MessagingRequest{ - command: command, - flags: flags, - } -} - -func (m *MessagingRequest) Query() string { - return `query($command: String!, $flags: [String!]!) { - checkMessages(command: $command, flags: $flags) { - id - message - interrupt - placement - } - }` -} - -func (m *MessagingRequest) Vars() (map[string]interface{}, error) { - return map[string]interface{}{ - "command": m.command, - "flags": m.flags, - }, nil -} diff --git a/pkg/platform/api/svc/request/notification.go b/pkg/platform/api/svc/request/notification.go new file mode 100644 index 0000000000..a4983960ac --- /dev/null +++ b/pkg/platform/api/svc/request/notification.go @@ -0,0 +1,31 @@ +package request + +type NotificationRequest struct { + command string + flags []string +} + +func NewNotificationRequest(command string, flags []string) *NotificationRequest { + return &NotificationRequest{ + command: command, + flags: flags, + } +} + +func (m *NotificationRequest) Query() string { + return `query($command: String!, $flags: [String!]!) { + checkNotifications(command: $command, flags: $flags) { + id + notification + interrupt + placement + } + }` +} + +func (m *NotificationRequest) Vars() (map[string]interface{}, error) { + return map[string]interface{}{ + "command": m.command, + "flags": m.flags, + }, nil +} diff --git a/pkg/platform/model/svc.go b/pkg/platform/model/svc.go index c61a660b6a..5cfca41cfa 100644 --- a/pkg/platform/model/svc.go +++ b/pkg/platform/model/svc.go @@ -125,14 +125,14 @@ func (m *SvcModel) ReportRuntimeUsage(ctx context.Context, pid int, exec, source return nil } -func (m *SvcModel) CheckMessages(ctx context.Context, command string, flags []string) ([]*graph.MessageInfo, error) { - logging.Debug("Checking for messages") - defer profile.Measure("svc:CheckMessages", time.Now()) +func (m *SvcModel) CheckNotifications(ctx context.Context, command string, flags []string) ([]*graph.NotificationInfo, error) { + logging.Debug("Checking for notifications") + defer profile.Measure("svc:CheckNotifications", time.Now()) - r := request.NewMessagingRequest(command, flags) - resp := []*graph.MessageInfo{} + r := request.NewNotificationRequest(command, flags) + resp := []*graph.NotificationInfo{} if err := m.request(ctx, r, &resp); err != nil { - return nil, errs.Wrap(err, "Error sending messages request") + return nil, errs.Wrap(err, "Error sending notifications request") } return resp, nil diff --git a/test/integration/msg_int_test.go b/test/integration/notification_int_test.go similarity index 62% rename from test/integration/msg_int_test.go rename to test/integration/notification_int_test.go index fbf16e3ab9..77a48e999b 100644 --- a/test/integration/msg_int_test.go +++ b/test/integration/notification_int_test.go @@ -13,11 +13,11 @@ import ( "github.com/ActiveState/cli/internal/testhelpers/tagsuite" ) -type MsgIntegrationTestSuite struct { +type NotificationIntegrationTestSuite struct { tagsuite.Suite } -func (suite *MsgIntegrationTestSuite) TestMessage_None() { +func (suite *NotificationIntegrationTestSuite) TestNotification_None() { suite.OnlyRunForTags(tagsuite.Messaging, tagsuite.Critical) ts := e2e.New(suite.T(), false) defer ts.Close() @@ -30,7 +30,7 @@ func (suite *MsgIntegrationTestSuite) TestMessage_None() { // the logs for any potential issues. This is done automatically by ts.Close(). } -func (suite *MsgIntegrationTestSuite) TestMessage_Basic() { +func (suite *NotificationIntegrationTestSuite) TestNotification_Basic() { suite.OnlyRunForTags(tagsuite.Messaging, tagsuite.Critical) tests := []struct { Name string @@ -42,7 +42,7 @@ func (suite *MsgIntegrationTestSuite) TestMessage_Basic() { "Defaults", `[{ "ID": "simple", - "Message": "This is a [NOTICE]simple[/RESET] message" + "Notification": "This is a [NOTICE]simple[/RESET] notification" }]`, false, true, @@ -51,7 +51,7 @@ func (suite *MsgIntegrationTestSuite) TestMessage_Basic() { "Repeat Hourly", `[{ "ID": "simple", - "Message": "This is a [NOTICE]simple[/RESET] message", + "Notification": "This is a [NOTICE]simple[/RESET] notification", "Repeat": "Hourly" }]`, false, @@ -61,7 +61,7 @@ func (suite *MsgIntegrationTestSuite) TestMessage_Basic() { "Repeat Constantly", `[{ "ID": "simple", - "Message": "This is a [NOTICE]simple[/RESET] message", + "Notification": "This is a [NOTICE]simple[/RESET] notification", "Repeat": "Constantly" }]`, true, @@ -71,7 +71,7 @@ func (suite *MsgIntegrationTestSuite) TestMessage_Basic() { "Within Date Range", fmt.Sprintf(`[{ "ID": "simple", - "Message": "This is a [NOTICE]simple[/RESET] message", + "Notification": "This is a [NOTICE]simple[/RESET] notification", "StartDate": "%s", "EndDate": "%s" }]`, @@ -84,7 +84,7 @@ func (suite *MsgIntegrationTestSuite) TestMessage_Basic() { "Outside Date Range", fmt.Sprintf(`[{ "ID": "simple", - "Message": "This is a [NOTICE]simple[/RESET] message", + "Notification": "This is a [NOTICE]simple[/RESET] notification", "StartDate": "%s", "EndDate": "%s" }]`, @@ -97,7 +97,7 @@ func (suite *MsgIntegrationTestSuite) TestMessage_Basic() { "Only Start Date - Inside Range", fmt.Sprintf(`[{ "ID": "simple", - "Message": "This is a [NOTICE]simple[/RESET] message", + "Notification": "This is a [NOTICE]simple[/RESET] notification", "StartDate": "%s" }]`, time.Now().Add(-1*time.Hour).Format(time.RFC3339)), @@ -108,7 +108,7 @@ func (suite *MsgIntegrationTestSuite) TestMessage_Basic() { "Only End Date - Inside Range", fmt.Sprintf(`[{ "ID": "simple", - "Message": "This is a [NOTICE]simple[/RESET] message", + "Notification": "This is a [NOTICE]simple[/RESET] notification", "EndDate": "%s" }]`, time.Now().Add(1*time.Hour).Format(time.RFC3339)), @@ -119,7 +119,7 @@ func (suite *MsgIntegrationTestSuite) TestMessage_Basic() { "Outside Date Range - Future", fmt.Sprintf(`[{ "ID": "simple", - "Message": "This is a [NOTICE]simple[/RESET] message", + "Notification": "This is a [NOTICE]simple[/RESET] notification", "StartDate": "%s", "EndDate": "%s" }]`, @@ -132,7 +132,7 @@ func (suite *MsgIntegrationTestSuite) TestMessage_Basic() { "Outside Date Range - Past", fmt.Sprintf(`[{ "ID": "simple", - "Message": "This is a [NOTICE]simple[/RESET] message", + "Notification": "This is a [NOTICE]simple[/RESET] notification", "StartDate": "%s", "EndDate": "%s" }]`, @@ -145,7 +145,7 @@ func (suite *MsgIntegrationTestSuite) TestMessage_Basic() { "Only Start Date - Outside Range", fmt.Sprintf(`[{ "ID": "simple", - "Message": "This is a [NOTICE]simple[/RESET] message", + "Notification": "This is a [NOTICE]simple[/RESET] notification", "StartDate": "%s" }]`, time.Now().Add(1*time.Hour).Format(time.RFC3339)), @@ -156,7 +156,7 @@ func (suite *MsgIntegrationTestSuite) TestMessage_Basic() { "Only End Date - Outside Range", fmt.Sprintf(`[{ "ID": "simple", - "Message": "This is a [NOTICE]simple[/RESET] message", + "Notification": "This is a [NOTICE]simple[/RESET] notification", "EndDate": "%s" }]`, time.Now().Add(-1*time.Hour).Format(time.RFC3339)), @@ -169,15 +169,15 @@ func (suite *MsgIntegrationTestSuite) TestMessage_Basic() { ts := e2e.New(suite.T(), false) defer ts.Close() - msgFile, err := fileutils.WriteTempFileToDir(ts.Dirs.Work, "messages.json", []byte(tt.MessageJson), 0755) + msgFile, err := fileutils.WriteTempFileToDir(ts.Dirs.Work, "notifications.json", []byte(tt.MessageJson), 0755) suite.Require().NoError(err) - cp := ts.SpawnWithOpts(e2e.OptArgs("--version"), e2e.OptAppendEnv(constants.MessagesOverrideEnvVarName+"="+msgFile)) + cp := ts.SpawnWithOpts(e2e.OptArgs("--version"), e2e.OptAppendEnv(constants.NotificationsOverrideEnvVarName+"="+msgFile)) if !tt.ExpectShown { - suite.Require().NotContains(cp.Output(), "This is a simple message", "Message should not appear when outside date range") + suite.Require().NotContains(cp.Output(), "This is a simple notification", "Notification should not appear when outside date range") } else { - cp.Expect(`This is a simple message`) + cp.Expect(`This is a simple notification`) } cp.Expect("ActiveState CLI by ActiveState Software Inc.") @@ -186,53 +186,53 @@ func (suite *MsgIntegrationTestSuite) TestMessage_Basic() { // Ensure message doesn't stick around when we run another command cp = ts.Spawn("--version") if tt.ExpectRepeat { - cp.Expect(`This is a simple message`) + cp.Expect(`This is a simple notification`) } cp.ExpectExitCode(0) if !tt.ExpectRepeat { - suite.Require().NotContains(cp.Output(), "This is a simple message", "Should not repeat as that's the default behavior") + suite.Require().NotContains(cp.Output(), "This is a simple notification", "Should not repeat as that's the default behavior") } }) } } -func (suite *MsgIntegrationTestSuite) TestMessage_Basic_PlacementAfter() { +func (suite *NotificationIntegrationTestSuite) TestNotification_Basic_PlacementAfter() { suite.OnlyRunForTags(tagsuite.Messaging) ts := e2e.New(suite.T(), false) defer ts.Close() - msgFile, err := fileutils.WriteTempFileToDir(ts.Dirs.Work, "messages.json", []byte(fmt.Sprintf(`[ + msgFile, err := fileutils.WriteTempFileToDir(ts.Dirs.Work, "notifications.json", []byte(fmt.Sprintf(`[ { "ID": "simple", - "Message": "This is a [NOTICE]simple[/RESET] message", + "Notification": "This is a [NOTICE]simple[/RESET] notification", "Placement": "%s" } -]`, graph.MessagePlacementTypeAfterCmd)), 0755) +]`, graph.NotificationPlacementTypeAfterCmd)), 0755) suite.Require().NoError(err) - cp := ts.SpawnWithOpts(e2e.OptArgs("--version"), e2e.OptAppendEnv(constants.MessagesOverrideEnvVarName+"="+msgFile)) + cp := ts.SpawnWithOpts(e2e.OptArgs("--version"), e2e.OptAppendEnv(constants.NotificationsOverrideEnvVarName+"="+msgFile)) cp.Expect("ActiveState CLI by ActiveState Software Inc.") - cp.Expect(`This is a simple message`) + cp.Expect(`This is a simple notification`) cp.ExpectExitCode(0) } -func (suite *MsgIntegrationTestSuite) TestMessage_Basic_InterruptPrompt() { +func (suite *NotificationIntegrationTestSuite) TestNotification_Basic_InterruptPrompt() { suite.OnlyRunForTags(tagsuite.Messaging) ts := e2e.New(suite.T(), false) defer ts.Close() - msgFile, err := fileutils.WriteTempFileToDir(ts.Dirs.Work, "messages.json", []byte(fmt.Sprintf(`[ + msgFile, err := fileutils.WriteTempFileToDir(ts.Dirs.Work, "notifications.json", []byte(fmt.Sprintf(`[ { "ID": "simple", - "Message": "This is a [NOTICE]simple[/RESET] message", + "Notification": "This is a [NOTICE]simple[/RESET] notification", "Repeat": "Constantly", "Interrupt": "%s" } -]`, graph.MessageInterruptTypePrompt)), 0755) +]`, graph.NotificationInterruptTypePrompt)), 0755) suite.Require().NoError(err) - cp := ts.SpawnWithOpts(e2e.OptArgs("--version"), e2e.OptAppendEnv(constants.MessagesOverrideEnvVarName+"="+msgFile)) - cp.Expect(`This is a simple message`) + cp := ts.SpawnWithOpts(e2e.OptArgs("--version"), e2e.OptAppendEnv(constants.NotificationsOverrideEnvVarName+"="+msgFile)) + cp.Expect(`This is a simple notification`) cp.Expect("Press ENTER to continue") time.Sleep(time.Millisecond * 100) suite.Require().NotContains(cp.Output(), "ActiveState CLI by ActiveState Software Inc.") @@ -241,34 +241,34 @@ func (suite *MsgIntegrationTestSuite) TestMessage_Basic_InterruptPrompt() { cp.ExpectExitCode(0) // Test that non-interactive does not prompt - cp = ts.SpawnCmdWithOpts("state", e2e.OptArgs("--version", "-n"), e2e.OptAppendEnv(constants.MessagesOverrideEnvVarName+"="+msgFile)) - cp.Expect(`This is a simple message`) + cp = ts.SpawnCmdWithOpts("state", e2e.OptArgs("--version", "-n"), e2e.OptAppendEnv(constants.NotificationsOverrideEnvVarName+"="+msgFile)) + cp.Expect(`This is a simple notification`) cp.Expect("ActiveState CLI by ActiveState Software Inc.") cp.ExpectExitCode(0) suite.Require().NotContains(cp.Output(), "Press ENTER to continue") } -func (suite *MsgIntegrationTestSuite) TestMessage_Basic_InterruptExit() { +func (suite *NotificationIntegrationTestSuite) TestNotification_Basic_InterruptExit() { suite.OnlyRunForTags(tagsuite.Messaging) ts := e2e.New(suite.T(), false) defer ts.Close() - msgFile, err := fileutils.WriteTempFileToDir(ts.Dirs.Work, "messages.json", []byte(fmt.Sprintf(`[ + msgFile, err := fileutils.WriteTempFileToDir(ts.Dirs.Work, "notifications.json", []byte(fmt.Sprintf(`[ { "ID": "simple", - "Message": "This is a [NOTICE]simple[/RESET] message", + "Notification": "This is a [NOTICE]simple[/RESET] notification", "Interrupt": "%s" } -]`, graph.MessageInterruptTypeExit)), 0755) +]`, graph.NotificationInterruptTypeExit)), 0755) suite.Require().NoError(err) - cp := ts.SpawnWithOpts(e2e.OptArgs("--version"), e2e.OptAppendEnv(constants.MessagesOverrideEnvVarName+"="+msgFile)) + cp := ts.SpawnWithOpts(e2e.OptArgs("--version"), e2e.OptAppendEnv(constants.NotificationsOverrideEnvVarName+"="+msgFile)) cp.ExpectExitCode(1) - suite.Require().Contains(cp.Snapshot(), "This is a simple message") + suite.Require().Contains(cp.Snapshot(), "This is a simple notification") suite.Require().NotContains(cp.Output(), "ActiveState CLI by ActiveState Software Inc.") ts.IgnoreLogErrors() } -func TestMsgIntegrationTestSuite(t *testing.T) { - suite.Run(t, new(MsgIntegrationTestSuite)) +func TestNotificationIntegrationTestSuite(t *testing.T) { + suite.Run(t, new(NotificationIntegrationTestSuite)) } From 3dfbe589f8d7c42a6d1f1dff728830f6c9e4a218 Mon Sep 17 00:00:00 2001 From: mdrakos Date: Wed, 20 Nov 2024 16:16:14 -0800 Subject: [PATCH 066/336] Update tag --- internal/testhelpers/tagsuite/tagsuite.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/testhelpers/tagsuite/tagsuite.go b/internal/testhelpers/tagsuite/tagsuite.go index 3066469670..f735e815b4 100644 --- a/internal/testhelpers/tagsuite/tagsuite.go +++ b/internal/testhelpers/tagsuite/tagsuite.go @@ -54,8 +54,8 @@ const ( JSON = "json" Languages = "languages" Manifest = "manifest" - Messaging = "messaging" Migrations = "migrations" + Notifications = "notifications" Organizations = "organizations" Output = "output" Package = "package" From 2d3f53a288bc96008071ef91c653133f2edefc47 Mon Sep 17 00:00:00 2001 From: mdrakos Date: Wed, 20 Nov 2024 16:23:27 -0800 Subject: [PATCH 067/336] Fix tag --- test/integration/notification_int_test.go | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/test/integration/notification_int_test.go b/test/integration/notification_int_test.go index 77a48e999b..7dc288984e 100644 --- a/test/integration/notification_int_test.go +++ b/test/integration/notification_int_test.go @@ -18,7 +18,7 @@ type NotificationIntegrationTestSuite struct { } func (suite *NotificationIntegrationTestSuite) TestNotification_None() { - suite.OnlyRunForTags(tagsuite.Messaging, tagsuite.Critical) + suite.OnlyRunForTags(tagsuite.Notifications, tagsuite.Critical) ts := e2e.New(suite.T(), false) defer ts.Close() @@ -31,7 +31,7 @@ func (suite *NotificationIntegrationTestSuite) TestNotification_None() { } func (suite *NotificationIntegrationTestSuite) TestNotification_Basic() { - suite.OnlyRunForTags(tagsuite.Messaging, tagsuite.Critical) + suite.OnlyRunForTags(tagsuite.Notifications, tagsuite.Critical) tests := []struct { Name string MessageJson string @@ -197,7 +197,7 @@ func (suite *NotificationIntegrationTestSuite) TestNotification_Basic() { } func (suite *NotificationIntegrationTestSuite) TestNotification_Basic_PlacementAfter() { - suite.OnlyRunForTags(tagsuite.Messaging) + suite.OnlyRunForTags(tagsuite.Notifications) ts := e2e.New(suite.T(), false) defer ts.Close() @@ -217,7 +217,7 @@ func (suite *NotificationIntegrationTestSuite) TestNotification_Basic_PlacementA } func (suite *NotificationIntegrationTestSuite) TestNotification_Basic_InterruptPrompt() { - suite.OnlyRunForTags(tagsuite.Messaging) + suite.OnlyRunForTags(tagsuite.Notifications) ts := e2e.New(suite.T(), false) defer ts.Close() @@ -249,7 +249,7 @@ func (suite *NotificationIntegrationTestSuite) TestNotification_Basic_InterruptP } func (suite *NotificationIntegrationTestSuite) TestNotification_Basic_InterruptExit() { - suite.OnlyRunForTags(tagsuite.Messaging) + suite.OnlyRunForTags(tagsuite.Notifications) ts := e2e.New(suite.T(), false) defer ts.Close() From ee56104ad6dc219cade81e1697a70ffbe4f811db Mon Sep 17 00:00:00 2001 From: mitchell Date: Wed, 20 Nov 2024 17:22:04 -0500 Subject: [PATCH 068/336] Added force options for other prompt methods and made `--force` a global flag. --- cmd/state-installer/installer.go | 14 +++-- cmd/state-remote-installer/main.go | 4 +- cmd/state/internal/cmdtree/clean.go | 27 +++------ cmd/state/internal/cmdtree/cmdtree.go | 11 +++- cmd/state/internal/cmdtree/packages.go | 12 +--- cmd/state/main.go | 5 +- internal/locale/locales/en-us.yaml | 10 ++-- internal/prompt/prompt.go | 79 +++++++++++++++++-------- internal/runbits/auth/keypair.go | 6 +- internal/runbits/auth/login.go | 8 +-- internal/runbits/cves/cves.go | 19 ++---- internal/runbits/findproject/project.go | 6 +- internal/runners/clean/cache.go | 15 ++--- internal/runners/clean/config.go | 8 +-- internal/runners/clean/uninstall.go | 10 +--- internal/runners/fork/fork.go | 3 +- internal/runners/install/install.go | 2 +- internal/runners/invite/invite.go | 3 +- internal/runners/projects/delete.go | 8 +-- internal/runners/projects/edit.go | 7 +-- internal/runners/projects/move.go | 8 +-- internal/runners/publish/publish.go | 7 +-- internal/runners/push/push.go | 14 ++--- internal/runners/reset/reset.go | 8 +-- internal/runners/revert/revert.go | 8 +-- internal/runners/scripts/edit.go | 2 +- internal/runners/update/lock.go | 12 ++-- internal/runners/update/unlock.go | 12 ++-- internal/runners/upgrade/upgrade.go | 5 +- internal/runners/use/reset.go | 8 +-- 30 files changed, 161 insertions(+), 180 deletions(-) diff --git a/cmd/state-installer/installer.go b/cmd/state-installer/installer.go index b5fef2a594..6deaadad41 100644 --- a/cmd/state-installer/installer.go +++ b/cmd/state-installer/installer.go @@ -53,11 +53,17 @@ func (i *Installer) Install() (rerr error) { if err != nil { return errs.Wrap(err, "Could not determine if running as Windows administrator") } - if isAdmin && !i.Params.force && !i.Params.isUpdate && !i.Params.nonInteractive { - prompter := prompt.New(true, i.an) - confirm, err := prompter.Confirm("", locale.T("installer_prompt_is_admin"), ptr.To(false), nil) + if isAdmin && !i.Params.isUpdate { + prompter := prompt.New(i.an) + if i.Params.nonInteractive { + prompter.SetInteractive(false) + } + if i.Params.force { + prompter.SetForce(true) + } + confirm, err := prompter.Confirm("", locale.T("installer_prompt_is_admin"), ptr.To(false), ptr.To(true)) if err != nil { - return errs.Wrap(err, "Unable to confirm") + return errs.Wrap(err, "Not confirmed") } if !confirm { return locale.NewInputError("installer_aborted", "Installation aborted by the user") diff --git a/cmd/state-remote-installer/main.go b/cmd/state-remote-installer/main.go index 2ca3c36f75..29b1b6cfc1 100644 --- a/cmd/state-remote-installer/main.go +++ b/cmd/state-remote-installer/main.go @@ -116,7 +116,7 @@ func main() { an = sync.New(anaConst.SrcStateRemoteInstaller, cfg, nil, out) // Set up prompter - prompter := prompt.New(true, an) + prompter := prompt.New(an) params := newParams() cmd := captain.NewCommand( @@ -176,7 +176,7 @@ func execute(out output.Outputer, prompt prompt.Prompter, cfg *config.Instance, msg += locale.Tr("tos_disclaimer_prompt", constants.TermsOfServiceURLLatest) cont, err := prompt.Confirm(locale.Tr("install_remote_title"), msg, ptr.To(true), nil) if err != nil { - return errs.Wrap(err, "Could not prompt for confirmation") + return errs.Wrap(err, "Not confirmed") } if !cont { diff --git a/cmd/state/internal/cmdtree/clean.go b/cmd/state/internal/cmdtree/clean.go index 37ca6cfbe8..988ef3cd6c 100644 --- a/cmd/state/internal/cmdtree/clean.go +++ b/cmd/state/internal/cmdtree/clean.go @@ -36,12 +36,6 @@ func newCleanUninstallCommand(prime *primer.Values, globals *globalOptions) *cap Description: locale.Tl("flag_state_clean_uninstall_all", "Also delete all associated config and cache files"), Value: ¶ms.All, }, - { - Name: "force", - Shorthand: "f", - Description: locale.T("flag_state_clean_uninstall_force_description"), - Value: ¶ms.Force, - }, { // This option is only used by the Windows uninstall shortcut to ask the user if they wish // to delete everything or keep cache and config. The user is also asked to press Enter @@ -62,8 +56,9 @@ func newCleanUninstallCommand(prime *primer.Values, globals *globalOptions) *cap if globals.NonInteractive { prime.Prompt().SetInteractive(false) } - if params.Force { - prime.Prompt().EnableForce() + if globals.Force { + prime.Prompt().SetForce(true) + params.Force = true } return runner.Run(¶ms) }, @@ -96,7 +91,7 @@ func newCleanCacheCommand(prime *primer.Values, globals *globalOptions) *captain ) } -func newCleanConfigCommand(prime *primer.Values) *captain.Command { +func newCleanConfigCommand(prime *primer.Values, globals *globalOptions) *captain.Command { runner := clean.NewConfig(prime) params := clean.ConfigParams{} return captain.NewCommand( @@ -104,18 +99,12 @@ func newCleanConfigCommand(prime *primer.Values) *captain.Command { locale.Tl("clean_config_title", "Cleaning Configuration"), locale.T("clean_config_description"), prime, - []*captain.Flag{ - { - Name: "force", - Shorthand: "f", - Description: locale.T("flag_state_clean_config_force_description"), - Value: ¶ms.Force, - }, - }, + []*captain.Flag{}, []*captain.Argument{}, func(ccmd *captain.Command, _ []string) error { - if params.Force { - prime.Prompt().EnableForce() + if globals.Force { + prime.Prompt().SetForce(true) + params.Force = true } return runner.Run(¶ms) }, diff --git a/cmd/state/internal/cmdtree/cmdtree.go b/cmd/state/internal/cmdtree/cmdtree.go index db47ba83c7..730fc65f3c 100644 --- a/cmd/state/internal/cmdtree/cmdtree.go +++ b/cmd/state/internal/cmdtree/cmdtree.go @@ -80,7 +80,7 @@ func New(prime *primer.Values, args ...string) *CmdTree { cleanCmd.AddChildren( newCleanUninstallCommand(prime, globals), newCleanCacheCommand(prime, globals), - newCleanConfigCommand(prime), + newCleanConfigCommand(prime, globals), ) deployCmd := newDeployCommand(prime) @@ -95,7 +95,7 @@ func New(prime *primer.Values, args ...string) *CmdTree { eventsCmd := newEventsCommand(prime) eventsCmd.AddChildren(newEventsLogCommand(prime)) - installCmd := newInstallCommand(prime) + installCmd := newInstallCommand(prime, globals) uninstallCmd := newUninstallCommand(prime) importCmd := newImportCommand(prime, globals) searchCmd := newSearchCommand(prime) @@ -234,6 +234,7 @@ type globalOptions struct { Output string Monochrome bool NonInteractive bool + Force bool } // Group instances are used to group command help output. @@ -303,6 +304,12 @@ func newStateCommand(globals *globalOptions, prime *primer.Values) *captain.Comm Persist: true, Value: &globals.NonInteractive, }, + { + Name: "force", + Description: locale.T("flag_state_force_description"), + Persist: true, + Value: &globals.Force, + }, { Name: "version", Description: locale.T("flag_state_version_description"), diff --git a/cmd/state/internal/cmdtree/packages.go b/cmd/state/internal/cmdtree/packages.go index 820b189927..a0d2d55174 100644 --- a/cmd/state/internal/cmdtree/packages.go +++ b/cmd/state/internal/cmdtree/packages.go @@ -50,11 +50,10 @@ func newPackagesCommand(prime *primer.Values) *captain.Command { return cmd } -func newInstallCommand(prime *primer.Values) *captain.Command { +func newInstallCommand(prime *primer.Values, globals *globalOptions) *captain.Command { runner := install.New(prime, model.NamespacePackage) params := install.Params{} - force := false var packagesRaw string cmd := captain.NewCommand( @@ -68,11 +67,6 @@ func newInstallCommand(prime *primer.Values) *captain.Command { Description: locale.T("package_flag_ts_description"), Value: ¶ms.Timestamp, }, - { - Name: "force", - Description: locale.Tl("package_flag_force_description", "Ignore security policy preventing packages with CVEs from being installed (not recommended)"), - Value: &force, - }, }, []*captain.Argument{ { @@ -88,8 +82,8 @@ func newInstallCommand(prime *primer.Values) *captain.Command { return locale.WrapInputError(err, "err_install_packages_args", "Invalid install arguments") } } - if force { - prime.Prompt().EnableForce() + if globals.Force { + prime.Prompt().SetForce(true) } return runner.Run(params) }, diff --git a/cmd/state/main.go b/cmd/state/main.go index 84ae4a16fb..78daa39eb7 100644 --- a/cmd/state/main.go +++ b/cmd/state/main.go @@ -224,7 +224,10 @@ func run(args []string, isInteractive bool, cfg *config.Instance, out output.Out }() // Set up prompter - prompter := prompt.New(isInteractive, an) + prompter := prompt.New(an) + if !isInteractive { + prompter.SetInteractive(false) + } // Set up conditional, which accesses a lot of primer data sshell := subshell.New(cfg) diff --git a/internal/locale/locales/en-us.yaml b/internal/locale/locales/en-us.yaml index b5a42a0105..eb4923fdf8 100644 --- a/internal/locale/locales/en-us.yaml +++ b/internal/locale/locales/en-us.yaml @@ -23,6 +23,8 @@ flag_state_output_description: other: "Set the output method. Possible values: plain, simple, json, editor" flag_state_non_interactive_description: other: Run the State Tool without any prompts +flag_state_force_description: + other: Run the State Tool without any prompts, overriding any safe defaults flag_state_version_description: other: Show the version of our state executable flag_state_activate_path_description: @@ -755,12 +757,8 @@ cache_description: other: Removes cached Runtime Environments clean_config_description: other: Removes global State Tool configuration. Project configuration will not be affected. -flag_state_clean_uninstall_force_description: - other: Run uninstall operation without prompts and ignoring any errors stopping running services arg_state_clean_cache_project_description: other: The project to be removed from the local cache. -flag_state_clean_config_force_description: - other: Run clean config operation without prompts and ignoring any errors stopping running services err_uninstall_activated: other: Cannot uninstall the State Tool while in an activated state. Please deactivate by entering [ACTIONABLE]exit[/RESET] or pressing [ACTIONABLE]Ctrl+D[/RESET] and then try again. err_remove_cache: @@ -1171,6 +1169,10 @@ prompt_continue_non_interactive: other: "Continuing because State Tool is running in non-interactive mode." prompt_abort_non_interactive: other: "Aborting because State Tool is running in non-interactive mode. To bypass you can use the '[ACTIONABLE]--force[/RESET]' flag." +prompt_using_force: + other: "Using '[ACTIONABLE]{{.V0}}[/RESET]' because the '[ACTIONABLE]--force[/RESET]' flag is set." +prompt_using_non_interactive: + other: "Using '[ACTIONABLE]{{.V0}}[/RESET]' because State Tool is running in non-interactive mode." unstable_command_warning: other: | This command is still in beta. If you want to opt-in to unstable features, run the following command: diff --git a/internal/prompt/prompt.go b/internal/prompt/prompt.go index 07c004c9d4..9a591a9ef2 100644 --- a/internal/prompt/prompt.go +++ b/internal/prompt/prompt.go @@ -11,7 +11,6 @@ import ( "github.com/ActiveState/cli/internal/analytics/constants" "github.com/ActiveState/cli/internal/errs" "github.com/ActiveState/cli/internal/locale" - "github.com/ActiveState/cli/internal/logging" "github.com/ActiveState/cli/internal/output" ) @@ -21,15 +20,14 @@ type EventDispatcher interface { // Prompter is the interface used to run our prompt from type Prompter interface { - Input(title, message string, defaultResponse *string, flags ...ValidatorFlag) (string, error) - InputAndValidate(title, message string, defaultResponse *string, validator ValidatorFunc, flags ...ValidatorFlag) (string, error) - Select(title, message string, choices []string, defaultResponse *string) (string, error) + Input(title, message string, defaultResponse *string, forcedResponse *string, flags ...ValidatorFlag) (string, error) + InputAndValidate(title, message string, defaultResponse *string, forcedResponse *string, validator ValidatorFunc, flags ...ValidatorFlag) (string, error) + Select(title, message string, choices []string, defaultResponse *string, forcedResponse *string) (string, error) Confirm(title, message string, defaultChoice *bool, forcedChoice *bool) (bool, error) InputSecret(title, message string, flags ...ValidatorFlag) (string, error) IsInteractive() bool SetInteractive(bool) - EnableForce() - IsForceEnabled() bool + SetForce(bool) } // ValidatorFunc is a function pass to the Prompter to perform validation @@ -47,8 +45,8 @@ type Prompt struct { } // New creates a new prompter -func New(isInteractive bool, an EventDispatcher) Prompter { - return &Prompt{output.Get(), an, isInteractive, false} +func New(an EventDispatcher) Prompter { + return &Prompt{output.Get(), an, true, false} } // IsInteractive checks if the prompts can be interactive or should just return default values @@ -60,13 +58,13 @@ func (p *Prompt) SetInteractive(interactive bool) { p.isInteractive = interactive } -// EnableForce forces confirm prompts to return the force value (which is often different from the +// SetForce enables prompts to return the force value (which is often different from the // non-interactive value). -func (p *Prompt) EnableForce() { - p.isForced = true +func (p *Prompt) SetForce(force bool) { + p.isForced = force } -func (p *Prompt) IsForceEnabled() bool { +func (p *Prompt) IsForced() bool { return p.isForced } @@ -82,8 +80,8 @@ const ( ) // Input prompts the user for input. The user can specify available validation flags to trigger validation of responses -func (p *Prompt) Input(title, message string, defaultResponse *string, flags ...ValidatorFlag) (string, error) { - return p.InputAndValidate(title, message, defaultResponse, func(val interface{}) error { +func (p *Prompt) Input(title, message string, defaultResponse *string, forcedResponse *string, flags ...ValidatorFlag) (string, error) { + return p.InputAndValidate(title, message, defaultResponse, forcedResponse, func(val interface{}) error { return nil }, flags...) } @@ -100,10 +98,22 @@ func interactiveInputError(message string) error { } // InputAndValidate prompts an input field and allows you to specfiy a custom validation function as well as the built in flags -func (p *Prompt) InputAndValidate(title, message string, defaultResponse *string, validator ValidatorFunc, flags ...ValidatorFlag) (string, error) { +func (p *Prompt) InputAndValidate(title, message string, defaultResponse *string, forcedResponse *string, validator ValidatorFunc, flags ...ValidatorFlag) (string, error) { + if p.isForced { + response := forcedResponse + if response == nil { + response = defaultResponse + } + if response != nil { + p.out.Notice(locale.Tr("prompt_using_force", *response)) + return *response, nil + } + return "", errs.New("No force option given for forced prompt") + } + if !p.isInteractive { if defaultResponse != nil { - logging.Debug("Selecting default choice %s for Input prompt %s in non-interactive mode", *defaultResponse, title) + p.out.Notice(locale.Tr("prompt_using_non_interactive", *defaultResponse)) return *defaultResponse, nil } return "", interactiveInputError(message) @@ -124,7 +134,7 @@ func (p *Prompt) InputAndValidate(title, message string, defaultResponse *string // We handle defaults more clearly than the survey package can if defaultResponse != nil && *defaultResponse != "" { - v, err := p.Select("", formatMessage(message, !p.out.Config().Colored), []string{*defaultResponse, locale.Tl("prompt_custom", "Other ..")}, defaultResponse) + v, err := p.Select("", formatMessage(message, !p.out.Config().Colored), []string{*defaultResponse, locale.Tl("prompt_custom", "Other ..")}, defaultResponse, forcedResponse) if err != nil { return "", err } @@ -145,10 +155,22 @@ func (p *Prompt) InputAndValidate(title, message string, defaultResponse *string } // Select prompts the user to select one entry from multiple choices -func (p *Prompt) Select(title, message string, choices []string, defaultChoice *string) (string, error) { +func (p *Prompt) Select(title, message string, choices []string, defaultChoice *string, forcedChoice *string) (string, error) { + if p.isForced { + choice := forcedChoice + if choice == nil { + choice = defaultChoice + } + if choice != nil { + p.out.Notice(locale.Tr("prompt_using_force", *choice)) + return *choice, nil + } + return "", errs.New("No force option given for forced prompt") + } + if !p.isInteractive { if defaultChoice != nil { - logging.Debug("Selecting default choice %s for Select prompt %s in non-interactive mode", *defaultChoice, title) + p.out.Notice(locale.Tr("prompt_using_non_interactive", *defaultChoice)) return *defaultChoice, nil } return "", interactiveInputError(message) @@ -179,17 +201,24 @@ func (p *Prompt) Select(title, message string, choices []string, defaultChoice * // Confirm prompts user for yes or no response. func (p *Prompt) Confirm(title, message string, defaultChoice *bool, forcedChoice *bool) (bool, error) { if p.isForced { - if forcedChoice == nil { - return false, errs.New("No force option given for force-enabled prompt") + choice := forcedChoice + if choice == nil { + choice = defaultChoice } - logging.Debug("Prompt %s confirmed with choice %v in force mode", title, forcedChoice) - return *forcedChoice, nil + if choice != nil { + p.out.Notice(locale.T("prompt_continue_force")) + return *choice, nil + } + return false, errs.New("No force option given for forced prompt") } if !p.isInteractive { if defaultChoice != nil { - logging.Debug("Prompt %s confirmed with default choice %v in non-interactive mode", title, defaultChoice) - return *defaultChoice, nil + if *defaultChoice { + p.out.Notice(locale.T("prompt_continue_non_interactive")) + return true, nil + } + return false, locale.NewInputError("prompt_abort_non_interactive") } return false, interactiveInputError(message) } diff --git a/internal/runbits/auth/keypair.go b/internal/runbits/auth/keypair.go index b91c44671b..ab94c1b12f 100644 --- a/internal/runbits/auth/keypair.go +++ b/internal/runbits/auth/keypair.go @@ -113,12 +113,12 @@ func promptForPreviousPassphrase(prompt prompt.Prompter) (string, error) { return passphrase, nil } -func promptUserToRegenerateKeypair(passphrase string, cfg keypairs.Configurable, out output.Outputer, prmpt prompt.Prompter, auth *authentication.Auth) error { +func promptUserToRegenerateKeypair(passphrase string, cfg keypairs.Configurable, out output.Outputer, prompt prompt.Prompter, auth *authentication.Auth) error { // previous passphrase is invalid, inform user and ask if they want to generate a new keypair out.Notice(locale.T("auth_generate_new_keypair_message")) - yes, err := prmpt.Confirm("", locale.T("auth_confirm_generate_new_keypair_prompt"), ptr.To(false), nil) + yes, err := prompt.Confirm("", locale.T("auth_confirm_generate_new_keypair_prompt"), ptr.To(false), nil) if err != nil { - return errs.Wrap(err, "Unable to confirm") + return errs.Wrap(err, "Not confirmed") } if !yes { return locale.NewInputError("auth_err_unrecoverable_keypair") diff --git a/internal/runbits/auth/login.go b/internal/runbits/auth/login.go index ac902ef2aa..5c55e2fed9 100644 --- a/internal/runbits/auth/login.go +++ b/internal/runbits/auth/login.go @@ -106,7 +106,7 @@ func RequireAuthentication(message string, cfg keypairs.Configurable, out output locale.T("prompt_login_action"), locale.T("prompt_signup_browser_action"), } - choice, err := prompt.Select(locale.Tl("login_signup", "Login or Signup"), locale.T("prompt_login_or_signup"), choices, new(string)) + choice, err := prompt.Select(locale.Tl("login_signup", "Login or Signup"), locale.T("prompt_login_or_signup"), choices, ptr.To(""), nil) if err != nil { return errs.Wrap(err, "Prompt cancelled") } @@ -139,7 +139,7 @@ func ensureCredentials(credentials *mono_models.Credentials, prompter prompt.Pro if nonInteractive { return locale.NewInputError("err_auth_needinput") } - credentials.Username, err = prompter.Input("", locale.T("username_prompt"), new(string), prompt.InputRequired) + credentials.Username, err = prompter.Input("", locale.T("username_prompt"), ptr.To(""), nil, prompt.InputRequired) if err != nil { return errs.Wrap(err, "Input cancelled") } @@ -175,7 +175,7 @@ func AuthenticateWithCredentials(credentials *mono_models.Credentials, auth *aut func promptToken(credentials *mono_models.Credentials, out output.Outputer, prompt prompt.Prompter, auth *authentication.Auth) error { var err error - credentials.Totp, err = prompt.Input("", locale.T("totp_prompt"), new(string)) + credentials.Totp, err = prompt.Input("", locale.T("totp_prompt"), ptr.To(""), nil) if err != nil { return err } @@ -268,7 +268,7 @@ func authenticateWithBrowser(out output.Outputer, auth *authentication.Auth, pro for !cont { cont, err = prompt.Confirm(locale.Tl("continue", "Continue?"), locale.T("auth_press_enter"), ptr.To(false), nil) if err != nil { - return errs.Wrap(err, "Prompt failed") + return errs.Wrap(err, "Not confirmed") } } apiKey, err = auth.AuthenticateWithDevice(strfmt.UUID(*response.DeviceCode)) diff --git a/internal/runbits/cves/cves.go b/internal/runbits/cves/cves.go index a82649c489..ad7d19ff86 100644 --- a/internal/runbits/cves/cves.go +++ b/internal/runbits/cves/cves.go @@ -106,20 +106,13 @@ func (c *CveReport) Report(newBuildPlan *buildplan.BuildPlan, oldBuildPlan *buil c.summarizeCVEs(vulnerabilities) confirm, err := c.prime.Prompt().Confirm("", locale.Tr("prompt_continue_pkg_operation"), ptr.To(false), ptr.To(true)) - if err != nil { - return errs.Wrap(err, "Unable to confirm") - } - if !confirm { - if !c.prime.Prompt().IsInteractive() { - return errs.AddTips( - locale.NewInputError("prompt_abort_non_interactive"), - locale.Tl("more_info_prompt", "To disable security prompting run: [ACTIONABLE]state config set security.prompt.enabled false[/RESET]"), - ) - } - return locale.NewInputError("err_pkgop_security_prompt", "Operation aborted by user") + if err == nil && !confirm { + err = locale.NewInputError("err_pkgop_security_prompt", "Operation aborted by user") } - if c.prime.Prompt().IsForceEnabled() { - c.prime.Output().Notice(locale.T("prompt_continue_force")) + if err != nil { + return errs.AddTips(err, + locale.Tl("more_info_prompt", "To disable security prompting run: [ACTIONABLE]state config set security.prompt.enabled false[/RESET]"), + ) } c.prime.Output().Notice("") // Empty line diff --git a/internal/runbits/findproject/project.go b/internal/runbits/findproject/project.go index b488365884..02c8ea0bba 100644 --- a/internal/runbits/findproject/project.go +++ b/internal/runbits/findproject/project.go @@ -99,7 +99,8 @@ func FromNamespaceLocal(ns *project.Namespaced, cfg projectfile.ConfigGetter, pr "", locale.Tl("project_select_namespace", "Multiple projects with that name were found. Please select one."), matchingNamespaces, - &namespace) + &namespace, + nil) if err != nil { return nil, locale.WrapError(err, "err_project_select_namespace", "Error selecting project") } @@ -117,7 +118,8 @@ func FromNamespaceLocal(ns *project.Namespaced, cfg projectfile.ConfigGetter, pr "", locale.Tl("project_select_path", "Multiple project paths for the selected project were found. Please select one."), paths, - &path) + &path, + nil) if err != nil { return nil, locale.WrapError(err, "err_project_select_path", "Error selecting project path") } diff --git a/internal/runners/clean/cache.go b/internal/runners/clean/cache.go index bbb87ede43..542a608869 100644 --- a/internal/runners/clean/cache.go +++ b/internal/runners/clean/cache.go @@ -12,6 +12,7 @@ import ( "github.com/ActiveState/cli/internal/logging" "github.com/ActiveState/cli/internal/output" "github.com/ActiveState/cli/internal/prompt" + "github.com/ActiveState/cli/internal/rtutils/ptr" "github.com/ActiveState/cli/internal/svcctl" "github.com/ActiveState/cli/pkg/projectfile" "github.com/ActiveState/cli/pkg/runtime_helpers" @@ -71,16 +72,13 @@ func (c *Cache) Run(params *CacheParams) error { func (c *Cache) removeCache(path string) error { defaultValue := !c.prime.Prompt().IsInteractive() - ok, err := c.prime.Prompt().Confirm(locale.T("confirm"), locale.T("clean_cache_confirm"), &defaultValue, nil) + ok, err := c.prime.Prompt().Confirm(locale.T("confirm"), locale.T("clean_cache_confirm"), &defaultValue, ptr.To(true)) if err != nil { - return errs.Wrap(err, "Could not confirm") + return errs.Wrap(err, "Not confirmed") } if !ok { return locale.NewInputError("err_clean_cache_not_confirmed", "Cleaning of cache aborted by user") } - if !c.prime.Prompt().IsInteractive() { - c.prime.Output().Notice(locale.T("prompt_continue_non_interactive")) - } inUse, err := c.checkPathInUse(path) if err != nil { @@ -101,16 +99,13 @@ func (c *Cache) removeCache(path string) error { func (c *Cache) removeProjectCache(projectDir, namespace string) error { defaultValue := !c.prime.Prompt().IsInteractive() - ok, err := c.prime.Prompt().Confirm(locale.T("confirm"), locale.Tr("clean_cache_artifact_confirm", namespace), &defaultValue, nil) + ok, err := c.prime.Prompt().Confirm(locale.T("confirm"), locale.Tr("clean_cache_artifact_confirm", namespace), &defaultValue, ptr.To(true)) if err != nil { - return errs.Wrap(err, "Could not confirm") + return errs.Wrap(err, "Not confirmed") } if !ok { return locale.NewInputError("err_clean_cache_artifact_not_confirmed", "Cleaning of cached runtime aborted by user") } - if !c.prime.Prompt().IsInteractive() { - c.prime.Output().Notice(locale.T("prompt_continue_non_interactive")) - } inUse, err := c.checkPathInUse(projectDir) if err != nil { diff --git a/internal/runners/clean/config.go b/internal/runners/clean/config.go index c0aeebc2dd..63252ed24d 100644 --- a/internal/runners/clean/config.go +++ b/internal/runners/clean/config.go @@ -56,17 +56,11 @@ func (c *Config) Run(params *ConfigParams) error { defaultChoice := !c.confirm.IsInteractive() ok, err := c.confirm.Confirm(locale.T("confirm"), locale.T("clean_config_confirm"), &defaultChoice, ptr.To(true)) if err != nil { - return errs.Wrap(err, "Unable to confirm") + return errs.Wrap(err, "Not confirmed") } if !ok { return locale.NewInputError("err_clean_config_aborted", "Cleaning of config aborted by user") } - switch { - case !c.confirm.IsInteractive(): - c.output.Notice(locale.T("prompt_continue_non_interactive")) - case c.confirm.IsForceEnabled(): - c.output.Notice(locale.T("prompt_continue_force")) - } if err := stopServices(c.cfg, c.output, c.ipComm, params.Force); err != nil { return errs.Wrap(err, "Failed to stop services.") diff --git a/internal/runners/clean/uninstall.go b/internal/runners/clean/uninstall.go index d8c671cc44..4aead3614c 100644 --- a/internal/runners/clean/uninstall.go +++ b/internal/runners/clean/uninstall.go @@ -70,7 +70,7 @@ func (u *Uninstall) Run(params *UninstallParams) error { locale.Tl("uninstall_prompt", "Uninstall the State Tool, but keep runtime cache and configuration files"), locale.Tl("uninstall_prompt_all", "Completely uninstall the State Tool, including runtime cache and configuration files"), } - selection, err := u.prompt.Select("", "", choices, new(string)) + selection, err := u.prompt.Select("", "", choices, ptr.To(""), nil) if err != nil { return locale.WrapError(err, "err_uninstall_prompt", "Could not read uninstall option") } @@ -85,17 +85,11 @@ func (u *Uninstall) Run(params *UninstallParams) error { } ok, err := u.prompt.Confirm(locale.T("confirm"), confirmMessage, &defaultChoice, ptr.To(true)) if err != nil { - return errs.Wrap(err, "Unable to confirm") + return errs.Wrap(err, "Not confirmed") } if !ok { return locale.NewInputError("err_uninstall_aborted", "Uninstall aborted by user") } - switch { - case !u.prompt.IsInteractive(): - u.out.Notice(locale.T("prompt_continue_non_interactive")) - case u.prompt.IsForceEnabled(): - u.out.Notice(locale.T("prompt_continue_force")) - } } if err := stopServices(u.cfg, u.out, u.ipComm, params.Force); err != nil { diff --git a/internal/runners/fork/fork.go b/internal/runners/fork/fork.go index f751900fa0..744a557d1c 100644 --- a/internal/runners/fork/fork.go +++ b/internal/runners/fork/fork.go @@ -6,6 +6,7 @@ import ( "github.com/ActiveState/cli/internal/output" "github.com/ActiveState/cli/internal/primer" "github.com/ActiveState/cli/internal/prompt" + "github.com/ActiveState/cli/internal/rtutils/ptr" "github.com/ActiveState/cli/pkg/platform/api" "github.com/ActiveState/cli/pkg/platform/authentication" "github.com/ActiveState/cli/pkg/platform/model" @@ -104,7 +105,7 @@ func determineOwner(username string, prompter prompt.Prompter, auth *authenticat } options = append([]string{username}, options...) - r, err := prompter.Select(locale.Tl("fork_owner_title", "Owner"), locale.Tl("fork_select_org", "Who should the new project belong to?"), options, new(string)) + r, err := prompter.Select(locale.Tl("fork_owner_title", "Owner"), locale.Tl("fork_select_org", "Who should the new project belong to?"), options, ptr.To(""), nil) owner, exists := displayNameToURLNameMap[r] if !exists { return "", errs.New("Selected organization does not have a URL name") diff --git a/internal/runners/install/install.go b/internal/runners/install/install.go index 5724c7b580..28482abd36 100644 --- a/internal/runners/install/install.go +++ b/internal/runners/install/install.go @@ -319,7 +319,7 @@ func (i *Install) promptForMatchingIngredient(req *requirement, ingredients []*m choice, err := i.prime.Prompt().Select( locale.T("prompt_pkgop_ingredient"), locale.Tr("prompt_pkgop_ingredient_msg", req.Requested.String()), - choices, &choices[0], + choices, &choices[0], nil, ) if err != nil { return nil, errs.Wrap(err, "prompting failed") diff --git a/internal/runners/invite/invite.go b/internal/runners/invite/invite.go index c93aa1e6b7..ea9fd36249 100644 --- a/internal/runners/invite/invite.go +++ b/internal/runners/invite/invite.go @@ -11,6 +11,7 @@ import ( "github.com/ActiveState/cli/internal/output" "github.com/ActiveState/cli/internal/primer" "github.com/ActiveState/cli/internal/prompt" + "github.com/ActiveState/cli/internal/rtutils/ptr" "github.com/ActiveState/cli/internal/runbits/rationalize" "github.com/ActiveState/cli/pkg/platform/authentication" "github.com/ActiveState/cli/pkg/platform/model" @@ -106,7 +107,7 @@ func (i *invite) Run(params *Params, args []string) error { func (i *invite) promptForRole() (Role, error) { choices := roleNames() - selection, err := i.prompt.Select(locale.Tl("invite_role", "Role"), locale.Tl("invite_select_org_role", "What role should the user(s) be given?"), choices, new(string)) + selection, err := i.prompt.Select(locale.Tl("invite_role", "Role"), locale.Tl("invite_select_org_role", "What role should the user(s) be given?"), choices, ptr.To(""), nil) if err != nil { return -1, err } diff --git a/internal/runners/projects/delete.go b/internal/runners/projects/delete.go index 6c1aae3a7e..822a4a3977 100644 --- a/internal/runners/projects/delete.go +++ b/internal/runners/projects/delete.go @@ -5,6 +5,7 @@ import ( "github.com/ActiveState/cli/internal/locale" "github.com/ActiveState/cli/internal/output" "github.com/ActiveState/cli/internal/prompt" + "github.com/ActiveState/cli/internal/rtutils/ptr" "github.com/ActiveState/cli/pkg/platform/authentication" "github.com/ActiveState/cli/pkg/platform/model" "github.com/ActiveState/cli/pkg/project" @@ -38,16 +39,13 @@ func (d *Delete) Run(params *DeleteParams) error { } defaultChoice := !d.prompt.IsInteractive() - confirm, err := d.prompt.Confirm("", locale.Tl("project_delete_confim", "Are you sure you want to delete the project {{.V0}}?", params.Project.String()), &defaultChoice, nil) + confirm, err := d.prompt.Confirm("", locale.Tl("project_delete_confim", "Are you sure you want to delete the project {{.V0}}?", params.Project.String()), &defaultChoice, ptr.To(true)) if err != nil { - return errs.Wrap(err, "Unable to confirm") + return errs.Wrap(err, "Not confirmed") } if !confirm { return locale.NewInputError("err_project_delete_aborted", "Delete aborted by user") } - if !d.prompt.IsInteractive() { - d.out.Notice(locale.T("prompt_continue_non_interactive")) - } err = model.DeleteProject(params.Project.Owner, params.Project.Project, d.auth) if err != nil { diff --git a/internal/runners/projects/edit.go b/internal/runners/projects/edit.go index 741d588f92..13b7cc1538 100644 --- a/internal/runners/projects/edit.go +++ b/internal/runners/projects/edit.go @@ -91,16 +91,13 @@ func (e *Edit) Run(params *EditParams) error { editMsg += locale.Tl("edit_prompt_confirm", "Continue?") defaultChoice := !e.prompt.IsInteractive() - edit, err := e.prompt.Confirm("", editMsg, &defaultChoice, nil) + edit, err := e.prompt.Confirm("", editMsg, &defaultChoice, ptr.To(true)) if err != nil { - return errs.Wrap(err, "Unable to confirm") + return errs.Wrap(err, "Not confirmed") } if !edit { return locale.NewInputError("edit_cancelled", "Project edit cancelled") } - if !e.prompt.IsInteractive() { - e.out.Notice(locale.T("prompt_continue_non_interactive")) - } if err = model.EditProject(params.Namespace.Owner, params.Namespace.Project, editable, e.auth); err != nil { return locale.WrapError(err, "err_edit_project", "Could not edit project") diff --git a/internal/runners/projects/move.go b/internal/runners/projects/move.go index 858dbead14..c67a7e06f2 100644 --- a/internal/runners/projects/move.go +++ b/internal/runners/projects/move.go @@ -5,6 +5,7 @@ import ( "github.com/ActiveState/cli/internal/locale" "github.com/ActiveState/cli/internal/output" "github.com/ActiveState/cli/internal/prompt" + "github.com/ActiveState/cli/internal/rtutils/ptr" "github.com/ActiveState/cli/pkg/platform/authentication" "github.com/ActiveState/cli/pkg/platform/model" "github.com/ActiveState/cli/pkg/project" @@ -42,16 +43,13 @@ func (m *Move) Run(params *MoveParams) error { } defaultChoice := !m.prompt.IsInteractive() - move, err := m.prompt.Confirm("", locale.Tr("move_prompt", params.Namespace.String(), params.NewOwner, params.Namespace.Project), &defaultChoice, nil) + move, err := m.prompt.Confirm("", locale.Tr("move_prompt", params.Namespace.String(), params.NewOwner, params.Namespace.Project), &defaultChoice, ptr.To(true)) if err != nil { - return errs.Wrap(err, "Unable to confirm") + return errs.Wrap(err, "Not confirmed") } if !move { return locale.NewInputError("move_cancelled", "Project move aborted by user") } - if !m.prompt.IsInteractive() { - m.out.Notice(locale.T("prompt_continue_non_interactive")) - } if err = model.MoveProject(params.Namespace.Owner, params.Namespace.Project, params.NewOwner, m.auth); err != nil { return locale.WrapError(err, "err_move_project", "Could not move project") diff --git a/internal/runners/publish/publish.go b/internal/runners/publish/publish.go index 239a5233bb..a26797a8b7 100644 --- a/internal/runners/publish/publish.go +++ b/internal/runners/publish/publish.go @@ -227,14 +227,11 @@ func (r *Runner) Run(params *Params) error { Do you want to publish this ingredient? `, string(b)), ptr.To(true), nil) if err != nil { - return errs.Wrap(err, "Confirmation failed") + return errs.Wrap(err, "Not confirmed") } if !cont { return locale.NewInputError("uploadingredient_cancel", "Publish cancelled") } - if !r.prompt.IsInteractive() { - r.out.Notice(locale.T("prompt_continue_non_interactive")) - } r.out.Notice(locale.Tl("uploadingredient_uploading", "Publishing ingredient...")) @@ -447,7 +444,7 @@ func (r *Runner) OpenInEditor(pr *request.PublishVariables) error { } // Wait for confirmation - if _, err := r.prompt.Input("", locale.Tl("uploadingredient_edit_confirm", "Press enter when done editing"), ptr.To("")); err != nil { + if _, err := r.prompt.Input("", locale.Tl("uploadingredient_edit_confirm", "Press enter when done editing"), ptr.To(""), nil); err != nil { return errs.Wrap(err, "Confirmation failed") } diff --git a/internal/runners/push/push.go b/internal/runners/push/push.go index 8c828f2f13..6a2c069fa0 100644 --- a/internal/runners/push/push.go +++ b/internal/runners/push/push.go @@ -130,14 +130,11 @@ func (r *Push) Run(params PushParams) (rerr error) { if intend&pushFromNoPermission > 0 && !params.Namespace.IsValid() { createCopy, err := r.prompt.Confirm("", locale.T("push_prompt_not_authorized"), ptr.To(true), nil) if err != nil { - return errs.Wrap(err, "Unable to confirm") + return errs.Wrap(err, "Not confirmed") } if !createCopy { return nil } - if !r.prompt.IsInteractive() { - r.out.Notice(locale.T("prompt_continue_non_interactive")) - } } // Prompt for namespace IF: @@ -177,14 +174,11 @@ func (r *Push) Run(params PushParams) (rerr error) { locale.Tl("push_confirm_create_project", "You are about to create the project [NOTICE]{{.V0}}[/RESET]. Continue?", targetNamespace.String()), ptr.To(true), nil) if err != nil { - return errs.Wrap(err, "Confirmation failed") + return errs.Wrap(err, "Not confirmed") } if !createProject { return rationalize.ErrActionAborted } - if !r.prompt.IsInteractive() { - r.out.Notice(locale.T("prompt_continue_non_interactive")) - } } r.out.Notice(locale.Tl("push_creating_project", "Creating project [NOTICE]{{.V1}}[/RESET] under [NOTICE]{{.V0}}[/RESET] on the ActiveState Platform", targetNamespace.Owner, targetNamespace.Project)) @@ -331,7 +325,7 @@ func (r *Push) namespaceFromProject() (*project.Namespaced, error) { func (r *Push) promptNamespace() (*project.Namespaced, error) { owner := r.auth.WhoAmI() - owner, err := r.prompt.Input("", locale.T("push_prompt_owner"), &owner) + owner, err := r.prompt.Input("", locale.T("push_prompt_owner"), &owner, nil) if err != nil { return nil, locale.WrapError(err, "err_push_get_owner", "Could not determine project owner") } @@ -347,7 +341,7 @@ func (r *Push) promptNamespace() (*project.Namespaced, error) { logging.Debug("Error fetching language for commit: %v", err) } - name, err = r.prompt.Input("", locale.Tl("push_prompt_name", "What would you like the name of this project to be?"), &name) + name, err = r.prompt.Input("", locale.Tl("push_prompt_name", "What would you like the name of this project to be?"), &name, nil) if err != nil { return nil, locale.WrapError(err, "err_push_get_name", "Could not determine project name") } diff --git a/internal/runners/reset/reset.go b/internal/runners/reset/reset.go index 2f27cd1931..b1ada068f1 100644 --- a/internal/runners/reset/reset.go +++ b/internal/runners/reset/reset.go @@ -12,6 +12,7 @@ import ( "github.com/ActiveState/cli/internal/output" "github.com/ActiveState/cli/internal/primer" "github.com/ActiveState/cli/internal/prompt" + "github.com/ActiveState/cli/internal/rtutils/ptr" "github.com/ActiveState/cli/internal/runbits/buildscript" "github.com/ActiveState/cli/internal/runbits/rationalize" "github.com/ActiveState/cli/internal/runbits/runtime" @@ -117,16 +118,13 @@ func (r *Reset) Run(params *Params) error { r.out.Notice(locale.Tl("reset_commit", "Your project will be reset to [ACTIONABLE]{{.V0}}[/RESET]\n", commitID.String())) if commitID != localCommitID { defaultChoice := !r.prime.Prompt().IsInteractive() - confirm, err := r.prime.Prompt().Confirm("", locale.Tl("reset_confim", "Resetting is destructive. You will lose any changes that were not pushed. Are you sure you want to do this?"), &defaultChoice, nil) + confirm, err := r.prime.Prompt().Confirm("", locale.Tl("reset_confim", "Resetting is destructive. You will lose any changes that were not pushed. Are you sure you want to do this?"), &defaultChoice, ptr.To(true)) if err != nil { - return errs.Wrap(err, "Unable to confirm") + return errs.Wrap(err, "Not confirmed") } if !confirm { return locale.NewInputError("err_reset_aborted", "Reset aborted by user") } - if !r.prime.Prompt().IsInteractive() { - r.prime.Output().Notice(locale.T("prompt_continue_non_interactive")) - } } err = localcommit.Set(r.project.Dir(), commitID.String()) diff --git a/internal/runners/revert/revert.go b/internal/runners/revert/revert.go index 0618528826..e5860c8a2d 100644 --- a/internal/runners/revert/revert.go +++ b/internal/runners/revert/revert.go @@ -10,6 +10,7 @@ import ( "github.com/ActiveState/cli/internal/output" "github.com/ActiveState/cli/internal/primer" "github.com/ActiveState/cli/internal/prompt" + "github.com/ActiveState/cli/internal/rtutils/ptr" "github.com/ActiveState/cli/internal/runbits/commit" "github.com/ActiveState/cli/internal/runbits/rationalize" runtime_runbit "github.com/ActiveState/cli/internal/runbits/runtime" @@ -139,16 +140,13 @@ func (r *Revert) Run(params *Params) (rerr error) { } defaultChoice := !r.prime.Prompt().IsInteractive() - revert, err := r.prime.Prompt().Confirm("", locale.Tl("revert_confirm", "Continue?"), &defaultChoice, nil) + revert, err := r.prime.Prompt().Confirm("", locale.Tl("revert_confirm", "Continue?"), &defaultChoice, ptr.To(true)) if err != nil { - return errs.Wrap(err, "Unable to confirm") + return errs.Wrap(err, "Not confirmed") } if !revert { return locale.NewInputError("err_revert_aborted", "Revert aborted by user") } - if !r.prime.Prompt().IsInteractive() { - r.prime.Output().Notice(locale.T("prompt_continue_non_interactive")) - } revertCommit, err := revertFunc(revertParams, bp) if err != nil { diff --git a/internal/runners/scripts/edit.go b/internal/runners/scripts/edit.go index 59d74333c9..c33d4eb8e7 100644 --- a/internal/runners/scripts/edit.go +++ b/internal/runners/scripts/edit.go @@ -239,7 +239,7 @@ func startInteractive(sw *scriptWatcher, scriptName string, output output.Output for { doneEditing, err := prompt.Confirm("", locale.T("prompt_done_editing"), ptr.To(true), nil) if err != nil { - return errs.Wrap(err, "Prompter returned with failure.") + return errs.Wrap(err, "Not confirmed") } if doneEditing { sw.done <- true diff --git a/internal/runners/update/lock.go b/internal/runners/update/lock.go index 9ad15b52b9..1a6095dee0 100644 --- a/internal/runners/update/lock.go +++ b/internal/runners/update/lock.go @@ -11,6 +11,7 @@ import ( "github.com/ActiveState/cli/internal/multilog" "github.com/ActiveState/cli/internal/output" "github.com/ActiveState/cli/internal/prompt" + "github.com/ActiveState/cli/internal/rtutils/ptr" "github.com/ActiveState/cli/internal/runbits/rationalize" "github.com/ActiveState/cli/internal/updater" "github.com/ActiveState/cli/pkg/platform/model" @@ -72,7 +73,7 @@ func (l *Lock) Run(params *LockParams) error { l.out.Notice(locale.Tl("locking_version", "Locking State Tool version for current project.")) if l.project.IsLocked() { - if err := confirmLock(l.prompt, l.out); err != nil { + if err := confirmLock(l.prompt); err != nil { return locale.WrapError(err, "err_update_lock_confirm", "Could not confirm whether to lock update.") } } @@ -127,20 +128,17 @@ func (l *Lock) Run(params *LockParams) error { return nil } -func confirmLock(prom prompt.Prompter, out output.Outputer) error { +func confirmLock(prom prompt.Prompter) error { defaultChoice := !prom.IsInteractive() msg := locale.T("confirm_update_locked_version_prompt") - confirmed, err := prom.Confirm(locale.T("confirm"), msg, &defaultChoice, nil) + confirmed, err := prom.Confirm(locale.T("confirm"), msg, &defaultChoice, ptr.To(true)) if err != nil { - return errs.Wrap(err, "Unable to confirm") + return errs.Wrap(err, "Not confirmed") } if !confirmed { return locale.NewInputError("err_update_lock_noconfirm", "Cancelling by your request.") } - if !prom.IsInteractive() { - out.Notice(locale.T("prompt_continue_non_interactive")) - } return nil } diff --git a/internal/runners/update/unlock.go b/internal/runners/update/unlock.go index d3d5e99921..8bf427fe5c 100644 --- a/internal/runners/update/unlock.go +++ b/internal/runners/update/unlock.go @@ -7,6 +7,7 @@ import ( "github.com/ActiveState/cli/internal/multilog" "github.com/ActiveState/cli/internal/output" "github.com/ActiveState/cli/internal/prompt" + "github.com/ActiveState/cli/internal/rtutils/ptr" "github.com/ActiveState/cli/internal/runbits/rationalize" "github.com/ActiveState/cli/internal/updater" "github.com/ActiveState/cli/pkg/project" @@ -44,7 +45,7 @@ func (u *Unlock) Run(params *UnlockParams) error { u.out.Notice(locale.Tl("unlocking_version", "Unlocking State Tool version for current project.")) - err := confirmUnlock(u.prompt, u.out) + err := confirmUnlock(u.prompt) if err != nil { return locale.WrapError(err, "err_update_unlock_confirm", "Unlock cancelled by user.") } @@ -69,20 +70,17 @@ func (u *Unlock) Run(params *UnlockParams) error { return nil } -func confirmUnlock(prom prompt.Prompter, out output.Outputer) error { +func confirmUnlock(prom prompt.Prompter) error { msg := locale.T("confirm_update_unlocked_version_prompt") defaultChoice := !prom.IsInteractive() - confirmed, err := prom.Confirm(locale.T("confirm"), msg, &defaultChoice, nil) + confirmed, err := prom.Confirm(locale.T("confirm"), msg, &defaultChoice, ptr.To(true)) if err != nil { - return errs.Wrap(err, "Unable to confirm") + return errs.Wrap(err, "Not confirmed") } if !confirmed { return locale.NewInputError("err_update_lock_noconfirm", "Cancelling by your request.") } - if !prom.IsInteractive() { - out.Notice(locale.T("prompt_continue_non_interactive")) - } return nil } diff --git a/internal/runners/upgrade/upgrade.go b/internal/runners/upgrade/upgrade.go index 41f2207cf6..ed15303caf 100644 --- a/internal/runners/upgrade/upgrade.go +++ b/internal/runners/upgrade/upgrade.go @@ -285,14 +285,11 @@ func (u *Upgrade) renderUserFacing(changes []structuredChange, expand bool) erro out.Notice(" ") // Empty line (prompts use Notice) confirm, err := u.prime.Prompt().Confirm("", locale.Tr("upgrade_confirm"), ptr.To(true), nil) if err != nil { - return errs.Wrap(err, "confirmation failed") + return errs.Wrap(err, "Not confirmed") } if !confirm { return ErrAbort } - if !u.prime.Prompt().IsInteractive() { - u.prime.Output().Notice(locale.T("prompt_continue_non_interactive")) - } return nil } diff --git a/internal/runners/use/reset.go b/internal/runners/use/reset.go index 9fa5aa26e8..eed07e12e1 100644 --- a/internal/runners/use/reset.go +++ b/internal/runners/use/reset.go @@ -10,6 +10,7 @@ import ( "github.com/ActiveState/cli/internal/logging" "github.com/ActiveState/cli/internal/output" "github.com/ActiveState/cli/internal/prompt" + "github.com/ActiveState/cli/internal/rtutils/ptr" "github.com/ActiveState/cli/internal/subshell" ) @@ -41,16 +42,13 @@ func (u *Reset) Run(params *ResetParams) error { defaultChoice := !u.prompt.IsInteractive() ok, err := u.prompt.Confirm(locale.T("confirm"), - locale.Tl("use_reset_confirm", "You are about to stop using your project runtime. Continue?"), &defaultChoice, nil) + locale.Tl("use_reset_confirm", "You are about to stop using your project runtime. Continue?"), &defaultChoice, ptr.To(true)) if err != nil { - return errs.Wrap(err, "Unable to confirm") + return errs.Wrap(err, "Not confirmed") } if !ok { return locale.NewInputError("err_reset_aborted", "Reset aborted by user") } - if !u.prompt.IsInteractive() { - u.out.Notice(locale.T("prompt_continue_non_interactive")) - } reset, err := globaldefault.ResetDefaultActivation(u.subshell, u.config) if err != nil { From ecffc293409de1b9df0a4a64da7f4891587db845 Mon Sep 17 00:00:00 2001 From: mitchell Date: Thu, 21 Nov 2024 10:31:06 -0500 Subject: [PATCH 069/336] Set prompt interactive and force modes immediately upon parsing flags. Commands should not be responsible for setting these modes before invoking runners. --- cmd/state/internal/cmdtree/clean.go | 18 +++--------------- cmd/state/internal/cmdtree/cmdtree.go | 20 +++++++++----------- cmd/state/internal/cmdtree/packages.go | 5 +---- cmd/state/internal/cmdtree/reset.go | 5 +---- cmd/state/internal/cmdtree/revert.go | 5 +---- cmd/state/internal/cmdtree/update.go | 10 ++-------- cmd/state/internal/cmdtree/use.go | 5 +---- internal/captain/command.go | 3 +++ internal/prompt/prompt.go | 13 +++++++++++-- internal/runbits/auth/login.go | 11 +++++------ internal/runners/auth/auth.go | 2 +- 11 files changed, 38 insertions(+), 59 deletions(-) diff --git a/cmd/state/internal/cmdtree/clean.go b/cmd/state/internal/cmdtree/clean.go index 988ef3cd6c..4f25dd7570 100644 --- a/cmd/state/internal/cmdtree/clean.go +++ b/cmd/state/internal/cmdtree/clean.go @@ -53,19 +53,13 @@ func newCleanUninstallCommand(prime *primer.Values, globals *globalOptions) *cap return err } - if globals.NonInteractive { - prime.Prompt().SetInteractive(false) - } - if globals.Force { - prime.Prompt().SetForce(true) - params.Force = true - } + params.Force = globals.Force return runner.Run(¶ms) }, ) } -func newCleanCacheCommand(prime *primer.Values, globals *globalOptions) *captain.Command { +func newCleanCacheCommand(prime *primer.Values) *captain.Command { runner := clean.NewCache(prime) params := clean.CacheParams{} return captain.NewCommand( @@ -83,9 +77,6 @@ func newCleanCacheCommand(prime *primer.Values, globals *globalOptions) *captain }, }, func(ccmd *captain.Command, _ []string) error { - if globals.NonInteractive { - prime.Prompt().SetInteractive(false) - } return runner.Run(¶ms) }, ) @@ -102,10 +93,7 @@ func newCleanConfigCommand(prime *primer.Values, globals *globalOptions) *captai []*captain.Flag{}, []*captain.Argument{}, func(ccmd *captain.Command, _ []string) error { - if globals.Force { - prime.Prompt().SetForce(true) - params.Force = true - } + params.Force = globals.Force return runner.Run(¶ms) }, ) diff --git a/cmd/state/internal/cmdtree/cmdtree.go b/cmd/state/internal/cmdtree/cmdtree.go index 730fc65f3c..739a3cd727 100644 --- a/cmd/state/internal/cmdtree/cmdtree.go +++ b/cmd/state/internal/cmdtree/cmdtree.go @@ -79,7 +79,7 @@ func New(prime *primer.Values, args ...string) *CmdTree { cleanCmd := newCleanCommand(prime) cleanCmd.AddChildren( newCleanUninstallCommand(prime, globals), - newCleanCacheCommand(prime, globals), + newCleanCacheCommand(prime), newCleanConfigCommand(prime, globals), ) @@ -95,7 +95,7 @@ func New(prime *primer.Values, args ...string) *CmdTree { eventsCmd := newEventsCommand(prime) eventsCmd.AddChildren(newEventsLogCommand(prime)) - installCmd := newInstallCommand(prime, globals) + installCmd := newInstallCommand(prime) uninstallCmd := newUninstallCommand(prime) importCmd := newImportCommand(prime, globals) searchCmd := newSearchCommand(prime) @@ -137,8 +137,8 @@ func New(prime *primer.Values, args ...string) *CmdTree { updateCmd := newUpdateCommand(prime) updateCmd.AddChildren( - newUpdateLockCommand(prime, globals), - newUpdateUnlockCommand(prime, globals)) + newUpdateLockCommand(prime), + newUpdateUnlockCommand(prime)) branchCmd := newBranchCommand(prime) branchCmd.AddChildren( @@ -157,7 +157,7 @@ func New(prime *primer.Values, args ...string) *CmdTree { useCmd := newUseCommand(prime) useCmd.AddChildren( - newUseResetCommand(prime, globals), + newUseResetCommand(prime), newUseShowCommand(prime), ) @@ -204,8 +204,8 @@ func New(prime *primer.Values, args ...string) *CmdTree { prepareCmd, newProtocolCommand(prime), newExecCommand(prime, args...), - newRevertCommand(prime, globals), - newResetCommand(prime, globals), + newRevertCommand(prime), + newResetCommand(prime), secretsCmd, branchCmd, newLearnCommand(prime), @@ -302,12 +302,14 @@ func newStateCommand(globals *globalOptions, prime *primer.Values) *captain.Comm Description: locale.T("flag_state_non_interactive_description"), Shorthand: "n", Persist: true, + OnUse: func() { prime.Prompt().SetInteractive(false) }, Value: &globals.NonInteractive, }, { Name: "force", Description: locale.T("flag_state_force_description"), Persist: true, + OnUse: func() { prime.Prompt().SetForce(true) }, Value: &globals.Force, }, { @@ -325,10 +327,6 @@ func newStateCommand(globals *globalOptions, prime *primer.Values) *captain.Comm }, []*captain.Argument{}, func(ccmd *captain.Command, args []string) error { - if globals.Verbose { - logging.CurrentHandler().SetVerbose(true) - } - return runner.Run(ccmd.Usage) }, ) diff --git a/cmd/state/internal/cmdtree/packages.go b/cmd/state/internal/cmdtree/packages.go index a0d2d55174..636dc02dc3 100644 --- a/cmd/state/internal/cmdtree/packages.go +++ b/cmd/state/internal/cmdtree/packages.go @@ -50,7 +50,7 @@ func newPackagesCommand(prime *primer.Values) *captain.Command { return cmd } -func newInstallCommand(prime *primer.Values, globals *globalOptions) *captain.Command { +func newInstallCommand(prime *primer.Values) *captain.Command { runner := install.New(prime, model.NamespacePackage) params := install.Params{} @@ -82,9 +82,6 @@ func newInstallCommand(prime *primer.Values, globals *globalOptions) *captain.Co return locale.WrapInputError(err, "err_install_packages_args", "Invalid install arguments") } } - if globals.Force { - prime.Prompt().SetForce(true) - } return runner.Run(params) }, ) diff --git a/cmd/state/internal/cmdtree/reset.go b/cmd/state/internal/cmdtree/reset.go index 2a86485ab7..b27f63b9d6 100644 --- a/cmd/state/internal/cmdtree/reset.go +++ b/cmd/state/internal/cmdtree/reset.go @@ -7,7 +7,7 @@ import ( "github.com/ActiveState/cli/internal/runners/reset" ) -func newResetCommand(prime *primer.Values, globals *globalOptions) *captain.Command { +func newResetCommand(prime *primer.Values) *captain.Command { runner := reset.New(prime) params := &reset.Params{} @@ -25,9 +25,6 @@ func newResetCommand(prime *primer.Values, globals *globalOptions) *captain.Comm }, }, func(ccmd *captain.Command, args []string) error { - if globals.NonInteractive { - prime.Prompt().SetInteractive(false) - } return runner.Run(params) }, ).SetGroup(VCSGroup).SetSupportsStructuredOutput() diff --git a/cmd/state/internal/cmdtree/revert.go b/cmd/state/internal/cmdtree/revert.go index 6150d53bf1..4df0315a21 100644 --- a/cmd/state/internal/cmdtree/revert.go +++ b/cmd/state/internal/cmdtree/revert.go @@ -7,7 +7,7 @@ import ( "github.com/ActiveState/cli/internal/runners/revert" ) -func newRevertCommand(prime *primer.Values, globals *globalOptions) *captain.Command { +func newRevertCommand(prime *primer.Values) *captain.Command { runner := revert.New(prime) params := &revert.Params{} @@ -32,9 +32,6 @@ func newRevertCommand(prime *primer.Values, globals *globalOptions) *captain.Com }, }, func(ccmd *captain.Command, args []string) error { - if globals.NonInteractive { - prime.Prompt().SetInteractive(false) - } return runner.Run(params) }, ).SetGroup(VCSGroup).SetSupportsStructuredOutput() diff --git a/cmd/state/internal/cmdtree/update.go b/cmd/state/internal/cmdtree/update.go index 45f20cab21..89ccef4a73 100644 --- a/cmd/state/internal/cmdtree/update.go +++ b/cmd/state/internal/cmdtree/update.go @@ -34,7 +34,7 @@ func newUpdateCommand(prime *primer.Values) *captain.Command { return cmd } -func newUpdateLockCommand(prime *primer.Values, globals *globalOptions) *captain.Command { +func newUpdateLockCommand(prime *primer.Values) *captain.Command { runner := update.NewLock(prime) params := update.LockParams{} @@ -52,9 +52,6 @@ func newUpdateLockCommand(prime *primer.Values, globals *globalOptions) *captain }, []*captain.Argument{}, func(cmd *captain.Command, args []string) error { - if globals.NonInteractive { - prime.Prompt().SetInteractive(false) - } return runner.Run(¶ms) }, ) @@ -63,7 +60,7 @@ func newUpdateLockCommand(prime *primer.Values, globals *globalOptions) *captain return cmd } -func newUpdateUnlockCommand(prime *primer.Values, globals *globalOptions) *captain.Command { +func newUpdateUnlockCommand(prime *primer.Values) *captain.Command { runner := update.NewUnlock(prime) params := update.UnlockParams{} @@ -75,9 +72,6 @@ func newUpdateUnlockCommand(prime *primer.Values, globals *globalOptions) *capta []*captain.Flag{}, []*captain.Argument{}, func(cmd *captain.Command, args []string) error { - if globals.NonInteractive { - prime.Prompt().SetInteractive(false) - } return runner.Run(¶ms) }, ) diff --git a/cmd/state/internal/cmdtree/use.go b/cmd/state/internal/cmdtree/use.go index 5c4bd8d9bf..b6cfe24aa2 100644 --- a/cmd/state/internal/cmdtree/use.go +++ b/cmd/state/internal/cmdtree/use.go @@ -33,7 +33,7 @@ func newUseCommand(prime *primer.Values) *captain.Command { return cmd } -func newUseResetCommand(prime *primer.Values, globals *globalOptions) *captain.Command { +func newUseResetCommand(prime *primer.Values) *captain.Command { params := &use.ResetParams{} return captain.NewCommand( @@ -44,9 +44,6 @@ func newUseResetCommand(prime *primer.Values, globals *globalOptions) *captain.C []*captain.Flag{}, []*captain.Argument{}, func(_ *captain.Command, _ []string) error { - if globals.NonInteractive { - prime.Prompt().SetInteractive(false) - } return use.NewReset(prime).Run(params) }, ) diff --git a/internal/captain/command.go b/internal/captain/command.go index aa5fd383f3..16a25bc252 100644 --- a/internal/captain/command.go +++ b/internal/captain/command.go @@ -521,6 +521,9 @@ func (c *Command) flagByName(name string, persistOnly bool) *Flag { return flag } } + if c.parent != nil { + return c.parent.flagByName(name, persistOnly) + } return nil } diff --git a/internal/prompt/prompt.go b/internal/prompt/prompt.go index 9a591a9ef2..5ec5bb709f 100644 --- a/internal/prompt/prompt.go +++ b/internal/prompt/prompt.go @@ -28,6 +28,7 @@ type Prompter interface { IsInteractive() bool SetInteractive(bool) SetForce(bool) + IsForced() bool } // ValidatorFunc is a function pass to the Prompter to perform validation @@ -80,6 +81,8 @@ const ( ) // Input prompts the user for input. The user can specify available validation flags to trigger validation of responses +// If the prompt is non-interactive, it returns defaultResponse. +// If the prompt is forced, it returns forcedResponse if not nil, or defaultResponse. func (p *Prompt) Input(title, message string, defaultResponse *string, forcedResponse *string, flags ...ValidatorFlag) (string, error) { return p.InputAndValidate(title, message, defaultResponse, forcedResponse, func(val interface{}) error { return nil @@ -98,6 +101,8 @@ func interactiveInputError(message string) error { } // InputAndValidate prompts an input field and allows you to specfiy a custom validation function as well as the built in flags +// If the prompt is non-interactive, it returns defaultResponse. +// If the prompt is forced, it returns forcedResponse if not nil, or defaultResponse. func (p *Prompt) InputAndValidate(title, message string, defaultResponse *string, forcedResponse *string, validator ValidatorFunc, flags ...ValidatorFlag) (string, error) { if p.isForced { response := forcedResponse @@ -154,7 +159,9 @@ func (p *Prompt) InputAndValidate(title, message string, defaultResponse *string return response, nil } -// Select prompts the user to select one entry from multiple choices +// Select prompts the user to select one entry from multiple choices. +// If the prompt is non-interactive, it returns defaultChoice. +// If the prompt is forced, it returns forcedChoice if not nil, or defaultChoice. func (p *Prompt) Select(title, message string, choices []string, defaultChoice *string, forcedChoice *string) (string, error) { if p.isForced { choice := forcedChoice @@ -199,6 +206,8 @@ func (p *Prompt) Select(title, message string, choices []string, defaultChoice * } // Confirm prompts user for yes or no response. +// If the prompt is non-interactive, it returns defaultChoice. +// If the prompt is forced, it returns forcedChoice if not nil, or defaultChoice. func (p *Prompt) Confirm(title, message string, defaultChoice *bool, forcedChoice *bool) (bool, error) { if p.isForced { choice := forcedChoice @@ -259,7 +268,7 @@ func translateConfirm(confirm bool) string { // InputSecret prompts the user for input and obfuscates the text in stdout. // Will fail if empty. func (p *Prompt) InputSecret(title, message string, flags ...ValidatorFlag) (string, error) { - if !p.isInteractive { + if !p.isInteractive || p.isForced { return "", interactiveInputError(message) } var response string diff --git a/internal/runbits/auth/login.go b/internal/runbits/auth/login.go index 5c55e2fed9..aa7cb9ad4a 100644 --- a/internal/runbits/auth/login.go +++ b/internal/runbits/auth/login.go @@ -29,13 +29,12 @@ var OpenURI = osutils.OpenURI // Authenticate will prompt the user for authentication func Authenticate(cfg keypairs.Configurable, out output.Outputer, prompt prompt.Prompter, auth *authentication.Auth) error { - return AuthenticateWithInput("", "", "", false, cfg, out, prompt, auth) + return AuthenticateWithInput("", "", "", cfg, out, prompt, auth) } // AuthenticateWithInput will prompt the user for authentication if the input doesn't already provide it func AuthenticateWithInput( username, password, totp string, - nonInteractive bool, cfg keypairs.Configurable, out output.Outputer, prompt prompt.Prompter, @@ -44,7 +43,7 @@ func AuthenticateWithInput( logging.Debug("Authenticating with input") credentials := &mono_models.Credentials{Username: username, Password: password, Totp: totp} - if err := ensureCredentials(credentials, prompt, nonInteractive); err != nil { + if err := ensureCredentials(credentials, prompt); err != nil { return locale.WrapInputError(err, "login_cancelled") } @@ -133,10 +132,10 @@ func RequireAuthentication(message string, cfg keypairs.Configurable, out output return nil } -func ensureCredentials(credentials *mono_models.Credentials, prompter prompt.Prompter, nonInteractive bool) error { +func ensureCredentials(credentials *mono_models.Credentials, prompter prompt.Prompter) error { var err error if credentials.Username == "" { - if nonInteractive { + if !prompter.IsInteractive() || prompter.IsForced() { return locale.NewInputError("err_auth_needinput") } credentials.Username, err = prompter.Input("", locale.T("username_prompt"), ptr.To(""), nil, prompt.InputRequired) @@ -146,7 +145,7 @@ func ensureCredentials(credentials *mono_models.Credentials, prompter prompt.Pro } if credentials.Password == "" { - if nonInteractive { + if !prompter.IsInteractive() || prompter.IsForced() { return locale.NewInputError("err_auth_needinput") } credentials.Password, err = prompter.InputSecret("", locale.T("password_prompt"), prompt.InputRequired) diff --git a/internal/runners/auth/auth.go b/internal/runners/auth/auth.go index 6edac9b48e..47555bdae5 100644 --- a/internal/runners/auth/auth.go +++ b/internal/runners/auth/auth.go @@ -84,7 +84,7 @@ func (a *Auth) Run(params *AuthParams) error { func (a *Auth) authenticate(params *AuthParams) error { if params.Prompt || params.Username != "" { - return auth.AuthenticateWithInput(params.Username, params.Password, params.Totp, params.NonInteractive, a.Cfg, a.Outputer, a.Prompter, a.Auth) + return auth.AuthenticateWithInput(params.Username, params.Password, params.Totp, a.Cfg, a.Outputer, a.Prompter, a.Auth) } if params.Token != "" { From a6b2d52f6a5573f229f8e88cf36240d0d83c200c Mon Sep 17 00:00:00 2001 From: mitchell Date: Thu, 21 Nov 2024 11:41:07 -0500 Subject: [PATCH 070/336] Consolidate non-interactive mode setting and detection. --- cmd/state-installer/installer.go | 2 +- cmd/state-remote-installer/main.go | 2 +- cmd/state/main.go | 10 +++------- internal/constants/constants.go | 3 --- internal/prompt/prompt.go | 4 ++-- test/integration/edit_int_test.go | 7 ++----- 6 files changed, 9 insertions(+), 19 deletions(-) diff --git a/cmd/state-installer/installer.go b/cmd/state-installer/installer.go index 6deaadad41..7d168697e5 100644 --- a/cmd/state-installer/installer.go +++ b/cmd/state-installer/installer.go @@ -54,7 +54,7 @@ func (i *Installer) Install() (rerr error) { return errs.Wrap(err, "Could not determine if running as Windows administrator") } if isAdmin && !i.Params.isUpdate { - prompter := prompt.New(i.an) + prompter := prompt.New(i.out, i.an) if i.Params.nonInteractive { prompter.SetInteractive(false) } diff --git a/cmd/state-remote-installer/main.go b/cmd/state-remote-installer/main.go index 29b1b6cfc1..7aa6a5653f 100644 --- a/cmd/state-remote-installer/main.go +++ b/cmd/state-remote-installer/main.go @@ -116,7 +116,7 @@ func main() { an = sync.New(anaConst.SrcStateRemoteInstaller, cfg, nil, out) // Set up prompter - prompter := prompt.New(an) + prompter := prompt.New(out, an) params := newParams() cmd := captain.NewCommand( diff --git a/cmd/state/main.go b/cmd/state/main.go index 78daa39eb7..b507525845 100644 --- a/cmd/state/main.go +++ b/cmd/state/main.go @@ -110,9 +110,8 @@ func main() { // Set up our legacy outputer setPrinterColors(outFlags) - isInteractive := strings.ToLower(os.Getenv(constants.NonInteractiveEnvVarName)) != "true" && out.Config().Interactive // Run our main command logic, which is logic that defers to the error handling logic below - err = run(os.Args, isInteractive, cfg, out) + err = run(os.Args, cfg, out) if err != nil { exitCode, err = runbits_errors.ParseUserFacing(err) if err != nil { @@ -121,7 +120,7 @@ func main() { } } -func run(args []string, isInteractive bool, cfg *config.Instance, out output.Outputer) (rerr error) { +func run(args []string, cfg *config.Instance, out output.Outputer) (rerr error) { defer profile.Measure("main:run", time.Now()) // Set up profiling @@ -224,10 +223,7 @@ func run(args []string, isInteractive bool, cfg *config.Instance, out output.Out }() // Set up prompter - prompter := prompt.New(an) - if !isInteractive { - prompter.SetInteractive(false) - } + prompter := prompt.New(out, an) // Set up conditional, which accesses a lot of primer data sshell := subshell.New(cfg) diff --git a/internal/constants/constants.go b/internal/constants/constants.go index f64eb5650d..61b3adf8ef 100644 --- a/internal/constants/constants.go +++ b/internal/constants/constants.go @@ -118,9 +118,6 @@ const OverrideSessionTokenEnvVarName = "ACTIVESTATE_OVERRIDE_SESSION_TOKEN" // UpdateTagEnvVarName const UpdateTagEnvVarName = "ACTIVESTATE_UPDATE_TAG" -// NonInteractiveEnvVarName is the name of the environment variable that specifies whether to run the State Tool without prompts -const NonInteractiveEnvVarName = "ACTIVESTATE_NONINTERACTIVE" - // E2ETestEnvVarName is the name of the environment variable that specifies that we are running under E2E tests const E2ETestEnvVarName = "ACTIVESTATE_E2E_TEST" diff --git a/internal/prompt/prompt.go b/internal/prompt/prompt.go index 5ec5bb709f..61b67cc0b8 100644 --- a/internal/prompt/prompt.go +++ b/internal/prompt/prompt.go @@ -46,8 +46,8 @@ type Prompt struct { } // New creates a new prompter -func New(an EventDispatcher) Prompter { - return &Prompt{output.Get(), an, true, false} +func New(out output.Outputer, an EventDispatcher) Prompter { + return &Prompt{out, an, out.Config().Interactive, false} } // IsInteractive checks if the prompts can be interactive or should just return default values diff --git a/test/integration/edit_int_test.go b/test/integration/edit_int_test.go index 1b144d618f..3e154428ed 100644 --- a/test/integration/edit_int_test.go +++ b/test/integration/edit_int_test.go @@ -8,12 +8,10 @@ import ( "testing" "time" - "github.com/ActiveState/cli/internal/testhelpers/suite" - - "github.com/ActiveState/cli/internal/constants" "github.com/ActiveState/cli/internal/environment" "github.com/ActiveState/cli/internal/fileutils" "github.com/ActiveState/cli/internal/testhelpers/e2e" + "github.com/ActiveState/cli/internal/testhelpers/suite" "github.com/ActiveState/cli/internal/testhelpers/tagsuite" "github.com/ActiveState/cli/pkg/project" ) @@ -76,9 +74,8 @@ func (suite *EditIntegrationTestSuite) TestEdit_NonInteractive() { } ts, env := suite.setup() defer ts.Close() - extraEnv := e2e.OptAppendEnv(constants.NonInteractiveEnvVarName + "=true") - cp := ts.SpawnWithOpts(e2e.OptArgs("scripts", "edit", "test-script"), env, extraEnv) + cp := ts.SpawnWithOpts(e2e.OptArgs("scripts", "edit", "test-script", "-n"), env) cp.Expect("Watching file changes") // Can't consistently get this line detected on CI cp.Expect("Script changes detected") From bf58cd5640b1edb0748252c833d6dfe197f935a7 Mon Sep 17 00:00:00 2001 From: mdrakos Date: Thu, 21 Nov 2024 09:31:17 -0800 Subject: [PATCH 071/336] Use correct state tool --- test/integration/notification_int_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/integration/notification_int_test.go b/test/integration/notification_int_test.go index 7dc288984e..4e9f2f8f4c 100644 --- a/test/integration/notification_int_test.go +++ b/test/integration/notification_int_test.go @@ -241,7 +241,7 @@ func (suite *NotificationIntegrationTestSuite) TestNotification_Basic_InterruptP cp.ExpectExitCode(0) // Test that non-interactive does not prompt - cp = ts.SpawnCmdWithOpts("state", e2e.OptArgs("--version", "-n"), e2e.OptAppendEnv(constants.NotificationsOverrideEnvVarName+"="+msgFile)) + cp = ts.SpawnWithOpts(e2e.OptArgs("--version", "-n"), e2e.OptAppendEnv(constants.NotificationsOverrideEnvVarName+"="+msgFile)) cp.Expect(`This is a simple notification`) cp.Expect("ActiveState CLI by ActiveState Software Inc.") cp.ExpectExitCode(0) From 06643afcb93a1a4dbe686afacb5033d1b3691850 Mon Sep 17 00:00:00 2001 From: mdrakos Date: Thu, 21 Nov 2024 10:02:09 -0800 Subject: [PATCH 072/336] Revert config change --- cmd/state-svc/gqlgen.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cmd/state-svc/gqlgen.yml b/cmd/state-svc/gqlgen.yml index 476087864a..0c6a28fb70 100644 --- a/cmd/state-svc/gqlgen.yml +++ b/cmd/state-svc/gqlgen.yml @@ -39,8 +39,8 @@ model: # gqlgen will search for any type names in the schema in these go packages # if they match it will use them, otherwise it will generate them. -# autobind: -# - "github.com/ActiveState/cli/internal/graph" +autobind: + - "github.com/ActiveState/cli/internal/graph" # This section declares type mapping between the GraphQL and go type systems # From 6a801e888e4052a295f2780ecb9535ce2671bcb9 Mon Sep 17 00:00:00 2001 From: mdrakos Date: Thu, 21 Nov 2024 10:03:24 -0800 Subject: [PATCH 073/336] Change constant --- cmd/state-svc/internal/notifications/notifications.go | 2 +- internal/constants/constants.go | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/cmd/state-svc/internal/notifications/notifications.go b/cmd/state-svc/internal/notifications/notifications.go index 6d65b35393..7b9174d98c 100644 --- a/cmd/state-svc/internal/notifications/notifications.go +++ b/cmd/state-svc/internal/notifications/notifications.go @@ -208,7 +208,7 @@ func fetch() ([]*graph.NotificationInfo, error) { return nil, errs.Wrap(err, "Could not read messages override file") } } else { - body, err = httputil.Get(constants.MessagesInfoURL) + body, err = httputil.Get(constants.NotificationsInfoURL) if err != nil { return nil, errs.Wrap(err, "Could not fetch messages information") } diff --git a/internal/constants/constants.go b/internal/constants/constants.go index 56bd48c1a3..09e979157d 100644 --- a/internal/constants/constants.go +++ b/internal/constants/constants.go @@ -264,8 +264,8 @@ const VulnerabilitiesAPIPath = "/v13s/v1/graphql" // HasuraInventoryAPIPath is the path used for the hasura inventory api const HasuraInventoryAPIPath = "/sv/hasura-inventory/v1/graphql" -// MessagesInfoURL is the URL we check against to see what versions are deprecated -const MessagesInfoURL = "https://state-tool.s3.amazonaws.com/messages.json" +// NotificationsInfoURL is the URL we check against to see what versions are deprecated +const NotificationsInfoURL = "https://state-tool.s3.amazonaws.com/notifications.json" // DateFormatUser is the date format we use when communicating with the end-user const DateFormatUser = "January 02, 2006" From e091792665c2dc623a7e29603fb5d5b5434c6191 Mon Sep 17 00:00:00 2001 From: mdrakos Date: Thu, 21 Nov 2024 10:08:11 -0800 Subject: [PATCH 074/336] Convert remaining --- .../internal/notifications/condition.go | 2 +- .../internal/notifications/notifications.go | 10 +++++----- .../cmdtree/exechandlers/notifier/notifier.go | 20 +++++++++---------- 3 files changed, 16 insertions(+), 16 deletions(-) diff --git a/cmd/state-svc/internal/notifications/condition.go b/cmd/state-svc/internal/notifications/condition.go index 2645dd98ea..3e3aae510f 100644 --- a/cmd/state-svc/internal/notifications/condition.go +++ b/cmd/state-svc/internal/notifications/condition.go @@ -57,7 +57,7 @@ func conditionFuncMap() template.FuncMap { "regexMatch": func(str, pattern string) bool { rx, err := regexp.Compile(pattern) if err != nil { - multilog.Error("Messages: Could not compile regex pattern: %s", err) + multilog.Error("Notifications: Could not compile regex pattern: %s", err) return false } return rx.MatchString(str) diff --git a/cmd/state-svc/internal/notifications/notifications.go b/cmd/state-svc/internal/notifications/notifications.go index 7b9174d98c..59fd16fb58 100644 --- a/cmd/state-svc/internal/notifications/notifications.go +++ b/cmd/state-svc/internal/notifications/notifications.go @@ -23,7 +23,7 @@ import ( "github.com/blang/semver" ) -const ConfigKeyLastReport = "messages.last_reported" +const ConfigKeyLastReport = "notifications.last_reported" type Notifications struct { cfg *config.Instance @@ -100,7 +100,7 @@ func (m *Notifications) Check(command string, flags []string) ([]*graph.Notifica lastReportMap := m.cfg.GetStringMap(ConfigKeyLastReport) msgs, err := check(&conditionParams, allNotifications, lastReportMap, time.Now()) if err != nil { - return nil, errs.Wrap(err, "Could not check messages") + return nil, errs.Wrap(err, "Could not check notifications") } for _, msg := range msgs { lastReportMap[msg.ID] = time.Now().Format(time.RFC3339) @@ -205,18 +205,18 @@ func fetch() ([]*graph.NotificationInfo, error) { if v := os.Getenv(constants.NotificationsOverrideEnvVarName); v != "" { body, err = fileutils.ReadFile(v) if err != nil { - return nil, errs.Wrap(err, "Could not read messages override file") + return nil, errs.Wrap(err, "Could not read notifications override file") } } else { body, err = httputil.Get(constants.NotificationsInfoURL) if err != nil { - return nil, errs.Wrap(err, "Could not fetch messages information") + return nil, errs.Wrap(err, "Could not fetch notifications information") } } var notifications []*graph.NotificationInfo if err := json.Unmarshal(body, ¬ifications); err != nil { - return nil, errs.Wrap(err, "Could not unmarshall messages information") + return nil, errs.Wrap(err, "Could not unmarshall notifications information") } // Set defaults diff --git a/cmd/state/internal/cmdtree/exechandlers/notifier/notifier.go b/cmd/state/internal/cmdtree/exechandlers/notifier/notifier.go index 4c670a612a..30927dc40c 100644 --- a/cmd/state/internal/cmdtree/exechandlers/notifier/notifier.go +++ b/cmd/state/internal/cmdtree/exechandlers/notifier/notifier.go @@ -31,12 +31,12 @@ func New(out output.Outputer, svcModel *model.SvcModel) *Notifier { func (m *Notifier) OnExecStart(cmd *captain.Command, _ []string) error { if m.out.Type().IsStructured() { - // No point showing messaging on non-plain output (eg. json) + // No point showing notifications on non-plain output (eg. json) return nil } if cmd.Name() == "update" { - return nil // do not print update/deprecation warnings/messages when running `state update` + return nil // do not print update/deprecation warnings/notifications when running `state update` } cmds := cmd.JoinedCommandNames() @@ -52,7 +52,7 @@ func (m *Notifier) OnExecStart(cmd *captain.Command, _ []string) error { logging.Debug("Received %d notifications to print", len(notifications)) if err := m.PrintByPlacement(graph.NotificationPlacementTypeBeforeCmd); err != nil { - return errs.Wrap(err, "message error occurred before cmd") + return errs.Wrap(err, "notification error occurred before cmd") } return nil @@ -60,16 +60,16 @@ func (m *Notifier) OnExecStart(cmd *captain.Command, _ []string) error { func (m *Notifier) OnExecStop(cmd *captain.Command, _ []string) error { if m.out.Type().IsStructured() { - // No point showing messaging on non-plain output (eg. json) + // No point showing notification on non-plain output (eg. json) return nil } if cmd.Name() == "update" { - return nil // do not print update/deprecation warnings/messages when running `state update` + return nil // do not print update/deprecation warnings/notifications when running `state update` } if err := m.PrintByPlacement(graph.NotificationPlacementTypeAfterCmd); err != nil { - return errs.Wrap(err, "message error occurred before cmd") + return errs.Wrap(err, "notification error occurred before cmd") } return nil @@ -99,10 +99,10 @@ func (m *Notifier) PrintByPlacement(placement graph.NotificationPlacementType) e if notification.Interrupt == graph.NotificationInterruptTypePrompt { if m.out.Config().Interactive { - m.out.Print(locale.Tl("messenger_prompt_continue", "Press ENTER to continue.")) + m.out.Print(locale.Tl("notifier_prompt_continue", "Press ENTER to continue.")) fmt.Scanln(ptr.To("")) // Wait for input from user } else { - logging.Debug("Skipping message prompt as we're not in interactive mode") + logging.Debug("Skipping notification prompt as we're not in interactive mode") } } @@ -114,9 +114,9 @@ func (m *Notifier) PrintByPlacement(placement graph.NotificationPlacementType) e m.notifications = notifications if len(exit) > 0 { - // It's the responsibility of the message to give the user context as to why this exit happened. + // It's the responsibility of the notification to give the user context as to why this exit happened. // We pass an input error here to ensure this doesn't get logged. - return errs.Silence(errs.WrapExitCode(errs.New("Following messages triggered exit: %s", strings.Join(exit, ", ")), 1)) + return errs.Silence(errs.WrapExitCode(errs.New("Following notifications triggered exit: %s", strings.Join(exit, ", ")), 1)) } return nil From acaa7e16fac5ea2cd5330c1f1e3c6127c0b40214 Mon Sep 17 00:00:00 2001 From: mdrakos Date: Thu, 21 Nov 2024 11:03:56 -0800 Subject: [PATCH 075/336] Make changes backwards compatible --- .../internal/server/generated/generated.go | 40 +++++++++---------- cmd/state-svc/schema/schema.graphqls | 2 +- .../cmdtree/exechandlers/notifier/notifier.go | 4 +- internal/constants/constants.go | 2 +- internal/graph/generated.go | 16 ++++---- pkg/platform/api/svc/request/notification.go | 2 +- test/integration/notification_int_test.go | 36 ++++++++--------- 7 files changed, 51 insertions(+), 51 deletions(-) diff --git a/cmd/state-svc/internal/server/generated/generated.go b/cmd/state-svc/internal/server/generated/generated.go index b290494161..9e2bbb7947 100644 --- a/cmd/state-svc/internal/server/generated/generated.go +++ b/cmd/state-svc/internal/server/generated/generated.go @@ -84,14 +84,14 @@ type ComplexityRoot struct { } NotificationInfo struct { - Condition func(childComplexity int) int - EndDate func(childComplexity int) int - ID func(childComplexity int) int - Interrupt func(childComplexity int) int - Notification func(childComplexity int) int - Placement func(childComplexity int) int - Repeat func(childComplexity int) int - StartDate func(childComplexity int) int + Condition func(childComplexity int) int + EndDate func(childComplexity int) int + ID func(childComplexity int) int + Interrupt func(childComplexity int) int + Message func(childComplexity int) int + Placement func(childComplexity int) int + Repeat func(childComplexity int) int + StartDate func(childComplexity int) int } Organization struct { @@ -323,12 +323,12 @@ func (e *executableSchema) Complexity(typeName, field string, childComplexity in return e.complexity.NotificationInfo.Interrupt(childComplexity), true - case "NotificationInfo.notification": - if e.complexity.NotificationInfo.Notification == nil { + case "NotificationInfo.message": + if e.complexity.NotificationInfo.Message == nil { break } - return e.complexity.NotificationInfo.Notification(childComplexity), true + return e.complexity.NotificationInfo.Message(childComplexity), true case "NotificationInfo.placement": if e.complexity.NotificationInfo.Placement == nil { @@ -753,7 +753,7 @@ enum NotificationPlacementType { type NotificationInfo { id: String! - notification: String! + message: String! condition: String! startDate: String! endDate: String! @@ -1853,8 +1853,8 @@ func (ec *executionContext) fieldContext_NotificationInfo_id(_ context.Context, return fc, nil } -func (ec *executionContext) _NotificationInfo_notification(ctx context.Context, field graphql.CollectedField, obj *graph.NotificationInfo) (ret graphql.Marshaler) { - fc, err := ec.fieldContext_NotificationInfo_notification(ctx, field) +func (ec *executionContext) _NotificationInfo_message(ctx context.Context, field graphql.CollectedField, obj *graph.NotificationInfo) (ret graphql.Marshaler) { + fc, err := ec.fieldContext_NotificationInfo_message(ctx, field) if err != nil { return graphql.Null } @@ -1867,7 +1867,7 @@ func (ec *executionContext) _NotificationInfo_notification(ctx context.Context, }() resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) { ctx = rctx // use context from middleware stack in children - return obj.Notification, nil + return obj.Message, nil }) if err != nil { ec.Error(ctx, err) @@ -1884,7 +1884,7 @@ func (ec *executionContext) _NotificationInfo_notification(ctx context.Context, return ec.marshalNString2string(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_NotificationInfo_notification(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_NotificationInfo_message(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "NotificationInfo", Field: field, @@ -2737,8 +2737,8 @@ func (ec *executionContext) fieldContext_Query_checkNotifications(ctx context.Co switch field.Name { case "id": return ec.fieldContext_NotificationInfo_id(ctx, field) - case "notification": - return ec.fieldContext_NotificationInfo_notification(ctx, field) + case "message": + return ec.fieldContext_NotificationInfo_message(ctx, field) case "condition": return ec.fieldContext_NotificationInfo_condition(ctx, field) case "startDate": @@ -5841,8 +5841,8 @@ func (ec *executionContext) _NotificationInfo(ctx context.Context, sel ast.Selec if out.Values[i] == graphql.Null { out.Invalids++ } - case "notification": - out.Values[i] = ec._NotificationInfo_notification(ctx, field, obj) + case "message": + out.Values[i] = ec._NotificationInfo_message(ctx, field, obj) if out.Values[i] == graphql.Null { out.Invalids++ } diff --git a/cmd/state-svc/schema/schema.graphqls b/cmd/state-svc/schema/schema.graphqls index 094c3b829d..606eb5cfd3 100644 --- a/cmd/state-svc/schema/schema.graphqls +++ b/cmd/state-svc/schema/schema.graphqls @@ -53,7 +53,7 @@ enum NotificationPlacementType { type NotificationInfo { id: String! - notification: String! + message: String! condition: String! startDate: String! endDate: String! diff --git a/cmd/state/internal/cmdtree/exechandlers/notifier/notifier.go b/cmd/state/internal/cmdtree/exechandlers/notifier/notifier.go index 30927dc40c..63a8083864 100644 --- a/cmd/state/internal/cmdtree/exechandlers/notifier/notifier.go +++ b/cmd/state/internal/cmdtree/exechandlers/notifier/notifier.go @@ -90,8 +90,8 @@ func (m *Notifier) PrintByPlacement(placement graph.NotificationPlacementType) e m.out.Notice("") // Line break after } - logging.Debug("Printing notification: %s, %s", notification.ID, notification.Notification) - m.out.Notice(notification.Notification) + logging.Debug("Printing notification: %s, %s", notification.ID, notification.Message) + m.out.Notice(notification.Message) if placement == graph.NotificationPlacementTypeBeforeCmd { m.out.Notice("") // Line break before diff --git a/internal/constants/constants.go b/internal/constants/constants.go index 09e979157d..c5130ab6c7 100644 --- a/internal/constants/constants.go +++ b/internal/constants/constants.go @@ -265,7 +265,7 @@ const VulnerabilitiesAPIPath = "/v13s/v1/graphql" const HasuraInventoryAPIPath = "/sv/hasura-inventory/v1/graphql" // NotificationsInfoURL is the URL we check against to see what versions are deprecated -const NotificationsInfoURL = "https://state-tool.s3.amazonaws.com/notifications.json" +const NotificationsInfoURL = "https://state-tool.s3.amazonaws.com/messages.json" // DateFormatUser is the date format we use when communicating with the end-user const DateFormatUser = "January 02, 2006" diff --git a/internal/graph/generated.go b/internal/graph/generated.go index 482806f028..f61461ffa3 100644 --- a/internal/graph/generated.go +++ b/internal/graph/generated.go @@ -44,14 +44,14 @@ type Mutation struct { } type NotificationInfo struct { - ID string `json:"id"` - Notification string `json:"notification"` - Condition string `json:"condition"` - StartDate string `json:"startDate"` - EndDate string `json:"endDate"` - Repeat NotificationRepeatType `json:"repeat"` - Interrupt NotificationInterruptType `json:"interrupt"` - Placement NotificationPlacementType `json:"placement"` + ID string `json:"id"` + Message string `json:"message"` + Condition string `json:"condition"` + StartDate string `json:"startDate"` + EndDate string `json:"endDate"` + Repeat NotificationRepeatType `json:"repeat"` + Interrupt NotificationInterruptType `json:"interrupt"` + Placement NotificationPlacementType `json:"placement"` } type Organization struct { diff --git a/pkg/platform/api/svc/request/notification.go b/pkg/platform/api/svc/request/notification.go index a4983960ac..bc5cd097f0 100644 --- a/pkg/platform/api/svc/request/notification.go +++ b/pkg/platform/api/svc/request/notification.go @@ -16,7 +16,7 @@ func (m *NotificationRequest) Query() string { return `query($command: String!, $flags: [String!]!) { checkNotifications(command: $command, flags: $flags) { id - notification + message interrupt placement } diff --git a/test/integration/notification_int_test.go b/test/integration/notification_int_test.go index 4e9f2f8f4c..9889932cdc 100644 --- a/test/integration/notification_int_test.go +++ b/test/integration/notification_int_test.go @@ -42,7 +42,7 @@ func (suite *NotificationIntegrationTestSuite) TestNotification_Basic() { "Defaults", `[{ "ID": "simple", - "Notification": "This is a [NOTICE]simple[/RESET] notification" + "Message": "This is a [NOTICE]simple[/RESET] notification" }]`, false, true, @@ -51,7 +51,7 @@ func (suite *NotificationIntegrationTestSuite) TestNotification_Basic() { "Repeat Hourly", `[{ "ID": "simple", - "Notification": "This is a [NOTICE]simple[/RESET] notification", + "Message": "This is a [NOTICE]simple[/RESET] notification", "Repeat": "Hourly" }]`, false, @@ -61,7 +61,7 @@ func (suite *NotificationIntegrationTestSuite) TestNotification_Basic() { "Repeat Constantly", `[{ "ID": "simple", - "Notification": "This is a [NOTICE]simple[/RESET] notification", + "Message": "This is a [NOTICE]simple[/RESET] notification", "Repeat": "Constantly" }]`, true, @@ -71,7 +71,7 @@ func (suite *NotificationIntegrationTestSuite) TestNotification_Basic() { "Within Date Range", fmt.Sprintf(`[{ "ID": "simple", - "Notification": "This is a [NOTICE]simple[/RESET] notification", + "Message": "This is a [NOTICE]simple[/RESET] notification", "StartDate": "%s", "EndDate": "%s" }]`, @@ -84,7 +84,7 @@ func (suite *NotificationIntegrationTestSuite) TestNotification_Basic() { "Outside Date Range", fmt.Sprintf(`[{ "ID": "simple", - "Notification": "This is a [NOTICE]simple[/RESET] notification", + "Message": "This is a [NOTICE]simple[/RESET] notification", "StartDate": "%s", "EndDate": "%s" }]`, @@ -97,7 +97,7 @@ func (suite *NotificationIntegrationTestSuite) TestNotification_Basic() { "Only Start Date - Inside Range", fmt.Sprintf(`[{ "ID": "simple", - "Notification": "This is a [NOTICE]simple[/RESET] notification", + "Message": "This is a [NOTICE]simple[/RESET] notification", "StartDate": "%s" }]`, time.Now().Add(-1*time.Hour).Format(time.RFC3339)), @@ -108,7 +108,7 @@ func (suite *NotificationIntegrationTestSuite) TestNotification_Basic() { "Only End Date - Inside Range", fmt.Sprintf(`[{ "ID": "simple", - "Notification": "This is a [NOTICE]simple[/RESET] notification", + "Message": "This is a [NOTICE]simple[/RESET] notification", "EndDate": "%s" }]`, time.Now().Add(1*time.Hour).Format(time.RFC3339)), @@ -119,7 +119,7 @@ func (suite *NotificationIntegrationTestSuite) TestNotification_Basic() { "Outside Date Range - Future", fmt.Sprintf(`[{ "ID": "simple", - "Notification": "This is a [NOTICE]simple[/RESET] notification", + "Message": "This is a [NOTICE]simple[/RESET] notification", "StartDate": "%s", "EndDate": "%s" }]`, @@ -132,7 +132,7 @@ func (suite *NotificationIntegrationTestSuite) TestNotification_Basic() { "Outside Date Range - Past", fmt.Sprintf(`[{ "ID": "simple", - "Notification": "This is a [NOTICE]simple[/RESET] notification", + "Message": "This is a [NOTICE]simple[/RESET] notification", "StartDate": "%s", "EndDate": "%s" }]`, @@ -145,7 +145,7 @@ func (suite *NotificationIntegrationTestSuite) TestNotification_Basic() { "Only Start Date - Outside Range", fmt.Sprintf(`[{ "ID": "simple", - "Notification": "This is a [NOTICE]simple[/RESET] notification", + "Message": "This is a [NOTICE]simple[/RESET] notification", "StartDate": "%s" }]`, time.Now().Add(1*time.Hour).Format(time.RFC3339)), @@ -156,7 +156,7 @@ func (suite *NotificationIntegrationTestSuite) TestNotification_Basic() { "Only End Date - Outside Range", fmt.Sprintf(`[{ "ID": "simple", - "Notification": "This is a [NOTICE]simple[/RESET] notification", + "Message": "This is a [NOTICE]simple[/RESET] notification", "EndDate": "%s" }]`, time.Now().Add(-1*time.Hour).Format(time.RFC3339)), @@ -169,7 +169,7 @@ func (suite *NotificationIntegrationTestSuite) TestNotification_Basic() { ts := e2e.New(suite.T(), false) defer ts.Close() - msgFile, err := fileutils.WriteTempFileToDir(ts.Dirs.Work, "notifications.json", []byte(tt.MessageJson), 0755) + msgFile, err := fileutils.WriteTempFileToDir(ts.Dirs.Work, "messages.json", []byte(tt.MessageJson), 0755) suite.Require().NoError(err) cp := ts.SpawnWithOpts(e2e.OptArgs("--version"), e2e.OptAppendEnv(constants.NotificationsOverrideEnvVarName+"="+msgFile)) @@ -201,10 +201,10 @@ func (suite *NotificationIntegrationTestSuite) TestNotification_Basic_PlacementA ts := e2e.New(suite.T(), false) defer ts.Close() - msgFile, err := fileutils.WriteTempFileToDir(ts.Dirs.Work, "notifications.json", []byte(fmt.Sprintf(`[ + msgFile, err := fileutils.WriteTempFileToDir(ts.Dirs.Work, "messages.json", []byte(fmt.Sprintf(`[ { "ID": "simple", - "Notification": "This is a [NOTICE]simple[/RESET] notification", + "Message": "This is a [NOTICE]simple[/RESET] notification", "Placement": "%s" } ]`, graph.NotificationPlacementTypeAfterCmd)), 0755) @@ -221,10 +221,10 @@ func (suite *NotificationIntegrationTestSuite) TestNotification_Basic_InterruptP ts := e2e.New(suite.T(), false) defer ts.Close() - msgFile, err := fileutils.WriteTempFileToDir(ts.Dirs.Work, "notifications.json", []byte(fmt.Sprintf(`[ + msgFile, err := fileutils.WriteTempFileToDir(ts.Dirs.Work, "messages.json", []byte(fmt.Sprintf(`[ { "ID": "simple", - "Notification": "This is a [NOTICE]simple[/RESET] notification", + "Message": "This is a [NOTICE]simple[/RESET] notification", "Repeat": "Constantly", "Interrupt": "%s" } @@ -253,10 +253,10 @@ func (suite *NotificationIntegrationTestSuite) TestNotification_Basic_InterruptE ts := e2e.New(suite.T(), false) defer ts.Close() - msgFile, err := fileutils.WriteTempFileToDir(ts.Dirs.Work, "notifications.json", []byte(fmt.Sprintf(`[ + msgFile, err := fileutils.WriteTempFileToDir(ts.Dirs.Work, "messages.json", []byte(fmt.Sprintf(`[ { "ID": "simple", - "Notification": "This is a [NOTICE]simple[/RESET] notification", + "Message": "This is a [NOTICE]simple[/RESET] notification", "Interrupt": "%s" } ]`, graph.NotificationInterruptTypeExit)), 0755) From 254108a7e45fa0c5ab729bd7a91f49493d861dfa Mon Sep 17 00:00:00 2001 From: mdrakos Date: Thu, 21 Nov 2024 11:25:09 -0800 Subject: [PATCH 076/336] Rename to gqlclient --- internal/{graphql => gqlclient}/error.go | 2 +- internal/{graphql => gqlclient}/graphql.go | 2 +- internal/{graphql => gqlclient}/graphql_json_test.go | 2 +- .../{graphql => gqlclient}/graphql_multipart_test.go | 2 +- .../{graphql => gqlclient}/graphql_shared_test.go | 2 +- internal/{graphql => gqlclient}/graphql_test.go | 2 +- pkg/platform/api/graphql/graphql.go | 6 +++--- pkg/platform/api/graphql/request/publish.go | 8 ++++---- pkg/platform/api/hasura_inventory/inventory.go | 6 +++--- pkg/platform/api/mediator/mediator.go | 6 +++--- pkg/platform/api/vulnerabilities/vulnerabilities.go | 6 +++--- pkg/platform/model/buildplanner/build.go | 12 ++++++------ pkg/platform/model/buildplanner/buildplanner.go | 6 +++--- pkg/platform/model/svc.go | 10 +++++----- 14 files changed, 36 insertions(+), 36 deletions(-) rename internal/{graphql => gqlclient}/error.go (95%) rename internal/{graphql => gqlclient}/graphql.go (99%) rename internal/{graphql => gqlclient}/graphql_json_test.go (99%) rename internal/{graphql => gqlclient}/graphql_multipart_test.go (99%) rename internal/{graphql => gqlclient}/graphql_shared_test.go (97%) rename internal/{graphql => gqlclient}/graphql_test.go (99%) diff --git a/internal/graphql/error.go b/internal/gqlclient/error.go similarity index 95% rename from internal/graphql/error.go rename to internal/gqlclient/error.go index b8031b24c8..f5c9e66a17 100644 --- a/internal/graphql/error.go +++ b/internal/gqlclient/error.go @@ -1,4 +1,4 @@ -package graphql +package gqlclient import "fmt" diff --git a/internal/graphql/graphql.go b/internal/gqlclient/graphql.go similarity index 99% rename from internal/graphql/graphql.go rename to internal/gqlclient/graphql.go index 283e6c0b1e..bb1003465a 100644 --- a/internal/graphql/graphql.go +++ b/internal/gqlclient/graphql.go @@ -29,7 +29,7 @@ // // httpclient := &http.Client{} // client := graphql.NewClient("https://machinebox.io/graphql", graphql.WithHTTPClient(httpclient)) -package graphql +package gqlclient import ( "bytes" diff --git a/internal/graphql/graphql_json_test.go b/internal/gqlclient/graphql_json_test.go similarity index 99% rename from internal/graphql/graphql_json_test.go rename to internal/gqlclient/graphql_json_test.go index b2fbdda289..4dce0b22c2 100644 --- a/internal/graphql/graphql_json_test.go +++ b/internal/gqlclient/graphql_json_test.go @@ -1,4 +1,4 @@ -package graphql +package gqlclient import ( "context" diff --git a/internal/graphql/graphql_multipart_test.go b/internal/gqlclient/graphql_multipart_test.go similarity index 99% rename from internal/graphql/graphql_multipart_test.go rename to internal/gqlclient/graphql_multipart_test.go index a6734748ad..bf05030ecd 100644 --- a/internal/graphql/graphql_multipart_test.go +++ b/internal/gqlclient/graphql_multipart_test.go @@ -1,4 +1,4 @@ -package graphql +package gqlclient import ( "context" diff --git a/internal/graphql/graphql_shared_test.go b/internal/gqlclient/graphql_shared_test.go similarity index 97% rename from internal/graphql/graphql_shared_test.go rename to internal/gqlclient/graphql_shared_test.go index e20d924709..da62126795 100644 --- a/internal/graphql/graphql_shared_test.go +++ b/internal/gqlclient/graphql_shared_test.go @@ -1,4 +1,4 @@ -package graphql +package gqlclient type TestRequest struct { q string diff --git a/internal/graphql/graphql_test.go b/internal/gqlclient/graphql_test.go similarity index 99% rename from internal/graphql/graphql_test.go rename to internal/gqlclient/graphql_test.go index 0bc1875361..9cde0c9abf 100644 --- a/internal/graphql/graphql_test.go +++ b/internal/gqlclient/graphql_test.go @@ -1,4 +1,4 @@ -package graphql +package gqlclient import ( "context" diff --git a/pkg/platform/api/graphql/graphql.go b/pkg/platform/api/graphql/graphql.go index 878a9d6653..f0e01183cb 100644 --- a/pkg/platform/api/graphql/graphql.go +++ b/pkg/platform/api/graphql/graphql.go @@ -1,14 +1,14 @@ package graphql import ( - "github.com/ActiveState/cli/internal/graphql" + "github.com/ActiveState/cli/internal/gqlclient" "github.com/ActiveState/cli/pkg/platform/api" "github.com/ActiveState/cli/pkg/platform/authentication" ) -func New(auth *authentication.Auth) *graphql.Client { +func New(auth *authentication.Auth) *gqlclient.Client { url := api.GetServiceURL(api.ServiceGraphQL) - c := graphql.New(url.String(), 0) + c := gqlclient.New(url.String(), 0) c.SetTokenProvider(auth) return c } diff --git a/pkg/platform/api/graphql/request/publish.go b/pkg/platform/api/graphql/request/publish.go index 966d210ce8..551bdb9e06 100644 --- a/pkg/platform/api/graphql/request/publish.go +++ b/pkg/platform/api/graphql/request/publish.go @@ -9,7 +9,7 @@ import ( "github.com/ActiveState/cli/internal/errs" "github.com/ActiveState/cli/internal/fileutils" - "github.com/ActiveState/cli/internal/graphql" + "github.com/ActiveState/cli/internal/gqlclient" "github.com/ActiveState/cli/internal/locale" yamlcomment "github.com/zijiren233/yaml-comment" "gopkg.in/yaml.v3" @@ -187,11 +187,11 @@ func (p *PublishInput) Close() error { return p.file.Close() } -func (p *PublishInput) Files() []graphql.File { +func (p *PublishInput) Files() []gqlclient.File { if p.file == nil { - return []graphql.File{} + return []gqlclient.File{} } - return []graphql.File{ + return []gqlclient.File{ { Field: "variables.input.file", // this needs to map to the graphql input, eg. variables.input.file Name: p.Variables.Name, diff --git a/pkg/platform/api/hasura_inventory/inventory.go b/pkg/platform/api/hasura_inventory/inventory.go index dbca50e093..b4ddd8dc71 100644 --- a/pkg/platform/api/hasura_inventory/inventory.go +++ b/pkg/platform/api/hasura_inventory/inventory.go @@ -1,13 +1,13 @@ package inventory import ( - "github.com/ActiveState/cli/internal/graphql" + "github.com/ActiveState/cli/internal/gqlclient" "github.com/ActiveState/cli/pkg/platform/api" "github.com/ActiveState/cli/pkg/platform/authentication" ) -func New(auth *authentication.Auth) *graphql.Client { - client := graphql.New(api.GetServiceURL(api.ServiceHasuraInventory).String(), 0) +func New(auth *authentication.Auth) *gqlclient.Client { + client := gqlclient.New(api.GetServiceURL(api.ServiceHasuraInventory).String(), 0) if auth != nil && auth.Authenticated() { client.SetTokenProvider(auth) diff --git a/pkg/platform/api/mediator/mediator.go b/pkg/platform/api/mediator/mediator.go index 67d744fdec..193f43a45b 100644 --- a/pkg/platform/api/mediator/mediator.go +++ b/pkg/platform/api/mediator/mediator.go @@ -1,14 +1,14 @@ package mediator import ( - "github.com/ActiveState/cli/internal/graphql" + "github.com/ActiveState/cli/internal/gqlclient" "github.com/ActiveState/cli/pkg/platform/api" "github.com/ActiveState/cli/pkg/platform/authentication" ) -func New(auth *authentication.Auth) *graphql.Client { +func New(auth *authentication.Auth) *gqlclient.Client { url := api.GetServiceURL(api.ServiceMediator) - c := graphql.New(url.String(), 0) + c := gqlclient.New(url.String(), 0) if auth != nil { c.SetTokenProvider(auth) } diff --git a/pkg/platform/api/vulnerabilities/vulnerabilities.go b/pkg/platform/api/vulnerabilities/vulnerabilities.go index 9861444cba..7e49978dc2 100644 --- a/pkg/platform/api/vulnerabilities/vulnerabilities.go +++ b/pkg/platform/api/vulnerabilities/vulnerabilities.go @@ -1,13 +1,13 @@ package vulnerabilities import ( - "github.com/ActiveState/cli/internal/graphql" + "github.com/ActiveState/cli/internal/gqlclient" "github.com/ActiveState/cli/pkg/platform/api" "github.com/ActiveState/cli/pkg/platform/authentication" ) -func New(auth *authentication.Auth) *graphql.Client { - client := graphql.New(api.GetServiceURL(api.ServiceVulnerabilities).String(), 0) +func New(auth *authentication.Auth) *gqlclient.Client { + client := gqlclient.New(api.GetServiceURL(api.ServiceVulnerabilities).String(), 0) // Most requests to this service require authentication if auth != nil && auth.Authenticated() { diff --git a/pkg/platform/model/buildplanner/build.go b/pkg/platform/model/buildplanner/build.go index a9d6c9ad3b..9abd93156d 100644 --- a/pkg/platform/model/buildplanner/build.go +++ b/pkg/platform/model/buildplanner/build.go @@ -9,7 +9,7 @@ import ( "time" "github.com/ActiveState/cli/internal/errs" - "github.com/ActiveState/cli/internal/graphql" + "github.com/ActiveState/cli/internal/gqlclient" "github.com/ActiveState/cli/internal/locale" "github.com/ActiveState/cli/internal/logging" "github.com/ActiveState/cli/internal/rtutils/ptr" @@ -49,7 +49,7 @@ func (c *Commit) BuildScript() *buildscript.BuildScript { return c.buildscript } -func (c *client) Run(req graphql.Request, resp interface{}) error { +func (c *client) Run(req gqlclient.Request, resp interface{}) error { return c.gqlClient.Run(req, resp) } @@ -152,11 +152,11 @@ func (b *BuildPlanner) fetchCommit(commitID strfmt.UUID, owner, project string, // "data": null // } func processBuildPlannerError(bpErr error, fallbackMessage string) error { - graphqlErr := &graphql.GraphErr{} - if errors.As(bpErr, graphqlErr) { - code, ok := graphqlErr.Extensions[codeExtensionKey].(string) + gqlclientErr := &gqlclient.GraphErr{} + if errors.As(bpErr, gqlclientErr) { + code, ok := gqlclientErr.Extensions[codeExtensionKey].(string) if ok && code == clientDeprecationErrorKey { - return &response.BuildPlannerError{Err: locale.NewExternalError("err_buildplanner_deprecated", "Encountered deprecation error: {{.V0}}", graphqlErr.Message)} + return &response.BuildPlannerError{Err: locale.NewExternalError("err_buildplanner_deprecated", "Encountered deprecation error: {{.V0}}", gqlclientErr.Message)} } } if locale.IsInputError(bpErr) { diff --git a/pkg/platform/model/buildplanner/buildplanner.go b/pkg/platform/model/buildplanner/buildplanner.go index 04533bbe6a..6233807447 100644 --- a/pkg/platform/model/buildplanner/buildplanner.go +++ b/pkg/platform/model/buildplanner/buildplanner.go @@ -3,7 +3,7 @@ package buildplanner import ( "time" - "github.com/ActiveState/cli/internal/graphql" + "github.com/ActiveState/cli/internal/gqlclient" "github.com/ActiveState/cli/internal/logging" "github.com/ActiveState/cli/pkg/platform/api" "github.com/ActiveState/cli/pkg/platform/authentication" @@ -12,7 +12,7 @@ import ( const clientDeprecationErrorKey = "CLIENT_DEPRECATION_ERROR" type client struct { - gqlClient *graphql.Client + gqlClient *gqlclient.Client } type BuildPlanner struct { @@ -40,7 +40,7 @@ func NewBuildPlannerModel(auth *authentication.Auth, cache cacher) *BuildPlanner bpURL := api.GetServiceURL(api.ServiceBuildPlanner).String() logging.Debug("Using build planner at: %s", bpURL) - gqlClient := graphql.NewWithOpts(bpURL, 0, graphql.WithHTTPClient(api.NewHTTPClient())) + gqlClient := gqlclient.NewWithOpts(bpURL, 0, gqlclient.WithHTTPClient(api.NewHTTPClient())) if auth != nil && auth.Authenticated() { gqlClient.SetTokenProvider(auth) diff --git a/pkg/platform/model/svc.go b/pkg/platform/model/svc.go index 1fde4a4576..c0ed10b850 100644 --- a/pkg/platform/model/svc.go +++ b/pkg/platform/model/svc.go @@ -10,8 +10,8 @@ import ( "github.com/ActiveState/cli/internal/condition" "github.com/ActiveState/cli/internal/errs" + "github.com/ActiveState/cli/internal/gqlclient" "github.com/ActiveState/cli/internal/graph" - "github.com/ActiveState/cli/internal/graphql" "github.com/ActiveState/cli/internal/logging" "github.com/ActiveState/cli/internal/profile" "github.com/ActiveState/cli/internal/rtutils/ptr" @@ -22,7 +22,7 @@ import ( var SvcTimeoutMinimal = time.Millisecond * 500 type SvcModel struct { - client *graphql.Client + client *gqlclient.Client } // NewSvcModel returns a model for all client connections to a State Svc. This function returns an error if the State service is not yet ready to communicate. @@ -30,7 +30,7 @@ func NewSvcModel(port string) *SvcModel { localURL := "http://127.0.0.1" + port + "/query" return &SvcModel{ - client: graphql.NewWithOpts(localURL, 0, graphql.WithHTTPClient(&http.Client{})), + client: gqlclient.NewWithOpts(localURL, 0, gqlclient.WithHTTPClient(&http.Client{})), } } @@ -39,12 +39,12 @@ func (m *SvcModel) EnableDebugLog() { m.client.EnableDebugLog() } -func (m *SvcModel) request(ctx context.Context, request graphql.Request, resp interface{}) error { +func (m *SvcModel) request(ctx context.Context, request gqlclient.Request, resp interface{}) error { defer profile.Measure("SvcModel:request", time.Now()) err := m.client.RunWithContext(ctx, request, resp) if err != nil { - reqError := &graphql.RequestError{} + reqError := &gqlclient.RequestError{} if errors.As(err, &reqError) && (!condition.BuiltViaCI() || condition.InTest()) { vars, err := request.Vars() if err != nil { From f50e832a7165088e4a2cf3ca340e1441b299cc92 Mon Sep 17 00:00:00 2001 From: mdrakos Date: Thu, 21 Nov 2024 11:31:05 -0800 Subject: [PATCH 077/336] Rename files --- internal/gqlclient/{graphql.go => gqlclient.go} | 0 .../gqlclient/{graphql_json_test.go => gqlclient_json_test.go} | 0 .../{graphql_multipart_test.go => gqlclient_multipart_test.go} | 0 .../{graphql_shared_test.go => gqlclient_shared_test.go} | 0 internal/gqlclient/{graphql_test.go => gqlclient_test.go} | 0 5 files changed, 0 insertions(+), 0 deletions(-) rename internal/gqlclient/{graphql.go => gqlclient.go} (100%) rename internal/gqlclient/{graphql_json_test.go => gqlclient_json_test.go} (100%) rename internal/gqlclient/{graphql_multipart_test.go => gqlclient_multipart_test.go} (100%) rename internal/gqlclient/{graphql_shared_test.go => gqlclient_shared_test.go} (100%) rename internal/gqlclient/{graphql_test.go => gqlclient_test.go} (100%) diff --git a/internal/gqlclient/graphql.go b/internal/gqlclient/gqlclient.go similarity index 100% rename from internal/gqlclient/graphql.go rename to internal/gqlclient/gqlclient.go diff --git a/internal/gqlclient/graphql_json_test.go b/internal/gqlclient/gqlclient_json_test.go similarity index 100% rename from internal/gqlclient/graphql_json_test.go rename to internal/gqlclient/gqlclient_json_test.go diff --git a/internal/gqlclient/graphql_multipart_test.go b/internal/gqlclient/gqlclient_multipart_test.go similarity index 100% rename from internal/gqlclient/graphql_multipart_test.go rename to internal/gqlclient/gqlclient_multipart_test.go diff --git a/internal/gqlclient/graphql_shared_test.go b/internal/gqlclient/gqlclient_shared_test.go similarity index 100% rename from internal/gqlclient/graphql_shared_test.go rename to internal/gqlclient/gqlclient_shared_test.go diff --git a/internal/gqlclient/graphql_test.go b/internal/gqlclient/gqlclient_test.go similarity index 100% rename from internal/gqlclient/graphql_test.go rename to internal/gqlclient/gqlclient_test.go From fa5bc026f4d67f3448f679659bd9f050077fa165 Mon Sep 17 00:00:00 2001 From: mitchell Date: Thu, 21 Nov 2024 15:05:21 -0500 Subject: [PATCH 078/336] Update localizations for non-interactive and force flags. --- internal/locale/locales/en-us.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/internal/locale/locales/en-us.yaml b/internal/locale/locales/en-us.yaml index eb4923fdf8..2ee84b1c67 100644 --- a/internal/locale/locales/en-us.yaml +++ b/internal/locale/locales/en-us.yaml @@ -22,9 +22,9 @@ flag_state_monochrome_output_description: flag_state_output_description: other: "Set the output method. Possible values: plain, simple, json, editor" flag_state_non_interactive_description: - other: Run the State Tool without any prompts + other: Assume default values for any prompts flag_state_force_description: - other: Run the State Tool without any prompts, overriding any safe defaults + other: Disable prompts and perform the requested action regardless of defaults values (this can result in destructive or unsafe actions, such as installing packages with critical CVEs) flag_state_version_description: other: Show the version of our state executable flag_state_activate_path_description: From 40b37ba2895f39d6cba7e1780ee2799185edd4ae Mon Sep 17 00:00:00 2001 From: mitchell Date: Thu, 21 Nov 2024 15:06:50 -0500 Subject: [PATCH 079/336] Use a constant error for prompts that do not have forced values. --- internal/captain/rationalize.go | 6 ++++++ internal/prompt/prompt.go | 8 +++++--- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/internal/captain/rationalize.go b/internal/captain/rationalize.go index c44d7dbfdf..feba9c19dd 100644 --- a/internal/captain/rationalize.go +++ b/internal/captain/rationalize.go @@ -5,6 +5,7 @@ import ( "github.com/ActiveState/cli/internal/errs" "github.com/ActiveState/cli/internal/locale" + "github.com/ActiveState/cli/internal/prompt" "github.com/ActiveState/cli/internal/runbits/rationalize" "github.com/ActiveState/cli/pkg/buildscript" "github.com/ActiveState/cli/pkg/localcommit" @@ -38,5 +39,10 @@ func rationalizeError(err *error) { *err = errs.WrapUserFacing(*err, locale.T("err_outdated_buildscript"), errs.SetInput()) + + case errors.Is(*err, prompt.ErrNoForceOption): + *err = errs.WrapUserFacing(*err, + locale.T("err_prompt_no_force_option", + "This command has a prompt that does not support the '[ACTIONABLE]--force[/RESET]' flag.")) } } diff --git a/internal/prompt/prompt.go b/internal/prompt/prompt.go index 61b67cc0b8..ae18a55cfe 100644 --- a/internal/prompt/prompt.go +++ b/internal/prompt/prompt.go @@ -45,6 +45,8 @@ type Prompt struct { isForced bool } +var ErrNoForceOption = errs.New("No force option given for forced prompt") + // New creates a new prompter func New(out output.Outputer, an EventDispatcher) Prompter { return &Prompt{out, an, out.Config().Interactive, false} @@ -113,7 +115,7 @@ func (p *Prompt) InputAndValidate(title, message string, defaultResponse *string p.out.Notice(locale.Tr("prompt_using_force", *response)) return *response, nil } - return "", errs.New("No force option given for forced prompt") + return "", ErrNoForceOption } if !p.isInteractive { @@ -172,7 +174,7 @@ func (p *Prompt) Select(title, message string, choices []string, defaultChoice * p.out.Notice(locale.Tr("prompt_using_force", *choice)) return *choice, nil } - return "", errs.New("No force option given for forced prompt") + return "", ErrNoForceOption } if !p.isInteractive { @@ -218,7 +220,7 @@ func (p *Prompt) Confirm(title, message string, defaultChoice *bool, forcedChoic p.out.Notice(locale.T("prompt_continue_force")) return *choice, nil } - return false, errs.New("No force option given for forced prompt") + return false, ErrNoForceOption } if !p.isInteractive { From 8b4a5afabc184e0de6c44fb85a52f4988547ab72 Mon Sep 17 00:00:00 2001 From: mitchell Date: Thu, 21 Nov 2024 19:05:36 -0500 Subject: [PATCH 080/336] Do not require custom runtime path for portable projects. --- cmd/state/internal/cmdtree/checkout.go | 2 +- pkg/project/project.go | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/cmd/state/internal/cmdtree/checkout.go b/cmd/state/internal/cmdtree/checkout.go index 0e1c91ab23..05ee821101 100644 --- a/cmd/state/internal/cmdtree/checkout.go +++ b/cmd/state/internal/cmdtree/checkout.go @@ -28,7 +28,7 @@ func newCheckoutCommand(prime *primer.Values) *captain.Command { }, { Name: "portable", - Description: locale.Tl("flag_state_checkout_portable_description", "Copy files to runtime-path instead of linking to them"), + Description: locale.Tl("flag_state_checkout_portable_description", "Copy files to their runtime path instead of linking to them"), Value: ¶ms.Portable, }, { diff --git a/pkg/project/project.go b/pkg/project/project.go index 06ea03ccbe..ad911807fd 100644 --- a/pkg/project/project.go +++ b/pkg/project/project.go @@ -255,7 +255,7 @@ func (p *Project) Lock() string { return p.projectfile.Lock } // Cache returns the cache information for this project func (p *Project) Cache() string { return p.projectfile.Cache } -func (p *Project) IsPortable() bool { return p.projectfile.Portable && p.projectfile.Cache != "" } +func (p *Project) IsPortable() bool { return p.projectfile.Portable } // Namespace returns project namespace func (p *Project) Namespace() *Namespaced { From 97d2beb536d5c5297507a81e87d2b3aa90394308 Mon Sep 17 00:00:00 2001 From: mitchell Date: Fri, 22 Nov 2024 10:52:10 -0500 Subject: [PATCH 081/336] Installing in non-interactive mode on Windows with admin should bypass the prompt. --- cmd/state-installer/installer.go | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/cmd/state-installer/installer.go b/cmd/state-installer/installer.go index 7d168697e5..3a4bc67049 100644 --- a/cmd/state-installer/installer.go +++ b/cmd/state-installer/installer.go @@ -61,7 +61,8 @@ func (i *Installer) Install() (rerr error) { if i.Params.force { prompter.SetForce(true) } - confirm, err := prompter.Confirm("", locale.T("installer_prompt_is_admin"), ptr.To(false), ptr.To(true)) + defaultChoice := i.Params.nonInteractive + confirm, err := prompter.Confirm("", locale.T("installer_prompt_is_admin"), &defaultChoice, ptr.To(true)) if err != nil { return errs.Wrap(err, "Not confirmed") } From 878565bdeb01aa9e952edd6bf67039001ac4b3d6 Mon Sep 17 00:00:00 2001 From: mitchell Date: Fri, 22 Nov 2024 15:16:26 -0500 Subject: [PATCH 082/336] Show prompts, even if running in non-interactive or force mode. --- internal/prompt/overrides.go | 60 +++++++++++++ internal/prompt/prompt.go | 157 +++++++++++++++++++++-------------- 2 files changed, 154 insertions(+), 63 deletions(-) diff --git a/internal/prompt/overrides.go b/internal/prompt/overrides.go index d1d94c4a32..230f7b86c0 100644 --- a/internal/prompt/overrides.go +++ b/internal/prompt/overrides.go @@ -6,6 +6,34 @@ import ( type Select struct { *survey.Select + nonInteractiveChoice *string +} + +func (s *Select) Prompt() (interface{}, error) { + if s.nonInteractiveChoice == nil { + return s.Select.Prompt() + } + + idx := 0 + for i, choice := range s.Select.Options { + if choice == *s.nonInteractiveChoice { + idx = i + break + } + } + + err := s.Select.Render( + survey.SelectQuestionTemplate, + survey.SelectTemplateData{ + Select: *s.Select, + PageEntries: s.Select.Options, + SelectedIndex: idx, + }) + if err != nil { + return nil, err + } + + return *s.nonInteractiveChoice, nil } func (s *Select) Cleanup(interface{}) error { @@ -15,6 +43,22 @@ func (s *Select) Cleanup(interface{}) error { type Input struct { *survey.Input + nonInteractiveResponse *string +} + +func (i *Input) Prompt() (interface{}, error) { + if i.nonInteractiveResponse == nil { + return i.Input.Prompt() + } + + err := i.Input.Render( + survey.InputQuestionTemplate, + survey.InputTemplateData{Input: *i.Input}) + if err != nil { + return nil, err + } + + return *i.nonInteractiveResponse, nil } func (i *Input) Cleanup(val interface{}) error { @@ -33,6 +77,22 @@ func (i *Password) Cleanup(val interface{}) error { type Confirm struct { *survey.Confirm + nonInteractiveChoice *bool +} + +func (s *Confirm) Prompt() (interface{}, error) { + if s.nonInteractiveChoice == nil { + return s.Confirm.Prompt() + } + + err := s.Confirm.Render( + survey.ConfirmQuestionTemplate, + survey.ConfirmTemplateData{Confirm: *s.Confirm}) + if err != nil { + return nil, err + } + + return *s.nonInteractiveChoice, nil } func (s *Confirm) Cleanup(interface{}) error { diff --git a/internal/prompt/prompt.go b/internal/prompt/prompt.go index ae18a55cfe..d1db14cb01 100644 --- a/internal/prompt/prompt.go +++ b/internal/prompt/prompt.go @@ -106,26 +106,6 @@ func interactiveInputError(message string) error { // If the prompt is non-interactive, it returns defaultResponse. // If the prompt is forced, it returns forcedResponse if not nil, or defaultResponse. func (p *Prompt) InputAndValidate(title, message string, defaultResponse *string, forcedResponse *string, validator ValidatorFunc, flags ...ValidatorFlag) (string, error) { - if p.isForced { - response := forcedResponse - if response == nil { - response = defaultResponse - } - if response != nil { - p.out.Notice(locale.Tr("prompt_using_force", *response)) - return *response, nil - } - return "", ErrNoForceOption - } - - if !p.isInteractive { - if defaultResponse != nil { - p.out.Notice(locale.Tr("prompt_using_non_interactive", *defaultResponse)) - return *defaultResponse, nil - } - return "", interactiveInputError(message) - } - var response string flagValidators, err := processValidators(flags) if err != nil { @@ -139,6 +119,29 @@ func (p *Prompt) InputAndValidate(title, message string, defaultResponse *string p.out.Notice(output.Emphasize(title)) } + var nonInteractiveResponse *string + + if p.isForced { + nonInteractiveResponse = forcedResponse + if nonInteractiveResponse == nil { + nonInteractiveResponse = defaultResponse + } + if nonInteractiveResponse == nil { + return "", ErrNoForceOption + } + } + + if !p.isInteractive { + nonInteractiveResponse = defaultResponse + if nonInteractiveResponse == nil { + return "", interactiveInputError(message) + } + } + + if p.out.Type().IsStructured() { + return *nonInteractiveResponse, nil + } + // We handle defaults more clearly than the survey package can if defaultResponse != nil && *defaultResponse != "" { v, err := p.Select("", formatMessage(message, !p.out.Config().Colored), []string{*defaultResponse, locale.Tl("prompt_custom", "Other ..")}, defaultResponse, forcedResponse) @@ -153,11 +156,18 @@ func (p *Prompt) InputAndValidate(title, message string, defaultResponse *string err = survey.AskOne(&Input{&survey.Input{ Message: formatMessage(message, !p.out.Config().Colored), - }}, &response, validator) + }, nonInteractiveResponse}, &response, validator) if err != nil { return "", locale.NewInputError(err.Error()) } + switch { + case p.isForced: + p.out.Notice(locale.Tr("prompt_using_force", response)) + case !p.isInteractive: + p.out.Notice(locale.Tr("prompt_using_non_interactive", response)) + } + return response, nil } @@ -165,33 +175,36 @@ func (p *Prompt) InputAndValidate(title, message string, defaultResponse *string // If the prompt is non-interactive, it returns defaultChoice. // If the prompt is forced, it returns forcedChoice if not nil, or defaultChoice. func (p *Prompt) Select(title, message string, choices []string, defaultChoice *string, forcedChoice *string) (string, error) { + if title != "" { + p.out.Notice(output.Emphasize(title)) + } + + var defChoice string + if defaultChoice != nil { + defChoice = *defaultChoice + } + + var nonInteractiveChoice *string + if p.isForced { - choice := forcedChoice - if choice == nil { - choice = defaultChoice + nonInteractiveChoice = forcedChoice + if nonInteractiveChoice == nil { + nonInteractiveChoice = defaultChoice } - if choice != nil { - p.out.Notice(locale.Tr("prompt_using_force", *choice)) - return *choice, nil + if nonInteractiveChoice == nil { + return "", ErrNoForceOption } - return "", ErrNoForceOption } if !p.isInteractive { - if defaultChoice != nil { - p.out.Notice(locale.Tr("prompt_using_non_interactive", *defaultChoice)) - return *defaultChoice, nil + nonInteractiveChoice = defaultChoice + if nonInteractiveChoice == nil { + return "", interactiveInputError(message) } - return "", interactiveInputError(message) } - if title != "" { - p.out.Notice(output.Emphasize(title)) - } - - var defChoice string - if defaultChoice != nil { - defChoice = *defaultChoice + if p.out.Type().IsStructured() { + return *nonInteractiveChoice, nil } var response string @@ -200,10 +213,18 @@ func (p *Prompt) Select(title, message string, choices []string, defaultChoice * Options: choices, Default: defChoice, FilterFn: func(input string, choices []string) []string { return choices }, // no filter - }}, &response, nil) + }, nonInteractiveChoice}, &response, nil) if err != nil { return "", locale.NewInputError(err.Error()) } + + switch { + case p.isForced: + p.out.Notice(locale.Tr("prompt_using_force", response)) + case !p.isInteractive: + p.out.Notice(locale.Tr("prompt_using_non_interactive", response)) + } + return response, nil } @@ -211,44 +232,45 @@ func (p *Prompt) Select(title, message string, choices []string, defaultChoice * // If the prompt is non-interactive, it returns defaultChoice. // If the prompt is forced, it returns forcedChoice if not nil, or defaultChoice. func (p *Prompt) Confirm(title, message string, defaultChoice *bool, forcedChoice *bool) (bool, error) { + p.analytics.EventWithLabel(constants.CatPrompt, title, "present") + + if title != "" { + p.out.Notice(output.Emphasize(title)) + } + + var defChoice bool + if defaultChoice != nil { + defChoice = *defaultChoice + } + + var nonInteractiveChoice *bool + if p.isForced { - choice := forcedChoice - if choice == nil { - choice = defaultChoice + nonInteractiveChoice = forcedChoice + if nonInteractiveChoice == nil { + nonInteractiveChoice = defaultChoice } - if choice != nil { - p.out.Notice(locale.T("prompt_continue_force")) - return *choice, nil + if nonInteractiveChoice == nil { + return false, ErrNoForceOption } - return false, ErrNoForceOption } if !p.isInteractive { - if defaultChoice != nil { - if *defaultChoice { - p.out.Notice(locale.T("prompt_continue_non_interactive")) - return true, nil - } - return false, locale.NewInputError("prompt_abort_non_interactive") + nonInteractiveChoice = defaultChoice + if nonInteractiveChoice == nil { + return false, interactiveInputError(message) } - return false, interactiveInputError(message) } - if title != "" { - p.out.Notice(output.Emphasize(title)) - } - - p.analytics.EventWithLabel(constants.CatPrompt, title, "present") - var defChoice bool - if defaultChoice != nil { - defChoice = *defaultChoice + if p.out.Type().IsStructured() { + return *nonInteractiveChoice, nil } var resp bool err := survey.AskOne(&Confirm{&survey.Confirm{ Message: formatMessage(strings.TrimSuffix(message, "\n"), !p.out.Config().Colored), Default: defChoice, - }}, &resp, nil) + }, nonInteractiveChoice}, &resp, nil) if err != nil { if err == terminal.InterruptErr { p.analytics.EventWithLabel(constants.CatPrompt, title, "interrupt") @@ -257,6 +279,15 @@ func (p *Prompt) Confirm(title, message string, defaultChoice *bool, forcedChoic } p.analytics.EventWithLabel(constants.CatPrompt, title, translateConfirm(resp)) + switch { + case p.isForced: + p.out.Notice(locale.T("prompt_continue_force")) + case !p.isInteractive && resp: + p.out.Notice(locale.T("prompt_continue_non_interactive")) + case !p.isInteractive && !resp: + return false, locale.NewInputError("prompt_abort_non_interactive") + } + return resp, nil } From cef990a7680976fbd46509485f089c54a176a42c Mon Sep 17 00:00:00 2001 From: mitchell Date: Tue, 26 Nov 2024 10:51:00 -0500 Subject: [PATCH 083/336] Update remote installer expectations. --- test/integration/remote_installer_int_test.go | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/test/integration/remote_installer_int_test.go b/test/integration/remote_installer_int_test.go index 65949c3fb4..96c4ef50b9 100644 --- a/test/integration/remote_installer_int_test.go +++ b/test/integration/remote_installer_int_test.go @@ -74,7 +74,7 @@ func (suite *RemoteInstallIntegrationTestSuite) TestInstall() { installPath := filepath.Join(ts.Dirs.Work, "install") stateExePath := filepath.Join(installPath, "bin", constants.StateCmd+osutils.ExeExtension) - args := []string{"-n"} + args := []string{"--non-interactive"} if tt.Version != "" { args = append(args, "--version", tt.Version) } @@ -93,10 +93,15 @@ func (suite *RemoteInstallIntegrationTestSuite) TestInstall() { ) cp.Expect("Terms of Service") - cp.SendLine("Y") + cp.Expect("Continuing because State Tool is running in non-interactive mode") cp.Expect("Downloading") cp.Expect("Running Installer...") cp.Expect("Installing") + if runtime.GOOS == "windows" { + cp.Expect("You are installing the State Tool as an admin") + cp.Expect("Are you sure") + cp.Expect("Continuing because State Tool is running in non-interactive mode") + } cp.Expect("Installation Complete") cp.Expect("Press ENTER to exit") cp.SendEnter() From fdb87b037d41a4f60e69c39ba10d252c4084ba25 Mon Sep 17 00:00:00 2001 From: mitchell Date: Tue, 26 Nov 2024 15:13:09 -0500 Subject: [PATCH 084/336] `state pull` should use the already-merged commit's build script instead of attempting a merge. There will be no strategy, and lead to a nil-pointer exception. --- internal/runners/pull/pull.go | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/internal/runners/pull/pull.go b/internal/runners/pull/pull.go index 0e9ea15c92..4048e4097d 100644 --- a/internal/runners/pull/pull.go +++ b/internal/runners/pull/pull.go @@ -278,12 +278,10 @@ func (p *Pull) mergeBuildScript(remoteCommit, localCommit strfmt.UUID) error { // Compute the merge strategy. strategies, err := model.MergeCommit(remoteCommit, localCommit) if err != nil { - switch { - case errors.Is(err, model.ErrMergeFastForward): + if errors.Is(err, model.ErrMergeFastForward) || errors.Is(err, model.ErrMergeCommitInHistory) { return buildscript_runbit.Update(p.project, scriptB) - case !errors.Is(err, model.ErrMergeCommitInHistory): - return locale.WrapError(err, "err_mergecommit", "Could not detect if merge is necessary.") } + return locale.WrapError(err, "err_mergecommit", "Could not detect if merge is necessary.") } // Attempt the merge. From 4d46d28c9bacacc06fac456b2c6e674db496cab7 Mon Sep 17 00:00:00 2001 From: mitchell Date: Fri, 13 Dec 2024 13:28:52 -0500 Subject: [PATCH 085/336] Stop creating new users. The Dashboard requires e-mail confirmation which we cannot do. --- internal/testhelpers/e2e/session.go | 44 ----------------------------- test/integration/fork_int_test.go | 20 +++++-------- test/integration/import_int_test.go | 7 +++-- test/integration/push_int_test.go | 7 ++--- 4 files changed, 15 insertions(+), 63 deletions(-) diff --git a/internal/testhelpers/e2e/session.go b/internal/testhelpers/e2e/session.go index 9655aae58f..17d993cfea 100644 --- a/internal/testhelpers/e2e/session.go +++ b/internal/testhelpers/e2e/session.go @@ -28,9 +28,6 @@ import ( "github.com/ActiveState/cli/internal/subshell/bash" "github.com/ActiveState/cli/internal/subshell/sscommon" "github.com/ActiveState/cli/internal/testhelpers/tagsuite" - "github.com/ActiveState/cli/pkg/platform/api" - "github.com/ActiveState/cli/pkg/platform/api/mono" - "github.com/ActiveState/cli/pkg/platform/api/mono/mono_client/users" "github.com/ActiveState/cli/pkg/platform/api/mono/mono_models" "github.com/ActiveState/cli/pkg/platform/authentication" "github.com/ActiveState/cli/pkg/platform/model" @@ -39,7 +36,6 @@ import ( "github.com/ActiveState/cli/pkg/projectfile" "github.com/ActiveState/termtest" "github.com/go-openapi/strfmt" - "github.com/google/uuid" "github.com/phayes/permbits" "github.com/stretchr/testify/require" ) @@ -448,48 +444,8 @@ func (s *Session) LogoutUser() { p.ExpectExitCode(0) } -func (s *Session) CreateNewUser() *mono_models.UserEditable { - uid, err := uuid.NewRandom() - require.NoError(s.T, err) - - username := fmt.Sprintf("user-%s", uid.String()[0:8]) - password := uid.String()[8:] - email := fmt.Sprintf("%s@test.tld", username) - user := &mono_models.UserEditable{ - Username: username, - Password: password, - Name: username, - Email: email, - } - - params := users.NewAddUserParams() - params.SetUser(user) - - // The default mono API client host is "testing.tld" inside unit tests. - // Since we actually want to create production users, we need to manually instantiate a mono API - // client with the right host. - serviceURL := api.GetServiceURL(api.ServiceMono) - host := os.Getenv(constants.APIHostEnvVarName) - if host == "" { - host = constants.DefaultAPIHost - } - serviceURL.Host = strings.Replace(serviceURL.Host, string(api.ServiceMono)+api.TestingPlatform, host, 1) - _, err = mono.Init(serviceURL, nil).Users.AddUser(params) - require.NoError(s.T, err, "Error creating new user") - - p := s.Spawn(tagsuite.Auth, "--username", username, "--password", password) - p.Expect("logged in") - p.ExpectExitCode(0) - - s.users = append(s.users, username) - - return user -} - // NotifyProjectCreated indicates that the given project was created on the Platform and needs to // be deleted when the session is closed. -// This only needs to be called for projects created by PersistentUsername, not projects created by -// users created with CreateNewUser(). Created users' projects are auto-deleted. func (s *Session) NotifyProjectCreated(org, name string) { s.createdProjects = append(s.createdProjects, project.NewNamespace(org, name, "")) } diff --git a/test/integration/fork_int_test.go b/test/integration/fork_int_test.go index f26df5e682..31cdf1bc75 100644 --- a/test/integration/fork_int_test.go +++ b/test/integration/fork_int_test.go @@ -2,12 +2,10 @@ package integration import ( "testing" - "time" - - "github.com/ActiveState/cli/internal/testhelpers/suite" - "github.com/ActiveState/termtest" + "github.com/ActiveState/cli/internal/strutils" "github.com/ActiveState/cli/internal/testhelpers/e2e" + "github.com/ActiveState/cli/internal/testhelpers/suite" "github.com/ActiveState/cli/internal/testhelpers/tagsuite" ) @@ -26,17 +24,13 @@ func (suite *ForkIntegrationTestSuite) TestFork() { ts := e2e.New(suite.T(), false) defer suite.cleanup(ts) - user := ts.CreateNewUser() + ts.LoginAsPersistentUser() + pname := strutils.UUID() - cp := ts.Spawn("fork", "ActiveState-CLI/Python3", "--name", "Test-Python3", "--org", user.Username) + cp := ts.Spawn("fork", "ActiveState-CLI/Python3", "--name", pname.String(), "--org", e2e.PersistentUsername) cp.Expect("fork has been successfully created") cp.ExpectExitCode(0) - - // Check if we error out on conflicts properly - cp = ts.Spawn("fork", "ActiveState-CLI/Python3", "--name", "Test-Python3", "--org", user.Username) - cp.Expect(`You already have a project with the name`) - cp.ExpectExitCode(1) - ts.IgnoreLogErrors() + ts.NotifyProjectCreated(e2e.PersistentUsername, pname.String()) } func (suite *ForkIntegrationTestSuite) TestFork_FailNameExists() { @@ -46,7 +40,7 @@ func (suite *ForkIntegrationTestSuite) TestFork_FailNameExists() { ts.LoginAsPersistentUser() cp := ts.Spawn("fork", "ActiveState-CLI/Python3", "--org", e2e.PersistentUsername) - cp.Expect("You already have a project with the name 'Python3'", termtest.OptExpectTimeout(30*time.Second)) + cp.Expect("You already have a project with the name 'Python3'") cp.ExpectNotExitCode(0) ts.IgnoreLogErrors() } diff --git a/test/integration/import_int_test.go b/test/integration/import_int_test.go index 47c9c9cd7b..8b4b5eba5f 100644 --- a/test/integration/import_int_test.go +++ b/test/integration/import_int_test.go @@ -11,6 +11,7 @@ import ( "github.com/ActiveState/termtest" "github.com/ActiveState/cli/internal/constants" + "github.com/ActiveState/cli/internal/strutils" "github.com/ActiveState/cli/internal/testhelpers/e2e" "github.com/ActiveState/cli/internal/testhelpers/osutil" "github.com/ActiveState/cli/internal/testhelpers/suite" @@ -85,12 +86,14 @@ func (suite *ImportIntegrationTestSuite) TestImport() { ts := e2e.New(suite.T(), false) defer ts.Close() - user := ts.CreateNewUser() - namespace := fmt.Sprintf("%s/%s", user.Username, "Python3") + ts.LoginAsPersistentUser() + pname := strutils.UUID() + namespace := fmt.Sprintf("%s/%s", e2e.PersistentUsername, pname.String()) cp := ts.Spawn("init", "--language", "python", namespace, ts.Dirs.Work) cp.Expect("successfully initialized", e2e.RuntimeSourcingTimeoutOpt) cp.ExpectExitCode(0) + ts.NotifyProjectCreated(e2e.PersistentUsername, pname.String()) reqsFilePath := filepath.Join(cp.WorkDirectory(), reqsFileName) diff --git a/test/integration/push_int_test.go b/test/integration/push_int_test.go index 6a6e03514f..4f3276cd9c 100644 --- a/test/integration/push_int_test.go +++ b/test/integration/push_int_test.go @@ -116,7 +116,7 @@ func (suite *PushIntegrationTestSuite) TestPush_NoPermission_NewProject() { suite.OnlyRunForTags(tagsuite.Push) ts := e2e.New(suite.T(), false) defer ts.Close() - user := ts.CreateNewUser() + ts.LoginAsPersistentUser() pname := strutils.UUID() cp := ts.Spawn("config", "set", constants.AsyncRuntimeConfig, "true") @@ -155,12 +155,11 @@ func (suite *PushIntegrationTestSuite) TestPush_NoPermission_NewProject() { cp.SendLine(pname.String()) cp.Expect("Project created") cp.ExpectExitCode(0) - // Note: no need for ts.NotifyProjectCreated because newly created users and their projects are - // auto-cleaned by e2e. + ts.NotifyProjectCreated(e2e.PersistentUsername, pname.String()) pjfile, err = projectfile.Parse(pjfilepath) suite.Require().NoError(err) - suite.Require().Contains(pjfile.Project, user.Username) + suite.Require().Contains(pjfile.Project, e2e.PersistentUsername) suite.Require().Contains(pjfile.Project, pname.String()) } From 5f636e5249c31e9eb42dbbad969fa8fb6a4a4a8a Mon Sep 17 00:00:00 2001 From: mitchell Date: Fri, 13 Dec 2024 13:55:28 -0500 Subject: [PATCH 086/336] Disable test. --- test/integration/push_int_test.go | 1 + 1 file changed, 1 insertion(+) diff --git a/test/integration/push_int_test.go b/test/integration/push_int_test.go index 4f3276cd9c..7c17d65aa8 100644 --- a/test/integration/push_int_test.go +++ b/test/integration/push_int_test.go @@ -109,6 +109,7 @@ func (suite *PushIntegrationTestSuite) TestInitAndPush() { // Test pushing without permission, and choosing to create a new project func (suite *PushIntegrationTestSuite) TestPush_NoPermission_NewProject() { + suite.T().Skip("Cannot create new unprivileged users") // DX-3190 if runtime.GOOS == "windows" { suite.T().Skip("Skipped on Windows for now because SendKeyDown() doesnt work (regardless of bash/cmd)") } From 65777bc32858baf6f0757d84244b5183a09c7148 Mon Sep 17 00:00:00 2001 From: mitchell Date: Fri, 13 Dec 2024 15:32:21 -0500 Subject: [PATCH 087/336] Added tests for projects that utilize solver V2 and solver V3. --- internal/testhelpers/tagsuite/tagsuite.go | 2 + test/integration/install_int_test.go | 127 ++++++++++++++++++++++ 2 files changed, 129 insertions(+) diff --git a/internal/testhelpers/tagsuite/tagsuite.go b/internal/testhelpers/tagsuite/tagsuite.go index f735e815b4..2dc587c8cf 100644 --- a/internal/testhelpers/tagsuite/tagsuite.go +++ b/internal/testhelpers/tagsuite/tagsuite.go @@ -79,6 +79,8 @@ const ( Service = "service" Shell = "shell" Show = "show" + SolverV2 = "solver-v2" + SolverV3 = "solver-v3" Switch = "switch" Uninstall = "uninstall" Upgrade = "upgrade" diff --git a/test/integration/install_int_test.go b/test/integration/install_int_test.go index 4f50a4ced8..f7c0a2d3c5 100644 --- a/test/integration/install_int_test.go +++ b/test/integration/install_int_test.go @@ -1,6 +1,7 @@ package integration import ( + "path/filepath" "strings" "testing" @@ -131,6 +132,132 @@ func (suite *InstallIntegrationTestSuite) TestInstall_Resolved() { cp.ExpectExitCode(0) } +func (suite *InstallIntegrationTestSuite) TestInstall_SolverV2() { + suite.OnlyRunForTags(tagsuite.Install, tagsuite.SolverV2) + ts := e2e.New(suite.T(), false) + defer ts.Close() + + tests := []struct { + Name string + Namespace string + Package string + ExpectedFail bool + }{ + { + "Python-Camel", + "ActiveState-CLI/Python3#971e48e4-7f9b-44e6-ad48-86cd03ffc12d", + "requests", + false, + }, + { + "Python-Alternative", + "ActiveState-CLI/Python3-Alternative#c2b3f176-4788-479c-aad3-8359d28ba3ce", + "requests", + false, + }, + { + "Perl-Camel", + "ActiveState-CLI/Perl#a0a1692e-d999-4763-b933-2d0d5758bf12", + "JSON", + false, + }, + { + "Perl-Alternative", + "ActiveState-CLI/Perl-Alternative#ccc57e0b-fccf-41c1-8e1c-24f4de2e55fa", + "JSON", + false, + }, + { + "Ruby-Alternative", + "ActiveState-CLI/ruby#b6540776-7f2c-461b-8924-77fe46669209", + "base64", + false, + }, + } + + for _, tt := range tests { + suite.Run(tt.Name, func() { + ts := e2e.New(suite.T(), false) + defer ts.Close() + + cp := ts.Spawn("config", "set", constants.AsyncRuntimeConfig, "true") + cp.ExpectExitCode(0) + + cp = ts.Spawn("checkout", tt.Namespace, tt.Name) + if !tt.ExpectedFail { + cp.ExpectExitCode(0) + } else { + cp.ExpectNotExitCode(0) + return + } + + cp = ts.SpawnWithOpts( + e2e.OptArgs("install", tt.Package), + e2e.OptWD(filepath.Join(ts.Dirs.Work, tt.Name)), + ) + cp.ExpectExitCode(0, e2e.RuntimeSolvingTimeoutOpt) + }) + } + +} + +func (suite *InstallIntegrationTestSuite) TestInstall_SolverV3() { + suite.OnlyRunForTags(tagsuite.Install, tagsuite.SolverV3) + ts := e2e.New(suite.T(), false) + defer ts.Close() + + tests := []struct { + Name string + Namespace string + Package string + ExpectedFail bool + }{ + { + "Python", + "ActiveState-CLI/Python3-Alternative-V3#354efec1-eaa3-4f41-bc50-08fdbf076628", + "requests", + false, + }, + { + "Perl", + "ActiveState-CLI/Perl-Alternative-V3#3d66ff94-72be-43ce-b3d8-897bb6758cf0", + "JSON", + false, + }, + { + "Ruby", + "ActiveState-CLI/ruby-V3#6db5b307-d63a-45e2-9d3b-70a1a1f6c10a", + "base64", + true, + }, + } + + for _, tt := range tests { + suite.Run(tt.Name, func() { + ts := e2e.New(suite.T(), false) + defer ts.Close() + + cp := ts.Spawn("config", "set", constants.AsyncRuntimeConfig, "true") + cp.ExpectExitCode(0) + + cp = ts.Spawn("checkout", tt.Namespace, tt.Name) + if !tt.ExpectedFail { + cp.ExpectExitCode(0) + } else { + cp.ExpectNotExitCode(0) + return + } + + cp = ts.SpawnWithOpts( + e2e.OptArgs("install", tt.Package), + e2e.OptWD(filepath.Join(ts.Dirs.Work, tt.Name)), + ) + cp.ExpectExitCode(0, e2e.RuntimeSolvingTimeoutOpt) + }) + } + +} + func TestInstallIntegrationTestSuite(t *testing.T) { suite.Run(t, new(InstallIntegrationTestSuite)) } From a83eff3696c89bfd2efef417989ccbb19f80e7a4 Mon Sep 17 00:00:00 2001 From: mitchell Date: Mon, 16 Dec 2024 10:27:30 -0500 Subject: [PATCH 088/336] Remediate CVE in golang.org/x/crypto. --- go.mod | 10 +- go.sum | 10 + .../github.com/stretchr/objx/.codeclimate.yml | 21 - vendor/github.com/stretchr/objx/.gitignore | 11 - vendor/github.com/stretchr/objx/LICENSE | 22 - vendor/github.com/stretchr/objx/README.md | 80 - vendor/github.com/stretchr/objx/Taskfile.yml | 27 - vendor/github.com/stretchr/objx/accessors.go | 197 -- .../github.com/stretchr/objx/conversions.go | 280 -- vendor/github.com/stretchr/objx/doc.go | 66 - vendor/github.com/stretchr/objx/map.go | 214 -- vendor/github.com/stretchr/objx/mutations.go | 77 - vendor/github.com/stretchr/objx/security.go | 12 - vendor/github.com/stretchr/objx/tests.go | 17 - .../github.com/stretchr/objx/type_specific.go | 346 --- .../stretchr/objx/type_specific_codegen.go | 2261 ----------------- vendor/github.com/stretchr/objx/value.go | 159 -- .../github.com/stretchr/testify/mock/doc.go | 44 - .../github.com/stretchr/testify/mock/mock.go | 1241 --------- .../x/crypto/chacha20/chacha_noasm.go | 2 +- .../{chacha_ppc64le.go => chacha_ppc64x.go} | 2 +- .../{chacha_ppc64le.s => chacha_ppc64x.s} | 114 +- .../x/crypto/internal/poly1305/mac_noasm.go | 2 +- .../{sum_ppc64le.go => sum_ppc64x.go} | 2 +- .../poly1305/{sum_ppc64le.s => sum_ppc64x.s} | 30 +- vendor/golang.org/x/crypto/sha3/doc.go | 4 + vendor/golang.org/x/crypto/sha3/hashes.go | 31 +- vendor/golang.org/x/crypto/sha3/sha3.go | 187 +- vendor/golang.org/x/crypto/sha3/shake.go | 89 +- vendor/golang.org/x/crypto/sha3/xor.go | 40 - vendor/golang.org/x/crypto/ssh/client_auth.go | 5 + vendor/golang.org/x/crypto/ssh/server.go | 19 +- .../golang.org/x/sys/cpu/asm_darwin_x86_gc.s | 17 + vendor/golang.org/x/sys/cpu/cpu_darwin_x86.go | 61 + vendor/golang.org/x/sys/cpu/cpu_gc_x86.go | 4 +- .../x/sys/cpu/{cpu_x86.s => cpu_gc_x86.s} | 2 +- vendor/golang.org/x/sys/cpu/cpu_gccgo_x86.go | 6 - .../golang.org/x/sys/cpu/cpu_linux_arm64.go | 1 - vendor/golang.org/x/sys/cpu/cpu_other_x86.go | 11 + vendor/golang.org/x/sys/cpu/cpu_x86.go | 6 +- .../x/sys/cpu/syscall_darwin_x86_gc.go | 98 + vendor/golang.org/x/sys/unix/README.md | 2 +- vendor/golang.org/x/sys/unix/ioctl_linux.go | 96 + vendor/golang.org/x/sys/unix/mkerrors.sh | 16 +- vendor/golang.org/x/sys/unix/syscall_aix.go | 2 +- vendor/golang.org/x/sys/unix/syscall_linux.go | 64 +- .../x/sys/unix/syscall_linux_arm64.go | 2 + .../x/sys/unix/syscall_linux_loong64.go | 2 + .../x/sys/unix/syscall_linux_riscv64.go | 2 + .../x/sys/unix/syscall_zos_s390x.go | 104 +- .../golang.org/x/sys/unix/vgetrandom_linux.go | 13 + .../x/sys/unix/vgetrandom_unsupported.go | 11 + vendor/golang.org/x/sys/unix/zerrors_linux.go | 44 +- .../x/sys/unix/zerrors_linux_386.go | 25 + .../x/sys/unix/zerrors_linux_amd64.go | 25 + .../x/sys/unix/zerrors_linux_arm.go | 25 + .../x/sys/unix/zerrors_linux_arm64.go | 26 + .../x/sys/unix/zerrors_linux_loong64.go | 25 + .../x/sys/unix/zerrors_linux_mips.go | 25 + .../x/sys/unix/zerrors_linux_mips64.go | 25 + .../x/sys/unix/zerrors_linux_mips64le.go | 25 + .../x/sys/unix/zerrors_linux_mipsle.go | 25 + .../x/sys/unix/zerrors_linux_ppc.go | 25 + .../x/sys/unix/zerrors_linux_ppc64.go | 25 + .../x/sys/unix/zerrors_linux_ppc64le.go | 25 + .../x/sys/unix/zerrors_linux_riscv64.go | 25 + .../x/sys/unix/zerrors_linux_s390x.go | 25 + .../x/sys/unix/zerrors_linux_sparc64.go | 25 + .../golang.org/x/sys/unix/zsyscall_linux.go | 27 +- .../x/sys/unix/zsysnum_linux_amd64.go | 1 + .../x/sys/unix/zsysnum_linux_arm64.go | 2 +- .../x/sys/unix/zsysnum_linux_loong64.go | 2 + .../x/sys/unix/zsysnum_linux_riscv64.go | 2 +- .../x/sys/unix/ztypes_darwin_amd64.go | 60 + .../x/sys/unix/ztypes_darwin_arm64.go | 60 + vendor/golang.org/x/sys/unix/ztypes_linux.go | 222 +- .../golang.org/x/sys/unix/ztypes_zos_s390x.go | 6 + .../golang.org/x/sys/windows/dll_windows.go | 2 +- .../x/sys/windows/syscall_windows.go | 36 +- .../golang.org/x/sys/windows/types_windows.go | 127 + .../x/sys/windows/zsyscall_windows.go | 71 + vendor/golang.org/x/term/README.md | 11 +- vendor/modules.txt | 12 +- 83 files changed, 1811 insertions(+), 5392 deletions(-) delete mode 100644 vendor/github.com/stretchr/objx/.codeclimate.yml delete mode 100644 vendor/github.com/stretchr/objx/.gitignore delete mode 100644 vendor/github.com/stretchr/objx/LICENSE delete mode 100644 vendor/github.com/stretchr/objx/README.md delete mode 100644 vendor/github.com/stretchr/objx/Taskfile.yml delete mode 100644 vendor/github.com/stretchr/objx/accessors.go delete mode 100644 vendor/github.com/stretchr/objx/conversions.go delete mode 100644 vendor/github.com/stretchr/objx/doc.go delete mode 100644 vendor/github.com/stretchr/objx/map.go delete mode 100644 vendor/github.com/stretchr/objx/mutations.go delete mode 100644 vendor/github.com/stretchr/objx/security.go delete mode 100644 vendor/github.com/stretchr/objx/tests.go delete mode 100644 vendor/github.com/stretchr/objx/type_specific.go delete mode 100644 vendor/github.com/stretchr/objx/type_specific_codegen.go delete mode 100644 vendor/github.com/stretchr/objx/value.go delete mode 100644 vendor/github.com/stretchr/testify/mock/doc.go delete mode 100644 vendor/github.com/stretchr/testify/mock/mock.go rename vendor/golang.org/x/crypto/chacha20/{chacha_ppc64le.go => chacha_ppc64x.go} (89%) rename vendor/golang.org/x/crypto/chacha20/{chacha_ppc64le.s => chacha_ppc64x.s} (76%) rename vendor/golang.org/x/crypto/internal/poly1305/{sum_ppc64le.go => sum_ppc64x.go} (95%) rename vendor/golang.org/x/crypto/internal/poly1305/{sum_ppc64le.s => sum_ppc64x.s} (89%) delete mode 100644 vendor/golang.org/x/crypto/sha3/xor.go create mode 100644 vendor/golang.org/x/sys/cpu/asm_darwin_x86_gc.s create mode 100644 vendor/golang.org/x/sys/cpu/cpu_darwin_x86.go rename vendor/golang.org/x/sys/cpu/{cpu_x86.s => cpu_gc_x86.s} (94%) create mode 100644 vendor/golang.org/x/sys/cpu/cpu_other_x86.go create mode 100644 vendor/golang.org/x/sys/cpu/syscall_darwin_x86_gc.go create mode 100644 vendor/golang.org/x/sys/unix/vgetrandom_linux.go create mode 100644 vendor/golang.org/x/sys/unix/vgetrandom_unsupported.go diff --git a/go.mod b/go.mod index ce4d3982ba..12567127cc 100644 --- a/go.mod +++ b/go.mod @@ -57,11 +57,11 @@ require ( github.com/thoas/go-funk v0.8.0 github.com/vbauerster/mpb/v7 v7.1.5 github.com/vektah/gqlparser/v2 v2.5.16 - golang.org/x/crypto v0.27.0 // indirect + golang.org/x/crypto v0.31.0 // indirect golang.org/x/net v0.29.0 - golang.org/x/sys v0.25.0 - golang.org/x/term v0.24.0 - golang.org/x/text v0.18.0 + golang.org/x/sys v0.28.0 + golang.org/x/term v0.27.0 + golang.org/x/text v0.21.0 gopkg.in/AlecAivazis/survey.v1 v1.8.8 gopkg.in/toast.v1 v1.0.0-20180812000517-0a84660828b2 gopkg.in/yaml.v2 v2.4.0 @@ -111,7 +111,7 @@ require ( github.com/shoenig/go-m1cpu v0.1.6 // indirect github.com/skeema/knownhosts v1.2.2 // indirect github.com/sosodev/duration v1.3.1 // indirect - golang.org/x/sync v0.8.0 // indirect + golang.org/x/sync v0.10.0 // indirect ) require ( diff --git a/go.sum b/go.sum index 77b18a745a..9e9fc36e64 100644 --- a/go.sum +++ b/go.sum @@ -731,6 +731,8 @@ golang.org/x/crypto v0.3.1-0.20221117191849-2c476679df9a/go.mod h1:hebNnKkNXi2Uz golang.org/x/crypto v0.7.0/go.mod h1:pYwdfH91IfpZVANVyUOhSIPZaFoJGxTFbZhFTx+dXZU= golang.org/x/crypto v0.27.0 h1:GXm2NjJrPaiv/h1tb2UH8QfgC/hOf/+z0p6PT8o1w7A= golang.org/x/crypto v0.27.0/go.mod h1:1Xngt8kV6Dvbssa53Ziq6Eqn0HqbZi5Z6R0ZpwQzt70= +golang.org/x/crypto v0.31.0 h1:ihbySMvVjLAeSH1IbfcRTkD/iNscyz8rGzjF/E5hV6U= +golang.org/x/crypto v0.31.0/go.mod h1:kDsLvtWBEx7MV9tJOj9bnXsPbxwJQ6csT/x4KIN4Ssk= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= @@ -805,6 +807,8 @@ golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.8.0 h1:3NFvSEYkUoMifnESzZl15y791HH1qU2xm6eCJU5ZPXQ= golang.org/x/sync v0.8.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= +golang.org/x/sync v0.10.0 h1:3NQrjDixjgGwUOCaF8w2+VYHv0Ve/vGYSbdkTa98gmQ= +golang.org/x/sync v0.10.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -857,6 +861,8 @@ golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.11.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.25.0 h1:r+8e+loiHxRqhXVl6ML1nO3l1+oFoWbnlu2Ehimmi34= golang.org/x/sys v0.25.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA= +golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210220032956-6a3ed077a48d/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= @@ -866,6 +872,8 @@ golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= golang.org/x/term v0.6.0/go.mod h1:m6U89DPEgQRMq3DNkDClhWw02AUbt2daBVO4cn4Hv9U= golang.org/x/term v0.24.0 h1:Mh5cbb+Zk2hqqXNO7S1iTjEphVL+jb8ZWaqh/g+JWkM= golang.org/x/term v0.24.0/go.mod h1:lOBK/LVxemqiMij05LGJ0tzNr8xlmwBRJ81PX6wVLH8= +golang.org/x/term v0.27.0 h1:WP60Sv1nlK1T6SupCHbXzSaN0b9wUmsPoRS9b61A23Q= +golang.org/x/term v0.27.0/go.mod h1:iMsnZpn0cago0GOrHO2+Y7u7JPn5AylBrcoWkElMTSM= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= @@ -879,6 +887,8 @@ golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.8.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= golang.org/x/text v0.18.0 h1:XvMDiNzPAl0jr17s6W9lcaIhGUfUORdGCNsuLmPG224= golang.org/x/text v0.18.0/go.mod h1:BuEKDfySbSR4drPmRPG/7iBdf8hvFMuRexcpahXilzY= +golang.org/x/text v0.21.0 h1:zyQAAkrwaneQ066sspRyJaG9VNi/YJ1NfzcGB3hZ/qo= +golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.1.0 h1:xYY+Bajn2a7VBmTM5GikTmnK8ZuX8YgnQCqZpbBNtmA= diff --git a/vendor/github.com/stretchr/objx/.codeclimate.yml b/vendor/github.com/stretchr/objx/.codeclimate.yml deleted file mode 100644 index 559fa399c1..0000000000 --- a/vendor/github.com/stretchr/objx/.codeclimate.yml +++ /dev/null @@ -1,21 +0,0 @@ -engines: - gofmt: - enabled: true - golint: - enabled: true - govet: - enabled: true - -exclude_patterns: -- ".github/" -- "vendor/" -- "codegen/" -- "*.yml" -- ".*.yml" -- "*.md" -- "Gopkg.*" -- "doc.go" -- "type_specific_codegen_test.go" -- "type_specific_codegen.go" -- ".gitignore" -- "LICENSE" diff --git a/vendor/github.com/stretchr/objx/.gitignore b/vendor/github.com/stretchr/objx/.gitignore deleted file mode 100644 index ea58090bd2..0000000000 --- a/vendor/github.com/stretchr/objx/.gitignore +++ /dev/null @@ -1,11 +0,0 @@ -# Binaries for programs and plugins -*.exe -*.dll -*.so -*.dylib - -# Test binary, build with `go test -c` -*.test - -# Output of the go coverage tool, specifically when used with LiteIDE -*.out diff --git a/vendor/github.com/stretchr/objx/LICENSE b/vendor/github.com/stretchr/objx/LICENSE deleted file mode 100644 index 44d4d9d5a7..0000000000 --- a/vendor/github.com/stretchr/objx/LICENSE +++ /dev/null @@ -1,22 +0,0 @@ -The MIT License - -Copyright (c) 2014 Stretchr, Inc. -Copyright (c) 2017-2018 objx contributors - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/vendor/github.com/stretchr/objx/README.md b/vendor/github.com/stretchr/objx/README.md deleted file mode 100644 index 78dc1f8b03..0000000000 --- a/vendor/github.com/stretchr/objx/README.md +++ /dev/null @@ -1,80 +0,0 @@ -# Objx -[![Build Status](https://travis-ci.org/stretchr/objx.svg?branch=master)](https://travis-ci.org/stretchr/objx) -[![Go Report Card](https://goreportcard.com/badge/github.com/stretchr/objx)](https://goreportcard.com/report/github.com/stretchr/objx) -[![Maintainability](https://api.codeclimate.com/v1/badges/1d64bc6c8474c2074f2b/maintainability)](https://codeclimate.com/github/stretchr/objx/maintainability) -[![Test Coverage](https://api.codeclimate.com/v1/badges/1d64bc6c8474c2074f2b/test_coverage)](https://codeclimate.com/github/stretchr/objx/test_coverage) -[![Sourcegraph](https://sourcegraph.com/github.com/stretchr/objx/-/badge.svg)](https://sourcegraph.com/github.com/stretchr/objx) -[![GoDoc](https://pkg.go.dev/badge/github.com/stretchr/objx?utm_source=godoc)](https://pkg.go.dev/github.com/stretchr/objx) - -Objx - Go package for dealing with maps, slices, JSON and other data. - -Get started: - -- Install Objx with [one line of code](#installation), or [update it with another](#staying-up-to-date) -- Check out the API Documentation http://pkg.go.dev/github.com/stretchr/objx - -## Overview -Objx provides the `objx.Map` type, which is a `map[string]interface{}` that exposes a powerful `Get` method (among others) that allows you to easily and quickly get access to data within the map, without having to worry too much about type assertions, missing data, default values etc. - -### Pattern -Objx uses a predictable pattern to make access data from within `map[string]interface{}` easy. Call one of the `objx.` functions to create your `objx.Map` to get going: - - m, err := objx.FromJSON(json) - -NOTE: Any methods or functions with the `Must` prefix will panic if something goes wrong, the rest will be optimistic and try to figure things out without panicking. - -Use `Get` to access the value you're interested in. You can use dot and array -notation too: - - m.Get("places[0].latlng") - -Once you have sought the `Value` you're interested in, you can use the `Is*` methods to determine its type. - - if m.Get("code").IsStr() { // Your code... } - -Or you can just assume the type, and use one of the strong type methods to extract the real value: - - m.Get("code").Int() - -If there's no value there (or if it's the wrong type) then a default value will be returned, or you can be explicit about the default value. - - Get("code").Int(-1) - -If you're dealing with a slice of data as a value, Objx provides many useful methods for iterating, manipulating and selecting that data. You can find out more by exploring the index below. - -### Reading data -A simple example of how to use Objx: - - // Use MustFromJSON to make an objx.Map from some JSON - m := objx.MustFromJSON(`{"name": "Mat", "age": 30}`) - - // Get the details - name := m.Get("name").Str() - age := m.Get("age").Int() - - // Get their nickname (or use their name if they don't have one) - nickname := m.Get("nickname").Str(name) - -### Ranging -Since `objx.Map` is a `map[string]interface{}` you can treat it as such. For example, to `range` the data, do what you would expect: - - m := objx.MustFromJSON(json) - for key, value := range m { - // Your code... - } - -## Installation -To install Objx, use go get: - - go get github.com/stretchr/objx - -### Staying up to date -To update Objx to the latest version, run: - - go get -u github.com/stretchr/objx - -### Supported go versions -We currently support the three recent major Go versions. - -## Contributing -Please feel free to submit issues, fork the repository and send pull requests! diff --git a/vendor/github.com/stretchr/objx/Taskfile.yml b/vendor/github.com/stretchr/objx/Taskfile.yml deleted file mode 100644 index 8a79e8d674..0000000000 --- a/vendor/github.com/stretchr/objx/Taskfile.yml +++ /dev/null @@ -1,27 +0,0 @@ -version: '3' - -tasks: - default: - deps: [test] - - lint: - desc: Checks code style - cmds: - - gofmt -d -s *.go - - go vet ./... - silent: true - - lint-fix: - desc: Fixes code style - cmds: - - gofmt -w -s *.go - - test: - desc: Runs go tests - cmds: - - go test -race ./... - - test-coverage: - desc: Runs go tests and calculates test coverage - cmds: - - go test -race -coverprofile=c.out ./... diff --git a/vendor/github.com/stretchr/objx/accessors.go b/vendor/github.com/stretchr/objx/accessors.go deleted file mode 100644 index 72f1d1c1ce..0000000000 --- a/vendor/github.com/stretchr/objx/accessors.go +++ /dev/null @@ -1,197 +0,0 @@ -package objx - -import ( - "reflect" - "regexp" - "strconv" - "strings" -) - -const ( - // PathSeparator is the character used to separate the elements - // of the keypath. - // - // For example, `location.address.city` - PathSeparator string = "." - - // arrayAccessRegexString is the regex used to extract the array number - // from the access path - arrayAccessRegexString = `^(.+)\[([0-9]+)\]$` - - // mapAccessRegexString is the regex used to extract the map key - // from the access path - mapAccessRegexString = `^([^\[]*)\[([^\]]+)\](.*)$` -) - -// arrayAccessRegex is the compiled arrayAccessRegexString -var arrayAccessRegex = regexp.MustCompile(arrayAccessRegexString) - -// mapAccessRegex is the compiled mapAccessRegexString -var mapAccessRegex = regexp.MustCompile(mapAccessRegexString) - -// Get gets the value using the specified selector and -// returns it inside a new Obj object. -// -// If it cannot find the value, Get will return a nil -// value inside an instance of Obj. -// -// Get can only operate directly on map[string]interface{} and []interface. -// -// # Example -// -// To access the title of the third chapter of the second book, do: -// -// o.Get("books[1].chapters[2].title") -func (m Map) Get(selector string) *Value { - rawObj := access(m, selector, nil, false) - return &Value{data: rawObj} -} - -// Set sets the value using the specified selector and -// returns the object on which Set was called. -// -// Set can only operate directly on map[string]interface{} and []interface -// -// # Example -// -// To set the title of the third chapter of the second book, do: -// -// o.Set("books[1].chapters[2].title","Time to Go") -func (m Map) Set(selector string, value interface{}) Map { - access(m, selector, value, true) - return m -} - -// getIndex returns the index, which is hold in s by two branches. -// It also returns s without the index part, e.g. name[1] will return (1, name). -// If no index is found, -1 is returned -func getIndex(s string) (int, string) { - arrayMatches := arrayAccessRegex.FindStringSubmatch(s) - if len(arrayMatches) > 0 { - // Get the key into the map - selector := arrayMatches[1] - // Get the index into the array at the key - // We know this can't fail because arrayMatches[2] is an int for sure - index, _ := strconv.Atoi(arrayMatches[2]) - return index, selector - } - return -1, s -} - -// getKey returns the key which is held in s by two brackets. -// It also returns the next selector. -func getKey(s string) (string, string) { - selSegs := strings.SplitN(s, PathSeparator, 2) - thisSel := selSegs[0] - nextSel := "" - - if len(selSegs) > 1 { - nextSel = selSegs[1] - } - - mapMatches := mapAccessRegex.FindStringSubmatch(s) - if len(mapMatches) > 0 { - if _, err := strconv.Atoi(mapMatches[2]); err != nil { - thisSel = mapMatches[1] - nextSel = "[" + mapMatches[2] + "]" + mapMatches[3] - - if thisSel == "" { - thisSel = mapMatches[2] - nextSel = mapMatches[3] - } - - if nextSel == "" { - selSegs = []string{"", ""} - } else if nextSel[0] == '.' { - nextSel = nextSel[1:] - } - } - } - - return thisSel, nextSel -} - -// access accesses the object using the selector and performs the -// appropriate action. -func access(current interface{}, selector string, value interface{}, isSet bool) interface{} { - thisSel, nextSel := getKey(selector) - - indexes := []int{} - for strings.Contains(thisSel, "[") { - prevSel := thisSel - index := -1 - index, thisSel = getIndex(thisSel) - indexes = append(indexes, index) - if prevSel == thisSel { - break - } - } - - if curMap, ok := current.(Map); ok { - current = map[string]interface{}(curMap) - } - // get the object in question - switch current.(type) { - case map[string]interface{}: - curMSI := current.(map[string]interface{}) - if nextSel == "" && isSet { - curMSI[thisSel] = value - return nil - } - - _, ok := curMSI[thisSel].(map[string]interface{}) - if !ok { - _, ok = curMSI[thisSel].(Map) - } - - if (curMSI[thisSel] == nil || !ok) && len(indexes) == 0 && isSet { - curMSI[thisSel] = map[string]interface{}{} - } - - current = curMSI[thisSel] - default: - current = nil - } - - // do we need to access the item of an array? - if len(indexes) > 0 { - num := len(indexes) - for num > 0 { - num-- - index := indexes[num] - indexes = indexes[:num] - if array, ok := interSlice(current); ok { - if index < len(array) { - current = array[index] - } else { - current = nil - break - } - } - } - } - - if nextSel != "" { - current = access(current, nextSel, value, isSet) - } - return current -} - -func interSlice(slice interface{}) ([]interface{}, bool) { - if array, ok := slice.([]interface{}); ok { - return array, ok - } - - s := reflect.ValueOf(slice) - if s.Kind() != reflect.Slice { - return nil, false - } - - ret := make([]interface{}, s.Len()) - - for i := 0; i < s.Len(); i++ { - ret[i] = s.Index(i).Interface() - } - - return ret, true -} diff --git a/vendor/github.com/stretchr/objx/conversions.go b/vendor/github.com/stretchr/objx/conversions.go deleted file mode 100644 index 01c63d7d3b..0000000000 --- a/vendor/github.com/stretchr/objx/conversions.go +++ /dev/null @@ -1,280 +0,0 @@ -package objx - -import ( - "bytes" - "encoding/base64" - "encoding/json" - "errors" - "fmt" - "net/url" - "strconv" -) - -// SignatureSeparator is the character that is used to -// separate the Base64 string from the security signature. -const SignatureSeparator = "_" - -// URLValuesSliceKeySuffix is the character that is used to -// specify a suffix for slices parsed by URLValues. -// If the suffix is set to "[i]", then the index of the slice -// is used in place of i -// Ex: Suffix "[]" would have the form a[]=b&a[]=c -// OR Suffix "[i]" would have the form a[0]=b&a[1]=c -// OR Suffix "" would have the form a=b&a=c -var urlValuesSliceKeySuffix = "[]" - -const ( - URLValuesSliceKeySuffixEmpty = "" - URLValuesSliceKeySuffixArray = "[]" - URLValuesSliceKeySuffixIndex = "[i]" -) - -// SetURLValuesSliceKeySuffix sets the character that is used to -// specify a suffix for slices parsed by URLValues. -// If the suffix is set to "[i]", then the index of the slice -// is used in place of i -// Ex: Suffix "[]" would have the form a[]=b&a[]=c -// OR Suffix "[i]" would have the form a[0]=b&a[1]=c -// OR Suffix "" would have the form a=b&a=c -func SetURLValuesSliceKeySuffix(s string) error { - if s == URLValuesSliceKeySuffixEmpty || s == URLValuesSliceKeySuffixArray || s == URLValuesSliceKeySuffixIndex { - urlValuesSliceKeySuffix = s - return nil - } - - return errors.New("objx: Invalid URLValuesSliceKeySuffix provided.") -} - -// JSON converts the contained object to a JSON string -// representation -func (m Map) JSON() (string, error) { - for k, v := range m { - m[k] = cleanUp(v) - } - - result, err := json.Marshal(m) - if err != nil { - err = errors.New("objx: JSON encode failed with: " + err.Error()) - } - return string(result), err -} - -func cleanUpInterfaceArray(in []interface{}) []interface{} { - result := make([]interface{}, len(in)) - for i, v := range in { - result[i] = cleanUp(v) - } - return result -} - -func cleanUpInterfaceMap(in map[interface{}]interface{}) Map { - result := Map{} - for k, v := range in { - result[fmt.Sprintf("%v", k)] = cleanUp(v) - } - return result -} - -func cleanUpStringMap(in map[string]interface{}) Map { - result := Map{} - for k, v := range in { - result[k] = cleanUp(v) - } - return result -} - -func cleanUpMSIArray(in []map[string]interface{}) []Map { - result := make([]Map, len(in)) - for i, v := range in { - result[i] = cleanUpStringMap(v) - } - return result -} - -func cleanUpMapArray(in []Map) []Map { - result := make([]Map, len(in)) - for i, v := range in { - result[i] = cleanUpStringMap(v) - } - return result -} - -func cleanUp(v interface{}) interface{} { - switch v := v.(type) { - case []interface{}: - return cleanUpInterfaceArray(v) - case []map[string]interface{}: - return cleanUpMSIArray(v) - case map[interface{}]interface{}: - return cleanUpInterfaceMap(v) - case Map: - return cleanUpStringMap(v) - case []Map: - return cleanUpMapArray(v) - default: - return v - } -} - -// MustJSON converts the contained object to a JSON string -// representation and panics if there is an error -func (m Map) MustJSON() string { - result, err := m.JSON() - if err != nil { - panic(err.Error()) - } - return result -} - -// Base64 converts the contained object to a Base64 string -// representation of the JSON string representation -func (m Map) Base64() (string, error) { - var buf bytes.Buffer - - jsonData, err := m.JSON() - if err != nil { - return "", err - } - - encoder := base64.NewEncoder(base64.StdEncoding, &buf) - _, _ = encoder.Write([]byte(jsonData)) - _ = encoder.Close() - - return buf.String(), nil -} - -// MustBase64 converts the contained object to a Base64 string -// representation of the JSON string representation and panics -// if there is an error -func (m Map) MustBase64() string { - result, err := m.Base64() - if err != nil { - panic(err.Error()) - } - return result -} - -// SignedBase64 converts the contained object to a Base64 string -// representation of the JSON string representation and signs it -// using the provided key. -func (m Map) SignedBase64(key string) (string, error) { - base64, err := m.Base64() - if err != nil { - return "", err - } - - sig := HashWithKey(base64, key) - return base64 + SignatureSeparator + sig, nil -} - -// MustSignedBase64 converts the contained object to a Base64 string -// representation of the JSON string representation and signs it -// using the provided key and panics if there is an error -func (m Map) MustSignedBase64(key string) string { - result, err := m.SignedBase64(key) - if err != nil { - panic(err.Error()) - } - return result -} - -/* - URL Query - ------------------------------------------------ -*/ - -// URLValues creates a url.Values object from an Obj. This -// function requires that the wrapped object be a map[string]interface{} -func (m Map) URLValues() url.Values { - vals := make(url.Values) - - m.parseURLValues(m, vals, "") - - return vals -} - -func (m Map) parseURLValues(queryMap Map, vals url.Values, key string) { - useSliceIndex := false - if urlValuesSliceKeySuffix == "[i]" { - useSliceIndex = true - } - - for k, v := range queryMap { - val := &Value{data: v} - switch { - case val.IsObjxMap(): - if key == "" { - m.parseURLValues(val.ObjxMap(), vals, k) - } else { - m.parseURLValues(val.ObjxMap(), vals, key+"["+k+"]") - } - case val.IsObjxMapSlice(): - sliceKey := k - if key != "" { - sliceKey = key + "[" + k + "]" - } - - if useSliceIndex { - for i, sv := range val.MustObjxMapSlice() { - sk := sliceKey + "[" + strconv.FormatInt(int64(i), 10) + "]" - m.parseURLValues(sv, vals, sk) - } - } else { - sliceKey = sliceKey + urlValuesSliceKeySuffix - for _, sv := range val.MustObjxMapSlice() { - m.parseURLValues(sv, vals, sliceKey) - } - } - case val.IsMSISlice(): - sliceKey := k - if key != "" { - sliceKey = key + "[" + k + "]" - } - - if useSliceIndex { - for i, sv := range val.MustMSISlice() { - sk := sliceKey + "[" + strconv.FormatInt(int64(i), 10) + "]" - m.parseURLValues(New(sv), vals, sk) - } - } else { - sliceKey = sliceKey + urlValuesSliceKeySuffix - for _, sv := range val.MustMSISlice() { - m.parseURLValues(New(sv), vals, sliceKey) - } - } - case val.IsStrSlice(), val.IsBoolSlice(), - val.IsFloat32Slice(), val.IsFloat64Slice(), - val.IsIntSlice(), val.IsInt8Slice(), val.IsInt16Slice(), val.IsInt32Slice(), val.IsInt64Slice(), - val.IsUintSlice(), val.IsUint8Slice(), val.IsUint16Slice(), val.IsUint32Slice(), val.IsUint64Slice(): - - sliceKey := k - if key != "" { - sliceKey = key + "[" + k + "]" - } - - if useSliceIndex { - for i, sv := range val.StringSlice() { - sk := sliceKey + "[" + strconv.FormatInt(int64(i), 10) + "]" - vals.Set(sk, sv) - } - } else { - sliceKey = sliceKey + urlValuesSliceKeySuffix - vals[sliceKey] = val.StringSlice() - } - - default: - if key == "" { - vals.Set(k, val.String()) - } else { - vals.Set(key+"["+k+"]", val.String()) - } - } - } -} - -// URLQuery gets an encoded URL query representing the given -// Obj. This function requires that the wrapped object be a -// map[string]interface{} -func (m Map) URLQuery() (string, error) { - return m.URLValues().Encode(), nil -} diff --git a/vendor/github.com/stretchr/objx/doc.go b/vendor/github.com/stretchr/objx/doc.go deleted file mode 100644 index b170af74b3..0000000000 --- a/vendor/github.com/stretchr/objx/doc.go +++ /dev/null @@ -1,66 +0,0 @@ -/* -Package objx provides utilities for dealing with maps, slices, JSON and other data. - -# Overview - -Objx provides the `objx.Map` type, which is a `map[string]interface{}` that exposes -a powerful `Get` method (among others) that allows you to easily and quickly get -access to data within the map, without having to worry too much about type assertions, -missing data, default values etc. - -# Pattern - -Objx uses a predictable pattern to make access data from within `map[string]interface{}` easy. -Call one of the `objx.` functions to create your `objx.Map` to get going: - - m, err := objx.FromJSON(json) - -NOTE: Any methods or functions with the `Must` prefix will panic if something goes wrong, -the rest will be optimistic and try to figure things out without panicking. - -Use `Get` to access the value you're interested in. You can use dot and array -notation too: - - m.Get("places[0].latlng") - -Once you have sought the `Value` you're interested in, you can use the `Is*` methods to determine its type. - - if m.Get("code").IsStr() { // Your code... } - -Or you can just assume the type, and use one of the strong type methods to extract the real value: - - m.Get("code").Int() - -If there's no value there (or if it's the wrong type) then a default value will be returned, -or you can be explicit about the default value. - - Get("code").Int(-1) - -If you're dealing with a slice of data as a value, Objx provides many useful methods for iterating, -manipulating and selecting that data. You can find out more by exploring the index below. - -# Reading data - -A simple example of how to use Objx: - - // Use MustFromJSON to make an objx.Map from some JSON - m := objx.MustFromJSON(`{"name": "Mat", "age": 30}`) - - // Get the details - name := m.Get("name").Str() - age := m.Get("age").Int() - - // Get their nickname (or use their name if they don't have one) - nickname := m.Get("nickname").Str(name) - -# Ranging - -Since `objx.Map` is a `map[string]interface{}` you can treat it as such. -For example, to `range` the data, do what you would expect: - - m := objx.MustFromJSON(json) - for key, value := range m { - // Your code... - } -*/ -package objx diff --git a/vendor/github.com/stretchr/objx/map.go b/vendor/github.com/stretchr/objx/map.go deleted file mode 100644 index ab9f9ae67c..0000000000 --- a/vendor/github.com/stretchr/objx/map.go +++ /dev/null @@ -1,214 +0,0 @@ -package objx - -import ( - "encoding/base64" - "encoding/json" - "errors" - "io/ioutil" - "net/url" - "strings" -) - -// MSIConvertable is an interface that defines methods for converting your -// custom types to a map[string]interface{} representation. -type MSIConvertable interface { - // MSI gets a map[string]interface{} (msi) representing the - // object. - MSI() map[string]interface{} -} - -// Map provides extended functionality for working with -// untyped data, in particular map[string]interface (msi). -type Map map[string]interface{} - -// Value returns the internal value instance -func (m Map) Value() *Value { - return &Value{data: m} -} - -// Nil represents a nil Map. -var Nil = New(nil) - -// New creates a new Map containing the map[string]interface{} in the data argument. -// If the data argument is not a map[string]interface, New attempts to call the -// MSI() method on the MSIConvertable interface to create one. -func New(data interface{}) Map { - if _, ok := data.(map[string]interface{}); !ok { - if converter, ok := data.(MSIConvertable); ok { - data = converter.MSI() - } else { - return nil - } - } - return Map(data.(map[string]interface{})) -} - -// MSI creates a map[string]interface{} and puts it inside a new Map. -// -// The arguments follow a key, value pattern. -// -// Returns nil if any key argument is non-string or if there are an odd number of arguments. -// -// # Example -// -// To easily create Maps: -// -// m := objx.MSI("name", "Mat", "age", 29, "subobj", objx.MSI("active", true)) -// -// // creates an Map equivalent to -// m := objx.Map{"name": "Mat", "age": 29, "subobj": objx.Map{"active": true}} -func MSI(keyAndValuePairs ...interface{}) Map { - newMap := Map{} - keyAndValuePairsLen := len(keyAndValuePairs) - if keyAndValuePairsLen%2 != 0 { - return nil - } - for i := 0; i < keyAndValuePairsLen; i = i + 2 { - key := keyAndValuePairs[i] - value := keyAndValuePairs[i+1] - - // make sure the key is a string - keyString, keyStringOK := key.(string) - if !keyStringOK { - return nil - } - newMap[keyString] = value - } - return newMap -} - -// ****** Conversion Constructors - -// MustFromJSON creates a new Map containing the data specified in the -// jsonString. -// -// Panics if the JSON is invalid. -func MustFromJSON(jsonString string) Map { - o, err := FromJSON(jsonString) - if err != nil { - panic("objx: MustFromJSON failed with error: " + err.Error()) - } - return o -} - -// MustFromJSONSlice creates a new slice of Map containing the data specified in the -// jsonString. Works with jsons with a top level array -// -// Panics if the JSON is invalid. -func MustFromJSONSlice(jsonString string) []Map { - slice, err := FromJSONSlice(jsonString) - if err != nil { - panic("objx: MustFromJSONSlice failed with error: " + err.Error()) - } - return slice -} - -// FromJSON creates a new Map containing the data specified in the -// jsonString. -// -// Returns an error if the JSON is invalid. -func FromJSON(jsonString string) (Map, error) { - var m Map - err := json.Unmarshal([]byte(jsonString), &m) - if err != nil { - return Nil, err - } - return m, nil -} - -// FromJSONSlice creates a new slice of Map containing the data specified in the -// jsonString. Works with jsons with a top level array -// -// Returns an error if the JSON is invalid. -func FromJSONSlice(jsonString string) ([]Map, error) { - var slice []Map - err := json.Unmarshal([]byte(jsonString), &slice) - if err != nil { - return nil, err - } - return slice, nil -} - -// FromBase64 creates a new Obj containing the data specified -// in the Base64 string. -// -// The string is an encoded JSON string returned by Base64 -func FromBase64(base64String string) (Map, error) { - decoder := base64.NewDecoder(base64.StdEncoding, strings.NewReader(base64String)) - decoded, err := ioutil.ReadAll(decoder) - if err != nil { - return nil, err - } - return FromJSON(string(decoded)) -} - -// MustFromBase64 creates a new Obj containing the data specified -// in the Base64 string and panics if there is an error. -// -// The string is an encoded JSON string returned by Base64 -func MustFromBase64(base64String string) Map { - result, err := FromBase64(base64String) - if err != nil { - panic("objx: MustFromBase64 failed with error: " + err.Error()) - } - return result -} - -// FromSignedBase64 creates a new Obj containing the data specified -// in the Base64 string. -// -// The string is an encoded JSON string returned by SignedBase64 -func FromSignedBase64(base64String, key string) (Map, error) { - parts := strings.Split(base64String, SignatureSeparator) - if len(parts) != 2 { - return nil, errors.New("objx: Signed base64 string is malformed") - } - - sig := HashWithKey(parts[0], key) - if parts[1] != sig { - return nil, errors.New("objx: Signature for base64 data does not match") - } - return FromBase64(parts[0]) -} - -// MustFromSignedBase64 creates a new Obj containing the data specified -// in the Base64 string and panics if there is an error. -// -// The string is an encoded JSON string returned by Base64 -func MustFromSignedBase64(base64String, key string) Map { - result, err := FromSignedBase64(base64String, key) - if err != nil { - panic("objx: MustFromSignedBase64 failed with error: " + err.Error()) - } - return result -} - -// FromURLQuery generates a new Obj by parsing the specified -// query. -// -// For queries with multiple values, the first value is selected. -func FromURLQuery(query string) (Map, error) { - vals, err := url.ParseQuery(query) - if err != nil { - return nil, err - } - m := Map{} - for k, vals := range vals { - m[k] = vals[0] - } - return m, nil -} - -// MustFromURLQuery generates a new Obj by parsing the specified -// query. -// -// For queries with multiple values, the first value is selected. -// -// Panics if it encounters an error -func MustFromURLQuery(query string) Map { - o, err := FromURLQuery(query) - if err != nil { - panic("objx: MustFromURLQuery failed with error: " + err.Error()) - } - return o -} diff --git a/vendor/github.com/stretchr/objx/mutations.go b/vendor/github.com/stretchr/objx/mutations.go deleted file mode 100644 index c3400a3f70..0000000000 --- a/vendor/github.com/stretchr/objx/mutations.go +++ /dev/null @@ -1,77 +0,0 @@ -package objx - -// Exclude returns a new Map with the keys in the specified []string -// excluded. -func (m Map) Exclude(exclude []string) Map { - excluded := make(Map) - for k, v := range m { - if !contains(exclude, k) { - excluded[k] = v - } - } - return excluded -} - -// Copy creates a shallow copy of the Obj. -func (m Map) Copy() Map { - copied := Map{} - for k, v := range m { - copied[k] = v - } - return copied -} - -// Merge blends the specified map with a copy of this map and returns the result. -// -// Keys that appear in both will be selected from the specified map. -// This method requires that the wrapped object be a map[string]interface{} -func (m Map) Merge(merge Map) Map { - return m.Copy().MergeHere(merge) -} - -// MergeHere blends the specified map with this map and returns the current map. -// -// Keys that appear in both will be selected from the specified map. The original map -// will be modified. This method requires that -// the wrapped object be a map[string]interface{} -func (m Map) MergeHere(merge Map) Map { - for k, v := range merge { - m[k] = v - } - return m -} - -// Transform builds a new Obj giving the transformer a chance -// to change the keys and values as it goes. This method requires that -// the wrapped object be a map[string]interface{} -func (m Map) Transform(transformer func(key string, value interface{}) (string, interface{})) Map { - newMap := Map{} - for k, v := range m { - modifiedKey, modifiedVal := transformer(k, v) - newMap[modifiedKey] = modifiedVal - } - return newMap -} - -// TransformKeys builds a new map using the specified key mapping. -// -// Unspecified keys will be unaltered. -// This method requires that the wrapped object be a map[string]interface{} -func (m Map) TransformKeys(mapping map[string]string) Map { - return m.Transform(func(key string, value interface{}) (string, interface{}) { - if newKey, ok := mapping[key]; ok { - return newKey, value - } - return key, value - }) -} - -// Checks if a string slice contains a string -func contains(s []string, e string) bool { - for _, a := range s { - if a == e { - return true - } - } - return false -} diff --git a/vendor/github.com/stretchr/objx/security.go b/vendor/github.com/stretchr/objx/security.go deleted file mode 100644 index 692be8e2a9..0000000000 --- a/vendor/github.com/stretchr/objx/security.go +++ /dev/null @@ -1,12 +0,0 @@ -package objx - -import ( - "crypto/sha1" - "encoding/hex" -) - -// HashWithKey hashes the specified string using the security key -func HashWithKey(data, key string) string { - d := sha1.Sum([]byte(data + ":" + key)) - return hex.EncodeToString(d[:]) -} diff --git a/vendor/github.com/stretchr/objx/tests.go b/vendor/github.com/stretchr/objx/tests.go deleted file mode 100644 index d9e0b479a4..0000000000 --- a/vendor/github.com/stretchr/objx/tests.go +++ /dev/null @@ -1,17 +0,0 @@ -package objx - -// Has gets whether there is something at the specified selector -// or not. -// -// If m is nil, Has will always return false. -func (m Map) Has(selector string) bool { - if m == nil { - return false - } - return !m.Get(selector).IsNil() -} - -// IsNil gets whether the data is nil or not. -func (v *Value) IsNil() bool { - return v == nil || v.data == nil -} diff --git a/vendor/github.com/stretchr/objx/type_specific.go b/vendor/github.com/stretchr/objx/type_specific.go deleted file mode 100644 index 80f88d9fa2..0000000000 --- a/vendor/github.com/stretchr/objx/type_specific.go +++ /dev/null @@ -1,346 +0,0 @@ -package objx - -/* - MSI (map[string]interface{} and []map[string]interface{}) -*/ - -// MSI gets the value as a map[string]interface{}, returns the optionalDefault -// value or a system default object if the value is the wrong type. -func (v *Value) MSI(optionalDefault ...map[string]interface{}) map[string]interface{} { - if s, ok := v.data.(map[string]interface{}); ok { - return s - } - if s, ok := v.data.(Map); ok { - return map[string]interface{}(s) - } - if len(optionalDefault) == 1 { - return optionalDefault[0] - } - return nil -} - -// MustMSI gets the value as a map[string]interface{}. -// -// Panics if the object is not a map[string]interface{}. -func (v *Value) MustMSI() map[string]interface{} { - if s, ok := v.data.(Map); ok { - return map[string]interface{}(s) - } - return v.data.(map[string]interface{}) -} - -// MSISlice gets the value as a []map[string]interface{}, returns the optionalDefault -// value or nil if the value is not a []map[string]interface{}. -func (v *Value) MSISlice(optionalDefault ...[]map[string]interface{}) []map[string]interface{} { - if s, ok := v.data.([]map[string]interface{}); ok { - return s - } - - s := v.ObjxMapSlice() - if s == nil { - if len(optionalDefault) == 1 { - return optionalDefault[0] - } - return nil - } - - result := make([]map[string]interface{}, len(s)) - for i := range s { - result[i] = s[i].Value().MSI() - } - return result -} - -// MustMSISlice gets the value as a []map[string]interface{}. -// -// Panics if the object is not a []map[string]interface{}. -func (v *Value) MustMSISlice() []map[string]interface{} { - if s := v.MSISlice(); s != nil { - return s - } - - return v.data.([]map[string]interface{}) -} - -// IsMSI gets whether the object contained is a map[string]interface{} or not. -func (v *Value) IsMSI() bool { - _, ok := v.data.(map[string]interface{}) - if !ok { - _, ok = v.data.(Map) - } - return ok -} - -// IsMSISlice gets whether the object contained is a []map[string]interface{} or not. -func (v *Value) IsMSISlice() bool { - _, ok := v.data.([]map[string]interface{}) - if !ok { - _, ok = v.data.([]Map) - if !ok { - s, ok := v.data.([]interface{}) - if ok { - for i := range s { - switch s[i].(type) { - case Map: - case map[string]interface{}: - default: - return false - } - } - return true - } - } - } - return ok -} - -// EachMSI calls the specified callback for each object -// in the []map[string]interface{}. -// -// Panics if the object is the wrong type. -func (v *Value) EachMSI(callback func(int, map[string]interface{}) bool) *Value { - for index, val := range v.MustMSISlice() { - carryon := callback(index, val) - if !carryon { - break - } - } - return v -} - -// WhereMSI uses the specified decider function to select items -// from the []map[string]interface{}. The object contained in the result will contain -// only the selected items. -func (v *Value) WhereMSI(decider func(int, map[string]interface{}) bool) *Value { - var selected []map[string]interface{} - v.EachMSI(func(index int, val map[string]interface{}) bool { - shouldSelect := decider(index, val) - if !shouldSelect { - selected = append(selected, val) - } - return true - }) - return &Value{data: selected} -} - -// GroupMSI uses the specified grouper function to group the items -// keyed by the return of the grouper. The object contained in the -// result will contain a map[string][]map[string]interface{}. -func (v *Value) GroupMSI(grouper func(int, map[string]interface{}) string) *Value { - groups := make(map[string][]map[string]interface{}) - v.EachMSI(func(index int, val map[string]interface{}) bool { - group := grouper(index, val) - if _, ok := groups[group]; !ok { - groups[group] = make([]map[string]interface{}, 0) - } - groups[group] = append(groups[group], val) - return true - }) - return &Value{data: groups} -} - -// ReplaceMSI uses the specified function to replace each map[string]interface{}s -// by iterating each item. The data in the returned result will be a -// []map[string]interface{} containing the replaced items. -func (v *Value) ReplaceMSI(replacer func(int, map[string]interface{}) map[string]interface{}) *Value { - arr := v.MustMSISlice() - replaced := make([]map[string]interface{}, len(arr)) - v.EachMSI(func(index int, val map[string]interface{}) bool { - replaced[index] = replacer(index, val) - return true - }) - return &Value{data: replaced} -} - -// CollectMSI uses the specified collector function to collect a value -// for each of the map[string]interface{}s in the slice. The data returned will be a -// []interface{}. -func (v *Value) CollectMSI(collector func(int, map[string]interface{}) interface{}) *Value { - arr := v.MustMSISlice() - collected := make([]interface{}, len(arr)) - v.EachMSI(func(index int, val map[string]interface{}) bool { - collected[index] = collector(index, val) - return true - }) - return &Value{data: collected} -} - -/* - ObjxMap ((Map) and [](Map)) -*/ - -// ObjxMap gets the value as a (Map), returns the optionalDefault -// value or a system default object if the value is the wrong type. -func (v *Value) ObjxMap(optionalDefault ...(Map)) Map { - if s, ok := v.data.((Map)); ok { - return s - } - if s, ok := v.data.(map[string]interface{}); ok { - return s - } - if len(optionalDefault) == 1 { - return optionalDefault[0] - } - return New(nil) -} - -// MustObjxMap gets the value as a (Map). -// -// Panics if the object is not a (Map). -func (v *Value) MustObjxMap() Map { - if s, ok := v.data.(map[string]interface{}); ok { - return s - } - return v.data.((Map)) -} - -// ObjxMapSlice gets the value as a [](Map), returns the optionalDefault -// value or nil if the value is not a [](Map). -func (v *Value) ObjxMapSlice(optionalDefault ...[](Map)) [](Map) { - if s, ok := v.data.([]Map); ok { - return s - } - - if s, ok := v.data.([]map[string]interface{}); ok { - result := make([]Map, len(s)) - for i := range s { - result[i] = s[i] - } - return result - } - - s, ok := v.data.([]interface{}) - if !ok { - if len(optionalDefault) == 1 { - return optionalDefault[0] - } - return nil - } - - result := make([]Map, len(s)) - for i := range s { - switch s[i].(type) { - case Map: - result[i] = s[i].(Map) - case map[string]interface{}: - result[i] = New(s[i]) - default: - return nil - } - } - return result -} - -// MustObjxMapSlice gets the value as a [](Map). -// -// Panics if the object is not a [](Map). -func (v *Value) MustObjxMapSlice() [](Map) { - if s := v.ObjxMapSlice(); s != nil { - return s - } - return v.data.([](Map)) -} - -// IsObjxMap gets whether the object contained is a (Map) or not. -func (v *Value) IsObjxMap() bool { - _, ok := v.data.((Map)) - if !ok { - _, ok = v.data.(map[string]interface{}) - } - return ok -} - -// IsObjxMapSlice gets whether the object contained is a [](Map) or not. -func (v *Value) IsObjxMapSlice() bool { - _, ok := v.data.([](Map)) - if !ok { - _, ok = v.data.([]map[string]interface{}) - if !ok { - s, ok := v.data.([]interface{}) - if ok { - for i := range s { - switch s[i].(type) { - case Map: - case map[string]interface{}: - default: - return false - } - } - return true - } - } - } - - return ok -} - -// EachObjxMap calls the specified callback for each object -// in the [](Map). -// -// Panics if the object is the wrong type. -func (v *Value) EachObjxMap(callback func(int, Map) bool) *Value { - for index, val := range v.MustObjxMapSlice() { - carryon := callback(index, val) - if !carryon { - break - } - } - return v -} - -// WhereObjxMap uses the specified decider function to select items -// from the [](Map). The object contained in the result will contain -// only the selected items. -func (v *Value) WhereObjxMap(decider func(int, Map) bool) *Value { - var selected [](Map) - v.EachObjxMap(func(index int, val Map) bool { - shouldSelect := decider(index, val) - if !shouldSelect { - selected = append(selected, val) - } - return true - }) - return &Value{data: selected} -} - -// GroupObjxMap uses the specified grouper function to group the items -// keyed by the return of the grouper. The object contained in the -// result will contain a map[string][](Map). -func (v *Value) GroupObjxMap(grouper func(int, Map) string) *Value { - groups := make(map[string][](Map)) - v.EachObjxMap(func(index int, val Map) bool { - group := grouper(index, val) - if _, ok := groups[group]; !ok { - groups[group] = make([](Map), 0) - } - groups[group] = append(groups[group], val) - return true - }) - return &Value{data: groups} -} - -// ReplaceObjxMap uses the specified function to replace each (Map)s -// by iterating each item. The data in the returned result will be a -// [](Map) containing the replaced items. -func (v *Value) ReplaceObjxMap(replacer func(int, Map) Map) *Value { - arr := v.MustObjxMapSlice() - replaced := make([](Map), len(arr)) - v.EachObjxMap(func(index int, val Map) bool { - replaced[index] = replacer(index, val) - return true - }) - return &Value{data: replaced} -} - -// CollectObjxMap uses the specified collector function to collect a value -// for each of the (Map)s in the slice. The data returned will be a -// []interface{}. -func (v *Value) CollectObjxMap(collector func(int, Map) interface{}) *Value { - arr := v.MustObjxMapSlice() - collected := make([]interface{}, len(arr)) - v.EachObjxMap(func(index int, val Map) bool { - collected[index] = collector(index, val) - return true - }) - return &Value{data: collected} -} diff --git a/vendor/github.com/stretchr/objx/type_specific_codegen.go b/vendor/github.com/stretchr/objx/type_specific_codegen.go deleted file mode 100644 index 45850456e1..0000000000 --- a/vendor/github.com/stretchr/objx/type_specific_codegen.go +++ /dev/null @@ -1,2261 +0,0 @@ -package objx - -/* - Inter (interface{} and []interface{}) -*/ - -// Inter gets the value as a interface{}, returns the optionalDefault -// value or a system default object if the value is the wrong type. -func (v *Value) Inter(optionalDefault ...interface{}) interface{} { - if s, ok := v.data.(interface{}); ok { - return s - } - if len(optionalDefault) == 1 { - return optionalDefault[0] - } - return nil -} - -// MustInter gets the value as a interface{}. -// -// Panics if the object is not a interface{}. -func (v *Value) MustInter() interface{} { - return v.data.(interface{}) -} - -// InterSlice gets the value as a []interface{}, returns the optionalDefault -// value or nil if the value is not a []interface{}. -func (v *Value) InterSlice(optionalDefault ...[]interface{}) []interface{} { - if s, ok := v.data.([]interface{}); ok { - return s - } - if len(optionalDefault) == 1 { - return optionalDefault[0] - } - return nil -} - -// MustInterSlice gets the value as a []interface{}. -// -// Panics if the object is not a []interface{}. -func (v *Value) MustInterSlice() []interface{} { - return v.data.([]interface{}) -} - -// IsInter gets whether the object contained is a interface{} or not. -func (v *Value) IsInter() bool { - _, ok := v.data.(interface{}) - return ok -} - -// IsInterSlice gets whether the object contained is a []interface{} or not. -func (v *Value) IsInterSlice() bool { - _, ok := v.data.([]interface{}) - return ok -} - -// EachInter calls the specified callback for each object -// in the []interface{}. -// -// Panics if the object is the wrong type. -func (v *Value) EachInter(callback func(int, interface{}) bool) *Value { - for index, val := range v.MustInterSlice() { - carryon := callback(index, val) - if !carryon { - break - } - } - return v -} - -// WhereInter uses the specified decider function to select items -// from the []interface{}. The object contained in the result will contain -// only the selected items. -func (v *Value) WhereInter(decider func(int, interface{}) bool) *Value { - var selected []interface{} - v.EachInter(func(index int, val interface{}) bool { - shouldSelect := decider(index, val) - if !shouldSelect { - selected = append(selected, val) - } - return true - }) - return &Value{data: selected} -} - -// GroupInter uses the specified grouper function to group the items -// keyed by the return of the grouper. The object contained in the -// result will contain a map[string][]interface{}. -func (v *Value) GroupInter(grouper func(int, interface{}) string) *Value { - groups := make(map[string][]interface{}) - v.EachInter(func(index int, val interface{}) bool { - group := grouper(index, val) - if _, ok := groups[group]; !ok { - groups[group] = make([]interface{}, 0) - } - groups[group] = append(groups[group], val) - return true - }) - return &Value{data: groups} -} - -// ReplaceInter uses the specified function to replace each interface{}s -// by iterating each item. The data in the returned result will be a -// []interface{} containing the replaced items. -func (v *Value) ReplaceInter(replacer func(int, interface{}) interface{}) *Value { - arr := v.MustInterSlice() - replaced := make([]interface{}, len(arr)) - v.EachInter(func(index int, val interface{}) bool { - replaced[index] = replacer(index, val) - return true - }) - return &Value{data: replaced} -} - -// CollectInter uses the specified collector function to collect a value -// for each of the interface{}s in the slice. The data returned will be a -// []interface{}. -func (v *Value) CollectInter(collector func(int, interface{}) interface{}) *Value { - arr := v.MustInterSlice() - collected := make([]interface{}, len(arr)) - v.EachInter(func(index int, val interface{}) bool { - collected[index] = collector(index, val) - return true - }) - return &Value{data: collected} -} - -/* - Bool (bool and []bool) -*/ - -// Bool gets the value as a bool, returns the optionalDefault -// value or a system default object if the value is the wrong type. -func (v *Value) Bool(optionalDefault ...bool) bool { - if s, ok := v.data.(bool); ok { - return s - } - if len(optionalDefault) == 1 { - return optionalDefault[0] - } - return false -} - -// MustBool gets the value as a bool. -// -// Panics if the object is not a bool. -func (v *Value) MustBool() bool { - return v.data.(bool) -} - -// BoolSlice gets the value as a []bool, returns the optionalDefault -// value or nil if the value is not a []bool. -func (v *Value) BoolSlice(optionalDefault ...[]bool) []bool { - if s, ok := v.data.([]bool); ok { - return s - } - if len(optionalDefault) == 1 { - return optionalDefault[0] - } - return nil -} - -// MustBoolSlice gets the value as a []bool. -// -// Panics if the object is not a []bool. -func (v *Value) MustBoolSlice() []bool { - return v.data.([]bool) -} - -// IsBool gets whether the object contained is a bool or not. -func (v *Value) IsBool() bool { - _, ok := v.data.(bool) - return ok -} - -// IsBoolSlice gets whether the object contained is a []bool or not. -func (v *Value) IsBoolSlice() bool { - _, ok := v.data.([]bool) - return ok -} - -// EachBool calls the specified callback for each object -// in the []bool. -// -// Panics if the object is the wrong type. -func (v *Value) EachBool(callback func(int, bool) bool) *Value { - for index, val := range v.MustBoolSlice() { - carryon := callback(index, val) - if !carryon { - break - } - } - return v -} - -// WhereBool uses the specified decider function to select items -// from the []bool. The object contained in the result will contain -// only the selected items. -func (v *Value) WhereBool(decider func(int, bool) bool) *Value { - var selected []bool - v.EachBool(func(index int, val bool) bool { - shouldSelect := decider(index, val) - if !shouldSelect { - selected = append(selected, val) - } - return true - }) - return &Value{data: selected} -} - -// GroupBool uses the specified grouper function to group the items -// keyed by the return of the grouper. The object contained in the -// result will contain a map[string][]bool. -func (v *Value) GroupBool(grouper func(int, bool) string) *Value { - groups := make(map[string][]bool) - v.EachBool(func(index int, val bool) bool { - group := grouper(index, val) - if _, ok := groups[group]; !ok { - groups[group] = make([]bool, 0) - } - groups[group] = append(groups[group], val) - return true - }) - return &Value{data: groups} -} - -// ReplaceBool uses the specified function to replace each bools -// by iterating each item. The data in the returned result will be a -// []bool containing the replaced items. -func (v *Value) ReplaceBool(replacer func(int, bool) bool) *Value { - arr := v.MustBoolSlice() - replaced := make([]bool, len(arr)) - v.EachBool(func(index int, val bool) bool { - replaced[index] = replacer(index, val) - return true - }) - return &Value{data: replaced} -} - -// CollectBool uses the specified collector function to collect a value -// for each of the bools in the slice. The data returned will be a -// []interface{}. -func (v *Value) CollectBool(collector func(int, bool) interface{}) *Value { - arr := v.MustBoolSlice() - collected := make([]interface{}, len(arr)) - v.EachBool(func(index int, val bool) bool { - collected[index] = collector(index, val) - return true - }) - return &Value{data: collected} -} - -/* - Str (string and []string) -*/ - -// Str gets the value as a string, returns the optionalDefault -// value or a system default object if the value is the wrong type. -func (v *Value) Str(optionalDefault ...string) string { - if s, ok := v.data.(string); ok { - return s - } - if len(optionalDefault) == 1 { - return optionalDefault[0] - } - return "" -} - -// MustStr gets the value as a string. -// -// Panics if the object is not a string. -func (v *Value) MustStr() string { - return v.data.(string) -} - -// StrSlice gets the value as a []string, returns the optionalDefault -// value or nil if the value is not a []string. -func (v *Value) StrSlice(optionalDefault ...[]string) []string { - if s, ok := v.data.([]string); ok { - return s - } - if len(optionalDefault) == 1 { - return optionalDefault[0] - } - return nil -} - -// MustStrSlice gets the value as a []string. -// -// Panics if the object is not a []string. -func (v *Value) MustStrSlice() []string { - return v.data.([]string) -} - -// IsStr gets whether the object contained is a string or not. -func (v *Value) IsStr() bool { - _, ok := v.data.(string) - return ok -} - -// IsStrSlice gets whether the object contained is a []string or not. -func (v *Value) IsStrSlice() bool { - _, ok := v.data.([]string) - return ok -} - -// EachStr calls the specified callback for each object -// in the []string. -// -// Panics if the object is the wrong type. -func (v *Value) EachStr(callback func(int, string) bool) *Value { - for index, val := range v.MustStrSlice() { - carryon := callback(index, val) - if !carryon { - break - } - } - return v -} - -// WhereStr uses the specified decider function to select items -// from the []string. The object contained in the result will contain -// only the selected items. -func (v *Value) WhereStr(decider func(int, string) bool) *Value { - var selected []string - v.EachStr(func(index int, val string) bool { - shouldSelect := decider(index, val) - if !shouldSelect { - selected = append(selected, val) - } - return true - }) - return &Value{data: selected} -} - -// GroupStr uses the specified grouper function to group the items -// keyed by the return of the grouper. The object contained in the -// result will contain a map[string][]string. -func (v *Value) GroupStr(grouper func(int, string) string) *Value { - groups := make(map[string][]string) - v.EachStr(func(index int, val string) bool { - group := grouper(index, val) - if _, ok := groups[group]; !ok { - groups[group] = make([]string, 0) - } - groups[group] = append(groups[group], val) - return true - }) - return &Value{data: groups} -} - -// ReplaceStr uses the specified function to replace each strings -// by iterating each item. The data in the returned result will be a -// []string containing the replaced items. -func (v *Value) ReplaceStr(replacer func(int, string) string) *Value { - arr := v.MustStrSlice() - replaced := make([]string, len(arr)) - v.EachStr(func(index int, val string) bool { - replaced[index] = replacer(index, val) - return true - }) - return &Value{data: replaced} -} - -// CollectStr uses the specified collector function to collect a value -// for each of the strings in the slice. The data returned will be a -// []interface{}. -func (v *Value) CollectStr(collector func(int, string) interface{}) *Value { - arr := v.MustStrSlice() - collected := make([]interface{}, len(arr)) - v.EachStr(func(index int, val string) bool { - collected[index] = collector(index, val) - return true - }) - return &Value{data: collected} -} - -/* - Int (int and []int) -*/ - -// Int gets the value as a int, returns the optionalDefault -// value or a system default object if the value is the wrong type. -func (v *Value) Int(optionalDefault ...int) int { - if s, ok := v.data.(int); ok { - return s - } - if s, ok := v.data.(float64); ok { - if float64(int(s)) == s { - return int(s) - } - } - if len(optionalDefault) == 1 { - return optionalDefault[0] - } - return 0 -} - -// MustInt gets the value as a int. -// -// Panics if the object is not a int. -func (v *Value) MustInt() int { - if s, ok := v.data.(float64); ok { - if float64(int(s)) == s { - return int(s) - } - } - return v.data.(int) -} - -// IntSlice gets the value as a []int, returns the optionalDefault -// value or nil if the value is not a []int. -func (v *Value) IntSlice(optionalDefault ...[]int) []int { - if s, ok := v.data.([]int); ok { - return s - } - if len(optionalDefault) == 1 { - return optionalDefault[0] - } - return nil -} - -// MustIntSlice gets the value as a []int. -// -// Panics if the object is not a []int. -func (v *Value) MustIntSlice() []int { - return v.data.([]int) -} - -// IsInt gets whether the object contained is a int or not. -func (v *Value) IsInt() bool { - _, ok := v.data.(int) - return ok -} - -// IsIntSlice gets whether the object contained is a []int or not. -func (v *Value) IsIntSlice() bool { - _, ok := v.data.([]int) - return ok -} - -// EachInt calls the specified callback for each object -// in the []int. -// -// Panics if the object is the wrong type. -func (v *Value) EachInt(callback func(int, int) bool) *Value { - for index, val := range v.MustIntSlice() { - carryon := callback(index, val) - if !carryon { - break - } - } - return v -} - -// WhereInt uses the specified decider function to select items -// from the []int. The object contained in the result will contain -// only the selected items. -func (v *Value) WhereInt(decider func(int, int) bool) *Value { - var selected []int - v.EachInt(func(index int, val int) bool { - shouldSelect := decider(index, val) - if !shouldSelect { - selected = append(selected, val) - } - return true - }) - return &Value{data: selected} -} - -// GroupInt uses the specified grouper function to group the items -// keyed by the return of the grouper. The object contained in the -// result will contain a map[string][]int. -func (v *Value) GroupInt(grouper func(int, int) string) *Value { - groups := make(map[string][]int) - v.EachInt(func(index int, val int) bool { - group := grouper(index, val) - if _, ok := groups[group]; !ok { - groups[group] = make([]int, 0) - } - groups[group] = append(groups[group], val) - return true - }) - return &Value{data: groups} -} - -// ReplaceInt uses the specified function to replace each ints -// by iterating each item. The data in the returned result will be a -// []int containing the replaced items. -func (v *Value) ReplaceInt(replacer func(int, int) int) *Value { - arr := v.MustIntSlice() - replaced := make([]int, len(arr)) - v.EachInt(func(index int, val int) bool { - replaced[index] = replacer(index, val) - return true - }) - return &Value{data: replaced} -} - -// CollectInt uses the specified collector function to collect a value -// for each of the ints in the slice. The data returned will be a -// []interface{}. -func (v *Value) CollectInt(collector func(int, int) interface{}) *Value { - arr := v.MustIntSlice() - collected := make([]interface{}, len(arr)) - v.EachInt(func(index int, val int) bool { - collected[index] = collector(index, val) - return true - }) - return &Value{data: collected} -} - -/* - Int8 (int8 and []int8) -*/ - -// Int8 gets the value as a int8, returns the optionalDefault -// value or a system default object if the value is the wrong type. -func (v *Value) Int8(optionalDefault ...int8) int8 { - if s, ok := v.data.(int8); ok { - return s - } - if len(optionalDefault) == 1 { - return optionalDefault[0] - } - return 0 -} - -// MustInt8 gets the value as a int8. -// -// Panics if the object is not a int8. -func (v *Value) MustInt8() int8 { - return v.data.(int8) -} - -// Int8Slice gets the value as a []int8, returns the optionalDefault -// value or nil if the value is not a []int8. -func (v *Value) Int8Slice(optionalDefault ...[]int8) []int8 { - if s, ok := v.data.([]int8); ok { - return s - } - if len(optionalDefault) == 1 { - return optionalDefault[0] - } - return nil -} - -// MustInt8Slice gets the value as a []int8. -// -// Panics if the object is not a []int8. -func (v *Value) MustInt8Slice() []int8 { - return v.data.([]int8) -} - -// IsInt8 gets whether the object contained is a int8 or not. -func (v *Value) IsInt8() bool { - _, ok := v.data.(int8) - return ok -} - -// IsInt8Slice gets whether the object contained is a []int8 or not. -func (v *Value) IsInt8Slice() bool { - _, ok := v.data.([]int8) - return ok -} - -// EachInt8 calls the specified callback for each object -// in the []int8. -// -// Panics if the object is the wrong type. -func (v *Value) EachInt8(callback func(int, int8) bool) *Value { - for index, val := range v.MustInt8Slice() { - carryon := callback(index, val) - if !carryon { - break - } - } - return v -} - -// WhereInt8 uses the specified decider function to select items -// from the []int8. The object contained in the result will contain -// only the selected items. -func (v *Value) WhereInt8(decider func(int, int8) bool) *Value { - var selected []int8 - v.EachInt8(func(index int, val int8) bool { - shouldSelect := decider(index, val) - if !shouldSelect { - selected = append(selected, val) - } - return true - }) - return &Value{data: selected} -} - -// GroupInt8 uses the specified grouper function to group the items -// keyed by the return of the grouper. The object contained in the -// result will contain a map[string][]int8. -func (v *Value) GroupInt8(grouper func(int, int8) string) *Value { - groups := make(map[string][]int8) - v.EachInt8(func(index int, val int8) bool { - group := grouper(index, val) - if _, ok := groups[group]; !ok { - groups[group] = make([]int8, 0) - } - groups[group] = append(groups[group], val) - return true - }) - return &Value{data: groups} -} - -// ReplaceInt8 uses the specified function to replace each int8s -// by iterating each item. The data in the returned result will be a -// []int8 containing the replaced items. -func (v *Value) ReplaceInt8(replacer func(int, int8) int8) *Value { - arr := v.MustInt8Slice() - replaced := make([]int8, len(arr)) - v.EachInt8(func(index int, val int8) bool { - replaced[index] = replacer(index, val) - return true - }) - return &Value{data: replaced} -} - -// CollectInt8 uses the specified collector function to collect a value -// for each of the int8s in the slice. The data returned will be a -// []interface{}. -func (v *Value) CollectInt8(collector func(int, int8) interface{}) *Value { - arr := v.MustInt8Slice() - collected := make([]interface{}, len(arr)) - v.EachInt8(func(index int, val int8) bool { - collected[index] = collector(index, val) - return true - }) - return &Value{data: collected} -} - -/* - Int16 (int16 and []int16) -*/ - -// Int16 gets the value as a int16, returns the optionalDefault -// value or a system default object if the value is the wrong type. -func (v *Value) Int16(optionalDefault ...int16) int16 { - if s, ok := v.data.(int16); ok { - return s - } - if len(optionalDefault) == 1 { - return optionalDefault[0] - } - return 0 -} - -// MustInt16 gets the value as a int16. -// -// Panics if the object is not a int16. -func (v *Value) MustInt16() int16 { - return v.data.(int16) -} - -// Int16Slice gets the value as a []int16, returns the optionalDefault -// value or nil if the value is not a []int16. -func (v *Value) Int16Slice(optionalDefault ...[]int16) []int16 { - if s, ok := v.data.([]int16); ok { - return s - } - if len(optionalDefault) == 1 { - return optionalDefault[0] - } - return nil -} - -// MustInt16Slice gets the value as a []int16. -// -// Panics if the object is not a []int16. -func (v *Value) MustInt16Slice() []int16 { - return v.data.([]int16) -} - -// IsInt16 gets whether the object contained is a int16 or not. -func (v *Value) IsInt16() bool { - _, ok := v.data.(int16) - return ok -} - -// IsInt16Slice gets whether the object contained is a []int16 or not. -func (v *Value) IsInt16Slice() bool { - _, ok := v.data.([]int16) - return ok -} - -// EachInt16 calls the specified callback for each object -// in the []int16. -// -// Panics if the object is the wrong type. -func (v *Value) EachInt16(callback func(int, int16) bool) *Value { - for index, val := range v.MustInt16Slice() { - carryon := callback(index, val) - if !carryon { - break - } - } - return v -} - -// WhereInt16 uses the specified decider function to select items -// from the []int16. The object contained in the result will contain -// only the selected items. -func (v *Value) WhereInt16(decider func(int, int16) bool) *Value { - var selected []int16 - v.EachInt16(func(index int, val int16) bool { - shouldSelect := decider(index, val) - if !shouldSelect { - selected = append(selected, val) - } - return true - }) - return &Value{data: selected} -} - -// GroupInt16 uses the specified grouper function to group the items -// keyed by the return of the grouper. The object contained in the -// result will contain a map[string][]int16. -func (v *Value) GroupInt16(grouper func(int, int16) string) *Value { - groups := make(map[string][]int16) - v.EachInt16(func(index int, val int16) bool { - group := grouper(index, val) - if _, ok := groups[group]; !ok { - groups[group] = make([]int16, 0) - } - groups[group] = append(groups[group], val) - return true - }) - return &Value{data: groups} -} - -// ReplaceInt16 uses the specified function to replace each int16s -// by iterating each item. The data in the returned result will be a -// []int16 containing the replaced items. -func (v *Value) ReplaceInt16(replacer func(int, int16) int16) *Value { - arr := v.MustInt16Slice() - replaced := make([]int16, len(arr)) - v.EachInt16(func(index int, val int16) bool { - replaced[index] = replacer(index, val) - return true - }) - return &Value{data: replaced} -} - -// CollectInt16 uses the specified collector function to collect a value -// for each of the int16s in the slice. The data returned will be a -// []interface{}. -func (v *Value) CollectInt16(collector func(int, int16) interface{}) *Value { - arr := v.MustInt16Slice() - collected := make([]interface{}, len(arr)) - v.EachInt16(func(index int, val int16) bool { - collected[index] = collector(index, val) - return true - }) - return &Value{data: collected} -} - -/* - Int32 (int32 and []int32) -*/ - -// Int32 gets the value as a int32, returns the optionalDefault -// value or a system default object if the value is the wrong type. -func (v *Value) Int32(optionalDefault ...int32) int32 { - if s, ok := v.data.(int32); ok { - return s - } - if len(optionalDefault) == 1 { - return optionalDefault[0] - } - return 0 -} - -// MustInt32 gets the value as a int32. -// -// Panics if the object is not a int32. -func (v *Value) MustInt32() int32 { - return v.data.(int32) -} - -// Int32Slice gets the value as a []int32, returns the optionalDefault -// value or nil if the value is not a []int32. -func (v *Value) Int32Slice(optionalDefault ...[]int32) []int32 { - if s, ok := v.data.([]int32); ok { - return s - } - if len(optionalDefault) == 1 { - return optionalDefault[0] - } - return nil -} - -// MustInt32Slice gets the value as a []int32. -// -// Panics if the object is not a []int32. -func (v *Value) MustInt32Slice() []int32 { - return v.data.([]int32) -} - -// IsInt32 gets whether the object contained is a int32 or not. -func (v *Value) IsInt32() bool { - _, ok := v.data.(int32) - return ok -} - -// IsInt32Slice gets whether the object contained is a []int32 or not. -func (v *Value) IsInt32Slice() bool { - _, ok := v.data.([]int32) - return ok -} - -// EachInt32 calls the specified callback for each object -// in the []int32. -// -// Panics if the object is the wrong type. -func (v *Value) EachInt32(callback func(int, int32) bool) *Value { - for index, val := range v.MustInt32Slice() { - carryon := callback(index, val) - if !carryon { - break - } - } - return v -} - -// WhereInt32 uses the specified decider function to select items -// from the []int32. The object contained in the result will contain -// only the selected items. -func (v *Value) WhereInt32(decider func(int, int32) bool) *Value { - var selected []int32 - v.EachInt32(func(index int, val int32) bool { - shouldSelect := decider(index, val) - if !shouldSelect { - selected = append(selected, val) - } - return true - }) - return &Value{data: selected} -} - -// GroupInt32 uses the specified grouper function to group the items -// keyed by the return of the grouper. The object contained in the -// result will contain a map[string][]int32. -func (v *Value) GroupInt32(grouper func(int, int32) string) *Value { - groups := make(map[string][]int32) - v.EachInt32(func(index int, val int32) bool { - group := grouper(index, val) - if _, ok := groups[group]; !ok { - groups[group] = make([]int32, 0) - } - groups[group] = append(groups[group], val) - return true - }) - return &Value{data: groups} -} - -// ReplaceInt32 uses the specified function to replace each int32s -// by iterating each item. The data in the returned result will be a -// []int32 containing the replaced items. -func (v *Value) ReplaceInt32(replacer func(int, int32) int32) *Value { - arr := v.MustInt32Slice() - replaced := make([]int32, len(arr)) - v.EachInt32(func(index int, val int32) bool { - replaced[index] = replacer(index, val) - return true - }) - return &Value{data: replaced} -} - -// CollectInt32 uses the specified collector function to collect a value -// for each of the int32s in the slice. The data returned will be a -// []interface{}. -func (v *Value) CollectInt32(collector func(int, int32) interface{}) *Value { - arr := v.MustInt32Slice() - collected := make([]interface{}, len(arr)) - v.EachInt32(func(index int, val int32) bool { - collected[index] = collector(index, val) - return true - }) - return &Value{data: collected} -} - -/* - Int64 (int64 and []int64) -*/ - -// Int64 gets the value as a int64, returns the optionalDefault -// value or a system default object if the value is the wrong type. -func (v *Value) Int64(optionalDefault ...int64) int64 { - if s, ok := v.data.(int64); ok { - return s - } - if len(optionalDefault) == 1 { - return optionalDefault[0] - } - return 0 -} - -// MustInt64 gets the value as a int64. -// -// Panics if the object is not a int64. -func (v *Value) MustInt64() int64 { - return v.data.(int64) -} - -// Int64Slice gets the value as a []int64, returns the optionalDefault -// value or nil if the value is not a []int64. -func (v *Value) Int64Slice(optionalDefault ...[]int64) []int64 { - if s, ok := v.data.([]int64); ok { - return s - } - if len(optionalDefault) == 1 { - return optionalDefault[0] - } - return nil -} - -// MustInt64Slice gets the value as a []int64. -// -// Panics if the object is not a []int64. -func (v *Value) MustInt64Slice() []int64 { - return v.data.([]int64) -} - -// IsInt64 gets whether the object contained is a int64 or not. -func (v *Value) IsInt64() bool { - _, ok := v.data.(int64) - return ok -} - -// IsInt64Slice gets whether the object contained is a []int64 or not. -func (v *Value) IsInt64Slice() bool { - _, ok := v.data.([]int64) - return ok -} - -// EachInt64 calls the specified callback for each object -// in the []int64. -// -// Panics if the object is the wrong type. -func (v *Value) EachInt64(callback func(int, int64) bool) *Value { - for index, val := range v.MustInt64Slice() { - carryon := callback(index, val) - if !carryon { - break - } - } - return v -} - -// WhereInt64 uses the specified decider function to select items -// from the []int64. The object contained in the result will contain -// only the selected items. -func (v *Value) WhereInt64(decider func(int, int64) bool) *Value { - var selected []int64 - v.EachInt64(func(index int, val int64) bool { - shouldSelect := decider(index, val) - if !shouldSelect { - selected = append(selected, val) - } - return true - }) - return &Value{data: selected} -} - -// GroupInt64 uses the specified grouper function to group the items -// keyed by the return of the grouper. The object contained in the -// result will contain a map[string][]int64. -func (v *Value) GroupInt64(grouper func(int, int64) string) *Value { - groups := make(map[string][]int64) - v.EachInt64(func(index int, val int64) bool { - group := grouper(index, val) - if _, ok := groups[group]; !ok { - groups[group] = make([]int64, 0) - } - groups[group] = append(groups[group], val) - return true - }) - return &Value{data: groups} -} - -// ReplaceInt64 uses the specified function to replace each int64s -// by iterating each item. The data in the returned result will be a -// []int64 containing the replaced items. -func (v *Value) ReplaceInt64(replacer func(int, int64) int64) *Value { - arr := v.MustInt64Slice() - replaced := make([]int64, len(arr)) - v.EachInt64(func(index int, val int64) bool { - replaced[index] = replacer(index, val) - return true - }) - return &Value{data: replaced} -} - -// CollectInt64 uses the specified collector function to collect a value -// for each of the int64s in the slice. The data returned will be a -// []interface{}. -func (v *Value) CollectInt64(collector func(int, int64) interface{}) *Value { - arr := v.MustInt64Slice() - collected := make([]interface{}, len(arr)) - v.EachInt64(func(index int, val int64) bool { - collected[index] = collector(index, val) - return true - }) - return &Value{data: collected} -} - -/* - Uint (uint and []uint) -*/ - -// Uint gets the value as a uint, returns the optionalDefault -// value or a system default object if the value is the wrong type. -func (v *Value) Uint(optionalDefault ...uint) uint { - if s, ok := v.data.(uint); ok { - return s - } - if len(optionalDefault) == 1 { - return optionalDefault[0] - } - return 0 -} - -// MustUint gets the value as a uint. -// -// Panics if the object is not a uint. -func (v *Value) MustUint() uint { - return v.data.(uint) -} - -// UintSlice gets the value as a []uint, returns the optionalDefault -// value or nil if the value is not a []uint. -func (v *Value) UintSlice(optionalDefault ...[]uint) []uint { - if s, ok := v.data.([]uint); ok { - return s - } - if len(optionalDefault) == 1 { - return optionalDefault[0] - } - return nil -} - -// MustUintSlice gets the value as a []uint. -// -// Panics if the object is not a []uint. -func (v *Value) MustUintSlice() []uint { - return v.data.([]uint) -} - -// IsUint gets whether the object contained is a uint or not. -func (v *Value) IsUint() bool { - _, ok := v.data.(uint) - return ok -} - -// IsUintSlice gets whether the object contained is a []uint or not. -func (v *Value) IsUintSlice() bool { - _, ok := v.data.([]uint) - return ok -} - -// EachUint calls the specified callback for each object -// in the []uint. -// -// Panics if the object is the wrong type. -func (v *Value) EachUint(callback func(int, uint) bool) *Value { - for index, val := range v.MustUintSlice() { - carryon := callback(index, val) - if !carryon { - break - } - } - return v -} - -// WhereUint uses the specified decider function to select items -// from the []uint. The object contained in the result will contain -// only the selected items. -func (v *Value) WhereUint(decider func(int, uint) bool) *Value { - var selected []uint - v.EachUint(func(index int, val uint) bool { - shouldSelect := decider(index, val) - if !shouldSelect { - selected = append(selected, val) - } - return true - }) - return &Value{data: selected} -} - -// GroupUint uses the specified grouper function to group the items -// keyed by the return of the grouper. The object contained in the -// result will contain a map[string][]uint. -func (v *Value) GroupUint(grouper func(int, uint) string) *Value { - groups := make(map[string][]uint) - v.EachUint(func(index int, val uint) bool { - group := grouper(index, val) - if _, ok := groups[group]; !ok { - groups[group] = make([]uint, 0) - } - groups[group] = append(groups[group], val) - return true - }) - return &Value{data: groups} -} - -// ReplaceUint uses the specified function to replace each uints -// by iterating each item. The data in the returned result will be a -// []uint containing the replaced items. -func (v *Value) ReplaceUint(replacer func(int, uint) uint) *Value { - arr := v.MustUintSlice() - replaced := make([]uint, len(arr)) - v.EachUint(func(index int, val uint) bool { - replaced[index] = replacer(index, val) - return true - }) - return &Value{data: replaced} -} - -// CollectUint uses the specified collector function to collect a value -// for each of the uints in the slice. The data returned will be a -// []interface{}. -func (v *Value) CollectUint(collector func(int, uint) interface{}) *Value { - arr := v.MustUintSlice() - collected := make([]interface{}, len(arr)) - v.EachUint(func(index int, val uint) bool { - collected[index] = collector(index, val) - return true - }) - return &Value{data: collected} -} - -/* - Uint8 (uint8 and []uint8) -*/ - -// Uint8 gets the value as a uint8, returns the optionalDefault -// value or a system default object if the value is the wrong type. -func (v *Value) Uint8(optionalDefault ...uint8) uint8 { - if s, ok := v.data.(uint8); ok { - return s - } - if len(optionalDefault) == 1 { - return optionalDefault[0] - } - return 0 -} - -// MustUint8 gets the value as a uint8. -// -// Panics if the object is not a uint8. -func (v *Value) MustUint8() uint8 { - return v.data.(uint8) -} - -// Uint8Slice gets the value as a []uint8, returns the optionalDefault -// value or nil if the value is not a []uint8. -func (v *Value) Uint8Slice(optionalDefault ...[]uint8) []uint8 { - if s, ok := v.data.([]uint8); ok { - return s - } - if len(optionalDefault) == 1 { - return optionalDefault[0] - } - return nil -} - -// MustUint8Slice gets the value as a []uint8. -// -// Panics if the object is not a []uint8. -func (v *Value) MustUint8Slice() []uint8 { - return v.data.([]uint8) -} - -// IsUint8 gets whether the object contained is a uint8 or not. -func (v *Value) IsUint8() bool { - _, ok := v.data.(uint8) - return ok -} - -// IsUint8Slice gets whether the object contained is a []uint8 or not. -func (v *Value) IsUint8Slice() bool { - _, ok := v.data.([]uint8) - return ok -} - -// EachUint8 calls the specified callback for each object -// in the []uint8. -// -// Panics if the object is the wrong type. -func (v *Value) EachUint8(callback func(int, uint8) bool) *Value { - for index, val := range v.MustUint8Slice() { - carryon := callback(index, val) - if !carryon { - break - } - } - return v -} - -// WhereUint8 uses the specified decider function to select items -// from the []uint8. The object contained in the result will contain -// only the selected items. -func (v *Value) WhereUint8(decider func(int, uint8) bool) *Value { - var selected []uint8 - v.EachUint8(func(index int, val uint8) bool { - shouldSelect := decider(index, val) - if !shouldSelect { - selected = append(selected, val) - } - return true - }) - return &Value{data: selected} -} - -// GroupUint8 uses the specified grouper function to group the items -// keyed by the return of the grouper. The object contained in the -// result will contain a map[string][]uint8. -func (v *Value) GroupUint8(grouper func(int, uint8) string) *Value { - groups := make(map[string][]uint8) - v.EachUint8(func(index int, val uint8) bool { - group := grouper(index, val) - if _, ok := groups[group]; !ok { - groups[group] = make([]uint8, 0) - } - groups[group] = append(groups[group], val) - return true - }) - return &Value{data: groups} -} - -// ReplaceUint8 uses the specified function to replace each uint8s -// by iterating each item. The data in the returned result will be a -// []uint8 containing the replaced items. -func (v *Value) ReplaceUint8(replacer func(int, uint8) uint8) *Value { - arr := v.MustUint8Slice() - replaced := make([]uint8, len(arr)) - v.EachUint8(func(index int, val uint8) bool { - replaced[index] = replacer(index, val) - return true - }) - return &Value{data: replaced} -} - -// CollectUint8 uses the specified collector function to collect a value -// for each of the uint8s in the slice. The data returned will be a -// []interface{}. -func (v *Value) CollectUint8(collector func(int, uint8) interface{}) *Value { - arr := v.MustUint8Slice() - collected := make([]interface{}, len(arr)) - v.EachUint8(func(index int, val uint8) bool { - collected[index] = collector(index, val) - return true - }) - return &Value{data: collected} -} - -/* - Uint16 (uint16 and []uint16) -*/ - -// Uint16 gets the value as a uint16, returns the optionalDefault -// value or a system default object if the value is the wrong type. -func (v *Value) Uint16(optionalDefault ...uint16) uint16 { - if s, ok := v.data.(uint16); ok { - return s - } - if len(optionalDefault) == 1 { - return optionalDefault[0] - } - return 0 -} - -// MustUint16 gets the value as a uint16. -// -// Panics if the object is not a uint16. -func (v *Value) MustUint16() uint16 { - return v.data.(uint16) -} - -// Uint16Slice gets the value as a []uint16, returns the optionalDefault -// value or nil if the value is not a []uint16. -func (v *Value) Uint16Slice(optionalDefault ...[]uint16) []uint16 { - if s, ok := v.data.([]uint16); ok { - return s - } - if len(optionalDefault) == 1 { - return optionalDefault[0] - } - return nil -} - -// MustUint16Slice gets the value as a []uint16. -// -// Panics if the object is not a []uint16. -func (v *Value) MustUint16Slice() []uint16 { - return v.data.([]uint16) -} - -// IsUint16 gets whether the object contained is a uint16 or not. -func (v *Value) IsUint16() bool { - _, ok := v.data.(uint16) - return ok -} - -// IsUint16Slice gets whether the object contained is a []uint16 or not. -func (v *Value) IsUint16Slice() bool { - _, ok := v.data.([]uint16) - return ok -} - -// EachUint16 calls the specified callback for each object -// in the []uint16. -// -// Panics if the object is the wrong type. -func (v *Value) EachUint16(callback func(int, uint16) bool) *Value { - for index, val := range v.MustUint16Slice() { - carryon := callback(index, val) - if !carryon { - break - } - } - return v -} - -// WhereUint16 uses the specified decider function to select items -// from the []uint16. The object contained in the result will contain -// only the selected items. -func (v *Value) WhereUint16(decider func(int, uint16) bool) *Value { - var selected []uint16 - v.EachUint16(func(index int, val uint16) bool { - shouldSelect := decider(index, val) - if !shouldSelect { - selected = append(selected, val) - } - return true - }) - return &Value{data: selected} -} - -// GroupUint16 uses the specified grouper function to group the items -// keyed by the return of the grouper. The object contained in the -// result will contain a map[string][]uint16. -func (v *Value) GroupUint16(grouper func(int, uint16) string) *Value { - groups := make(map[string][]uint16) - v.EachUint16(func(index int, val uint16) bool { - group := grouper(index, val) - if _, ok := groups[group]; !ok { - groups[group] = make([]uint16, 0) - } - groups[group] = append(groups[group], val) - return true - }) - return &Value{data: groups} -} - -// ReplaceUint16 uses the specified function to replace each uint16s -// by iterating each item. The data in the returned result will be a -// []uint16 containing the replaced items. -func (v *Value) ReplaceUint16(replacer func(int, uint16) uint16) *Value { - arr := v.MustUint16Slice() - replaced := make([]uint16, len(arr)) - v.EachUint16(func(index int, val uint16) bool { - replaced[index] = replacer(index, val) - return true - }) - return &Value{data: replaced} -} - -// CollectUint16 uses the specified collector function to collect a value -// for each of the uint16s in the slice. The data returned will be a -// []interface{}. -func (v *Value) CollectUint16(collector func(int, uint16) interface{}) *Value { - arr := v.MustUint16Slice() - collected := make([]interface{}, len(arr)) - v.EachUint16(func(index int, val uint16) bool { - collected[index] = collector(index, val) - return true - }) - return &Value{data: collected} -} - -/* - Uint32 (uint32 and []uint32) -*/ - -// Uint32 gets the value as a uint32, returns the optionalDefault -// value or a system default object if the value is the wrong type. -func (v *Value) Uint32(optionalDefault ...uint32) uint32 { - if s, ok := v.data.(uint32); ok { - return s - } - if len(optionalDefault) == 1 { - return optionalDefault[0] - } - return 0 -} - -// MustUint32 gets the value as a uint32. -// -// Panics if the object is not a uint32. -func (v *Value) MustUint32() uint32 { - return v.data.(uint32) -} - -// Uint32Slice gets the value as a []uint32, returns the optionalDefault -// value or nil if the value is not a []uint32. -func (v *Value) Uint32Slice(optionalDefault ...[]uint32) []uint32 { - if s, ok := v.data.([]uint32); ok { - return s - } - if len(optionalDefault) == 1 { - return optionalDefault[0] - } - return nil -} - -// MustUint32Slice gets the value as a []uint32. -// -// Panics if the object is not a []uint32. -func (v *Value) MustUint32Slice() []uint32 { - return v.data.([]uint32) -} - -// IsUint32 gets whether the object contained is a uint32 or not. -func (v *Value) IsUint32() bool { - _, ok := v.data.(uint32) - return ok -} - -// IsUint32Slice gets whether the object contained is a []uint32 or not. -func (v *Value) IsUint32Slice() bool { - _, ok := v.data.([]uint32) - return ok -} - -// EachUint32 calls the specified callback for each object -// in the []uint32. -// -// Panics if the object is the wrong type. -func (v *Value) EachUint32(callback func(int, uint32) bool) *Value { - for index, val := range v.MustUint32Slice() { - carryon := callback(index, val) - if !carryon { - break - } - } - return v -} - -// WhereUint32 uses the specified decider function to select items -// from the []uint32. The object contained in the result will contain -// only the selected items. -func (v *Value) WhereUint32(decider func(int, uint32) bool) *Value { - var selected []uint32 - v.EachUint32(func(index int, val uint32) bool { - shouldSelect := decider(index, val) - if !shouldSelect { - selected = append(selected, val) - } - return true - }) - return &Value{data: selected} -} - -// GroupUint32 uses the specified grouper function to group the items -// keyed by the return of the grouper. The object contained in the -// result will contain a map[string][]uint32. -func (v *Value) GroupUint32(grouper func(int, uint32) string) *Value { - groups := make(map[string][]uint32) - v.EachUint32(func(index int, val uint32) bool { - group := grouper(index, val) - if _, ok := groups[group]; !ok { - groups[group] = make([]uint32, 0) - } - groups[group] = append(groups[group], val) - return true - }) - return &Value{data: groups} -} - -// ReplaceUint32 uses the specified function to replace each uint32s -// by iterating each item. The data in the returned result will be a -// []uint32 containing the replaced items. -func (v *Value) ReplaceUint32(replacer func(int, uint32) uint32) *Value { - arr := v.MustUint32Slice() - replaced := make([]uint32, len(arr)) - v.EachUint32(func(index int, val uint32) bool { - replaced[index] = replacer(index, val) - return true - }) - return &Value{data: replaced} -} - -// CollectUint32 uses the specified collector function to collect a value -// for each of the uint32s in the slice. The data returned will be a -// []interface{}. -func (v *Value) CollectUint32(collector func(int, uint32) interface{}) *Value { - arr := v.MustUint32Slice() - collected := make([]interface{}, len(arr)) - v.EachUint32(func(index int, val uint32) bool { - collected[index] = collector(index, val) - return true - }) - return &Value{data: collected} -} - -/* - Uint64 (uint64 and []uint64) -*/ - -// Uint64 gets the value as a uint64, returns the optionalDefault -// value or a system default object if the value is the wrong type. -func (v *Value) Uint64(optionalDefault ...uint64) uint64 { - if s, ok := v.data.(uint64); ok { - return s - } - if len(optionalDefault) == 1 { - return optionalDefault[0] - } - return 0 -} - -// MustUint64 gets the value as a uint64. -// -// Panics if the object is not a uint64. -func (v *Value) MustUint64() uint64 { - return v.data.(uint64) -} - -// Uint64Slice gets the value as a []uint64, returns the optionalDefault -// value or nil if the value is not a []uint64. -func (v *Value) Uint64Slice(optionalDefault ...[]uint64) []uint64 { - if s, ok := v.data.([]uint64); ok { - return s - } - if len(optionalDefault) == 1 { - return optionalDefault[0] - } - return nil -} - -// MustUint64Slice gets the value as a []uint64. -// -// Panics if the object is not a []uint64. -func (v *Value) MustUint64Slice() []uint64 { - return v.data.([]uint64) -} - -// IsUint64 gets whether the object contained is a uint64 or not. -func (v *Value) IsUint64() bool { - _, ok := v.data.(uint64) - return ok -} - -// IsUint64Slice gets whether the object contained is a []uint64 or not. -func (v *Value) IsUint64Slice() bool { - _, ok := v.data.([]uint64) - return ok -} - -// EachUint64 calls the specified callback for each object -// in the []uint64. -// -// Panics if the object is the wrong type. -func (v *Value) EachUint64(callback func(int, uint64) bool) *Value { - for index, val := range v.MustUint64Slice() { - carryon := callback(index, val) - if !carryon { - break - } - } - return v -} - -// WhereUint64 uses the specified decider function to select items -// from the []uint64. The object contained in the result will contain -// only the selected items. -func (v *Value) WhereUint64(decider func(int, uint64) bool) *Value { - var selected []uint64 - v.EachUint64(func(index int, val uint64) bool { - shouldSelect := decider(index, val) - if !shouldSelect { - selected = append(selected, val) - } - return true - }) - return &Value{data: selected} -} - -// GroupUint64 uses the specified grouper function to group the items -// keyed by the return of the grouper. The object contained in the -// result will contain a map[string][]uint64. -func (v *Value) GroupUint64(grouper func(int, uint64) string) *Value { - groups := make(map[string][]uint64) - v.EachUint64(func(index int, val uint64) bool { - group := grouper(index, val) - if _, ok := groups[group]; !ok { - groups[group] = make([]uint64, 0) - } - groups[group] = append(groups[group], val) - return true - }) - return &Value{data: groups} -} - -// ReplaceUint64 uses the specified function to replace each uint64s -// by iterating each item. The data in the returned result will be a -// []uint64 containing the replaced items. -func (v *Value) ReplaceUint64(replacer func(int, uint64) uint64) *Value { - arr := v.MustUint64Slice() - replaced := make([]uint64, len(arr)) - v.EachUint64(func(index int, val uint64) bool { - replaced[index] = replacer(index, val) - return true - }) - return &Value{data: replaced} -} - -// CollectUint64 uses the specified collector function to collect a value -// for each of the uint64s in the slice. The data returned will be a -// []interface{}. -func (v *Value) CollectUint64(collector func(int, uint64) interface{}) *Value { - arr := v.MustUint64Slice() - collected := make([]interface{}, len(arr)) - v.EachUint64(func(index int, val uint64) bool { - collected[index] = collector(index, val) - return true - }) - return &Value{data: collected} -} - -/* - Uintptr (uintptr and []uintptr) -*/ - -// Uintptr gets the value as a uintptr, returns the optionalDefault -// value or a system default object if the value is the wrong type. -func (v *Value) Uintptr(optionalDefault ...uintptr) uintptr { - if s, ok := v.data.(uintptr); ok { - return s - } - if len(optionalDefault) == 1 { - return optionalDefault[0] - } - return 0 -} - -// MustUintptr gets the value as a uintptr. -// -// Panics if the object is not a uintptr. -func (v *Value) MustUintptr() uintptr { - return v.data.(uintptr) -} - -// UintptrSlice gets the value as a []uintptr, returns the optionalDefault -// value or nil if the value is not a []uintptr. -func (v *Value) UintptrSlice(optionalDefault ...[]uintptr) []uintptr { - if s, ok := v.data.([]uintptr); ok { - return s - } - if len(optionalDefault) == 1 { - return optionalDefault[0] - } - return nil -} - -// MustUintptrSlice gets the value as a []uintptr. -// -// Panics if the object is not a []uintptr. -func (v *Value) MustUintptrSlice() []uintptr { - return v.data.([]uintptr) -} - -// IsUintptr gets whether the object contained is a uintptr or not. -func (v *Value) IsUintptr() bool { - _, ok := v.data.(uintptr) - return ok -} - -// IsUintptrSlice gets whether the object contained is a []uintptr or not. -func (v *Value) IsUintptrSlice() bool { - _, ok := v.data.([]uintptr) - return ok -} - -// EachUintptr calls the specified callback for each object -// in the []uintptr. -// -// Panics if the object is the wrong type. -func (v *Value) EachUintptr(callback func(int, uintptr) bool) *Value { - for index, val := range v.MustUintptrSlice() { - carryon := callback(index, val) - if !carryon { - break - } - } - return v -} - -// WhereUintptr uses the specified decider function to select items -// from the []uintptr. The object contained in the result will contain -// only the selected items. -func (v *Value) WhereUintptr(decider func(int, uintptr) bool) *Value { - var selected []uintptr - v.EachUintptr(func(index int, val uintptr) bool { - shouldSelect := decider(index, val) - if !shouldSelect { - selected = append(selected, val) - } - return true - }) - return &Value{data: selected} -} - -// GroupUintptr uses the specified grouper function to group the items -// keyed by the return of the grouper. The object contained in the -// result will contain a map[string][]uintptr. -func (v *Value) GroupUintptr(grouper func(int, uintptr) string) *Value { - groups := make(map[string][]uintptr) - v.EachUintptr(func(index int, val uintptr) bool { - group := grouper(index, val) - if _, ok := groups[group]; !ok { - groups[group] = make([]uintptr, 0) - } - groups[group] = append(groups[group], val) - return true - }) - return &Value{data: groups} -} - -// ReplaceUintptr uses the specified function to replace each uintptrs -// by iterating each item. The data in the returned result will be a -// []uintptr containing the replaced items. -func (v *Value) ReplaceUintptr(replacer func(int, uintptr) uintptr) *Value { - arr := v.MustUintptrSlice() - replaced := make([]uintptr, len(arr)) - v.EachUintptr(func(index int, val uintptr) bool { - replaced[index] = replacer(index, val) - return true - }) - return &Value{data: replaced} -} - -// CollectUintptr uses the specified collector function to collect a value -// for each of the uintptrs in the slice. The data returned will be a -// []interface{}. -func (v *Value) CollectUintptr(collector func(int, uintptr) interface{}) *Value { - arr := v.MustUintptrSlice() - collected := make([]interface{}, len(arr)) - v.EachUintptr(func(index int, val uintptr) bool { - collected[index] = collector(index, val) - return true - }) - return &Value{data: collected} -} - -/* - Float32 (float32 and []float32) -*/ - -// Float32 gets the value as a float32, returns the optionalDefault -// value or a system default object if the value is the wrong type. -func (v *Value) Float32(optionalDefault ...float32) float32 { - if s, ok := v.data.(float32); ok { - return s - } - if len(optionalDefault) == 1 { - return optionalDefault[0] - } - return 0 -} - -// MustFloat32 gets the value as a float32. -// -// Panics if the object is not a float32. -func (v *Value) MustFloat32() float32 { - return v.data.(float32) -} - -// Float32Slice gets the value as a []float32, returns the optionalDefault -// value or nil if the value is not a []float32. -func (v *Value) Float32Slice(optionalDefault ...[]float32) []float32 { - if s, ok := v.data.([]float32); ok { - return s - } - if len(optionalDefault) == 1 { - return optionalDefault[0] - } - return nil -} - -// MustFloat32Slice gets the value as a []float32. -// -// Panics if the object is not a []float32. -func (v *Value) MustFloat32Slice() []float32 { - return v.data.([]float32) -} - -// IsFloat32 gets whether the object contained is a float32 or not. -func (v *Value) IsFloat32() bool { - _, ok := v.data.(float32) - return ok -} - -// IsFloat32Slice gets whether the object contained is a []float32 or not. -func (v *Value) IsFloat32Slice() bool { - _, ok := v.data.([]float32) - return ok -} - -// EachFloat32 calls the specified callback for each object -// in the []float32. -// -// Panics if the object is the wrong type. -func (v *Value) EachFloat32(callback func(int, float32) bool) *Value { - for index, val := range v.MustFloat32Slice() { - carryon := callback(index, val) - if !carryon { - break - } - } - return v -} - -// WhereFloat32 uses the specified decider function to select items -// from the []float32. The object contained in the result will contain -// only the selected items. -func (v *Value) WhereFloat32(decider func(int, float32) bool) *Value { - var selected []float32 - v.EachFloat32(func(index int, val float32) bool { - shouldSelect := decider(index, val) - if !shouldSelect { - selected = append(selected, val) - } - return true - }) - return &Value{data: selected} -} - -// GroupFloat32 uses the specified grouper function to group the items -// keyed by the return of the grouper. The object contained in the -// result will contain a map[string][]float32. -func (v *Value) GroupFloat32(grouper func(int, float32) string) *Value { - groups := make(map[string][]float32) - v.EachFloat32(func(index int, val float32) bool { - group := grouper(index, val) - if _, ok := groups[group]; !ok { - groups[group] = make([]float32, 0) - } - groups[group] = append(groups[group], val) - return true - }) - return &Value{data: groups} -} - -// ReplaceFloat32 uses the specified function to replace each float32s -// by iterating each item. The data in the returned result will be a -// []float32 containing the replaced items. -func (v *Value) ReplaceFloat32(replacer func(int, float32) float32) *Value { - arr := v.MustFloat32Slice() - replaced := make([]float32, len(arr)) - v.EachFloat32(func(index int, val float32) bool { - replaced[index] = replacer(index, val) - return true - }) - return &Value{data: replaced} -} - -// CollectFloat32 uses the specified collector function to collect a value -// for each of the float32s in the slice. The data returned will be a -// []interface{}. -func (v *Value) CollectFloat32(collector func(int, float32) interface{}) *Value { - arr := v.MustFloat32Slice() - collected := make([]interface{}, len(arr)) - v.EachFloat32(func(index int, val float32) bool { - collected[index] = collector(index, val) - return true - }) - return &Value{data: collected} -} - -/* - Float64 (float64 and []float64) -*/ - -// Float64 gets the value as a float64, returns the optionalDefault -// value or a system default object if the value is the wrong type. -func (v *Value) Float64(optionalDefault ...float64) float64 { - if s, ok := v.data.(float64); ok { - return s - } - if len(optionalDefault) == 1 { - return optionalDefault[0] - } - return 0 -} - -// MustFloat64 gets the value as a float64. -// -// Panics if the object is not a float64. -func (v *Value) MustFloat64() float64 { - return v.data.(float64) -} - -// Float64Slice gets the value as a []float64, returns the optionalDefault -// value or nil if the value is not a []float64. -func (v *Value) Float64Slice(optionalDefault ...[]float64) []float64 { - if s, ok := v.data.([]float64); ok { - return s - } - if len(optionalDefault) == 1 { - return optionalDefault[0] - } - return nil -} - -// MustFloat64Slice gets the value as a []float64. -// -// Panics if the object is not a []float64. -func (v *Value) MustFloat64Slice() []float64 { - return v.data.([]float64) -} - -// IsFloat64 gets whether the object contained is a float64 or not. -func (v *Value) IsFloat64() bool { - _, ok := v.data.(float64) - return ok -} - -// IsFloat64Slice gets whether the object contained is a []float64 or not. -func (v *Value) IsFloat64Slice() bool { - _, ok := v.data.([]float64) - return ok -} - -// EachFloat64 calls the specified callback for each object -// in the []float64. -// -// Panics if the object is the wrong type. -func (v *Value) EachFloat64(callback func(int, float64) bool) *Value { - for index, val := range v.MustFloat64Slice() { - carryon := callback(index, val) - if !carryon { - break - } - } - return v -} - -// WhereFloat64 uses the specified decider function to select items -// from the []float64. The object contained in the result will contain -// only the selected items. -func (v *Value) WhereFloat64(decider func(int, float64) bool) *Value { - var selected []float64 - v.EachFloat64(func(index int, val float64) bool { - shouldSelect := decider(index, val) - if !shouldSelect { - selected = append(selected, val) - } - return true - }) - return &Value{data: selected} -} - -// GroupFloat64 uses the specified grouper function to group the items -// keyed by the return of the grouper. The object contained in the -// result will contain a map[string][]float64. -func (v *Value) GroupFloat64(grouper func(int, float64) string) *Value { - groups := make(map[string][]float64) - v.EachFloat64(func(index int, val float64) bool { - group := grouper(index, val) - if _, ok := groups[group]; !ok { - groups[group] = make([]float64, 0) - } - groups[group] = append(groups[group], val) - return true - }) - return &Value{data: groups} -} - -// ReplaceFloat64 uses the specified function to replace each float64s -// by iterating each item. The data in the returned result will be a -// []float64 containing the replaced items. -func (v *Value) ReplaceFloat64(replacer func(int, float64) float64) *Value { - arr := v.MustFloat64Slice() - replaced := make([]float64, len(arr)) - v.EachFloat64(func(index int, val float64) bool { - replaced[index] = replacer(index, val) - return true - }) - return &Value{data: replaced} -} - -// CollectFloat64 uses the specified collector function to collect a value -// for each of the float64s in the slice. The data returned will be a -// []interface{}. -func (v *Value) CollectFloat64(collector func(int, float64) interface{}) *Value { - arr := v.MustFloat64Slice() - collected := make([]interface{}, len(arr)) - v.EachFloat64(func(index int, val float64) bool { - collected[index] = collector(index, val) - return true - }) - return &Value{data: collected} -} - -/* - Complex64 (complex64 and []complex64) -*/ - -// Complex64 gets the value as a complex64, returns the optionalDefault -// value or a system default object if the value is the wrong type. -func (v *Value) Complex64(optionalDefault ...complex64) complex64 { - if s, ok := v.data.(complex64); ok { - return s - } - if len(optionalDefault) == 1 { - return optionalDefault[0] - } - return 0 -} - -// MustComplex64 gets the value as a complex64. -// -// Panics if the object is not a complex64. -func (v *Value) MustComplex64() complex64 { - return v.data.(complex64) -} - -// Complex64Slice gets the value as a []complex64, returns the optionalDefault -// value or nil if the value is not a []complex64. -func (v *Value) Complex64Slice(optionalDefault ...[]complex64) []complex64 { - if s, ok := v.data.([]complex64); ok { - return s - } - if len(optionalDefault) == 1 { - return optionalDefault[0] - } - return nil -} - -// MustComplex64Slice gets the value as a []complex64. -// -// Panics if the object is not a []complex64. -func (v *Value) MustComplex64Slice() []complex64 { - return v.data.([]complex64) -} - -// IsComplex64 gets whether the object contained is a complex64 or not. -func (v *Value) IsComplex64() bool { - _, ok := v.data.(complex64) - return ok -} - -// IsComplex64Slice gets whether the object contained is a []complex64 or not. -func (v *Value) IsComplex64Slice() bool { - _, ok := v.data.([]complex64) - return ok -} - -// EachComplex64 calls the specified callback for each object -// in the []complex64. -// -// Panics if the object is the wrong type. -func (v *Value) EachComplex64(callback func(int, complex64) bool) *Value { - for index, val := range v.MustComplex64Slice() { - carryon := callback(index, val) - if !carryon { - break - } - } - return v -} - -// WhereComplex64 uses the specified decider function to select items -// from the []complex64. The object contained in the result will contain -// only the selected items. -func (v *Value) WhereComplex64(decider func(int, complex64) bool) *Value { - var selected []complex64 - v.EachComplex64(func(index int, val complex64) bool { - shouldSelect := decider(index, val) - if !shouldSelect { - selected = append(selected, val) - } - return true - }) - return &Value{data: selected} -} - -// GroupComplex64 uses the specified grouper function to group the items -// keyed by the return of the grouper. The object contained in the -// result will contain a map[string][]complex64. -func (v *Value) GroupComplex64(grouper func(int, complex64) string) *Value { - groups := make(map[string][]complex64) - v.EachComplex64(func(index int, val complex64) bool { - group := grouper(index, val) - if _, ok := groups[group]; !ok { - groups[group] = make([]complex64, 0) - } - groups[group] = append(groups[group], val) - return true - }) - return &Value{data: groups} -} - -// ReplaceComplex64 uses the specified function to replace each complex64s -// by iterating each item. The data in the returned result will be a -// []complex64 containing the replaced items. -func (v *Value) ReplaceComplex64(replacer func(int, complex64) complex64) *Value { - arr := v.MustComplex64Slice() - replaced := make([]complex64, len(arr)) - v.EachComplex64(func(index int, val complex64) bool { - replaced[index] = replacer(index, val) - return true - }) - return &Value{data: replaced} -} - -// CollectComplex64 uses the specified collector function to collect a value -// for each of the complex64s in the slice. The data returned will be a -// []interface{}. -func (v *Value) CollectComplex64(collector func(int, complex64) interface{}) *Value { - arr := v.MustComplex64Slice() - collected := make([]interface{}, len(arr)) - v.EachComplex64(func(index int, val complex64) bool { - collected[index] = collector(index, val) - return true - }) - return &Value{data: collected} -} - -/* - Complex128 (complex128 and []complex128) -*/ - -// Complex128 gets the value as a complex128, returns the optionalDefault -// value or a system default object if the value is the wrong type. -func (v *Value) Complex128(optionalDefault ...complex128) complex128 { - if s, ok := v.data.(complex128); ok { - return s - } - if len(optionalDefault) == 1 { - return optionalDefault[0] - } - return 0 -} - -// MustComplex128 gets the value as a complex128. -// -// Panics if the object is not a complex128. -func (v *Value) MustComplex128() complex128 { - return v.data.(complex128) -} - -// Complex128Slice gets the value as a []complex128, returns the optionalDefault -// value or nil if the value is not a []complex128. -func (v *Value) Complex128Slice(optionalDefault ...[]complex128) []complex128 { - if s, ok := v.data.([]complex128); ok { - return s - } - if len(optionalDefault) == 1 { - return optionalDefault[0] - } - return nil -} - -// MustComplex128Slice gets the value as a []complex128. -// -// Panics if the object is not a []complex128. -func (v *Value) MustComplex128Slice() []complex128 { - return v.data.([]complex128) -} - -// IsComplex128 gets whether the object contained is a complex128 or not. -func (v *Value) IsComplex128() bool { - _, ok := v.data.(complex128) - return ok -} - -// IsComplex128Slice gets whether the object contained is a []complex128 or not. -func (v *Value) IsComplex128Slice() bool { - _, ok := v.data.([]complex128) - return ok -} - -// EachComplex128 calls the specified callback for each object -// in the []complex128. -// -// Panics if the object is the wrong type. -func (v *Value) EachComplex128(callback func(int, complex128) bool) *Value { - for index, val := range v.MustComplex128Slice() { - carryon := callback(index, val) - if !carryon { - break - } - } - return v -} - -// WhereComplex128 uses the specified decider function to select items -// from the []complex128. The object contained in the result will contain -// only the selected items. -func (v *Value) WhereComplex128(decider func(int, complex128) bool) *Value { - var selected []complex128 - v.EachComplex128(func(index int, val complex128) bool { - shouldSelect := decider(index, val) - if !shouldSelect { - selected = append(selected, val) - } - return true - }) - return &Value{data: selected} -} - -// GroupComplex128 uses the specified grouper function to group the items -// keyed by the return of the grouper. The object contained in the -// result will contain a map[string][]complex128. -func (v *Value) GroupComplex128(grouper func(int, complex128) string) *Value { - groups := make(map[string][]complex128) - v.EachComplex128(func(index int, val complex128) bool { - group := grouper(index, val) - if _, ok := groups[group]; !ok { - groups[group] = make([]complex128, 0) - } - groups[group] = append(groups[group], val) - return true - }) - return &Value{data: groups} -} - -// ReplaceComplex128 uses the specified function to replace each complex128s -// by iterating each item. The data in the returned result will be a -// []complex128 containing the replaced items. -func (v *Value) ReplaceComplex128(replacer func(int, complex128) complex128) *Value { - arr := v.MustComplex128Slice() - replaced := make([]complex128, len(arr)) - v.EachComplex128(func(index int, val complex128) bool { - replaced[index] = replacer(index, val) - return true - }) - return &Value{data: replaced} -} - -// CollectComplex128 uses the specified collector function to collect a value -// for each of the complex128s in the slice. The data returned will be a -// []interface{}. -func (v *Value) CollectComplex128(collector func(int, complex128) interface{}) *Value { - arr := v.MustComplex128Slice() - collected := make([]interface{}, len(arr)) - v.EachComplex128(func(index int, val complex128) bool { - collected[index] = collector(index, val) - return true - }) - return &Value{data: collected} -} diff --git a/vendor/github.com/stretchr/objx/value.go b/vendor/github.com/stretchr/objx/value.go deleted file mode 100644 index 4e5f9b77e6..0000000000 --- a/vendor/github.com/stretchr/objx/value.go +++ /dev/null @@ -1,159 +0,0 @@ -package objx - -import ( - "fmt" - "strconv" -) - -// Value provides methods for extracting interface{} data in various -// types. -type Value struct { - // data contains the raw data being managed by this Value - data interface{} -} - -// Data returns the raw data contained by this Value -func (v *Value) Data() interface{} { - return v.data -} - -// String returns the value always as a string -func (v *Value) String() string { - switch { - case v.IsNil(): - return "" - case v.IsStr(): - return v.Str() - case v.IsBool(): - return strconv.FormatBool(v.Bool()) - case v.IsFloat32(): - return strconv.FormatFloat(float64(v.Float32()), 'f', -1, 32) - case v.IsFloat64(): - return strconv.FormatFloat(v.Float64(), 'f', -1, 64) - case v.IsInt(): - return strconv.FormatInt(int64(v.Int()), 10) - case v.IsInt8(): - return strconv.FormatInt(int64(v.Int8()), 10) - case v.IsInt16(): - return strconv.FormatInt(int64(v.Int16()), 10) - case v.IsInt32(): - return strconv.FormatInt(int64(v.Int32()), 10) - case v.IsInt64(): - return strconv.FormatInt(v.Int64(), 10) - case v.IsUint(): - return strconv.FormatUint(uint64(v.Uint()), 10) - case v.IsUint8(): - return strconv.FormatUint(uint64(v.Uint8()), 10) - case v.IsUint16(): - return strconv.FormatUint(uint64(v.Uint16()), 10) - case v.IsUint32(): - return strconv.FormatUint(uint64(v.Uint32()), 10) - case v.IsUint64(): - return strconv.FormatUint(v.Uint64(), 10) - } - return fmt.Sprintf("%#v", v.Data()) -} - -// StringSlice returns the value always as a []string -func (v *Value) StringSlice(optionalDefault ...[]string) []string { - switch { - case v.IsStrSlice(): - return v.MustStrSlice() - case v.IsBoolSlice(): - slice := v.MustBoolSlice() - vals := make([]string, len(slice)) - for i, iv := range slice { - vals[i] = strconv.FormatBool(iv) - } - return vals - case v.IsFloat32Slice(): - slice := v.MustFloat32Slice() - vals := make([]string, len(slice)) - for i, iv := range slice { - vals[i] = strconv.FormatFloat(float64(iv), 'f', -1, 32) - } - return vals - case v.IsFloat64Slice(): - slice := v.MustFloat64Slice() - vals := make([]string, len(slice)) - for i, iv := range slice { - vals[i] = strconv.FormatFloat(iv, 'f', -1, 64) - } - return vals - case v.IsIntSlice(): - slice := v.MustIntSlice() - vals := make([]string, len(slice)) - for i, iv := range slice { - vals[i] = strconv.FormatInt(int64(iv), 10) - } - return vals - case v.IsInt8Slice(): - slice := v.MustInt8Slice() - vals := make([]string, len(slice)) - for i, iv := range slice { - vals[i] = strconv.FormatInt(int64(iv), 10) - } - return vals - case v.IsInt16Slice(): - slice := v.MustInt16Slice() - vals := make([]string, len(slice)) - for i, iv := range slice { - vals[i] = strconv.FormatInt(int64(iv), 10) - } - return vals - case v.IsInt32Slice(): - slice := v.MustInt32Slice() - vals := make([]string, len(slice)) - for i, iv := range slice { - vals[i] = strconv.FormatInt(int64(iv), 10) - } - return vals - case v.IsInt64Slice(): - slice := v.MustInt64Slice() - vals := make([]string, len(slice)) - for i, iv := range slice { - vals[i] = strconv.FormatInt(iv, 10) - } - return vals - case v.IsUintSlice(): - slice := v.MustUintSlice() - vals := make([]string, len(slice)) - for i, iv := range slice { - vals[i] = strconv.FormatUint(uint64(iv), 10) - } - return vals - case v.IsUint8Slice(): - slice := v.MustUint8Slice() - vals := make([]string, len(slice)) - for i, iv := range slice { - vals[i] = strconv.FormatUint(uint64(iv), 10) - } - return vals - case v.IsUint16Slice(): - slice := v.MustUint16Slice() - vals := make([]string, len(slice)) - for i, iv := range slice { - vals[i] = strconv.FormatUint(uint64(iv), 10) - } - return vals - case v.IsUint32Slice(): - slice := v.MustUint32Slice() - vals := make([]string, len(slice)) - for i, iv := range slice { - vals[i] = strconv.FormatUint(uint64(iv), 10) - } - return vals - case v.IsUint64Slice(): - slice := v.MustUint64Slice() - vals := make([]string, len(slice)) - for i, iv := range slice { - vals[i] = strconv.FormatUint(iv, 10) - } - return vals - } - if len(optionalDefault) == 1 { - return optionalDefault[0] - } - - return []string{} -} diff --git a/vendor/github.com/stretchr/testify/mock/doc.go b/vendor/github.com/stretchr/testify/mock/doc.go deleted file mode 100644 index d6b3c844cc..0000000000 --- a/vendor/github.com/stretchr/testify/mock/doc.go +++ /dev/null @@ -1,44 +0,0 @@ -// Package mock provides a system by which it is possible to mock your objects -// and verify calls are happening as expected. -// -// # Example Usage -// -// The mock package provides an object, Mock, that tracks activity on another object. It is usually -// embedded into a test object as shown below: -// -// type MyTestObject struct { -// // add a Mock object instance -// mock.Mock -// -// // other fields go here as normal -// } -// -// When implementing the methods of an interface, you wire your functions up -// to call the Mock.Called(args...) method, and return the appropriate values. -// -// For example, to mock a method that saves the name and age of a person and returns -// the year of their birth or an error, you might write this: -// -// func (o *MyTestObject) SavePersonDetails(firstname, lastname string, age int) (int, error) { -// args := o.Called(firstname, lastname, age) -// return args.Int(0), args.Error(1) -// } -// -// The Int, Error and Bool methods are examples of strongly typed getters that take the argument -// index position. Given this argument list: -// -// (12, true, "Something") -// -// You could read them out strongly typed like this: -// -// args.Int(0) -// args.Bool(1) -// args.String(2) -// -// For objects of your own type, use the generic Arguments.Get(index) method and make a type assertion: -// -// return args.Get(0).(*MyObject), args.Get(1).(*AnotherObjectOfMine) -// -// This may cause a panic if the object you are getting is nil (the type assertion will fail), in those -// cases you should check for nil first. -package mock diff --git a/vendor/github.com/stretchr/testify/mock/mock.go b/vendor/github.com/stretchr/testify/mock/mock.go deleted file mode 100644 index 213bde2ea6..0000000000 --- a/vendor/github.com/stretchr/testify/mock/mock.go +++ /dev/null @@ -1,1241 +0,0 @@ -package mock - -import ( - "errors" - "fmt" - "path" - "reflect" - "regexp" - "runtime" - "strings" - "sync" - "time" - - "github.com/davecgh/go-spew/spew" - "github.com/pmezard/go-difflib/difflib" - "github.com/stretchr/objx" - - "github.com/stretchr/testify/assert" -) - -// regex for GCCGO functions -var gccgoRE = regexp.MustCompile(`\.pN\d+_`) - -// TestingT is an interface wrapper around *testing.T -type TestingT interface { - Logf(format string, args ...interface{}) - Errorf(format string, args ...interface{}) - FailNow() -} - -/* - Call -*/ - -// Call represents a method call and is used for setting expectations, -// as well as recording activity. -type Call struct { - Parent *Mock - - // The name of the method that was or will be called. - Method string - - // Holds the arguments of the method. - Arguments Arguments - - // Holds the arguments that should be returned when - // this method is called. - ReturnArguments Arguments - - // Holds the caller info for the On() call - callerInfo []string - - // The number of times to return the return arguments when setting - // expectations. 0 means to always return the value. - Repeatability int - - // Amount of times this call has been called - totalCalls int - - // Call to this method can be optional - optional bool - - // Holds a channel that will be used to block the Return until it either - // receives a message or is closed. nil means it returns immediately. - WaitFor <-chan time.Time - - waitTime time.Duration - - // Holds a handler used to manipulate arguments content that are passed by - // reference. It's useful when mocking methods such as unmarshalers or - // decoders. - RunFn func(Arguments) - - // PanicMsg holds msg to be used to mock panic on the function call - // if the PanicMsg is set to a non nil string the function call will panic - // irrespective of other settings - PanicMsg *string - - // Calls which must be satisfied before this call can be - requires []*Call -} - -func newCall(parent *Mock, methodName string, callerInfo []string, methodArguments ...interface{}) *Call { - return &Call{ - Parent: parent, - Method: methodName, - Arguments: methodArguments, - ReturnArguments: make([]interface{}, 0), - callerInfo: callerInfo, - Repeatability: 0, - WaitFor: nil, - RunFn: nil, - PanicMsg: nil, - } -} - -func (c *Call) lock() { - c.Parent.mutex.Lock() -} - -func (c *Call) unlock() { - c.Parent.mutex.Unlock() -} - -// Return specifies the return arguments for the expectation. -// -// Mock.On("DoSomething").Return(errors.New("failed")) -func (c *Call) Return(returnArguments ...interface{}) *Call { - c.lock() - defer c.unlock() - - c.ReturnArguments = returnArguments - - return c -} - -// Panic specifies if the function call should fail and the panic message -// -// Mock.On("DoSomething").Panic("test panic") -func (c *Call) Panic(msg string) *Call { - c.lock() - defer c.unlock() - - c.PanicMsg = &msg - - return c -} - -// Once indicates that the mock should only return the value once. -// -// Mock.On("MyMethod", arg1, arg2).Return(returnArg1, returnArg2).Once() -func (c *Call) Once() *Call { - return c.Times(1) -} - -// Twice indicates that the mock should only return the value twice. -// -// Mock.On("MyMethod", arg1, arg2).Return(returnArg1, returnArg2).Twice() -func (c *Call) Twice() *Call { - return c.Times(2) -} - -// Times indicates that the mock should only return the indicated number -// of times. -// -// Mock.On("MyMethod", arg1, arg2).Return(returnArg1, returnArg2).Times(5) -func (c *Call) Times(i int) *Call { - c.lock() - defer c.unlock() - c.Repeatability = i - return c -} - -// WaitUntil sets the channel that will block the mock's return until its closed -// or a message is received. -// -// Mock.On("MyMethod", arg1, arg2).WaitUntil(time.After(time.Second)) -func (c *Call) WaitUntil(w <-chan time.Time) *Call { - c.lock() - defer c.unlock() - c.WaitFor = w - return c -} - -// After sets how long to block until the call returns -// -// Mock.On("MyMethod", arg1, arg2).After(time.Second) -func (c *Call) After(d time.Duration) *Call { - c.lock() - defer c.unlock() - c.waitTime = d - return c -} - -// Run sets a handler to be called before returning. It can be used when -// mocking a method (such as an unmarshaler) that takes a pointer to a struct and -// sets properties in such struct -// -// Mock.On("Unmarshal", AnythingOfType("*map[string]interface{}")).Return().Run(func(args Arguments) { -// arg := args.Get(0).(*map[string]interface{}) -// arg["foo"] = "bar" -// }) -func (c *Call) Run(fn func(args Arguments)) *Call { - c.lock() - defer c.unlock() - c.RunFn = fn - return c -} - -// Maybe allows the method call to be optional. Not calling an optional method -// will not cause an error while asserting expectations -func (c *Call) Maybe() *Call { - c.lock() - defer c.unlock() - c.optional = true - return c -} - -// On chains a new expectation description onto the mocked interface. This -// allows syntax like. -// -// Mock. -// On("MyMethod", 1).Return(nil). -// On("MyOtherMethod", 'a', 'b', 'c').Return(errors.New("Some Error")) -// -//go:noinline -func (c *Call) On(methodName string, arguments ...interface{}) *Call { - return c.Parent.On(methodName, arguments...) -} - -// Unset removes a mock handler from being called. -// -// test.On("func", mock.Anything).Unset() -func (c *Call) Unset() *Call { - var unlockOnce sync.Once - - for _, arg := range c.Arguments { - if v := reflect.ValueOf(arg); v.Kind() == reflect.Func { - panic(fmt.Sprintf("cannot use Func in expectations. Use mock.AnythingOfType(\"%T\")", arg)) - } - } - - c.lock() - defer unlockOnce.Do(c.unlock) - - foundMatchingCall := false - - // in-place filter slice for calls to be removed - iterate from 0'th to last skipping unnecessary ones - var index int // write index - for _, call := range c.Parent.ExpectedCalls { - if call.Method == c.Method { - _, diffCount := call.Arguments.Diff(c.Arguments) - if diffCount == 0 { - foundMatchingCall = true - // Remove from ExpectedCalls - just skip it - continue - } - } - c.Parent.ExpectedCalls[index] = call - index++ - } - // trim slice up to last copied index - c.Parent.ExpectedCalls = c.Parent.ExpectedCalls[:index] - - if !foundMatchingCall { - unlockOnce.Do(c.unlock) - c.Parent.fail("\n\nmock: Could not find expected call\n-----------------------------\n\n%s\n\n", - callString(c.Method, c.Arguments, true), - ) - } - - return c -} - -// NotBefore indicates that the mock should only be called after the referenced -// calls have been called as expected. The referenced calls may be from the -// same mock instance and/or other mock instances. -// -// Mock.On("Do").Return(nil).Notbefore( -// Mock.On("Init").Return(nil) -// ) -func (c *Call) NotBefore(calls ...*Call) *Call { - c.lock() - defer c.unlock() - - for _, call := range calls { - if call.Parent == nil { - panic("not before calls must be created with Mock.On()") - } - } - - c.requires = append(c.requires, calls...) - return c -} - -// Mock is the workhorse used to track activity on another object. -// For an example of its usage, refer to the "Example Usage" section at the top -// of this document. -type Mock struct { - // Represents the calls that are expected of - // an object. - ExpectedCalls []*Call - - // Holds the calls that were made to this mocked object. - Calls []Call - - // test is An optional variable that holds the test struct, to be used when an - // invalid mock call was made. - test TestingT - - // TestData holds any data that might be useful for testing. Testify ignores - // this data completely allowing you to do whatever you like with it. - testData objx.Map - - mutex sync.Mutex -} - -// String provides a %v format string for Mock. -// Note: this is used implicitly by Arguments.Diff if a Mock is passed. -// It exists because go's default %v formatting traverses the struct -// without acquiring the mutex, which is detected by go test -race. -func (m *Mock) String() string { - return fmt.Sprintf("%[1]T<%[1]p>", m) -} - -// TestData holds any data that might be useful for testing. Testify ignores -// this data completely allowing you to do whatever you like with it. -func (m *Mock) TestData() objx.Map { - if m.testData == nil { - m.testData = make(objx.Map) - } - - return m.testData -} - -/* - Setting expectations -*/ - -// Test sets the test struct variable of the mock object -func (m *Mock) Test(t TestingT) { - m.mutex.Lock() - defer m.mutex.Unlock() - m.test = t -} - -// fail fails the current test with the given formatted format and args. -// In case that a test was defined, it uses the test APIs for failing a test, -// otherwise it uses panic. -func (m *Mock) fail(format string, args ...interface{}) { - m.mutex.Lock() - defer m.mutex.Unlock() - - if m.test == nil { - panic(fmt.Sprintf(format, args...)) - } - m.test.Errorf(format, args...) - m.test.FailNow() -} - -// On starts a description of an expectation of the specified method -// being called. -// -// Mock.On("MyMethod", arg1, arg2) -func (m *Mock) On(methodName string, arguments ...interface{}) *Call { - for _, arg := range arguments { - if v := reflect.ValueOf(arg); v.Kind() == reflect.Func { - panic(fmt.Sprintf("cannot use Func in expectations. Use mock.AnythingOfType(\"%T\")", arg)) - } - } - - m.mutex.Lock() - defer m.mutex.Unlock() - c := newCall(m, methodName, assert.CallerInfo(), arguments...) - m.ExpectedCalls = append(m.ExpectedCalls, c) - return c -} - -// /* -// Recording and responding to activity -// */ - -func (m *Mock) findExpectedCall(method string, arguments ...interface{}) (int, *Call) { - var expectedCall *Call - - for i, call := range m.ExpectedCalls { - if call.Method == method { - _, diffCount := call.Arguments.Diff(arguments) - if diffCount == 0 { - expectedCall = call - if call.Repeatability > -1 { - return i, call - } - } - } - } - - return -1, expectedCall -} - -type matchCandidate struct { - call *Call - mismatch string - diffCount int -} - -func (c matchCandidate) isBetterMatchThan(other matchCandidate) bool { - if c.call == nil { - return false - } - if other.call == nil { - return true - } - - if c.diffCount > other.diffCount { - return false - } - if c.diffCount < other.diffCount { - return true - } - - if c.call.Repeatability > 0 && other.call.Repeatability <= 0 { - return true - } - return false -} - -func (m *Mock) findClosestCall(method string, arguments ...interface{}) (*Call, string) { - var bestMatch matchCandidate - - for _, call := range m.expectedCalls() { - if call.Method == method { - - errInfo, tempDiffCount := call.Arguments.Diff(arguments) - tempCandidate := matchCandidate{ - call: call, - mismatch: errInfo, - diffCount: tempDiffCount, - } - if tempCandidate.isBetterMatchThan(bestMatch) { - bestMatch = tempCandidate - } - } - } - - return bestMatch.call, bestMatch.mismatch -} - -func callString(method string, arguments Arguments, includeArgumentValues bool) string { - var argValsString string - if includeArgumentValues { - var argVals []string - for argIndex, arg := range arguments { - if _, ok := arg.(*FunctionalOptionsArgument); ok { - argVals = append(argVals, fmt.Sprintf("%d: %s", argIndex, arg)) - continue - } - argVals = append(argVals, fmt.Sprintf("%d: %#v", argIndex, arg)) - } - argValsString = fmt.Sprintf("\n\t\t%s", strings.Join(argVals, "\n\t\t")) - } - - return fmt.Sprintf("%s(%s)%s", method, arguments.String(), argValsString) -} - -// Called tells the mock object that a method has been called, and gets an array -// of arguments to return. Panics if the call is unexpected (i.e. not preceded by -// appropriate .On .Return() calls) -// If Call.WaitFor is set, blocks until the channel is closed or receives a message. -func (m *Mock) Called(arguments ...interface{}) Arguments { - // get the calling function's name - pc, _, _, ok := runtime.Caller(1) - if !ok { - panic("Couldn't get the caller information") - } - functionPath := runtime.FuncForPC(pc).Name() - // Next four lines are required to use GCCGO function naming conventions. - // For Ex: github_com_docker_libkv_store_mock.WatchTree.pN39_github_com_docker_libkv_store_mock.Mock - // uses interface information unlike golang github.com/docker/libkv/store/mock.(*Mock).WatchTree - // With GCCGO we need to remove interface information starting from pN
. - if gccgoRE.MatchString(functionPath) { - functionPath = gccgoRE.Split(functionPath, -1)[0] - } - parts := strings.Split(functionPath, ".") - functionName := parts[len(parts)-1] - return m.MethodCalled(functionName, arguments...) -} - -// MethodCalled tells the mock object that the given method has been called, and gets -// an array of arguments to return. Panics if the call is unexpected (i.e. not preceded -// by appropriate .On .Return() calls) -// If Call.WaitFor is set, blocks until the channel is closed or receives a message. -func (m *Mock) MethodCalled(methodName string, arguments ...interface{}) Arguments { - m.mutex.Lock() - // TODO: could combine expected and closes in single loop - found, call := m.findExpectedCall(methodName, arguments...) - - if found < 0 { - // expected call found, but it has already been called with repeatable times - if call != nil { - m.mutex.Unlock() - m.fail("\nassert: mock: The method has been called over %d times.\n\tEither do one more Mock.On(\"%s\").Return(...), or remove extra call.\n\tThis call was unexpected:\n\t\t%s\n\tat: %s", call.totalCalls, methodName, callString(methodName, arguments, true), assert.CallerInfo()) - } - // we have to fail here - because we don't know what to do - // as the return arguments. This is because: - // - // a) this is a totally unexpected call to this method, - // b) the arguments are not what was expected, or - // c) the developer has forgotten to add an accompanying On...Return pair. - closestCall, mismatch := m.findClosestCall(methodName, arguments...) - m.mutex.Unlock() - - if closestCall != nil { - m.fail("\n\nmock: Unexpected Method Call\n-----------------------------\n\n%s\n\nThe closest call I have is: \n\n%s\n\n%s\nDiff: %s", - callString(methodName, arguments, true), - callString(methodName, closestCall.Arguments, true), - diffArguments(closestCall.Arguments, arguments), - strings.TrimSpace(mismatch), - ) - } else { - m.fail("\nassert: mock: I don't know what to return because the method call was unexpected.\n\tEither do Mock.On(\"%s\").Return(...) first, or remove the %s() call.\n\tThis method was unexpected:\n\t\t%s\n\tat: %s", methodName, methodName, callString(methodName, arguments, true), assert.CallerInfo()) - } - } - - for _, requirement := range call.requires { - if satisfied, _ := requirement.Parent.checkExpectation(requirement); !satisfied { - m.mutex.Unlock() - m.fail("mock: Unexpected Method Call\n-----------------------------\n\n%s\n\nMust not be called before%s:\n\n%s", - callString(call.Method, call.Arguments, true), - func() (s string) { - if requirement.totalCalls > 0 { - s = " another call of" - } - if call.Parent != requirement.Parent { - s += " method from another mock instance" - } - return - }(), - callString(requirement.Method, requirement.Arguments, true), - ) - } - } - - if call.Repeatability == 1 { - call.Repeatability = -1 - } else if call.Repeatability > 1 { - call.Repeatability-- - } - call.totalCalls++ - - // add the call - m.Calls = append(m.Calls, *newCall(m, methodName, assert.CallerInfo(), arguments...)) - m.mutex.Unlock() - - // block if specified - if call.WaitFor != nil { - <-call.WaitFor - } else { - time.Sleep(call.waitTime) - } - - m.mutex.Lock() - panicMsg := call.PanicMsg - m.mutex.Unlock() - if panicMsg != nil { - panic(*panicMsg) - } - - m.mutex.Lock() - runFn := call.RunFn - m.mutex.Unlock() - - if runFn != nil { - runFn(arguments) - } - - m.mutex.Lock() - returnArgs := call.ReturnArguments - m.mutex.Unlock() - - return returnArgs -} - -/* - Assertions -*/ - -type assertExpectationiser interface { - AssertExpectations(TestingT) bool -} - -// AssertExpectationsForObjects asserts that everything specified with On and Return -// of the specified objects was in fact called as expected. -// -// Calls may have occurred in any order. -func AssertExpectationsForObjects(t TestingT, testObjects ...interface{}) bool { - if h, ok := t.(tHelper); ok { - h.Helper() - } - for _, obj := range testObjects { - if m, ok := obj.(*Mock); ok { - t.Logf("Deprecated mock.AssertExpectationsForObjects(myMock.Mock) use mock.AssertExpectationsForObjects(myMock)") - obj = m - } - m := obj.(assertExpectationiser) - if !m.AssertExpectations(t) { - t.Logf("Expectations didn't match for Mock: %+v", reflect.TypeOf(m)) - return false - } - } - return true -} - -// AssertExpectations asserts that everything specified with On and Return was -// in fact called as expected. Calls may have occurred in any order. -func (m *Mock) AssertExpectations(t TestingT) bool { - if s, ok := t.(interface{ Skipped() bool }); ok && s.Skipped() { - return true - } - if h, ok := t.(tHelper); ok { - h.Helper() - } - - m.mutex.Lock() - defer m.mutex.Unlock() - var failedExpectations int - - // iterate through each expectation - expectedCalls := m.expectedCalls() - for _, expectedCall := range expectedCalls { - satisfied, reason := m.checkExpectation(expectedCall) - if !satisfied { - failedExpectations++ - t.Logf(reason) - } - } - - if failedExpectations != 0 { - t.Errorf("FAIL: %d out of %d expectation(s) were met.\n\tThe code you are testing needs to make %d more call(s).\n\tat: %s", len(expectedCalls)-failedExpectations, len(expectedCalls), failedExpectations, assert.CallerInfo()) - } - - return failedExpectations == 0 -} - -func (m *Mock) checkExpectation(call *Call) (bool, string) { - if !call.optional && !m.methodWasCalled(call.Method, call.Arguments) && call.totalCalls == 0 { - return false, fmt.Sprintf("FAIL:\t%s(%s)\n\t\tat: %s", call.Method, call.Arguments.String(), call.callerInfo) - } - if call.Repeatability > 0 { - return false, fmt.Sprintf("FAIL:\t%s(%s)\n\t\tat: %s", call.Method, call.Arguments.String(), call.callerInfo) - } - return true, fmt.Sprintf("PASS:\t%s(%s)", call.Method, call.Arguments.String()) -} - -// AssertNumberOfCalls asserts that the method was called expectedCalls times. -func (m *Mock) AssertNumberOfCalls(t TestingT, methodName string, expectedCalls int) bool { - if h, ok := t.(tHelper); ok { - h.Helper() - } - m.mutex.Lock() - defer m.mutex.Unlock() - var actualCalls int - for _, call := range m.calls() { - if call.Method == methodName { - actualCalls++ - } - } - return assert.Equal(t, expectedCalls, actualCalls, fmt.Sprintf("Expected number of calls (%d) does not match the actual number of calls (%d).", expectedCalls, actualCalls)) -} - -// AssertCalled asserts that the method was called. -// It can produce a false result when an argument is a pointer type and the underlying value changed after calling the mocked method. -func (m *Mock) AssertCalled(t TestingT, methodName string, arguments ...interface{}) bool { - if h, ok := t.(tHelper); ok { - h.Helper() - } - m.mutex.Lock() - defer m.mutex.Unlock() - if !m.methodWasCalled(methodName, arguments) { - var calledWithArgs []string - for _, call := range m.calls() { - calledWithArgs = append(calledWithArgs, fmt.Sprintf("%v", call.Arguments)) - } - if len(calledWithArgs) == 0 { - return assert.Fail(t, "Should have called with given arguments", - fmt.Sprintf("Expected %q to have been called with:\n%v\nbut no actual calls happened", methodName, arguments)) - } - return assert.Fail(t, "Should have called with given arguments", - fmt.Sprintf("Expected %q to have been called with:\n%v\nbut actual calls were:\n %v", methodName, arguments, strings.Join(calledWithArgs, "\n"))) - } - return true -} - -// AssertNotCalled asserts that the method was not called. -// It can produce a false result when an argument is a pointer type and the underlying value changed after calling the mocked method. -func (m *Mock) AssertNotCalled(t TestingT, methodName string, arguments ...interface{}) bool { - if h, ok := t.(tHelper); ok { - h.Helper() - } - m.mutex.Lock() - defer m.mutex.Unlock() - if m.methodWasCalled(methodName, arguments) { - return assert.Fail(t, "Should not have called with given arguments", - fmt.Sprintf("Expected %q to not have been called with:\n%v\nbut actually it was.", methodName, arguments)) - } - return true -} - -// IsMethodCallable checking that the method can be called -// If the method was called more than `Repeatability` return false -func (m *Mock) IsMethodCallable(t TestingT, methodName string, arguments ...interface{}) bool { - if h, ok := t.(tHelper); ok { - h.Helper() - } - m.mutex.Lock() - defer m.mutex.Unlock() - - for _, v := range m.ExpectedCalls { - if v.Method != methodName { - continue - } - if len(arguments) != len(v.Arguments) { - continue - } - if v.Repeatability < v.totalCalls { - continue - } - if isArgsEqual(v.Arguments, arguments) { - return true - } - } - return false -} - -// isArgsEqual compares arguments -func isArgsEqual(expected Arguments, args []interface{}) bool { - if len(expected) != len(args) { - return false - } - for i, v := range args { - if !reflect.DeepEqual(expected[i], v) { - return false - } - } - return true -} - -func (m *Mock) methodWasCalled(methodName string, expected []interface{}) bool { - for _, call := range m.calls() { - if call.Method == methodName { - - _, differences := Arguments(expected).Diff(call.Arguments) - - if differences == 0 { - // found the expected call - return true - } - - } - } - // we didn't find the expected call - return false -} - -func (m *Mock) expectedCalls() []*Call { - return append([]*Call{}, m.ExpectedCalls...) -} - -func (m *Mock) calls() []Call { - return append([]Call{}, m.Calls...) -} - -/* - Arguments -*/ - -// Arguments holds an array of method arguments or return values. -type Arguments []interface{} - -const ( - // Anything is used in Diff and Assert when the argument being tested - // shouldn't be taken into consideration. - Anything = "mock.Anything" -) - -// AnythingOfTypeArgument contains the type of an argument -// for use when type checking. Used in Diff and Assert. -// -// Deprecated: this is an implementation detail that must not be used. Use [AnythingOfType] instead. -type AnythingOfTypeArgument = anythingOfTypeArgument - -// anythingOfTypeArgument is a string that contains the type of an argument -// for use when type checking. Used in Diff and Assert. -type anythingOfTypeArgument string - -// AnythingOfType returns a special value containing the -// name of the type to check for. The type name will be matched against the type name returned by [reflect.Type.String]. -// -// Used in Diff and Assert. -// -// For example: -// -// Assert(t, AnythingOfType("string"), AnythingOfType("int")) -func AnythingOfType(t string) AnythingOfTypeArgument { - return anythingOfTypeArgument(t) -} - -// IsTypeArgument is a struct that contains the type of an argument -// for use when type checking. This is an alternative to AnythingOfType. -// Used in Diff and Assert. -type IsTypeArgument struct { - t reflect.Type -} - -// IsType returns an IsTypeArgument object containing the type to check for. -// You can provide a zero-value of the type to check. This is an -// alternative to AnythingOfType. Used in Diff and Assert. -// -// For example: -// Assert(t, IsType(""), IsType(0)) -func IsType(t interface{}) *IsTypeArgument { - return &IsTypeArgument{t: reflect.TypeOf(t)} -} - -// FunctionalOptionsArgument is a struct that contains the type and value of an functional option argument -// for use when type checking. -type FunctionalOptionsArgument struct { - value interface{} -} - -// String returns the string representation of FunctionalOptionsArgument -func (f *FunctionalOptionsArgument) String() string { - var name string - tValue := reflect.ValueOf(f.value) - if tValue.Len() > 0 { - name = "[]" + reflect.TypeOf(tValue.Index(0).Interface()).String() - } - - return strings.Replace(fmt.Sprintf("%#v", f.value), "[]interface {}", name, 1) -} - -// FunctionalOptions returns an FunctionalOptionsArgument object containing the functional option type -// and the values to check of -// -// For example: -// Assert(t, FunctionalOptions("[]foo.FunctionalOption", foo.Opt1(), foo.Opt2())) -func FunctionalOptions(value ...interface{}) *FunctionalOptionsArgument { - return &FunctionalOptionsArgument{ - value: value, - } -} - -// argumentMatcher performs custom argument matching, returning whether or -// not the argument is matched by the expectation fixture function. -type argumentMatcher struct { - // fn is a function which accepts one argument, and returns a bool. - fn reflect.Value -} - -func (f argumentMatcher) Matches(argument interface{}) bool { - expectType := f.fn.Type().In(0) - expectTypeNilSupported := false - switch expectType.Kind() { - case reflect.Interface, reflect.Chan, reflect.Func, reflect.Map, reflect.Slice, reflect.Ptr: - expectTypeNilSupported = true - } - - argType := reflect.TypeOf(argument) - var arg reflect.Value - if argType == nil { - arg = reflect.New(expectType).Elem() - } else { - arg = reflect.ValueOf(argument) - } - - if argType == nil && !expectTypeNilSupported { - panic(errors.New("attempting to call matcher with nil for non-nil expected type")) - } - if argType == nil || argType.AssignableTo(expectType) { - result := f.fn.Call([]reflect.Value{arg}) - return result[0].Bool() - } - return false -} - -func (f argumentMatcher) String() string { - return fmt.Sprintf("func(%s) bool", f.fn.Type().In(0).String()) -} - -// MatchedBy can be used to match a mock call based on only certain properties -// from a complex struct or some calculation. It takes a function that will be -// evaluated with the called argument and will return true when there's a match -// and false otherwise. -// -// Example: -// m.On("Do", MatchedBy(func(req *http.Request) bool { return req.Host == "example.com" })) -// -// |fn|, must be a function accepting a single argument (of the expected type) -// which returns a bool. If |fn| doesn't match the required signature, -// MatchedBy() panics. -func MatchedBy(fn interface{}) argumentMatcher { - fnType := reflect.TypeOf(fn) - - if fnType.Kind() != reflect.Func { - panic(fmt.Sprintf("assert: arguments: %s is not a func", fn)) - } - if fnType.NumIn() != 1 { - panic(fmt.Sprintf("assert: arguments: %s does not take exactly one argument", fn)) - } - if fnType.NumOut() != 1 || fnType.Out(0).Kind() != reflect.Bool { - panic(fmt.Sprintf("assert: arguments: %s does not return a bool", fn)) - } - - return argumentMatcher{fn: reflect.ValueOf(fn)} -} - -// Get Returns the argument at the specified index. -func (args Arguments) Get(index int) interface{} { - if index+1 > len(args) { - panic(fmt.Sprintf("assert: arguments: Cannot call Get(%d) because there are %d argument(s).", index, len(args))) - } - return args[index] -} - -// Is gets whether the objects match the arguments specified. -func (args Arguments) Is(objects ...interface{}) bool { - for i, obj := range args { - if obj != objects[i] { - return false - } - } - return true -} - -// Diff gets a string describing the differences between the arguments -// and the specified objects. -// -// Returns the diff string and number of differences found. -func (args Arguments) Diff(objects []interface{}) (string, int) { - // TODO: could return string as error and nil for No difference - - output := "\n" - var differences int - - maxArgCount := len(args) - if len(objects) > maxArgCount { - maxArgCount = len(objects) - } - - for i := 0; i < maxArgCount; i++ { - var actual, expected interface{} - var actualFmt, expectedFmt string - - if len(objects) <= i { - actual = "(Missing)" - actualFmt = "(Missing)" - } else { - actual = objects[i] - actualFmt = fmt.Sprintf("(%[1]T=%[1]v)", actual) - } - - if len(args) <= i { - expected = "(Missing)" - expectedFmt = "(Missing)" - } else { - expected = args[i] - expectedFmt = fmt.Sprintf("(%[1]T=%[1]v)", expected) - } - - if matcher, ok := expected.(argumentMatcher); ok { - var matches bool - func() { - defer func() { - if r := recover(); r != nil { - actualFmt = fmt.Sprintf("panic in argument matcher: %v", r) - } - }() - matches = matcher.Matches(actual) - }() - if matches { - output = fmt.Sprintf("%s\t%d: PASS: %s matched by %s\n", output, i, actualFmt, matcher) - } else { - differences++ - output = fmt.Sprintf("%s\t%d: FAIL: %s not matched by %s\n", output, i, actualFmt, matcher) - } - } else { - switch expected := expected.(type) { - case anythingOfTypeArgument: - // type checking - if reflect.TypeOf(actual).Name() != string(expected) && reflect.TypeOf(actual).String() != string(expected) { - // not match - differences++ - output = fmt.Sprintf("%s\t%d: FAIL: type %s != type %s - %s\n", output, i, expected, reflect.TypeOf(actual).Name(), actualFmt) - } - case *IsTypeArgument: - actualT := reflect.TypeOf(actual) - if actualT != expected.t { - differences++ - output = fmt.Sprintf("%s\t%d: FAIL: type %s != type %s - %s\n", output, i, expected.t.Name(), actualT.Name(), actualFmt) - } - case *FunctionalOptionsArgument: - t := expected.value - - var name string - tValue := reflect.ValueOf(t) - if tValue.Len() > 0 { - name = "[]" + reflect.TypeOf(tValue.Index(0).Interface()).String() - } - - tName := reflect.TypeOf(t).Name() - if name != reflect.TypeOf(actual).String() && tValue.Len() != 0 { - differences++ - output = fmt.Sprintf("%s\t%d: FAIL: type %s != type %s - %s\n", output, i, tName, reflect.TypeOf(actual).Name(), actualFmt) - } else { - if ef, af := assertOpts(t, actual); ef == "" && af == "" { - // match - output = fmt.Sprintf("%s\t%d: PASS: %s == %s\n", output, i, tName, tName) - } else { - // not match - differences++ - output = fmt.Sprintf("%s\t%d: FAIL: %s != %s\n", output, i, af, ef) - } - } - - default: - if assert.ObjectsAreEqual(expected, Anything) || assert.ObjectsAreEqual(actual, Anything) || assert.ObjectsAreEqual(actual, expected) { - // match - output = fmt.Sprintf("%s\t%d: PASS: %s == %s\n", output, i, actualFmt, expectedFmt) - } else { - // not match - differences++ - output = fmt.Sprintf("%s\t%d: FAIL: %s != %s\n", output, i, actualFmt, expectedFmt) - } - } - } - - } - - if differences == 0 { - return "No differences.", differences - } - - return output, differences -} - -// Assert compares the arguments with the specified objects and fails if -// they do not exactly match. -func (args Arguments) Assert(t TestingT, objects ...interface{}) bool { - if h, ok := t.(tHelper); ok { - h.Helper() - } - - // get the differences - diff, diffCount := args.Diff(objects) - - if diffCount == 0 { - return true - } - - // there are differences... report them... - t.Logf(diff) - t.Errorf("%sArguments do not match.", assert.CallerInfo()) - - return false -} - -// String gets the argument at the specified index. Panics if there is no argument, or -// if the argument is of the wrong type. -// -// If no index is provided, String() returns a complete string representation -// of the arguments. -func (args Arguments) String(indexOrNil ...int) string { - if len(indexOrNil) == 0 { - // normal String() method - return a string representation of the args - var argsStr []string - for _, arg := range args { - argsStr = append(argsStr, fmt.Sprintf("%T", arg)) // handles nil nicely - } - return strings.Join(argsStr, ",") - } else if len(indexOrNil) == 1 { - // Index has been specified - get the argument at that index - index := indexOrNil[0] - var s string - var ok bool - if s, ok = args.Get(index).(string); !ok { - panic(fmt.Sprintf("assert: arguments: String(%d) failed because object wasn't correct type: %s", index, args.Get(index))) - } - return s - } - - panic(fmt.Sprintf("assert: arguments: Wrong number of arguments passed to String. Must be 0 or 1, not %d", len(indexOrNil))) -} - -// Int gets the argument at the specified index. Panics if there is no argument, or -// if the argument is of the wrong type. -func (args Arguments) Int(index int) int { - var s int - var ok bool - if s, ok = args.Get(index).(int); !ok { - panic(fmt.Sprintf("assert: arguments: Int(%d) failed because object wasn't correct type: %v", index, args.Get(index))) - } - return s -} - -// Error gets the argument at the specified index. Panics if there is no argument, or -// if the argument is of the wrong type. -func (args Arguments) Error(index int) error { - obj := args.Get(index) - var s error - var ok bool - if obj == nil { - return nil - } - if s, ok = obj.(error); !ok { - panic(fmt.Sprintf("assert: arguments: Error(%d) failed because object wasn't correct type: %v", index, args.Get(index))) - } - return s -} - -// Bool gets the argument at the specified index. Panics if there is no argument, or -// if the argument is of the wrong type. -func (args Arguments) Bool(index int) bool { - var s bool - var ok bool - if s, ok = args.Get(index).(bool); !ok { - panic(fmt.Sprintf("assert: arguments: Bool(%d) failed because object wasn't correct type: %v", index, args.Get(index))) - } - return s -} - -func typeAndKind(v interface{}) (reflect.Type, reflect.Kind) { - t := reflect.TypeOf(v) - k := t.Kind() - - if k == reflect.Ptr { - t = t.Elem() - k = t.Kind() - } - return t, k -} - -func diffArguments(expected Arguments, actual Arguments) string { - if len(expected) != len(actual) { - return fmt.Sprintf("Provided %v arguments, mocked for %v arguments", len(expected), len(actual)) - } - - for x := range expected { - if diffString := diff(expected[x], actual[x]); diffString != "" { - return fmt.Sprintf("Difference found in argument %v:\n\n%s", x, diffString) - } - } - - return "" -} - -// diff returns a diff of both values as long as both are of the same type and -// are a struct, map, slice or array. Otherwise it returns an empty string. -func diff(expected interface{}, actual interface{}) string { - if expected == nil || actual == nil { - return "" - } - - et, ek := typeAndKind(expected) - at, _ := typeAndKind(actual) - - if et != at { - return "" - } - - if ek != reflect.Struct && ek != reflect.Map && ek != reflect.Slice && ek != reflect.Array { - return "" - } - - e := spewConfig.Sdump(expected) - a := spewConfig.Sdump(actual) - - diff, _ := difflib.GetUnifiedDiffString(difflib.UnifiedDiff{ - A: difflib.SplitLines(e), - B: difflib.SplitLines(a), - FromFile: "Expected", - FromDate: "", - ToFile: "Actual", - ToDate: "", - Context: 1, - }) - - return diff -} - -var spewConfig = spew.ConfigState{ - Indent: " ", - DisablePointerAddresses: true, - DisableCapacities: true, - SortKeys: true, -} - -type tHelper interface { - Helper() -} - -func assertOpts(expected, actual interface{}) (expectedFmt, actualFmt string) { - expectedOpts := reflect.ValueOf(expected) - actualOpts := reflect.ValueOf(actual) - var expectedNames []string - for i := 0; i < expectedOpts.Len(); i++ { - expectedNames = append(expectedNames, funcName(expectedOpts.Index(i).Interface())) - } - var actualNames []string - for i := 0; i < actualOpts.Len(); i++ { - actualNames = append(actualNames, funcName(actualOpts.Index(i).Interface())) - } - if !assert.ObjectsAreEqual(expectedNames, actualNames) { - expectedFmt = fmt.Sprintf("%v", expectedNames) - actualFmt = fmt.Sprintf("%v", actualNames) - return - } - - for i := 0; i < expectedOpts.Len(); i++ { - expectedOpt := expectedOpts.Index(i).Interface() - actualOpt := actualOpts.Index(i).Interface() - - expectedFunc := expectedNames[i] - actualFunc := actualNames[i] - if expectedFunc != actualFunc { - expectedFmt = expectedFunc - actualFmt = actualFunc - return - } - - ot := reflect.TypeOf(expectedOpt) - var expectedValues []reflect.Value - var actualValues []reflect.Value - if ot.NumIn() == 0 { - return - } - - for i := 0; i < ot.NumIn(); i++ { - vt := ot.In(i).Elem() - expectedValues = append(expectedValues, reflect.New(vt)) - actualValues = append(actualValues, reflect.New(vt)) - } - - reflect.ValueOf(expectedOpt).Call(expectedValues) - reflect.ValueOf(actualOpt).Call(actualValues) - - for i := 0; i < ot.NumIn(); i++ { - if !assert.ObjectsAreEqual(expectedValues[i].Interface(), actualValues[i].Interface()) { - expectedFmt = fmt.Sprintf("%s %+v", expectedNames[i], expectedValues[i].Interface()) - actualFmt = fmt.Sprintf("%s %+v", expectedNames[i], actualValues[i].Interface()) - return - } - } - } - - return "", "" -} - -func funcName(opt interface{}) string { - n := runtime.FuncForPC(reflect.ValueOf(opt).Pointer()).Name() - return strings.TrimSuffix(path.Base(n), path.Ext(n)) -} diff --git a/vendor/golang.org/x/crypto/chacha20/chacha_noasm.go b/vendor/golang.org/x/crypto/chacha20/chacha_noasm.go index db42e6676a..c709b72847 100644 --- a/vendor/golang.org/x/crypto/chacha20/chacha_noasm.go +++ b/vendor/golang.org/x/crypto/chacha20/chacha_noasm.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. -//go:build (!arm64 && !s390x && !ppc64le) || !gc || purego +//go:build (!arm64 && !s390x && !ppc64 && !ppc64le) || !gc || purego package chacha20 diff --git a/vendor/golang.org/x/crypto/chacha20/chacha_ppc64le.go b/vendor/golang.org/x/crypto/chacha20/chacha_ppc64x.go similarity index 89% rename from vendor/golang.org/x/crypto/chacha20/chacha_ppc64le.go rename to vendor/golang.org/x/crypto/chacha20/chacha_ppc64x.go index 3a4287f990..bd183d9ba1 100644 --- a/vendor/golang.org/x/crypto/chacha20/chacha_ppc64le.go +++ b/vendor/golang.org/x/crypto/chacha20/chacha_ppc64x.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. -//go:build gc && !purego +//go:build gc && !purego && (ppc64 || ppc64le) package chacha20 diff --git a/vendor/golang.org/x/crypto/chacha20/chacha_ppc64le.s b/vendor/golang.org/x/crypto/chacha20/chacha_ppc64x.s similarity index 76% rename from vendor/golang.org/x/crypto/chacha20/chacha_ppc64le.s rename to vendor/golang.org/x/crypto/chacha20/chacha_ppc64x.s index c672ccf698..a660b4112f 100644 --- a/vendor/golang.org/x/crypto/chacha20/chacha_ppc64le.s +++ b/vendor/golang.org/x/crypto/chacha20/chacha_ppc64x.s @@ -19,7 +19,7 @@ // The differences in this and the original implementation are // due to the calling conventions and initialization of constants. -//go:build gc && !purego +//go:build gc && !purego && (ppc64 || ppc64le) #include "textflag.h" @@ -36,32 +36,68 @@ // for VPERMXOR #define MASK R18 -DATA consts<>+0x00(SB)/8, $0x3320646e61707865 -DATA consts<>+0x08(SB)/8, $0x6b20657479622d32 -DATA consts<>+0x10(SB)/8, $0x0000000000000001 -DATA consts<>+0x18(SB)/8, $0x0000000000000000 -DATA consts<>+0x20(SB)/8, $0x0000000000000004 -DATA consts<>+0x28(SB)/8, $0x0000000000000000 -DATA consts<>+0x30(SB)/8, $0x0a0b08090e0f0c0d -DATA consts<>+0x38(SB)/8, $0x0203000106070405 -DATA consts<>+0x40(SB)/8, $0x090a0b080d0e0f0c -DATA consts<>+0x48(SB)/8, $0x0102030005060704 -DATA consts<>+0x50(SB)/8, $0x6170786561707865 -DATA consts<>+0x58(SB)/8, $0x6170786561707865 -DATA consts<>+0x60(SB)/8, $0x3320646e3320646e -DATA consts<>+0x68(SB)/8, $0x3320646e3320646e -DATA consts<>+0x70(SB)/8, $0x79622d3279622d32 -DATA consts<>+0x78(SB)/8, $0x79622d3279622d32 -DATA consts<>+0x80(SB)/8, $0x6b2065746b206574 -DATA consts<>+0x88(SB)/8, $0x6b2065746b206574 -DATA consts<>+0x90(SB)/8, $0x0000000100000000 -DATA consts<>+0x98(SB)/8, $0x0000000300000002 -DATA consts<>+0xa0(SB)/8, $0x5566774411223300 -DATA consts<>+0xa8(SB)/8, $0xddeeffcc99aabb88 -DATA consts<>+0xb0(SB)/8, $0x6677445522330011 -DATA consts<>+0xb8(SB)/8, $0xeeffccddaabb8899 +DATA consts<>+0x00(SB)/4, $0x61707865 +DATA consts<>+0x04(SB)/4, $0x3320646e +DATA consts<>+0x08(SB)/4, $0x79622d32 +DATA consts<>+0x0c(SB)/4, $0x6b206574 +DATA consts<>+0x10(SB)/4, $0x00000001 +DATA consts<>+0x14(SB)/4, $0x00000000 +DATA consts<>+0x18(SB)/4, $0x00000000 +DATA consts<>+0x1c(SB)/4, $0x00000000 +DATA consts<>+0x20(SB)/4, $0x00000004 +DATA consts<>+0x24(SB)/4, $0x00000000 +DATA consts<>+0x28(SB)/4, $0x00000000 +DATA consts<>+0x2c(SB)/4, $0x00000000 +DATA consts<>+0x30(SB)/4, $0x0e0f0c0d +DATA consts<>+0x34(SB)/4, $0x0a0b0809 +DATA consts<>+0x38(SB)/4, $0x06070405 +DATA consts<>+0x3c(SB)/4, $0x02030001 +DATA consts<>+0x40(SB)/4, $0x0d0e0f0c +DATA consts<>+0x44(SB)/4, $0x090a0b08 +DATA consts<>+0x48(SB)/4, $0x05060704 +DATA consts<>+0x4c(SB)/4, $0x01020300 +DATA consts<>+0x50(SB)/4, $0x61707865 +DATA consts<>+0x54(SB)/4, $0x61707865 +DATA consts<>+0x58(SB)/4, $0x61707865 +DATA consts<>+0x5c(SB)/4, $0x61707865 +DATA consts<>+0x60(SB)/4, $0x3320646e +DATA consts<>+0x64(SB)/4, $0x3320646e +DATA consts<>+0x68(SB)/4, $0x3320646e +DATA consts<>+0x6c(SB)/4, $0x3320646e +DATA consts<>+0x70(SB)/4, $0x79622d32 +DATA consts<>+0x74(SB)/4, $0x79622d32 +DATA consts<>+0x78(SB)/4, $0x79622d32 +DATA consts<>+0x7c(SB)/4, $0x79622d32 +DATA consts<>+0x80(SB)/4, $0x6b206574 +DATA consts<>+0x84(SB)/4, $0x6b206574 +DATA consts<>+0x88(SB)/4, $0x6b206574 +DATA consts<>+0x8c(SB)/4, $0x6b206574 +DATA consts<>+0x90(SB)/4, $0x00000000 +DATA consts<>+0x94(SB)/4, $0x00000001 +DATA consts<>+0x98(SB)/4, $0x00000002 +DATA consts<>+0x9c(SB)/4, $0x00000003 +DATA consts<>+0xa0(SB)/4, $0x11223300 +DATA consts<>+0xa4(SB)/4, $0x55667744 +DATA consts<>+0xa8(SB)/4, $0x99aabb88 +DATA consts<>+0xac(SB)/4, $0xddeeffcc +DATA consts<>+0xb0(SB)/4, $0x22330011 +DATA consts<>+0xb4(SB)/4, $0x66774455 +DATA consts<>+0xb8(SB)/4, $0xaabb8899 +DATA consts<>+0xbc(SB)/4, $0xeeffccdd GLOBL consts<>(SB), RODATA, $0xc0 +#ifdef GOARCH_ppc64 +#define BE_XXBRW_INIT() \ + LVSL (R0)(R0), V24 \ + VSPLTISB $3, V25 \ + VXOR V24, V25, V24 \ + +#define BE_XXBRW(vr) VPERM vr, vr, V24, vr +#else +#define BE_XXBRW_INIT() +#define BE_XXBRW(vr) +#endif + //func chaCha20_ctr32_vsx(out, inp *byte, len int, key *[8]uint32, counter *uint32) TEXT ·chaCha20_ctr32_vsx(SB),NOSPLIT,$64-40 MOVD out+0(FP), OUT @@ -94,6 +130,8 @@ TEXT ·chaCha20_ctr32_vsx(SB),NOSPLIT,$64-40 // Clear V27 VXOR V27, V27, V27 + BE_XXBRW_INIT() + // V28 LXVW4X (CONSTBASE)(R11), VS60 @@ -299,6 +337,11 @@ loop_vsx: VADDUWM V8, V18, V8 VADDUWM V12, V19, V12 + BE_XXBRW(V0) + BE_XXBRW(V4) + BE_XXBRW(V8) + BE_XXBRW(V12) + CMPU LEN, $64 BLT tail_vsx @@ -327,6 +370,11 @@ loop_vsx: VADDUWM V9, V18, V8 VADDUWM V13, V19, V12 + BE_XXBRW(V0) + BE_XXBRW(V4) + BE_XXBRW(V8) + BE_XXBRW(V12) + CMPU LEN, $64 BLT tail_vsx @@ -334,8 +382,8 @@ loop_vsx: LXVW4X (INP)(R8), VS60 LXVW4X (INP)(R9), VS61 LXVW4X (INP)(R10), VS62 - VXOR V27, V0, V27 + VXOR V27, V0, V27 VXOR V28, V4, V28 VXOR V29, V8, V29 VXOR V30, V12, V30 @@ -354,6 +402,11 @@ loop_vsx: VADDUWM V10, V18, V8 VADDUWM V14, V19, V12 + BE_XXBRW(V0) + BE_XXBRW(V4) + BE_XXBRW(V8) + BE_XXBRW(V12) + CMPU LEN, $64 BLT tail_vsx @@ -381,6 +434,11 @@ loop_vsx: VADDUWM V11, V18, V8 VADDUWM V15, V19, V12 + BE_XXBRW(V0) + BE_XXBRW(V4) + BE_XXBRW(V8) + BE_XXBRW(V12) + CMPU LEN, $64 BLT tail_vsx @@ -408,9 +466,9 @@ loop_vsx: done_vsx: // Increment counter by number of 64 byte blocks - MOVD (CNT), R14 + MOVWZ (CNT), R14 ADD BLOCKS, R14 - MOVD R14, (CNT) + MOVWZ R14, (CNT) RET tail_vsx: diff --git a/vendor/golang.org/x/crypto/internal/poly1305/mac_noasm.go b/vendor/golang.org/x/crypto/internal/poly1305/mac_noasm.go index 333da285b3..bd896bdc76 100644 --- a/vendor/golang.org/x/crypto/internal/poly1305/mac_noasm.go +++ b/vendor/golang.org/x/crypto/internal/poly1305/mac_noasm.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. -//go:build (!amd64 && !ppc64le && !s390x) || !gc || purego +//go:build (!amd64 && !ppc64le && !ppc64 && !s390x) || !gc || purego package poly1305 diff --git a/vendor/golang.org/x/crypto/internal/poly1305/sum_ppc64le.go b/vendor/golang.org/x/crypto/internal/poly1305/sum_ppc64x.go similarity index 95% rename from vendor/golang.org/x/crypto/internal/poly1305/sum_ppc64le.go rename to vendor/golang.org/x/crypto/internal/poly1305/sum_ppc64x.go index 4aec4874b5..1a1679aaad 100644 --- a/vendor/golang.org/x/crypto/internal/poly1305/sum_ppc64le.go +++ b/vendor/golang.org/x/crypto/internal/poly1305/sum_ppc64x.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. -//go:build gc && !purego +//go:build gc && !purego && (ppc64 || ppc64le) package poly1305 diff --git a/vendor/golang.org/x/crypto/internal/poly1305/sum_ppc64le.s b/vendor/golang.org/x/crypto/internal/poly1305/sum_ppc64x.s similarity index 89% rename from vendor/golang.org/x/crypto/internal/poly1305/sum_ppc64le.s rename to vendor/golang.org/x/crypto/internal/poly1305/sum_ppc64x.s index b3c1699bff..6899a1dabc 100644 --- a/vendor/golang.org/x/crypto/internal/poly1305/sum_ppc64le.s +++ b/vendor/golang.org/x/crypto/internal/poly1305/sum_ppc64x.s @@ -2,15 +2,25 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. -//go:build gc && !purego +//go:build gc && !purego && (ppc64 || ppc64le) #include "textflag.h" // This was ported from the amd64 implementation. +#ifdef GOARCH_ppc64le +#define LE_MOVD MOVD +#define LE_MOVWZ MOVWZ +#define LE_MOVHZ MOVHZ +#else +#define LE_MOVD MOVDBR +#define LE_MOVWZ MOVWBR +#define LE_MOVHZ MOVHBR +#endif + #define POLY1305_ADD(msg, h0, h1, h2, t0, t1, t2) \ - MOVD (msg), t0; \ - MOVD 8(msg), t1; \ + LE_MOVD (msg)( R0), t0; \ + LE_MOVD (msg)(R24), t1; \ MOVD $1, t2; \ ADDC t0, h0, h0; \ ADDE t1, h1, h1; \ @@ -50,10 +60,6 @@ ADDE t3, h1, h1; \ ADDZE h2 -DATA ·poly1305Mask<>+0x00(SB)/8, $0x0FFFFFFC0FFFFFFF -DATA ·poly1305Mask<>+0x08(SB)/8, $0x0FFFFFFC0FFFFFFC -GLOBL ·poly1305Mask<>(SB), RODATA, $16 - // func update(state *[7]uint64, msg []byte) TEXT ·update(SB), $0-32 MOVD state+0(FP), R3 @@ -66,6 +72,8 @@ TEXT ·update(SB), $0-32 MOVD 24(R3), R11 // r0 MOVD 32(R3), R12 // r1 + MOVD $8, R24 + CMP R5, $16 BLT bytes_between_0_and_15 @@ -94,7 +102,7 @@ flush_buffer: // Greater than 8 -- load the rightmost remaining bytes in msg // and put into R17 (h1) - MOVD (R4)(R21), R17 + LE_MOVD (R4)(R21), R17 MOVD $16, R22 // Find the offset to those bytes @@ -118,7 +126,7 @@ just1: BLT less8 // Exactly 8 - MOVD (R4), R16 + LE_MOVD (R4), R16 CMP R17, $0 @@ -133,7 +141,7 @@ less8: MOVD $0, R22 // shift count CMP R5, $4 BLT less4 - MOVWZ (R4), R16 + LE_MOVWZ (R4), R16 ADD $4, R4 ADD $-4, R5 MOVD $32, R22 @@ -141,7 +149,7 @@ less8: less4: CMP R5, $2 BLT less2 - MOVHZ (R4), R21 + LE_MOVHZ (R4), R21 SLD R22, R21, R21 OR R16, R21, R16 ADD $16, R22 diff --git a/vendor/golang.org/x/crypto/sha3/doc.go b/vendor/golang.org/x/crypto/sha3/doc.go index 7e02309070..bbf391fe6e 100644 --- a/vendor/golang.org/x/crypto/sha3/doc.go +++ b/vendor/golang.org/x/crypto/sha3/doc.go @@ -5,6 +5,10 @@ // Package sha3 implements the SHA-3 fixed-output-length hash functions and // the SHAKE variable-output-length hash functions defined by FIPS-202. // +// All types in this package also implement [encoding.BinaryMarshaler], +// [encoding.BinaryAppender] and [encoding.BinaryUnmarshaler] to marshal and +// unmarshal the internal state of the hash. +// // Both types of hash function use the "sponge" construction and the Keccak // permutation. For a detailed specification see http://keccak.noekeon.org/ // diff --git a/vendor/golang.org/x/crypto/sha3/hashes.go b/vendor/golang.org/x/crypto/sha3/hashes.go index c544b29e5f..31fffbe044 100644 --- a/vendor/golang.org/x/crypto/sha3/hashes.go +++ b/vendor/golang.org/x/crypto/sha3/hashes.go @@ -48,33 +48,52 @@ func init() { crypto.RegisterHash(crypto.SHA3_512, New512) } +const ( + dsbyteSHA3 = 0b00000110 + dsbyteKeccak = 0b00000001 + dsbyteShake = 0b00011111 + dsbyteCShake = 0b00000100 + + // rateK[c] is the rate in bytes for Keccak[c] where c is the capacity in + // bits. Given the sponge size is 1600 bits, the rate is 1600 - c bits. + rateK256 = (1600 - 256) / 8 + rateK448 = (1600 - 448) / 8 + rateK512 = (1600 - 512) / 8 + rateK768 = (1600 - 768) / 8 + rateK1024 = (1600 - 1024) / 8 +) + func new224Generic() *state { - return &state{rate: 144, outputLen: 28, dsbyte: 0x06} + return &state{rate: rateK448, outputLen: 28, dsbyte: dsbyteSHA3} } func new256Generic() *state { - return &state{rate: 136, outputLen: 32, dsbyte: 0x06} + return &state{rate: rateK512, outputLen: 32, dsbyte: dsbyteSHA3} } func new384Generic() *state { - return &state{rate: 104, outputLen: 48, dsbyte: 0x06} + return &state{rate: rateK768, outputLen: 48, dsbyte: dsbyteSHA3} } func new512Generic() *state { - return &state{rate: 72, outputLen: 64, dsbyte: 0x06} + return &state{rate: rateK1024, outputLen: 64, dsbyte: dsbyteSHA3} } // NewLegacyKeccak256 creates a new Keccak-256 hash. // // Only use this function if you require compatibility with an existing cryptosystem // that uses non-standard padding. All other users should use New256 instead. -func NewLegacyKeccak256() hash.Hash { return &state{rate: 136, outputLen: 32, dsbyte: 0x01} } +func NewLegacyKeccak256() hash.Hash { + return &state{rate: rateK512, outputLen: 32, dsbyte: dsbyteKeccak} +} // NewLegacyKeccak512 creates a new Keccak-512 hash. // // Only use this function if you require compatibility with an existing cryptosystem // that uses non-standard padding. All other users should use New512 instead. -func NewLegacyKeccak512() hash.Hash { return &state{rate: 72, outputLen: 64, dsbyte: 0x01} } +func NewLegacyKeccak512() hash.Hash { + return &state{rate: rateK1024, outputLen: 64, dsbyte: dsbyteKeccak} +} // Sum224 returns the SHA3-224 digest of the data. func Sum224(data []byte) (digest [28]byte) { diff --git a/vendor/golang.org/x/crypto/sha3/sha3.go b/vendor/golang.org/x/crypto/sha3/sha3.go index afedde5abf..6658c44479 100644 --- a/vendor/golang.org/x/crypto/sha3/sha3.go +++ b/vendor/golang.org/x/crypto/sha3/sha3.go @@ -4,6 +4,15 @@ package sha3 +import ( + "crypto/subtle" + "encoding/binary" + "errors" + "unsafe" + + "golang.org/x/sys/cpu" +) + // spongeDirection indicates the direction bytes are flowing through the sponge. type spongeDirection int @@ -14,16 +23,13 @@ const ( spongeSqueezing ) -const ( - // maxRate is the maximum size of the internal buffer. SHAKE-256 - // currently needs the largest buffer. - maxRate = 168 -) - type state struct { - // Generic sponge components. - a [25]uint64 // main state of the hash - rate int // the number of bytes of state to use + a [1600 / 8]byte // main state of the hash + + // a[n:rate] is the buffer. If absorbing, it's the remaining space to XOR + // into before running the permutation. If squeezing, it's the remaining + // output to produce before running the permutation. + n, rate int // dsbyte contains the "domain separation" bits and the first bit of // the padding. Sections 6.1 and 6.2 of [1] separate the outputs of the @@ -39,10 +45,6 @@ type state struct { // Extendable-Output Functions (May 2014)" dsbyte byte - i, n int // storage[i:n] is the buffer, i is only used while squeezing - storage [maxRate]byte - - // Specific to SHA-3 and SHAKE. outputLen int // the default output size in bytes state spongeDirection // whether the sponge is absorbing or squeezing } @@ -61,7 +63,7 @@ func (d *state) Reset() { d.a[i] = 0 } d.state = spongeAbsorbing - d.i, d.n = 0, 0 + d.n = 0 } func (d *state) clone() *state { @@ -69,22 +71,25 @@ func (d *state) clone() *state { return &ret } -// permute applies the KeccakF-1600 permutation. It handles -// any input-output buffering. +// permute applies the KeccakF-1600 permutation. func (d *state) permute() { - switch d.state { - case spongeAbsorbing: - // If we're absorbing, we need to xor the input into the state - // before applying the permutation. - xorIn(d, d.storage[:d.rate]) - d.n = 0 - keccakF1600(&d.a) - case spongeSqueezing: - // If we're squeezing, we need to apply the permutation before - // copying more output. - keccakF1600(&d.a) - d.i = 0 - copyOut(d, d.storage[:d.rate]) + var a *[25]uint64 + if cpu.IsBigEndian { + a = new([25]uint64) + for i := range a { + a[i] = binary.LittleEndian.Uint64(d.a[i*8:]) + } + } else { + a = (*[25]uint64)(unsafe.Pointer(&d.a)) + } + + keccakF1600(a) + d.n = 0 + + if cpu.IsBigEndian { + for i := range a { + binary.LittleEndian.PutUint64(d.a[i*8:], a[i]) + } } } @@ -92,53 +97,36 @@ func (d *state) permute() { // the multi-bitrate 10..1 padding rule, and permutes the state. func (d *state) padAndPermute() { // Pad with this instance's domain-separator bits. We know that there's - // at least one byte of space in d.buf because, if it were full, + // at least one byte of space in the sponge because, if it were full, // permute would have been called to empty it. dsbyte also contains the // first one bit for the padding. See the comment in the state struct. - d.storage[d.n] = d.dsbyte - d.n++ - for d.n < d.rate { - d.storage[d.n] = 0 - d.n++ - } + d.a[d.n] ^= d.dsbyte // This adds the final one bit for the padding. Because of the way that // bits are numbered from the LSB upwards, the final bit is the MSB of // the last byte. - d.storage[d.rate-1] ^= 0x80 + d.a[d.rate-1] ^= 0x80 // Apply the permutation d.permute() d.state = spongeSqueezing - d.n = d.rate - copyOut(d, d.storage[:d.rate]) } // Write absorbs more data into the hash's state. It panics if any // output has already been read. -func (d *state) Write(p []byte) (written int, err error) { +func (d *state) Write(p []byte) (n int, err error) { if d.state != spongeAbsorbing { panic("sha3: Write after Read") } - written = len(p) + + n = len(p) for len(p) > 0 { - if d.n == 0 && len(p) >= d.rate { - // The fast path; absorb a full "rate" bytes of input and apply the permutation. - xorIn(d, p[:d.rate]) - p = p[d.rate:] - keccakF1600(&d.a) - } else { - // The slow path; buffer the input until we can fill the sponge, and then xor it in. - todo := d.rate - d.n - if todo > len(p) { - todo = len(p) - } - d.n += copy(d.storage[d.n:], p[:todo]) - p = p[todo:] - - // If the sponge is full, apply the permutation. - if d.n == d.rate { - d.permute() - } + x := subtle.XORBytes(d.a[d.n:d.rate], d.a[d.n:d.rate], p) + d.n += x + p = p[x:] + + // If the sponge is full, apply the permutation. + if d.n == d.rate { + d.permute() } } @@ -156,14 +144,14 @@ func (d *state) Read(out []byte) (n int, err error) { // Now, do the squeezing. for len(out) > 0 { - n := copy(out, d.storage[d.i:d.n]) - d.i += n - out = out[n:] - // Apply the permutation if we've squeezed the sponge dry. - if d.i == d.rate { + if d.n == d.rate { d.permute() } + + x := copy(out, d.a[d.n:d.rate]) + d.n += x + out = out[x:] } return @@ -183,3 +171,74 @@ func (d *state) Sum(in []byte) []byte { dup.Read(hash) return append(in, hash...) } + +const ( + magicSHA3 = "sha\x08" + magicShake = "sha\x09" + magicCShake = "sha\x0a" + magicKeccak = "sha\x0b" + // magic || rate || main state || n || sponge direction + marshaledSize = len(magicSHA3) + 1 + 200 + 1 + 1 +) + +func (d *state) MarshalBinary() ([]byte, error) { + return d.AppendBinary(make([]byte, 0, marshaledSize)) +} + +func (d *state) AppendBinary(b []byte) ([]byte, error) { + switch d.dsbyte { + case dsbyteSHA3: + b = append(b, magicSHA3...) + case dsbyteShake: + b = append(b, magicShake...) + case dsbyteCShake: + b = append(b, magicCShake...) + case dsbyteKeccak: + b = append(b, magicKeccak...) + default: + panic("unknown dsbyte") + } + // rate is at most 168, and n is at most rate. + b = append(b, byte(d.rate)) + b = append(b, d.a[:]...) + b = append(b, byte(d.n), byte(d.state)) + return b, nil +} + +func (d *state) UnmarshalBinary(b []byte) error { + if len(b) != marshaledSize { + return errors.New("sha3: invalid hash state") + } + + magic := string(b[:len(magicSHA3)]) + b = b[len(magicSHA3):] + switch { + case magic == magicSHA3 && d.dsbyte == dsbyteSHA3: + case magic == magicShake && d.dsbyte == dsbyteShake: + case magic == magicCShake && d.dsbyte == dsbyteCShake: + case magic == magicKeccak && d.dsbyte == dsbyteKeccak: + default: + return errors.New("sha3: invalid hash state identifier") + } + + rate := int(b[0]) + b = b[1:] + if rate != d.rate { + return errors.New("sha3: invalid hash state function") + } + + copy(d.a[:], b) + b = b[len(d.a):] + + n, state := int(b[0]), spongeDirection(b[1]) + if n > d.rate { + return errors.New("sha3: invalid hash state") + } + d.n = n + if state != spongeAbsorbing && state != spongeSqueezing { + return errors.New("sha3: invalid hash state") + } + d.state = state + + return nil +} diff --git a/vendor/golang.org/x/crypto/sha3/shake.go b/vendor/golang.org/x/crypto/sha3/shake.go index 1ea9275b8b..a6b3a4281f 100644 --- a/vendor/golang.org/x/crypto/sha3/shake.go +++ b/vendor/golang.org/x/crypto/sha3/shake.go @@ -16,9 +16,12 @@ package sha3 // [2] https://doi.org/10.6028/NIST.SP.800-185 import ( + "bytes" "encoding/binary" + "errors" "hash" "io" + "math/bits" ) // ShakeHash defines the interface to hash functions that support @@ -50,44 +53,36 @@ type cshakeState struct { initBlock []byte } -// Consts for configuring initial SHA-3 state -const ( - dsbyteShake = 0x1f - dsbyteCShake = 0x04 - rate128 = 168 - rate256 = 136 -) +func bytepad(data []byte, rate int) []byte { + out := make([]byte, 0, 9+len(data)+rate-1) + out = append(out, leftEncode(uint64(rate))...) + out = append(out, data...) + if padlen := rate - len(out)%rate; padlen < rate { + out = append(out, make([]byte, padlen)...) + } + return out +} -func bytepad(input []byte, w int) []byte { - // leftEncode always returns max 9 bytes - buf := make([]byte, 0, 9+len(input)+w) - buf = append(buf, leftEncode(uint64(w))...) - buf = append(buf, input...) - padlen := w - (len(buf) % w) - return append(buf, make([]byte, padlen)...) -} - -func leftEncode(value uint64) []byte { - var b [9]byte - binary.BigEndian.PutUint64(b[1:], value) - // Trim all but last leading zero bytes - i := byte(1) - for i < 8 && b[i] == 0 { - i++ +func leftEncode(x uint64) []byte { + // Let n be the smallest positive integer for which 2^(8n) > x. + n := (bits.Len64(x) + 7) / 8 + if n == 0 { + n = 1 } - // Prepend number of encoded bytes - b[i-1] = 9 - i - return b[i-1:] + // Return n || x with n as a byte and x an n bytes in big-endian order. + b := make([]byte, 9) + binary.BigEndian.PutUint64(b[1:], x) + b = b[9-n-1:] + b[0] = byte(n) + return b } func newCShake(N, S []byte, rate, outputLen int, dsbyte byte) ShakeHash { c := cshakeState{state: &state{rate: rate, outputLen: outputLen, dsbyte: dsbyte}} - - // leftEncode returns max 9 bytes - c.initBlock = make([]byte, 0, 9*2+len(N)+len(S)) - c.initBlock = append(c.initBlock, leftEncode(uint64(len(N)*8))...) + c.initBlock = make([]byte, 0, 9+len(N)+9+len(S)) // leftEncode returns max 9 bytes + c.initBlock = append(c.initBlock, leftEncode(uint64(len(N))*8)...) c.initBlock = append(c.initBlock, N...) - c.initBlock = append(c.initBlock, leftEncode(uint64(len(S)*8))...) + c.initBlock = append(c.initBlock, leftEncode(uint64(len(S))*8)...) c.initBlock = append(c.initBlock, S...) c.Write(bytepad(c.initBlock, c.rate)) return &c @@ -111,6 +106,30 @@ func (c *state) Clone() ShakeHash { return c.clone() } +func (c *cshakeState) MarshalBinary() ([]byte, error) { + return c.AppendBinary(make([]byte, 0, marshaledSize+len(c.initBlock))) +} + +func (c *cshakeState) AppendBinary(b []byte) ([]byte, error) { + b, err := c.state.AppendBinary(b) + if err != nil { + return nil, err + } + b = append(b, c.initBlock...) + return b, nil +} + +func (c *cshakeState) UnmarshalBinary(b []byte) error { + if len(b) <= marshaledSize { + return errors.New("sha3: invalid hash state") + } + if err := c.state.UnmarshalBinary(b[:marshaledSize]); err != nil { + return err + } + c.initBlock = bytes.Clone(b[marshaledSize:]) + return nil +} + // NewShake128 creates a new SHAKE128 variable-output-length ShakeHash. // Its generic security strength is 128 bits against all attacks if at // least 32 bytes of its output are used. @@ -126,11 +145,11 @@ func NewShake256() ShakeHash { } func newShake128Generic() *state { - return &state{rate: rate128, outputLen: 32, dsbyte: dsbyteShake} + return &state{rate: rateK256, outputLen: 32, dsbyte: dsbyteShake} } func newShake256Generic() *state { - return &state{rate: rate256, outputLen: 64, dsbyte: dsbyteShake} + return &state{rate: rateK512, outputLen: 64, dsbyte: dsbyteShake} } // NewCShake128 creates a new instance of cSHAKE128 variable-output-length ShakeHash, @@ -143,7 +162,7 @@ func NewCShake128(N, S []byte) ShakeHash { if len(N) == 0 && len(S) == 0 { return NewShake128() } - return newCShake(N, S, rate128, 32, dsbyteCShake) + return newCShake(N, S, rateK256, 32, dsbyteCShake) } // NewCShake256 creates a new instance of cSHAKE256 variable-output-length ShakeHash, @@ -156,7 +175,7 @@ func NewCShake256(N, S []byte) ShakeHash { if len(N) == 0 && len(S) == 0 { return NewShake256() } - return newCShake(N, S, rate256, 64, dsbyteCShake) + return newCShake(N, S, rateK512, 64, dsbyteCShake) } // ShakeSum128 writes an arbitrary-length digest of data into hash. diff --git a/vendor/golang.org/x/crypto/sha3/xor.go b/vendor/golang.org/x/crypto/sha3/xor.go deleted file mode 100644 index 6ada5c9574..0000000000 --- a/vendor/golang.org/x/crypto/sha3/xor.go +++ /dev/null @@ -1,40 +0,0 @@ -// Copyright 2015 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package sha3 - -import ( - "crypto/subtle" - "encoding/binary" - "unsafe" - - "golang.org/x/sys/cpu" -) - -// xorIn xors the bytes in buf into the state. -func xorIn(d *state, buf []byte) { - if cpu.IsBigEndian { - for i := 0; len(buf) >= 8; i++ { - a := binary.LittleEndian.Uint64(buf) - d.a[i] ^= a - buf = buf[8:] - } - } else { - ab := (*[25 * 64 / 8]byte)(unsafe.Pointer(&d.a)) - subtle.XORBytes(ab[:], ab[:], buf) - } -} - -// copyOut copies uint64s to a byte buffer. -func copyOut(d *state, b []byte) { - if cpu.IsBigEndian { - for i := 0; len(b) >= 8; i++ { - binary.LittleEndian.PutUint64(b, d.a[i]) - b = b[8:] - } - } else { - ab := (*[25 * 64 / 8]byte)(unsafe.Pointer(&d.a)) - copy(b, ab[:]) - } -} diff --git a/vendor/golang.org/x/crypto/ssh/client_auth.go b/vendor/golang.org/x/crypto/ssh/client_auth.go index b93961010d..b86dde151d 100644 --- a/vendor/golang.org/x/crypto/ssh/client_auth.go +++ b/vendor/golang.org/x/crypto/ssh/client_auth.go @@ -555,6 +555,7 @@ func (cb KeyboardInteractiveChallenge) auth(session []byte, user string, c packe } gotMsgExtInfo := false + gotUserAuthInfoRequest := false for { packet, err := c.readPacket() if err != nil { @@ -585,6 +586,9 @@ func (cb KeyboardInteractiveChallenge) auth(session []byte, user string, c packe if msg.PartialSuccess { return authPartialSuccess, msg.Methods, nil } + if !gotUserAuthInfoRequest { + return authFailure, msg.Methods, unexpectedMessageError(msgUserAuthInfoRequest, packet[0]) + } return authFailure, msg.Methods, nil case msgUserAuthSuccess: return authSuccess, nil, nil @@ -596,6 +600,7 @@ func (cb KeyboardInteractiveChallenge) auth(session []byte, user string, c packe if err := Unmarshal(packet, &msg); err != nil { return authFailure, nil, err } + gotUserAuthInfoRequest = true // Manually unpack the prompt/echo pairs. rest := msg.Prompts diff --git a/vendor/golang.org/x/crypto/ssh/server.go b/vendor/golang.org/x/crypto/ssh/server.go index 3ca9e89e22..5b5ccd96f4 100644 --- a/vendor/golang.org/x/crypto/ssh/server.go +++ b/vendor/golang.org/x/crypto/ssh/server.go @@ -149,7 +149,7 @@ func (s *ServerConfig) AddHostKey(key Signer) { } // cachedPubKey contains the results of querying whether a public key is -// acceptable for a user. +// acceptable for a user. This is a FIFO cache. type cachedPubKey struct { user string pubKeyData []byte @@ -157,7 +157,13 @@ type cachedPubKey struct { perms *Permissions } -const maxCachedPubKeys = 16 +// maxCachedPubKeys is the number of cache entries we store. +// +// Due to consistent misuse of the PublicKeyCallback API, we have reduced this +// to 1, such that the only key in the cache is the most recently seen one. This +// forces the behavior that the last call to PublicKeyCallback will always be +// with the key that is used for authentication. +const maxCachedPubKeys = 1 // pubKeyCache caches tests for public keys. Since SSH clients // will query whether a public key is acceptable before attempting to @@ -179,9 +185,10 @@ func (c *pubKeyCache) get(user string, pubKeyData []byte) (cachedPubKey, bool) { // add adds the given tuple to the cache. func (c *pubKeyCache) add(candidate cachedPubKey) { - if len(c.keys) < maxCachedPubKeys { - c.keys = append(c.keys, candidate) + if len(c.keys) >= maxCachedPubKeys { + c.keys = c.keys[1:] } + c.keys = append(c.keys, candidate) } // ServerConn is an authenticated SSH connection, as seen from the @@ -510,8 +517,8 @@ userAuthLoop: if err := s.transport.writePacket(Marshal(discMsg)); err != nil { return nil, err } - - return nil, discMsg + authErrs = append(authErrs, discMsg) + return nil, &ServerAuthError{Errors: authErrs} } var userAuthReq userAuthRequestMsg diff --git a/vendor/golang.org/x/sys/cpu/asm_darwin_x86_gc.s b/vendor/golang.org/x/sys/cpu/asm_darwin_x86_gc.s new file mode 100644 index 0000000000..ec2acfe540 --- /dev/null +++ b/vendor/golang.org/x/sys/cpu/asm_darwin_x86_gc.s @@ -0,0 +1,17 @@ +// Copyright 2024 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:build darwin && amd64 && gc + +#include "textflag.h" + +TEXT libc_sysctl_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_sysctl(SB) +GLOBL ·libc_sysctl_trampoline_addr(SB), RODATA, $8 +DATA ·libc_sysctl_trampoline_addr(SB)/8, $libc_sysctl_trampoline<>(SB) + +TEXT libc_sysctlbyname_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_sysctlbyname(SB) +GLOBL ·libc_sysctlbyname_trampoline_addr(SB), RODATA, $8 +DATA ·libc_sysctlbyname_trampoline_addr(SB)/8, $libc_sysctlbyname_trampoline<>(SB) diff --git a/vendor/golang.org/x/sys/cpu/cpu_darwin_x86.go b/vendor/golang.org/x/sys/cpu/cpu_darwin_x86.go new file mode 100644 index 0000000000..b838cb9e95 --- /dev/null +++ b/vendor/golang.org/x/sys/cpu/cpu_darwin_x86.go @@ -0,0 +1,61 @@ +// Copyright 2024 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:build darwin && amd64 && gc + +package cpu + +// darwinSupportsAVX512 checks Darwin kernel for AVX512 support via sysctl +// call (see issue 43089). It also restricts AVX512 support for Darwin to +// kernel version 21.3.0 (MacOS 12.2.0) or later (see issue 49233). +// +// Background: +// Darwin implements a special mechanism to economize on thread state when +// AVX512 specific registers are not in use. This scheme minimizes state when +// preempting threads that haven't yet used any AVX512 instructions, but adds +// special requirements to check for AVX512 hardware support at runtime (e.g. +// via sysctl call or commpage inspection). See issue 43089 and link below for +// full background: +// https://github.com/apple-oss-distributions/xnu/blob/xnu-11215.1.10/osfmk/i386/fpu.c#L214-L240 +// +// Additionally, all versions of the Darwin kernel from 19.6.0 through 21.2.0 +// (corresponding to MacOS 10.15.6 - 12.1) have a bug that can cause corruption +// of the AVX512 mask registers (K0-K7) upon signal return. For this reason +// AVX512 is considered unsafe to use on Darwin for kernel versions prior to +// 21.3.0, where a fix has been confirmed. See issue 49233 for full background. +func darwinSupportsAVX512() bool { + return darwinSysctlEnabled([]byte("hw.optional.avx512f\x00")) && darwinKernelVersionCheck(21, 3, 0) +} + +// Ensure Darwin kernel version is at least major.minor.patch, avoiding dependencies +func darwinKernelVersionCheck(major, minor, patch int) bool { + var release [256]byte + err := darwinOSRelease(&release) + if err != nil { + return false + } + + var mmp [3]int + c := 0 +Loop: + for _, b := range release[:] { + switch { + case b >= '0' && b <= '9': + mmp[c] = 10*mmp[c] + int(b-'0') + case b == '.': + c++ + if c > 2 { + return false + } + case b == 0: + break Loop + default: + return false + } + } + if c != 2 { + return false + } + return mmp[0] > major || mmp[0] == major && (mmp[1] > minor || mmp[1] == minor && mmp[2] >= patch) +} diff --git a/vendor/golang.org/x/sys/cpu/cpu_gc_x86.go b/vendor/golang.org/x/sys/cpu/cpu_gc_x86.go index 910728fb16..32a44514e2 100644 --- a/vendor/golang.org/x/sys/cpu/cpu_gc_x86.go +++ b/vendor/golang.org/x/sys/cpu/cpu_gc_x86.go @@ -6,10 +6,10 @@ package cpu -// cpuid is implemented in cpu_x86.s for gc compiler +// cpuid is implemented in cpu_gc_x86.s for gc compiler // and in cpu_gccgo.c for gccgo. func cpuid(eaxArg, ecxArg uint32) (eax, ebx, ecx, edx uint32) -// xgetbv with ecx = 0 is implemented in cpu_x86.s for gc compiler +// xgetbv with ecx = 0 is implemented in cpu_gc_x86.s for gc compiler // and in cpu_gccgo.c for gccgo. func xgetbv() (eax, edx uint32) diff --git a/vendor/golang.org/x/sys/cpu/cpu_x86.s b/vendor/golang.org/x/sys/cpu/cpu_gc_x86.s similarity index 94% rename from vendor/golang.org/x/sys/cpu/cpu_x86.s rename to vendor/golang.org/x/sys/cpu/cpu_gc_x86.s index 7d7ba33efb..ce208ce6d6 100644 --- a/vendor/golang.org/x/sys/cpu/cpu_x86.s +++ b/vendor/golang.org/x/sys/cpu/cpu_gc_x86.s @@ -18,7 +18,7 @@ TEXT ·cpuid(SB), NOSPLIT, $0-24 RET // func xgetbv() (eax, edx uint32) -TEXT ·xgetbv(SB),NOSPLIT,$0-8 +TEXT ·xgetbv(SB), NOSPLIT, $0-8 MOVL $0, CX XGETBV MOVL AX, eax+0(FP) diff --git a/vendor/golang.org/x/sys/cpu/cpu_gccgo_x86.go b/vendor/golang.org/x/sys/cpu/cpu_gccgo_x86.go index 99c60fe9f9..170d21ddfd 100644 --- a/vendor/golang.org/x/sys/cpu/cpu_gccgo_x86.go +++ b/vendor/golang.org/x/sys/cpu/cpu_gccgo_x86.go @@ -23,9 +23,3 @@ func xgetbv() (eax, edx uint32) { gccgoXgetbv(&a, &d) return a, d } - -// gccgo doesn't build on Darwin, per: -// https://github.com/Homebrew/homebrew-core/blob/HEAD/Formula/gcc.rb#L76 -func darwinSupportsAVX512() bool { - return false -} diff --git a/vendor/golang.org/x/sys/cpu/cpu_linux_arm64.go b/vendor/golang.org/x/sys/cpu/cpu_linux_arm64.go index 08f35ea177..f1caf0f78e 100644 --- a/vendor/golang.org/x/sys/cpu/cpu_linux_arm64.go +++ b/vendor/golang.org/x/sys/cpu/cpu_linux_arm64.go @@ -110,7 +110,6 @@ func doinit() { ARM64.HasASIMDFHM = isSet(hwCap, hwcap_ASIMDFHM) ARM64.HasDIT = isSet(hwCap, hwcap_DIT) - // HWCAP2 feature bits ARM64.HasSVE2 = isSet(hwCap2, hwcap2_SVE2) ARM64.HasI8MM = isSet(hwCap2, hwcap2_I8MM) diff --git a/vendor/golang.org/x/sys/cpu/cpu_other_x86.go b/vendor/golang.org/x/sys/cpu/cpu_other_x86.go new file mode 100644 index 0000000000..a0fd7e2f75 --- /dev/null +++ b/vendor/golang.org/x/sys/cpu/cpu_other_x86.go @@ -0,0 +1,11 @@ +// Copyright 2024 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:build 386 || amd64p32 || (amd64 && (!darwin || !gc)) + +package cpu + +func darwinSupportsAVX512() bool { + panic("only implemented for gc && amd64 && darwin") +} diff --git a/vendor/golang.org/x/sys/cpu/cpu_x86.go b/vendor/golang.org/x/sys/cpu/cpu_x86.go index c29f5e4c5a..600a680786 100644 --- a/vendor/golang.org/x/sys/cpu/cpu_x86.go +++ b/vendor/golang.org/x/sys/cpu/cpu_x86.go @@ -92,10 +92,8 @@ func archInit() { osSupportsAVX = isSet(1, eax) && isSet(2, eax) if runtime.GOOS == "darwin" { - // Darwin doesn't save/restore AVX-512 mask registers correctly across signal handlers. - // Since users can't rely on mask register contents, let's not advertise AVX-512 support. - // See issue 49233. - osSupportsAVX512 = false + // Darwin requires special AVX512 checks, see cpu_darwin_x86.go + osSupportsAVX512 = osSupportsAVX && darwinSupportsAVX512() } else { // Check if OPMASK and ZMM registers have OS support. osSupportsAVX512 = osSupportsAVX && isSet(5, eax) && isSet(6, eax) && isSet(7, eax) diff --git a/vendor/golang.org/x/sys/cpu/syscall_darwin_x86_gc.go b/vendor/golang.org/x/sys/cpu/syscall_darwin_x86_gc.go new file mode 100644 index 0000000000..4d0888b0c0 --- /dev/null +++ b/vendor/golang.org/x/sys/cpu/syscall_darwin_x86_gc.go @@ -0,0 +1,98 @@ +// Copyright 2024 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Minimal copy of x/sys/unix so the cpu package can make a +// system call on Darwin without depending on x/sys/unix. + +//go:build darwin && amd64 && gc + +package cpu + +import ( + "syscall" + "unsafe" +) + +type _C_int int32 + +// adapted from unix.Uname() at x/sys/unix/syscall_darwin.go L419 +func darwinOSRelease(release *[256]byte) error { + // from x/sys/unix/zerrors_openbsd_amd64.go + const ( + CTL_KERN = 0x1 + KERN_OSRELEASE = 0x2 + ) + + mib := []_C_int{CTL_KERN, KERN_OSRELEASE} + n := unsafe.Sizeof(*release) + + return sysctl(mib, &release[0], &n, nil, 0) +} + +type Errno = syscall.Errno + +var _zero uintptr // Single-word zero for use when we need a valid pointer to 0 bytes. + +// from x/sys/unix/zsyscall_darwin_amd64.go L791-807 +func sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) error { + var _p0 unsafe.Pointer + if len(mib) > 0 { + _p0 = unsafe.Pointer(&mib[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + if _, _, err := syscall_syscall6( + libc_sysctl_trampoline_addr, + uintptr(_p0), + uintptr(len(mib)), + uintptr(unsafe.Pointer(old)), + uintptr(unsafe.Pointer(oldlen)), + uintptr(unsafe.Pointer(new)), + uintptr(newlen), + ); err != 0 { + return err + } + + return nil +} + +var libc_sysctl_trampoline_addr uintptr + +// adapted from internal/cpu/cpu_arm64_darwin.go +func darwinSysctlEnabled(name []byte) bool { + out := int32(0) + nout := unsafe.Sizeof(out) + if ret := sysctlbyname(&name[0], (*byte)(unsafe.Pointer(&out)), &nout, nil, 0); ret != nil { + return false + } + return out > 0 +} + +//go:cgo_import_dynamic libc_sysctl sysctl "/usr/lib/libSystem.B.dylib" + +var libc_sysctlbyname_trampoline_addr uintptr + +// adapted from runtime/sys_darwin.go in the pattern of sysctl() above, as defined in x/sys/unix +func sysctlbyname(name *byte, old *byte, oldlen *uintptr, new *byte, newlen uintptr) error { + if _, _, err := syscall_syscall6( + libc_sysctlbyname_trampoline_addr, + uintptr(unsafe.Pointer(name)), + uintptr(unsafe.Pointer(old)), + uintptr(unsafe.Pointer(oldlen)), + uintptr(unsafe.Pointer(new)), + uintptr(newlen), + 0, + ); err != 0 { + return err + } + + return nil +} + +//go:cgo_import_dynamic libc_sysctlbyname sysctlbyname "/usr/lib/libSystem.B.dylib" + +// Implemented in the runtime package (runtime/sys_darwin.go) +func syscall_syscall6(fn, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err Errno) + +//go:linkname syscall_syscall6 syscall.syscall6 diff --git a/vendor/golang.org/x/sys/unix/README.md b/vendor/golang.org/x/sys/unix/README.md index 7d3c060e12..6e08a76a71 100644 --- a/vendor/golang.org/x/sys/unix/README.md +++ b/vendor/golang.org/x/sys/unix/README.md @@ -156,7 +156,7 @@ from the generated architecture-specific files listed below, and merge these into a common file for each OS. The merge is performed in the following steps: -1. Construct the set of common code that is idential in all architecture-specific files. +1. Construct the set of common code that is identical in all architecture-specific files. 2. Write this common code to the merged file. 3. Remove the common code from all architecture-specific files. diff --git a/vendor/golang.org/x/sys/unix/ioctl_linux.go b/vendor/golang.org/x/sys/unix/ioctl_linux.go index dbe680eab8..7ca4fa12aa 100644 --- a/vendor/golang.org/x/sys/unix/ioctl_linux.go +++ b/vendor/golang.org/x/sys/unix/ioctl_linux.go @@ -58,6 +58,102 @@ func IoctlGetEthtoolDrvinfo(fd int, ifname string) (*EthtoolDrvinfo, error) { return &value, err } +// IoctlGetEthtoolTsInfo fetches ethtool timestamping and PHC +// association for the network device specified by ifname. +func IoctlGetEthtoolTsInfo(fd int, ifname string) (*EthtoolTsInfo, error) { + ifr, err := NewIfreq(ifname) + if err != nil { + return nil, err + } + + value := EthtoolTsInfo{Cmd: ETHTOOL_GET_TS_INFO} + ifrd := ifr.withData(unsafe.Pointer(&value)) + + err = ioctlIfreqData(fd, SIOCETHTOOL, &ifrd) + return &value, err +} + +// IoctlGetHwTstamp retrieves the hardware timestamping configuration +// for the network device specified by ifname. +func IoctlGetHwTstamp(fd int, ifname string) (*HwTstampConfig, error) { + ifr, err := NewIfreq(ifname) + if err != nil { + return nil, err + } + + value := HwTstampConfig{} + ifrd := ifr.withData(unsafe.Pointer(&value)) + + err = ioctlIfreqData(fd, SIOCGHWTSTAMP, &ifrd) + return &value, err +} + +// IoctlSetHwTstamp updates the hardware timestamping configuration for +// the network device specified by ifname. +func IoctlSetHwTstamp(fd int, ifname string, cfg *HwTstampConfig) error { + ifr, err := NewIfreq(ifname) + if err != nil { + return err + } + ifrd := ifr.withData(unsafe.Pointer(cfg)) + return ioctlIfreqData(fd, SIOCSHWTSTAMP, &ifrd) +} + +// FdToClockID derives the clock ID from the file descriptor number +// - see clock_gettime(3), FD_TO_CLOCKID macros. The resulting ID is +// suitable for system calls like ClockGettime. +func FdToClockID(fd int) int32 { return int32((int(^fd) << 3) | 3) } + +// IoctlPtpClockGetcaps returns the description of a given PTP device. +func IoctlPtpClockGetcaps(fd int) (*PtpClockCaps, error) { + var value PtpClockCaps + err := ioctlPtr(fd, PTP_CLOCK_GETCAPS2, unsafe.Pointer(&value)) + return &value, err +} + +// IoctlPtpSysOffsetPrecise returns a description of the clock +// offset compared to the system clock. +func IoctlPtpSysOffsetPrecise(fd int) (*PtpSysOffsetPrecise, error) { + var value PtpSysOffsetPrecise + err := ioctlPtr(fd, PTP_SYS_OFFSET_PRECISE2, unsafe.Pointer(&value)) + return &value, err +} + +// IoctlPtpSysOffsetExtended returns an extended description of the +// clock offset compared to the system clock. The samples parameter +// specifies the desired number of measurements. +func IoctlPtpSysOffsetExtended(fd int, samples uint) (*PtpSysOffsetExtended, error) { + value := PtpSysOffsetExtended{Samples: uint32(samples)} + err := ioctlPtr(fd, PTP_SYS_OFFSET_EXTENDED2, unsafe.Pointer(&value)) + return &value, err +} + +// IoctlPtpPinGetfunc returns the configuration of the specified +// I/O pin on given PTP device. +func IoctlPtpPinGetfunc(fd int, index uint) (*PtpPinDesc, error) { + value := PtpPinDesc{Index: uint32(index)} + err := ioctlPtr(fd, PTP_PIN_GETFUNC2, unsafe.Pointer(&value)) + return &value, err +} + +// IoctlPtpPinSetfunc updates configuration of the specified PTP +// I/O pin. +func IoctlPtpPinSetfunc(fd int, pd *PtpPinDesc) error { + return ioctlPtr(fd, PTP_PIN_SETFUNC2, unsafe.Pointer(pd)) +} + +// IoctlPtpPeroutRequest configures the periodic output mode of the +// PTP I/O pins. +func IoctlPtpPeroutRequest(fd int, r *PtpPeroutRequest) error { + return ioctlPtr(fd, PTP_PEROUT_REQUEST2, unsafe.Pointer(r)) +} + +// IoctlPtpExttsRequest configures the external timestamping mode +// of the PTP I/O pins. +func IoctlPtpExttsRequest(fd int, r *PtpExttsRequest) error { + return ioctlPtr(fd, PTP_EXTTS_REQUEST2, unsafe.Pointer(r)) +} + // IoctlGetWatchdogInfo fetches information about a watchdog device from the // Linux watchdog API. For more information, see: // https://www.kernel.org/doc/html/latest/watchdog/watchdog-api.html. diff --git a/vendor/golang.org/x/sys/unix/mkerrors.sh b/vendor/golang.org/x/sys/unix/mkerrors.sh index e14b766a32..6ab02b6c31 100644 --- a/vendor/golang.org/x/sys/unix/mkerrors.sh +++ b/vendor/golang.org/x/sys/unix/mkerrors.sh @@ -158,6 +158,16 @@ includes_Linux=' #endif #define _GNU_SOURCE +// See the description in unix/linux/types.go +#if defined(__ARM_EABI__) || \ + (defined(__mips__) && (_MIPS_SIM == _ABIO32)) || \ + (defined(__powerpc__) && (!defined(__powerpc64__))) +# ifdef _TIME_BITS +# undef _TIME_BITS +# endif +# define _TIME_BITS 32 +#endif + // is broken on powerpc64, as it fails to include definitions of // these structures. We just include them copied from . #if defined(__powerpc__) @@ -256,6 +266,7 @@ struct ltchars { #include #include #include +#include #include #include #include @@ -527,6 +538,7 @@ ccflags="$@" $2 ~ /^(AF|SOCK|SO|SOL|IPPROTO|IP|IPV6|TCP|MCAST|EVFILT|NOTE|SHUT|PROT|MAP|MREMAP|MFD|T?PACKET|MSG|SCM|MCL|DT|MADV|PR|LOCAL|TCPOPT|UDP)_/ || $2 ~ /^NFC_(GENL|PROTO|COMM|RF|SE|DIRECTION|LLCP|SOCKPROTO)_/ || $2 ~ /^NFC_.*_(MAX)?SIZE$/ || + $2 ~ /^PTP_/ || $2 ~ /^RAW_PAYLOAD_/ || $2 ~ /^[US]F_/ || $2 ~ /^TP_STATUS_/ || @@ -656,7 +668,7 @@ errors=$( signals=$( echo '#include ' | $CC -x c - -E -dM $ccflags | awk '$1=="#define" && $2 ~ /^SIG[A-Z0-9]+$/ { print $2 }' | - grep -v 'SIGSTKSIZE\|SIGSTKSZ\|SIGRT\|SIGMAX64' | + grep -E -v '(SIGSTKSIZE|SIGSTKSZ|SIGRT|SIGMAX64)' | sort ) @@ -666,7 +678,7 @@ echo '#include ' | $CC -x c - -E -dM $ccflags | sort >_error.grep echo '#include ' | $CC -x c - -E -dM $ccflags | awk '$1=="#define" && $2 ~ /^SIG[A-Z0-9]+$/ { print "^\t" $2 "[ \t]*=" }' | - grep -v 'SIGSTKSIZE\|SIGSTKSZ\|SIGRT\|SIGMAX64' | + grep -E -v '(SIGSTKSIZE|SIGSTKSZ|SIGRT|SIGMAX64)' | sort >_signal.grep echo '// mkerrors.sh' "$@" diff --git a/vendor/golang.org/x/sys/unix/syscall_aix.go b/vendor/golang.org/x/sys/unix/syscall_aix.go index 67ce6cef2d..6f15ba1eaf 100644 --- a/vendor/golang.org/x/sys/unix/syscall_aix.go +++ b/vendor/golang.org/x/sys/unix/syscall_aix.go @@ -360,7 +360,7 @@ func Wait4(pid int, wstatus *WaitStatus, options int, rusage *Rusage) (wpid int, var status _C_int var r Pid_t err = ERESTART - // AIX wait4 may return with ERESTART errno, while the processus is still + // AIX wait4 may return with ERESTART errno, while the process is still // active. for err == ERESTART { r, err = wait4(Pid_t(pid), &status, options, rusage) diff --git a/vendor/golang.org/x/sys/unix/syscall_linux.go b/vendor/golang.org/x/sys/unix/syscall_linux.go index 3f1d3d4cb2..230a94549a 100644 --- a/vendor/golang.org/x/sys/unix/syscall_linux.go +++ b/vendor/golang.org/x/sys/unix/syscall_linux.go @@ -1295,6 +1295,48 @@ func GetsockoptTCPInfo(fd, level, opt int) (*TCPInfo, error) { return &value, err } +// GetsockoptTCPCCVegasInfo returns algorithm specific congestion control information for a socket using the "vegas" +// algorithm. +// +// The socket's congestion control algorighm can be retrieved via [GetsockoptString] with the [TCP_CONGESTION] option: +// +// algo, err := unix.GetsockoptString(fd, unix.IPPROTO_TCP, unix.TCP_CONGESTION) +func GetsockoptTCPCCVegasInfo(fd, level, opt int) (*TCPVegasInfo, error) { + var value [SizeofTCPCCInfo / 4]uint32 // ensure proper alignment + vallen := _Socklen(SizeofTCPCCInfo) + err := getsockopt(fd, level, opt, unsafe.Pointer(&value[0]), &vallen) + out := (*TCPVegasInfo)(unsafe.Pointer(&value[0])) + return out, err +} + +// GetsockoptTCPCCDCTCPInfo returns algorithm specific congestion control information for a socket using the "dctp" +// algorithm. +// +// The socket's congestion control algorighm can be retrieved via [GetsockoptString] with the [TCP_CONGESTION] option: +// +// algo, err := unix.GetsockoptString(fd, unix.IPPROTO_TCP, unix.TCP_CONGESTION) +func GetsockoptTCPCCDCTCPInfo(fd, level, opt int) (*TCPDCTCPInfo, error) { + var value [SizeofTCPCCInfo / 4]uint32 // ensure proper alignment + vallen := _Socklen(SizeofTCPCCInfo) + err := getsockopt(fd, level, opt, unsafe.Pointer(&value[0]), &vallen) + out := (*TCPDCTCPInfo)(unsafe.Pointer(&value[0])) + return out, err +} + +// GetsockoptTCPCCBBRInfo returns algorithm specific congestion control information for a socket using the "bbr" +// algorithm. +// +// The socket's congestion control algorighm can be retrieved via [GetsockoptString] with the [TCP_CONGESTION] option: +// +// algo, err := unix.GetsockoptString(fd, unix.IPPROTO_TCP, unix.TCP_CONGESTION) +func GetsockoptTCPCCBBRInfo(fd, level, opt int) (*TCPBBRInfo, error) { + var value [SizeofTCPCCInfo / 4]uint32 // ensure proper alignment + vallen := _Socklen(SizeofTCPCCInfo) + err := getsockopt(fd, level, opt, unsafe.Pointer(&value[0]), &vallen) + out := (*TCPBBRInfo)(unsafe.Pointer(&value[0])) + return out, err +} + // GetsockoptString returns the string value of the socket option opt for the // socket associated with fd at the given socket level. func GetsockoptString(fd, level, opt int) (string, error) { @@ -1818,6 +1860,7 @@ func Sendfile(outfd int, infd int, offset *int64, count int) (written int, err e //sys ClockAdjtime(clockid int32, buf *Timex) (state int, err error) //sys ClockGetres(clockid int32, res *Timespec) (err error) //sys ClockGettime(clockid int32, time *Timespec) (err error) +//sys ClockSettime(clockid int32, time *Timespec) (err error) //sys ClockNanosleep(clockid int32, flags int, request *Timespec, remain *Timespec) (err error) //sys Close(fd int) (err error) //sys CloseRange(first uint, last uint, flags uint) (err error) @@ -1959,7 +2002,26 @@ func Getpgrp() (pid int) { //sysnb Getpid() (pid int) //sysnb Getppid() (ppid int) //sys Getpriority(which int, who int) (prio int, err error) -//sys Getrandom(buf []byte, flags int) (n int, err error) + +func Getrandom(buf []byte, flags int) (n int, err error) { + vdsoRet, supported := vgetrandom(buf, uint32(flags)) + if supported { + if vdsoRet < 0 { + return 0, errnoErr(syscall.Errno(-vdsoRet)) + } + return vdsoRet, nil + } + var p *byte + if len(buf) > 0 { + p = &buf[0] + } + r, _, e := Syscall(SYS_GETRANDOM, uintptr(unsafe.Pointer(p)), uintptr(len(buf)), uintptr(flags)) + if e != 0 { + return 0, errnoErr(e) + } + return int(r), nil +} + //sysnb Getrusage(who int, rusage *Rusage) (err error) //sysnb Getsid(pid int) (sid int, err error) //sysnb Gettid() (tid int) diff --git a/vendor/golang.org/x/sys/unix/syscall_linux_arm64.go b/vendor/golang.org/x/sys/unix/syscall_linux_arm64.go index cf2ee6c75e..745e5c7e6c 100644 --- a/vendor/golang.org/x/sys/unix/syscall_linux_arm64.go +++ b/vendor/golang.org/x/sys/unix/syscall_linux_arm64.go @@ -182,3 +182,5 @@ func KexecFileLoad(kernelFd int, initrdFd int, cmdline string, flags int) error } return kexecFileLoad(kernelFd, initrdFd, cmdlineLen, cmdline, flags) } + +const SYS_FSTATAT = SYS_NEWFSTATAT diff --git a/vendor/golang.org/x/sys/unix/syscall_linux_loong64.go b/vendor/golang.org/x/sys/unix/syscall_linux_loong64.go index 3d0e98451f..dd2262a407 100644 --- a/vendor/golang.org/x/sys/unix/syscall_linux_loong64.go +++ b/vendor/golang.org/x/sys/unix/syscall_linux_loong64.go @@ -214,3 +214,5 @@ func KexecFileLoad(kernelFd int, initrdFd int, cmdline string, flags int) error } return kexecFileLoad(kernelFd, initrdFd, cmdlineLen, cmdline, flags) } + +const SYS_FSTATAT = SYS_NEWFSTATAT diff --git a/vendor/golang.org/x/sys/unix/syscall_linux_riscv64.go b/vendor/golang.org/x/sys/unix/syscall_linux_riscv64.go index 6f5a288944..8cf3670bda 100644 --- a/vendor/golang.org/x/sys/unix/syscall_linux_riscv64.go +++ b/vendor/golang.org/x/sys/unix/syscall_linux_riscv64.go @@ -187,3 +187,5 @@ func RISCVHWProbe(pairs []RISCVHWProbePairs, set *CPUSet, flags uint) (err error } return riscvHWProbe(pairs, setSize, set, flags) } + +const SYS_FSTATAT = SYS_NEWFSTATAT diff --git a/vendor/golang.org/x/sys/unix/syscall_zos_s390x.go b/vendor/golang.org/x/sys/unix/syscall_zos_s390x.go index 312ae6ac1d..7bf5c04bb0 100644 --- a/vendor/golang.org/x/sys/unix/syscall_zos_s390x.go +++ b/vendor/golang.org/x/sys/unix/syscall_zos_s390x.go @@ -768,6 +768,15 @@ func Munmap(b []byte) (err error) { return mapper.Munmap(b) } +func MmapPtr(fd int, offset int64, addr unsafe.Pointer, length uintptr, prot int, flags int) (ret unsafe.Pointer, err error) { + xaddr, err := mapper.mmap(uintptr(addr), length, prot, flags, fd, offset) + return unsafe.Pointer(xaddr), err +} + +func MunmapPtr(addr unsafe.Pointer, length uintptr) (err error) { + return mapper.munmap(uintptr(addr), length) +} + //sys Gethostname(buf []byte) (err error) = SYS___GETHOSTNAME_A //sysnb Getgid() (gid int) //sysnb Getpid() (pid int) @@ -816,10 +825,10 @@ func Lstat(path string, stat *Stat_t) (err error) { // for checking symlinks begins with $VERSION/ $SYSNAME/ $SYSSYMR/ $SYSSYMA/ func isSpecialPath(path []byte) (v bool) { var special = [4][8]byte{ - [8]byte{'V', 'E', 'R', 'S', 'I', 'O', 'N', '/'}, - [8]byte{'S', 'Y', 'S', 'N', 'A', 'M', 'E', '/'}, - [8]byte{'S', 'Y', 'S', 'S', 'Y', 'M', 'R', '/'}, - [8]byte{'S', 'Y', 'S', 'S', 'Y', 'M', 'A', '/'}} + {'V', 'E', 'R', 'S', 'I', 'O', 'N', '/'}, + {'S', 'Y', 'S', 'N', 'A', 'M', 'E', '/'}, + {'S', 'Y', 'S', 'S', 'Y', 'M', 'R', '/'}, + {'S', 'Y', 'S', 'S', 'Y', 'M', 'A', '/'}} var i, j int for i = 0; i < len(special); i++ { @@ -3115,3 +3124,90 @@ func legacy_Mkfifoat(dirfd int, path string, mode uint32) (err error) { //sys Posix_openpt(oflag int) (fd int, err error) = SYS_POSIX_OPENPT //sys Grantpt(fildes int) (rc int, err error) = SYS_GRANTPT //sys Unlockpt(fildes int) (rc int, err error) = SYS_UNLOCKPT + +func fcntlAsIs(fd uintptr, cmd int, arg uintptr) (val int, err error) { + runtime.EnterSyscall() + r0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_FCNTL<<4, uintptr(fd), uintptr(cmd), arg) + runtime.ExitSyscall() + val = int(r0) + if int64(r0) == -1 { + err = errnoErr2(e1, e2) + } + return +} + +func Fcntl(fd uintptr, cmd int, op interface{}) (ret int, err error) { + switch op.(type) { + case *Flock_t: + err = FcntlFlock(fd, cmd, op.(*Flock_t)) + if err != nil { + ret = -1 + } + return + case int: + return FcntlInt(fd, cmd, op.(int)) + case *F_cnvrt: + return fcntlAsIs(fd, cmd, uintptr(unsafe.Pointer(op.(*F_cnvrt)))) + case unsafe.Pointer: + return fcntlAsIs(fd, cmd, uintptr(op.(unsafe.Pointer))) + default: + return -1, EINVAL + } + return +} + +func Sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) { + if raceenabled { + raceReleaseMerge(unsafe.Pointer(&ioSync)) + } + return sendfile(outfd, infd, offset, count) +} + +func sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) { + // TODO: use LE call instead if the call is implemented + originalOffset, err := Seek(infd, 0, SEEK_CUR) + if err != nil { + return -1, err + } + //start reading data from in_fd + if offset != nil { + _, err := Seek(infd, *offset, SEEK_SET) + if err != nil { + return -1, err + } + } + + buf := make([]byte, count) + readBuf := make([]byte, 0) + var n int = 0 + for i := 0; i < count; i += n { + n, err := Read(infd, buf) + if n == 0 { + if err != nil { + return -1, err + } else { // EOF + break + } + } + readBuf = append(readBuf, buf...) + buf = buf[0:0] + } + + n2, err := Write(outfd, readBuf) + if err != nil { + return -1, err + } + + //When sendfile() returns, this variable will be set to the + // offset of the byte following the last byte that was read. + if offset != nil { + *offset = *offset + int64(n) + // If offset is not NULL, then sendfile() does not modify the file + // offset of in_fd + _, err := Seek(infd, originalOffset, SEEK_SET) + if err != nil { + return -1, err + } + } + return n2, nil +} diff --git a/vendor/golang.org/x/sys/unix/vgetrandom_linux.go b/vendor/golang.org/x/sys/unix/vgetrandom_linux.go new file mode 100644 index 0000000000..07ac8e09d1 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/vgetrandom_linux.go @@ -0,0 +1,13 @@ +// Copyright 2024 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:build linux && go1.24 + +package unix + +import _ "unsafe" + +//go:linkname vgetrandom runtime.vgetrandom +//go:noescape +func vgetrandom(p []byte, flags uint32) (ret int, supported bool) diff --git a/vendor/golang.org/x/sys/unix/vgetrandom_unsupported.go b/vendor/golang.org/x/sys/unix/vgetrandom_unsupported.go new file mode 100644 index 0000000000..297e97bce9 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/vgetrandom_unsupported.go @@ -0,0 +1,11 @@ +// Copyright 2024 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:build !linux || !go1.24 + +package unix + +func vgetrandom(p []byte, flags uint32) (ret int, supported bool) { + return -1, false +} diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux.go b/vendor/golang.org/x/sys/unix/zerrors_linux.go index 01a70b2463..6ebc48b3fe 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux.go @@ -321,6 +321,9 @@ const ( AUDIT_INTEGRITY_STATUS = 0x70a AUDIT_IPC = 0x517 AUDIT_IPC_SET_PERM = 0x51f + AUDIT_IPE_ACCESS = 0x58c + AUDIT_IPE_CONFIG_CHANGE = 0x58d + AUDIT_IPE_POLICY_LOAD = 0x58e AUDIT_KERNEL = 0x7d0 AUDIT_KERNEL_OTHER = 0x524 AUDIT_KERN_MODULE = 0x532 @@ -489,12 +492,14 @@ const ( BPF_F_ID = 0x20 BPF_F_NETFILTER_IP_DEFRAG = 0x1 BPF_F_QUERY_EFFECTIVE = 0x1 + BPF_F_REDIRECT_FLAGS = 0x19 BPF_F_REPLACE = 0x4 BPF_F_SLEEPABLE = 0x10 BPF_F_STRICT_ALIGNMENT = 0x1 BPF_F_TEST_REG_INVARIANTS = 0x80 BPF_F_TEST_RND_HI32 = 0x4 BPF_F_TEST_RUN_ON_CPU = 0x1 + BPF_F_TEST_SKB_CHECKSUM_COMPLETE = 0x4 BPF_F_TEST_STATE_FREQ = 0x8 BPF_F_TEST_XDP_LIVE_FRAMES = 0x2 BPF_F_XDP_DEV_BOUND_ONLY = 0x40 @@ -1165,6 +1170,7 @@ const ( EXTA = 0xe EXTB = 0xf F2FS_SUPER_MAGIC = 0xf2f52010 + FALLOC_FL_ALLOCATE_RANGE = 0x0 FALLOC_FL_COLLAPSE_RANGE = 0x8 FALLOC_FL_INSERT_RANGE = 0x20 FALLOC_FL_KEEP_SIZE = 0x1 @@ -1798,6 +1804,8 @@ const ( LANDLOCK_ACCESS_NET_BIND_TCP = 0x1 LANDLOCK_ACCESS_NET_CONNECT_TCP = 0x2 LANDLOCK_CREATE_RULESET_VERSION = 0x1 + LANDLOCK_SCOPE_ABSTRACT_UNIX_SOCKET = 0x1 + LANDLOCK_SCOPE_SIGNAL = 0x2 LINUX_REBOOT_CMD_CAD_OFF = 0x0 LINUX_REBOOT_CMD_CAD_ON = 0x89abcdef LINUX_REBOOT_CMD_HALT = 0xcdef0123 @@ -1922,6 +1930,8 @@ const ( MNT_EXPIRE = 0x4 MNT_FORCE = 0x1 MNT_ID_REQ_SIZE_VER0 = 0x18 + MNT_ID_REQ_SIZE_VER1 = 0x20 + MNT_NS_INFO_SIZE_VER0 = 0x10 MODULE_INIT_COMPRESSED_FILE = 0x4 MODULE_INIT_IGNORE_MODVERSIONS = 0x1 MODULE_INIT_IGNORE_VERMAGIC = 0x2 @@ -2187,7 +2197,7 @@ const ( NFT_REG_SIZE = 0x10 NFT_REJECT_ICMPX_MAX = 0x3 NFT_RT_MAX = 0x4 - NFT_SECMARK_CTX_MAXLEN = 0x100 + NFT_SECMARK_CTX_MAXLEN = 0x1000 NFT_SET_MAXNAMELEN = 0x100 NFT_SOCKET_MAX = 0x3 NFT_TABLE_F_MASK = 0x7 @@ -2356,9 +2366,11 @@ const ( PERF_MEM_LVLNUM_IO = 0xa PERF_MEM_LVLNUM_L1 = 0x1 PERF_MEM_LVLNUM_L2 = 0x2 + PERF_MEM_LVLNUM_L2_MHB = 0x5 PERF_MEM_LVLNUM_L3 = 0x3 PERF_MEM_LVLNUM_L4 = 0x4 PERF_MEM_LVLNUM_LFB = 0xc + PERF_MEM_LVLNUM_MSC = 0x6 PERF_MEM_LVLNUM_NA = 0xf PERF_MEM_LVLNUM_PMEM = 0xe PERF_MEM_LVLNUM_RAM = 0xd @@ -2431,6 +2443,7 @@ const ( PRIO_PGRP = 0x1 PRIO_PROCESS = 0x0 PRIO_USER = 0x2 + PROCFS_IOCTL_MAGIC = 'f' PROC_SUPER_MAGIC = 0x9fa0 PROT_EXEC = 0x4 PROT_GROWSDOWN = 0x1000000 @@ -2620,6 +2633,28 @@ const ( PR_UNALIGN_NOPRINT = 0x1 PR_UNALIGN_SIGBUS = 0x2 PSTOREFS_MAGIC = 0x6165676c + PTP_CLK_MAGIC = '=' + PTP_ENABLE_FEATURE = 0x1 + PTP_EXTTS_EDGES = 0x6 + PTP_EXTTS_EVENT_VALID = 0x1 + PTP_EXTTS_V1_VALID_FLAGS = 0x7 + PTP_EXTTS_VALID_FLAGS = 0x1f + PTP_EXT_OFFSET = 0x10 + PTP_FALLING_EDGE = 0x4 + PTP_MAX_SAMPLES = 0x19 + PTP_PEROUT_DUTY_CYCLE = 0x2 + PTP_PEROUT_ONE_SHOT = 0x1 + PTP_PEROUT_PHASE = 0x4 + PTP_PEROUT_V1_VALID_FLAGS = 0x0 + PTP_PEROUT_VALID_FLAGS = 0x7 + PTP_PIN_GETFUNC = 0xc0603d06 + PTP_PIN_GETFUNC2 = 0xc0603d0f + PTP_RISING_EDGE = 0x2 + PTP_STRICT_FLAGS = 0x8 + PTP_SYS_OFFSET_EXTENDED = 0xc4c03d09 + PTP_SYS_OFFSET_EXTENDED2 = 0xc4c03d12 + PTP_SYS_OFFSET_PRECISE = 0xc0403d08 + PTP_SYS_OFFSET_PRECISE2 = 0xc0403d11 PTRACE_ATTACH = 0x10 PTRACE_CONT = 0x7 PTRACE_DETACH = 0x11 @@ -2933,15 +2968,17 @@ const ( RUSAGE_SELF = 0x0 RUSAGE_THREAD = 0x1 RWF_APPEND = 0x10 + RWF_ATOMIC = 0x40 RWF_DSYNC = 0x2 RWF_HIPRI = 0x1 RWF_NOAPPEND = 0x20 RWF_NOWAIT = 0x8 - RWF_SUPPORTED = 0x3f + RWF_SUPPORTED = 0x7f RWF_SYNC = 0x4 RWF_WRITE_LIFE_NOT_SET = 0x0 SCHED_BATCH = 0x3 SCHED_DEADLINE = 0x6 + SCHED_EXT = 0x7 SCHED_FIFO = 0x1 SCHED_FLAG_ALL = 0x7f SCHED_FLAG_DL_OVERRUN = 0x4 @@ -3210,6 +3247,7 @@ const ( STATX_ATTR_MOUNT_ROOT = 0x2000 STATX_ATTR_NODUMP = 0x40 STATX_ATTR_VERITY = 0x100000 + STATX_ATTR_WRITE_ATOMIC = 0x400000 STATX_BASIC_STATS = 0x7ff STATX_BLOCKS = 0x400 STATX_BTIME = 0x800 @@ -3226,6 +3264,7 @@ const ( STATX_SUBVOL = 0x8000 STATX_TYPE = 0x1 STATX_UID = 0x8 + STATX_WRITE_ATOMIC = 0x10000 STATX__RESERVED = 0x80000000 SYNC_FILE_RANGE_WAIT_AFTER = 0x4 SYNC_FILE_RANGE_WAIT_BEFORE = 0x1 @@ -3624,6 +3663,7 @@ const ( XDP_UMEM_PGOFF_COMPLETION_RING = 0x180000000 XDP_UMEM_PGOFF_FILL_RING = 0x100000000 XDP_UMEM_REG = 0x4 + XDP_UMEM_TX_METADATA_LEN = 0x4 XDP_UMEM_TX_SW_CSUM = 0x2 XDP_UMEM_UNALIGNED_CHUNK_FLAG = 0x1 XDP_USE_NEED_WAKEUP = 0x8 diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_386.go b/vendor/golang.org/x/sys/unix/zerrors_linux_386.go index 684a5168da..c0d45e3205 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_386.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_386.go @@ -109,6 +109,7 @@ const ( HIDIOCGRAWINFO = 0x80084803 HIDIOCGRDESC = 0x90044802 HIDIOCGRDESCSIZE = 0x80044801 + HIDIOCREVOKE = 0x4004480d HUPCL = 0x400 ICANON = 0x2 IEXTEN = 0x8000 @@ -153,9 +154,14 @@ const ( NFDBITS = 0x20 NLDLY = 0x100 NOFLSH = 0x80 + NS_GET_MNTNS_ID = 0x8008b705 NS_GET_NSTYPE = 0xb703 NS_GET_OWNER_UID = 0xb704 NS_GET_PARENT = 0xb702 + NS_GET_PID_FROM_PIDNS = 0x8004b706 + NS_GET_PID_IN_PIDNS = 0x8004b708 + NS_GET_TGID_FROM_PIDNS = 0x8004b707 + NS_GET_TGID_IN_PIDNS = 0x8004b709 NS_GET_USERNS = 0xb701 OLCUC = 0x2 ONLCR = 0x4 @@ -232,6 +238,20 @@ const ( PPPIOCUNBRIDGECHAN = 0x7434 PPPIOCXFERUNIT = 0x744e PR_SET_PTRACER_ANY = 0xffffffff + PTP_CLOCK_GETCAPS = 0x80503d01 + PTP_CLOCK_GETCAPS2 = 0x80503d0a + PTP_ENABLE_PPS = 0x40043d04 + PTP_ENABLE_PPS2 = 0x40043d0d + PTP_EXTTS_REQUEST = 0x40103d02 + PTP_EXTTS_REQUEST2 = 0x40103d0b + PTP_MASK_CLEAR_ALL = 0x3d13 + PTP_MASK_EN_SINGLE = 0x40043d14 + PTP_PEROUT_REQUEST = 0x40383d03 + PTP_PEROUT_REQUEST2 = 0x40383d0c + PTP_PIN_SETFUNC = 0x40603d07 + PTP_PIN_SETFUNC2 = 0x40603d10 + PTP_SYS_OFFSET = 0x43403d05 + PTP_SYS_OFFSET2 = 0x43403d0e PTRACE_GETFPREGS = 0xe PTRACE_GETFPXREGS = 0x12 PTRACE_GET_THREAD_AREA = 0x19 @@ -278,6 +298,8 @@ const ( RTC_WIE_ON = 0x700f RTC_WKALM_RD = 0x80287010 RTC_WKALM_SET = 0x4028700f + SCM_DEVMEM_DMABUF = 0x4f + SCM_DEVMEM_LINEAR = 0x4e SCM_TIMESTAMPING = 0x25 SCM_TIMESTAMPING_OPT_STATS = 0x36 SCM_TIMESTAMPING_PKTINFO = 0x3a @@ -316,6 +338,9 @@ const ( SO_CNX_ADVICE = 0x35 SO_COOKIE = 0x39 SO_DETACH_REUSEPORT_BPF = 0x44 + SO_DEVMEM_DMABUF = 0x4f + SO_DEVMEM_DONTNEED = 0x50 + SO_DEVMEM_LINEAR = 0x4e SO_DOMAIN = 0x27 SO_DONTROUTE = 0x5 SO_ERROR = 0x4 diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_amd64.go b/vendor/golang.org/x/sys/unix/zerrors_linux_amd64.go index 61d74b592d..c731d24f02 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_amd64.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_amd64.go @@ -109,6 +109,7 @@ const ( HIDIOCGRAWINFO = 0x80084803 HIDIOCGRDESC = 0x90044802 HIDIOCGRDESCSIZE = 0x80044801 + HIDIOCREVOKE = 0x4004480d HUPCL = 0x400 ICANON = 0x2 IEXTEN = 0x8000 @@ -153,9 +154,14 @@ const ( NFDBITS = 0x40 NLDLY = 0x100 NOFLSH = 0x80 + NS_GET_MNTNS_ID = 0x8008b705 NS_GET_NSTYPE = 0xb703 NS_GET_OWNER_UID = 0xb704 NS_GET_PARENT = 0xb702 + NS_GET_PID_FROM_PIDNS = 0x8004b706 + NS_GET_PID_IN_PIDNS = 0x8004b708 + NS_GET_TGID_FROM_PIDNS = 0x8004b707 + NS_GET_TGID_IN_PIDNS = 0x8004b709 NS_GET_USERNS = 0xb701 OLCUC = 0x2 ONLCR = 0x4 @@ -232,6 +238,20 @@ const ( PPPIOCUNBRIDGECHAN = 0x7434 PPPIOCXFERUNIT = 0x744e PR_SET_PTRACER_ANY = 0xffffffffffffffff + PTP_CLOCK_GETCAPS = 0x80503d01 + PTP_CLOCK_GETCAPS2 = 0x80503d0a + PTP_ENABLE_PPS = 0x40043d04 + PTP_ENABLE_PPS2 = 0x40043d0d + PTP_EXTTS_REQUEST = 0x40103d02 + PTP_EXTTS_REQUEST2 = 0x40103d0b + PTP_MASK_CLEAR_ALL = 0x3d13 + PTP_MASK_EN_SINGLE = 0x40043d14 + PTP_PEROUT_REQUEST = 0x40383d03 + PTP_PEROUT_REQUEST2 = 0x40383d0c + PTP_PIN_SETFUNC = 0x40603d07 + PTP_PIN_SETFUNC2 = 0x40603d10 + PTP_SYS_OFFSET = 0x43403d05 + PTP_SYS_OFFSET2 = 0x43403d0e PTRACE_ARCH_PRCTL = 0x1e PTRACE_GETFPREGS = 0xe PTRACE_GETFPXREGS = 0x12 @@ -279,6 +299,8 @@ const ( RTC_WIE_ON = 0x700f RTC_WKALM_RD = 0x80287010 RTC_WKALM_SET = 0x4028700f + SCM_DEVMEM_DMABUF = 0x4f + SCM_DEVMEM_LINEAR = 0x4e SCM_TIMESTAMPING = 0x25 SCM_TIMESTAMPING_OPT_STATS = 0x36 SCM_TIMESTAMPING_PKTINFO = 0x3a @@ -317,6 +339,9 @@ const ( SO_CNX_ADVICE = 0x35 SO_COOKIE = 0x39 SO_DETACH_REUSEPORT_BPF = 0x44 + SO_DEVMEM_DMABUF = 0x4f + SO_DEVMEM_DONTNEED = 0x50 + SO_DEVMEM_LINEAR = 0x4e SO_DOMAIN = 0x27 SO_DONTROUTE = 0x5 SO_ERROR = 0x4 diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_arm.go b/vendor/golang.org/x/sys/unix/zerrors_linux_arm.go index a28c9e3e89..680018a4a7 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_arm.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_arm.go @@ -108,6 +108,7 @@ const ( HIDIOCGRAWINFO = 0x80084803 HIDIOCGRDESC = 0x90044802 HIDIOCGRDESCSIZE = 0x80044801 + HIDIOCREVOKE = 0x4004480d HUPCL = 0x400 ICANON = 0x2 IEXTEN = 0x8000 @@ -150,9 +151,14 @@ const ( NFDBITS = 0x20 NLDLY = 0x100 NOFLSH = 0x80 + NS_GET_MNTNS_ID = 0x8008b705 NS_GET_NSTYPE = 0xb703 NS_GET_OWNER_UID = 0xb704 NS_GET_PARENT = 0xb702 + NS_GET_PID_FROM_PIDNS = 0x8004b706 + NS_GET_PID_IN_PIDNS = 0x8004b708 + NS_GET_TGID_FROM_PIDNS = 0x8004b707 + NS_GET_TGID_IN_PIDNS = 0x8004b709 NS_GET_USERNS = 0xb701 OLCUC = 0x2 ONLCR = 0x4 @@ -229,6 +235,20 @@ const ( PPPIOCUNBRIDGECHAN = 0x7434 PPPIOCXFERUNIT = 0x744e PR_SET_PTRACER_ANY = 0xffffffff + PTP_CLOCK_GETCAPS = 0x80503d01 + PTP_CLOCK_GETCAPS2 = 0x80503d0a + PTP_ENABLE_PPS = 0x40043d04 + PTP_ENABLE_PPS2 = 0x40043d0d + PTP_EXTTS_REQUEST = 0x40103d02 + PTP_EXTTS_REQUEST2 = 0x40103d0b + PTP_MASK_CLEAR_ALL = 0x3d13 + PTP_MASK_EN_SINGLE = 0x40043d14 + PTP_PEROUT_REQUEST = 0x40383d03 + PTP_PEROUT_REQUEST2 = 0x40383d0c + PTP_PIN_SETFUNC = 0x40603d07 + PTP_PIN_SETFUNC2 = 0x40603d10 + PTP_SYS_OFFSET = 0x43403d05 + PTP_SYS_OFFSET2 = 0x43403d0e PTRACE_GETCRUNCHREGS = 0x19 PTRACE_GETFDPIC = 0x1f PTRACE_GETFDPIC_EXEC = 0x0 @@ -284,6 +304,8 @@ const ( RTC_WIE_ON = 0x700f RTC_WKALM_RD = 0x80287010 RTC_WKALM_SET = 0x4028700f + SCM_DEVMEM_DMABUF = 0x4f + SCM_DEVMEM_LINEAR = 0x4e SCM_TIMESTAMPING = 0x25 SCM_TIMESTAMPING_OPT_STATS = 0x36 SCM_TIMESTAMPING_PKTINFO = 0x3a @@ -322,6 +344,9 @@ const ( SO_CNX_ADVICE = 0x35 SO_COOKIE = 0x39 SO_DETACH_REUSEPORT_BPF = 0x44 + SO_DEVMEM_DMABUF = 0x4f + SO_DEVMEM_DONTNEED = 0x50 + SO_DEVMEM_LINEAR = 0x4e SO_DOMAIN = 0x27 SO_DONTROUTE = 0x5 SO_ERROR = 0x4 diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_arm64.go b/vendor/golang.org/x/sys/unix/zerrors_linux_arm64.go index ab5d1fe8ea..a63909f308 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_arm64.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_arm64.go @@ -112,6 +112,7 @@ const ( HIDIOCGRAWINFO = 0x80084803 HIDIOCGRDESC = 0x90044802 HIDIOCGRDESCSIZE = 0x80044801 + HIDIOCREVOKE = 0x4004480d HUPCL = 0x400 ICANON = 0x2 IEXTEN = 0x8000 @@ -154,9 +155,14 @@ const ( NFDBITS = 0x40 NLDLY = 0x100 NOFLSH = 0x80 + NS_GET_MNTNS_ID = 0x8008b705 NS_GET_NSTYPE = 0xb703 NS_GET_OWNER_UID = 0xb704 NS_GET_PARENT = 0xb702 + NS_GET_PID_FROM_PIDNS = 0x8004b706 + NS_GET_PID_IN_PIDNS = 0x8004b708 + NS_GET_TGID_FROM_PIDNS = 0x8004b707 + NS_GET_TGID_IN_PIDNS = 0x8004b709 NS_GET_USERNS = 0xb701 OLCUC = 0x2 ONLCR = 0x4 @@ -200,6 +206,7 @@ const ( PERF_EVENT_IOC_SET_BPF = 0x40042408 PERF_EVENT_IOC_SET_FILTER = 0x40082406 PERF_EVENT_IOC_SET_OUTPUT = 0x2405 + POE_MAGIC = 0x504f4530 PPPIOCATTACH = 0x4004743d PPPIOCATTCHAN = 0x40047438 PPPIOCBRIDGECHAN = 0x40047435 @@ -235,6 +242,20 @@ const ( PROT_BTI = 0x10 PROT_MTE = 0x20 PR_SET_PTRACER_ANY = 0xffffffffffffffff + PTP_CLOCK_GETCAPS = 0x80503d01 + PTP_CLOCK_GETCAPS2 = 0x80503d0a + PTP_ENABLE_PPS = 0x40043d04 + PTP_ENABLE_PPS2 = 0x40043d0d + PTP_EXTTS_REQUEST = 0x40103d02 + PTP_EXTTS_REQUEST2 = 0x40103d0b + PTP_MASK_CLEAR_ALL = 0x3d13 + PTP_MASK_EN_SINGLE = 0x40043d14 + PTP_PEROUT_REQUEST = 0x40383d03 + PTP_PEROUT_REQUEST2 = 0x40383d0c + PTP_PIN_SETFUNC = 0x40603d07 + PTP_PIN_SETFUNC2 = 0x40603d10 + PTP_SYS_OFFSET = 0x43403d05 + PTP_SYS_OFFSET2 = 0x43403d0e PTRACE_PEEKMTETAGS = 0x21 PTRACE_POKEMTETAGS = 0x22 PTRACE_SYSEMU = 0x1f @@ -275,6 +296,8 @@ const ( RTC_WIE_ON = 0x700f RTC_WKALM_RD = 0x80287010 RTC_WKALM_SET = 0x4028700f + SCM_DEVMEM_DMABUF = 0x4f + SCM_DEVMEM_LINEAR = 0x4e SCM_TIMESTAMPING = 0x25 SCM_TIMESTAMPING_OPT_STATS = 0x36 SCM_TIMESTAMPING_PKTINFO = 0x3a @@ -313,6 +336,9 @@ const ( SO_CNX_ADVICE = 0x35 SO_COOKIE = 0x39 SO_DETACH_REUSEPORT_BPF = 0x44 + SO_DEVMEM_DMABUF = 0x4f + SO_DEVMEM_DONTNEED = 0x50 + SO_DEVMEM_LINEAR = 0x4e SO_DOMAIN = 0x27 SO_DONTROUTE = 0x5 SO_ERROR = 0x4 diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_loong64.go b/vendor/golang.org/x/sys/unix/zerrors_linux_loong64.go index c523090e7c..9b0a2573fe 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_loong64.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_loong64.go @@ -109,6 +109,7 @@ const ( HIDIOCGRAWINFO = 0x80084803 HIDIOCGRDESC = 0x90044802 HIDIOCGRDESCSIZE = 0x80044801 + HIDIOCREVOKE = 0x4004480d HUPCL = 0x400 ICANON = 0x2 IEXTEN = 0x8000 @@ -154,9 +155,14 @@ const ( NFDBITS = 0x40 NLDLY = 0x100 NOFLSH = 0x80 + NS_GET_MNTNS_ID = 0x8008b705 NS_GET_NSTYPE = 0xb703 NS_GET_OWNER_UID = 0xb704 NS_GET_PARENT = 0xb702 + NS_GET_PID_FROM_PIDNS = 0x8004b706 + NS_GET_PID_IN_PIDNS = 0x8004b708 + NS_GET_TGID_FROM_PIDNS = 0x8004b707 + NS_GET_TGID_IN_PIDNS = 0x8004b709 NS_GET_USERNS = 0xb701 OLCUC = 0x2 ONLCR = 0x4 @@ -233,6 +239,20 @@ const ( PPPIOCUNBRIDGECHAN = 0x7434 PPPIOCXFERUNIT = 0x744e PR_SET_PTRACER_ANY = 0xffffffffffffffff + PTP_CLOCK_GETCAPS = 0x80503d01 + PTP_CLOCK_GETCAPS2 = 0x80503d0a + PTP_ENABLE_PPS = 0x40043d04 + PTP_ENABLE_PPS2 = 0x40043d0d + PTP_EXTTS_REQUEST = 0x40103d02 + PTP_EXTTS_REQUEST2 = 0x40103d0b + PTP_MASK_CLEAR_ALL = 0x3d13 + PTP_MASK_EN_SINGLE = 0x40043d14 + PTP_PEROUT_REQUEST = 0x40383d03 + PTP_PEROUT_REQUEST2 = 0x40383d0c + PTP_PIN_SETFUNC = 0x40603d07 + PTP_PIN_SETFUNC2 = 0x40603d10 + PTP_SYS_OFFSET = 0x43403d05 + PTP_SYS_OFFSET2 = 0x43403d0e PTRACE_SYSEMU = 0x1f PTRACE_SYSEMU_SINGLESTEP = 0x20 RLIMIT_AS = 0x9 @@ -271,6 +291,8 @@ const ( RTC_WIE_ON = 0x700f RTC_WKALM_RD = 0x80287010 RTC_WKALM_SET = 0x4028700f + SCM_DEVMEM_DMABUF = 0x4f + SCM_DEVMEM_LINEAR = 0x4e SCM_TIMESTAMPING = 0x25 SCM_TIMESTAMPING_OPT_STATS = 0x36 SCM_TIMESTAMPING_PKTINFO = 0x3a @@ -309,6 +331,9 @@ const ( SO_CNX_ADVICE = 0x35 SO_COOKIE = 0x39 SO_DETACH_REUSEPORT_BPF = 0x44 + SO_DEVMEM_DMABUF = 0x4f + SO_DEVMEM_DONTNEED = 0x50 + SO_DEVMEM_LINEAR = 0x4e SO_DOMAIN = 0x27 SO_DONTROUTE = 0x5 SO_ERROR = 0x4 diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_mips.go b/vendor/golang.org/x/sys/unix/zerrors_linux_mips.go index 01e6ea7804..958e6e0645 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_mips.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_mips.go @@ -108,6 +108,7 @@ const ( HIDIOCGRAWINFO = 0x40084803 HIDIOCGRDESC = 0x50044802 HIDIOCGRDESCSIZE = 0x40044801 + HIDIOCREVOKE = 0x8004480d HUPCL = 0x400 ICANON = 0x2 IEXTEN = 0x100 @@ -150,9 +151,14 @@ const ( NFDBITS = 0x20 NLDLY = 0x100 NOFLSH = 0x80 + NS_GET_MNTNS_ID = 0x4008b705 NS_GET_NSTYPE = 0x2000b703 NS_GET_OWNER_UID = 0x2000b704 NS_GET_PARENT = 0x2000b702 + NS_GET_PID_FROM_PIDNS = 0x4004b706 + NS_GET_PID_IN_PIDNS = 0x4004b708 + NS_GET_TGID_FROM_PIDNS = 0x4004b707 + NS_GET_TGID_IN_PIDNS = 0x4004b709 NS_GET_USERNS = 0x2000b701 OLCUC = 0x2 ONLCR = 0x4 @@ -229,6 +235,20 @@ const ( PPPIOCUNBRIDGECHAN = 0x20007434 PPPIOCXFERUNIT = 0x2000744e PR_SET_PTRACER_ANY = 0xffffffff + PTP_CLOCK_GETCAPS = 0x40503d01 + PTP_CLOCK_GETCAPS2 = 0x40503d0a + PTP_ENABLE_PPS = 0x80043d04 + PTP_ENABLE_PPS2 = 0x80043d0d + PTP_EXTTS_REQUEST = 0x80103d02 + PTP_EXTTS_REQUEST2 = 0x80103d0b + PTP_MASK_CLEAR_ALL = 0x20003d13 + PTP_MASK_EN_SINGLE = 0x80043d14 + PTP_PEROUT_REQUEST = 0x80383d03 + PTP_PEROUT_REQUEST2 = 0x80383d0c + PTP_PIN_SETFUNC = 0x80603d07 + PTP_PIN_SETFUNC2 = 0x80603d10 + PTP_SYS_OFFSET = 0x83403d05 + PTP_SYS_OFFSET2 = 0x83403d0e PTRACE_GETFPREGS = 0xe PTRACE_GET_THREAD_AREA = 0x19 PTRACE_GET_THREAD_AREA_3264 = 0xc4 @@ -277,6 +297,8 @@ const ( RTC_WIE_ON = 0x2000700f RTC_WKALM_RD = 0x40287010 RTC_WKALM_SET = 0x8028700f + SCM_DEVMEM_DMABUF = 0x4f + SCM_DEVMEM_LINEAR = 0x4e SCM_TIMESTAMPING = 0x25 SCM_TIMESTAMPING_OPT_STATS = 0x36 SCM_TIMESTAMPING_PKTINFO = 0x3a @@ -315,6 +337,9 @@ const ( SO_CNX_ADVICE = 0x35 SO_COOKIE = 0x39 SO_DETACH_REUSEPORT_BPF = 0x44 + SO_DEVMEM_DMABUF = 0x4f + SO_DEVMEM_DONTNEED = 0x50 + SO_DEVMEM_LINEAR = 0x4e SO_DOMAIN = 0x1029 SO_DONTROUTE = 0x10 SO_ERROR = 0x1007 diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_mips64.go b/vendor/golang.org/x/sys/unix/zerrors_linux_mips64.go index 7aa610b1e7..50c7f25bd1 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_mips64.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_mips64.go @@ -108,6 +108,7 @@ const ( HIDIOCGRAWINFO = 0x40084803 HIDIOCGRDESC = 0x50044802 HIDIOCGRDESCSIZE = 0x40044801 + HIDIOCREVOKE = 0x8004480d HUPCL = 0x400 ICANON = 0x2 IEXTEN = 0x100 @@ -150,9 +151,14 @@ const ( NFDBITS = 0x40 NLDLY = 0x100 NOFLSH = 0x80 + NS_GET_MNTNS_ID = 0x4008b705 NS_GET_NSTYPE = 0x2000b703 NS_GET_OWNER_UID = 0x2000b704 NS_GET_PARENT = 0x2000b702 + NS_GET_PID_FROM_PIDNS = 0x4004b706 + NS_GET_PID_IN_PIDNS = 0x4004b708 + NS_GET_TGID_FROM_PIDNS = 0x4004b707 + NS_GET_TGID_IN_PIDNS = 0x4004b709 NS_GET_USERNS = 0x2000b701 OLCUC = 0x2 ONLCR = 0x4 @@ -229,6 +235,20 @@ const ( PPPIOCUNBRIDGECHAN = 0x20007434 PPPIOCXFERUNIT = 0x2000744e PR_SET_PTRACER_ANY = 0xffffffffffffffff + PTP_CLOCK_GETCAPS = 0x40503d01 + PTP_CLOCK_GETCAPS2 = 0x40503d0a + PTP_ENABLE_PPS = 0x80043d04 + PTP_ENABLE_PPS2 = 0x80043d0d + PTP_EXTTS_REQUEST = 0x80103d02 + PTP_EXTTS_REQUEST2 = 0x80103d0b + PTP_MASK_CLEAR_ALL = 0x20003d13 + PTP_MASK_EN_SINGLE = 0x80043d14 + PTP_PEROUT_REQUEST = 0x80383d03 + PTP_PEROUT_REQUEST2 = 0x80383d0c + PTP_PIN_SETFUNC = 0x80603d07 + PTP_PIN_SETFUNC2 = 0x80603d10 + PTP_SYS_OFFSET = 0x83403d05 + PTP_SYS_OFFSET2 = 0x83403d0e PTRACE_GETFPREGS = 0xe PTRACE_GET_THREAD_AREA = 0x19 PTRACE_GET_THREAD_AREA_3264 = 0xc4 @@ -277,6 +297,8 @@ const ( RTC_WIE_ON = 0x2000700f RTC_WKALM_RD = 0x40287010 RTC_WKALM_SET = 0x8028700f + SCM_DEVMEM_DMABUF = 0x4f + SCM_DEVMEM_LINEAR = 0x4e SCM_TIMESTAMPING = 0x25 SCM_TIMESTAMPING_OPT_STATS = 0x36 SCM_TIMESTAMPING_PKTINFO = 0x3a @@ -315,6 +337,9 @@ const ( SO_CNX_ADVICE = 0x35 SO_COOKIE = 0x39 SO_DETACH_REUSEPORT_BPF = 0x44 + SO_DEVMEM_DMABUF = 0x4f + SO_DEVMEM_DONTNEED = 0x50 + SO_DEVMEM_LINEAR = 0x4e SO_DOMAIN = 0x1029 SO_DONTROUTE = 0x10 SO_ERROR = 0x1007 diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_mips64le.go b/vendor/golang.org/x/sys/unix/zerrors_linux_mips64le.go index 92af771b44..ced21d66d9 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_mips64le.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_mips64le.go @@ -108,6 +108,7 @@ const ( HIDIOCGRAWINFO = 0x40084803 HIDIOCGRDESC = 0x50044802 HIDIOCGRDESCSIZE = 0x40044801 + HIDIOCREVOKE = 0x8004480d HUPCL = 0x400 ICANON = 0x2 IEXTEN = 0x100 @@ -150,9 +151,14 @@ const ( NFDBITS = 0x40 NLDLY = 0x100 NOFLSH = 0x80 + NS_GET_MNTNS_ID = 0x4008b705 NS_GET_NSTYPE = 0x2000b703 NS_GET_OWNER_UID = 0x2000b704 NS_GET_PARENT = 0x2000b702 + NS_GET_PID_FROM_PIDNS = 0x4004b706 + NS_GET_PID_IN_PIDNS = 0x4004b708 + NS_GET_TGID_FROM_PIDNS = 0x4004b707 + NS_GET_TGID_IN_PIDNS = 0x4004b709 NS_GET_USERNS = 0x2000b701 OLCUC = 0x2 ONLCR = 0x4 @@ -229,6 +235,20 @@ const ( PPPIOCUNBRIDGECHAN = 0x20007434 PPPIOCXFERUNIT = 0x2000744e PR_SET_PTRACER_ANY = 0xffffffffffffffff + PTP_CLOCK_GETCAPS = 0x40503d01 + PTP_CLOCK_GETCAPS2 = 0x40503d0a + PTP_ENABLE_PPS = 0x80043d04 + PTP_ENABLE_PPS2 = 0x80043d0d + PTP_EXTTS_REQUEST = 0x80103d02 + PTP_EXTTS_REQUEST2 = 0x80103d0b + PTP_MASK_CLEAR_ALL = 0x20003d13 + PTP_MASK_EN_SINGLE = 0x80043d14 + PTP_PEROUT_REQUEST = 0x80383d03 + PTP_PEROUT_REQUEST2 = 0x80383d0c + PTP_PIN_SETFUNC = 0x80603d07 + PTP_PIN_SETFUNC2 = 0x80603d10 + PTP_SYS_OFFSET = 0x83403d05 + PTP_SYS_OFFSET2 = 0x83403d0e PTRACE_GETFPREGS = 0xe PTRACE_GET_THREAD_AREA = 0x19 PTRACE_GET_THREAD_AREA_3264 = 0xc4 @@ -277,6 +297,8 @@ const ( RTC_WIE_ON = 0x2000700f RTC_WKALM_RD = 0x40287010 RTC_WKALM_SET = 0x8028700f + SCM_DEVMEM_DMABUF = 0x4f + SCM_DEVMEM_LINEAR = 0x4e SCM_TIMESTAMPING = 0x25 SCM_TIMESTAMPING_OPT_STATS = 0x36 SCM_TIMESTAMPING_PKTINFO = 0x3a @@ -315,6 +337,9 @@ const ( SO_CNX_ADVICE = 0x35 SO_COOKIE = 0x39 SO_DETACH_REUSEPORT_BPF = 0x44 + SO_DEVMEM_DMABUF = 0x4f + SO_DEVMEM_DONTNEED = 0x50 + SO_DEVMEM_LINEAR = 0x4e SO_DOMAIN = 0x1029 SO_DONTROUTE = 0x10 SO_ERROR = 0x1007 diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_mipsle.go b/vendor/golang.org/x/sys/unix/zerrors_linux_mipsle.go index b27ef5e6f1..226c044190 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_mipsle.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_mipsle.go @@ -108,6 +108,7 @@ const ( HIDIOCGRAWINFO = 0x40084803 HIDIOCGRDESC = 0x50044802 HIDIOCGRDESCSIZE = 0x40044801 + HIDIOCREVOKE = 0x8004480d HUPCL = 0x400 ICANON = 0x2 IEXTEN = 0x100 @@ -150,9 +151,14 @@ const ( NFDBITS = 0x20 NLDLY = 0x100 NOFLSH = 0x80 + NS_GET_MNTNS_ID = 0x4008b705 NS_GET_NSTYPE = 0x2000b703 NS_GET_OWNER_UID = 0x2000b704 NS_GET_PARENT = 0x2000b702 + NS_GET_PID_FROM_PIDNS = 0x4004b706 + NS_GET_PID_IN_PIDNS = 0x4004b708 + NS_GET_TGID_FROM_PIDNS = 0x4004b707 + NS_GET_TGID_IN_PIDNS = 0x4004b709 NS_GET_USERNS = 0x2000b701 OLCUC = 0x2 ONLCR = 0x4 @@ -229,6 +235,20 @@ const ( PPPIOCUNBRIDGECHAN = 0x20007434 PPPIOCXFERUNIT = 0x2000744e PR_SET_PTRACER_ANY = 0xffffffff + PTP_CLOCK_GETCAPS = 0x40503d01 + PTP_CLOCK_GETCAPS2 = 0x40503d0a + PTP_ENABLE_PPS = 0x80043d04 + PTP_ENABLE_PPS2 = 0x80043d0d + PTP_EXTTS_REQUEST = 0x80103d02 + PTP_EXTTS_REQUEST2 = 0x80103d0b + PTP_MASK_CLEAR_ALL = 0x20003d13 + PTP_MASK_EN_SINGLE = 0x80043d14 + PTP_PEROUT_REQUEST = 0x80383d03 + PTP_PEROUT_REQUEST2 = 0x80383d0c + PTP_PIN_SETFUNC = 0x80603d07 + PTP_PIN_SETFUNC2 = 0x80603d10 + PTP_SYS_OFFSET = 0x83403d05 + PTP_SYS_OFFSET2 = 0x83403d0e PTRACE_GETFPREGS = 0xe PTRACE_GET_THREAD_AREA = 0x19 PTRACE_GET_THREAD_AREA_3264 = 0xc4 @@ -277,6 +297,8 @@ const ( RTC_WIE_ON = 0x2000700f RTC_WKALM_RD = 0x40287010 RTC_WKALM_SET = 0x8028700f + SCM_DEVMEM_DMABUF = 0x4f + SCM_DEVMEM_LINEAR = 0x4e SCM_TIMESTAMPING = 0x25 SCM_TIMESTAMPING_OPT_STATS = 0x36 SCM_TIMESTAMPING_PKTINFO = 0x3a @@ -315,6 +337,9 @@ const ( SO_CNX_ADVICE = 0x35 SO_COOKIE = 0x39 SO_DETACH_REUSEPORT_BPF = 0x44 + SO_DEVMEM_DMABUF = 0x4f + SO_DEVMEM_DONTNEED = 0x50 + SO_DEVMEM_LINEAR = 0x4e SO_DOMAIN = 0x1029 SO_DONTROUTE = 0x10 SO_ERROR = 0x1007 diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_ppc.go b/vendor/golang.org/x/sys/unix/zerrors_linux_ppc.go index 237a2cefb3..3122737cd4 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_ppc.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_ppc.go @@ -108,6 +108,7 @@ const ( HIDIOCGRAWINFO = 0x40084803 HIDIOCGRDESC = 0x50044802 HIDIOCGRDESCSIZE = 0x40044801 + HIDIOCREVOKE = 0x8004480d HUPCL = 0x4000 ICANON = 0x100 IEXTEN = 0x400 @@ -152,9 +153,14 @@ const ( NL3 = 0x300 NLDLY = 0x300 NOFLSH = 0x80000000 + NS_GET_MNTNS_ID = 0x4008b705 NS_GET_NSTYPE = 0x2000b703 NS_GET_OWNER_UID = 0x2000b704 NS_GET_PARENT = 0x2000b702 + NS_GET_PID_FROM_PIDNS = 0x4004b706 + NS_GET_PID_IN_PIDNS = 0x4004b708 + NS_GET_TGID_FROM_PIDNS = 0x4004b707 + NS_GET_TGID_IN_PIDNS = 0x4004b709 NS_GET_USERNS = 0x2000b701 OLCUC = 0x4 ONLCR = 0x2 @@ -232,6 +238,20 @@ const ( PPPIOCXFERUNIT = 0x2000744e PROT_SAO = 0x10 PR_SET_PTRACER_ANY = 0xffffffff + PTP_CLOCK_GETCAPS = 0x40503d01 + PTP_CLOCK_GETCAPS2 = 0x40503d0a + PTP_ENABLE_PPS = 0x80043d04 + PTP_ENABLE_PPS2 = 0x80043d0d + PTP_EXTTS_REQUEST = 0x80103d02 + PTP_EXTTS_REQUEST2 = 0x80103d0b + PTP_MASK_CLEAR_ALL = 0x20003d13 + PTP_MASK_EN_SINGLE = 0x80043d14 + PTP_PEROUT_REQUEST = 0x80383d03 + PTP_PEROUT_REQUEST2 = 0x80383d0c + PTP_PIN_SETFUNC = 0x80603d07 + PTP_PIN_SETFUNC2 = 0x80603d10 + PTP_SYS_OFFSET = 0x83403d05 + PTP_SYS_OFFSET2 = 0x83403d0e PTRACE_GETEVRREGS = 0x14 PTRACE_GETFPREGS = 0xe PTRACE_GETREGS64 = 0x16 @@ -332,6 +352,8 @@ const ( RTC_WIE_ON = 0x2000700f RTC_WKALM_RD = 0x40287010 RTC_WKALM_SET = 0x8028700f + SCM_DEVMEM_DMABUF = 0x4f + SCM_DEVMEM_LINEAR = 0x4e SCM_TIMESTAMPING = 0x25 SCM_TIMESTAMPING_OPT_STATS = 0x36 SCM_TIMESTAMPING_PKTINFO = 0x3a @@ -370,6 +392,9 @@ const ( SO_CNX_ADVICE = 0x35 SO_COOKIE = 0x39 SO_DETACH_REUSEPORT_BPF = 0x44 + SO_DEVMEM_DMABUF = 0x4f + SO_DEVMEM_DONTNEED = 0x50 + SO_DEVMEM_LINEAR = 0x4e SO_DOMAIN = 0x27 SO_DONTROUTE = 0x5 SO_ERROR = 0x4 diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64.go b/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64.go index 4a5c555a36..eb5d3467ed 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64.go @@ -108,6 +108,7 @@ const ( HIDIOCGRAWINFO = 0x40084803 HIDIOCGRDESC = 0x50044802 HIDIOCGRDESCSIZE = 0x40044801 + HIDIOCREVOKE = 0x8004480d HUPCL = 0x4000 ICANON = 0x100 IEXTEN = 0x400 @@ -152,9 +153,14 @@ const ( NL3 = 0x300 NLDLY = 0x300 NOFLSH = 0x80000000 + NS_GET_MNTNS_ID = 0x4008b705 NS_GET_NSTYPE = 0x2000b703 NS_GET_OWNER_UID = 0x2000b704 NS_GET_PARENT = 0x2000b702 + NS_GET_PID_FROM_PIDNS = 0x4004b706 + NS_GET_PID_IN_PIDNS = 0x4004b708 + NS_GET_TGID_FROM_PIDNS = 0x4004b707 + NS_GET_TGID_IN_PIDNS = 0x4004b709 NS_GET_USERNS = 0x2000b701 OLCUC = 0x4 ONLCR = 0x2 @@ -232,6 +238,20 @@ const ( PPPIOCXFERUNIT = 0x2000744e PROT_SAO = 0x10 PR_SET_PTRACER_ANY = 0xffffffffffffffff + PTP_CLOCK_GETCAPS = 0x40503d01 + PTP_CLOCK_GETCAPS2 = 0x40503d0a + PTP_ENABLE_PPS = 0x80043d04 + PTP_ENABLE_PPS2 = 0x80043d0d + PTP_EXTTS_REQUEST = 0x80103d02 + PTP_EXTTS_REQUEST2 = 0x80103d0b + PTP_MASK_CLEAR_ALL = 0x20003d13 + PTP_MASK_EN_SINGLE = 0x80043d14 + PTP_PEROUT_REQUEST = 0x80383d03 + PTP_PEROUT_REQUEST2 = 0x80383d0c + PTP_PIN_SETFUNC = 0x80603d07 + PTP_PIN_SETFUNC2 = 0x80603d10 + PTP_SYS_OFFSET = 0x83403d05 + PTP_SYS_OFFSET2 = 0x83403d0e PTRACE_GETEVRREGS = 0x14 PTRACE_GETFPREGS = 0xe PTRACE_GETREGS64 = 0x16 @@ -336,6 +356,8 @@ const ( RTC_WIE_ON = 0x2000700f RTC_WKALM_RD = 0x40287010 RTC_WKALM_SET = 0x8028700f + SCM_DEVMEM_DMABUF = 0x4f + SCM_DEVMEM_LINEAR = 0x4e SCM_TIMESTAMPING = 0x25 SCM_TIMESTAMPING_OPT_STATS = 0x36 SCM_TIMESTAMPING_PKTINFO = 0x3a @@ -374,6 +396,9 @@ const ( SO_CNX_ADVICE = 0x35 SO_COOKIE = 0x39 SO_DETACH_REUSEPORT_BPF = 0x44 + SO_DEVMEM_DMABUF = 0x4f + SO_DEVMEM_DONTNEED = 0x50 + SO_DEVMEM_LINEAR = 0x4e SO_DOMAIN = 0x27 SO_DONTROUTE = 0x5 SO_ERROR = 0x4 diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64le.go b/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64le.go index a02fb49a5f..e921ebc60b 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64le.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64le.go @@ -108,6 +108,7 @@ const ( HIDIOCGRAWINFO = 0x40084803 HIDIOCGRDESC = 0x50044802 HIDIOCGRDESCSIZE = 0x40044801 + HIDIOCREVOKE = 0x8004480d HUPCL = 0x4000 ICANON = 0x100 IEXTEN = 0x400 @@ -152,9 +153,14 @@ const ( NL3 = 0x300 NLDLY = 0x300 NOFLSH = 0x80000000 + NS_GET_MNTNS_ID = 0x4008b705 NS_GET_NSTYPE = 0x2000b703 NS_GET_OWNER_UID = 0x2000b704 NS_GET_PARENT = 0x2000b702 + NS_GET_PID_FROM_PIDNS = 0x4004b706 + NS_GET_PID_IN_PIDNS = 0x4004b708 + NS_GET_TGID_FROM_PIDNS = 0x4004b707 + NS_GET_TGID_IN_PIDNS = 0x4004b709 NS_GET_USERNS = 0x2000b701 OLCUC = 0x4 ONLCR = 0x2 @@ -232,6 +238,20 @@ const ( PPPIOCXFERUNIT = 0x2000744e PROT_SAO = 0x10 PR_SET_PTRACER_ANY = 0xffffffffffffffff + PTP_CLOCK_GETCAPS = 0x40503d01 + PTP_CLOCK_GETCAPS2 = 0x40503d0a + PTP_ENABLE_PPS = 0x80043d04 + PTP_ENABLE_PPS2 = 0x80043d0d + PTP_EXTTS_REQUEST = 0x80103d02 + PTP_EXTTS_REQUEST2 = 0x80103d0b + PTP_MASK_CLEAR_ALL = 0x20003d13 + PTP_MASK_EN_SINGLE = 0x80043d14 + PTP_PEROUT_REQUEST = 0x80383d03 + PTP_PEROUT_REQUEST2 = 0x80383d0c + PTP_PIN_SETFUNC = 0x80603d07 + PTP_PIN_SETFUNC2 = 0x80603d10 + PTP_SYS_OFFSET = 0x83403d05 + PTP_SYS_OFFSET2 = 0x83403d0e PTRACE_GETEVRREGS = 0x14 PTRACE_GETFPREGS = 0xe PTRACE_GETREGS64 = 0x16 @@ -336,6 +356,8 @@ const ( RTC_WIE_ON = 0x2000700f RTC_WKALM_RD = 0x40287010 RTC_WKALM_SET = 0x8028700f + SCM_DEVMEM_DMABUF = 0x4f + SCM_DEVMEM_LINEAR = 0x4e SCM_TIMESTAMPING = 0x25 SCM_TIMESTAMPING_OPT_STATS = 0x36 SCM_TIMESTAMPING_PKTINFO = 0x3a @@ -374,6 +396,9 @@ const ( SO_CNX_ADVICE = 0x35 SO_COOKIE = 0x39 SO_DETACH_REUSEPORT_BPF = 0x44 + SO_DEVMEM_DMABUF = 0x4f + SO_DEVMEM_DONTNEED = 0x50 + SO_DEVMEM_LINEAR = 0x4e SO_DOMAIN = 0x27 SO_DONTROUTE = 0x5 SO_ERROR = 0x4 diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_riscv64.go b/vendor/golang.org/x/sys/unix/zerrors_linux_riscv64.go index e26a7c61b2..38ba81c55c 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_riscv64.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_riscv64.go @@ -108,6 +108,7 @@ const ( HIDIOCGRAWINFO = 0x80084803 HIDIOCGRDESC = 0x90044802 HIDIOCGRDESCSIZE = 0x80044801 + HIDIOCREVOKE = 0x4004480d HUPCL = 0x400 ICANON = 0x2 IEXTEN = 0x8000 @@ -150,9 +151,14 @@ const ( NFDBITS = 0x40 NLDLY = 0x100 NOFLSH = 0x80 + NS_GET_MNTNS_ID = 0x8008b705 NS_GET_NSTYPE = 0xb703 NS_GET_OWNER_UID = 0xb704 NS_GET_PARENT = 0xb702 + NS_GET_PID_FROM_PIDNS = 0x8004b706 + NS_GET_PID_IN_PIDNS = 0x8004b708 + NS_GET_TGID_FROM_PIDNS = 0x8004b707 + NS_GET_TGID_IN_PIDNS = 0x8004b709 NS_GET_USERNS = 0xb701 OLCUC = 0x2 ONLCR = 0x4 @@ -229,6 +235,20 @@ const ( PPPIOCUNBRIDGECHAN = 0x7434 PPPIOCXFERUNIT = 0x744e PR_SET_PTRACER_ANY = 0xffffffffffffffff + PTP_CLOCK_GETCAPS = 0x80503d01 + PTP_CLOCK_GETCAPS2 = 0x80503d0a + PTP_ENABLE_PPS = 0x40043d04 + PTP_ENABLE_PPS2 = 0x40043d0d + PTP_EXTTS_REQUEST = 0x40103d02 + PTP_EXTTS_REQUEST2 = 0x40103d0b + PTP_MASK_CLEAR_ALL = 0x3d13 + PTP_MASK_EN_SINGLE = 0x40043d14 + PTP_PEROUT_REQUEST = 0x40383d03 + PTP_PEROUT_REQUEST2 = 0x40383d0c + PTP_PIN_SETFUNC = 0x40603d07 + PTP_PIN_SETFUNC2 = 0x40603d10 + PTP_SYS_OFFSET = 0x43403d05 + PTP_SYS_OFFSET2 = 0x43403d0e PTRACE_GETFDPIC = 0x21 PTRACE_GETFDPIC_EXEC = 0x0 PTRACE_GETFDPIC_INTERP = 0x1 @@ -268,6 +288,8 @@ const ( RTC_WIE_ON = 0x700f RTC_WKALM_RD = 0x80287010 RTC_WKALM_SET = 0x4028700f + SCM_DEVMEM_DMABUF = 0x4f + SCM_DEVMEM_LINEAR = 0x4e SCM_TIMESTAMPING = 0x25 SCM_TIMESTAMPING_OPT_STATS = 0x36 SCM_TIMESTAMPING_PKTINFO = 0x3a @@ -306,6 +328,9 @@ const ( SO_CNX_ADVICE = 0x35 SO_COOKIE = 0x39 SO_DETACH_REUSEPORT_BPF = 0x44 + SO_DEVMEM_DMABUF = 0x4f + SO_DEVMEM_DONTNEED = 0x50 + SO_DEVMEM_LINEAR = 0x4e SO_DOMAIN = 0x27 SO_DONTROUTE = 0x5 SO_ERROR = 0x4 diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_s390x.go b/vendor/golang.org/x/sys/unix/zerrors_linux_s390x.go index c48f7c2103..71f0400977 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_s390x.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_s390x.go @@ -108,6 +108,7 @@ const ( HIDIOCGRAWINFO = 0x80084803 HIDIOCGRDESC = 0x90044802 HIDIOCGRDESCSIZE = 0x80044801 + HIDIOCREVOKE = 0x4004480d HUPCL = 0x400 ICANON = 0x2 IEXTEN = 0x8000 @@ -150,9 +151,14 @@ const ( NFDBITS = 0x40 NLDLY = 0x100 NOFLSH = 0x80 + NS_GET_MNTNS_ID = 0x8008b705 NS_GET_NSTYPE = 0xb703 NS_GET_OWNER_UID = 0xb704 NS_GET_PARENT = 0xb702 + NS_GET_PID_FROM_PIDNS = 0x8004b706 + NS_GET_PID_IN_PIDNS = 0x8004b708 + NS_GET_TGID_FROM_PIDNS = 0x8004b707 + NS_GET_TGID_IN_PIDNS = 0x8004b709 NS_GET_USERNS = 0xb701 OLCUC = 0x2 ONLCR = 0x4 @@ -229,6 +235,20 @@ const ( PPPIOCUNBRIDGECHAN = 0x7434 PPPIOCXFERUNIT = 0x744e PR_SET_PTRACER_ANY = 0xffffffffffffffff + PTP_CLOCK_GETCAPS = 0x80503d01 + PTP_CLOCK_GETCAPS2 = 0x80503d0a + PTP_ENABLE_PPS = 0x40043d04 + PTP_ENABLE_PPS2 = 0x40043d0d + PTP_EXTTS_REQUEST = 0x40103d02 + PTP_EXTTS_REQUEST2 = 0x40103d0b + PTP_MASK_CLEAR_ALL = 0x3d13 + PTP_MASK_EN_SINGLE = 0x40043d14 + PTP_PEROUT_REQUEST = 0x40383d03 + PTP_PEROUT_REQUEST2 = 0x40383d0c + PTP_PIN_SETFUNC = 0x40603d07 + PTP_PIN_SETFUNC2 = 0x40603d10 + PTP_SYS_OFFSET = 0x43403d05 + PTP_SYS_OFFSET2 = 0x43403d0e PTRACE_DISABLE_TE = 0x5010 PTRACE_ENABLE_TE = 0x5009 PTRACE_GET_LAST_BREAK = 0x5006 @@ -340,6 +360,8 @@ const ( RTC_WIE_ON = 0x700f RTC_WKALM_RD = 0x80287010 RTC_WKALM_SET = 0x4028700f + SCM_DEVMEM_DMABUF = 0x4f + SCM_DEVMEM_LINEAR = 0x4e SCM_TIMESTAMPING = 0x25 SCM_TIMESTAMPING_OPT_STATS = 0x36 SCM_TIMESTAMPING_PKTINFO = 0x3a @@ -378,6 +400,9 @@ const ( SO_CNX_ADVICE = 0x35 SO_COOKIE = 0x39 SO_DETACH_REUSEPORT_BPF = 0x44 + SO_DEVMEM_DMABUF = 0x4f + SO_DEVMEM_DONTNEED = 0x50 + SO_DEVMEM_LINEAR = 0x4e SO_DOMAIN = 0x27 SO_DONTROUTE = 0x5 SO_ERROR = 0x4 diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_sparc64.go b/vendor/golang.org/x/sys/unix/zerrors_linux_sparc64.go index ad4b9aace7..c44a313322 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_sparc64.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_sparc64.go @@ -112,6 +112,7 @@ const ( HIDIOCGRAWINFO = 0x40084803 HIDIOCGRDESC = 0x50044802 HIDIOCGRDESCSIZE = 0x40044801 + HIDIOCREVOKE = 0x8004480d HUPCL = 0x400 ICANON = 0x2 IEXTEN = 0x8000 @@ -155,9 +156,14 @@ const ( NFDBITS = 0x40 NLDLY = 0x100 NOFLSH = 0x80 + NS_GET_MNTNS_ID = 0x4008b705 NS_GET_NSTYPE = 0x2000b703 NS_GET_OWNER_UID = 0x2000b704 NS_GET_PARENT = 0x2000b702 + NS_GET_PID_FROM_PIDNS = 0x4004b706 + NS_GET_PID_IN_PIDNS = 0x4004b708 + NS_GET_TGID_FROM_PIDNS = 0x4004b707 + NS_GET_TGID_IN_PIDNS = 0x4004b709 NS_GET_USERNS = 0x2000b701 OLCUC = 0x2 ONLCR = 0x4 @@ -234,6 +240,20 @@ const ( PPPIOCUNBRIDGECHAN = 0x20007434 PPPIOCXFERUNIT = 0x2000744e PR_SET_PTRACER_ANY = 0xffffffffffffffff + PTP_CLOCK_GETCAPS = 0x40503d01 + PTP_CLOCK_GETCAPS2 = 0x40503d0a + PTP_ENABLE_PPS = 0x80043d04 + PTP_ENABLE_PPS2 = 0x80043d0d + PTP_EXTTS_REQUEST = 0x80103d02 + PTP_EXTTS_REQUEST2 = 0x80103d0b + PTP_MASK_CLEAR_ALL = 0x20003d13 + PTP_MASK_EN_SINGLE = 0x80043d14 + PTP_PEROUT_REQUEST = 0x80383d03 + PTP_PEROUT_REQUEST2 = 0x80383d0c + PTP_PIN_SETFUNC = 0x80603d07 + PTP_PIN_SETFUNC2 = 0x80603d10 + PTP_SYS_OFFSET = 0x83403d05 + PTP_SYS_OFFSET2 = 0x83403d0e PTRACE_GETFPAREGS = 0x14 PTRACE_GETFPREGS = 0xe PTRACE_GETFPREGS64 = 0x19 @@ -331,6 +351,8 @@ const ( RTC_WIE_ON = 0x2000700f RTC_WKALM_RD = 0x40287010 RTC_WKALM_SET = 0x8028700f + SCM_DEVMEM_DMABUF = 0x58 + SCM_DEVMEM_LINEAR = 0x57 SCM_TIMESTAMPING = 0x23 SCM_TIMESTAMPING_OPT_STATS = 0x38 SCM_TIMESTAMPING_PKTINFO = 0x3c @@ -417,6 +439,9 @@ const ( SO_CNX_ADVICE = 0x37 SO_COOKIE = 0x3b SO_DETACH_REUSEPORT_BPF = 0x47 + SO_DEVMEM_DMABUF = 0x58 + SO_DEVMEM_DONTNEED = 0x59 + SO_DEVMEM_LINEAR = 0x57 SO_DOMAIN = 0x1029 SO_DONTROUTE = 0x10 SO_ERROR = 0x1007 diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux.go b/vendor/golang.org/x/sys/unix/zsyscall_linux.go index 1bc1a5adb2..5cc1e8eb2f 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_linux.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_linux.go @@ -592,6 +592,16 @@ func ClockGettime(clockid int32, time *Timespec) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func ClockSettime(clockid int32, time *Timespec) (err error) { + _, _, e1 := Syscall(SYS_CLOCK_SETTIME, uintptr(clockid), uintptr(unsafe.Pointer(time)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func ClockNanosleep(clockid int32, flags int, request *Timespec, remain *Timespec) (err error) { _, _, e1 := Syscall6(SYS_CLOCK_NANOSLEEP, uintptr(clockid), uintptr(flags), uintptr(unsafe.Pointer(request)), uintptr(unsafe.Pointer(remain)), 0, 0) if e1 != 0 { @@ -971,23 +981,6 @@ func Getpriority(which int, who int) (prio int, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Getrandom(buf []byte, flags int) (n int, err error) { - var _p0 unsafe.Pointer - if len(buf) > 0 { - _p0 = unsafe.Pointer(&buf[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := Syscall(SYS_GETRANDOM, uintptr(_p0), uintptr(len(buf)), uintptr(flags)) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - func Getrusage(who int, rusage *Rusage) (err error) { _, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0) if e1 != 0 { diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_amd64.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_amd64.go index d3e38f681a..f485dbf456 100644 --- a/vendor/golang.org/x/sys/unix/zsysnum_linux_amd64.go +++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_amd64.go @@ -341,6 +341,7 @@ const ( SYS_STATX = 332 SYS_IO_PGETEVENTS = 333 SYS_RSEQ = 334 + SYS_URETPROBE = 335 SYS_PIDFD_SEND_SIGNAL = 424 SYS_IO_URING_SETUP = 425 SYS_IO_URING_ENTER = 426 diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_arm64.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_arm64.go index 6c778c2327..1893e2fe88 100644 --- a/vendor/golang.org/x/sys/unix/zsysnum_linux_arm64.go +++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_arm64.go @@ -85,7 +85,7 @@ const ( SYS_SPLICE = 76 SYS_TEE = 77 SYS_READLINKAT = 78 - SYS_FSTATAT = 79 + SYS_NEWFSTATAT = 79 SYS_FSTAT = 80 SYS_SYNC = 81 SYS_FSYNC = 82 diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_loong64.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_loong64.go index 37281cf51a..16a4017da0 100644 --- a/vendor/golang.org/x/sys/unix/zsysnum_linux_loong64.go +++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_loong64.go @@ -84,6 +84,8 @@ const ( SYS_SPLICE = 76 SYS_TEE = 77 SYS_READLINKAT = 78 + SYS_NEWFSTATAT = 79 + SYS_FSTAT = 80 SYS_SYNC = 81 SYS_FSYNC = 82 SYS_FDATASYNC = 83 diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_riscv64.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_riscv64.go index 9889f6a559..a5459e766f 100644 --- a/vendor/golang.org/x/sys/unix/zsysnum_linux_riscv64.go +++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_riscv64.go @@ -84,7 +84,7 @@ const ( SYS_SPLICE = 76 SYS_TEE = 77 SYS_READLINKAT = 78 - SYS_FSTATAT = 79 + SYS_NEWFSTATAT = 79 SYS_FSTAT = 80 SYS_SYNC = 81 SYS_FSYNC = 82 diff --git a/vendor/golang.org/x/sys/unix/ztypes_darwin_amd64.go b/vendor/golang.org/x/sys/unix/ztypes_darwin_amd64.go index d003c3d437..17c53bd9b3 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_darwin_amd64.go +++ b/vendor/golang.org/x/sys/unix/ztypes_darwin_amd64.go @@ -462,11 +462,14 @@ type FdSet struct { const ( SizeofIfMsghdr = 0x70 + SizeofIfMsghdr2 = 0xa0 SizeofIfData = 0x60 + SizeofIfData64 = 0x80 SizeofIfaMsghdr = 0x14 SizeofIfmaMsghdr = 0x10 SizeofIfmaMsghdr2 = 0x14 SizeofRtMsghdr = 0x5c + SizeofRtMsghdr2 = 0x5c SizeofRtMetrics = 0x38 ) @@ -480,6 +483,20 @@ type IfMsghdr struct { Data IfData } +type IfMsghdr2 struct { + Msglen uint16 + Version uint8 + Type uint8 + Addrs int32 + Flags int32 + Index uint16 + Snd_len int32 + Snd_maxlen int32 + Snd_drops int32 + Timer int32 + Data IfData64 +} + type IfData struct { Type uint8 Typelen uint8 @@ -512,6 +529,34 @@ type IfData struct { Reserved2 uint32 } +type IfData64 struct { + Type uint8 + Typelen uint8 + Physical uint8 + Addrlen uint8 + Hdrlen uint8 + Recvquota uint8 + Xmitquota uint8 + Unused1 uint8 + Mtu uint32 + Metric uint32 + Baudrate uint64 + Ipackets uint64 + Ierrors uint64 + Opackets uint64 + Oerrors uint64 + Collisions uint64 + Ibytes uint64 + Obytes uint64 + Imcasts uint64 + Omcasts uint64 + Iqdrops uint64 + Noproto uint64 + Recvtiming uint32 + Xmittiming uint32 + Lastchange Timeval32 +} + type IfaMsghdr struct { Msglen uint16 Version uint8 @@ -557,6 +602,21 @@ type RtMsghdr struct { Rmx RtMetrics } +type RtMsghdr2 struct { + Msglen uint16 + Version uint8 + Type uint8 + Index uint16 + Flags int32 + Addrs int32 + Refcnt int32 + Parentflags int32 + Reserved int32 + Use int32 + Inits uint32 + Rmx RtMetrics +} + type RtMetrics struct { Locks uint32 Mtu uint32 diff --git a/vendor/golang.org/x/sys/unix/ztypes_darwin_arm64.go b/vendor/golang.org/x/sys/unix/ztypes_darwin_arm64.go index 0d45a941aa..2392226a74 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_darwin_arm64.go +++ b/vendor/golang.org/x/sys/unix/ztypes_darwin_arm64.go @@ -462,11 +462,14 @@ type FdSet struct { const ( SizeofIfMsghdr = 0x70 + SizeofIfMsghdr2 = 0xa0 SizeofIfData = 0x60 + SizeofIfData64 = 0x80 SizeofIfaMsghdr = 0x14 SizeofIfmaMsghdr = 0x10 SizeofIfmaMsghdr2 = 0x14 SizeofRtMsghdr = 0x5c + SizeofRtMsghdr2 = 0x5c SizeofRtMetrics = 0x38 ) @@ -480,6 +483,20 @@ type IfMsghdr struct { Data IfData } +type IfMsghdr2 struct { + Msglen uint16 + Version uint8 + Type uint8 + Addrs int32 + Flags int32 + Index uint16 + Snd_len int32 + Snd_maxlen int32 + Snd_drops int32 + Timer int32 + Data IfData64 +} + type IfData struct { Type uint8 Typelen uint8 @@ -512,6 +529,34 @@ type IfData struct { Reserved2 uint32 } +type IfData64 struct { + Type uint8 + Typelen uint8 + Physical uint8 + Addrlen uint8 + Hdrlen uint8 + Recvquota uint8 + Xmitquota uint8 + Unused1 uint8 + Mtu uint32 + Metric uint32 + Baudrate uint64 + Ipackets uint64 + Ierrors uint64 + Opackets uint64 + Oerrors uint64 + Collisions uint64 + Ibytes uint64 + Obytes uint64 + Imcasts uint64 + Omcasts uint64 + Iqdrops uint64 + Noproto uint64 + Recvtiming uint32 + Xmittiming uint32 + Lastchange Timeval32 +} + type IfaMsghdr struct { Msglen uint16 Version uint8 @@ -557,6 +602,21 @@ type RtMsghdr struct { Rmx RtMetrics } +type RtMsghdr2 struct { + Msglen uint16 + Version uint8 + Type uint8 + Index uint16 + Flags int32 + Addrs int32 + Refcnt int32 + Parentflags int32 + Reserved int32 + Use int32 + Inits uint32 + Rmx RtMetrics +} + type RtMetrics struct { Locks uint32 Mtu uint32 diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux.go b/vendor/golang.org/x/sys/unix/ztypes_linux.go index 9f2550dc31..5537148dcb 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_linux.go +++ b/vendor/golang.org/x/sys/unix/ztypes_linux.go @@ -87,31 +87,35 @@ type StatxTimestamp struct { } type Statx_t struct { - Mask uint32 - Blksize uint32 - Attributes uint64 - Nlink uint32 - Uid uint32 - Gid uint32 - Mode uint16 - _ [1]uint16 - Ino uint64 - Size uint64 - Blocks uint64 - Attributes_mask uint64 - Atime StatxTimestamp - Btime StatxTimestamp - Ctime StatxTimestamp - Mtime StatxTimestamp - Rdev_major uint32 - Rdev_minor uint32 - Dev_major uint32 - Dev_minor uint32 - Mnt_id uint64 - Dio_mem_align uint32 - Dio_offset_align uint32 - Subvol uint64 - _ [11]uint64 + Mask uint32 + Blksize uint32 + Attributes uint64 + Nlink uint32 + Uid uint32 + Gid uint32 + Mode uint16 + _ [1]uint16 + Ino uint64 + Size uint64 + Blocks uint64 + Attributes_mask uint64 + Atime StatxTimestamp + Btime StatxTimestamp + Ctime StatxTimestamp + Mtime StatxTimestamp + Rdev_major uint32 + Rdev_minor uint32 + Dev_major uint32 + Dev_minor uint32 + Mnt_id uint64 + Dio_mem_align uint32 + Dio_offset_align uint32 + Subvol uint64 + Atomic_write_unit_min uint32 + Atomic_write_unit_max uint32 + Atomic_write_segments_max uint32 + _ [1]uint32 + _ [9]uint64 } type Fsid struct { @@ -516,6 +520,29 @@ type TCPInfo struct { Total_rto_time uint32 } +type TCPVegasInfo struct { + Enabled uint32 + Rttcnt uint32 + Rtt uint32 + Minrtt uint32 +} + +type TCPDCTCPInfo struct { + Enabled uint16 + Ce_state uint16 + Alpha uint32 + Ab_ecn uint32 + Ab_tot uint32 +} + +type TCPBBRInfo struct { + Bw_lo uint32 + Bw_hi uint32 + Min_rtt uint32 + Pacing_gain uint32 + Cwnd_gain uint32 +} + type CanFilter struct { Id uint32 Mask uint32 @@ -557,6 +584,7 @@ const ( SizeofICMPv6Filter = 0x20 SizeofUcred = 0xc SizeofTCPInfo = 0xf8 + SizeofTCPCCInfo = 0x14 SizeofCanFilter = 0x8 SizeofTCPRepairOpt = 0x8 ) @@ -1724,12 +1752,6 @@ const ( IFLA_IPVLAN_UNSPEC = 0x0 IFLA_IPVLAN_MODE = 0x1 IFLA_IPVLAN_FLAGS = 0x2 - NETKIT_NEXT = -0x1 - NETKIT_PASS = 0x0 - NETKIT_DROP = 0x2 - NETKIT_REDIRECT = 0x7 - NETKIT_L2 = 0x0 - NETKIT_L3 = 0x1 IFLA_NETKIT_UNSPEC = 0x0 IFLA_NETKIT_PEER_INFO = 0x1 IFLA_NETKIT_PRIMARY = 0x2 @@ -1768,6 +1790,7 @@ const ( IFLA_VXLAN_DF = 0x1d IFLA_VXLAN_VNIFILTER = 0x1e IFLA_VXLAN_LOCALBYPASS = 0x1f + IFLA_VXLAN_LABEL_POLICY = 0x20 IFLA_GENEVE_UNSPEC = 0x0 IFLA_GENEVE_ID = 0x1 IFLA_GENEVE_REMOTE = 0x2 @@ -1797,6 +1820,8 @@ const ( IFLA_GTP_ROLE = 0x4 IFLA_GTP_CREATE_SOCKETS = 0x5 IFLA_GTP_RESTART_COUNT = 0x6 + IFLA_GTP_LOCAL = 0x7 + IFLA_GTP_LOCAL6 = 0x8 IFLA_BOND_UNSPEC = 0x0 IFLA_BOND_MODE = 0x1 IFLA_BOND_ACTIVE_SLAVE = 0x2 @@ -1829,6 +1854,7 @@ const ( IFLA_BOND_AD_LACP_ACTIVE = 0x1d IFLA_BOND_MISSED_MAX = 0x1e IFLA_BOND_NS_IP6_TARGET = 0x1f + IFLA_BOND_COUPLED_CONTROL = 0x20 IFLA_BOND_AD_INFO_UNSPEC = 0x0 IFLA_BOND_AD_INFO_AGGREGATOR = 0x1 IFLA_BOND_AD_INFO_NUM_PORTS = 0x2 @@ -1897,6 +1923,7 @@ const ( IFLA_HSR_SEQ_NR = 0x5 IFLA_HSR_VERSION = 0x6 IFLA_HSR_PROTOCOL = 0x7 + IFLA_HSR_INTERLINK = 0x8 IFLA_STATS_UNSPEC = 0x0 IFLA_STATS_LINK_64 = 0x1 IFLA_STATS_LINK_XSTATS = 0x2 @@ -1949,6 +1976,15 @@ const ( IFLA_DSA_MASTER = 0x1 ) +const ( + NETKIT_NEXT = -0x1 + NETKIT_PASS = 0x0 + NETKIT_DROP = 0x2 + NETKIT_REDIRECT = 0x7 + NETKIT_L2 = 0x0 + NETKIT_L3 = 0x1 +) + const ( NF_INET_PRE_ROUTING = 0x0 NF_INET_LOCAL_IN = 0x1 @@ -2558,8 +2594,8 @@ const ( SOF_TIMESTAMPING_BIND_PHC = 0x8000 SOF_TIMESTAMPING_OPT_ID_TCP = 0x10000 - SOF_TIMESTAMPING_LAST = 0x10000 - SOF_TIMESTAMPING_MASK = 0x1ffff + SOF_TIMESTAMPING_LAST = 0x20000 + SOF_TIMESTAMPING_MASK = 0x3ffff SCM_TSTAMP_SND = 0x0 SCM_TSTAMP_SCHED = 0x1 @@ -3505,7 +3541,7 @@ type Nhmsg struct { type NexthopGrp struct { Id uint32 Weight uint8 - Resvd1 uint8 + High uint8 Resvd2 uint16 } @@ -3766,7 +3802,7 @@ const ( ETHTOOL_MSG_PSE_GET = 0x24 ETHTOOL_MSG_PSE_SET = 0x25 ETHTOOL_MSG_RSS_GET = 0x26 - ETHTOOL_MSG_USER_MAX = 0x2b + ETHTOOL_MSG_USER_MAX = 0x2d ETHTOOL_MSG_KERNEL_NONE = 0x0 ETHTOOL_MSG_STRSET_GET_REPLY = 0x1 ETHTOOL_MSG_LINKINFO_GET_REPLY = 0x2 @@ -3806,7 +3842,7 @@ const ( ETHTOOL_MSG_MODULE_NTF = 0x24 ETHTOOL_MSG_PSE_GET_REPLY = 0x25 ETHTOOL_MSG_RSS_GET_REPLY = 0x26 - ETHTOOL_MSG_KERNEL_MAX = 0x2b + ETHTOOL_MSG_KERNEL_MAX = 0x2e ETHTOOL_FLAG_COMPACT_BITSETS = 0x1 ETHTOOL_FLAG_OMIT_REPLY = 0x2 ETHTOOL_FLAG_STATS = 0x4 @@ -3814,7 +3850,7 @@ const ( ETHTOOL_A_HEADER_DEV_INDEX = 0x1 ETHTOOL_A_HEADER_DEV_NAME = 0x2 ETHTOOL_A_HEADER_FLAGS = 0x3 - ETHTOOL_A_HEADER_MAX = 0x3 + ETHTOOL_A_HEADER_MAX = 0x4 ETHTOOL_A_BITSET_BIT_UNSPEC = 0x0 ETHTOOL_A_BITSET_BIT_INDEX = 0x1 ETHTOOL_A_BITSET_BIT_NAME = 0x2 @@ -3951,7 +3987,7 @@ const ( ETHTOOL_A_COALESCE_RATE_SAMPLE_INTERVAL = 0x17 ETHTOOL_A_COALESCE_USE_CQE_MODE_TX = 0x18 ETHTOOL_A_COALESCE_USE_CQE_MODE_RX = 0x19 - ETHTOOL_A_COALESCE_MAX = 0x1c + ETHTOOL_A_COALESCE_MAX = 0x1e ETHTOOL_A_PAUSE_UNSPEC = 0x0 ETHTOOL_A_PAUSE_HEADER = 0x1 ETHTOOL_A_PAUSE_AUTONEG = 0x2 @@ -3995,11 +4031,11 @@ const ( ETHTOOL_A_CABLE_RESULT_UNSPEC = 0x0 ETHTOOL_A_CABLE_RESULT_PAIR = 0x1 ETHTOOL_A_CABLE_RESULT_CODE = 0x2 - ETHTOOL_A_CABLE_RESULT_MAX = 0x2 + ETHTOOL_A_CABLE_RESULT_MAX = 0x3 ETHTOOL_A_CABLE_FAULT_LENGTH_UNSPEC = 0x0 ETHTOOL_A_CABLE_FAULT_LENGTH_PAIR = 0x1 ETHTOOL_A_CABLE_FAULT_LENGTH_CM = 0x2 - ETHTOOL_A_CABLE_FAULT_LENGTH_MAX = 0x2 + ETHTOOL_A_CABLE_FAULT_LENGTH_MAX = 0x3 ETHTOOL_A_CABLE_TEST_NTF_STATUS_UNSPEC = 0x0 ETHTOOL_A_CABLE_TEST_NTF_STATUS_STARTED = 0x1 ETHTOOL_A_CABLE_TEST_NTF_STATUS_COMPLETED = 0x2 @@ -4082,6 +4118,107 @@ type EthtoolDrvinfo struct { Regdump_len uint32 } +type EthtoolTsInfo struct { + Cmd uint32 + So_timestamping uint32 + Phc_index int32 + Tx_types uint32 + Tx_reserved [3]uint32 + Rx_filters uint32 + Rx_reserved [3]uint32 +} + +type HwTstampConfig struct { + Flags int32 + Tx_type int32 + Rx_filter int32 +} + +const ( + HWTSTAMP_FILTER_NONE = 0x0 + HWTSTAMP_FILTER_ALL = 0x1 + HWTSTAMP_FILTER_SOME = 0x2 + HWTSTAMP_FILTER_PTP_V1_L4_EVENT = 0x3 + HWTSTAMP_FILTER_PTP_V2_L4_EVENT = 0x6 + HWTSTAMP_FILTER_PTP_V2_L2_EVENT = 0x9 + HWTSTAMP_FILTER_PTP_V2_EVENT = 0xc +) + +const ( + HWTSTAMP_TX_OFF = 0x0 + HWTSTAMP_TX_ON = 0x1 + HWTSTAMP_TX_ONESTEP_SYNC = 0x2 +) + +type ( + PtpClockCaps struct { + Max_adj int32 + N_alarm int32 + N_ext_ts int32 + N_per_out int32 + Pps int32 + N_pins int32 + Cross_timestamping int32 + Adjust_phase int32 + Max_phase_adj int32 + Rsv [11]int32 + } + PtpClockTime struct { + Sec int64 + Nsec uint32 + Reserved uint32 + } + PtpExttsEvent struct { + T PtpClockTime + Index uint32 + Flags uint32 + Rsv [2]uint32 + } + PtpExttsRequest struct { + Index uint32 + Flags uint32 + Rsv [2]uint32 + } + PtpPeroutRequest struct { + StartOrPhase PtpClockTime + Period PtpClockTime + Index uint32 + Flags uint32 + On PtpClockTime + } + PtpPinDesc struct { + Name [64]byte + Index uint32 + Func uint32 + Chan uint32 + Rsv [5]uint32 + } + PtpSysOffset struct { + Samples uint32 + Rsv [3]uint32 + Ts [51]PtpClockTime + } + PtpSysOffsetExtended struct { + Samples uint32 + Clockid int32 + Rsv [2]uint32 + Ts [25][3]PtpClockTime + } + PtpSysOffsetPrecise struct { + Device PtpClockTime + Realtime PtpClockTime + Monoraw PtpClockTime + Rsv [4]uint32 + } +) + +const ( + PTP_PF_NONE = 0x0 + PTP_PF_EXTTS = 0x1 + PTP_PF_PEROUT = 0x2 + PTP_PF_PHYSYNC = 0x3 +) + type ( HIDRawReportDescriptor struct { Size uint32 @@ -4263,6 +4400,7 @@ const ( type LandlockRulesetAttr struct { Access_fs uint64 Access_net uint64 + Scoped uint64 } type LandlockPathBeneathAttr struct { @@ -4609,7 +4747,7 @@ const ( NL80211_ATTR_MAC_HINT = 0xc8 NL80211_ATTR_MAC_MASK = 0xd7 NL80211_ATTR_MAX_AP_ASSOC_STA = 0xca - NL80211_ATTR_MAX = 0x14a + NL80211_ATTR_MAX = 0x14c NL80211_ATTR_MAX_CRIT_PROT_DURATION = 0xb4 NL80211_ATTR_MAX_CSA_COUNTERS = 0xce NL80211_ATTR_MAX_MATCH_SETS = 0x85 @@ -5213,7 +5351,7 @@ const ( NL80211_FREQUENCY_ATTR_GO_CONCURRENT = 0xf NL80211_FREQUENCY_ATTR_INDOOR_ONLY = 0xe NL80211_FREQUENCY_ATTR_IR_CONCURRENT = 0xf - NL80211_FREQUENCY_ATTR_MAX = 0x20 + NL80211_FREQUENCY_ATTR_MAX = 0x21 NL80211_FREQUENCY_ATTR_MAX_TX_POWER = 0x6 NL80211_FREQUENCY_ATTR_NO_10MHZ = 0x11 NL80211_FREQUENCY_ATTR_NO_160MHZ = 0xc diff --git a/vendor/golang.org/x/sys/unix/ztypes_zos_s390x.go b/vendor/golang.org/x/sys/unix/ztypes_zos_s390x.go index d9a13af468..2e5d5a4435 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_zos_s390x.go +++ b/vendor/golang.org/x/sys/unix/ztypes_zos_s390x.go @@ -377,6 +377,12 @@ type Flock_t struct { Pid int32 } +type F_cnvrt struct { + Cvtcmd int32 + Pccsid int16 + Fccsid int16 +} + type Termios struct { Cflag uint32 Iflag uint32 diff --git a/vendor/golang.org/x/sys/windows/dll_windows.go b/vendor/golang.org/x/sys/windows/dll_windows.go index 115341fba6..4e613cf633 100644 --- a/vendor/golang.org/x/sys/windows/dll_windows.go +++ b/vendor/golang.org/x/sys/windows/dll_windows.go @@ -65,7 +65,7 @@ func LoadDLL(name string) (dll *DLL, err error) { return d, nil } -// MustLoadDLL is like LoadDLL but panics if load operation failes. +// MustLoadDLL is like LoadDLL but panics if load operation fails. func MustLoadDLL(name string) *DLL { d, e := LoadDLL(name) if e != nil { diff --git a/vendor/golang.org/x/sys/windows/syscall_windows.go b/vendor/golang.org/x/sys/windows/syscall_windows.go index 5cee9a3143..4a32543868 100644 --- a/vendor/golang.org/x/sys/windows/syscall_windows.go +++ b/vendor/golang.org/x/sys/windows/syscall_windows.go @@ -168,6 +168,8 @@ func NewCallbackCDecl(fn interface{}) uintptr { //sys CreateNamedPipe(name *uint16, flags uint32, pipeMode uint32, maxInstances uint32, outSize uint32, inSize uint32, defaultTimeout uint32, sa *SecurityAttributes) (handle Handle, err error) [failretval==InvalidHandle] = CreateNamedPipeW //sys ConnectNamedPipe(pipe Handle, overlapped *Overlapped) (err error) //sys DisconnectNamedPipe(pipe Handle) (err error) +//sys GetNamedPipeClientProcessId(pipe Handle, clientProcessID *uint32) (err error) +//sys GetNamedPipeServerProcessId(pipe Handle, serverProcessID *uint32) (err error) //sys GetNamedPipeInfo(pipe Handle, flags *uint32, outSize *uint32, inSize *uint32, maxInstances *uint32) (err error) //sys GetNamedPipeHandleState(pipe Handle, state *uint32, curInstances *uint32, maxCollectionCount *uint32, collectDataTimeout *uint32, userName *uint16, maxUserNameSize uint32) (err error) = GetNamedPipeHandleStateW //sys SetNamedPipeHandleState(pipe Handle, state *uint32, maxCollectionCount *uint32, collectDataTimeout *uint32) (err error) = SetNamedPipeHandleState @@ -725,20 +727,12 @@ func DurationSinceBoot() time.Duration { } func Ftruncate(fd Handle, length int64) (err error) { - curoffset, e := Seek(fd, 0, 1) - if e != nil { - return e - } - defer Seek(fd, curoffset, 0) - _, e = Seek(fd, length, 0) - if e != nil { - return e + type _FILE_END_OF_FILE_INFO struct { + EndOfFile int64 } - e = SetEndOfFile(fd) - if e != nil { - return e - } - return nil + var info _FILE_END_OF_FILE_INFO + info.EndOfFile = length + return SetFileInformationByHandle(fd, FileEndOfFileInfo, (*byte)(unsafe.Pointer(&info)), uint32(unsafe.Sizeof(info))) } func Gettimeofday(tv *Timeval) (err error) { @@ -894,6 +888,11 @@ const socket_error = uintptr(^uint32(0)) //sys GetACP() (acp uint32) = kernel32.GetACP //sys MultiByteToWideChar(codePage uint32, dwFlags uint32, str *byte, nstr int32, wchar *uint16, nwchar int32) (nwrite int32, err error) = kernel32.MultiByteToWideChar //sys getBestInterfaceEx(sockaddr unsafe.Pointer, pdwBestIfIndex *uint32) (errcode error) = iphlpapi.GetBestInterfaceEx +//sys GetIfEntry2Ex(level uint32, row *MibIfRow2) (errcode error) = iphlpapi.GetIfEntry2Ex +//sys GetUnicastIpAddressEntry(row *MibUnicastIpAddressRow) (errcode error) = iphlpapi.GetUnicastIpAddressEntry +//sys NotifyIpInterfaceChange(family uint16, callback uintptr, callerContext unsafe.Pointer, initialNotification bool, notificationHandle *Handle) (errcode error) = iphlpapi.NotifyIpInterfaceChange +//sys NotifyUnicastIpAddressChange(family uint16, callback uintptr, callerContext unsafe.Pointer, initialNotification bool, notificationHandle *Handle) (errcode error) = iphlpapi.NotifyUnicastIpAddressChange +//sys CancelMibChangeNotify2(notificationHandle Handle) (errcode error) = iphlpapi.CancelMibChangeNotify2 // For testing: clients can set this flag to force // creation of IPv6 sockets to return EAFNOSUPPORT. @@ -1685,13 +1684,16 @@ func (s NTStatus) Error() string { // do not use NTUnicodeString, and instead UTF16PtrFromString should be used for // the more common *uint16 string type. func NewNTUnicodeString(s string) (*NTUnicodeString, error) { - var u NTUnicodeString - s16, err := UTF16PtrFromString(s) + s16, err := UTF16FromString(s) if err != nil { return nil, err } - RtlInitUnicodeString(&u, s16) - return &u, nil + n := uint16(len(s16) * 2) + return &NTUnicodeString{ + Length: n - 2, // subtract 2 bytes for the NULL terminator + MaximumLength: n, + Buffer: &s16[0], + }, nil } // Slice returns a uint16 slice that aliases the data in the NTUnicodeString. diff --git a/vendor/golang.org/x/sys/windows/types_windows.go b/vendor/golang.org/x/sys/windows/types_windows.go index 7b97a154c9..9d138de5fe 100644 --- a/vendor/golang.org/x/sys/windows/types_windows.go +++ b/vendor/golang.org/x/sys/windows/types_windows.go @@ -176,6 +176,7 @@ const ( WAIT_FAILED = 0xFFFFFFFF // Access rights for process. + PROCESS_ALL_ACCESS = 0xFFFF PROCESS_CREATE_PROCESS = 0x0080 PROCESS_CREATE_THREAD = 0x0002 PROCESS_DUP_HANDLE = 0x0040 @@ -2203,6 +2204,132 @@ const ( IfOperStatusLowerLayerDown = 7 ) +const ( + IF_MAX_PHYS_ADDRESS_LENGTH = 32 + IF_MAX_STRING_SIZE = 256 +) + +// MIB_IF_ENTRY_LEVEL enumeration from netioapi.h or +// https://learn.microsoft.com/en-us/windows/win32/api/netioapi/nf-netioapi-getifentry2ex. +const ( + MibIfEntryNormal = 0 + MibIfEntryNormalWithoutStatistics = 2 +) + +// MIB_NOTIFICATION_TYPE enumeration from netioapi.h or +// https://learn.microsoft.com/en-us/windows/win32/api/netioapi/ne-netioapi-mib_notification_type. +const ( + MibParameterNotification = 0 + MibAddInstance = 1 + MibDeleteInstance = 2 + MibInitialNotification = 3 +) + +// MibIfRow2 stores information about a particular interface. See +// https://learn.microsoft.com/en-us/windows/win32/api/netioapi/ns-netioapi-mib_if_row2. +type MibIfRow2 struct { + InterfaceLuid uint64 + InterfaceIndex uint32 + InterfaceGuid GUID + Alias [IF_MAX_STRING_SIZE + 1]uint16 + Description [IF_MAX_STRING_SIZE + 1]uint16 + PhysicalAddressLength uint32 + PhysicalAddress [IF_MAX_PHYS_ADDRESS_LENGTH]uint8 + PermanentPhysicalAddress [IF_MAX_PHYS_ADDRESS_LENGTH]uint8 + Mtu uint32 + Type uint32 + TunnelType uint32 + MediaType uint32 + PhysicalMediumType uint32 + AccessType uint32 + DirectionType uint32 + InterfaceAndOperStatusFlags uint8 + OperStatus uint32 + AdminStatus uint32 + MediaConnectState uint32 + NetworkGuid GUID + ConnectionType uint32 + TransmitLinkSpeed uint64 + ReceiveLinkSpeed uint64 + InOctets uint64 + InUcastPkts uint64 + InNUcastPkts uint64 + InDiscards uint64 + InErrors uint64 + InUnknownProtos uint64 + InUcastOctets uint64 + InMulticastOctets uint64 + InBroadcastOctets uint64 + OutOctets uint64 + OutUcastPkts uint64 + OutNUcastPkts uint64 + OutDiscards uint64 + OutErrors uint64 + OutUcastOctets uint64 + OutMulticastOctets uint64 + OutBroadcastOctets uint64 + OutQLen uint64 +} + +// MIB_UNICASTIPADDRESS_ROW stores information about a unicast IP address. See +// https://learn.microsoft.com/en-us/windows/win32/api/netioapi/ns-netioapi-mib_unicastipaddress_row. +type MibUnicastIpAddressRow struct { + Address RawSockaddrInet6 // SOCKADDR_INET union + InterfaceLuid uint64 + InterfaceIndex uint32 + PrefixOrigin uint32 + SuffixOrigin uint32 + ValidLifetime uint32 + PreferredLifetime uint32 + OnLinkPrefixLength uint8 + SkipAsSource uint8 + DadState uint32 + ScopeId uint32 + CreationTimeStamp Filetime +} + +const ScopeLevelCount = 16 + +// MIB_IPINTERFACE_ROW stores interface management information for a particular IP address family on a network interface. +// See https://learn.microsoft.com/en-us/windows/win32/api/netioapi/ns-netioapi-mib_ipinterface_row. +type MibIpInterfaceRow struct { + Family uint16 + InterfaceLuid uint64 + InterfaceIndex uint32 + MaxReassemblySize uint32 + InterfaceIdentifier uint64 + MinRouterAdvertisementInterval uint32 + MaxRouterAdvertisementInterval uint32 + AdvertisingEnabled uint8 + ForwardingEnabled uint8 + WeakHostSend uint8 + WeakHostReceive uint8 + UseAutomaticMetric uint8 + UseNeighborUnreachabilityDetection uint8 + ManagedAddressConfigurationSupported uint8 + OtherStatefulConfigurationSupported uint8 + AdvertiseDefaultRoute uint8 + RouterDiscoveryBehavior uint32 + DadTransmits uint32 + BaseReachableTime uint32 + RetransmitTime uint32 + PathMtuDiscoveryTimeout uint32 + LinkLocalAddressBehavior uint32 + LinkLocalAddressTimeout uint32 + ZoneIndices [ScopeLevelCount]uint32 + SitePrefixLength uint32 + Metric uint32 + NlMtu uint32 + Connected uint8 + SupportsWakeUpPatterns uint8 + SupportsNeighborDiscovery uint8 + SupportsRouterDiscovery uint8 + ReachableTime uint32 + TransmitOffload uint32 + ReceiveOffload uint32 + DisableDefaultRoutes uint8 +} + // Console related constants used for the mode parameter to SetConsoleMode. See // https://docs.microsoft.com/en-us/windows/console/setconsolemode for details. diff --git a/vendor/golang.org/x/sys/windows/zsyscall_windows.go b/vendor/golang.org/x/sys/windows/zsyscall_windows.go index 4c2e1bdc01..01c0716c2c 100644 --- a/vendor/golang.org/x/sys/windows/zsyscall_windows.go +++ b/vendor/golang.org/x/sys/windows/zsyscall_windows.go @@ -181,10 +181,15 @@ var ( procDnsRecordListFree = moddnsapi.NewProc("DnsRecordListFree") procDwmGetWindowAttribute = moddwmapi.NewProc("DwmGetWindowAttribute") procDwmSetWindowAttribute = moddwmapi.NewProc("DwmSetWindowAttribute") + procCancelMibChangeNotify2 = modiphlpapi.NewProc("CancelMibChangeNotify2") procGetAdaptersAddresses = modiphlpapi.NewProc("GetAdaptersAddresses") procGetAdaptersInfo = modiphlpapi.NewProc("GetAdaptersInfo") procGetBestInterfaceEx = modiphlpapi.NewProc("GetBestInterfaceEx") procGetIfEntry = modiphlpapi.NewProc("GetIfEntry") + procGetIfEntry2Ex = modiphlpapi.NewProc("GetIfEntry2Ex") + procGetUnicastIpAddressEntry = modiphlpapi.NewProc("GetUnicastIpAddressEntry") + procNotifyIpInterfaceChange = modiphlpapi.NewProc("NotifyIpInterfaceChange") + procNotifyUnicastIpAddressChange = modiphlpapi.NewProc("NotifyUnicastIpAddressChange") procAddDllDirectory = modkernel32.NewProc("AddDllDirectory") procAssignProcessToJobObject = modkernel32.NewProc("AssignProcessToJobObject") procCancelIo = modkernel32.NewProc("CancelIo") @@ -275,8 +280,10 @@ var ( procGetMaximumProcessorCount = modkernel32.NewProc("GetMaximumProcessorCount") procGetModuleFileNameW = modkernel32.NewProc("GetModuleFileNameW") procGetModuleHandleExW = modkernel32.NewProc("GetModuleHandleExW") + procGetNamedPipeClientProcessId = modkernel32.NewProc("GetNamedPipeClientProcessId") procGetNamedPipeHandleStateW = modkernel32.NewProc("GetNamedPipeHandleStateW") procGetNamedPipeInfo = modkernel32.NewProc("GetNamedPipeInfo") + procGetNamedPipeServerProcessId = modkernel32.NewProc("GetNamedPipeServerProcessId") procGetOverlappedResult = modkernel32.NewProc("GetOverlappedResult") procGetPriorityClass = modkernel32.NewProc("GetPriorityClass") procGetProcAddress = modkernel32.NewProc("GetProcAddress") @@ -1606,6 +1613,14 @@ func DwmSetWindowAttribute(hwnd HWND, attribute uint32, value unsafe.Pointer, si return } +func CancelMibChangeNotify2(notificationHandle Handle) (errcode error) { + r0, _, _ := syscall.Syscall(procCancelMibChangeNotify2.Addr(), 1, uintptr(notificationHandle), 0, 0) + if r0 != 0 { + errcode = syscall.Errno(r0) + } + return +} + func GetAdaptersAddresses(family uint32, flags uint32, reserved uintptr, adapterAddresses *IpAdapterAddresses, sizePointer *uint32) (errcode error) { r0, _, _ := syscall.Syscall6(procGetAdaptersAddresses.Addr(), 5, uintptr(family), uintptr(flags), uintptr(reserved), uintptr(unsafe.Pointer(adapterAddresses)), uintptr(unsafe.Pointer(sizePointer)), 0) if r0 != 0 { @@ -1638,6 +1653,46 @@ func GetIfEntry(pIfRow *MibIfRow) (errcode error) { return } +func GetIfEntry2Ex(level uint32, row *MibIfRow2) (errcode error) { + r0, _, _ := syscall.Syscall(procGetIfEntry2Ex.Addr(), 2, uintptr(level), uintptr(unsafe.Pointer(row)), 0) + if r0 != 0 { + errcode = syscall.Errno(r0) + } + return +} + +func GetUnicastIpAddressEntry(row *MibUnicastIpAddressRow) (errcode error) { + r0, _, _ := syscall.Syscall(procGetUnicastIpAddressEntry.Addr(), 1, uintptr(unsafe.Pointer(row)), 0, 0) + if r0 != 0 { + errcode = syscall.Errno(r0) + } + return +} + +func NotifyIpInterfaceChange(family uint16, callback uintptr, callerContext unsafe.Pointer, initialNotification bool, notificationHandle *Handle) (errcode error) { + var _p0 uint32 + if initialNotification { + _p0 = 1 + } + r0, _, _ := syscall.Syscall6(procNotifyIpInterfaceChange.Addr(), 5, uintptr(family), uintptr(callback), uintptr(callerContext), uintptr(_p0), uintptr(unsafe.Pointer(notificationHandle)), 0) + if r0 != 0 { + errcode = syscall.Errno(r0) + } + return +} + +func NotifyUnicastIpAddressChange(family uint16, callback uintptr, callerContext unsafe.Pointer, initialNotification bool, notificationHandle *Handle) (errcode error) { + var _p0 uint32 + if initialNotification { + _p0 = 1 + } + r0, _, _ := syscall.Syscall6(procNotifyUnicastIpAddressChange.Addr(), 5, uintptr(family), uintptr(callback), uintptr(callerContext), uintptr(_p0), uintptr(unsafe.Pointer(notificationHandle)), 0) + if r0 != 0 { + errcode = syscall.Errno(r0) + } + return +} + func AddDllDirectory(path *uint16) (cookie uintptr, err error) { r0, _, e1 := syscall.Syscall(procAddDllDirectory.Addr(), 1, uintptr(unsafe.Pointer(path)), 0, 0) cookie = uintptr(r0) @@ -2393,6 +2448,14 @@ func GetModuleHandleEx(flags uint32, moduleName *uint16, module *Handle) (err er return } +func GetNamedPipeClientProcessId(pipe Handle, clientProcessID *uint32) (err error) { + r1, _, e1 := syscall.Syscall(procGetNamedPipeClientProcessId.Addr(), 2, uintptr(pipe), uintptr(unsafe.Pointer(clientProcessID)), 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + func GetNamedPipeHandleState(pipe Handle, state *uint32, curInstances *uint32, maxCollectionCount *uint32, collectDataTimeout *uint32, userName *uint16, maxUserNameSize uint32) (err error) { r1, _, e1 := syscall.Syscall9(procGetNamedPipeHandleStateW.Addr(), 7, uintptr(pipe), uintptr(unsafe.Pointer(state)), uintptr(unsafe.Pointer(curInstances)), uintptr(unsafe.Pointer(maxCollectionCount)), uintptr(unsafe.Pointer(collectDataTimeout)), uintptr(unsafe.Pointer(userName)), uintptr(maxUserNameSize), 0, 0) if r1 == 0 { @@ -2409,6 +2472,14 @@ func GetNamedPipeInfo(pipe Handle, flags *uint32, outSize *uint32, inSize *uint3 return } +func GetNamedPipeServerProcessId(pipe Handle, serverProcessID *uint32) (err error) { + r1, _, e1 := syscall.Syscall(procGetNamedPipeServerProcessId.Addr(), 2, uintptr(pipe), uintptr(unsafe.Pointer(serverProcessID)), 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + func GetOverlappedResult(handle Handle, overlapped *Overlapped, done *uint32, wait bool) (err error) { var _p0 uint32 if wait { diff --git a/vendor/golang.org/x/term/README.md b/vendor/golang.org/x/term/README.md index d03d0aefef..05ff623f94 100644 --- a/vendor/golang.org/x/term/README.md +++ b/vendor/golang.org/x/term/README.md @@ -4,16 +4,13 @@ This repository provides Go terminal and console support packages. -## Download/Install - -The easiest way to install is to run `go get -u golang.org/x/term`. You can -also manually git clone the repository to `$GOPATH/src/golang.org/x/term`. - ## Report Issues / Send Patches This repository uses Gerrit for code changes. To learn how to submit changes to -this repository, see https://golang.org/doc/contribute.html. +this repository, see https://go.dev/doc/contribute. + +The git repository is https://go.googlesource.com/term. The main issue tracker for the term repository is located at -https://github.com/golang/go/issues. Prefix your issue with "x/term:" in the +https://go.dev/issues. Prefix your issue with "x/term:" in the subject line, so it is easy to find. diff --git a/vendor/modules.txt b/vendor/modules.txt index c3a959dedc..26ebe57b82 100644 --- a/vendor/modules.txt +++ b/vendor/modules.txt @@ -608,11 +608,9 @@ github.com/spf13/cobra github.com/spf13/pflag # github.com/stretchr/objx v0.5.2 ## explicit; go 1.20 -github.com/stretchr/objx # github.com/stretchr/testify v1.9.0 ## explicit; go 1.17 github.com/stretchr/testify/assert -github.com/stretchr/testify/mock github.com/stretchr/testify/require github.com/stretchr/testify/suite # github.com/thoas/go-funk v0.8.0 @@ -676,7 +674,7 @@ go.mongodb.org/mongo-driver/bson/bsonrw go.mongodb.org/mongo-driver/bson/bsontype go.mongodb.org/mongo-driver/bson/primitive go.mongodb.org/mongo-driver/x/bsonx/bsoncore -# golang.org/x/crypto v0.27.0 +# golang.org/x/crypto v0.31.0 ## explicit; go 1.20 golang.org/x/crypto/acme golang.org/x/crypto/acme/autocert @@ -713,10 +711,10 @@ golang.org/x/net/http2/hpack golang.org/x/net/idna golang.org/x/net/internal/socks golang.org/x/net/proxy -# golang.org/x/sync v0.8.0 +# golang.org/x/sync v0.10.0 ## explicit; go 1.18 golang.org/x/sync/errgroup -# golang.org/x/sys v0.25.0 +# golang.org/x/sys v0.28.0 ## explicit; go 1.18 golang.org/x/sys/cpu golang.org/x/sys/execabs @@ -724,10 +722,10 @@ golang.org/x/sys/plan9 golang.org/x/sys/unix golang.org/x/sys/windows golang.org/x/sys/windows/registry -# golang.org/x/term v0.24.0 +# golang.org/x/term v0.27.0 ## explicit; go 1.18 golang.org/x/term -# golang.org/x/text v0.18.0 +# golang.org/x/text v0.21.0 ## explicit; go 1.18 golang.org/x/text/cases golang.org/x/text/internal From 63973c69120170a0e45c64517a1fbee1649e0b73 Mon Sep 17 00:00:00 2001 From: mitchell Date: Mon, 16 Dec 2024 14:51:51 -0500 Subject: [PATCH 089/336] Assert installing as admin prompt happens on Windows. --- cmd/state-installer/test/integration/installer_int_test.go | 3 +++ test/integration/install_scripts_int_test.go | 3 +++ 2 files changed, 6 insertions(+) diff --git a/cmd/state-installer/test/integration/installer_int_test.go b/cmd/state-installer/test/integration/installer_int_test.go index 89b102a305..d55adf8869 100644 --- a/cmd/state-installer/test/integration/installer_int_test.go +++ b/cmd/state-installer/test/integration/installer_int_test.go @@ -48,6 +48,9 @@ func (suite *InstallerIntegrationTestSuite) TestInstallFromLocalSource() { // Assert output cp.Expect("Installing State Tool") + if runtime.GOOS == "windows" { + cp.Expect("Continuing because State Tool is running in non-interactive mode") // admin prompt + } cp.Expect("Done") cp.Expect("successfully installed") suite.NotContains(cp.Output(), "Downloading State Tool") diff --git a/test/integration/install_scripts_int_test.go b/test/integration/install_scripts_int_test.go index 87e8d5e424..7c27fd4cd6 100644 --- a/test/integration/install_scripts_int_test.go +++ b/test/integration/install_scripts_int_test.go @@ -114,6 +114,9 @@ func (suite *InstallScriptsIntegrationTestSuite) TestInstall() { } cp := ts.SpawnCmdWithOpts(cmd, opts...) cp.Expect("Preparing Installer for State Tool Package Manager") + if runtime.GOOS == "windows" { + cp.Expect("Continuing because the '--force' flag is set") // admin prompt + } cp.Expect("Installation Complete", e2e.RuntimeSourcingTimeoutOpt) if tt.Activate != "" || tt.ActivateByCommand != "" { From f70957bfaaf4cbdd462b8f722066fa0ac31f5e1a Mon Sep 17 00:00:00 2001 From: mitchell Date: Mon, 16 Dec 2024 15:07:50 -0500 Subject: [PATCH 090/336] Force prompt option should override non-interactive option. --- internal/prompt/prompt.go | 12 +++--------- 1 file changed, 3 insertions(+), 9 deletions(-) diff --git a/internal/prompt/prompt.go b/internal/prompt/prompt.go index d1db14cb01..4ae16f9ef5 100644 --- a/internal/prompt/prompt.go +++ b/internal/prompt/prompt.go @@ -129,9 +129,7 @@ func (p *Prompt) InputAndValidate(title, message string, defaultResponse *string if nonInteractiveResponse == nil { return "", ErrNoForceOption } - } - - if !p.isInteractive { + } else if !p.isInteractive { nonInteractiveResponse = defaultResponse if nonInteractiveResponse == nil { return "", interactiveInputError(message) @@ -194,9 +192,7 @@ func (p *Prompt) Select(title, message string, choices []string, defaultChoice * if nonInteractiveChoice == nil { return "", ErrNoForceOption } - } - - if !p.isInteractive { + } else if !p.isInteractive { nonInteractiveChoice = defaultChoice if nonInteractiveChoice == nil { return "", interactiveInputError(message) @@ -253,9 +249,7 @@ func (p *Prompt) Confirm(title, message string, defaultChoice *bool, forcedChoic if nonInteractiveChoice == nil { return false, ErrNoForceOption } - } - - if !p.isInteractive { + } else if !p.isInteractive { nonInteractiveChoice = defaultChoice if nonInteractiveChoice == nil { return false, interactiveInputError(message) From 86fb843bd886d6b738ae67645227e412ae4ce0cd Mon Sep 17 00:00:00 2001 From: mitchell Date: Wed, 18 Dec 2024 16:32:11 -0500 Subject: [PATCH 091/336] Installers should not default to non-interactive. --- cmd/state-installer/cmd.go | 2 +- cmd/state-remote-installer/main.go | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/cmd/state-installer/cmd.go b/cmd/state-installer/cmd.go index dc9f1deb72..89a5450319 100644 --- a/cmd/state-installer/cmd.go +++ b/cmd/state-installer/cmd.go @@ -105,7 +105,7 @@ func main() { OutWriter: os.Stdout, ErrWriter: os.Stderr, Colored: true, - Interactive: false, + Interactive: term.IsTerminal(int(os.Stdin.Fd())), }) if err != nil { multilog.Critical("Could not set up output handler: " + errs.JoinMessage(err)) diff --git a/cmd/state-remote-installer/main.go b/cmd/state-remote-installer/main.go index 7aa6a5653f..af903268b6 100644 --- a/cmd/state-remote-installer/main.go +++ b/cmd/state-remote-installer/main.go @@ -29,6 +29,7 @@ import ( "github.com/ActiveState/cli/internal/runbits/errors" "github.com/ActiveState/cli/internal/runbits/panics" "github.com/ActiveState/cli/internal/updater" + "golang.org/x/term" ) type Params struct { @@ -90,7 +91,7 @@ func main() { OutWriter: os.Stdout, ErrWriter: os.Stderr, Colored: true, - Interactive: false, + Interactive: term.IsTerminal(int(os.Stdin.Fd())), }) if err != nil { logging.Error("Could not set up output handler: " + errs.JoinMessage(err)) From 9d57da838d311ce3308526e5f13044c2c8c39278 Mon Sep 17 00:00:00 2001 From: mitchell Date: Wed, 18 Dec 2024 17:01:35 -0500 Subject: [PATCH 092/336] Fixed remote installer accepting TOS in non-interactive mode. --- cmd/state-remote-installer/main.go | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/cmd/state-remote-installer/main.go b/cmd/state-remote-installer/main.go index af903268b6..8d2c3c6116 100644 --- a/cmd/state-remote-installer/main.go +++ b/cmd/state-remote-installer/main.go @@ -173,9 +173,13 @@ func main() { } func execute(out output.Outputer, prompt prompt.Prompter, cfg *config.Instance, an analytics.Dispatcher, args []string, params *Params) error { + if params.nonInteractive { + prompt.SetInteractive(false) + } + defaultChoice := params.nonInteractive msg := locale.Tr("tos_disclaimer", constants.TermsOfServiceURLLatest) msg += locale.Tr("tos_disclaimer_prompt", constants.TermsOfServiceURLLatest) - cont, err := prompt.Confirm(locale.Tr("install_remote_title"), msg, ptr.To(true), nil) + cont, err := prompt.Confirm(locale.Tr("install_remote_title"), msg, &defaultChoice, nil) if err != nil { return errs.Wrap(err, "Not confirmed") } From edfa0c128586fb5d659d2e5600cc0b90d02765f0 Mon Sep 17 00:00:00 2001 From: mitchell Date: Mon, 23 Dec 2024 12:25:46 -0500 Subject: [PATCH 093/336] Bump golang-jwt version to address CVE. --- go.mod | 2 +- go.sum | 2 + vendor/github.com/golang-jwt/jwt/v4/README.md | 47 ++++++++++++------- .../github.com/golang-jwt/jwt/v4/SECURITY.md | 19 ++++++++ vendor/github.com/golang-jwt/jwt/v4/claims.go | 10 ++-- vendor/github.com/golang-jwt/jwt/v4/parser.go | 36 ++++++++------ .../github.com/golang-jwt/jwt/v4/rsa_pss.go | 1 + vendor/github.com/golang-jwt/jwt/v4/token.go | 21 +++++++-- vendor/github.com/golang-jwt/jwt/v4/types.go | 20 ++++++-- vendor/modules.txt | 4 +- 10 files changed, 115 insertions(+), 47 deletions(-) create mode 100644 vendor/github.com/golang-jwt/jwt/v4/SECURITY.md diff --git a/go.mod b/go.mod index 12567127cc..55a15ab997 100644 --- a/go.mod +++ b/go.mod @@ -135,7 +135,7 @@ require ( github.com/go-openapi/spec v0.20.3 // indirect github.com/go-stack/stack v1.8.0 // indirect github.com/golang-jwt/jwt v3.2.2+incompatible // indirect - github.com/golang-jwt/jwt/v4 v4.3.0 // indirect + github.com/golang-jwt/jwt/v4 v4.5.1 // indirect github.com/golang/snappy v0.0.4 // indirect github.com/google/go-querystring v1.1.0 // indirect github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99 // indirect diff --git a/go.sum b/go.sum index 9e9fc36e64..b5fa1de3be 100644 --- a/go.sum +++ b/go.sum @@ -313,6 +313,8 @@ github.com/golang-jwt/jwt v3.2.2+incompatible h1:IfV12K8xAKAnZqdXVzCZ+TOjboZ2keL github.com/golang-jwt/jwt v3.2.2+incompatible/go.mod h1:8pz2t5EyA70fFQQSrl6XZXzqecmYZeUEB8OUGHkxJ+I= github.com/golang-jwt/jwt/v4 v4.3.0 h1:kHL1vqdqWNfATmA0FNMdmZNMyZI1U6O31X4rlIPoBog= github.com/golang-jwt/jwt/v4 v4.3.0/go.mod h1:/xlHOz8bRuivTWchD4jCa+NbatV+wEUSzwAxVc6locg= +github.com/golang-jwt/jwt/v4 v4.5.1 h1:JdqV9zKUdtaa9gdPlywC3aeoEsR681PlKC+4F5gQgeo= +github.com/golang-jwt/jwt/v4 v4.5.1/go.mod h1:m21LjoU+eqJr34lmDMbreY2eSTRJ1cv77w39/MY0Ch0= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= github.com/golang/groupcache v0.0.0-20190129154638-5b532d6fd5ef/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l8iNU+DwB5epxmsaqB+rhGL0m5jtYqE= diff --git a/vendor/github.com/golang-jwt/jwt/v4/README.md b/vendor/github.com/golang-jwt/jwt/v4/README.md index 01b21646e0..30f2f2a6f7 100644 --- a/vendor/github.com/golang-jwt/jwt/v4/README.md +++ b/vendor/github.com/golang-jwt/jwt/v4/README.md @@ -36,24 +36,39 @@ The part in the middle is the interesting bit. It's called the Claims and conta This library supports the parsing and verification as well as the generation and signing of JWTs. Current supported signing algorithms are HMAC SHA, RSA, RSA-PSS, and ECDSA, though hooks are present for adding your own. +## Installation Guidelines + +1. To install the jwt package, you first need to have [Go](https://go.dev/doc/install) installed, then you can use the command below to add `jwt-go` as a dependency in your Go program. + +```sh +go get -u github.com/golang-jwt/jwt/v4 +``` + +2. Import it in your code: + +```go +import "github.com/golang-jwt/jwt/v4" +``` + ## Examples -See [the project documentation](https://pkg.go.dev/github.com/golang-jwt/jwt) for examples of usage: +See [the project documentation](https://pkg.go.dev/github.com/golang-jwt/jwt/v4) for examples of usage: -* [Simple example of parsing and validating a token](https://pkg.go.dev/github.com/golang-jwt/jwt#example-Parse-Hmac) -* [Simple example of building and signing a token](https://pkg.go.dev/github.com/golang-jwt/jwt#example-New-Hmac) -* [Directory of Examples](https://pkg.go.dev/github.com/golang-jwt/jwt#pkg-examples) +* [Simple example of parsing and validating a token](https://pkg.go.dev/github.com/golang-jwt/jwt/v4#example-Parse-Hmac) +* [Simple example of building and signing a token](https://pkg.go.dev/github.com/golang-jwt/jwt/v4#example-New-Hmac) +* [Directory of Examples](https://pkg.go.dev/github.com/golang-jwt/jwt/v4#pkg-examples) ## Extensions -This library publishes all the necessary components for adding your own signing methods. Simply implement the `SigningMethod` interface and register a factory method using `RegisterSigningMethod`. +This library publishes all the necessary components for adding your own signing methods or key functions. Simply implement the `SigningMethod` interface and register a factory method using `RegisterSigningMethod` or provide a `jwt.Keyfunc`. -A common use case would be integrating with different 3rd party signature providers, like key management services from various cloud providers or Hardware Security Modules (HSMs). +A common use case would be integrating with different 3rd party signature providers, like key management services from various cloud providers or Hardware Security Modules (HSMs) or to implement additional standards. -| Extension | Purpose | Repo | -|-----------|----------------------------------------------------------------------------------------------|--------------------------------------------| -| GCP | Integrates with multiple Google Cloud Platform signing tools (AppEngine, IAM API, Cloud KMS) | https://github.com/someone1/gcp-jwt-go | -| AWS | Integrates with AWS Key Management Service, KMS | https://github.com/matelang/jwt-go-aws-kms | +| Extension | Purpose | Repo | +| --------- | -------------------------------------------------------------------------------------------------------- | ------------------------------------------ | +| GCP | Integrates with multiple Google Cloud Platform signing tools (AppEngine, IAM API, Cloud KMS) | https://github.com/someone1/gcp-jwt-go | +| AWS | Integrates with AWS Key Management Service, KMS | https://github.com/matelang/jwt-go-aws-kms | +| JWKS | Provides support for JWKS ([RFC 7517](https://datatracker.ietf.org/doc/html/rfc7517)) as a `jwt.Keyfunc` | https://github.com/MicahParks/keyfunc | *Disclaimer*: Unless otherwise specified, these integrations are maintained by third parties and should not be considered as a primary offer by any of the mentioned cloud providers @@ -81,7 +96,7 @@ A token is simply a JSON object that is signed by its author. this tells you exa * The author of the token was in the possession of the signing secret * The data has not been modified since it was signed -It's important to know that JWT does not provide encryption, which means anyone who has access to the token can read its contents. If you need to protect (encrypt) the data, there is a companion spec, `JWE`, that provides this functionality. JWE is currently outside the scope of this library. +It's important to know that JWT does not provide encryption, which means anyone who has access to the token can read its contents. If you need to protect (encrypt) the data, there is a companion spec, `JWE`, that provides this functionality. The companion project https://github.com/golang-jwt/jwe aims at a (very) experimental implementation of the JWE standard. ### Choosing a Signing Method @@ -95,10 +110,10 @@ Asymmetric signing methods, such as RSA, use different keys for signing and veri Each signing method expects a different object type for its signing keys. See the package documentation for details. Here are the most common ones: -* The [HMAC signing method](https://pkg.go.dev/github.com/golang-jwt/jwt#SigningMethodHMAC) (`HS256`,`HS384`,`HS512`) expect `[]byte` values for signing and validation -* The [RSA signing method](https://pkg.go.dev/github.com/golang-jwt/jwt#SigningMethodRSA) (`RS256`,`RS384`,`RS512`) expect `*rsa.PrivateKey` for signing and `*rsa.PublicKey` for validation -* The [ECDSA signing method](https://pkg.go.dev/github.com/golang-jwt/jwt#SigningMethodECDSA) (`ES256`,`ES384`,`ES512`) expect `*ecdsa.PrivateKey` for signing and `*ecdsa.PublicKey` for validation -* The [EdDSA signing method](https://pkg.go.dev/github.com/golang-jwt/jwt#SigningMethodEd25519) (`Ed25519`) expect `ed25519.PrivateKey` for signing and `ed25519.PublicKey` for validation +* The [HMAC signing method](https://pkg.go.dev/github.com/golang-jwt/jwt/v4#SigningMethodHMAC) (`HS256`,`HS384`,`HS512`) expect `[]byte` values for signing and validation +* The [RSA signing method](https://pkg.go.dev/github.com/golang-jwt/jwt/v4#SigningMethodRSA) (`RS256`,`RS384`,`RS512`) expect `*rsa.PrivateKey` for signing and `*rsa.PublicKey` for validation +* The [ECDSA signing method](https://pkg.go.dev/github.com/golang-jwt/jwt/v4#SigningMethodECDSA) (`ES256`,`ES384`,`ES512`) expect `*ecdsa.PrivateKey` for signing and `*ecdsa.PublicKey` for validation +* The [EdDSA signing method](https://pkg.go.dev/github.com/golang-jwt/jwt/v4#SigningMethodEd25519) (`Ed25519`) expect `ed25519.PrivateKey` for signing and `ed25519.PublicKey` for validation ### JWT and OAuth @@ -116,7 +131,7 @@ This library uses descriptive error messages whenever possible. If you are not g ## More -Documentation can be found [on pkg.go.dev](https://pkg.go.dev/github.com/golang-jwt/jwt). +Documentation can be found [on pkg.go.dev](https://pkg.go.dev/github.com/golang-jwt/jwt/v4). The command line utility included in this project (cmd/jwt) provides a straightforward example of token creation and parsing as well as a useful tool for debugging your own integration. You'll also find several implementation examples in the documentation. diff --git a/vendor/github.com/golang-jwt/jwt/v4/SECURITY.md b/vendor/github.com/golang-jwt/jwt/v4/SECURITY.md new file mode 100644 index 0000000000..b08402c342 --- /dev/null +++ b/vendor/github.com/golang-jwt/jwt/v4/SECURITY.md @@ -0,0 +1,19 @@ +# Security Policy + +## Supported Versions + +As of February 2022 (and until this document is updated), the latest version `v4` is supported. + +## Reporting a Vulnerability + +If you think you found a vulnerability, and even if you are not sure, please report it to jwt-go-security@googlegroups.com or one of the other [golang-jwt maintainers](https://github.com/orgs/golang-jwt/people). Please try be explicit, describe steps to reproduce the security issue with code example(s). + +You will receive a response within a timely manner. If the issue is confirmed, we will do our best to release a patch as soon as possible given the complexity of the problem. + +## Public Discussions + +Please avoid publicly discussing a potential security vulnerability. + +Let's take this offline and find a solution first, this limits the potential impact as much as possible. + +We appreciate your help! diff --git a/vendor/github.com/golang-jwt/jwt/v4/claims.go b/vendor/github.com/golang-jwt/jwt/v4/claims.go index 4f00db2fb8..364cec8773 100644 --- a/vendor/github.com/golang-jwt/jwt/v4/claims.go +++ b/vendor/github.com/golang-jwt/jwt/v4/claims.go @@ -56,7 +56,7 @@ func (c RegisteredClaims) Valid() error { // default value in Go, let's not fail the verification for them. if !c.VerifyExpiresAt(now, false) { delta := now.Sub(c.ExpiresAt.Time) - vErr.Inner = fmt.Errorf("%s by %v", delta, ErrTokenExpired) + vErr.Inner = fmt.Errorf("%s by %s", ErrTokenExpired, delta) vErr.Errors |= ValidationErrorExpired } @@ -149,7 +149,7 @@ func (c StandardClaims) Valid() error { // default value in Go, let's not fail the verification for them. if !c.VerifyExpiresAt(now, false) { delta := time.Unix(now, 0).Sub(time.Unix(c.ExpiresAt, 0)) - vErr.Inner = fmt.Errorf("%s by %v", delta, ErrTokenExpired) + vErr.Inner = fmt.Errorf("%s by %s", ErrTokenExpired, delta) vErr.Errors |= ValidationErrorExpired } @@ -265,9 +265,5 @@ func verifyIss(iss string, cmp string, required bool) bool { if iss == "" { return !required } - if subtle.ConstantTimeCompare([]byte(iss), []byte(cmp)) != 0 { - return true - } else { - return false - } + return subtle.ConstantTimeCompare([]byte(iss), []byte(cmp)) != 0 } diff --git a/vendor/github.com/golang-jwt/jwt/v4/parser.go b/vendor/github.com/golang-jwt/jwt/v4/parser.go index 2f61a69d7f..9dd36e5a5a 100644 --- a/vendor/github.com/golang-jwt/jwt/v4/parser.go +++ b/vendor/github.com/golang-jwt/jwt/v4/parser.go @@ -36,12 +36,21 @@ func NewParser(options ...ParserOption) *Parser { return p } -// Parse parses, validates, verifies the signature and returns the parsed token. -// keyFunc will receive the parsed token and should return the key for validating. +// Parse parses, validates, verifies the signature and returns the parsed token. keyFunc will +// receive the parsed token and should return the key for validating. func (p *Parser) Parse(tokenString string, keyFunc Keyfunc) (*Token, error) { return p.ParseWithClaims(tokenString, MapClaims{}, keyFunc) } +// ParseWithClaims parses, validates, and verifies like Parse, but supplies a default object +// implementing the Claims interface. This provides default values which can be overridden and +// allows a caller to use their own type, rather than the default MapClaims implementation of +// Claims. +// +// Note: If you provide a custom claim implementation that embeds one of the standard claims (such +// as RegisteredClaims), make sure that a) you either embed a non-pointer version of the claims or +// b) if you are using a pointer, allocate the proper memory for it before passing in the overall +// claims, otherwise you might run into a panic. func (p *Parser) ParseWithClaims(tokenString string, claims Claims, keyFunc Keyfunc) (*Token, error) { token, parts, err := p.ParseUnverified(tokenString, claims) if err != nil { @@ -78,12 +87,17 @@ func (p *Parser) ParseWithClaims(tokenString string, claims Claims, keyFunc Keyf return token, &ValidationError{Inner: err, Errors: ValidationErrorUnverifiable} } + // Perform validation + token.Signature = parts[2] + if err := token.Method.Verify(strings.Join(parts[0:2], "."), token.Signature, key); err != nil { + return token, &ValidationError{Inner: err, Errors: ValidationErrorSignatureInvalid} + } + vErr := &ValidationError{} // Validate Claims if !p.SkipClaimsValidation { if err := token.Claims.Valid(); err != nil { - // If the Claims Valid returned an error, check if it is a validation error, // If it was another error type, create a ValidationError with a generic ClaimsInvalid flag set if e, ok := err.(*ValidationError); !ok { @@ -91,22 +105,14 @@ func (p *Parser) ParseWithClaims(tokenString string, claims Claims, keyFunc Keyf } else { vErr = e } + return token, vErr } } - // Perform validation - token.Signature = parts[2] - if err = token.Method.Verify(strings.Join(parts[0:2], "."), token.Signature, key); err != nil { - vErr.Inner = err - vErr.Errors |= ValidationErrorSignatureInvalid - } - - if vErr.valid() { - token.Valid = true - return token, nil - } + // No errors so far, token is valid. + token.Valid = true - return token, vErr + return token, nil } // ParseUnverified parses the token but doesn't validate the signature. diff --git a/vendor/github.com/golang-jwt/jwt/v4/rsa_pss.go b/vendor/github.com/golang-jwt/jwt/v4/rsa_pss.go index 5a8502feb3..4fd6f9e610 100644 --- a/vendor/github.com/golang-jwt/jwt/v4/rsa_pss.go +++ b/vendor/github.com/golang-jwt/jwt/v4/rsa_pss.go @@ -1,3 +1,4 @@ +//go:build go1.4 // +build go1.4 package jwt diff --git a/vendor/github.com/golang-jwt/jwt/v4/token.go b/vendor/github.com/golang-jwt/jwt/v4/token.go index 09b4cde5ae..786b275ce0 100644 --- a/vendor/github.com/golang-jwt/jwt/v4/token.go +++ b/vendor/github.com/golang-jwt/jwt/v4/token.go @@ -7,7 +7,6 @@ import ( "time" ) - // DecodePaddingAllowed will switch the codec used for decoding JWTs respectively. Note that the JWS RFC7515 // states that the tokens will utilize a Base64url encoding with no padding. Unfortunately, some implementations // of JWT are producing non-standard tokens, and thus require support for decoding. Note that this is a global @@ -15,6 +14,12 @@ import ( // To use the non-recommended decoding, set this boolean to `true` prior to using this package. var DecodePaddingAllowed bool +// DecodeStrict will switch the codec used for decoding JWTs into strict mode. +// In this mode, the decoder requires that trailing padding bits are zero, as described in RFC 4648 section 3.5. +// Note that this is a global variable, and updating it will change the behavior on a package level, and is also NOT go-routine safe. +// To use strict decoding, set this boolean to `true` prior to using this package. +var DecodeStrict bool + // TimeFunc provides the current time when parsing token to validate "exp" claim (expiration time). // You can override it to use another time value. This is useful for testing or if your // server uses a different time zone than your tokens. @@ -100,6 +105,11 @@ func Parse(tokenString string, keyFunc Keyfunc, options ...ParserOption) (*Token return NewParser(options...).Parse(tokenString, keyFunc) } +// ParseWithClaims is a shortcut for NewParser().ParseWithClaims(). +// +// Note: If you provide a custom claim implementation that embeds one of the standard claims (such as RegisteredClaims), +// make sure that a) you either embed a non-pointer version of the claims or b) if you are using a pointer, allocate the +// proper memory for it before passing in the overall claims, otherwise you might run into a panic. func ParseWithClaims(tokenString string, claims Claims, keyFunc Keyfunc, options ...ParserOption) (*Token, error) { return NewParser(options...).ParseWithClaims(tokenString, claims, keyFunc) } @@ -117,12 +127,17 @@ func EncodeSegment(seg []byte) string { // Deprecated: In a future release, we will demote this function to a non-exported function, since it // should only be used internally func DecodeSegment(seg string) ([]byte, error) { + encoding := base64.RawURLEncoding + if DecodePaddingAllowed { if l := len(seg) % 4; l > 0 { seg += strings.Repeat("=", 4-l) } - return base64.URLEncoding.DecodeString(seg) + encoding = base64.URLEncoding } - return base64.RawURLEncoding.DecodeString(seg) + if DecodeStrict { + encoding = encoding.Strict() + } + return encoding.DecodeString(seg) } diff --git a/vendor/github.com/golang-jwt/jwt/v4/types.go b/vendor/github.com/golang-jwt/jwt/v4/types.go index 2c647fd2e6..ac8e140eb1 100644 --- a/vendor/github.com/golang-jwt/jwt/v4/types.go +++ b/vendor/github.com/golang-jwt/jwt/v4/types.go @@ -53,9 +53,23 @@ func (date NumericDate) MarshalJSON() (b []byte, err error) { if TimePrecision < time.Second { prec = int(math.Log10(float64(time.Second) / float64(TimePrecision))) } - f := float64(date.Truncate(TimePrecision).UnixNano()) / float64(time.Second) - - return []byte(strconv.FormatFloat(f, 'f', prec, 64)), nil + truncatedDate := date.Truncate(TimePrecision) + + // For very large timestamps, UnixNano would overflow an int64, but this + // function requires nanosecond level precision, so we have to use the + // following technique to get round the issue: + // 1. Take the normal unix timestamp to form the whole number part of the + // output, + // 2. Take the result of the Nanosecond function, which retuns the offset + // within the second of the particular unix time instance, to form the + // decimal part of the output + // 3. Concatenate them to produce the final result + seconds := strconv.FormatInt(truncatedDate.Unix(), 10) + nanosecondsOffset := strconv.FormatFloat(float64(truncatedDate.Nanosecond())/float64(time.Second), 'f', prec, 64) + + output := append([]byte(seconds), []byte(nanosecondsOffset)[1:]...) + + return output, nil } // UnmarshalJSON is an implementation of the json.RawMessage interface and deserializses a diff --git a/vendor/modules.txt b/vendor/modules.txt index 26ebe57b82..6e80f5c6cb 100644 --- a/vendor/modules.txt +++ b/vendor/modules.txt @@ -344,8 +344,8 @@ github.com/gofrs/flock # github.com/golang-jwt/jwt v3.2.2+incompatible ## explicit github.com/golang-jwt/jwt -# github.com/golang-jwt/jwt/v4 v4.3.0 -## explicit; go 1.15 +# github.com/golang-jwt/jwt/v4 v4.5.1 +## explicit; go 1.16 github.com/golang-jwt/jwt/v4 # github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da ## explicit From 9d8eed8b961c5a7b754bd6a42f0633738c3c8130 Mon Sep 17 00:00:00 2001 From: mitchell Date: Mon, 23 Dec 2024 12:43:56 -0500 Subject: [PATCH 094/336] Bump golang.org/net/x to fix CVE. --- go.mod | 2 +- go.sum | 2 + .../x/net/http2/client_conn_pool.go | 8 +- vendor/golang.org/x/net/http2/config.go | 122 +++++ vendor/golang.org/x/net/http2/config_go124.go | 61 +++ .../x/net/http2/config_pre_go124.go | 16 + vendor/golang.org/x/net/http2/frame.go | 4 +- vendor/golang.org/x/net/http2/http2.go | 95 +++- vendor/golang.org/x/net/http2/server.go | 244 ++++++--- vendor/golang.org/x/net/http2/transport.go | 516 ++++++++++++------ vendor/golang.org/x/net/http2/unencrypted.go | 32 ++ vendor/golang.org/x/net/http2/write.go | 10 + vendor/modules.txt | 2 +- 13 files changed, 840 insertions(+), 274 deletions(-) create mode 100644 vendor/golang.org/x/net/http2/config.go create mode 100644 vendor/golang.org/x/net/http2/config_go124.go create mode 100644 vendor/golang.org/x/net/http2/config_pre_go124.go create mode 100644 vendor/golang.org/x/net/http2/unencrypted.go diff --git a/go.mod b/go.mod index 12567127cc..8fbcaa881d 100644 --- a/go.mod +++ b/go.mod @@ -58,7 +58,7 @@ require ( github.com/vbauerster/mpb/v7 v7.1.5 github.com/vektah/gqlparser/v2 v2.5.16 golang.org/x/crypto v0.31.0 // indirect - golang.org/x/net v0.29.0 + golang.org/x/net v0.33.0 golang.org/x/sys v0.28.0 golang.org/x/term v0.27.0 golang.org/x/text v0.21.0 diff --git a/go.sum b/go.sum index 9e9fc36e64..50ce8f319e 100644 --- a/go.sum +++ b/go.sum @@ -792,6 +792,8 @@ golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= golang.org/x/net v0.8.0/go.mod h1:QVkue5JL9kW//ek3r6jTKnTFis1tRmNAW2P1shuFdJc= golang.org/x/net v0.29.0 h1:5ORfpBpCs4HzDYoodCDBbwHzdR5UrLBZ3sOnUJmFoHo= golang.org/x/net v0.29.0/go.mod h1:gLkgy8jTGERgjzMic6DS9+SP0ajcu6Xu3Orq/SpETg0= +golang.org/x/net v0.33.0 h1:74SYHlV8BIgHIFC/LrYkOGIwL19eTYXQ5wc6TBuO36I= +golang.org/x/net v0.33.0/go.mod h1:HXLR5J+9DxmrqMwG9qjGCxZ+zKXxBru04zlTvWlWuN4= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= diff --git a/vendor/golang.org/x/net/http2/client_conn_pool.go b/vendor/golang.org/x/net/http2/client_conn_pool.go index 780968d6c1..e81b73e6a7 100644 --- a/vendor/golang.org/x/net/http2/client_conn_pool.go +++ b/vendor/golang.org/x/net/http2/client_conn_pool.go @@ -8,8 +8,8 @@ package http2 import ( "context" - "crypto/tls" "errors" + "net" "net/http" "sync" ) @@ -158,7 +158,7 @@ func (c *dialCall) dial(ctx context.Context, addr string) { // This code decides which ones live or die. // The return value used is whether c was used. // c is never closed. -func (p *clientConnPool) addConnIfNeeded(key string, t *Transport, c *tls.Conn) (used bool, err error) { +func (p *clientConnPool) addConnIfNeeded(key string, t *Transport, c net.Conn) (used bool, err error) { p.mu.Lock() for _, cc := range p.conns[key] { if cc.CanTakeNewRequest() { @@ -194,8 +194,8 @@ type addConnCall struct { err error } -func (c *addConnCall) run(t *Transport, key string, tc *tls.Conn) { - cc, err := t.NewClientConn(tc) +func (c *addConnCall) run(t *Transport, key string, nc net.Conn) { + cc, err := t.NewClientConn(nc) p := c.p p.mu.Lock() diff --git a/vendor/golang.org/x/net/http2/config.go b/vendor/golang.org/x/net/http2/config.go new file mode 100644 index 0000000000..de58dfb8dc --- /dev/null +++ b/vendor/golang.org/x/net/http2/config.go @@ -0,0 +1,122 @@ +// Copyright 2024 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package http2 + +import ( + "math" + "net/http" + "time" +) + +// http2Config is a package-internal version of net/http.HTTP2Config. +// +// http.HTTP2Config was added in Go 1.24. +// When running with a version of net/http that includes HTTP2Config, +// we merge the configuration with the fields in Transport or Server +// to produce an http2Config. +// +// Zero valued fields in http2Config are interpreted as in the +// net/http.HTTPConfig documentation. +// +// Precedence order for reconciling configurations is: +// +// - Use the net/http.{Server,Transport}.HTTP2Config value, when non-zero. +// - Otherwise use the http2.{Server.Transport} value. +// - If the resulting value is zero or out of range, use a default. +type http2Config struct { + MaxConcurrentStreams uint32 + MaxDecoderHeaderTableSize uint32 + MaxEncoderHeaderTableSize uint32 + MaxReadFrameSize uint32 + MaxUploadBufferPerConnection int32 + MaxUploadBufferPerStream int32 + SendPingTimeout time.Duration + PingTimeout time.Duration + WriteByteTimeout time.Duration + PermitProhibitedCipherSuites bool + CountError func(errType string) +} + +// configFromServer merges configuration settings from +// net/http.Server.HTTP2Config and http2.Server. +func configFromServer(h1 *http.Server, h2 *Server) http2Config { + conf := http2Config{ + MaxConcurrentStreams: h2.MaxConcurrentStreams, + MaxEncoderHeaderTableSize: h2.MaxEncoderHeaderTableSize, + MaxDecoderHeaderTableSize: h2.MaxDecoderHeaderTableSize, + MaxReadFrameSize: h2.MaxReadFrameSize, + MaxUploadBufferPerConnection: h2.MaxUploadBufferPerConnection, + MaxUploadBufferPerStream: h2.MaxUploadBufferPerStream, + SendPingTimeout: h2.ReadIdleTimeout, + PingTimeout: h2.PingTimeout, + WriteByteTimeout: h2.WriteByteTimeout, + PermitProhibitedCipherSuites: h2.PermitProhibitedCipherSuites, + CountError: h2.CountError, + } + fillNetHTTPServerConfig(&conf, h1) + setConfigDefaults(&conf, true) + return conf +} + +// configFromServer merges configuration settings from h2 and h2.t1.HTTP2 +// (the net/http Transport). +func configFromTransport(h2 *Transport) http2Config { + conf := http2Config{ + MaxEncoderHeaderTableSize: h2.MaxEncoderHeaderTableSize, + MaxDecoderHeaderTableSize: h2.MaxDecoderHeaderTableSize, + MaxReadFrameSize: h2.MaxReadFrameSize, + SendPingTimeout: h2.ReadIdleTimeout, + PingTimeout: h2.PingTimeout, + WriteByteTimeout: h2.WriteByteTimeout, + } + + // Unlike most config fields, where out-of-range values revert to the default, + // Transport.MaxReadFrameSize clips. + if conf.MaxReadFrameSize < minMaxFrameSize { + conf.MaxReadFrameSize = minMaxFrameSize + } else if conf.MaxReadFrameSize > maxFrameSize { + conf.MaxReadFrameSize = maxFrameSize + } + + if h2.t1 != nil { + fillNetHTTPTransportConfig(&conf, h2.t1) + } + setConfigDefaults(&conf, false) + return conf +} + +func setDefault[T ~int | ~int32 | ~uint32 | ~int64](v *T, minval, maxval, defval T) { + if *v < minval || *v > maxval { + *v = defval + } +} + +func setConfigDefaults(conf *http2Config, server bool) { + setDefault(&conf.MaxConcurrentStreams, 1, math.MaxUint32, defaultMaxStreams) + setDefault(&conf.MaxEncoderHeaderTableSize, 1, math.MaxUint32, initialHeaderTableSize) + setDefault(&conf.MaxDecoderHeaderTableSize, 1, math.MaxUint32, initialHeaderTableSize) + if server { + setDefault(&conf.MaxUploadBufferPerConnection, initialWindowSize, math.MaxInt32, 1<<20) + } else { + setDefault(&conf.MaxUploadBufferPerConnection, initialWindowSize, math.MaxInt32, transportDefaultConnFlow) + } + if server { + setDefault(&conf.MaxUploadBufferPerStream, 1, math.MaxInt32, 1<<20) + } else { + setDefault(&conf.MaxUploadBufferPerStream, 1, math.MaxInt32, transportDefaultStreamFlow) + } + setDefault(&conf.MaxReadFrameSize, minMaxFrameSize, maxFrameSize, defaultMaxReadFrameSize) + setDefault(&conf.PingTimeout, 1, math.MaxInt64, 15*time.Second) +} + +// adjustHTTP1MaxHeaderSize converts a limit in bytes on the size of an HTTP/1 header +// to an HTTP/2 MAX_HEADER_LIST_SIZE value. +func adjustHTTP1MaxHeaderSize(n int64) int64 { + // http2's count is in a slightly different unit and includes 32 bytes per pair. + // So, take the net/http.Server value and pad it up a bit, assuming 10 headers. + const perFieldOverhead = 32 // per http2 spec + const typicalHeaders = 10 // conservative + return n + typicalHeaders*perFieldOverhead +} diff --git a/vendor/golang.org/x/net/http2/config_go124.go b/vendor/golang.org/x/net/http2/config_go124.go new file mode 100644 index 0000000000..e3784123c8 --- /dev/null +++ b/vendor/golang.org/x/net/http2/config_go124.go @@ -0,0 +1,61 @@ +// Copyright 2024 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:build go1.24 + +package http2 + +import "net/http" + +// fillNetHTTPServerConfig sets fields in conf from srv.HTTP2. +func fillNetHTTPServerConfig(conf *http2Config, srv *http.Server) { + fillNetHTTPConfig(conf, srv.HTTP2) +} + +// fillNetHTTPServerConfig sets fields in conf from tr.HTTP2. +func fillNetHTTPTransportConfig(conf *http2Config, tr *http.Transport) { + fillNetHTTPConfig(conf, tr.HTTP2) +} + +func fillNetHTTPConfig(conf *http2Config, h2 *http.HTTP2Config) { + if h2 == nil { + return + } + if h2.MaxConcurrentStreams != 0 { + conf.MaxConcurrentStreams = uint32(h2.MaxConcurrentStreams) + } + if h2.MaxEncoderHeaderTableSize != 0 { + conf.MaxEncoderHeaderTableSize = uint32(h2.MaxEncoderHeaderTableSize) + } + if h2.MaxDecoderHeaderTableSize != 0 { + conf.MaxDecoderHeaderTableSize = uint32(h2.MaxDecoderHeaderTableSize) + } + if h2.MaxConcurrentStreams != 0 { + conf.MaxConcurrentStreams = uint32(h2.MaxConcurrentStreams) + } + if h2.MaxReadFrameSize != 0 { + conf.MaxReadFrameSize = uint32(h2.MaxReadFrameSize) + } + if h2.MaxReceiveBufferPerConnection != 0 { + conf.MaxUploadBufferPerConnection = int32(h2.MaxReceiveBufferPerConnection) + } + if h2.MaxReceiveBufferPerStream != 0 { + conf.MaxUploadBufferPerStream = int32(h2.MaxReceiveBufferPerStream) + } + if h2.SendPingTimeout != 0 { + conf.SendPingTimeout = h2.SendPingTimeout + } + if h2.PingTimeout != 0 { + conf.PingTimeout = h2.PingTimeout + } + if h2.WriteByteTimeout != 0 { + conf.WriteByteTimeout = h2.WriteByteTimeout + } + if h2.PermitProhibitedCipherSuites { + conf.PermitProhibitedCipherSuites = true + } + if h2.CountError != nil { + conf.CountError = h2.CountError + } +} diff --git a/vendor/golang.org/x/net/http2/config_pre_go124.go b/vendor/golang.org/x/net/http2/config_pre_go124.go new file mode 100644 index 0000000000..060fd6c64c --- /dev/null +++ b/vendor/golang.org/x/net/http2/config_pre_go124.go @@ -0,0 +1,16 @@ +// Copyright 2024 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:build !go1.24 + +package http2 + +import "net/http" + +// Pre-Go 1.24 fallback. +// The Server.HTTP2 and Transport.HTTP2 config fields were added in Go 1.24. + +func fillNetHTTPServerConfig(conf *http2Config, srv *http.Server) {} + +func fillNetHTTPTransportConfig(conf *http2Config, tr *http.Transport) {} diff --git a/vendor/golang.org/x/net/http2/frame.go b/vendor/golang.org/x/net/http2/frame.go index 105c3b279c..81faec7e75 100644 --- a/vendor/golang.org/x/net/http2/frame.go +++ b/vendor/golang.org/x/net/http2/frame.go @@ -1490,7 +1490,7 @@ func (mh *MetaHeadersFrame) checkPseudos() error { pf := mh.PseudoFields() for i, hf := range pf { switch hf.Name { - case ":method", ":path", ":scheme", ":authority": + case ":method", ":path", ":scheme", ":authority", ":protocol": isRequest = true case ":status": isResponse = true @@ -1498,7 +1498,7 @@ func (mh *MetaHeadersFrame) checkPseudos() error { return pseudoHeaderError(hf.Name) } // Check for duplicates. - // This would be a bad algorithm, but N is 4. + // This would be a bad algorithm, but N is 5. // And this doesn't allocate. for _, hf2 := range pf[:i] { if hf.Name == hf2.Name { diff --git a/vendor/golang.org/x/net/http2/http2.go b/vendor/golang.org/x/net/http2/http2.go index 003e649f30..c7601c909f 100644 --- a/vendor/golang.org/x/net/http2/http2.go +++ b/vendor/golang.org/x/net/http2/http2.go @@ -19,8 +19,9 @@ import ( "bufio" "context" "crypto/tls" + "errors" "fmt" - "io" + "net" "net/http" "os" "sort" @@ -33,10 +34,11 @@ import ( ) var ( - VerboseLogs bool - logFrameWrites bool - logFrameReads bool - inTests bool + VerboseLogs bool + logFrameWrites bool + logFrameReads bool + inTests bool + disableExtendedConnectProtocol bool ) func init() { @@ -49,6 +51,9 @@ func init() { logFrameWrites = true logFrameReads = true } + if strings.Contains(e, "http2xconnect=0") { + disableExtendedConnectProtocol = true + } } const ( @@ -140,6 +145,10 @@ func (s Setting) Valid() error { if s.Val < 16384 || s.Val > 1<<24-1 { return ConnectionError(ErrCodeProtocol) } + case SettingEnableConnectProtocol: + if s.Val != 1 && s.Val != 0 { + return ConnectionError(ErrCodeProtocol) + } } return nil } @@ -149,21 +158,23 @@ func (s Setting) Valid() error { type SettingID uint16 const ( - SettingHeaderTableSize SettingID = 0x1 - SettingEnablePush SettingID = 0x2 - SettingMaxConcurrentStreams SettingID = 0x3 - SettingInitialWindowSize SettingID = 0x4 - SettingMaxFrameSize SettingID = 0x5 - SettingMaxHeaderListSize SettingID = 0x6 + SettingHeaderTableSize SettingID = 0x1 + SettingEnablePush SettingID = 0x2 + SettingMaxConcurrentStreams SettingID = 0x3 + SettingInitialWindowSize SettingID = 0x4 + SettingMaxFrameSize SettingID = 0x5 + SettingMaxHeaderListSize SettingID = 0x6 + SettingEnableConnectProtocol SettingID = 0x8 ) var settingName = map[SettingID]string{ - SettingHeaderTableSize: "HEADER_TABLE_SIZE", - SettingEnablePush: "ENABLE_PUSH", - SettingMaxConcurrentStreams: "MAX_CONCURRENT_STREAMS", - SettingInitialWindowSize: "INITIAL_WINDOW_SIZE", - SettingMaxFrameSize: "MAX_FRAME_SIZE", - SettingMaxHeaderListSize: "MAX_HEADER_LIST_SIZE", + SettingHeaderTableSize: "HEADER_TABLE_SIZE", + SettingEnablePush: "ENABLE_PUSH", + SettingMaxConcurrentStreams: "MAX_CONCURRENT_STREAMS", + SettingInitialWindowSize: "INITIAL_WINDOW_SIZE", + SettingMaxFrameSize: "MAX_FRAME_SIZE", + SettingMaxHeaderListSize: "MAX_HEADER_LIST_SIZE", + SettingEnableConnectProtocol: "ENABLE_CONNECT_PROTOCOL", } func (s SettingID) String() string { @@ -237,13 +248,19 @@ func (cw closeWaiter) Wait() { // Its buffered writer is lazily allocated as needed, to minimize // idle memory usage with many connections. type bufferedWriter struct { - _ incomparable - w io.Writer // immutable - bw *bufio.Writer // non-nil when data is buffered + _ incomparable + group synctestGroupInterface // immutable + conn net.Conn // immutable + bw *bufio.Writer // non-nil when data is buffered + byteTimeout time.Duration // immutable, WriteByteTimeout } -func newBufferedWriter(w io.Writer) *bufferedWriter { - return &bufferedWriter{w: w} +func newBufferedWriter(group synctestGroupInterface, conn net.Conn, timeout time.Duration) *bufferedWriter { + return &bufferedWriter{ + group: group, + conn: conn, + byteTimeout: timeout, + } } // bufWriterPoolBufferSize is the size of bufio.Writer's @@ -270,7 +287,7 @@ func (w *bufferedWriter) Available() int { func (w *bufferedWriter) Write(p []byte) (n int, err error) { if w.bw == nil { bw := bufWriterPool.Get().(*bufio.Writer) - bw.Reset(w.w) + bw.Reset((*bufferedWriterTimeoutWriter)(w)) w.bw = bw } return w.bw.Write(p) @@ -288,6 +305,38 @@ func (w *bufferedWriter) Flush() error { return err } +type bufferedWriterTimeoutWriter bufferedWriter + +func (w *bufferedWriterTimeoutWriter) Write(p []byte) (n int, err error) { + return writeWithByteTimeout(w.group, w.conn, w.byteTimeout, p) +} + +// writeWithByteTimeout writes to conn. +// If more than timeout passes without any bytes being written to the connection, +// the write fails. +func writeWithByteTimeout(group synctestGroupInterface, conn net.Conn, timeout time.Duration, p []byte) (n int, err error) { + if timeout <= 0 { + return conn.Write(p) + } + for { + var now time.Time + if group == nil { + now = time.Now() + } else { + now = group.Now() + } + conn.SetWriteDeadline(now.Add(timeout)) + nn, err := conn.Write(p[n:]) + n += nn + if n == len(p) || nn == 0 || !errors.Is(err, os.ErrDeadlineExceeded) { + // Either we finished the write, made no progress, or hit the deadline. + // Whichever it is, we're done now. + conn.SetWriteDeadline(time.Time{}) + return n, err + } + } +} + func mustUint31(v int32) uint32 { if v < 0 || v > 2147483647 { panic("out of range") diff --git a/vendor/golang.org/x/net/http2/server.go b/vendor/golang.org/x/net/http2/server.go index 6c349f3ec6..b55547aec6 100644 --- a/vendor/golang.org/x/net/http2/server.go +++ b/vendor/golang.org/x/net/http2/server.go @@ -29,6 +29,7 @@ import ( "bufio" "bytes" "context" + "crypto/rand" "crypto/tls" "errors" "fmt" @@ -52,10 +53,14 @@ import ( ) const ( - prefaceTimeout = 10 * time.Second - firstSettingsTimeout = 2 * time.Second // should be in-flight with preface anyway - handlerChunkWriteSize = 4 << 10 - defaultMaxStreams = 250 // TODO: make this 100 as the GFE seems to? + prefaceTimeout = 10 * time.Second + firstSettingsTimeout = 2 * time.Second // should be in-flight with preface anyway + handlerChunkWriteSize = 4 << 10 + defaultMaxStreams = 250 // TODO: make this 100 as the GFE seems to? + + // maxQueuedControlFrames is the maximum number of control frames like + // SETTINGS, PING and RST_STREAM that will be queued for writing before + // the connection is closed to prevent memory exhaustion attacks. maxQueuedControlFrames = 10000 ) @@ -127,6 +132,22 @@ type Server struct { // If zero or negative, there is no timeout. IdleTimeout time.Duration + // ReadIdleTimeout is the timeout after which a health check using a ping + // frame will be carried out if no frame is received on the connection. + // If zero, no health check is performed. + ReadIdleTimeout time.Duration + + // PingTimeout is the timeout after which the connection will be closed + // if a response to a ping is not received. + // If zero, a default of 15 seconds is used. + PingTimeout time.Duration + + // WriteByteTimeout is the timeout after which a connection will be + // closed if no data can be written to it. The timeout begins when data is + // available to write, and is extended whenever any bytes are written. + // If zero or negative, there is no timeout. + WriteByteTimeout time.Duration + // MaxUploadBufferPerConnection is the size of the initial flow // control window for each connections. The HTTP/2 spec does not // allow this to be smaller than 65535 or larger than 2^32-1. @@ -189,57 +210,6 @@ func (s *Server) afterFunc(d time.Duration, f func()) timer { return timeTimer{time.AfterFunc(d, f)} } -func (s *Server) initialConnRecvWindowSize() int32 { - if s.MaxUploadBufferPerConnection >= initialWindowSize { - return s.MaxUploadBufferPerConnection - } - return 1 << 20 -} - -func (s *Server) initialStreamRecvWindowSize() int32 { - if s.MaxUploadBufferPerStream > 0 { - return s.MaxUploadBufferPerStream - } - return 1 << 20 -} - -func (s *Server) maxReadFrameSize() uint32 { - if v := s.MaxReadFrameSize; v >= minMaxFrameSize && v <= maxFrameSize { - return v - } - return defaultMaxReadFrameSize -} - -func (s *Server) maxConcurrentStreams() uint32 { - if v := s.MaxConcurrentStreams; v > 0 { - return v - } - return defaultMaxStreams -} - -func (s *Server) maxDecoderHeaderTableSize() uint32 { - if v := s.MaxDecoderHeaderTableSize; v > 0 { - return v - } - return initialHeaderTableSize -} - -func (s *Server) maxEncoderHeaderTableSize() uint32 { - if v := s.MaxEncoderHeaderTableSize; v > 0 { - return v - } - return initialHeaderTableSize -} - -// maxQueuedControlFrames is the maximum number of control frames like -// SETTINGS, PING and RST_STREAM that will be queued for writing before -// the connection is closed to prevent memory exhaustion attacks. -func (s *Server) maxQueuedControlFrames() int { - // TODO: if anybody asks, add a Server field, and remember to define the - // behavior of negative values. - return maxQueuedControlFrames -} - type serverInternalState struct { mu sync.Mutex activeConns map[*serverConn]struct{} @@ -336,7 +306,7 @@ func ConfigureServer(s *http.Server, conf *Server) error { if s.TLSNextProto == nil { s.TLSNextProto = map[string]func(*http.Server, *tls.Conn, http.Handler){} } - protoHandler := func(hs *http.Server, c *tls.Conn, h http.Handler) { + protoHandler := func(hs *http.Server, c net.Conn, h http.Handler, sawClientPreface bool) { if testHookOnConn != nil { testHookOnConn() } @@ -353,12 +323,31 @@ func ConfigureServer(s *http.Server, conf *Server) error { ctx = bc.BaseContext() } conf.ServeConn(c, &ServeConnOpts{ - Context: ctx, - Handler: h, - BaseConfig: hs, + Context: ctx, + Handler: h, + BaseConfig: hs, + SawClientPreface: sawClientPreface, }) } - s.TLSNextProto[NextProtoTLS] = protoHandler + s.TLSNextProto[NextProtoTLS] = func(hs *http.Server, c *tls.Conn, h http.Handler) { + protoHandler(hs, c, h, false) + } + // The "unencrypted_http2" TLSNextProto key is used to pass off non-TLS HTTP/2 conns. + // + // A connection passed in this method has already had the HTTP/2 preface read from it. + s.TLSNextProto[nextProtoUnencryptedHTTP2] = func(hs *http.Server, c *tls.Conn, h http.Handler) { + nc, err := unencryptedNetConnFromTLSConn(c) + if err != nil { + if lg := hs.ErrorLog; lg != nil { + lg.Print(err) + } else { + log.Print(err) + } + go c.Close() + return + } + protoHandler(hs, nc, h, true) + } return nil } @@ -440,13 +429,15 @@ func (s *Server) serveConn(c net.Conn, opts *ServeConnOpts, newf func(*serverCon baseCtx, cancel := serverConnBaseContext(c, opts) defer cancel() + http1srv := opts.baseConfig() + conf := configFromServer(http1srv, s) sc := &serverConn{ srv: s, - hs: opts.baseConfig(), + hs: http1srv, conn: c, baseCtx: baseCtx, remoteAddrStr: c.RemoteAddr().String(), - bw: newBufferedWriter(c), + bw: newBufferedWriter(s.group, c, conf.WriteByteTimeout), handler: opts.handler(), streams: make(map[uint32]*stream), readFrameCh: make(chan readFrameResult), @@ -456,9 +447,12 @@ func (s *Server) serveConn(c net.Conn, opts *ServeConnOpts, newf func(*serverCon bodyReadCh: make(chan bodyReadMsg), // buffering doesn't matter either way doneServing: make(chan struct{}), clientMaxStreams: math.MaxUint32, // Section 6.5.2: "Initially, there is no limit to this value" - advMaxStreams: s.maxConcurrentStreams(), + advMaxStreams: conf.MaxConcurrentStreams, initialStreamSendWindowSize: initialWindowSize, + initialStreamRecvWindowSize: conf.MaxUploadBufferPerStream, maxFrameSize: initialMaxFrameSize, + pingTimeout: conf.PingTimeout, + countErrorFunc: conf.CountError, serveG: newGoroutineLock(), pushEnabled: true, sawClientPreface: opts.SawClientPreface, @@ -491,15 +485,15 @@ func (s *Server) serveConn(c net.Conn, opts *ServeConnOpts, newf func(*serverCon sc.flow.add(initialWindowSize) sc.inflow.init(initialWindowSize) sc.hpackEncoder = hpack.NewEncoder(&sc.headerWriteBuf) - sc.hpackEncoder.SetMaxDynamicTableSizeLimit(s.maxEncoderHeaderTableSize()) + sc.hpackEncoder.SetMaxDynamicTableSizeLimit(conf.MaxEncoderHeaderTableSize) fr := NewFramer(sc.bw, c) - if s.CountError != nil { - fr.countError = s.CountError + if conf.CountError != nil { + fr.countError = conf.CountError } - fr.ReadMetaHeaders = hpack.NewDecoder(s.maxDecoderHeaderTableSize(), nil) + fr.ReadMetaHeaders = hpack.NewDecoder(conf.MaxDecoderHeaderTableSize, nil) fr.MaxHeaderListSize = sc.maxHeaderListSize() - fr.SetMaxReadFrameSize(s.maxReadFrameSize()) + fr.SetMaxReadFrameSize(conf.MaxReadFrameSize) sc.framer = fr if tc, ok := c.(connectionStater); ok { @@ -532,7 +526,7 @@ func (s *Server) serveConn(c net.Conn, opts *ServeConnOpts, newf func(*serverCon // So for now, do nothing here again. } - if !s.PermitProhibitedCipherSuites && isBadCipher(sc.tlsState.CipherSuite) { + if !conf.PermitProhibitedCipherSuites && isBadCipher(sc.tlsState.CipherSuite) { // "Endpoints MAY choose to generate a connection error // (Section 5.4.1) of type INADEQUATE_SECURITY if one of // the prohibited cipher suites are negotiated." @@ -569,7 +563,7 @@ func (s *Server) serveConn(c net.Conn, opts *ServeConnOpts, newf func(*serverCon opts.UpgradeRequest = nil } - sc.serve() + sc.serve(conf) } func serverConnBaseContext(c net.Conn, opts *ServeConnOpts) (ctx context.Context, cancel func()) { @@ -609,6 +603,7 @@ type serverConn struct { tlsState *tls.ConnectionState // shared by all handlers, like net/http remoteAddrStr string writeSched WriteScheduler + countErrorFunc func(errType string) // Everything following is owned by the serve loop; use serveG.check(): serveG goroutineLock // used to verify funcs are on serve() @@ -628,6 +623,7 @@ type serverConn struct { streams map[uint32]*stream unstartedHandlers []unstartedHandler initialStreamSendWindowSize int32 + initialStreamRecvWindowSize int32 maxFrameSize int32 peerMaxHeaderListSize uint32 // zero means unknown (default) canonHeader map[string]string // http2-lower-case -> Go-Canonical-Case @@ -638,9 +634,14 @@ type serverConn struct { inGoAway bool // we've started to or sent GOAWAY inFrameScheduleLoop bool // whether we're in the scheduleFrameWrite loop needToSendGoAway bool // we need to schedule a GOAWAY frame write + pingSent bool + sentPingData [8]byte goAwayCode ErrCode shutdownTimer timer // nil until used idleTimer timer // nil if unused + readIdleTimeout time.Duration + pingTimeout time.Duration + readIdleTimer timer // nil if unused // Owned by the writeFrameAsync goroutine: headerWriteBuf bytes.Buffer @@ -655,11 +656,7 @@ func (sc *serverConn) maxHeaderListSize() uint32 { if n <= 0 { n = http.DefaultMaxHeaderBytes } - // http2's count is in a slightly different unit and includes 32 bytes per pair. - // So, take the net/http.Server value and pad it up a bit, assuming 10 headers. - const perFieldOverhead = 32 // per http2 spec - const typicalHeaders = 10 // conservative - return uint32(n + typicalHeaders*perFieldOverhead) + return uint32(adjustHTTP1MaxHeaderSize(int64(n))) } func (sc *serverConn) curOpenStreams() uint32 { @@ -923,7 +920,7 @@ func (sc *serverConn) notePanic() { } } -func (sc *serverConn) serve() { +func (sc *serverConn) serve(conf http2Config) { sc.serveG.check() defer sc.notePanic() defer sc.conn.Close() @@ -935,20 +932,24 @@ func (sc *serverConn) serve() { sc.vlogf("http2: server connection from %v on %p", sc.conn.RemoteAddr(), sc.hs) } + settings := writeSettings{ + {SettingMaxFrameSize, conf.MaxReadFrameSize}, + {SettingMaxConcurrentStreams, sc.advMaxStreams}, + {SettingMaxHeaderListSize, sc.maxHeaderListSize()}, + {SettingHeaderTableSize, conf.MaxDecoderHeaderTableSize}, + {SettingInitialWindowSize, uint32(sc.initialStreamRecvWindowSize)}, + } + if !disableExtendedConnectProtocol { + settings = append(settings, Setting{SettingEnableConnectProtocol, 1}) + } sc.writeFrame(FrameWriteRequest{ - write: writeSettings{ - {SettingMaxFrameSize, sc.srv.maxReadFrameSize()}, - {SettingMaxConcurrentStreams, sc.advMaxStreams}, - {SettingMaxHeaderListSize, sc.maxHeaderListSize()}, - {SettingHeaderTableSize, sc.srv.maxDecoderHeaderTableSize()}, - {SettingInitialWindowSize, uint32(sc.srv.initialStreamRecvWindowSize())}, - }, + write: settings, }) sc.unackedSettings++ // Each connection starts with initialWindowSize inflow tokens. // If a higher value is configured, we add more tokens. - if diff := sc.srv.initialConnRecvWindowSize() - initialWindowSize; diff > 0 { + if diff := conf.MaxUploadBufferPerConnection - initialWindowSize; diff > 0 { sc.sendWindowUpdate(nil, int(diff)) } @@ -968,11 +969,18 @@ func (sc *serverConn) serve() { defer sc.idleTimer.Stop() } + if conf.SendPingTimeout > 0 { + sc.readIdleTimeout = conf.SendPingTimeout + sc.readIdleTimer = sc.srv.afterFunc(conf.SendPingTimeout, sc.onReadIdleTimer) + defer sc.readIdleTimer.Stop() + } + go sc.readFrames() // closed by defer sc.conn.Close above settingsTimer := sc.srv.afterFunc(firstSettingsTimeout, sc.onSettingsTimer) defer settingsTimer.Stop() + lastFrameTime := sc.srv.now() loopNum := 0 for { loopNum++ @@ -986,6 +994,7 @@ func (sc *serverConn) serve() { case res := <-sc.wroteFrameCh: sc.wroteFrame(res) case res := <-sc.readFrameCh: + lastFrameTime = sc.srv.now() // Process any written frames before reading new frames from the client since a // written frame could have triggered a new stream to be started. if sc.writingFrameAsync { @@ -1017,6 +1026,8 @@ func (sc *serverConn) serve() { case idleTimerMsg: sc.vlogf("connection is idle") sc.goAway(ErrCodeNo) + case readIdleTimerMsg: + sc.handlePingTimer(lastFrameTime) case shutdownTimerMsg: sc.vlogf("GOAWAY close timer fired; closing conn from %v", sc.conn.RemoteAddr()) return @@ -1039,7 +1050,7 @@ func (sc *serverConn) serve() { // If the peer is causing us to generate a lot of control frames, // but not reading them from us, assume they are trying to make us // run out of memory. - if sc.queuedControlFrames > sc.srv.maxQueuedControlFrames() { + if sc.queuedControlFrames > maxQueuedControlFrames { sc.vlogf("http2: too many control frames in send queue, closing connection") return } @@ -1055,12 +1066,39 @@ func (sc *serverConn) serve() { } } +func (sc *serverConn) handlePingTimer(lastFrameReadTime time.Time) { + if sc.pingSent { + sc.vlogf("timeout waiting for PING response") + sc.conn.Close() + return + } + + pingAt := lastFrameReadTime.Add(sc.readIdleTimeout) + now := sc.srv.now() + if pingAt.After(now) { + // We received frames since arming the ping timer. + // Reset it for the next possible timeout. + sc.readIdleTimer.Reset(pingAt.Sub(now)) + return + } + + sc.pingSent = true + // Ignore crypto/rand.Read errors: It generally can't fail, and worse case if it does + // is we send a PING frame containing 0s. + _, _ = rand.Read(sc.sentPingData[:]) + sc.writeFrame(FrameWriteRequest{ + write: &writePing{data: sc.sentPingData}, + }) + sc.readIdleTimer.Reset(sc.pingTimeout) +} + type serverMessage int // Message values sent to serveMsgCh. var ( settingsTimerMsg = new(serverMessage) idleTimerMsg = new(serverMessage) + readIdleTimerMsg = new(serverMessage) shutdownTimerMsg = new(serverMessage) gracefulShutdownMsg = new(serverMessage) handlerDoneMsg = new(serverMessage) @@ -1068,6 +1106,7 @@ var ( func (sc *serverConn) onSettingsTimer() { sc.sendServeMsg(settingsTimerMsg) } func (sc *serverConn) onIdleTimer() { sc.sendServeMsg(idleTimerMsg) } +func (sc *serverConn) onReadIdleTimer() { sc.sendServeMsg(readIdleTimerMsg) } func (sc *serverConn) onShutdownTimer() { sc.sendServeMsg(shutdownTimerMsg) } func (sc *serverConn) sendServeMsg(msg interface{}) { @@ -1320,6 +1359,10 @@ func (sc *serverConn) wroteFrame(res frameWriteResult) { sc.writingFrame = false sc.writingFrameAsync = false + if res.err != nil { + sc.conn.Close() + } + wr := res.wr if writeEndsStream(wr.write) { @@ -1594,6 +1637,11 @@ func (sc *serverConn) processFrame(f Frame) error { func (sc *serverConn) processPing(f *PingFrame) error { sc.serveG.check() if f.IsAck() { + if sc.pingSent && sc.sentPingData == f.Data { + // This is a response to a PING we sent. + sc.pingSent = false + sc.readIdleTimer.Reset(sc.readIdleTimeout) + } // 6.7 PING: " An endpoint MUST NOT respond to PING frames // containing this flag." return nil @@ -1757,6 +1805,9 @@ func (sc *serverConn) processSetting(s Setting) error { sc.maxFrameSize = int32(s.Val) // the maximum valid s.Val is < 2^31 case SettingMaxHeaderListSize: sc.peerMaxHeaderListSize = s.Val + case SettingEnableConnectProtocol: + // Receipt of this parameter by a server does not + // have any impact default: // Unknown setting: "An endpoint that receives a SETTINGS // frame with any unknown or unsupported identifier MUST @@ -2160,7 +2211,7 @@ func (sc *serverConn) newStream(id, pusherID uint32, state streamState) *stream st.cw.Init() st.flow.conn = &sc.flow // link to conn-level counter st.flow.add(sc.initialStreamSendWindowSize) - st.inflow.init(sc.srv.initialStreamRecvWindowSize()) + st.inflow.init(sc.initialStreamRecvWindowSize) if sc.hs.WriteTimeout > 0 { st.writeDeadline = sc.srv.afterFunc(sc.hs.WriteTimeout, st.onWriteTimeout) } @@ -2187,11 +2238,17 @@ func (sc *serverConn) newWriterAndRequest(st *stream, f *MetaHeadersFrame) (*res scheme: f.PseudoValue("scheme"), authority: f.PseudoValue("authority"), path: f.PseudoValue("path"), + protocol: f.PseudoValue("protocol"), + } + + // extended connect is disabled, so we should not see :protocol + if disableExtendedConnectProtocol && rp.protocol != "" { + return nil, nil, sc.countError("bad_connect", streamError(f.StreamID, ErrCodeProtocol)) } isConnect := rp.method == "CONNECT" if isConnect { - if rp.path != "" || rp.scheme != "" || rp.authority == "" { + if rp.protocol == "" && (rp.path != "" || rp.scheme != "" || rp.authority == "") { return nil, nil, sc.countError("bad_connect", streamError(f.StreamID, ErrCodeProtocol)) } } else if rp.method == "" || rp.path == "" || (rp.scheme != "https" && rp.scheme != "http") { @@ -2215,6 +2272,9 @@ func (sc *serverConn) newWriterAndRequest(st *stream, f *MetaHeadersFrame) (*res if rp.authority == "" { rp.authority = rp.header.Get("Host") } + if rp.protocol != "" { + rp.header.Set(":protocol", rp.protocol) + } rw, req, err := sc.newWriterAndRequestNoBody(st, rp) if err != nil { @@ -2241,6 +2301,7 @@ func (sc *serverConn) newWriterAndRequest(st *stream, f *MetaHeadersFrame) (*res type requestParam struct { method string scheme, authority, path string + protocol string header http.Header } @@ -2282,7 +2343,7 @@ func (sc *serverConn) newWriterAndRequestNoBody(st *stream, rp requestParam) (*r var url_ *url.URL var requestURI string - if rp.method == "CONNECT" { + if rp.method == "CONNECT" && rp.protocol == "" { url_ = &url.URL{Host: rp.authority} requestURI = rp.authority // mimic HTTP/1 server behavior } else { @@ -2855,6 +2916,11 @@ func (w *responseWriter) SetWriteDeadline(deadline time.Time) error { return nil } +func (w *responseWriter) EnableFullDuplex() error { + // We always support full duplex responses, so this is a no-op. + return nil +} + func (w *responseWriter) Flush() { w.FlushError() } @@ -3301,7 +3367,7 @@ func (sc *serverConn) countError(name string, err error) error { if sc == nil || sc.srv == nil { return err } - f := sc.srv.CountError + f := sc.countErrorFunc if f == nil { return err } diff --git a/vendor/golang.org/x/net/http2/transport.go b/vendor/golang.org/x/net/http2/transport.go index 61f511f97a..090d0e1bdb 100644 --- a/vendor/golang.org/x/net/http2/transport.go +++ b/vendor/golang.org/x/net/http2/transport.go @@ -25,7 +25,6 @@ import ( "net/http" "net/http/httptrace" "net/textproto" - "os" "sort" "strconv" "strings" @@ -203,6 +202,20 @@ func (t *Transport) markNewGoroutine() { } } +func (t *Transport) now() time.Time { + if t != nil && t.transportTestHooks != nil { + return t.transportTestHooks.group.Now() + } + return time.Now() +} + +func (t *Transport) timeSince(when time.Time) time.Duration { + if t != nil && t.transportTestHooks != nil { + return t.now().Sub(when) + } + return time.Since(when) +} + // newTimer creates a new time.Timer, or a synthetic timer in tests. func (t *Transport) newTimer(d time.Duration) timer { if t.transportTestHooks != nil { @@ -227,40 +240,26 @@ func (t *Transport) contextWithTimeout(ctx context.Context, d time.Duration) (co } func (t *Transport) maxHeaderListSize() uint32 { - if t.MaxHeaderListSize == 0 { + n := int64(t.MaxHeaderListSize) + if t.t1 != nil && t.t1.MaxResponseHeaderBytes != 0 { + n = t.t1.MaxResponseHeaderBytes + if n > 0 { + n = adjustHTTP1MaxHeaderSize(n) + } + } + if n <= 0 { return 10 << 20 } - if t.MaxHeaderListSize == 0xffffffff { + if n >= 0xffffffff { return 0 } - return t.MaxHeaderListSize -} - -func (t *Transport) maxFrameReadSize() uint32 { - if t.MaxReadFrameSize == 0 { - return 0 // use the default provided by the peer - } - if t.MaxReadFrameSize < minMaxFrameSize { - return minMaxFrameSize - } - if t.MaxReadFrameSize > maxFrameSize { - return maxFrameSize - } - return t.MaxReadFrameSize + return uint32(n) } func (t *Transport) disableCompression() bool { return t.DisableCompression || (t.t1 != nil && t.t1.DisableCompression) } -func (t *Transport) pingTimeout() time.Duration { - if t.PingTimeout == 0 { - return 15 * time.Second - } - return t.PingTimeout - -} - // ConfigureTransport configures a net/http HTTP/1 Transport to use HTTP/2. // It returns an error if t1 has already been HTTP/2-enabled. // @@ -296,8 +295,8 @@ func configureTransports(t1 *http.Transport) (*Transport, error) { if !strSliceContains(t1.TLSClientConfig.NextProtos, "http/1.1") { t1.TLSClientConfig.NextProtos = append(t1.TLSClientConfig.NextProtos, "http/1.1") } - upgradeFn := func(authority string, c *tls.Conn) http.RoundTripper { - addr := authorityAddr("https", authority) + upgradeFn := func(scheme, authority string, c net.Conn) http.RoundTripper { + addr := authorityAddr(scheme, authority) if used, err := connPool.addConnIfNeeded(addr, t2, c); err != nil { go c.Close() return erringRoundTripper{err} @@ -308,18 +307,37 @@ func configureTransports(t1 *http.Transport) (*Transport, error) { // was unknown) go c.Close() } + if scheme == "http" { + return (*unencryptedTransport)(t2) + } return t2 } - if m := t1.TLSNextProto; len(m) == 0 { - t1.TLSNextProto = map[string]func(string, *tls.Conn) http.RoundTripper{ - "h2": upgradeFn, + if t1.TLSNextProto == nil { + t1.TLSNextProto = make(map[string]func(string, *tls.Conn) http.RoundTripper) + } + t1.TLSNextProto[NextProtoTLS] = func(authority string, c *tls.Conn) http.RoundTripper { + return upgradeFn("https", authority, c) + } + // The "unencrypted_http2" TLSNextProto key is used to pass off non-TLS HTTP/2 conns. + t1.TLSNextProto[nextProtoUnencryptedHTTP2] = func(authority string, c *tls.Conn) http.RoundTripper { + nc, err := unencryptedNetConnFromTLSConn(c) + if err != nil { + go c.Close() + return erringRoundTripper{err} } - } else { - m["h2"] = upgradeFn + return upgradeFn("http", authority, nc) } return t2, nil } +// unencryptedTransport is a Transport with a RoundTrip method that +// always permits http:// URLs. +type unencryptedTransport Transport + +func (t *unencryptedTransport) RoundTrip(req *http.Request) (*http.Response, error) { + return (*Transport)(t).RoundTripOpt(req, RoundTripOpt{allowHTTP: true}) +} + func (t *Transport) connPool() ClientConnPool { t.connPoolOnce.Do(t.initConnPool) return t.connPoolOrDef @@ -339,7 +357,7 @@ type ClientConn struct { t *Transport tconn net.Conn // usually *tls.Conn, except specialized impls tlsState *tls.ConnectionState // nil only for specialized impls - reused uint32 // whether conn is being reused; atomic + atomicReused uint32 // whether conn is being reused; atomic singleUse bool // whether being used for a single http.Request getConnCalled bool // used by clientConnPool @@ -350,31 +368,54 @@ type ClientConn struct { idleTimeout time.Duration // or 0 for never idleTimer timer - mu sync.Mutex // guards following - cond *sync.Cond // hold mu; broadcast on flow/closed changes - flow outflow // our conn-level flow control quota (cs.outflow is per stream) - inflow inflow // peer's conn-level flow control - doNotReuse bool // whether conn is marked to not be reused for any future requests - closing bool - closed bool - seenSettings bool // true if we've seen a settings frame, false otherwise - wantSettingsAck bool // we sent a SETTINGS frame and haven't heard back - goAway *GoAwayFrame // if non-nil, the GoAwayFrame we received - goAwayDebug string // goAway frame's debug data, retained as a string - streams map[uint32]*clientStream // client-initiated - streamsReserved int // incr by ReserveNewRequest; decr on RoundTrip - nextStreamID uint32 - pendingRequests int // requests blocked and waiting to be sent because len(streams) == maxConcurrentStreams - pings map[[8]byte]chan struct{} // in flight ping data to notification channel - br *bufio.Reader - lastActive time.Time - lastIdle time.Time // time last idle + mu sync.Mutex // guards following + cond *sync.Cond // hold mu; broadcast on flow/closed changes + flow outflow // our conn-level flow control quota (cs.outflow is per stream) + inflow inflow // peer's conn-level flow control + doNotReuse bool // whether conn is marked to not be reused for any future requests + closing bool + closed bool + seenSettings bool // true if we've seen a settings frame, false otherwise + seenSettingsChan chan struct{} // closed when seenSettings is true or frame reading fails + wantSettingsAck bool // we sent a SETTINGS frame and haven't heard back + goAway *GoAwayFrame // if non-nil, the GoAwayFrame we received + goAwayDebug string // goAway frame's debug data, retained as a string + streams map[uint32]*clientStream // client-initiated + streamsReserved int // incr by ReserveNewRequest; decr on RoundTrip + nextStreamID uint32 + pendingRequests int // requests blocked and waiting to be sent because len(streams) == maxConcurrentStreams + pings map[[8]byte]chan struct{} // in flight ping data to notification channel + br *bufio.Reader + lastActive time.Time + lastIdle time.Time // time last idle // Settings from peer: (also guarded by wmu) - maxFrameSize uint32 - maxConcurrentStreams uint32 - peerMaxHeaderListSize uint64 - peerMaxHeaderTableSize uint32 - initialWindowSize uint32 + maxFrameSize uint32 + maxConcurrentStreams uint32 + peerMaxHeaderListSize uint64 + peerMaxHeaderTableSize uint32 + initialWindowSize uint32 + initialStreamRecvWindowSize int32 + readIdleTimeout time.Duration + pingTimeout time.Duration + extendedConnectAllowed bool + + // rstStreamPingsBlocked works around an unfortunate gRPC behavior. + // gRPC strictly limits the number of PING frames that it will receive. + // The default is two pings per two hours, but the limit resets every time + // the gRPC endpoint sends a HEADERS or DATA frame. See golang/go#70575. + // + // rstStreamPingsBlocked is set after receiving a response to a PING frame + // bundled with an RST_STREAM (see pendingResets below), and cleared after + // receiving a HEADERS or DATA frame. + rstStreamPingsBlocked bool + + // pendingResets is the number of RST_STREAM frames we have sent to the peer, + // without confirming that the peer has received them. When we send a RST_STREAM, + // we bundle it with a PING frame, unless a PING is already in flight. We count + // the reset stream against the connection's concurrency limit until we get + // a PING response. This limits the number of requests we'll try to send to a + // completely unresponsive connection. + pendingResets int // reqHeaderMu is a 1-element semaphore channel controlling access to sending new requests. // Write to reqHeaderMu to lock it, read from it to unlock. @@ -432,12 +473,12 @@ type clientStream struct { sentHeaders bool // owned by clientConnReadLoop: - firstByte bool // got the first response byte - pastHeaders bool // got first MetaHeadersFrame (actual headers) - pastTrailers bool // got optional second MetaHeadersFrame (trailers) - num1xx uint8 // number of 1xx responses seen - readClosed bool // peer sent an END_STREAM flag - readAborted bool // read loop reset the stream + firstByte bool // got the first response byte + pastHeaders bool // got first MetaHeadersFrame (actual headers) + pastTrailers bool // got optional second MetaHeadersFrame (trailers) + readClosed bool // peer sent an END_STREAM flag + readAborted bool // read loop reset the stream + totalHeaderSize int64 // total size of 1xx headers seen trailer http.Header // accumulated trailers resTrailer *http.Header // client's Response.Trailer @@ -499,6 +540,7 @@ func (cs *clientStream) closeReqBodyLocked() { } type stickyErrWriter struct { + group synctestGroupInterface conn net.Conn timeout time.Duration err *error @@ -508,22 +550,9 @@ func (sew stickyErrWriter) Write(p []byte) (n int, err error) { if *sew.err != nil { return 0, *sew.err } - for { - if sew.timeout != 0 { - sew.conn.SetWriteDeadline(time.Now().Add(sew.timeout)) - } - nn, err := sew.conn.Write(p[n:]) - n += nn - if n < len(p) && nn > 0 && errors.Is(err, os.ErrDeadlineExceeded) { - // Keep extending the deadline so long as we're making progress. - continue - } - if sew.timeout != 0 { - sew.conn.SetWriteDeadline(time.Time{}) - } - *sew.err = err - return n, err - } + n, err = writeWithByteTimeout(sew.group, sew.conn, sew.timeout, p) + *sew.err = err + return n, err } // noCachedConnError is the concrete type of ErrNoCachedConn, which @@ -554,6 +583,8 @@ type RoundTripOpt struct { // no cached connection is available, RoundTripOpt // will return ErrNoCachedConn. OnlyCachedConn bool + + allowHTTP bool // allow http:// URLs } func (t *Transport) RoundTrip(req *http.Request) (*http.Response, error) { @@ -586,7 +617,14 @@ func authorityAddr(scheme string, authority string) (addr string) { // RoundTripOpt is like RoundTrip, but takes options. func (t *Transport) RoundTripOpt(req *http.Request, opt RoundTripOpt) (*http.Response, error) { - if !(req.URL.Scheme == "https" || (req.URL.Scheme == "http" && t.AllowHTTP)) { + switch req.URL.Scheme { + case "https": + // Always okay. + case "http": + if !t.AllowHTTP && !opt.allowHTTP { + return nil, errors.New("http2: unencrypted HTTP/2 not enabled") + } + default: return nil, errors.New("http2: unsupported scheme") } @@ -597,7 +635,7 @@ func (t *Transport) RoundTripOpt(req *http.Request, opt RoundTripOpt) (*http.Res t.vlogf("http2: Transport failed to get client conn for %s: %v", addr, err) return nil, err } - reused := !atomic.CompareAndSwapUint32(&cc.reused, 0, 1) + reused := !atomic.CompareAndSwapUint32(&cc.atomicReused, 0, 1) traceGotConn(req, cc, reused) res, err := cc.RoundTrip(req) if err != nil && retry <= 6 { @@ -622,6 +660,22 @@ func (t *Transport) RoundTripOpt(req *http.Request, opt RoundTripOpt) (*http.Res } } } + if err == errClientConnNotEstablished { + // This ClientConn was created recently, + // this is the first request to use it, + // and the connection is closed and not usable. + // + // In this state, cc.idleTimer will remove the conn from the pool + // when it fires. Stop the timer and remove it here so future requests + // won't try to use this connection. + // + // If the timer has already fired and we're racing it, the redundant + // call to MarkDead is harmless. + if cc.idleTimer != nil { + cc.idleTimer.Stop() + } + t.connPool().MarkDead(cc) + } if err != nil { t.vlogf("RoundTrip failure: %v", err) return nil, err @@ -640,9 +694,10 @@ func (t *Transport) CloseIdleConnections() { } var ( - errClientConnClosed = errors.New("http2: client conn is closed") - errClientConnUnusable = errors.New("http2: client conn not usable") - errClientConnGotGoAway = errors.New("http2: Transport received Server's graceful shutdown GOAWAY") + errClientConnClosed = errors.New("http2: client conn is closed") + errClientConnUnusable = errors.New("http2: client conn not usable") + errClientConnNotEstablished = errors.New("http2: client conn could not be established") + errClientConnGotGoAway = errors.New("http2: Transport received Server's graceful shutdown GOAWAY") ) // shouldRetryRequest is called by RoundTrip when a request fails to get @@ -758,44 +813,38 @@ func (t *Transport) expectContinueTimeout() time.Duration { return t.t1.ExpectContinueTimeout } -func (t *Transport) maxDecoderHeaderTableSize() uint32 { - if v := t.MaxDecoderHeaderTableSize; v > 0 { - return v - } - return initialHeaderTableSize -} - -func (t *Transport) maxEncoderHeaderTableSize() uint32 { - if v := t.MaxEncoderHeaderTableSize; v > 0 { - return v - } - return initialHeaderTableSize -} - func (t *Transport) NewClientConn(c net.Conn) (*ClientConn, error) { return t.newClientConn(c, t.disableKeepAlives()) } func (t *Transport) newClientConn(c net.Conn, singleUse bool) (*ClientConn, error) { + conf := configFromTransport(t) cc := &ClientConn{ - t: t, - tconn: c, - readerDone: make(chan struct{}), - nextStreamID: 1, - maxFrameSize: 16 << 10, // spec default - initialWindowSize: 65535, // spec default - maxConcurrentStreams: initialMaxConcurrentStreams, // "infinite", per spec. Use a smaller value until we have received server settings. - peerMaxHeaderListSize: 0xffffffffffffffff, // "infinite", per spec. Use 2^64-1 instead. - streams: make(map[uint32]*clientStream), - singleUse: singleUse, - wantSettingsAck: true, - pings: make(map[[8]byte]chan struct{}), - reqHeaderMu: make(chan struct{}, 1), - } + t: t, + tconn: c, + readerDone: make(chan struct{}), + nextStreamID: 1, + maxFrameSize: 16 << 10, // spec default + initialWindowSize: 65535, // spec default + initialStreamRecvWindowSize: conf.MaxUploadBufferPerStream, + maxConcurrentStreams: initialMaxConcurrentStreams, // "infinite", per spec. Use a smaller value until we have received server settings. + peerMaxHeaderListSize: 0xffffffffffffffff, // "infinite", per spec. Use 2^64-1 instead. + streams: make(map[uint32]*clientStream), + singleUse: singleUse, + seenSettingsChan: make(chan struct{}), + wantSettingsAck: true, + readIdleTimeout: conf.SendPingTimeout, + pingTimeout: conf.PingTimeout, + pings: make(map[[8]byte]chan struct{}), + reqHeaderMu: make(chan struct{}, 1), + lastActive: t.now(), + } + var group synctestGroupInterface if t.transportTestHooks != nil { t.markNewGoroutine() t.transportTestHooks.newclientconn(cc) c = cc.tconn + group = t.group } if VerboseLogs { t.vlogf("http2: Transport creating client conn %p to %v", cc, c.RemoteAddr()) @@ -807,24 +856,23 @@ func (t *Transport) newClientConn(c net.Conn, singleUse bool) (*ClientConn, erro // TODO: adjust this writer size to account for frame size + // MTU + crypto/tls record padding. cc.bw = bufio.NewWriter(stickyErrWriter{ + group: group, conn: c, - timeout: t.WriteByteTimeout, + timeout: conf.WriteByteTimeout, err: &cc.werr, }) cc.br = bufio.NewReader(c) cc.fr = NewFramer(cc.bw, cc.br) - if t.maxFrameReadSize() != 0 { - cc.fr.SetMaxReadFrameSize(t.maxFrameReadSize()) - } + cc.fr.SetMaxReadFrameSize(conf.MaxReadFrameSize) if t.CountError != nil { cc.fr.countError = t.CountError } - maxHeaderTableSize := t.maxDecoderHeaderTableSize() + maxHeaderTableSize := conf.MaxDecoderHeaderTableSize cc.fr.ReadMetaHeaders = hpack.NewDecoder(maxHeaderTableSize, nil) cc.fr.MaxHeaderListSize = t.maxHeaderListSize() cc.henc = hpack.NewEncoder(&cc.hbuf) - cc.henc.SetMaxDynamicTableSizeLimit(t.maxEncoderHeaderTableSize()) + cc.henc.SetMaxDynamicTableSizeLimit(conf.MaxEncoderHeaderTableSize) cc.peerMaxHeaderTableSize = initialHeaderTableSize if cs, ok := c.(connectionStater); ok { @@ -834,11 +882,9 @@ func (t *Transport) newClientConn(c net.Conn, singleUse bool) (*ClientConn, erro initialSettings := []Setting{ {ID: SettingEnablePush, Val: 0}, - {ID: SettingInitialWindowSize, Val: transportDefaultStreamFlow}, - } - if max := t.maxFrameReadSize(); max != 0 { - initialSettings = append(initialSettings, Setting{ID: SettingMaxFrameSize, Val: max}) + {ID: SettingInitialWindowSize, Val: uint32(cc.initialStreamRecvWindowSize)}, } + initialSettings = append(initialSettings, Setting{ID: SettingMaxFrameSize, Val: conf.MaxReadFrameSize}) if max := t.maxHeaderListSize(); max != 0 { initialSettings = append(initialSettings, Setting{ID: SettingMaxHeaderListSize, Val: max}) } @@ -848,8 +894,8 @@ func (t *Transport) newClientConn(c net.Conn, singleUse bool) (*ClientConn, erro cc.bw.Write(clientPreface) cc.fr.WriteSettings(initialSettings...) - cc.fr.WriteWindowUpdate(0, transportDefaultConnFlow) - cc.inflow.init(transportDefaultConnFlow + initialWindowSize) + cc.fr.WriteWindowUpdate(0, uint32(conf.MaxUploadBufferPerConnection)) + cc.inflow.init(conf.MaxUploadBufferPerConnection + initialWindowSize) cc.bw.Flush() if cc.werr != nil { cc.Close() @@ -867,7 +913,7 @@ func (t *Transport) newClientConn(c net.Conn, singleUse bool) (*ClientConn, erro } func (cc *ClientConn) healthCheck() { - pingTimeout := cc.t.pingTimeout() + pingTimeout := cc.pingTimeout // We don't need to periodically ping in the health check, because the readLoop of ClientConn will // trigger the healthCheck again if there is no frame received. ctx, cancel := cc.t.contextWithTimeout(context.Background(), pingTimeout) @@ -995,7 +1041,7 @@ func (cc *ClientConn) State() ClientConnState { return ClientConnState{ Closed: cc.closed, Closing: cc.closing || cc.singleUse || cc.doNotReuse || cc.goAway != nil, - StreamsActive: len(cc.streams), + StreamsActive: len(cc.streams) + cc.pendingResets, StreamsReserved: cc.streamsReserved, StreamsPending: cc.pendingRequests, LastIdle: cc.lastIdle, @@ -1027,16 +1073,38 @@ func (cc *ClientConn) idleStateLocked() (st clientConnIdleState) { // writing it. maxConcurrentOkay = true } else { - maxConcurrentOkay = int64(len(cc.streams)+cc.streamsReserved+1) <= int64(cc.maxConcurrentStreams) + // We can take a new request if the total of + // - active streams; + // - reservation slots for new streams; and + // - streams for which we have sent a RST_STREAM and a PING, + // but received no subsequent frame + // is less than the concurrency limit. + maxConcurrentOkay = cc.currentRequestCountLocked() < int(cc.maxConcurrentStreams) } st.canTakeNewRequest = cc.goAway == nil && !cc.closed && !cc.closing && maxConcurrentOkay && !cc.doNotReuse && int64(cc.nextStreamID)+2*int64(cc.pendingRequests) < math.MaxInt32 && !cc.tooIdleLocked() + + // If this connection has never been used for a request and is closed, + // then let it take a request (which will fail). + // + // This avoids a situation where an error early in a connection's lifetime + // goes unreported. + if cc.nextStreamID == 1 && cc.streamsReserved == 0 && cc.closed { + st.canTakeNewRequest = true + } + return } +// currentRequestCountLocked reports the number of concurrency slots currently in use, +// including active streams, reserved slots, and reset streams waiting for acknowledgement. +func (cc *ClientConn) currentRequestCountLocked() int { + return len(cc.streams) + cc.streamsReserved + cc.pendingResets +} + func (cc *ClientConn) canTakeNewRequestLocked() bool { st := cc.idleStateLocked() return st.canTakeNewRequest @@ -1049,7 +1117,7 @@ func (cc *ClientConn) tooIdleLocked() bool { // times are compared based on their wall time. We don't want // to reuse a connection that's been sitting idle during // VM/laptop suspend if monotonic time was also frozen. - return cc.idleTimeout != 0 && !cc.lastIdle.IsZero() && time.Since(cc.lastIdle.Round(0)) > cc.idleTimeout + return cc.idleTimeout != 0 && !cc.lastIdle.IsZero() && cc.t.timeSince(cc.lastIdle.Round(0)) > cc.idleTimeout } // onIdleTimeout is called from a time.AfterFunc goroutine. It will @@ -1411,6 +1479,8 @@ func (cs *clientStream) doRequest(req *http.Request, streamf func(*clientStream) cs.cleanupWriteRequest(err) } +var errExtendedConnectNotSupported = errors.New("net/http: extended connect not supported by peer") + // writeRequest sends a request. // // It returns nil after the request is written, the response read, @@ -1426,12 +1496,31 @@ func (cs *clientStream) writeRequest(req *http.Request, streamf func(*clientStre return err } + // wait for setting frames to be received, a server can change this value later, + // but we just wait for the first settings frame + var isExtendedConnect bool + if req.Method == "CONNECT" && req.Header.Get(":protocol") != "" { + isExtendedConnect = true + } + // Acquire the new-request lock by writing to reqHeaderMu. // This lock guards the critical section covering allocating a new stream ID // (requires mu) and creating the stream (requires wmu). if cc.reqHeaderMu == nil { panic("RoundTrip on uninitialized ClientConn") // for tests } + if isExtendedConnect { + select { + case <-cs.reqCancel: + return errRequestCanceled + case <-ctx.Done(): + return ctx.Err() + case <-cc.seenSettingsChan: + if !cc.extendedConnectAllowed { + return errExtendedConnectNotSupported + } + } + } select { case cc.reqHeaderMu <- struct{}{}: case <-cs.reqCancel: @@ -1613,6 +1702,7 @@ func (cs *clientStream) cleanupWriteRequest(err error) { cs.reqBodyClosed = make(chan struct{}) } bodyClosed := cs.reqBodyClosed + closeOnIdle := cc.singleUse || cc.doNotReuse || cc.t.disableKeepAlives() || cc.goAway != nil cc.mu.Unlock() if mustCloseBody { cs.reqBody.Close() @@ -1637,16 +1727,44 @@ func (cs *clientStream) cleanupWriteRequest(err error) { if cs.sentHeaders { if se, ok := err.(StreamError); ok { if se.Cause != errFromPeer { - cc.writeStreamReset(cs.ID, se.Code, err) + cc.writeStreamReset(cs.ID, se.Code, false, err) } } else { - cc.writeStreamReset(cs.ID, ErrCodeCancel, err) + // We're cancelling an in-flight request. + // + // This could be due to the server becoming unresponsive. + // To avoid sending too many requests on a dead connection, + // we let the request continue to consume a concurrency slot + // until we can confirm the server is still responding. + // We do this by sending a PING frame along with the RST_STREAM + // (unless a ping is already in flight). + // + // For simplicity, we don't bother tracking the PING payload: + // We reset cc.pendingResets any time we receive a PING ACK. + // + // We skip this if the conn is going to be closed on idle, + // because it's short lived and will probably be closed before + // we get the ping response. + ping := false + if !closeOnIdle { + cc.mu.Lock() + // rstStreamPingsBlocked works around a gRPC behavior: + // see comment on the field for details. + if !cc.rstStreamPingsBlocked { + if cc.pendingResets == 0 { + ping = true + } + cc.pendingResets++ + } + cc.mu.Unlock() + } + cc.writeStreamReset(cs.ID, ErrCodeCancel, ping, err) } } cs.bufPipe.CloseWithError(err) // no-op if already closed } else { if cs.sentHeaders && !cs.sentEndStream { - cc.writeStreamReset(cs.ID, ErrCodeNo, nil) + cc.writeStreamReset(cs.ID, ErrCodeNo, false, nil) } cs.bufPipe.CloseWithError(errRequestCanceled) } @@ -1668,12 +1786,17 @@ func (cs *clientStream) cleanupWriteRequest(err error) { // Must hold cc.mu. func (cc *ClientConn) awaitOpenSlotForStreamLocked(cs *clientStream) error { for { - cc.lastActive = time.Now() + if cc.closed && cc.nextStreamID == 1 && cc.streamsReserved == 0 { + // This is the very first request sent to this connection. + // Return a fatal error which aborts the retry loop. + return errClientConnNotEstablished + } + cc.lastActive = cc.t.now() if cc.closed || !cc.canTakeNewRequestLocked() { return errClientConnUnusable } cc.lastIdle = time.Time{} - if int64(len(cc.streams)) < int64(cc.maxConcurrentStreams) { + if cc.currentRequestCountLocked() < int(cc.maxConcurrentStreams) { return nil } cc.pendingRequests++ @@ -1945,7 +2068,7 @@ func (cs *clientStream) awaitFlowControl(maxBytes int) (taken int32, err error) func validateHeaders(hdrs http.Header) string { for k, vv := range hdrs { - if !httpguts.ValidHeaderFieldName(k) { + if !httpguts.ValidHeaderFieldName(k) && k != ":protocol" { return fmt.Sprintf("name %q", k) } for _, v := range vv { @@ -1961,6 +2084,10 @@ func validateHeaders(hdrs http.Header) string { var errNilRequestURL = errors.New("http2: Request.URI is nil") +func isNormalConnect(req *http.Request) bool { + return req.Method == "CONNECT" && req.Header.Get(":protocol") == "" +} + // requires cc.wmu be held. func (cc *ClientConn) encodeHeaders(req *http.Request, addGzipHeader bool, trailers string, contentLength int64) ([]byte, error) { cc.hbuf.Reset() @@ -1981,7 +2108,7 @@ func (cc *ClientConn) encodeHeaders(req *http.Request, addGzipHeader bool, trail } var path string - if req.Method != "CONNECT" { + if !isNormalConnect(req) { path = req.URL.RequestURI() if !validPseudoPath(path) { orig := path @@ -2018,7 +2145,7 @@ func (cc *ClientConn) encodeHeaders(req *http.Request, addGzipHeader bool, trail m = http.MethodGet } f(":method", m) - if req.Method != "CONNECT" { + if !isNormalConnect(req) { f(":path", path) f(":scheme", req.URL.Scheme) } @@ -2199,7 +2326,7 @@ type resAndError struct { func (cc *ClientConn) addStreamLocked(cs *clientStream) { cs.flow.add(int32(cc.initialWindowSize)) cs.flow.setConnFlow(&cc.flow) - cs.inflow.init(transportDefaultStreamFlow) + cs.inflow.init(cc.initialStreamRecvWindowSize) cs.ID = cc.nextStreamID cc.nextStreamID += 2 cc.streams[cs.ID] = cs @@ -2215,10 +2342,10 @@ func (cc *ClientConn) forgetStreamID(id uint32) { if len(cc.streams) != slen-1 { panic("forgetting unknown stream id") } - cc.lastActive = time.Now() + cc.lastActive = cc.t.now() if len(cc.streams) == 0 && cc.idleTimer != nil { cc.idleTimer.Reset(cc.idleTimeout) - cc.lastIdle = time.Now() + cc.lastIdle = cc.t.now() } // Wake up writeRequestBody via clientStream.awaitFlowControl and // wake up RoundTrip if there is a pending request. @@ -2278,7 +2405,6 @@ func isEOFOrNetReadError(err error) bool { func (rl *clientConnReadLoop) cleanup() { cc := rl.cc - cc.t.connPool().MarkDead(cc) defer cc.closeConn() defer close(cc.readerDone) @@ -2302,6 +2428,24 @@ func (rl *clientConnReadLoop) cleanup() { } cc.closed = true + // If the connection has never been used, and has been open for only a short time, + // leave it in the connection pool for a little while. + // + // This avoids a situation where new connections are constantly created, + // added to the pool, fail, and are removed from the pool, without any error + // being surfaced to the user. + const unusedWaitTime = 5 * time.Second + idleTime := cc.t.now().Sub(cc.lastActive) + if atomic.LoadUint32(&cc.atomicReused) == 0 && idleTime < unusedWaitTime { + cc.idleTimer = cc.t.afterFunc(unusedWaitTime-idleTime, func() { + cc.t.connPool().MarkDead(cc) + }) + } else { + cc.mu.Unlock() // avoid any deadlocks in MarkDead + cc.t.connPool().MarkDead(cc) + cc.mu.Lock() + } + for _, cs := range cc.streams { select { case <-cs.peerClosed: @@ -2345,7 +2489,7 @@ func (cc *ClientConn) countReadFrameError(err error) { func (rl *clientConnReadLoop) run() error { cc := rl.cc gotSettings := false - readIdleTimeout := cc.t.ReadIdleTimeout + readIdleTimeout := cc.readIdleTimeout var t timer if readIdleTimeout != 0 { t = cc.t.afterFunc(readIdleTimeout, cc.healthCheck) @@ -2359,7 +2503,7 @@ func (rl *clientConnReadLoop) run() error { cc.vlogf("http2: Transport readFrame error on conn %p: (%T) %v", cc, err, err) } if se, ok := err.(StreamError); ok { - if cs := rl.streamByID(se.StreamID); cs != nil { + if cs := rl.streamByID(se.StreamID, notHeaderOrDataFrame); cs != nil { if se.Cause == nil { se.Cause = cc.fr.errDetail } @@ -2405,13 +2549,16 @@ func (rl *clientConnReadLoop) run() error { if VerboseLogs { cc.vlogf("http2: Transport conn %p received error from processing frame %v: %v", cc, summarizeFrame(f), err) } + if !cc.seenSettings { + close(cc.seenSettingsChan) + } return err } } } func (rl *clientConnReadLoop) processHeaders(f *MetaHeadersFrame) error { - cs := rl.streamByID(f.StreamID) + cs := rl.streamByID(f.StreamID, headerOrDataFrame) if cs == nil { // We'd get here if we canceled a request while the // server had its response still in flight. So if this @@ -2529,15 +2676,34 @@ func (rl *clientConnReadLoop) handleResponse(cs *clientStream, f *MetaHeadersFra if f.StreamEnded() { return nil, errors.New("1xx informational response with END_STREAM flag") } - cs.num1xx++ - const max1xxResponses = 5 // arbitrary bound on number of informational responses, same as net/http - if cs.num1xx > max1xxResponses { - return nil, errors.New("http2: too many 1xx informational responses") - } if fn := cs.get1xxTraceFunc(); fn != nil { + // If the 1xx response is being delivered to the user, + // then they're responsible for limiting the number + // of responses. if err := fn(statusCode, textproto.MIMEHeader(header)); err != nil { return nil, err } + } else { + // If the user didn't examine the 1xx response, then we + // limit the size of all 1xx headers. + // + // This differs a bit from the HTTP/1 implementation, which + // limits the size of all 1xx headers plus the final response. + // Use the larger limit of MaxHeaderListSize and + // net/http.Transport.MaxResponseHeaderBytes. + limit := int64(cs.cc.t.maxHeaderListSize()) + if t1 := cs.cc.t.t1; t1 != nil && t1.MaxResponseHeaderBytes > limit { + limit = t1.MaxResponseHeaderBytes + } + for _, h := range f.Fields { + cs.totalHeaderSize += int64(h.Size()) + } + if cs.totalHeaderSize > limit { + if VerboseLogs { + log.Printf("http2: 1xx informational responses too large") + } + return nil, errors.New("header list too large") + } } if statusCode == 100 { traceGot100Continue(cs.trace) @@ -2721,7 +2887,7 @@ func (b transportResponseBody) Close() error { func (rl *clientConnReadLoop) processData(f *DataFrame) error { cc := rl.cc - cs := rl.streamByID(f.StreamID) + cs := rl.streamByID(f.StreamID, headerOrDataFrame) data := f.Data() if cs == nil { cc.mu.Lock() @@ -2856,9 +3022,22 @@ func (rl *clientConnReadLoop) endStreamError(cs *clientStream, err error) { cs.abortStream(err) } -func (rl *clientConnReadLoop) streamByID(id uint32) *clientStream { +// Constants passed to streamByID for documentation purposes. +const ( + headerOrDataFrame = true + notHeaderOrDataFrame = false +) + +// streamByID returns the stream with the given id, or nil if no stream has that id. +// If headerOrData is true, it clears rst.StreamPingsBlocked. +func (rl *clientConnReadLoop) streamByID(id uint32, headerOrData bool) *clientStream { rl.cc.mu.Lock() defer rl.cc.mu.Unlock() + if headerOrData { + // Work around an unfortunate gRPC behavior. + // See comment on ClientConn.rstStreamPingsBlocked for details. + rl.cc.rstStreamPingsBlocked = false + } cs := rl.cc.streams[id] if cs != nil && !cs.readAborted { return cs @@ -2952,6 +3131,21 @@ func (rl *clientConnReadLoop) processSettingsNoWrite(f *SettingsFrame) error { case SettingHeaderTableSize: cc.henc.SetMaxDynamicTableSize(s.Val) cc.peerMaxHeaderTableSize = s.Val + case SettingEnableConnectProtocol: + if err := s.Valid(); err != nil { + return err + } + // If the peer wants to send us SETTINGS_ENABLE_CONNECT_PROTOCOL, + // we require that it do so in the first SETTINGS frame. + // + // When we attempt to use extended CONNECT, we wait for the first + // SETTINGS frame to see if the server supports it. If we let the + // server enable the feature with a later SETTINGS frame, then + // users will see inconsistent results depending on whether we've + // seen that frame or not. + if !cc.seenSettings { + cc.extendedConnectAllowed = s.Val == 1 + } default: cc.vlogf("Unhandled Setting: %v", s) } @@ -2969,6 +3163,7 @@ func (rl *clientConnReadLoop) processSettingsNoWrite(f *SettingsFrame) error { // connection can establish to our default. cc.maxConcurrentStreams = defaultMaxConcurrentStreams } + close(cc.seenSettingsChan) cc.seenSettings = true } @@ -2977,7 +3172,7 @@ func (rl *clientConnReadLoop) processSettingsNoWrite(f *SettingsFrame) error { func (rl *clientConnReadLoop) processWindowUpdate(f *WindowUpdateFrame) error { cc := rl.cc - cs := rl.streamByID(f.StreamID) + cs := rl.streamByID(f.StreamID, notHeaderOrDataFrame) if f.StreamID != 0 && cs == nil { return nil } @@ -3006,7 +3201,7 @@ func (rl *clientConnReadLoop) processWindowUpdate(f *WindowUpdateFrame) error { } func (rl *clientConnReadLoop) processResetStream(f *RSTStreamFrame) error { - cs := rl.streamByID(f.StreamID) + cs := rl.streamByID(f.StreamID, notHeaderOrDataFrame) if cs == nil { // TODO: return error if server tries to RST_STREAM an idle stream return nil @@ -3081,6 +3276,12 @@ func (rl *clientConnReadLoop) processPing(f *PingFrame) error { close(c) delete(cc.pings, f.Data) } + if cc.pendingResets > 0 { + // See clientStream.cleanupWriteRequest. + cc.pendingResets = 0 + cc.rstStreamPingsBlocked = true + cc.cond.Broadcast() + } return nil } cc := rl.cc @@ -3103,13 +3304,20 @@ func (rl *clientConnReadLoop) processPushPromise(f *PushPromiseFrame) error { return ConnectionError(ErrCodeProtocol) } -func (cc *ClientConn) writeStreamReset(streamID uint32, code ErrCode, err error) { +// writeStreamReset sends a RST_STREAM frame. +// When ping is true, it also sends a PING frame with a random payload. +func (cc *ClientConn) writeStreamReset(streamID uint32, code ErrCode, ping bool, err error) { // TODO: map err to more interesting error codes, once the // HTTP community comes up with some. But currently for // RST_STREAM there's no equivalent to GOAWAY frame's debug // data, and the error codes are all pretty vague ("cancel"). cc.wmu.Lock() cc.fr.WriteRSTStream(streamID, code) + if ping { + var payload [8]byte + rand.Read(payload[:]) + cc.fr.WritePing(false, payload) + } cc.bw.Flush() cc.wmu.Unlock() } @@ -3263,7 +3471,7 @@ func traceGotConn(req *http.Request, cc *ClientConn, reused bool) { cc.mu.Lock() ci.WasIdle = len(cc.streams) == 0 && reused if ci.WasIdle && !cc.lastActive.IsZero() { - ci.IdleTime = time.Since(cc.lastActive) + ci.IdleTime = cc.t.timeSince(cc.lastActive) } cc.mu.Unlock() diff --git a/vendor/golang.org/x/net/http2/unencrypted.go b/vendor/golang.org/x/net/http2/unencrypted.go new file mode 100644 index 0000000000..b2de211613 --- /dev/null +++ b/vendor/golang.org/x/net/http2/unencrypted.go @@ -0,0 +1,32 @@ +// Copyright 2024 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package http2 + +import ( + "crypto/tls" + "errors" + "net" +) + +const nextProtoUnencryptedHTTP2 = "unencrypted_http2" + +// unencryptedNetConnFromTLSConn retrieves a net.Conn wrapped in a *tls.Conn. +// +// TLSNextProto functions accept a *tls.Conn. +// +// When passing an unencrypted HTTP/2 connection to a TLSNextProto function, +// we pass a *tls.Conn with an underlying net.Conn containing the unencrypted connection. +// To be extra careful about mistakes (accidentally dropping TLS encryption in a place +// where we want it), the tls.Conn contains a net.Conn with an UnencryptedNetConn method +// that returns the actual connection we want to use. +func unencryptedNetConnFromTLSConn(tc *tls.Conn) (net.Conn, error) { + conner, ok := tc.NetConn().(interface { + UnencryptedNetConn() net.Conn + }) + if !ok { + return nil, errors.New("http2: TLS conn unexpectedly found in unencrypted handoff") + } + return conner.UnencryptedNetConn(), nil +} diff --git a/vendor/golang.org/x/net/http2/write.go b/vendor/golang.org/x/net/http2/write.go index 33f61398a1..6ff6bee7e9 100644 --- a/vendor/golang.org/x/net/http2/write.go +++ b/vendor/golang.org/x/net/http2/write.go @@ -131,6 +131,16 @@ func (se StreamError) writeFrame(ctx writeContext) error { func (se StreamError) staysWithinBuffer(max int) bool { return frameHeaderLen+4 <= max } +type writePing struct { + data [8]byte +} + +func (w writePing) writeFrame(ctx writeContext) error { + return ctx.Framer().WritePing(false, w.data) +} + +func (w writePing) staysWithinBuffer(max int) bool { return frameHeaderLen+len(w.data) <= max } + type writePingAck struct{ pf *PingFrame } func (w writePingAck) writeFrame(ctx writeContext) error { diff --git a/vendor/modules.txt b/vendor/modules.txt index 26ebe57b82..de145bc8b6 100644 --- a/vendor/modules.txt +++ b/vendor/modules.txt @@ -701,7 +701,7 @@ golang.org/x/crypto/ssh/knownhosts # golang.org/x/mod v0.21.0 ## explicit; go 1.22.0 golang.org/x/mod/semver -# golang.org/x/net v0.29.0 +# golang.org/x/net v0.33.0 ## explicit; go 1.18 golang.org/x/net/context golang.org/x/net/http/httpguts From ae09c37240a729e29c3e25626baccee86457280c Mon Sep 17 00:00:00 2001 From: mitchell Date: Mon, 23 Dec 2024 13:34:10 -0500 Subject: [PATCH 095/336] Added missing localization. --- internal/locale/locales/en-us.yaml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/internal/locale/locales/en-us.yaml b/internal/locale/locales/en-us.yaml index 2ee84b1c67..364d1e22dc 100644 --- a/internal/locale/locales/en-us.yaml +++ b/internal/locale/locales/en-us.yaml @@ -610,6 +610,8 @@ err_language_updated: other: Failed to update language bundle_err_cannot_fetch_checkpoint: other: Cannot fetch checkpoint for bundle listing +package_err_cannot_fetch_checkpoint: + other: Cannot fetch checkpoint for package listing package_err_cannot_obtain_commit: other: Cannot obtain commit for package listing bundle_err_cannot_obtain_commit: From f34443f29af19b9e8dc40389225cf96770bfe913 Mon Sep 17 00:00:00 2001 From: mitchell Date: Mon, 23 Dec 2024 14:23:31 -0500 Subject: [PATCH 096/336] Recognize invalid input as a buildplanner error response. --- pkg/platform/api/buildplanner/response/shared.go | 3 ++- pkg/platform/api/buildplanner/types/errors.go | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/pkg/platform/api/buildplanner/response/shared.go b/pkg/platform/api/buildplanner/response/shared.go index 627bfcb949..0919014a33 100644 --- a/pkg/platform/api/buildplanner/response/shared.go +++ b/pkg/platform/api/buildplanner/response/shared.go @@ -90,7 +90,8 @@ func IsErrorResponse(errorType string) bool { errorType == types.MergeConflictErrorType || errorType == types.RevertConflictErrorType || errorType == types.CommitNotInTargetHistoryErrorType || - errorType == types.ComitHasNoParentErrorType + errorType == types.CommitHasNoParentErrorType || + errorType == types.InvalidInputErrorType } // NotFoundError represents an error that occurred because a resource was not found. diff --git a/pkg/platform/api/buildplanner/types/errors.go b/pkg/platform/api/buildplanner/types/errors.go index e3f234d30a..85146640a9 100644 --- a/pkg/platform/api/buildplanner/types/errors.go +++ b/pkg/platform/api/buildplanner/types/errors.go @@ -19,6 +19,7 @@ const ( MergeConflictErrorType = "MergeConflict" RevertConflictErrorType = "RevertConflict" CommitNotInTargetHistoryErrorType = "CommitNotInTargetHistory" - ComitHasNoParentErrorType = "CommitHasNoParent" + CommitHasNoParentErrorType = "CommitHasNoParent" TargetNotFoundErrorType = "TargetNotFound" + InvalidInputErrorType = "InvalidInput" ) From 058c68c151f6e28578e96ed060b0c75668d42fc6 Mon Sep 17 00:00:00 2001 From: mitchell Date: Mon, 23 Dec 2024 14:52:15 -0500 Subject: [PATCH 097/336] Warn when writing colored output fails. Errors are sporadic and benign, but they affect automation tests, so drop the log level to warning. --- internal/output/plain.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/output/plain.go b/internal/output/plain.go index a927ced6f1..14e8088bbb 100644 --- a/internal/output/plain.go +++ b/internal/output/plain.go @@ -107,7 +107,7 @@ func (f *Plain) writeNow(writer io.Writer, value string) { } _, err := colorize.Colorize(value, writer, !f.cfg.Colored) if err != nil { - logging.ErrorNoStacktrace("Writing colored output failed: %v", err) + logging.Warning("Writing colored output failed: %v", err) } } From df6a059d476c5552e49a53422e027e57d1ab3496 Mon Sep 17 00:00:00 2001 From: mitchell Date: Tue, 24 Dec 2024 10:21:44 -0500 Subject: [PATCH 098/336] Generalized `state install` CVE report. Accurately listing all package names being checked would often result in a horrendously long notice. Also, now that `state install` allows multiple arguments, singular "Dependency" is not good grammar. --- internal/locale/locales/en-us.yaml | 10 +++++----- internal/runbits/cves/cves.go | 4 ++-- test/integration/package_int_test.go | 10 +++++----- 3 files changed, 12 insertions(+), 12 deletions(-) diff --git a/internal/locale/locales/en-us.yaml b/internal/locale/locales/en-us.yaml index 2ee84b1c67..c304e1303c 100644 --- a/internal/locale/locales/en-us.yaml +++ b/internal/locale/locales/en-us.yaml @@ -1099,7 +1099,7 @@ progress_search: progress_platform_search: other: "• Searching for platform in the ActiveState Catalog" progress_cve_search: - other: "• Checking for vulnerabilities (CVEs) on [ACTIONABLE]{{.V0}}[/RESET] and its dependencies" + other: "• Checking for vulnerabilities (CVEs)" setup_runtime: other: "Setting Up Runtime" progress_solve: @@ -1138,13 +1138,13 @@ unstable_feature_banner: other: "[NOTICE]Beta Feature: This feature is still in beta and may be unstable.[/RESET]\n" warning_vulnerable: other: | - [ERROR]Warning: Dependency has {{.V0}} direct and {{.V1}} indirect known vulnerabilities (CVEs)[/RESET] + [ERROR]Warning: Found {{.V0}} direct and {{.V1}} indirect known vulnerabilities (CVEs)[/RESET] warning_vulnerable_indirectonly: other: | - [ERROR]Warning: Dependency has {{.V0}} indirect known vulnerabilities (CVEs)[/RESET] + [ERROR]Warning: Found {{.V0}} indirect known vulnerabilities (CVEs)[/RESET] warning_vulnerable_directonly: other: | - [ERROR]Warning: Dependency has {{.V0}} known vulnerabilities (CVEs)[/RESET] + [ERROR]Warning: Found {{.V0}} known vulnerabilities (CVEs)[/RESET] cve_critical: other: Critical cve_high: @@ -1159,7 +1159,7 @@ disable_prompting_vulnerabilities: other: To disable prompting for vulnerabilities run '[ACTIONABLE]state config set security.prompt.enabled false[/RESET]'. warning_vulnerable_short: other: | - [ERROR]Warning:[/RESET] Dependency has [ERROR]{{.V0}} known vulnerabilities (CVEs)[/RESET]. Severity: {{.V1}}. Run '[ACTIONABLE]state security[/RESET]' for more info. + [ERROR]Warning:[/RESET] Found [ERROR]{{.V0}} known vulnerabilities (CVEs)[/RESET]. Severity: {{.V1}}. Run '[ACTIONABLE]state security[/RESET]' for more info. prompt_continue_pkg_operation: other: | Do you want to continue installing this dependency despite its vulnerabilities? diff --git a/internal/runbits/cves/cves.go b/internal/runbits/cves/cves.go index ad7d19ff86..7275c7b3f2 100644 --- a/internal/runbits/cves/cves.go +++ b/internal/runbits/cves/cves.go @@ -77,8 +77,7 @@ func (c *CveReport) Report(newBuildPlan *buildplan.BuildPlan, oldBuildPlan *buil } } - names := changedRequirements(oldBuildPlan, newBuildPlan) - pg := output.StartSpinner(c.prime.Output(), locale.Tr("progress_cve_search", strings.Join(names, ", ")), constants.TerminalAnimationInterval) + pg := output.StartSpinner(c.prime.Output(), locale.T("progress_cve_search"), constants.TerminalAnimationInterval) ingredientVulnerabilities, err := model.FetchVulnerabilitiesForIngredients(c.prime.Auth(), ingredients) if err != nil { @@ -96,6 +95,7 @@ func (c *CveReport) Report(newBuildPlan *buildplan.BuildPlan, oldBuildPlan *buil pg.Stop(locale.T("progress_unsafe")) pg = nil + names := changedRequirements(oldBuildPlan, newBuildPlan) vulnerabilities := model.CombineVulnerabilities(ingredientVulnerabilities, names...) if c.prime.Prompt() == nil || !c.shouldPromptForSecurity(vulnerabilities) { diff --git a/test/integration/package_int_test.go b/test/integration/package_int_test.go index 60983fc0bd..bb3cb388e6 100644 --- a/test/integration/package_int_test.go +++ b/test/integration/package_int_test.go @@ -571,7 +571,7 @@ func (suite *PackageIntegrationTestSuite) TestCVE_NoPrompt() { // Note: this version has 2 direct vulnerabilities, and 3 indirect vulnerabilities, but since // we're not prompting, we're only showing a single count. cp = ts.Spawn("install", "urllib3@2.0.2") - cp.ExpectRe(`Warning: Dependency has .* vulnerabilities`, e2e.RuntimeSolvingTimeoutOpt) + cp.ExpectRe(`Warning: Found .* vulnerabilities`, e2e.RuntimeSolvingTimeoutOpt) cp.ExpectExitCode(0) } @@ -594,7 +594,7 @@ func (suite *PackageIntegrationTestSuite) TestCVE_Prompt() { cp.ExpectExitCode(0) cp = ts.Spawn("install", "urllib3@2.0.2", "--ts=2024-09-10T16:36:34.393Z") - cp.ExpectRe(`Warning: Dependency has .* vulnerabilities`, e2e.RuntimeSolvingTimeoutOpt) + cp.ExpectRe(`Warning: Found .* vulnerabilities`, e2e.RuntimeSolvingTimeoutOpt) cp.Expect("Do you want to continue") cp.SendLine("y") cp.ExpectExitCode(0) @@ -619,7 +619,7 @@ func (suite *PackageIntegrationTestSuite) TestCVE_NonInteractive() { cp.ExpectExitCode(0) cp = ts.Spawn("install", "urllib3@2.0.2", "--ts=2024-09-10T16:36:34.393Z", "--non-interactive") - cp.ExpectRe(`Warning: Dependency has .* vulnerabilities`, e2e.RuntimeSolvingTimeoutOpt) + cp.ExpectRe(`Warning: Found .* vulnerabilities`, e2e.RuntimeSolvingTimeoutOpt) cp.Expect("Aborting because State Tool is running in non-interactive mode") cp.ExpectNotExitCode(0) } @@ -643,7 +643,7 @@ func (suite *PackageIntegrationTestSuite) TestCVE_Force() { cp.ExpectExitCode(0) cp = ts.Spawn("install", "urllib3@2.0.2", "--ts=2024-09-10T16:36:34.393Z", "--force") - cp.ExpectRe(`Warning: Dependency has .* vulnerabilities`, e2e.RuntimeSolvingTimeoutOpt) + cp.ExpectRe(`Warning: Found .* vulnerabilities`, e2e.RuntimeSolvingTimeoutOpt) cp.Expect("Continuing because the '--force' flag is set") cp.ExpectExitCode(0) } @@ -664,7 +664,7 @@ func (suite *PackageIntegrationTestSuite) TestCVE_Indirect() { cp.ExpectExitCode(0) cp = ts.Spawn("install", "private/ActiveState-CLI-Testing/language/python/django_dep", "--ts=2024-09-10T16:36:34.393Z") - cp.ExpectRe(`Warning: Dependency has \d+ indirect known vulnerabilities`, e2e.RuntimeSolvingTimeoutOpt) + cp.ExpectRe(`Warning: Found \d+ indirect known vulnerabilities`, e2e.RuntimeSolvingTimeoutOpt) cp.Expect("Do you want to continue") cp.SendLine("n") cp.ExpectExitCode(1) From 65599ef1ee342f0aedc2524ccc931f7ce036e326 Mon Sep 17 00:00:00 2001 From: mitchell Date: Tue, 24 Dec 2024 12:59:11 -0500 Subject: [PATCH 099/336] Turn on non-interactive mode for structured output. --- cmd/state/internal/cmdtree/cmdtree.go | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/cmd/state/internal/cmdtree/cmdtree.go b/cmd/state/internal/cmdtree/cmdtree.go index 739a3cd727..54e0fe0208 100644 --- a/cmd/state/internal/cmdtree/cmdtree.go +++ b/cmd/state/internal/cmdtree/cmdtree.go @@ -295,7 +295,12 @@ func newStateCommand(globals *globalOptions, prime *primer.Values) *captain.Comm Shorthand: "o", Description: locale.T("flag_state_output_description"), Persist: true, - Value: &globals.Output, + OnUse: func() { + if prime.Output().Type().IsStructured() { + globals.NonInteractive = true + } + }, + Value: &globals.Output, }, { Name: "non-interactive", // Name and Shorthand should be kept in sync with cmd/state/output.go From deecfc5a58732b0d4a87be8d74796ae3b30fa724 Mon Sep 17 00:00:00 2001 From: mitchell Date: Mon, 6 Jan 2025 11:42:01 -0500 Subject: [PATCH 100/336] Remediate CVE in go-git. --- go.mod | 12 +- go.sum | 16 + .../ProtonMail/go-crypto/ocb/ocb.go | 5 +- .../go-crypto/openpgp/armor/armor.go | 66 +- .../go-crypto/openpgp/armor/encode.go | 77 +- .../go-crypto/openpgp/canonical_text.go | 12 +- .../ProtonMail/go-crypto/openpgp/ecdh/ecdh.go | 6 +- .../go-crypto/openpgp/ed25519/ed25519.go | 115 +++ .../go-crypto/openpgp/ed448/ed448.go | 119 +++ .../go-crypto/openpgp/errors/errors.go | 70 +- .../openpgp/internal/algorithm/cipher.go | 12 +- .../openpgp/internal/ecc/curve_info.go | 9 +- .../go-crypto/openpgp/internal/ecc/ed25519.go | 10 +- .../go-crypto/openpgp/internal/ecc/ed448.go | 10 +- .../go-crypto/openpgp/key_generation.go | 133 +++- .../ProtonMail/go-crypto/openpgp/keys.go | 125 ++- .../go-crypto/openpgp/packet/aead_crypter.go | 36 +- .../go-crypto/openpgp/packet/compressed.go | 44 +- .../go-crypto/openpgp/packet/config.go | 170 +++- .../go-crypto/openpgp/packet/config_v5.go | 7 + .../go-crypto/openpgp/packet/encrypted_key.go | 424 ++++++++-- .../go-crypto/openpgp/packet/literal.go | 6 +- .../go-crypto/openpgp/packet/marker.go | 33 + .../openpgp/packet/one_pass_signature.go | 132 +++- .../go-crypto/openpgp/packet/opaque.go | 3 +- .../go-crypto/openpgp/packet/packet.go | 152 +++- .../openpgp/packet/packet_sequence.go | 222 ++++++ .../openpgp/packet/packet_unsupported.go | 24 + .../go-crypto/openpgp/packet/padding.go | 26 + .../go-crypto/openpgp/packet/private_key.go | 540 ++++++++++--- .../go-crypto/openpgp/packet/public_key.go | 482 ++++++++++-- .../go-crypto/openpgp/packet/reader.go | 159 +++- .../go-crypto/openpgp/packet/recipient.go | 15 + .../go-crypto/openpgp/packet/signature.go | 737 ++++++++++++++---- .../openpgp/packet/symmetric_key_encrypted.go | 89 ++- .../openpgp/packet/symmetrically_encrypted.go | 4 + .../packet/symmetrically_encrypted_aead.go | 15 +- .../packet/symmetrically_encrypted_mdc.go | 10 +- .../go-crypto/openpgp/packet/userattribute.go | 3 +- .../go-crypto/openpgp/packet/userid.go | 3 +- .../ProtonMail/go-crypto/openpgp/read.go | 115 +-- .../go-crypto/openpgp/read_write_test_data.go | 201 ++++- .../ProtonMail/go-crypto/openpgp/s2k/s2k.go | 45 +- .../go-crypto/openpgp/s2k/s2k_cache.go | 2 +- .../go-crypto/openpgp/s2k/s2k_config.go | 6 +- .../ProtonMail/go-crypto/openpgp/write.go | 65 +- .../go-crypto/openpgp/x25519/x25519.go | 221 ++++++ .../ProtonMail/go-crypto/openpgp/x448/x448.go | 229 ++++++ .../cyphar/filepath-securejoin/CHANGELOG.md | 209 +++++ .../cyphar/filepath-securejoin/LICENSE | 2 +- .../cyphar/filepath-securejoin/README.md | 140 +++- .../cyphar/filepath-securejoin/VERSION | 2 +- .../cyphar/filepath-securejoin/doc.go | 39 + .../gocompat_errors_go120.go | 18 + .../gocompat_errors_unsupported.go | 38 + .../gocompat_generics_go121.go | 32 + .../gocompat_generics_unsupported.go | 124 +++ .../cyphar/filepath-securejoin/join.go | 104 +-- .../filepath-securejoin/lookup_linux.go | 388 +++++++++ .../cyphar/filepath-securejoin/mkdir_linux.go | 215 +++++ .../cyphar/filepath-securejoin/open_linux.go | 103 +++ .../filepath-securejoin/openat2_linux.go | 127 +++ .../filepath-securejoin/openat_linux.go | 59 ++ .../filepath-securejoin/procfs_linux.go | 452 +++++++++++ .../cyphar/filepath-securejoin/vfs.go | 26 +- vendor/github.com/go-git/go-billy/v5/Makefile | 7 + vendor/github.com/go-git/go-billy/v5/fs.go | 2 + .../go-git/go-billy/v5/memfs/memory.go | 36 +- .../go-git/go-billy/v5/memfs/storage.go | 3 +- .../go-git/go-billy/v5/osfs/os_bound.go | 6 +- .../go-git/go-billy/v5/osfs/os_posix.go | 4 +- .../go-git/go-billy/v5/osfs/os_wasip1.go | 34 + .../go-git/go-billy/v5/util/util.go | 35 +- .../go-git/go-git/v5/COMPATIBILITY.md | 3 +- .../go-git/go-git/v5/CONTRIBUTING.md | 7 + vendor/github.com/go-git/go-git/v5/blame.go | 13 +- .../go-git/go-git/v5/config/config.go | 2 + .../go-git/v5/internal/revision/scanner.go | 7 +- vendor/github.com/go-git/go-git/v5/options.go | 26 + .../v5/plumbing/format/gitignore/dir.go | 4 + .../v5/plumbing/format/index/decoder.go | 103 ++- .../v5/plumbing/format/index/encoder.go | 94 ++- .../plumbing/format/packfile/delta_index.go | 20 +- .../plumbing/format/packfile/patch_delta.go | 21 +- .../v5/plumbing/format/pktline/scanner.go | 2 + .../go-git/v5/plumbing/object/signature.go | 1 + .../go-git/go-git/v5/plumbing/object/tree.go | 1 + .../v5/plumbing/protocol/packp/filter.go | 76 ++ .../plumbing/protocol/packp/sideband/demux.go | 2 +- .../v5/plumbing/protocol/packp/srvresp.go | 3 + .../v5/plumbing/protocol/packp/ulreq.go | 1 + .../plumbing/protocol/packp/ulreq_encode.go | 11 + .../go-git/go-git/v5/plumbing/reference.go | 4 +- .../go-git/v5/plumbing/transport/common.go | 7 +- .../v5/plumbing/transport/file/client.go | 19 +- .../v5/plumbing/transport/http/common.go | 6 +- .../v5/plumbing/transport/server/loader.go | 12 +- vendor/github.com/go-git/go-git/v5/remote.go | 33 +- .../github.com/go-git/go-git/v5/repository.go | 4 +- vendor/github.com/go-git/go-git/v5/status.go | 69 ++ .../v5/storage/filesystem/dotgit/dotgit.go | 33 +- .../go-git/v5/storage/filesystem/index.go | 2 +- .../go-git/v5/storage/filesystem/object.go | 4 +- .../github.com/go-git/go-git/v5/submodule.go | 6 +- .../go-git/v5/utils/merkletrie/change.go | 9 + .../go-git/v5/utils/merkletrie/difftree.go | 2 +- .../go-git/go-git/v5/utils/sync/bufio.go | 2 +- .../go-git/go-git/v5/utils/sync/bytes.go | 2 +- .../go-git/go-git/v5/utils/sync/zlib.go | 4 +- .../github.com/go-git/go-git/v5/worktree.go | 117 ++- .../go-git/go-git/v5/worktree_commit.go | 43 +- .../go-git/go-git/v5/worktree_linux.go | 3 +- .../go-git/go-git/v5/worktree_status.go | 34 +- .../skeema/knownhosts/CONTRIBUTING.md | 36 + vendor/github.com/skeema/knownhosts/README.md | 36 +- .../skeema/knownhosts/knownhosts.go | 317 +++++++- .../testify/assert/assertion_compare.go | 35 +- .../testify/assert/assertion_format.go | 34 +- .../testify/assert/assertion_forward.go | 68 +- .../testify/assert/assertion_order.go | 10 +- .../stretchr/testify/assert/assertions.go | 157 +++- .../testify/assert/yaml/yaml_custom.go | 25 + .../testify/assert/yaml/yaml_default.go | 37 + .../stretchr/testify/assert/yaml/yaml_fail.go | 18 + .../stretchr/testify/require/require.go | 432 +++++----- .../stretchr/testify/require/require.go.tmpl | 2 +- .../testify/require/require_forward.go | 68 +- .../stretchr/testify/require/requirements.go | 2 +- .../github.com/stretchr/testify/suite/doc.go | 4 + vendor/modules.txt | 25 +- 130 files changed, 7977 insertions(+), 1363 deletions(-) create mode 100644 vendor/github.com/ProtonMail/go-crypto/openpgp/ed25519/ed25519.go create mode 100644 vendor/github.com/ProtonMail/go-crypto/openpgp/ed448/ed448.go create mode 100644 vendor/github.com/ProtonMail/go-crypto/openpgp/packet/config_v5.go create mode 100644 vendor/github.com/ProtonMail/go-crypto/openpgp/packet/marker.go create mode 100644 vendor/github.com/ProtonMail/go-crypto/openpgp/packet/packet_sequence.go create mode 100644 vendor/github.com/ProtonMail/go-crypto/openpgp/packet/packet_unsupported.go create mode 100644 vendor/github.com/ProtonMail/go-crypto/openpgp/packet/padding.go create mode 100644 vendor/github.com/ProtonMail/go-crypto/openpgp/packet/recipient.go create mode 100644 vendor/github.com/ProtonMail/go-crypto/openpgp/x25519/x25519.go create mode 100644 vendor/github.com/ProtonMail/go-crypto/openpgp/x448/x448.go create mode 100644 vendor/github.com/cyphar/filepath-securejoin/CHANGELOG.md create mode 100644 vendor/github.com/cyphar/filepath-securejoin/doc.go create mode 100644 vendor/github.com/cyphar/filepath-securejoin/gocompat_errors_go120.go create mode 100644 vendor/github.com/cyphar/filepath-securejoin/gocompat_errors_unsupported.go create mode 100644 vendor/github.com/cyphar/filepath-securejoin/gocompat_generics_go121.go create mode 100644 vendor/github.com/cyphar/filepath-securejoin/gocompat_generics_unsupported.go create mode 100644 vendor/github.com/cyphar/filepath-securejoin/lookup_linux.go create mode 100644 vendor/github.com/cyphar/filepath-securejoin/mkdir_linux.go create mode 100644 vendor/github.com/cyphar/filepath-securejoin/open_linux.go create mode 100644 vendor/github.com/cyphar/filepath-securejoin/openat2_linux.go create mode 100644 vendor/github.com/cyphar/filepath-securejoin/openat_linux.go create mode 100644 vendor/github.com/cyphar/filepath-securejoin/procfs_linux.go create mode 100644 vendor/github.com/go-git/go-billy/v5/osfs/os_wasip1.go create mode 100644 vendor/github.com/go-git/go-git/v5/plumbing/protocol/packp/filter.go create mode 100644 vendor/github.com/skeema/knownhosts/CONTRIBUTING.md create mode 100644 vendor/github.com/stretchr/testify/assert/yaml/yaml_custom.go create mode 100644 vendor/github.com/stretchr/testify/assert/yaml/yaml_default.go create mode 100644 vendor/github.com/stretchr/testify/assert/yaml/yaml_fail.go diff --git a/go.mod b/go.mod index 55ece8c997..df547a4c1e 100644 --- a/go.mod +++ b/go.mod @@ -53,7 +53,7 @@ require ( github.com/spf13/cast v1.3.0 github.com/spf13/cobra v1.1.1 github.com/spf13/pflag v1.0.5 - github.com/stretchr/testify v1.9.0 + github.com/stretchr/testify v1.10.0 github.com/thoas/go-funk v0.8.0 github.com/vbauerster/mpb/v7 v7.1.5 github.com/vektah/gqlparser/v2 v2.5.16 @@ -75,7 +75,7 @@ require ( github.com/charmbracelet/bubbles v0.18.0 github.com/charmbracelet/bubbletea v0.25.0 github.com/charmbracelet/lipgloss v0.9.1 - github.com/go-git/go-git/v5 v5.12.0 + github.com/go-git/go-git/v5 v5.13.1 github.com/gowebpki/jcs v1.0.1 github.com/klauspost/compress v1.11.4 github.com/mholt/archiver/v3 v3.5.1 @@ -86,14 +86,14 @@ require ( dario.cat/mergo v1.0.0 // indirect github.com/ActiveState/pty v0.0.0-20230628221854-6fb90eb08a14 // indirect github.com/Microsoft/go-winio v0.6.1 // indirect - github.com/ProtonMail/go-crypto v1.0.0 // indirect + github.com/ProtonMail/go-crypto v1.1.3 // indirect github.com/andybalholm/brotli v1.0.1 // indirect github.com/aymanbagabas/go-osc52/v2 v2.0.1 // indirect github.com/cloudflare/circl v1.3.7 // indirect github.com/containerd/console v1.0.4-0.20230313162750-1ae8d489ac81 // indirect - github.com/cyphar/filepath-securejoin v0.2.4 // indirect + github.com/cyphar/filepath-securejoin v0.3.6 // indirect github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376 // indirect - github.com/go-git/go-billy/v5 v5.5.0 // indirect + github.com/go-git/go-billy/v5 v5.6.1 // indirect github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect github.com/hashicorp/golang-lru/v2 v2.0.7 // indirect github.com/hinshun/vt10x v0.0.0-20220301184237-5011da428d02 // indirect @@ -109,7 +109,7 @@ require ( github.com/pierrec/lz4/v4 v4.1.2 // indirect github.com/pjbgf/sha1cd v0.3.0 // indirect github.com/shoenig/go-m1cpu v0.1.6 // indirect - github.com/skeema/knownhosts v1.2.2 // indirect + github.com/skeema/knownhosts v1.3.0 // indirect github.com/sosodev/duration v1.3.1 // indirect golang.org/x/sync v0.10.0 // indirect ) diff --git a/go.sum b/go.sum index fbcccef181..ca20c3449c 100644 --- a/go.sum +++ b/go.sum @@ -38,6 +38,8 @@ github.com/OneOfOne/xxhash v1.2.2 h1:KMrpdQIwFcEqXDklaen+P1axHaj9BSKzvpUUfnHldSE github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= github.com/ProtonMail/go-crypto v1.0.0 h1:LRuvITjQWX+WIfr930YHG2HNfjR1uOfyf5vE0kC2U78= github.com/ProtonMail/go-crypto v1.0.0/go.mod h1:EjAoLdwvbIOoOQr3ihjnSoLZRtE8azugULFRteWMNc0= +github.com/ProtonMail/go-crypto v1.1.3 h1:nRBOetoydLeUb4nHajyO2bKqMLfWQ/ZPwkXqXxPxCFk= +github.com/ProtonMail/go-crypto v1.1.3/go.mod h1:rA3QumHc/FZ8pAHreoekgiAbzpNsfQAosU5td4SnOrE= github.com/PuerkitoBio/goquery v1.9.3 h1:mpJr/ikUA9/GNJB/DBZcGeFDXUtosHRyRrwh7KGdTG0= github.com/PuerkitoBio/goquery v1.9.3/go.mod h1:1ndLHPdTz+DyQPICCWYlYQMPl0oXZj0G6D4LCYA6u4U= github.com/PuerkitoBio/purell v1.1.0/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= @@ -131,6 +133,8 @@ github.com/creack/pty v1.1.11 h1:07n33Z8lZxZ2qwegKbObQohDhXDQxiMMz1NOUGYlesw= github.com/creack/pty v1.1.11/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/cyphar/filepath-securejoin v0.2.4 h1:Ugdm7cg7i6ZK6x3xDF1oEu1nfkyfH53EtKeQYTC3kyg= github.com/cyphar/filepath-securejoin v0.2.4/go.mod h1:aPGpWjXOXUn2NCNjFvBE6aRxGGx79pTxQpKOJNYHHl4= +github.com/cyphar/filepath-securejoin v0.3.6 h1:4d9N5ykBnSp5Xn2JkhocYDkOpURL/18CYMpo6xB9uWM= +github.com/cyphar/filepath-securejoin v0.3.6/go.mod h1:Sdj7gXlvMcPZsbhwhQ33GguGLDGQL7h7bg04C/+u9jI= github.com/dave/jennifer v0.18.0 h1:fhwWYwRltL8wW567TWRHCstLaBCEsk5M5DE4rrMsi94= github.com/dave/jennifer v0.18.0/go.mod h1:fIb+770HOpJ2fmN9EPPKOqm1vMGhB+TwXKMZhrIygKg= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= @@ -150,6 +154,7 @@ github.com/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkp github.com/dustin/go-humanize v1.0.1/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+mFykh5fBlto= github.com/elazarl/goproxy v0.0.0-20230808193330-2592e75ae04a h1:mATvB/9r/3gvcejNsXKSkQ6lcIaNec2nyfOdlTBR2lU= github.com/elazarl/goproxy v0.0.0-20230808193330-2592e75ae04a/go.mod h1:Ro8st/ElPeALwNFlcTpWmkr6IoMFfkjXAvTHpevnDsM= +github.com/elazarl/goproxy v1.2.3 h1:xwIyKHbaP5yfT6O9KIeYJR5549MXRQkoQMRXGztz8YQ= github.com/emirpasic/gods v1.18.1 h1:FXtiHYKDGKCW2KzwZKx0iC0PQmdlorYgdFG9jPXJ1Bc= github.com/emirpasic/gods v1.18.1/go.mod h1:8tpGGwCnJ5H4r6BWwaV6OrWmMoPhUl5jm/FMNAnJvWQ= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= @@ -168,16 +173,21 @@ github.com/gammazero/workerpool v1.1.1/go.mod h1:5BN0IJVRjSFAypo9QTJCaWdijjNz9Jj github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= github.com/gliderlabs/ssh v0.3.7 h1:iV3Bqi942d9huXnzEF2Mt+CY9gLu8DNM4Obd+8bODRE= github.com/gliderlabs/ssh v0.3.7/go.mod h1:zpHEXBstFnQYtGnB8k8kQLol82umzn/2/snG7alWVD8= +github.com/gliderlabs/ssh v0.3.8 h1:a4YXD1V7xMF9g5nTkdfnja3Sxy1PVDCj1Zg4Wb8vY6c= github.com/globalsign/mgo v0.0.0-20180905125535-1ca0a4f7cbcb/go.mod h1:xkRDCp4j0OGD1HRkm4kmhM+pmpv3AKq5SU7GMg4oO/Q= github.com/globalsign/mgo v0.0.0-20181015135952-eeefdecb41b8/go.mod h1:xkRDCp4j0OGD1HRkm4kmhM+pmpv3AKq5SU7GMg4oO/Q= github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376 h1:+zs/tPmkDkHx3U66DAb0lQFJrpS6731Oaa12ikc+DiI= github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376/go.mod h1:an3vInlBmSxCcxctByoQdvwPiA7DTK7jaaFDBTtu0ic= github.com/go-git/go-billy/v5 v5.5.0 h1:yEY4yhzCDuMGSv83oGxiBotRzhwhNr8VZyphhiu+mTU= github.com/go-git/go-billy/v5 v5.5.0/go.mod h1:hmexnoNsr2SJU1Ju67OaNz5ASJY3+sHgFRpCtpDCKow= +github.com/go-git/go-billy/v5 v5.6.1 h1:u+dcrgaguSSkbjzHwelEjc0Yj300NUevrrPphk/SoRA= +github.com/go-git/go-billy/v5 v5.6.1/go.mod h1:0AsLr1z2+Uksi4NlElmMblP5rPcDZNRCD8ujZCRR2BE= github.com/go-git/go-git-fixtures/v4 v4.3.2-0.20231010084843-55a94097c399 h1:eMje31YglSBqCdIqdhKBW8lokaMrL3uTkpGYlE2OOT4= github.com/go-git/go-git-fixtures/v4 v4.3.2-0.20231010084843-55a94097c399/go.mod h1:1OCfN199q1Jm3HZlxleg+Dw/mwps2Wbk9frAWm+4FII= github.com/go-git/go-git/v5 v5.12.0 h1:7Md+ndsjrzZxbddRDZjF14qK+NN56sy6wkqaVrjZtys= github.com/go-git/go-git/v5 v5.12.0/go.mod h1:FTM9VKtnI2m65hNI/TenDDDnUf2Q9FHnXYjuz9i5OEY= +github.com/go-git/go-git/v5 v5.13.1 h1:DAQ9APonnlvSWpvolXWIuV6Q6zXy2wHbN4cVlNR5Q+M= +github.com/go-git/go-git/v5 v5.13.1/go.mod h1:qryJB4cSBoq3FRoBRf5A77joojuBcmPJ0qu3XXXVixc= github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= @@ -549,6 +559,7 @@ github.com/oklog/ulid v1.3.1 h1:EGfNDEx6MqHz8B3uNV6QAib1UR2Lm97sHi3ocA6ESJ4= github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U= github.com/onsi/gomega v1.27.10 h1:naR28SdDFlqrG6kScpT8VWpu1xWY5nJRCF3XaYyBjhI= github.com/onsi/gomega v1.27.10/go.mod h1:RsS8tutOdbdgzbPtzzATp12yT7kM5I5aElG3evPbQ0M= +github.com/onsi/gomega v1.34.1 h1:EUMJIKUjM8sKjYbtxQI9A4z2o+rruxnzNvpknOXie6k= github.com/opentracing/opentracing-go v1.2.0 h1:uEJPy/1a5RIPAJ0Ov+OIO8OxWu77jEv+1B0VhjKrZUs= github.com/opentracing/opentracing-go v1.2.0/go.mod h1:GxEUsuufX4nBwe+T+Wl9TAgYrxe9dPLANfrWvHYVTgc= github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= @@ -597,6 +608,7 @@ github.com/rogpeppe/go-internal v1.2.2/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFR github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= github.com/rogpeppe/go-internal v1.11.0 h1:cWPaGQEPrBb5/AsnsZesgZZ9yb1OQ+GOISoDNXVBh4M= github.com/rogpeppe/go-internal v1.11.0/go.mod h1:ddIwULY96R17DhadqLgMfk9H9tvdUzkipdSkR5nkCZA= +github.com/rogpeppe/go-internal v1.12.0 h1:exVL4IDcn6na9z1rAb56Vxr+CgyK3nn3O+epU5NdKM8= github.com/rollbar/rollbar-go v1.1.0 h1:3ysiHp3ep8W50ykgBMCKXJGaK2Jdivru7SW9EYfAo+M= github.com/rollbar/rollbar-go v1.1.0/go.mod h1:AcFs5f0I+c71bpHlXNNDbOWJiKwjFDtISeXco0L5PKQ= github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= @@ -621,6 +633,8 @@ github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6Mwd github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= github.com/skeema/knownhosts v1.2.2 h1:Iug2P4fLmDw9f41PB6thxUkNUkJzB5i+1/exaj40L3A= github.com/skeema/knownhosts v1.2.2/go.mod h1:xYbVRSPxqBZFrdmDyMmsOs+uX1UZC3nTN3ThzgDxUwo= +github.com/skeema/knownhosts v1.3.0 h1:AM+y0rI04VksttfwjkSTNQorvGqmwATnvnAHpSgc0LY= +github.com/skeema/knownhosts v1.3.0/go.mod h1:sPINvnADmT/qYH1kfv+ePMmOBTH6Tbl7b5LvTDjFK7M= github.com/skratchdot/open-golang v0.0.0-20190104022628-a2dfa6d0dab6 h1:cGT4dcuEyBwwu/v6tosyqcDp2yoIo/LwjMGixUvg3nU= github.com/skratchdot/open-golang v0.0.0-20190104022628-a2dfa6d0dab6/go.mod h1:sUM3LWHvSMaG192sy56D9F7CNvL7jUJVXoqM1QKLnog= github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= @@ -654,6 +668,8 @@ github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/ github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg= github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= +github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA= +github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw= github.com/thoas/go-funk v0.8.0 h1:JP9tKSvnpFVclYgDM0Is7FD9M4fhPvqA0s0BsXmzSRQ= github.com/thoas/go-funk v0.8.0/go.mod h1:+IWnUfUmFO1+WVYQWQtIJHeRRdaIyyYglZN7xzUPe4Q= diff --git a/vendor/github.com/ProtonMail/go-crypto/ocb/ocb.go b/vendor/github.com/ProtonMail/go-crypto/ocb/ocb.go index 1a6f73502e..5022285b44 100644 --- a/vendor/github.com/ProtonMail/go-crypto/ocb/ocb.go +++ b/vendor/github.com/ProtonMail/go-crypto/ocb/ocb.go @@ -18,8 +18,9 @@ import ( "crypto/cipher" "crypto/subtle" "errors" - "github.com/ProtonMail/go-crypto/internal/byteutil" "math/bits" + + "github.com/ProtonMail/go-crypto/internal/byteutil" ) type ocb struct { @@ -153,7 +154,7 @@ func (o *ocb) crypt(instruction int, Y, nonce, adata, X []byte) []byte { truncatedNonce := make([]byte, len(nonce)) copy(truncatedNonce, nonce) truncatedNonce[len(truncatedNonce)-1] &= 192 - Ktop := make([]byte, blockSize) + var Ktop []byte if bytes.Equal(truncatedNonce, o.reusableKtop.noncePrefix) { Ktop = o.reusableKtop.Ktop } else { diff --git a/vendor/github.com/ProtonMail/go-crypto/openpgp/armor/armor.go b/vendor/github.com/ProtonMail/go-crypto/openpgp/armor/armor.go index d7af9141e3..e0a677f284 100644 --- a/vendor/github.com/ProtonMail/go-crypto/openpgp/armor/armor.go +++ b/vendor/github.com/ProtonMail/go-crypto/openpgp/armor/armor.go @@ -23,7 +23,7 @@ import ( // Headers // // base64-encoded Bytes -// '=' base64 encoded checksum +// '=' base64 encoded checksum (optional) not checked anymore // -----END Type----- // // where Headers is a possibly empty sequence of Key: Value lines. @@ -40,36 +40,15 @@ type Block struct { var ArmorCorrupt error = errors.StructuralError("armor invalid") -const crc24Init = 0xb704ce -const crc24Poly = 0x1864cfb -const crc24Mask = 0xffffff - -// crc24 calculates the OpenPGP checksum as specified in RFC 4880, section 6.1 -func crc24(crc uint32, d []byte) uint32 { - for _, b := range d { - crc ^= uint32(b) << 16 - for i := 0; i < 8; i++ { - crc <<= 1 - if crc&0x1000000 != 0 { - crc ^= crc24Poly - } - } - } - return crc -} - var armorStart = []byte("-----BEGIN ") var armorEnd = []byte("-----END ") var armorEndOfLine = []byte("-----") -// lineReader wraps a line based reader. It watches for the end of an armor -// block and records the expected CRC value. +// lineReader wraps a line based reader. It watches for the end of an armor block type lineReader struct { - in *bufio.Reader - buf []byte - eof bool - crc uint32 - crcSet bool + in *bufio.Reader + buf []byte + eof bool } func (l *lineReader) Read(p []byte) (n int, err error) { @@ -98,26 +77,9 @@ func (l *lineReader) Read(p []byte) (n int, err error) { if len(line) == 5 && line[0] == '=' { // This is the checksum line - var expectedBytes [3]byte - var m int - m, err = base64.StdEncoding.Decode(expectedBytes[0:], line[1:]) - if m != 3 || err != nil { - return - } - l.crc = uint32(expectedBytes[0])<<16 | - uint32(expectedBytes[1])<<8 | - uint32(expectedBytes[2]) - - line, _, err = l.in.ReadLine() - if err != nil && err != io.EOF { - return - } - if !bytes.HasPrefix(line, armorEnd) { - return 0, ArmorCorrupt - } + // Don't check the checksum l.eof = true - l.crcSet = true return 0, io.EOF } @@ -138,23 +100,14 @@ func (l *lineReader) Read(p []byte) (n int, err error) { return } -// openpgpReader passes Read calls to the underlying base64 decoder, but keeps -// a running CRC of the resulting data and checks the CRC against the value -// found by the lineReader at EOF. +// openpgpReader passes Read calls to the underlying base64 decoder. type openpgpReader struct { - lReader *lineReader - b64Reader io.Reader - currentCRC uint32 + lReader *lineReader + b64Reader io.Reader } func (r *openpgpReader) Read(p []byte) (n int, err error) { n, err = r.b64Reader.Read(p) - r.currentCRC = crc24(r.currentCRC, p[:n]) - - if err == io.EOF && r.lReader.crcSet && r.lReader.crc != uint32(r.currentCRC&crc24Mask) { - return 0, ArmorCorrupt - } - return } @@ -222,7 +175,6 @@ TryNextBlock: } p.lReader.in = r - p.oReader.currentCRC = crc24Init p.oReader.lReader = &p.lReader p.oReader.b64Reader = base64.NewDecoder(base64.StdEncoding, &p.lReader) p.Body = &p.oReader diff --git a/vendor/github.com/ProtonMail/go-crypto/openpgp/armor/encode.go b/vendor/github.com/ProtonMail/go-crypto/openpgp/armor/encode.go index 5b6e16c19d..112f98b835 100644 --- a/vendor/github.com/ProtonMail/go-crypto/openpgp/armor/encode.go +++ b/vendor/github.com/ProtonMail/go-crypto/openpgp/armor/encode.go @@ -14,6 +14,23 @@ var blockEnd = []byte("\n=") var newline = []byte("\n") var armorEndOfLineOut = []byte("-----\n") +const crc24Init = 0xb704ce +const crc24Poly = 0x1864cfb + +// crc24 calculates the OpenPGP checksum as specified in RFC 4880, section 6.1 +func crc24(crc uint32, d []byte) uint32 { + for _, b := range d { + crc ^= uint32(b) << 16 + for i := 0; i < 8; i++ { + crc <<= 1 + if crc&0x1000000 != 0 { + crc ^= crc24Poly + } + } + } + return crc +} + // writeSlices writes its arguments to the given Writer. func writeSlices(out io.Writer, slices ...[]byte) (err error) { for _, s := range slices { @@ -99,15 +116,18 @@ func (l *lineBreaker) Close() (err error) { // // encoding -> base64 encoder -> lineBreaker -> out type encoding struct { - out io.Writer - breaker *lineBreaker - b64 io.WriteCloser - crc uint32 - blockType []byte + out io.Writer + breaker *lineBreaker + b64 io.WriteCloser + crc uint32 + crcEnabled bool + blockType []byte } func (e *encoding) Write(data []byte) (n int, err error) { - e.crc = crc24(e.crc, data) + if e.crcEnabled { + e.crc = crc24(e.crc, data) + } return e.b64.Write(data) } @@ -118,20 +138,21 @@ func (e *encoding) Close() (err error) { } e.breaker.Close() - var checksumBytes [3]byte - checksumBytes[0] = byte(e.crc >> 16) - checksumBytes[1] = byte(e.crc >> 8) - checksumBytes[2] = byte(e.crc) + if e.crcEnabled { + var checksumBytes [3]byte + checksumBytes[0] = byte(e.crc >> 16) + checksumBytes[1] = byte(e.crc >> 8) + checksumBytes[2] = byte(e.crc) - var b64ChecksumBytes [4]byte - base64.StdEncoding.Encode(b64ChecksumBytes[:], checksumBytes[:]) + var b64ChecksumBytes [4]byte + base64.StdEncoding.Encode(b64ChecksumBytes[:], checksumBytes[:]) - return writeSlices(e.out, blockEnd, b64ChecksumBytes[:], newline, armorEnd, e.blockType, armorEndOfLine) + return writeSlices(e.out, blockEnd, b64ChecksumBytes[:], newline, armorEnd, e.blockType, armorEndOfLine) + } + return writeSlices(e.out, newline, armorEnd, e.blockType, armorEndOfLine) } -// Encode returns a WriteCloser which will encode the data written to it in -// OpenPGP armor. -func Encode(out io.Writer, blockType string, headers map[string]string) (w io.WriteCloser, err error) { +func encode(out io.Writer, blockType string, headers map[string]string, checksum bool) (w io.WriteCloser, err error) { bType := []byte(blockType) err = writeSlices(out, armorStart, bType, armorEndOfLineOut) if err != nil { @@ -151,11 +172,27 @@ func Encode(out io.Writer, blockType string, headers map[string]string) (w io.Wr } e := &encoding{ - out: out, - breaker: newLineBreaker(out, 64), - crc: crc24Init, - blockType: bType, + out: out, + breaker: newLineBreaker(out, 64), + blockType: bType, + crc: crc24Init, + crcEnabled: checksum, } e.b64 = base64.NewEncoder(base64.StdEncoding, e.breaker) return e, nil } + +// Encode returns a WriteCloser which will encode the data written to it in +// OpenPGP armor. +func Encode(out io.Writer, blockType string, headers map[string]string) (w io.WriteCloser, err error) { + return encode(out, blockType, headers, true) +} + +// EncodeWithChecksumOption returns a WriteCloser which will encode the data written to it in +// OpenPGP armor and provides the option to include a checksum. +// When forming ASCII Armor, the CRC24 footer SHOULD NOT be generated, +// unless interoperability with implementations that require the CRC24 footer +// to be present is a concern. +func EncodeWithChecksumOption(out io.Writer, blockType string, headers map[string]string, doChecksum bool) (w io.WriteCloser, err error) { + return encode(out, blockType, headers, doChecksum) +} diff --git a/vendor/github.com/ProtonMail/go-crypto/openpgp/canonical_text.go b/vendor/github.com/ProtonMail/go-crypto/openpgp/canonical_text.go index a94f6150c4..5b40e1375d 100644 --- a/vendor/github.com/ProtonMail/go-crypto/openpgp/canonical_text.go +++ b/vendor/github.com/ProtonMail/go-crypto/openpgp/canonical_text.go @@ -30,8 +30,12 @@ func writeCanonical(cw io.Writer, buf []byte, s *int) (int, error) { if c == '\r' { *s = 1 } else if c == '\n' { - cw.Write(buf[start:i]) - cw.Write(newline) + if _, err := cw.Write(buf[start:i]); err != nil { + return 0, err + } + if _, err := cw.Write(newline); err != nil { + return 0, err + } start = i + 1 } case 1: @@ -39,7 +43,9 @@ func writeCanonical(cw io.Writer, buf []byte, s *int) (int, error) { } } - cw.Write(buf[start:]) + if _, err := cw.Write(buf[start:]); err != nil { + return 0, err + } return len(buf), nil } diff --git a/vendor/github.com/ProtonMail/go-crypto/openpgp/ecdh/ecdh.go b/vendor/github.com/ProtonMail/go-crypto/openpgp/ecdh/ecdh.go index c895bad6bb..db8fb163b6 100644 --- a/vendor/github.com/ProtonMail/go-crypto/openpgp/ecdh/ecdh.go +++ b/vendor/github.com/ProtonMail/go-crypto/openpgp/ecdh/ecdh.go @@ -163,13 +163,9 @@ func buildKey(pub *PublicKey, zb []byte, curveOID, fingerprint []byte, stripLead if _, err := param.Write([]byte("Anonymous Sender ")); err != nil { return nil, err } - // For v5 keys, the 20 leftmost octets of the fingerprint are used. - if _, err := param.Write(fingerprint[:20]); err != nil { + if _, err := param.Write(fingerprint[:]); err != nil { return nil, err } - if param.Len()-len(curveOID) != 45 { - return nil, errors.New("ecdh: malformed KDF Param") - } // MB = Hash ( 00 || 00 || 00 || 01 || ZB || Param ); h := pub.KDF.Hash.New() diff --git a/vendor/github.com/ProtonMail/go-crypto/openpgp/ed25519/ed25519.go b/vendor/github.com/ProtonMail/go-crypto/openpgp/ed25519/ed25519.go new file mode 100644 index 0000000000..6abdf7c446 --- /dev/null +++ b/vendor/github.com/ProtonMail/go-crypto/openpgp/ed25519/ed25519.go @@ -0,0 +1,115 @@ +// Package ed25519 implements the ed25519 signature algorithm for OpenPGP +// as defined in the Open PGP crypto refresh. +package ed25519 + +import ( + "crypto/subtle" + "io" + + "github.com/ProtonMail/go-crypto/openpgp/errors" + ed25519lib "github.com/cloudflare/circl/sign/ed25519" +) + +const ( + // PublicKeySize is the size, in bytes, of public keys in this package. + PublicKeySize = ed25519lib.PublicKeySize + // SeedSize is the size, in bytes, of private key seeds. + // The private key representation used by RFC 8032. + SeedSize = ed25519lib.SeedSize + // SignatureSize is the size, in bytes, of signatures generated and verified by this package. + SignatureSize = ed25519lib.SignatureSize +) + +type PublicKey struct { + // Point represents the elliptic curve point of the public key. + Point []byte +} + +type PrivateKey struct { + PublicKey + // Key the private key representation by RFC 8032, + // encoded as seed | pub key point. + Key []byte +} + +// NewPublicKey creates a new empty ed25519 public key. +func NewPublicKey() *PublicKey { + return &PublicKey{} +} + +// NewPrivateKey creates a new empty private key referencing the public key. +func NewPrivateKey(key PublicKey) *PrivateKey { + return &PrivateKey{ + PublicKey: key, + } +} + +// Seed returns the ed25519 private key secret seed. +// The private key representation by RFC 8032. +func (pk *PrivateKey) Seed() []byte { + return pk.Key[:SeedSize] +} + +// MarshalByteSecret returns the underlying 32 byte seed of the private key. +func (pk *PrivateKey) MarshalByteSecret() []byte { + return pk.Seed() +} + +// UnmarshalByteSecret computes the private key from the secret seed +// and stores it in the private key object. +func (sk *PrivateKey) UnmarshalByteSecret(seed []byte) error { + sk.Key = ed25519lib.NewKeyFromSeed(seed) + return nil +} + +// GenerateKey generates a fresh private key with the provided randomness source. +func GenerateKey(rand io.Reader) (*PrivateKey, error) { + publicKey, privateKey, err := ed25519lib.GenerateKey(rand) + if err != nil { + return nil, err + } + privateKeyOut := new(PrivateKey) + privateKeyOut.PublicKey.Point = publicKey[:] + privateKeyOut.Key = privateKey[:] + return privateKeyOut, nil +} + +// Sign signs a message with the ed25519 algorithm. +// priv MUST be a valid key! Check this with Validate() before use. +func Sign(priv *PrivateKey, message []byte) ([]byte, error) { + return ed25519lib.Sign(priv.Key, message), nil +} + +// Verify verifies an ed25519 signature. +func Verify(pub *PublicKey, message []byte, signature []byte) bool { + return ed25519lib.Verify(pub.Point, message, signature) +} + +// Validate checks if the ed25519 private key is valid. +func Validate(priv *PrivateKey) error { + expectedPrivateKey := ed25519lib.NewKeyFromSeed(priv.Seed()) + if subtle.ConstantTimeCompare(priv.Key, expectedPrivateKey) == 0 { + return errors.KeyInvalidError("ed25519: invalid ed25519 secret") + } + if subtle.ConstantTimeCompare(priv.PublicKey.Point, expectedPrivateKey[SeedSize:]) == 0 { + return errors.KeyInvalidError("ed25519: invalid ed25519 public key") + } + return nil +} + +// ENCODING/DECODING signature: + +// WriteSignature encodes and writes an ed25519 signature to writer. +func WriteSignature(writer io.Writer, signature []byte) error { + _, err := writer.Write(signature) + return err +} + +// ReadSignature decodes an ed25519 signature from a reader. +func ReadSignature(reader io.Reader) ([]byte, error) { + signature := make([]byte, SignatureSize) + if _, err := io.ReadFull(reader, signature); err != nil { + return nil, err + } + return signature, nil +} diff --git a/vendor/github.com/ProtonMail/go-crypto/openpgp/ed448/ed448.go b/vendor/github.com/ProtonMail/go-crypto/openpgp/ed448/ed448.go new file mode 100644 index 0000000000..b11fb4fb17 --- /dev/null +++ b/vendor/github.com/ProtonMail/go-crypto/openpgp/ed448/ed448.go @@ -0,0 +1,119 @@ +// Package ed448 implements the ed448 signature algorithm for OpenPGP +// as defined in the Open PGP crypto refresh. +package ed448 + +import ( + "crypto/subtle" + "io" + + "github.com/ProtonMail/go-crypto/openpgp/errors" + ed448lib "github.com/cloudflare/circl/sign/ed448" +) + +const ( + // PublicKeySize is the size, in bytes, of public keys in this package. + PublicKeySize = ed448lib.PublicKeySize + // SeedSize is the size, in bytes, of private key seeds. + // The private key representation used by RFC 8032. + SeedSize = ed448lib.SeedSize + // SignatureSize is the size, in bytes, of signatures generated and verified by this package. + SignatureSize = ed448lib.SignatureSize +) + +type PublicKey struct { + // Point represents the elliptic curve point of the public key. + Point []byte +} + +type PrivateKey struct { + PublicKey + // Key the private key representation by RFC 8032, + // encoded as seed | public key point. + Key []byte +} + +// NewPublicKey creates a new empty ed448 public key. +func NewPublicKey() *PublicKey { + return &PublicKey{} +} + +// NewPrivateKey creates a new empty private key referencing the public key. +func NewPrivateKey(key PublicKey) *PrivateKey { + return &PrivateKey{ + PublicKey: key, + } +} + +// Seed returns the ed448 private key secret seed. +// The private key representation by RFC 8032. +func (pk *PrivateKey) Seed() []byte { + return pk.Key[:SeedSize] +} + +// MarshalByteSecret returns the underlying seed of the private key. +func (pk *PrivateKey) MarshalByteSecret() []byte { + return pk.Seed() +} + +// UnmarshalByteSecret computes the private key from the secret seed +// and stores it in the private key object. +func (sk *PrivateKey) UnmarshalByteSecret(seed []byte) error { + sk.Key = ed448lib.NewKeyFromSeed(seed) + return nil +} + +// GenerateKey generates a fresh private key with the provided randomness source. +func GenerateKey(rand io.Reader) (*PrivateKey, error) { + publicKey, privateKey, err := ed448lib.GenerateKey(rand) + if err != nil { + return nil, err + } + privateKeyOut := new(PrivateKey) + privateKeyOut.PublicKey.Point = publicKey[:] + privateKeyOut.Key = privateKey[:] + return privateKeyOut, nil +} + +// Sign signs a message with the ed448 algorithm. +// priv MUST be a valid key! Check this with Validate() before use. +func Sign(priv *PrivateKey, message []byte) ([]byte, error) { + // Ed448 is used with the empty string as a context string. + // See https://datatracker.ietf.org/doc/html/draft-ietf-openpgp-crypto-refresh-08#section-13.7 + return ed448lib.Sign(priv.Key, message, ""), nil +} + +// Verify verifies a ed448 signature +func Verify(pub *PublicKey, message []byte, signature []byte) bool { + // Ed448 is used with the empty string as a context string. + // See https://datatracker.ietf.org/doc/html/draft-ietf-openpgp-crypto-refresh-08#section-13.7 + return ed448lib.Verify(pub.Point, message, signature, "") +} + +// Validate checks if the ed448 private key is valid +func Validate(priv *PrivateKey) error { + expectedPrivateKey := ed448lib.NewKeyFromSeed(priv.Seed()) + if subtle.ConstantTimeCompare(priv.Key, expectedPrivateKey) == 0 { + return errors.KeyInvalidError("ed448: invalid ed448 secret") + } + if subtle.ConstantTimeCompare(priv.PublicKey.Point, expectedPrivateKey[SeedSize:]) == 0 { + return errors.KeyInvalidError("ed448: invalid ed448 public key") + } + return nil +} + +// ENCODING/DECODING signature: + +// WriteSignature encodes and writes an ed448 signature to writer. +func WriteSignature(writer io.Writer, signature []byte) error { + _, err := writer.Write(signature) + return err +} + +// ReadSignature decodes an ed448 signature from a reader. +func ReadSignature(reader io.Reader) ([]byte, error) { + signature := make([]byte, SignatureSize) + if _, err := io.ReadFull(reader, signature); err != nil { + return nil, err + } + return signature, nil +} diff --git a/vendor/github.com/ProtonMail/go-crypto/openpgp/errors/errors.go b/vendor/github.com/ProtonMail/go-crypto/openpgp/errors/errors.go index 17e2bcfed2..0eb3937b39 100644 --- a/vendor/github.com/ProtonMail/go-crypto/openpgp/errors/errors.go +++ b/vendor/github.com/ProtonMail/go-crypto/openpgp/errors/errors.go @@ -9,6 +9,18 @@ import ( "strconv" ) +var ( + // ErrDecryptSessionKeyParsing is a generic error message for parsing errors in decrypted data + // to reduce the risk of oracle attacks. + ErrDecryptSessionKeyParsing = DecryptWithSessionKeyError("parsing error") + // ErrAEADTagVerification is returned if one of the tag verifications in SEIPDv2 fails + ErrAEADTagVerification error = DecryptWithSessionKeyError("AEAD tag verification failed") + // ErrMDCHashMismatch + ErrMDCHashMismatch error = SignatureError("MDC hash mismatch") + // ErrMDCMissing + ErrMDCMissing error = SignatureError("MDC packet not found") +) + // A StructuralError is returned when OpenPGP data is found to be syntactically // invalid. type StructuralError string @@ -17,6 +29,34 @@ func (s StructuralError) Error() string { return "openpgp: invalid data: " + string(s) } +// A DecryptWithSessionKeyError is returned when a failure occurs when reading from symmetrically decrypted data or +// an authentication tag verification fails. +// Such an error indicates that the supplied session key is likely wrong or the data got corrupted. +type DecryptWithSessionKeyError string + +func (s DecryptWithSessionKeyError) Error() string { + return "openpgp: decryption with session key failed: " + string(s) +} + +// HandleSensitiveParsingError handles parsing errors when reading data from potentially decrypted data. +// The function makes parsing errors generic to reduce the risk of oracle attacks in SEIPDv1. +func HandleSensitiveParsingError(err error, decrypted bool) error { + if !decrypted { + // Data was not encrypted so we return the inner error. + return err + } + // The data is read from a stream that decrypts using a session key; + // therefore, we need to handle parsing errors appropriately. + // This is essential to mitigate the risk of oracle attacks. + if decError, ok := err.(*DecryptWithSessionKeyError); ok { + return decError + } + if decError, ok := err.(DecryptWithSessionKeyError); ok { + return decError + } + return ErrDecryptSessionKeyParsing +} + // UnsupportedError indicates that, although the OpenPGP data is valid, it // makes use of currently unimplemented features. type UnsupportedError string @@ -41,9 +81,6 @@ func (b SignatureError) Error() string { return "openpgp: invalid signature: " + string(b) } -var ErrMDCHashMismatch error = SignatureError("MDC hash mismatch") -var ErrMDCMissing error = SignatureError("MDC packet not found") - type signatureExpiredError int func (se signatureExpiredError) Error() string { @@ -58,6 +95,14 @@ func (ke keyExpiredError) Error() string { return "openpgp: key expired" } +var ErrSignatureOlderThanKey error = signatureOlderThanKeyError(0) + +type signatureOlderThanKeyError int + +func (ske signatureOlderThanKeyError) Error() string { + return "openpgp: signature is older than the key" +} + var ErrKeyExpired error = keyExpiredError(0) type keyIncorrectError int @@ -92,12 +137,24 @@ func (keyRevokedError) Error() string { var ErrKeyRevoked error = keyRevokedError(0) +type WeakAlgorithmError string + +func (e WeakAlgorithmError) Error() string { + return "openpgp: weak algorithms are rejected: " + string(e) +} + type UnknownPacketTypeError uint8 func (upte UnknownPacketTypeError) Error() string { return "openpgp: unknown packet type: " + strconv.Itoa(int(upte)) } +type CriticalUnknownPacketTypeError uint8 + +func (upte CriticalUnknownPacketTypeError) Error() string { + return "openpgp: unknown critical packet type: " + strconv.Itoa(int(upte)) +} + // AEADError indicates that there is a problem when initializing or using a // AEAD instance, configuration struct, nonces or index values. type AEADError string @@ -114,3 +171,10 @@ type ErrDummyPrivateKey string func (dke ErrDummyPrivateKey) Error() string { return "openpgp: s2k GNU dummy key: " + string(dke) } + +// ErrMalformedMessage results when the packet sequence is incorrect +type ErrMalformedMessage string + +func (dke ErrMalformedMessage) Error() string { + return "openpgp: malformed message " + string(dke) +} diff --git a/vendor/github.com/ProtonMail/go-crypto/openpgp/internal/algorithm/cipher.go b/vendor/github.com/ProtonMail/go-crypto/openpgp/internal/algorithm/cipher.go index 5760cff80e..c76a75bcda 100644 --- a/vendor/github.com/ProtonMail/go-crypto/openpgp/internal/algorithm/cipher.go +++ b/vendor/github.com/ProtonMail/go-crypto/openpgp/internal/algorithm/cipher.go @@ -51,24 +51,14 @@ func (sk CipherFunction) Id() uint8 { return uint8(sk) } -var keySizeByID = map[uint8]int{ - TripleDES.Id(): 24, - CAST5.Id(): cast5.KeySize, - AES128.Id(): 16, - AES192.Id(): 24, - AES256.Id(): 32, -} - // KeySize returns the key size, in bytes, of cipher. func (cipher CipherFunction) KeySize() int { switch cipher { - case TripleDES: - return 24 case CAST5: return cast5.KeySize case AES128: return 16 - case AES192: + case AES192, TripleDES: return 24 case AES256: return 32 diff --git a/vendor/github.com/ProtonMail/go-crypto/openpgp/internal/ecc/curve_info.go b/vendor/github.com/ProtonMail/go-crypto/openpgp/internal/ecc/curve_info.go index 35751034dd..0da2d0d852 100644 --- a/vendor/github.com/ProtonMail/go-crypto/openpgp/internal/ecc/curve_info.go +++ b/vendor/github.com/ProtonMail/go-crypto/openpgp/internal/ecc/curve_info.go @@ -4,11 +4,14 @@ package ecc import ( "bytes" "crypto/elliptic" + "github.com/ProtonMail/go-crypto/bitcurves" "github.com/ProtonMail/go-crypto/brainpool" "github.com/ProtonMail/go-crypto/openpgp/internal/encoding" ) +const Curve25519GenName = "Curve25519" + type CurveInfo struct { GenName string Oid *encoding.OID @@ -42,19 +45,19 @@ var Curves = []CurveInfo{ }, { // Curve25519 - GenName: "Curve25519", + GenName: Curve25519GenName, Oid: encoding.NewOID([]byte{0x2B, 0x06, 0x01, 0x04, 0x01, 0x97, 0x55, 0x01, 0x05, 0x01}), Curve: NewCurve25519(), }, { - // X448 + // x448 GenName: "Curve448", Oid: encoding.NewOID([]byte{0x2B, 0x65, 0x6F}), Curve: NewX448(), }, { // Ed25519 - GenName: "Curve25519", + GenName: Curve25519GenName, Oid: encoding.NewOID([]byte{0x2B, 0x06, 0x01, 0x04, 0x01, 0xDA, 0x47, 0x0F, 0x01}), Curve: NewEd25519(), }, diff --git a/vendor/github.com/ProtonMail/go-crypto/openpgp/internal/ecc/ed25519.go b/vendor/github.com/ProtonMail/go-crypto/openpgp/internal/ecc/ed25519.go index 54a08a8a38..5a4c3a8596 100644 --- a/vendor/github.com/ProtonMail/go-crypto/openpgp/internal/ecc/ed25519.go +++ b/vendor/github.com/ProtonMail/go-crypto/openpgp/internal/ecc/ed25519.go @@ -2,6 +2,7 @@ package ecc import ( + "bytes" "crypto/subtle" "io" @@ -90,7 +91,14 @@ func (c *ed25519) GenerateEdDSA(rand io.Reader) (pub, priv []byte, err error) { } func getEd25519Sk(publicKey, privateKey []byte) ed25519lib.PrivateKey { - return append(privateKey, publicKey...) + privateKeyCap, privateKeyLen, publicKeyLen := cap(privateKey), len(privateKey), len(publicKey) + + if privateKeyCap >= privateKeyLen+publicKeyLen && + bytes.Equal(privateKey[privateKeyLen:privateKeyLen+publicKeyLen], publicKey) { + return privateKey[:privateKeyLen+publicKeyLen] + } + + return append(privateKey[:privateKeyLen:privateKeyLen], publicKey...) } func (c *ed25519) Sign(publicKey, privateKey, message []byte) (sig []byte, err error) { diff --git a/vendor/github.com/ProtonMail/go-crypto/openpgp/internal/ecc/ed448.go b/vendor/github.com/ProtonMail/go-crypto/openpgp/internal/ecc/ed448.go index 18cd80434b..b6edda7480 100644 --- a/vendor/github.com/ProtonMail/go-crypto/openpgp/internal/ecc/ed448.go +++ b/vendor/github.com/ProtonMail/go-crypto/openpgp/internal/ecc/ed448.go @@ -2,6 +2,7 @@ package ecc import ( + "bytes" "crypto/subtle" "io" @@ -84,7 +85,14 @@ func (c *ed448) GenerateEdDSA(rand io.Reader) (pub, priv []byte, err error) { } func getEd448Sk(publicKey, privateKey []byte) ed448lib.PrivateKey { - return append(privateKey, publicKey...) + privateKeyCap, privateKeyLen, publicKeyLen := cap(privateKey), len(privateKey), len(publicKey) + + if privateKeyCap >= privateKeyLen+publicKeyLen && + bytes.Equal(privateKey[privateKeyLen:privateKeyLen+publicKeyLen], publicKey) { + return privateKey[:privateKeyLen+publicKeyLen] + } + + return append(privateKey[:privateKeyLen:privateKeyLen], publicKey...) } func (c *ed448) Sign(publicKey, privateKey, message []byte) (sig []byte, err error) { diff --git a/vendor/github.com/ProtonMail/go-crypto/openpgp/key_generation.go b/vendor/github.com/ProtonMail/go-crypto/openpgp/key_generation.go index 0e71934cd9..77213f66be 100644 --- a/vendor/github.com/ProtonMail/go-crypto/openpgp/key_generation.go +++ b/vendor/github.com/ProtonMail/go-crypto/openpgp/key_generation.go @@ -15,11 +15,15 @@ import ( "github.com/ProtonMail/go-crypto/openpgp/ecdh" "github.com/ProtonMail/go-crypto/openpgp/ecdsa" + "github.com/ProtonMail/go-crypto/openpgp/ed25519" + "github.com/ProtonMail/go-crypto/openpgp/ed448" "github.com/ProtonMail/go-crypto/openpgp/eddsa" "github.com/ProtonMail/go-crypto/openpgp/errors" "github.com/ProtonMail/go-crypto/openpgp/internal/algorithm" "github.com/ProtonMail/go-crypto/openpgp/internal/ecc" "github.com/ProtonMail/go-crypto/openpgp/packet" + "github.com/ProtonMail/go-crypto/openpgp/x25519" + "github.com/ProtonMail/go-crypto/openpgp/x448" ) // NewEntity returns an Entity that contains a fresh RSA/RSA keypair with a @@ -36,8 +40,10 @@ func NewEntity(name, comment, email string, config *packet.Config) (*Entity, err return nil, err } primary := packet.NewSignerPrivateKey(creationTime, primaryPrivRaw) - if config != nil && config.V5Keys { - primary.UpgradeToV5() + if config.V6() { + if err := primary.UpgradeToV6(); err != nil { + return nil, err + } } e := &Entity{ @@ -45,9 +51,25 @@ func NewEntity(name, comment, email string, config *packet.Config) (*Entity, err PrivateKey: primary, Identities: make(map[string]*Identity), Subkeys: []Subkey{}, + Signatures: []*packet.Signature{}, + } + + if config.V6() { + // In v6 keys algorithm preferences should be stored in direct key signatures + selfSignature := createSignaturePacket(&primary.PublicKey, packet.SigTypeDirectSignature, config) + err = writeKeyProperties(selfSignature, creationTime, keyLifetimeSecs, config) + if err != nil { + return nil, err + } + err = selfSignature.SignDirectKeyBinding(&primary.PublicKey, primary, config) + if err != nil { + return nil, err + } + e.Signatures = append(e.Signatures, selfSignature) + e.SelfSignature = selfSignature } - err = e.addUserId(name, comment, email, config, creationTime, keyLifetimeSecs) + err = e.addUserId(name, comment, email, config, creationTime, keyLifetimeSecs, !config.V6()) if err != nil { return nil, err } @@ -65,32 +87,19 @@ func NewEntity(name, comment, email string, config *packet.Config) (*Entity, err func (t *Entity) AddUserId(name, comment, email string, config *packet.Config) error { creationTime := config.Now() keyLifetimeSecs := config.KeyLifetime() - return t.addUserId(name, comment, email, config, creationTime, keyLifetimeSecs) + return t.addUserId(name, comment, email, config, creationTime, keyLifetimeSecs, !config.V6()) } -func (t *Entity) addUserId(name, comment, email string, config *packet.Config, creationTime time.Time, keyLifetimeSecs uint32) error { - uid := packet.NewUserId(name, comment, email) - if uid == nil { - return errors.InvalidArgumentError("user id field contained invalid characters") - } - - if _, ok := t.Identities[uid.Id]; ok { - return errors.InvalidArgumentError("user id exist") - } - - primary := t.PrivateKey - - isPrimaryId := len(t.Identities) == 0 +func writeKeyProperties(selfSignature *packet.Signature, creationTime time.Time, keyLifetimeSecs uint32, config *packet.Config) error { + advertiseAead := config.AEAD() != nil - selfSignature := createSignaturePacket(&primary.PublicKey, packet.SigTypePositiveCert, config) selfSignature.CreationTime = creationTime selfSignature.KeyLifetimeSecs = &keyLifetimeSecs - selfSignature.IsPrimaryId = &isPrimaryId selfSignature.FlagsValid = true selfSignature.FlagSign = true selfSignature.FlagCertify = true selfSignature.SEIPDv1 = true // true by default, see 5.8 vs. 5.14 - selfSignature.SEIPDv2 = config.AEAD() != nil + selfSignature.SEIPDv2 = advertiseAead // Set the PreferredHash for the SelfSignature from the packet.Config. // If it is not the must-implement algorithm from rfc4880bis, append that. @@ -119,18 +128,44 @@ func (t *Entity) addUserId(name, comment, email string, config *packet.Config, c selfSignature.PreferredCompression = append(selfSignature.PreferredCompression, uint8(config.Compression())) } - // And for DefaultMode. - modes := []uint8{uint8(config.AEAD().Mode())} - if config.AEAD().Mode() != packet.AEADModeOCB { - modes = append(modes, uint8(packet.AEADModeOCB)) + if advertiseAead { + // Get the preferred AEAD mode from the packet.Config. + // If it is not the must-implement algorithm from rfc9580, append that. + modes := []uint8{uint8(config.AEAD().Mode())} + if config.AEAD().Mode() != packet.AEADModeOCB { + modes = append(modes, uint8(packet.AEADModeOCB)) + } + + // For preferred (AES256, GCM), we'll generate (AES256, GCM), (AES256, OCB), (AES128, GCM), (AES128, OCB) + for _, cipher := range selfSignature.PreferredSymmetric { + for _, mode := range modes { + selfSignature.PreferredCipherSuites = append(selfSignature.PreferredCipherSuites, [2]uint8{cipher, mode}) + } + } + } + return nil +} + +func (t *Entity) addUserId(name, comment, email string, config *packet.Config, creationTime time.Time, keyLifetimeSecs uint32, writeProperties bool) error { + uid := packet.NewUserId(name, comment, email) + if uid == nil { + return errors.InvalidArgumentError("user id field contained invalid characters") + } + + if _, ok := t.Identities[uid.Id]; ok { + return errors.InvalidArgumentError("user id exist") } - // For preferred (AES256, GCM), we'll generate (AES256, GCM), (AES256, OCB), (AES128, GCM), (AES128, OCB) - for _, cipher := range selfSignature.PreferredSymmetric { - for _, mode := range modes { - selfSignature.PreferredCipherSuites = append(selfSignature.PreferredCipherSuites, [2]uint8{cipher, mode}) + primary := t.PrivateKey + isPrimaryId := len(t.Identities) == 0 + selfSignature := createSignaturePacket(&primary.PublicKey, packet.SigTypePositiveCert, config) + if writeProperties { + err := writeKeyProperties(selfSignature, creationTime, keyLifetimeSecs, config) + if err != nil { + return err } } + selfSignature.IsPrimaryId = &isPrimaryId // User ID binding signature err := selfSignature.SignUserId(uid.Id, &primary.PublicKey, primary, config) @@ -158,8 +193,10 @@ func (e *Entity) AddSigningSubkey(config *packet.Config) error { } sub := packet.NewSignerPrivateKey(creationTime, subPrivRaw) sub.IsSubkey = true - if config != nil && config.V5Keys { - sub.UpgradeToV5() + if config.V6() { + if err := sub.UpgradeToV6(); err != nil { + return err + } } subkey := Subkey{ @@ -203,8 +240,10 @@ func (e *Entity) addEncryptionSubkey(config *packet.Config, creationTime time.Ti } sub := packet.NewDecrypterPrivateKey(creationTime, subPrivRaw) sub.IsSubkey = true - if config != nil && config.V5Keys { - sub.UpgradeToV5() + if config.V6() { + if err := sub.UpgradeToV6(); err != nil { + return err + } } subkey := Subkey{ @@ -242,6 +281,11 @@ func newSigner(config *packet.Config) (signer interface{}, err error) { } return rsa.GenerateKey(config.Random(), bits) case packet.PubKeyAlgoEdDSA: + if config.V6() { + // Implementations MUST NOT accept or generate v6 key material + // using the deprecated OIDs. + return nil, errors.InvalidArgumentError("EdDSALegacy cannot be used for v6 keys") + } curve := ecc.FindEdDSAByGenName(string(config.CurveName())) if curve == nil { return nil, errors.InvalidArgumentError("unsupported curve") @@ -263,6 +307,18 @@ func newSigner(config *packet.Config) (signer interface{}, err error) { return nil, err } return priv, nil + case packet.PubKeyAlgoEd25519: + priv, err := ed25519.GenerateKey(config.Random()) + if err != nil { + return nil, err + } + return priv, nil + case packet.PubKeyAlgoEd448: + priv, err := ed448.GenerateKey(config.Random()) + if err != nil { + return nil, err + } + return priv, nil default: return nil, errors.InvalidArgumentError("unsupported public key algorithm") } @@ -285,6 +341,13 @@ func newDecrypter(config *packet.Config) (decrypter interface{}, err error) { case packet.PubKeyAlgoEdDSA, packet.PubKeyAlgoECDSA: fallthrough // When passing EdDSA or ECDSA, we generate an ECDH subkey case packet.PubKeyAlgoECDH: + if config.V6() && + (config.CurveName() == packet.Curve25519 || + config.CurveName() == packet.Curve448) { + // Implementations MUST NOT accept or generate v6 key material + // using the deprecated OIDs. + return nil, errors.InvalidArgumentError("ECDH with Curve25519/448 legacy cannot be used for v6 keys") + } var kdf = ecdh.KDF{ Hash: algorithm.SHA512, Cipher: algorithm.AES256, @@ -294,6 +357,10 @@ func newDecrypter(config *packet.Config) (decrypter interface{}, err error) { return nil, errors.InvalidArgumentError("unsupported curve") } return ecdh.GenerateKey(config.Random(), curve, kdf) + case packet.PubKeyAlgoEd25519, packet.PubKeyAlgoX25519: // When passing Ed25519, we generate an x25519 subkey + return x25519.GenerateKey(config.Random()) + case packet.PubKeyAlgoEd448, packet.PubKeyAlgoX448: // When passing Ed448, we generate an x448 subkey + return x448.GenerateKey(config.Random()) default: return nil, errors.InvalidArgumentError("unsupported public key algorithm") } @@ -302,7 +369,7 @@ func newDecrypter(config *packet.Config) (decrypter interface{}, err error) { var bigOne = big.NewInt(1) // generateRSAKeyWithPrimes generates a multi-prime RSA keypair of the -// given bit size, using the given random source and prepopulated primes. +// given bit size, using the given random source and pre-populated primes. func generateRSAKeyWithPrimes(random io.Reader, nprimes int, bits int, prepopulatedPrimes []*big.Int) (*rsa.PrivateKey, error) { priv := new(rsa.PrivateKey) priv.E = 65537 diff --git a/vendor/github.com/ProtonMail/go-crypto/openpgp/keys.go b/vendor/github.com/ProtonMail/go-crypto/openpgp/keys.go index 2d7b0cf373..a071353e2e 100644 --- a/vendor/github.com/ProtonMail/go-crypto/openpgp/keys.go +++ b/vendor/github.com/ProtonMail/go-crypto/openpgp/keys.go @@ -6,6 +6,7 @@ package openpgp import ( goerrors "errors" + "fmt" "io" "time" @@ -24,11 +25,13 @@ var PrivateKeyType = "PGP PRIVATE KEY BLOCK" // (which must be a signing key), one or more identities claimed by that key, // and zero or more subkeys, which may be encryption keys. type Entity struct { - PrimaryKey *packet.PublicKey - PrivateKey *packet.PrivateKey - Identities map[string]*Identity // indexed by Identity.Name - Revocations []*packet.Signature - Subkeys []Subkey + PrimaryKey *packet.PublicKey + PrivateKey *packet.PrivateKey + Identities map[string]*Identity // indexed by Identity.Name + Revocations []*packet.Signature + Subkeys []Subkey + SelfSignature *packet.Signature // Direct-key self signature of the PrimaryKey (contains primary key properties in v6) + Signatures []*packet.Signature // all (potentially unverified) self-signatures, revocations, and third-party signatures } // An Identity represents an identity claimed by an Entity and zero or more @@ -120,12 +123,12 @@ func shouldPreferIdentity(existingId, potentialNewId *Identity) bool { // given Entity. func (e *Entity) EncryptionKey(now time.Time) (Key, bool) { // Fail to find any encryption key if the... - i := e.PrimaryIdentity() - if e.PrimaryKey.KeyExpired(i.SelfSignature, now) || // primary key has expired - i.SelfSignature == nil || // user ID has no self-signature - i.SelfSignature.SigExpired(now) || // user ID self-signature has expired + primarySelfSignature, primaryIdentity := e.PrimarySelfSignature() + if primarySelfSignature == nil || // no self-signature found + e.PrimaryKey.KeyExpired(primarySelfSignature, now) || // primary key has expired e.Revoked(now) || // primary key has been revoked - i.Revoked(now) { // user ID has been revoked + primarySelfSignature.SigExpired(now) || // user ID or or direct self-signature has expired + (primaryIdentity != nil && primaryIdentity.Revoked(now)) { // user ID has been revoked (for v4 keys) return Key{}, false } @@ -152,9 +155,9 @@ func (e *Entity) EncryptionKey(now time.Time) (Key, bool) { // If we don't have any subkeys for encryption and the primary key // is marked as OK to encrypt with, then we can use it. - if i.SelfSignature.FlagsValid && i.SelfSignature.FlagEncryptCommunications && + if primarySelfSignature.FlagsValid && primarySelfSignature.FlagEncryptCommunications && e.PrimaryKey.PubKeyAlgo.CanEncrypt() { - return Key{e, e.PrimaryKey, e.PrivateKey, i.SelfSignature, e.Revocations}, true + return Key{e, e.PrimaryKey, e.PrivateKey, primarySelfSignature, e.Revocations}, true } return Key{}, false @@ -186,12 +189,12 @@ func (e *Entity) SigningKeyById(now time.Time, id uint64) (Key, bool) { func (e *Entity) signingKeyByIdUsage(now time.Time, id uint64, flags int) (Key, bool) { // Fail to find any signing key if the... - i := e.PrimaryIdentity() - if e.PrimaryKey.KeyExpired(i.SelfSignature, now) || // primary key has expired - i.SelfSignature == nil || // user ID has no self-signature - i.SelfSignature.SigExpired(now) || // user ID self-signature has expired + primarySelfSignature, primaryIdentity := e.PrimarySelfSignature() + if primarySelfSignature == nil || // no self-signature found + e.PrimaryKey.KeyExpired(primarySelfSignature, now) || // primary key has expired e.Revoked(now) || // primary key has been revoked - i.Revoked(now) { // user ID has been revoked + primarySelfSignature.SigExpired(now) || // user ID or direct self-signature has expired + (primaryIdentity != nil && primaryIdentity.Revoked(now)) { // user ID has been revoked (for v4 keys) return Key{}, false } @@ -220,12 +223,12 @@ func (e *Entity) signingKeyByIdUsage(now time.Time, id uint64, flags int) (Key, // If we don't have any subkeys for signing and the primary key // is marked as OK to sign with, then we can use it. - if i.SelfSignature.FlagsValid && - (flags&packet.KeyFlagCertify == 0 || i.SelfSignature.FlagCertify) && - (flags&packet.KeyFlagSign == 0 || i.SelfSignature.FlagSign) && + if primarySelfSignature.FlagsValid && + (flags&packet.KeyFlagCertify == 0 || primarySelfSignature.FlagCertify) && + (flags&packet.KeyFlagSign == 0 || primarySelfSignature.FlagSign) && e.PrimaryKey.PubKeyAlgo.CanSign() && (id == 0 || e.PrimaryKey.KeyId == id) { - return Key{e, e.PrimaryKey, e.PrivateKey, i.SelfSignature, e.Revocations}, true + return Key{e, e.PrimaryKey, e.PrivateKey, primarySelfSignature, e.Revocations}, true } // No keys with a valid Signing Flag or no keys matched the id passed in @@ -259,7 +262,7 @@ func (e *Entity) EncryptPrivateKeys(passphrase []byte, config *packet.Config) er var keysToEncrypt []*packet.PrivateKey // Add entity private key to encrypt. if e.PrivateKey != nil && !e.PrivateKey.Dummy() && !e.PrivateKey.Encrypted { - keysToEncrypt = append(keysToEncrypt, e.PrivateKey) + keysToEncrypt = append(keysToEncrypt, e.PrivateKey) } // Add subkeys to encrypt. @@ -271,7 +274,7 @@ func (e *Entity) EncryptPrivateKeys(passphrase []byte, config *packet.Config) er return packet.EncryptPrivateKeys(keysToEncrypt, passphrase, config) } -// DecryptPrivateKeys decrypts all encrypted keys in the entitiy with the given passphrase. +// DecryptPrivateKeys decrypts all encrypted keys in the entity with the given passphrase. // Avoids recomputation of similar s2k key derivations. Public keys and dummy keys are ignored, // and don't cause an error to be returned. func (e *Entity) DecryptPrivateKeys(passphrase []byte) error { @@ -284,7 +287,7 @@ func (e *Entity) DecryptPrivateKeys(passphrase []byte) error { // Add subkeys to decrypt. for _, sub := range e.Subkeys { if sub.PrivateKey != nil && !sub.PrivateKey.Dummy() && sub.PrivateKey.Encrypted { - keysToDecrypt = append(keysToDecrypt, sub.PrivateKey) + keysToDecrypt = append(keysToDecrypt, sub.PrivateKey) } } return packet.DecryptPrivateKeys(keysToDecrypt, passphrase) @@ -318,8 +321,7 @@ type EntityList []*Entity func (el EntityList) KeysById(id uint64) (keys []Key) { for _, e := range el { if e.PrimaryKey.KeyId == id { - ident := e.PrimaryIdentity() - selfSig := ident.SelfSignature + selfSig, _ := e.PrimarySelfSignature() keys = append(keys, Key{e, e.PrimaryKey, e.PrivateKey, selfSig, e.Revocations}) } @@ -441,7 +443,6 @@ func readToNextPublicKey(packets *packet.Reader) (err error) { return } else if err != nil { if _, ok := err.(errors.UnsupportedError); ok { - err = nil continue } return @@ -479,6 +480,7 @@ func ReadEntity(packets *packet.Reader) (*Entity, error) { } var revocations []*packet.Signature + var directSignatures []*packet.Signature EachPacket: for { p, err := packets.Next() @@ -497,9 +499,7 @@ EachPacket: if pkt.SigType == packet.SigTypeKeyRevocation { revocations = append(revocations, pkt) } else if pkt.SigType == packet.SigTypeDirectSignature { - // TODO: RFC4880 5.2.1 permits signatures - // directly on keys (eg. to bind additional - // revocation keys). + directSignatures = append(directSignatures, pkt) } // Else, ignoring the signature as it does not follow anything // we would know to attach it to. @@ -522,12 +522,39 @@ EachPacket: return nil, err } default: - // we ignore unknown packets + // we ignore unknown packets. } } - if len(e.Identities) == 0 { - return nil, errors.StructuralError("entity without any identities") + if len(e.Identities) == 0 && e.PrimaryKey.Version < 6 { + return nil, errors.StructuralError(fmt.Sprintf("v%d entity without any identities", e.PrimaryKey.Version)) + } + + // An implementation MUST ensure that a valid direct-key signature is present before using a v6 key. + if e.PrimaryKey.Version == 6 { + if len(directSignatures) == 0 { + return nil, errors.StructuralError("v6 entity without a valid direct-key signature") + } + // Select main direct key signature. + var mainDirectKeySelfSignature *packet.Signature + for _, directSignature := range directSignatures { + if directSignature.SigType == packet.SigTypeDirectSignature && + directSignature.CheckKeyIdOrFingerprint(e.PrimaryKey) && + (mainDirectKeySelfSignature == nil || + directSignature.CreationTime.After(mainDirectKeySelfSignature.CreationTime)) { + mainDirectKeySelfSignature = directSignature + } + } + if mainDirectKeySelfSignature == nil { + return nil, errors.StructuralError("no valid direct-key self-signature for v6 primary key found") + } + // Check that the main self-signature is valid. + err = e.PrimaryKey.VerifyDirectKeySignature(mainDirectKeySelfSignature) + if err != nil { + return nil, errors.StructuralError("invalid direct-key self-signature for v6 primary key") + } + e.SelfSignature = mainDirectKeySelfSignature + e.Signatures = directSignatures } for _, revocation := range revocations { @@ -672,6 +699,12 @@ func (e *Entity) serializePrivate(w io.Writer, config *packet.Config, reSign boo return err } } + for _, directSignature := range e.Signatures { + err := directSignature.Serialize(w) + if err != nil { + return err + } + } for _, ident := range e.Identities { err = ident.UserId.Serialize(w) if err != nil { @@ -738,6 +771,12 @@ func (e *Entity) Serialize(w io.Writer) error { return err } } + for _, directSignature := range e.Signatures { + err := directSignature.Serialize(w) + if err != nil { + return err + } + } for _, ident := range e.Identities { err = ident.UserId.Serialize(w) if err != nil { @@ -840,3 +879,23 @@ func (e *Entity) RevokeSubkey(sk *Subkey, reason packet.ReasonForRevocation, rea sk.Revocations = append(sk.Revocations, revSig) return nil } + +func (e *Entity) primaryDirectSignature() *packet.Signature { + return e.SelfSignature +} + +// PrimarySelfSignature searches the entity for the self-signature that stores key preferences. +// For V4 keys, returns the self-signature of the primary identity, and the identity. +// For V6 keys, returns the latest valid direct-key self-signature, and no identity (nil). +// This self-signature is to be used to check the key expiration, +// algorithm preferences, and so on. +func (e *Entity) PrimarySelfSignature() (*packet.Signature, *Identity) { + if e.PrimaryKey.Version == 6 { + return e.primaryDirectSignature(), nil + } + primaryIdentity := e.PrimaryIdentity() + if primaryIdentity == nil { + return nil, nil + } + return primaryIdentity.SelfSignature, primaryIdentity +} diff --git a/vendor/github.com/ProtonMail/go-crypto/openpgp/packet/aead_crypter.go b/vendor/github.com/ProtonMail/go-crypto/openpgp/packet/aead_crypter.go index cee83bdc7a..2eecd062f5 100644 --- a/vendor/github.com/ProtonMail/go-crypto/openpgp/packet/aead_crypter.go +++ b/vendor/github.com/ProtonMail/go-crypto/openpgp/packet/aead_crypter.go @@ -88,17 +88,20 @@ func (ar *aeadDecrypter) Read(dst []byte) (n int, err error) { if errRead != nil && errRead != io.EOF { return 0, errRead } - decrypted, errChunk := ar.openChunk(cipherChunk) - if errChunk != nil { - return 0, errChunk - } - // Return decrypted bytes, buffering if necessary - if len(dst) < len(decrypted) { - n = copy(dst, decrypted[:len(dst)]) - ar.buffer.Write(decrypted[len(dst):]) - } else { - n = copy(dst, decrypted) + if len(cipherChunk) > 0 { + decrypted, errChunk := ar.openChunk(cipherChunk) + if errChunk != nil { + return 0, errChunk + } + + // Return decrypted bytes, buffering if necessary + if len(dst) < len(decrypted) { + n = copy(dst, decrypted[:len(dst)]) + ar.buffer.Write(decrypted[len(dst):]) + } else { + n = copy(dst, decrypted) + } } // Check final authentication tag @@ -116,6 +119,12 @@ func (ar *aeadDecrypter) Read(dst []byte) (n int, err error) { // checked in the last Read call. In the future, this function could be used to // wipe the reader and peeked, decrypted bytes, if necessary. func (ar *aeadDecrypter) Close() (err error) { + if !ar.eof { + errChunk := ar.validateFinalTag(ar.peekedBytes) + if errChunk != nil { + return errChunk + } + } return nil } @@ -138,7 +147,7 @@ func (ar *aeadDecrypter) openChunk(data []byte) ([]byte, error) { nonce := ar.computeNextNonce() plainChunk, err := ar.aead.Open(nil, nonce, chunk, adata) if err != nil { - return nil, err + return nil, errors.ErrAEADTagVerification } ar.bytesProcessed += len(plainChunk) if err = ar.aeadCrypter.incrementIndex(); err != nil { @@ -163,9 +172,8 @@ func (ar *aeadDecrypter) validateFinalTag(tag []byte) error { // ... and total number of encrypted octets adata = append(adata, amountBytes...) nonce := ar.computeNextNonce() - _, err := ar.aead.Open(nil, nonce, tag, adata) - if err != nil { - return err + if _, err := ar.aead.Open(nil, nonce, tag, adata); err != nil { + return errors.ErrAEADTagVerification } return nil } diff --git a/vendor/github.com/ProtonMail/go-crypto/openpgp/packet/compressed.go b/vendor/github.com/ProtonMail/go-crypto/openpgp/packet/compressed.go index 2f5cad71da..0bcb38caca 100644 --- a/vendor/github.com/ProtonMail/go-crypto/openpgp/packet/compressed.go +++ b/vendor/github.com/ProtonMail/go-crypto/openpgp/packet/compressed.go @@ -8,9 +8,10 @@ import ( "compress/bzip2" "compress/flate" "compress/zlib" - "github.com/ProtonMail/go-crypto/openpgp/errors" "io" "strconv" + + "github.com/ProtonMail/go-crypto/openpgp/errors" ) // Compressed represents a compressed OpenPGP packet. The decompressed contents @@ -39,6 +40,37 @@ type CompressionConfig struct { Level int } +// decompressionReader ensures that the whole compression packet is read. +type decompressionReader struct { + compressed io.Reader + decompressed io.ReadCloser + readAll bool +} + +func newDecompressionReader(r io.Reader, decompressor io.ReadCloser) *decompressionReader { + return &decompressionReader{ + compressed: r, + decompressed: decompressor, + } +} + +func (dr *decompressionReader) Read(data []byte) (n int, err error) { + if dr.readAll { + return 0, io.EOF + } + n, err = dr.decompressed.Read(data) + if err == io.EOF { + dr.readAll = true + // Close the decompressor. + if errDec := dr.decompressed.Close(); errDec != nil { + return n, errDec + } + // Consume all remaining data from the compressed packet. + consumeAll(dr.compressed) + } + return n, err +} + func (c *Compressed) parse(r io.Reader) error { var buf [1]byte _, err := readFull(r, buf[:]) @@ -50,11 +82,15 @@ func (c *Compressed) parse(r io.Reader) error { case 0: c.Body = r case 1: - c.Body = flate.NewReader(r) + c.Body = newDecompressionReader(r, flate.NewReader(r)) case 2: - c.Body, err = zlib.NewReader(r) + decompressor, err := zlib.NewReader(r) + if err != nil { + return err + } + c.Body = newDecompressionReader(r, decompressor) case 3: - c.Body = bzip2.NewReader(r) + c.Body = newDecompressionReader(r, io.NopCloser(bzip2.NewReader(r))) default: err = errors.UnsupportedError("unknown compression algorithm: " + strconv.Itoa(int(buf[0]))) } diff --git a/vendor/github.com/ProtonMail/go-crypto/openpgp/packet/config.go b/vendor/github.com/ProtonMail/go-crypto/openpgp/packet/config.go index 04994bec97..8bf8e6e51f 100644 --- a/vendor/github.com/ProtonMail/go-crypto/openpgp/packet/config.go +++ b/vendor/github.com/ProtonMail/go-crypto/openpgp/packet/config.go @@ -14,6 +14,34 @@ import ( "github.com/ProtonMail/go-crypto/openpgp/s2k" ) +var ( + defaultRejectPublicKeyAlgorithms = map[PublicKeyAlgorithm]bool{ + PubKeyAlgoElGamal: true, + PubKeyAlgoDSA: true, + } + defaultRejectHashAlgorithms = map[crypto.Hash]bool{ + crypto.MD5: true, + crypto.RIPEMD160: true, + } + defaultRejectMessageHashAlgorithms = map[crypto.Hash]bool{ + crypto.SHA1: true, + crypto.MD5: true, + crypto.RIPEMD160: true, + } + defaultRejectCurves = map[Curve]bool{ + CurveSecP256k1: true, + } +) + +// A global feature flag to indicate v5 support. +// Can be set via a build tag, e.g.: `go build -tags v5 ./...` +// If the build tag is missing config_v5.go will set it to true. +// +// Disables parsing of v5 keys and v5 signatures. +// These are non-standard entities, which in the crypto-refresh have been superseded +// by v6 keys, v6 signatures and SEIPDv2 encrypted data, respectively. +var V5Disabled = false + // Config collects a number of parameters along with sensible defaults. // A nil *Config is valid and results in all default values. type Config struct { @@ -73,9 +101,16 @@ type Config struct { // **Note: using this option may break compatibility with other OpenPGP // implementations, as well as future versions of this library.** AEADConfig *AEADConfig - // V5Keys configures version 5 key generation. If false, this package still - // supports version 5 keys, but produces version 4 keys. - V5Keys bool + // V6Keys configures version 6 key generation. If false, this package still + // supports version 6 keys, but produces version 4 keys. + V6Keys bool + // Minimum RSA key size allowed for key generation and message signing, verification and encryption. + MinRSABits uint16 + // Reject insecure algorithms, only works with v2 api + RejectPublicKeyAlgorithms map[PublicKeyAlgorithm]bool + RejectHashAlgorithms map[crypto.Hash]bool + RejectMessageHashAlgorithms map[crypto.Hash]bool + RejectCurves map[Curve]bool // "The validity period of the key. This is the number of seconds after // the key creation time that the key expires. If this is not present // or has a value of zero, the key never expires. This is found only on @@ -104,12 +139,40 @@ type Config struct { // might be no other way than to tolerate the missing MDC. Setting this flag, allows this // mode of operation. It should be considered a measure of last resort. InsecureAllowUnauthenticatedMessages bool + // InsecureAllowDecryptionWithSigningKeys allows decryption with keys marked as signing keys in the v2 API. + // This setting is potentially insecure, but it is needed as some libraries + // ignored key flags when selecting a key for encryption. + // Not relevant for the v1 API, as all keys were allowed in decryption. + InsecureAllowDecryptionWithSigningKeys bool // KnownNotations is a map of Notation Data names to bools, which controls // the notation names that are allowed to be present in critical Notation Data // signature subpackets. KnownNotations map[string]bool // SignatureNotations is a list of Notations to be added to any signatures. SignatureNotations []*Notation + // CheckIntendedRecipients controls, whether the OpenPGP Intended Recipient Fingerprint feature + // should be enabled for encryption and decryption. + // (See https://www.ietf.org/archive/id/draft-ietf-openpgp-crypto-refresh-12.html#name-intended-recipient-fingerpr). + // When the flag is set, encryption produces Intended Recipient Fingerprint signature sub-packets and decryption + // checks whether the key it was encrypted to is one of the included fingerprints in the signature. + // If the flag is disabled, no Intended Recipient Fingerprint sub-packets are created or checked. + // The default behavior, when the config or flag is nil, is to enable the feature. + CheckIntendedRecipients *bool + // CacheSessionKey controls if decryption should return the session key used for decryption. + // If the flag is set, the session key is cached in the message details struct. + CacheSessionKey bool + // CheckPacketSequence is a flag that controls if the pgp message reader should strictly check + // that the packet sequence conforms with the grammar mandated by rfc4880. + // The default behavior, when the config or flag is nil, is to check the packet sequence. + CheckPacketSequence *bool + // NonDeterministicSignaturesViaNotation is a flag to enable randomization of signatures. + // If true, a salt notation is used to randomize signatures generated by v4 and v5 keys + // (v6 signatures are always non-deterministic, by design). + // This protects EdDSA signatures from potentially leaking the secret key in case of faults (i.e. bitflips) which, in principle, could occur + // during the signing computation. It is added to signatures of any algo for simplicity, and as it may also serve as protection in case of + // weaknesses in the hash algo, potentially hindering e.g. some chosen-prefix attacks. + // The default behavior, when the config or flag is nil, is to enable the feature. + NonDeterministicSignaturesViaNotation *bool } func (c *Config) Random() io.Reader { @@ -197,7 +260,7 @@ func (c *Config) S2K() *s2k.Config { return nil } // for backwards compatibility - if c != nil && c.S2KCount > 0 && c.S2KConfig == nil { + if c.S2KCount > 0 && c.S2KConfig == nil { return &s2k.Config{ S2KCount: c.S2KCount, } @@ -233,6 +296,13 @@ func (c *Config) AllowUnauthenticatedMessages() bool { return c.InsecureAllowUnauthenticatedMessages } +func (c *Config) AllowDecryptionWithSigningKeys() bool { + if c == nil { + return false + } + return c.InsecureAllowDecryptionWithSigningKeys +} + func (c *Config) KnownNotation(notationName string) bool { if c == nil { return false @@ -246,3 +316,95 @@ func (c *Config) Notations() []*Notation { } return c.SignatureNotations } + +func (c *Config) V6() bool { + if c == nil { + return false + } + return c.V6Keys +} + +func (c *Config) IntendedRecipients() bool { + if c == nil || c.CheckIntendedRecipients == nil { + return true + } + return *c.CheckIntendedRecipients +} + +func (c *Config) RetrieveSessionKey() bool { + if c == nil { + return false + } + return c.CacheSessionKey +} + +func (c *Config) MinimumRSABits() uint16 { + if c == nil || c.MinRSABits == 0 { + return 2047 + } + return c.MinRSABits +} + +func (c *Config) RejectPublicKeyAlgorithm(alg PublicKeyAlgorithm) bool { + var rejectedAlgorithms map[PublicKeyAlgorithm]bool + if c == nil || c.RejectPublicKeyAlgorithms == nil { + // Default + rejectedAlgorithms = defaultRejectPublicKeyAlgorithms + } else { + rejectedAlgorithms = c.RejectPublicKeyAlgorithms + } + return rejectedAlgorithms[alg] +} + +func (c *Config) RejectHashAlgorithm(hash crypto.Hash) bool { + var rejectedAlgorithms map[crypto.Hash]bool + if c == nil || c.RejectHashAlgorithms == nil { + // Default + rejectedAlgorithms = defaultRejectHashAlgorithms + } else { + rejectedAlgorithms = c.RejectHashAlgorithms + } + return rejectedAlgorithms[hash] +} + +func (c *Config) RejectMessageHashAlgorithm(hash crypto.Hash) bool { + var rejectedAlgorithms map[crypto.Hash]bool + if c == nil || c.RejectMessageHashAlgorithms == nil { + // Default + rejectedAlgorithms = defaultRejectMessageHashAlgorithms + } else { + rejectedAlgorithms = c.RejectMessageHashAlgorithms + } + return rejectedAlgorithms[hash] +} + +func (c *Config) RejectCurve(curve Curve) bool { + var rejectedCurve map[Curve]bool + if c == nil || c.RejectCurves == nil { + // Default + rejectedCurve = defaultRejectCurves + } else { + rejectedCurve = c.RejectCurves + } + return rejectedCurve[curve] +} + +func (c *Config) StrictPacketSequence() bool { + if c == nil || c.CheckPacketSequence == nil { + return true + } + return *c.CheckPacketSequence +} + +func (c *Config) RandomizeSignaturesViaNotation() bool { + if c == nil || c.NonDeterministicSignaturesViaNotation == nil { + return true + } + return *c.NonDeterministicSignaturesViaNotation +} + +// BoolPointer is a helper function to set a boolean pointer in the Config. +// e.g., config.CheckPacketSequence = BoolPointer(true) +func BoolPointer(value bool) *bool { + return &value +} diff --git a/vendor/github.com/ProtonMail/go-crypto/openpgp/packet/config_v5.go b/vendor/github.com/ProtonMail/go-crypto/openpgp/packet/config_v5.go new file mode 100644 index 0000000000..f2415906b9 --- /dev/null +++ b/vendor/github.com/ProtonMail/go-crypto/openpgp/packet/config_v5.go @@ -0,0 +1,7 @@ +//go:build !v5 + +package packet + +func init() { + V5Disabled = true +} diff --git a/vendor/github.com/ProtonMail/go-crypto/openpgp/packet/encrypted_key.go b/vendor/github.com/ProtonMail/go-crypto/openpgp/packet/encrypted_key.go index eeff2902c1..b90bb28911 100644 --- a/vendor/github.com/ProtonMail/go-crypto/openpgp/packet/encrypted_key.go +++ b/vendor/github.com/ProtonMail/go-crypto/openpgp/packet/encrypted_key.go @@ -5,9 +5,11 @@ package packet import ( + "bytes" "crypto" "crypto/rsa" "encoding/binary" + "encoding/hex" "io" "math/big" "strconv" @@ -16,32 +18,85 @@ import ( "github.com/ProtonMail/go-crypto/openpgp/elgamal" "github.com/ProtonMail/go-crypto/openpgp/errors" "github.com/ProtonMail/go-crypto/openpgp/internal/encoding" + "github.com/ProtonMail/go-crypto/openpgp/x25519" + "github.com/ProtonMail/go-crypto/openpgp/x448" ) -const encryptedKeyVersion = 3 - // EncryptedKey represents a public-key encrypted session key. See RFC 4880, // section 5.1. type EncryptedKey struct { - KeyId uint64 - Algo PublicKeyAlgorithm - CipherFunc CipherFunction // only valid after a successful Decrypt for a v3 packet - Key []byte // only valid after a successful Decrypt + Version int + KeyId uint64 + KeyVersion int // v6 + KeyFingerprint []byte // v6 + Algo PublicKeyAlgorithm + CipherFunc CipherFunction // only valid after a successful Decrypt for a v3 packet + Key []byte // only valid after a successful Decrypt encryptedMPI1, encryptedMPI2 encoding.Field + ephemeralPublicX25519 *x25519.PublicKey // used for x25519 + ephemeralPublicX448 *x448.PublicKey // used for x448 + encryptedSession []byte // used for x25519 and x448 } func (e *EncryptedKey) parse(r io.Reader) (err error) { - var buf [10]byte - _, err = readFull(r, buf[:]) + var buf [8]byte + _, err = readFull(r, buf[:versionSize]) if err != nil { return } - if buf[0] != encryptedKeyVersion { + e.Version = int(buf[0]) + if e.Version != 3 && e.Version != 6 { return errors.UnsupportedError("unknown EncryptedKey version " + strconv.Itoa(int(buf[0]))) } - e.KeyId = binary.BigEndian.Uint64(buf[1:9]) - e.Algo = PublicKeyAlgorithm(buf[9]) + if e.Version == 6 { + //Read a one-octet size of the following two fields. + if _, err = readFull(r, buf[:1]); err != nil { + return + } + // The size may also be zero, and the key version and + // fingerprint omitted for an "anonymous recipient" + if buf[0] != 0 { + // non-anonymous case + _, err = readFull(r, buf[:versionSize]) + if err != nil { + return + } + e.KeyVersion = int(buf[0]) + if e.KeyVersion != 4 && e.KeyVersion != 6 { + return errors.UnsupportedError("unknown public key version " + strconv.Itoa(e.KeyVersion)) + } + var fingerprint []byte + if e.KeyVersion == 6 { + fingerprint = make([]byte, fingerprintSizeV6) + } else if e.KeyVersion == 4 { + fingerprint = make([]byte, fingerprintSize) + } + _, err = readFull(r, fingerprint) + if err != nil { + return + } + e.KeyFingerprint = fingerprint + if e.KeyVersion == 6 { + e.KeyId = binary.BigEndian.Uint64(e.KeyFingerprint[:keyIdSize]) + } else if e.KeyVersion == 4 { + e.KeyId = binary.BigEndian.Uint64(e.KeyFingerprint[fingerprintSize-keyIdSize : fingerprintSize]) + } + } + } else { + _, err = readFull(r, buf[:8]) + if err != nil { + return + } + e.KeyId = binary.BigEndian.Uint64(buf[:keyIdSize]) + } + + _, err = readFull(r, buf[:1]) + if err != nil { + return + } + e.Algo = PublicKeyAlgorithm(buf[0]) + var cipherFunction byte switch e.Algo { case PubKeyAlgoRSA, PubKeyAlgoRSAEncryptOnly: e.encryptedMPI1 = new(encoding.MPI) @@ -68,26 +123,39 @@ func (e *EncryptedKey) parse(r io.Reader) (err error) { if _, err = e.encryptedMPI2.ReadFrom(r); err != nil { return } + case PubKeyAlgoX25519: + e.ephemeralPublicX25519, e.encryptedSession, cipherFunction, err = x25519.DecodeFields(r, e.Version == 6) + if err != nil { + return + } + case PubKeyAlgoX448: + e.ephemeralPublicX448, e.encryptedSession, cipherFunction, err = x448.DecodeFields(r, e.Version == 6) + if err != nil { + return + } + } + if e.Version < 6 { + switch e.Algo { + case PubKeyAlgoX25519, PubKeyAlgoX448: + e.CipherFunc = CipherFunction(cipherFunction) + // Check for validiy is in the Decrypt method + } } + _, err = consumeAll(r) return } -func checksumKeyMaterial(key []byte) uint16 { - var checksum uint16 - for _, v := range key { - checksum += uint16(v) - } - return checksum -} - // Decrypt decrypts an encrypted session key with the given private key. The // private key must have been decrypted first. // If config is nil, sensible defaults will be used. func (e *EncryptedKey) Decrypt(priv *PrivateKey, config *Config) error { - if e.KeyId != 0 && e.KeyId != priv.KeyId { + if e.Version < 6 && e.KeyId != 0 && e.KeyId != priv.KeyId { return errors.InvalidArgumentError("cannot decrypt encrypted session key for key id " + strconv.FormatUint(e.KeyId, 16) + " with private key id " + strconv.FormatUint(priv.KeyId, 16)) } + if e.Version == 6 && e.KeyVersion != 0 && !bytes.Equal(e.KeyFingerprint, priv.Fingerprint) { + return errors.InvalidArgumentError("cannot decrypt encrypted session key for key fingerprint " + hex.EncodeToString(e.KeyFingerprint) + " with private key fingerprint " + hex.EncodeToString(priv.Fingerprint)) + } if e.Algo != priv.PubKeyAlgo { return errors.InvalidArgumentError("cannot decrypt encrypted session key of type " + strconv.Itoa(int(e.Algo)) + " with private key of type " + strconv.Itoa(int(priv.PubKeyAlgo))) } @@ -113,52 +181,116 @@ func (e *EncryptedKey) Decrypt(priv *PrivateKey, config *Config) error { vsG := e.encryptedMPI1.Bytes() m := e.encryptedMPI2.Bytes() oid := priv.PublicKey.oid.EncodedBytes() - b, err = ecdh.Decrypt(priv.PrivateKey.(*ecdh.PrivateKey), vsG, m, oid, priv.PublicKey.Fingerprint[:]) + fp := priv.PublicKey.Fingerprint[:] + if priv.PublicKey.Version == 5 { + // For v5 the, the fingerprint must be restricted to 20 bytes + fp = fp[:20] + } + b, err = ecdh.Decrypt(priv.PrivateKey.(*ecdh.PrivateKey), vsG, m, oid, fp) + case PubKeyAlgoX25519: + b, err = x25519.Decrypt(priv.PrivateKey.(*x25519.PrivateKey), e.ephemeralPublicX25519, e.encryptedSession) + case PubKeyAlgoX448: + b, err = x448.Decrypt(priv.PrivateKey.(*x448.PrivateKey), e.ephemeralPublicX448, e.encryptedSession) default: err = errors.InvalidArgumentError("cannot decrypt encrypted session key with private key of type " + strconv.Itoa(int(priv.PubKeyAlgo))) } - if err != nil { return err } - e.CipherFunc = CipherFunction(b[0]) - if !e.CipherFunc.IsSupported() { - return errors.UnsupportedError("unsupported encryption function") - } - - e.Key = b[1 : len(b)-2] - expectedChecksum := uint16(b[len(b)-2])<<8 | uint16(b[len(b)-1]) - checksum := checksumKeyMaterial(e.Key) - if checksum != expectedChecksum { - return errors.StructuralError("EncryptedKey checksum incorrect") + var key []byte + switch priv.PubKeyAlgo { + case PubKeyAlgoRSA, PubKeyAlgoRSAEncryptOnly, PubKeyAlgoElGamal, PubKeyAlgoECDH: + keyOffset := 0 + if e.Version < 6 { + e.CipherFunc = CipherFunction(b[0]) + keyOffset = 1 + if !e.CipherFunc.IsSupported() { + return errors.UnsupportedError("unsupported encryption function") + } + } + key, err = decodeChecksumKey(b[keyOffset:]) + if err != nil { + return err + } + case PubKeyAlgoX25519, PubKeyAlgoX448: + if e.Version < 6 { + switch e.CipherFunc { + case CipherAES128, CipherAES192, CipherAES256: + break + default: + return errors.StructuralError("v3 PKESK mandates AES as cipher function for x25519 and x448") + } + } + key = b[:] + default: + return errors.UnsupportedError("unsupported algorithm for decryption") } - + e.Key = key return nil } // Serialize writes the encrypted key packet, e, to w. func (e *EncryptedKey) Serialize(w io.Writer) error { - var mpiLen int + var encodedLength int switch e.Algo { case PubKeyAlgoRSA, PubKeyAlgoRSAEncryptOnly: - mpiLen = int(e.encryptedMPI1.EncodedLength()) + encodedLength = int(e.encryptedMPI1.EncodedLength()) case PubKeyAlgoElGamal: - mpiLen = int(e.encryptedMPI1.EncodedLength()) + int(e.encryptedMPI2.EncodedLength()) + encodedLength = int(e.encryptedMPI1.EncodedLength()) + int(e.encryptedMPI2.EncodedLength()) case PubKeyAlgoECDH: - mpiLen = int(e.encryptedMPI1.EncodedLength()) + int(e.encryptedMPI2.EncodedLength()) + encodedLength = int(e.encryptedMPI1.EncodedLength()) + int(e.encryptedMPI2.EncodedLength()) + case PubKeyAlgoX25519: + encodedLength = x25519.EncodedFieldsLength(e.encryptedSession, e.Version == 6) + case PubKeyAlgoX448: + encodedLength = x448.EncodedFieldsLength(e.encryptedSession, e.Version == 6) default: return errors.InvalidArgumentError("don't know how to serialize encrypted key type " + strconv.Itoa(int(e.Algo))) } - err := serializeHeader(w, packetTypeEncryptedKey, 1 /* version */ +8 /* key id */ +1 /* algo */ +mpiLen) + packetLen := versionSize /* version */ + keyIdSize /* key id */ + algorithmSize /* algo */ + encodedLength + if e.Version == 6 { + packetLen = versionSize /* version */ + algorithmSize /* algo */ + encodedLength + keyVersionSize /* key version */ + if e.KeyVersion == 6 { + packetLen += fingerprintSizeV6 + } else if e.KeyVersion == 4 { + packetLen += fingerprintSize + } + } + + err := serializeHeader(w, packetTypeEncryptedKey, packetLen) if err != nil { return err } - w.Write([]byte{encryptedKeyVersion}) - binary.Write(w, binary.BigEndian, e.KeyId) - w.Write([]byte{byte(e.Algo)}) + _, err = w.Write([]byte{byte(e.Version)}) + if err != nil { + return err + } + if e.Version == 6 { + _, err = w.Write([]byte{byte(e.KeyVersion)}) + if err != nil { + return err + } + // The key version number may also be zero, + // and the fingerprint omitted + if e.KeyVersion != 0 { + _, err = w.Write(e.KeyFingerprint) + if err != nil { + return err + } + } + } else { + // Write KeyID + err = binary.Write(w, binary.BigEndian, e.KeyId) + if err != nil { + return err + } + } + _, err = w.Write([]byte{byte(e.Algo)}) + if err != nil { + return err + } switch e.Algo { case PubKeyAlgoRSA, PubKeyAlgoRSAEncryptOnly: @@ -176,34 +308,115 @@ func (e *EncryptedKey) Serialize(w io.Writer) error { } _, err := w.Write(e.encryptedMPI2.EncodedBytes()) return err + case PubKeyAlgoX25519: + err := x25519.EncodeFields(w, e.ephemeralPublicX25519, e.encryptedSession, byte(e.CipherFunc), e.Version == 6) + return err + case PubKeyAlgoX448: + err := x448.EncodeFields(w, e.ephemeralPublicX448, e.encryptedSession, byte(e.CipherFunc), e.Version == 6) + return err default: panic("internal error") } } -// SerializeEncryptedKey serializes an encrypted key packet to w that contains +// SerializeEncryptedKeyAEAD serializes an encrypted key packet to w that contains // key, encrypted to pub. +// If aeadSupported is set, PKESK v6 is used, otherwise v3. +// Note: aeadSupported MUST match the value passed to SerializeSymmetricallyEncrypted. // If config is nil, sensible defaults will be used. -func SerializeEncryptedKey(w io.Writer, pub *PublicKey, cipherFunc CipherFunction, key []byte, config *Config) error { - var buf [10]byte - buf[0] = encryptedKeyVersion - binary.BigEndian.PutUint64(buf[1:9], pub.KeyId) - buf[9] = byte(pub.PubKeyAlgo) - - keyBlock := make([]byte, 1 /* cipher type */ +len(key)+2 /* checksum */) - keyBlock[0] = byte(cipherFunc) - copy(keyBlock[1:], key) - checksum := checksumKeyMaterial(key) - keyBlock[1+len(key)] = byte(checksum >> 8) - keyBlock[1+len(key)+1] = byte(checksum) +func SerializeEncryptedKeyAEAD(w io.Writer, pub *PublicKey, cipherFunc CipherFunction, aeadSupported bool, key []byte, config *Config) error { + return SerializeEncryptedKeyAEADwithHiddenOption(w, pub, cipherFunc, aeadSupported, key, false, config) +} + +// SerializeEncryptedKeyAEADwithHiddenOption serializes an encrypted key packet to w that contains +// key, encrypted to pub. +// Offers the hidden flag option to indicated if the PKESK packet should include a wildcard KeyID. +// If aeadSupported is set, PKESK v6 is used, otherwise v3. +// Note: aeadSupported MUST match the value passed to SerializeSymmetricallyEncrypted. +// If config is nil, sensible defaults will be used. +func SerializeEncryptedKeyAEADwithHiddenOption(w io.Writer, pub *PublicKey, cipherFunc CipherFunction, aeadSupported bool, key []byte, hidden bool, config *Config) error { + var buf [36]byte // max possible header size is v6 + lenHeaderWritten := versionSize + version := 3 + + if aeadSupported { + version = 6 + } + // An implementation MUST NOT generate ElGamal v6 PKESKs. + if version == 6 && pub.PubKeyAlgo == PubKeyAlgoElGamal { + return errors.InvalidArgumentError("ElGamal v6 PKESK are not allowed") + } + // In v3 PKESKs, for x25519 and x448, mandate using AES + if version == 3 && (pub.PubKeyAlgo == PubKeyAlgoX25519 || pub.PubKeyAlgo == PubKeyAlgoX448) { + switch cipherFunc { + case CipherAES128, CipherAES192, CipherAES256: + break + default: + return errors.InvalidArgumentError("v3 PKESK mandates AES for x25519 and x448") + } + } + + buf[0] = byte(version) + + // If hidden is set, the key should be hidden + // An implementation MAY accept or use a Key ID of all zeros, + // or a key version of zero and no key fingerprint, to hide the intended decryption key. + // See Section 5.1.8. in the open pgp crypto refresh + if version == 6 { + if !hidden { + // A one-octet size of the following two fields. + buf[1] = byte(keyVersionSize + len(pub.Fingerprint)) + // A one octet key version number. + buf[2] = byte(pub.Version) + lenHeaderWritten += keyVersionSize + 1 + // The fingerprint of the public key + copy(buf[lenHeaderWritten:lenHeaderWritten+len(pub.Fingerprint)], pub.Fingerprint) + lenHeaderWritten += len(pub.Fingerprint) + } else { + // The size may also be zero, and the key version + // and fingerprint omitted for an "anonymous recipient" + buf[1] = 0 + lenHeaderWritten += 1 + } + } else { + if !hidden { + binary.BigEndian.PutUint64(buf[versionSize:(versionSize+keyIdSize)], pub.KeyId) + } + lenHeaderWritten += keyIdSize + } + buf[lenHeaderWritten] = byte(pub.PubKeyAlgo) + lenHeaderWritten += algorithmSize + + var keyBlock []byte + switch pub.PubKeyAlgo { + case PubKeyAlgoRSA, PubKeyAlgoRSAEncryptOnly, PubKeyAlgoElGamal, PubKeyAlgoECDH: + lenKeyBlock := len(key) + 2 + if version < 6 { + lenKeyBlock += 1 // cipher type included + } + keyBlock = make([]byte, lenKeyBlock) + keyOffset := 0 + if version < 6 { + keyBlock[0] = byte(cipherFunc) + keyOffset = 1 + } + encodeChecksumKey(keyBlock[keyOffset:], key) + case PubKeyAlgoX25519, PubKeyAlgoX448: + // algorithm is added in plaintext below + keyBlock = key + } switch pub.PubKeyAlgo { case PubKeyAlgoRSA, PubKeyAlgoRSAEncryptOnly: - return serializeEncryptedKeyRSA(w, config.Random(), buf, pub.PublicKey.(*rsa.PublicKey), keyBlock) + return serializeEncryptedKeyRSA(w, config.Random(), buf[:lenHeaderWritten], pub.PublicKey.(*rsa.PublicKey), keyBlock) case PubKeyAlgoElGamal: - return serializeEncryptedKeyElGamal(w, config.Random(), buf, pub.PublicKey.(*elgamal.PublicKey), keyBlock) + return serializeEncryptedKeyElGamal(w, config.Random(), buf[:lenHeaderWritten], pub.PublicKey.(*elgamal.PublicKey), keyBlock) case PubKeyAlgoECDH: - return serializeEncryptedKeyECDH(w, config.Random(), buf, pub.PublicKey.(*ecdh.PublicKey), keyBlock, pub.oid, pub.Fingerprint) + return serializeEncryptedKeyECDH(w, config.Random(), buf[:lenHeaderWritten], pub.PublicKey.(*ecdh.PublicKey), keyBlock, pub.oid, pub.Fingerprint) + case PubKeyAlgoX25519: + return serializeEncryptedKeyX25519(w, config.Random(), buf[:lenHeaderWritten], pub.PublicKey.(*x25519.PublicKey), keyBlock, byte(cipherFunc), version) + case PubKeyAlgoX448: + return serializeEncryptedKeyX448(w, config.Random(), buf[:lenHeaderWritten], pub.PublicKey.(*x448.PublicKey), keyBlock, byte(cipherFunc), version) case PubKeyAlgoDSA, PubKeyAlgoRSASignOnly: return errors.InvalidArgumentError("cannot encrypt to public key of type " + strconv.Itoa(int(pub.PubKeyAlgo))) } @@ -211,14 +424,32 @@ func SerializeEncryptedKey(w io.Writer, pub *PublicKey, cipherFunc CipherFunctio return errors.UnsupportedError("encrypting a key to public key of type " + strconv.Itoa(int(pub.PubKeyAlgo))) } -func serializeEncryptedKeyRSA(w io.Writer, rand io.Reader, header [10]byte, pub *rsa.PublicKey, keyBlock []byte) error { +// SerializeEncryptedKey serializes an encrypted key packet to w that contains +// key, encrypted to pub. +// PKESKv6 is used if config.AEAD() is not nil. +// If config is nil, sensible defaults will be used. +// Deprecated: Use SerializeEncryptedKeyAEAD instead. +func SerializeEncryptedKey(w io.Writer, pub *PublicKey, cipherFunc CipherFunction, key []byte, config *Config) error { + return SerializeEncryptedKeyAEAD(w, pub, cipherFunc, config.AEAD() != nil, key, config) +} + +// SerializeEncryptedKeyWithHiddenOption serializes an encrypted key packet to w that contains +// key, encrypted to pub. PKESKv6 is used if config.AEAD() is not nil. +// The hidden option controls if the packet should be anonymous, i.e., omit key metadata. +// If config is nil, sensible defaults will be used. +// Deprecated: Use SerializeEncryptedKeyAEADwithHiddenOption instead. +func SerializeEncryptedKeyWithHiddenOption(w io.Writer, pub *PublicKey, cipherFunc CipherFunction, key []byte, hidden bool, config *Config) error { + return SerializeEncryptedKeyAEADwithHiddenOption(w, pub, cipherFunc, config.AEAD() != nil, key, hidden, config) +} + +func serializeEncryptedKeyRSA(w io.Writer, rand io.Reader, header []byte, pub *rsa.PublicKey, keyBlock []byte) error { cipherText, err := rsa.EncryptPKCS1v15(rand, pub, keyBlock) if err != nil { return errors.InvalidArgumentError("RSA encryption failed: " + err.Error()) } cipherMPI := encoding.NewMPI(cipherText) - packetLen := 10 /* header length */ + int(cipherMPI.EncodedLength()) + packetLen := len(header) /* header length */ + int(cipherMPI.EncodedLength()) err = serializeHeader(w, packetTypeEncryptedKey, packetLen) if err != nil { @@ -232,13 +463,13 @@ func serializeEncryptedKeyRSA(w io.Writer, rand io.Reader, header [10]byte, pub return err } -func serializeEncryptedKeyElGamal(w io.Writer, rand io.Reader, header [10]byte, pub *elgamal.PublicKey, keyBlock []byte) error { +func serializeEncryptedKeyElGamal(w io.Writer, rand io.Reader, header []byte, pub *elgamal.PublicKey, keyBlock []byte) error { c1, c2, err := elgamal.Encrypt(rand, pub, keyBlock) if err != nil { return errors.InvalidArgumentError("ElGamal encryption failed: " + err.Error()) } - packetLen := 10 /* header length */ + packetLen := len(header) /* header length */ packetLen += 2 /* mpi size */ + (c1.BitLen()+7)/8 packetLen += 2 /* mpi size */ + (c2.BitLen()+7)/8 @@ -257,7 +488,7 @@ func serializeEncryptedKeyElGamal(w io.Writer, rand io.Reader, header [10]byte, return err } -func serializeEncryptedKeyECDH(w io.Writer, rand io.Reader, header [10]byte, pub *ecdh.PublicKey, keyBlock []byte, oid encoding.Field, fingerprint []byte) error { +func serializeEncryptedKeyECDH(w io.Writer, rand io.Reader, header []byte, pub *ecdh.PublicKey, keyBlock []byte, oid encoding.Field, fingerprint []byte) error { vsG, c, err := ecdh.Encrypt(rand, pub, keyBlock, oid.EncodedBytes(), fingerprint) if err != nil { return errors.InvalidArgumentError("ECDH encryption failed: " + err.Error()) @@ -266,7 +497,7 @@ func serializeEncryptedKeyECDH(w io.Writer, rand io.Reader, header [10]byte, pub g := encoding.NewMPI(vsG) m := encoding.NewOID(c) - packetLen := 10 /* header length */ + packetLen := len(header) /* header length */ packetLen += int(g.EncodedLength()) + int(m.EncodedLength()) err = serializeHeader(w, packetTypeEncryptedKey, packetLen) @@ -284,3 +515,70 @@ func serializeEncryptedKeyECDH(w io.Writer, rand io.Reader, header [10]byte, pub _, err = w.Write(m.EncodedBytes()) return err } + +func serializeEncryptedKeyX25519(w io.Writer, rand io.Reader, header []byte, pub *x25519.PublicKey, keyBlock []byte, cipherFunc byte, version int) error { + ephemeralPublicX25519, ciphertext, err := x25519.Encrypt(rand, pub, keyBlock) + if err != nil { + return errors.InvalidArgumentError("x25519 encryption failed: " + err.Error()) + } + + packetLen := len(header) /* header length */ + packetLen += x25519.EncodedFieldsLength(ciphertext, version == 6) + + err = serializeHeader(w, packetTypeEncryptedKey, packetLen) + if err != nil { + return err + } + + _, err = w.Write(header[:]) + if err != nil { + return err + } + return x25519.EncodeFields(w, ephemeralPublicX25519, ciphertext, cipherFunc, version == 6) +} + +func serializeEncryptedKeyX448(w io.Writer, rand io.Reader, header []byte, pub *x448.PublicKey, keyBlock []byte, cipherFunc byte, version int) error { + ephemeralPublicX448, ciphertext, err := x448.Encrypt(rand, pub, keyBlock) + if err != nil { + return errors.InvalidArgumentError("x448 encryption failed: " + err.Error()) + } + + packetLen := len(header) /* header length */ + packetLen += x448.EncodedFieldsLength(ciphertext, version == 6) + + err = serializeHeader(w, packetTypeEncryptedKey, packetLen) + if err != nil { + return err + } + + _, err = w.Write(header[:]) + if err != nil { + return err + } + return x448.EncodeFields(w, ephemeralPublicX448, ciphertext, cipherFunc, version == 6) +} + +func checksumKeyMaterial(key []byte) uint16 { + var checksum uint16 + for _, v := range key { + checksum += uint16(v) + } + return checksum +} + +func decodeChecksumKey(msg []byte) (key []byte, err error) { + key = msg[:len(msg)-2] + expectedChecksum := uint16(msg[len(msg)-2])<<8 | uint16(msg[len(msg)-1]) + checksum := checksumKeyMaterial(key) + if checksum != expectedChecksum { + err = errors.StructuralError("session key checksum is incorrect") + } + return +} + +func encodeChecksumKey(buffer []byte, key []byte) { + copy(buffer, key) + checksum := checksumKeyMaterial(key) + buffer[len(key)] = byte(checksum >> 8) + buffer[len(key)+1] = byte(checksum) +} diff --git a/vendor/github.com/ProtonMail/go-crypto/openpgp/packet/literal.go b/vendor/github.com/ProtonMail/go-crypto/openpgp/packet/literal.go index 4be987609b..8a028c8a17 100644 --- a/vendor/github.com/ProtonMail/go-crypto/openpgp/packet/literal.go +++ b/vendor/github.com/ProtonMail/go-crypto/openpgp/packet/literal.go @@ -58,9 +58,9 @@ func (l *LiteralData) parse(r io.Reader) (err error) { // on completion. The fileName is truncated to 255 bytes. func SerializeLiteral(w io.WriteCloser, isBinary bool, fileName string, time uint32) (plaintext io.WriteCloser, err error) { var buf [4]byte - buf[0] = 't' - if isBinary { - buf[0] = 'b' + buf[0] = 'b' + if !isBinary { + buf[0] = 'u' } if len(fileName) > 255 { fileName = fileName[:255] diff --git a/vendor/github.com/ProtonMail/go-crypto/openpgp/packet/marker.go b/vendor/github.com/ProtonMail/go-crypto/openpgp/packet/marker.go new file mode 100644 index 0000000000..1ee378ba3c --- /dev/null +++ b/vendor/github.com/ProtonMail/go-crypto/openpgp/packet/marker.go @@ -0,0 +1,33 @@ +package packet + +import ( + "io" + + "github.com/ProtonMail/go-crypto/openpgp/errors" +) + +type Marker struct{} + +const markerString = "PGP" + +// parse just checks if the packet contains "PGP". +func (m *Marker) parse(reader io.Reader) error { + var buffer [3]byte + if _, err := io.ReadFull(reader, buffer[:]); err != nil { + return err + } + if string(buffer[:]) != markerString { + return errors.StructuralError("invalid marker packet") + } + return nil +} + +// SerializeMarker writes a marker packet to writer. +func SerializeMarker(writer io.Writer) error { + err := serializeHeader(writer, packetTypeMarker, len(markerString)) + if err != nil { + return err + } + _, err = writer.Write([]byte(markerString)) + return err +} diff --git a/vendor/github.com/ProtonMail/go-crypto/openpgp/packet/one_pass_signature.go b/vendor/github.com/ProtonMail/go-crypto/openpgp/packet/one_pass_signature.go index 033fb2d7e8..f393c4063b 100644 --- a/vendor/github.com/ProtonMail/go-crypto/openpgp/packet/one_pass_signature.go +++ b/vendor/github.com/ProtonMail/go-crypto/openpgp/packet/one_pass_signature.go @@ -7,34 +7,37 @@ package packet import ( "crypto" "encoding/binary" - "github.com/ProtonMail/go-crypto/openpgp/errors" - "github.com/ProtonMail/go-crypto/openpgp/internal/algorithm" "io" "strconv" + + "github.com/ProtonMail/go-crypto/openpgp/errors" + "github.com/ProtonMail/go-crypto/openpgp/internal/algorithm" ) // OnePassSignature represents a one-pass signature packet. See RFC 4880, // section 5.4. type OnePassSignature struct { - SigType SignatureType - Hash crypto.Hash - PubKeyAlgo PublicKeyAlgorithm - KeyId uint64 - IsLast bool + Version int + SigType SignatureType + Hash crypto.Hash + PubKeyAlgo PublicKeyAlgorithm + KeyId uint64 + IsLast bool + Salt []byte // v6 only + KeyFingerprint []byte // v6 only } -const onePassSignatureVersion = 3 - func (ops *OnePassSignature) parse(r io.Reader) (err error) { - var buf [13]byte - - _, err = readFull(r, buf[:]) + var buf [8]byte + // Read: version | signature type | hash algorithm | public-key algorithm + _, err = readFull(r, buf[:4]) if err != nil { return } - if buf[0] != onePassSignatureVersion { - err = errors.UnsupportedError("one-pass-signature packet version " + strconv.Itoa(int(buf[0]))) + if buf[0] != 3 && buf[0] != 6 { + return errors.UnsupportedError("one-pass-signature packet version " + strconv.Itoa(int(buf[0]))) } + ops.Version = int(buf[0]) var ok bool ops.Hash, ok = algorithm.HashIdToHashWithSha1(buf[2]) @@ -44,15 +47,69 @@ func (ops *OnePassSignature) parse(r io.Reader) (err error) { ops.SigType = SignatureType(buf[1]) ops.PubKeyAlgo = PublicKeyAlgorithm(buf[3]) - ops.KeyId = binary.BigEndian.Uint64(buf[4:12]) - ops.IsLast = buf[12] != 0 + + if ops.Version == 6 { + // Only for v6, a variable-length field containing the salt + _, err = readFull(r, buf[:1]) + if err != nil { + return + } + saltLength := int(buf[0]) + var expectedSaltLength int + expectedSaltLength, err = SaltLengthForHash(ops.Hash) + if err != nil { + return + } + if saltLength != expectedSaltLength { + err = errors.StructuralError("unexpected salt size for the given hash algorithm") + return + } + salt := make([]byte, expectedSaltLength) + _, err = readFull(r, salt) + if err != nil { + return + } + ops.Salt = salt + + // Only for v6 packets, 32 octets of the fingerprint of the signing key. + fingerprint := make([]byte, 32) + _, err = readFull(r, fingerprint) + if err != nil { + return + } + ops.KeyFingerprint = fingerprint + ops.KeyId = binary.BigEndian.Uint64(ops.KeyFingerprint[:8]) + } else { + _, err = readFull(r, buf[:8]) + if err != nil { + return + } + ops.KeyId = binary.BigEndian.Uint64(buf[:8]) + } + + _, err = readFull(r, buf[:1]) + if err != nil { + return + } + ops.IsLast = buf[0] != 0 return } // Serialize marshals the given OnePassSignature to w. func (ops *OnePassSignature) Serialize(w io.Writer) error { - var buf [13]byte - buf[0] = onePassSignatureVersion + //v3 length 1+1+1+1+8+1 = + packetLength := 13 + if ops.Version == 6 { + // v6 length 1+1+1+1+1+len(salt)+32+1 = + packetLength = 38 + len(ops.Salt) + } + + if err := serializeHeader(w, packetTypeOnePassSignature, packetLength); err != nil { + return err + } + + var buf [8]byte + buf[0] = byte(ops.Version) buf[1] = uint8(ops.SigType) var ok bool buf[2], ok = algorithm.HashToHashIdWithSha1(ops.Hash) @@ -60,14 +117,41 @@ func (ops *OnePassSignature) Serialize(w io.Writer) error { return errors.UnsupportedError("hash type: " + strconv.Itoa(int(ops.Hash))) } buf[3] = uint8(ops.PubKeyAlgo) - binary.BigEndian.PutUint64(buf[4:12], ops.KeyId) - if ops.IsLast { - buf[12] = 1 - } - if err := serializeHeader(w, packetTypeOnePassSignature, len(buf)); err != nil { + _, err := w.Write(buf[:4]) + if err != nil { return err } - _, err := w.Write(buf[:]) + + if ops.Version == 6 { + // write salt for v6 signatures + _, err := w.Write([]byte{uint8(len(ops.Salt))}) + if err != nil { + return err + } + _, err = w.Write(ops.Salt) + if err != nil { + return err + } + + // write fingerprint v6 signatures + _, err = w.Write(ops.KeyFingerprint) + if err != nil { + return err + } + } else { + binary.BigEndian.PutUint64(buf[:8], ops.KeyId) + _, err := w.Write(buf[:8]) + if err != nil { + return err + } + } + + isLast := []byte{byte(0)} + if ops.IsLast { + isLast[0] = 1 + } + + _, err = w.Write(isLast) return err } diff --git a/vendor/github.com/ProtonMail/go-crypto/openpgp/packet/opaque.go b/vendor/github.com/ProtonMail/go-crypto/openpgp/packet/opaque.go index 4f8204079f..cef7c661d3 100644 --- a/vendor/github.com/ProtonMail/go-crypto/openpgp/packet/opaque.go +++ b/vendor/github.com/ProtonMail/go-crypto/openpgp/packet/opaque.go @@ -7,7 +7,6 @@ package packet import ( "bytes" "io" - "io/ioutil" "github.com/ProtonMail/go-crypto/openpgp/errors" ) @@ -26,7 +25,7 @@ type OpaquePacket struct { } func (op *OpaquePacket) parse(r io.Reader) (err error) { - op.Contents, err = ioutil.ReadAll(r) + op.Contents, err = io.ReadAll(r) return } diff --git a/vendor/github.com/ProtonMail/go-crypto/openpgp/packet/packet.go b/vendor/github.com/ProtonMail/go-crypto/openpgp/packet/packet.go index 4d86a7da82..1e92e22c97 100644 --- a/vendor/github.com/ProtonMail/go-crypto/openpgp/packet/packet.go +++ b/vendor/github.com/ProtonMail/go-crypto/openpgp/packet/packet.go @@ -311,12 +311,15 @@ const ( packetTypePrivateSubkey packetType = 7 packetTypeCompressed packetType = 8 packetTypeSymmetricallyEncrypted packetType = 9 + packetTypeMarker packetType = 10 packetTypeLiteralData packetType = 11 + packetTypeTrust packetType = 12 packetTypeUserId packetType = 13 packetTypePublicSubkey packetType = 14 packetTypeUserAttribute packetType = 17 packetTypeSymmetricallyEncryptedIntegrityProtected packetType = 18 packetTypeAEADEncrypted packetType = 20 + packetPadding packetType = 21 ) // EncryptedDataPacket holds encrypted data. It is currently implemented by @@ -328,7 +331,7 @@ type EncryptedDataPacket interface { // Read reads a single OpenPGP packet from the given io.Reader. If there is an // error parsing a packet, the whole packet is consumed from the input. func Read(r io.Reader) (p Packet, err error) { - tag, _, contents, err := readHeader(r) + tag, len, contents, err := readHeader(r) if err != nil { return } @@ -367,8 +370,93 @@ func Read(r io.Reader) (p Packet, err error) { p = se case packetTypeAEADEncrypted: p = new(AEADEncrypted) + case packetPadding: + p = Padding(len) + case packetTypeMarker: + p = new(Marker) + case packetTypeTrust: + // Not implemented, just consume + err = errors.UnknownPacketTypeError(tag) default: + // Packet Tags from 0 to 39 are critical. + // Packet Tags from 40 to 63 are non-critical. + if tag < 40 { + err = errors.CriticalUnknownPacketTypeError(tag) + } else { + err = errors.UnknownPacketTypeError(tag) + } + } + if p != nil { + err = p.parse(contents) + } + if err != nil { + consumeAll(contents) + } + return +} + +// ReadWithCheck reads a single OpenPGP message packet from the given io.Reader. If there is an +// error parsing a packet, the whole packet is consumed from the input. +// ReadWithCheck additionally checks if the OpenPGP message packet sequence adheres +// to the packet composition rules in rfc4880, if not throws an error. +func ReadWithCheck(r io.Reader, sequence *SequenceVerifier) (p Packet, msgErr error, err error) { + tag, len, contents, err := readHeader(r) + if err != nil { + return + } + switch tag { + case packetTypeEncryptedKey: + msgErr = sequence.Next(ESKSymbol) + p = new(EncryptedKey) + case packetTypeSignature: + msgErr = sequence.Next(SigSymbol) + p = new(Signature) + case packetTypeSymmetricKeyEncrypted: + msgErr = sequence.Next(ESKSymbol) + p = new(SymmetricKeyEncrypted) + case packetTypeOnePassSignature: + msgErr = sequence.Next(OPSSymbol) + p = new(OnePassSignature) + case packetTypeCompressed: + msgErr = sequence.Next(CompSymbol) + p = new(Compressed) + case packetTypeSymmetricallyEncrypted: + msgErr = sequence.Next(EncSymbol) + p = new(SymmetricallyEncrypted) + case packetTypeLiteralData: + msgErr = sequence.Next(LDSymbol) + p = new(LiteralData) + case packetTypeSymmetricallyEncryptedIntegrityProtected: + msgErr = sequence.Next(EncSymbol) + se := new(SymmetricallyEncrypted) + se.IntegrityProtected = true + p = se + case packetTypeAEADEncrypted: + msgErr = sequence.Next(EncSymbol) + p = new(AEADEncrypted) + case packetPadding: + p = Padding(len) + case packetTypeMarker: + p = new(Marker) + case packetTypeTrust: + // Not implemented, just consume err = errors.UnknownPacketTypeError(tag) + case packetTypePrivateKey, + packetTypePrivateSubkey, + packetTypePublicKey, + packetTypePublicSubkey, + packetTypeUserId, + packetTypeUserAttribute: + msgErr = sequence.Next(UnknownSymbol) + consumeAll(contents) + default: + // Packet Tags from 0 to 39 are critical. + // Packet Tags from 40 to 63 are non-critical. + if tag < 40 { + err = errors.CriticalUnknownPacketTypeError(tag) + } else { + err = errors.UnknownPacketTypeError(tag) + } } if p != nil { err = p.parse(contents) @@ -385,17 +473,17 @@ type SignatureType uint8 const ( SigTypeBinary SignatureType = 0x00 - SigTypeText = 0x01 - SigTypeGenericCert = 0x10 - SigTypePersonaCert = 0x11 - SigTypeCasualCert = 0x12 - SigTypePositiveCert = 0x13 - SigTypeSubkeyBinding = 0x18 - SigTypePrimaryKeyBinding = 0x19 - SigTypeDirectSignature = 0x1F - SigTypeKeyRevocation = 0x20 - SigTypeSubkeyRevocation = 0x28 - SigTypeCertificationRevocation = 0x30 + SigTypeText SignatureType = 0x01 + SigTypeGenericCert SignatureType = 0x10 + SigTypePersonaCert SignatureType = 0x11 + SigTypeCasualCert SignatureType = 0x12 + SigTypePositiveCert SignatureType = 0x13 + SigTypeSubkeyBinding SignatureType = 0x18 + SigTypePrimaryKeyBinding SignatureType = 0x19 + SigTypeDirectSignature SignatureType = 0x1F + SigTypeKeyRevocation SignatureType = 0x20 + SigTypeSubkeyRevocation SignatureType = 0x28 + SigTypeCertificationRevocation SignatureType = 0x30 ) // PublicKeyAlgorithm represents the different public key system specified for @@ -412,6 +500,11 @@ const ( PubKeyAlgoECDSA PublicKeyAlgorithm = 19 // https://www.ietf.org/archive/id/draft-koch-eddsa-for-openpgp-04.txt PubKeyAlgoEdDSA PublicKeyAlgorithm = 22 + // https://datatracker.ietf.org/doc/html/draft-ietf-openpgp-crypto-refresh + PubKeyAlgoX25519 PublicKeyAlgorithm = 25 + PubKeyAlgoX448 PublicKeyAlgorithm = 26 + PubKeyAlgoEd25519 PublicKeyAlgorithm = 27 + PubKeyAlgoEd448 PublicKeyAlgorithm = 28 // Deprecated in RFC 4880, Section 13.5. Use key flags instead. PubKeyAlgoRSAEncryptOnly PublicKeyAlgorithm = 2 @@ -422,7 +515,7 @@ const ( // key of the given type. func (pka PublicKeyAlgorithm) CanEncrypt() bool { switch pka { - case PubKeyAlgoRSA, PubKeyAlgoRSAEncryptOnly, PubKeyAlgoElGamal, PubKeyAlgoECDH: + case PubKeyAlgoRSA, PubKeyAlgoRSAEncryptOnly, PubKeyAlgoElGamal, PubKeyAlgoECDH, PubKeyAlgoX25519, PubKeyAlgoX448: return true } return false @@ -432,7 +525,7 @@ func (pka PublicKeyAlgorithm) CanEncrypt() bool { // sign a message. func (pka PublicKeyAlgorithm) CanSign() bool { switch pka { - case PubKeyAlgoRSA, PubKeyAlgoRSASignOnly, PubKeyAlgoDSA, PubKeyAlgoECDSA, PubKeyAlgoEdDSA: + case PubKeyAlgoRSA, PubKeyAlgoRSASignOnly, PubKeyAlgoDSA, PubKeyAlgoECDSA, PubKeyAlgoEdDSA, PubKeyAlgoEd25519, PubKeyAlgoEd448: return true } return false @@ -512,6 +605,11 @@ func (mode AEADMode) TagLength() int { return algorithm.AEADMode(mode).TagLength() } +// IsSupported returns true if the aead mode is supported from the library +func (mode AEADMode) IsSupported() bool { + return algorithm.AEADMode(mode).TagLength() > 0 +} + // new returns a fresh instance of the given mode. func (mode AEADMode) new(block cipher.Block) cipher.AEAD { return algorithm.AEADMode(mode).New(block) @@ -526,8 +624,17 @@ const ( KeySuperseded ReasonForRevocation = 1 KeyCompromised ReasonForRevocation = 2 KeyRetired ReasonForRevocation = 3 + UserIDNotValid ReasonForRevocation = 32 + Unknown ReasonForRevocation = 200 ) +func NewReasonForRevocation(value byte) ReasonForRevocation { + if value < 4 || value == 32 { + return ReasonForRevocation(value) + } + return Unknown +} + // Curve is a mapping to supported ECC curves for key generation. // See https://www.ietf.org/archive/id/draft-ietf-openpgp-crypto-refresh-06.html#name-curve-specific-wire-formats type Curve string @@ -549,3 +656,20 @@ type TrustLevel uint8 // TrustAmount represents a trust amount per RFC4880 5.2.3.13 type TrustAmount uint8 + +const ( + // versionSize is the length in bytes of the version value. + versionSize = 1 + // algorithmSize is the length in bytes of the key algorithm value. + algorithmSize = 1 + // keyVersionSize is the length in bytes of the key version value + keyVersionSize = 1 + // keyIdSize is the length in bytes of the key identifier value. + keyIdSize = 8 + // timestampSize is the length in bytes of encoded timestamps. + timestampSize = 4 + // fingerprintSizeV6 is the length in bytes of the key fingerprint in v6. + fingerprintSizeV6 = 32 + // fingerprintSize is the length in bytes of the key fingerprint. + fingerprintSize = 20 +) diff --git a/vendor/github.com/ProtonMail/go-crypto/openpgp/packet/packet_sequence.go b/vendor/github.com/ProtonMail/go-crypto/openpgp/packet/packet_sequence.go new file mode 100644 index 0000000000..55a8a56c2d --- /dev/null +++ b/vendor/github.com/ProtonMail/go-crypto/openpgp/packet/packet_sequence.go @@ -0,0 +1,222 @@ +package packet + +// This file implements the pushdown automata (PDA) from PGPainless (Paul Schaub) +// to verify pgp packet sequences. See Paul's blogpost for more details: +// https://blog.jabberhead.tk/2022/10/26/implementing-packet-sequence-validation-using-pushdown-automata/ +import ( + "fmt" + + "github.com/ProtonMail/go-crypto/openpgp/errors" +) + +func NewErrMalformedMessage(from State, input InputSymbol, stackSymbol StackSymbol) errors.ErrMalformedMessage { + return errors.ErrMalformedMessage(fmt.Sprintf("state %d, input symbol %d, stack symbol %d ", from, input, stackSymbol)) +} + +// InputSymbol defines the input alphabet of the PDA +type InputSymbol uint8 + +const ( + LDSymbol InputSymbol = iota + SigSymbol + OPSSymbol + CompSymbol + ESKSymbol + EncSymbol + EOSSymbol + UnknownSymbol +) + +// StackSymbol defines the stack alphabet of the PDA +type StackSymbol int8 + +const ( + MsgStackSymbol StackSymbol = iota + OpsStackSymbol + KeyStackSymbol + EndStackSymbol + EmptyStackSymbol +) + +// State defines the states of the PDA +type State int8 + +const ( + OpenPGPMessage State = iota + ESKMessage + LiteralMessage + CompressedMessage + EncryptedMessage + ValidMessage +) + +// transition represents a state transition in the PDA +type transition func(input InputSymbol, stackSymbol StackSymbol) (State, []StackSymbol, bool, error) + +// SequenceVerifier is a pushdown automata to verify +// PGP messages packet sequences according to rfc4880. +type SequenceVerifier struct { + stack []StackSymbol + state State +} + +// Next performs a state transition with the given input symbol. +// If the transition fails a ErrMalformedMessage is returned. +func (sv *SequenceVerifier) Next(input InputSymbol) error { + for { + stackSymbol := sv.popStack() + transitionFunc := getTransition(sv.state) + nextState, newStackSymbols, redo, err := transitionFunc(input, stackSymbol) + if err != nil { + return err + } + if redo { + sv.pushStack(stackSymbol) + } + for _, newStackSymbol := range newStackSymbols { + sv.pushStack(newStackSymbol) + } + sv.state = nextState + if !redo { + break + } + } + return nil +} + +// Valid returns true if RDA is in a valid state. +func (sv *SequenceVerifier) Valid() bool { + return sv.state == ValidMessage && len(sv.stack) == 0 +} + +func (sv *SequenceVerifier) AssertValid() error { + if !sv.Valid() { + return errors.ErrMalformedMessage("invalid message") + } + return nil +} + +func NewSequenceVerifier() *SequenceVerifier { + return &SequenceVerifier{ + stack: []StackSymbol{EndStackSymbol, MsgStackSymbol}, + state: OpenPGPMessage, + } +} + +func (sv *SequenceVerifier) popStack() StackSymbol { + if len(sv.stack) == 0 { + return EmptyStackSymbol + } + elemIndex := len(sv.stack) - 1 + stackSymbol := sv.stack[elemIndex] + sv.stack = sv.stack[:elemIndex] + return stackSymbol +} + +func (sv *SequenceVerifier) pushStack(stackSymbol StackSymbol) { + sv.stack = append(sv.stack, stackSymbol) +} + +func getTransition(from State) transition { + switch from { + case OpenPGPMessage: + return fromOpenPGPMessage + case LiteralMessage: + return fromLiteralMessage + case CompressedMessage: + return fromCompressedMessage + case EncryptedMessage: + return fromEncryptedMessage + case ESKMessage: + return fromESKMessage + case ValidMessage: + return fromValidMessage + } + return nil +} + +// fromOpenPGPMessage is the transition for the state OpenPGPMessage. +func fromOpenPGPMessage(input InputSymbol, stackSymbol StackSymbol) (State, []StackSymbol, bool, error) { + if stackSymbol != MsgStackSymbol { + return 0, nil, false, NewErrMalformedMessage(OpenPGPMessage, input, stackSymbol) + } + switch input { + case LDSymbol: + return LiteralMessage, nil, false, nil + case SigSymbol: + return OpenPGPMessage, []StackSymbol{MsgStackSymbol}, false, nil + case OPSSymbol: + return OpenPGPMessage, []StackSymbol{OpsStackSymbol, MsgStackSymbol}, false, nil + case CompSymbol: + return CompressedMessage, nil, false, nil + case ESKSymbol: + return ESKMessage, []StackSymbol{KeyStackSymbol}, false, nil + case EncSymbol: + return EncryptedMessage, nil, false, nil + } + return 0, nil, false, NewErrMalformedMessage(OpenPGPMessage, input, stackSymbol) +} + +// fromESKMessage is the transition for the state ESKMessage. +func fromESKMessage(input InputSymbol, stackSymbol StackSymbol) (State, []StackSymbol, bool, error) { + if stackSymbol != KeyStackSymbol { + return 0, nil, false, NewErrMalformedMessage(ESKMessage, input, stackSymbol) + } + switch input { + case ESKSymbol: + return ESKMessage, []StackSymbol{KeyStackSymbol}, false, nil + case EncSymbol: + return EncryptedMessage, nil, false, nil + } + return 0, nil, false, NewErrMalformedMessage(ESKMessage, input, stackSymbol) +} + +// fromLiteralMessage is the transition for the state LiteralMessage. +func fromLiteralMessage(input InputSymbol, stackSymbol StackSymbol) (State, []StackSymbol, bool, error) { + switch input { + case SigSymbol: + if stackSymbol == OpsStackSymbol { + return LiteralMessage, nil, false, nil + } + case EOSSymbol: + if stackSymbol == EndStackSymbol { + return ValidMessage, nil, false, nil + } + } + return 0, nil, false, NewErrMalformedMessage(LiteralMessage, input, stackSymbol) +} + +// fromLiteralMessage is the transition for the state CompressedMessage. +func fromCompressedMessage(input InputSymbol, stackSymbol StackSymbol) (State, []StackSymbol, bool, error) { + switch input { + case SigSymbol: + if stackSymbol == OpsStackSymbol { + return CompressedMessage, nil, false, nil + } + case EOSSymbol: + if stackSymbol == EndStackSymbol { + return ValidMessage, nil, false, nil + } + } + return OpenPGPMessage, []StackSymbol{MsgStackSymbol}, true, nil +} + +// fromEncryptedMessage is the transition for the state EncryptedMessage. +func fromEncryptedMessage(input InputSymbol, stackSymbol StackSymbol) (State, []StackSymbol, bool, error) { + switch input { + case SigSymbol: + if stackSymbol == OpsStackSymbol { + return EncryptedMessage, nil, false, nil + } + case EOSSymbol: + if stackSymbol == EndStackSymbol { + return ValidMessage, nil, false, nil + } + } + return OpenPGPMessage, []StackSymbol{MsgStackSymbol}, true, nil +} + +// fromValidMessage is the transition for the state ValidMessage. +func fromValidMessage(input InputSymbol, stackSymbol StackSymbol) (State, []StackSymbol, bool, error) { + return 0, nil, false, NewErrMalformedMessage(ValidMessage, input, stackSymbol) +} diff --git a/vendor/github.com/ProtonMail/go-crypto/openpgp/packet/packet_unsupported.go b/vendor/github.com/ProtonMail/go-crypto/openpgp/packet/packet_unsupported.go new file mode 100644 index 0000000000..2d714723cf --- /dev/null +++ b/vendor/github.com/ProtonMail/go-crypto/openpgp/packet/packet_unsupported.go @@ -0,0 +1,24 @@ +package packet + +import ( + "io" + + "github.com/ProtonMail/go-crypto/openpgp/errors" +) + +// UnsupportedPackage represents a OpenPGP packet with a known packet type +// but with unsupported content. +type UnsupportedPacket struct { + IncompletePacket Packet + Error errors.UnsupportedError +} + +// Implements the Packet interface +func (up *UnsupportedPacket) parse(read io.Reader) error { + err := up.IncompletePacket.parse(read) + if castedErr, ok := err.(errors.UnsupportedError); ok { + up.Error = castedErr + return nil + } + return err +} diff --git a/vendor/github.com/ProtonMail/go-crypto/openpgp/packet/padding.go b/vendor/github.com/ProtonMail/go-crypto/openpgp/packet/padding.go new file mode 100644 index 0000000000..3b6a7045d1 --- /dev/null +++ b/vendor/github.com/ProtonMail/go-crypto/openpgp/packet/padding.go @@ -0,0 +1,26 @@ +package packet + +import ( + "io" +) + +// Padding type represents a Padding Packet (Tag 21). +// The padding type is represented by the length of its padding. +// see https://datatracker.ietf.org/doc/html/draft-ietf-openpgp-crypto-refresh#name-padding-packet-tag-21 +type Padding int + +// parse just ignores the padding content. +func (pad Padding) parse(reader io.Reader) error { + _, err := io.CopyN(io.Discard, reader, int64(pad)) + return err +} + +// SerializePadding writes the padding to writer. +func (pad Padding) SerializePadding(writer io.Writer, rand io.Reader) error { + err := serializeHeader(writer, packetPadding, int(pad)) + if err != nil { + return err + } + _, err = io.CopyN(writer, rand, int64(pad)) + return err +} diff --git a/vendor/github.com/ProtonMail/go-crypto/openpgp/packet/private_key.go b/vendor/github.com/ProtonMail/go-crypto/openpgp/packet/private_key.go index 2fc4386437..f04e6c6b87 100644 --- a/vendor/github.com/ProtonMail/go-crypto/openpgp/packet/private_key.go +++ b/vendor/github.com/ProtonMail/go-crypto/openpgp/packet/private_key.go @@ -9,22 +9,28 @@ import ( "crypto" "crypto/cipher" "crypto/dsa" - "crypto/rand" "crypto/rsa" "crypto/sha1" + "crypto/sha256" + "crypto/subtle" + "fmt" "io" - "io/ioutil" "math/big" "strconv" "time" "github.com/ProtonMail/go-crypto/openpgp/ecdh" "github.com/ProtonMail/go-crypto/openpgp/ecdsa" + "github.com/ProtonMail/go-crypto/openpgp/ed25519" + "github.com/ProtonMail/go-crypto/openpgp/ed448" "github.com/ProtonMail/go-crypto/openpgp/eddsa" "github.com/ProtonMail/go-crypto/openpgp/elgamal" "github.com/ProtonMail/go-crypto/openpgp/errors" "github.com/ProtonMail/go-crypto/openpgp/internal/encoding" "github.com/ProtonMail/go-crypto/openpgp/s2k" + "github.com/ProtonMail/go-crypto/openpgp/x25519" + "github.com/ProtonMail/go-crypto/openpgp/x448" + "golang.org/x/crypto/hkdf" ) // PrivateKey represents a possibly encrypted private key. See RFC 4880, @@ -35,14 +41,14 @@ type PrivateKey struct { encryptedData []byte cipher CipherFunction s2k func(out, in []byte) - // An *{rsa|dsa|elgamal|ecdh|ecdsa|ed25519}.PrivateKey or + aead AEADMode // only relevant if S2KAEAD is enabled + // An *{rsa|dsa|elgamal|ecdh|ecdsa|ed25519|ed448}.PrivateKey or // crypto.Signer/crypto.Decrypter (Decryptor RSA only). - PrivateKey interface{} - sha1Checksum bool - iv []byte + PrivateKey interface{} + iv []byte // Type of encryption of the S2K packet - // Allowed values are 0 (Not encrypted), 254 (SHA1), or + // Allowed values are 0 (Not encrypted), 253 (AEAD), 254 (SHA1), or // 255 (2-byte checksum) s2kType S2KType // Full parameters of the S2K packet @@ -55,6 +61,8 @@ type S2KType uint8 const ( // S2KNON unencrypt S2KNON S2KType = 0 + // S2KAEAD use authenticated encryption + S2KAEAD S2KType = 253 // S2KSHA1 sha1 sum check S2KSHA1 S2KType = 254 // S2KCHECKSUM sum check @@ -103,6 +111,34 @@ func NewECDHPrivateKey(creationTime time.Time, priv *ecdh.PrivateKey) *PrivateKe return pk } +func NewX25519PrivateKey(creationTime time.Time, priv *x25519.PrivateKey) *PrivateKey { + pk := new(PrivateKey) + pk.PublicKey = *NewX25519PublicKey(creationTime, &priv.PublicKey) + pk.PrivateKey = priv + return pk +} + +func NewX448PrivateKey(creationTime time.Time, priv *x448.PrivateKey) *PrivateKey { + pk := new(PrivateKey) + pk.PublicKey = *NewX448PublicKey(creationTime, &priv.PublicKey) + pk.PrivateKey = priv + return pk +} + +func NewEd25519PrivateKey(creationTime time.Time, priv *ed25519.PrivateKey) *PrivateKey { + pk := new(PrivateKey) + pk.PublicKey = *NewEd25519PublicKey(creationTime, &priv.PublicKey) + pk.PrivateKey = priv + return pk +} + +func NewEd448PrivateKey(creationTime time.Time, priv *ed448.PrivateKey) *PrivateKey { + pk := new(PrivateKey) + pk.PublicKey = *NewEd448PublicKey(creationTime, &priv.PublicKey) + pk.PrivateKey = priv + return pk +} + // NewSignerPrivateKey creates a PrivateKey from a crypto.Signer that // implements RSA, ECDSA or EdDSA. func NewSignerPrivateKey(creationTime time.Time, signer interface{}) *PrivateKey { @@ -122,6 +158,14 @@ func NewSignerPrivateKey(creationTime time.Time, signer interface{}) *PrivateKey pk.PublicKey = *NewEdDSAPublicKey(creationTime, &pubkey.PublicKey) case eddsa.PrivateKey: pk.PublicKey = *NewEdDSAPublicKey(creationTime, &pubkey.PublicKey) + case *ed25519.PrivateKey: + pk.PublicKey = *NewEd25519PublicKey(creationTime, &pubkey.PublicKey) + case ed25519.PrivateKey: + pk.PublicKey = *NewEd25519PublicKey(creationTime, &pubkey.PublicKey) + case *ed448.PrivateKey: + pk.PublicKey = *NewEd448PublicKey(creationTime, &pubkey.PublicKey) + case ed448.PrivateKey: + pk.PublicKey = *NewEd448PublicKey(creationTime, &pubkey.PublicKey) default: panic("openpgp: unknown signer type in NewSignerPrivateKey") } @@ -129,7 +173,7 @@ func NewSignerPrivateKey(creationTime time.Time, signer interface{}) *PrivateKey return pk } -// NewDecrypterPrivateKey creates a PrivateKey from a *{rsa|elgamal|ecdh}.PrivateKey. +// NewDecrypterPrivateKey creates a PrivateKey from a *{rsa|elgamal|ecdh|x25519|x448}.PrivateKey. func NewDecrypterPrivateKey(creationTime time.Time, decrypter interface{}) *PrivateKey { pk := new(PrivateKey) switch priv := decrypter.(type) { @@ -139,6 +183,10 @@ func NewDecrypterPrivateKey(creationTime time.Time, decrypter interface{}) *Priv pk.PublicKey = *NewElGamalPublicKey(creationTime, &priv.PublicKey) case *ecdh.PrivateKey: pk.PublicKey = *NewECDHPublicKey(creationTime, &priv.PublicKey) + case *x25519.PrivateKey: + pk.PublicKey = *NewX25519PublicKey(creationTime, &priv.PublicKey) + case *x448.PrivateKey: + pk.PublicKey = *NewX448PublicKey(creationTime, &priv.PublicKey) default: panic("openpgp: unknown decrypter type in NewDecrypterPrivateKey") } @@ -152,6 +200,11 @@ func (pk *PrivateKey) parse(r io.Reader) (err error) { return } v5 := pk.PublicKey.Version == 5 + v6 := pk.PublicKey.Version == 6 + + if V5Disabled && v5 { + return errors.UnsupportedError("support for parsing v5 entities is disabled; build with `-tags v5` if needed") + } var buf [1]byte _, err = readFull(r, buf[:]) @@ -160,7 +213,7 @@ func (pk *PrivateKey) parse(r io.Reader) (err error) { } pk.s2kType = S2KType(buf[0]) var optCount [1]byte - if v5 { + if v5 || (v6 && pk.s2kType != S2KNON) { if _, err = readFull(r, optCount[:]); err != nil { return } @@ -170,9 +223,9 @@ func (pk *PrivateKey) parse(r io.Reader) (err error) { case S2KNON: pk.s2k = nil pk.Encrypted = false - case S2KSHA1, S2KCHECKSUM: - if v5 && pk.s2kType == S2KCHECKSUM { - return errors.StructuralError("wrong s2k identifier for version 5") + case S2KSHA1, S2KCHECKSUM, S2KAEAD: + if (v5 || v6) && pk.s2kType == S2KCHECKSUM { + return errors.StructuralError(fmt.Sprintf("wrong s2k identifier for version %d", pk.Version)) } _, err = readFull(r, buf[:]) if err != nil { @@ -182,6 +235,29 @@ func (pk *PrivateKey) parse(r io.Reader) (err error) { if pk.cipher != 0 && !pk.cipher.IsSupported() { return errors.UnsupportedError("unsupported cipher function in private key") } + // [Optional] If string-to-key usage octet was 253, + // a one-octet AEAD algorithm. + if pk.s2kType == S2KAEAD { + _, err = readFull(r, buf[:]) + if err != nil { + return + } + pk.aead = AEADMode(buf[0]) + if !pk.aead.IsSupported() { + return errors.UnsupportedError("unsupported aead mode in private key") + } + } + + // [Optional] Only for a version 6 packet, + // and if string-to-key usage octet was 255, 254, or 253, + // an one-octet count of the following field. + if v6 { + _, err = readFull(r, buf[:]) + if err != nil { + return + } + } + pk.s2kParams, err = s2k.ParseIntoParams(r) if err != nil { return @@ -189,28 +265,43 @@ func (pk *PrivateKey) parse(r io.Reader) (err error) { if pk.s2kParams.Dummy() { return } + if pk.s2kParams.Mode() == s2k.Argon2S2K && pk.s2kType != S2KAEAD { + return errors.StructuralError("using Argon2 S2K without AEAD is not allowed") + } + if pk.s2kParams.Mode() == s2k.SimpleS2K && pk.Version == 6 { + return errors.StructuralError("using Simple S2K with version 6 keys is not allowed") + } pk.s2k, err = pk.s2kParams.Function() if err != nil { return } pk.Encrypted = true - if pk.s2kType == S2KSHA1 { - pk.sha1Checksum = true - } default: return errors.UnsupportedError("deprecated s2k function in private key") } if pk.Encrypted { - blockSize := pk.cipher.blockSize() - if blockSize == 0 { + var ivSize int + // If the S2K usage octet was 253, the IV is of the size expected by the AEAD mode, + // unless it's a version 5 key, in which case it's the size of the symmetric cipher's block size. + // For all other S2K modes, it's always the block size. + if !v5 && pk.s2kType == S2KAEAD { + ivSize = pk.aead.IvLength() + } else { + ivSize = pk.cipher.blockSize() + } + + if ivSize == 0 { return errors.UnsupportedError("unsupported cipher in private key: " + strconv.Itoa(int(pk.cipher))) } - pk.iv = make([]byte, blockSize) + pk.iv = make([]byte, ivSize) _, err = readFull(r, pk.iv) if err != nil { return } + if v5 && pk.s2kType == S2KAEAD { + pk.iv = pk.iv[:pk.aead.IvLength()] + } } var privateKeyData []byte @@ -230,7 +321,7 @@ func (pk *PrivateKey) parse(r io.Reader) (err error) { return } } else { - privateKeyData, err = ioutil.ReadAll(r) + privateKeyData, err = io.ReadAll(r) if err != nil { return } @@ -239,16 +330,22 @@ func (pk *PrivateKey) parse(r io.Reader) (err error) { if len(privateKeyData) < 2 { return errors.StructuralError("truncated private key data") } - var sum uint16 - for i := 0; i < len(privateKeyData)-2; i++ { - sum += uint16(privateKeyData[i]) - } - if privateKeyData[len(privateKeyData)-2] != uint8(sum>>8) || - privateKeyData[len(privateKeyData)-1] != uint8(sum) { - return errors.StructuralError("private key checksum failure") + if pk.Version != 6 { + // checksum + var sum uint16 + for i := 0; i < len(privateKeyData)-2; i++ { + sum += uint16(privateKeyData[i]) + } + if privateKeyData[len(privateKeyData)-2] != uint8(sum>>8) || + privateKeyData[len(privateKeyData)-1] != uint8(sum) { + return errors.StructuralError("private key checksum failure") + } + privateKeyData = privateKeyData[:len(privateKeyData)-2] + return pk.parsePrivateKey(privateKeyData) + } else { + // No checksum + return pk.parsePrivateKey(privateKeyData) } - privateKeyData = privateKeyData[:len(privateKeyData)-2] - return pk.parsePrivateKey(privateKeyData) } pk.encryptedData = privateKeyData @@ -280,18 +377,59 @@ func (pk *PrivateKey) Serialize(w io.Writer) (err error) { optional := bytes.NewBuffer(nil) if pk.Encrypted || pk.Dummy() { - optional.Write([]byte{uint8(pk.cipher)}) - if err := pk.s2kParams.Serialize(optional); err != nil { + // [Optional] If string-to-key usage octet was 255, 254, or 253, + // a one-octet symmetric encryption algorithm. + if _, err = optional.Write([]byte{uint8(pk.cipher)}); err != nil { + return + } + // [Optional] If string-to-key usage octet was 253, + // a one-octet AEAD algorithm. + if pk.s2kType == S2KAEAD { + if _, err = optional.Write([]byte{uint8(pk.aead)}); err != nil { + return + } + } + + s2kBuffer := bytes.NewBuffer(nil) + if err := pk.s2kParams.Serialize(s2kBuffer); err != nil { return err } + // [Optional] Only for a version 6 packet, and if string-to-key + // usage octet was 255, 254, or 253, an one-octet + // count of the following field. + if pk.Version == 6 { + if _, err = optional.Write([]byte{uint8(s2kBuffer.Len())}); err != nil { + return + } + } + // [Optional] If string-to-key usage octet was 255, 254, or 253, + // a string-to-key (S2K) specifier. The length of the string-to-key specifier + // depends on its type + if _, err = io.Copy(optional, s2kBuffer); err != nil { + return + } + + // IV if pk.Encrypted { - optional.Write(pk.iv) + if _, err = optional.Write(pk.iv); err != nil { + return + } + if pk.Version == 5 && pk.s2kType == S2KAEAD { + // Add padding for version 5 + padding := make([]byte, pk.cipher.blockSize()-len(pk.iv)) + if _, err = optional.Write(padding); err != nil { + return + } + } } } - if pk.Version == 5 { + if pk.Version == 5 || (pk.Version == 6 && pk.s2kType != S2KNON) { contents.Write([]byte{uint8(optional.Len())}) } - io.Copy(contents, optional) + + if _, err := io.Copy(contents, optional); err != nil { + return err + } if !pk.Dummy() { l := 0 @@ -303,8 +441,10 @@ func (pk *PrivateKey) Serialize(w io.Writer) (err error) { return err } l = buf.Len() - checksum := mod64kHash(buf.Bytes()) - buf.Write([]byte{byte(checksum >> 8), byte(checksum)}) + if pk.Version != 6 { + checksum := mod64kHash(buf.Bytes()) + buf.Write([]byte{byte(checksum >> 8), byte(checksum)}) + } priv = buf.Bytes() } else { priv, l = pk.encryptedData, len(pk.encryptedData) @@ -370,6 +510,26 @@ func serializeECDHPrivateKey(w io.Writer, priv *ecdh.PrivateKey) error { return err } +func serializeX25519PrivateKey(w io.Writer, priv *x25519.PrivateKey) error { + _, err := w.Write(priv.Secret) + return err +} + +func serializeX448PrivateKey(w io.Writer, priv *x448.PrivateKey) error { + _, err := w.Write(priv.Secret) + return err +} + +func serializeEd25519PrivateKey(w io.Writer, priv *ed25519.PrivateKey) error { + _, err := w.Write(priv.MarshalByteSecret()) + return err +} + +func serializeEd448PrivateKey(w io.Writer, priv *ed448.PrivateKey) error { + _, err := w.Write(priv.MarshalByteSecret()) + return err +} + // decrypt decrypts an encrypted private key using a decryption key. func (pk *PrivateKey) decrypt(decryptionKey []byte) error { if pk.Dummy() { @@ -378,37 +538,51 @@ func (pk *PrivateKey) decrypt(decryptionKey []byte) error { if !pk.Encrypted { return nil } - block := pk.cipher.new(decryptionKey) - cfb := cipher.NewCFBDecrypter(block, pk.iv) - - data := make([]byte, len(pk.encryptedData)) - cfb.XORKeyStream(data, pk.encryptedData) - - if pk.sha1Checksum { - if len(data) < sha1.Size { - return errors.StructuralError("truncated private key data") - } - h := sha1.New() - h.Write(data[:len(data)-sha1.Size]) - sum := h.Sum(nil) - if !bytes.Equal(sum, data[len(data)-sha1.Size:]) { - return errors.StructuralError("private key checksum failure") - } - data = data[:len(data)-sha1.Size] - } else { - if len(data) < 2 { - return errors.StructuralError("truncated private key data") + var data []byte + switch pk.s2kType { + case S2KAEAD: + aead := pk.aead.new(block) + additionalData, err := pk.additionalData() + if err != nil { + return err } - var sum uint16 - for i := 0; i < len(data)-2; i++ { - sum += uint16(data[i]) + // Decrypt the encrypted key material with aead + data, err = aead.Open(nil, pk.iv, pk.encryptedData, additionalData) + if err != nil { + return err } - if data[len(data)-2] != uint8(sum>>8) || - data[len(data)-1] != uint8(sum) { - return errors.StructuralError("private key checksum failure") + case S2KSHA1, S2KCHECKSUM: + cfb := cipher.NewCFBDecrypter(block, pk.iv) + data = make([]byte, len(pk.encryptedData)) + cfb.XORKeyStream(data, pk.encryptedData) + if pk.s2kType == S2KSHA1 { + if len(data) < sha1.Size { + return errors.StructuralError("truncated private key data") + } + h := sha1.New() + h.Write(data[:len(data)-sha1.Size]) + sum := h.Sum(nil) + if !bytes.Equal(sum, data[len(data)-sha1.Size:]) { + return errors.StructuralError("private key checksum failure") + } + data = data[:len(data)-sha1.Size] + } else { + if len(data) < 2 { + return errors.StructuralError("truncated private key data") + } + var sum uint16 + for i := 0; i < len(data)-2; i++ { + sum += uint16(data[i]) + } + if data[len(data)-2] != uint8(sum>>8) || + data[len(data)-1] != uint8(sum) { + return errors.StructuralError("private key checksum failure") + } + data = data[:len(data)-2] } - data = data[:len(data)-2] + default: + return errors.InvalidArgumentError("invalid s2k type") } err := pk.parsePrivateKey(data) @@ -424,7 +598,6 @@ func (pk *PrivateKey) decrypt(decryptionKey []byte) error { pk.s2k = nil pk.Encrypted = false pk.encryptedData = nil - return nil } @@ -440,6 +613,9 @@ func (pk *PrivateKey) decryptWithCache(passphrase []byte, keyCache *s2k.Cache) e if err != nil { return err } + if pk.s2kType == S2KAEAD { + key = pk.applyHKDF(key) + } return pk.decrypt(key) } @@ -454,11 +630,14 @@ func (pk *PrivateKey) Decrypt(passphrase []byte) error { key := make([]byte, pk.cipher.KeySize()) pk.s2k(key, passphrase) + if pk.s2kType == S2KAEAD { + key = pk.applyHKDF(key) + } return pk.decrypt(key) } // DecryptPrivateKeys decrypts all encrypted keys with the given config and passphrase. -// Avoids recomputation of similar s2k key derivations. +// Avoids recomputation of similar s2k key derivations. func DecryptPrivateKeys(keys []*PrivateKey, passphrase []byte) error { // Create a cache to avoid recomputation of key derviations for the same passphrase. s2kCache := &s2k.Cache{} @@ -474,7 +653,7 @@ func DecryptPrivateKeys(keys []*PrivateKey, passphrase []byte) error { } // encrypt encrypts an unencrypted private key. -func (pk *PrivateKey) encrypt(key []byte, params *s2k.Params, cipherFunction CipherFunction) error { +func (pk *PrivateKey) encrypt(key []byte, params *s2k.Params, s2kType S2KType, cipherFunction CipherFunction, rand io.Reader) error { if pk.Dummy() { return errors.ErrDummyPrivateKey("dummy key found") } @@ -485,7 +664,15 @@ func (pk *PrivateKey) encrypt(key []byte, params *s2k.Params, cipherFunction Cip if len(key) != cipherFunction.KeySize() { return errors.InvalidArgumentError("supplied encryption key has the wrong size") } - + + if params.Mode() == s2k.Argon2S2K && s2kType != S2KAEAD { + return errors.InvalidArgumentError("using Argon2 S2K without AEAD is not allowed") + } + if params.Mode() != s2k.Argon2S2K && params.Mode() != s2k.IteratedSaltedS2K && + params.Mode() != s2k.SaltedS2K { // only allowed for high-entropy passphrases + return errors.InvalidArgumentError("insecure S2K mode") + } + priv := bytes.NewBuffer(nil) err := pk.serializePrivateKey(priv) if err != nil { @@ -497,35 +684,53 @@ func (pk *PrivateKey) encrypt(key []byte, params *s2k.Params, cipherFunction Cip pk.s2k, err = pk.s2kParams.Function() if err != nil { return err - } + } privateKeyBytes := priv.Bytes() - pk.sha1Checksum = true + pk.s2kType = s2kType block := pk.cipher.new(key) - pk.iv = make([]byte, pk.cipher.blockSize()) - _, err = rand.Read(pk.iv) - if err != nil { - return err - } - cfb := cipher.NewCFBEncrypter(block, pk.iv) - - if pk.sha1Checksum { - pk.s2kType = S2KSHA1 - h := sha1.New() - h.Write(privateKeyBytes) - sum := h.Sum(nil) - privateKeyBytes = append(privateKeyBytes, sum...) - } else { - pk.s2kType = S2KCHECKSUM - var sum uint16 - for _, b := range privateKeyBytes { - sum += uint16(b) + switch s2kType { + case S2KAEAD: + if pk.aead == 0 { + return errors.StructuralError("aead mode is not set on key") } - priv.Write([]byte{uint8(sum >> 8), uint8(sum)}) + aead := pk.aead.new(block) + additionalData, err := pk.additionalData() + if err != nil { + return err + } + pk.iv = make([]byte, aead.NonceSize()) + _, err = io.ReadFull(rand, pk.iv) + if err != nil { + return err + } + // Decrypt the encrypted key material with aead + pk.encryptedData = aead.Seal(nil, pk.iv, privateKeyBytes, additionalData) + case S2KSHA1, S2KCHECKSUM: + pk.iv = make([]byte, pk.cipher.blockSize()) + _, err = io.ReadFull(rand, pk.iv) + if err != nil { + return err + } + cfb := cipher.NewCFBEncrypter(block, pk.iv) + if s2kType == S2KSHA1 { + h := sha1.New() + h.Write(privateKeyBytes) + sum := h.Sum(nil) + privateKeyBytes = append(privateKeyBytes, sum...) + } else { + var sum uint16 + for _, b := range privateKeyBytes { + sum += uint16(b) + } + privateKeyBytes = append(privateKeyBytes, []byte{uint8(sum >> 8), uint8(sum)}...) + } + pk.encryptedData = make([]byte, len(privateKeyBytes)) + cfb.XORKeyStream(pk.encryptedData, privateKeyBytes) + default: + return errors.InvalidArgumentError("invalid s2k type for encryption") } - pk.encryptedData = make([]byte, len(privateKeyBytes)) - cfb.XORKeyStream(pk.encryptedData, privateKeyBytes) pk.Encrypted = true pk.PrivateKey = nil return err @@ -544,8 +749,15 @@ func (pk *PrivateKey) EncryptWithConfig(passphrase []byte, config *Config) error return err } s2k(key, passphrase) + s2kType := S2KSHA1 + if config.AEAD() != nil { + s2kType = S2KAEAD + pk.aead = config.AEAD().Mode() + pk.cipher = config.Cipher() + key = pk.applyHKDF(key) + } // Encrypt the private key with the derived encryption key. - return pk.encrypt(key, params, config.Cipher()) + return pk.encrypt(key, params, s2kType, config.Cipher(), config.Random()) } // EncryptPrivateKeys encrypts all unencrypted keys with the given config and passphrase. @@ -564,7 +776,16 @@ func EncryptPrivateKeys(keys []*PrivateKey, passphrase []byte, config *Config) e s2k(encryptionKey, passphrase) for _, key := range keys { if key != nil && !key.Dummy() && !key.Encrypted { - err = key.encrypt(encryptionKey, params, config.Cipher()) + s2kType := S2KSHA1 + if config.AEAD() != nil { + s2kType = S2KAEAD + key.aead = config.AEAD().Mode() + key.cipher = config.Cipher() + derivedKey := key.applyHKDF(encryptionKey) + err = key.encrypt(derivedKey, params, s2kType, config.Cipher(), config.Random()) + } else { + err = key.encrypt(encryptionKey, params, s2kType, config.Cipher(), config.Random()) + } if err != nil { return err } @@ -581,7 +802,7 @@ func (pk *PrivateKey) Encrypt(passphrase []byte) error { S2KMode: s2k.IteratedSaltedS2K, S2KCount: 65536, Hash: crypto.SHA256, - } , + }, DefaultCipher: CipherAES256, } return pk.EncryptWithConfig(passphrase, config) @@ -601,6 +822,14 @@ func (pk *PrivateKey) serializePrivateKey(w io.Writer) (err error) { err = serializeEdDSAPrivateKey(w, priv) case *ecdh.PrivateKey: err = serializeECDHPrivateKey(w, priv) + case *x25519.PrivateKey: + err = serializeX25519PrivateKey(w, priv) + case *x448.PrivateKey: + err = serializeX448PrivateKey(w, priv) + case *ed25519.PrivateKey: + err = serializeEd25519PrivateKey(w, priv) + case *ed448.PrivateKey: + err = serializeEd448PrivateKey(w, priv) default: err = errors.InvalidArgumentError("unknown private key type") } @@ -621,8 +850,18 @@ func (pk *PrivateKey) parsePrivateKey(data []byte) (err error) { return pk.parseECDHPrivateKey(data) case PubKeyAlgoEdDSA: return pk.parseEdDSAPrivateKey(data) + case PubKeyAlgoX25519: + return pk.parseX25519PrivateKey(data) + case PubKeyAlgoX448: + return pk.parseX448PrivateKey(data) + case PubKeyAlgoEd25519: + return pk.parseEd25519PrivateKey(data) + case PubKeyAlgoEd448: + return pk.parseEd448PrivateKey(data) + default: + err = errors.StructuralError("unknown private key type") + return } - panic("impossible") } func (pk *PrivateKey) parseRSAPrivateKey(data []byte) (err error) { @@ -743,6 +982,86 @@ func (pk *PrivateKey) parseECDHPrivateKey(data []byte) (err error) { return nil } +func (pk *PrivateKey) parseX25519PrivateKey(data []byte) (err error) { + publicKey := pk.PublicKey.PublicKey.(*x25519.PublicKey) + privateKey := x25519.NewPrivateKey(*publicKey) + privateKey.PublicKey = *publicKey + + privateKey.Secret = make([]byte, x25519.KeySize) + + if len(data) != x25519.KeySize { + err = errors.StructuralError("wrong x25519 key size") + return err + } + subtle.ConstantTimeCopy(1, privateKey.Secret, data) + if err = x25519.Validate(privateKey); err != nil { + return err + } + pk.PrivateKey = privateKey + return nil +} + +func (pk *PrivateKey) parseX448PrivateKey(data []byte) (err error) { + publicKey := pk.PublicKey.PublicKey.(*x448.PublicKey) + privateKey := x448.NewPrivateKey(*publicKey) + privateKey.PublicKey = *publicKey + + privateKey.Secret = make([]byte, x448.KeySize) + + if len(data) != x448.KeySize { + err = errors.StructuralError("wrong x448 key size") + return err + } + subtle.ConstantTimeCopy(1, privateKey.Secret, data) + if err = x448.Validate(privateKey); err != nil { + return err + } + pk.PrivateKey = privateKey + return nil +} + +func (pk *PrivateKey) parseEd25519PrivateKey(data []byte) (err error) { + publicKey := pk.PublicKey.PublicKey.(*ed25519.PublicKey) + privateKey := ed25519.NewPrivateKey(*publicKey) + privateKey.PublicKey = *publicKey + + if len(data) != ed25519.SeedSize { + err = errors.StructuralError("wrong ed25519 key size") + return err + } + err = privateKey.UnmarshalByteSecret(data) + if err != nil { + return err + } + err = ed25519.Validate(privateKey) + if err != nil { + return err + } + pk.PrivateKey = privateKey + return nil +} + +func (pk *PrivateKey) parseEd448PrivateKey(data []byte) (err error) { + publicKey := pk.PublicKey.PublicKey.(*ed448.PublicKey) + privateKey := ed448.NewPrivateKey(*publicKey) + privateKey.PublicKey = *publicKey + + if len(data) != ed448.SeedSize { + err = errors.StructuralError("wrong ed448 key size") + return err + } + err = privateKey.UnmarshalByteSecret(data) + if err != nil { + return err + } + err = ed448.Validate(privateKey) + if err != nil { + return err + } + pk.PrivateKey = privateKey + return nil +} + func (pk *PrivateKey) parseEdDSAPrivateKey(data []byte) (err error) { eddsaPub := pk.PublicKey.PublicKey.(*eddsa.PublicKey) eddsaPriv := eddsa.NewPrivateKey(*eddsaPub) @@ -767,6 +1086,41 @@ func (pk *PrivateKey) parseEdDSAPrivateKey(data []byte) (err error) { return nil } +func (pk *PrivateKey) additionalData() ([]byte, error) { + additionalData := bytes.NewBuffer(nil) + // Write additional data prefix based on packet type + var packetByte byte + if pk.PublicKey.IsSubkey { + packetByte = 0xc7 + } else { + packetByte = 0xc5 + } + // Write public key to additional data + _, err := additionalData.Write([]byte{packetByte}) + if err != nil { + return nil, err + } + err = pk.PublicKey.serializeWithoutHeaders(additionalData) + if err != nil { + return nil, err + } + return additionalData.Bytes(), nil +} + +func (pk *PrivateKey) applyHKDF(inputKey []byte) []byte { + var packetByte byte + if pk.PublicKey.IsSubkey { + packetByte = 0xc7 + } else { + packetByte = 0xc5 + } + associatedData := []byte{packetByte, byte(pk.Version), byte(pk.cipher), byte(pk.aead)} + hkdfReader := hkdf.New(sha256.New, inputKey, []byte{}, associatedData) + encryptionKey := make([]byte, pk.cipher.KeySize()) + _, _ = readFull(hkdfReader, encryptionKey) + return encryptionKey +} + func validateDSAParameters(priv *dsa.PrivateKey) error { p := priv.P // group prime q := priv.Q // subgroup order diff --git a/vendor/github.com/ProtonMail/go-crypto/openpgp/packet/public_key.go b/vendor/github.com/ProtonMail/go-crypto/openpgp/packet/public_key.go index 3402b8c140..f8da781bbe 100644 --- a/vendor/github.com/ProtonMail/go-crypto/openpgp/packet/public_key.go +++ b/vendor/github.com/ProtonMail/go-crypto/openpgp/packet/public_key.go @@ -5,7 +5,6 @@ package packet import ( - "crypto" "crypto/dsa" "crypto/rsa" "crypto/sha1" @@ -21,23 +20,24 @@ import ( "github.com/ProtonMail/go-crypto/openpgp/ecdh" "github.com/ProtonMail/go-crypto/openpgp/ecdsa" + "github.com/ProtonMail/go-crypto/openpgp/ed25519" + "github.com/ProtonMail/go-crypto/openpgp/ed448" "github.com/ProtonMail/go-crypto/openpgp/eddsa" "github.com/ProtonMail/go-crypto/openpgp/elgamal" "github.com/ProtonMail/go-crypto/openpgp/errors" "github.com/ProtonMail/go-crypto/openpgp/internal/algorithm" "github.com/ProtonMail/go-crypto/openpgp/internal/ecc" "github.com/ProtonMail/go-crypto/openpgp/internal/encoding" + "github.com/ProtonMail/go-crypto/openpgp/x25519" + "github.com/ProtonMail/go-crypto/openpgp/x448" ) -type kdfHashFunction byte -type kdfAlgorithm byte - // PublicKey represents an OpenPGP public key. See RFC 4880, section 5.5.2. type PublicKey struct { Version int CreationTime time.Time PubKeyAlgo PublicKeyAlgorithm - PublicKey interface{} // *rsa.PublicKey, *dsa.PublicKey, *ecdsa.PublicKey or *eddsa.PublicKey + PublicKey interface{} // *rsa.PublicKey, *dsa.PublicKey, *ecdsa.PublicKey or *eddsa.PublicKey, *x25519.PublicKey, *x448.PublicKey, *ed25519.PublicKey, *ed448.PublicKey Fingerprint []byte KeyId uint64 IsSubkey bool @@ -61,11 +61,19 @@ func (pk *PublicKey) UpgradeToV5() { pk.setFingerprintAndKeyId() } +// UpgradeToV6 updates the version of the key to v6, and updates all necessary +// fields. +func (pk *PublicKey) UpgradeToV6() error { + pk.Version = 6 + pk.setFingerprintAndKeyId() + return pk.checkV6Compatibility() +} + // signingKey provides a convenient abstraction over signature verification // for v3 and v4 public keys. type signingKey interface { SerializeForHash(io.Writer) error - SerializeSignaturePrefix(io.Writer) + SerializeSignaturePrefix(io.Writer) error serializeWithoutHeaders(io.Writer) error } @@ -174,6 +182,54 @@ func NewEdDSAPublicKey(creationTime time.Time, pub *eddsa.PublicKey) *PublicKey return pk } +func NewX25519PublicKey(creationTime time.Time, pub *x25519.PublicKey) *PublicKey { + pk := &PublicKey{ + Version: 4, + CreationTime: creationTime, + PubKeyAlgo: PubKeyAlgoX25519, + PublicKey: pub, + } + + pk.setFingerprintAndKeyId() + return pk +} + +func NewX448PublicKey(creationTime time.Time, pub *x448.PublicKey) *PublicKey { + pk := &PublicKey{ + Version: 4, + CreationTime: creationTime, + PubKeyAlgo: PubKeyAlgoX448, + PublicKey: pub, + } + + pk.setFingerprintAndKeyId() + return pk +} + +func NewEd25519PublicKey(creationTime time.Time, pub *ed25519.PublicKey) *PublicKey { + pk := &PublicKey{ + Version: 4, + CreationTime: creationTime, + PubKeyAlgo: PubKeyAlgoEd25519, + PublicKey: pub, + } + + pk.setFingerprintAndKeyId() + return pk +} + +func NewEd448PublicKey(creationTime time.Time, pub *ed448.PublicKey) *PublicKey { + pk := &PublicKey{ + Version: 4, + CreationTime: creationTime, + PubKeyAlgo: PubKeyAlgoEd448, + PublicKey: pub, + } + + pk.setFingerprintAndKeyId() + return pk +} + func (pk *PublicKey) parse(r io.Reader) (err error) { // RFC 4880, section 5.5.2 var buf [6]byte @@ -181,12 +237,19 @@ func (pk *PublicKey) parse(r io.Reader) (err error) { if err != nil { return } - if buf[0] != 4 && buf[0] != 5 { + + pk.Version = int(buf[0]) + if pk.Version != 4 && pk.Version != 5 && pk.Version != 6 { return errors.UnsupportedError("public key version " + strconv.Itoa(int(buf[0]))) } - pk.Version = int(buf[0]) - if pk.Version == 5 { + if V5Disabled && pk.Version == 5 { + return errors.UnsupportedError("support for parsing v5 entities is disabled; build with `-tags v5` if needed") + } + + if pk.Version >= 5 { + // Read the four-octet scalar octet count + // The count is not used in this implementation var n [4]byte _, err = readFull(r, n[:]) if err != nil { @@ -195,6 +258,7 @@ func (pk *PublicKey) parse(r io.Reader) (err error) { } pk.CreationTime = time.Unix(int64(uint32(buf[1])<<24|uint32(buf[2])<<16|uint32(buf[3])<<8|uint32(buf[4])), 0) pk.PubKeyAlgo = PublicKeyAlgorithm(buf[5]) + // Ignore four-ocet length switch pk.PubKeyAlgo { case PubKeyAlgoRSA, PubKeyAlgoRSAEncryptOnly, PubKeyAlgoRSASignOnly: err = pk.parseRSA(r) @@ -208,6 +272,14 @@ func (pk *PublicKey) parse(r io.Reader) (err error) { err = pk.parseECDH(r) case PubKeyAlgoEdDSA: err = pk.parseEdDSA(r) + case PubKeyAlgoX25519: + err = pk.parseX25519(r) + case PubKeyAlgoX448: + err = pk.parseX448(r) + case PubKeyAlgoEd25519: + err = pk.parseEd25519(r) + case PubKeyAlgoEd448: + err = pk.parseEd448(r) default: err = errors.UnsupportedError("public key type: " + strconv.Itoa(int(pk.PubKeyAlgo))) } @@ -221,21 +293,44 @@ func (pk *PublicKey) parse(r io.Reader) (err error) { func (pk *PublicKey) setFingerprintAndKeyId() { // RFC 4880, section 12.2 - if pk.Version == 5 { + if pk.Version >= 5 { fingerprint := sha256.New() - pk.SerializeForHash(fingerprint) + if err := pk.SerializeForHash(fingerprint); err != nil { + // Should not happen for a hash. + panic(err) + } pk.Fingerprint = make([]byte, 32) copy(pk.Fingerprint, fingerprint.Sum(nil)) pk.KeyId = binary.BigEndian.Uint64(pk.Fingerprint[:8]) } else { fingerprint := sha1.New() - pk.SerializeForHash(fingerprint) + if err := pk.SerializeForHash(fingerprint); err != nil { + // Should not happen for a hash. + panic(err) + } pk.Fingerprint = make([]byte, 20) copy(pk.Fingerprint, fingerprint.Sum(nil)) pk.KeyId = binary.BigEndian.Uint64(pk.Fingerprint[12:20]) } } +func (pk *PublicKey) checkV6Compatibility() error { + // Implementations MUST NOT accept or generate version 6 key material using the deprecated OIDs. + switch pk.PubKeyAlgo { + case PubKeyAlgoECDH: + curveInfo := ecc.FindByOid(pk.oid) + if curveInfo == nil { + return errors.UnsupportedError(fmt.Sprintf("unknown oid: %x", pk.oid)) + } + if curveInfo.GenName == ecc.Curve25519GenName { + return errors.StructuralError("cannot generate v6 key with deprecated OID: Curve25519Legacy") + } + case PubKeyAlgoEdDSA: + return errors.StructuralError("cannot generate v6 key with deprecated algorithm: EdDSALegacy") + } + return nil +} + // parseRSA parses RSA public key material from the given Reader. See RFC 4880, // section 5.5.2. func (pk *PublicKey) parseRSA(r io.Reader) (err error) { @@ -324,16 +419,17 @@ func (pk *PublicKey) parseECDSA(r io.Reader) (err error) { if _, err = pk.oid.ReadFrom(r); err != nil { return } - pk.p = new(encoding.MPI) - if _, err = pk.p.ReadFrom(r); err != nil { - return - } curveInfo := ecc.FindByOid(pk.oid) if curveInfo == nil { return errors.UnsupportedError(fmt.Sprintf("unknown oid: %x", pk.oid)) } + pk.p = new(encoding.MPI) + if _, err = pk.p.ReadFrom(r); err != nil { + return + } + c, ok := curveInfo.Curve.(ecc.ECDSACurve) if !ok { return errors.UnsupportedError(fmt.Sprintf("unsupported oid: %x", pk.oid)) @@ -353,6 +449,17 @@ func (pk *PublicKey) parseECDH(r io.Reader) (err error) { if _, err = pk.oid.ReadFrom(r); err != nil { return } + + curveInfo := ecc.FindByOid(pk.oid) + if curveInfo == nil { + return errors.UnsupportedError(fmt.Sprintf("unknown oid: %x", pk.oid)) + } + + if pk.Version == 6 && curveInfo.GenName == ecc.Curve25519GenName { + // Implementations MUST NOT accept or generate version 6 key material using the deprecated OIDs. + return errors.StructuralError("cannot read v6 key with deprecated OID: Curve25519Legacy") + } + pk.p = new(encoding.MPI) if _, err = pk.p.ReadFrom(r); err != nil { return @@ -362,12 +469,6 @@ func (pk *PublicKey) parseECDH(r io.Reader) (err error) { return } - curveInfo := ecc.FindByOid(pk.oid) - - if curveInfo == nil { - return errors.UnsupportedError(fmt.Sprintf("unknown oid: %x", pk.oid)) - } - c, ok := curveInfo.Curve.(ecc.ECDHCurve) if !ok { return errors.UnsupportedError(fmt.Sprintf("unsupported oid: %x", pk.oid)) @@ -396,10 +497,16 @@ func (pk *PublicKey) parseECDH(r io.Reader) (err error) { } func (pk *PublicKey) parseEdDSA(r io.Reader) (err error) { + if pk.Version == 6 { + // Implementations MUST NOT accept or generate version 6 key material using the deprecated OIDs. + return errors.StructuralError("cannot generate v6 key with deprecated algorithm: EdDSALegacy") + } + pk.oid = new(encoding.OID) if _, err = pk.oid.ReadFrom(r); err != nil { return } + curveInfo := ecc.FindByOid(pk.oid) if curveInfo == nil { return errors.UnsupportedError(fmt.Sprintf("unknown oid: %x", pk.oid)) @@ -435,75 +542,145 @@ func (pk *PublicKey) parseEdDSA(r io.Reader) (err error) { return } +func (pk *PublicKey) parseX25519(r io.Reader) (err error) { + point := make([]byte, x25519.KeySize) + _, err = io.ReadFull(r, point) + if err != nil { + return + } + pub := &x25519.PublicKey{ + Point: point, + } + pk.PublicKey = pub + return +} + +func (pk *PublicKey) parseX448(r io.Reader) (err error) { + point := make([]byte, x448.KeySize) + _, err = io.ReadFull(r, point) + if err != nil { + return + } + pub := &x448.PublicKey{ + Point: point, + } + pk.PublicKey = pub + return +} + +func (pk *PublicKey) parseEd25519(r io.Reader) (err error) { + point := make([]byte, ed25519.PublicKeySize) + _, err = io.ReadFull(r, point) + if err != nil { + return + } + pub := &ed25519.PublicKey{ + Point: point, + } + pk.PublicKey = pub + return +} + +func (pk *PublicKey) parseEd448(r io.Reader) (err error) { + point := make([]byte, ed448.PublicKeySize) + _, err = io.ReadFull(r, point) + if err != nil { + return + } + pub := &ed448.PublicKey{ + Point: point, + } + pk.PublicKey = pub + return +} + // SerializeForHash serializes the PublicKey to w with the special packet // header format needed for hashing. func (pk *PublicKey) SerializeForHash(w io.Writer) error { - pk.SerializeSignaturePrefix(w) + if err := pk.SerializeSignaturePrefix(w); err != nil { + return err + } return pk.serializeWithoutHeaders(w) } // SerializeSignaturePrefix writes the prefix for this public key to the given Writer. // The prefix is used when calculating a signature over this public key. See // RFC 4880, section 5.2.4. -func (pk *PublicKey) SerializeSignaturePrefix(w io.Writer) { +func (pk *PublicKey) SerializeSignaturePrefix(w io.Writer) error { var pLength = pk.algorithmSpecificByteCount() - if pk.Version == 5 { - pLength += 10 // version, timestamp (4), algorithm, key octet count (4). - w.Write([]byte{ - 0x9A, + // version, timestamp, algorithm + pLength += versionSize + timestampSize + algorithmSize + if pk.Version >= 5 { + // key octet count (4). + pLength += 4 + _, err := w.Write([]byte{ + // When a v4 signature is made over a key, the hash data starts with the octet 0x99, followed by a two-octet length + // of the key, and then the body of the key packet. When a v6 signature is made over a key, the hash data starts + // with the salt, then octet 0x9B, followed by a four-octet length of the key, and then the body of the key packet. + 0x95 + byte(pk.Version), byte(pLength >> 24), byte(pLength >> 16), byte(pLength >> 8), byte(pLength), }) - return + return err } - pLength += 6 - w.Write([]byte{0x99, byte(pLength >> 8), byte(pLength)}) + if _, err := w.Write([]byte{0x99, byte(pLength >> 8), byte(pLength)}); err != nil { + return err + } + return nil } func (pk *PublicKey) Serialize(w io.Writer) (err error) { - length := 6 // 6 byte header + length := uint32(versionSize + timestampSize + algorithmSize) // 6 byte header length += pk.algorithmSpecificByteCount() - if pk.Version == 5 { + if pk.Version >= 5 { length += 4 // octet key count } packetType := packetTypePublicKey if pk.IsSubkey { packetType = packetTypePublicSubkey } - err = serializeHeader(w, packetType, length) + err = serializeHeader(w, packetType, int(length)) if err != nil { return } return pk.serializeWithoutHeaders(w) } -func (pk *PublicKey) algorithmSpecificByteCount() int { - length := 0 +func (pk *PublicKey) algorithmSpecificByteCount() uint32 { + length := uint32(0) switch pk.PubKeyAlgo { case PubKeyAlgoRSA, PubKeyAlgoRSAEncryptOnly, PubKeyAlgoRSASignOnly: - length += int(pk.n.EncodedLength()) - length += int(pk.e.EncodedLength()) + length += uint32(pk.n.EncodedLength()) + length += uint32(pk.e.EncodedLength()) case PubKeyAlgoDSA: - length += int(pk.p.EncodedLength()) - length += int(pk.q.EncodedLength()) - length += int(pk.g.EncodedLength()) - length += int(pk.y.EncodedLength()) + length += uint32(pk.p.EncodedLength()) + length += uint32(pk.q.EncodedLength()) + length += uint32(pk.g.EncodedLength()) + length += uint32(pk.y.EncodedLength()) case PubKeyAlgoElGamal: - length += int(pk.p.EncodedLength()) - length += int(pk.g.EncodedLength()) - length += int(pk.y.EncodedLength()) + length += uint32(pk.p.EncodedLength()) + length += uint32(pk.g.EncodedLength()) + length += uint32(pk.y.EncodedLength()) case PubKeyAlgoECDSA: - length += int(pk.oid.EncodedLength()) - length += int(pk.p.EncodedLength()) + length += uint32(pk.oid.EncodedLength()) + length += uint32(pk.p.EncodedLength()) case PubKeyAlgoECDH: - length += int(pk.oid.EncodedLength()) - length += int(pk.p.EncodedLength()) - length += int(pk.kdf.EncodedLength()) + length += uint32(pk.oid.EncodedLength()) + length += uint32(pk.p.EncodedLength()) + length += uint32(pk.kdf.EncodedLength()) case PubKeyAlgoEdDSA: - length += int(pk.oid.EncodedLength()) - length += int(pk.p.EncodedLength()) + length += uint32(pk.oid.EncodedLength()) + length += uint32(pk.p.EncodedLength()) + case PubKeyAlgoX25519: + length += x25519.KeySize + case PubKeyAlgoX448: + length += x448.KeySize + case PubKeyAlgoEd25519: + length += ed25519.PublicKeySize + case PubKeyAlgoEd448: + length += ed448.PublicKeySize default: panic("unknown public key algorithm") } @@ -522,7 +699,7 @@ func (pk *PublicKey) serializeWithoutHeaders(w io.Writer) (err error) { return } - if pk.Version == 5 { + if pk.Version >= 5 { n := pk.algorithmSpecificByteCount() if _, err = w.Write([]byte{ byte(n >> 24), byte(n >> 16), byte(n >> 8), byte(n), @@ -580,6 +757,22 @@ func (pk *PublicKey) serializeWithoutHeaders(w io.Writer) (err error) { } _, err = w.Write(pk.p.EncodedBytes()) return + case PubKeyAlgoX25519: + publicKey := pk.PublicKey.(*x25519.PublicKey) + _, err = w.Write(publicKey.Point) + return + case PubKeyAlgoX448: + publicKey := pk.PublicKey.(*x448.PublicKey) + _, err = w.Write(publicKey.Point) + return + case PubKeyAlgoEd25519: + publicKey := pk.PublicKey.(*ed25519.PublicKey) + _, err = w.Write(publicKey.Point) + return + case PubKeyAlgoEd448: + publicKey := pk.PublicKey.(*ed448.PublicKey) + _, err = w.Write(publicKey.Point) + return } return errors.InvalidArgumentError("bad public-key algorithm") } @@ -589,6 +782,20 @@ func (pk *PublicKey) CanSign() bool { return pk.PubKeyAlgo != PubKeyAlgoRSAEncryptOnly && pk.PubKeyAlgo != PubKeyAlgoElGamal && pk.PubKeyAlgo != PubKeyAlgoECDH } +// VerifyHashTag returns nil iff sig appears to be a plausible signature of the data +// hashed into signed, based solely on its HashTag. signed is mutated by this call. +func VerifyHashTag(signed hash.Hash, sig *Signature) (err error) { + if sig.Version == 5 && (sig.SigType == 0x00 || sig.SigType == 0x01) { + sig.AddMetadataToHashSuffix() + } + signed.Write(sig.HashSuffix) + hashBytes := signed.Sum(nil) + if hashBytes[0] != sig.HashTag[0] || hashBytes[1] != sig.HashTag[1] { + return errors.SignatureError("hash tag doesn't match") + } + return nil +} + // VerifySignature returns nil iff sig is a valid signature, made by this // public key, of the data hashed into signed. signed is mutated by this call. func (pk *PublicKey) VerifySignature(signed hash.Hash, sig *Signature) (err error) { @@ -600,7 +807,8 @@ func (pk *PublicKey) VerifySignature(signed hash.Hash, sig *Signature) (err erro } signed.Write(sig.HashSuffix) hashBytes := signed.Sum(nil) - if sig.Version == 5 && (hashBytes[0] != sig.HashTag[0] || hashBytes[1] != sig.HashTag[1]) { + // see discussion https://github.com/ProtonMail/go-crypto/issues/107 + if sig.Version >= 5 && (hashBytes[0] != sig.HashTag[0] || hashBytes[1] != sig.HashTag[1]) { return errors.SignatureError("hash tag doesn't match") } @@ -639,6 +847,18 @@ func (pk *PublicKey) VerifySignature(signed hash.Hash, sig *Signature) (err erro return errors.SignatureError("EdDSA verification failure") } return nil + case PubKeyAlgoEd25519: + ed25519PublicKey := pk.PublicKey.(*ed25519.PublicKey) + if !ed25519.Verify(ed25519PublicKey, hashBytes, sig.EdSig) { + return errors.SignatureError("Ed25519 verification failure") + } + return nil + case PubKeyAlgoEd448: + ed448PublicKey := pk.PublicKey.(*ed448.PublicKey) + if !ed448.Verify(ed448PublicKey, hashBytes, sig.EdSig) { + return errors.SignatureError("ed448 verification failure") + } + return nil default: return errors.SignatureError("Unsupported public key algorithm used in signature") } @@ -646,11 +866,8 @@ func (pk *PublicKey) VerifySignature(signed hash.Hash, sig *Signature) (err erro // keySignatureHash returns a Hash of the message that needs to be signed for // pk to assert a subkey relationship to signed. -func keySignatureHash(pk, signed signingKey, hashFunc crypto.Hash) (h hash.Hash, err error) { - if !hashFunc.Available() { - return nil, errors.UnsupportedError("hash function") - } - h = hashFunc.New() +func keySignatureHash(pk, signed signingKey, hashFunc hash.Hash) (h hash.Hash, err error) { + h = hashFunc // RFC 4880, section 5.2.4 err = pk.SerializeForHash(h) @@ -662,10 +879,28 @@ func keySignatureHash(pk, signed signingKey, hashFunc crypto.Hash) (h hash.Hash, return } +// VerifyKeyHashTag returns nil iff sig appears to be a plausible signature over this +// primary key and subkey, based solely on its HashTag. +func (pk *PublicKey) VerifyKeyHashTag(signed *PublicKey, sig *Signature) error { + preparedHash, err := sig.PrepareVerify() + if err != nil { + return err + } + h, err := keySignatureHash(pk, signed, preparedHash) + if err != nil { + return err + } + return VerifyHashTag(h, sig) +} + // VerifyKeySignature returns nil iff sig is a valid signature, made by this // public key, of signed. func (pk *PublicKey) VerifyKeySignature(signed *PublicKey, sig *Signature) error { - h, err := keySignatureHash(pk, signed, sig.Hash) + preparedHash, err := sig.PrepareVerify() + if err != nil { + return err + } + h, err := keySignatureHash(pk, signed, preparedHash) if err != nil { return err } @@ -679,10 +914,14 @@ func (pk *PublicKey) VerifyKeySignature(signed *PublicKey, sig *Signature) error if sig.EmbeddedSignature == nil { return errors.StructuralError("signing subkey is missing cross-signature") } + preparedHashEmbedded, err := sig.EmbeddedSignature.PrepareVerify() + if err != nil { + return err + } // Verify the cross-signature. This is calculated over the same // data as the main signature, so we cannot just recursively // call signed.VerifyKeySignature(...) - if h, err = keySignatureHash(pk, signed, sig.EmbeddedSignature.Hash); err != nil { + if h, err = keySignatureHash(pk, signed, preparedHashEmbedded); err != nil { return errors.StructuralError("error while hashing for cross-signature: " + err.Error()) } if err := signed.VerifySignature(h, sig.EmbeddedSignature); err != nil { @@ -693,32 +932,44 @@ func (pk *PublicKey) VerifyKeySignature(signed *PublicKey, sig *Signature) error return nil } -func keyRevocationHash(pk signingKey, hashFunc crypto.Hash) (h hash.Hash, err error) { - if !hashFunc.Available() { - return nil, errors.UnsupportedError("hash function") - } - h = hashFunc.New() - - // RFC 4880, section 5.2.4 - err = pk.SerializeForHash(h) +func keyRevocationHash(pk signingKey, hashFunc hash.Hash) (err error) { + return pk.SerializeForHash(hashFunc) +} - return +// VerifyRevocationHashTag returns nil iff sig appears to be a plausible signature +// over this public key, based solely on its HashTag. +func (pk *PublicKey) VerifyRevocationHashTag(sig *Signature) (err error) { + preparedHash, err := sig.PrepareVerify() + if err != nil { + return err + } + if err = keyRevocationHash(pk, preparedHash); err != nil { + return err + } + return VerifyHashTag(preparedHash, sig) } // VerifyRevocationSignature returns nil iff sig is a valid signature, made by this // public key. func (pk *PublicKey) VerifyRevocationSignature(sig *Signature) (err error) { - h, err := keyRevocationHash(pk, sig.Hash) + preparedHash, err := sig.PrepareVerify() if err != nil { return err } - return pk.VerifySignature(h, sig) + if err = keyRevocationHash(pk, preparedHash); err != nil { + return err + } + return pk.VerifySignature(preparedHash, sig) } // VerifySubkeyRevocationSignature returns nil iff sig is a valid subkey revocation signature, // made by this public key, of signed. func (pk *PublicKey) VerifySubkeyRevocationSignature(sig *Signature, signed *PublicKey) (err error) { - h, err := keySignatureHash(pk, signed, sig.Hash) + preparedHash, err := sig.PrepareVerify() + if err != nil { + return err + } + h, err := keySignatureHash(pk, signed, preparedHash) if err != nil { return err } @@ -727,15 +978,15 @@ func (pk *PublicKey) VerifySubkeyRevocationSignature(sig *Signature, signed *Pub // userIdSignatureHash returns a Hash of the message that needs to be signed // to assert that pk is a valid key for id. -func userIdSignatureHash(id string, pk *PublicKey, hashFunc crypto.Hash) (h hash.Hash, err error) { - if !hashFunc.Available() { - return nil, errors.UnsupportedError("hash function") - } - h = hashFunc.New() +func userIdSignatureHash(id string, pk *PublicKey, h hash.Hash) (err error) { // RFC 4880, section 5.2.4 - pk.SerializeSignaturePrefix(h) - pk.serializeWithoutHeaders(h) + if err := pk.SerializeSignaturePrefix(h); err != nil { + return err + } + if err := pk.serializeWithoutHeaders(h); err != nil { + return err + } var buf [5]byte buf[0] = 0xb4 @@ -746,16 +997,51 @@ func userIdSignatureHash(id string, pk *PublicKey, hashFunc crypto.Hash) (h hash h.Write(buf[:]) h.Write([]byte(id)) - return + return nil +} + +// directKeySignatureHash returns a Hash of the message that needs to be signed. +func directKeySignatureHash(pk *PublicKey, h hash.Hash) (err error) { + return pk.SerializeForHash(h) +} + +// VerifyUserIdHashTag returns nil iff sig appears to be a plausible signature over this +// public key and UserId, based solely on its HashTag +func (pk *PublicKey) VerifyUserIdHashTag(id string, sig *Signature) (err error) { + preparedHash, err := sig.PrepareVerify() + if err != nil { + return err + } + err = userIdSignatureHash(id, pk, preparedHash) + if err != nil { + return err + } + return VerifyHashTag(preparedHash, sig) } // VerifyUserIdSignature returns nil iff sig is a valid signature, made by this // public key, that id is the identity of pub. func (pk *PublicKey) VerifyUserIdSignature(id string, pub *PublicKey, sig *Signature) (err error) { - h, err := userIdSignatureHash(id, pub, sig.Hash) + h, err := sig.PrepareVerify() + if err != nil { + return err + } + if err := userIdSignatureHash(id, pub, h); err != nil { + return err + } + return pk.VerifySignature(h, sig) +} + +// VerifyDirectKeySignature returns nil iff sig is a valid signature, made by this +// public key. +func (pk *PublicKey) VerifyDirectKeySignature(sig *Signature) (err error) { + h, err := sig.PrepareVerify() if err != nil { return err } + if err := directKeySignatureHash(pk, h); err != nil { + return err + } return pk.VerifySignature(h, sig) } @@ -786,21 +1072,49 @@ func (pk *PublicKey) BitLength() (bitLength uint16, err error) { bitLength = pk.p.BitLength() case PubKeyAlgoEdDSA: bitLength = pk.p.BitLength() + case PubKeyAlgoX25519: + bitLength = x25519.KeySize * 8 + case PubKeyAlgoX448: + bitLength = x448.KeySize * 8 + case PubKeyAlgoEd25519: + bitLength = ed25519.PublicKeySize * 8 + case PubKeyAlgoEd448: + bitLength = ed448.PublicKeySize * 8 default: err = errors.InvalidArgumentError("bad public-key algorithm") } return } +// Curve returns the used elliptic curve of this public key. +// Returns an error if no elliptic curve is used. +func (pk *PublicKey) Curve() (curve Curve, err error) { + switch pk.PubKeyAlgo { + case PubKeyAlgoECDSA, PubKeyAlgoECDH, PubKeyAlgoEdDSA: + curveInfo := ecc.FindByOid(pk.oid) + if curveInfo == nil { + return "", errors.UnsupportedError(fmt.Sprintf("unknown oid: %x", pk.oid)) + } + curve = Curve(curveInfo.GenName) + case PubKeyAlgoEd25519, PubKeyAlgoX25519: + curve = Curve25519 + case PubKeyAlgoEd448, PubKeyAlgoX448: + curve = Curve448 + default: + err = errors.InvalidArgumentError("public key does not operate with an elliptic curve") + } + return +} + // KeyExpired returns whether sig is a self-signature of a key that has // expired or is created in the future. func (pk *PublicKey) KeyExpired(sig *Signature, currentTime time.Time) bool { - if pk.CreationTime.After(currentTime) { + if pk.CreationTime.Unix() > currentTime.Unix() { return true } if sig.KeyLifetimeSecs == nil || *sig.KeyLifetimeSecs == 0 { return false } expiry := pk.CreationTime.Add(time.Duration(*sig.KeyLifetimeSecs) * time.Second) - return currentTime.After(expiry) + return currentTime.Unix() > expiry.Unix() } diff --git a/vendor/github.com/ProtonMail/go-crypto/openpgp/packet/reader.go b/vendor/github.com/ProtonMail/go-crypto/openpgp/packet/reader.go index 10215fe5f2..dd84092392 100644 --- a/vendor/github.com/ProtonMail/go-crypto/openpgp/packet/reader.go +++ b/vendor/github.com/ProtonMail/go-crypto/openpgp/packet/reader.go @@ -10,6 +10,12 @@ import ( "github.com/ProtonMail/go-crypto/openpgp/errors" ) +type PacketReader interface { + Next() (p Packet, err error) + Push(reader io.Reader) (err error) + Unread(p Packet) +} + // Reader reads packets from an io.Reader and allows packets to be 'unread' so // that they result from the next call to Next. type Reader struct { @@ -26,37 +32,81 @@ type Reader struct { const maxReaders = 32 // Next returns the most recently unread Packet, or reads another packet from -// the top-most io.Reader. Unknown packet types are skipped. +// the top-most io.Reader. Unknown/unsupported/Marker packet types are skipped. func (r *Reader) Next() (p Packet, err error) { + for { + p, err := r.read() + if err == io.EOF { + break + } else if err != nil { + if _, ok := err.(errors.UnknownPacketTypeError); ok { + continue + } + if _, ok := err.(errors.UnsupportedError); ok { + switch p.(type) { + case *SymmetricallyEncrypted, *AEADEncrypted, *Compressed, *LiteralData: + return nil, err + } + continue + } + return nil, err + } else { + //A marker packet MUST be ignored when received + switch p.(type) { + case *Marker: + continue + } + return p, nil + } + } + return nil, io.EOF +} + +// Next returns the most recently unread Packet, or reads another packet from +// the top-most io.Reader. Unknown/Marker packet types are skipped while unsupported +// packets are returned as UnsupportedPacket type. +func (r *Reader) NextWithUnsupported() (p Packet, err error) { + for { + p, err = r.read() + if err == io.EOF { + break + } else if err != nil { + if _, ok := err.(errors.UnknownPacketTypeError); ok { + continue + } + if casteErr, ok := err.(errors.UnsupportedError); ok { + return &UnsupportedPacket{ + IncompletePacket: p, + Error: casteErr, + }, nil + } + return + } else { + //A marker packet MUST be ignored when received + switch p.(type) { + case *Marker: + continue + } + return + } + } + return nil, io.EOF +} + +func (r *Reader) read() (p Packet, err error) { if len(r.q) > 0 { p = r.q[len(r.q)-1] r.q = r.q[:len(r.q)-1] return } - for len(r.readers) > 0 { p, err = Read(r.readers[len(r.readers)-1]) - if err == nil { - return - } if err == io.EOF { r.readers = r.readers[:len(r.readers)-1] continue } - // TODO: Add strict mode that rejects unknown packets, instead of ignoring them. - if _, ok := err.(errors.UnknownPacketTypeError); ok { - continue - } - if _, ok := err.(errors.UnsupportedError); ok { - switch p.(type) { - case *SymmetricallyEncrypted, *AEADEncrypted, *Compressed, *LiteralData: - return nil, err - } - continue - } - return nil, err + return p, err } - return nil, io.EOF } @@ -84,3 +134,76 @@ func NewReader(r io.Reader) *Reader { readers: []io.Reader{r}, } } + +// CheckReader is similar to Reader but additionally +// uses the pushdown automata to verify the read packet sequence. +type CheckReader struct { + Reader + verifier *SequenceVerifier + fullyRead bool +} + +// Next returns the most recently unread Packet, or reads another packet from +// the top-most io.Reader. Unknown packet types are skipped. +// If the read packet sequence does not conform to the packet composition +// rules in rfc4880, it returns an error. +func (r *CheckReader) Next() (p Packet, err error) { + if r.fullyRead { + return nil, io.EOF + } + if len(r.q) > 0 { + p = r.q[len(r.q)-1] + r.q = r.q[:len(r.q)-1] + return + } + var errMsg error + for len(r.readers) > 0 { + p, errMsg, err = ReadWithCheck(r.readers[len(r.readers)-1], r.verifier) + if errMsg != nil { + err = errMsg + return + } + if err == nil { + return + } + if err == io.EOF { + r.readers = r.readers[:len(r.readers)-1] + continue + } + //A marker packet MUST be ignored when received + switch p.(type) { + case *Marker: + continue + } + if _, ok := err.(errors.UnknownPacketTypeError); ok { + continue + } + if _, ok := err.(errors.UnsupportedError); ok { + switch p.(type) { + case *SymmetricallyEncrypted, *AEADEncrypted, *Compressed, *LiteralData: + return nil, err + } + continue + } + return nil, err + } + if errMsg = r.verifier.Next(EOSSymbol); errMsg != nil { + return nil, errMsg + } + if errMsg = r.verifier.AssertValid(); errMsg != nil { + return nil, errMsg + } + r.fullyRead = true + return nil, io.EOF +} + +func NewCheckReader(r io.Reader) *CheckReader { + return &CheckReader{ + Reader: Reader{ + q: nil, + readers: []io.Reader{r}, + }, + verifier: NewSequenceVerifier(), + fullyRead: false, + } +} diff --git a/vendor/github.com/ProtonMail/go-crypto/openpgp/packet/recipient.go b/vendor/github.com/ProtonMail/go-crypto/openpgp/packet/recipient.go new file mode 100644 index 0000000000..fb2e362e4a --- /dev/null +++ b/vendor/github.com/ProtonMail/go-crypto/openpgp/packet/recipient.go @@ -0,0 +1,15 @@ +package packet + +// Recipient type represents a Intended Recipient Fingerprint subpacket +// See https://datatracker.ietf.org/doc/html/draft-ietf-openpgp-crypto-refresh#name-intended-recipient-fingerpr +type Recipient struct { + KeyVersion int + Fingerprint []byte +} + +func (r *Recipient) Serialize() []byte { + packet := make([]byte, len(r.Fingerprint)+1) + packet[0] = byte(r.KeyVersion) + copy(packet[1:], r.Fingerprint) + return packet +} diff --git a/vendor/github.com/ProtonMail/go-crypto/openpgp/packet/signature.go b/vendor/github.com/ProtonMail/go-crypto/openpgp/packet/signature.go index 80d0bb98e0..3a4b366d87 100644 --- a/vendor/github.com/ProtonMail/go-crypto/openpgp/packet/signature.go +++ b/vendor/github.com/ProtonMail/go-crypto/openpgp/packet/signature.go @@ -8,13 +8,17 @@ import ( "bytes" "crypto" "crypto/dsa" + "encoding/asn1" "encoding/binary" "hash" "io" + "math/big" "strconv" "time" "github.com/ProtonMail/go-crypto/openpgp/ecdsa" + "github.com/ProtonMail/go-crypto/openpgp/ed25519" + "github.com/ProtonMail/go-crypto/openpgp/ed448" "github.com/ProtonMail/go-crypto/openpgp/eddsa" "github.com/ProtonMail/go-crypto/openpgp/errors" "github.com/ProtonMail/go-crypto/openpgp/internal/algorithm" @@ -22,7 +26,8 @@ import ( ) const ( - // See RFC 4880, section 5.2.3.21 for details. + // First octet of key flags. + // See RFC 9580, section 5.2.3.29 for details. KeyFlagCertify = 1 << iota KeyFlagSign KeyFlagEncryptCommunications @@ -33,12 +38,30 @@ const ( KeyFlagGroupKey ) -// Signature represents a signature. See RFC 4880, section 5.2. +const ( + // First octet of keyserver preference flags. + // See RFC 9580, section 5.2.3.25 for details. + _ = 1 << iota + _ + _ + _ + _ + _ + _ + KeyserverPrefNoModify +) + +const SaltNotationName = "salt@notations.openpgpjs.org" + +// Signature represents a signature. See RFC 9580, section 5.2. type Signature struct { Version int SigType SignatureType PubKeyAlgo PublicKeyAlgorithm Hash crypto.Hash + // salt contains a random salt value for v6 signatures + // See RFC 9580 Section 5.2.4. + salt []byte // HashSuffix is extra data that is hashed in after the signed data. HashSuffix []byte @@ -57,6 +80,7 @@ type Signature struct { DSASigR, DSASigS encoding.Field ECDSASigR, ECDSASigS encoding.Field EdDSASigR, EdDSASigS encoding.Field + EdSig []byte // rawSubpackets contains the unparsed subpackets, in order. rawSubpackets []outputSubpacket @@ -72,31 +96,42 @@ type Signature struct { SignerUserId *string IsPrimaryId *bool Notations []*Notation + IntendedRecipients []*Recipient // TrustLevel and TrustAmount can be set by the signer to assert that // the key is not only valid but also trustworthy at the specified // level. - // See RFC 4880, section 5.2.3.13 for details. + // See RFC 9580, section 5.2.3.21 for details. TrustLevel TrustLevel TrustAmount TrustAmount // TrustRegularExpression can be used in conjunction with trust Signature // packets to limit the scope of the trust that is extended. - // See RFC 4880, section 5.2.3.14 for details. + // See RFC 9580, section 5.2.3.22 for details. TrustRegularExpression *string + // KeyserverPrefsValid is set if any keyserver preferences were given. See RFC 9580, section + // 5.2.3.25 for details. + KeyserverPrefsValid bool + KeyserverPrefNoModify bool + + // PreferredKeyserver can be set to a URI where the latest version of the + // key that this signature is made over can be found. See RFC 9580, section + // 5.2.3.26 for details. + PreferredKeyserver string + // PolicyURI can be set to the URI of a document that describes the - // policy under which the signature was issued. See RFC 4880, section - // 5.2.3.20 for details. + // policy under which the signature was issued. See RFC 9580, section + // 5.2.3.28 for details. PolicyURI string - // FlagsValid is set if any flags were given. See RFC 4880, section - // 5.2.3.21 for details. + // FlagsValid is set if any flags were given. See RFC 9580, section + // 5.2.3.29 for details. FlagsValid bool FlagCertify, FlagSign, FlagEncryptCommunications, FlagEncryptStorage, FlagSplitKey, FlagAuthenticate, FlagGroupKey bool // RevocationReason is set if this signature has been revoked. - // See RFC 4880, section 5.2.3.23 for details. + // See RFC 9580, section 5.2.3.31 for details. RevocationReason *ReasonForRevocation RevocationReasonText string @@ -113,26 +148,57 @@ type Signature struct { outSubpackets []outputSubpacket } +// VerifiableSignature internally keeps state if the +// the signature has been verified before. +type VerifiableSignature struct { + Valid *bool // nil if it has not been verified yet + Packet *Signature +} + +// NewVerifiableSig returns a struct of type VerifiableSignature referencing the input signature. +func NewVerifiableSig(signature *Signature) *VerifiableSignature { + return &VerifiableSignature{ + Packet: signature, + } +} + +// Salt returns the signature salt for v6 signatures. +func (sig *Signature) Salt() []byte { + if sig == nil { + return nil + } + return sig.salt +} + func (sig *Signature) parse(r io.Reader) (err error) { - // RFC 4880, section 5.2.3 - var buf [5]byte + // RFC 9580, section 5.2.3 + var buf [7]byte _, err = readFull(r, buf[:1]) if err != nil { return } - if buf[0] != 4 && buf[0] != 5 { + sig.Version = int(buf[0]) + if sig.Version != 4 && sig.Version != 5 && sig.Version != 6 { err = errors.UnsupportedError("signature packet version " + strconv.Itoa(int(buf[0]))) return } - sig.Version = int(buf[0]) - _, err = readFull(r, buf[:5]) + + if V5Disabled && sig.Version == 5 { + return errors.UnsupportedError("support for parsing v5 entities is disabled; build with `-tags v5` if needed") + } + + if sig.Version == 6 { + _, err = readFull(r, buf[:7]) + } else { + _, err = readFull(r, buf[:5]) + } if err != nil { return } sig.SigType = SignatureType(buf[0]) sig.PubKeyAlgo = PublicKeyAlgorithm(buf[1]) switch sig.PubKeyAlgo { - case PubKeyAlgoRSA, PubKeyAlgoRSASignOnly, PubKeyAlgoDSA, PubKeyAlgoECDSA, PubKeyAlgoEdDSA: + case PubKeyAlgoRSA, PubKeyAlgoRSASignOnly, PubKeyAlgoDSA, PubKeyAlgoECDSA, PubKeyAlgoEdDSA, PubKeyAlgoEd25519, PubKeyAlgoEd448: default: err = errors.UnsupportedError("public key algorithm " + strconv.Itoa(int(sig.PubKeyAlgo))) return @@ -150,7 +216,17 @@ func (sig *Signature) parse(r io.Reader) (err error) { return errors.UnsupportedError("hash function " + strconv.Itoa(int(buf[2]))) } - hashedSubpacketsLength := int(buf[3])<<8 | int(buf[4]) + var hashedSubpacketsLength int + if sig.Version == 6 { + // For a v6 signature, a four-octet length is used. + hashedSubpacketsLength = + int(buf[3])<<24 | + int(buf[4])<<16 | + int(buf[5])<<8 | + int(buf[6]) + } else { + hashedSubpacketsLength = int(buf[3])<<8 | int(buf[4]) + } hashedSubpackets := make([]byte, hashedSubpacketsLength) _, err = readFull(r, hashedSubpackets) if err != nil { @@ -166,11 +242,21 @@ func (sig *Signature) parse(r io.Reader) (err error) { return } - _, err = readFull(r, buf[:2]) + if sig.Version == 6 { + _, err = readFull(r, buf[:4]) + } else { + _, err = readFull(r, buf[:2]) + } + if err != nil { return } - unhashedSubpacketsLength := int(buf[0])<<8 | int(buf[1]) + var unhashedSubpacketsLength uint32 + if sig.Version == 6 { + unhashedSubpacketsLength = uint32(buf[0])<<24 | uint32(buf[1])<<16 | uint32(buf[2])<<8 | uint32(buf[3]) + } else { + unhashedSubpacketsLength = uint32(buf[0])<<8 | uint32(buf[1]) + } unhashedSubpackets := make([]byte, unhashedSubpacketsLength) _, err = readFull(r, unhashedSubpackets) if err != nil { @@ -186,6 +272,30 @@ func (sig *Signature) parse(r io.Reader) (err error) { return } + if sig.Version == 6 { + // Only for v6 signatures, a variable-length field containing the salt + _, err = readFull(r, buf[:1]) + if err != nil { + return + } + saltLength := int(buf[0]) + var expectedSaltLength int + expectedSaltLength, err = SaltLengthForHash(sig.Hash) + if err != nil { + return + } + if saltLength != expectedSaltLength { + err = errors.StructuralError("unexpected salt size for the given hash algorithm") + return + } + salt := make([]byte, expectedSaltLength) + _, err = readFull(r, salt) + if err != nil { + return + } + sig.salt = salt + } + switch sig.PubKeyAlgo { case PubKeyAlgoRSA, PubKeyAlgoRSASignOnly: sig.RSASignature = new(encoding.MPI) @@ -216,6 +326,16 @@ func (sig *Signature) parse(r io.Reader) (err error) { if _, err = sig.EdDSASigS.ReadFrom(r); err != nil { return } + case PubKeyAlgoEd25519: + sig.EdSig, err = ed25519.ReadSignature(r) + if err != nil { + return + } + case PubKeyAlgoEd448: + sig.EdSig, err = ed448.ReadSignature(r) + if err != nil { + return + } default: panic("unreachable") } @@ -223,7 +343,7 @@ func (sig *Signature) parse(r io.Reader) (err error) { } // parseSignatureSubpackets parses subpackets of the main signature packet. See -// RFC 4880, section 5.2.3.1. +// RFC 9580, section 5.2.3.1. func parseSignatureSubpackets(sig *Signature, subpackets []byte, isHashed bool) (err error) { for len(subpackets) > 0 { subpackets, err = parseSignatureSubpacket(sig, subpackets, isHashed) @@ -244,6 +364,7 @@ type signatureSubpacketType uint8 const ( creationTimeSubpacket signatureSubpacketType = 2 signatureExpirationSubpacket signatureSubpacketType = 3 + exportableCertSubpacket signatureSubpacketType = 4 trustSubpacket signatureSubpacketType = 5 regularExpressionSubpacket signatureSubpacketType = 6 keyExpirationSubpacket signatureSubpacketType = 9 @@ -252,6 +373,8 @@ const ( notationDataSubpacket signatureSubpacketType = 20 prefHashAlgosSubpacket signatureSubpacketType = 21 prefCompressionSubpacket signatureSubpacketType = 22 + keyserverPrefsSubpacket signatureSubpacketType = 23 + prefKeyserverSubpacket signatureSubpacketType = 24 primaryUserIdSubpacket signatureSubpacketType = 25 policyUriSubpacket signatureSubpacketType = 26 keyFlagsSubpacket signatureSubpacketType = 27 @@ -260,12 +383,13 @@ const ( featuresSubpacket signatureSubpacketType = 30 embeddedSignatureSubpacket signatureSubpacketType = 32 issuerFingerprintSubpacket signatureSubpacketType = 33 + intendedRecipientSubpacket signatureSubpacketType = 35 prefCipherSuitesSubpacket signatureSubpacketType = 39 ) // parseSignatureSubpacket parses a single subpacket. len(subpacket) is >= 1. func parseSignatureSubpacket(sig *Signature, subpacket []byte, isHashed bool) (rest []byte, err error) { - // RFC 4880, section 5.2.3.1 + // RFC 9580, section 5.2.3.7 var ( length uint32 packetType signatureSubpacketType @@ -323,19 +447,24 @@ func parseSignatureSubpacket(sig *Signature, subpacket []byte, isHashed bool) (r t := binary.BigEndian.Uint32(subpacket) sig.CreationTime = time.Unix(int64(t), 0) case signatureExpirationSubpacket: - // Signature expiration time, section 5.2.3.10 + // Signature expiration time, section 5.2.3.18 if len(subpacket) != 4 { err = errors.StructuralError("expiration subpacket with bad length") return } sig.SigLifetimeSecs = new(uint32) *sig.SigLifetimeSecs = binary.BigEndian.Uint32(subpacket) + case exportableCertSubpacket: + if subpacket[0] == 0 { + err = errors.UnsupportedError("signature with non-exportable certification") + return + } case trustSubpacket: if len(subpacket) != 2 { err = errors.StructuralError("trust subpacket with bad length") return } - // Trust level and amount, section 5.2.3.13 + // Trust level and amount, section 5.2.3.21 sig.TrustLevel = TrustLevel(subpacket[0]) sig.TrustAmount = TrustAmount(subpacket[1]) case regularExpressionSubpacket: @@ -343,7 +472,7 @@ func parseSignatureSubpacket(sig *Signature, subpacket []byte, isHashed bool) (r err = errors.StructuralError("regexp subpacket with bad length") return } - // Trust regular expression, section 5.2.3.14 + // Trust regular expression, section 5.2.3.22 // RFC specifies the string should be null-terminated; remove a null byte from the end if subpacket[len(subpacket)-1] != 0x00 { err = errors.StructuralError("expected regular expression to be null-terminated") @@ -352,7 +481,7 @@ func parseSignatureSubpacket(sig *Signature, subpacket []byte, isHashed bool) (r trustRegularExpression := string(subpacket[:len(subpacket)-1]) sig.TrustRegularExpression = &trustRegularExpression case keyExpirationSubpacket: - // Key expiration time, section 5.2.3.6 + // Key expiration time, section 5.2.3.13 if len(subpacket) != 4 { err = errors.StructuralError("key expiration subpacket with bad length") return @@ -360,23 +489,25 @@ func parseSignatureSubpacket(sig *Signature, subpacket []byte, isHashed bool) (r sig.KeyLifetimeSecs = new(uint32) *sig.KeyLifetimeSecs = binary.BigEndian.Uint32(subpacket) case prefSymmetricAlgosSubpacket: - // Preferred symmetric algorithms, section 5.2.3.7 + // Preferred symmetric algorithms, section 5.2.3.14 sig.PreferredSymmetric = make([]byte, len(subpacket)) copy(sig.PreferredSymmetric, subpacket) case issuerSubpacket: - // Issuer, section 5.2.3.5 - if sig.Version > 4 { - err = errors.StructuralError("issuer subpacket found in v5 key") + // Issuer, section 5.2.3.12 + if sig.Version > 4 && isHashed { + err = errors.StructuralError("issuer subpacket found in v6 key") return } if len(subpacket) != 8 { err = errors.StructuralError("issuer subpacket with bad length") return } - sig.IssuerKeyId = new(uint64) - *sig.IssuerKeyId = binary.BigEndian.Uint64(subpacket) + if sig.Version <= 4 { + sig.IssuerKeyId = new(uint64) + *sig.IssuerKeyId = binary.BigEndian.Uint64(subpacket) + } case notationDataSubpacket: - // Notation data, section 5.2.3.16 + // Notation data, section 5.2.3.24 if len(subpacket) < 8 { err = errors.StructuralError("notation data subpacket with bad length") return @@ -398,15 +529,27 @@ func parseSignatureSubpacket(sig *Signature, subpacket []byte, isHashed bool) (r sig.Notations = append(sig.Notations, ¬ation) case prefHashAlgosSubpacket: - // Preferred hash algorithms, section 5.2.3.8 + // Preferred hash algorithms, section 5.2.3.16 sig.PreferredHash = make([]byte, len(subpacket)) copy(sig.PreferredHash, subpacket) case prefCompressionSubpacket: - // Preferred compression algorithms, section 5.2.3.9 + // Preferred compression algorithms, section 5.2.3.17 sig.PreferredCompression = make([]byte, len(subpacket)) copy(sig.PreferredCompression, subpacket) + case keyserverPrefsSubpacket: + // Keyserver preferences, section 5.2.3.25 + sig.KeyserverPrefsValid = true + if len(subpacket) == 0 { + return + } + if subpacket[0]&KeyserverPrefNoModify != 0 { + sig.KeyserverPrefNoModify = true + } + case prefKeyserverSubpacket: + // Preferred keyserver, section 5.2.3.26 + sig.PreferredKeyserver = string(subpacket) case primaryUserIdSubpacket: - // Primary User ID, section 5.2.3.19 + // Primary User ID, section 5.2.3.27 if len(subpacket) != 1 { err = errors.StructuralError("primary user id subpacket with bad length") return @@ -416,12 +559,11 @@ func parseSignatureSubpacket(sig *Signature, subpacket []byte, isHashed bool) (r *sig.IsPrimaryId = true } case keyFlagsSubpacket: - // Key flags, section 5.2.3.21 + // Key flags, section 5.2.3.29 + sig.FlagsValid = true if len(subpacket) == 0 { - err = errors.StructuralError("empty key flags subpacket") return } - sig.FlagsValid = true if subpacket[0]&KeyFlagCertify != 0 { sig.FlagCertify = true } @@ -447,16 +589,16 @@ func parseSignatureSubpacket(sig *Signature, subpacket []byte, isHashed bool) (r userId := string(subpacket) sig.SignerUserId = &userId case reasonForRevocationSubpacket: - // Reason For Revocation, section 5.2.3.23 + // Reason For Revocation, section 5.2.3.31 if len(subpacket) == 0 { err = errors.StructuralError("empty revocation reason subpacket") return } sig.RevocationReason = new(ReasonForRevocation) - *sig.RevocationReason = ReasonForRevocation(subpacket[0]) + *sig.RevocationReason = NewReasonForRevocation(subpacket[0]) sig.RevocationReasonText = string(subpacket[1:]) case featuresSubpacket: - // Features subpacket, section 5.2.3.24 specifies a very general + // Features subpacket, section 5.2.3.32 specifies a very general // mechanism for OpenPGP implementations to signal support for new // features. if len(subpacket) > 0 { @@ -470,16 +612,13 @@ func parseSignatureSubpacket(sig *Signature, subpacket []byte, isHashed bool) (r } case embeddedSignatureSubpacket: // Only usage is in signatures that cross-certify - // signing subkeys. section 5.2.3.26 describes the + // signing subkeys. section 5.2.3.34 describes the // format, with its usage described in section 11.1 if sig.EmbeddedSignature != nil { err = errors.StructuralError("Cannot have multiple embedded signatures") return } sig.EmbeddedSignature = new(Signature) - // Embedded signatures are required to be v4 signatures see - // section 12.1. However, we only parse v4 signatures in this - // file anyway. if err := sig.EmbeddedSignature.parse(bytes.NewBuffer(subpacket)); err != nil { return nil, err } @@ -487,7 +626,7 @@ func parseSignatureSubpacket(sig *Signature, subpacket []byte, isHashed bool) (r return nil, errors.StructuralError("cross-signature has unexpected type " + strconv.Itoa(int(sigType))) } case policyUriSubpacket: - // Policy URI, section 5.2.3.20 + // Policy URI, section 5.2.3.28 sig.PolicyURI = string(subpacket) case issuerFingerprintSubpacket: if len(subpacket) == 0 { @@ -495,20 +634,31 @@ func parseSignatureSubpacket(sig *Signature, subpacket []byte, isHashed bool) (r return } v, l := subpacket[0], len(subpacket[1:]) - if v == 5 && l != 32 || v != 5 && l != 20 { + if v >= 5 && l != 32 || v < 5 && l != 20 { return nil, errors.StructuralError("bad fingerprint length") } sig.IssuerFingerprint = make([]byte, l) copy(sig.IssuerFingerprint, subpacket[1:]) sig.IssuerKeyId = new(uint64) - if v == 5 { + if v >= 5 { *sig.IssuerKeyId = binary.BigEndian.Uint64(subpacket[1:9]) } else { *sig.IssuerKeyId = binary.BigEndian.Uint64(subpacket[13:21]) } + case intendedRecipientSubpacket: + // Intended Recipient Fingerprint, section 5.2.3.36 + if len(subpacket) < 1 { + return nil, errors.StructuralError("invalid intended recipient fingerpring length") + } + version, length := subpacket[0], len(subpacket[1:]) + if version >= 5 && length != 32 || version < 5 && length != 20 { + return nil, errors.StructuralError("invalid fingerprint length") + } + fingerprint := make([]byte, length) + copy(fingerprint, subpacket[1:]) + sig.IntendedRecipients = append(sig.IntendedRecipients, &Recipient{int(version), fingerprint}) case prefCipherSuitesSubpacket: - // Preferred AEAD cipher suites - // See https://www.ietf.org/archive/id/draft-ietf-openpgp-crypto-refresh-07.html#name-preferred-aead-ciphersuites + // Preferred AEAD cipher suites, section 5.2.3.15 if len(subpacket)%2 != 0 { err = errors.StructuralError("invalid aead cipher suite length") return @@ -550,9 +700,16 @@ func (sig *Signature) CheckKeyIdOrFingerprint(pk *PublicKey) bool { return sig.IssuerKeyId != nil && *sig.IssuerKeyId == pk.KeyId } +func (sig *Signature) CheckKeyIdOrFingerprintExplicit(fingerprint []byte, keyId uint64) bool { + if sig.IssuerFingerprint != nil && len(sig.IssuerFingerprint) >= 20 && fingerprint != nil { + return bytes.Equal(sig.IssuerFingerprint, fingerprint) + } + return sig.IssuerKeyId != nil && *sig.IssuerKeyId == keyId +} + // serializeSubpacketLength marshals the given length into to. func serializeSubpacketLength(to []byte, length int) int { - // RFC 4880, Section 4.2.2. + // RFC 9580, Section 4.2.1. if length < 192 { to[0] = byte(length) return 1 @@ -598,20 +755,19 @@ func serializeSubpackets(to []byte, subpackets []outputSubpacket, hashed bool) { to = to[n:] } } - return } // SigExpired returns whether sig is a signature that has expired or is created // in the future. func (sig *Signature) SigExpired(currentTime time.Time) bool { - if sig.CreationTime.After(currentTime) { + if sig.CreationTime.Unix() > currentTime.Unix() { return true } if sig.SigLifetimeSecs == nil || *sig.SigLifetimeSecs == 0 { return false } expiry := sig.CreationTime.Add(time.Duration(*sig.SigLifetimeSecs) * time.Second) - return currentTime.After(expiry) + return currentTime.Unix() > expiry.Unix() } // buildHashSuffix constructs the HashSuffix member of sig in preparation for signing. @@ -635,20 +791,36 @@ func (sig *Signature) buildHashSuffix(hashedSubpackets []byte) (err error) { uint8(sig.SigType), uint8(sig.PubKeyAlgo), uint8(hashId), - uint8(len(hashedSubpackets) >> 8), - uint8(len(hashedSubpackets)), }) + hashedSubpacketsLength := len(hashedSubpackets) + if sig.Version == 6 { + // v6 signatures store the length in 4 octets + hashedFields.Write([]byte{ + uint8(hashedSubpacketsLength >> 24), + uint8(hashedSubpacketsLength >> 16), + uint8(hashedSubpacketsLength >> 8), + uint8(hashedSubpacketsLength), + }) + } else { + hashedFields.Write([]byte{ + uint8(hashedSubpacketsLength >> 8), + uint8(hashedSubpacketsLength), + }) + } + lenPrefix := hashedFields.Len() hashedFields.Write(hashedSubpackets) - var l uint64 = uint64(6 + len(hashedSubpackets)) + var l uint64 = uint64(lenPrefix + len(hashedSubpackets)) if sig.Version == 5 { + // v5 case hashedFields.Write([]byte{0x05, 0xff}) hashedFields.Write([]byte{ uint8(l >> 56), uint8(l >> 48), uint8(l >> 40), uint8(l >> 32), uint8(l >> 24), uint8(l >> 16), uint8(l >> 8), uint8(l), }) } else { - hashedFields.Write([]byte{0x04, 0xff}) + // v4 and v6 case + hashedFields.Write([]byte{byte(sig.Version), 0xff}) hashedFields.Write([]byte{ uint8(l >> 24), uint8(l >> 16), uint8(l >> 8), uint8(l), }) @@ -676,6 +848,67 @@ func (sig *Signature) signPrepareHash(h hash.Hash) (digest []byte, err error) { return } +// PrepareSign must be called to create a hash object before Sign for v6 signatures. +// The created hash object initially hashes a randomly generated salt +// as required by v6 signatures. The generated salt is stored in sig. If the signature is not v6, +// the method returns an empty hash object. +// See RFC 9580 Section 5.2.4. +func (sig *Signature) PrepareSign(config *Config) (hash.Hash, error) { + if !sig.Hash.Available() { + return nil, errors.UnsupportedError("hash function") + } + hasher := sig.Hash.New() + if sig.Version == 6 { + if sig.salt == nil { + var err error + sig.salt, err = SignatureSaltForHash(sig.Hash, config.Random()) + if err != nil { + return nil, err + } + } + hasher.Write(sig.salt) + } + return hasher, nil +} + +// SetSalt sets the signature salt for v6 signatures. +// Assumes salt is generated correctly and checks if length matches. +// If the signature is not v6, the method ignores the salt. +// Use PrepareSign whenever possible instead of generating and +// hashing the salt externally. +// See RFC 9580 Section 5.2.4. +func (sig *Signature) SetSalt(salt []byte) error { + if sig.Version == 6 { + expectedSaltLength, err := SaltLengthForHash(sig.Hash) + if err != nil { + return err + } + if salt == nil || len(salt) != expectedSaltLength { + return errors.InvalidArgumentError("unexpected salt size for the given hash algorithm") + } + sig.salt = salt + } + return nil +} + +// PrepareVerify must be called to create a hash object before verifying v6 signatures. +// The created hash object initially hashes the internally stored salt. +// If the signature is not v6, the method returns an empty hash object. +// See RFC 9580 Section 5.2.4. +func (sig *Signature) PrepareVerify() (hash.Hash, error) { + if !sig.Hash.Available() { + return nil, errors.UnsupportedError("hash function") + } + hasher := sig.Hash.New() + if sig.Version == 6 { + if sig.salt == nil { + return nil, errors.StructuralError("v6 requires a salt for the hash to be signed") + } + hasher.Write(sig.salt) + } + return hasher, nil +} + // Sign signs a message with a private key. The hash, h, must contain // the hash of the message to be signed and will be mutated by this function. // On success, the signature is stored in sig. Call Serialize to write it out. @@ -686,6 +919,20 @@ func (sig *Signature) Sign(h hash.Hash, priv *PrivateKey, config *Config) (err e } sig.Version = priv.PublicKey.Version sig.IssuerFingerprint = priv.PublicKey.Fingerprint + if sig.Version < 6 && config.RandomizeSignaturesViaNotation() { + sig.removeNotationsWithName(SaltNotationName) + salt, err := SignatureSaltForHash(sig.Hash, config.Random()) + if err != nil { + return err + } + notation := Notation{ + Name: SaltNotationName, + Value: salt, + IsCritical: false, + IsHumanReadable: false, + } + sig.Notations = append(sig.Notations, ¬ation) + } sig.outSubpackets, err = sig.buildSubpackets(priv.PublicKey) if err != nil { return err @@ -715,8 +962,16 @@ func (sig *Signature) Sign(h hash.Hash, priv *PrivateKey, config *Config) (err e sig.DSASigS = new(encoding.MPI).SetBig(s) } case PubKeyAlgoECDSA: - sk := priv.PrivateKey.(*ecdsa.PrivateKey) - r, s, err := ecdsa.Sign(config.Random(), sk, digest) + var r, s *big.Int + if sk, ok := priv.PrivateKey.(*ecdsa.PrivateKey); ok { + r, s, err = ecdsa.Sign(config.Random(), sk, digest) + } else { + var b []byte + b, err = priv.PrivateKey.(crypto.Signer).Sign(config.Random(), digest, sig.Hash) + if err == nil { + r, s, err = unwrapECDSASig(b) + } + } if err == nil { sig.ECDSASigR = new(encoding.MPI).SetBig(r) @@ -729,6 +984,18 @@ func (sig *Signature) Sign(h hash.Hash, priv *PrivateKey, config *Config) (err e sig.EdDSASigR = encoding.NewMPI(r) sig.EdDSASigS = encoding.NewMPI(s) } + case PubKeyAlgoEd25519: + sk := priv.PrivateKey.(*ed25519.PrivateKey) + signature, err := ed25519.Sign(sk, digest) + if err == nil { + sig.EdSig = signature + } + case PubKeyAlgoEd448: + sk := priv.PrivateKey.(*ed448.PrivateKey) + signature, err := ed448.Sign(sk, digest) + if err == nil { + sig.EdSig = signature + } default: err = errors.UnsupportedError("public key algorithm: " + strconv.Itoa(int(sig.PubKeyAlgo))) } @@ -736,6 +1003,18 @@ func (sig *Signature) Sign(h hash.Hash, priv *PrivateKey, config *Config) (err e return } +// unwrapECDSASig parses the two integer components of an ASN.1-encoded ECDSA signature. +func unwrapECDSASig(b []byte) (r, s *big.Int, err error) { + var ecsdaSig struct { + R, S *big.Int + } + _, err = asn1.Unmarshal(b, &ecsdaSig) + if err != nil { + return + } + return ecsdaSig.R, ecsdaSig.S, nil +} + // SignUserId computes a signature from priv, asserting that pub is a valid // key for the identity id. On success, the signature is stored in sig. Call // Serialize to write it out. @@ -744,11 +1023,32 @@ func (sig *Signature) SignUserId(id string, pub *PublicKey, priv *PrivateKey, co if priv.Dummy() { return errors.ErrDummyPrivateKey("dummy key found") } - h, err := userIdSignatureHash(id, pub, sig.Hash) + prepareHash, err := sig.PrepareSign(config) if err != nil { return err } - return sig.Sign(h, priv, config) + if err := userIdSignatureHash(id, pub, prepareHash); err != nil { + return err + } + return sig.Sign(prepareHash, priv, config) +} + +// SignDirectKeyBinding computes a signature from priv +// On success, the signature is stored in sig. +// Call Serialize to write it out. +// If config is nil, sensible defaults will be used. +func (sig *Signature) SignDirectKeyBinding(pub *PublicKey, priv *PrivateKey, config *Config) error { + if priv.Dummy() { + return errors.ErrDummyPrivateKey("dummy key found") + } + prepareHash, err := sig.PrepareSign(config) + if err != nil { + return err + } + if err := directKeySignatureHash(pub, prepareHash); err != nil { + return err + } + return sig.Sign(prepareHash, priv, config) } // CrossSignKey computes a signature from signingKey on pub hashed using hashKey. On success, @@ -756,7 +1056,11 @@ func (sig *Signature) SignUserId(id string, pub *PublicKey, priv *PrivateKey, co // If config is nil, sensible defaults will be used. func (sig *Signature) CrossSignKey(pub *PublicKey, hashKey *PublicKey, signingKey *PrivateKey, config *Config) error { - h, err := keySignatureHash(hashKey, pub, sig.Hash) + prepareHash, err := sig.PrepareSign(config) + if err != nil { + return err + } + h, err := keySignatureHash(hashKey, pub, prepareHash) if err != nil { return err } @@ -770,7 +1074,11 @@ func (sig *Signature) SignKey(pub *PublicKey, priv *PrivateKey, config *Config) if priv.Dummy() { return errors.ErrDummyPrivateKey("dummy key found") } - h, err := keySignatureHash(&priv.PublicKey, pub, sig.Hash) + prepareHash, err := sig.PrepareSign(config) + if err != nil { + return err + } + h, err := keySignatureHash(&priv.PublicKey, pub, prepareHash) if err != nil { return err } @@ -781,11 +1089,14 @@ func (sig *Signature) SignKey(pub *PublicKey, priv *PrivateKey, config *Config) // stored in sig. Call Serialize to write it out. // If config is nil, sensible defaults will be used. func (sig *Signature) RevokeKey(pub *PublicKey, priv *PrivateKey, config *Config) error { - h, err := keyRevocationHash(pub, sig.Hash) + prepareHash, err := sig.PrepareSign(config) if err != nil { return err } - return sig.Sign(h, priv, config) + if err := keyRevocationHash(pub, prepareHash); err != nil { + return err + } + return sig.Sign(prepareHash, priv, config) } // RevokeSubkey computes a subkey revocation signature of pub using priv. @@ -802,7 +1113,7 @@ func (sig *Signature) Serialize(w io.Writer) (err error) { if len(sig.outSubpackets) == 0 { sig.outSubpackets = sig.rawSubpackets } - if sig.RSASignature == nil && sig.DSASigR == nil && sig.ECDSASigR == nil && sig.EdDSASigR == nil { + if sig.RSASignature == nil && sig.DSASigR == nil && sig.ECDSASigR == nil && sig.EdDSASigR == nil && sig.EdSig == nil { return errors.InvalidArgumentError("Signature: need to call Sign, SignUserId or SignKey before Serialize") } @@ -819,16 +1130,24 @@ func (sig *Signature) Serialize(w io.Writer) (err error) { case PubKeyAlgoEdDSA: sigLength = int(sig.EdDSASigR.EncodedLength()) sigLength += int(sig.EdDSASigS.EncodedLength()) + case PubKeyAlgoEd25519: + sigLength = ed25519.SignatureSize + case PubKeyAlgoEd448: + sigLength = ed448.SignatureSize default: panic("impossible") } + hashedSubpacketsLen := subpacketsLength(sig.outSubpackets, true) unhashedSubpacketsLen := subpacketsLength(sig.outSubpackets, false) - length := len(sig.HashSuffix) - 6 /* trailer not included */ + + length := 4 + /* length of version|signature type|public-key algorithm|hash algorithm */ + 2 /* length of hashed subpackets */ + hashedSubpacketsLen + 2 /* length of unhashed subpackets */ + unhashedSubpacketsLen + 2 /* hash tag */ + sigLength - if sig.Version == 5 { - length -= 4 // eight-octet instead of four-octet big endian + if sig.Version == 6 { + length += 4 + /* the two length fields are four-octet instead of two */ + 1 + /* salt length */ + len(sig.salt) /* length salt */ } err = serializeHeader(w, packetTypeSignature, length) if err != nil { @@ -842,18 +1161,41 @@ func (sig *Signature) Serialize(w io.Writer) (err error) { } func (sig *Signature) serializeBody(w io.Writer) (err error) { - hashedSubpacketsLen := uint16(uint16(sig.HashSuffix[4])<<8) | uint16(sig.HashSuffix[5]) - fields := sig.HashSuffix[:6+hashedSubpacketsLen] + var fields []byte + if sig.Version == 6 { + // v6 signatures use 4 octets for length + hashedSubpacketsLen := + uint32(uint32(sig.HashSuffix[4])<<24) | + uint32(uint32(sig.HashSuffix[5])<<16) | + uint32(uint32(sig.HashSuffix[6])<<8) | + uint32(sig.HashSuffix[7]) + fields = sig.HashSuffix[:8+hashedSubpacketsLen] + } else { + hashedSubpacketsLen := uint16(uint16(sig.HashSuffix[4])<<8) | + uint16(sig.HashSuffix[5]) + fields = sig.HashSuffix[:6+hashedSubpacketsLen] + + } _, err = w.Write(fields) if err != nil { return } unhashedSubpacketsLen := subpacketsLength(sig.outSubpackets, false) - unhashedSubpackets := make([]byte, 2+unhashedSubpacketsLen) - unhashedSubpackets[0] = byte(unhashedSubpacketsLen >> 8) - unhashedSubpackets[1] = byte(unhashedSubpacketsLen) - serializeSubpackets(unhashedSubpackets[2:], sig.outSubpackets, false) + var unhashedSubpackets []byte + if sig.Version == 6 { + unhashedSubpackets = make([]byte, 4+unhashedSubpacketsLen) + unhashedSubpackets[0] = byte(unhashedSubpacketsLen >> 24) + unhashedSubpackets[1] = byte(unhashedSubpacketsLen >> 16) + unhashedSubpackets[2] = byte(unhashedSubpacketsLen >> 8) + unhashedSubpackets[3] = byte(unhashedSubpacketsLen) + serializeSubpackets(unhashedSubpackets[4:], sig.outSubpackets, false) + } else { + unhashedSubpackets = make([]byte, 2+unhashedSubpacketsLen) + unhashedSubpackets[0] = byte(unhashedSubpacketsLen >> 8) + unhashedSubpackets[1] = byte(unhashedSubpacketsLen) + serializeSubpackets(unhashedSubpackets[2:], sig.outSubpackets, false) + } _, err = w.Write(unhashedSubpackets) if err != nil { @@ -864,6 +1206,18 @@ func (sig *Signature) serializeBody(w io.Writer) (err error) { return } + if sig.Version == 6 { + // write salt for v6 signatures + _, err = w.Write([]byte{uint8(len(sig.salt))}) + if err != nil { + return + } + _, err = w.Write(sig.salt) + if err != nil { + return + } + } + switch sig.PubKeyAlgo { case PubKeyAlgoRSA, PubKeyAlgoRSASignOnly: _, err = w.Write(sig.RSASignature.EncodedBytes()) @@ -882,6 +1236,10 @@ func (sig *Signature) serializeBody(w io.Writer) (err error) { return } _, err = w.Write(sig.EdDSASigS.EncodedBytes()) + case PubKeyAlgoEd25519: + err = ed25519.WriteSignature(w, sig.EdSig) + case PubKeyAlgoEd448: + err = ed448.WriteSignature(w, sig.EdSig) default: panic("impossible") } @@ -899,28 +1257,81 @@ type outputSubpacket struct { func (sig *Signature) buildSubpackets(issuer PublicKey) (subpackets []outputSubpacket, err error) { creationTime := make([]byte, 4) binary.BigEndian.PutUint32(creationTime, uint32(sig.CreationTime.Unix())) - subpackets = append(subpackets, outputSubpacket{true, creationTimeSubpacket, false, creationTime}) - + // Signature Creation Time + subpackets = append(subpackets, outputSubpacket{true, creationTimeSubpacket, true, creationTime}) + // Signature Expiration Time + if sig.SigLifetimeSecs != nil && *sig.SigLifetimeSecs != 0 { + sigLifetime := make([]byte, 4) + binary.BigEndian.PutUint32(sigLifetime, *sig.SigLifetimeSecs) + subpackets = append(subpackets, outputSubpacket{true, signatureExpirationSubpacket, true, sigLifetime}) + } + // Trust Signature + if sig.TrustLevel != 0 { + subpackets = append(subpackets, outputSubpacket{true, trustSubpacket, true, []byte{byte(sig.TrustLevel), byte(sig.TrustAmount)}}) + } + // Regular Expression + if sig.TrustRegularExpression != nil { + // RFC specifies the string should be null-terminated; add a null byte to the end + subpackets = append(subpackets, outputSubpacket{true, regularExpressionSubpacket, true, []byte(*sig.TrustRegularExpression + "\000")}) + } + // Key Expiration Time + if sig.KeyLifetimeSecs != nil && *sig.KeyLifetimeSecs != 0 { + keyLifetime := make([]byte, 4) + binary.BigEndian.PutUint32(keyLifetime, *sig.KeyLifetimeSecs) + subpackets = append(subpackets, outputSubpacket{true, keyExpirationSubpacket, true, keyLifetime}) + } + // Preferred Symmetric Ciphers for v1 SEIPD + if len(sig.PreferredSymmetric) > 0 { + subpackets = append(subpackets, outputSubpacket{true, prefSymmetricAlgosSubpacket, false, sig.PreferredSymmetric}) + } + // Issuer Key ID if sig.IssuerKeyId != nil && sig.Version == 4 { keyId := make([]byte, 8) binary.BigEndian.PutUint64(keyId, *sig.IssuerKeyId) - subpackets = append(subpackets, outputSubpacket{true, issuerSubpacket, false, keyId}) + subpackets = append(subpackets, outputSubpacket{true, issuerSubpacket, true, keyId}) } - if sig.IssuerFingerprint != nil { - contents := append([]uint8{uint8(issuer.Version)}, sig.IssuerFingerprint...) - subpackets = append(subpackets, outputSubpacket{true, issuerFingerprintSubpacket, sig.Version == 5, contents}) + // Notation Data + for _, notation := range sig.Notations { + subpackets = append( + subpackets, + outputSubpacket{ + true, + notationDataSubpacket, + notation.IsCritical, + notation.getData(), + }) } - if sig.SignerUserId != nil { - subpackets = append(subpackets, outputSubpacket{true, signerUserIdSubpacket, false, []byte(*sig.SignerUserId)}) + // Preferred Hash Algorithms + if len(sig.PreferredHash) > 0 { + subpackets = append(subpackets, outputSubpacket{true, prefHashAlgosSubpacket, false, sig.PreferredHash}) } - if sig.SigLifetimeSecs != nil && *sig.SigLifetimeSecs != 0 { - sigLifetime := make([]byte, 4) - binary.BigEndian.PutUint32(sigLifetime, *sig.SigLifetimeSecs) - subpackets = append(subpackets, outputSubpacket{true, signatureExpirationSubpacket, true, sigLifetime}) + // Preferred Compression Algorithms + if len(sig.PreferredCompression) > 0 { + subpackets = append(subpackets, outputSubpacket{true, prefCompressionSubpacket, false, sig.PreferredCompression}) } - + // Keyserver Preferences + // Keyserver preferences may only appear in self-signatures or certification signatures. + if sig.KeyserverPrefsValid { + var prefs byte + if sig.KeyserverPrefNoModify { + prefs |= KeyserverPrefNoModify + } + subpackets = append(subpackets, outputSubpacket{true, keyserverPrefsSubpacket, false, []byte{prefs}}) + } + // Preferred Keyserver + if len(sig.PreferredKeyserver) > 0 { + subpackets = append(subpackets, outputSubpacket{true, prefKeyserverSubpacket, false, []uint8(sig.PreferredKeyserver)}) + } + // Primary User ID + if sig.IsPrimaryId != nil && *sig.IsPrimaryId { + subpackets = append(subpackets, outputSubpacket{true, primaryUserIdSubpacket, false, []byte{1}}) + } + // Policy URI + if len(sig.PolicyURI) > 0 { + subpackets = append(subpackets, outputSubpacket{true, policyUriSubpacket, false, []uint8(sig.PolicyURI)}) + } + // Key Flags // Key flags may only appear in self-signatures or certification signatures. - if sig.FlagsValid { var flags byte if sig.FlagCertify { @@ -944,22 +1355,19 @@ func (sig *Signature) buildSubpackets(issuer PublicKey) (subpackets []outputSubp if sig.FlagGroupKey { flags |= KeyFlagGroupKey } - subpackets = append(subpackets, outputSubpacket{true, keyFlagsSubpacket, false, []byte{flags}}) + subpackets = append(subpackets, outputSubpacket{true, keyFlagsSubpacket, true, []byte{flags}}) } - - for _, notation := range sig.Notations { - subpackets = append( - subpackets, - outputSubpacket{ - true, - notationDataSubpacket, - notation.IsCritical, - notation.getData(), - }) + // Signer's User ID + if sig.SignerUserId != nil { + subpackets = append(subpackets, outputSubpacket{true, signerUserIdSubpacket, false, []byte(*sig.SignerUserId)}) } - - // The following subpackets may only appear in self-signatures. - + // Reason for Revocation + // Revocation reason appears only in revocation signatures and is serialized as per section 5.2.3.31. + if sig.RevocationReason != nil { + subpackets = append(subpackets, outputSubpacket{true, reasonForRevocationSubpacket, true, + append([]uint8{uint8(*sig.RevocationReason)}, []uint8(sig.RevocationReasonText)...)}) + } + // Features var features = byte(0x00) if sig.SEIPDv1 { features |= 0x01 @@ -967,46 +1375,36 @@ func (sig *Signature) buildSubpackets(issuer PublicKey) (subpackets []outputSubp if sig.SEIPDv2 { features |= 0x08 } - if features != 0x00 { subpackets = append(subpackets, outputSubpacket{true, featuresSubpacket, false, []byte{features}}) } - - if sig.TrustLevel != 0 { - subpackets = append(subpackets, outputSubpacket{true, trustSubpacket, true, []byte{byte(sig.TrustLevel), byte(sig.TrustAmount)}}) - } - - if sig.TrustRegularExpression != nil { - // RFC specifies the string should be null-terminated; add a null byte to the end - subpackets = append(subpackets, outputSubpacket{true, regularExpressionSubpacket, true, []byte(*sig.TrustRegularExpression + "\000")}) - } - - if sig.KeyLifetimeSecs != nil && *sig.KeyLifetimeSecs != 0 { - keyLifetime := make([]byte, 4) - binary.BigEndian.PutUint32(keyLifetime, *sig.KeyLifetimeSecs) - subpackets = append(subpackets, outputSubpacket{true, keyExpirationSubpacket, true, keyLifetime}) - } - - if sig.IsPrimaryId != nil && *sig.IsPrimaryId { - subpackets = append(subpackets, outputSubpacket{true, primaryUserIdSubpacket, false, []byte{1}}) - } - - if len(sig.PreferredSymmetric) > 0 { - subpackets = append(subpackets, outputSubpacket{true, prefSymmetricAlgosSubpacket, false, sig.PreferredSymmetric}) - } - - if len(sig.PreferredHash) > 0 { - subpackets = append(subpackets, outputSubpacket{true, prefHashAlgosSubpacket, false, sig.PreferredHash}) + // Embedded Signature + // EmbeddedSignature appears only in subkeys capable of signing and is serialized as per section 5.2.3.34. + if sig.EmbeddedSignature != nil { + var buf bytes.Buffer + err = sig.EmbeddedSignature.serializeBody(&buf) + if err != nil { + return + } + subpackets = append(subpackets, outputSubpacket{true, embeddedSignatureSubpacket, true, buf.Bytes()}) } - - if len(sig.PreferredCompression) > 0 { - subpackets = append(subpackets, outputSubpacket{true, prefCompressionSubpacket, false, sig.PreferredCompression}) + // Issuer Fingerprint + if sig.IssuerFingerprint != nil { + contents := append([]uint8{uint8(issuer.Version)}, sig.IssuerFingerprint...) + subpackets = append(subpackets, outputSubpacket{true, issuerFingerprintSubpacket, sig.Version >= 5, contents}) } - - if len(sig.PolicyURI) > 0 { - subpackets = append(subpackets, outputSubpacket{true, policyUriSubpacket, false, []uint8(sig.PolicyURI)}) + // Intended Recipient Fingerprint + for _, recipient := range sig.IntendedRecipients { + subpackets = append( + subpackets, + outputSubpacket{ + true, + intendedRecipientSubpacket, + false, + recipient.Serialize(), + }) } - + // Preferred AEAD Ciphersuites if len(sig.PreferredCipherSuites) > 0 { serialized := make([]byte, len(sig.PreferredCipherSuites)*2) for i, cipherSuite := range sig.PreferredCipherSuites { @@ -1015,23 +1413,6 @@ func (sig *Signature) buildSubpackets(issuer PublicKey) (subpackets []outputSubp } subpackets = append(subpackets, outputSubpacket{true, prefCipherSuitesSubpacket, false, serialized}) } - - // Revocation reason appears only in revocation signatures and is serialized as per section 5.2.3.23. - if sig.RevocationReason != nil { - subpackets = append(subpackets, outputSubpacket{true, reasonForRevocationSubpacket, true, - append([]uint8{uint8(*sig.RevocationReason)}, []uint8(sig.RevocationReasonText)...)}) - } - - // EmbeddedSignature appears only in subkeys capable of signing and is serialized as per section 5.2.3.26. - if sig.EmbeddedSignature != nil { - var buf bytes.Buffer - err = sig.EmbeddedSignature.serializeBody(&buf) - if err != nil { - return - } - subpackets = append(subpackets, outputSubpacket{true, embeddedSignatureSubpacket, true, buf.Bytes()}) - } - return } @@ -1073,8 +1454,6 @@ func (sig *Signature) AddMetadataToHashSuffix() { binary.BigEndian.PutUint32(buf[:], lit.Time) suffix.Write(buf[:]) - // Update the counter and restore trailing bytes - l = uint64(suffix.Len()) suffix.Write([]byte{0x05, 0xff}) suffix.Write([]byte{ uint8(l >> 56), uint8(l >> 48), uint8(l >> 40), uint8(l >> 32), @@ -1082,3 +1461,49 @@ func (sig *Signature) AddMetadataToHashSuffix() { }) sig.HashSuffix = suffix.Bytes() } + +// SaltLengthForHash selects the required salt length for the given hash algorithm, +// as per Table 23 (Hash algorithm registry) of the crypto refresh. +// See RFC 9580 Section 9.5. +func SaltLengthForHash(hash crypto.Hash) (int, error) { + switch hash { + case crypto.SHA256, crypto.SHA224, crypto.SHA3_256: + return 16, nil + case crypto.SHA384: + return 24, nil + case crypto.SHA512, crypto.SHA3_512: + return 32, nil + default: + return 0, errors.UnsupportedError("hash function not supported for V6 signatures") + } +} + +// SignatureSaltForHash generates a random signature salt +// with the length for the given hash algorithm. +// See RFC 9580 Section 9.5. +func SignatureSaltForHash(hash crypto.Hash, randReader io.Reader) ([]byte, error) { + saltLength, err := SaltLengthForHash(hash) + if err != nil { + return nil, err + } + salt := make([]byte, saltLength) + _, err = io.ReadFull(randReader, salt) + if err != nil { + return nil, err + } + return salt, nil +} + +// removeNotationsWithName removes all notations in this signature with the given name. +func (sig *Signature) removeNotationsWithName(name string) { + if sig == nil || sig.Notations == nil { + return + } + updatedNotations := make([]*Notation, 0, len(sig.Notations)) + for _, notation := range sig.Notations { + if notation.Name != name { + updatedNotations = append(updatedNotations, notation) + } + } + sig.Notations = updatedNotations +} diff --git a/vendor/github.com/ProtonMail/go-crypto/openpgp/packet/symmetric_key_encrypted.go b/vendor/github.com/ProtonMail/go-crypto/openpgp/packet/symmetric_key_encrypted.go index bac2b132ea..2812a1db88 100644 --- a/vendor/github.com/ProtonMail/go-crypto/openpgp/packet/symmetric_key_encrypted.go +++ b/vendor/github.com/ProtonMail/go-crypto/openpgp/packet/symmetric_key_encrypted.go @@ -7,11 +7,13 @@ package packet import ( "bytes" "crypto/cipher" + "crypto/sha256" "io" "strconv" "github.com/ProtonMail/go-crypto/openpgp/errors" "github.com/ProtonMail/go-crypto/openpgp/s2k" + "golang.org/x/crypto/hkdf" ) // This is the largest session key that we'll support. Since at most 256-bit cipher @@ -39,10 +41,21 @@ func (ske *SymmetricKeyEncrypted) parse(r io.Reader) error { return err } ske.Version = int(buf[0]) - if ske.Version != 4 && ske.Version != 5 { + if ske.Version != 4 && ske.Version != 5 && ske.Version != 6 { return errors.UnsupportedError("unknown SymmetricKeyEncrypted version") } + if V5Disabled && ske.Version == 5 { + return errors.UnsupportedError("support for parsing v5 entities is disabled; build with `-tags v5` if needed") + } + + if ske.Version > 5 { + // Scalar octet count + if _, err := readFull(r, buf[:]); err != nil { + return err + } + } + // Cipher function if _, err := readFull(r, buf[:]); err != nil { return err @@ -52,7 +65,7 @@ func (ske *SymmetricKeyEncrypted) parse(r io.Reader) error { return errors.UnsupportedError("unknown cipher: " + strconv.Itoa(int(buf[0]))) } - if ske.Version == 5 { + if ske.Version >= 5 { // AEAD mode if _, err := readFull(r, buf[:]); err != nil { return errors.StructuralError("cannot read AEAD octet from packet") @@ -60,6 +73,13 @@ func (ske *SymmetricKeyEncrypted) parse(r io.Reader) error { ske.Mode = AEADMode(buf[0]) } + if ske.Version > 5 { + // Scalar octet count + if _, err := readFull(r, buf[:]); err != nil { + return err + } + } + var err error if ske.s2k, err = s2k.Parse(r); err != nil { if _, ok := err.(errors.ErrDummyPrivateKey); ok { @@ -68,7 +88,7 @@ func (ske *SymmetricKeyEncrypted) parse(r io.Reader) error { return err } - if ske.Version == 5 { + if ske.Version >= 5 { // AEAD IV iv := make([]byte, ske.Mode.IvLength()) _, err := readFull(r, iv) @@ -109,8 +129,8 @@ func (ske *SymmetricKeyEncrypted) Decrypt(passphrase []byte) ([]byte, CipherFunc case 4: plaintextKey, cipherFunc, err := ske.decryptV4(key) return plaintextKey, cipherFunc, err - case 5: - plaintextKey, err := ske.decryptV5(key) + case 5, 6: + plaintextKey, err := ske.aeadDecrypt(ske.Version, key) return plaintextKey, CipherFunction(0), err } err := errors.UnsupportedError("unknown SymmetricKeyEncrypted version") @@ -136,9 +156,9 @@ func (ske *SymmetricKeyEncrypted) decryptV4(key []byte) ([]byte, CipherFunction, return plaintextKey, cipherFunc, nil } -func (ske *SymmetricKeyEncrypted) decryptV5(key []byte) ([]byte, error) { - adata := []byte{0xc3, byte(5), byte(ske.CipherFunc), byte(ske.Mode)} - aead := getEncryptedKeyAeadInstance(ske.CipherFunc, ske.Mode, key, adata) +func (ske *SymmetricKeyEncrypted) aeadDecrypt(version int, key []byte) ([]byte, error) { + adata := []byte{0xc3, byte(version), byte(ske.CipherFunc), byte(ske.Mode)} + aead := getEncryptedKeyAeadInstance(ske.CipherFunc, ske.Mode, key, adata, version) plaintextKey, err := aead.Open(nil, ske.iv, ske.encryptedKey, adata) if err != nil { @@ -175,10 +195,22 @@ func SerializeSymmetricKeyEncrypted(w io.Writer, passphrase []byte, config *Conf // the given passphrase. The returned session key must be passed to // SerializeSymmetricallyEncrypted. // If config is nil, sensible defaults will be used. +// Deprecated: Use SerializeSymmetricKeyEncryptedAEADReuseKey instead. func SerializeSymmetricKeyEncryptedReuseKey(w io.Writer, sessionKey []byte, passphrase []byte, config *Config) (err error) { + return SerializeSymmetricKeyEncryptedAEADReuseKey(w, sessionKey, passphrase, config.AEAD() != nil, config) +} + +// SerializeSymmetricKeyEncryptedAEADReuseKey serializes a symmetric key packet to w. +// The packet contains the given session key, encrypted by a key derived from +// the given passphrase. The returned session key must be passed to +// SerializeSymmetricallyEncrypted. +// If aeadSupported is set, SKESK v6 is used, otherwise v4. +// Note: aeadSupported MUST match the value passed to SerializeSymmetricallyEncrypted. +// If config is nil, sensible defaults will be used. +func SerializeSymmetricKeyEncryptedAEADReuseKey(w io.Writer, sessionKey []byte, passphrase []byte, aeadSupported bool, config *Config) (err error) { var version int - if config.AEAD() != nil { - version = 5 + if aeadSupported { + version = 6 } else { version = 4 } @@ -203,11 +235,15 @@ func SerializeSymmetricKeyEncryptedReuseKey(w io.Writer, sessionKey []byte, pass switch version { case 4: packetLength = 2 /* header */ + len(s2kBytes) + 1 /* cipher type */ + keySize - case 5: + case 5, 6: ivLen := config.AEAD().Mode().IvLength() tagLen := config.AEAD().Mode().TagLength() packetLength = 3 + len(s2kBytes) + ivLen + keySize + tagLen } + if version > 5 { + packetLength += 2 // additional octet count fields + } + err = serializeHeader(w, packetTypeSymmetricKeyEncrypted, packetLength) if err != nil { return @@ -216,13 +252,22 @@ func SerializeSymmetricKeyEncryptedReuseKey(w io.Writer, sessionKey []byte, pass // Symmetric Key Encrypted Version buf := []byte{byte(version)} + if version > 5 { + // Scalar octet count + buf = append(buf, byte(3+len(s2kBytes)+config.AEAD().Mode().IvLength())) + } + // Cipher function buf = append(buf, byte(cipherFunc)) - if version == 5 { + if version >= 5 { // AEAD mode buf = append(buf, byte(config.AEAD().Mode())) } + if version > 5 { + // Scalar octet count + buf = append(buf, byte(len(s2kBytes))) + } _, err = w.Write(buf) if err != nil { return @@ -243,10 +288,10 @@ func SerializeSymmetricKeyEncryptedReuseKey(w io.Writer, sessionKey []byte, pass if err != nil { return } - case 5: + case 5, 6: mode := config.AEAD().Mode() - adata := []byte{0xc3, byte(5), byte(cipherFunc), byte(mode)} - aead := getEncryptedKeyAeadInstance(cipherFunc, mode, keyEncryptingKey, adata) + adata := []byte{0xc3, byte(version), byte(cipherFunc), byte(mode)} + aead := getEncryptedKeyAeadInstance(cipherFunc, mode, keyEncryptingKey, adata, version) // Sample iv using random reader iv := make([]byte, config.AEAD().Mode().IvLength()) @@ -270,7 +315,17 @@ func SerializeSymmetricKeyEncryptedReuseKey(w io.Writer, sessionKey []byte, pass return } -func getEncryptedKeyAeadInstance(c CipherFunction, mode AEADMode, inputKey, associatedData []byte) (aead cipher.AEAD) { - blockCipher := c.new(inputKey) +func getEncryptedKeyAeadInstance(c CipherFunction, mode AEADMode, inputKey, associatedData []byte, version int) (aead cipher.AEAD) { + var blockCipher cipher.Block + if version > 5 { + hkdfReader := hkdf.New(sha256.New, inputKey, []byte{}, associatedData) + + encryptionKey := make([]byte, c.KeySize()) + _, _ = readFull(hkdfReader, encryptionKey) + + blockCipher = c.new(encryptionKey) + } else { + blockCipher = c.new(inputKey) + } return mode.new(blockCipher) } diff --git a/vendor/github.com/ProtonMail/go-crypto/openpgp/packet/symmetrically_encrypted.go b/vendor/github.com/ProtonMail/go-crypto/openpgp/packet/symmetrically_encrypted.go index e9bbf0327e..0e898742cf 100644 --- a/vendor/github.com/ProtonMail/go-crypto/openpgp/packet/symmetrically_encrypted.go +++ b/vendor/github.com/ProtonMail/go-crypto/openpgp/packet/symmetrically_encrypted.go @@ -74,6 +74,10 @@ func (se *SymmetricallyEncrypted) Decrypt(c CipherFunction, key []byte) (io.Read // SerializeSymmetricallyEncrypted serializes a symmetrically encrypted packet // to w and returns a WriteCloser to which the to-be-encrypted packets can be // written. +// If aeadSupported is set to true, SEIPDv2 is used with the indicated CipherSuite. +// Otherwise, SEIPDv1 is used with the indicated CipherFunction. +// Note: aeadSupported MUST match the value passed to SerializeEncryptedKeyAEAD +// and/or SerializeSymmetricKeyEncryptedAEADReuseKey. // If config is nil, sensible defaults will be used. func SerializeSymmetricallyEncrypted(w io.Writer, c CipherFunction, aeadSupported bool, cipherSuite CipherSuite, key []byte, config *Config) (Contents io.WriteCloser, err error) { writeCloser := noOpCloser{w} diff --git a/vendor/github.com/ProtonMail/go-crypto/openpgp/packet/symmetrically_encrypted_aead.go b/vendor/github.com/ProtonMail/go-crypto/openpgp/packet/symmetrically_encrypted_aead.go index e96252c196..3957b2d53e 100644 --- a/vendor/github.com/ProtonMail/go-crypto/openpgp/packet/symmetrically_encrypted_aead.go +++ b/vendor/github.com/ProtonMail/go-crypto/openpgp/packet/symmetrically_encrypted_aead.go @@ -7,7 +7,9 @@ package packet import ( "crypto/cipher" "crypto/sha256" + "fmt" "io" + "strconv" "github.com/ProtonMail/go-crypto/openpgp/errors" "golang.org/x/crypto/hkdf" @@ -25,19 +27,19 @@ func (se *SymmetricallyEncrypted) parseAead(r io.Reader) error { se.Cipher = CipherFunction(headerData[0]) // cipherFunc must have block size 16 to use AEAD if se.Cipher.blockSize() != 16 { - return errors.UnsupportedError("invalid aead cipher: " + string(se.Cipher)) + return errors.UnsupportedError("invalid aead cipher: " + strconv.Itoa(int(se.Cipher))) } // Mode se.Mode = AEADMode(headerData[1]) if se.Mode.TagLength() == 0 { - return errors.UnsupportedError("unknown aead mode: " + string(se.Mode)) + return errors.UnsupportedError("unknown aead mode: " + strconv.Itoa(int(se.Mode))) } // Chunk size se.ChunkSizeByte = headerData[2] if se.ChunkSizeByte > 16 { - return errors.UnsupportedError("invalid aead chunk size byte: " + string(se.ChunkSizeByte)) + return errors.UnsupportedError("invalid aead chunk size byte: " + strconv.Itoa(int(se.ChunkSizeByte))) } // Salt @@ -62,8 +64,11 @@ func (se *SymmetricallyEncrypted) associatedData() []byte { // decryptAead decrypts a V2 SEIPD packet (AEAD) as specified in // https://www.ietf.org/archive/id/draft-ietf-openpgp-crypto-refresh-07.html#section-5.13.2 func (se *SymmetricallyEncrypted) decryptAead(inputKey []byte) (io.ReadCloser, error) { - aead, nonce := getSymmetricallyEncryptedAeadInstance(se.Cipher, se.Mode, inputKey, se.Salt[:], se.associatedData()) + if se.Cipher.KeySize() != len(inputKey) { + return nil, errors.StructuralError(fmt.Sprintf("invalid session key length for cipher: got %d bytes, but expected %d bytes", len(inputKey), se.Cipher.KeySize())) + } + aead, nonce := getSymmetricallyEncryptedAeadInstance(se.Cipher, se.Mode, inputKey, se.Salt[:], se.associatedData()) // Carry the first tagLen bytes tagLen := se.Mode.TagLength() peekedBytes := make([]byte, tagLen) @@ -115,7 +120,7 @@ func serializeSymmetricallyEncryptedAead(ciphertext io.WriteCloser, cipherSuite // Random salt salt := make([]byte, aeadSaltSize) - if _, err := rand.Read(salt); err != nil { + if _, err := io.ReadFull(rand, salt); err != nil { return nil, err } diff --git a/vendor/github.com/ProtonMail/go-crypto/openpgp/packet/symmetrically_encrypted_mdc.go b/vendor/github.com/ProtonMail/go-crypto/openpgp/packet/symmetrically_encrypted_mdc.go index fa26bebe38..8b18623684 100644 --- a/vendor/github.com/ProtonMail/go-crypto/openpgp/packet/symmetrically_encrypted_mdc.go +++ b/vendor/github.com/ProtonMail/go-crypto/openpgp/packet/symmetrically_encrypted_mdc.go @@ -148,7 +148,7 @@ const mdcPacketTagByte = byte(0x80) | 0x40 | 19 func (ser *seMDCReader) Close() error { if ser.error { - return errors.ErrMDCMissing + return errors.ErrMDCHashMismatch } for !ser.eof { @@ -159,7 +159,7 @@ func (ser *seMDCReader) Close() error { break } if err != nil { - return errors.ErrMDCMissing + return errors.ErrMDCHashMismatch } } @@ -172,7 +172,7 @@ func (ser *seMDCReader) Close() error { // The hash already includes the MDC header, but we still check its value // to confirm encryption correctness if ser.trailer[0] != mdcPacketTagByte || ser.trailer[1] != sha1.Size { - return errors.ErrMDCMissing + return errors.ErrMDCHashMismatch } return nil } @@ -237,9 +237,9 @@ func serializeSymmetricallyEncryptedMdc(ciphertext io.WriteCloser, c CipherFunct block := c.new(key) blockSize := block.BlockSize() iv := make([]byte, blockSize) - _, err = config.Random().Read(iv) + _, err = io.ReadFull(config.Random(), iv) if err != nil { - return + return nil, err } s, prefix := NewOCFBEncrypter(block, iv, OCFBNoResync) _, err = ciphertext.Write(prefix) diff --git a/vendor/github.com/ProtonMail/go-crypto/openpgp/packet/userattribute.go b/vendor/github.com/ProtonMail/go-crypto/openpgp/packet/userattribute.go index 88ec72c6c4..63814ed132 100644 --- a/vendor/github.com/ProtonMail/go-crypto/openpgp/packet/userattribute.go +++ b/vendor/github.com/ProtonMail/go-crypto/openpgp/packet/userattribute.go @@ -9,7 +9,6 @@ import ( "image" "image/jpeg" "io" - "io/ioutil" ) const UserAttrImageSubpacket = 1 @@ -63,7 +62,7 @@ func NewUserAttribute(contents ...*OpaqueSubpacket) *UserAttribute { func (uat *UserAttribute) parse(r io.Reader) (err error) { // RFC 4880, section 5.13 - b, err := ioutil.ReadAll(r) + b, err := io.ReadAll(r) if err != nil { return } diff --git a/vendor/github.com/ProtonMail/go-crypto/openpgp/packet/userid.go b/vendor/github.com/ProtonMail/go-crypto/openpgp/packet/userid.go index 614fbafd5e..3c7451a3c3 100644 --- a/vendor/github.com/ProtonMail/go-crypto/openpgp/packet/userid.go +++ b/vendor/github.com/ProtonMail/go-crypto/openpgp/packet/userid.go @@ -6,7 +6,6 @@ package packet import ( "io" - "io/ioutil" "strings" ) @@ -66,7 +65,7 @@ func NewUserId(name, comment, email string) *UserId { func (uid *UserId) parse(r io.Reader) (err error) { // RFC 4880, section 5.11 - b, err := ioutil.ReadAll(r) + b, err := io.ReadAll(r) if err != nil { return } diff --git a/vendor/github.com/ProtonMail/go-crypto/openpgp/read.go b/vendor/github.com/ProtonMail/go-crypto/openpgp/read.go index 8499c73790..e6dd9b5fd3 100644 --- a/vendor/github.com/ProtonMail/go-crypto/openpgp/read.go +++ b/vendor/github.com/ProtonMail/go-crypto/openpgp/read.go @@ -46,6 +46,7 @@ type MessageDetails struct { DecryptedWith Key // the private key used to decrypt the message, if any. IsSigned bool // true if the message is signed. SignedByKeyId uint64 // the key id of the signer, if any. + SignedByFingerprint []byte // the key fingerprint of the signer, if any. SignedBy *Key // the key of the signer, if available. LiteralData *packet.LiteralData // the metadata of the contents UnverifiedBody io.Reader // the contents of the message. @@ -117,7 +118,7 @@ ParsePackets: // This packet contains the decryption key encrypted to a public key. md.EncryptedToKeyIds = append(md.EncryptedToKeyIds, p.KeyId) switch p.Algo { - case packet.PubKeyAlgoRSA, packet.PubKeyAlgoRSAEncryptOnly, packet.PubKeyAlgoElGamal, packet.PubKeyAlgoECDH: + case packet.PubKeyAlgoRSA, packet.PubKeyAlgoRSAEncryptOnly, packet.PubKeyAlgoElGamal, packet.PubKeyAlgoECDH, packet.PubKeyAlgoX25519, packet.PubKeyAlgoX448: break default: continue @@ -232,7 +233,7 @@ FindKey: } mdFinal, sensitiveParsingErr := readSignedMessage(packets, md, keyring, config) if sensitiveParsingErr != nil { - return nil, errors.StructuralError("parsing error") + return nil, errors.HandleSensitiveParsingError(sensitiveParsingErr, md.decrypted != nil) } return mdFinal, nil } @@ -270,13 +271,17 @@ FindLiteralData: prevLast = true } - h, wrappedHash, err = hashForSignature(p.Hash, p.SigType) + h, wrappedHash, err = hashForSignature(p.Hash, p.SigType, p.Salt) if err != nil { md.SignatureError = err } md.IsSigned = true + if p.Version == 6 { + md.SignedByFingerprint = p.KeyFingerprint + } md.SignedByKeyId = p.KeyId + if keyring != nil { keys := keyring.KeysByIdUsage(p.KeyId, packet.KeyFlagSign) if len(keys) > 0 { @@ -292,7 +297,7 @@ FindLiteralData: if md.IsSigned && md.SignatureError == nil { md.UnverifiedBody = &signatureCheckReader{packets, h, wrappedHash, md, config} } else if md.decrypted != nil { - md.UnverifiedBody = checkReader{md} + md.UnverifiedBody = &checkReader{md, false} } else { md.UnverifiedBody = md.LiteralData.Body } @@ -300,12 +305,22 @@ FindLiteralData: return md, nil } +func wrapHashForSignature(hashFunc hash.Hash, sigType packet.SignatureType) (hash.Hash, error) { + switch sigType { + case packet.SigTypeBinary: + return hashFunc, nil + case packet.SigTypeText: + return NewCanonicalTextHash(hashFunc), nil + } + return nil, errors.UnsupportedError("unsupported signature type: " + strconv.Itoa(int(sigType))) +} + // hashForSignature returns a pair of hashes that can be used to verify a // signature. The signature may specify that the contents of the signed message // should be preprocessed (i.e. to normalize line endings). Thus this function // returns two hashes. The second should be used to hash the message itself and // performs any needed preprocessing. -func hashForSignature(hashFunc crypto.Hash, sigType packet.SignatureType) (hash.Hash, hash.Hash, error) { +func hashForSignature(hashFunc crypto.Hash, sigType packet.SignatureType, sigSalt []byte) (hash.Hash, hash.Hash, error) { if _, ok := algorithm.HashToHashIdWithSha1(hashFunc); !ok { return nil, nil, errors.UnsupportedError("unsupported hash function") } @@ -313,14 +328,19 @@ func hashForSignature(hashFunc crypto.Hash, sigType packet.SignatureType) (hash. return nil, nil, errors.UnsupportedError("hash not available: " + strconv.Itoa(int(hashFunc))) } h := hashFunc.New() - + if sigSalt != nil { + h.Write(sigSalt) + } + wrappedHash, err := wrapHashForSignature(h, sigType) + if err != nil { + return nil, nil, err + } switch sigType { case packet.SigTypeBinary: - return h, h, nil + return h, wrappedHash, nil case packet.SigTypeText: - return h, NewCanonicalTextHash(h), nil + return h, wrappedHash, nil } - return nil, nil, errors.UnsupportedError("unsupported signature type: " + strconv.Itoa(int(sigType))) } @@ -328,21 +348,27 @@ func hashForSignature(hashFunc crypto.Hash, sigType packet.SignatureType) (hash. // it closes the ReadCloser from any SymmetricallyEncrypted packet to trigger // MDC checks. type checkReader struct { - md *MessageDetails + md *MessageDetails + checked bool } -func (cr checkReader) Read(buf []byte) (int, error) { +func (cr *checkReader) Read(buf []byte) (int, error) { n, sensitiveParsingError := cr.md.LiteralData.Body.Read(buf) if sensitiveParsingError == io.EOF { + if cr.checked { + // Only check once + return n, io.EOF + } mdcErr := cr.md.decrypted.Close() if mdcErr != nil { return n, mdcErr } + cr.checked = true return n, io.EOF } if sensitiveParsingError != nil { - return n, errors.StructuralError("parsing error") + return n, errors.HandleSensitiveParsingError(sensitiveParsingError, true) } return n, nil @@ -366,6 +392,7 @@ func (scr *signatureCheckReader) Read(buf []byte) (int, error) { scr.wrappedHash.Write(buf[:n]) } + readsDecryptedData := scr.md.decrypted != nil if sensitiveParsingError == io.EOF { var p packet.Packet var readError error @@ -384,7 +411,7 @@ func (scr *signatureCheckReader) Read(buf []byte) (int, error) { key := scr.md.SignedBy signatureError := key.PublicKey.VerifySignature(scr.h, sig) if signatureError == nil { - signatureError = checkSignatureDetails(key, sig, scr.config) + signatureError = checkMessageSignatureDetails(key, sig, scr.config) } scr.md.Signature = sig scr.md.SignatureError = signatureError @@ -408,16 +435,15 @@ func (scr *signatureCheckReader) Read(buf []byte) (int, error) { // unsigned hash of its own. In order to check this we need to // close that Reader. if scr.md.decrypted != nil { - mdcErr := scr.md.decrypted.Close() - if mdcErr != nil { - return n, mdcErr + if sensitiveParsingError := scr.md.decrypted.Close(); sensitiveParsingError != nil { + return n, errors.HandleSensitiveParsingError(sensitiveParsingError, true) } } return n, io.EOF } if sensitiveParsingError != nil { - return n, errors.StructuralError("parsing error") + return n, errors.HandleSensitiveParsingError(sensitiveParsingError, readsDecryptedData) } return n, nil @@ -428,14 +454,13 @@ func (scr *signatureCheckReader) Read(buf []byte) (int, error) { // if any, and a possible signature verification error. // If the signer isn't known, ErrUnknownIssuer is returned. func VerifyDetachedSignature(keyring KeyRing, signed, signature io.Reader, config *packet.Config) (sig *packet.Signature, signer *Entity, err error) { - var expectedHashes []crypto.Hash - return verifyDetachedSignature(keyring, signed, signature, expectedHashes, config) + return verifyDetachedSignature(keyring, signed, signature, nil, false, config) } // VerifyDetachedSignatureAndHash performs the same actions as // VerifyDetachedSignature and checks that the expected hash functions were used. func VerifyDetachedSignatureAndHash(keyring KeyRing, signed, signature io.Reader, expectedHashes []crypto.Hash, config *packet.Config) (sig *packet.Signature, signer *Entity, err error) { - return verifyDetachedSignature(keyring, signed, signature, expectedHashes, config) + return verifyDetachedSignature(keyring, signed, signature, expectedHashes, true, config) } // CheckDetachedSignature takes a signed file and a detached signature and @@ -443,25 +468,24 @@ func VerifyDetachedSignatureAndHash(keyring KeyRing, signed, signature io.Reader // signature verification error. If the signer isn't known, // ErrUnknownIssuer is returned. func CheckDetachedSignature(keyring KeyRing, signed, signature io.Reader, config *packet.Config) (signer *Entity, err error) { - var expectedHashes []crypto.Hash - return CheckDetachedSignatureAndHash(keyring, signed, signature, expectedHashes, config) + _, signer, err = verifyDetachedSignature(keyring, signed, signature, nil, false, config) + return } // CheckDetachedSignatureAndHash performs the same actions as // CheckDetachedSignature and checks that the expected hash functions were used. func CheckDetachedSignatureAndHash(keyring KeyRing, signed, signature io.Reader, expectedHashes []crypto.Hash, config *packet.Config) (signer *Entity, err error) { - _, signer, err = verifyDetachedSignature(keyring, signed, signature, expectedHashes, config) + _, signer, err = verifyDetachedSignature(keyring, signed, signature, expectedHashes, true, config) return } -func verifyDetachedSignature(keyring KeyRing, signed, signature io.Reader, expectedHashes []crypto.Hash, config *packet.Config) (sig *packet.Signature, signer *Entity, err error) { +func verifyDetachedSignature(keyring KeyRing, signed, signature io.Reader, expectedHashes []crypto.Hash, checkHashes bool, config *packet.Config) (sig *packet.Signature, signer *Entity, err error) { var issuerKeyId uint64 var hashFunc crypto.Hash var sigType packet.SignatureType var keys []Key var p packet.Packet - expectedHashesLen := len(expectedHashes) packets := packet.NewReader(signature) for { p, err = packets.Next() @@ -483,16 +507,19 @@ func verifyDetachedSignature(keyring KeyRing, signed, signature io.Reader, expec issuerKeyId = *sig.IssuerKeyId hashFunc = sig.Hash sigType = sig.SigType - - for i, expectedHash := range expectedHashes { - if hashFunc == expectedHash { - break + if checkHashes { + matchFound := false + // check for hashes + for _, expectedHash := range expectedHashes { + if hashFunc == expectedHash { + matchFound = true + break + } } - if i+1 == expectedHashesLen { - return nil, nil, errors.StructuralError("hash algorithm mismatch with cleartext message headers") + if !matchFound { + return nil, nil, errors.StructuralError("hash algorithm or salt mismatch with cleartext message headers") } } - keys = keyring.KeysByIdUsage(issuerKeyId, packet.KeyFlagSign) if len(keys) > 0 { break @@ -503,7 +530,11 @@ func verifyDetachedSignature(keyring KeyRing, signed, signature io.Reader, expec panic("unreachable") } - h, wrappedHash, err := hashForSignature(hashFunc, sigType) + h, err := sig.PrepareVerify() + if err != nil { + return nil, nil, err + } + wrappedHash, err := wrapHashForSignature(h, sigType) if err != nil { return nil, nil, err } @@ -515,7 +546,7 @@ func verifyDetachedSignature(keyring KeyRing, signed, signature io.Reader, expec for _, key := range keys { err = key.PublicKey.VerifySignature(h, sig) if err == nil { - return sig, key.Entity, checkSignatureDetails(&key, sig, config) + return sig, key.Entity, checkMessageSignatureDetails(&key, sig, config) } } @@ -533,7 +564,7 @@ func CheckArmoredDetachedSignature(keyring KeyRing, signed, signature io.Reader, return CheckDetachedSignature(keyring, signed, body, config) } -// checkSignatureDetails returns an error if: +// checkMessageSignatureDetails returns an error if: // - The signature (or one of the binding signatures mentioned below) // has a unknown critical notation data subpacket // - The primary key of the signing entity is revoked @@ -551,15 +582,11 @@ func CheckArmoredDetachedSignature(keyring KeyRing, signed, signature io.Reader, // NOTE: The order of these checks is important, as the caller may choose to // ignore ErrSignatureExpired or ErrKeyExpired errors, but should never // ignore any other errors. -// -// TODO: Also return an error if: -// - The primary key is expired according to a direct-key signature -// - (For V5 keys only:) The direct-key signature (exists and) is expired -func checkSignatureDetails(key *Key, signature *packet.Signature, config *packet.Config) error { +func checkMessageSignatureDetails(key *Key, signature *packet.Signature, config *packet.Config) error { now := config.Now() - primaryIdentity := key.Entity.PrimaryIdentity() + primarySelfSignature, primaryIdentity := key.Entity.PrimarySelfSignature() signedBySubKey := key.PublicKey != key.Entity.PrimaryKey - sigsToCheck := []*packet.Signature{signature, primaryIdentity.SelfSignature} + sigsToCheck := []*packet.Signature{signature, primarySelfSignature} if signedBySubKey { sigsToCheck = append(sigsToCheck, key.SelfSignature, key.SelfSignature.EmbeddedSignature) } @@ -572,10 +599,10 @@ func checkSignatureDetails(key *Key, signature *packet.Signature, config *packet } if key.Entity.Revoked(now) || // primary key is revoked (signedBySubKey && key.Revoked(now)) || // subkey is revoked - primaryIdentity.Revoked(now) { // primary identity is revoked + (primaryIdentity != nil && primaryIdentity.Revoked(now)) { // primary identity is revoked for v4 return errors.ErrKeyRevoked } - if key.Entity.PrimaryKey.KeyExpired(primaryIdentity.SelfSignature, now) { // primary key is expired + if key.Entity.PrimaryKey.KeyExpired(primarySelfSignature, now) { // primary key is expired return errors.ErrKeyExpired } if signedBySubKey { diff --git a/vendor/github.com/ProtonMail/go-crypto/openpgp/read_write_test_data.go b/vendor/github.com/ProtonMail/go-crypto/openpgp/read_write_test_data.go index db6dad5c0b..670d60226a 100644 --- a/vendor/github.com/ProtonMail/go-crypto/openpgp/read_write_test_data.go +++ b/vendor/github.com/ProtonMail/go-crypto/openpgp/read_write_test_data.go @@ -26,6 +26,8 @@ const testKeys1And2PrivateHex = "9501d8044d3c5c10010400b1d13382944bd5aba23a43129 const dsaElGamalTestKeysHex = "9501e1044dfcb16a110400aa3e5c1a1f43dd28c2ffae8abf5cfce555ee874134d8ba0a0f7b868ce2214beddc74e5e1e21ded354a95d18acdaf69e5e342371a71fbb9093162e0c5f3427de413a7f2c157d83f5cd2f9d791256dc4f6f0e13f13c3302af27f2384075ab3021dff7a050e14854bbde0a1094174855fc02f0bae8e00a340d94a1f22b32e48485700a0cec672ac21258fb95f61de2ce1af74b2c4fa3e6703ff698edc9be22c02ae4d916e4fa223f819d46582c0516235848a77b577ea49018dcd5e9e15cff9dbb4663a1ae6dd7580fa40946d40c05f72814b0f88481207e6c0832c3bded4853ebba0a7e3bd8e8c66df33d5a537cd4acf946d1080e7a3dcea679cb2b11a72a33a2b6a9dc85f466ad2ddf4c3db6283fa645343286971e3dd700703fc0c4e290d45767f370831a90187e74e9972aae5bff488eeff7d620af0362bfb95c1a6c3413ab5d15a2e4139e5d07a54d72583914661ed6a87cce810be28a0aa8879a2dd39e52fb6fe800f4f181ac7e328f740cde3d09a05cecf9483e4cca4253e60d4429ffd679d9996a520012aad119878c941e3cf151459873bdfc2a9563472fe0303027a728f9feb3b864260a1babe83925ce794710cfd642ee4ae0e5b9d74cee49e9c67b6cd0ea5dfbb582132195a121356a1513e1bca73e5b80c58c7ccb4164453412f456c47616d616c2054657374204b65792031886204131102002205024dfcb16a021b03060b090807030206150802090a0b0416020301021e01021780000a091033af447ccd759b09fadd00a0b8fd6f5a790bad7e9f2dbb7632046dc4493588db009c087c6a9ba9f7f49fab221587a74788c00db4889ab00200009d0157044dfcb16a1004008dec3f9291205255ccff8c532318133a6840739dd68b03ba942676f9038612071447bf07d00d559c5c0875724ea16a4c774f80d8338b55fca691a0522e530e604215b467bbc9ccfd483a1da99d7bc2648b4318fdbd27766fc8bfad3fddb37c62b8ae7ccfe9577e9b8d1e77c1d417ed2c2ef02d52f4da11600d85d3229607943700030503ff506c94c87c8cab778e963b76cf63770f0a79bf48fb49d3b4e52234620fc9f7657f9f8d56c96a2b7c7826ae6b57ebb2221a3fe154b03b6637cea7e6d98e3e45d87cf8dc432f723d3d71f89c5192ac8d7290684d2c25ce55846a80c9a7823f6acd9bb29fa6cd71f20bc90eccfca20451d0c976e460e672b000df49466408d527affe0303027a728f9feb3b864260abd761730327bca2aaa4ea0525c175e92bf240682a0e83b226f97ecb2e935b62c9a133858ce31b271fa8eb41f6a1b3cd72a63025ce1a75ee4180dcc284884904181102000905024dfcb16a021b0c000a091033af447ccd759b09dd0b009e3c3e7296092c81bee5a19929462caaf2fff3ae26009e218c437a2340e7ea628149af1ec98ec091a43992b00200009501e1044dfcb1be1104009f61faa61aa43df75d128cbe53de528c4aec49ce9360c992e70c77072ad5623de0a3a6212771b66b39a30dad6781799e92608316900518ec01184a85d872365b7d2ba4bacfb5882ea3c2473d3750dc6178cc1cf82147fb58caa28b28e9f12f6d1efcb0534abed644156c91cca4ab78834268495160b2400bc422beb37d237c2300a0cac94911b6d493bda1e1fbc6feeca7cb7421d34b03fe22cec6ccb39675bb7b94a335c2b7be888fd3906a1125f33301d8aa6ec6ee6878f46f73961c8d57a3e9544d8ef2a2cbfd4d52da665b1266928cfe4cb347a58c412815f3b2d2369dec04b41ac9a71cc9547426d5ab941cccf3b18575637ccfb42df1a802df3cfe0a999f9e7109331170e3a221991bf868543960f8c816c28097e503fe319db10fb98049f3a57d7c80c420da66d56f3644371631fad3f0ff4040a19a4fedc2d07727a1b27576f75a4d28c47d8246f27071e12d7a8de62aad216ddbae6aa02efd6b8a3e2818cda48526549791ab277e447b3a36c57cefe9b592f5eab73959743fcc8e83cbefec03a329b55018b53eec196765ae40ef9e20521a603c551efe0303020950d53a146bf9c66034d00c23130cce95576a2ff78016ca471276e8227fb30b1ffbd92e61804fb0c3eff9e30b1a826ee8f3e4730b4d86273ca977b4164453412f456c47616d616c2054657374204b65792032886204131102002205024dfcb1be021b03060b090807030206150802090a0b0416020301021e01021780000a0910a86bf526325b21b22bd9009e34511620415c974750a20df5cb56b182f3b48e6600a0a9466cb1a1305a84953445f77d461593f1d42bc1b00200009d0157044dfcb1be1004009565a951da1ee87119d600c077198f1c1bceb0f7aa54552489298e41ff788fa8f0d43a69871f0f6f77ebdfb14a4260cf9fbeb65d5844b4272a1904dd95136d06c3da745dc46327dd44a0f16f60135914368c8039a34033862261806bb2c5ce1152e2840254697872c85441ccb7321431d75a747a4bfb1d2c66362b51ce76311700030503fc0ea76601c196768070b7365a200e6ddb09307f262d5f39eec467b5f5784e22abdf1aa49226f59ab37cb49969d8f5230ea65caf56015abda62604544ed526c5c522bf92bed178a078789f6c807b6d34885688024a5bed9e9f8c58d11d4b82487b44c5f470c5606806a0443b79cadb45e0f897a561a53f724e5349b9267c75ca17fe0303020950d53a146bf9c660bc5f4ce8f072465e2d2466434320c1e712272fafc20e342fe7608101580fa1a1a367e60486a7cd1246b7ef5586cf5e10b32762b710a30144f12dd17dd4884904181102000905024dfcb1be021b0c000a0910a86bf526325b21b2904c00a0b2b66b4b39ccffda1d10f3ea8d58f827e30a8b8e009f4255b2d8112a184e40cde43a34e8655ca7809370b0020000" +const ed25519wX25519Key = "c54b0663877fe31b00000020f94da7bb48d60a61e567706a6587d0331999bb9d891a08242ead84543df895a3001972817b12be707e8d5f586ce61361201d344eb266a2c82fde6835762b65b0b7c2b1061f1b0a00000042058263877fe3030b090705150a0e080c021600029b03021e09222106cb186c4f0609a697e4d52dfa6c722b0c1f1e27c18a56708f6525ec27bad9acc905270902070200000000ad2820103e2d7d227ec0e6d7ce4471db36bfc97083253690271498a7ef0576c07faae14585b3b903b0127ec4fda2f023045a2ec76bcb4f9571a9651e14aee1137a1d668442c88f951e33c4ffd33fb9a17d511eed758fc6d9cc50cb5fd793b2039d5804c74b0663877fe319000000208693248367f9e5015db922f8f48095dda784987f2d5985b12fbad16caf5e4435004d600a4f794d44775c57a26e0feefed558e9afffd6ad0d582d57fb2ba2dcedb8c29b06181b0a0000002c050263877fe322a106cb186c4f0609a697e4d52dfa6c722b0c1f1e27c18a56708f6525ec27bad9acc9021b0c00000000defa20a6e9186d9d5935fc8fe56314cdb527486a5a5120f9b762a235a729f039010a56b89c658568341fbef3b894e9834ad9bc72afae2f4c9c47a43855e65f1cb0a3f77bbc5f61085c1f8249fe4e7ca59af5f0bcee9398e0fa8d76e522e1d8ab42bb0d" + const signedMessageHex = "a3019bc0cbccc0c4b8d8b74ee2108fe16ec6d3ca490cbe362d3f8333d3f352531472538b8b13d353b97232f352158c20943157c71c16064626063656269052062e4e01987e9b6fccff4b7df3a34c534b23e679cbec3bc0f8f6e64dfb4b55fe3f8efa9ce110ddb5cd79faf1d753c51aecfa669f7e7aa043436596cccc3359cb7dd6bbe9ecaa69e5989d9e57209571edc0b2fa7f57b9b79a64ee6e99ce1371395fee92fec2796f7b15a77c386ff668ee27f6d38f0baa6c438b561657377bf6acff3c5947befd7bf4c196252f1d6e5c524d0300" const signedTextMessageHex = "a3019bc0cbccc8c4b8d8b74ee2108fe16ec6d36a250cbece0c178233d3f352531472538b8b13d35379b97232f352158ca0b4312f57c71c1646462606365626906a062e4e019811591798ff99bf8afee860b0d8a8c2a85c3387e3bcf0bb3b17987f2bbcfab2aa526d930cbfd3d98757184df3995c9f3e7790e36e3e9779f06089d4c64e9e47dd6202cb6e9bc73c5d11bb59fbaf89d22d8dc7cf199ddf17af96e77c5f65f9bbed56f427bd8db7af37f6c9984bf9385efaf5f184f986fb3e6adb0ecfe35bbf92d16a7aa2a344fb0bc52fb7624f0200" @@ -160,18 +162,78 @@ TcIYl5/Uyoi+FOvPLcNw4hOv2nwUzSSVAw== =IiS2 -----END PGP PRIVATE KEY BLOCK-----` -// Generated with the above private key -const v5PrivKeyMsg = `-----BEGIN PGP MESSAGE----- -Version: OpenPGP.js v4.10.7 -Comment: https://openpgpjs.org +// See OpenPGP crypto refresh Section A.3. +const v6PrivKey = `-----BEGIN PGP PRIVATE KEY BLOCK----- + +xUsGY4d/4xsAAAAg+U2nu0jWCmHlZ3BqZYfQMxmZu52JGggkLq2EVD34laMAGXKB +exK+cH6NX1hs5hNhIB00TrJmosgv3mg1ditlsLfCsQYfGwoAAABCBYJjh3/jAwsJ +BwUVCg4IDAIWAAKbAwIeCSIhBssYbE8GCaaX5NUt+mxyKwwfHifBilZwj2Ul7Ce6 +2azJBScJAgcCAAAAAK0oIBA+LX0ifsDm185Ecds2v8lwgyU2kCcUmKfvBXbAf6rh +RYWzuQOwEn7E/aLwIwRaLsdry0+VcallHhSu4RN6HWaEQsiPlR4zxP/TP7mhfVEe +7XWPxtnMUMtf15OyA51YBMdLBmOHf+MZAAAAIIaTJINn+eUBXbki+PSAld2nhJh/ +LVmFsS+60WyvXkQ1AE1gCk95TUR3XFeibg/u/tVY6a//1q0NWC1X+yui3O24wpsG +GBsKAAAALAWCY4d/4wKbDCIhBssYbE8GCaaX5NUt+mxyKwwfHifBilZwj2Ul7Ce6 +2azJAAAAAAQBIKbpGG2dWTX8j+VjFM21J0hqWlEg+bdiojWnKfA5AQpWUWtnNwDE +M0g12vYxoWM8Y81W+bHBw805I8kWVkXU6vFOi+HWvv/ira7ofJu16NnoUkhclkUr +k0mXubZvyl4GBg== +-----END PGP PRIVATE KEY BLOCK-----` + +// See OpenPGP crypto refresh merge request: +// https://gitlab.com/openpgp-wg/rfc4880bis/-/merge_requests/304 +const v6PrivKeyMsg = `-----BEGIN PGP MESSAGE----- + +wV0GIQYSyD8ecG9jCP4VGkF3Q6HwM3kOk+mXhIjR2zeNqZMIhRmHzxjV8bU/gXzO +WgBM85PMiVi93AZfJfhK9QmxfdNnZBjeo1VDeVZheQHgaVf7yopqR6W1FT6NOrfS +aQIHAgZhZBZTW+CwcW1g4FKlbExAf56zaw76/prQoN+bAzxpohup69LA7JW/Vp0l +yZnuSj3hcFj0DfqLTGgr4/u717J+sPWbtQBfgMfG9AOIwwrUBqsFE9zW+f1zdlYo +bhF30A+IitsxxA== +-----END PGP MESSAGE-----` + +// See OpenPGP crypto refresh merge request: +// https://gitlab.com/openpgp-wg/rfc4880bis/-/merge_requests/305 +const v6PrivKeyInlineSignMsg = `-----BEGIN PGP MESSAGE----- -xA0DAQoWGTR7yYckZAIByxF1B21zZy50eHRfbIGSdGVzdMJ3BQEWCgAGBQJf -bIGSACMiIQUZNHvJhyRkAl+Z3z7C4AAO2YhIkuH3s+pMlACRWVabVDQvAP9G -y29VPonFXqi2zKkpZrvyvZxg+n5e8Nt9wNbuxeCd3QD/TtO2s+JvjrE4Siwv -UQdl5MlBka1QSNbMq2Bz7XwNPg4= -=6lbM +wV0GIQYSyD8ecG9jCP4VGkF3Q6HwM3kOk+mXhIjR2zeNqZMIhRmHzxjV8bU/gXzO +WgBM85PMiVi93AZfJfhK9QmxfdNnZBjeo1VDeVZheQHgaVf7yopqR6W1FT6NOrfS +aQIHAgZhZBZTW+CwcW1g4FKlbExAf56zaw76/prQoN+bAzxpohup69LA7JW/Vp0l +yZnuSj3hcFj0DfqLTGgr4/u717J+sPWbtQBfgMfG9AOIwwrUBqsFE9zW+f1zdlYo +bhF30A+IitsxxA== -----END PGP MESSAGE-----` +// See https://gitlab.com/openpgp-wg/rfc4880bis/-/merge_requests/274 +// decryption password: "correct horse battery staple" +const v6ArgonSealedPrivKey = `-----BEGIN PGP PRIVATE KEY BLOCK----- + +xYIGY4d/4xsAAAAg+U2nu0jWCmHlZ3BqZYfQMxmZu52JGggkLq2EVD34laP9JgkC +FARdb9ccngltHraRe25uHuyuAQQVtKipJ0+r5jL4dacGWSAheCWPpITYiyfyIOPS +3gIDyg8f7strd1OB4+LZsUhcIjOMpVHgmiY/IutJkulneoBYwrEGHxsKAAAAQgWC +Y4d/4wMLCQcFFQoOCAwCFgACmwMCHgkiIQbLGGxPBgmml+TVLfpscisMHx4nwYpW +cI9lJewnutmsyQUnCQIHAgAAAACtKCAQPi19In7A5tfORHHbNr/JcIMlNpAnFJin +7wV2wH+q4UWFs7kDsBJ+xP2i8CMEWi7Ha8tPlXGpZR4UruETeh1mhELIj5UeM8T/ +0z+5oX1RHu11j8bZzFDLX9eTsgOdWATHggZjh3/jGQAAACCGkySDZ/nlAV25Ivj0 +gJXdp4SYfy1ZhbEvutFsr15ENf0mCQIUBA5hhGgp2oaavg6mFUXcFMwBBBUuE8qf +9Ock+xwusd+GAglBr5LVyr/lup3xxQvHXFSjjA2haXfoN6xUGRdDEHI6+uevKjVR +v5oAxgu7eJpaXNjCmwYYGwoAAAAsBYJjh3/jApsMIiEGyxhsTwYJppfk1S36bHIr +DB8eJ8GKVnCPZSXsJ7rZrMkAAAAABAEgpukYbZ1ZNfyP5WMUzbUnSGpaUSD5t2Ki +Nacp8DkBClZRa2c3AMQzSDXa9jGhYzxjzVb5scHDzTkjyRZWRdTq8U6L4da+/+Kt +ruh8m7Xo2ehSSFyWRSuTSZe5tm/KXgYG +-----END PGP PRIVATE KEY BLOCK-----` + +const v4Key25519 = `-----BEGIN PGP PRIVATE KEY BLOCK----- + +xUkEZB3qzRto01j2k2pwN5ux9w70stPinAdXULLr20CRW7U7h2GSeACch0M+ +qzQg8yjFQ8VBvu3uwgKH9senoHmj72lLSCLTmhFKzQR0ZXN0wogEEBsIAD4F +gmQd6s0ECwkHCAmQIf45+TuC+xMDFQgKBBYAAgECGQECmwMCHgEWIQSWEzMi +jJUHvyIbVKIh/jn5O4L7EwAAUhaHNlgudvxARdPPETUzVgjuWi+YIz8w1xIb +lHQMvIrbe2sGCQIethpWofd0x7DHuv/ciHg+EoxJ/Td6h4pWtIoKx0kEZB3q +zRm4CyA7quliq7yx08AoOqHTuuCgvpkSdEhpp3pEyejQOgBo0p6ywIiLPllY +0t+jpNspHpAGfXID6oqjpYuJw3AfVRBlwnQEGBsIACoFgmQd6s0JkCH+Ofk7 +gvsTApsMFiEElhMzIoyVB78iG1SiIf45+TuC+xMAAGgQuN9G73446ykvJ/mL +sCZ7zGFId2gBd1EnG0FTC4npfOKpck0X8dngByrCxU8LDSfvjsEp/xDAiKsQ +aU71tdtNBQ== +=e7jT +-----END PGP PRIVATE KEY BLOCK-----` + const keyWithExpiredCrossSig = `-----BEGIN PGP PUBLIC KEY BLOCK----- xsDNBF2lnPIBDAC5cL9PQoQLTMuhjbYvb4Ncuuo0bfmgPRFywX53jPhoFf4Zg6mv @@ -272,3 +334,124 @@ AtNTq6ihLMD5v1d82ZC7tNatdlDMGWnIdvEMCv2GZcuIqDQ9rXWs49e7tq1NncLY hz3tYjKhoFTKEIq3y3Pp =h/aX -----END PGP PUBLIC KEY BLOCK-----` + +const keyv5Test = `-----BEGIN PGP PRIVATE KEY BLOCK----- +Comment: Bob's OpenPGP Transferable Secret Key + +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 +=miES +-----END PGP PRIVATE KEY BLOCK----- +` + +const certv5Test = `-----BEGIN PGP PRIVATE KEY BLOCK----- + +lGEFXJH05BYAAAAtCSsGAQQB2kcPAQEHQFhZlVcVVtwf+21xNQPX+ecMJJBL0MPd +fj75iux+my8QAAAAAAAiAQCHZ1SnSUmWqxEsoI6facIVZQu6mph3cBFzzTvcm5lA +Ng5ctBhlbW1hLmdvbGRtYW5AZXhhbXBsZS5uZXSIlgUTFggASCIhBRk0e8mHJGQC +X5nfPsLgAA7ZiEiS4fez6kyUAJFZVptUBQJckfTkAhsDBQsJCAcCAyICAQYVCgkI +CwIEFgIDAQIeBwIXgAAA9cAA/jiR3yMsZMeEQ40u6uzEoXa6UXeV/S3wwJAXRJy9 +M8s0AP9vuL/7AyTfFXwwzSjDnYmzS0qAhbLDQ643N+MXGBJ2BZxmBVyR9OQSAAAA +MgorBgEEAZdVAQUBAQdA+nysrzml2UCweAqtpDuncSPlvrcBWKU0yfU0YvYWWAoD +AQgHAAAAAAAiAP9OdAPppjU1WwpqjIItkxr+VPQRT8Zm/Riw7U3F6v3OiBFHiHoF +GBYIACwiIQUZNHvJhyRkAl+Z3z7C4AAO2YhIkuH3s+pMlACRWVabVAUCXJH05AIb +DAAAOSQBAP4BOOIR/sGLNMOfeb5fPs/02QMieoiSjIBnijhob2U5AQC+RtOHCHx7 +TcIYl5/Uyoi+FOvPLcNw4hOv2nwUzSSVAw== +=IiS2 +-----END PGP PRIVATE KEY BLOCK----- +` + +const msgv5Test = `-----BEGIN PGP MESSAGE----- + +wcDMA3wvqk35PDeyAQv+PcQiLsoYTH30nJYQh3j3cJaO2+jErtVCrIQRIU0+ +rmgMddERYST4A9mA0DQIiTI4FQ0Lp440D3BWCgpq3LlNWewGzduaWwym5rN6 +cwHz5ccDqOcqbd9X0GXXGy/ZH/ljSgzuVMIytMAXKdF/vrRrVgH/+I7cxvm9 +HwnhjMN5dF0j4aEt996H2T7cbtzSr2GN9SWGW8Gyu7I8Zx73hgrGUI7gDiJB +Afaff+P6hfkkHSGOItr94dde8J/7AUF4VEwwxdVVPvsNEFyvv6gRIbYtOCa2 +6RE6h1V/QTxW2O7zZgzWALrE2ui0oaYr9QuqQSssd9CdgExLfdPbI+3/ZAnE +v31Idzpk3/6ILiakYHtXkElPXvf46mCNpobty8ysT34irF+fy3C1p3oGwAsx +5VDV9OSFU6z5U+UPbSPYAy9rkc5ZssuIKxCER2oTvZ2L8Q5cfUvEUiJtRGGn +CJlHrVDdp3FssKv2tlKgLkvxJLyoOjuEkj44H1qRk+D02FzmmUT/0sAHAYYx +lTir6mjHeLpcGjn4waUuWIAJyph8SxUexP60bic0L0NBa6Qp5SxxijKsPIDb +FPHxWwfJSDZRrgUyYT7089YFB/ZM4FHyH9TZcnxn0f0xIB7NS6YNDsxzN2zT +EVEYf+De4qT/dQTsdww78Chtcv9JY9r2kDm77dk2MUGHL2j7n8jasbLtgA7h +pn2DMIWLrGamMLWRmlwslolKr1sMV5x8w+5Ias6C33iBMl9phkg42an0gYmc +byVJHvLO/XErtC+GNIJeMg== +=liRq +-----END PGP MESSAGE----- +` diff --git a/vendor/github.com/ProtonMail/go-crypto/openpgp/s2k/s2k.go b/vendor/github.com/ProtonMail/go-crypto/openpgp/s2k/s2k.go index a43695964b..6871b84fc9 100644 --- a/vendor/github.com/ProtonMail/go-crypto/openpgp/s2k/s2k.go +++ b/vendor/github.com/ProtonMail/go-crypto/openpgp/s2k/s2k.go @@ -87,10 +87,10 @@ func decodeCount(c uint8) int { // encodeMemory converts the Argon2 "memory" in the range parallelism*8 to // 2**31, inclusive, to an encoded memory. The return value is the // octet that is actually stored in the GPG file. encodeMemory panics -// if is not in the above range +// if is not in the above range // See OpenPGP crypto refresh Section 3.7.1.4. func encodeMemory(memory uint32, parallelism uint8) uint8 { - if memory < (8 * uint32(parallelism)) || memory > uint32(2147483648) { + if memory < (8*uint32(parallelism)) || memory > uint32(2147483648) { panic("Memory argument memory is outside the required range") } @@ -199,8 +199,8 @@ func Generate(rand io.Reader, c *Config) (*Params, error) { } params = &Params{ - mode: SaltedS2K, - hashId: hashId, + mode: SaltedS2K, + hashId: hashId, } } else { // Enforce IteratedSaltedS2K method otherwise hashId, ok := algorithm.HashToHashId(c.hash()) @@ -211,7 +211,7 @@ func Generate(rand io.Reader, c *Config) (*Params, error) { c.S2KMode = IteratedSaltedS2K } params = &Params{ - mode: IteratedSaltedS2K, + mode: IteratedSaltedS2K, hashId: hashId, countByte: c.EncodedCount(), } @@ -283,6 +283,9 @@ func ParseIntoParams(r io.Reader) (params *Params, err error) { params.passes = buf[Argon2SaltSize] params.parallelism = buf[Argon2SaltSize+1] params.memoryExp = buf[Argon2SaltSize+2] + if err := validateArgon2Params(params); err != nil { + return nil, err + } return params, nil case GnuS2K: // This is a GNU extension. See @@ -300,15 +303,22 @@ func ParseIntoParams(r io.Reader) (params *Params, err error) { return nil, errors.UnsupportedError("S2K function") } +func (params *Params) Mode() Mode { + return params.mode +} + func (params *Params) Dummy() bool { return params != nil && params.mode == GnuS2K } func (params *Params) salt() []byte { switch params.mode { - case SaltedS2K, IteratedSaltedS2K: return params.saltBytes[:8] - case Argon2S2K: return params.saltBytes[:Argon2SaltSize] - default: return nil + case SaltedS2K, IteratedSaltedS2K: + return params.saltBytes[:8] + case Argon2S2K: + return params.saltBytes[:Argon2SaltSize] + default: + return nil } } @@ -405,3 +415,22 @@ func Serialize(w io.Writer, key []byte, rand io.Reader, passphrase []byte, c *Co f(key, passphrase) return nil } + +// validateArgon2Params checks that the argon2 parameters are valid according to RFC9580. +func validateArgon2Params(params *Params) error { + // The number of passes t and the degree of parallelism p MUST be non-zero. + if params.parallelism == 0 { + return errors.StructuralError("invalid argon2 params: parallelism is 0") + } + if params.passes == 0 { + return errors.StructuralError("invalid argon2 params: iterations is 0") + } + + // The encoded memory size MUST be a value from 3+ceil(log2(p)) to 31, + // such that the decoded memory size m is a value from 8*p to 2^31. + if params.memoryExp > 31 || decodeMemory(params.memoryExp) < 8*uint32(params.parallelism) { + return errors.StructuralError("invalid argon2 params: memory is out of bounds") + } + + return nil +} diff --git a/vendor/github.com/ProtonMail/go-crypto/openpgp/s2k/s2k_cache.go b/vendor/github.com/ProtonMail/go-crypto/openpgp/s2k/s2k_cache.go index 25a4442dfb..616e0d12c6 100644 --- a/vendor/github.com/ProtonMail/go-crypto/openpgp/s2k/s2k_cache.go +++ b/vendor/github.com/ProtonMail/go-crypto/openpgp/s2k/s2k_cache.go @@ -5,7 +5,7 @@ package s2k // the same parameters. type Cache map[Params][]byte -// GetOrComputeDerivedKey tries to retrieve the key +// GetOrComputeDerivedKey tries to retrieve the key // for the given s2k parameters from the cache. // If there is no hit, it derives the key with the s2k function from the passphrase, // updates the cache, and returns the key. diff --git a/vendor/github.com/ProtonMail/go-crypto/openpgp/s2k/s2k_config.go b/vendor/github.com/ProtonMail/go-crypto/openpgp/s2k/s2k_config.go index b40be5228f..b93db1ab85 100644 --- a/vendor/github.com/ProtonMail/go-crypto/openpgp/s2k/s2k_config.go +++ b/vendor/github.com/ProtonMail/go-crypto/openpgp/s2k/s2k_config.go @@ -50,9 +50,9 @@ type Config struct { type Argon2Config struct { NumberOfPasses uint8 DegreeOfParallelism uint8 - // The memory parameter for Argon2 specifies desired memory usage in kibibytes. + // Memory specifies the desired Argon2 memory usage in kibibytes. // For example memory=64*1024 sets the memory cost to ~64 MB. - Memory uint32 + Memory uint32 } func (c *Config) Mode() Mode { @@ -115,7 +115,7 @@ func (c *Argon2Config) EncodedMemory() uint8 { } memory := c.Memory - lowerBound := uint32(c.Parallelism())*8 + lowerBound := uint32(c.Parallelism()) * 8 upperBound := uint32(2147483648) switch { diff --git a/vendor/github.com/ProtonMail/go-crypto/openpgp/write.go b/vendor/github.com/ProtonMail/go-crypto/openpgp/write.go index 7fdd13a3dd..b0f6ef7b09 100644 --- a/vendor/github.com/ProtonMail/go-crypto/openpgp/write.go +++ b/vendor/github.com/ProtonMail/go-crypto/openpgp/write.go @@ -76,7 +76,11 @@ func detachSign(w io.Writer, signer *Entity, message io.Reader, sigType packet.S sig := createSignaturePacket(signingKey.PublicKey, sigType, config) - h, wrappedHash, err := hashForSignature(sig.Hash, sig.SigType) + h, err := sig.PrepareSign(config) + if err != nil { + return + } + wrappedHash, err := wrapHashForSignature(h, sig.SigType) if err != nil { return } @@ -275,14 +279,28 @@ func writeAndSign(payload io.WriteCloser, candidateHashes []uint8, signed *Entit return nil, errors.InvalidArgumentError("cannot encrypt because no candidate hash functions are compiled in. (Wanted " + name + " in this case.)") } + var salt []byte if signer != nil { + var opsVersion = 3 + if signer.Version == 6 { + opsVersion = signer.Version + } ops := &packet.OnePassSignature{ + Version: opsVersion, SigType: sigType, Hash: hash, PubKeyAlgo: signer.PubKeyAlgo, KeyId: signer.KeyId, IsLast: true, } + if opsVersion == 6 { + ops.KeyFingerprint = signer.Fingerprint + salt, err = packet.SignatureSaltForHash(hash, config.Random()) + if err != nil { + return nil, err + } + ops.Salt = salt + } if err := ops.Serialize(payload); err != nil { return nil, err } @@ -310,19 +328,19 @@ func writeAndSign(payload io.WriteCloser, candidateHashes []uint8, signed *Entit } if signer != nil { - h, wrappedHash, err := hashForSignature(hash, sigType) + h, wrappedHash, err := hashForSignature(hash, sigType, salt) if err != nil { return nil, err } metadata := &packet.LiteralData{ - Format: 't', + Format: 'u', FileName: hints.FileName, Time: epochSeconds, } if hints.IsBinary { metadata.Format = 'b' } - return signatureWriter{payload, literalData, hash, wrappedHash, h, signer, sigType, config, metadata}, nil + return signatureWriter{payload, literalData, hash, wrappedHash, h, salt, signer, sigType, config, metadata}, nil } return literalData, nil } @@ -380,15 +398,19 @@ func encrypt(keyWriter io.Writer, dataWriter io.Writer, to []*Entity, signed *En return nil, errors.InvalidArgumentError("cannot encrypt a message to key id " + strconv.FormatUint(to[i].PrimaryKey.KeyId, 16) + " because it has no valid encryption keys") } - sig := to[i].PrimaryIdentity().SelfSignature - if !sig.SEIPDv2 { + primarySelfSignature, _ := to[i].PrimarySelfSignature() + if primarySelfSignature == nil { + return nil, errors.InvalidArgumentError("entity without a self-signature") + } + + if !primarySelfSignature.SEIPDv2 { aeadSupported = false } - candidateCiphers = intersectPreferences(candidateCiphers, sig.PreferredSymmetric) - candidateHashes = intersectPreferences(candidateHashes, sig.PreferredHash) - candidateCipherSuites = intersectCipherSuites(candidateCipherSuites, sig.PreferredCipherSuites) - candidateCompression = intersectPreferences(candidateCompression, sig.PreferredCompression) + candidateCiphers = intersectPreferences(candidateCiphers, primarySelfSignature.PreferredSymmetric) + candidateHashes = intersectPreferences(candidateHashes, primarySelfSignature.PreferredHash) + candidateCipherSuites = intersectCipherSuites(candidateCipherSuites, primarySelfSignature.PreferredCipherSuites) + candidateCompression = intersectPreferences(candidateCompression, primarySelfSignature.PreferredCompression) } // In the event that the intersection of supported algorithms is empty we use the ones @@ -422,13 +444,19 @@ func encrypt(keyWriter io.Writer, dataWriter io.Writer, to []*Entity, signed *En } } - symKey := make([]byte, cipher.KeySize()) + var symKey []byte + if aeadSupported { + symKey = make([]byte, aeadCipherSuite.Cipher.KeySize()) + } else { + symKey = make([]byte, cipher.KeySize()) + } + if _, err := io.ReadFull(config.Random(), symKey); err != nil { return nil, err } for _, key := range encryptKeys { - if err := packet.SerializeEncryptedKey(keyWriter, key.PublicKey, cipher, symKey, config); err != nil { + if err := packet.SerializeEncryptedKeyAEAD(keyWriter, key.PublicKey, cipher, aeadSupported, symKey, config); err != nil { return nil, err } } @@ -465,13 +493,17 @@ func Sign(output io.Writer, signed *Entity, hints *FileHints, config *packet.Con hashToHashId(crypto.SHA3_512), } defaultHashes := candidateHashes[0:1] - preferredHashes := signed.PrimaryIdentity().SelfSignature.PreferredHash + primarySelfSignature, _ := signed.PrimarySelfSignature() + if primarySelfSignature == nil { + return nil, errors.StructuralError("signed entity has no self-signature") + } + preferredHashes := primarySelfSignature.PreferredHash if len(preferredHashes) == 0 { preferredHashes = defaultHashes } candidateHashes = intersectPreferences(candidateHashes, preferredHashes) if len(candidateHashes) == 0 { - return nil, errors.InvalidArgumentError("cannot sign because signing key shares no common algorithms with candidate hashes") + return nil, errors.StructuralError("cannot sign because signing key shares no common algorithms with candidate hashes") } return writeAndSign(noOpCloser{output}, candidateHashes, signed, hints, packet.SigTypeBinary, config) @@ -486,6 +518,7 @@ type signatureWriter struct { hashType crypto.Hash wrappedHash hash.Hash h hash.Hash + salt []byte // v6 only signer *packet.PrivateKey sigType packet.SignatureType config *packet.Config @@ -509,6 +542,10 @@ func (s signatureWriter) Close() error { sig.Hash = s.hashType sig.Metadata = s.metadata + if err := sig.SetSalt(s.salt); err != nil { + return err + } + if err := sig.Sign(s.h, s.signer, s.config); err != nil { return err } diff --git a/vendor/github.com/ProtonMail/go-crypto/openpgp/x25519/x25519.go b/vendor/github.com/ProtonMail/go-crypto/openpgp/x25519/x25519.go new file mode 100644 index 0000000000..38afcc74fa --- /dev/null +++ b/vendor/github.com/ProtonMail/go-crypto/openpgp/x25519/x25519.go @@ -0,0 +1,221 @@ +package x25519 + +import ( + "crypto/sha256" + "crypto/subtle" + "io" + + "github.com/ProtonMail/go-crypto/openpgp/aes/keywrap" + "github.com/ProtonMail/go-crypto/openpgp/errors" + x25519lib "github.com/cloudflare/circl/dh/x25519" + "golang.org/x/crypto/hkdf" +) + +const ( + hkdfInfo = "OpenPGP X25519" + aes128KeySize = 16 + // The size of a public or private key in bytes. + KeySize = x25519lib.Size +) + +type PublicKey struct { + // Point represents the encoded elliptic curve point of the public key. + Point []byte +} + +type PrivateKey struct { + PublicKey + // Secret represents the secret of the private key. + Secret []byte +} + +// NewPrivateKey creates a new empty private key including the public key. +func NewPrivateKey(key PublicKey) *PrivateKey { + return &PrivateKey{ + PublicKey: key, + } +} + +// Validate validates that the provided public key matches the private key. +func Validate(pk *PrivateKey) (err error) { + var expectedPublicKey, privateKey x25519lib.Key + subtle.ConstantTimeCopy(1, privateKey[:], pk.Secret) + x25519lib.KeyGen(&expectedPublicKey, &privateKey) + if subtle.ConstantTimeCompare(expectedPublicKey[:], pk.PublicKey.Point) == 0 { + return errors.KeyInvalidError("x25519: invalid key") + } + return nil +} + +// GenerateKey generates a new x25519 key pair. +func GenerateKey(rand io.Reader) (*PrivateKey, error) { + var privateKey, publicKey x25519lib.Key + privateKeyOut := new(PrivateKey) + err := generateKey(rand, &privateKey, &publicKey) + if err != nil { + return nil, err + } + privateKeyOut.PublicKey.Point = publicKey[:] + privateKeyOut.Secret = privateKey[:] + return privateKeyOut, nil +} + +func generateKey(rand io.Reader, privateKey *x25519lib.Key, publicKey *x25519lib.Key) error { + maxRounds := 10 + isZero := true + for round := 0; isZero; round++ { + if round == maxRounds { + return errors.InvalidArgumentError("x25519: zero keys only, randomness source might be corrupt") + } + _, err := io.ReadFull(rand, privateKey[:]) + if err != nil { + return err + } + isZero = constantTimeIsZero(privateKey[:]) + } + x25519lib.KeyGen(publicKey, privateKey) + return nil +} + +// Encrypt encrypts a sessionKey with x25519 according to +// the OpenPGP crypto refresh specification section 5.1.6. The function assumes that the +// sessionKey has the correct format and padding according to the specification. +func Encrypt(rand io.Reader, publicKey *PublicKey, sessionKey []byte) (ephemeralPublicKey *PublicKey, encryptedSessionKey []byte, err error) { + var ephemeralPrivate, ephemeralPublic, staticPublic, shared x25519lib.Key + // Check that the input static public key has 32 bytes + if len(publicKey.Point) != KeySize { + err = errors.KeyInvalidError("x25519: the public key has the wrong size") + return + } + copy(staticPublic[:], publicKey.Point) + // Generate ephemeral keyPair + err = generateKey(rand, &ephemeralPrivate, &ephemeralPublic) + if err != nil { + return + } + // Compute shared key + ok := x25519lib.Shared(&shared, &ephemeralPrivate, &staticPublic) + if !ok { + err = errors.KeyInvalidError("x25519: the public key is a low order point") + return + } + // Derive the encryption key from the shared secret + encryptionKey := applyHKDF(ephemeralPublic[:], publicKey.Point[:], shared[:]) + ephemeralPublicKey = &PublicKey{ + Point: ephemeralPublic[:], + } + // Encrypt the sessionKey with aes key wrapping + encryptedSessionKey, err = keywrap.Wrap(encryptionKey, sessionKey) + return +} + +// Decrypt decrypts a session key stored in ciphertext with the provided x25519 +// private key and ephemeral public key. +func Decrypt(privateKey *PrivateKey, ephemeralPublicKey *PublicKey, ciphertext []byte) (encodedSessionKey []byte, err error) { + var ephemeralPublic, staticPrivate, shared x25519lib.Key + // Check that the input ephemeral public key has 32 bytes + if len(ephemeralPublicKey.Point) != KeySize { + err = errors.KeyInvalidError("x25519: the public key has the wrong size") + return + } + copy(ephemeralPublic[:], ephemeralPublicKey.Point) + subtle.ConstantTimeCopy(1, staticPrivate[:], privateKey.Secret) + // Compute shared key + ok := x25519lib.Shared(&shared, &staticPrivate, &ephemeralPublic) + if !ok { + err = errors.KeyInvalidError("x25519: the ephemeral public key is a low order point") + return + } + // Derive the encryption key from the shared secret + encryptionKey := applyHKDF(ephemeralPublicKey.Point[:], privateKey.PublicKey.Point[:], shared[:]) + // Decrypt the session key with aes key wrapping + encodedSessionKey, err = keywrap.Unwrap(encryptionKey, ciphertext) + return +} + +func applyHKDF(ephemeralPublicKey []byte, publicKey []byte, sharedSecret []byte) []byte { + inputKey := make([]byte, 3*KeySize) + // ephemeral public key | recipient public key | shared secret + subtle.ConstantTimeCopy(1, inputKey[:KeySize], ephemeralPublicKey) + subtle.ConstantTimeCopy(1, inputKey[KeySize:2*KeySize], publicKey) + subtle.ConstantTimeCopy(1, inputKey[2*KeySize:], sharedSecret) + hkdfReader := hkdf.New(sha256.New, inputKey, []byte{}, []byte(hkdfInfo)) + encryptionKey := make([]byte, aes128KeySize) + _, _ = io.ReadFull(hkdfReader, encryptionKey) + return encryptionKey +} + +func constantTimeIsZero(bytes []byte) bool { + isZero := byte(0) + for _, b := range bytes { + isZero |= b + } + return isZero == 0 +} + +// ENCODING/DECODING ciphertexts: + +// EncodeFieldsLength returns the length of the ciphertext encoding +// given the encrypted session key. +func EncodedFieldsLength(encryptedSessionKey []byte, v6 bool) int { + lenCipherFunction := 0 + if !v6 { + lenCipherFunction = 1 + } + return KeySize + 1 + len(encryptedSessionKey) + lenCipherFunction +} + +// EncodeField encodes x25519 session key encryption fields as +// ephemeral x25519 public key | follow byte length | cipherFunction (v3 only) | encryptedSessionKey +// and writes it to writer. +func EncodeFields(writer io.Writer, ephemeralPublicKey *PublicKey, encryptedSessionKey []byte, cipherFunction byte, v6 bool) (err error) { + lenAlgorithm := 0 + if !v6 { + lenAlgorithm = 1 + } + if _, err = writer.Write(ephemeralPublicKey.Point); err != nil { + return err + } + if _, err = writer.Write([]byte{byte(len(encryptedSessionKey) + lenAlgorithm)}); err != nil { + return err + } + if !v6 { + if _, err = writer.Write([]byte{cipherFunction}); err != nil { + return err + } + } + _, err = writer.Write(encryptedSessionKey) + return err +} + +// DecodeField decodes a x25519 session key encryption as +// ephemeral x25519 public key | follow byte length | cipherFunction (v3 only) | encryptedSessionKey. +func DecodeFields(reader io.Reader, v6 bool) (ephemeralPublicKey *PublicKey, encryptedSessionKey []byte, cipherFunction byte, err error) { + var buf [1]byte + ephemeralPublicKey = &PublicKey{ + Point: make([]byte, KeySize), + } + // 32 octets representing an ephemeral x25519 public key. + if _, err = io.ReadFull(reader, ephemeralPublicKey.Point); err != nil { + return nil, nil, 0, err + } + // A one-octet size of the following fields. + if _, err = io.ReadFull(reader, buf[:]); err != nil { + return nil, nil, 0, err + } + followingLen := buf[0] + // The one-octet algorithm identifier, if it was passed (in the case of a v3 PKESK packet). + if !v6 { + if _, err = io.ReadFull(reader, buf[:]); err != nil { + return nil, nil, 0, err + } + cipherFunction = buf[0] + followingLen -= 1 + } + // The encrypted session key. + encryptedSessionKey = make([]byte, followingLen) + if _, err = io.ReadFull(reader, encryptedSessionKey); err != nil { + return nil, nil, 0, err + } + return ephemeralPublicKey, encryptedSessionKey, cipherFunction, nil +} diff --git a/vendor/github.com/ProtonMail/go-crypto/openpgp/x448/x448.go b/vendor/github.com/ProtonMail/go-crypto/openpgp/x448/x448.go new file mode 100644 index 0000000000..65a082dabd --- /dev/null +++ b/vendor/github.com/ProtonMail/go-crypto/openpgp/x448/x448.go @@ -0,0 +1,229 @@ +package x448 + +import ( + "crypto/sha512" + "crypto/subtle" + "io" + + "github.com/ProtonMail/go-crypto/openpgp/aes/keywrap" + "github.com/ProtonMail/go-crypto/openpgp/errors" + x448lib "github.com/cloudflare/circl/dh/x448" + "golang.org/x/crypto/hkdf" +) + +const ( + hkdfInfo = "OpenPGP X448" + aes256KeySize = 32 + // The size of a public or private key in bytes. + KeySize = x448lib.Size +) + +type PublicKey struct { + // Point represents the encoded elliptic curve point of the public key. + Point []byte +} + +type PrivateKey struct { + PublicKey + // Secret represents the secret of the private key. + Secret []byte +} + +// NewPrivateKey creates a new empty private key including the public key. +func NewPrivateKey(key PublicKey) *PrivateKey { + return &PrivateKey{ + PublicKey: key, + } +} + +// Validate validates that the provided public key matches +// the private key. +func Validate(pk *PrivateKey) (err error) { + var expectedPublicKey, privateKey x448lib.Key + subtle.ConstantTimeCopy(1, privateKey[:], pk.Secret) + x448lib.KeyGen(&expectedPublicKey, &privateKey) + if subtle.ConstantTimeCompare(expectedPublicKey[:], pk.PublicKey.Point) == 0 { + return errors.KeyInvalidError("x448: invalid key") + } + return nil +} + +// GenerateKey generates a new x448 key pair. +func GenerateKey(rand io.Reader) (*PrivateKey, error) { + var privateKey, publicKey x448lib.Key + privateKeyOut := new(PrivateKey) + err := generateKey(rand, &privateKey, &publicKey) + if err != nil { + return nil, err + } + privateKeyOut.PublicKey.Point = publicKey[:] + privateKeyOut.Secret = privateKey[:] + return privateKeyOut, nil +} + +func generateKey(rand io.Reader, privateKey *x448lib.Key, publicKey *x448lib.Key) error { + maxRounds := 10 + isZero := true + for round := 0; isZero; round++ { + if round == maxRounds { + return errors.InvalidArgumentError("x448: zero keys only, randomness source might be corrupt") + } + _, err := io.ReadFull(rand, privateKey[:]) + if err != nil { + return err + } + isZero = constantTimeIsZero(privateKey[:]) + } + x448lib.KeyGen(publicKey, privateKey) + return nil +} + +// Encrypt encrypts a sessionKey with x448 according to +// the OpenPGP crypto refresh specification section 5.1.7. The function assumes that the +// sessionKey has the correct format and padding according to the specification. +func Encrypt(rand io.Reader, publicKey *PublicKey, sessionKey []byte) (ephemeralPublicKey *PublicKey, encryptedSessionKey []byte, err error) { + var ephemeralPrivate, ephemeralPublic, staticPublic, shared x448lib.Key + // Check that the input static public key has 56 bytes. + if len(publicKey.Point) != KeySize { + err = errors.KeyInvalidError("x448: the public key has the wrong size") + return nil, nil, err + } + copy(staticPublic[:], publicKey.Point) + // Generate ephemeral keyPair. + if err = generateKey(rand, &ephemeralPrivate, &ephemeralPublic); err != nil { + return nil, nil, err + } + // Compute shared key. + ok := x448lib.Shared(&shared, &ephemeralPrivate, &staticPublic) + if !ok { + err = errors.KeyInvalidError("x448: the public key is a low order point") + return nil, nil, err + } + // Derive the encryption key from the shared secret. + encryptionKey := applyHKDF(ephemeralPublic[:], publicKey.Point[:], shared[:]) + ephemeralPublicKey = &PublicKey{ + Point: ephemeralPublic[:], + } + // Encrypt the sessionKey with aes key wrapping. + encryptedSessionKey, err = keywrap.Wrap(encryptionKey, sessionKey) + if err != nil { + return nil, nil, err + } + return ephemeralPublicKey, encryptedSessionKey, nil +} + +// Decrypt decrypts a session key stored in ciphertext with the provided x448 +// private key and ephemeral public key. +func Decrypt(privateKey *PrivateKey, ephemeralPublicKey *PublicKey, ciphertext []byte) (encodedSessionKey []byte, err error) { + var ephemeralPublic, staticPrivate, shared x448lib.Key + // Check that the input ephemeral public key has 56 bytes. + if len(ephemeralPublicKey.Point) != KeySize { + err = errors.KeyInvalidError("x448: the public key has the wrong size") + return nil, err + } + copy(ephemeralPublic[:], ephemeralPublicKey.Point) + subtle.ConstantTimeCopy(1, staticPrivate[:], privateKey.Secret) + // Compute shared key. + ok := x448lib.Shared(&shared, &staticPrivate, &ephemeralPublic) + if !ok { + err = errors.KeyInvalidError("x448: the ephemeral public key is a low order point") + return nil, err + } + // Derive the encryption key from the shared secret. + encryptionKey := applyHKDF(ephemeralPublicKey.Point[:], privateKey.PublicKey.Point[:], shared[:]) + // Decrypt the session key with aes key wrapping. + encodedSessionKey, err = keywrap.Unwrap(encryptionKey, ciphertext) + if err != nil { + return nil, err + } + return encodedSessionKey, nil +} + +func applyHKDF(ephemeralPublicKey []byte, publicKey []byte, sharedSecret []byte) []byte { + inputKey := make([]byte, 3*KeySize) + // ephemeral public key | recipient public key | shared secret. + subtle.ConstantTimeCopy(1, inputKey[:KeySize], ephemeralPublicKey) + subtle.ConstantTimeCopy(1, inputKey[KeySize:2*KeySize], publicKey) + subtle.ConstantTimeCopy(1, inputKey[2*KeySize:], sharedSecret) + hkdfReader := hkdf.New(sha512.New, inputKey, []byte{}, []byte(hkdfInfo)) + encryptionKey := make([]byte, aes256KeySize) + _, _ = io.ReadFull(hkdfReader, encryptionKey) + return encryptionKey +} + +func constantTimeIsZero(bytes []byte) bool { + isZero := byte(0) + for _, b := range bytes { + isZero |= b + } + return isZero == 0 +} + +// ENCODING/DECODING ciphertexts: + +// EncodeFieldsLength returns the length of the ciphertext encoding +// given the encrypted session key. +func EncodedFieldsLength(encryptedSessionKey []byte, v6 bool) int { + lenCipherFunction := 0 + if !v6 { + lenCipherFunction = 1 + } + return KeySize + 1 + len(encryptedSessionKey) + lenCipherFunction +} + +// EncodeField encodes x448 session key encryption fields as +// ephemeral x448 public key | follow byte length | cipherFunction (v3 only) | encryptedSessionKey +// and writes it to writer. +func EncodeFields(writer io.Writer, ephemeralPublicKey *PublicKey, encryptedSessionKey []byte, cipherFunction byte, v6 bool) (err error) { + lenAlgorithm := 0 + if !v6 { + lenAlgorithm = 1 + } + if _, err = writer.Write(ephemeralPublicKey.Point); err != nil { + return err + } + if _, err = writer.Write([]byte{byte(len(encryptedSessionKey) + lenAlgorithm)}); err != nil { + return err + } + if !v6 { + if _, err = writer.Write([]byte{cipherFunction}); err != nil { + return err + } + } + if _, err = writer.Write(encryptedSessionKey); err != nil { + return err + } + return nil +} + +// DecodeField decodes a x448 session key encryption as +// ephemeral x448 public key | follow byte length | cipherFunction (v3 only) | encryptedSessionKey. +func DecodeFields(reader io.Reader, v6 bool) (ephemeralPublicKey *PublicKey, encryptedSessionKey []byte, cipherFunction byte, err error) { + var buf [1]byte + ephemeralPublicKey = &PublicKey{ + Point: make([]byte, KeySize), + } + // 56 octets representing an ephemeral x448 public key. + if _, err = io.ReadFull(reader, ephemeralPublicKey.Point); err != nil { + return nil, nil, 0, err + } + // A one-octet size of the following fields. + if _, err = io.ReadFull(reader, buf[:]); err != nil { + return nil, nil, 0, err + } + followingLen := buf[0] + // The one-octet algorithm identifier, if it was passed (in the case of a v3 PKESK packet). + if !v6 { + if _, err = io.ReadFull(reader, buf[:]); err != nil { + return nil, nil, 0, err + } + cipherFunction = buf[0] + followingLen -= 1 + } + // The encrypted session key. + encryptedSessionKey = make([]byte, followingLen) + if _, err = io.ReadFull(reader, encryptedSessionKey); err != nil { + return nil, nil, 0, err + } + return ephemeralPublicKey, encryptedSessionKey, cipherFunction, nil +} diff --git a/vendor/github.com/cyphar/filepath-securejoin/CHANGELOG.md b/vendor/github.com/cyphar/filepath-securejoin/CHANGELOG.md new file mode 100644 index 0000000000..cb1252b53e --- /dev/null +++ b/vendor/github.com/cyphar/filepath-securejoin/CHANGELOG.md @@ -0,0 +1,209 @@ +# Changelog # +All notable changes to this project will be documented in this file. + +The format is based on [Keep a Changelog](http://keepachangelog.com/) +and this project adheres to [Semantic Versioning](http://semver.org/). + +## [Unreleased] ## + +## [0.3.6] - 2024-12-17 ## + +### Compatibility ### +- The minimum Go version requirement for `filepath-securejoin` is now Go 1.18 + (we use generics internally). + + For reference, `filepath-securejoin@v0.3.0` somewhat-arbitrarily bumped the + Go version requirement to 1.21. + + While we did make some use of Go 1.21 stdlib features (and in principle Go + versions <= 1.21 are no longer even supported by upstream anymore), some + downstreams have complained that the version bump has meant that they have to + do workarounds when backporting fixes that use the new `filepath-securejoin` + API onto old branches. This is not an ideal situation, but since using this + library is probably better for most downstreams than a hand-rolled + workaround, we now have compatibility shims that allow us to build on older + Go versions. +- Lower minimum version requirement for `golang.org/x/sys` to `v0.18.0` (we + need the wrappers for `fsconfig(2)`), which should also make backporting + patches to older branches easier. + +## [0.3.5] - 2024-12-06 ## + +### Fixed ### +- `MkdirAll` will now no longer return an `EEXIST` error if two racing + processes are creating the same directory. We will still verify that the path + is a directory, but this will avoid spurious errors when multiple threads or + programs are trying to `MkdirAll` the same path. opencontainers/runc#4543 + +## [0.3.4] - 2024-10-09 ## + +### Fixed ### +- Previously, some testing mocks we had resulted in us doing `import "testing"` + in non-`_test.go` code, which made some downstreams like Kubernetes unhappy. + This has been fixed. (#32) + +## [0.3.3] - 2024-09-30 ## + +### Fixed ### +- The mode and owner verification logic in `MkdirAll` has been removed. This + was originally intended to protect against some theoretical attacks but upon + further consideration these protections don't actually buy us anything and + they were causing spurious errors with more complicated filesystem setups. +- The "is the created directory empty" logic in `MkdirAll` has also been + removed. This was not causing us issues yet, but some pseudofilesystems (such + as `cgroup`) create non-empty directories and so this logic would've been + wrong for such cases. + +## [0.3.2] - 2024-09-13 ## + +### Changed ### +- Passing the `S_ISUID` or `S_ISGID` modes to `MkdirAllInRoot` will now return + an explicit error saying that those bits are ignored by `mkdirat(2)`. In the + past a different error was returned, but since the silent ignoring behaviour + is codified in the man pages a more explicit error seems apt. While silently + ignoring these bits would be the most compatible option, it could lead to + users thinking their code sets these bits when it doesn't. Programs that need + to deal with compatibility can mask the bits themselves. (#23, #25) + +### Fixed ### +- If a directory has `S_ISGID` set, then all child directories will have + `S_ISGID` set when created and a different gid will be used for any inode + created under the directory. Previously, the "expected owner and mode" + validation in `securejoin.MkdirAll` did not correctly handle this. We now + correctly handle this case. (#24, #25) + +## [0.3.1] - 2024-07-23 ## + +### Changed ### +- By allowing `Open(at)InRoot` to opt-out of the extra work done by `MkdirAll` + to do the necessary "partial lookups", `Open(at)InRoot` now does less work + for both implementations (resulting in a many-fold decrease in the number of + operations for `openat2`, and a modest improvement for non-`openat2`) and is + far more guaranteed to match the correct `openat2(RESOLVE_IN_ROOT)` + behaviour. +- We now use `readlinkat(fd, "")` where possible. For `Open(at)InRoot` this + effectively just means that we no longer risk getting spurious errors during + rename races. However, for our hardened procfs handler, this in theory should + prevent mount attacks from tricking us when doing magic-link readlinks (even + when using the unsafe host `/proc` handle). Unfortunately `Reopen` is still + potentially vulnerable to those kinds of somewhat-esoteric attacks. + + Technically this [will only work on post-2.6.39 kernels][linux-readlinkat-emptypath] + but it seems incredibly unlikely anyone is using `filepath-securejoin` on a + pre-2011 kernel. + +### Fixed ### +- Several improvements were made to the errors returned by `Open(at)InRoot` and + `MkdirAll` when dealing with invalid paths under the emulated (ie. + non-`openat2`) implementation. Previously, some paths would return the wrong + error (`ENOENT` when the last component was a non-directory), and other paths + would be returned as though they were acceptable (trailing-slash components + after a non-directory would be ignored by `Open(at)InRoot`). + + These changes were done to match `openat2`'s behaviour and purely is a + consistency fix (most users are going to be using `openat2` anyway). + +[linux-readlinkat-emptypath]: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=65cfc6722361570bfe255698d9cd4dccaf47570d + +## [0.3.0] - 2024-07-11 ## + +### Added ### +- A new set of `*os.File`-based APIs have been added. These are adapted from + [libpathrs][] and we strongly suggest using them if possible (as they provide + far more protection against attacks than `SecureJoin`): + + - `Open(at)InRoot` resolves a path inside a rootfs and returns an `*os.File` + handle to the path. Note that the handle returned is an `O_PATH` handle, + which cannot be used for reading or writing (as well as some other + operations -- [see open(2) for more details][open.2]) + + - `Reopen` takes an `O_PATH` file handle and safely re-opens it to upgrade + it to a regular handle. This can also be used with non-`O_PATH` handles, + but `O_PATH` is the most obvious application. + + - `MkdirAll` is an implementation of `os.MkdirAll` that is safe to use to + create a directory tree within a rootfs. + + As these are new APIs, they may change in the future. However, they should be + safe to start migrating to as we have extensive tests ensuring they behave + correctly and are safe against various races and other attacks. + +[libpathrs]: https://github.com/openSUSE/libpathrs +[open.2]: https://www.man7.org/linux/man-pages/man2/open.2.html + +## [0.2.5] - 2024-05-03 ## + +### Changed ### +- Some minor changes were made to how lexical components (like `..` and `.`) + are handled during path generation in `SecureJoin`. There is no behaviour + change as a result of this fix (the resulting paths are the same). + +### Fixed ### +- The error returned when we hit a symlink loop now references the correct + path. (#10) + +## [0.2.4] - 2023-09-06 ## + +### Security ### +- This release fixes a potential security issue in filepath-securejoin when + used on Windows ([GHSA-6xv5-86q9-7xr8][], which could be used to generate + paths outside of the provided rootfs in certain cases), as well as improving + the overall behaviour of filepath-securejoin when dealing with Windows paths + that contain volume names. Thanks to Paulo Gomes for discovering and fixing + these issues. + +### Fixed ### +- Switch to GitHub Actions for CI so we can test on Windows as well as Linux + and MacOS. + +[GHSA-6xv5-86q9-7xr8]: https://github.com/advisories/GHSA-6xv5-86q9-7xr8 + +## [0.2.3] - 2021-06-04 ## + +### Changed ### +- Switch to Go 1.13-style `%w` error wrapping, letting us drop the dependency + on `github.com/pkg/errors`. + +## [0.2.2] - 2018-09-05 ## + +### Changed ### +- Use `syscall.ELOOP` as the base error for symlink loops, rather than our own + (internal) error. This allows callers to more easily use `errors.Is` to check + for this case. + +## [0.2.1] - 2018-09-05 ## + +### Fixed ### +- Use our own `IsNotExist` implementation, which lets us handle `ENOTDIR` + properly within `SecureJoin`. + +## [0.2.0] - 2017-07-19 ## + +We now have 100% test coverage! + +### Added ### +- Add a `SecureJoinVFS` API that can be used for mocking (as we do in our new + tests) or for implementing custom handling of lookup operations (such as for + rootless containers, where work is necessary to access directories with weird + modes because we don't have `CAP_DAC_READ_SEARCH` or `CAP_DAC_OVERRIDE`). + +## 0.1.0 - 2017-07-19 + +This is our first release of `github.com/cyphar/filepath-securejoin`, +containing a full implementation with a coverage of 93.5% (the only missing +cases are the error cases, which are hard to mocktest at the moment). + +[Unreleased]: https://github.com/cyphar/filepath-securejoin/compare/v0.3.6...HEAD +[0.3.6]: https://github.com/cyphar/filepath-securejoin/compare/v0.3.5...v0.3.6 +[0.3.5]: https://github.com/cyphar/filepath-securejoin/compare/v0.3.4...v0.3.5 +[0.3.4]: https://github.com/cyphar/filepath-securejoin/compare/v0.3.3...v0.3.4 +[0.3.3]: https://github.com/cyphar/filepath-securejoin/compare/v0.3.2...v0.3.3 +[0.3.2]: https://github.com/cyphar/filepath-securejoin/compare/v0.3.1...v0.3.2 +[0.3.1]: https://github.com/cyphar/filepath-securejoin/compare/v0.3.0...v0.3.1 +[0.3.0]: https://github.com/cyphar/filepath-securejoin/compare/v0.2.5...v0.3.0 +[0.2.5]: https://github.com/cyphar/filepath-securejoin/compare/v0.2.4...v0.2.5 +[0.2.4]: https://github.com/cyphar/filepath-securejoin/compare/v0.2.3...v0.2.4 +[0.2.3]: https://github.com/cyphar/filepath-securejoin/compare/v0.2.2...v0.2.3 +[0.2.2]: https://github.com/cyphar/filepath-securejoin/compare/v0.2.1...v0.2.2 +[0.2.1]: https://github.com/cyphar/filepath-securejoin/compare/v0.2.0...v0.2.1 +[0.2.0]: https://github.com/cyphar/filepath-securejoin/compare/v0.1.0...v0.2.0 diff --git a/vendor/github.com/cyphar/filepath-securejoin/LICENSE b/vendor/github.com/cyphar/filepath-securejoin/LICENSE index bec842f294..cb1ab88da0 100644 --- a/vendor/github.com/cyphar/filepath-securejoin/LICENSE +++ b/vendor/github.com/cyphar/filepath-securejoin/LICENSE @@ -1,5 +1,5 @@ Copyright (C) 2014-2015 Docker Inc & Go Authors. All rights reserved. -Copyright (C) 2017 SUSE LLC. All rights reserved. +Copyright (C) 2017-2024 SUSE LLC. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are diff --git a/vendor/github.com/cyphar/filepath-securejoin/README.md b/vendor/github.com/cyphar/filepath-securejoin/README.md index 4eca0f2355..eaeb53fcd0 100644 --- a/vendor/github.com/cyphar/filepath-securejoin/README.md +++ b/vendor/github.com/cyphar/filepath-securejoin/README.md @@ -1,32 +1,26 @@ ## `filepath-securejoin` ## +[![Go Documentation](https://pkg.go.dev/badge/github.com/cyphar/filepath-securejoin.svg)](https://pkg.go.dev/github.com/cyphar/filepath-securejoin) [![Build Status](https://github.com/cyphar/filepath-securejoin/actions/workflows/ci.yml/badge.svg)](https://github.com/cyphar/filepath-securejoin/actions/workflows/ci.yml) -An implementation of `SecureJoin`, a [candidate for inclusion in the Go -standard library][go#20126]. The purpose of this function is to be a "secure" -alternative to `filepath.Join`, and in particular it provides certain -guarantees that are not provided by `filepath.Join`. - -> **NOTE**: This code is *only* safe if you are not at risk of other processes -> modifying path components after you've used `SecureJoin`. If it is possible -> for a malicious process to modify path components of the resolved path, then -> you will be vulnerable to some fairly trivial TOCTOU race conditions. [There -> are some Linux kernel patches I'm working on which might allow for a better -> solution.][lwn-obeneath] -> -> In addition, with a slightly modified API it might be possible to use -> `O_PATH` and verify that the opened path is actually the resolved one -- but -> I have not done that yet. I might add it in the future as a helper function -> to help users verify the path (we can't just return `/proc/self/fd/` -> because that doesn't always work transparently for all users). - -This is the function prototype: +### Old API ### -```go -func SecureJoin(root, unsafePath string) (string, error) -``` +This library was originally just an implementation of `SecureJoin` which was +[intended to be included in the Go standard library][go#20126] as a safer +`filepath.Join` that would restrict the path lookup to be inside a root +directory. + +The implementation was based on code that existed in several container +runtimes. Unfortunately, this API is **fundamentally unsafe** against attackers +that can modify path components after `SecureJoin` returns and before the +caller uses the path, allowing for some fairly trivial TOCTOU attacks. + +`SecureJoin` (and `SecureJoinVFS`) are still provided by this library to +support legacy users, but new users are strongly suggested to avoid using +`SecureJoin` and instead use the [new api](#new-api) or switch to +[libpathrs][libpathrs]. -This library **guarantees** the following: +With the above limitations in mind, this library guarantees the following: * If no error is set, the resulting string **must** be a child path of `root` and will not contain any symlink path components (they will all be @@ -47,7 +41,7 @@ This library **guarantees** the following: A (trivial) implementation of this function on GNU/Linux systems could be done with the following (note that this requires root privileges and is far more opaque than the implementation in this library, and also requires that -`readlink` is inside the `root` path): +`readlink` is inside the `root` path and is trustworthy): ```go package securejoin @@ -70,9 +64,105 @@ func SecureJoin(root, unsafePath string) (string, error) { } ``` -[lwn-obeneath]: https://lwn.net/Articles/767547/ +[libpathrs]: https://github.com/openSUSE/libpathrs [go#20126]: https://github.com/golang/go/issues/20126 +### New API ### + +While we recommend users switch to [libpathrs][libpathrs] as soon as it has a +stable release, some methods implemented by libpathrs have been ported to this +library to ease the transition. These APIs are only supported on Linux. + +These APIs are implemented such that `filepath-securejoin` will +opportunistically use certain newer kernel APIs that make these operations far +more secure. In particular: + +* All of the lookup operations will use [`openat2`][openat2.2] on new enough + kernels (Linux 5.6 or later) to restrict lookups through magic-links and + bind-mounts (for certain operations) and to make use of `RESOLVE_IN_ROOT` to + efficiently resolve symlinks within a rootfs. + +* The APIs provide hardening against a malicious `/proc` mount to either detect + or avoid being tricked by a `/proc` that is not legitimate. This is done + using [`openat2`][openat2.2] for all users, and privileged users will also be + further protected by using [`fsopen`][fsopen.2] and [`open_tree`][open_tree.2] + (Linux 5.2 or later). + +[openat2.2]: https://www.man7.org/linux/man-pages/man2/openat2.2.html +[fsopen.2]: https://github.com/brauner/man-pages-md/blob/main/fsopen.md +[open_tree.2]: https://github.com/brauner/man-pages-md/blob/main/open_tree.md + +#### `OpenInRoot` #### + +```go +func OpenInRoot(root, unsafePath string) (*os.File, error) +func OpenatInRoot(root *os.File, unsafePath string) (*os.File, error) +func Reopen(handle *os.File, flags int) (*os.File, error) +``` + +`OpenInRoot` is a much safer version of + +```go +path, err := securejoin.SecureJoin(root, unsafePath) +file, err := os.OpenFile(path, unix.O_PATH|unix.O_CLOEXEC) +``` + +that protects against various race attacks that could lead to serious security +issues, depending on the application. Note that the returned `*os.File` is an +`O_PATH` file descriptor, which is quite restricted. Callers will probably need +to use `Reopen` to get a more usable handle (this split is done to provide +useful features like PTY spawning and to avoid users accidentally opening bad +inodes that could cause a DoS). + +Callers need to be careful in how they use the returned `*os.File`. Usually it +is only safe to operate on the handle directly, and it is very easy to create a +security issue. [libpathrs][libpathrs] provides far more helpers to make using +these handles safer -- there is currently no plan to port them to +`filepath-securejoin`. + +`OpenatInRoot` is like `OpenInRoot` except that the root is provided using an +`*os.File`. This allows you to ensure that multiple `OpenatInRoot` (or +`MkdirAllHandle`) calls are operating on the same rootfs. + +> **NOTE**: Unlike `SecureJoin`, `OpenInRoot` will error out as soon as it hits +> a dangling symlink or non-existent path. This is in contrast to `SecureJoin` +> which treated non-existent components as though they were real directories, +> and would allow for partial resolution of dangling symlinks. These behaviours +> are at odds with how Linux treats non-existent paths and dangling symlinks, +> and so these are no longer allowed. + +#### `MkdirAll` #### + +```go +func MkdirAll(root, unsafePath string, mode int) error +func MkdirAllHandle(root *os.File, unsafePath string, mode int) (*os.File, error) +``` + +`MkdirAll` is a much safer version of + +```go +path, err := securejoin.SecureJoin(root, unsafePath) +err = os.MkdirAll(path, mode) +``` + +that protects against the same kinds of races that `OpenInRoot` protects +against. + +`MkdirAllHandle` is like `MkdirAll` except that the root is provided using an +`*os.File` (the reason for this is the same as with `OpenatInRoot`) and an +`*os.File` of the final created directory is returned (this directory is +guaranteed to be effectively identical to the directory created by +`MkdirAllHandle`, which is not possible to ensure by just using `OpenatInRoot` +after `MkdirAll`). + +> **NOTE**: Unlike `SecureJoin`, `MkdirAll` will error out as soon as it hits +> a dangling symlink or non-existent path. This is in contrast to `SecureJoin` +> which treated non-existent components as though they were real directories, +> and would allow for partial resolution of dangling symlinks. These behaviours +> are at odds with how Linux treats non-existent paths and dangling symlinks, +> and so these are no longer allowed. This means that `MkdirAll` will not +> create non-existent directories referenced by a dangling symlink. + ### License ### The license of this project is the same as Go, which is a BSD 3-clause license diff --git a/vendor/github.com/cyphar/filepath-securejoin/VERSION b/vendor/github.com/cyphar/filepath-securejoin/VERSION index abd410582d..449d7e73a9 100644 --- a/vendor/github.com/cyphar/filepath-securejoin/VERSION +++ b/vendor/github.com/cyphar/filepath-securejoin/VERSION @@ -1 +1 @@ -0.2.4 +0.3.6 diff --git a/vendor/github.com/cyphar/filepath-securejoin/doc.go b/vendor/github.com/cyphar/filepath-securejoin/doc.go new file mode 100644 index 0000000000..1ec7d065ef --- /dev/null +++ b/vendor/github.com/cyphar/filepath-securejoin/doc.go @@ -0,0 +1,39 @@ +// Copyright (C) 2014-2015 Docker Inc & Go Authors. All rights reserved. +// Copyright (C) 2017-2024 SUSE LLC. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package securejoin implements a set of helpers to make it easier to write Go +// code that is safe against symlink-related escape attacks. The primary idea +// is to let you resolve a path within a rootfs directory as if the rootfs was +// a chroot. +// +// securejoin has two APIs, a "legacy" API and a "modern" API. +// +// The legacy API is [SecureJoin] and [SecureJoinVFS]. These methods are +// **not** safe against race conditions where an attacker changes the +// filesystem after (or during) the [SecureJoin] operation. +// +// The new API is made up of [OpenInRoot] and [MkdirAll] (and derived +// functions). These are safe against racing attackers and have several other +// protections that are not provided by the legacy API. There are many more +// operations that most programs expect to be able to do safely, but we do not +// provide explicit support for them because we want to encourage users to +// switch to [libpathrs](https://github.com/openSUSE/libpathrs) which is a +// cross-language next-generation library that is entirely designed around +// operating on paths safely. +// +// securejoin has been used by several container runtimes (Docker, runc, +// Kubernetes, etc) for quite a few years as a de-facto standard for operating +// on container filesystem paths "safely". However, most users still use the +// legacy API which is unsafe against various attacks (there is a fairly long +// history of CVEs in dependent as a result). Users should switch to the modern +// API as soon as possible (or even better, switch to libpathrs). +// +// This project was initially intended to be included in the Go standard +// library, but [it was rejected](https://go.dev/issue/20126). There is now a +// [new Go proposal](https://go.dev/issue/67002) for a safe path resolution API +// that shares some of the goals of filepath-securejoin. However, that design +// is intended to work like `openat2(RESOLVE_BENEATH)` which does not fit the +// usecase of container runtimes and most system tools. +package securejoin diff --git a/vendor/github.com/cyphar/filepath-securejoin/gocompat_errors_go120.go b/vendor/github.com/cyphar/filepath-securejoin/gocompat_errors_go120.go new file mode 100644 index 0000000000..42452bbf9b --- /dev/null +++ b/vendor/github.com/cyphar/filepath-securejoin/gocompat_errors_go120.go @@ -0,0 +1,18 @@ +//go:build linux && go1.20 + +// Copyright (C) 2024 SUSE LLC. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package securejoin + +import ( + "fmt" +) + +// wrapBaseError is a helper that is equivalent to fmt.Errorf("%w: %w"), except +// that on pre-1.20 Go versions only errors.Is() works properly (errors.Unwrap) +// is only guaranteed to give you baseErr. +func wrapBaseError(baseErr, extraErr error) error { + return fmt.Errorf("%w: %w", extraErr, baseErr) +} diff --git a/vendor/github.com/cyphar/filepath-securejoin/gocompat_errors_unsupported.go b/vendor/github.com/cyphar/filepath-securejoin/gocompat_errors_unsupported.go new file mode 100644 index 0000000000..e7adca3fd1 --- /dev/null +++ b/vendor/github.com/cyphar/filepath-securejoin/gocompat_errors_unsupported.go @@ -0,0 +1,38 @@ +//go:build linux && !go1.20 + +// Copyright (C) 2024 SUSE LLC. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package securejoin + +import ( + "fmt" +) + +type wrappedError struct { + inner error + isError error +} + +func (err wrappedError) Is(target error) bool { + return err.isError == target +} + +func (err wrappedError) Unwrap() error { + return err.inner +} + +func (err wrappedError) Error() string { + return fmt.Sprintf("%v: %v", err.isError, err.inner) +} + +// wrapBaseError is a helper that is equivalent to fmt.Errorf("%w: %w"), except +// that on pre-1.20 Go versions only errors.Is() works properly (errors.Unwrap) +// is only guaranteed to give you baseErr. +func wrapBaseError(baseErr, extraErr error) error { + return wrappedError{ + inner: baseErr, + isError: extraErr, + } +} diff --git a/vendor/github.com/cyphar/filepath-securejoin/gocompat_generics_go121.go b/vendor/github.com/cyphar/filepath-securejoin/gocompat_generics_go121.go new file mode 100644 index 0000000000..ddd6fa9a41 --- /dev/null +++ b/vendor/github.com/cyphar/filepath-securejoin/gocompat_generics_go121.go @@ -0,0 +1,32 @@ +//go:build linux && go1.21 + +// Copyright (C) 2024 SUSE LLC. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package securejoin + +import ( + "slices" + "sync" +) + +func slices_DeleteFunc[S ~[]E, E any](slice S, delFn func(E) bool) S { + return slices.DeleteFunc(slice, delFn) +} + +func slices_Contains[S ~[]E, E comparable](slice S, val E) bool { + return slices.Contains(slice, val) +} + +func slices_Clone[S ~[]E, E any](slice S) S { + return slices.Clone(slice) +} + +func sync_OnceValue[T any](f func() T) func() T { + return sync.OnceValue(f) +} + +func sync_OnceValues[T1, T2 any](f func() (T1, T2)) func() (T1, T2) { + return sync.OnceValues(f) +} diff --git a/vendor/github.com/cyphar/filepath-securejoin/gocompat_generics_unsupported.go b/vendor/github.com/cyphar/filepath-securejoin/gocompat_generics_unsupported.go new file mode 100644 index 0000000000..f1e6fe7e71 --- /dev/null +++ b/vendor/github.com/cyphar/filepath-securejoin/gocompat_generics_unsupported.go @@ -0,0 +1,124 @@ +//go:build linux && !go1.21 + +// Copyright (C) 2024 SUSE LLC. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package securejoin + +import ( + "sync" +) + +// These are very minimal implementations of functions that appear in Go 1.21's +// stdlib, included so that we can build on older Go versions. Most are +// borrowed directly from the stdlib, and a few are modified to be "obviously +// correct" without needing to copy too many other helpers. + +// clearSlice is equivalent to the builtin clear from Go 1.21. +// Copied from the Go 1.24 stdlib implementation. +func clearSlice[S ~[]E, E any](slice S) { + var zero E + for i := range slice { + slice[i] = zero + } +} + +// Copied from the Go 1.24 stdlib implementation. +func slices_IndexFunc[S ~[]E, E any](s S, f func(E) bool) int { + for i := range s { + if f(s[i]) { + return i + } + } + return -1 +} + +// Copied from the Go 1.24 stdlib implementation. +func slices_DeleteFunc[S ~[]E, E any](s S, del func(E) bool) S { + i := slices_IndexFunc(s, del) + if i == -1 { + return s + } + // Don't start copying elements until we find one to delete. + for j := i + 1; j < len(s); j++ { + if v := s[j]; !del(v) { + s[i] = v + i++ + } + } + clearSlice(s[i:]) // zero/nil out the obsolete elements, for GC + return s[:i] +} + +// Similar to the stdlib slices.Contains, except that we don't have +// slices.Index so we need to use slices.IndexFunc for this non-Func helper. +func slices_Contains[S ~[]E, E comparable](s S, v E) bool { + return slices_IndexFunc(s, func(e E) bool { return e == v }) >= 0 +} + +// Copied from the Go 1.24 stdlib implementation. +func slices_Clone[S ~[]E, E any](s S) S { + // Preserve nil in case it matters. + if s == nil { + return nil + } + return append(S([]E{}), s...) +} + +// Copied from the Go 1.24 stdlib implementation. +func sync_OnceValue[T any](f func() T) func() T { + var ( + once sync.Once + valid bool + p any + result T + ) + g := func() { + defer func() { + p = recover() + if !valid { + panic(p) + } + }() + result = f() + f = nil + valid = true + } + return func() T { + once.Do(g) + if !valid { + panic(p) + } + return result + } +} + +// Copied from the Go 1.24 stdlib implementation. +func sync_OnceValues[T1, T2 any](f func() (T1, T2)) func() (T1, T2) { + var ( + once sync.Once + valid bool + p any + r1 T1 + r2 T2 + ) + g := func() { + defer func() { + p = recover() + if !valid { + panic(p) + } + }() + r1, r2 = f() + f = nil + valid = true + } + return func() (T1, T2) { + once.Do(g) + if !valid { + panic(p) + } + return r1, r2 + } +} diff --git a/vendor/github.com/cyphar/filepath-securejoin/join.go b/vendor/github.com/cyphar/filepath-securejoin/join.go index aa32b85fb8..e0ee3f2b57 100644 --- a/vendor/github.com/cyphar/filepath-securejoin/join.go +++ b/vendor/github.com/cyphar/filepath-securejoin/join.go @@ -1,17 +1,11 @@ // Copyright (C) 2014-2015 Docker Inc & Go Authors. All rights reserved. -// Copyright (C) 2017 SUSE LLC. All rights reserved. +// Copyright (C) 2017-2024 SUSE LLC. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. -// Package securejoin is an implementation of the hopefully-soon-to-be-included -// SecureJoin helper that is meant to be part of the "path/filepath" package. -// The purpose of this project is to provide a PoC implementation to make the -// SecureJoin proposal (https://github.com/golang/go/issues/20126) more -// tangible. package securejoin import ( - "bytes" "errors" "os" "path/filepath" @@ -19,26 +13,34 @@ import ( "syscall" ) +const maxSymlinkLimit = 255 + // IsNotExist tells you if err is an error that implies that either the path // accessed does not exist (or path components don't exist). This is -// effectively a more broad version of os.IsNotExist. +// effectively a more broad version of [os.IsNotExist]. func IsNotExist(err error) bool { // Check that it's not actually an ENOTDIR, which in some cases is a more // convoluted case of ENOENT (usually involving weird paths). return errors.Is(err, os.ErrNotExist) || errors.Is(err, syscall.ENOTDIR) || errors.Is(err, syscall.ENOENT) } -// SecureJoinVFS joins the two given path components (similar to Join) except +// SecureJoinVFS joins the two given path components (similar to [filepath.Join]) except // that the returned path is guaranteed to be scoped inside the provided root // path (when evaluated). Any symbolic links in the path are evaluated with the // given root treated as the root of the filesystem, similar to a chroot. The -// filesystem state is evaluated through the given VFS interface (if nil, the -// standard os.* family of functions are used). +// filesystem state is evaluated through the given [VFS] interface (if nil, the +// standard [os].* family of functions are used). // // Note that the guarantees provided by this function only apply if the path // components in the returned string are not modified (in other words are not // replaced with symlinks on the filesystem) after this function has returned. -// Such a symlink race is necessarily out-of-scope of SecureJoin. +// Such a symlink race is necessarily out-of-scope of SecureJoinVFS. +// +// NOTE: Due to the above limitation, Linux users are strongly encouraged to +// use [OpenInRoot] instead, which does safely protect against these kinds of +// attacks. There is no way to solve this problem with SecureJoinVFS because +// the API is fundamentally wrong (you cannot return a "safe" path string and +// guarantee it won't be modified afterwards). // // Volume names in unsafePath are always discarded, regardless if they are // provided via direct input or when evaluating symlinks. Therefore: @@ -51,75 +53,73 @@ func SecureJoinVFS(root, unsafePath string, vfs VFS) (string, error) { } unsafePath = filepath.FromSlash(unsafePath) - var path bytes.Buffer - n := 0 - for unsafePath != "" { - if n > 255 { - return "", &os.PathError{Op: "SecureJoin", Path: root + string(filepath.Separator) + unsafePath, Err: syscall.ELOOP} + var ( + currentPath string + remainingPath = unsafePath + linksWalked int + ) + for remainingPath != "" { + if v := filepath.VolumeName(remainingPath); v != "" { + remainingPath = remainingPath[len(v):] } - if v := filepath.VolumeName(unsafePath); v != "" { - unsafePath = unsafePath[len(v):] - } - - // Next path component, p. - i := strings.IndexRune(unsafePath, filepath.Separator) - var p string - if i == -1 { - p, unsafePath = unsafePath, "" + // Get the next path component. + var part string + if i := strings.IndexRune(remainingPath, filepath.Separator); i == -1 { + part, remainingPath = remainingPath, "" } else { - p, unsafePath = unsafePath[:i], unsafePath[i+1:] + part, remainingPath = remainingPath[:i], remainingPath[i+1:] } - // Create a cleaned path, using the lexical semantics of /../a, to - // create a "scoped" path component which can safely be joined to fullP - // for evaluation. At this point, path.String() doesn't contain any - // symlink components. - cleanP := filepath.Clean(string(filepath.Separator) + path.String() + p) - if cleanP == string(filepath.Separator) { - path.Reset() + // Apply the component lexically to the path we are building. + // currentPath does not contain any symlinks, and we are lexically + // dealing with a single component, so it's okay to do a filepath.Clean + // here. + nextPath := filepath.Join(string(filepath.Separator), currentPath, part) + if nextPath == string(filepath.Separator) { + currentPath = "" continue } - fullP := filepath.Clean(root + cleanP) + fullPath := root + string(filepath.Separator) + nextPath // Figure out whether the path is a symlink. - fi, err := vfs.Lstat(fullP) + fi, err := vfs.Lstat(fullPath) if err != nil && !IsNotExist(err) { return "", err } // Treat non-existent path components the same as non-symlinks (we // can't do any better here). if IsNotExist(err) || fi.Mode()&os.ModeSymlink == 0 { - path.WriteString(p) - path.WriteRune(filepath.Separator) + currentPath = nextPath continue } - // Only increment when we actually dereference a link. - n++ + // It's a symlink, so get its contents and expand it by prepending it + // to the yet-unparsed path. + linksWalked++ + if linksWalked > maxSymlinkLimit { + return "", &os.PathError{Op: "SecureJoin", Path: root + string(filepath.Separator) + unsafePath, Err: syscall.ELOOP} + } - // It's a symlink, expand it by prepending it to the yet-unparsed path. - dest, err := vfs.Readlink(fullP) + dest, err := vfs.Readlink(fullPath) if err != nil { return "", err } + remainingPath = dest + string(filepath.Separator) + remainingPath // Absolute symlinks reset any work we've already done. if filepath.IsAbs(dest) { - path.Reset() + currentPath = "" } - unsafePath = dest + string(filepath.Separator) + unsafePath } - // We have to clean path.String() here because it may contain '..' - // components that are entirely lexical, but would be misleading otherwise. - // And finally do a final clean to ensure that root is also lexically - // clean. - fullP := filepath.Clean(string(filepath.Separator) + path.String()) - return filepath.Clean(root + fullP), nil + // There should be no lexical components like ".." left in the path here, + // but for safety clean up the path before joining it to the root. + finalPath := filepath.Join(string(filepath.Separator), currentPath) + return filepath.Join(root, finalPath), nil } -// SecureJoin is a wrapper around SecureJoinVFS that just uses the os.* library -// of functions as the VFS. If in doubt, use this function over SecureJoinVFS. +// SecureJoin is a wrapper around [SecureJoinVFS] that just uses the [os].* library +// of functions as the [VFS]. If in doubt, use this function over [SecureJoinVFS]. func SecureJoin(root, unsafePath string) (string, error) { return SecureJoinVFS(root, unsafePath, nil) } diff --git a/vendor/github.com/cyphar/filepath-securejoin/lookup_linux.go b/vendor/github.com/cyphar/filepath-securejoin/lookup_linux.go new file mode 100644 index 0000000000..be81e498d7 --- /dev/null +++ b/vendor/github.com/cyphar/filepath-securejoin/lookup_linux.go @@ -0,0 +1,388 @@ +//go:build linux + +// Copyright (C) 2024 SUSE LLC. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package securejoin + +import ( + "errors" + "fmt" + "os" + "path" + "path/filepath" + "strings" + + "golang.org/x/sys/unix" +) + +type symlinkStackEntry struct { + // (dir, remainingPath) is what we would've returned if the link didn't + // exist. This matches what openat2(RESOLVE_IN_ROOT) would return in + // this case. + dir *os.File + remainingPath string + // linkUnwalked is the remaining path components from the original + // Readlink which we have yet to walk. When this slice is empty, we + // drop the link from the stack. + linkUnwalked []string +} + +func (se symlinkStackEntry) String() string { + return fmt.Sprintf("<%s>/%s [->%s]", se.dir.Name(), se.remainingPath, strings.Join(se.linkUnwalked, "/")) +} + +func (se symlinkStackEntry) Close() { + _ = se.dir.Close() +} + +type symlinkStack []*symlinkStackEntry + +func (s *symlinkStack) IsEmpty() bool { + return s == nil || len(*s) == 0 +} + +func (s *symlinkStack) Close() { + if s != nil { + for _, link := range *s { + link.Close() + } + // TODO: Switch to clear once we switch to Go 1.21. + *s = nil + } +} + +var ( + errEmptyStack = errors.New("[internal] stack is empty") + errBrokenSymlinkStack = errors.New("[internal error] broken symlink stack") +) + +func (s *symlinkStack) popPart(part string) error { + if s == nil || s.IsEmpty() { + // If there is nothing in the symlink stack, then the part was from the + // real path provided by the user, and this is a no-op. + return errEmptyStack + } + if part == "." { + // "." components are no-ops -- we drop them when doing SwapLink. + return nil + } + + tailEntry := (*s)[len(*s)-1] + + // Double-check that we are popping the component we expect. + if len(tailEntry.linkUnwalked) == 0 { + return fmt.Errorf("%w: trying to pop component %q of empty stack entry %s", errBrokenSymlinkStack, part, tailEntry) + } + headPart := tailEntry.linkUnwalked[0] + if headPart != part { + return fmt.Errorf("%w: trying to pop component %q but the last stack entry is %s (%q)", errBrokenSymlinkStack, part, tailEntry, headPart) + } + + // Drop the component, but keep the entry around in case we are dealing + // with a "tail-chained" symlink. + tailEntry.linkUnwalked = tailEntry.linkUnwalked[1:] + return nil +} + +func (s *symlinkStack) PopPart(part string) error { + if err := s.popPart(part); err != nil { + if errors.Is(err, errEmptyStack) { + // Skip empty stacks. + err = nil + } + return err + } + + // Clean up any of the trailing stack entries that are empty. + for lastGood := len(*s) - 1; lastGood >= 0; lastGood-- { + entry := (*s)[lastGood] + if len(entry.linkUnwalked) > 0 { + break + } + entry.Close() + (*s) = (*s)[:lastGood] + } + return nil +} + +func (s *symlinkStack) push(dir *os.File, remainingPath, linkTarget string) error { + if s == nil { + return nil + } + // Split the link target and clean up any "" parts. + linkTargetParts := slices_DeleteFunc( + strings.Split(linkTarget, "/"), + func(part string) bool { return part == "" || part == "." }) + + // Copy the directory so the caller doesn't close our copy. + dirCopy, err := dupFile(dir) + if err != nil { + return err + } + + // Add to the stack. + *s = append(*s, &symlinkStackEntry{ + dir: dirCopy, + remainingPath: remainingPath, + linkUnwalked: linkTargetParts, + }) + return nil +} + +func (s *symlinkStack) SwapLink(linkPart string, dir *os.File, remainingPath, linkTarget string) error { + // If we are currently inside a symlink resolution, remove the symlink + // component from the last symlink entry, but don't remove the entry even + // if it's empty. If we are a "tail-chained" symlink (a trailing symlink we + // hit during a symlink resolution) we need to keep the old symlink until + // we finish the resolution. + if err := s.popPart(linkPart); err != nil { + if !errors.Is(err, errEmptyStack) { + return err + } + // Push the component regardless of whether the stack was empty. + } + return s.push(dir, remainingPath, linkTarget) +} + +func (s *symlinkStack) PopTopSymlink() (*os.File, string, bool) { + if s == nil || s.IsEmpty() { + return nil, "", false + } + tailEntry := (*s)[0] + *s = (*s)[1:] + return tailEntry.dir, tailEntry.remainingPath, true +} + +// partialLookupInRoot tries to lookup as much of the request path as possible +// within the provided root (a-la RESOLVE_IN_ROOT) and opens the final existing +// component of the requested path, returning a file handle to the final +// existing component and a string containing the remaining path components. +func partialLookupInRoot(root *os.File, unsafePath string) (*os.File, string, error) { + return lookupInRoot(root, unsafePath, true) +} + +func completeLookupInRoot(root *os.File, unsafePath string) (*os.File, error) { + handle, remainingPath, err := lookupInRoot(root, unsafePath, false) + if remainingPath != "" && err == nil { + // should never happen + err = fmt.Errorf("[bug] non-empty remaining path when doing a non-partial lookup: %q", remainingPath) + } + // lookupInRoot(partial=false) will always close the handle if an error is + // returned, so no need to double-check here. + return handle, err +} + +func lookupInRoot(root *os.File, unsafePath string, partial bool) (Handle *os.File, _ string, _ error) { + unsafePath = filepath.ToSlash(unsafePath) // noop + + // This is very similar to SecureJoin, except that we operate on the + // components using file descriptors. We then return the last component we + // managed open, along with the remaining path components not opened. + + // Try to use openat2 if possible. + if hasOpenat2() { + return lookupOpenat2(root, unsafePath, partial) + } + + // Get the "actual" root path from /proc/self/fd. This is necessary if the + // root is some magic-link like /proc/$pid/root, in which case we want to + // make sure when we do checkProcSelfFdPath that we are using the correct + // root path. + logicalRootPath, err := procSelfFdReadlink(root) + if err != nil { + return nil, "", fmt.Errorf("get real root path: %w", err) + } + + currentDir, err := dupFile(root) + if err != nil { + return nil, "", fmt.Errorf("clone root fd: %w", err) + } + defer func() { + // If a handle is not returned, close the internal handle. + if Handle == nil { + _ = currentDir.Close() + } + }() + + // symlinkStack is used to emulate how openat2(RESOLVE_IN_ROOT) treats + // dangling symlinks. If we hit a non-existent path while resolving a + // symlink, we need to return the (dir, remainingPath) that we had when we + // hit the symlink (treating the symlink as though it were a regular file). + // The set of (dir, remainingPath) sets is stored within the symlinkStack + // and we add and remove parts when we hit symlink and non-symlink + // components respectively. We need a stack because of recursive symlinks + // (symlinks that contain symlink components in their target). + // + // Note that the stack is ONLY used for book-keeping. All of the actual + // path walking logic is still based on currentPath/remainingPath and + // currentDir (as in SecureJoin). + var symStack *symlinkStack + if partial { + symStack = new(symlinkStack) + defer symStack.Close() + } + + var ( + linksWalked int + currentPath string + remainingPath = unsafePath + ) + for remainingPath != "" { + // Save the current remaining path so if the part is not real we can + // return the path including the component. + oldRemainingPath := remainingPath + + // Get the next path component. + var part string + if i := strings.IndexByte(remainingPath, '/'); i == -1 { + part, remainingPath = remainingPath, "" + } else { + part, remainingPath = remainingPath[:i], remainingPath[i+1:] + } + // If we hit an empty component, we need to treat it as though it is + // "." so that trailing "/" and "//" components on a non-directory + // correctly return the right error code. + if part == "" { + part = "." + } + + // Apply the component lexically to the path we are building. + // currentPath does not contain any symlinks, and we are lexically + // dealing with a single component, so it's okay to do a filepath.Clean + // here. + nextPath := path.Join("/", currentPath, part) + // If we logically hit the root, just clone the root rather than + // opening the part and doing all of the other checks. + if nextPath == "/" { + if err := symStack.PopPart(part); err != nil { + return nil, "", fmt.Errorf("walking into root with part %q failed: %w", part, err) + } + // Jump to root. + rootClone, err := dupFile(root) + if err != nil { + return nil, "", fmt.Errorf("clone root fd: %w", err) + } + _ = currentDir.Close() + currentDir = rootClone + currentPath = nextPath + continue + } + + // Try to open the next component. + nextDir, err := openatFile(currentDir, part, unix.O_PATH|unix.O_NOFOLLOW|unix.O_CLOEXEC, 0) + switch { + case err == nil: + st, err := nextDir.Stat() + if err != nil { + _ = nextDir.Close() + return nil, "", fmt.Errorf("stat component %q: %w", part, err) + } + + switch st.Mode() & os.ModeType { + case os.ModeSymlink: + // readlinkat implies AT_EMPTY_PATH since Linux 2.6.39. See + // Linux commit 65cfc6722361 ("readlinkat(), fchownat() and + // fstatat() with empty relative pathnames"). + linkDest, err := readlinkatFile(nextDir, "") + // We don't need the handle anymore. + _ = nextDir.Close() + if err != nil { + return nil, "", err + } + + linksWalked++ + if linksWalked > maxSymlinkLimit { + return nil, "", &os.PathError{Op: "securejoin.lookupInRoot", Path: logicalRootPath + "/" + unsafePath, Err: unix.ELOOP} + } + + // Swap out the symlink's component for the link entry itself. + if err := symStack.SwapLink(part, currentDir, oldRemainingPath, linkDest); err != nil { + return nil, "", fmt.Errorf("walking into symlink %q failed: push symlink: %w", part, err) + } + + // Update our logical remaining path. + remainingPath = linkDest + "/" + remainingPath + // Absolute symlinks reset any work we've already done. + if path.IsAbs(linkDest) { + // Jump to root. + rootClone, err := dupFile(root) + if err != nil { + return nil, "", fmt.Errorf("clone root fd: %w", err) + } + _ = currentDir.Close() + currentDir = rootClone + currentPath = "/" + } + + default: + // If we are dealing with a directory, simply walk into it. + _ = currentDir.Close() + currentDir = nextDir + currentPath = nextPath + + // The part was real, so drop it from the symlink stack. + if err := symStack.PopPart(part); err != nil { + return nil, "", fmt.Errorf("walking into directory %q failed: %w", part, err) + } + + // If we are operating on a .., make sure we haven't escaped. + // We only have to check for ".." here because walking down + // into a regular component component cannot cause you to + // escape. This mirrors the logic in RESOLVE_IN_ROOT, except we + // have to check every ".." rather than only checking after a + // rename or mount on the system. + if part == ".." { + // Make sure the root hasn't moved. + if err := checkProcSelfFdPath(logicalRootPath, root); err != nil { + return nil, "", fmt.Errorf("root path moved during lookup: %w", err) + } + // Make sure the path is what we expect. + fullPath := logicalRootPath + nextPath + if err := checkProcSelfFdPath(fullPath, currentDir); err != nil { + return nil, "", fmt.Errorf("walking into %q had unexpected result: %w", part, err) + } + } + } + + default: + if !partial { + return nil, "", err + } + // If there are any remaining components in the symlink stack, we + // are still within a symlink resolution and thus we hit a dangling + // symlink. So pretend that the first symlink in the stack we hit + // was an ENOENT (to match openat2). + if oldDir, remainingPath, ok := symStack.PopTopSymlink(); ok { + _ = currentDir.Close() + return oldDir, remainingPath, err + } + // We have hit a final component that doesn't exist, so we have our + // partial open result. Note that we have to use the OLD remaining + // path, since the lookup failed. + return currentDir, oldRemainingPath, err + } + } + + // If the unsafePath had a trailing slash, we need to make sure we try to + // do a relative "." open so that we will correctly return an error when + // the final component is a non-directory (to match openat2). In the + // context of openat2, a trailing slash and a trailing "/." are completely + // equivalent. + if strings.HasSuffix(unsafePath, "/") { + nextDir, err := openatFile(currentDir, ".", unix.O_PATH|unix.O_NOFOLLOW|unix.O_CLOEXEC, 0) + if err != nil { + if !partial { + _ = currentDir.Close() + currentDir = nil + } + return currentDir, "", err + } + _ = currentDir.Close() + currentDir = nextDir + } + + // All of the components existed! + return currentDir, "", nil +} diff --git a/vendor/github.com/cyphar/filepath-securejoin/mkdir_linux.go b/vendor/github.com/cyphar/filepath-securejoin/mkdir_linux.go new file mode 100644 index 0000000000..5e559bb7a8 --- /dev/null +++ b/vendor/github.com/cyphar/filepath-securejoin/mkdir_linux.go @@ -0,0 +1,215 @@ +//go:build linux + +// Copyright (C) 2024 SUSE LLC. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package securejoin + +import ( + "errors" + "fmt" + "os" + "path/filepath" + "strings" + + "golang.org/x/sys/unix" +) + +var ( + errInvalidMode = errors.New("invalid permission mode") + errPossibleAttack = errors.New("possible attack detected") +) + +// MkdirAllHandle is equivalent to [MkdirAll], except that it is safer to use +// in two respects: +// +// - The caller provides the root directory as an *[os.File] (preferably O_PATH) +// handle. This means that the caller can be sure which root directory is +// being used. Note that this can be emulated by using /proc/self/fd/... as +// the root path with [os.MkdirAll]. +// +// - Once all of the directories have been created, an *[os.File] O_PATH handle +// to the directory at unsafePath is returned to the caller. This is done in +// an effectively-race-free way (an attacker would only be able to swap the +// final directory component), which is not possible to emulate with +// [MkdirAll]. +// +// In addition, the returned handle is obtained far more efficiently than doing +// a brand new lookup of unsafePath (such as with [SecureJoin] or openat2) after +// doing [MkdirAll]. If you intend to open the directory after creating it, you +// should use MkdirAllHandle. +func MkdirAllHandle(root *os.File, unsafePath string, mode int) (_ *os.File, Err error) { + // Make sure there are no os.FileMode bits set. + if mode&^0o7777 != 0 { + return nil, fmt.Errorf("%w for mkdir 0o%.3o", errInvalidMode, mode) + } + // On Linux, mkdirat(2) (and os.Mkdir) silently ignore the suid and sgid + // bits. We could also silently ignore them but since we have very few + // users it seems more prudent to return an error so users notice that + // these bits will not be set. + if mode&^0o1777 != 0 { + return nil, fmt.Errorf("%w for mkdir 0o%.3o: suid and sgid are ignored by mkdir", errInvalidMode, mode) + } + + // Try to open as much of the path as possible. + currentDir, remainingPath, err := partialLookupInRoot(root, unsafePath) + defer func() { + if Err != nil { + _ = currentDir.Close() + } + }() + if err != nil && !errors.Is(err, unix.ENOENT) { + return nil, fmt.Errorf("find existing subpath of %q: %w", unsafePath, err) + } + + // If there is an attacker deleting directories as we walk into them, + // detect this proactively. Note this is guaranteed to detect if the + // attacker deleted any part of the tree up to currentDir. + // + // Once we walk into a dead directory, partialLookupInRoot would not be + // able to walk further down the tree (directories must be empty before + // they are deleted), and if the attacker has removed the entire tree we + // can be sure that anything that was originally inside a dead directory + // must also be deleted and thus is a dead directory in its own right. + // + // This is mostly a quality-of-life check, because mkdir will simply fail + // later if the attacker deletes the tree after this check. + if err := isDeadInode(currentDir); err != nil { + return nil, fmt.Errorf("finding existing subpath of %q: %w", unsafePath, err) + } + + // Re-open the path to match the O_DIRECTORY reopen loop later (so that we + // always return a non-O_PATH handle). We also check that we actually got a + // directory. + if reopenDir, err := Reopen(currentDir, unix.O_DIRECTORY|unix.O_CLOEXEC); errors.Is(err, unix.ENOTDIR) { + return nil, fmt.Errorf("cannot create subdirectories in %q: %w", currentDir.Name(), unix.ENOTDIR) + } else if err != nil { + return nil, fmt.Errorf("re-opening handle to %q: %w", currentDir.Name(), err) + } else { + _ = currentDir.Close() + currentDir = reopenDir + } + + remainingParts := strings.Split(remainingPath, string(filepath.Separator)) + if slices_Contains(remainingParts, "..") { + // The path contained ".." components after the end of the "real" + // components. We could try to safely resolve ".." here but that would + // add a bunch of extra logic for something that it's not clear even + // needs to be supported. So just return an error. + // + // If we do filepath.Clean(remainingPath) then we end up with the + // problem that ".." can erase a trailing dangling symlink and produce + // a path that doesn't quite match what the user asked for. + return nil, fmt.Errorf("%w: yet-to-be-created path %q contains '..' components", unix.ENOENT, remainingPath) + } + + // Make sure the mode doesn't have any type bits. + mode &^= unix.S_IFMT + + // Create the remaining components. + for _, part := range remainingParts { + switch part { + case "", ".": + // Skip over no-op paths. + continue + } + + // NOTE: mkdir(2) will not follow trailing symlinks, so we can safely + // create the final component without worrying about symlink-exchange + // attacks. + // + // If we get -EEXIST, it's possible that another program created the + // directory at the same time as us. In that case, just continue on as + // if we created it (if the created inode is not a directory, the + // following open call will fail). + if err := unix.Mkdirat(int(currentDir.Fd()), part, uint32(mode)); err != nil && !errors.Is(err, unix.EEXIST) { + err = &os.PathError{Op: "mkdirat", Path: currentDir.Name() + "/" + part, Err: err} + // Make the error a bit nicer if the directory is dead. + if deadErr := isDeadInode(currentDir); deadErr != nil { + // TODO: Once we bump the minimum Go version to 1.20, we can use + // multiple %w verbs for this wrapping. For now we need to use a + // compatibility shim for older Go versions. + //err = fmt.Errorf("%w (%w)", err, deadErr) + err = wrapBaseError(err, deadErr) + } + return nil, err + } + + // Get a handle to the next component. O_DIRECTORY means we don't need + // to use O_PATH. + var nextDir *os.File + if hasOpenat2() { + nextDir, err = openat2File(currentDir, part, &unix.OpenHow{ + Flags: unix.O_NOFOLLOW | unix.O_DIRECTORY | unix.O_CLOEXEC, + Resolve: unix.RESOLVE_BENEATH | unix.RESOLVE_NO_SYMLINKS | unix.RESOLVE_NO_XDEV, + }) + } else { + nextDir, err = openatFile(currentDir, part, unix.O_NOFOLLOW|unix.O_DIRECTORY|unix.O_CLOEXEC, 0) + } + if err != nil { + return nil, err + } + _ = currentDir.Close() + currentDir = nextDir + + // It's possible that the directory we just opened was swapped by an + // attacker. Unfortunately there isn't much we can do to protect + // against this, and MkdirAll's behaviour is that we will reuse + // existing directories anyway so the need to protect against this is + // incredibly limited (and arguably doesn't even deserve mention here). + // + // Ideally we might want to check that the owner and mode match what we + // would've created -- unfortunately, it is non-trivial to verify that + // the owner and mode of the created directory match. While plain Unix + // DAC rules seem simple enough to emulate, there are a bunch of other + // factors that can change the mode or owner of created directories + // (default POSIX ACLs, mount options like uid=1,gid=2,umask=0 on + // filesystems like vfat, etc etc). We used to try to verify this but + // it just lead to a series of spurious errors. + // + // We could also check that the directory is non-empty, but + // unfortunately some pseduofilesystems (like cgroupfs) create + // non-empty directories, which would result in different spurious + // errors. + } + return currentDir, nil +} + +// MkdirAll is a race-safe alternative to the [os.MkdirAll] function, +// where the new directory is guaranteed to be within the root directory (if an +// attacker can move directories from inside the root to outside the root, the +// created directory tree might be outside of the root but the key constraint +// is that at no point will we walk outside of the directory tree we are +// creating). +// +// Effectively, MkdirAll(root, unsafePath, mode) is equivalent to +// +// path, _ := securejoin.SecureJoin(root, unsafePath) +// err := os.MkdirAll(path, mode) +// +// But is much safer. The above implementation is unsafe because if an attacker +// can modify the filesystem tree between [SecureJoin] and [os.MkdirAll], it is +// possible for MkdirAll to resolve unsafe symlink components and create +// directories outside of the root. +// +// If you plan to open the directory after you have created it or want to use +// an open directory handle as the root, you should use [MkdirAllHandle] instead. +// This function is a wrapper around [MkdirAllHandle]. +// +// NOTE: The mode argument must be set the unix mode bits (unix.S_I...), not +// the Go generic mode bits ([os.FileMode]...). +func MkdirAll(root, unsafePath string, mode int) error { + rootDir, err := os.OpenFile(root, unix.O_PATH|unix.O_DIRECTORY|unix.O_CLOEXEC, 0) + if err != nil { + return err + } + defer rootDir.Close() + + f, err := MkdirAllHandle(rootDir, unsafePath, mode) + if err != nil { + return err + } + _ = f.Close() + return nil +} diff --git a/vendor/github.com/cyphar/filepath-securejoin/open_linux.go b/vendor/github.com/cyphar/filepath-securejoin/open_linux.go new file mode 100644 index 0000000000..230be73f0e --- /dev/null +++ b/vendor/github.com/cyphar/filepath-securejoin/open_linux.go @@ -0,0 +1,103 @@ +//go:build linux + +// Copyright (C) 2024 SUSE LLC. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package securejoin + +import ( + "fmt" + "os" + "strconv" + + "golang.org/x/sys/unix" +) + +// OpenatInRoot is equivalent to [OpenInRoot], except that the root is provided +// using an *[os.File] handle, to ensure that the correct root directory is used. +func OpenatInRoot(root *os.File, unsafePath string) (*os.File, error) { + handle, err := completeLookupInRoot(root, unsafePath) + if err != nil { + return nil, &os.PathError{Op: "securejoin.OpenInRoot", Path: unsafePath, Err: err} + } + return handle, nil +} + +// OpenInRoot safely opens the provided unsafePath within the root. +// Effectively, OpenInRoot(root, unsafePath) is equivalent to +// +// path, _ := securejoin.SecureJoin(root, unsafePath) +// handle, err := os.OpenFile(path, unix.O_PATH|unix.O_CLOEXEC) +// +// But is much safer. The above implementation is unsafe because if an attacker +// can modify the filesystem tree between [SecureJoin] and [os.OpenFile], it is +// possible for the returned file to be outside of the root. +// +// Note that the returned handle is an O_PATH handle, meaning that only a very +// limited set of operations will work on the handle. This is done to avoid +// accidentally opening an untrusted file that could cause issues (such as a +// disconnected TTY that could cause a DoS, or some other issue). In order to +// use the returned handle, you can "upgrade" it to a proper handle using +// [Reopen]. +func OpenInRoot(root, unsafePath string) (*os.File, error) { + rootDir, err := os.OpenFile(root, unix.O_PATH|unix.O_DIRECTORY|unix.O_CLOEXEC, 0) + if err != nil { + return nil, err + } + defer rootDir.Close() + return OpenatInRoot(rootDir, unsafePath) +} + +// Reopen takes an *[os.File] handle and re-opens it through /proc/self/fd. +// Reopen(file, flags) is effectively equivalent to +// +// fdPath := fmt.Sprintf("/proc/self/fd/%d", file.Fd()) +// os.OpenFile(fdPath, flags|unix.O_CLOEXEC) +// +// But with some extra hardenings to ensure that we are not tricked by a +// maliciously-configured /proc mount. While this attack scenario is not +// common, in container runtimes it is possible for higher-level runtimes to be +// tricked into configuring an unsafe /proc that can be used to attack file +// operations. See [CVE-2019-19921] for more details. +// +// [CVE-2019-19921]: https://github.com/advisories/GHSA-fh74-hm69-rqjw +func Reopen(handle *os.File, flags int) (*os.File, error) { + procRoot, err := getProcRoot() + if err != nil { + return nil, err + } + + // We can't operate on /proc/thread-self/fd/$n directly when doing a + // re-open, so we need to open /proc/thread-self/fd and then open a single + // final component. + procFdDir, closer, err := procThreadSelf(procRoot, "fd/") + if err != nil { + return nil, fmt.Errorf("get safe /proc/thread-self/fd handle: %w", err) + } + defer procFdDir.Close() + defer closer() + + // Try to detect if there is a mount on top of the magic-link we are about + // to open. If we are using unsafeHostProcRoot(), this could change after + // we check it (and there's nothing we can do about that) but for + // privateProcRoot() this should be guaranteed to be safe (at least since + // Linux 5.12[1], when anonymous mount namespaces were completely isolated + // from external mounts including mount propagation events). + // + // [1]: Linux commit ee2e3f50629f ("mount: fix mounting of detached mounts + // onto targets that reside on shared mounts"). + fdStr := strconv.Itoa(int(handle.Fd())) + if err := checkSymlinkOvermount(procRoot, procFdDir, fdStr); err != nil { + return nil, fmt.Errorf("check safety of /proc/thread-self/fd/%s magiclink: %w", fdStr, err) + } + + flags |= unix.O_CLOEXEC + // Rather than just wrapping openatFile, open-code it so we can copy + // handle.Name(). + reopenFd, err := unix.Openat(int(procFdDir.Fd()), fdStr, flags, 0) + if err != nil { + return nil, fmt.Errorf("reopen fd %d: %w", handle.Fd(), err) + } + return os.NewFile(uintptr(reopenFd), handle.Name()), nil +} diff --git a/vendor/github.com/cyphar/filepath-securejoin/openat2_linux.go b/vendor/github.com/cyphar/filepath-securejoin/openat2_linux.go new file mode 100644 index 0000000000..f7a13e69ce --- /dev/null +++ b/vendor/github.com/cyphar/filepath-securejoin/openat2_linux.go @@ -0,0 +1,127 @@ +//go:build linux + +// Copyright (C) 2024 SUSE LLC. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package securejoin + +import ( + "errors" + "fmt" + "os" + "path/filepath" + "strings" + + "golang.org/x/sys/unix" +) + +var hasOpenat2 = sync_OnceValue(func() bool { + fd, err := unix.Openat2(unix.AT_FDCWD, ".", &unix.OpenHow{ + Flags: unix.O_PATH | unix.O_CLOEXEC, + Resolve: unix.RESOLVE_NO_SYMLINKS | unix.RESOLVE_IN_ROOT, + }) + if err != nil { + return false + } + _ = unix.Close(fd) + return true +}) + +func scopedLookupShouldRetry(how *unix.OpenHow, err error) bool { + // RESOLVE_IN_ROOT (and RESOLVE_BENEATH) can return -EAGAIN if we resolve + // ".." while a mount or rename occurs anywhere on the system. This could + // happen spuriously, or as the result of an attacker trying to mess with + // us during lookup. + // + // In addition, scoped lookups have a "safety check" at the end of + // complete_walk which will return -EXDEV if the final path is not in the + // root. + return how.Resolve&(unix.RESOLVE_IN_ROOT|unix.RESOLVE_BENEATH) != 0 && + (errors.Is(err, unix.EAGAIN) || errors.Is(err, unix.EXDEV)) +} + +const scopedLookupMaxRetries = 10 + +func openat2File(dir *os.File, path string, how *unix.OpenHow) (*os.File, error) { + fullPath := dir.Name() + "/" + path + // Make sure we always set O_CLOEXEC. + how.Flags |= unix.O_CLOEXEC + var tries int + for tries < scopedLookupMaxRetries { + fd, err := unix.Openat2(int(dir.Fd()), path, how) + if err != nil { + if scopedLookupShouldRetry(how, err) { + // We retry a couple of times to avoid the spurious errors, and + // if we are being attacked then returning -EAGAIN is the best + // we can do. + tries++ + continue + } + return nil, &os.PathError{Op: "openat2", Path: fullPath, Err: err} + } + // If we are using RESOLVE_IN_ROOT, the name we generated may be wrong. + // NOTE: The procRoot code MUST NOT use RESOLVE_IN_ROOT, otherwise + // you'll get infinite recursion here. + if how.Resolve&unix.RESOLVE_IN_ROOT == unix.RESOLVE_IN_ROOT { + if actualPath, err := rawProcSelfFdReadlink(fd); err == nil { + fullPath = actualPath + } + } + return os.NewFile(uintptr(fd), fullPath), nil + } + return nil, &os.PathError{Op: "openat2", Path: fullPath, Err: errPossibleAttack} +} + +func lookupOpenat2(root *os.File, unsafePath string, partial bool) (*os.File, string, error) { + if !partial { + file, err := openat2File(root, unsafePath, &unix.OpenHow{ + Flags: unix.O_PATH | unix.O_CLOEXEC, + Resolve: unix.RESOLVE_IN_ROOT | unix.RESOLVE_NO_MAGICLINKS, + }) + return file, "", err + } + return partialLookupOpenat2(root, unsafePath) +} + +// partialLookupOpenat2 is an alternative implementation of +// partialLookupInRoot, using openat2(RESOLVE_IN_ROOT) to more safely get a +// handle to the deepest existing child of the requested path within the root. +func partialLookupOpenat2(root *os.File, unsafePath string) (*os.File, string, error) { + // TODO: Implement this as a git-bisect-like binary search. + + unsafePath = filepath.ToSlash(unsafePath) // noop + endIdx := len(unsafePath) + var lastError error + for endIdx > 0 { + subpath := unsafePath[:endIdx] + + handle, err := openat2File(root, subpath, &unix.OpenHow{ + Flags: unix.O_PATH | unix.O_CLOEXEC, + Resolve: unix.RESOLVE_IN_ROOT | unix.RESOLVE_NO_MAGICLINKS, + }) + if err == nil { + // Jump over the slash if we have a non-"" remainingPath. + if endIdx < len(unsafePath) { + endIdx += 1 + } + // We found a subpath! + return handle, unsafePath[endIdx:], lastError + } + if errors.Is(err, unix.ENOENT) || errors.Is(err, unix.ENOTDIR) { + // That path doesn't exist, let's try the next directory up. + endIdx = strings.LastIndexByte(subpath, '/') + lastError = err + continue + } + return nil, "", fmt.Errorf("open subpath: %w", err) + } + // If we couldn't open anything, the whole subpath is missing. Return a + // copy of the root fd so that the caller doesn't close this one by + // accident. + rootClone, err := dupFile(root) + if err != nil { + return nil, "", err + } + return rootClone, unsafePath, lastError +} diff --git a/vendor/github.com/cyphar/filepath-securejoin/openat_linux.go b/vendor/github.com/cyphar/filepath-securejoin/openat_linux.go new file mode 100644 index 0000000000..949fb5f2d8 --- /dev/null +++ b/vendor/github.com/cyphar/filepath-securejoin/openat_linux.go @@ -0,0 +1,59 @@ +//go:build linux + +// Copyright (C) 2024 SUSE LLC. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package securejoin + +import ( + "os" + "path/filepath" + + "golang.org/x/sys/unix" +) + +func dupFile(f *os.File) (*os.File, error) { + fd, err := unix.FcntlInt(f.Fd(), unix.F_DUPFD_CLOEXEC, 0) + if err != nil { + return nil, os.NewSyscallError("fcntl(F_DUPFD_CLOEXEC)", err) + } + return os.NewFile(uintptr(fd), f.Name()), nil +} + +func openatFile(dir *os.File, path string, flags int, mode int) (*os.File, error) { + // Make sure we always set O_CLOEXEC. + flags |= unix.O_CLOEXEC + fd, err := unix.Openat(int(dir.Fd()), path, flags, uint32(mode)) + if err != nil { + return nil, &os.PathError{Op: "openat", Path: dir.Name() + "/" + path, Err: err} + } + // All of the paths we use with openatFile(2) are guaranteed to be + // lexically safe, so we can use path.Join here. + fullPath := filepath.Join(dir.Name(), path) + return os.NewFile(uintptr(fd), fullPath), nil +} + +func fstatatFile(dir *os.File, path string, flags int) (unix.Stat_t, error) { + var stat unix.Stat_t + if err := unix.Fstatat(int(dir.Fd()), path, &stat, flags); err != nil { + return stat, &os.PathError{Op: "fstatat", Path: dir.Name() + "/" + path, Err: err} + } + return stat, nil +} + +func readlinkatFile(dir *os.File, path string) (string, error) { + size := 4096 + for { + linkBuf := make([]byte, size) + n, err := unix.Readlinkat(int(dir.Fd()), path, linkBuf) + if err != nil { + return "", &os.PathError{Op: "readlinkat", Path: dir.Name() + "/" + path, Err: err} + } + if n != size { + return string(linkBuf[:n]), nil + } + // Possible truncation, resize the buffer. + size *= 2 + } +} diff --git a/vendor/github.com/cyphar/filepath-securejoin/procfs_linux.go b/vendor/github.com/cyphar/filepath-securejoin/procfs_linux.go new file mode 100644 index 0000000000..809a579cbd --- /dev/null +++ b/vendor/github.com/cyphar/filepath-securejoin/procfs_linux.go @@ -0,0 +1,452 @@ +//go:build linux + +// Copyright (C) 2024 SUSE LLC. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package securejoin + +import ( + "errors" + "fmt" + "os" + "runtime" + "strconv" + + "golang.org/x/sys/unix" +) + +func fstat(f *os.File) (unix.Stat_t, error) { + var stat unix.Stat_t + if err := unix.Fstat(int(f.Fd()), &stat); err != nil { + return stat, &os.PathError{Op: "fstat", Path: f.Name(), Err: err} + } + return stat, nil +} + +func fstatfs(f *os.File) (unix.Statfs_t, error) { + var statfs unix.Statfs_t + if err := unix.Fstatfs(int(f.Fd()), &statfs); err != nil { + return statfs, &os.PathError{Op: "fstatfs", Path: f.Name(), Err: err} + } + return statfs, nil +} + +// The kernel guarantees that the root inode of a procfs mount has an +// f_type of PROC_SUPER_MAGIC and st_ino of PROC_ROOT_INO. +const ( + procSuperMagic = 0x9fa0 // PROC_SUPER_MAGIC + procRootIno = 1 // PROC_ROOT_INO +) + +func verifyProcRoot(procRoot *os.File) error { + if statfs, err := fstatfs(procRoot); err != nil { + return err + } else if statfs.Type != procSuperMagic { + return fmt.Errorf("%w: incorrect procfs root filesystem type 0x%x", errUnsafeProcfs, statfs.Type) + } + if stat, err := fstat(procRoot); err != nil { + return err + } else if stat.Ino != procRootIno { + return fmt.Errorf("%w: incorrect procfs root inode number %d", errUnsafeProcfs, stat.Ino) + } + return nil +} + +var hasNewMountApi = sync_OnceValue(func() bool { + // All of the pieces of the new mount API we use (fsopen, fsconfig, + // fsmount, open_tree) were added together in Linux 5.1[1,2], so we can + // just check for one of the syscalls and the others should also be + // available. + // + // Just try to use open_tree(2) to open a file without OPEN_TREE_CLONE. + // This is equivalent to openat(2), but tells us if open_tree is + // available (and thus all of the other basic new mount API syscalls). + // open_tree(2) is most light-weight syscall to test here. + // + // [1]: merge commit 400913252d09 + // [2]: + fd, err := unix.OpenTree(-int(unix.EBADF), "/", unix.OPEN_TREE_CLOEXEC) + if err != nil { + return false + } + _ = unix.Close(fd) + return true +}) + +func fsopen(fsName string, flags int) (*os.File, error) { + // Make sure we always set O_CLOEXEC. + flags |= unix.FSOPEN_CLOEXEC + fd, err := unix.Fsopen(fsName, flags) + if err != nil { + return nil, os.NewSyscallError("fsopen "+fsName, err) + } + return os.NewFile(uintptr(fd), "fscontext:"+fsName), nil +} + +func fsmount(ctx *os.File, flags, mountAttrs int) (*os.File, error) { + // Make sure we always set O_CLOEXEC. + flags |= unix.FSMOUNT_CLOEXEC + fd, err := unix.Fsmount(int(ctx.Fd()), flags, mountAttrs) + if err != nil { + return nil, os.NewSyscallError("fsmount "+ctx.Name(), err) + } + return os.NewFile(uintptr(fd), "fsmount:"+ctx.Name()), nil +} + +func newPrivateProcMount() (*os.File, error) { + procfsCtx, err := fsopen("proc", unix.FSOPEN_CLOEXEC) + if err != nil { + return nil, err + } + defer procfsCtx.Close() + + // Try to configure hidepid=ptraceable,subset=pid if possible, but ignore errors. + _ = unix.FsconfigSetString(int(procfsCtx.Fd()), "hidepid", "ptraceable") + _ = unix.FsconfigSetString(int(procfsCtx.Fd()), "subset", "pid") + + // Get an actual handle. + if err := unix.FsconfigCreate(int(procfsCtx.Fd())); err != nil { + return nil, os.NewSyscallError("fsconfig create procfs", err) + } + return fsmount(procfsCtx, unix.FSMOUNT_CLOEXEC, unix.MS_RDONLY|unix.MS_NODEV|unix.MS_NOEXEC|unix.MS_NOSUID) +} + +func openTree(dir *os.File, path string, flags uint) (*os.File, error) { + dirFd := -int(unix.EBADF) + dirName := "." + if dir != nil { + dirFd = int(dir.Fd()) + dirName = dir.Name() + } + // Make sure we always set O_CLOEXEC. + flags |= unix.OPEN_TREE_CLOEXEC + fd, err := unix.OpenTree(dirFd, path, flags) + if err != nil { + return nil, &os.PathError{Op: "open_tree", Path: path, Err: err} + } + return os.NewFile(uintptr(fd), dirName+"/"+path), nil +} + +func clonePrivateProcMount() (_ *os.File, Err error) { + // Try to make a clone without using AT_RECURSIVE if we can. If this works, + // we can be sure there are no over-mounts and so if the root is valid then + // we're golden. Otherwise, we have to deal with over-mounts. + procfsHandle, err := openTree(nil, "/proc", unix.OPEN_TREE_CLONE) + if err != nil || hookForcePrivateProcRootOpenTreeAtRecursive(procfsHandle) { + procfsHandle, err = openTree(nil, "/proc", unix.OPEN_TREE_CLONE|unix.AT_RECURSIVE) + } + if err != nil { + return nil, fmt.Errorf("creating a detached procfs clone: %w", err) + } + defer func() { + if Err != nil { + _ = procfsHandle.Close() + } + }() + if err := verifyProcRoot(procfsHandle); err != nil { + return nil, err + } + return procfsHandle, nil +} + +func privateProcRoot() (*os.File, error) { + if !hasNewMountApi() || hookForceGetProcRootUnsafe() { + return nil, fmt.Errorf("new mount api: %w", unix.ENOTSUP) + } + // Try to create a new procfs mount from scratch if we can. This ensures we + // can get a procfs mount even if /proc is fake (for whatever reason). + procRoot, err := newPrivateProcMount() + if err != nil || hookForcePrivateProcRootOpenTree(procRoot) { + // Try to clone /proc then... + procRoot, err = clonePrivateProcMount() + } + return procRoot, err +} + +func unsafeHostProcRoot() (_ *os.File, Err error) { + procRoot, err := os.OpenFile("/proc", unix.O_PATH|unix.O_NOFOLLOW|unix.O_DIRECTORY|unix.O_CLOEXEC, 0) + if err != nil { + return nil, err + } + defer func() { + if Err != nil { + _ = procRoot.Close() + } + }() + if err := verifyProcRoot(procRoot); err != nil { + return nil, err + } + return procRoot, nil +} + +func doGetProcRoot() (*os.File, error) { + procRoot, err := privateProcRoot() + if err != nil { + // Fall back to using a /proc handle if making a private mount failed. + // If we have openat2, at least we can avoid some kinds of over-mount + // attacks, but without openat2 there's not much we can do. + procRoot, err = unsafeHostProcRoot() + } + return procRoot, err +} + +var getProcRoot = sync_OnceValues(func() (*os.File, error) { + return doGetProcRoot() +}) + +var hasProcThreadSelf = sync_OnceValue(func() bool { + return unix.Access("/proc/thread-self/", unix.F_OK) == nil +}) + +var errUnsafeProcfs = errors.New("unsafe procfs detected") + +type procThreadSelfCloser func() + +// procThreadSelf returns a handle to /proc/thread-self/ (or an +// equivalent handle on older kernels where /proc/thread-self doesn't exist). +// Once finished with the handle, you must call the returned closer function +// (runtime.UnlockOSThread). You must not pass the returned *os.File to other +// Go threads or use the handle after calling the closer. +// +// This is similar to ProcThreadSelf from runc, but with extra hardening +// applied and using *os.File. +func procThreadSelf(procRoot *os.File, subpath string) (_ *os.File, _ procThreadSelfCloser, Err error) { + // We need to lock our thread until the caller is done with the handle + // because between getting the handle and using it we could get interrupted + // by the Go runtime and hit the case where the underlying thread is + // swapped out and the original thread is killed, resulting in + // pull-your-hair-out-hard-to-debug issues in the caller. + runtime.LockOSThread() + defer func() { + if Err != nil { + runtime.UnlockOSThread() + } + }() + + // Figure out what prefix we want to use. + threadSelf := "thread-self/" + if !hasProcThreadSelf() || hookForceProcSelfTask() { + /// Pre-3.17 kernels don't have /proc/thread-self, so do it manually. + threadSelf = "self/task/" + strconv.Itoa(unix.Gettid()) + "/" + if _, err := fstatatFile(procRoot, threadSelf, unix.AT_SYMLINK_NOFOLLOW); err != nil || hookForceProcSelf() { + // In this case, we running in a pid namespace that doesn't match + // the /proc mount we have. This can happen inside runc. + // + // Unfortunately, there is no nice way to get the correct TID to + // use here because of the age of the kernel, so we have to just + // use /proc/self and hope that it works. + threadSelf = "self/" + } + } + + // Grab the handle. + var ( + handle *os.File + err error + ) + if hasOpenat2() { + // We prefer being able to use RESOLVE_NO_XDEV if we can, to be + // absolutely sure we are operating on a clean /proc handle that + // doesn't have any cheeky overmounts that could trick us (including + // symlink mounts on top of /proc/thread-self). RESOLVE_BENEATH isn't + // strictly needed, but just use it since we have it. + // + // NOTE: /proc/self is technically a magic-link (the contents of the + // symlink are generated dynamically), but it doesn't use + // nd_jump_link() so RESOLVE_NO_MAGICLINKS allows it. + // + // NOTE: We MUST NOT use RESOLVE_IN_ROOT here, as openat2File uses + // procSelfFdReadlink to clean up the returned f.Name() if we use + // RESOLVE_IN_ROOT (which would lead to an infinite recursion). + handle, err = openat2File(procRoot, threadSelf+subpath, &unix.OpenHow{ + Flags: unix.O_PATH | unix.O_NOFOLLOW | unix.O_CLOEXEC, + Resolve: unix.RESOLVE_BENEATH | unix.RESOLVE_NO_XDEV | unix.RESOLVE_NO_MAGICLINKS, + }) + if err != nil { + // TODO: Once we bump the minimum Go version to 1.20, we can use + // multiple %w verbs for this wrapping. For now we need to use a + // compatibility shim for older Go versions. + //err = fmt.Errorf("%w: %w", errUnsafeProcfs, err) + return nil, nil, wrapBaseError(err, errUnsafeProcfs) + } + } else { + handle, err = openatFile(procRoot, threadSelf+subpath, unix.O_PATH|unix.O_NOFOLLOW|unix.O_CLOEXEC, 0) + if err != nil { + // TODO: Once we bump the minimum Go version to 1.20, we can use + // multiple %w verbs for this wrapping. For now we need to use a + // compatibility shim for older Go versions. + //err = fmt.Errorf("%w: %w", errUnsafeProcfs, err) + return nil, nil, wrapBaseError(err, errUnsafeProcfs) + } + defer func() { + if Err != nil { + _ = handle.Close() + } + }() + // We can't detect bind-mounts of different parts of procfs on top of + // /proc (a-la RESOLVE_NO_XDEV), but we can at least be sure that we + // aren't on the wrong filesystem here. + if statfs, err := fstatfs(handle); err != nil { + return nil, nil, err + } else if statfs.Type != procSuperMagic { + return nil, nil, fmt.Errorf("%w: incorrect /proc/self/fd filesystem type 0x%x", errUnsafeProcfs, statfs.Type) + } + } + return handle, runtime.UnlockOSThread, nil +} + +// STATX_MNT_ID_UNIQUE is provided in golang.org/x/sys@v0.20.0, but in order to +// avoid bumping the requirement for a single constant we can just define it +// ourselves. +const STATX_MNT_ID_UNIQUE = 0x4000 + +var hasStatxMountId = sync_OnceValue(func() bool { + var ( + stx unix.Statx_t + // We don't care which mount ID we get. The kernel will give us the + // unique one if it is supported. + wantStxMask uint32 = STATX_MNT_ID_UNIQUE | unix.STATX_MNT_ID + ) + err := unix.Statx(-int(unix.EBADF), "/", 0, int(wantStxMask), &stx) + return err == nil && stx.Mask&wantStxMask != 0 +}) + +func getMountId(dir *os.File, path string) (uint64, error) { + // If we don't have statx(STATX_MNT_ID*) support, we can't do anything. + if !hasStatxMountId() { + return 0, nil + } + + var ( + stx unix.Statx_t + // We don't care which mount ID we get. The kernel will give us the + // unique one if it is supported. + wantStxMask uint32 = STATX_MNT_ID_UNIQUE | unix.STATX_MNT_ID + ) + + err := unix.Statx(int(dir.Fd()), path, unix.AT_EMPTY_PATH|unix.AT_SYMLINK_NOFOLLOW, int(wantStxMask), &stx) + if stx.Mask&wantStxMask == 0 { + // It's not a kernel limitation, for some reason we couldn't get a + // mount ID. Assume it's some kind of attack. + err = fmt.Errorf("%w: could not get mount id", errUnsafeProcfs) + } + if err != nil { + return 0, &os.PathError{Op: "statx(STATX_MNT_ID_...)", Path: dir.Name() + "/" + path, Err: err} + } + return stx.Mnt_id, nil +} + +func checkSymlinkOvermount(procRoot *os.File, dir *os.File, path string) error { + // Get the mntId of our procfs handle. + expectedMountId, err := getMountId(procRoot, "") + if err != nil { + return err + } + // Get the mntId of the target magic-link. + gotMountId, err := getMountId(dir, path) + if err != nil { + return err + } + // As long as the directory mount is alive, even with wrapping mount IDs, + // we would expect to see a different mount ID here. (Of course, if we're + // using unsafeHostProcRoot() then an attaker could change this after we + // did this check.) + if expectedMountId != gotMountId { + return fmt.Errorf("%w: symlink %s/%s has an overmount obscuring the real link (mount ids do not match %d != %d)", errUnsafeProcfs, dir.Name(), path, expectedMountId, gotMountId) + } + return nil +} + +func doRawProcSelfFdReadlink(procRoot *os.File, fd int) (string, error) { + fdPath := fmt.Sprintf("fd/%d", fd) + procFdLink, closer, err := procThreadSelf(procRoot, fdPath) + if err != nil { + return "", fmt.Errorf("get safe /proc/thread-self/%s handle: %w", fdPath, err) + } + defer procFdLink.Close() + defer closer() + + // Try to detect if there is a mount on top of the magic-link. Since we use the handle directly + // provide to the closure. If the closure uses the handle directly, this + // should be safe in general (a mount on top of the path afterwards would + // not affect the handle itself) and will definitely be safe if we are + // using privateProcRoot() (at least since Linux 5.12[1], when anonymous + // mount namespaces were completely isolated from external mounts including + // mount propagation events). + // + // [1]: Linux commit ee2e3f50629f ("mount: fix mounting of detached mounts + // onto targets that reside on shared mounts"). + if err := checkSymlinkOvermount(procRoot, procFdLink, ""); err != nil { + return "", fmt.Errorf("check safety of /proc/thread-self/fd/%d magiclink: %w", fd, err) + } + + // readlinkat implies AT_EMPTY_PATH since Linux 2.6.39. See Linux commit + // 65cfc6722361 ("readlinkat(), fchownat() and fstatat() with empty + // relative pathnames"). + return readlinkatFile(procFdLink, "") +} + +func rawProcSelfFdReadlink(fd int) (string, error) { + procRoot, err := getProcRoot() + if err != nil { + return "", err + } + return doRawProcSelfFdReadlink(procRoot, fd) +} + +func procSelfFdReadlink(f *os.File) (string, error) { + return rawProcSelfFdReadlink(int(f.Fd())) +} + +var ( + errPossibleBreakout = errors.New("possible breakout detected") + errInvalidDirectory = errors.New("wandered into deleted directory") + errDeletedInode = errors.New("cannot verify path of deleted inode") +) + +func isDeadInode(file *os.File) error { + // If the nlink of a file drops to 0, there is an attacker deleting + // directories during our walk, which could result in weird /proc values. + // It's better to error out in this case. + stat, err := fstat(file) + if err != nil { + return fmt.Errorf("check for dead inode: %w", err) + } + if stat.Nlink == 0 { + err := errDeletedInode + if stat.Mode&unix.S_IFMT == unix.S_IFDIR { + err = errInvalidDirectory + } + return fmt.Errorf("%w %q", err, file.Name()) + } + return nil +} + +func checkProcSelfFdPath(path string, file *os.File) error { + if err := isDeadInode(file); err != nil { + return err + } + actualPath, err := procSelfFdReadlink(file) + if err != nil { + return fmt.Errorf("get path of handle: %w", err) + } + if actualPath != path { + return fmt.Errorf("%w: handle path %q doesn't match expected path %q", errPossibleBreakout, actualPath, path) + } + return nil +} + +// Test hooks used in the procfs tests to verify that the fallback logic works. +// See testing_mocks_linux_test.go and procfs_linux_test.go for more details. +var ( + hookForcePrivateProcRootOpenTree = hookDummyFile + hookForcePrivateProcRootOpenTreeAtRecursive = hookDummyFile + hookForceGetProcRootUnsafe = hookDummy + + hookForceProcSelfTask = hookDummy + hookForceProcSelf = hookDummy +) + +func hookDummy() bool { return false } +func hookDummyFile(_ *os.File) bool { return false } diff --git a/vendor/github.com/cyphar/filepath-securejoin/vfs.go b/vendor/github.com/cyphar/filepath-securejoin/vfs.go index a82a5eae11..36373f8c51 100644 --- a/vendor/github.com/cyphar/filepath-securejoin/vfs.go +++ b/vendor/github.com/cyphar/filepath-securejoin/vfs.go @@ -1,4 +1,4 @@ -// Copyright (C) 2017 SUSE LLC. All rights reserved. +// Copyright (C) 2017-2024 SUSE LLC. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. @@ -10,19 +10,19 @@ import "os" // are several projects (umoci and go-mtree) that are using this sort of // interface. -// VFS is the minimal interface necessary to use SecureJoinVFS. A nil VFS is -// equivalent to using the standard os.* family of functions. This is mainly +// VFS is the minimal interface necessary to use [SecureJoinVFS]. A nil VFS is +// equivalent to using the standard [os].* family of functions. This is mainly // used for the purposes of mock testing, but also can be used to otherwise use -// SecureJoin with VFS-like system. +// [SecureJoinVFS] with VFS-like system. type VFS interface { - // Lstat returns a FileInfo describing the named file. If the file is a - // symbolic link, the returned FileInfo describes the symbolic link. Lstat - // makes no attempt to follow the link. These semantics are identical to - // os.Lstat. + // Lstat returns an [os.FileInfo] describing the named file. If the + // file is a symbolic link, the returned [os.FileInfo] describes the + // symbolic link. Lstat makes no attempt to follow the link. + // The semantics are identical to [os.Lstat]. Lstat(name string) (os.FileInfo, error) - // Readlink returns the destination of the named symbolic link. These - // semantics are identical to os.Readlink. + // Readlink returns the destination of the named symbolic link. + // The semantics are identical to [os.Readlink]. Readlink(name string) (string, error) } @@ -30,12 +30,6 @@ type VFS interface { // module. type osVFS struct{} -// Lstat returns a FileInfo describing the named file. If the file is a -// symbolic link, the returned FileInfo describes the symbolic link. Lstat -// makes no attempt to follow the link. These semantics are identical to -// os.Lstat. func (o osVFS) Lstat(name string) (os.FileInfo, error) { return os.Lstat(name) } -// Readlink returns the destination of the named symbolic link. These -// semantics are identical to os.Readlink. func (o osVFS) Readlink(name string) (string, error) { return os.Readlink(name) } diff --git a/vendor/github.com/go-git/go-billy/v5/Makefile b/vendor/github.com/go-git/go-billy/v5/Makefile index 74dad8b491..3c95ddeaac 100644 --- a/vendor/github.com/go-git/go-billy/v5/Makefile +++ b/vendor/github.com/go-git/go-billy/v5/Makefile @@ -1,6 +1,7 @@ # Go parameters GOCMD = go GOTEST = $(GOCMD) test +WASIRUN_WRAPPER := $(CURDIR)/scripts/wasirun-wrapper .PHONY: test test: @@ -9,3 +10,9 @@ test: test-coverage: echo "" > $(COVERAGE_REPORT); \ $(GOTEST) -coverprofile=$(COVERAGE_REPORT) -coverpkg=./... -covermode=$(COVERAGE_MODE) ./... + +.PHONY: wasitest +wasitest: export GOARCH=wasm +wasitest: export GOOS=wasip1 +wasitest: + $(GOTEST) -exec $(WASIRUN_WRAPPER) ./... diff --git a/vendor/github.com/go-git/go-billy/v5/fs.go b/vendor/github.com/go-git/go-billy/v5/fs.go index a9efccdeb2..d86f9d8236 100644 --- a/vendor/github.com/go-git/go-billy/v5/fs.go +++ b/vendor/github.com/go-git/go-billy/v5/fs.go @@ -164,6 +164,8 @@ type File interface { // Name returns the name of the file as presented to Open. Name() string io.Writer + // TODO: Add io.WriterAt for v6 + // io.WriterAt io.Reader io.ReaderAt io.Seeker diff --git a/vendor/github.com/go-git/go-billy/v5/memfs/memory.go b/vendor/github.com/go-git/go-billy/v5/memfs/memory.go index dab73968b6..6cbd7d08ca 100644 --- a/vendor/github.com/go-git/go-billy/v5/memfs/memory.go +++ b/vendor/github.com/go-git/go-billy/v5/memfs/memory.go @@ -9,6 +9,7 @@ import ( "path/filepath" "sort" "strings" + "syscall" "time" "github.com/go-git/go-billy/v5" @@ -18,16 +19,19 @@ import ( const separator = filepath.Separator -// Memory a very convenient filesystem based on memory files +var errNotLink = errors.New("not a link") + +// Memory a very convenient filesystem based on memory files. type Memory struct { s *storage tempCount int } -//New returns a new Memory filesystem. +// New returns a new Memory filesystem. func New() billy.Filesystem { fs := &Memory{s: newStorage()} + fs.s.New("/", 0755|os.ModeDir, 0) return chroot.New(fs, string(separator)) } @@ -57,7 +61,9 @@ func (fs *Memory) OpenFile(filename string, flag int, perm os.FileMode) (billy.F } if target, isLink := fs.resolveLink(filename, f); isLink { - return fs.OpenFile(target, flag, perm) + if target != filename { + return fs.OpenFile(target, flag, perm) + } } } @@ -68,8 +74,6 @@ func (fs *Memory) OpenFile(filename string, flag int, perm os.FileMode) (billy.F return f.Duplicate(filename, perm, flag), nil } -var errNotLink = errors.New("not a link") - func (fs *Memory) resolveLink(fullpath string, f *file) (target string, isLink bool) { if !isSymlink(f.mode) { return fullpath, false @@ -131,8 +135,12 @@ func (a ByName) Swap(i, j int) { a[i], a[j] = a[j], a[i] } func (fs *Memory) ReadDir(path string) ([]os.FileInfo, error) { if f, has := fs.s.Get(path); has { if target, isLink := fs.resolveLink(path, f); isLink { - return fs.ReadDir(target) + if target != path { + return fs.ReadDir(target) + } } + } else { + return nil, &os.PathError{Op: "open", Path: path, Err: syscall.ENOENT} } var entries []os.FileInfo @@ -169,17 +177,19 @@ func (fs *Memory) Remove(filename string) error { return fs.s.Remove(filename) } +// Falls back to Go's filepath.Join, which works differently depending on the +// OS where the code is being executed. func (fs *Memory) Join(elem ...string) string { return filepath.Join(elem...) } func (fs *Memory) Symlink(target, link string) error { - _, err := fs.Stat(link) + _, err := fs.Lstat(link) if err == nil { return os.ErrExist } - if !os.IsNotExist(err) { + if !errors.Is(err, os.ErrNotExist) { return err } @@ -230,7 +240,7 @@ func (f *file) Read(b []byte) (int, error) { n, err := f.ReadAt(b, f.position) f.position += int64(n) - if err == io.EOF && n != 0 { + if errors.Is(err, io.EOF) && n != 0 { err = nil } @@ -269,6 +279,10 @@ func (f *file) Seek(offset int64, whence int) (int64, error) { } func (f *file) Write(p []byte) (int, error) { + return f.WriteAt(p, f.position) +} + +func (f *file) WriteAt(p []byte, off int64) (int, error) { if f.isClosed { return 0, os.ErrClosed } @@ -277,8 +291,8 @@ func (f *file) Write(p []byte) (int, error) { return 0, errors.New("write not supported") } - n, err := f.content.WriteAt(p, f.position) - f.position += int64(n) + n, err := f.content.WriteAt(p, off) + f.position = off + int64(n) return n, err } diff --git a/vendor/github.com/go-git/go-billy/v5/memfs/storage.go b/vendor/github.com/go-git/go-billy/v5/memfs/storage.go index e3c4e38bff..16b48ce002 100644 --- a/vendor/github.com/go-git/go-billy/v5/memfs/storage.go +++ b/vendor/github.com/go-git/go-billy/v5/memfs/storage.go @@ -6,6 +6,7 @@ import ( "io" "os" "path/filepath" + "strings" "sync" ) @@ -112,7 +113,7 @@ func (s *storage) Rename(from, to string) error { move := [][2]string{{from, to}} for pathFrom := range s.files { - if pathFrom == from || !filepath.HasPrefix(pathFrom, from) { + if pathFrom == from || !strings.HasPrefix(pathFrom, from) { continue } diff --git a/vendor/github.com/go-git/go-billy/v5/osfs/os_bound.go b/vendor/github.com/go-git/go-billy/v5/osfs/os_bound.go index b4b6dbc07a..c0a6109901 100644 --- a/vendor/github.com/go-git/go-billy/v5/osfs/os_bound.go +++ b/vendor/github.com/go-git/go-billy/v5/osfs/os_bound.go @@ -246,6 +246,10 @@ func (fs *BoundOS) insideBaseDir(filename string) (bool, error) { // a dir that is within the fs.baseDir, by first evaluating any symlinks // that either filename or fs.baseDir may contain. func (fs *BoundOS) insideBaseDirEval(filename string) (bool, error) { + // "/" contains all others. + if fs.baseDir == "/" { + return true, nil + } dir, err := filepath.EvalSymlinks(filepath.Dir(filename)) if dir == "" || os.IsNotExist(err) { dir = filepath.Dir(filename) @@ -255,7 +259,7 @@ func (fs *BoundOS) insideBaseDirEval(filename string) (bool, error) { wd = fs.baseDir } if filename != wd && dir != wd && !strings.HasPrefix(dir, wd+string(filepath.Separator)) { - return false, fmt.Errorf("path outside base dir") + return false, fmt.Errorf("%q: path outside base dir %q: %w", filename, fs.baseDir, os.ErrNotExist) } return true, nil } diff --git a/vendor/github.com/go-git/go-billy/v5/osfs/os_posix.go b/vendor/github.com/go-git/go-billy/v5/osfs/os_posix.go index d834a1145a..6fb8273f17 100644 --- a/vendor/github.com/go-git/go-billy/v5/osfs/os_posix.go +++ b/vendor/github.com/go-git/go-billy/v5/osfs/os_posix.go @@ -1,5 +1,5 @@ -//go:build !plan9 && !windows && !js -// +build !plan9,!windows,!js +//go:build !plan9 && !windows && !wasm +// +build !plan9,!windows,!wasm package osfs diff --git a/vendor/github.com/go-git/go-billy/v5/osfs/os_wasip1.go b/vendor/github.com/go-git/go-billy/v5/osfs/os_wasip1.go new file mode 100644 index 0000000000..79e6e33192 --- /dev/null +++ b/vendor/github.com/go-git/go-billy/v5/osfs/os_wasip1.go @@ -0,0 +1,34 @@ +//go:build wasip1 +// +build wasip1 + +package osfs + +import ( + "os" + "syscall" +) + +func (f *file) Lock() error { + f.m.Lock() + defer f.m.Unlock() + return nil +} + +func (f *file) Unlock() error { + f.m.Lock() + defer f.m.Unlock() + return nil +} + +func rename(from, to string) error { + return os.Rename(from, to) +} + +// umask sets umask to a new value, and returns a func which allows the +// caller to reset it back to what it was originally. +func umask(new int) func() { + old := syscall.Umask(new) + return func() { + syscall.Umask(old) + } +} diff --git a/vendor/github.com/go-git/go-billy/v5/util/util.go b/vendor/github.com/go-git/go-billy/v5/util/util.go index 5c77128c3c..2cdd832c73 100644 --- a/vendor/github.com/go-git/go-billy/v5/util/util.go +++ b/vendor/github.com/go-git/go-billy/v5/util/util.go @@ -1,6 +1,7 @@ package util import ( + "errors" "io" "os" "path/filepath" @@ -33,14 +34,14 @@ func removeAll(fs billy.Basic, path string) error { // Simple case: if Remove works, we're done. err := fs.Remove(path) - if err == nil || os.IsNotExist(err) { + if err == nil || errors.Is(err, os.ErrNotExist) { return nil } // Otherwise, is this a directory we need to recurse into? dir, serr := fs.Stat(path) if serr != nil { - if os.IsNotExist(serr) { + if errors.Is(serr, os.ErrNotExist) { return nil } @@ -60,7 +61,7 @@ func removeAll(fs billy.Basic, path string) error { // Directory. fis, err := dirfs.ReadDir(path) if err != nil { - if os.IsNotExist(err) { + if errors.Is(err, os.ErrNotExist) { // Race. It was deleted between the Lstat and Open. // Return nil per RemoveAll's docs. return nil @@ -81,7 +82,7 @@ func removeAll(fs billy.Basic, path string) error { // Remove directory. err1 := fs.Remove(path) - if err1 == nil || os.IsNotExist(err1) { + if err1 == nil || errors.Is(err1, os.ErrNotExist) { return nil } @@ -96,22 +97,26 @@ func removeAll(fs billy.Basic, path string) error { // WriteFile writes data to a file named by filename in the given filesystem. // If the file does not exist, WriteFile creates it with permissions perm; // otherwise WriteFile truncates it before writing. -func WriteFile(fs billy.Basic, filename string, data []byte, perm os.FileMode) error { +func WriteFile(fs billy.Basic, filename string, data []byte, perm os.FileMode) (err error) { f, err := fs.OpenFile(filename, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, perm) if err != nil { return err } + defer func() { + if f != nil { + err1 := f.Close() + if err == nil { + err = err1 + } + } + }() n, err := f.Write(data) if err == nil && n < len(data) { err = io.ErrShortWrite } - if err1 := f.Close(); err == nil { - err = err1 - } - - return err + return nil } // Random number state. @@ -154,7 +159,7 @@ func TempFile(fs billy.Basic, dir, prefix string) (f billy.File, err error) { for i := 0; i < 10000; i++ { name := filepath.Join(dir, prefix+nextSuffix()) f, err = fs.OpenFile(name, os.O_RDWR|os.O_CREATE|os.O_EXCL, 0600) - if os.IsExist(err) { + if errors.Is(err, os.ErrExist) { if nconflict++; nconflict > 10 { randmu.Lock() rand = reseed() @@ -185,7 +190,7 @@ func TempDir(fs billy.Dir, dir, prefix string) (name string, err error) { for i := 0; i < 10000; i++ { try := filepath.Join(dir, prefix+nextSuffix()) err = fs.MkdirAll(try, 0700) - if os.IsExist(err) { + if errors.Is(err, os.ErrExist) { if nconflict++; nconflict > 10 { randmu.Lock() rand = reseed() @@ -193,8 +198,8 @@ func TempDir(fs billy.Dir, dir, prefix string) (name string, err error) { } continue } - if os.IsNotExist(err) { - if _, err := os.Stat(dir); os.IsNotExist(err) { + if errors.Is(err, os.ErrNotExist) { + if _, err := os.Stat(dir); errors.Is(err, os.ErrNotExist) { return "", err } } @@ -272,7 +277,7 @@ func ReadFile(fs billy.Basic, name string) ([]byte, error) { data = data[:len(data)+n] if err != nil { - if err == io.EOF { + if errors.Is(err, io.EOF) { err = nil } diff --git a/vendor/github.com/go-git/go-git/v5/COMPATIBILITY.md b/vendor/github.com/go-git/go-git/v5/COMPATIBILITY.md index ff0c22c896..ba1fb90ac5 100644 --- a/vendor/github.com/go-git/go-git/v5/COMPATIBILITY.md +++ b/vendor/github.com/go-git/go-git/v5/COMPATIBILITY.md @@ -11,7 +11,7 @@ compatibility status with go-git. | `init` | `--bare` | ✅ | | | | `init` | `--template`
`--separate-git-dir`
`--shared` | ❌ | | | | `clone` | | ✅ | | - [PlainClone](_examples/clone/main.go) | -| `clone` | Authentication:
- none
- access token
- username + password
- ssh | ✅ | | - [clone ssh](_examples/clone/auth/ssh/main.go)
- [clone access token](_examples/clone/auth/basic/access_token/main.go)
- [clone user + password](_examples/clone/auth/basic/username_password/main.go) | +| `clone` | Authentication:
- none
- access token
- username + password
- ssh | ✅ | | - [clone ssh (private_key)](_examples/clone/auth/ssh/private_key/main.go)
- [clone ssh (ssh_agent)](_examples/clone/auth/ssh/ssh_agent/main.go)
- [clone access token](_examples/clone/auth/basic/access_token/main.go)
- [clone user + password](_examples/clone/auth/basic/username_password/main.go) | | `clone` | `--progress`
`--single-branch`
`--depth`
`--origin`
`--recurse-submodules`
`--shared` | ✅ | | - [recurse submodules](_examples/clone/main.go)
- [progress](_examples/progress/main.go) | ## Basic snapshotting @@ -34,6 +34,7 @@ compatibility status with go-git. | `merge` | | ⚠️ (partial) | Fast-forward only | | | `mergetool` | | ❌ | | | | `stash` | | ❌ | | | +| `sparse-checkout` | | ✅ | | - [sparse-checkout](_examples/sparse-checkout/main.go) | | `tag` | | ✅ | | - [tag](_examples/tag/main.go)
- [tag create and push](_examples/tag-create-push/main.go) | ## Sharing and updating projects diff --git a/vendor/github.com/go-git/go-git/v5/CONTRIBUTING.md b/vendor/github.com/go-git/go-git/v5/CONTRIBUTING.md index fce25328a7..a5b01823bf 100644 --- a/vendor/github.com/go-git/go-git/v5/CONTRIBUTING.md +++ b/vendor/github.com/go-git/go-git/v5/CONTRIBUTING.md @@ -31,6 +31,13 @@ In order for a PR to be accepted it needs to pass a list of requirements: - If the PR is a new feature, it has to come with a suite of unit tests, that tests the new functionality. - In any case, all the PRs have to pass the personal evaluation of at least one of the maintainers of go-git. +### Branches + +The `master` branch is currently used for maintaining the `v5` major release only. The accepted changes would +be dependency bumps, bug fixes and small changes that aren't needed for `v6`. New development should target the +`v6-exp` branch, and if agreed with at least one go-git maintainer, it can be back ported to `v5` by creating +a new PR that targets `master`. + ### Format of the commit message Every commit message should describe what was changed, under which context and, if applicable, the GitHub issue it relates to: diff --git a/vendor/github.com/go-git/go-git/v5/blame.go b/vendor/github.com/go-git/go-git/v5/blame.go index 2a877dcdf9..e3cb39aec3 100644 --- a/vendor/github.com/go-git/go-git/v5/blame.go +++ b/vendor/github.com/go-git/go-git/v5/blame.go @@ -97,13 +97,10 @@ func Blame(c *object.Commit, path string) (*BlameResult, error) { if err != nil { return nil, err } - if finished == true { + if finished { break } } - if err != nil { - return nil, err - } b.lineToCommit = make([]*object.Commit, finalLength) for i := range needsMap { @@ -309,8 +306,8 @@ func (b *blame) addBlames(curItems []*queueItem) (bool, error) { for h := range hunks { hLines := countLines(hunks[h].Text) for hl := 0; hl < hLines; hl++ { - switch { - case hunks[h].Type == diffmatchpatch.DiffEqual: + switch hunks[h].Type { + case diffmatchpatch.DiffEqual: prevl++ curl++ if curl == curItem.NeedsMap[need].Cur { @@ -322,7 +319,7 @@ func (b *blame) addBlames(curItems []*queueItem) (bool, error) { break out } } - case hunks[h].Type == diffmatchpatch.DiffInsert: + case diffmatchpatch.DiffInsert: curl++ if curl == curItem.NeedsMap[need].Cur { // the line we want is added, it may have been added here (or by another parent), skip it for now @@ -331,7 +328,7 @@ func (b *blame) addBlames(curItems []*queueItem) (bool, error) { break out } } - case hunks[h].Type == diffmatchpatch.DiffDelete: + case diffmatchpatch.DiffDelete: prevl += hLines continue out default: diff --git a/vendor/github.com/go-git/go-git/v5/config/config.go b/vendor/github.com/go-git/go-git/v5/config/config.go index 6d41c15dcd..33f6e37d26 100644 --- a/vendor/github.com/go-git/go-git/v5/config/config.go +++ b/vendor/github.com/go-git/go-git/v5/config/config.go @@ -252,6 +252,7 @@ const ( extensionsSection = "extensions" fetchKey = "fetch" urlKey = "url" + pushurlKey = "pushurl" bareKey = "bare" worktreeKey = "worktree" commentCharKey = "commentChar" @@ -633,6 +634,7 @@ func (c *RemoteConfig) unmarshal(s *format.Subsection) error { c.Name = c.raw.Name c.URLs = append([]string(nil), c.raw.Options.GetAll(urlKey)...) + c.URLs = append(c.URLs, c.raw.Options.GetAll(pushurlKey)...) c.Fetch = fetch c.Mirror = c.raw.Options.Get(mirrorKey) == "true" diff --git a/vendor/github.com/go-git/go-git/v5/internal/revision/scanner.go b/vendor/github.com/go-git/go-git/v5/internal/revision/scanner.go index c46c21b795..2444f33ec2 100644 --- a/vendor/github.com/go-git/go-git/v5/internal/revision/scanner.go +++ b/vendor/github.com/go-git/go-git/v5/internal/revision/scanner.go @@ -43,6 +43,11 @@ func tokenizeExpression(ch rune, tokenType token, check runeCategoryValidator, r return tokenType, string(data), nil } +// maxRevisionLength holds the maximum length that will be parsed for a +// revision. Git itself doesn't enforce a max length, but rather leans on +// the OS to enforce it via its ARG_MAX. +const maxRevisionLength = 128 * 1024 // 128kb + var zeroRune = rune(0) // scanner represents a lexical scanner. @@ -52,7 +57,7 @@ type scanner struct { // newScanner returns a new instance of scanner. func newScanner(r io.Reader) *scanner { - return &scanner{r: bufio.NewReader(r)} + return &scanner{r: bufio.NewReader(io.LimitReader(r, maxRevisionLength))} } // Scan extracts tokens and their strings counterpart diff --git a/vendor/github.com/go-git/go-git/v5/options.go b/vendor/github.com/go-git/go-git/v5/options.go index d7776dad5e..3cd0f952c3 100644 --- a/vendor/github.com/go-git/go-git/v5/options.go +++ b/vendor/github.com/go-git/go-git/v5/options.go @@ -416,6 +416,9 @@ type ResetOptions struct { // the index (resetting it to the tree of Commit) and the working tree // depending on Mode. If empty MixedReset is used. Mode ResetMode + // Files, if not empty will constrain the reseting the index to only files + // specified in this list. + Files []string } // Validate validates the fields and sets the default values. @@ -790,3 +793,26 @@ type PlainInitOptions struct { // Validate validates the fields and sets the default values. func (o *PlainInitOptions) Validate() error { return nil } + +var ( + ErrNoRestorePaths = errors.New("you must specify path(s) to restore") +) + +// RestoreOptions describes how a restore should be performed. +type RestoreOptions struct { + // Marks to restore the content in the index + Staged bool + // Marks to restore the content of the working tree + Worktree bool + // List of file paths that will be restored + Files []string +} + +// Validate validates the fields and sets the default values. +func (o *RestoreOptions) Validate() error { + if len(o.Files) == 0 { + return ErrNoRestorePaths + } + + return nil +} diff --git a/vendor/github.com/go-git/go-git/v5/plumbing/format/gitignore/dir.go b/vendor/github.com/go-git/go-git/v5/plumbing/format/gitignore/dir.go index aca5d0dbd2..92df5a3de7 100644 --- a/vendor/github.com/go-git/go-git/v5/plumbing/format/gitignore/dir.go +++ b/vendor/github.com/go-git/go-git/v5/plumbing/format/gitignore/dir.go @@ -64,6 +64,10 @@ func ReadPatterns(fs billy.Filesystem, path []string) (ps []Pattern, err error) for _, fi := range fis { if fi.IsDir() && fi.Name() != gitDir { + if NewMatcher(ps).Match(append(path, fi.Name()), true) { + continue + } + var subps []Pattern subps, err = ReadPatterns(fs, append(path, fi.Name())) if err != nil { diff --git a/vendor/github.com/go-git/go-git/v5/plumbing/format/index/decoder.go b/vendor/github.com/go-git/go-git/v5/plumbing/format/index/decoder.go index 6778cf74ec..fc25d37022 100644 --- a/vendor/github.com/go-git/go-git/v5/plumbing/format/index/decoder.go +++ b/vendor/github.com/go-git/go-git/v5/plumbing/format/index/decoder.go @@ -24,8 +24,8 @@ var ( // ErrInvalidChecksum is returned by Decode if the SHA1 hash mismatch with // the read content ErrInvalidChecksum = errors.New("invalid checksum") - - errUnknownExtension = errors.New("unknown extension") + // ErrUnknownExtension is returned when an index extension is encountered that is considered mandatory + ErrUnknownExtension = errors.New("unknown extension") ) const ( @@ -39,6 +39,7 @@ const ( // A Decoder reads and decodes index files from an input stream. type Decoder struct { + buf *bufio.Reader r io.Reader hash hash.Hash lastEntry *Entry @@ -49,8 +50,10 @@ type Decoder struct { // NewDecoder returns a new decoder that reads from r. func NewDecoder(r io.Reader) *Decoder { h := hash.New(hash.CryptoType) + buf := bufio.NewReader(r) return &Decoder{ - r: io.TeeReader(r, h), + buf: buf, + r: io.TeeReader(buf, h), hash: h, extReader: bufio.NewReader(nil), } @@ -210,71 +213,75 @@ func (d *Decoder) readExtensions(idx *Index) error { // count that they are not supported by jgit or libgit var expected []byte + var peeked []byte var err error - var header [4]byte + // we should always be able to peek for 4 bytes (header) + 4 bytes (extlen) + final hash + // if this fails, we know that we're at the end of the index + peekLen := 4 + 4 + d.hash.Size() + for { expected = d.hash.Sum(nil) - - var n int - if n, err = io.ReadFull(d.r, header[:]); err != nil { - if n == 0 { - err = io.EOF - } - + peeked, err = d.buf.Peek(peekLen) + if len(peeked) < peekLen { + // there can't be an extension at this point, so let's bail out break } + if err != nil { + return err + } - err = d.readExtension(idx, header[:]) + err = d.readExtension(idx) if err != nil { - break + return err } } - if err != errUnknownExtension { + return d.readChecksum(expected) +} + +func (d *Decoder) readExtension(idx *Index) error { + var header [4]byte + + if _, err := io.ReadFull(d.r, header[:]); err != nil { return err } - return d.readChecksum(expected, header) -} + r, err := d.getExtensionReader() + if err != nil { + return err + } -func (d *Decoder) readExtension(idx *Index, header []byte) error { switch { - case bytes.Equal(header, treeExtSignature): - r, err := d.getExtensionReader() - if err != nil { - return err - } - + case bytes.Equal(header[:], treeExtSignature): idx.Cache = &Tree{} d := &treeExtensionDecoder{r} if err := d.Decode(idx.Cache); err != nil { return err } - case bytes.Equal(header, resolveUndoExtSignature): - r, err := d.getExtensionReader() - if err != nil { - return err - } - + case bytes.Equal(header[:], resolveUndoExtSignature): idx.ResolveUndo = &ResolveUndo{} d := &resolveUndoDecoder{r} if err := d.Decode(idx.ResolveUndo); err != nil { return err } - case bytes.Equal(header, endOfIndexEntryExtSignature): - r, err := d.getExtensionReader() - if err != nil { - return err - } - + case bytes.Equal(header[:], endOfIndexEntryExtSignature): idx.EndOfIndexEntry = &EndOfIndexEntry{} d := &endOfIndexEntryDecoder{r} if err := d.Decode(idx.EndOfIndexEntry); err != nil { return err } default: - return errUnknownExtension + // See https://git-scm.com/docs/index-format, which says: + // If the first byte is 'A'..'Z' the extension is optional and can be ignored. + if header[0] < 'A' || header[0] > 'Z' { + return ErrUnknownExtension + } + + d := &unknownExtensionDecoder{r} + if err := d.Decode(); err != nil { + return err + } } return nil @@ -290,11 +297,10 @@ func (d *Decoder) getExtensionReader() (*bufio.Reader, error) { return d.extReader, nil } -func (d *Decoder) readChecksum(expected []byte, alreadyRead [4]byte) error { +func (d *Decoder) readChecksum(expected []byte) error { var h plumbing.Hash - copy(h[:4], alreadyRead[:]) - if _, err := io.ReadFull(d.r, h[4:]); err != nil { + if _, err := io.ReadFull(d.r, h[:]); err != nil { return err } @@ -476,3 +482,22 @@ func (d *endOfIndexEntryDecoder) Decode(e *EndOfIndexEntry) error { _, err = io.ReadFull(d.r, e.Hash[:]) return err } + +type unknownExtensionDecoder struct { + r *bufio.Reader +} + +func (d *unknownExtensionDecoder) Decode() error { + var buf [1024]byte + + for { + _, err := d.r.Read(buf[:]) + if err == io.EOF { + break + } + if err != nil { + return err + } + } + return nil +} diff --git a/vendor/github.com/go-git/go-git/v5/plumbing/format/index/encoder.go b/vendor/github.com/go-git/go-git/v5/plumbing/format/index/encoder.go index fa2d814454..c232e03231 100644 --- a/vendor/github.com/go-git/go-git/v5/plumbing/format/index/encoder.go +++ b/vendor/github.com/go-git/go-git/v5/plumbing/format/index/encoder.go @@ -3,8 +3,11 @@ package index import ( "bytes" "errors" + "fmt" "io" + "path" "sort" + "strings" "time" "github.com/go-git/go-git/v5/plumbing/hash" @@ -13,7 +16,7 @@ import ( var ( // EncodeVersionSupported is the range of supported index versions - EncodeVersionSupported uint32 = 3 + EncodeVersionSupported uint32 = 4 // ErrInvalidTimestamp is returned by Encode if a Index with a Entry with // negative timestamp values @@ -22,20 +25,25 @@ var ( // An Encoder writes an Index to an output stream. type Encoder struct { - w io.Writer - hash hash.Hash + w io.Writer + hash hash.Hash + lastEntry *Entry } // NewEncoder returns a new encoder that writes to w. func NewEncoder(w io.Writer) *Encoder { h := hash.New(hash.CryptoType) mw := io.MultiWriter(w, h) - return &Encoder{mw, h} + return &Encoder{mw, h, nil} } // Encode writes the Index to the stream of the encoder. func (e *Encoder) Encode(idx *Index) error { - // TODO: support v4 + return e.encode(idx, true) +} + +func (e *Encoder) encode(idx *Index, footer bool) error { + // TODO: support extensions if idx.Version > EncodeVersionSupported { return ErrUnsupportedVersion @@ -49,7 +57,10 @@ func (e *Encoder) Encode(idx *Index) error { return err } - return e.encodeFooter() + if footer { + return e.encodeFooter() + } + return nil } func (e *Encoder) encodeHeader(idx *Index) error { @@ -64,7 +75,7 @@ func (e *Encoder) encodeEntries(idx *Index) error { sort.Sort(byName(idx.Entries)) for _, entry := range idx.Entries { - if err := e.encodeEntry(entry); err != nil { + if err := e.encodeEntry(idx, entry); err != nil { return err } entryLength := entryHeaderLength @@ -73,7 +84,7 @@ func (e *Encoder) encodeEntries(idx *Index) error { } wrote := entryLength + len(entry.Name) - if err := e.padEntry(wrote); err != nil { + if err := e.padEntry(idx, wrote); err != nil { return err } } @@ -81,7 +92,7 @@ func (e *Encoder) encodeEntries(idx *Index) error { return nil } -func (e *Encoder) encodeEntry(entry *Entry) error { +func (e *Encoder) encodeEntry(idx *Index, entry *Entry) error { sec, nsec, err := e.timeToUint32(&entry.CreatedAt) if err != nil { return err @@ -132,9 +143,68 @@ func (e *Encoder) encodeEntry(entry *Entry) error { return err } + switch idx.Version { + case 2, 3: + err = e.encodeEntryName(entry) + case 4: + err = e.encodeEntryNameV4(entry) + default: + err = ErrUnsupportedVersion + } + + return err +} + +func (e *Encoder) encodeEntryName(entry *Entry) error { return binary.Write(e.w, []byte(entry.Name)) } +func (e *Encoder) encodeEntryNameV4(entry *Entry) error { + name := entry.Name + l := 0 + if e.lastEntry != nil { + dir := path.Dir(e.lastEntry.Name) + "/" + if strings.HasPrefix(entry.Name, dir) { + l = len(e.lastEntry.Name) - len(dir) + name = strings.TrimPrefix(entry.Name, dir) + } else { + l = len(e.lastEntry.Name) + } + } + + e.lastEntry = entry + + err := binary.WriteVariableWidthInt(e.w, int64(l)) + if err != nil { + return err + } + + return binary.Write(e.w, []byte(name+string('\x00'))) +} + +func (e *Encoder) encodeRawExtension(signature string, data []byte) error { + if len(signature) != 4 { + return fmt.Errorf("invalid signature length") + } + + _, err := e.w.Write([]byte(signature)) + if err != nil { + return err + } + + err = binary.WriteUint32(e.w, uint32(len(data))) + if err != nil { + return err + } + + _, err = e.w.Write(data) + if err != nil { + return err + } + + return nil +} + func (e *Encoder) timeToUint32(t *time.Time) (uint32, uint32, error) { if t.IsZero() { return 0, 0, nil @@ -147,7 +217,11 @@ func (e *Encoder) timeToUint32(t *time.Time) (uint32, uint32, error) { return uint32(t.Unix()), uint32(t.Nanosecond()), nil } -func (e *Encoder) padEntry(wrote int) error { +func (e *Encoder) padEntry(idx *Index, wrote int) error { + if idx.Version == 4 { + return nil + } + padLen := 8 - wrote%8 _, err := e.w.Write(bytes.Repeat([]byte{'\x00'}, padLen)) diff --git a/vendor/github.com/go-git/go-git/v5/plumbing/format/packfile/delta_index.go b/vendor/github.com/go-git/go-git/v5/plumbing/format/packfile/delta_index.go index 07a61120e5..a60ec0b24d 100644 --- a/vendor/github.com/go-git/go-git/v5/plumbing/format/packfile/delta_index.go +++ b/vendor/github.com/go-git/go-git/v5/plumbing/format/packfile/delta_index.go @@ -32,19 +32,17 @@ func (idx *deltaIndex) findMatch(src, tgt []byte, tgtOffset int) (srcOffset, l i return 0, -1 } - if len(tgt) >= tgtOffset+s && len(src) >= blksz { - h := hashBlock(tgt, tgtOffset) - tIdx := h & idx.mask - eIdx := idx.table[tIdx] - if eIdx != 0 { - srcOffset = idx.entries[eIdx] - } else { - return - } - - l = matchLength(src, tgt, tgtOffset, srcOffset) + h := hashBlock(tgt, tgtOffset) + tIdx := h & idx.mask + eIdx := idx.table[tIdx] + if eIdx == 0 { + return } + srcOffset = idx.entries[eIdx] + + l = matchLength(src, tgt, tgtOffset, srcOffset) + return } diff --git a/vendor/github.com/go-git/go-git/v5/plumbing/format/packfile/patch_delta.go b/vendor/github.com/go-git/go-git/v5/plumbing/format/packfile/patch_delta.go index 960769c7c8..a9c6b9b56f 100644 --- a/vendor/github.com/go-git/go-git/v5/plumbing/format/packfile/patch_delta.go +++ b/vendor/github.com/go-git/go-git/v5/plumbing/format/packfile/patch_delta.go @@ -26,6 +26,13 @@ var ( const ( payload = 0x7f // 0111 1111 continuation = 0x80 // 1000 0000 + + // maxPatchPreemptionSize defines what is the max size of bytes to be + // premptively made available for a patch operation. + maxPatchPreemptionSize uint = 65536 + + // minDeltaSize defines the smallest size for a delta. + minDeltaSize = 4 ) type offset struct { @@ -86,9 +93,13 @@ func ApplyDelta(target, base plumbing.EncodedObject, delta []byte) (err error) { } // PatchDelta returns the result of applying the modification deltas in delta to src. -// An error will be returned if delta is corrupted (ErrDeltaLen) or an action command +// An error will be returned if delta is corrupted (ErrInvalidDelta) or an action command // is not copy from source or copy from delta (ErrDeltaCmd). func PatchDelta(src, delta []byte) ([]byte, error) { + if len(src) == 0 || len(delta) < minDeltaSize { + return nil, ErrInvalidDelta + } + b := &bytes.Buffer{} if err := patchDelta(b, src, delta); err != nil { return nil, err @@ -239,7 +250,9 @@ func patchDelta(dst *bytes.Buffer, src, delta []byte) error { remainingTargetSz := targetSz var cmd byte - dst.Grow(int(targetSz)) + + growSz := min(targetSz, maxPatchPreemptionSize) + dst.Grow(int(growSz)) for { if len(delta) == 0 { return ErrInvalidDelta @@ -403,6 +416,10 @@ func patchDeltaWriter(dst io.Writer, base io.ReaderAt, delta io.Reader, // This must be called twice on the delta data buffer, first to get the // expected source buffer size, and again to get the target buffer size. func decodeLEB128(input []byte) (uint, []byte) { + if len(input) == 0 { + return 0, input + } + var num, sz uint var b byte for { diff --git a/vendor/github.com/go-git/go-git/v5/plumbing/format/pktline/scanner.go b/vendor/github.com/go-git/go-git/v5/plumbing/format/pktline/scanner.go index fbb137de06..706d984ee0 100644 --- a/vendor/github.com/go-git/go-git/v5/plumbing/format/pktline/scanner.go +++ b/vendor/github.com/go-git/go-git/v5/plumbing/format/pktline/scanner.go @@ -140,6 +140,8 @@ func asciiHexToByte(b byte) (byte, error) { return b - '0', nil case b >= 'a' && b <= 'f': return b - 'a' + 10, nil + case b >= 'A' && b <= 'F': + return b - 'A' + 10, nil default: return 0, ErrInvalidPktLen } diff --git a/vendor/github.com/go-git/go-git/v5/plumbing/object/signature.go b/vendor/github.com/go-git/go-git/v5/plumbing/object/signature.go index 91cf371f0c..f9c3d306bd 100644 --- a/vendor/github.com/go-git/go-git/v5/plumbing/object/signature.go +++ b/vendor/github.com/go-git/go-git/v5/plumbing/object/signature.go @@ -19,6 +19,7 @@ var ( // a PKCS#7 (S/MIME) signature. x509SignatureFormat = signatureFormat{ []byte("-----BEGIN CERTIFICATE-----"), + []byte("-----BEGIN SIGNED MESSAGE-----"), } // sshSignatureFormat is the format of an SSH signature. diff --git a/vendor/github.com/go-git/go-git/v5/plumbing/object/tree.go b/vendor/github.com/go-git/go-git/v5/plumbing/object/tree.go index 0fd0e51398..2e1b789156 100644 --- a/vendor/github.com/go-git/go-git/v5/plumbing/object/tree.go +++ b/vendor/github.com/go-git/go-git/v5/plumbing/object/tree.go @@ -295,6 +295,7 @@ func (s TreeEntrySorter) Swap(i, j int) { } // Encode transforms a Tree into a plumbing.EncodedObject. +// The tree entries must be sorted by name. func (t *Tree) Encode(o plumbing.EncodedObject) (err error) { o.SetType(plumbing.TreeObject) w, err := o.Writer() diff --git a/vendor/github.com/go-git/go-git/v5/plumbing/protocol/packp/filter.go b/vendor/github.com/go-git/go-git/v5/plumbing/protocol/packp/filter.go new file mode 100644 index 0000000000..145fc711ca --- /dev/null +++ b/vendor/github.com/go-git/go-git/v5/plumbing/protocol/packp/filter.go @@ -0,0 +1,76 @@ +package packp + +import ( + "errors" + "fmt" + "github.com/go-git/go-git/v5/plumbing" + "net/url" + "strings" +) + +var ErrUnsupportedObjectFilterType = errors.New("unsupported object filter type") + +// Filter values enable the partial clone capability which causes +// the server to omit objects that match the filter. +// +// See [Git's documentation] for more details. +// +// [Git's documentation]: https://github.com/git/git/blob/e02ecfcc534e2021aae29077a958dd11c3897e4c/Documentation/rev-list-options.txt#L948 +type Filter string + +type BlobLimitPrefix string + +const ( + BlobLimitPrefixNone BlobLimitPrefix = "" + BlobLimitPrefixKibi BlobLimitPrefix = "k" + BlobLimitPrefixMebi BlobLimitPrefix = "m" + BlobLimitPrefixGibi BlobLimitPrefix = "g" +) + +// FilterBlobNone omits all blobs. +func FilterBlobNone() Filter { + return "blob:none" +} + +// FilterBlobLimit omits blobs of size at least n bytes (when prefix is +// BlobLimitPrefixNone), n kibibytes (when prefix is BlobLimitPrefixKibi), +// n mebibytes (when prefix is BlobLimitPrefixMebi) or n gibibytes (when +// prefix is BlobLimitPrefixGibi). n can be zero, in which case all blobs +// will be omitted. +func FilterBlobLimit(n uint64, prefix BlobLimitPrefix) Filter { + return Filter(fmt.Sprintf("blob:limit=%d%s", n, prefix)) +} + +// FilterTreeDepth omits all blobs and trees whose depth from the root tree +// is larger or equal to depth. +func FilterTreeDepth(depth uint64) Filter { + return Filter(fmt.Sprintf("tree:%d", depth)) +} + +// FilterObjectType omits all objects which are not of the requested type t. +// Supported types are TagObject, CommitObject, TreeObject and BlobObject. +func FilterObjectType(t plumbing.ObjectType) (Filter, error) { + switch t { + case plumbing.TagObject: + fallthrough + case plumbing.CommitObject: + fallthrough + case plumbing.TreeObject: + fallthrough + case plumbing.BlobObject: + return Filter(fmt.Sprintf("object:type=%s", t.String())), nil + default: + return "", fmt.Errorf("%w: %s", ErrUnsupportedObjectFilterType, t.String()) + } +} + +// FilterCombine combines multiple Filter values together. +func FilterCombine(filters ...Filter) Filter { + var escapedFilters []string + + for _, filter := range filters { + escapedFilters = append(escapedFilters, url.QueryEscape(string(filter))) + } + + return Filter(fmt.Sprintf("combine:%s", strings.Join(escapedFilters, "+"))) +} diff --git a/vendor/github.com/go-git/go-git/v5/plumbing/protocol/packp/sideband/demux.go b/vendor/github.com/go-git/go-git/v5/plumbing/protocol/packp/sideband/demux.go index 0116f962ef..01d95a3aba 100644 --- a/vendor/github.com/go-git/go-git/v5/plumbing/protocol/packp/sideband/demux.go +++ b/vendor/github.com/go-git/go-git/v5/plumbing/protocol/packp/sideband/demux.go @@ -114,7 +114,7 @@ func (d *Demuxer) nextPackData() ([]byte, error) { size := len(content) if size == 0 { - return nil, nil + return nil, io.EOF } else if size > d.max { return nil, ErrMaxPackedExceeded } diff --git a/vendor/github.com/go-git/go-git/v5/plumbing/protocol/packp/srvresp.go b/vendor/github.com/go-git/go-git/v5/plumbing/protocol/packp/srvresp.go index a9ddb538b2..d760ad6609 100644 --- a/vendor/github.com/go-git/go-git/v5/plumbing/protocol/packp/srvresp.go +++ b/vendor/github.com/go-git/go-git/v5/plumbing/protocol/packp/srvresp.go @@ -120,6 +120,9 @@ func (r *ServerResponse) decodeACKLine(line []byte) error { } sp := bytes.Index(line, []byte(" ")) + if sp+41 > len(line) { + return fmt.Errorf("malformed ACK %q", line) + } h := plumbing.NewHash(string(line[sp+1 : sp+41])) r.ACKs = append(r.ACKs, h) return nil diff --git a/vendor/github.com/go-git/go-git/v5/plumbing/protocol/packp/ulreq.go b/vendor/github.com/go-git/go-git/v5/plumbing/protocol/packp/ulreq.go index 344f8c7e3a..ef4e08a10a 100644 --- a/vendor/github.com/go-git/go-git/v5/plumbing/protocol/packp/ulreq.go +++ b/vendor/github.com/go-git/go-git/v5/plumbing/protocol/packp/ulreq.go @@ -17,6 +17,7 @@ type UploadRequest struct { Wants []plumbing.Hash Shallows []plumbing.Hash Depth Depth + Filter Filter } // Depth values stores the desired depth of the requested packfile: see diff --git a/vendor/github.com/go-git/go-git/v5/plumbing/protocol/packp/ulreq_encode.go b/vendor/github.com/go-git/go-git/v5/plumbing/protocol/packp/ulreq_encode.go index c451e23164..8b19c0f674 100644 --- a/vendor/github.com/go-git/go-git/v5/plumbing/protocol/packp/ulreq_encode.go +++ b/vendor/github.com/go-git/go-git/v5/plumbing/protocol/packp/ulreq_encode.go @@ -132,6 +132,17 @@ func (e *ulReqEncoder) encodeDepth() stateFn { return nil } + return e.encodeFilter +} + +func (e *ulReqEncoder) encodeFilter() stateFn { + if filter := e.data.Filter; filter != "" { + if err := e.pe.Encodef("filter %s\n", filter); err != nil { + e.err = fmt.Errorf("encoding filter %s: %s", filter, err) + return nil + } + } + return e.encodeFlush } diff --git a/vendor/github.com/go-git/go-git/v5/plumbing/reference.go b/vendor/github.com/go-git/go-git/v5/plumbing/reference.go index ddba930292..4daa341649 100644 --- a/vendor/github.com/go-git/go-git/v5/plumbing/reference.go +++ b/vendor/github.com/go-git/go-git/v5/plumbing/reference.go @@ -188,7 +188,7 @@ func (r ReferenceName) Validate() error { isBranch := r.IsBranch() isTag := r.IsTag() - for _, part := range parts { + for i, part := range parts { // rule 6 if len(part) == 0 { return ErrInvalidReferenceName @@ -205,7 +205,7 @@ func (r ReferenceName) Validate() error { return ErrInvalidReferenceName } - if (isBranch || isTag) && strings.HasPrefix(part, "-") { // branches & tags can't start with - + if (isBranch || isTag) && strings.HasPrefix(part, "-") && (i == 2) { // branches & tags can't start with - return ErrInvalidReferenceName } } diff --git a/vendor/github.com/go-git/go-git/v5/plumbing/transport/common.go b/vendor/github.com/go-git/go-git/v5/plumbing/transport/common.go index b05437fbfc..fae1aa98ca 100644 --- a/vendor/github.com/go-git/go-git/v5/plumbing/transport/common.go +++ b/vendor/github.com/go-git/go-git/v5/plumbing/transport/common.go @@ -19,6 +19,7 @@ import ( "fmt" "io" "net/url" + "path/filepath" "strconv" "strings" @@ -295,7 +296,11 @@ func parseFile(endpoint string) (*Endpoint, bool) { return nil, false } - path := endpoint + path, err := filepath.Abs(endpoint) + if err != nil { + return nil, false + } + return &Endpoint{ Protocol: "file", Path: path, diff --git a/vendor/github.com/go-git/go-git/v5/plumbing/transport/file/client.go b/vendor/github.com/go-git/go-git/v5/plumbing/transport/file/client.go index 38714e2ad1..d921d0a5a4 100644 --- a/vendor/github.com/go-git/go-git/v5/plumbing/transport/file/client.go +++ b/vendor/github.com/go-git/go-git/v5/plumbing/transport/file/client.go @@ -7,6 +7,7 @@ import ( "io" "os" "path/filepath" + "runtime" "strings" "github.com/go-git/go-git/v5/plumbing/transport" @@ -95,7 +96,23 @@ func (r *runner) Command(cmd string, ep *transport.Endpoint, auth transport.Auth } } - return &command{cmd: execabs.Command(cmd, ep.Path)}, nil + return &command{cmd: execabs.Command(cmd, adjustPathForWindows(ep.Path))}, nil +} + +func isDriveLetter(c byte) bool { + return (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z') +} + +// On Windows, the path that results from a file: URL has a leading slash. This +// has to be removed if there's a drive letter +func adjustPathForWindows(p string) string { + if runtime.GOOS != "windows" { + return p + } + if len(p) >= 3 && p[0] == '/' && isDriveLetter(p[1]) && p[2] == ':' { + return p[1:] + } + return p } type command struct { diff --git a/vendor/github.com/go-git/go-git/v5/plumbing/transport/http/common.go b/vendor/github.com/go-git/go-git/v5/plumbing/transport/http/common.go index 1c4ceee68d..120008db1c 100644 --- a/vendor/github.com/go-git/go-git/v5/plumbing/transport/http/common.go +++ b/vendor/github.com/go-git/go-git/v5/plumbing/transport/http/common.go @@ -430,11 +430,11 @@ func NewErr(r *http.Response) error { switch r.StatusCode { case http.StatusUnauthorized: - return transport.ErrAuthenticationRequired + return fmt.Errorf("%w: %s", transport.ErrAuthenticationRequired, reason) case http.StatusForbidden: - return transport.ErrAuthorizationFailed + return fmt.Errorf("%w: %s", transport.ErrAuthorizationFailed, reason) case http.StatusNotFound: - return transport.ErrRepositoryNotFound + return fmt.Errorf("%w: %s", transport.ErrRepositoryNotFound, reason) } return plumbing.NewUnexpectedError(&Err{r, reason}) diff --git a/vendor/github.com/go-git/go-git/v5/plumbing/transport/server/loader.go b/vendor/github.com/go-git/go-git/v5/plumbing/transport/server/loader.go index e7e2b075e5..f03a91c6d1 100644 --- a/vendor/github.com/go-git/go-git/v5/plumbing/transport/server/loader.go +++ b/vendor/github.com/go-git/go-git/v5/plumbing/transport/server/loader.go @@ -40,8 +40,16 @@ func (l *fsLoader) Load(ep *transport.Endpoint) (storer.Storer, error) { return nil, err } - if _, err := fs.Stat("config"); err != nil { - return nil, transport.ErrRepositoryNotFound + var bare bool + if _, err := fs.Stat("config"); err == nil { + bare = true + } + + if !bare { + // do not use git.GitDirName due to import cycle + if _, err := fs.Stat(".git"); err != nil { + return nil, transport.ErrRepositoryNotFound + } } return filesystem.NewStorage(fs, cache.NewObjectLRUDefault()), nil diff --git a/vendor/github.com/go-git/go-git/v5/remote.go b/vendor/github.com/go-git/go-git/v5/remote.go index 7cc0db9b7d..e2c734e751 100644 --- a/vendor/github.com/go-git/go-git/v5/remote.go +++ b/vendor/github.com/go-git/go-git/v5/remote.go @@ -9,6 +9,7 @@ import ( "time" "github.com/go-git/go-billy/v5/osfs" + "github.com/go-git/go-git/v5/config" "github.com/go-git/go-git/v5/internal/url" "github.com/go-git/go-git/v5/plumbing" @@ -82,7 +83,7 @@ func (r *Remote) String() string { var fetch, push string if len(r.c.URLs) > 0 { fetch = r.c.URLs[0] - push = r.c.URLs[0] + push = r.c.URLs[len(r.c.URLs)-1] } return fmt.Sprintf("%s\t%s (fetch)\n%[1]s\t%[3]s (push)", r.c.Name, fetch, push) @@ -109,8 +110,8 @@ func (r *Remote) PushContext(ctx context.Context, o *PushOptions) (err error) { return fmt.Errorf("remote names don't match: %s != %s", o.RemoteName, r.c.Name) } - if o.RemoteURL == "" { - o.RemoteURL = r.c.URLs[0] + if o.RemoteURL == "" && len(r.c.URLs) > 0 { + o.RemoteURL = r.c.URLs[len(r.c.URLs)-1] } s, err := newSendPackSession(o.RemoteURL, o.Auth, o.InsecureSkipTLS, o.CABundle, o.ProxyOptions) @@ -491,7 +492,18 @@ func (r *Remote) fetch(ctx context.Context, o *FetchOptions) (sto storer.Referen } if !updated && !updatedPrune { - return remoteRefs, NoErrAlreadyUpToDate + // No references updated, but may have fetched new objects, check if we now have any of our wants + for _, hash := range req.Wants { + exists, _ := objectExists(r.s, hash) + if exists { + updated = true + break + } + } + + if !updated { + return remoteRefs, NoErrAlreadyUpToDate + } } return remoteRefs, nil @@ -878,17 +890,12 @@ func getHavesFromRef( return nil } - // No need to load the commit if we know the remote already - // has this hash. - if remoteRefs[h] { - haves[h] = true - return nil - } - commit, err := object.GetCommit(s, h) if err != nil { - // Ignore the error if this isn't a commit. - haves[ref.Hash()] = true + if !errors.Is(err, plumbing.ErrObjectNotFound) { + // Ignore the error if this isn't a commit. + haves[ref.Hash()] = true + } return nil } diff --git a/vendor/github.com/go-git/go-git/v5/repository.go b/vendor/github.com/go-git/go-git/v5/repository.go index a57c7141f8..200098e7a0 100644 --- a/vendor/github.com/go-git/go-git/v5/repository.go +++ b/vendor/github.com/go-git/go-git/v5/repository.go @@ -956,7 +956,7 @@ func (r *Repository) clone(ctx context.Context, o *CloneOptions) error { } if o.RecurseSubmodules != NoRecurseSubmodules { - if err := w.updateSubmodules(&SubmoduleUpdateOptions{ + if err := w.updateSubmodules(ctx, &SubmoduleUpdateOptions{ RecurseSubmodules: o.RecurseSubmodules, Depth: func() int { if o.ShallowSubmodules { @@ -1037,7 +1037,7 @@ func (r *Repository) setIsBare(isBare bool) error { return r.Storer.SetConfig(cfg) } -func (r *Repository) updateRemoteConfigIfNeeded(o *CloneOptions, c *config.RemoteConfig, head *plumbing.Reference) error { +func (r *Repository) updateRemoteConfigIfNeeded(o *CloneOptions, c *config.RemoteConfig, _ *plumbing.Reference) error { if !o.SingleBranch { return nil } diff --git a/vendor/github.com/go-git/go-git/v5/status.go b/vendor/github.com/go-git/go-git/v5/status.go index 7f18e02278..d14f7e6572 100644 --- a/vendor/github.com/go-git/go-git/v5/status.go +++ b/vendor/github.com/go-git/go-git/v5/status.go @@ -4,6 +4,9 @@ import ( "bytes" "fmt" "path/filepath" + + mindex "github.com/go-git/go-git/v5/utils/merkletrie/index" + "github.com/go-git/go-git/v5/utils/merkletrie/noder" ) // Status represents the current status of a Worktree. @@ -77,3 +80,69 @@ const ( Copied StatusCode = 'C' UpdatedButUnmerged StatusCode = 'U' ) + +// StatusStrategy defines the different types of strategies when processing +// the worktree status. +type StatusStrategy int + +const ( + // TODO: (V6) Review the default status strategy. + // TODO: (V6) Review the type used to represent Status, to enable lazy + // processing of statuses going direct to the backing filesystem. + defaultStatusStrategy = Empty + + // Empty starts its status map from empty. Missing entries for a given + // path means that the file is untracked. This causes a known issue (#119) + // whereby unmodified files can be incorrectly reported as untracked. + // + // This can be used when returning the changed state within a modified Worktree. + // For example, to check whether the current worktree is clean. + Empty StatusStrategy = 0 + // Preload goes through all existing nodes from the index and add them to the + // status map as unmodified. This is currently the most reliable strategy + // although it comes at a performance cost in large repositories. + // + // This method is recommended when fetching the status of unmodified files. + // For example, to confirm the status of a specific file that is either + // untracked or unmodified. + Preload StatusStrategy = 1 +) + +func (s StatusStrategy) new(w *Worktree) (Status, error) { + switch s { + case Preload: + return preloadStatus(w) + case Empty: + return make(Status), nil + } + return nil, fmt.Errorf("%w: %+v", ErrUnsupportedStatusStrategy, s) +} + +func preloadStatus(w *Worktree) (Status, error) { + idx, err := w.r.Storer.Index() + if err != nil { + return nil, err + } + + idxRoot := mindex.NewRootNode(idx) + nodes := []noder.Noder{idxRoot} + + status := make(Status) + for len(nodes) > 0 { + var node noder.Noder + node, nodes = nodes[0], nodes[1:] + if node.IsDir() { + children, err := node.Children() + if err != nil { + return nil, err + } + nodes = append(nodes, children...) + continue + } + fs := status.File(node.Name()) + fs.Worktree = Unmodified + fs.Staging = Unmodified + } + + return status, nil +} diff --git a/vendor/github.com/go-git/go-git/v5/storage/filesystem/dotgit/dotgit.go b/vendor/github.com/go-git/go-git/v5/storage/filesystem/dotgit/dotgit.go index 31c4694816..72c9ccfc14 100644 --- a/vendor/github.com/go-git/go-git/v5/storage/filesystem/dotgit/dotgit.go +++ b/vendor/github.com/go-git/go-git/v5/storage/filesystem/dotgit/dotgit.go @@ -72,6 +72,9 @@ var ( // ErrIsDir is returned when a reference file is attempting to be read, // but the path specified is a directory. ErrIsDir = errors.New("reference path is a directory") + // ErrEmptyRefFile is returned when a reference file is attempted to be read, + // but the file is empty + ErrEmptyRefFile = errors.New("ref file is empty") ) // Options holds configuration for the storage. @@ -249,7 +252,7 @@ func (d *DotGit) objectPacks() ([]plumbing.Hash, error) { continue } - h := plumbing.NewHash(n[5 : len(n)-5]) //pack-(hash).pack + h := plumbing.NewHash(n[5 : len(n)-5]) // pack-(hash).pack if h.IsZero() { // Ignore files with badly-formatted names. continue @@ -661,18 +664,33 @@ func (d *DotGit) readReferenceFrom(rd io.Reader, name string) (ref *plumbing.Ref return nil, err } + if len(b) == 0 { + return nil, ErrEmptyRefFile + } + line := strings.TrimSpace(string(b)) return plumbing.NewReferenceFromStrings(name, line), nil } +// checkReferenceAndTruncate reads the reference from the given file, or the `pack-refs` file if +// the file was empty. Then it checks that the old reference matches the stored reference and +// truncates the file. func (d *DotGit) checkReferenceAndTruncate(f billy.File, old *plumbing.Reference) error { if old == nil { return nil } + ref, err := d.readReferenceFrom(f, old.Name().String()) + if errors.Is(err, ErrEmptyRefFile) { + // This may happen if the reference is being read from a newly created file. + // In that case, try getting the reference from the packed refs file. + ref, err = d.packedRef(old.Name()) + } + if err != nil { return err } + if ref.Hash() != old.Hash() { return storage.ErrReferenceHasChanged } @@ -701,16 +719,16 @@ func (d *DotGit) SetRef(r, old *plumbing.Reference) error { // Symbolic references are resolved and included in the output. func (d *DotGit) Refs() ([]*plumbing.Reference, error) { var refs []*plumbing.Reference - var seen = make(map[plumbing.ReferenceName]bool) - if err := d.addRefsFromRefDir(&refs, seen); err != nil { + seen := make(map[plumbing.ReferenceName]bool) + if err := d.addRefFromHEAD(&refs); err != nil { return nil, err } - if err := d.addRefsFromPackedRefs(&refs, seen); err != nil { + if err := d.addRefsFromRefDir(&refs, seen); err != nil { return nil, err } - if err := d.addRefFromHEAD(&refs); err != nil { + if err := d.addRefsFromPackedRefs(&refs, seen); err != nil { return nil, err } @@ -815,7 +833,8 @@ func (d *DotGit) addRefsFromPackedRefsFile(refs *[]*plumbing.Reference, f billy. } func (d *DotGit) openAndLockPackedRefs(doCreate bool) ( - pr billy.File, err error) { + pr billy.File, err error, +) { var f billy.File defer func() { if err != nil && f != nil { @@ -1020,7 +1039,7 @@ func (d *DotGit) readReferenceFile(path, name string) (ref *plumbing.Reference, func (d *DotGit) CountLooseRefs() (int, error) { var refs []*plumbing.Reference - var seen = make(map[plumbing.ReferenceName]bool) + seen := make(map[plumbing.ReferenceName]bool) if err := d.addRefsFromRefDir(&refs, seen); err != nil { return 0, err } diff --git a/vendor/github.com/go-git/go-git/v5/storage/filesystem/index.go b/vendor/github.com/go-git/go-git/v5/storage/filesystem/index.go index a19176f83d..a86ef3e2e5 100644 --- a/vendor/github.com/go-git/go-git/v5/storage/filesystem/index.go +++ b/vendor/github.com/go-git/go-git/v5/storage/filesystem/index.go @@ -48,7 +48,7 @@ func (s *IndexStorage) Index() (i *index.Index, err error) { defer ioutil.CheckClose(f, &err) - d := index.NewDecoder(bufio.NewReader(f)) + d := index.NewDecoder(f) err = d.Decode(idx) return idx, err } diff --git a/vendor/github.com/go-git/go-git/v5/storage/filesystem/object.go b/vendor/github.com/go-git/go-git/v5/storage/filesystem/object.go index e812fe934d..91b4aceae1 100644 --- a/vendor/github.com/go-git/go-git/v5/storage/filesystem/object.go +++ b/vendor/github.com/go-git/go-git/v5/storage/filesystem/object.go @@ -431,13 +431,13 @@ func (s *ObjectStorage) getFromUnpacked(h plumbing.Hash) (obj plumbing.EncodedOb defer ioutil.CheckClose(w, &err) - s.objectCache.Put(obj) - bufp := copyBufferPool.Get().(*[]byte) buf := *bufp _, err = io.CopyBuffer(w, r, buf) copyBufferPool.Put(bufp) + s.objectCache.Put(obj) + return obj, err } diff --git a/vendor/github.com/go-git/go-git/v5/submodule.go b/vendor/github.com/go-git/go-git/v5/submodule.go index 84f020dc72..afabb6acad 100644 --- a/vendor/github.com/go-git/go-git/v5/submodule.go +++ b/vendor/github.com/go-git/go-git/v5/submodule.go @@ -214,10 +214,10 @@ func (s *Submodule) update(ctx context.Context, o *SubmoduleUpdateOptions, force return err } - return s.doRecursiveUpdate(r, o) + return s.doRecursiveUpdate(ctx, r, o) } -func (s *Submodule) doRecursiveUpdate(r *Repository, o *SubmoduleUpdateOptions) error { +func (s *Submodule) doRecursiveUpdate(ctx context.Context, r *Repository, o *SubmoduleUpdateOptions) error { if o.RecurseSubmodules == NoRecurseSubmodules { return nil } @@ -236,7 +236,7 @@ func (s *Submodule) doRecursiveUpdate(r *Repository, o *SubmoduleUpdateOptions) *new = *o new.RecurseSubmodules-- - return l.Update(new) + return l.UpdateContext(ctx, new) } func (s *Submodule) fetchAndCheckout( diff --git a/vendor/github.com/go-git/go-git/v5/utils/merkletrie/change.go b/vendor/github.com/go-git/go-git/v5/utils/merkletrie/change.go index cc6dc89071..450feb4bac 100644 --- a/vendor/github.com/go-git/go-git/v5/utils/merkletrie/change.go +++ b/vendor/github.com/go-git/go-git/v5/utils/merkletrie/change.go @@ -1,12 +1,17 @@ package merkletrie import ( + "errors" "fmt" "io" "github.com/go-git/go-git/v5/utils/merkletrie/noder" ) +var ( + ErrEmptyFileName = errors.New("empty filename in tree entry") +) + // Action values represent the kind of things a Change can represent: // insertion, deletions or modifications of files. type Action int @@ -121,6 +126,10 @@ func (l *Changes) AddRecursiveDelete(root noder.Path) error { type noderToChangeFn func(noder.Path) Change // NewInsert or NewDelete func (l *Changes) addRecursive(root noder.Path, ctor noderToChangeFn) error { + if root.String() == "" { + return ErrEmptyFileName + } + if !root.IsDir() { l.Add(ctor(root)) return nil diff --git a/vendor/github.com/go-git/go-git/v5/utils/merkletrie/difftree.go b/vendor/github.com/go-git/go-git/v5/utils/merkletrie/difftree.go index 8090942ddb..4ef2d9907a 100644 --- a/vendor/github.com/go-git/go-git/v5/utils/merkletrie/difftree.go +++ b/vendor/github.com/go-git/go-git/v5/utils/merkletrie/difftree.go @@ -11,7 +11,7 @@ package merkletrie // corresponding changes and move the iterators further over both // trees. // -// The table bellow show all the possible comparison results, along +// The table below shows all the possible comparison results, along // with what changes should we produce and how to advance the // iterators. // diff --git a/vendor/github.com/go-git/go-git/v5/utils/sync/bufio.go b/vendor/github.com/go-git/go-git/v5/utils/sync/bufio.go index 5009ea8047..42f60f7ea1 100644 --- a/vendor/github.com/go-git/go-git/v5/utils/sync/bufio.go +++ b/vendor/github.com/go-git/go-git/v5/utils/sync/bufio.go @@ -13,7 +13,7 @@ var bufioReader = sync.Pool{ } // GetBufioReader returns a *bufio.Reader that is managed by a sync.Pool. -// Returns a bufio.Reader that is resetted with reader and ready for use. +// Returns a bufio.Reader that is reset with reader and ready for use. // // After use, the *bufio.Reader should be put back into the sync.Pool // by calling PutBufioReader. diff --git a/vendor/github.com/go-git/go-git/v5/utils/sync/bytes.go b/vendor/github.com/go-git/go-git/v5/utils/sync/bytes.go index dd06fc0bc6..c67b978375 100644 --- a/vendor/github.com/go-git/go-git/v5/utils/sync/bytes.go +++ b/vendor/github.com/go-git/go-git/v5/utils/sync/bytes.go @@ -35,7 +35,7 @@ func PutByteSlice(buf *[]byte) { } // GetBytesBuffer returns a *bytes.Buffer that is managed by a sync.Pool. -// Returns a buffer that is resetted and ready for use. +// Returns a buffer that is reset and ready for use. // // After use, the *bytes.Buffer should be put back into the sync.Pool // by calling PutBytesBuffer. diff --git a/vendor/github.com/go-git/go-git/v5/utils/sync/zlib.go b/vendor/github.com/go-git/go-git/v5/utils/sync/zlib.go index c613885957..edf674d852 100644 --- a/vendor/github.com/go-git/go-git/v5/utils/sync/zlib.go +++ b/vendor/github.com/go-git/go-git/v5/utils/sync/zlib.go @@ -35,7 +35,7 @@ type ZLibReader struct { } // GetZlibReader returns a ZLibReader that is managed by a sync.Pool. -// Returns a ZLibReader that is resetted using a dictionary that is +// Returns a ZLibReader that is reset using a dictionary that is // also managed by a sync.Pool. // // After use, the ZLibReader should be put back into the sync.Pool @@ -58,7 +58,7 @@ func PutZlibReader(z ZLibReader) { } // GetZlibWriter returns a *zlib.Writer that is managed by a sync.Pool. -// Returns a writer that is resetted with w and ready for use. +// Returns a writer that is reset with w and ready for use. // // After use, the *zlib.Writer should be put back into the sync.Pool // by calling PutZlibWriter. diff --git a/vendor/github.com/go-git/go-git/v5/worktree.go b/vendor/github.com/go-git/go-git/v5/worktree.go index ab11d42db8..8dfa50b1b3 100644 --- a/vendor/github.com/go-git/go-git/v5/worktree.go +++ b/vendor/github.com/go-git/go-git/v5/worktree.go @@ -25,11 +25,12 @@ import ( ) var ( - ErrWorktreeNotClean = errors.New("worktree is not clean") - ErrSubmoduleNotFound = errors.New("submodule not found") - ErrUnstagedChanges = errors.New("worktree contains unstaged changes") - ErrGitModulesSymlink = errors.New(gitmodulesFile + " is a symlink") - ErrNonFastForwardUpdate = errors.New("non-fast-forward update") + ErrWorktreeNotClean = errors.New("worktree is not clean") + ErrSubmoduleNotFound = errors.New("submodule not found") + ErrUnstagedChanges = errors.New("worktree contains unstaged changes") + ErrGitModulesSymlink = errors.New(gitmodulesFile + " is a symlink") + ErrNonFastForwardUpdate = errors.New("non-fast-forward update") + ErrRestoreWorktreeOnlyNotSupported = errors.New("worktree only is not supported") ) // Worktree represents a git worktree. @@ -139,7 +140,7 @@ func (w *Worktree) PullContext(ctx context.Context, o *PullOptions) error { } if o.RecurseSubmodules != NoRecurseSubmodules { - return w.updateSubmodules(&SubmoduleUpdateOptions{ + return w.updateSubmodules(ctx, &SubmoduleUpdateOptions{ RecurseSubmodules: o.RecurseSubmodules, Auth: o.Auth, }) @@ -148,13 +149,13 @@ func (w *Worktree) PullContext(ctx context.Context, o *PullOptions) error { return nil } -func (w *Worktree) updateSubmodules(o *SubmoduleUpdateOptions) error { +func (w *Worktree) updateSubmodules(ctx context.Context, o *SubmoduleUpdateOptions) error { s, err := w.Submodules() if err != nil { return err } o.Init = true - return s.Update(o) + return s.UpdateContext(ctx, o) } // Checkout switch branches or restore working tree files. @@ -307,13 +308,13 @@ func (w *Worktree) ResetSparsely(opts *ResetOptions, dirs []string) error { } if opts.Mode == MixedReset || opts.Mode == MergeReset || opts.Mode == HardReset { - if err := w.resetIndex(t, dirs); err != nil { + if err := w.resetIndex(t, dirs, opts.Files); err != nil { return err } } if opts.Mode == MergeReset || opts.Mode == HardReset { - if err := w.resetWorktree(t); err != nil { + if err := w.resetWorktree(t, opts.Files); err != nil { return err } } @@ -321,20 +322,52 @@ func (w *Worktree) ResetSparsely(opts *ResetOptions, dirs []string) error { return nil } +// Restore restores specified files in the working tree or stage with contents from +// a restore source. If a path is tracked but does not exist in the restore, +// source, it will be removed to match the source. +// +// If Staged and Worktree are true, then the restore source will be the index. +// If only Staged is true, then the restore source will be HEAD. +// If only Worktree is true or neither Staged nor Worktree are true, will +// result in ErrRestoreWorktreeOnlyNotSupported because restoring the working +// tree while leaving the stage untouched is not currently supported. +// +// Restore with no files specified will return ErrNoRestorePaths. +func (w *Worktree) Restore(o *RestoreOptions) error { + if err := o.Validate(); err != nil { + return err + } + + if o.Staged { + opts := &ResetOptions{ + Files: o.Files, + } + + if o.Worktree { + // If we are doing both Worktree and Staging then it is a hard reset + opts.Mode = HardReset + } else { + // If we are doing just staging then it is a mixed reset + opts.Mode = MixedReset + } + + return w.Reset(opts) + } + + return ErrRestoreWorktreeOnlyNotSupported +} + // Reset the worktree to a specified state. func (w *Worktree) Reset(opts *ResetOptions) error { return w.ResetSparsely(opts, nil) } -func (w *Worktree) resetIndex(t *object.Tree, dirs []string) error { +func (w *Worktree) resetIndex(t *object.Tree, dirs []string, files []string) error { idx, err := w.r.Storer.Index() - if len(dirs) > 0 { - idx.SkipUnless(dirs) - } - if err != nil { return err } + b := newIndexBuilder(idx) changes, err := w.diffTreeWithStaging(t, true) @@ -362,6 +395,13 @@ func (w *Worktree) resetIndex(t *object.Tree, dirs []string) error { name = ch.From.String() } + if len(files) > 0 { + contains := inFiles(files, name) + if !contains { + continue + } + } + b.Remove(name) if e == nil { continue @@ -376,10 +416,25 @@ func (w *Worktree) resetIndex(t *object.Tree, dirs []string) error { } b.Write(idx) + + if len(dirs) > 0 { + idx.SkipUnless(dirs) + } + return w.r.Storer.SetIndex(idx) } -func (w *Worktree) resetWorktree(t *object.Tree) error { +func inFiles(files []string, v string) bool { + for _, s := range files { + if s == v { + return true + } + } + + return false +} + +func (w *Worktree) resetWorktree(t *object.Tree, files []string) error { changes, err := w.diffStagingWithWorktree(true, false) if err != nil { return err @@ -395,6 +450,25 @@ func (w *Worktree) resetWorktree(t *object.Tree) error { if err := w.validChange(ch); err != nil { return err } + + if len(files) > 0 { + file := "" + if ch.From != nil { + file = ch.From.String() + } else if ch.To != nil { + file = ch.To.String() + } + + if file == "" { + continue + } + + contains := inFiles(files, file) + if !contains { + continue + } + } + if err := w.checkoutChange(ch, t, b); err != nil { return err } @@ -642,7 +716,7 @@ func (w *Worktree) checkoutChangeRegularFile(name string, return err } - return w.addIndexFromFile(name, e.Hash, idx) + return w.addIndexFromFile(name, e.Hash, f.Mode, idx) } return nil @@ -725,18 +799,13 @@ func (w *Worktree) addIndexFromTreeEntry(name string, f *object.TreeEntry, idx * return nil } -func (w *Worktree) addIndexFromFile(name string, h plumbing.Hash, idx *indexBuilder) error { +func (w *Worktree) addIndexFromFile(name string, h plumbing.Hash, mode filemode.FileMode, idx *indexBuilder) error { idx.Remove(name) fi, err := w.Filesystem.Lstat(name) if err != nil { return err } - mode, err := filemode.NewFromOSFileMode(fi.Mode()) - if err != nil { - return err - } - e := &index.Entry{ Hash: h, Name: name, @@ -1058,7 +1127,7 @@ func rmFileAndDirsIfEmpty(fs billy.Filesystem, name string) error { dir := filepath.Dir(name) for { removed, err := removeDirIfEmpty(fs, dir) - if err != nil { + if err != nil && !os.IsNotExist(err) { return err } diff --git a/vendor/github.com/go-git/go-git/v5/worktree_commit.go b/vendor/github.com/go-git/go-git/v5/worktree_commit.go index f62054bcb4..9b1988ae6b 100644 --- a/vendor/github.com/go-git/go-git/v5/worktree_commit.go +++ b/vendor/github.com/go-git/go-git/v5/worktree_commit.go @@ -5,6 +5,7 @@ import ( "errors" "io" "path" + "regexp" "sort" "strings" @@ -23,6 +24,10 @@ var ( // ErrEmptyCommit occurs when a commit is attempted using a clean // working tree, with no changes to be committed. ErrEmptyCommit = errors.New("cannot create empty commit: clean working tree") + + // characters to be removed from user name and/or email before using them to build a commit object + // See https://git-scm.com/docs/git-commit#_commit_information + invalidCharactersRe = regexp.MustCompile(`[<>\n]`) ) // Commit stores the current contents of the index in a new commit along with @@ -38,8 +43,6 @@ func (w *Worktree) Commit(msg string, opts *CommitOptions) (plumbing.Hash, error } } - var treeHash plumbing.Hash - if opts.Amend { head, err := w.r.Head() if err != nil { @@ -61,16 +64,34 @@ func (w *Worktree) Commit(msg string, opts *CommitOptions) (plumbing.Hash, error return plumbing.ZeroHash, err } + // First handle the case of the first commit in the repository being empty. + if len(opts.Parents) == 0 && len(idx.Entries) == 0 && !opts.AllowEmptyCommits { + return plumbing.ZeroHash, ErrEmptyCommit + } + h := &buildTreeHelper{ fs: w.Filesystem, s: w.r.Storer, } - treeHash, err = h.BuildTree(idx, opts) + treeHash, err := h.BuildTree(idx, opts) if err != nil { return plumbing.ZeroHash, err } + previousTree := plumbing.ZeroHash + if len(opts.Parents) > 0 { + parentCommit, err := w.r.CommitObject(opts.Parents[0]) + if err != nil { + return plumbing.ZeroHash, err + } + previousTree = parentCommit.TreeHash + } + + if treeHash == previousTree && !opts.AllowEmptyCommits { + return plumbing.ZeroHash, ErrEmptyCommit + } + commit, err := w.buildCommitObject(msg, opts, treeHash) if err != nil { return plumbing.ZeroHash, err @@ -121,8 +142,8 @@ func (w *Worktree) updateHEAD(commit plumbing.Hash) error { func (w *Worktree) buildCommitObject(msg string, opts *CommitOptions, tree plumbing.Hash) (plumbing.Hash, error) { commit := &object.Commit{ - Author: *opts.Author, - Committer: *opts.Committer, + Author: w.sanitize(*opts.Author), + Committer: w.sanitize(*opts.Committer), Message: msg, TreeHash: tree, ParentHashes: opts.Parents, @@ -148,6 +169,14 @@ func (w *Worktree) buildCommitObject(msg string, opts *CommitOptions, tree plumb return w.r.Storer.SetEncodedObject(obj) } +func (w *Worktree) sanitize(signature object.Signature) object.Signature { + return object.Signature{ + Name: invalidCharactersRe.ReplaceAllString(signature.Name, ""), + Email: invalidCharactersRe.ReplaceAllString(signature.Email, ""), + When: signature.When, + } +} + type gpgSigner struct { key *openpgp.Entity cfg *packet.Config @@ -175,10 +204,6 @@ type buildTreeHelper struct { // BuildTree builds the tree objects and push its to the storer, the hash // of the root tree is returned. func (h *buildTreeHelper) BuildTree(idx *index.Index, opts *CommitOptions) (plumbing.Hash, error) { - if len(idx.Entries) == 0 && (opts == nil || !opts.AllowEmptyCommits) { - return plumbing.ZeroHash, ErrEmptyCommit - } - const rootNode = "" h.trees = map[string]*object.Tree{rootNode: {}} h.entries = map[string]*object.TreeEntry{} diff --git a/vendor/github.com/go-git/go-git/v5/worktree_linux.go b/vendor/github.com/go-git/go-git/v5/worktree_linux.go index 6fcace2f93..f6b85fe3df 100644 --- a/vendor/github.com/go-git/go-git/v5/worktree_linux.go +++ b/vendor/github.com/go-git/go-git/v5/worktree_linux.go @@ -1,3 +1,4 @@ +//go:build linux // +build linux package git @@ -21,6 +22,6 @@ func init() { } } -func isSymlinkWindowsNonAdmin(err error) bool { +func isSymlinkWindowsNonAdmin(_ error) bool { return false } diff --git a/vendor/github.com/go-git/go-git/v5/worktree_status.go b/vendor/github.com/go-git/go-git/v5/worktree_status.go index dd9b2439cf..6e72db9744 100644 --- a/vendor/github.com/go-git/go-git/v5/worktree_status.go +++ b/vendor/github.com/go-git/go-git/v5/worktree_status.go @@ -29,10 +29,23 @@ var ( // ErrGlobNoMatches in an AddGlob if the glob pattern does not match any // files in the worktree. ErrGlobNoMatches = errors.New("glob pattern did not match any files") + // ErrUnsupportedStatusStrategy occurs when an invalid StatusStrategy is used + // when processing the Worktree status. + ErrUnsupportedStatusStrategy = errors.New("unsupported status strategy") ) // Status returns the working tree status. func (w *Worktree) Status() (Status, error) { + return w.StatusWithOptions(StatusOptions{Strategy: defaultStatusStrategy}) +} + +// StatusOptions defines the options for Worktree.StatusWithOptions(). +type StatusOptions struct { + Strategy StatusStrategy +} + +// StatusWithOptions returns the working tree status. +func (w *Worktree) StatusWithOptions(o StatusOptions) (Status, error) { var hash plumbing.Hash ref, err := w.r.Head() @@ -44,11 +57,14 @@ func (w *Worktree) Status() (Status, error) { hash = ref.Hash() } - return w.status(hash) + return w.status(o.Strategy, hash) } -func (w *Worktree) status(commit plumbing.Hash) (Status, error) { - s := make(Status) +func (w *Worktree) status(ss StatusStrategy, commit plumbing.Hash) (Status, error) { + s, err := ss.new(w) + if err != nil { + return nil, err + } left, err := w.diffCommitWithStaging(commit, false) if err != nil { @@ -488,7 +504,7 @@ func (w *Worktree) copyFileToStorage(path string) (hash plumbing.Hash, err error return w.r.Storer.SetEncodedObject(obj) } -func (w *Worktree) fillEncodedObjectFromFile(dst io.Writer, path string, fi os.FileInfo) (err error) { +func (w *Worktree) fillEncodedObjectFromFile(dst io.Writer, path string, _ os.FileInfo) (err error) { src, err := w.Filesystem.Open(path) if err != nil { return err @@ -503,7 +519,7 @@ func (w *Worktree) fillEncodedObjectFromFile(dst io.Writer, path string, fi os.F return err } -func (w *Worktree) fillEncodedObjectFromSymlink(dst io.Writer, path string, fi os.FileInfo) error { +func (w *Worktree) fillEncodedObjectFromSymlink(dst io.Writer, path string, _ os.FileInfo) error { target, err := w.Filesystem.Readlink(path) if err != nil { return err @@ -543,9 +559,11 @@ func (w *Worktree) doUpdateFileToIndex(e *index.Entry, filename string, h plumbi return err } - if e.Mode.IsRegular() { - e.Size = uint32(info.Size()) - } + // The entry size must always reflect the current state, otherwise + // it will cause go-git's Worktree.Status() to divert from "git status". + // The size of a symlink is the length of the path to the target. + // The size of Regular and Executable files is the size of the files. + e.Size = uint32(info.Size()) fillSystemInfo(e, info.Sys()) return nil diff --git a/vendor/github.com/skeema/knownhosts/CONTRIBUTING.md b/vendor/github.com/skeema/knownhosts/CONTRIBUTING.md new file mode 100644 index 0000000000..9624f82760 --- /dev/null +++ b/vendor/github.com/skeema/knownhosts/CONTRIBUTING.md @@ -0,0 +1,36 @@ +# Contributing to skeema/knownhosts + +Thank you for your interest in contributing! This document provides guidelines for submitting pull requests. + +### Link to an issue + +Before starting the pull request process, initial discussion should take place on a GitHub issue first. For bug reports, the issue should track the open bug and confirm it is reproducible. For feature requests, the issue should cover why the feature is necessary. + +In the issue comments, discuss your suggested approach for a fix/implementation, and please wait to get feedback before opening a pull request. + +### Test coverage + +In general, please provide reasonably thorough test coverage. Whenever possible, your PR should aim to match or improve the overall test coverage percentage of the package. You can run tests and check coverage locally using `go test -cover`. We also have CI automation in GitHub Actions which will comment on each pull request with a coverage percentage. + +That said, it is fine to submit an initial draft / work-in-progress PR without coverage, if you are waiting on implementation feedback before writing the tests. + +We intentionally avoid hard-coding SSH keys or known_hosts files into the test logic. Instead, the tests generate new keys and then use them to generate a known_hosts file, which is then cached/reused for that overall test run, in order to keep performance reasonable. + +### Documentation + +Exported types require doc comments. The linter CI step will catch this if missing. + +### Backwards compatibility + +Because this package is imported by [nearly 7000 repos on GitHub](https://github.com/skeema/knownhosts/network/dependents), we must be very strict about backwards compatibility of exported symbols and function signatures. + +Backwards compatibility can be very tricky in some situations. In this case, a maintainer may need to add additional commits to your branch to adjust the approach. Please do not take offense if this occurs; it is sometimes simply faster to implement a refactor on our end directly. When the PR/branch is merged, a merge commit will be used, to ensure your commits appear as-is in the repo history and are still properly credited to you. + +### Avoid rewriting core x/crypto/ssh/knownhosts logic + +skeema/knownhosts is intended to be a relatively thin *wrapper* around x/crypto/ssh/knownhosts, without duplicating or re-implementing the core known_hosts file parsing and host key handling logic. Importers of this package should be confident that it can be used as a nearly-drop-in replacement for x/crypto/ssh/knownhosts without introducing substantial risk, security flaws, parser differentials, or unexpected behavior changes. + +To solve shortcomings in x/crypto/ssh/knownhosts, we try to come up with workarounds that still utilize x/crypto/ssh/knownhosts functionality whenever possible. + +Some bugs in x/crypto/ssh/knownhosts do require re-reading the known_hosts file here to solve, but we make that *optional* by offering separate constructors/types with and without that behavior. + diff --git a/vendor/github.com/skeema/knownhosts/README.md b/vendor/github.com/skeema/knownhosts/README.md index 36b847614c..046bc0edcb 100644 --- a/vendor/github.com/skeema/knownhosts/README.md +++ b/vendor/github.com/skeema/knownhosts/README.md @@ -1,31 +1,33 @@ # knownhosts: enhanced Golang SSH known_hosts management [![build status](https://img.shields.io/github/actions/workflow/status/skeema/knownhosts/tests.yml?branch=main)](https://github.com/skeema/knownhosts/actions) +[![code coverage](https://img.shields.io/coveralls/skeema/knownhosts.svg)](https://coveralls.io/r/skeema/knownhosts) [![godoc](https://img.shields.io/badge/godoc-reference-blue.svg)](https://pkg.go.dev/github.com/skeema/knownhosts) > This repo is brought to you by [Skeema](https://github.com/skeema/skeema), a > declarative pure-SQL schema management system for MySQL and MariaDB. Our -> premium products include extensive [SSH tunnel](https://www.skeema.io/docs/options/#ssh) +> premium products include extensive [SSH tunnel](https://www.skeema.io/docs/features/ssh/) > functionality, which internally makes use of this package. Go provides excellent functionality for OpenSSH known_hosts files in its external package [golang.org/x/crypto/ssh/knownhosts](https://pkg.go.dev/golang.org/x/crypto/ssh/knownhosts). -However, that package is somewhat low-level, making it difficult to implement full known_hosts management similar to command-line `ssh`'s behavior for `StrictHostKeyChecking=no` configuration. +However, that package is somewhat low-level, making it difficult to implement full known_hosts management similar to OpenSSH's command-line behavior. Additionally, [golang.org/x/crypto/ssh/knownhosts](https://pkg.go.dev/golang.org/x/crypto/ssh/knownhosts) has several known issues in edge cases, some of which have remained open for multiple years. -This repo ([github.com/skeema/knownhosts](https://github.com/skeema/knownhosts)) is a thin wrapper package around [golang.org/x/crypto/ssh/knownhosts](https://pkg.go.dev/golang.org/x/crypto/ssh/knownhosts), adding the following functionality: +Package [github.com/skeema/knownhosts](https://github.com/skeema/knownhosts) provides a *thin wrapper* around [golang.org/x/crypto/ssh/knownhosts](https://pkg.go.dev/golang.org/x/crypto/ssh/knownhosts), adding the following improvements and fixes without duplicating its core logic: * Look up known_hosts public keys for any given host -* Auto-populate ssh.ClientConfig.HostKeyAlgorithms easily based on known_hosts, providing a solution for [golang/go#29286](https://github.com/golang/go/issues/29286) +* Auto-populate ssh.ClientConfig.HostKeyAlgorithms easily based on known_hosts, providing a solution for [golang/go#29286](https://github.com/golang/go/issues/29286). (This also properly handles cert algorithms for hosts using CA keys when [using the NewDB constructor](#enhancements-requiring-extra-parsing) added in skeema/knownhosts v1.3.0.) +* Properly match wildcard hostname known_hosts entries regardless of port number, providing a solution for [golang/go#52056](https://github.com/golang/go/issues/52056). (Added in v1.3.0; requires [using the NewDB constructor](#enhancements-requiring-extra-parsing)) * Write new known_hosts entries to an io.Writer * Properly format/normalize new known_hosts entries containing ipv6 addresses, providing a solution for [golang/go#53463](https://github.com/golang/go/issues/53463) -* Determine if an ssh.HostKeyCallback's error corresponds to a host whose key has changed (indicating potential MitM attack) vs a host that just isn't known yet +* Easily determine if an ssh.HostKeyCallback's error corresponds to a host whose key has changed (indicating potential MitM attack) vs a host that just isn't known yet ## How host key lookup works Although [golang.org/x/crypto/ssh/knownhosts](https://pkg.go.dev/golang.org/x/crypto/ssh/knownhosts) doesn't directly expose a way to query its known_host map, we use a subtle trick to do so: invoke the HostKeyCallback with a valid host but a bogus key. The resulting KeyError allows us to determine which public keys are actually present for that host. -By using this technique, [github.com/skeema/knownhosts](https://github.com/skeema/knownhosts) doesn't need to duplicate or re-implement any of the actual known_hosts management from [golang.org/x/crypto/ssh/knownhosts](https://pkg.go.dev/golang.org/x/crypto/ssh/knownhosts). +By using this technique, [github.com/skeema/knownhosts](https://github.com/skeema/knownhosts) doesn't need to duplicate any of the core known_hosts host-lookup logic from [golang.org/x/crypto/ssh/knownhosts](https://pkg.go.dev/golang.org/x/crypto/ssh/knownhosts). ## Populating ssh.ClientConfig.HostKeyAlgorithms based on known_hosts @@ -42,20 +44,33 @@ import ( ) func sshConfigForHost(hostWithPort string) (*ssh.ClientConfig, error) { - kh, err := knownhosts.New("/home/myuser/.ssh/known_hosts") + kh, err := knownhosts.NewDB("/home/myuser/.ssh/known_hosts") if err != nil { return nil, err } config := &ssh.ClientConfig{ User: "myuser", Auth: []ssh.AuthMethod{ /* ... */ }, - HostKeyCallback: kh.HostKeyCallback(), // or, equivalently, use ssh.HostKeyCallback(kh) + HostKeyCallback: kh.HostKeyCallback(), HostKeyAlgorithms: kh.HostKeyAlgorithms(hostWithPort), } return config, nil } ``` +## Enhancements requiring extra parsing + +Originally, this package did not re-read/re-parse the known_hosts files at all, relying entirely on [golang.org/x/crypto/ssh/knownhosts](https://pkg.go.dev/golang.org/x/crypto/ssh/knownhosts) for all known_hosts file reading and processing. This package only offered a constructor called `New`, returning a host key callback, identical to the call pattern of [golang.org/x/crypto/ssh/knownhosts](https://pkg.go.dev/golang.org/x/crypto/ssh/knownhosts) but with extra methods available on the callback type. + +However, a couple shortcomings in [golang.org/x/crypto/ssh/knownhosts](https://pkg.go.dev/golang.org/x/crypto/ssh/knownhosts) cannot possibly be solved without re-reading the known_hosts file. Therefore, as of v1.3.0 of this package, we now offer an alternative constructor `NewDB`, which does an additional read of the known_hosts file (after the one from [golang.org/x/crypto/ssh/knownhosts](https://pkg.go.dev/golang.org/x/crypto/ssh/knownhosts)), in order to detect: + +* @cert-authority lines, so that we can correctly return cert key algorithms instead of normal host key algorithms when appropriate +* host pattern wildcards, so that we can match OpenSSH's behavior for non-standard port numbers, unlike how [golang.org/x/crypto/ssh/knownhosts](https://pkg.go.dev/golang.org/x/crypto/ssh/knownhosts) normally treats them + +Aside from *detecting* these special cases, this package otherwise still directly uses [golang.org/x/crypto/ssh/knownhosts](https://pkg.go.dev/golang.org/x/crypto/ssh/knownhosts) for host lookups and all other known_hosts file processing. We do **not** fork or re-implement those core behaviors of [golang.org/x/crypto/ssh/knownhosts](https://pkg.go.dev/golang.org/x/crypto/ssh/knownhosts). + +The performance impact of this extra known_hosts read should be minimal, as the file should typically be in the filesystem cache already from the original read by [golang.org/x/crypto/ssh/knownhosts](https://pkg.go.dev/golang.org/x/crypto/ssh/knownhosts). That said, users who wish to avoid the extra read can stay with the `New` constructor, which intentionally retains its pre-v1.3.0 behavior as-is. However, the extra fixes for @cert-authority and host pattern wildcards will not be enabled in that case. + ## Writing new known_hosts entries If you wish to mimic the behavior of OpenSSH's `StrictHostKeyChecking=no` or `StrictHostKeyChecking=ask`, this package provides a few functions to simplify this task. For example: @@ -63,7 +78,7 @@ If you wish to mimic the behavior of OpenSSH's `StrictHostKeyChecking=no` or `St ```golang sshHost := "yourserver.com:22" khPath := "/home/myuser/.ssh/known_hosts" -kh, err := knownhosts.New(khPath) +kh, err := knownhosts.NewDB(khPath) if err != nil { log.Fatal("Failed to read known_hosts: ", err) } @@ -71,7 +86,8 @@ if err != nil { // Create a custom permissive hostkey callback which still errors on hosts // with changed keys, but allows unknown hosts and adds them to known_hosts cb := ssh.HostKeyCallback(func(hostname string, remote net.Addr, key ssh.PublicKey) error { - err := kh(hostname, remote, key) + innerCallback := kh.HostKeyCallback() + err := innerCallback(hostname, remote, key) if knownhosts.IsHostKeyChanged(err) { return fmt.Errorf("REMOTE HOST IDENTIFICATION HAS CHANGED for host %s! This may indicate a MitM attack.", hostname) } else if knownhosts.IsHostUnknown(err) { diff --git a/vendor/github.com/skeema/knownhosts/knownhosts.go b/vendor/github.com/skeema/knownhosts/knownhosts.go index 4dad7771b8..2b7536e0da 100644 --- a/vendor/github.com/skeema/knownhosts/knownhosts.go +++ b/vendor/github.com/skeema/knownhosts/knownhosts.go @@ -3,11 +3,14 @@ package knownhosts import ( + "bufio" + "bytes" "encoding/base64" "errors" "fmt" "io" "net" + "os" "sort" "strings" @@ -15,23 +18,133 @@ import ( xknownhosts "golang.org/x/crypto/ssh/knownhosts" ) -// HostKeyCallback wraps ssh.HostKeyCallback with an additional method to -// perform host key algorithm lookups from the known_hosts entries. -type HostKeyCallback ssh.HostKeyCallback +// HostKeyDB wraps logic in golang.org/x/crypto/ssh/knownhosts with additional +// behaviors, such as the ability to perform host key/algorithm lookups from +// known_hosts entries. +type HostKeyDB struct { + callback ssh.HostKeyCallback + isCert map[string]bool // keyed by "filename:line" + isWildcard map[string]bool // keyed by "filename:line" +} -// New creates a host key callback from the given OpenSSH host key files. The -// returned value may be used in ssh.ClientConfig.HostKeyCallback by casting it -// to ssh.HostKeyCallback, or using its HostKeyCallback method. Otherwise, it -// operates the same as the New function in golang.org/x/crypto/ssh/knownhosts. -func New(files ...string) (HostKeyCallback, error) { +// NewDB creates a HostKeyDB from the given OpenSSH known_hosts file(s). It +// reads and parses the provided files one additional time (beyond logic in +// golang.org/x/crypto/ssh/knownhosts) in order to: +// +// - Handle CA lines properly and return ssh.CertAlgo* values when calling the +// HostKeyAlgorithms method, for use in ssh.ClientConfig.HostKeyAlgorithms +// - Allow * wildcards in hostnames to match on non-standard ports, providing +// a workaround for https://github.com/golang/go/issues/52056 in order to +// align with OpenSSH's wildcard behavior +// +// When supplying multiple files, their order does not matter. +func NewDB(files ...string) (*HostKeyDB, error) { cb, err := xknownhosts.New(files...) - return HostKeyCallback(cb), err + if err != nil { + return nil, err + } + hkdb := &HostKeyDB{ + callback: cb, + isCert: make(map[string]bool), + isWildcard: make(map[string]bool), + } + + // Re-read each file a single time, looking for @cert-authority lines. The + // logic for reading the file is designed to mimic hostKeyDB.Read from + // golang.org/x/crypto/ssh/knownhosts + for _, filename := range files { + f, err := os.Open(filename) + if err != nil { + return nil, err + } + defer f.Close() + scanner := bufio.NewScanner(f) + lineNum := 0 + for scanner.Scan() { + lineNum++ + line := scanner.Bytes() + line = bytes.TrimSpace(line) + // Does the line start with "@cert-authority" followed by whitespace? + if len(line) > 15 && bytes.HasPrefix(line, []byte("@cert-authority")) && (line[15] == ' ' || line[15] == '\t') { + mapKey := fmt.Sprintf("%s:%d", filename, lineNum) + hkdb.isCert[mapKey] = true + line = bytes.TrimSpace(line[16:]) + } + // truncate line to just the host pattern field + if i := bytes.IndexAny(line, "\t "); i >= 0 { + line = line[:i] + } + // Does the host pattern contain a * wildcard and no specific port? + if i := bytes.IndexRune(line, '*'); i >= 0 && !bytes.Contains(line[i:], []byte("]:")) { + mapKey := fmt.Sprintf("%s:%d", filename, lineNum) + hkdb.isWildcard[mapKey] = true + } + } + if err := scanner.Err(); err != nil { + return nil, fmt.Errorf("knownhosts: %s:%d: %w", filename, lineNum, err) + } + } + return hkdb, nil } -// HostKeyCallback simply casts the receiver back to ssh.HostKeyCallback, for -// use in ssh.ClientConfig.HostKeyCallback. -func (hkcb HostKeyCallback) HostKeyCallback() ssh.HostKeyCallback { - return ssh.HostKeyCallback(hkcb) +// HostKeyCallback returns an ssh.HostKeyCallback. This can be used directly in +// ssh.ClientConfig.HostKeyCallback, as shown in the example for NewDB. +// Alternatively, you can wrap it with an outer callback to potentially handle +// appending a new entry to the known_hosts file; see example in WriteKnownHost. +func (hkdb *HostKeyDB) HostKeyCallback() ssh.HostKeyCallback { + // Either NewDB found no wildcard host patterns, or hkdb was created from + // HostKeyCallback.ToDB in which case we didn't scan known_hosts for them: + // return the callback (which came from x/crypto/ssh/knownhosts) as-is + if len(hkdb.isWildcard) == 0 { + return hkdb.callback + } + + // If we scanned for wildcards and found at least one, return a wrapped + // callback with extra behavior: if the host lookup found no matches, and the + // host arg had a non-standard port, re-do the lookup on standard port 22. If + // that second call returns a *xknownhosts.KeyError, filter down any resulting + // Want keys to known wildcard entries. + f := func(hostname string, remote net.Addr, key ssh.PublicKey) error { + callbackErr := hkdb.callback(hostname, remote, key) + if callbackErr == nil || IsHostKeyChanged(callbackErr) { // hostname has known_host entries as-is + return callbackErr + } + justHost, port, splitErr := net.SplitHostPort(hostname) + if splitErr != nil || port == "" || port == "22" { // hostname already using standard port + return callbackErr + } + // If we reach here, the port was non-standard and no known_host entries + // were found for the non-standard port. Try again with standard port. + if tcpAddr, ok := remote.(*net.TCPAddr); ok && tcpAddr.Port != 22 { + remote = &net.TCPAddr{ + IP: tcpAddr.IP, + Port: 22, + Zone: tcpAddr.Zone, + } + } + callbackErr = hkdb.callback(justHost+":22", remote, key) + var keyErr *xknownhosts.KeyError + if errors.As(callbackErr, &keyErr) && len(keyErr.Want) > 0 { + wildcardKeys := make([]xknownhosts.KnownKey, 0, len(keyErr.Want)) + for _, wantKey := range keyErr.Want { + if hkdb.isWildcard[fmt.Sprintf("%s:%d", wantKey.Filename, wantKey.Line)] { + wildcardKeys = append(wildcardKeys, wantKey) + } + } + callbackErr = &xknownhosts.KeyError{ + Want: wildcardKeys, + } + } + return callbackErr + } + return ssh.HostKeyCallback(f) +} + +// PublicKey wraps ssh.PublicKey with an additional field, to identify +// whether the key corresponds to a certificate authority. +type PublicKey struct { + ssh.PublicKey + Cert bool } // HostKeys returns a slice of known host public keys for the supplied host:port @@ -39,12 +152,16 @@ func (hkcb HostKeyCallback) HostKeyCallback() ssh.HostKeyCallback { // already known. For hosts that have multiple known_hosts entries (for // different key types), the result will be sorted by known_hosts filename and // line number. -func (hkcb HostKeyCallback) HostKeys(hostWithPort string) (keys []ssh.PublicKey) { +// If hkdb was originally created by calling NewDB, the Cert boolean field of +// each result entry reports whether the key corresponded to a @cert-authority +// line. If hkdb was NOT obtained from NewDB, then Cert will always be false. +func (hkdb *HostKeyDB) HostKeys(hostWithPort string) (keys []PublicKey) { var keyErr *xknownhosts.KeyError placeholderAddr := &net.TCPAddr{IP: []byte{0, 0, 0, 0}} placeholderPubKey := &fakePublicKey{} var kkeys []xknownhosts.KnownKey - if hkcbErr := hkcb(hostWithPort, placeholderAddr, placeholderPubKey); errors.As(hkcbErr, &keyErr) { + callback := hkdb.HostKeyCallback() + if hkcbErr := callback(hostWithPort, placeholderAddr, placeholderPubKey); errors.As(hkcbErr, &keyErr) { kkeys = append(kkeys, keyErr.Want...) knownKeyLess := func(i, j int) bool { if kkeys[i].Filename < kkeys[j].Filename { @@ -53,9 +170,14 @@ func (hkcb HostKeyCallback) HostKeys(hostWithPort string) (keys []ssh.PublicKey) return (kkeys[i].Filename == kkeys[j].Filename && kkeys[i].Line < kkeys[j].Line) } sort.Slice(kkeys, knownKeyLess) - keys = make([]ssh.PublicKey, len(kkeys)) + keys = make([]PublicKey, len(kkeys)) for n := range kkeys { - keys[n] = kkeys[n].Key + keys[n] = PublicKey{ + PublicKey: kkeys[n].Key, + } + if len(hkdb.isCert) > 0 { + keys[n].Cert = hkdb.isCert[fmt.Sprintf("%s:%d", kkeys[n].Filename, kkeys[n].Line)] + } } } return keys @@ -66,17 +188,23 @@ func (hkcb HostKeyCallback) HostKeys(hostWithPort string) (keys []ssh.PublicKey) // is not already known. The result may be used in ssh.ClientConfig's // HostKeyAlgorithms field, either as-is or after filtering (if you wish to // ignore or prefer particular algorithms). For hosts that have multiple -// known_hosts entries (for different key types), the result will be sorted by +// known_hosts entries (of different key types), the result will be sorted by // known_hosts filename and line number. -func (hkcb HostKeyCallback) HostKeyAlgorithms(hostWithPort string) (algos []string) { +// If hkdb was originally created by calling NewDB, any @cert-authority lines +// in the known_hosts file will properly be converted to the corresponding +// ssh.CertAlgo* values. +func (hkdb *HostKeyDB) HostKeyAlgorithms(hostWithPort string) (algos []string) { // We ensure that algos never contains duplicates. This is done for robustness // even though currently golang.org/x/crypto/ssh/knownhosts never exposes // multiple keys of the same type. This way our behavior here is unaffected // even if https://github.com/golang/go/issues/28870 is implemented, for // example by https://github.com/golang/crypto/pull/254. - hostKeys := hkcb.HostKeys(hostWithPort) + hostKeys := hkdb.HostKeys(hostWithPort) seen := make(map[string]struct{}, len(hostKeys)) - addAlgo := func(typ string) { + addAlgo := func(typ string, cert bool) { + if cert { + typ = keyTypeToCertAlgo(typ) + } if _, already := seen[typ]; !already { algos = append(algos, typ) seen[typ] = struct{}{} @@ -88,25 +216,143 @@ func (hkcb HostKeyCallback) HostKeyAlgorithms(hostWithPort string) (algos []stri // KeyAlgoRSASHA256 and KeyAlgoRSASHA512 are only public key algorithms, // not public key formats, so they can't appear as a PublicKey.Type. // The corresponding PublicKey.Type is KeyAlgoRSA. See RFC 8332, Section 2. - addAlgo(ssh.KeyAlgoRSASHA512) - addAlgo(ssh.KeyAlgoRSASHA256) + addAlgo(ssh.KeyAlgoRSASHA512, key.Cert) + addAlgo(ssh.KeyAlgoRSASHA256, key.Cert) } - addAlgo(typ) + addAlgo(typ, key.Cert) } return algos } +func keyTypeToCertAlgo(keyType string) string { + switch keyType { + case ssh.KeyAlgoRSA: + return ssh.CertAlgoRSAv01 + case ssh.KeyAlgoRSASHA256: + return ssh.CertAlgoRSASHA256v01 + case ssh.KeyAlgoRSASHA512: + return ssh.CertAlgoRSASHA512v01 + case ssh.KeyAlgoDSA: + return ssh.CertAlgoDSAv01 + case ssh.KeyAlgoECDSA256: + return ssh.CertAlgoECDSA256v01 + case ssh.KeyAlgoSKECDSA256: + return ssh.CertAlgoSKECDSA256v01 + case ssh.KeyAlgoECDSA384: + return ssh.CertAlgoECDSA384v01 + case ssh.KeyAlgoECDSA521: + return ssh.CertAlgoECDSA521v01 + case ssh.KeyAlgoED25519: + return ssh.CertAlgoED25519v01 + case ssh.KeyAlgoSKED25519: + return ssh.CertAlgoSKED25519v01 + } + return "" +} + +// HostKeyCallback wraps ssh.HostKeyCallback with additional methods to +// perform host key and algorithm lookups from the known_hosts entries. It is +// otherwise identical to ssh.HostKeyCallback, and does not introduce any file- +// parsing behavior beyond what is in golang.org/x/crypto/ssh/knownhosts. +// +// In most situations, use HostKeyDB and its constructor NewDB instead of using +// the HostKeyCallback type. The HostKeyCallback type is only provided for +// backwards compatibility with older versions of this package, as well as for +// very strict situations where any extra known_hosts file-parsing is +// undesirable. +// +// Methods of HostKeyCallback do not provide any special treatment for +// @cert-authority lines, which will (incorrectly) look like normal non-CA host +// keys. Additionally, HostKeyCallback lacks the fix for applying * wildcard +// known_host entries to all ports, like OpenSSH's behavior. +type HostKeyCallback ssh.HostKeyCallback + +// New creates a HostKeyCallback from the given OpenSSH known_hosts file(s). The +// returned value may be used in ssh.ClientConfig.HostKeyCallback by casting it +// to ssh.HostKeyCallback, or using its HostKeyCallback method. Otherwise, it +// operates the same as the New function in golang.org/x/crypto/ssh/knownhosts. +// When supplying multiple files, their order does not matter. +// +// In most situations, you should avoid this function, as the returned value +// lacks several enhanced behaviors. See doc comment for HostKeyCallback for +// more information. Instead, most callers should use NewDB to create a +// HostKeyDB, which includes these enhancements. +func New(files ...string) (HostKeyCallback, error) { + cb, err := xknownhosts.New(files...) + return HostKeyCallback(cb), err +} + +// HostKeyCallback simply casts the receiver back to ssh.HostKeyCallback, for +// use in ssh.ClientConfig.HostKeyCallback. +func (hkcb HostKeyCallback) HostKeyCallback() ssh.HostKeyCallback { + return ssh.HostKeyCallback(hkcb) +} + +// ToDB converts the receiver into a HostKeyDB. However, the returned HostKeyDB +// lacks the enhanced behaviors described in the doc comment for NewDB: proper +// CA support, and wildcard matching on nonstandard ports. +// +// It is generally preferable to create a HostKeyDB by using NewDB. The ToDB +// method is only provided for situations in which the calling code needs to +// make the extra NewDB behaviors optional / user-configurable, perhaps for +// reasons of performance or code trust (since NewDB reads the known_host file +// an extra time, which may be undesirable in some strict situations). This way, +// callers can conditionally create a non-enhanced HostKeyDB by using New and +// ToDB. See code example. +func (hkcb HostKeyCallback) ToDB() *HostKeyDB { + // This intentionally leaves the isCert and isWildcard map fields as nil, as + // there is no way to retroactively populate them from just a HostKeyCallback. + // Methods of HostKeyDB will skip any related enhanced behaviors accordingly. + return &HostKeyDB{callback: ssh.HostKeyCallback(hkcb)} +} + +// HostKeys returns a slice of known host public keys for the supplied host:port +// found in the known_hosts file(s), or an empty slice if the host is not +// already known. For hosts that have multiple known_hosts entries (for +// different key types), the result will be sorted by known_hosts filename and +// line number. +// In the returned values, there is no way to distinguish between CA keys +// (known_hosts lines beginning with @cert-authority) and regular keys. To do +// so, see NewDB and HostKeyDB.HostKeys instead. +func (hkcb HostKeyCallback) HostKeys(hostWithPort string) []ssh.PublicKey { + annotatedKeys := hkcb.ToDB().HostKeys(hostWithPort) + rawKeys := make([]ssh.PublicKey, len(annotatedKeys)) + for n, ak := range annotatedKeys { + rawKeys[n] = ak.PublicKey + } + return rawKeys +} + +// HostKeyAlgorithms returns a slice of host key algorithms for the supplied +// host:port found in the known_hosts file(s), or an empty slice if the host +// is not already known. The result may be used in ssh.ClientConfig's +// HostKeyAlgorithms field, either as-is or after filtering (if you wish to +// ignore or prefer particular algorithms). For hosts that have multiple +// known_hosts entries (for different key types), the result will be sorted by +// known_hosts filename and line number. +// The returned values will not include ssh.CertAlgo* values. If any +// known_hosts lines had @cert-authority prefixes, their original key algo will +// be returned instead. For proper CA support, see NewDB and +// HostKeyDB.HostKeyAlgorithms instead. +func (hkcb HostKeyCallback) HostKeyAlgorithms(hostWithPort string) (algos []string) { + return hkcb.ToDB().HostKeyAlgorithms(hostWithPort) +} + // HostKeyAlgorithms is a convenience function for performing host key algorithm // lookups on an ssh.HostKeyCallback directly. It is intended for use in code // paths that stay with the New method of golang.org/x/crypto/ssh/knownhosts -// rather than this package's New method. +// rather than this package's New or NewDB methods. +// The returned values will not include ssh.CertAlgo* values. If any +// known_hosts lines had @cert-authority prefixes, their original key algo will +// be returned instead. For proper CA support, see NewDB and +// HostKeyDB.HostKeyAlgorithms instead. func HostKeyAlgorithms(cb ssh.HostKeyCallback, hostWithPort string) []string { return HostKeyCallback(cb).HostKeyAlgorithms(hostWithPort) } // IsHostKeyChanged returns a boolean indicating whether the error indicates // the host key has changed. It is intended to be called on the error returned -// from invoking a HostKeyCallback to check whether an SSH host is known. +// from invoking a host key callback, to check whether an SSH host is known. func IsHostKeyChanged(err error) bool { var keyErr *xknownhosts.KeyError return errors.As(err, &keyErr) && len(keyErr.Want) > 0 @@ -114,7 +360,7 @@ func IsHostKeyChanged(err error) bool { // IsHostUnknown returns a boolean indicating whether the error represents an // unknown host. It is intended to be called on the error returned from invoking -// a HostKeyCallback to check whether an SSH host is known. +// a host key callback to check whether an SSH host is known. func IsHostUnknown(err error) bool { var keyErr *xknownhosts.KeyError return errors.As(err, &keyErr) && len(keyErr.Want) == 0 @@ -154,11 +400,12 @@ func Line(addresses []string, key ssh.PublicKey) string { }, " ") } -// WriteKnownHost writes a known_hosts line to writer for the supplied hostname, +// WriteKnownHost writes a known_hosts line to w for the supplied hostname, // remote, and key. This is useful when writing a custom hostkey callback which -// wraps a callback obtained from knownhosts.New to provide additional -// known_hosts management functionality. The hostname, remote, and key typically -// correspond to the callback's args. +// wraps a callback obtained from this package to provide additional known_hosts +// management functionality. The hostname, remote, and key typically correspond +// to the callback's args. This function does not support writing +// @cert-authority lines. func WriteKnownHost(w io.Writer, hostname string, remote net.Addr, key ssh.PublicKey) error { // Always include hostname; only also include remote if it isn't a zero value // and doesn't normalize to the same string as hostname. @@ -177,6 +424,14 @@ func WriteKnownHost(w io.Writer, hostname string, remote net.Addr, key ssh.Publi return err } +// WriteKnownHostCA writes a @cert-authority line to w for the supplied host +// name/pattern and key. +func WriteKnownHostCA(w io.Writer, hostPattern string, key ssh.PublicKey) error { + encodedKey := base64.StdEncoding.EncodeToString(key.Marshal()) + _, err := fmt.Fprintf(w, "@cert-authority %s %s %s\n", hostPattern, key.Type(), encodedKey) + return err +} + // fakePublicKey is used as part of the work-around for // https://github.com/golang/go/issues/29286 type fakePublicKey struct{} diff --git a/vendor/github.com/stretchr/testify/assert/assertion_compare.go b/vendor/github.com/stretchr/testify/assert/assertion_compare.go index 4d4b4aad6f..7e19eba090 100644 --- a/vendor/github.com/stretchr/testify/assert/assertion_compare.go +++ b/vendor/github.com/stretchr/testify/assert/assertion_compare.go @@ -7,10 +7,13 @@ import ( "time" ) -type CompareType int +// Deprecated: CompareType has only ever been for internal use and has accidentally been published since v1.6.0. Do not use it. +type CompareType = compareResult + +type compareResult int const ( - compareLess CompareType = iota - 1 + compareLess compareResult = iota - 1 compareEqual compareGreater ) @@ -39,7 +42,7 @@ var ( bytesType = reflect.TypeOf([]byte{}) ) -func compare(obj1, obj2 interface{}, kind reflect.Kind) (CompareType, bool) { +func compare(obj1, obj2 interface{}, kind reflect.Kind) (compareResult, bool) { obj1Value := reflect.ValueOf(obj1) obj2Value := reflect.ValueOf(obj2) @@ -325,7 +328,13 @@ func compare(obj1, obj2 interface{}, kind reflect.Kind) (CompareType, bool) { timeObj2 = obj2Value.Convert(timeType).Interface().(time.Time) } - return compare(timeObj1.UnixNano(), timeObj2.UnixNano(), reflect.Int64) + if timeObj1.Before(timeObj2) { + return compareLess, true + } + if timeObj1.Equal(timeObj2) { + return compareEqual, true + } + return compareGreater, true } case reflect.Slice: { @@ -345,7 +354,7 @@ func compare(obj1, obj2 interface{}, kind reflect.Kind) (CompareType, bool) { bytesObj2 = obj2Value.Convert(bytesType).Interface().([]byte) } - return CompareType(bytes.Compare(bytesObj1, bytesObj2)), true + return compareResult(bytes.Compare(bytesObj1, bytesObj2)), true } case reflect.Uintptr: { @@ -381,7 +390,7 @@ func Greater(t TestingT, e1 interface{}, e2 interface{}, msgAndArgs ...interface if h, ok := t.(tHelper); ok { h.Helper() } - return compareTwoValues(t, e1, e2, []CompareType{compareGreater}, "\"%v\" is not greater than \"%v\"", msgAndArgs...) + return compareTwoValues(t, e1, e2, []compareResult{compareGreater}, "\"%v\" is not greater than \"%v\"", msgAndArgs...) } // GreaterOrEqual asserts that the first element is greater than or equal to the second @@ -394,7 +403,7 @@ func GreaterOrEqual(t TestingT, e1 interface{}, e2 interface{}, msgAndArgs ...in if h, ok := t.(tHelper); ok { h.Helper() } - return compareTwoValues(t, e1, e2, []CompareType{compareGreater, compareEqual}, "\"%v\" is not greater than or equal to \"%v\"", msgAndArgs...) + return compareTwoValues(t, e1, e2, []compareResult{compareGreater, compareEqual}, "\"%v\" is not greater than or equal to \"%v\"", msgAndArgs...) } // Less asserts that the first element is less than the second @@ -406,7 +415,7 @@ func Less(t TestingT, e1 interface{}, e2 interface{}, msgAndArgs ...interface{}) if h, ok := t.(tHelper); ok { h.Helper() } - return compareTwoValues(t, e1, e2, []CompareType{compareLess}, "\"%v\" is not less than \"%v\"", msgAndArgs...) + return compareTwoValues(t, e1, e2, []compareResult{compareLess}, "\"%v\" is not less than \"%v\"", msgAndArgs...) } // LessOrEqual asserts that the first element is less than or equal to the second @@ -419,7 +428,7 @@ func LessOrEqual(t TestingT, e1 interface{}, e2 interface{}, msgAndArgs ...inter if h, ok := t.(tHelper); ok { h.Helper() } - return compareTwoValues(t, e1, e2, []CompareType{compareLess, compareEqual}, "\"%v\" is not less than or equal to \"%v\"", msgAndArgs...) + return compareTwoValues(t, e1, e2, []compareResult{compareLess, compareEqual}, "\"%v\" is not less than or equal to \"%v\"", msgAndArgs...) } // Positive asserts that the specified element is positive @@ -431,7 +440,7 @@ func Positive(t TestingT, e interface{}, msgAndArgs ...interface{}) bool { h.Helper() } zero := reflect.Zero(reflect.TypeOf(e)) - return compareTwoValues(t, e, zero.Interface(), []CompareType{compareGreater}, "\"%v\" is not positive", msgAndArgs...) + return compareTwoValues(t, e, zero.Interface(), []compareResult{compareGreater}, "\"%v\" is not positive", msgAndArgs...) } // Negative asserts that the specified element is negative @@ -443,10 +452,10 @@ func Negative(t TestingT, e interface{}, msgAndArgs ...interface{}) bool { h.Helper() } zero := reflect.Zero(reflect.TypeOf(e)) - return compareTwoValues(t, e, zero.Interface(), []CompareType{compareLess}, "\"%v\" is not negative", msgAndArgs...) + return compareTwoValues(t, e, zero.Interface(), []compareResult{compareLess}, "\"%v\" is not negative", msgAndArgs...) } -func compareTwoValues(t TestingT, e1 interface{}, e2 interface{}, allowedComparesResults []CompareType, failMessage string, msgAndArgs ...interface{}) bool { +func compareTwoValues(t TestingT, e1 interface{}, e2 interface{}, allowedComparesResults []compareResult, failMessage string, msgAndArgs ...interface{}) bool { if h, ok := t.(tHelper); ok { h.Helper() } @@ -469,7 +478,7 @@ func compareTwoValues(t TestingT, e1 interface{}, e2 interface{}, allowedCompare return true } -func containsValue(values []CompareType, value CompareType) bool { +func containsValue(values []compareResult, value compareResult) bool { for _, v := range values { if v == value { return true diff --git a/vendor/github.com/stretchr/testify/assert/assertion_format.go b/vendor/github.com/stretchr/testify/assert/assertion_format.go index 3ddab109ad..1906341657 100644 --- a/vendor/github.com/stretchr/testify/assert/assertion_format.go +++ b/vendor/github.com/stretchr/testify/assert/assertion_format.go @@ -104,8 +104,8 @@ func EqualExportedValuesf(t TestingT, expected interface{}, actual interface{}, return EqualExportedValues(t, expected, actual, append([]interface{}{msg}, args...)...) } -// EqualValuesf asserts that two objects are equal or convertible to the same types -// and equal. +// EqualValuesf asserts that two objects are equal or convertible to the larger +// type and equal. // // assert.EqualValuesf(t, uint32(123), int32(123), "error message %s", "formatted") func EqualValuesf(t TestingT, expected interface{}, actual interface{}, msg string, args ...interface{}) bool { @@ -186,7 +186,7 @@ func Eventuallyf(t TestingT, condition func() bool, waitFor time.Duration, tick // assert.EventuallyWithTf(t, func(c *assert.CollectT, "error message %s", "formatted") { // // add assertions as needed; any assertion failure will fail the current tick // assert.True(c, externalValue, "expected 'externalValue' to be true") -// }, 1*time.Second, 10*time.Second, "external state has not changed to 'true'; still false") +// }, 10*time.Second, 1*time.Second, "external state has not changed to 'true'; still false") func EventuallyWithTf(t TestingT, condition func(collect *CollectT), waitFor time.Duration, tick time.Duration, msg string, args ...interface{}) bool { if h, ok := t.(tHelper); ok { h.Helper() @@ -568,6 +568,23 @@ func NotContainsf(t TestingT, s interface{}, contains interface{}, msg string, a return NotContains(t, s, contains, append([]interface{}{msg}, args...)...) } +// NotElementsMatchf asserts that the specified listA(array, slice...) is NOT equal to specified +// listB(array, slice...) ignoring the order of the elements. If there are duplicate elements, +// the number of appearances of each of them in both lists should not match. +// This is an inverse of ElementsMatch. +// +// assert.NotElementsMatchf(t, [1, 1, 2, 3], [1, 1, 2, 3], "error message %s", "formatted") -> false +// +// assert.NotElementsMatchf(t, [1, 1, 2, 3], [1, 2, 3], "error message %s", "formatted") -> true +// +// assert.NotElementsMatchf(t, [1, 2, 3], [1, 2, 4], "error message %s", "formatted") -> true +func NotElementsMatchf(t TestingT, listA interface{}, listB interface{}, msg string, args ...interface{}) bool { + if h, ok := t.(tHelper); ok { + h.Helper() + } + return NotElementsMatch(t, listA, listB, append([]interface{}{msg}, args...)...) +} + // NotEmptyf asserts that the specified object is NOT empty. I.e. not nil, "", false, 0 or either // a slice or a channel with len == 0. // @@ -604,7 +621,16 @@ func NotEqualValuesf(t TestingT, expected interface{}, actual interface{}, msg s return NotEqualValues(t, expected, actual, append([]interface{}{msg}, args...)...) } -// NotErrorIsf asserts that at none of the errors in err's chain matches target. +// NotErrorAsf asserts that none of the errors in err's chain matches target, +// but if so, sets target to that error value. +func NotErrorAsf(t TestingT, err error, target interface{}, msg string, args ...interface{}) bool { + if h, ok := t.(tHelper); ok { + h.Helper() + } + return NotErrorAs(t, err, target, append([]interface{}{msg}, args...)...) +} + +// NotErrorIsf asserts that none of the errors in err's chain matches target. // This is a wrapper for errors.Is. func NotErrorIsf(t TestingT, err error, target error, msg string, args ...interface{}) bool { if h, ok := t.(tHelper); ok { diff --git a/vendor/github.com/stretchr/testify/assert/assertion_forward.go b/vendor/github.com/stretchr/testify/assert/assertion_forward.go index a84e09bd40..21629087ba 100644 --- a/vendor/github.com/stretchr/testify/assert/assertion_forward.go +++ b/vendor/github.com/stretchr/testify/assert/assertion_forward.go @@ -186,8 +186,8 @@ func (a *Assertions) EqualExportedValuesf(expected interface{}, actual interface return EqualExportedValuesf(a.t, expected, actual, msg, args...) } -// EqualValues asserts that two objects are equal or convertible to the same types -// and equal. +// EqualValues asserts that two objects are equal or convertible to the larger +// type and equal. // // a.EqualValues(uint32(123), int32(123)) func (a *Assertions) EqualValues(expected interface{}, actual interface{}, msgAndArgs ...interface{}) bool { @@ -197,8 +197,8 @@ func (a *Assertions) EqualValues(expected interface{}, actual interface{}, msgAn return EqualValues(a.t, expected, actual, msgAndArgs...) } -// EqualValuesf asserts that two objects are equal or convertible to the same types -// and equal. +// EqualValuesf asserts that two objects are equal or convertible to the larger +// type and equal. // // a.EqualValuesf(uint32(123), int32(123), "error message %s", "formatted") func (a *Assertions) EqualValuesf(expected interface{}, actual interface{}, msg string, args ...interface{}) bool { @@ -336,7 +336,7 @@ func (a *Assertions) Eventually(condition func() bool, waitFor time.Duration, ti // a.EventuallyWithT(func(c *assert.CollectT) { // // add assertions as needed; any assertion failure will fail the current tick // assert.True(c, externalValue, "expected 'externalValue' to be true") -// }, 1*time.Second, 10*time.Second, "external state has not changed to 'true'; still false") +// }, 10*time.Second, 1*time.Second, "external state has not changed to 'true'; still false") func (a *Assertions) EventuallyWithT(condition func(collect *CollectT), waitFor time.Duration, tick time.Duration, msgAndArgs ...interface{}) bool { if h, ok := a.t.(tHelper); ok { h.Helper() @@ -361,7 +361,7 @@ func (a *Assertions) EventuallyWithT(condition func(collect *CollectT), waitFor // a.EventuallyWithTf(func(c *assert.CollectT, "error message %s", "formatted") { // // add assertions as needed; any assertion failure will fail the current tick // assert.True(c, externalValue, "expected 'externalValue' to be true") -// }, 1*time.Second, 10*time.Second, "external state has not changed to 'true'; still false") +// }, 10*time.Second, 1*time.Second, "external state has not changed to 'true'; still false") func (a *Assertions) EventuallyWithTf(condition func(collect *CollectT), waitFor time.Duration, tick time.Duration, msg string, args ...interface{}) bool { if h, ok := a.t.(tHelper); ok { h.Helper() @@ -1128,6 +1128,40 @@ func (a *Assertions) NotContainsf(s interface{}, contains interface{}, msg strin return NotContainsf(a.t, s, contains, msg, args...) } +// NotElementsMatch asserts that the specified listA(array, slice...) is NOT equal to specified +// listB(array, slice...) ignoring the order of the elements. If there are duplicate elements, +// the number of appearances of each of them in both lists should not match. +// This is an inverse of ElementsMatch. +// +// a.NotElementsMatch([1, 1, 2, 3], [1, 1, 2, 3]) -> false +// +// a.NotElementsMatch([1, 1, 2, 3], [1, 2, 3]) -> true +// +// a.NotElementsMatch([1, 2, 3], [1, 2, 4]) -> true +func (a *Assertions) NotElementsMatch(listA interface{}, listB interface{}, msgAndArgs ...interface{}) bool { + if h, ok := a.t.(tHelper); ok { + h.Helper() + } + return NotElementsMatch(a.t, listA, listB, msgAndArgs...) +} + +// NotElementsMatchf asserts that the specified listA(array, slice...) is NOT equal to specified +// listB(array, slice...) ignoring the order of the elements. If there are duplicate elements, +// the number of appearances of each of them in both lists should not match. +// This is an inverse of ElementsMatch. +// +// a.NotElementsMatchf([1, 1, 2, 3], [1, 1, 2, 3], "error message %s", "formatted") -> false +// +// a.NotElementsMatchf([1, 1, 2, 3], [1, 2, 3], "error message %s", "formatted") -> true +// +// a.NotElementsMatchf([1, 2, 3], [1, 2, 4], "error message %s", "formatted") -> true +func (a *Assertions) NotElementsMatchf(listA interface{}, listB interface{}, msg string, args ...interface{}) bool { + if h, ok := a.t.(tHelper); ok { + h.Helper() + } + return NotElementsMatchf(a.t, listA, listB, msg, args...) +} + // NotEmpty asserts that the specified object is NOT empty. I.e. not nil, "", false, 0 or either // a slice or a channel with len == 0. // @@ -1200,7 +1234,25 @@ func (a *Assertions) NotEqualf(expected interface{}, actual interface{}, msg str return NotEqualf(a.t, expected, actual, msg, args...) } -// NotErrorIs asserts that at none of the errors in err's chain matches target. +// NotErrorAs asserts that none of the errors in err's chain matches target, +// but if so, sets target to that error value. +func (a *Assertions) NotErrorAs(err error, target interface{}, msgAndArgs ...interface{}) bool { + if h, ok := a.t.(tHelper); ok { + h.Helper() + } + return NotErrorAs(a.t, err, target, msgAndArgs...) +} + +// NotErrorAsf asserts that none of the errors in err's chain matches target, +// but if so, sets target to that error value. +func (a *Assertions) NotErrorAsf(err error, target interface{}, msg string, args ...interface{}) bool { + if h, ok := a.t.(tHelper); ok { + h.Helper() + } + return NotErrorAsf(a.t, err, target, msg, args...) +} + +// NotErrorIs asserts that none of the errors in err's chain matches target. // This is a wrapper for errors.Is. func (a *Assertions) NotErrorIs(err error, target error, msgAndArgs ...interface{}) bool { if h, ok := a.t.(tHelper); ok { @@ -1209,7 +1261,7 @@ func (a *Assertions) NotErrorIs(err error, target error, msgAndArgs ...interface return NotErrorIs(a.t, err, target, msgAndArgs...) } -// NotErrorIsf asserts that at none of the errors in err's chain matches target. +// NotErrorIsf asserts that none of the errors in err's chain matches target. // This is a wrapper for errors.Is. func (a *Assertions) NotErrorIsf(err error, target error, msg string, args ...interface{}) bool { if h, ok := a.t.(tHelper); ok { diff --git a/vendor/github.com/stretchr/testify/assert/assertion_order.go b/vendor/github.com/stretchr/testify/assert/assertion_order.go index 00df62a059..1d2f71824a 100644 --- a/vendor/github.com/stretchr/testify/assert/assertion_order.go +++ b/vendor/github.com/stretchr/testify/assert/assertion_order.go @@ -6,7 +6,7 @@ import ( ) // isOrdered checks that collection contains orderable elements. -func isOrdered(t TestingT, object interface{}, allowedComparesResults []CompareType, failMessage string, msgAndArgs ...interface{}) bool { +func isOrdered(t TestingT, object interface{}, allowedComparesResults []compareResult, failMessage string, msgAndArgs ...interface{}) bool { objKind := reflect.TypeOf(object).Kind() if objKind != reflect.Slice && objKind != reflect.Array { return false @@ -50,7 +50,7 @@ func isOrdered(t TestingT, object interface{}, allowedComparesResults []CompareT // assert.IsIncreasing(t, []float{1, 2}) // assert.IsIncreasing(t, []string{"a", "b"}) func IsIncreasing(t TestingT, object interface{}, msgAndArgs ...interface{}) bool { - return isOrdered(t, object, []CompareType{compareLess}, "\"%v\" is not less than \"%v\"", msgAndArgs...) + return isOrdered(t, object, []compareResult{compareLess}, "\"%v\" is not less than \"%v\"", msgAndArgs...) } // IsNonIncreasing asserts that the collection is not increasing @@ -59,7 +59,7 @@ func IsIncreasing(t TestingT, object interface{}, msgAndArgs ...interface{}) boo // assert.IsNonIncreasing(t, []float{2, 1}) // assert.IsNonIncreasing(t, []string{"b", "a"}) func IsNonIncreasing(t TestingT, object interface{}, msgAndArgs ...interface{}) bool { - return isOrdered(t, object, []CompareType{compareEqual, compareGreater}, "\"%v\" is not greater than or equal to \"%v\"", msgAndArgs...) + return isOrdered(t, object, []compareResult{compareEqual, compareGreater}, "\"%v\" is not greater than or equal to \"%v\"", msgAndArgs...) } // IsDecreasing asserts that the collection is decreasing @@ -68,7 +68,7 @@ func IsNonIncreasing(t TestingT, object interface{}, msgAndArgs ...interface{}) // assert.IsDecreasing(t, []float{2, 1}) // assert.IsDecreasing(t, []string{"b", "a"}) func IsDecreasing(t TestingT, object interface{}, msgAndArgs ...interface{}) bool { - return isOrdered(t, object, []CompareType{compareGreater}, "\"%v\" is not greater than \"%v\"", msgAndArgs...) + return isOrdered(t, object, []compareResult{compareGreater}, "\"%v\" is not greater than \"%v\"", msgAndArgs...) } // IsNonDecreasing asserts that the collection is not decreasing @@ -77,5 +77,5 @@ func IsDecreasing(t TestingT, object interface{}, msgAndArgs ...interface{}) boo // assert.IsNonDecreasing(t, []float{1, 2}) // assert.IsNonDecreasing(t, []string{"a", "b"}) func IsNonDecreasing(t TestingT, object interface{}, msgAndArgs ...interface{}) bool { - return isOrdered(t, object, []CompareType{compareLess, compareEqual}, "\"%v\" is not less than or equal to \"%v\"", msgAndArgs...) + return isOrdered(t, object, []compareResult{compareLess, compareEqual}, "\"%v\" is not less than or equal to \"%v\"", msgAndArgs...) } diff --git a/vendor/github.com/stretchr/testify/assert/assertions.go b/vendor/github.com/stretchr/testify/assert/assertions.go index 0b7570f21c..4e91332bb5 100644 --- a/vendor/github.com/stretchr/testify/assert/assertions.go +++ b/vendor/github.com/stretchr/testify/assert/assertions.go @@ -19,7 +19,9 @@ import ( "github.com/davecgh/go-spew/spew" "github.com/pmezard/go-difflib/difflib" - "gopkg.in/yaml.v3" + + // Wrapper around gopkg.in/yaml.v3 + "github.com/stretchr/testify/assert/yaml" ) //go:generate sh -c "cd ../_codegen && go build && cd - && ../_codegen/_codegen -output-package=assert -template=assertion_format.go.tmpl" @@ -45,6 +47,10 @@ type BoolAssertionFunc func(TestingT, bool, ...interface{}) bool // for table driven tests. type ErrorAssertionFunc func(TestingT, error, ...interface{}) bool +// PanicAssertionFunc is a common function prototype when validating a panic value. Can be useful +// for table driven tests. +type PanicAssertionFunc = func(t TestingT, f PanicTestFunc, msgAndArgs ...interface{}) bool + // Comparison is a custom function that returns true on success and false on failure type Comparison func() (success bool) @@ -496,7 +502,13 @@ func Same(t TestingT, expected, actual interface{}, msgAndArgs ...interface{}) b h.Helper() } - if !samePointers(expected, actual) { + same, ok := samePointers(expected, actual) + if !ok { + return Fail(t, "Both arguments must be pointers", msgAndArgs...) + } + + if !same { + // both are pointers but not the same type & pointing to the same address return Fail(t, fmt.Sprintf("Not same: \n"+ "expected: %p %#v\n"+ "actual : %p %#v", expected, expected, actual, actual), msgAndArgs...) @@ -516,7 +528,13 @@ func NotSame(t TestingT, expected, actual interface{}, msgAndArgs ...interface{} h.Helper() } - if samePointers(expected, actual) { + same, ok := samePointers(expected, actual) + if !ok { + //fails when the arguments are not pointers + return !(Fail(t, "Both arguments must be pointers", msgAndArgs...)) + } + + if same { return Fail(t, fmt.Sprintf( "Expected and actual point to the same object: %p %#v", expected, expected), msgAndArgs...) @@ -524,21 +542,23 @@ func NotSame(t TestingT, expected, actual interface{}, msgAndArgs ...interface{} return true } -// samePointers compares two generic interface objects and returns whether -// they point to the same object -func samePointers(first, second interface{}) bool { +// samePointers checks if two generic interface objects are pointers of the same +// type pointing to the same object. It returns two values: same indicating if +// they are the same type and point to the same object, and ok indicating that +// both inputs are pointers. +func samePointers(first, second interface{}) (same bool, ok bool) { firstPtr, secondPtr := reflect.ValueOf(first), reflect.ValueOf(second) if firstPtr.Kind() != reflect.Ptr || secondPtr.Kind() != reflect.Ptr { - return false + return false, false //not both are pointers } firstType, secondType := reflect.TypeOf(first), reflect.TypeOf(second) if firstType != secondType { - return false + return false, true // both are pointers, but of different types } // compare pointer addresses - return first == second + return first == second, true } // formatUnequalValues takes two values of arbitrary types and returns string @@ -572,8 +592,8 @@ func truncatingFormat(data interface{}) string { return value } -// EqualValues asserts that two objects are equal or convertible to the same types -// and equal. +// EqualValues asserts that two objects are equal or convertible to the larger +// type and equal. // // assert.EqualValues(t, uint32(123), int32(123)) func EqualValues(t TestingT, expected, actual interface{}, msgAndArgs ...interface{}) bool { @@ -615,21 +635,6 @@ func EqualExportedValues(t TestingT, expected, actual interface{}, msgAndArgs .. return Fail(t, fmt.Sprintf("Types expected to match exactly\n\t%v != %v", aType, bType), msgAndArgs...) } - if aType.Kind() == reflect.Ptr { - aType = aType.Elem() - } - if bType.Kind() == reflect.Ptr { - bType = bType.Elem() - } - - if aType.Kind() != reflect.Struct { - return Fail(t, fmt.Sprintf("Types expected to both be struct or pointer to struct \n\t%v != %v", aType.Kind(), reflect.Struct), msgAndArgs...) - } - - if bType.Kind() != reflect.Struct { - return Fail(t, fmt.Sprintf("Types expected to both be struct or pointer to struct \n\t%v != %v", bType.Kind(), reflect.Struct), msgAndArgs...) - } - expected = copyExportedFields(expected) actual = copyExportedFields(actual) @@ -1170,6 +1175,39 @@ func formatListDiff(listA, listB interface{}, extraA, extraB []interface{}) stri return msg.String() } +// NotElementsMatch asserts that the specified listA(array, slice...) is NOT equal to specified +// listB(array, slice...) ignoring the order of the elements. If there are duplicate elements, +// the number of appearances of each of them in both lists should not match. +// This is an inverse of ElementsMatch. +// +// assert.NotElementsMatch(t, [1, 1, 2, 3], [1, 1, 2, 3]) -> false +// +// assert.NotElementsMatch(t, [1, 1, 2, 3], [1, 2, 3]) -> true +// +// assert.NotElementsMatch(t, [1, 2, 3], [1, 2, 4]) -> true +func NotElementsMatch(t TestingT, listA, listB interface{}, msgAndArgs ...interface{}) (ok bool) { + if h, ok := t.(tHelper); ok { + h.Helper() + } + if isEmpty(listA) && isEmpty(listB) { + return Fail(t, "listA and listB contain the same elements", msgAndArgs) + } + + if !isList(t, listA, msgAndArgs...) { + return Fail(t, "listA is not a list type", msgAndArgs...) + } + if !isList(t, listB, msgAndArgs...) { + return Fail(t, "listB is not a list type", msgAndArgs...) + } + + extraA, extraB := diffLists(listA, listB) + if len(extraA) == 0 && len(extraB) == 0 { + return Fail(t, "listA and listB contain the same elements", msgAndArgs) + } + + return true +} + // Condition uses a Comparison to assert a complex condition. func Condition(t TestingT, comp Comparison, msgAndArgs ...interface{}) bool { if h, ok := t.(tHelper); ok { @@ -1488,6 +1526,9 @@ func InEpsilon(t TestingT, expected, actual interface{}, epsilon float64, msgAnd if err != nil { return Fail(t, err.Error(), msgAndArgs...) } + if math.IsNaN(actualEpsilon) { + return Fail(t, "relative error is NaN", msgAndArgs...) + } if actualEpsilon > epsilon { return Fail(t, fmt.Sprintf("Relative error is too high: %#v (expected)\n"+ " < %#v (actual)", epsilon, actualEpsilon), msgAndArgs...) @@ -1611,7 +1652,6 @@ func ErrorContains(t TestingT, theError error, contains string, msgAndArgs ...in // matchRegexp return true if a specified regexp matches a string. func matchRegexp(rx interface{}, str interface{}) bool { - var r *regexp.Regexp if rr, ok := rx.(*regexp.Regexp); ok { r = rr @@ -1619,7 +1659,14 @@ func matchRegexp(rx interface{}, str interface{}) bool { r = regexp.MustCompile(fmt.Sprint(rx)) } - return (r.FindStringIndex(fmt.Sprint(str)) != nil) + switch v := str.(type) { + case []byte: + return r.Match(v) + case string: + return r.MatchString(v) + default: + return r.MatchString(fmt.Sprint(v)) + } } @@ -1872,7 +1919,7 @@ var spewConfigStringerEnabled = spew.ConfigState{ MaxDepth: 10, } -type tHelper interface { +type tHelper = interface { Helper() } @@ -1911,6 +1958,9 @@ func Eventually(t TestingT, condition func() bool, waitFor time.Duration, tick t // CollectT implements the TestingT interface and collects all errors. type CollectT struct { + // A slice of errors. Non-nil slice denotes a failure. + // If it's non-nil but len(c.errors) == 0, this is also a failure + // obtained by direct c.FailNow() call. errors []error } @@ -1919,9 +1969,10 @@ func (c *CollectT) Errorf(format string, args ...interface{}) { c.errors = append(c.errors, fmt.Errorf(format, args...)) } -// FailNow panics. -func (*CollectT) FailNow() { - panic("Assertion failed") +// FailNow stops execution by calling runtime.Goexit. +func (c *CollectT) FailNow() { + c.fail() + runtime.Goexit() } // Deprecated: That was a method for internal usage that should not have been published. Now just panics. @@ -1934,6 +1985,16 @@ func (*CollectT) Copy(TestingT) { panic("Copy() is deprecated") } +func (c *CollectT) fail() { + if !c.failed() { + c.errors = []error{} // Make it non-nil to mark a failure. + } +} + +func (c *CollectT) failed() bool { + return c.errors != nil +} + // EventuallyWithT asserts that given condition will be met in waitFor time, // periodically checking target function each tick. In contrast to Eventually, // it supplies a CollectT to the condition function, so that the condition @@ -1951,14 +2012,14 @@ func (*CollectT) Copy(TestingT) { // assert.EventuallyWithT(t, func(c *assert.CollectT) { // // add assertions as needed; any assertion failure will fail the current tick // assert.True(c, externalValue, "expected 'externalValue' to be true") -// }, 1*time.Second, 10*time.Second, "external state has not changed to 'true'; still false") +// }, 10*time.Second, 1*time.Second, "external state has not changed to 'true'; still false") func EventuallyWithT(t TestingT, condition func(collect *CollectT), waitFor time.Duration, tick time.Duration, msgAndArgs ...interface{}) bool { if h, ok := t.(tHelper); ok { h.Helper() } var lastFinishedTickErrs []error - ch := make(chan []error, 1) + ch := make(chan *CollectT, 1) timer := time.NewTimer(waitFor) defer timer.Stop() @@ -1978,16 +2039,16 @@ func EventuallyWithT(t TestingT, condition func(collect *CollectT), waitFor time go func() { collect := new(CollectT) defer func() { - ch <- collect.errors + ch <- collect }() condition(collect) }() - case errs := <-ch: - if len(errs) == 0 { + case collect := <-ch: + if !collect.failed() { return true } // Keep the errors from the last ended condition, so that they can be copied to t if timeout is reached. - lastFinishedTickErrs = errs + lastFinishedTickErrs = collect.errors tick = ticker.C } } @@ -2049,7 +2110,7 @@ func ErrorIs(t TestingT, err, target error, msgAndArgs ...interface{}) bool { ), msgAndArgs...) } -// NotErrorIs asserts that at none of the errors in err's chain matches target. +// NotErrorIs asserts that none of the errors in err's chain matches target. // This is a wrapper for errors.Is. func NotErrorIs(t TestingT, err, target error, msgAndArgs ...interface{}) bool { if h, ok := t.(tHelper); ok { @@ -2090,6 +2151,24 @@ func ErrorAs(t TestingT, err error, target interface{}, msgAndArgs ...interface{ ), msgAndArgs...) } +// NotErrorAs asserts that none of the errors in err's chain matches target, +// but if so, sets target to that error value. +func NotErrorAs(t TestingT, err error, target interface{}, msgAndArgs ...interface{}) bool { + if h, ok := t.(tHelper); ok { + h.Helper() + } + if !errors.As(err, target) { + return true + } + + chain := buildErrorChainString(err) + + return Fail(t, fmt.Sprintf("Target error should not be in err chain:\n"+ + "found: %q\n"+ + "in chain: %s", target, chain, + ), msgAndArgs...) +} + func buildErrorChainString(err error) string { if err == nil { return "" diff --git a/vendor/github.com/stretchr/testify/assert/yaml/yaml_custom.go b/vendor/github.com/stretchr/testify/assert/yaml/yaml_custom.go new file mode 100644 index 0000000000..baa0cc7d7f --- /dev/null +++ b/vendor/github.com/stretchr/testify/assert/yaml/yaml_custom.go @@ -0,0 +1,25 @@ +//go:build testify_yaml_custom && !testify_yaml_fail && !testify_yaml_default +// +build testify_yaml_custom,!testify_yaml_fail,!testify_yaml_default + +// Package yaml is an implementation of YAML functions that calls a pluggable implementation. +// +// This implementation is selected with the testify_yaml_custom build tag. +// +// go test -tags testify_yaml_custom +// +// This implementation can be used at build time to replace the default implementation +// to avoid linking with [gopkg.in/yaml.v3]. +// +// In your test package: +// +// import assertYaml "github.com/stretchr/testify/assert/yaml" +// +// func init() { +// assertYaml.Unmarshal = func (in []byte, out interface{}) error { +// // ... +// return nil +// } +// } +package yaml + +var Unmarshal func(in []byte, out interface{}) error diff --git a/vendor/github.com/stretchr/testify/assert/yaml/yaml_default.go b/vendor/github.com/stretchr/testify/assert/yaml/yaml_default.go new file mode 100644 index 0000000000..b83c6cf64c --- /dev/null +++ b/vendor/github.com/stretchr/testify/assert/yaml/yaml_default.go @@ -0,0 +1,37 @@ +//go:build !testify_yaml_fail && !testify_yaml_custom +// +build !testify_yaml_fail,!testify_yaml_custom + +// Package yaml is just an indirection to handle YAML deserialization. +// +// This package is just an indirection that allows the builder to override the +// indirection with an alternative implementation of this package that uses +// another implementation of YAML deserialization. This allows to not either not +// use YAML deserialization at all, or to use another implementation than +// [gopkg.in/yaml.v3] (for example for license compatibility reasons, see [PR #1120]). +// +// Alternative implementations are selected using build tags: +// +// - testify_yaml_fail: [Unmarshal] always fails with an error +// - testify_yaml_custom: [Unmarshal] is a variable. Caller must initialize it +// before calling any of [github.com/stretchr/testify/assert.YAMLEq] or +// [github.com/stretchr/testify/assert.YAMLEqf]. +// +// Usage: +// +// go test -tags testify_yaml_fail +// +// You can check with "go list" which implementation is linked: +// +// go list -f '{{.Imports}}' github.com/stretchr/testify/assert/yaml +// go list -tags testify_yaml_fail -f '{{.Imports}}' github.com/stretchr/testify/assert/yaml +// go list -tags testify_yaml_custom -f '{{.Imports}}' github.com/stretchr/testify/assert/yaml +// +// [PR #1120]: https://github.com/stretchr/testify/pull/1120 +package yaml + +import goyaml "gopkg.in/yaml.v3" + +// Unmarshal is just a wrapper of [gopkg.in/yaml.v3.Unmarshal]. +func Unmarshal(in []byte, out interface{}) error { + return goyaml.Unmarshal(in, out) +} diff --git a/vendor/github.com/stretchr/testify/assert/yaml/yaml_fail.go b/vendor/github.com/stretchr/testify/assert/yaml/yaml_fail.go new file mode 100644 index 0000000000..e78f7dfe69 --- /dev/null +++ b/vendor/github.com/stretchr/testify/assert/yaml/yaml_fail.go @@ -0,0 +1,18 @@ +//go:build testify_yaml_fail && !testify_yaml_custom && !testify_yaml_default +// +build testify_yaml_fail,!testify_yaml_custom,!testify_yaml_default + +// Package yaml is an implementation of YAML functions that always fail. +// +// This implementation can be used at build time to replace the default implementation +// to avoid linking with [gopkg.in/yaml.v3]: +// +// go test -tags testify_yaml_fail +package yaml + +import "errors" + +var errNotImplemented = errors.New("YAML functions are not available (see https://pkg.go.dev/github.com/stretchr/testify/assert/yaml)") + +func Unmarshal([]byte, interface{}) error { + return errNotImplemented +} diff --git a/vendor/github.com/stretchr/testify/require/require.go b/vendor/github.com/stretchr/testify/require/require.go index 506a82f807..d8921950d7 100644 --- a/vendor/github.com/stretchr/testify/require/require.go +++ b/vendor/github.com/stretchr/testify/require/require.go @@ -34,9 +34,9 @@ func Conditionf(t TestingT, comp assert.Comparison, msg string, args ...interfac // Contains asserts that the specified string, list(array, slice...) or map contains the // specified substring or element. // -// assert.Contains(t, "Hello World", "World") -// assert.Contains(t, ["Hello", "World"], "World") -// assert.Contains(t, {"Hello": "World"}, "Hello") +// require.Contains(t, "Hello World", "World") +// require.Contains(t, ["Hello", "World"], "World") +// require.Contains(t, {"Hello": "World"}, "Hello") func Contains(t TestingT, s interface{}, contains interface{}, msgAndArgs ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -50,9 +50,9 @@ func Contains(t TestingT, s interface{}, contains interface{}, msgAndArgs ...int // Containsf asserts that the specified string, list(array, slice...) or map contains the // specified substring or element. // -// assert.Containsf(t, "Hello World", "World", "error message %s", "formatted") -// assert.Containsf(t, ["Hello", "World"], "World", "error message %s", "formatted") -// assert.Containsf(t, {"Hello": "World"}, "Hello", "error message %s", "formatted") +// require.Containsf(t, "Hello World", "World", "error message %s", "formatted") +// require.Containsf(t, ["Hello", "World"], "World", "error message %s", "formatted") +// require.Containsf(t, {"Hello": "World"}, "Hello", "error message %s", "formatted") func Containsf(t TestingT, s interface{}, contains interface{}, msg string, args ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -91,7 +91,7 @@ func DirExistsf(t TestingT, path string, msg string, args ...interface{}) { // listB(array, slice...) ignoring the order of the elements. If there are duplicate elements, // the number of appearances of each of them in both lists should match. // -// assert.ElementsMatch(t, [1, 3, 2, 3], [1, 3, 3, 2]) +// require.ElementsMatch(t, [1, 3, 2, 3], [1, 3, 3, 2]) func ElementsMatch(t TestingT, listA interface{}, listB interface{}, msgAndArgs ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -106,7 +106,7 @@ func ElementsMatch(t TestingT, listA interface{}, listB interface{}, msgAndArgs // listB(array, slice...) ignoring the order of the elements. If there are duplicate elements, // the number of appearances of each of them in both lists should match. // -// assert.ElementsMatchf(t, [1, 3, 2, 3], [1, 3, 3, 2], "error message %s", "formatted") +// require.ElementsMatchf(t, [1, 3, 2, 3], [1, 3, 3, 2], "error message %s", "formatted") func ElementsMatchf(t TestingT, listA interface{}, listB interface{}, msg string, args ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -120,7 +120,7 @@ func ElementsMatchf(t TestingT, listA interface{}, listB interface{}, msg string // Empty asserts that the specified object is empty. I.e. nil, "", false, 0 or either // a slice or a channel with len == 0. // -// assert.Empty(t, obj) +// require.Empty(t, obj) func Empty(t TestingT, object interface{}, msgAndArgs ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -134,7 +134,7 @@ func Empty(t TestingT, object interface{}, msgAndArgs ...interface{}) { // Emptyf asserts that the specified object is empty. I.e. nil, "", false, 0 or either // a slice or a channel with len == 0. // -// assert.Emptyf(t, obj, "error message %s", "formatted") +// require.Emptyf(t, obj, "error message %s", "formatted") func Emptyf(t TestingT, object interface{}, msg string, args ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -147,7 +147,7 @@ func Emptyf(t TestingT, object interface{}, msg string, args ...interface{}) { // Equal asserts that two objects are equal. // -// assert.Equal(t, 123, 123) +// require.Equal(t, 123, 123) // // Pointer variable equality is determined based on the equality of the // referenced values (as opposed to the memory addresses). Function equality @@ -166,7 +166,7 @@ func Equal(t TestingT, expected interface{}, actual interface{}, msgAndArgs ...i // and that it is equal to the provided error. // // actualObj, err := SomeFunction() -// assert.EqualError(t, err, expectedErrorString) +// require.EqualError(t, err, expectedErrorString) func EqualError(t TestingT, theError error, errString string, msgAndArgs ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -181,7 +181,7 @@ func EqualError(t TestingT, theError error, errString string, msgAndArgs ...inte // and that it is equal to the provided error. // // actualObj, err := SomeFunction() -// assert.EqualErrorf(t, err, expectedErrorString, "error message %s", "formatted") +// require.EqualErrorf(t, err, expectedErrorString, "error message %s", "formatted") func EqualErrorf(t TestingT, theError error, errString string, msg string, args ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -200,8 +200,8 @@ func EqualErrorf(t TestingT, theError error, errString string, msg string, args // Exported int // notExported int // } -// assert.EqualExportedValues(t, S{1, 2}, S{1, 3}) => true -// assert.EqualExportedValues(t, S{1, 2}, S{2, 3}) => false +// require.EqualExportedValues(t, S{1, 2}, S{1, 3}) => true +// require.EqualExportedValues(t, S{1, 2}, S{2, 3}) => false func EqualExportedValues(t TestingT, expected interface{}, actual interface{}, msgAndArgs ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -220,8 +220,8 @@ func EqualExportedValues(t TestingT, expected interface{}, actual interface{}, m // Exported int // notExported int // } -// assert.EqualExportedValuesf(t, S{1, 2}, S{1, 3}, "error message %s", "formatted") => true -// assert.EqualExportedValuesf(t, S{1, 2}, S{2, 3}, "error message %s", "formatted") => false +// require.EqualExportedValuesf(t, S{1, 2}, S{1, 3}, "error message %s", "formatted") => true +// require.EqualExportedValuesf(t, S{1, 2}, S{2, 3}, "error message %s", "formatted") => false func EqualExportedValuesf(t TestingT, expected interface{}, actual interface{}, msg string, args ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -232,10 +232,10 @@ func EqualExportedValuesf(t TestingT, expected interface{}, actual interface{}, t.FailNow() } -// EqualValues asserts that two objects are equal or convertible to the same types -// and equal. +// EqualValues asserts that two objects are equal or convertible to the larger +// type and equal. // -// assert.EqualValues(t, uint32(123), int32(123)) +// require.EqualValues(t, uint32(123), int32(123)) func EqualValues(t TestingT, expected interface{}, actual interface{}, msgAndArgs ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -246,10 +246,10 @@ func EqualValues(t TestingT, expected interface{}, actual interface{}, msgAndArg t.FailNow() } -// EqualValuesf asserts that two objects are equal or convertible to the same types -// and equal. +// EqualValuesf asserts that two objects are equal or convertible to the larger +// type and equal. // -// assert.EqualValuesf(t, uint32(123), int32(123), "error message %s", "formatted") +// require.EqualValuesf(t, uint32(123), int32(123), "error message %s", "formatted") func EqualValuesf(t TestingT, expected interface{}, actual interface{}, msg string, args ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -262,7 +262,7 @@ func EqualValuesf(t TestingT, expected interface{}, actual interface{}, msg stri // Equalf asserts that two objects are equal. // -// assert.Equalf(t, 123, 123, "error message %s", "formatted") +// require.Equalf(t, 123, 123, "error message %s", "formatted") // // Pointer variable equality is determined based on the equality of the // referenced values (as opposed to the memory addresses). Function equality @@ -280,8 +280,8 @@ func Equalf(t TestingT, expected interface{}, actual interface{}, msg string, ar // Error asserts that a function returned an error (i.e. not `nil`). // // actualObj, err := SomeFunction() -// if assert.Error(t, err) { -// assert.Equal(t, expectedError, err) +// if require.Error(t, err) { +// require.Equal(t, expectedError, err) // } func Error(t TestingT, err error, msgAndArgs ...interface{}) { if h, ok := t.(tHelper); ok { @@ -321,7 +321,7 @@ func ErrorAsf(t TestingT, err error, target interface{}, msg string, args ...int // and that the error contains the specified substring. // // actualObj, err := SomeFunction() -// assert.ErrorContains(t, err, expectedErrorSubString) +// require.ErrorContains(t, err, expectedErrorSubString) func ErrorContains(t TestingT, theError error, contains string, msgAndArgs ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -336,7 +336,7 @@ func ErrorContains(t TestingT, theError error, contains string, msgAndArgs ...in // and that the error contains the specified substring. // // actualObj, err := SomeFunction() -// assert.ErrorContainsf(t, err, expectedErrorSubString, "error message %s", "formatted") +// require.ErrorContainsf(t, err, expectedErrorSubString, "error message %s", "formatted") func ErrorContainsf(t TestingT, theError error, contains string, msg string, args ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -374,8 +374,8 @@ func ErrorIsf(t TestingT, err error, target error, msg string, args ...interface // Errorf asserts that a function returned an error (i.e. not `nil`). // // actualObj, err := SomeFunction() -// if assert.Errorf(t, err, "error message %s", "formatted") { -// assert.Equal(t, expectedErrorf, err) +// if require.Errorf(t, err, "error message %s", "formatted") { +// require.Equal(t, expectedErrorf, err) // } func Errorf(t TestingT, err error, msg string, args ...interface{}) { if h, ok := t.(tHelper); ok { @@ -390,7 +390,7 @@ func Errorf(t TestingT, err error, msg string, args ...interface{}) { // Eventually asserts that given condition will be met in waitFor time, // periodically checking target function each tick. // -// assert.Eventually(t, func() bool { return true; }, time.Second, 10*time.Millisecond) +// require.Eventually(t, func() bool { return true; }, time.Second, 10*time.Millisecond) func Eventually(t TestingT, condition func() bool, waitFor time.Duration, tick time.Duration, msgAndArgs ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -415,10 +415,10 @@ func Eventually(t TestingT, condition func() bool, waitFor time.Duration, tick t // time.Sleep(8*time.Second) // externalValue = true // }() -// assert.EventuallyWithT(t, func(c *assert.CollectT) { +// require.EventuallyWithT(t, func(c *require.CollectT) { // // add assertions as needed; any assertion failure will fail the current tick -// assert.True(c, externalValue, "expected 'externalValue' to be true") -// }, 1*time.Second, 10*time.Second, "external state has not changed to 'true'; still false") +// require.True(c, externalValue, "expected 'externalValue' to be true") +// }, 10*time.Second, 1*time.Second, "external state has not changed to 'true'; still false") func EventuallyWithT(t TestingT, condition func(collect *assert.CollectT), waitFor time.Duration, tick time.Duration, msgAndArgs ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -443,10 +443,10 @@ func EventuallyWithT(t TestingT, condition func(collect *assert.CollectT), waitF // time.Sleep(8*time.Second) // externalValue = true // }() -// assert.EventuallyWithTf(t, func(c *assert.CollectT, "error message %s", "formatted") { +// require.EventuallyWithTf(t, func(c *require.CollectT, "error message %s", "formatted") { // // add assertions as needed; any assertion failure will fail the current tick -// assert.True(c, externalValue, "expected 'externalValue' to be true") -// }, 1*time.Second, 10*time.Second, "external state has not changed to 'true'; still false") +// require.True(c, externalValue, "expected 'externalValue' to be true") +// }, 10*time.Second, 1*time.Second, "external state has not changed to 'true'; still false") func EventuallyWithTf(t TestingT, condition func(collect *assert.CollectT), waitFor time.Duration, tick time.Duration, msg string, args ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -460,7 +460,7 @@ func EventuallyWithTf(t TestingT, condition func(collect *assert.CollectT), wait // Eventuallyf asserts that given condition will be met in waitFor time, // periodically checking target function each tick. // -// assert.Eventuallyf(t, func() bool { return true; }, time.Second, 10*time.Millisecond, "error message %s", "formatted") +// require.Eventuallyf(t, func() bool { return true; }, time.Second, 10*time.Millisecond, "error message %s", "formatted") func Eventuallyf(t TestingT, condition func() bool, waitFor time.Duration, tick time.Duration, msg string, args ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -473,7 +473,7 @@ func Eventuallyf(t TestingT, condition func() bool, waitFor time.Duration, tick // Exactly asserts that two objects are equal in value and type. // -// assert.Exactly(t, int32(123), int64(123)) +// require.Exactly(t, int32(123), int64(123)) func Exactly(t TestingT, expected interface{}, actual interface{}, msgAndArgs ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -486,7 +486,7 @@ func Exactly(t TestingT, expected interface{}, actual interface{}, msgAndArgs .. // Exactlyf asserts that two objects are equal in value and type. // -// assert.Exactlyf(t, int32(123), int64(123), "error message %s", "formatted") +// require.Exactlyf(t, int32(123), int64(123), "error message %s", "formatted") func Exactlyf(t TestingT, expected interface{}, actual interface{}, msg string, args ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -543,7 +543,7 @@ func Failf(t TestingT, failureMessage string, msg string, args ...interface{}) { // False asserts that the specified value is false. // -// assert.False(t, myBool) +// require.False(t, myBool) func False(t TestingT, value bool, msgAndArgs ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -556,7 +556,7 @@ func False(t TestingT, value bool, msgAndArgs ...interface{}) { // Falsef asserts that the specified value is false. // -// assert.Falsef(t, myBool, "error message %s", "formatted") +// require.Falsef(t, myBool, "error message %s", "formatted") func Falsef(t TestingT, value bool, msg string, args ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -593,9 +593,9 @@ func FileExistsf(t TestingT, path string, msg string, args ...interface{}) { // Greater asserts that the first element is greater than the second // -// assert.Greater(t, 2, 1) -// assert.Greater(t, float64(2), float64(1)) -// assert.Greater(t, "b", "a") +// require.Greater(t, 2, 1) +// require.Greater(t, float64(2), float64(1)) +// require.Greater(t, "b", "a") func Greater(t TestingT, e1 interface{}, e2 interface{}, msgAndArgs ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -608,10 +608,10 @@ func Greater(t TestingT, e1 interface{}, e2 interface{}, msgAndArgs ...interface // GreaterOrEqual asserts that the first element is greater than or equal to the second // -// assert.GreaterOrEqual(t, 2, 1) -// assert.GreaterOrEqual(t, 2, 2) -// assert.GreaterOrEqual(t, "b", "a") -// assert.GreaterOrEqual(t, "b", "b") +// require.GreaterOrEqual(t, 2, 1) +// require.GreaterOrEqual(t, 2, 2) +// require.GreaterOrEqual(t, "b", "a") +// require.GreaterOrEqual(t, "b", "b") func GreaterOrEqual(t TestingT, e1 interface{}, e2 interface{}, msgAndArgs ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -624,10 +624,10 @@ func GreaterOrEqual(t TestingT, e1 interface{}, e2 interface{}, msgAndArgs ...in // GreaterOrEqualf asserts that the first element is greater than or equal to the second // -// assert.GreaterOrEqualf(t, 2, 1, "error message %s", "formatted") -// assert.GreaterOrEqualf(t, 2, 2, "error message %s", "formatted") -// assert.GreaterOrEqualf(t, "b", "a", "error message %s", "formatted") -// assert.GreaterOrEqualf(t, "b", "b", "error message %s", "formatted") +// require.GreaterOrEqualf(t, 2, 1, "error message %s", "formatted") +// require.GreaterOrEqualf(t, 2, 2, "error message %s", "formatted") +// require.GreaterOrEqualf(t, "b", "a", "error message %s", "formatted") +// require.GreaterOrEqualf(t, "b", "b", "error message %s", "formatted") func GreaterOrEqualf(t TestingT, e1 interface{}, e2 interface{}, msg string, args ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -640,9 +640,9 @@ func GreaterOrEqualf(t TestingT, e1 interface{}, e2 interface{}, msg string, arg // Greaterf asserts that the first element is greater than the second // -// assert.Greaterf(t, 2, 1, "error message %s", "formatted") -// assert.Greaterf(t, float64(2), float64(1), "error message %s", "formatted") -// assert.Greaterf(t, "b", "a", "error message %s", "formatted") +// require.Greaterf(t, 2, 1, "error message %s", "formatted") +// require.Greaterf(t, float64(2), float64(1), "error message %s", "formatted") +// require.Greaterf(t, "b", "a", "error message %s", "formatted") func Greaterf(t TestingT, e1 interface{}, e2 interface{}, msg string, args ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -656,7 +656,7 @@ func Greaterf(t TestingT, e1 interface{}, e2 interface{}, msg string, args ...in // HTTPBodyContains asserts that a specified handler returns a // body that contains a string. // -// assert.HTTPBodyContains(t, myHandler, "GET", "www.google.com", nil, "I'm Feeling Lucky") +// require.HTTPBodyContains(t, myHandler, "GET", "www.google.com", nil, "I'm Feeling Lucky") // // Returns whether the assertion was successful (true) or not (false). func HTTPBodyContains(t TestingT, handler http.HandlerFunc, method string, url string, values url.Values, str interface{}, msgAndArgs ...interface{}) { @@ -672,7 +672,7 @@ func HTTPBodyContains(t TestingT, handler http.HandlerFunc, method string, url s // HTTPBodyContainsf asserts that a specified handler returns a // body that contains a string. // -// assert.HTTPBodyContainsf(t, myHandler, "GET", "www.google.com", nil, "I'm Feeling Lucky", "error message %s", "formatted") +// require.HTTPBodyContainsf(t, myHandler, "GET", "www.google.com", nil, "I'm Feeling Lucky", "error message %s", "formatted") // // Returns whether the assertion was successful (true) or not (false). func HTTPBodyContainsf(t TestingT, handler http.HandlerFunc, method string, url string, values url.Values, str interface{}, msg string, args ...interface{}) { @@ -688,7 +688,7 @@ func HTTPBodyContainsf(t TestingT, handler http.HandlerFunc, method string, url // HTTPBodyNotContains asserts that a specified handler returns a // body that does not contain a string. // -// assert.HTTPBodyNotContains(t, myHandler, "GET", "www.google.com", nil, "I'm Feeling Lucky") +// require.HTTPBodyNotContains(t, myHandler, "GET", "www.google.com", nil, "I'm Feeling Lucky") // // Returns whether the assertion was successful (true) or not (false). func HTTPBodyNotContains(t TestingT, handler http.HandlerFunc, method string, url string, values url.Values, str interface{}, msgAndArgs ...interface{}) { @@ -704,7 +704,7 @@ func HTTPBodyNotContains(t TestingT, handler http.HandlerFunc, method string, ur // HTTPBodyNotContainsf asserts that a specified handler returns a // body that does not contain a string. // -// assert.HTTPBodyNotContainsf(t, myHandler, "GET", "www.google.com", nil, "I'm Feeling Lucky", "error message %s", "formatted") +// require.HTTPBodyNotContainsf(t, myHandler, "GET", "www.google.com", nil, "I'm Feeling Lucky", "error message %s", "formatted") // // Returns whether the assertion was successful (true) or not (false). func HTTPBodyNotContainsf(t TestingT, handler http.HandlerFunc, method string, url string, values url.Values, str interface{}, msg string, args ...interface{}) { @@ -719,7 +719,7 @@ func HTTPBodyNotContainsf(t TestingT, handler http.HandlerFunc, method string, u // HTTPError asserts that a specified handler returns an error status code. // -// assert.HTTPError(t, myHandler, "POST", "/a/b/c", url.Values{"a": []string{"b", "c"}} +// require.HTTPError(t, myHandler, "POST", "/a/b/c", url.Values{"a": []string{"b", "c"}} // // Returns whether the assertion was successful (true) or not (false). func HTTPError(t TestingT, handler http.HandlerFunc, method string, url string, values url.Values, msgAndArgs ...interface{}) { @@ -734,7 +734,7 @@ func HTTPError(t TestingT, handler http.HandlerFunc, method string, url string, // HTTPErrorf asserts that a specified handler returns an error status code. // -// assert.HTTPErrorf(t, myHandler, "POST", "/a/b/c", url.Values{"a": []string{"b", "c"}} +// require.HTTPErrorf(t, myHandler, "POST", "/a/b/c", url.Values{"a": []string{"b", "c"}} // // Returns whether the assertion was successful (true) or not (false). func HTTPErrorf(t TestingT, handler http.HandlerFunc, method string, url string, values url.Values, msg string, args ...interface{}) { @@ -749,7 +749,7 @@ func HTTPErrorf(t TestingT, handler http.HandlerFunc, method string, url string, // HTTPRedirect asserts that a specified handler returns a redirect status code. // -// assert.HTTPRedirect(t, myHandler, "GET", "/a/b/c", url.Values{"a": []string{"b", "c"}} +// require.HTTPRedirect(t, myHandler, "GET", "/a/b/c", url.Values{"a": []string{"b", "c"}} // // Returns whether the assertion was successful (true) or not (false). func HTTPRedirect(t TestingT, handler http.HandlerFunc, method string, url string, values url.Values, msgAndArgs ...interface{}) { @@ -764,7 +764,7 @@ func HTTPRedirect(t TestingT, handler http.HandlerFunc, method string, url strin // HTTPRedirectf asserts that a specified handler returns a redirect status code. // -// assert.HTTPRedirectf(t, myHandler, "GET", "/a/b/c", url.Values{"a": []string{"b", "c"}} +// require.HTTPRedirectf(t, myHandler, "GET", "/a/b/c", url.Values{"a": []string{"b", "c"}} // // Returns whether the assertion was successful (true) or not (false). func HTTPRedirectf(t TestingT, handler http.HandlerFunc, method string, url string, values url.Values, msg string, args ...interface{}) { @@ -779,7 +779,7 @@ func HTTPRedirectf(t TestingT, handler http.HandlerFunc, method string, url stri // HTTPStatusCode asserts that a specified handler returns a specified status code. // -// assert.HTTPStatusCode(t, myHandler, "GET", "/notImplemented", nil, 501) +// require.HTTPStatusCode(t, myHandler, "GET", "/notImplemented", nil, 501) // // Returns whether the assertion was successful (true) or not (false). func HTTPStatusCode(t TestingT, handler http.HandlerFunc, method string, url string, values url.Values, statuscode int, msgAndArgs ...interface{}) { @@ -794,7 +794,7 @@ func HTTPStatusCode(t TestingT, handler http.HandlerFunc, method string, url str // HTTPStatusCodef asserts that a specified handler returns a specified status code. // -// assert.HTTPStatusCodef(t, myHandler, "GET", "/notImplemented", nil, 501, "error message %s", "formatted") +// require.HTTPStatusCodef(t, myHandler, "GET", "/notImplemented", nil, 501, "error message %s", "formatted") // // Returns whether the assertion was successful (true) or not (false). func HTTPStatusCodef(t TestingT, handler http.HandlerFunc, method string, url string, values url.Values, statuscode int, msg string, args ...interface{}) { @@ -809,7 +809,7 @@ func HTTPStatusCodef(t TestingT, handler http.HandlerFunc, method string, url st // HTTPSuccess asserts that a specified handler returns a success status code. // -// assert.HTTPSuccess(t, myHandler, "POST", "http://www.google.com", nil) +// require.HTTPSuccess(t, myHandler, "POST", "http://www.google.com", nil) // // Returns whether the assertion was successful (true) or not (false). func HTTPSuccess(t TestingT, handler http.HandlerFunc, method string, url string, values url.Values, msgAndArgs ...interface{}) { @@ -824,7 +824,7 @@ func HTTPSuccess(t TestingT, handler http.HandlerFunc, method string, url string // HTTPSuccessf asserts that a specified handler returns a success status code. // -// assert.HTTPSuccessf(t, myHandler, "POST", "http://www.google.com", nil, "error message %s", "formatted") +// require.HTTPSuccessf(t, myHandler, "POST", "http://www.google.com", nil, "error message %s", "formatted") // // Returns whether the assertion was successful (true) or not (false). func HTTPSuccessf(t TestingT, handler http.HandlerFunc, method string, url string, values url.Values, msg string, args ...interface{}) { @@ -839,7 +839,7 @@ func HTTPSuccessf(t TestingT, handler http.HandlerFunc, method string, url strin // Implements asserts that an object is implemented by the specified interface. // -// assert.Implements(t, (*MyInterface)(nil), new(MyObject)) +// require.Implements(t, (*MyInterface)(nil), new(MyObject)) func Implements(t TestingT, interfaceObject interface{}, object interface{}, msgAndArgs ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -852,7 +852,7 @@ func Implements(t TestingT, interfaceObject interface{}, object interface{}, msg // Implementsf asserts that an object is implemented by the specified interface. // -// assert.Implementsf(t, (*MyInterface)(nil), new(MyObject), "error message %s", "formatted") +// require.Implementsf(t, (*MyInterface)(nil), new(MyObject), "error message %s", "formatted") func Implementsf(t TestingT, interfaceObject interface{}, object interface{}, msg string, args ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -865,7 +865,7 @@ func Implementsf(t TestingT, interfaceObject interface{}, object interface{}, ms // InDelta asserts that the two numerals are within delta of each other. // -// assert.InDelta(t, math.Pi, 22/7.0, 0.01) +// require.InDelta(t, math.Pi, 22/7.0, 0.01) func InDelta(t TestingT, expected interface{}, actual interface{}, delta float64, msgAndArgs ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -922,7 +922,7 @@ func InDeltaSlicef(t TestingT, expected interface{}, actual interface{}, delta f // InDeltaf asserts that the two numerals are within delta of each other. // -// assert.InDeltaf(t, math.Pi, 22/7.0, 0.01, "error message %s", "formatted") +// require.InDeltaf(t, math.Pi, 22/7.0, 0.01, "error message %s", "formatted") func InDeltaf(t TestingT, expected interface{}, actual interface{}, delta float64, msg string, args ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -979,9 +979,9 @@ func InEpsilonf(t TestingT, expected interface{}, actual interface{}, epsilon fl // IsDecreasing asserts that the collection is decreasing // -// assert.IsDecreasing(t, []int{2, 1, 0}) -// assert.IsDecreasing(t, []float{2, 1}) -// assert.IsDecreasing(t, []string{"b", "a"}) +// require.IsDecreasing(t, []int{2, 1, 0}) +// require.IsDecreasing(t, []float{2, 1}) +// require.IsDecreasing(t, []string{"b", "a"}) func IsDecreasing(t TestingT, object interface{}, msgAndArgs ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -994,9 +994,9 @@ func IsDecreasing(t TestingT, object interface{}, msgAndArgs ...interface{}) { // IsDecreasingf asserts that the collection is decreasing // -// assert.IsDecreasingf(t, []int{2, 1, 0}, "error message %s", "formatted") -// assert.IsDecreasingf(t, []float{2, 1}, "error message %s", "formatted") -// assert.IsDecreasingf(t, []string{"b", "a"}, "error message %s", "formatted") +// require.IsDecreasingf(t, []int{2, 1, 0}, "error message %s", "formatted") +// require.IsDecreasingf(t, []float{2, 1}, "error message %s", "formatted") +// require.IsDecreasingf(t, []string{"b", "a"}, "error message %s", "formatted") func IsDecreasingf(t TestingT, object interface{}, msg string, args ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -1009,9 +1009,9 @@ func IsDecreasingf(t TestingT, object interface{}, msg string, args ...interface // IsIncreasing asserts that the collection is increasing // -// assert.IsIncreasing(t, []int{1, 2, 3}) -// assert.IsIncreasing(t, []float{1, 2}) -// assert.IsIncreasing(t, []string{"a", "b"}) +// require.IsIncreasing(t, []int{1, 2, 3}) +// require.IsIncreasing(t, []float{1, 2}) +// require.IsIncreasing(t, []string{"a", "b"}) func IsIncreasing(t TestingT, object interface{}, msgAndArgs ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -1024,9 +1024,9 @@ func IsIncreasing(t TestingT, object interface{}, msgAndArgs ...interface{}) { // IsIncreasingf asserts that the collection is increasing // -// assert.IsIncreasingf(t, []int{1, 2, 3}, "error message %s", "formatted") -// assert.IsIncreasingf(t, []float{1, 2}, "error message %s", "formatted") -// assert.IsIncreasingf(t, []string{"a", "b"}, "error message %s", "formatted") +// require.IsIncreasingf(t, []int{1, 2, 3}, "error message %s", "formatted") +// require.IsIncreasingf(t, []float{1, 2}, "error message %s", "formatted") +// require.IsIncreasingf(t, []string{"a", "b"}, "error message %s", "formatted") func IsIncreasingf(t TestingT, object interface{}, msg string, args ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -1039,9 +1039,9 @@ func IsIncreasingf(t TestingT, object interface{}, msg string, args ...interface // IsNonDecreasing asserts that the collection is not decreasing // -// assert.IsNonDecreasing(t, []int{1, 1, 2}) -// assert.IsNonDecreasing(t, []float{1, 2}) -// assert.IsNonDecreasing(t, []string{"a", "b"}) +// require.IsNonDecreasing(t, []int{1, 1, 2}) +// require.IsNonDecreasing(t, []float{1, 2}) +// require.IsNonDecreasing(t, []string{"a", "b"}) func IsNonDecreasing(t TestingT, object interface{}, msgAndArgs ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -1054,9 +1054,9 @@ func IsNonDecreasing(t TestingT, object interface{}, msgAndArgs ...interface{}) // IsNonDecreasingf asserts that the collection is not decreasing // -// assert.IsNonDecreasingf(t, []int{1, 1, 2}, "error message %s", "formatted") -// assert.IsNonDecreasingf(t, []float{1, 2}, "error message %s", "formatted") -// assert.IsNonDecreasingf(t, []string{"a", "b"}, "error message %s", "formatted") +// require.IsNonDecreasingf(t, []int{1, 1, 2}, "error message %s", "formatted") +// require.IsNonDecreasingf(t, []float{1, 2}, "error message %s", "formatted") +// require.IsNonDecreasingf(t, []string{"a", "b"}, "error message %s", "formatted") func IsNonDecreasingf(t TestingT, object interface{}, msg string, args ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -1069,9 +1069,9 @@ func IsNonDecreasingf(t TestingT, object interface{}, msg string, args ...interf // IsNonIncreasing asserts that the collection is not increasing // -// assert.IsNonIncreasing(t, []int{2, 1, 1}) -// assert.IsNonIncreasing(t, []float{2, 1}) -// assert.IsNonIncreasing(t, []string{"b", "a"}) +// require.IsNonIncreasing(t, []int{2, 1, 1}) +// require.IsNonIncreasing(t, []float{2, 1}) +// require.IsNonIncreasing(t, []string{"b", "a"}) func IsNonIncreasing(t TestingT, object interface{}, msgAndArgs ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -1084,9 +1084,9 @@ func IsNonIncreasing(t TestingT, object interface{}, msgAndArgs ...interface{}) // IsNonIncreasingf asserts that the collection is not increasing // -// assert.IsNonIncreasingf(t, []int{2, 1, 1}, "error message %s", "formatted") -// assert.IsNonIncreasingf(t, []float{2, 1}, "error message %s", "formatted") -// assert.IsNonIncreasingf(t, []string{"b", "a"}, "error message %s", "formatted") +// require.IsNonIncreasingf(t, []int{2, 1, 1}, "error message %s", "formatted") +// require.IsNonIncreasingf(t, []float{2, 1}, "error message %s", "formatted") +// require.IsNonIncreasingf(t, []string{"b", "a"}, "error message %s", "formatted") func IsNonIncreasingf(t TestingT, object interface{}, msg string, args ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -1121,7 +1121,7 @@ func IsTypef(t TestingT, expectedType interface{}, object interface{}, msg strin // JSONEq asserts that two JSON strings are equivalent. // -// assert.JSONEq(t, `{"hello": "world", "foo": "bar"}`, `{"foo": "bar", "hello": "world"}`) +// require.JSONEq(t, `{"hello": "world", "foo": "bar"}`, `{"foo": "bar", "hello": "world"}`) func JSONEq(t TestingT, expected string, actual string, msgAndArgs ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -1134,7 +1134,7 @@ func JSONEq(t TestingT, expected string, actual string, msgAndArgs ...interface{ // JSONEqf asserts that two JSON strings are equivalent. // -// assert.JSONEqf(t, `{"hello": "world", "foo": "bar"}`, `{"foo": "bar", "hello": "world"}`, "error message %s", "formatted") +// require.JSONEqf(t, `{"hello": "world", "foo": "bar"}`, `{"foo": "bar", "hello": "world"}`, "error message %s", "formatted") func JSONEqf(t TestingT, expected string, actual string, msg string, args ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -1148,7 +1148,7 @@ func JSONEqf(t TestingT, expected string, actual string, msg string, args ...int // Len asserts that the specified object has specific length. // Len also fails if the object has a type that len() not accept. // -// assert.Len(t, mySlice, 3) +// require.Len(t, mySlice, 3) func Len(t TestingT, object interface{}, length int, msgAndArgs ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -1162,7 +1162,7 @@ func Len(t TestingT, object interface{}, length int, msgAndArgs ...interface{}) // Lenf asserts that the specified object has specific length. // Lenf also fails if the object has a type that len() not accept. // -// assert.Lenf(t, mySlice, 3, "error message %s", "formatted") +// require.Lenf(t, mySlice, 3, "error message %s", "formatted") func Lenf(t TestingT, object interface{}, length int, msg string, args ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -1175,9 +1175,9 @@ func Lenf(t TestingT, object interface{}, length int, msg string, args ...interf // Less asserts that the first element is less than the second // -// assert.Less(t, 1, 2) -// assert.Less(t, float64(1), float64(2)) -// assert.Less(t, "a", "b") +// require.Less(t, 1, 2) +// require.Less(t, float64(1), float64(2)) +// require.Less(t, "a", "b") func Less(t TestingT, e1 interface{}, e2 interface{}, msgAndArgs ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -1190,10 +1190,10 @@ func Less(t TestingT, e1 interface{}, e2 interface{}, msgAndArgs ...interface{}) // LessOrEqual asserts that the first element is less than or equal to the second // -// assert.LessOrEqual(t, 1, 2) -// assert.LessOrEqual(t, 2, 2) -// assert.LessOrEqual(t, "a", "b") -// assert.LessOrEqual(t, "b", "b") +// require.LessOrEqual(t, 1, 2) +// require.LessOrEqual(t, 2, 2) +// require.LessOrEqual(t, "a", "b") +// require.LessOrEqual(t, "b", "b") func LessOrEqual(t TestingT, e1 interface{}, e2 interface{}, msgAndArgs ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -1206,10 +1206,10 @@ func LessOrEqual(t TestingT, e1 interface{}, e2 interface{}, msgAndArgs ...inter // LessOrEqualf asserts that the first element is less than or equal to the second // -// assert.LessOrEqualf(t, 1, 2, "error message %s", "formatted") -// assert.LessOrEqualf(t, 2, 2, "error message %s", "formatted") -// assert.LessOrEqualf(t, "a", "b", "error message %s", "formatted") -// assert.LessOrEqualf(t, "b", "b", "error message %s", "formatted") +// require.LessOrEqualf(t, 1, 2, "error message %s", "formatted") +// require.LessOrEqualf(t, 2, 2, "error message %s", "formatted") +// require.LessOrEqualf(t, "a", "b", "error message %s", "formatted") +// require.LessOrEqualf(t, "b", "b", "error message %s", "formatted") func LessOrEqualf(t TestingT, e1 interface{}, e2 interface{}, msg string, args ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -1222,9 +1222,9 @@ func LessOrEqualf(t TestingT, e1 interface{}, e2 interface{}, msg string, args . // Lessf asserts that the first element is less than the second // -// assert.Lessf(t, 1, 2, "error message %s", "formatted") -// assert.Lessf(t, float64(1), float64(2), "error message %s", "formatted") -// assert.Lessf(t, "a", "b", "error message %s", "formatted") +// require.Lessf(t, 1, 2, "error message %s", "formatted") +// require.Lessf(t, float64(1), float64(2), "error message %s", "formatted") +// require.Lessf(t, "a", "b", "error message %s", "formatted") func Lessf(t TestingT, e1 interface{}, e2 interface{}, msg string, args ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -1237,8 +1237,8 @@ func Lessf(t TestingT, e1 interface{}, e2 interface{}, msg string, args ...inter // Negative asserts that the specified element is negative // -// assert.Negative(t, -1) -// assert.Negative(t, -1.23) +// require.Negative(t, -1) +// require.Negative(t, -1.23) func Negative(t TestingT, e interface{}, msgAndArgs ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -1251,8 +1251,8 @@ func Negative(t TestingT, e interface{}, msgAndArgs ...interface{}) { // Negativef asserts that the specified element is negative // -// assert.Negativef(t, -1, "error message %s", "formatted") -// assert.Negativef(t, -1.23, "error message %s", "formatted") +// require.Negativef(t, -1, "error message %s", "formatted") +// require.Negativef(t, -1.23, "error message %s", "formatted") func Negativef(t TestingT, e interface{}, msg string, args ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -1266,7 +1266,7 @@ func Negativef(t TestingT, e interface{}, msg string, args ...interface{}) { // Never asserts that the given condition doesn't satisfy in waitFor time, // periodically checking the target function each tick. // -// assert.Never(t, func() bool { return false; }, time.Second, 10*time.Millisecond) +// require.Never(t, func() bool { return false; }, time.Second, 10*time.Millisecond) func Never(t TestingT, condition func() bool, waitFor time.Duration, tick time.Duration, msgAndArgs ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -1280,7 +1280,7 @@ func Never(t TestingT, condition func() bool, waitFor time.Duration, tick time.D // Neverf asserts that the given condition doesn't satisfy in waitFor time, // periodically checking the target function each tick. // -// assert.Neverf(t, func() bool { return false; }, time.Second, 10*time.Millisecond, "error message %s", "formatted") +// require.Neverf(t, func() bool { return false; }, time.Second, 10*time.Millisecond, "error message %s", "formatted") func Neverf(t TestingT, condition func() bool, waitFor time.Duration, tick time.Duration, msg string, args ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -1293,7 +1293,7 @@ func Neverf(t TestingT, condition func() bool, waitFor time.Duration, tick time. // Nil asserts that the specified object is nil. // -// assert.Nil(t, err) +// require.Nil(t, err) func Nil(t TestingT, object interface{}, msgAndArgs ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -1306,7 +1306,7 @@ func Nil(t TestingT, object interface{}, msgAndArgs ...interface{}) { // Nilf asserts that the specified object is nil. // -// assert.Nilf(t, err, "error message %s", "formatted") +// require.Nilf(t, err, "error message %s", "formatted") func Nilf(t TestingT, object interface{}, msg string, args ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -1344,8 +1344,8 @@ func NoDirExistsf(t TestingT, path string, msg string, args ...interface{}) { // NoError asserts that a function returned no error (i.e. `nil`). // // actualObj, err := SomeFunction() -// if assert.NoError(t, err) { -// assert.Equal(t, expectedObj, actualObj) +// if require.NoError(t, err) { +// require.Equal(t, expectedObj, actualObj) // } func NoError(t TestingT, err error, msgAndArgs ...interface{}) { if h, ok := t.(tHelper); ok { @@ -1360,8 +1360,8 @@ func NoError(t TestingT, err error, msgAndArgs ...interface{}) { // NoErrorf asserts that a function returned no error (i.e. `nil`). // // actualObj, err := SomeFunction() -// if assert.NoErrorf(t, err, "error message %s", "formatted") { -// assert.Equal(t, expectedObj, actualObj) +// if require.NoErrorf(t, err, "error message %s", "formatted") { +// require.Equal(t, expectedObj, actualObj) // } func NoErrorf(t TestingT, err error, msg string, args ...interface{}) { if h, ok := t.(tHelper); ok { @@ -1400,9 +1400,9 @@ func NoFileExistsf(t TestingT, path string, msg string, args ...interface{}) { // NotContains asserts that the specified string, list(array, slice...) or map does NOT contain the // specified substring or element. // -// assert.NotContains(t, "Hello World", "Earth") -// assert.NotContains(t, ["Hello", "World"], "Earth") -// assert.NotContains(t, {"Hello": "World"}, "Earth") +// require.NotContains(t, "Hello World", "Earth") +// require.NotContains(t, ["Hello", "World"], "Earth") +// require.NotContains(t, {"Hello": "World"}, "Earth") func NotContains(t TestingT, s interface{}, contains interface{}, msgAndArgs ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -1416,9 +1416,9 @@ func NotContains(t TestingT, s interface{}, contains interface{}, msgAndArgs ... // NotContainsf asserts that the specified string, list(array, slice...) or map does NOT contain the // specified substring or element. // -// assert.NotContainsf(t, "Hello World", "Earth", "error message %s", "formatted") -// assert.NotContainsf(t, ["Hello", "World"], "Earth", "error message %s", "formatted") -// assert.NotContainsf(t, {"Hello": "World"}, "Earth", "error message %s", "formatted") +// require.NotContainsf(t, "Hello World", "Earth", "error message %s", "formatted") +// require.NotContainsf(t, ["Hello", "World"], "Earth", "error message %s", "formatted") +// require.NotContainsf(t, {"Hello": "World"}, "Earth", "error message %s", "formatted") func NotContainsf(t TestingT, s interface{}, contains interface{}, msg string, args ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -1429,11 +1429,51 @@ func NotContainsf(t TestingT, s interface{}, contains interface{}, msg string, a t.FailNow() } +// NotElementsMatch asserts that the specified listA(array, slice...) is NOT equal to specified +// listB(array, slice...) ignoring the order of the elements. If there are duplicate elements, +// the number of appearances of each of them in both lists should not match. +// This is an inverse of ElementsMatch. +// +// require.NotElementsMatch(t, [1, 1, 2, 3], [1, 1, 2, 3]) -> false +// +// require.NotElementsMatch(t, [1, 1, 2, 3], [1, 2, 3]) -> true +// +// require.NotElementsMatch(t, [1, 2, 3], [1, 2, 4]) -> true +func NotElementsMatch(t TestingT, listA interface{}, listB interface{}, msgAndArgs ...interface{}) { + if h, ok := t.(tHelper); ok { + h.Helper() + } + if assert.NotElementsMatch(t, listA, listB, msgAndArgs...) { + return + } + t.FailNow() +} + +// NotElementsMatchf asserts that the specified listA(array, slice...) is NOT equal to specified +// listB(array, slice...) ignoring the order of the elements. If there are duplicate elements, +// the number of appearances of each of them in both lists should not match. +// This is an inverse of ElementsMatch. +// +// require.NotElementsMatchf(t, [1, 1, 2, 3], [1, 1, 2, 3], "error message %s", "formatted") -> false +// +// require.NotElementsMatchf(t, [1, 1, 2, 3], [1, 2, 3], "error message %s", "formatted") -> true +// +// require.NotElementsMatchf(t, [1, 2, 3], [1, 2, 4], "error message %s", "formatted") -> true +func NotElementsMatchf(t TestingT, listA interface{}, listB interface{}, msg string, args ...interface{}) { + if h, ok := t.(tHelper); ok { + h.Helper() + } + if assert.NotElementsMatchf(t, listA, listB, msg, args...) { + return + } + t.FailNow() +} + // NotEmpty asserts that the specified object is NOT empty. I.e. not nil, "", false, 0 or either // a slice or a channel with len == 0. // -// if assert.NotEmpty(t, obj) { -// assert.Equal(t, "two", obj[1]) +// if require.NotEmpty(t, obj) { +// require.Equal(t, "two", obj[1]) // } func NotEmpty(t TestingT, object interface{}, msgAndArgs ...interface{}) { if h, ok := t.(tHelper); ok { @@ -1448,8 +1488,8 @@ func NotEmpty(t TestingT, object interface{}, msgAndArgs ...interface{}) { // NotEmptyf asserts that the specified object is NOT empty. I.e. not nil, "", false, 0 or either // a slice or a channel with len == 0. // -// if assert.NotEmptyf(t, obj, "error message %s", "formatted") { -// assert.Equal(t, "two", obj[1]) +// if require.NotEmptyf(t, obj, "error message %s", "formatted") { +// require.Equal(t, "two", obj[1]) // } func NotEmptyf(t TestingT, object interface{}, msg string, args ...interface{}) { if h, ok := t.(tHelper); ok { @@ -1463,7 +1503,7 @@ func NotEmptyf(t TestingT, object interface{}, msg string, args ...interface{}) // NotEqual asserts that the specified values are NOT equal. // -// assert.NotEqual(t, obj1, obj2) +// require.NotEqual(t, obj1, obj2) // // Pointer variable equality is determined based on the equality of the // referenced values (as opposed to the memory addresses). @@ -1479,7 +1519,7 @@ func NotEqual(t TestingT, expected interface{}, actual interface{}, msgAndArgs . // NotEqualValues asserts that two objects are not equal even when converted to the same type // -// assert.NotEqualValues(t, obj1, obj2) +// require.NotEqualValues(t, obj1, obj2) func NotEqualValues(t TestingT, expected interface{}, actual interface{}, msgAndArgs ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -1492,7 +1532,7 @@ func NotEqualValues(t TestingT, expected interface{}, actual interface{}, msgAnd // NotEqualValuesf asserts that two objects are not equal even when converted to the same type // -// assert.NotEqualValuesf(t, obj1, obj2, "error message %s", "formatted") +// require.NotEqualValuesf(t, obj1, obj2, "error message %s", "formatted") func NotEqualValuesf(t TestingT, expected interface{}, actual interface{}, msg string, args ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -1505,7 +1545,7 @@ func NotEqualValuesf(t TestingT, expected interface{}, actual interface{}, msg s // NotEqualf asserts that the specified values are NOT equal. // -// assert.NotEqualf(t, obj1, obj2, "error message %s", "formatted") +// require.NotEqualf(t, obj1, obj2, "error message %s", "formatted") // // Pointer variable equality is determined based on the equality of the // referenced values (as opposed to the memory addresses). @@ -1519,7 +1559,31 @@ func NotEqualf(t TestingT, expected interface{}, actual interface{}, msg string, t.FailNow() } -// NotErrorIs asserts that at none of the errors in err's chain matches target. +// NotErrorAs asserts that none of the errors in err's chain matches target, +// but if so, sets target to that error value. +func NotErrorAs(t TestingT, err error, target interface{}, msgAndArgs ...interface{}) { + if h, ok := t.(tHelper); ok { + h.Helper() + } + if assert.NotErrorAs(t, err, target, msgAndArgs...) { + return + } + t.FailNow() +} + +// NotErrorAsf asserts that none of the errors in err's chain matches target, +// but if so, sets target to that error value. +func NotErrorAsf(t TestingT, err error, target interface{}, msg string, args ...interface{}) { + if h, ok := t.(tHelper); ok { + h.Helper() + } + if assert.NotErrorAsf(t, err, target, msg, args...) { + return + } + t.FailNow() +} + +// NotErrorIs asserts that none of the errors in err's chain matches target. // This is a wrapper for errors.Is. func NotErrorIs(t TestingT, err error, target error, msgAndArgs ...interface{}) { if h, ok := t.(tHelper); ok { @@ -1531,7 +1595,7 @@ func NotErrorIs(t TestingT, err error, target error, msgAndArgs ...interface{}) t.FailNow() } -// NotErrorIsf asserts that at none of the errors in err's chain matches target. +// NotErrorIsf asserts that none of the errors in err's chain matches target. // This is a wrapper for errors.Is. func NotErrorIsf(t TestingT, err error, target error, msg string, args ...interface{}) { if h, ok := t.(tHelper); ok { @@ -1545,7 +1609,7 @@ func NotErrorIsf(t TestingT, err error, target error, msg string, args ...interf // NotImplements asserts that an object does not implement the specified interface. // -// assert.NotImplements(t, (*MyInterface)(nil), new(MyObject)) +// require.NotImplements(t, (*MyInterface)(nil), new(MyObject)) func NotImplements(t TestingT, interfaceObject interface{}, object interface{}, msgAndArgs ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -1558,7 +1622,7 @@ func NotImplements(t TestingT, interfaceObject interface{}, object interface{}, // NotImplementsf asserts that an object does not implement the specified interface. // -// assert.NotImplementsf(t, (*MyInterface)(nil), new(MyObject), "error message %s", "formatted") +// require.NotImplementsf(t, (*MyInterface)(nil), new(MyObject), "error message %s", "formatted") func NotImplementsf(t TestingT, interfaceObject interface{}, object interface{}, msg string, args ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -1571,7 +1635,7 @@ func NotImplementsf(t TestingT, interfaceObject interface{}, object interface{}, // NotNil asserts that the specified object is not nil. // -// assert.NotNil(t, err) +// require.NotNil(t, err) func NotNil(t TestingT, object interface{}, msgAndArgs ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -1584,7 +1648,7 @@ func NotNil(t TestingT, object interface{}, msgAndArgs ...interface{}) { // NotNilf asserts that the specified object is not nil. // -// assert.NotNilf(t, err, "error message %s", "formatted") +// require.NotNilf(t, err, "error message %s", "formatted") func NotNilf(t TestingT, object interface{}, msg string, args ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -1597,7 +1661,7 @@ func NotNilf(t TestingT, object interface{}, msg string, args ...interface{}) { // NotPanics asserts that the code inside the specified PanicTestFunc does NOT panic. // -// assert.NotPanics(t, func(){ RemainCalm() }) +// require.NotPanics(t, func(){ RemainCalm() }) func NotPanics(t TestingT, f assert.PanicTestFunc, msgAndArgs ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -1610,7 +1674,7 @@ func NotPanics(t TestingT, f assert.PanicTestFunc, msgAndArgs ...interface{}) { // NotPanicsf asserts that the code inside the specified PanicTestFunc does NOT panic. // -// assert.NotPanicsf(t, func(){ RemainCalm() }, "error message %s", "formatted") +// require.NotPanicsf(t, func(){ RemainCalm() }, "error message %s", "formatted") func NotPanicsf(t TestingT, f assert.PanicTestFunc, msg string, args ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -1623,8 +1687,8 @@ func NotPanicsf(t TestingT, f assert.PanicTestFunc, msg string, args ...interfac // NotRegexp asserts that a specified regexp does not match a string. // -// assert.NotRegexp(t, regexp.MustCompile("starts"), "it's starting") -// assert.NotRegexp(t, "^start", "it's not starting") +// require.NotRegexp(t, regexp.MustCompile("starts"), "it's starting") +// require.NotRegexp(t, "^start", "it's not starting") func NotRegexp(t TestingT, rx interface{}, str interface{}, msgAndArgs ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -1637,8 +1701,8 @@ func NotRegexp(t TestingT, rx interface{}, str interface{}, msgAndArgs ...interf // NotRegexpf asserts that a specified regexp does not match a string. // -// assert.NotRegexpf(t, regexp.MustCompile("starts"), "it's starting", "error message %s", "formatted") -// assert.NotRegexpf(t, "^start", "it's not starting", "error message %s", "formatted") +// require.NotRegexpf(t, regexp.MustCompile("starts"), "it's starting", "error message %s", "formatted") +// require.NotRegexpf(t, "^start", "it's not starting", "error message %s", "formatted") func NotRegexpf(t TestingT, rx interface{}, str interface{}, msg string, args ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -1651,7 +1715,7 @@ func NotRegexpf(t TestingT, rx interface{}, str interface{}, msg string, args .. // NotSame asserts that two pointers do not reference the same object. // -// assert.NotSame(t, ptr1, ptr2) +// require.NotSame(t, ptr1, ptr2) // // Both arguments must be pointer variables. Pointer variable sameness is // determined based on the equality of both type and value. @@ -1667,7 +1731,7 @@ func NotSame(t TestingT, expected interface{}, actual interface{}, msgAndArgs .. // NotSamef asserts that two pointers do not reference the same object. // -// assert.NotSamef(t, ptr1, ptr2, "error message %s", "formatted") +// require.NotSamef(t, ptr1, ptr2, "error message %s", "formatted") // // Both arguments must be pointer variables. Pointer variable sameness is // determined based on the equality of both type and value. @@ -1685,8 +1749,8 @@ func NotSamef(t TestingT, expected interface{}, actual interface{}, msg string, // contain all elements given in the specified subset list(array, slice...) or // map. // -// assert.NotSubset(t, [1, 3, 4], [1, 2]) -// assert.NotSubset(t, {"x": 1, "y": 2}, {"z": 3}) +// require.NotSubset(t, [1, 3, 4], [1, 2]) +// require.NotSubset(t, {"x": 1, "y": 2}, {"z": 3}) func NotSubset(t TestingT, list interface{}, subset interface{}, msgAndArgs ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -1701,8 +1765,8 @@ func NotSubset(t TestingT, list interface{}, subset interface{}, msgAndArgs ...i // contain all elements given in the specified subset list(array, slice...) or // map. // -// assert.NotSubsetf(t, [1, 3, 4], [1, 2], "error message %s", "formatted") -// assert.NotSubsetf(t, {"x": 1, "y": 2}, {"z": 3}, "error message %s", "formatted") +// require.NotSubsetf(t, [1, 3, 4], [1, 2], "error message %s", "formatted") +// require.NotSubsetf(t, {"x": 1, "y": 2}, {"z": 3}, "error message %s", "formatted") func NotSubsetf(t TestingT, list interface{}, subset interface{}, msg string, args ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -1737,7 +1801,7 @@ func NotZerof(t TestingT, i interface{}, msg string, args ...interface{}) { // Panics asserts that the code inside the specified PanicTestFunc panics. // -// assert.Panics(t, func(){ GoCrazy() }) +// require.Panics(t, func(){ GoCrazy() }) func Panics(t TestingT, f assert.PanicTestFunc, msgAndArgs ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -1752,7 +1816,7 @@ func Panics(t TestingT, f assert.PanicTestFunc, msgAndArgs ...interface{}) { // panics, and that the recovered panic value is an error that satisfies the // EqualError comparison. // -// assert.PanicsWithError(t, "crazy error", func(){ GoCrazy() }) +// require.PanicsWithError(t, "crazy error", func(){ GoCrazy() }) func PanicsWithError(t TestingT, errString string, f assert.PanicTestFunc, msgAndArgs ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -1767,7 +1831,7 @@ func PanicsWithError(t TestingT, errString string, f assert.PanicTestFunc, msgAn // panics, and that the recovered panic value is an error that satisfies the // EqualError comparison. // -// assert.PanicsWithErrorf(t, "crazy error", func(){ GoCrazy() }, "error message %s", "formatted") +// require.PanicsWithErrorf(t, "crazy error", func(){ GoCrazy() }, "error message %s", "formatted") func PanicsWithErrorf(t TestingT, errString string, f assert.PanicTestFunc, msg string, args ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -1781,7 +1845,7 @@ func PanicsWithErrorf(t TestingT, errString string, f assert.PanicTestFunc, msg // PanicsWithValue asserts that the code inside the specified PanicTestFunc panics, and that // the recovered panic value equals the expected panic value. // -// assert.PanicsWithValue(t, "crazy error", func(){ GoCrazy() }) +// require.PanicsWithValue(t, "crazy error", func(){ GoCrazy() }) func PanicsWithValue(t TestingT, expected interface{}, f assert.PanicTestFunc, msgAndArgs ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -1795,7 +1859,7 @@ func PanicsWithValue(t TestingT, expected interface{}, f assert.PanicTestFunc, m // PanicsWithValuef asserts that the code inside the specified PanicTestFunc panics, and that // the recovered panic value equals the expected panic value. // -// assert.PanicsWithValuef(t, "crazy error", func(){ GoCrazy() }, "error message %s", "formatted") +// require.PanicsWithValuef(t, "crazy error", func(){ GoCrazy() }, "error message %s", "formatted") func PanicsWithValuef(t TestingT, expected interface{}, f assert.PanicTestFunc, msg string, args ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -1808,7 +1872,7 @@ func PanicsWithValuef(t TestingT, expected interface{}, f assert.PanicTestFunc, // Panicsf asserts that the code inside the specified PanicTestFunc panics. // -// assert.Panicsf(t, func(){ GoCrazy() }, "error message %s", "formatted") +// require.Panicsf(t, func(){ GoCrazy() }, "error message %s", "formatted") func Panicsf(t TestingT, f assert.PanicTestFunc, msg string, args ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -1821,8 +1885,8 @@ func Panicsf(t TestingT, f assert.PanicTestFunc, msg string, args ...interface{} // Positive asserts that the specified element is positive // -// assert.Positive(t, 1) -// assert.Positive(t, 1.23) +// require.Positive(t, 1) +// require.Positive(t, 1.23) func Positive(t TestingT, e interface{}, msgAndArgs ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -1835,8 +1899,8 @@ func Positive(t TestingT, e interface{}, msgAndArgs ...interface{}) { // Positivef asserts that the specified element is positive // -// assert.Positivef(t, 1, "error message %s", "formatted") -// assert.Positivef(t, 1.23, "error message %s", "formatted") +// require.Positivef(t, 1, "error message %s", "formatted") +// require.Positivef(t, 1.23, "error message %s", "formatted") func Positivef(t TestingT, e interface{}, msg string, args ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -1849,8 +1913,8 @@ func Positivef(t TestingT, e interface{}, msg string, args ...interface{}) { // Regexp asserts that a specified regexp matches a string. // -// assert.Regexp(t, regexp.MustCompile("start"), "it's starting") -// assert.Regexp(t, "start...$", "it's not starting") +// require.Regexp(t, regexp.MustCompile("start"), "it's starting") +// require.Regexp(t, "start...$", "it's not starting") func Regexp(t TestingT, rx interface{}, str interface{}, msgAndArgs ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -1863,8 +1927,8 @@ func Regexp(t TestingT, rx interface{}, str interface{}, msgAndArgs ...interface // Regexpf asserts that a specified regexp matches a string. // -// assert.Regexpf(t, regexp.MustCompile("start"), "it's starting", "error message %s", "formatted") -// assert.Regexpf(t, "start...$", "it's not starting", "error message %s", "formatted") +// require.Regexpf(t, regexp.MustCompile("start"), "it's starting", "error message %s", "formatted") +// require.Regexpf(t, "start...$", "it's not starting", "error message %s", "formatted") func Regexpf(t TestingT, rx interface{}, str interface{}, msg string, args ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -1877,7 +1941,7 @@ func Regexpf(t TestingT, rx interface{}, str interface{}, msg string, args ...in // Same asserts that two pointers reference the same object. // -// assert.Same(t, ptr1, ptr2) +// require.Same(t, ptr1, ptr2) // // Both arguments must be pointer variables. Pointer variable sameness is // determined based on the equality of both type and value. @@ -1893,7 +1957,7 @@ func Same(t TestingT, expected interface{}, actual interface{}, msgAndArgs ...in // Samef asserts that two pointers reference the same object. // -// assert.Samef(t, ptr1, ptr2, "error message %s", "formatted") +// require.Samef(t, ptr1, ptr2, "error message %s", "formatted") // // Both arguments must be pointer variables. Pointer variable sameness is // determined based on the equality of both type and value. @@ -1910,8 +1974,8 @@ func Samef(t TestingT, expected interface{}, actual interface{}, msg string, arg // Subset asserts that the specified list(array, slice...) or map contains all // elements given in the specified subset list(array, slice...) or map. // -// assert.Subset(t, [1, 2, 3], [1, 2]) -// assert.Subset(t, {"x": 1, "y": 2}, {"x": 1}) +// require.Subset(t, [1, 2, 3], [1, 2]) +// require.Subset(t, {"x": 1, "y": 2}, {"x": 1}) func Subset(t TestingT, list interface{}, subset interface{}, msgAndArgs ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -1925,8 +1989,8 @@ func Subset(t TestingT, list interface{}, subset interface{}, msgAndArgs ...inte // Subsetf asserts that the specified list(array, slice...) or map contains all // elements given in the specified subset list(array, slice...) or map. // -// assert.Subsetf(t, [1, 2, 3], [1, 2], "error message %s", "formatted") -// assert.Subsetf(t, {"x": 1, "y": 2}, {"x": 1}, "error message %s", "formatted") +// require.Subsetf(t, [1, 2, 3], [1, 2], "error message %s", "formatted") +// require.Subsetf(t, {"x": 1, "y": 2}, {"x": 1}, "error message %s", "formatted") func Subsetf(t TestingT, list interface{}, subset interface{}, msg string, args ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -1939,7 +2003,7 @@ func Subsetf(t TestingT, list interface{}, subset interface{}, msg string, args // True asserts that the specified value is true. // -// assert.True(t, myBool) +// require.True(t, myBool) func True(t TestingT, value bool, msgAndArgs ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -1952,7 +2016,7 @@ func True(t TestingT, value bool, msgAndArgs ...interface{}) { // Truef asserts that the specified value is true. // -// assert.Truef(t, myBool, "error message %s", "formatted") +// require.Truef(t, myBool, "error message %s", "formatted") func Truef(t TestingT, value bool, msg string, args ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -1965,7 +2029,7 @@ func Truef(t TestingT, value bool, msg string, args ...interface{}) { // WithinDuration asserts that the two times are within duration delta of each other. // -// assert.WithinDuration(t, time.Now(), time.Now(), 10*time.Second) +// require.WithinDuration(t, time.Now(), time.Now(), 10*time.Second) func WithinDuration(t TestingT, expected time.Time, actual time.Time, delta time.Duration, msgAndArgs ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -1978,7 +2042,7 @@ func WithinDuration(t TestingT, expected time.Time, actual time.Time, delta time // WithinDurationf asserts that the two times are within duration delta of each other. // -// assert.WithinDurationf(t, time.Now(), time.Now(), 10*time.Second, "error message %s", "formatted") +// require.WithinDurationf(t, time.Now(), time.Now(), 10*time.Second, "error message %s", "formatted") func WithinDurationf(t TestingT, expected time.Time, actual time.Time, delta time.Duration, msg string, args ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -1991,7 +2055,7 @@ func WithinDurationf(t TestingT, expected time.Time, actual time.Time, delta tim // WithinRange asserts that a time is within a time range (inclusive). // -// assert.WithinRange(t, time.Now(), time.Now().Add(-time.Second), time.Now().Add(time.Second)) +// require.WithinRange(t, time.Now(), time.Now().Add(-time.Second), time.Now().Add(time.Second)) func WithinRange(t TestingT, actual time.Time, start time.Time, end time.Time, msgAndArgs ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -2004,7 +2068,7 @@ func WithinRange(t TestingT, actual time.Time, start time.Time, end time.Time, m // WithinRangef asserts that a time is within a time range (inclusive). // -// assert.WithinRangef(t, time.Now(), time.Now().Add(-time.Second), time.Now().Add(time.Second), "error message %s", "formatted") +// require.WithinRangef(t, time.Now(), time.Now().Add(-time.Second), time.Now().Add(time.Second), "error message %s", "formatted") func WithinRangef(t TestingT, actual time.Time, start time.Time, end time.Time, msg string, args ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() diff --git a/vendor/github.com/stretchr/testify/require/require.go.tmpl b/vendor/github.com/stretchr/testify/require/require.go.tmpl index 55e42ddebd..8b32836850 100644 --- a/vendor/github.com/stretchr/testify/require/require.go.tmpl +++ b/vendor/github.com/stretchr/testify/require/require.go.tmpl @@ -1,4 +1,4 @@ -{{.Comment}} +{{ replace .Comment "assert." "require."}} func {{.DocInfo.Name}}(t TestingT, {{.Params}}) { if h, ok := t.(tHelper); ok { h.Helper() } if assert.{{.DocInfo.Name}}(t, {{.ForwardedParams}}) { return } diff --git a/vendor/github.com/stretchr/testify/require/require_forward.go b/vendor/github.com/stretchr/testify/require/require_forward.go index eee8310a5f..1bd87304f4 100644 --- a/vendor/github.com/stretchr/testify/require/require_forward.go +++ b/vendor/github.com/stretchr/testify/require/require_forward.go @@ -187,8 +187,8 @@ func (a *Assertions) EqualExportedValuesf(expected interface{}, actual interface EqualExportedValuesf(a.t, expected, actual, msg, args...) } -// EqualValues asserts that two objects are equal or convertible to the same types -// and equal. +// EqualValues asserts that two objects are equal or convertible to the larger +// type and equal. // // a.EqualValues(uint32(123), int32(123)) func (a *Assertions) EqualValues(expected interface{}, actual interface{}, msgAndArgs ...interface{}) { @@ -198,8 +198,8 @@ func (a *Assertions) EqualValues(expected interface{}, actual interface{}, msgAn EqualValues(a.t, expected, actual, msgAndArgs...) } -// EqualValuesf asserts that two objects are equal or convertible to the same types -// and equal. +// EqualValuesf asserts that two objects are equal or convertible to the larger +// type and equal. // // a.EqualValuesf(uint32(123), int32(123), "error message %s", "formatted") func (a *Assertions) EqualValuesf(expected interface{}, actual interface{}, msg string, args ...interface{}) { @@ -337,7 +337,7 @@ func (a *Assertions) Eventually(condition func() bool, waitFor time.Duration, ti // a.EventuallyWithT(func(c *assert.CollectT) { // // add assertions as needed; any assertion failure will fail the current tick // assert.True(c, externalValue, "expected 'externalValue' to be true") -// }, 1*time.Second, 10*time.Second, "external state has not changed to 'true'; still false") +// }, 10*time.Second, 1*time.Second, "external state has not changed to 'true'; still false") func (a *Assertions) EventuallyWithT(condition func(collect *assert.CollectT), waitFor time.Duration, tick time.Duration, msgAndArgs ...interface{}) { if h, ok := a.t.(tHelper); ok { h.Helper() @@ -362,7 +362,7 @@ func (a *Assertions) EventuallyWithT(condition func(collect *assert.CollectT), w // a.EventuallyWithTf(func(c *assert.CollectT, "error message %s", "formatted") { // // add assertions as needed; any assertion failure will fail the current tick // assert.True(c, externalValue, "expected 'externalValue' to be true") -// }, 1*time.Second, 10*time.Second, "external state has not changed to 'true'; still false") +// }, 10*time.Second, 1*time.Second, "external state has not changed to 'true'; still false") func (a *Assertions) EventuallyWithTf(condition func(collect *assert.CollectT), waitFor time.Duration, tick time.Duration, msg string, args ...interface{}) { if h, ok := a.t.(tHelper); ok { h.Helper() @@ -1129,6 +1129,40 @@ func (a *Assertions) NotContainsf(s interface{}, contains interface{}, msg strin NotContainsf(a.t, s, contains, msg, args...) } +// NotElementsMatch asserts that the specified listA(array, slice...) is NOT equal to specified +// listB(array, slice...) ignoring the order of the elements. If there are duplicate elements, +// the number of appearances of each of them in both lists should not match. +// This is an inverse of ElementsMatch. +// +// a.NotElementsMatch([1, 1, 2, 3], [1, 1, 2, 3]) -> false +// +// a.NotElementsMatch([1, 1, 2, 3], [1, 2, 3]) -> true +// +// a.NotElementsMatch([1, 2, 3], [1, 2, 4]) -> true +func (a *Assertions) NotElementsMatch(listA interface{}, listB interface{}, msgAndArgs ...interface{}) { + if h, ok := a.t.(tHelper); ok { + h.Helper() + } + NotElementsMatch(a.t, listA, listB, msgAndArgs...) +} + +// NotElementsMatchf asserts that the specified listA(array, slice...) is NOT equal to specified +// listB(array, slice...) ignoring the order of the elements. If there are duplicate elements, +// the number of appearances of each of them in both lists should not match. +// This is an inverse of ElementsMatch. +// +// a.NotElementsMatchf([1, 1, 2, 3], [1, 1, 2, 3], "error message %s", "formatted") -> false +// +// a.NotElementsMatchf([1, 1, 2, 3], [1, 2, 3], "error message %s", "formatted") -> true +// +// a.NotElementsMatchf([1, 2, 3], [1, 2, 4], "error message %s", "formatted") -> true +func (a *Assertions) NotElementsMatchf(listA interface{}, listB interface{}, msg string, args ...interface{}) { + if h, ok := a.t.(tHelper); ok { + h.Helper() + } + NotElementsMatchf(a.t, listA, listB, msg, args...) +} + // NotEmpty asserts that the specified object is NOT empty. I.e. not nil, "", false, 0 or either // a slice or a channel with len == 0. // @@ -1201,7 +1235,25 @@ func (a *Assertions) NotEqualf(expected interface{}, actual interface{}, msg str NotEqualf(a.t, expected, actual, msg, args...) } -// NotErrorIs asserts that at none of the errors in err's chain matches target. +// NotErrorAs asserts that none of the errors in err's chain matches target, +// but if so, sets target to that error value. +func (a *Assertions) NotErrorAs(err error, target interface{}, msgAndArgs ...interface{}) { + if h, ok := a.t.(tHelper); ok { + h.Helper() + } + NotErrorAs(a.t, err, target, msgAndArgs...) +} + +// NotErrorAsf asserts that none of the errors in err's chain matches target, +// but if so, sets target to that error value. +func (a *Assertions) NotErrorAsf(err error, target interface{}, msg string, args ...interface{}) { + if h, ok := a.t.(tHelper); ok { + h.Helper() + } + NotErrorAsf(a.t, err, target, msg, args...) +} + +// NotErrorIs asserts that none of the errors in err's chain matches target. // This is a wrapper for errors.Is. func (a *Assertions) NotErrorIs(err error, target error, msgAndArgs ...interface{}) { if h, ok := a.t.(tHelper); ok { @@ -1210,7 +1262,7 @@ func (a *Assertions) NotErrorIs(err error, target error, msgAndArgs ...interface NotErrorIs(a.t, err, target, msgAndArgs...) } -// NotErrorIsf asserts that at none of the errors in err's chain matches target. +// NotErrorIsf asserts that none of the errors in err's chain matches target. // This is a wrapper for errors.Is. func (a *Assertions) NotErrorIsf(err error, target error, msg string, args ...interface{}) { if h, ok := a.t.(tHelper); ok { diff --git a/vendor/github.com/stretchr/testify/require/requirements.go b/vendor/github.com/stretchr/testify/require/requirements.go index 91772dfeb9..6b7ce929eb 100644 --- a/vendor/github.com/stretchr/testify/require/requirements.go +++ b/vendor/github.com/stretchr/testify/require/requirements.go @@ -6,7 +6,7 @@ type TestingT interface { FailNow() } -type tHelper interface { +type tHelper = interface { Helper() } diff --git a/vendor/github.com/stretchr/testify/suite/doc.go b/vendor/github.com/stretchr/testify/suite/doc.go index 8d55a3aa89..05a562f721 100644 --- a/vendor/github.com/stretchr/testify/suite/doc.go +++ b/vendor/github.com/stretchr/testify/suite/doc.go @@ -5,6 +5,8 @@ // or individual tests (depending on which interface(s) you // implement). // +// The suite package does not support parallel tests. See [issue 934]. +// // A testing suite is usually built by first extending the built-in // suite functionality from suite.Suite in testify. Alternatively, // you could reproduce that logic on your own if you wanted (you @@ -63,4 +65,6 @@ // func TestExampleTestSuite(t *testing.T) { // suite.Run(t, new(ExampleTestSuite)) // } +// +// [issue 934]: https://github.com/stretchr/testify/issues/934 package suite diff --git a/vendor/modules.txt b/vendor/modules.txt index f8700bbe01..d0b2b635d8 100644 --- a/vendor/modules.txt +++ b/vendor/modules.txt @@ -37,8 +37,8 @@ github.com/Microsoft/go-winio/internal/stringbuffer github.com/Microsoft/go-winio/pkg/guid # github.com/Netflix/go-expect v0.0.0-20201125194554-85d881c3777e ## explicit; go 1.13 -# github.com/ProtonMail/go-crypto v1.0.0 -## explicit; go 1.13 +# github.com/ProtonMail/go-crypto v1.1.3 +## explicit; go 1.17 github.com/ProtonMail/go-crypto/bitcurves github.com/ProtonMail/go-crypto/brainpool github.com/ProtonMail/go-crypto/eax @@ -49,6 +49,8 @@ github.com/ProtonMail/go-crypto/openpgp/aes/keywrap github.com/ProtonMail/go-crypto/openpgp/armor github.com/ProtonMail/go-crypto/openpgp/ecdh github.com/ProtonMail/go-crypto/openpgp/ecdsa +github.com/ProtonMail/go-crypto/openpgp/ed25519 +github.com/ProtonMail/go-crypto/openpgp/ed448 github.com/ProtonMail/go-crypto/openpgp/eddsa github.com/ProtonMail/go-crypto/openpgp/elgamal github.com/ProtonMail/go-crypto/openpgp/errors @@ -57,6 +59,8 @@ github.com/ProtonMail/go-crypto/openpgp/internal/ecc github.com/ProtonMail/go-crypto/openpgp/internal/encoding github.com/ProtonMail/go-crypto/openpgp/packet github.com/ProtonMail/go-crypto/openpgp/s2k +github.com/ProtonMail/go-crypto/openpgp/x25519 +github.com/ProtonMail/go-crypto/openpgp/x448 # github.com/PuerkitoBio/purell v1.1.1 ## explicit github.com/PuerkitoBio/purell @@ -187,8 +191,8 @@ github.com/containerd/console # github.com/creack/pty v1.1.11 ## explicit; go 1.13 github.com/creack/pty -# github.com/cyphar/filepath-securejoin v0.2.4 -## explicit; go 1.13 +# github.com/cyphar/filepath-securejoin v0.3.6 +## explicit; go 1.18 github.com/cyphar/filepath-securejoin # github.com/dave/jennifer v0.18.0 ## explicit @@ -236,16 +240,16 @@ github.com/go-git/gcfg github.com/go-git/gcfg/scanner github.com/go-git/gcfg/token github.com/go-git/gcfg/types -# github.com/go-git/go-billy/v5 v5.5.0 -## explicit; go 1.19 +# github.com/go-git/go-billy/v5 v5.6.1 +## explicit; go 1.21 github.com/go-git/go-billy/v5 github.com/go-git/go-billy/v5/helper/chroot github.com/go-git/go-billy/v5/helper/polyfill github.com/go-git/go-billy/v5/memfs github.com/go-git/go-billy/v5/osfs github.com/go-git/go-billy/v5/util -# github.com/go-git/go-git/v5 v5.12.0 -## explicit; go 1.19 +# github.com/go-git/go-git/v5 v5.13.1 +## explicit; go 1.21 github.com/go-git/go-git/v5 github.com/go-git/go-git/v5/config github.com/go-git/go-git/v5/internal/path_util @@ -588,7 +592,7 @@ github.com/shirou/gopsutil/v3/process # github.com/shoenig/go-m1cpu v0.1.6 ## explicit; go 1.20 github.com/shoenig/go-m1cpu -# github.com/skeema/knownhosts v1.2.2 +# github.com/skeema/knownhosts v1.3.0 ## explicit; go 1.17 github.com/skeema/knownhosts # github.com/skratchdot/open-golang v0.0.0-20190104022628-a2dfa6d0dab6 @@ -608,9 +612,10 @@ github.com/spf13/cobra github.com/spf13/pflag # github.com/stretchr/objx v0.5.2 ## explicit; go 1.20 -# github.com/stretchr/testify v1.9.0 +# github.com/stretchr/testify v1.10.0 ## explicit; go 1.17 github.com/stretchr/testify/assert +github.com/stretchr/testify/assert/yaml github.com/stretchr/testify/require github.com/stretchr/testify/suite # github.com/thoas/go-funk v0.8.0 From 988832b2725f956525baa2a10521f9e10e4df9ff Mon Sep 17 00:00:00 2001 From: mitchell Date: Fri, 10 Jan 2025 09:34:44 -0500 Subject: [PATCH 101/336] Solver V3 for Ruby now works on the Platform. --- test/integration/install_int_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/integration/install_int_test.go b/test/integration/install_int_test.go index f7c0a2d3c5..eb939642ca 100644 --- a/test/integration/install_int_test.go +++ b/test/integration/install_int_test.go @@ -228,7 +228,7 @@ func (suite *InstallIntegrationTestSuite) TestInstall_SolverV3() { "Ruby", "ActiveState-CLI/ruby-V3#6db5b307-d63a-45e2-9d3b-70a1a1f6c10a", "base64", - true, + false, }, } From 27eb756c5f2eb7bd4f7ea01f912a44338323709f Mon Sep 17 00:00:00 2001 From: mitchell Date: Wed, 15 Jan 2025 13:06:28 -0500 Subject: [PATCH 102/336] Mark invalid input errors for project creation as input errors. --- pkg/platform/api/buildplanner/response/createproject.go | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/pkg/platform/api/buildplanner/response/createproject.go b/pkg/platform/api/buildplanner/response/createproject.go index 9531aa2efc..9c9ed79c3d 100644 --- a/pkg/platform/api/buildplanner/response/createproject.go +++ b/pkg/platform/api/buildplanner/response/createproject.go @@ -2,6 +2,8 @@ package response import ( "github.com/ActiveState/cli/internal/errs" + "github.com/ActiveState/cli/internal/locale" + "github.com/ActiveState/cli/pkg/platform/api/buildplanner/types" ) type ProjectCreated struct { @@ -22,5 +24,9 @@ func ProcessProjectCreatedError(pcErr *ProjectCreated, fallbackMessage string) e return errs.New(fallbackMessage) } + if pcErr.Type == types.InvalidInputErrorType { + return locale.NewInputError("err_buildplanner_create_project", "Could not create project. Received message: {{.V0}}", pcErr.Message) + } + return &ProjectCreatedError{pcErr.Type, pcErr.Message} } From 2d271e1d91fa4a506569dece28812e3725cd8ae8 Mon Sep 17 00:00:00 2001 From: mitchell Date: Thu, 16 Jan 2025 17:53:06 -0500 Subject: [PATCH 103/336] Return a commit even if there's a polling error. Recent Platform changes have resulted in every stageCommit call responding with "build planning". `state import` does not care if the plan ultimately fails due to requirements not being found. It should still make the commit. --- pkg/platform/model/buildplanner/commit.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/platform/model/buildplanner/commit.go b/pkg/platform/model/buildplanner/commit.go index 10d2bef641..e6a9ad1b10 100644 --- a/pkg/platform/model/buildplanner/commit.go +++ b/pkg/platform/model/buildplanner/commit.go @@ -72,7 +72,7 @@ func (b *BuildPlanner) StageCommit(params StageCommitParams) (*Commit, error) { if resp.Build.Status == raw.Planning { resp.Build, err = b.pollBuildPlanned(resp.CommitID.String(), params.Owner, params.Project, nil) if err != nil { - return nil, errs.Wrap(err, "failed to poll build plan") + return &Commit{resp, nil, nil}, errs.Wrap(err, "failed to poll build plan") } } From 76a40bafd23fbfd1ab15aa2f2d15e58f5ffa9271 Mon Sep 17 00:00:00 2001 From: mitchell Date: Mon, 20 Jan 2025 11:01:35 -0500 Subject: [PATCH 104/336] Do not log invalid namespaces to rollbar. --- cmd/state/internal/cmdtree/init.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmd/state/internal/cmdtree/init.go b/cmd/state/internal/cmdtree/init.go index 16a55c238a..67b38b006b 100644 --- a/cmd/state/internal/cmdtree/init.go +++ b/cmd/state/internal/cmdtree/init.go @@ -49,7 +49,7 @@ func newInitCommand(prime *primer.Values) *captain.Command { if err != nil { // If the namespace was invalid but an argument was passed, we // assume it's a project name and not an owner. - logging.Error("Could not parse namespace: %v", err) + logging.Debug("Could not parse namespace: %v", err) params.ProjectName = params.Namespace } else { params.ParsedNS = ns From faf044e174a4fe2c465b47f5a90f3da1d27130b8 Mon Sep 17 00:00:00 2001 From: mitchell Date: Wed, 22 Jan 2025 14:15:33 -0500 Subject: [PATCH 105/336] Update outdated action. --- .github/workflows/build.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index b2d65094d7..bd2a0b1689 100755 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -262,7 +262,7 @@ jobs: - # === Configure AWS credentials == name: Configure AWS credentials - uses: aws-actions/configure-aws-credentials@v2 + uses: aws-actions/configure-aws-credentials@v4 with: role-to-assume: ${{ secrets.AWS_ROLE_TO_ASSUME }} role-session-name: ${{ env.AWS_ROLE_SESSION_NAME }} @@ -483,7 +483,7 @@ jobs: - # === Configure AWS credentials == name: Configure AWS credentials - uses: aws-actions/configure-aws-credentials@v2 + uses: aws-actions/configure-aws-credentials@v4 with: role-to-assume: ${{ secrets.AWS_ROLE_TO_ASSUME }} role-session-name: ${{ env.AWS_ROLE_SESSION_NAME }} From 5ae7757be3035257258e8ef6b4983883209f4c63 Mon Sep 17 00:00:00 2001 From: mitchell Date: Wed, 22 Jan 2025 14:15:43 -0500 Subject: [PATCH 106/336] Start building on and for ARM. --- .github/workflows/build.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index bd2a0b1689..a44243d504 100755 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -41,6 +41,7 @@ jobs: - {os: ubuntu-latest} - {os: macos-13, shell: zsh} - {os: windows-2019} + - {os: ubuntu-24.04-arm} fail-fast: false runs-on: ${{ matrix.sys.os }} env: @@ -511,3 +512,4 @@ jobs: session-build-ubuntu-20.04 session-build-macos-11 session-build-windows-2019 + session-build-ubuntu-24.04-arm From 9d297c6b1b634208c13e480f79687e73ef9020d5 Mon Sep 17 00:00:00 2001 From: mitchell Date: Fri, 24 Jan 2025 10:13:11 -0500 Subject: [PATCH 107/336] Add "arch" param to install script's state-update URLs. --- installers/install.sh | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/installers/install.sh b/installers/install.sh index 978662623e..8a9143f80a 100755 --- a/installers/install.sh +++ b/installers/install.sh @@ -69,6 +69,9 @@ error () { case `uname -s` in Linux) OS="linux" + ARCH="amd64" + arch="`uname -m`" + if [ $arch = "arm64" -o $arch = "aarch64" ]; then ARCH="arm64"; fi DOWNLOADEXT=".tar.gz" ;; *BSD) @@ -78,11 +81,13 @@ Linux) ;; Darwin) OS="darwin" + ARCH="amd64" DOWNLOADEXT=".tar.gz" SHA256SUM="shasum -a 256" ;; MINGW*|MSYS*) OS="windows" + ARCH="amd64" DOWNLOADEXT=".zip" BINARYEXT=".exe" ;; @@ -113,18 +118,18 @@ mkdir -p "$INSTALLERTMPDIR" if [ -z "$VERSION" ]; then # If the user did not specify a version, formulate a query to fetch the JSON info of the latest # version, including where it is. - JSONURL="$BASE_INFO_URL?channel=$CHANNEL&source=install&platform=$OS" + JSONURL="$BASE_INFO_URL?channel=$CHANNEL&source=install&platform=$OS&arch=$ARCH" elif [ -z "`echo $VERSION | grep -o '\-SHA'`" ]; then # If the user specified a partial version (i.e. no SHA), formulate a query to fetch the JSON info # of that version's latest SHA, including where it is. VERSIONNOSHA="$VERSION" VERSION="" - JSONURL="$BASE_INFO_URL?channel=$CHANNEL&source=install&platform=$OS&target-version=$VERSIONNOSHA" + JSONURL="$BASE_INFO_URL?channel=$CHANNEL&source=install&platform=$OS&arch=$ARCH&target-version=$VERSIONNOSHA" else # If the user specified a full version with SHA, formulate a query to fetch the JSON info of that # version. VERSIONNOSHA="`echo $VERSION | sed 's/-SHA.*$//'`" - JSONURL="$BASE_INFO_URL?channel=$CHANNEL&source=install&platform=$OS&target-version=$VERSIONNOSHA" + JSONURL="$BASE_INFO_URL?channel=$CHANNEL&source=install&platform=$OS&arch=$ARCH&target-version=$VERSIONNOSHA" fi # Fetch version info. @@ -157,13 +162,13 @@ else error "Unknown version: $VERSION" exit 1 fi - RELURL="$CHANNEL/$VERSIONNOSHA/$OS-amd64/state-$OS-amd64-$VERSION$DOWNLOADEXT" + RELURL="$CHANNEL/$VERSIONNOSHA/$OS-$ARCH/state-$OS-$ARCH-$VERSION$DOWNLOADEXT" fi # Fetch the requested or latest version. progress "Preparing Installer for State Tool Package Manager version $VERSION" STATEURL="$BASE_FILE_URL/$RELURL" -ARCHIVE="$OS-amd64$DOWNLOADEXT" +ARCHIVE="$OS-$ARCH$DOWNLOADEXT" $FETCH $INSTALLERTMPDIR/$ARCHIVE $STATEURL # wget and curl differ on how to handle AWS' "Forbidden" result for unknown versions. # wget will exit with nonzero status. curl simply creates an XML file with the forbidden error. From 276641b30c3c098a44c248cf1747e351a105a07a Mon Sep 17 00:00:00 2001 From: mitchell Date: Fri, 24 Jan 2025 10:27:30 -0500 Subject: [PATCH 108/336] Temporarily add step to install ARM64 from local install.sh The github action uses an install.sh that doesn't have the necessary "arch" param from the previous commit. --- .github/workflows/build.yml | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index a44243d504..4ac787ecf8 100755 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -82,6 +82,16 @@ jobs: - # === Install State Tool === name: Install State Tool uses: ActiveState/setup-state-tool@v1 + if: matrix.sys.os != 'ubuntu-24.04-arm' + + - # === Install State Tool (ARM64) === + name: Install State Tool (ARM64) + if: matrix.sys.os == 'ubuntu-24.04-arm' + shell: bash + run: | + ./installers/install.sh -b beta + echo "$HOME/.local/ActiveState/StateTool/beta/bin" >> $GITHUB_PATH + "$HOME/.local/ActiveState/StateTool/beta/bin/state" config set optin.unstable true - # === Setup === name: Setup From a44f86bfc07305f1575d77d27325606d76678ca1 Mon Sep 17 00:00:00 2001 From: mitchell Date: Fri, 24 Jan 2025 10:50:30 -0500 Subject: [PATCH 109/336] Fixed sysinfo support for arm64. --- pkg/sysinfo/{sysinfo_linux_arm.go => sysinfo_linux_arm64.go} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename pkg/sysinfo/{sysinfo_linux_arm.go => sysinfo_linux_arm64.go} (100%) diff --git a/pkg/sysinfo/sysinfo_linux_arm.go b/pkg/sysinfo/sysinfo_linux_arm64.go similarity index 100% rename from pkg/sysinfo/sysinfo_linux_arm.go rename to pkg/sysinfo/sysinfo_linux_arm64.go From f5fa90e99f8c92ec7f208a49b4b38783119d58a4 Mon Sep 17 00:00:00 2001 From: mitchell Date: Fri, 24 Jan 2025 10:49:17 -0500 Subject: [PATCH 110/336] Use arm64 version of parallelize. --- .../deps/Linux/{ => amd64}/bin/parallelize | Bin .github/deps/Linux/arm64/bin/parallelize | Bin 0 -> 25762834 bytes .../Windows/{ => amd64}/bin/parallelize.exe | Bin .../deps/macOS/{ => amd64}/bin/parallelize | Bin .github/workflows/build.yml | 5 +- activestate.yaml | 55 ++---------------- 6 files changed, 7 insertions(+), 53 deletions(-) rename .github/deps/Linux/{ => amd64}/bin/parallelize (100%) create mode 100755 .github/deps/Linux/arm64/bin/parallelize rename .github/deps/Windows/{ => amd64}/bin/parallelize.exe (100%) rename .github/deps/macOS/{ => amd64}/bin/parallelize (100%) diff --git a/.github/deps/Linux/bin/parallelize b/.github/deps/Linux/amd64/bin/parallelize similarity index 100% rename from .github/deps/Linux/bin/parallelize rename to .github/deps/Linux/amd64/bin/parallelize diff --git a/.github/deps/Linux/arm64/bin/parallelize b/.github/deps/Linux/arm64/bin/parallelize new file mode 100755 index 0000000000000000000000000000000000000000..d0f0d1eb4e2723ea288ecf4795197c76e2bab8ad GIT binary patch literal 25762834 zcmeFa3w%`7wfMi!%;W_@VofUwn8^bIib9J5DZS?8!AmS!<$mPTshM}B4k9twb+qOliI?1#@tcqt*rW&J?`G2X( z2aon866y(x8_UEUi@clgEPpF@3O zAM`^a{ZkUkhx%CMLw&6B>ptJR8vuW|H>Ez6P(Cm*O`4+u6I1nl)ee1&mGZ})tcQNw zgclwB{bzgW0{*iWoTmLw&szEY)-CpbAW!b{p}l={`Ow~U>%J+LRX_N6Iq24>;Iio z-UU-0y?@HqS#PW@N*J%m$m)Pa+8#cHbgv9c%o~Qf^ITLl(E#J8Og5}>kPx-H| zuh8Z5eiqX#8ct&UC8P=uJ6z)Eb4Slt=~D53-KlA5S%>%Hxs>YN{}EkPN1vJwdT`0pYt!Vekc9!_rFu% z?-cku1^!Nfzf<7v6!<#@{u&C1ZFDP_+$Z1|jsM44W9CepI^&l6?;2S(`s%OU`;Rxy zA3pE8@pq3Zz2)Aj+aLI+uT{>u;jV(OPab~D{o`j8+q&jA&K$SCRI|hzfo%(~PcBD&y>X*Ka*rsSf}6UyXWQ&YRVM zSDYETR7Jz&%b8!+*?NhJo_$-@&!=qY5;Hm@tm-e5=S$5f4Gd

QvoFT~j|GPc`YE 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≺5s^c8vk#19FpXt1Y+(YsZ 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

8(KD6*JI@V1;4d^j3kRk~&ccUY_}nmD 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%0A(q`~CDfs1^xmVZt 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,nL}fsz1M_cz&-4$kSD*iccU_2Zva*&p*hW#luq z;oD?2tfSL^<15&u)J1np@1aiNPez)KP^a_-PRZoz)iuq~ zr+_+lQ>Qg~_$o7#tHX=$n4TU;9jKG`h1!QtRy!72La&OyUS--M{?+n+=AZiK>fA_; zvyzCh1&M1$HuXY~a{E#q4Y03ZWQTmc{@qSVIdt#ua7x0u^0(wNM7e#A z^J2=Qxqa~IklxWg(8{sYZ?$Ekj*p<6uH%XO$@kTB$yul>VD=UgRvF*bd!c=!vaQ@` z?SEv)FTsiL7gT?h(RCmD4KN3EjW9!e`)Bk?Yw0^DXl&~|u*3L%kD^07FEVZC>~iEo zd-zP0tU_1Ov5-DZvMM@C|8_}_d0xcxAUdn>>9>4z;#0I|JM=T}Q}->D+XY=T7VL!n z@<-$Aoak@0WfSk8Ue4dAiEgTc61JF!s6R z-TpJ^k#+T-v%qy?{|5ZqiIVrh{2%goH0N;qS^O3Dkjw6eC!)P;^Ca*6F@D%*$UM*7 zG0ZIEkEELO05pzSJDz+7{EhTI;6SI@&@6}j~)A%AF0U`)OC>{j`=R6gRE{g%fjJ+R|E-pN@NDA|h)=F|jA z)^HWx8}KsxRcot9o;R{mn9`?r!Emv(*V=1o&ed!F_+XPT!-0otastlX+s|89b7}0^ zoWNRQd8xglkrQ3lvS-T(=G{vv zHg_X0o$O^MSu%a?i&ow`d9MChb<=M-^f}V?*Rflvye~T?U6-Co*JWqFLfIDf7F7Rg z*Zq!xhwNj|-^T8`c}v46qju}tx++g#C|uQhIM_p#n-T~&mIk2hd9^kF$~q#^a0~S5 zroZW8KdE;gaI)L)bFzDg5A-Vb$G6sxa2|D7gWrB%B)hAWITiBUdRUv>OYHC62O`

t~RAR_F2&dWZ){sZ&0BEg8%2 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Ð`t1n4dgq~YmzQ`koy`%a*SK(d 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 z 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 z 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

5>mcL4Splh(B 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

`miXpBQQ5U^p-oWLXO;$Y~Vq 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 z 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 z

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%0DTeeC`2 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 z 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�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

-~9y<_{}MWvqCRs&6f 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¬v4V*r$`^`6N<l=cn$tOI5$pKrs88}3|`+D$sZH${{-&i=lfCG z9c_HTUOyXHPd2#u$>M&SAvG;z?$vAtf8KtqwO`rn{q4%E?>S>S;-TF^{$*T#fr;fp z6Y0yshTo0Zr z5B%Uen;L&{(ta;{BmsM(l6(e@S#9QB3{6vZ8EyQMHeDGadb+|xPrHV}|17g!HiG_m zAN{e==Ii&rZ*cC!2>)_;ADlWtbc4>eQ;v!)``MF|#Z#CD_S^Yl!V*Fotdk1{F4ZA3xIHTmdWJ(*jLhr0r zj&(NcUGkH6KN!l~O&J5nBUYxhJ=}PSI6IWr;Ddq1?{%KLN4mv(5t%jcrA zzoWg;$d{gj_IWF_E|tx5!N8uVo1o!5t2bJR?0y@1L$~_Q4>#tD-q7=Qd~R}eOD_DM z2d)>(=I~d?s29`RP$!yrzp+6+`x<%1I@=6cub95cMbbO!HQ^`8j$>Xndh(I__pqys zZOg7Ydm`ywH~(vn&&(QqtCQfqxQnIXDJ_V zrdhk#>%#PV+L1h($*1B&S}$+*?iaoZSfFc*`pwuB2ImKD+d*^?1xB_1tmuNz=oO*f zn;83$<8y5kXMCa$*)L|V@d*7);|>|l-i_q4rc)61RkOdz^!e*UhR$CQy#FDY1CP4n zip{s-x))rx&S5PxWL2-Hu3}^GIJ!A`k8m+P_`#M6_GwnIPqTF??S6%Sa2UrRUGouHXyiAhDN}TBb z{jGD(%+Vl$oX_R+5i@hn*?X_O-fQi(_gU5X`Uq_f&}QSfx96B1d&;R;&u_JFzKJn! zjl?zPkALX#3v`arO58m&ThhKU<4Uf?cZO&B5kkY z+J(K)wvP5*%rN3uW8rb1zqCf!Ld}NJg*C$FfvsmBzrofBjsKb_Pj%M_p;;^U^xUE! z4{g5<-lzo+)%?k4)OsdxzR|$isC-h+biA?RUUYJ{3>P3X<29G}bo!%eY|3(^zrXy^s(ge5#U<_tzX8@9f2p0qc48K9)jh_FghWI z>^jKqV_$rW^*Ekg?w(<={yK83kFY+y4L(C(ko)3{^gEDUp5b~zIy{B{%^32*lk}-Q zCAH*f=_j68B6{Q76x*3?ho!#@q#J4b8Fs(D@cez!xp> zAofD_%o+Wz@!=)oMcP_FHOPqZHvIKWq@q`Pf#<|?F9FkTWTW?G)(Uwh34N=8#rTr@ zP526`!Pa%bqUSc?M>_9wX17o1x+QOI-W1i^EXSuDqQ2$<^7(y>kfleQ_`ng?3~rU* zpWktw=Z+$)b=SN-=lp}V7HPJnCLDndj6288*9T##u4^_QrJsAI-&l`0|DgN+?Mm|C z|DyAjkH_NJp4m&l!HOH7i_g5-Iov(r)g9{d0`sB2$?3U0!kOp7GqkmJ^+f^ugWh#* zzH5I3^GW7JebmYa$X~SL1G?m=Yo1#;xDdMSWnb8vyw`ofx^X)TpN>?>E*FKUm4)Ze z<14mY_mt5=_NRyW5m$cgD7bttaP6V3YSsk%uTHSG&e^Oz_(5qKi%!?QUBs@knFGLb z9#}+E^;be4X?yg{^fuK3n(s-Qsy+Cg?`%DLtL#UBuQ$ua`M`H zSad^V@B#2K%eiLr1MAjpdyIE--@dkR%1U4!?~E7T$Xz>aLr!SrGn_y2Wwm=a7GJ<# zIiK&urvr1SGlef7gD)RoKjAeKzkSO&=bDw*TpC*3|1dRIoOz@DN#HDA0)EpxJT-rc z)`LnJPjmFwfrQu1|KqOp#HbPS=bXmFUDIs*D&(ehaO>G0UhU-3%INXr6m(M&_$wo4d?Wive~0}`(xum+ zM_t*=)PH=DamJ$Gbw1aM+oanw^;(U@q8n~?eS}lRCwG+cU3xnC1oLTPE|uC-8tN!4 zL00f#-S;8z9siB9HD{eJKDLAN_hmeQCYtJbuvp9_5XSs7-V0C+GZ{ z+DTv(tmpAl1gB(FH2_uk{Cn?n+G|$yjMbgLJmBw{J;9%3$FNmIB~a! zBlMp1zI=yT^g`lpe0AvI@_?JOP#>bpQuOaNtV;+lGr`NZp$+eqpVb6C9)KQ8L*pLX zgACr!JZFX`Zk`zm>0Rsbalaj!t=KrMdC^vLswSr0VDrl-9?#T={`Ob4@5|0rj6USF zk^5cU$9(Obl*}mwy?U8<5*pgN7;sCM3KwPH`wbD-?b5X8m zJ$?1Ur!8C)jfJ;ABoEO8jRwHOd3Yhn10`=!ANNt82d00)c;Nowzd85+#)BUm;mrLa z#z(ivKm6xAN7gF^v~|3HzP~ur_7i3Dcfy-=pyFNm%01|+pe&jk-srCT`Oocf^YCe( zTF(S^kgo#;+usIYJ2wJ6Puu%qGWAB5&%<9!=u9s3OKJ+bX9;tK$CXR#o#YIfua7^_ zD!BmOo!XP?#RuAFXfT6o%b6`fcTBSWFUNO+xSX@{2hTa7i+j9x z>{Qc#Grq`1Vn5~C8L6jH~a5;8TBW zKbPUdT8;kDGlr)uT==vjk7~R%EkHlntgRjmeSW%tehKae68*|&Q`-w}w8m#}dU?^( zJA@xM|7o@P%$5Dx;FBC6^IZOk8zaSI>K7EY@d6dzOXBydx+a=LwXEy&;==~kqBJrdAc5S5M5OzT_jg`HfIVBkTQI*C)2QxWB7) z$1W#4Y|qD^vhFaJ`n|E%>W!tZnfRkU)4dpswX3f1()4~ppANIL=&(DWi)A9x@&rEw z*PDmGUv+ior=dYm*Neu#dH=icH=#vPUs(PhK9YXl2yV|&FYzzfs8-|@{r+MC-nP9K z^7+vxIrs*vz;Q&iZ1A&cfK$W|cJ?WKOoKL2@{u)8n7upUi`e|dCG@5D=wY`8*TWNv zKi2<|6IX71n7%;T%w1ihf=gj zEs-3Nr~5LouW&T84L72D?xu0Rh- zkLtYeXz%T9<3ek;%Dz<+GbeOjmnXj(??*T0KHr0Ho@C5<)L(7DCvA7uTCIWbt?Rvv zE#6a~(#?90Quo`pw}rXi3xDL>`vb`NaAv0K`|JGyxx7ChpSXsz_0i#af517`0^zI0 z8V4U@b+^O16@IUBD>3K8_clNm<*=1c*cY?+sSmEf*Qg0&gTYmTdDo(I3?}rl_P;dJ zrX5PS(4w!S8O}G=YpPzQKJ_#8VH9C_&4+9k1cfK z!~6`j1#cQpZ4wKKSLnZ&{)B(QxvSWT7vtL;)gE@9m#-E5+_tmY*S66cOF2H<=Z5Xu ziyZ5@C7dU(K6~c6eEBPERs_5{8f&hv58a%U=At!KTeGNfcz0N2oBHVJa@Q)5<<6Tl zS9}6H2Ok`Ve|u?rT?uuK(9iNM_!inznK+)Q5BOVTK=W5^U0E@C%o@f)C)pYV{r{LV zXI;M#`)YH}>DWzvNqK9 z2lV?C{514~bW-+WeKi2%h z1>5hG$uIclbJ@9Ez^oeAk1~e#)tMfNeAulC!Csr*$4A#bJJTc2xwZMG2j@j$M*9oPpVkJ+PqXfSdI-zxB0x==1=`LFAZ;_ zxS?_Fx;LiLUw7<=w&RaBzOA!$6rV&L>=bgRcaYHc>;5^h?m0a8TApmh;L9TXkraFO zv`0_y*fYRHEyKOynLO5i+9!N&>yhgstB}FPlIQFFe%WI`PkMv?)GkS$FxaR1Q>~Qt zWoe$K%ji>m#B!WDsp*lp&OtbGll#6^J=Z9{o9@JmxE3CC-?2#4IC$9^JvaLA^KktO z)mU8ZnFMFz)l*9(8F$3PS$!zh5Wi0J`1Ns*Hy!?sjXzg+J}?4*{>SZO<4=FR+2zp@ z)|;_+$>q#5ZS$V!Jn*dK*?9F(wd3tGKv$$~-oqZRsttNBwcKjuDnzrn_$@JXaSuLC z0y}jBbd8j>oK5R5Y|>@=%UjbmzVgmkur(<9Reqt?Tr1OTF3i)IGm3~gVb7^}N-4{jorO4AMuIfei z#jsufoW93iC~UmecN%!MHFk%s)%MNCens-AY2Y5Pn7)Kp6(5OSzRX2`ioOJ|gry3Qjjkp4iAGtH2 zXFa@IJUj_L@Zyqs4LV_4_fqOF!8#$R-#ZetyM= zLpqK*S`Fph0hvMPx&FJWqoTz;hrias`iOkbMtE26+AZL7i1RvG^AI;`#&B^+0RI-%0o(MQ$hs zPfIVP@CSzR9lT(AB*1r$YO!Qzu|4uDOR%pc)K`Sa_4dr=I?q;9|G-%IrQn}B2)hRj zMVGP0>Gz2i(|w?&*?uWBc1D}g*Rh-gCd@ufK=ko>Z?RnlkT^Qn>6)(DH2Q^~bisJ6xcj5GEtp42@!faeyKH^*3C0ad+l>Sm+$m??ax}RuDQ~2R`x)1 zJv-9#VV;-I?Y7B{yS||EyhR;v|0{C=_QXob2Ki#nfZIka+xv)ern#%gfiCXBFGF4q zC*U#VFH%utlKoX`mqd5oN&QQg@&r7mcG9O>ySt5N72_LE!)uYS7n7%X$BSV#K5diW z>J|EmF_!FeH|ue>PNVz0)8*(tk?$*U4y*4J@D3o$J)G5+9v2x@9}AteTkmt8+2?;QE6IqhZg(ia5Q$d zZxMbh_|$rMdhEr{stEMg*uraRxbWV2KVP@CcR4b_ycQP5wzfM3Ul?FsDZOJj4M$!_ zr{=a?>%Xjn0LKyf5DXem38IqZKfJJ(;0HPt?U#a;Xce&fpQe;<1as zqW6Z1H|0z8Jx)zOyt)_rGXOuTW@v!5f&uZbuAzGiZ)Tkd-*8->o8#5BXwFUds&)k( z6Bl2Z@4_0Ma&kWZMDVkd;AW}t#@I=4X}E)y8tYAPBzVq4=M~Pnt$*aK+3NE46UN)` z4>ffzg|`pF+p|KejnD5BpNH0UHgSChJWlSka~I#I^4(+^T)1cIaF#tXzM8c|#ij!_ zPF%XfKO@EJA4O~GA4|Wq?d;v-bD#I`r|TcVPdWG0@AzKuTjQ?5I8N)19&BC@eI}Vl z75LIKA3(NycxFucqH+v6g*@I^`uf4`L0guUQ&X%bTXsAAgYPMyt#^9Bmia#0?J@30 z23L%6zoKl&`@V3w{rU=hkHvmj{5Mgy>vDe$Ju{fv27ZR{(ZI3J0(s(Ta68@X6}gJs z(fu^q_`FynUPQj+4_MsBex{IY0kY%o{ny?I$yy}QY8`ZuxwewnJ|Jy;|d<-R0R*u&6dxnm{HfN z(3N`TdDf-4caQFk;~p>_GMFC12jqSgdo~2uiEnK?+bFmeq8Di2Onceg@XPQl&%J5) z=yMEkFA@)B&jov(UjHn^=Y@AZmd!h5vG_B;ga0F%{xvks_J3}B7yPrr&d1o$Em4g-PBuO-IC4)pbxTRvY6@_Zls=5u^73|O7@KHfu9_7 zLXqRV)kAJaYjZu=3i(B%X#(0f0_dsy`U?S?jx~RI%Lw#5NdH&U2Q~0*6Lb6&cq1=% z#>JO=KCJc!?Bd>!xVM3O2Z$Z0VWW;MR&mZdZ)-nitKv1Nk&<$s*!xw0#+DJJkO*JE?F*53W|2m$}_#^kcUw{YK;D6o8@C++s#M6g-_|1VRn%i zQg(6giEU>;HO}m!-EaQ5w=V!#_j6BcPV@0Q%tkS1tyw9jAA@hxv6Z*RLryPV4s5N& zX;YP_=XW1_I5+6*v)h4{zEX4HJ^JoL4=rPVLO0J1FfZy@R&J(-(blr?w;uYXt!26A zL=eL;{-F8@u4SdbyRBc*p1QcxDdu0oI=VmCR?d#l8kOdtGZB)CO*bKP&ux(|ao<$KdeT$!%wE1&3q7QIz>M7>+`l ztu73DYk$Q&))Q5?u@N~@Zf!vP&$IaS@%=p0%lHkz@16LtGxo@wNnpgipX|M{Go-_7-DPX6Xov>W1iSBAnJ z+5;-NE5W{gU-u+~)Ki5gxN@iQG?vDwMefAg%5RwMx)b_Ahu;!!6d~*K`+F8*%fPSf zqH^{5JgYX+4f>QW)n^O-e;By5{_`p@Xug_%3vrLeY-LPvQz86q;CefAgXiM^n`b2_ zHCzj$!}TeAv{P73wpdR9`fm^@pmz2>LaDw z+J@;VuJ0yK+YBr*?y2_E*3D?s4o!6C;5>3L{(DHYzXm$AweqJN(lnmy<~gmewpy-6 zwVk;gKf{N6WM;r8^x#tboo&zSre3c9Py7z`+tPJAHeGJdXVU-G^uOuX^PSEr4f z&#+v^8|cB$WbznV7x=|S^pBs%h*VrLkD)w;*07{sRoA9^GUWm);kf~=IS~_UzlV55 z`8@5v6rK~rL{;zQ{Njb^Ea_t6=hWR+d$ncFY4^Opk=93R^$r;N$R!Sj58}H#UsHPN zy^Nc!Gb|Q)ecRdV3IjU#4&FPDo=V|!mUB=2o$o<6Nq6yGbCHjz9ERZ5p1W53kXISjYr-yK96@y_90i2fj;6%t+D2ihdZ(*wCZ-`b|iTAp4oQxhXuLM>)BpnwLW4> ze{A_K?3;?~UERySX|nrPl9(k$yjjKj!2Rcw9;`>%&m`Y|uI$zk?|fL=9>DeX_FK%u zzu#P#!D|Eegr}|G^)B_rT!nAps)U?-|7TRo6~5R541JG)H*zJmW-WUG{BM)*Num#I zzK;-V^SqBE=_&p0{o&9(%I%7O#7AbMk<~rmO@24F`5x7i;DZno{MDG^zBHeLU-9V$ z^g~j3%c7I;^d0Wyg5z@5Nq3>gH2yERb_`w+KlJl^A-EnupDah8w4+ayOA-8i%=3un zgNatB=x2Z$G;%v;1GM&Z0K0yQeuR%Er(orHYU7k2P`&2XHR=_@%0x$17MBev4 zY|Rw$47|A%g`aL2`Qcmm0zxZ<$u2%(7|K%zkeTHm>o~O zS~fQQt9X2-)jwzI*9{-wOEIP8Rl%`j@hXSF40cwyL+gs91YGL zz}ffn;c(snoUDT$@@woP_^Pr`o1vMDyU>U=Nt)N+GA~;%CmvA!cxn=7_R-d#-_`1m z&N9Dj`qaG(`rMyIAJw*$e?a@nXSel|+tK@O#8X|GT_z$+qmG-Vw<2JKyFBL zTN<3(weUQ1Q;nHO=+AGg{P7X+zA1xu_Rf~Iy>v~6Kjw|XA5XtWw*T_;Ig&fcJv@xv zFA7x*nT}Z3`Af!7Y=nN=QteO=fIXJ(OV_U86Ub*z(I&MM`-d*;#m`JU3{Ro!Tz<~& zc$%11{G-2S)+mzT#$Ti8f9mJkli(6w+fx6tT;&h9=zQs_N6EuzEaXBy=#2kXzF+lz z(q9%QxaVmQKm5m5cfY-KREn_$#}m?djHmNtYtdB^*46nOj1g-{hlLoYq-#=J5qmgd z+}F5uKbz;S3iBw;T;Nk&&f}qzpl&2_#xk2J>Ya4Phu~*{(ql?2H^Gw+GH+7|?yrT_W-b~SnWEj*AdPtVf-So}@Xcczar`-hTqIg8`Ir_Lr=yXE}{D>q}4 zR9ks`_x7`??n9UA)`oVLyz}@r-c>p)H}b`^^B#ZUQjBYBZ@~u4#dZgtjdDH8vvu#R zKOLse6n)Zuiu&z=rd7nG>L@y zR--sw{JFMshGYjl;mXcc_8*wdbLHg$>V4!J%|(Akzg~r|(Yqgr&6vZ!3Hdu)@pDi9 z?C;L@{eR!Q)Oex$($o*0ztp~V-p=-S?%THioz~MW#NWhK!_EZOdVzFs&-CFrtm)#X ztZQjpD5niBJ`}_SI!iH~n8?S+mHB6F=ch;DpWl?c3;w}>8L1vbIw*thb)B!Z1n?c1 za>d+Z3Vai1nvQbiE!@F6x#2wpzO~Q1)~Wyd@6V=AH(K)>=cc;%MI7fh*vWKWa5S8r zoqBbg{ulF4+c#_lCv4$aC#Z||FsyR#fWlRBrk;<+UHOFsJ3{|N4ju!Yo%l3SbAbe;2788J6L zz?OQ>MydDm?8-0b+8Szcg}=H`?5y}wy0>;xF7&v3KZSU(&BNCl0UhSUe{hoE&-hdF zWlET*_W7xPr=}QsQqL8HMK(q8+(@vvbwBu^)3H71Q{k-?U)Y}Y>f2=VYfYXsj-Er; z)8|L%Q_ojlN6dG%HiGTL-agU~6YqGxo51U9_}eviMB@9%yHv5yVAYG@7kFIQ+%qVL zjghs-H~8$Z=QzhqYb4q5|1bJ4^kA<7_C4eVdOM(bogPBn)3$kkC9oNBF1?V{kRi8HN2Zv4C@ z%9xCQrh#!ZW;8m%{DvrFx1;~01O2li-22bO%iMbJEpptKS{e8R~&EiSHD!fFhy!Wqoe5n}m7u5Io zvEwDas}G-MR+k%y4c7$dmqZt*%D^u&y(K_P%w5{v-EaO(M&F1(%aPSqr|{nL8SdKk zSAc&vx-A$FlvAsz`M$<{Q|P9ex0~K50Vlh1b1pU?YT2Qh#cScq-H!8Og!4m!ZGE{f zp5P27z)2N*pwhb1n|Jnj!{!U0MzZGl+9>n8VCVN`{2T4p3a<5;ZpB6@7b3j2!zYc< zbGR($xv~sR6W9gI^*jz48EGdn|u`YSx=v`wTU7p{sepfbVgWEZzqbBkMhpD$l53F*XXa# znxFiA;i?NiNwTkhzP~Xu%U`h0h0?tNeyq&j(gtz38;mm!a`p?%HDyIg}D`t8=!srW`}J zz5J6)+pGNjk>rw8BblIGF*0yCeQ#D~?<9PdXwlxuCff_NaQ)EsUq9;Zoh&K;0N3%; z8GGUh)@qihA9r4YL+}XaOAWuPWLn}Dxo_#7w&&m6Ii>P>)Q=CZ*+etF=E!Ww7s4J{k%NR z!&y9`eBqOx-S*}C%JJgb&cBBC!CZ%Y*4ya!YWbVuuI95N=|9fG7#1(ehYk9#3E{`n z@8lCX3(pzsXFfjfq;;C72U8D2D{NOkb5rez_Tg(S#=S1$+ zx=nH+FfT#}?8Lu%SoW6vqsUWuThKdHjG3&7#Z$m3-6x!~{*~5Y;zPl#=k=`O3IBQNeXUXIUWobr%^`ai z(qZMo{do!xx_?%ACvwoLDd=O*;)XlmdAb$5iUuCf|jcKPc`wCTy3*D#u7;Y|29{m(q~>E!|1>UAz7v^es$q3y*v z?APJD>Wa$vE!aidcQcOKmKSq27jspel&$42bmAIw88|(~c+_rNeUN)?LOcPj^u1O& z1;+PfH(>C^6S04xKwLgDrmflBa_TJ8# zI6m%+tP^8{;=!1}*PkXNuOE16<;zbzYY30O|Ea0emCnj z_z2&~YH8{JPmXcU5HQ#o-SAr44*N0faaT8&7UP>_T^okCfUUee8)u%aq<}jee_Yu= zS=YG?d}RA4znF4$|HQ|?+kYnBl%6U>cGqBgT+_$=Yv6X_}0Lg%0-=YbrC@O_I1pVqe}cm6-w4RWH;ggw~o z#j132Rz5{6;Ok&rmrq(>7>PGiyGt&Dvnr0=()>)$6t!#S>=o93Hipqb7m&3i?W8~Ft*v@vD(|7+aNXWZ^9zq&n%er)OZ(TJ*xCBd{5RyQ zs?YvOPj()ECU>Xm3e~P=ZOt22>+X(GQC%3>D&1YrIitY)SPwO}8n1!&1K_EZG5kJT z{@?ta4Qro#L$$E2v?mWlov|~U{N75PD*z(shnBKs*BgFHsO>4%}WN)`Xpr}p_J=)V-YaTd$wYTDIsURMcp>jmHIi;wPrp33!9 zWaCfmS$mJ~dfR#H7<^;A$8YgQeXbMV3oJgrB{hcUF9d0zbBQEd$w_NFWAcM@p&Pbb z{^5GVb*STI{5tI${63%O$b0s{^9k8}&yP{t5Pndi3}1`&70FhLYln#Q<+r-^oSX^t zb7~IXsd{4?INS&h7l6ZQ;PB+ylhg{#dxN+nE;!Z43UcJy+a%bGcYMFwql;n+<N58^)U!%WdU-q-QY z%>lbVB@&;JrGI>Rd)oHTW!6LL;Nf}5nPNKYzsBWV+ry7enudHVLmzD_?7rnZa+DX! z+uROqd$;6I(b~mH^(H- zXw~8;;0f`=I@LGgdnY_yD}J~Geozifva}2S?43)THwSuy7p?8bkO9ZZ+w3q-2pMP& z=&ll{^a~+mAPA=e58&(1ss#Vl)S`x<|9W(n;t1(y>QiSQ=b1_;ymB}C3!XV6ekmD2 zjuUH-QsaXhqZbY$L#!FJ9R$Wc&3Q@kvZNe;<1~e0|UN`di8AtX;aTdhI7%-DLhWyT z4V`p^yj27l)o+JS?KwR%!CBRX{W(ItUre8qc~2Ohs{77kPffemr*f$6)aIb)&NPD8 zlYB2=U(W#d2hg+BfydcHzxgEhw69b7P!}gpvOhlDvE>N!tR&_`zX~S_a^`v9-tYea z?Yrsw0PWAQ7W&7sE8uM^d5j+DS9~3Q0CQ1|`YE0r_HVZH?gA&O1gJU3vuo{Iz;WxG3TCN3@x5VyJlcA zxS_#mYWj0qwg z`ZIc{pSJBz{^&``dY7f5YHS}(Z`cmzSQ7wmb^p}9U5Iy)M(U(3` zi`@RyS2Op{;TN8UZ}2&{$zSl^hfH8J82COY_!wKcByxI>r5IP^ z_wuP6UoG#m5WZ{ZS7T}ZcQg09Z*k9!FS#|40|@SGnuI=4oQY1l<0j93PJ(vVMh1Tn zsHJ!K=j+oe$Nx`uE?YA~{D0%sCd^eQyEZ_U#*^R7$*!M+zKcszyTnFD9 z!HIo`|2J};i+zW8H-cY%-#8(5mhW+W-%yM!$RDbS#W|be`JkOPA3?l)BQWA8s1BhI z-1Jj}qxt@YH{XPK`^Fg0#CQfd1#hamItm_qe9t5|8>~On*i*}6@u~UP2Kn~%nOtJ) z7Khd>=geF1J(abd_To_6H0bT-CsoIhXJ?7`5EE!!z42E12)%vpGWv@0{BhzHt&c^y ze_-ujZtD-{pFTO^_zuw&S{_=n(yx2aI!vC`FV;HjZKp5EM;-i~fcNa#7MJeI?M8S; zHCwhPi1{^(H@SX|qH`T}Ac<>MIUJT&tRqSFg-%x&7 zJfHgogX?h@Ka$@Va9u{T@xTVXQbqhR&iG;DM7SP{`{!Hx^jSfTLvTE!4`a$k7b7d; zSJ9udnc|Ai435vZ_z@h!k6YhKj-WUeFG7F*2puyInVe$s>#x7KG83GKaBe(^E>FR~ znv=g45JRpN6HAw*@#^PBkdffrTj?hkKh)ylPsUbvf5hF7x)EJ4ZK!CDbdc`NM<;AB z-K29`BZJCQZ20xi;f5|Jou8^h2e~;Jm*2YZt&6bFz_U0wrhH`8!L&0rcJ;9QlNT6! zfU&iAO=Ies^rO~mh4+zs@4de_JkC5PCY9tTDl=qKu z#xpSw`1$$TOs%2bd$19Fs{VwSaghCUW>XI!V;jNA9%yCjd$dcDgYOHpRlK^Mx;nMx zyyf^_YClXLJ<6Hf$VZC4*+cE>4_^*Oh%p`=VVJo5!9_yABVwQ#ZGPHV4pWMaALoD*iP&_^Wxg{<{YrYG!V# zk?ukUh#Mv+Sqr-szicG*TI@f27_?-qd-Lxr~OVZwKHR>3uob@oW%B|0qAP z44wlX(=9rW{-%kwnAk!_P^ObP; zcLA7#@vQ9^%Hqc~yy)j?jBj*%VxGMdubVMvFlO0Zk+}4NVud7mfF9_VU|#ae`_a96 zr>Obp(BUL}qI_hF&V-bI03Uv86#Sa4f#$0M@G9>c(FE4fSSJso;kS{|0m(^oSCs|E3wps7As^-ibqZPcI&)#?6-uN^~ z;!FAXua#|q7K#-^jIVxL@h7CSeSNrB`2gBzozv>6(0RT+vA&yJzd|xBom2~M{}nif z=^Ah}BMV3049JFbpl^>a7``(3wCwX;hjx*7VE!R|#DDusZ?9_X_F?;ZlGsVDgKDlx zo>wd*J#GFzb5%ZHK9FQA3U2l8?rJ`llAC%JJD1CvxXxl%9p7H^aq`3S>>BTZ<=Qc5 zr#8w_{)l;O;GS@@pU-0M%jXiDzk*F<@bNT)e>I5ex0acj{gWPu)T@!=Q}?KEhLNJ zfp>Sz9(~=KHljm{Hi}{n&kSB+#X(BO+X5 z&lBXr=J$l#loQU4gMPpL@U8YkyZHh=OAJLn%3F$-MKNd9ENpK+ zwHw{!Q;yMJJ@O$w`6cbh%PQ{_ck`-w9g8)F;FXSGK0SBx-awv{FCx4QJD&{MarLw3 zC)3XWF#GUwezU<#E?_W4Klt!%>bH;nH6Ov=t1+0LbW_n_Wd;HQ~c@uycaUaaEYC%{i|OkYkk_Im?!87cl$-aOmhmfq^-EgOiT%88*G(Rs@h zbCEY{Cx(*V-RQ+oCnlWSVS0}ENjkKy*riFf{rcezBgZ;#P725{v5wx)A$%)Fq3-4N z+DXsG$urC*e_(s)hq!KeBw`iiWFowa#`)>Gt@dou#CVeH`d+_iqWf9qUR(NT$j!HJf0>IyIY zp6H@`(R~XB%iv3E$8%xuQ$?&PIBJx`2VQjKJ-T1FGk@@{EPk44`$aPTyY(~W*?6*$ z_vwiC<*dPx15Kg#We>5bR@26FhoZMH;5<<0u)eS1dlmREmM%peu(JkJl)jLgRbN4G zOSY@Ad-cp&{1k|$2nK^?68fFGDR^Ydnj$wYwA?cHBfu&+Wp4ymGckW? z!m(Qt;H-ys33Sl=f%CFB8Xaf+?)d@Q(^FC&8LZSmxMc-%k`T+fwvbLZ-mDE!0XUI z>qM&(j9>Ro!5sOvcV_Xt9n-U-YbECDoYm-T3}c!}Mq4Q{iK+ zr6)NX(C)$e_W8>NM)xC5j_oPYwZ>nXd>pEOX@U7T9$)a=z20zc0egIME_T3!*2lSg z^9KZv{bnA`%tL!7Y%W=QP{d0K=Av8-_7nevGj;Qw7fXRrwROK~ClAg$2EANPn$HAB zkk>R;9b;)t3cMEx_DyhXja;`gNITJO*G4BbwrVfW}Z zB7OY!-rWBT9cc9Na!tYSLAyKKrxiK8V7|tUZ!_mP7)%~bYKU#^w?~s>9{-wGXCOO!PbLMZnZ7goEp{!Wh-2p!`cTnhuR0TA4|>NggcgEZ}iMk?2Gn> zma+~eKLlQnr*(nHYiT>^{|@HS&=1?MAMQ(S3g`&mzGUZDj6O5SuMk7vOUzbW*8fx81k@$snDYe1I)KPQrj(i<_pR|9H z-4A|Fx}R*HN4lJTL|4@;)Q!Y9zP;gDjS-WKF}~K6g>S>B=iexIskzJthDs-ICF3sE z`w8TiD7Vd?gg5kVDe_Hr?q?O(WY6x#F8c6m56-+|+Av1_N1V9oXE$7@y0zoCoP0h! zrCqf)tgE`~=#jxq%2mMwde7%ce5PLZ*DBAypL}=?{_NZD9q!M|KK=5#4F8Q*A2QDJ zQyKjy9nb*pSx$!eb#qQ`6u6dC|C4$qe~RW8wHlDz%{kzurPkhgjt$GTcSkGNihdg0 zC%ptO?)$LAS*p(Ld08>hYgzF6xv6glVAfhoc0TR?to)SuW8~KbxA?GExeWXkf|kkt zT2UkCDn}=?9?E+Ml`Go7_g1d$_k74EuD3AfhS~Vpz}%qyn8q)W&Tjy>XqOTXky{tt z3^$V_arW5RIkQP*0w3Mh##--)tlowG)mccwkIq3l@#}&)4d4U4cu(C7ckj!g{qO?) z)sWLC9vDRbxG}fKV?mp-A%K(Y^J>PKf02<_!vp)#H#j+`r$Ikz?p9s^zKxvYI3F6S zj;sBt{3)v63IpHCwbXDjXW>!)p4KT?x%K+c?et`?njJ3AI13DucKjQ*4(>n#m-N3UqlQ+HDvFC=kUT{5a zpr!gdFIv*ae%Tx7=;a^d>@AOL?Nf9Wj|Js>D!f@f3V)UcXn`!p|K8K-zCM52_%q9X z;}4ZMceA&Fwc_{2&aNgWA-|&O#);>VF`lrbT7vHOh%kBCb>;=Nt zuUh`-GAFYMx=O3a`iY`t`dzMJjmy5w8$lxP4Jeb;%Tjg#H)I#*hAX~nN;U`W;S)IZzVYhCc2EK<~|;VAoE!&cKHP z7PW79$n~f4f!Xh~tc#jte5@3GYCT0ZdP(411M^Yovljo(ZzCT8+~1>n?+H84%LWS% z7CSP|Wxh?I_Cb77;qwV`nP2bl`BC^~MV7n@XUen9Q@sOmnyf86Hb z(O5pF`JIwm{7(70sy z_?)M_&jj948P1*6PJV0y`LX?LbE)BvzA=xQlDW`OYxz~cr8w5dYjrqc>sEs2GF{Cr#ile-w>{3Ahx#Co9G}NE$}&A(+VUv5Qn&Bupd zxb*2NT-Ruh*eX4b9zC374ne%@S^0EYD;Np)g0n3Er=MT-@qO@?%h%sFFy2P&nfCar z9i6}>OeNrhkiFa_^j=@knYgm0M`a;^V@pgIrr2FbfT?M1CQ)}@AQD5!&-0JK6rkN zVDx=7tASYRV0Y!eQq#n|T9I}2BY!~i8V9WZ^$vW!lruf}Et{>H2HEWt*JQJ;Ej-Bj z{cP20C@B`t<^l2fe)?iZ%pGO-|(>v ze4M)iKKg0f4L(kQ5A*fVtLj_!Q}D>=Ls#++t)h;*xwZ%R5{g~;UCP?5&Ob6eDA!x?P4$d?Q+?t$4f9Xa*NCP2z>n3l@LhCVkBzmpQS>o96ORg4{Pm%C z_BmnBR78)1OTjE3LOA|-0O$SmC!MS7hIhu-dh~IJ^(Fk;@BW%O_%tCVMZX^wO{PN2 zMrg92@Z>EgpURsu&7;Az54*8*J^D>LTt2ws2*o&loK)_`w`HuQ=$T69txv_^mDoM$ z*C=g(e{(Ir%kXjKM?MYTl(Gj|_8}dgd%XAcYlp`~7Gof~83Re~|g2NAtS zq?PIg%3L}8&V+y*;v?#OlHh*p`|W*A8Gl}NFYGbGH;4=-#3$J6KJek=ruUKIJeRiJ zh8uj2N2s3wH>NL<;{yD=M+;Bg5`MN|N_#Q77de)Wkqqwx4~>kolsfD^l3j39ja=6o z4$z0Rmmjo|oXznq;VJ5KKRQk}U_j4${n_3;`ZpHIB!()Km{$$q5y(8I0HG?kwF%ggW!4%n;nrBV2CW|qI_^P``CmOre& zGH@T{!OQ($;Rd_q>FF8Rq&MKV6uc&1x{o?0)!#KTU-Jv$snRjdJ3ZGa?i~LhI7eb~ z)p`2*`)R9Z&hU>vAA^nYl$-E<`>V~#J;P1scSfjR)_QPJ$KQK0B%fdRoALMY5#6{6 z-y`beovy*&HWN>!uM(pYB;)Lrr-H%XAL3GtJ(;bMXh4wwLk}BZLgx%&}vrb zxB9!`=QXzKReayvou6B)asc}l{4HM5Tn~G5{kAvHG=Eq=B9s5z0u3MHJeNoTa8O%& ziTPQ7E&hIS_TSOhSnH9-T{GODm&_>dlB087z)=Eyu6*V9?R*h8hs`tTch9F|C-j%r zT+N3xUuXE5dmX&IXb?V7P79qf4_~4hpQ4ZYoOaed*s~CC#@A3TVYrW()3KE6_4pYz zu1-HwgHBie)BHbZ_ZPem)4nsl>U~`Mp$9V#D~ zvq0i4#0JX8HsGi4|JBfJJzp1f*I#YE-uWvQKQV^lr&pkr$-1}RTI2KUB-W2c;nxeJ z>96tYIv?M|nfv&v@+~Yz$G?=E@NKK3_f7kuo+OA9{sUH*QN-k(ffXSLRHBnvGKs*iO#nzH>lcr`(M zE`BZa=Q@7)`yytJ;(tk>mBRyypJbow@S9sa{q_mwr+J$0WuCdzDalvXT;*dI8Em1B zO6F<5nWy#;xjuNLGX%V&>5%{C9Syz?(SB9=Hu~qwSGIrU>tD`m-QEL^cPoYlh7j-y z#t#AOXk#4@jCDRR*0Axi=x=zbrS_NlZs~f(6Uiy-I)92@EXF_Ae5Gss`~^H~GE(Q+ z<`VRImBl2~m{6}@53bawttry4{Bm7W9c2#wLMhJ!qyG`~yBl{VU|@R1f`j)7E(ou+xV2 zlZ&B$EwndyJ$)Dap0>O4G2qdq0r-_O9O*psnWMaKGl5-Tud3CZ!ZqZ&*L7a|Nxwe! zrZLyY=9-T2_6RXg-DM_y;TmhWWL}j*WL+dHpSX--Vl7zMLnYS$T>Wh zXU|bT%k>;^sQ%n~5O<6e{3rb&ys>^_>#t*}qy6o~tJl$v%fjnd7|WNZE7m)L!v)|l zNHfvtyW_@guU6Rks+ZgQL`|lCHZ&u4cK=GrugxF3Uwqa2*)VPV`q_#<$4*sx`l!Zz zH#e~sdX(G=`oL;v!8>(agGa!vV%QIXXP>q`=+Lm}MEs%ngm*H|I2G_5TL1sx6lO>Z6@xPWAEjE=^>2J$#}*df+3; ztkxd(BfmafQd}n<*ls=}Ijcz6t#5a6;^O&ca3B2b5*R@&Nv&>*O!I1RZ31 z^lvQmkU#lnBhceVg=3db_q@{K>%9%&CO6MHyp(*N&Lft-mz}EvAM3$IC7-$``>u6y zKOZaGCEx4<_)$JjHbb#p4Y?`FfM`@}z7IJO`fH#c^8@kEIPYe=zrK!7WzR~l8Xmp; zTkv~259QrUS;OPAL zoLAouZ=q8R2g0XxkU!^r;L!C8Ijb3bNdIUrB5UH{gM5r~B;aQQ?T;J2R5z#`OW4k9 zPniw~cNm_iXXLZZ>I;mI^}a%Kq3D4Wu-ki@1ALm^bJ61R>Zd0J?1y*F$EEmmO#qKy z58!aD{P_*==E_1Q-kJX{_;ZE%UzvDHJk`(;S)H3xI0s*3j%=jw!$|(?$yd6y7NL%a za7%7ndmzg2QJ}+WXwV7Ytv24|`4qO;cobaQS`^oGzH<$2^_z1|2CLBrv&plIPQkgP zdC>E1e7yN*0NftHon-v<2>3fVS@GP+_A$Ace8eKpP9j%2tNK4zm`*%Y-9=1`4wOzq z=Fppg*qHqn)X@(n&{c-7+2ras$KprG<=0}DQh`uFaK>pthSo(-ntH8AoS03<3LP_79miTpoA% zuoQb*1K$>TwYb&v^=t5@8e7reZN3Zt+JkbnzT~&&5exl0ZNkW!-ks{&OvzAg$0wMh zY``vPtaF{#Gp^3wOqN9kmqBN<4~)-x;vnaCVROI*w$$)Kd*Q`hH$pDC*NfjWKz{}3 zIjv81Gp5$027tTZ9mPg2Zc~gaUKC&YI5uCw>rZkWC5~5HwK>Ncitwu#JR<(&ekuIA z)ccNpHnC%Vk__k*KfD+j$Uz3G*|&%uTTLy}jh`Nm{AbZ3&BxNEp1t~f z!Ek*ld-WjgrAzg1Z2DkrXD9p{lp*PuD*7I4{=?00XY7@DxC}m&eJQ;w5=SPG6Y65% zJJr=Gu9n?tjK!?B?oIeV`VrOCMK~iMk23=DHb?oRrVIJVSy>OiDaRnb|+OeMhA)R*CVbVP)_Wls%!2`qwX z*d8(JPJ;U2m22S3tZP0#f_~K5`~Y8iepE2uf5rF)c;7PuKmHwkj+Gw|T0V1R|H1s( z7Uue|;D3&b|Hp)XWZLlGb^Yjm1Z|W{FuUIpiQfSZ6ZjNnlh9YywNBfg>NAY)!tM+A z(p8Epr6+c)K7ujrJX`F)p0l-!IUb%{Jo_&^XI&eH=Q1}Z{`qV?mmx3jTK=Ex>}39z z$^W~+clLUr__MrR^LBF*`_aME=0z&Bb}xCfGiuObT5o7!J!%a&s{t3{VeKuhRei-G z@{s5=#c>UbBNe+i?_sy{8jGC@=@DI5U!{>qMd_b-=e~LCcWGRCe&+{*c*5^I>*2_k z*MnL4HiMrr$)&9PBx7pq5H%&`%mF{e=Abx6dRTKPVXkSJ?8(Sva2~~~3#Cu;ZL9Fv z7cb>(t@Yk~;Jb{T8f6Z@$qUF7b2t;wH{-0Hk!{6iozLnp{?sCqAKbRT+uf6g8IjEh*0>A;R8heoV^Ne8i z&e0ld=lZv}J|8~TJalHqZVwllhwAb)k4A4E+GBT;HUqWJ>jS$d63edZ%;g&Sjx%|j zsWqLy-S`zcZ; zx7#T=eFD4)cJm*(-VGf8$>#zO_T)nM{Rch`eAvO;oF4AUmg^ir*#g;=%j^dBBxpCl zudR!*-aV_8b&6KbhUEMlTQig0JqC=no&lVd$XpBaI!c=oepfLUd@JlE=jQUen)dvz z&^@))yHcU)W^in0|6L818^@trv*1hXi@=(7Nl@No!_cke0p05G&(|MUv}efMpCWJB z`t?HY*zMVhE9`eyJTmkX=3Xfrt?PVgnU|mGx@&Z~=6U5z8t)<|9p}azjScWJK63&e z6`bGG$oiP-*wcC~mXUX}fAD~0UFUM@xs&X*ZSQi={}iuv*9Le>_76TzjmI9+u8VfX z%GCpd`GI#tDo%QJ^Q^m8)H`cA55mn;M0W?qMXoevdOtqxyEt0{+Sq#3r_j;sfhAq1 z0z5l_WnS2oNyQ8?e{8-h#!On<9D5g<;2Cw!-q^m3=?q2TeVD&gIh^m;7Q$;;*V4S^ z*``hKK`!a_2zYgA@csJuOSzXFM#p2VxiHtoJ8B|Tl$-6e} zu-bO$O->14ne&sd@0;+Im!gv%BPX>9-}*j$_zU5}(=#R(ZXTFWxcNLW+f$rZ(F(8i z5*ukR_9ng;pxavMzx8_R{n2>?6He^lv#pofSK(NEq8wyDwn_18AAZxRSg1{B6lkwN zFY%V%A$el91HGxYfQRH?Bt5;?UmmGAhmDo3)iu?=B(T$IUyZ*06#7@g8xeS-$hq;e zNp!TG2V4ZK_-B2bJ$oMhNV2C+{5TiAB_E|9o!yPju5|J*#_0do{9g7_)!;N>sw-AJ z7u(wY&7tkNj47O@c(2r7kaN-AlKR)NGx&z``(N+i8e`R=>oi_7YqPrdx3snE5$}4j zdwq+4{UPr<_|x-W@UPc;*P)%RxBA!roa@X*{#g5;vk!!O1{X5>lpj3680YV1OrDo-ET7uWz=4kVME7iBUgD`T&U{py?DDqj8^4q{ycR}r*f+u% z8Co=g{LCyBe_#Io_yloSawop@!|>1}@YoVBE|Z@`UZr{$lwREo>#n}=hM$37kVzWgdC#xtb8o_iYF#GbNs%A+iByR z7t`&K8~LI8fKTV3MQT!+g`+LdN61;MaaZ^1Shr;5uRR z;~k&KB7Rd`I!)K~Oe@dqatc?a(3z46`Lai1&Z;QCcSRzrR7Z7$&-3V(P4Leyr{FPo zU@>cuXUG>mR?Gdd(nBzZ(MNUHa)u@}@NuL1U+i>z<2Rl7ZggP?dEE;imN+>qr3yFb z5Z|}E0$=?9{hZb-cFPX%*Nhw~w#ditp(vZ z=n8b)pw7tde#mL-R!tOepyP)7&Rqe&9oV!Fw${UmBj2Cj^1p?XW@tj4|HTL3BkAh2 z?;ji9hu>a4bj;PdB2wYzvpv|O}^K4 zelL2td^ghPSmpaw^5xm*N0qnYOT)wEt?)U#MI2>k2&guqA3j)ilM~-pj2)vcZ2dFP z0~vYeq6bG-&Pj8u3(hfXelxT7(HX|)i}I(u{Tl;X zZ;9D?3x55o=v{7cMDEJl(d(tfk%}B-z4Q+Jb9f||ddgPk-nLzwp`yJh$GBI*y|gcn zok*aQtC54CPp_JI>4zOJXW_1i`ZO0V z-WR~dNcq(ZS^2{>KFAIFdN2%Lq~p@>++e;<*s?D`%W1&199$9CoGzGHu(^9e!RAvp zxjyit;3G91nwB~7qu}rMe*E<^_J;DF63vSoempguwM6Emdb#xad=^dpz4sTL0Pj*q zt#c6_@1M`V7p@n7WzIY7kso?Db#?Gh6#D55Y~g-sF}OvSXupJit!4|j<(!~-(6FJv zxu=Gh%lHvGMjdK6;1Sg?)(7G*$({PqT4w|up}u;YKe3oAijCRNJC}9dauc-==nmF` z$PJ(;()~hz+2i^E{e%7K>@4wt^~*To{f|=bS_~iQn&RCJ50P8DiFbD5XSFll2J+12 zvw8P-J>*mr0Jqz3xZ|GRXV0pS2ku!Pcf{g(1vFMWyjoTU|) zZ!etY08dge@%z#HJ>-LkoyGe(t!p><7oO84`*Z|#b?j-R9TPF+_# zR*7x3F^Ih@vGo?8)wuClP;MRy@EY&yNw1Gxu=Sauw|~>ZUzu~J41Be)$0Er-PsMC5;I0?~z3o%d0+VIY5zL!imwj&3eC^oKaa8~ua1d8(Xyw!uJk%G&4UB@1Bfq zCwJ}hWlcavj=u*Pf&O{u(sp#I@OlKBE52-;;M_AGIXl9ccSq4>^RdT`jw`F!|H;vS z9acMEw#0w3$uZe;lM{=7E2cunM)G*d2h`(_3s(7ob-sUvOJU=3d9DUtYQkqp;j`4^KMK~bBI`bU zyz6^#D$iB(9JQ(OC^};ed{Yy4dCi}j;E}9IZ%~UC=W~^8Pd#G`K8syxXE}80@X0-y zZj=3M{v4S#xGymZ|5 zxniS{N6ni!Y>@RE>i*qps>%2hejC4{|DpejyUFLOKVrDq8??v$R(Jmsc73spML$2# zzJL1HbE3OGWiNerWGicYJ!|){dBBvqlbDrxG>aC%(2CCR;leJysQ0)lXV4nSytC1z zYhK4O_L*o5(LrNtuS3yY*cHySH2C4KKKd3uTbYacOTt^~&+S8eS=8}j#Cbj&PtxJ) zFNxpo&N0&Y(%UXAtlkmWMGNIX%F*>p(Vgm})`_|2C;B=RTKvHUVi3(07*+eS9-LR9 zo9dted>vQ+&v?&h9_(GaapUVw+bL>E27bPF>nUnU!1-VUZT9El?^AQ4+^esjO+VqM z$-n9UEk17nGB+MtprcawXa7Omn)U~>>h05d340ksUo^5G*!Ov;om(}YJiK`KW$kz2 z>?iPXSl_eH3QI`7iom1)EN40$^Plz4cVh0v(8~7}#T%{A=!D{Y=pg%P>xDe0{{D58 zbFnqge+bO;RnH#1RpXqg%(?F3!F#2HM|d9ru?ol9!{ z^_E#}$+dKkU>6uc^3{W52wVP}@16UF<>?m%{lQ6k7Oi0K3q{IXkktaReV z=zF!ZxSF;J`Z^C^7XEWAegU`&$Bo-uc)inBxGutboZS4a@>E(|-Am4>8kyEOUt;{i zJDl0yuXTR<7;*G{6JNQ7^LW~pI)y9ikaNqs_;FfIAh$Tzi~Vcd++sWYtU8}&*|jB_ zgB!Q%J2Ci+l2^%}e2yOGGA$L*Q9L8~`9WaLZr1KqDnDbcr z8PhW(%-_eEY;F>I`FOh(yovt4-pa;X^k!#HpS#W+AHv?Qhla{?oNrjaTJwK^c>jS= zq~c=unvSB-_?5E9=lOoVA+%aNtY<7Qg5KPO9KV2V9m0OfChp_A@Gkxl?%%q}d7d=^ z(bwpwwsyt=bQBF)Q=M&Nv##?fa-tYEkA9S68t`)A{rF(r&{{PF2k2k-WQX;ve1UGx z&Ohhe_St^yww|;8uoZ7o3s4y1JSpm_FXHz%UGJ=VfVq%&zh@)540*DBt9{|TSt)ox z>*o8{7VN}#%H&CyLxQ>cGG(wMA8I>b^2B*o*uBb7-pXqF?kkr+SJ)A%pdGk5=HVg5 zyx;ta^L(#(82&ZCN4P-tOPIqrU=r@^Y+UBIF^oKb$7!`(BPM&riBuGZnmS)${ad)5 zTAVu!M%kJ)jCU(P$2-s7esb#pp4WTJ+6&R6(4mUHMVBWO-vNtHkNq~bYx8rdPwi)H z;c*6diD6fI@F_K~a{TqDc;7jB?Te36zrBR~ophJ`9>^T`J&@qh-B(BrxoYRo*M>L7 z7tWGSZaRKH>cJC{-veH%ncGr$QhG&tw6-{>Ek*k}@St_MDO#IzLKopD*8A3W_R)WE zUT+aM_b}hF$W-4LWPGfBSv?_mSw{`hDdLC$^6LZ8K<~wqUO9)J;+^k{dC#TgIw{KbAD&Yk3R-Rr>+j`}#$dA~&y+K^i>iEsDh zpFzt-j_l^4>KJ=)WTThEKaVia7Wjg;W_M|mTIuE)Q`qKcE;je`P1}^`t=nq4aIgz~ zA^kWo7hdLEwSH`k>XlU2H*I&OhCx0`@-yIxXUmhcUb0&wifOT68!4Cn`n9 z&}R4${Z-U)jK2C83LdYXp(`ui5ZsI0_{VSaB5jiNSzYMn$&wGEJ9tKZ_X2oGIpg&= zk@KbP&ga#UPFBI!SWK;i14pO zr>Q*|y_{rT@)rcF^j7vwwv3SY?FjvKF?i{=ri@wxecu~#2 zo_Q0VRgGMa^0wkb@Rvg$rTnfQ0e6DiVp!ph_W!B&;85$C(hI*@67Ve-`s+$zdq20v zPJol$@R#zh;`;(@#Q->6&e~EZ_YQD9Y4?m*D|D{Medy>5$h3Tg%Fs0{tFSAta^|Ib z?nhyV>hF{fkX`A>)|@LE3h``@NZ1|7X8=#iOcov$LM=3 z`d05Na^Iga%KG5WV0^Q#vy8EFv_9xubH(*Rtqs*#9L}0Iw46^}*)n`9)!@jt+K3z~ zzKP;Dr0_wNyX{3M_3y-A0?+O6(YMqNJ`z7{!rvMo7CH~T+;zD^^R;&8Q^$Y|O5T#w z*)PJHfI~jUQlMc=4!wC|h?U?)pEhoe6kc<$3SVXtdd~F$5=&7^2N9 zh8Tj4QAw*Kjj_Qdbz0n##%U#4Hk(L+gj?d^Wn@WaF%$&!l9~j|d#p6KM1{5|X)dyj zZNOQ)BqUARdNye!3j(G|FES9_-~T)3%p8p+Tl8K%kDi%1=X~3{zwh^c@6jGb3L8Li z8M9Z%{l^tn@X`>`!IShvhwpzZSLby%RdndzrQVQt}((;d{EuyQ7=4IX-9Z zy}T4y(`fYoMy&T|6H}H?r#VyOiVdvZ$Rf5ycUt||++9#Wdb!pFE@@yyT+U~8Z zf_15%9{NyUTA!ZPS{2LPsl6mm?yd6Y!C2})jo+)bYNI)*z2tz}MR|51x(OTU-h^@y zHGkR(CcmZbOKv+`_5=7)8^QG;aP5_y!{=6F9cr&Jbq?iEh*M?Y!Pw=*$<&|b5WCrO z67NNweeA((<$q{>$)2J06ZVKNAOHNRXF}!Hk@D!wcHlY~s}s!&fBG>wFMeCiZuvff}k6?|!PiA)@#zGM%~AQ=h|(@2zu!`0Qq2 z10RSVPB+1;(4cr!`rge0boIJwo5;6Hfa};ToX@?^wPSm+6<)r_wGDfgvNpkhwSDm0 zp=UbAySAX{2*24WEwHYN<4^X{mYh`+6VTdDvhF30?JOo9wir9JI8<_YF}CS=_E3r^ zzP1@(+X;)-c($LmI$zjFe-9~c%vkk&DxNleo;_HienKUiO0FVDIW&Htnek4-PqV~l z^j}Q>v*=&8Z{K+9g_#py+1%&#ufFuGiCeHIlP2e72pd>)PO`QYjH&gFXV0geJZQ~F zJfU?fR)?SI98xV{`st0ZF6L_J;TG_|oVYh@D1AC~ZwUSAx0N5H{94)$9`blARi}9r zlgk%%wxLsu450mVzN@`r=l->F-RF7bZ>5*oj_fLpZ~FJu>-uf`dF2;0ic ziSO_8eb#%Yo|(yiDYnJOK0ue|(o+$1U1ANIxH$5>d@!g>qYm$5&&0#e<_}AL|Hbk% z?Xx%E9lQSAbC!Jnp-k@9x~_luf}gu}mRx_HPXc$dSFSUel@@Z(_^Az-9$*~XLNUy4WMvEeG@$Pk2Wli9q&ScpZwd``z$31VSktva`N7rjn&d3cHuJ3H z6novss5M>Z5x*D~&p|%g%x9P#Mm)beT!&qTYyzgk^8T;$WRv&Iy7vRNn%~Z&FWCx@ zKnt-VWP6Fp$H~}eW3$h&|G~Q}3tf9jeg4UZpf6&I*dk}v%d3Pw8i37ne+ON`x72rY z3~W6(%NBZzdkJ8uv*0!Nz?WRZ4tM&4*Tt_~&%5i9WBUp^-brw8G`ne002VqM?%S&R z^x?6`>^}`ZUmTxp4c1?1J&oQrzNqT`%9qUJy|0QBZpGGAo^xpe+#(Z9OlOKUsB6eA z&R4rOg8caiamTMA?;_w__f@N)UOLD7ekbF^<{-m(w%p6Bk}WA4tny-a-?f>2HnYa? z@H_}#o=gm^Gl6aH??1^Od)Tb+%zPWOzgot*BV_o?SC9kMQQfXReDQKKyeB+Nf!~Pt zINFm|URMnN`KUrF)-q(oubI&i0;%{QJCbu*H-LB4;4XkraZGUED z+w-;HMz)n~IMtF$wy>{;JuBEJW&bkQ6#5RIVlcKlO5Ua7ZsE?`!Dni_O4m;nxP4qG>ddmnZ5oIDtM^tk(8kE6tBBhdAZtWJ$hA+4Ug%qMFl_}h;C~Xi z7DjfZKVw(P2GDqtt*$H_-}%ry>*+Gtgp6lmC(zCgU>cLYqYv53+M`iy#MnFN-i+Mw z^;6j0BWneBiaqd-3+fqAFP6RV0dRQ8DQqZbw=6Aq}bT{^g zv$z>s<^uW5B~6RUAKu(Jw`H@=6=H7;_Hjl>xq_lO(T3^}+=RZ&=t*xL8J}|!IH+VD zk`aC32as7LBdz zdgJrp6@I|}exlYUz5#C~=0j)bLf~M|2pBq}4Yrb_7?}7@_uJSkYxG-f;FrER zE-yy4H_h)_Z1Gxh6wH|#o_zuvRBa;UT{WUVKnDY?x zI1OGiG;+0X6MKAl8hqtm3+SCU{wvF?FM^k`;bUFbWh3Cjp|7#xW0rY;O;*00@&4q; z!3lIE+&>6T3_h%n466^9#OIdnV(`K9Ny#kebrtX@Zu-KmuSQqjO0CMBU$h)Nlk z3eP$H4&zJs@!kNg#gE?{Grl<=4i0kp@Ap3hzW1E1z8q&J%~=9)J;BFy^b_YktBRk# zO8xLPic3basPFo4BED8Dj^-mto;HLLGAQ z-gG9v23cP^)v8keift$-Uvj|svpn}%bby7Ar5GXn>g40&$tG@QT$6J_T%7qCTLdLI zc?0vB8l0#m%>Ia~?mIjfX7(*0)%LiZLXJF=Y1pu+KN#f}BR@8@Uku zRC^-AGq)fk7m1(Q@1w1e3+x5N>(GnfLHl^;1JkMGQFFG>k<3=?v2hb|0OW;iob)Z! z28Z_~FZBDM>MtRm)rb1u%X4P0n?7Vm^e;Dd#^f}gMsH%9rSZ>aUMl;6`_O1Vv81hx zulH6Jx7&l?A{S2gv{$cd;j5qnY!LZeGMZR8eZ3pcO2A|8wrkv-@y0I~2 z%V>?JJ`?c3mnWXVwJUA*5W@qH;6Lb|bYdHP;?Aeo#J9Ge!uF(%&Zv-!<}89w;`C)= z7;}LeF^uBSxJ~`^RUIlGXuwZPBU965$aid_+pTej)9i5`nrOXHH1W{pLyTc!E%c%L zCeH`iFTPn0EHp34;v(9ot1W{U#cyVlQxq2t6l3vnnQmWO{H$yp%_WWA*bNRM?f(3W zn18tQ@6qd;ukdfiW2}C7_aro-H7~l991F%xVY9jGF6?~nSKtAAO?uz7Wu6s^oh*W% zwLb-JMuT}8TTuNd#;Q90!f_9_?Vqu~$Udoa2tQ0~HvKXW>AeKc1?Q%DwZ1oGVot?X zwqit0kq?HJsa9{|W-orCHo(e_q2zbgsQ;UJ2b1~-U+{t%L;d$L|0J+;&ys?7u9dx| z{__% z;|9jk{#k5S>xGY8uSKy1*+JJchLLyO z^G4T=Jex!Z89N9&M{(){1+*0iTMG zS0eMVCFV;1R9^1Zha#UCJA&NxxmJ~QP^8#?vJ|^yJ#h)WGjgi`oUVbV)ch@*^Sw6a zIra`z*Q}EE;(;(ZaE;)l^jh}}$_DG=Ym!CO$K|(VW0F|AzMJ`wci(u)y5p6f@!DQ# zSM8@QzuQ+@c9q3_

<1Xz&dH#0qx2Z?Kvod&q^jZAzCCUDUE2P5`5g;IWsP49J`szfn&a1^>x-Skx%4v8+8WkqaxUmQHs?Y)Ed8)+YS6U{ zft`3$En~_Tr~J#pi{wv!#_6o*ci8>VjdY;p%8jry=Ae&G%wlZq)y1r3W}LMYkUt{4 zGcl5ITA)vs6C0R}k6(UJ`4<aZ<~HJkah})mT=4$} z@7;}0=^^w#`2Zw0TKkf(V z(%rIxrTEg~`BV#dcjv#wU4av(Tki@ z%_ZGHBE@Up$&_#*sZrp6t<Ko6mT|nKQyV>y_*Yvd^~!Ew|mg!Tnt4AALxl3$A3bOOXMRyU&-}_Bp1Ys9)cJ3 zM~|7^m>#^@u(;=TYzwl<`S5NbD#fA1Cw#oZ9cpy(LX$qLmE#5YE~@)-T=4qfiBC)S-1 zTt?eTk6NK-e#bu%Dz=s%8N#{XNp`p5E$9Ndz$bUEFEq+dE5_b3^J;+}kAL4f^sLSK zF6Q(YHnHYgJCD2t{l>hSfbBBgWsie*ZuFIWG)D5fXYeNu^t)g(_%+Jo=pfLMYWpq0o~fmOt+5RJUchH9eV}7G{BRUH zo8&S$mkmE`;``uKVzJTrDW>K5RuTNFqzv3=E0nf6Rn?nLKvKl5?$l)Dq7bGcAmcxo?vjf~~UfG4OA zpHyD=m>pTin36lnHC?6gz;RbLE~58VZR9Pm z$bHq)Ik^zDt}}Ax{F3pBL))?M4c^W9U)n1lCYXRLY4*mj2%<_iO-bJ_E1$T{`N)6Q^^}Ca@3lOfGJ3lZ#8t z$2sfpkG{}E;F9IZEZ&uFO_V+&+%-NPKCfkt;AY8z1m6n5Xl*ZRqU?kQaO!s8e26_w z;T*=@^wAq1)Tkd(H=DJl0K=5s`FU;RDVzcaf84V$PqDO}o?gXw03#=dVa1 zE~>E_fy>E1ku&xn{1o~+LEG!S*(2&3u)T+fpJxnqbpz!HSKntxe!zL6n)~u2cZ0Jo zKD)SD-@qK%gT@E_CdO@KXQ$Za$v^obtxK(t;w;#zd84kihVEu=(!Zp4Deg3se0}-C zNAe#GlP%nVgDAFM zOu-K&OZxgE?-=-{a3&Z%i5&1Ay<&d9(-(S&y{HE##`1oy{nU!ws|$`cBa?r`_uoY3 z^Zlu#=DFQ7_zZn>e_HS*&F=VnaA|# zeyiTi$!|G4$?QLHj7#_MhFH6Qp!OmT%y)d$b&g2`v}E%AfVG?NUafq0=t;k&^w9H^ z%0|vG96*nE^9USSm>#TGJ_$IN^J0`|U*KH-C!JhF1c|3fP{o{;mq?^@k8M&{K+$;P?q$4$ZAK(5j&}hZKo!z$B zws_~vw%?-dF3!GJkyEEW`q>GUS(g2p`tkkN|ACj^^<3Y1-nNbLTNq!t9S<=6bG&ya zI^)iDwmIupO8?*FogU!l1N?3B)UT(OLAobmbg?Sxw~UGEV)PT{+6H^xOioNOylq=dzRTIX$9snVU-&)`9O=q8k@F$=ww~DV5a!3c zijdjlnpLhx7P#_2bN>qM+%`ssM~=Jg>cF#2vQ3d0jeIt(C!c|Mv3XxMpOq3Uv{RQA zre%z1LLVBu+hcN~b^iD`@OzQ}cd$;?(|#7Zu6Ws=dmMYIVyivZ502>jZuD?N!@%Wh z6CU^ykweef3)lQQ%d_Jn+CE6T z&wKoO%>z4oydd0d!OoBke8&9H7dy}II5J)14*`G5+4ml1-+P#SFK6HHqK^V#ThNU- zSCqcL0ex2;wZ5nZ{_1~3l->(~<)oKvbCzJz7TcV!sXoftltELj`6~VBH`%2%dUn&) zYXqA~uR86_vy`dVG4D+4z5l)u7(=dadY98X@&yPf?vvFF*04>;A2KIWWhGd^JCgw79`vjEVR>sNN= zgz|YLH{=US@+1Y5uCzvq@88Bb%41f>96$J+k@V1rh8OU!tG+J#p*)I>?G;C!w-T3W z?UHHY2d?g-cN7mOJYP@N_P;P*J^OKheQl*Lb2hps zzBDVN{186E36>`?kFzJ#J85azZ%?eJUIMk8B8{(GC40JCfl;317Uif)KNzzHc#~_W zn1_jX2q(aI#XAm=pR*=L-p*ubb{)Q>Gwv7w4}S5F$Vl4Mz3wYntlVPyGBuca zra9{V5%F~84{zkV{7}N5EqagVb-+*WxpOF^UA*+AA~+m~Rc={=o$+teM~1RwIki;O=}Tp=#L-ljc`qtE%ec>WEZ z3)Z{DS6TOk+Q>g;eA#fvh~<41zUt_Nr|Xp;V_h9F3fjfeKQYxqvxupt1iA&@rgnjB zH}MJCjMCwov3KvnUva=nH#+1{D%p;P^d26kAH~lQU!44#0 zXYGX!)aU&RqT>RW+VR+V^rLf-YP$z`)K^)7{mff!Wh*q^<+N|2on*==?3YW-KBy+G zZ@X+sou{eh{e!$)7xS)Sr+Ga$9**sUjra~Q$j7eH{1*HJac$-$*qO5xtV#WopOL5ET^xv3)1u2ROx}vnQ`4eEFb@0CFkK2R z{!$Bkb#~X)Sr#KV^gQg%4i-umh*`r~I<3~s9NnCjovcBA0oBzIeVn#oecM|a+E=67 z?J(zHd2cazyODiL%(fy6;brbPksK#}wKnPxa^ZKrvDbEnA7co91zo^zAkQ_&csXl# z|qOMYgp=NsG?;M#Yb z^W%PS)im)2EAT5-sa_cJq<(w>dbrbGdW{#Gq!#><-9JwH4Lo5NHJKgwpv%FBpZy8C zMCxf-Q;}_jPV?+X4bRrNva8AxxP#&&uj8zc%>~Uv)k~3;c{j3#BbYB4N zOdU_?37g9NR>vMK?pOo%8hlUZUJfE7b#{$>)Z$`nfjV+?dB@w^QUk6s& z|IyTrNsxTwx%8Xc;2rXR%z(d2rpXs^fc{;1bKZQ1PCDY%?2q83@$-cjab(QqW+$Gl zHaF46;BAjicuStmH^JM<;BAY^$M9`W#HS^jL-YQSabHgLhaUJUd>b2NF?^}Gn)ATi znfz=ZBXB?Vg^Sl3=PVrVH18AL;?MO-<|-H}t|tF-nK>hsP_Dhq{iWku)o+@UiD3gf zw@vB!Xt>iHe#0C@6KzwhfT=5!UvN?TJ&&=<`X(Em zf!-A<>&4%|i@y#36wOR$4u-#gKQ0cqetc-VW1lsb@HQJCJ3I*Zs!kcPjl43ebVb=! z`A2KX?U{ybtOedKf0FN|F6wVpt|=kNliIi8svS%#5LxB!Aw}Yo1t19$5JVcpY>Tna6*@K);`a z*SGQi6g2ZO```Au73rO5?f4sg{*FF>0sr|M`pFNd@6%dplhaGyOcHt>YpG#wh1iR= z^i#)~5&5+Kd)ASowLEJ$(zOBx+8BVI9La5tOIv%V?DR` z@*ml2r7WvutX_{gGPn-7=sYGmPM*$htG4w3YRguEpV;*~j4Z552z*8#W4zoI`4jCg z_7||+Pb{t;JS3)sP4(1@W7r|}?AbW}@5xwZ&NzmFf0b$}YTwwixblKNV)d;e;2aOv z6T$V^SgK-G8Q^y#XN{9R$p*)pp>M@&-E(%rb>X=7wwXOn;BV>CWxz%JVgsKG`3$os zt&ce{xmX=-WEb=OW8-OEES7&OMkU^Tay7Ndp_kS_*^yDuTRyr|8~ZjqN^irVw;j|` zAa(`4Wd!>`Z*M?vuR(7gLvO-S(cBySf7hEbBJC2+Baj2q_KFqxxE=iynI@k0gFE48 zf0FL&2~MUSOII{>mKM1Z|KoO-wlfS}e=Pcr(zZDZw-s3pO*d<9z?r%1 z5FIc18Z-_6nd5nC#U##1HG>~RsEu7nT^5JF`xyGJeZOn^jypGSw_|SL=8XUDIzLbc%hXyiy0>-2HnOZq#i&IsJ_xD}cUUyy$D5W0l&?MK0@qz`bwHgg8@ zLHS;a)8Wf0-_87u50QOxbHL1b=6i{IvY&g=h0E*|Bhw{=q4kjJB;EIQ$F9L2XwKf} z+Gp1!5T6!($J;~MSdTKFi{TIVbpeMj8rm;2`K!=YZ2oHJye;9xPlr15-i7Z{urH44 znTkU_3k;sc_d)!lT)y$rTq|_W`SDIH{~FfC{C>;)Tperx`nRk9XnrO)8NDaAo^27l zNpr1UZyTE3aR+)EcsLE)q>TO0{eme;_{P^ed2Pz0);zx@KREUkw%Lsx^)^_OYGlY3 z6K?0?@0@K-9;rNrB=Ax1-SV%|dS=9*rE|ZCEqyWT{+JrJXW1mcW+Cg2hqnQqtAD}2 z2QYJC^WXK3etJH=P;@*ah5ApN*_Dpf4cqJ7^G!TspWb19%Fg(?)13G(Qm$R3a^w{xHJ(gU*RPu=xw^JPG{+RgOh47Jb z?Gy7XWS)whjIMTMp~h?(@94fhbO%>w6>bVXLj)h_f%6m2{9@(#8L^Es;ryV+i=(^t ziqbFj7B{wAHjl}=;M+~LPcgJwNZ*;YId__*-Ze0V2TFO0`?T$^Yt^NKfi z^Y1yM4NL<0DaKZmjFvrS&T2D$dmqo-1?a}oNpJtE^fl+aauzmYD>maH@W~xR=ee(E z9JP_{Sk1a>(7*okZf9S^zjx%3tA}lbuBT&*8`*?TX5Ex+(e*bg=fK!;mE1T%T>fu>+T~?fPGXC?(OlX1eB{(hkY#FR4UCjOJF6Mq2&tvuWjvUCn z-~v3=hNo1&0B&UCQ_oMO{vUe<57vG+VUIRzKaKCi6ZM^7Te06d$4D+vw6d z0)Km7*R^1d)j4vk`UT11r?%Jpz`+k6d`fb(Wv}>jx1jWhimzUrE|J{@toJZxJUsai zo_EF*qeJYpBPlzbdHM0X*6zd)Azupea|80z&9&&9k0Cf*@l$f=w-uNiQ^f!jBaz)C zy4<^q+ClI&A1R{BzO(&s-aMDp@5NKL@c<< zP7ZLy#6#fyx<5rZJCZx&zbacf6@LJ=@yTn`Z{vNIkxAow@f&LzOs%!Fs6L}PSJonL zd0%va-tEX?=Au5_dB&BQ!oAN=#{hnn6rTr9?qVOl%X6(Qo_sNKtcQ_f$cc>Le{+wB z^tCFNhcIvHQ5P!5R(CPCyyzU{Z+k{?z}H*Ly5*ymEv_>Qo2V_nv5NorGL#p82lY+0 zpB=t9_-}34GWSxb?q@i=o2eD0T3%VU70M-d^jgkl?8X=HBKoUfI`}DPJ+;7HI93l$ zm^kqm`QPQg<8E5^LUvaIJSoigBK)jcZz_8yePctkFU_+i><`^|+*(z~=LY6^&V3V} zMfdHVF5q&qmfZGeZExppuhQ+CIh!1ho*HSpXeetIOjxsgn955w_wtZ4OYT*jZZDbnc7&oZYINV}HoaKU00nId)pP@{e6Vplsvkkm;&dgb%(lNPhVo z{*MRupQU}d-HpE;Uy}ONd$Bpjg4J324)o%}L-6h187BNLKjQyoot@>lXvWkklMYO5 zNBK%&=w8pI-{|~C1?RG4Kh*F%Uo`fl1A~i|DfNl*>Fa6c<=O>*2-7z@xv7`y>t^aK znA}44MCV7y(J=m~x51qh?rkZ((P3>;8o#T z@*II@fAZvIi!8Bxp#z^jv0{nf%(!Lv`vlLLWB$-czq1bc)C*|`Zfq~4o#s51ob%D- zTa=L(Kbm|C@w9p1N&|g95j~H;VfMl!3oN_5`UTDcEpc~Tko zxjl})0<`a+a&!PX(^j`<rxDIY!BoTdh~2`=v3*^zqd^6l6=`p$sg4f zZZv0cowFh>=*-36eB$UVYRGyxD-zDI0)voIiQIX##CGl(nqLN=tptzB%h3Fu!MD@^ z?a2O`iA=1jP?tN@dr8$q^DW6jG zs+`Fs)P77{?c_yjE*&-R?sID1Z8{pQS8;)RMxJWiIljakUD?>H#?|lU8~sjeyOljw zF3MW!!xP6exvX8{3A%Kwp5S3jx9`uY=^I!U`A_>PXTm>cVSg7*M0ZQ@mV0}6xsyqH z95$$_!{Fp}*XWE7d`Yze1dANtqR%ep!MtPVQRUSS zFt#>hxPE2X+O^Pxo=d-ut*>c*!*4G5Z4>OkQRz(P41upZbt9a!!mb~&)Uw*7_ero`$PJ2C{y345*TEg9@@bcmE$*G@Id{5}gkz{ze$w?kxptGwH^vRCj&w?{@qa**g z6P%X-i$dr+Obs*1irUw$&|+c(8`s(ahxa80cftQH&g;~&pIIsLyP(^@j!r?lP2^b~ z*rohRM@9?p6dOE|3xt|sN(N*|< ze6O$Mr44$P6g+PGS8%_3UIH*m>h52$DVootcx)J7(7AYp>R}1i@p#3%)sBv}TWba% zOuluG(>^HY?hreeMsD3CYF}mFZ%s@h?rZXnH*&6sT1=I~Mc$Pk&5gf^-{^ekK=@@X z^8;4qu9Q9Gz12e7ix}^ffTPa}4`nwgmMfo`n>(NyCn?Ok`eyWI-cfE%zvw&KpX!_8 zpUB`G>@d?NhL;X{K1!>!NrZo2tWMuX?ODVBwiQJBus;2L?|al2ir$l)@_*Y_??LZ6 z>z-u%>9O}DuNmd&QMwuPZrv>D#O}VXcsWL&UW#5^?lEUIe7nxP!>xaG zU(FqE^Uto!mC?oCdf8jyvUqCv6LbvLD*69k2~nN(6UjVlhX?s&cpz}DV^7b}S1(ZZ z`dDu~{Hm#Hzih#}?xyyGVrV*-zqSDVc)WCNYM#;m;!Jqb5NHw{IY7>{dl%b6YUgNP zKl!n<2WF1Ex4e@4fAVWY$MU7fH?bjVi^+GRcAM=Oy_|PuLd(*jiPc?H-4pOW?z&!L zT?Timi1%W@j;<0PO%KYyu^3)1UHDRpm%O}D5Vr6`T z9e*y*Fqb6@dKlZ4c(aK^%YIcpwavLdqi^wj6EaCQWpxW}#(3~aS{?DY8u;c}akv)l zj07Ky{ey3^9yqGsMxMW|ahTs8;P2v&?DhoYZ5=h+PW%}@Nc_KB6=zd<&pk8O!n^mU z5;um&+@ESW?_MB|ZPxn7P`i&lzso!dyx=u`%WtbW_=qFMlRMV|pLn==GtXWBmiZkS z>zwg*&gu^1_jvwz*#gQFb88>80y|#BZ`Tz+_<{0L>N zNB?UZEbe>nVa`&T@7LSlkwZi8V>7#FC#xSMUtjtJ`yo9+eurA>(ZJJU&Y<|VUyEMh z`g|W`jy1feT$ldV(?^s8jvf^`z&Lf2e{Srw8DB1~(XIJw9%i?@fHk$g@Ld$+N06yD*JT$ifN2%_Fx-4h`t_Rk0eh!*J2PqDs%Y} zczZrxv`;!-oLKb?;1cioWS+Zr(yRZi8bc0G%t7wT20NX%tb1z{%)Pa`v$hETl-FHD zSA4RQP4+V**S#j^{Kt%Ce4&h2#8{FUo8egv$a=+Kr!dBP^g#SO)Xuh5TQjneF?F7O zr{yg!x?wRYg!b3*7fF5&8V(F)UwEy-9q^@p!S#G_`$1Ia7`G)q?*?+^xgUE@6*i6T zskpmOVctX7F3P_ncObJB{E<#{H@>gCOQ;9SoLW~}rY3qbxhI;J+RjOf=33I{!K52T z4*WCu`1qk8AWzPvxdnakRl-}UR^q?hX7r9T?vAYjXM}sgW9gL1QQDKv;aPCDPp+^O z+kCI%f9to)+rf|fJ_#O2Ww78`O`q~Xs_u#4vrBvfoHhHu*BANY|M_yY>U8d>k6(hb zwao8U_)S0h(YtGDpTX}nJQw~<|0DZ(&@%TPPvaezKTV;%TeHgWCXI2>7x^aryW?s6 z^XYBM>urTTKc{BV+=^$&5zi=oiT%-euJ({;uFlx1enx`k#QZdO=>g4CsC8=A+cS7S zxUM$phkEk?-Rbz?tKLAX?Q_1{R!D8tra7k|(wb`8b=+ZjSM)y6mUi_+U7djLxydM= zqj}s4KHxXdy`if0OP_gJw^7H6d9^c60lLUZ^Ilp|-~XGx@vRtyG1T9eko{0y4zyW3OrByradd8F0tzF zOtXsYh*~_kt zsrx!KFX2Mc3ity3=^c$-ij6HA)!+HRNbUCjC}vFIJMS6Uiyi*==%-WJ-*|hMz}^k| zYx~GFV#R|ka(j1kCXu;ISIMBBa|U+?=+4yGy3u#p7WZCRhyO~S@)v%9UE5W>TlF)v zp2KQG+d{1czn%1y3hvC&xr)&)-@ZWJcs=9J1gBeQ9$3RD}t?&Ap{=jcK zM_2sCv8Ri%>zcFdNRpvN{F~sQbJs9Ab--bi-LvI(&L)XY$6NW4ZunCRGYUfet&|S_ zQIL=y$>Co5FtS?h#6x8B8GVvWs0NQcL}Jfu0xsedV7(FxA*)ib977hCV?_HWzihwkU1Emg?9vtEuFgL?ILR8`p6=eAK7YGnC~v@LCC}w+nhtC? zp7O1j4qO$ZTdeQU`(nP=a$aI_m6L}fd(Xj1C$~fQ4s9Oe=oDI0>^YAnVAqtsfcs=P zN6Ofv0`}ad%@u1Bfu-)CMD}JXhgW}({XBW3bf{c%tj5~@P?P-Amz_SZ;p9*{_f1X8 zwL<33N9YzlVCK`MFSAqZ^=06)F&-SDE5%^%1dj1=ehklRM>%+@T6}|ro1>!i4NMX^ zmomvpXxYUXVE0@~F8nhW_~!zDas^H9pw5F{$GqdJAM?E8gVxnw;lIWI_CL0+{*wRoZ=thv%a81_{CT=R`{fU?S>8e~1YgQ{ zR*~u4qfkp5bA}2VYP6j(Vqdm zXM=pwo5@#zSIGA$xvcLdUkF&bJVj@<8=rvJ0HfwHao_~KwQXqkeuR_@Z&=^|JyR z=OprswPxy>{?@Z1(UG3DKYyf@yDl1|@0`R>px?O+CU6p58?H9@`L>_YhBKI^4fPh( zW{BE6(Wwo2Go}skHMQxdHgBET=5@}#n>Lp_ZFH8+h1Uenpb^7Z_hir1pJ#ilFZ6t< z)`Jgp-e-@m7>4ijjAx$t+udgxPyI?CJV~yM{?@a(;D*+(8fnCoGKblhkBEi4flu^Z zwf#12!tFNqE~(x`*25>!@8@yrWz?!TNt}e|Z!d!fz}ss0yTI~O8(=}`9%>xN;$OHOy@h-Y(Nujq z_R$64Ve85KE`9y)|B3TvUW03pso^Jl@HFmND93LBet9fUc@6lbIqA1T=|9XN zjEwC(w~L*Z;NM!vnU^U14bC&pC{Id@AKV*SV;ydTeuhJXt;0N#dggQNQ+w{S{H9!# zdgdhwn0yLNmbS zL*%k#cpl!)_Y#lb$ZtjXH>AghH>0btCY^Jw&Pl{(!e9HkCqSHRRd_Qp8eXaT+iDkv z4~E$%la~R%mtTNbUfkHyFz`)&lKua~X9Z)h-(~%Mp<3vpDlESeW3gX#$??YV89X%b zslZ>e13lhr4X)*H&BgQuPp=hEhbQkuhp73VcE`7MfpYMN%!?ZJCPwedo}SpUwL8z0 zJ$=zrn zGiq4qSr6bf*@mxCgXxUlsln9MJ6pkD<&UCg z1O}dh1nyEc^_%l_X7+xMWQJ3}`P50B!+mPy%XVh@%hh%OyE{~2d*)7Mt#??ykpF7m zQRu8~>h;#d_r7l}S54vPxWiDgEZ6Q){x#u7iydhrx2frbs|WT9zWvOXtBJ)Nt(DGT zj#yariQ{=u;_XfXXeG7UJc#3~Jge(u?s|)Gu@m}`7!t%^r1id|TgLOD}e*RI} z8LEj^$sCHA!<^Z3Zc>gdFdN)*B0n;ld_~E1)i`c`llx-erS5z`+QwaOW3a=n6n{$O ze4sb@A#-^d{d`J<7MTe*Gr8$NvCr_b3iCk5QhUEj4_8h@3wGJswBK z1lbEcF9cTlY~)kFKZsmAG1rH_m~MEVV68Z(^R5H;m(A}zT5{1RPcl~1K(Y9fatch|v2v89pXv_nq1cl{u`_j-&|N)xIWi{} zU&!lqW9_lAj+Z`n^dozH`H{Zll@AL!v6Oha-q;V?FKY*GUe=}ge*`>q7J3GAZvcJ= zsc&uKz1RQ;?X=3xw_72_xfRPeKrQAaF>Ct^veMnVI`F0Q8c(rzy7NnCj0F37=wu-D z$(>9ksx#T7eX>%Er7P8ApU&hAYx{Lh{f+%TEAV2}Hj{l4_CC6OEB=5tn783QJbMP; zFL6q2uO#+1g*M!sAwRyqjCx|pbA0Tp)7Be&inf|-7(CN?D$Pmr6@Iz%YNVdG_EUbX zXq6saLcOE|58V>jKWq9ARXgij z%q?CF>4iT=^>xO27Wv@5cbnD%3>sMbOxE7Wp3f#fWK`l64^L*VwgE@%#!%@{%kYq5 z;xbLFyEpI6wr(1szccuIEA2#cqu_VqHMv7i^BUQsF8?T>T@0_Geh{!1jWuzO3fdg8 z`}?}vDI=gd`YQJG0Qh#IC$U_6DE-3tnLn{Y{mHK>vwD@6`JJ4P zYkT@41KD@QJXK?NiJiE3vi}T?Vu!r7+m#_50 zdz=_`B|N){=c>OgUr8=6PV&;Spb z$vM~tXj8Sf8Yf6MP6?Jkr}zry)?lxgJ>LdQK1aWkEx|t57ji}n-wz;DZdAG$%shmUp)j0C6 z#*u$Dj{K|f^KXBln4HgI@~>un@pPqp=Z)OuwzNBS9ic7xrmLtsS`A$*E|LSD*OSvG zKdS7FFgbuZ;_c|$@}H}w;LFWF9=NY2MBgP*A`U5WVFCVYhlCR-i#5;mIH3b?Y%3hV+uYgb0)UVndR z8hRQsZ|=)(yq$F%#AoQn{(iW@#7UN)6>rC8jLjcQ8)0H4%j3n{KOwKJhB0GfB|4u` z554d4Cj{0b??vw$h?BVZ^{=mRk3H|~#I{$xl>N$`V{Y!b`f%uzn%|M)%ld$N6GBQhh!w#!q9kLawV z>bWXD(n<}`*!ajeVr^;ofR%r3;v>>~xOZ~QTDSgLQgILN6KG9${Bi>?F?ZXKxR%;A zKZ0M@BZCs~?Id1;e}LTIO^ln&IE`0Xft2}^R;JAV7w!s4DR1C=!;^(8g{NhiWov4; zS>%_BA178OB9Hcyr>L`38+X}(x{;p9CVq2$#lM(E{pB=kM^$mu_8E`7c$$6VQ~Q>% z&~NfQ6pyMa&W~_@+B~lxi9P_HFC>?|z@HbWc^-NBd_iQ!<@%j^Y`}4oWua%G=WHYX zH(5L^G1!o<^S_b}{?O)W?6H1_C(0i_ko@%7@Wrw4#j)_kvGB#g zGbcv-f#*pN-<08uAziXz5aWC==J#9pojfsvbNc-{e!n~B_t7T5>Gbc*`Td{W-#N3~ z%NN-~eIdPHG+FT^Z>4gvRZqJJSZ?9J@@@ODSMm7WmEeo?RmDn)r!JpPJoUgs3y5bH+6gi;55%GI9qOVXZ==WGq7kF;$d$Sf=jvkN9{~KK;V{`8`IA;{DjoJUV0tx z4#AJam|NL5H@BsX+?EZuMBiusny{PFz<=Ej+(+@txNl-%raJr~baq zKMwh-6?%qG)n#{ee#M*buu?1UFm)d|GtD_){chrJ(4XqFkmsH^sl+n(LT^>9E(()a zomDXD(97}5NbXBd``{CJ=wtrSWc1y!ygTUu%hV~Cjfr0x z`ulhFcM;?NlJ@cF=^uaBepw@MPVeg@UoE|O8FZDB=!-lEA9U{p(lN0ef!XT03v) zi*`qSud)R_O`W}Ja7Q#-C7lu8pnTSbf%$oxX>Z^I?kGnmL^1l`qKsZ8p3k7hQEWyuh3%r=7VIg*ltGL}|gL zsm}Ct0)1Bd{>{#N$8*WtW4~>`Om@Z`_UuvM{s#5-v_C&!?>_NfTKTu0mzMuik4wvc zM;;`3;?&V%ua^?T_}q%9CP>>bJ2J>)2d)4{x1+Z=*n_XH z{zv<2ofVxy+?x8;k=VP!O}o!IW5xc}EX|KhqNd1N_C(JG`_8m-Mjc=FNA!{&#qBQR z+q8?NhmZdjAGcQnpDJKnO&saw5875|aX;N0_Pgo?`!Uky%-aQlDd%@wX z{qD4`on5SJ3hQc3Mlbrk6?%wRm2Ak%z`F$eb571wLU80$Um80y?Anp*`7MTj*ZeP|!gsO$1d7h-oNvW2(^Wr46 zlP6y13srcmhfe|9QzPv>=?d>@&3s-c*FI95|>DQ157BsgBr_~s6+fSOqW|Hu6r0U#@e8Nn;bqWm|5@;Ta8>;6?rEpbQ|EvO$c)1|RUU^f|4w`s zUl8p{FL!FRQqTAiXUqUL+dV(DBiAr*#qaxfn$LC2rwUl3D;j!BqMa+lbD1A9^l&co zb9F~oUY?WI@Ck~}v>))u;llI2@Fy2X?)@}+PTiHo7s!u0sD)X4n2 zV_nSeDDzWY%v^pSc(`@7@}K)0ZCzbe><@kMdFj@6Z=b*}@1);VB`c>#cEB~kzVElK zu1fat-52==?_2y^&fo1tH?*L~PW&?cnoqx2l=bNsIo4qhdb;sv;Df0lS4Mn7eE7+Q z?W;}yi}1Cme`w{5?=j;g#*8Q5+TSzY_xFxB`Xa{rb)4}$=pB2|k^1tv z8(h6FTBBm&cNQMWr$$90^q^<*BZa@e@W>Q$Jp^09vZL*Ug-3j})iZa0o-zA#b;tgA z;X|dwUKQ)?%U(Hu_YX1mz$`ED4Gh!_ zqupKL(n#7aB3GUFrB8%;r*?wR_$(F>_pBZ$KM1~j_Oc9}qodYS?6Z4`!CFqcrNhbP zA;0d|;J)raS%e-XJWo8*zFKzIRl zNt@wu^3`S83B~WyXYDOd9WBF-Q0@b=-o(-5tEeE(3s0Z8583U~>eS~Qy6(=n+$Av= znxE+Y=2?C=&9CQ~XuiEPd8_FD4?k~Pz0R#0b2IQA#s49|OmJeJ)qCwgF?(6fT>Fv} ztGc-E{gh43y6`9#^xXvik|!A_Qmij)z>lk{dZV-equkm!(MiMn0e}N zvv0ss^2NvVBG$53cc`)+$)QVGQw?pk7UB?*Z2ad2rr^n<4ww!OR7YW24NSAMiD>{& z7q)#m!BsqYePH2{sq7CqP6n=b15cf`k?#D_H@R5 z(LIaq?&bB&H)hOFp%KkHKf0H0Ji#4rxW*eL+g0+GIk3K(`)CjDS3zf@x6cZ($+7V* z3w!?NsJt)q7Vg;oQuDR*1yX-V)>Z* zYc5>m-j_d&T^~G;*itQfDL?!oVnb%FHz`Mw zy=9-o$FAhOd{z7ND-<8nvuLfKNHX?>axj#0r8rL2V-B7mi!#?EkRihM_9e44#yF9PJNR5K^>l5BXSY_0;}Q2;(QjM96= zikKrlp&d=pIa0&U%n|=Dz5?R@V~8CPch$SKv>9#UP{1{cYm$Wyt|fA>w=-TH?M#jl zxdzj(aDK0O0^9&s8^0ho2L4utJg9{xE8e!|zI(YfF>ACncXECE#J!9gX6^=l$cP-y z$?HAoc2j{5GRC0=#`yMR_MEn&73Xdw=EXZ3pa*lGT!P^ZnR;LF7JY4u&U=4!-m^4k zep4IuCAlaa{fuYuSn*y9`_lBmx;FBD%_8~)zPB=-iH-61LSU;}!W)6}fDXD%4E}X9 zwjuqf-x}JvuTtw?^ZmD0m}lW>O#NF`fg9e)O|22G*ZVVt)KCUefTOy~?}` zJPUxuRO}qh-OIf6xl6Wxw7)+WIpb)~q5yOTmHLp(*Nsl{c`CM&@!gcs=vW z_8Y&>XD#bn7_+{;S{pPcSU%#w?vU|?MR}j$N0ZOw4@tm}Jvn5~09Qo$gYYQ2?t+IL zI2zgmKMXzruc9dav8RS^-tOVxUk!7TF5}|hG-R=Phv#}WS>IWwiyMOTeLSm?o>7P& z5qq;f0sNwm8e$WgM=kt9a4qNTW%bRHCw8!r*so+nmU2+BA?ijW3-HMtAkJ_gfx9oM zD^d>)Y)Y_7w7zMdl!X?N%UfiP3aGCd{O@n!=Tjfmh2(m5`*dU-eQ&zK8#sv0*vPx7 zeRr>E_S%Cd*>+nlcS{rR4jx1|9L2foU5x4Gn{I@64P>9{@cEgu<)g9Tz@7a*Z(uWh zHCU;^&Acbv(L3TRCe{kh?Z+Poo`AgQIP$_4x>&!i}?Z3;6Ca&K~y#FRFMi?Kjv7op@?zJE8V6 z=<7;!Z+LYBHl=j@jCaqr8)`2@4qk~q15awmp`I%JThV_V{;PBOE70X{yY6gz;oanQJ(L_WGH4)t zj`e6=hR=a--}pZI9^dueZs_F<*+qNzz3Se?+uv+oEt>1_je6~~e6hb`ZLTl&eQ>5T zymI?!J(qW^rw$#wZ*SIw{ZcJEM>fuS?2FCte%9ERHCDq9&Av0oC9ExWUE(EXj$_o0 z_1y(b*86$iAF3Nq?Lzz0k+s&RBbS1Yv-q!kt1aMp7QAE*I9mh%`DfO&nZDs=Z>UE7 zM9~d4&^ma`ZQa{fPaR?%D)5aANG8?XOaJgye1t8#@!i!irs4ZrIOmH#Uc;FAyjML8 zzQde;^>s&g)P8mNX=pPYzBL0~m$U9Asuvzc*D2z=-bsenHt{TnJQGI`NHS**ir#SG zU(cAIF^^l>*LwQe&3Ffpk&Ud`LoUDiFfafXYo&YK3oL18=1JRi@Cdm9958aR__aaMpKMUWKADD&V*OTGt$-)KNh<`t{Q8{PS@IxP0 zd-I%m*6_FboO(C8X6Oc{|9$9k;2OTR(4~)}qo|LVwnfOPLfY;@MlHlHG`~szpq=nf zwx;y0>S!OaI4fMxn6hV$9q)Dg2QIJNpHYr~DY1MVd5C)+|Iv|toHH5ll4n(H+cWq@ z4!AfF_(5ml6G<`nZTt&4;MzcN?J{Z>#KCvR-*B3KXMjrwtdZOgARa`#qCM(2?L_X8`OJo%c6ptci9SX1vHsSk zUg!3=cKBL3TlnzcFU4b)7wj5wPCsk)1n8_gd;|F&&6kd_PvEs<8&8Yj6NS);KMI06t)RBhcG}pOKfEfK4z8zc4s2 znpP}AuyA$ezEL|y{*r2Bi~MJ@T~_@xM&E#s(1-Dd#`@3(4guGhPt7Q3261!h>v3twg_VI5 zeaoIXpKq=+Z3$kYFV9kkzV6({Ij)#~~iD>-_8tT7(X+?Sz*z zqBM6Q^0*rOnhJh(_V2YFyl{E^4)N01cuiH7712IRPGzwlHSAly_;{8ta%J?pbl=h0 z!~np_eDKWJ+Tg@SpQodaj@pZ_N#9-zY_$JV`aAth;ryz8ujZNYv!(fu+<~2D*3l{M zC0_9t*5k_HBc0&Wly#>3CB}iwVGWYKFTnq?4P9SkwRisZALSZ)e6_&p?$9GVxFhbt zyJ6&K7@M{l-Y?!hjdk`hk3dE$k%Ip z0q5xBLfUBE&oJj^=B%?s@AA0}-%>eeh9}wGT2i`M6Lt5)&7A9fLA5Td)D}N*aq=>B z7A1}N68IvX7=>ru81}9Zofo(YmSzmra)7=MSgGYpfI|W{0XZ#|vN1S+S6Ky*(O#&Y zaRq*3!MPTiH@MEea5r%A#$9D=@cE$+ME(D?{VwuI`>C-FA7-v~j47RaGr2|$jOi!$ zUA{HNV5Y*O!^~B+OO|Sl;Kvr_knl{oVAv&*&spb{{LkXI?9bcDvq}!WcbM}RjG=bw z%N@gZPvbqu@^D+yhCl|1*HY`_e1<$^l9l)+3BUgcpLVJ{8$Tk$H851 z@Rj?hQw{?M79{)|2^BpxgKW_C~UqboY> zfp+A%{2z*M)gU9=cM{_m=EPx(2Ss%Qf1f}NJhw(VBQS>V1j4*$coFU86LNXcG_Uo> zH1JP)!2o>OGr*5Ob>F{c`U{CKB$7uf9IohZ&D{n~NdMjdzAb?E&7R>4`KA2*^e6t6 z$a!+*$Dk)flwT{}FB;Xj*YaIH&DeLhb@8s&qji18es}PXVNw3E$g!zv;U|l``&NkW zZ?vrPjp!oAw`|5Ew!v7$aPu~p{0MU5qu(p6uRN@njbI@7ggGaAn%;cdpZcdj@)`xFJ=3Fa#3A#M+s&e%bTgKy~$OnFI&0MD@0KX|07kfv#QX2bPpY7>5nI=na^N-hK;QTzI5rh#s!&pa;d`s<9=F%!MY1Ey%8a zb$TWFtKc8LyEp2XOE>2C8Mq=_zwcN4C9}~QDwO{ua(x2Yj%p49TksnNdy0fsMJ9aGm`e|a~TY2y19&fLiwK?U5 zjnF1*C9anh)H&(~=%5iEAl|O|?E7bQFX21m`G`|#9@BWI4my(m5t-B$hKCke6>Bsn z<5$fg#!Y;E5HZ3!&U9{u_V+R7Qsm7$tYNU7P`Mk}9H5^Rd|0xrT^u>!JAF=1e#yeu z7O&AfgbSj#1m>tu;e|tgUdJ9Sbm-gH*MG#|O7#2v2OYkB1`UBT@>PjX&x(UL^5Z-l zr70JGW|I^0W%^e-@CROFY>nzdcoi{rlhcA;clkhU2Y4s*TV7xd4%EOuYuHQ0|HI5F z%zK8P@{Z=8#r{?oI(V{J`w4tRJ1^m%D(f#^B-=@T=B(fqthtuG5$}+1e?brQSH+ls zx7qWnIH!eeulxhi)jImyyVeS9VE?N$2gbPtJUJb6Cij--VdSN;iIA6?3w;iU9zq)D za^i2YoAA*%_6qnUS`Zy{*c5xCyp=g7D5sM5geU(3PgH-gV@%_B(S+i2k{L_zjcnjE zhj}{hB?N~k<_Bz~=NKD_F@20_#Tyg8*?AuBUTc3__nqbo&&BYAbLK0sk6&XSJM+i? zq^}E=zufbCPWc-KZ)(Rt%j3_q3!c6f{DJ>C_%pO?c`VxiJ`raB6z?&xL&w<%%qI&6 z_&XCEsL7%Y`%wy>nfL|IKLNh_-N6^&qn@MJ~i=(NEn??vTwipjQ8o67z(@t z9O}@SVr4Bn!GW2B5A(G*ou0XSWBf2tI;^{r@z|@yF?(fvF}+zEv?za$YO-9gd}IH9 z1spr?-<=n+e`Ae3dRkuSoc$np)>wQpvlUB%o{f)Nvf~MOCVMszI;+P2s53N@Upniz zWdmoGa##m62`>+cml^*41pFAdyE%nn+N#a0Em6N!lz*KCuOaCEz^fkG5X^3h2eTpQ zWx!0jzUm4IZtg#qpZ#yG@1f}WObqb6>m!zQk?XVmj`g|ui0_=oKNh}^y?YCI76DJr z9JF6==e6I3P7MBR8UP)_tD(bJ3#g53eAIV|mw~JBJJGM<3qc5E0KG18E;K8v?QOQS&#G-=%=B(uS7Ms?~m$; zJ)M$vaw!qN}OJvDoJM*iDfXZpq_ zq90UsdUigVyKnDlnbN_hVrXts49&Upc0PHt0(|Stulh31h02?)Mn5^tuVxBIfW;O* zIk%jrxJNFZ&G03iWo^fQGaH{nkh8M-RFX(CQgRHha)P|XbE}XJEBaloiQEe3m z{s!=FCudc809jY#i}-(}y$gJl)t&$U%uKFaBnW~n)&v3qUaD3Evg|gK1Vy2(?%#Cn zu5Aef5Q$c!ww8)!NCF74Edh3Eq1}W_K*qY-6xvR^E#YENv8~3oc7NSnCz)Ki2zVt} zo!|R&p65xP3<<{nFRxc#GxJ=|`JV6j-oM{-4)a6a=V%A_Rqv>KniJi7M)#O|-BaEr z-MO!K^jp_O7w-GI)=7Lsbq0EO3NUtBGpFl0#X{!r`)>Vq+U(%jIoJ~Y(an9p_dWC= z@wbTJNu-Yj#zsm#+RXhZ?HIf}@>V(H4svT-pl?@oVk%xLL7+whjKU* z_2_Zlefp#Lw8{Lwh5t?~?WLt3 ze(IM)5jRd?Y?R5!M`))wi#!^9seD#3>rIQX*AyFA4b7wu4>dKeNZr~1k6?HE`JvT!B#Z!@}7c@^1!Db%;M zBlix{o*$oTwTVro9DiXn{v$drhV3KR9_@)u1&%jBKdQr=M9pe5I@Z__^w+}ktV!*T zqI-E}TFYeC+%Wza*NcYP`zz|2?4l*)@H9ueu!Wb9x6>NPC2k(?mS9fIv4xf71Vkdd&_CJl6Du-F0qGK7rE{7oBW-zv8L0m+ElGfJ2sH^ z>Y5DQ~j;uv)W@I-T22@E3te54_wI-p&FrhY?EzoTZun6#%Yvf`{5=l1uytjxy?nsK)8j%WE;xes zEa%VVXKYOThu-xoZazeEv>?klhl(~0zWzx*1MtIREu+Xo#pC+ z!k@lm=g!Q%tNY&jy>m~`n%oTZ+UELX1B~mN3FG>mM?Stt+}s=gK{gU^u}lmo{(b!S z$+q1$CELxDPO4U|hiWfdkVi54gqN8^@-jRh!)6j6DmGbc5j$tBCU$A!3YMwQLT?eb z40gNz@R#qgYeH1xEnd*O$mGa=o+G9m5gg~3!yaE3{`cypsn27pBwTZKh-m9Z&-f2I zbL!I5$JrkbGHzQ&*lWSmo{#nhZGR-Jw{q!KGH)XCL~>5}X=R)($i#AFP%?A6eVBi1 z9x~|PpcBbE`1{oscz8ZM>bJ_bX#S-;W`7iCO`%hJkU0P1FW`N*p)YU!muLR>nECIG zSE{zp4?Owgk#a4633OTreMbs_tCBom@rtCak~52l2P#&Cp4=yTRyuBB!@Laa3y|%*H z$jyA-$xriFEzIy&O+ZeYISSbRwVC@-_Sk>!j(rq5q#u4>n=n7y3?I@bG%fzp+&o|C z(13$q;X~^jW()4Lq^boONmZN9+Vf=UX&sqk^cu2Tb#x`@46~nCDs2xHzg!;vz6;yX zVE2D}V3Wvm>C^T{d)JdLpyo$*LbG@f8p_V%yh!p2*!SH-MJwRBpw_Bh!0(kB3v+Sc zi{Mt*qkXUc+PSW0@~|&{&HMT;dH;kv<_eqcz5KMm1NWa3_~}+`WN-bLXrdW=NO3;9 zrZzL2Lq9R(hvdWpbjJbaTy#+&9CBUyR%@NM3x2LQW9R$?c=V2RRT=ZGv*uSa2f9!E zs^>jZ55&A>h#s${rh+*VKkdi}Y+VRHNp`6{y;p@TEV^u^-9@w+yVlv)0vROO78`w^ zTypfoc;VtK#eA%N3)u_Fz(gN+@xI=bK4;CE8Bf_QqC0*U+4e};?apuHnc7@PY}Y%k zZ!s>lQ9}&*JQ{{hT-}u9!MS{^odeLzJqh^-&AI6pdYFKn=*~y0=m$F5pt)eq7cf4J zYY6a2cbYMRC)o*K6z;(j_Q3^V{Of*?oB_uE)^|?5K)kqR4s$RMpFd6vk6cXEc()dS zID=>?7kHqfKJj9n4P-gB#Pe7q1dJLlF^BH90&-c;v6s1(bbKgrN5%GfY9Zju{p4Hb zv5z@AraLJ}8}PjJkMvF(vZtLr5>t>viopvfCa(ak9uD@NS!Z+@wcLtpg^+dXqbIJ5 zd{%#YS24uJyt^~u-RHcYhQRzk|MQ{KwvKatyS(nkA|!e=f_Dci_D00qKZ$e$AS-V)UBq8QCt+4+qMdL_h9ajsL<&o8`+X&(~n+N%hR+B*+CF za%ngIY?Gl~-WLtZJ~H+npA(^*N-y2ecRuw_A<+QOtL+$c2Y;UV9X{T6-iZo6V447b z>wW|MMZrm&aeC<>n(Nq7&fEvLt!x_1b1xsn=1O?CKf3wzZ~Mvw(aqrV4J+y|?uTBs z(dMA(B|*O%or&H+XYOmkPndw7$-_qf%fF*TfK9q5h@D~bc|5lW+)GC}akS+tv#jNL zT+d~_t$Zw-j~pH8`jZKEnD}Rt2M@0Ob*92zAAXOa=`p=IG-ROG3O3&b9P^QP#mK~5 zVz9`-=G4dQZxT)0F<5eGW2;*Vc%Y$2CCa~(zZo1o_r&ikr!VngShY&5+(%0*#sVMcB8K;AQ2I7XX`T7*c`f z1^7ZS{$yWrmFP&nlYR8b81d?~-gV zeWZlDWS2tM@HzDop-4Hf3YVrYaMI!F&)%ERSEV|#0OQ{AVSL|nz)*Mq-blb}AKpNw z&4+HIsm#+*=59o=`%Vu}xcWiWK`>DYo z1|Yv$IwLg!zlz~0mU;j@yZC+4=#Jj}h8w#v^*ayQK8N}*wo;BtMwcOzzle_}+fuT- zJ)Jo34Hjq9ha!_NC7w$?>lDVn)(RY*N{nCYSH`oaMHz9%#)gV5@Ok6~e5xtnWGyj0 zYFv*`!M2`7ocRO((9xQgr@-?u+Rf+rY+u^ZI>pKPy^|PuTZpxSijgxm z+3Jn7|9|+rIbhexn0{$r^B~)Kzdqr|H%4RQLkmZER`sNH^sTj&&%-~7unTUjar+5# zVCJ&GwxKmv#W;shE0&49--lP2Q_bhb|Ln^znophS=hYu}Jgzq$7BT z=$;)}ib;sy?Dkg$kxkf0^6QbeHf;2FGyN$~pnXH;YZ)a?o|!bo#=MvK($SA>7=`;Nt#)Q-wr5Y!<_T+9)f#F|I_VFXN>8%RLV9o*eLso4dBXT^!TL|rm%d-a_4~N) zqkcepYIMxEA}8?wj^Wb@hROJI=b*(o$hW{HoQZcyC^Cu9EBK5;TT#V0goF9$Tjb+$ z#(DyIX?Xt5P-G=*To0g&YJ5YED~5i8J+HLi{5R5r-7ouwRh7{HJn8}d$kz<~|Us5ds_f?CK*!TU9eW_31)D>Y% z3=cnjfxeg0r{-9=?qcuqAJc#HeE5xbih;Kn+7j;;r?KBx2LH_MeBv-I>v<$1l_NVB;k(V!L_stFomhgskeN zl1JD~t>pQLl}9XWK*RU_#5(@jGZy(XUie=$x~W&6yEPSxbxk7P-cI{h5Ifhp9rn(6 zRraRhaIWu_1TC{B9p6ha`qXePcIh!{63v+fOY?FjVyEoKHw_YJCbw428n90<+L$t~ z5_r?d15{p?wpF=(?R`+07K-ToBy4@{G1Z0K);`w}+C-T23?*&h@CsKLIu%GMX(8Rz7! zt!oFiZFt_;Ho&RcnjZZx-2n|@Gv_QoR*DyhVPMNcJMerBwTUJ0OALMVJkP5B(2n^A z!n5zg76P}XRuO#3u35x8tDtGlswwsJ9yuekkITdde9oSJL7i`wqg-mu6l6Scio@(P z-h02y+?PKmeyO3hLTezN$KH|O6NPt#W7Vw4pK1KtoY&g9PHoV>HpO5BH_xgz>?!P# zBzUDOiSq$C6aE-9F_-vA$L(4N$KF`@eXKJm>DX=WDXu-SI#`dSnv!F;*uEM11-=W` z%SKW>JI;9r+A~zTZZi8Tb`+&lcl_;*C#0`BSR*9Z+;;Ak4M&@5PqCoZ8=xy_<2~d| z3wRT)&WD~&zVCL;B{ewMe62SyR`i$f*@^vR(^O`7auz%d3~Q;~v;9b4c&hlDy(s4b zCu>BhF_u4^8g6E++ZbyXW1YeoT3zr-E@u=D!HFh(AW+&{dx}6}6B?W)|3bT{fKfb`5i) zbD;eA)b1L?rRdZEbF>n=l5hPe|7G~r^jj#OQ0pImrg}@{kQ*P9Zr)B?;3RSYnGhwP zIT$$Pw|oM}=Uh9+`xH1>3l2JX zN42Yyxi4I3t>=r#{i)q$uMGibx!4G1eIl|v2EFC_0>_IR)@~`YhOmyMVvBqUmv73E zRYl;T8QI&6jnN8zg(KUix2je%F3q{{F8jI`IVHF|kw2Z1O^n&457l@_2RRo%_)o=x z`_50Ij^6RhUb)mVg8U}y7Ny(tH(34rzn?x|Ki@~YgVE1D@{cp128#bGzoXpO%9K#k zEc%MNd4h(S1Is_&k^Ga6k-gjoKdz2yuO&OD)y}m>=t_Qw=1TS3_IxQ zpjwJ3epnQnQ@Q_}u(NI!T-aZY@O@(%dv0ZDy%c)_^8DTSsKvxBV$@t}ua!B_R2{Jr z`Fe^8NN!y&*~9N*=vg(sdbR^tI(V-O*)kb>KF(f0oKIIMnp3;R*RpJ1YolPtzd}xw z1}x|pyqo-5ft@du&g{vNIXo}lvlE_8`*6-{oxt$~vRS#0v*^LZXI=V}PE7L9-eWvJ z7Vh6)uv8?e%7;}mT5mBo+RA-<^t{CioNCCk6rL9K2eZG-Hi6u z7;CX7EbG7C!}lW=q1u-TwN`Zj*JeYLli&kmck#Q9-*b@hHxVa3#OGl?4PEd~Ep(~( zv>&gj`++vG4~}m`UN?iE1(%6-?X`reu_4~ISv4v{_;hP_#D6!@-!7*w@(A6F>7#-+ zXPfo{CU>Fs@@Q`$d@uLl+1K{C6)v3ctef}Sx-7RN>rzjemy9q&B}`Cn|>=N6LV zZyALhjDIZOLiVa+hv#TR@jkb1P2*OMfH^evv<4=}-|?k~nqJ2a@Lm(YiXK1Zz$U&H zEc$c#^+o*l0qYm4kRO>k2lny$moIhf*5E}0*DUaC3|V93HZpJ*cvswP7kKZe3Sp0> zlpKZro`P39lQ<(3eVk4mzt%u5W6qAVf55%?+Fy{r&h-+$&&4-?0=<7L|I3h@s`D>N zA6hkUpFA`_cr z3Uc$)_(->a;~m5rb`on?%;yrt9Aw{NTex}Sj@yX2%;W!+C$_XQMvW%~%+2`vS*%ZI z&J3=+wG8%L*fH6izZ#&XWt{By%frw8yjLb^AA%ov=E^%?ALnl$W1hUUs&)QSKuWNzLO0kp99|!9cI&P`((~Ykk0{)if3cQ7+SNjf6ycgGbm$yw<*BKsXjKbp_?;MH8 z8C!jVJiFEK)A{j)mPf6~q>0!v$h2+99Ic&j*ThJUbJj3tsEJ=icgf)&A%`2N;}IU^ zTdhJyRiYziD-RBSGHW>FCY~E9zmB!UMc4z_Hp;R78TqB>jX!>!W#&ct zL+iq2yG%g7%Vs)ETeFdWlBeR|V%kB6c9$bhrF&#kkx#5D;F*#1W$YGguWWRT+t;rp zD;0YH<_g+%ugebG%RP<7=qElKc+SM-8545P`2HpMNU$nIDILqWk*t5BTembryfFyrahBym(Rz`fI&oLn!`G%seSB?#7n-qYKf)Ay1#3 z1N7Hr`s-^?Or-st_xnk z5^N5$p9%2Pc;Jx?NtE|J_PVKg93UU_G_-z~)!jOudX*8>_{CRjnEPLyrfueAV`O(wwm^ zI!70*f_AhvNitma?hEi+JNHWg`;<5U#Gp~lG96MQbeRA*M^~F>ZKkePm^1S`DYKU>%fxfsC zdU^w2aF$I^zZ?TSA@9KB`uqmg&qF6IbAseZp&epzG3d+GjPXwMJkg8e_sp+oRB?m`o>RT~cAm=z{_U)f$OnEtkGgP=2ksVhfPA6}6D_;8 zj^FYx1nW@oV=lbOoS6JFayA%Hy_#pwh=3g%s{FYf7k%)T(CI9PcAa~D=rj|YK&x$I zHGh|fzXL6~zLsQCER*p5aoPVxql+oCseVTD?AB)eX=iHX-iAILK!^9qo8 zYOj@djeRd#;91dh9kNREEk8a+9?(rH;<&5l_nxonk zYg$s4_9;%%*}2qTU^E`sXn35gRu4)PBZe_5$ZQ_K!ZA ziEkMXTBV)fx#hVhw#cqhjmvn(RrI&`jWP7X66Um>F|;$z!@#OKMD5)nI8EIL@__aD zo3$pnQfuy!3HYV^#Iv%0F=|)~MH~R$Z_g#(MozEW{22Y-?^dS7j)^Ij`- zq;}fCo38adr+L?N(tpULc4$#_Wo%KN`#P{Z{0k4?J9FQ|_anp$mxs%K=Hc}b_~f6I zzu~uEU2;Bu-%7iK@n2m2UOR4J{`T(eIF`PQ{t1p8n6LkU{sAA^A)m>`h=$ENYkWTw z1EvO5^(Sw@>j&WVo3+2K>QCVT&5v>sZvE*T?se3TsqTO`+M#XPcjj6V*WeY=gmjB^ zMykWx9Z6|hJLtPT%Q9W}Os%Ui3z8PclVz|LR3~IX9D2 zDd#=uN$H0G^Sf}gy{4}jJuG^-6MayNJkWc#zIE2oaZmK&XT9D3xrMbi+?SlAk8bc` zcuo6C9l~FU;@@c9q~a<8(IomtZC9#Z#_?wqkCKh8He`D*%(5aCJYUQ>7xP((uS0#; z(M90etly+R;pJMy^~1LtqB_UNxh_rw3RIT-#|{DOE= zAO9{JKXd{3Ffq`gyqs3-rebnMJ4~#NxFvBL(N+q$o6mRgxqM>j?>X>;p#!(3AQRmW zuQX%doPHnsZIo~azA}T|Q;1nKfHM4Qru8B zo>1oEYmZsK*c(qcZ-2;Vv8k`M(A$sK$40ri<;w=HH{|&ka;caxicVtV#3$rgz|BqU z1GgAiu^9V7YfPkP!zUP*_9q=joRn*dmk|HiSIb)3EO4ecrK8&;vPbof@*_XN-?yYQ z!OeJLGux?3)t%e!`*pm87cnsCjfS9cCx{b?`FY7VwB2QL0E>_0tTe^Ed5 z`eWJ~EWLIaUwm-$TjI`dkTvhfS=lV-)st#|!J9k3J#!2G7csYskcEnmE5^Kt`C7%l z&Jw94Z&k@WY5njH)(^`LGJ1|2RRF%&L7q(Sv~hh2^Pn6TJQJzpdqvQ$Eo>DnKu>DN z%pY{77~Gc^p^p@|;HdPz#X#N)} zRzgmAzLk7jd1w=Ng&vfL9>;&CMU6MQcNBH5;)Rc+i758bU}#5q=wDGgl!;w8Z4h*n zn?OgO+#i3u{yWTZqJNYAN$AP!r8R&*ejD?%1AN~Jzx@HZf$o#s_|wIX+-SINU_YGa zwU%%ZazkrwG>;45)e6=R7f|CvUfbxzJ*Fp{n-{eQ9?Sfv>bJOY^dff%B9^t={-`+fHo5{0Uw#^Q`Vpm1l z9C}r(|0!rxYigk1NF(2$hhE#U@ng`d=-8H7${XAJnN9*`!Kk>Ybc156hGtw_0siXo zhg@Cg_`=fpYG*&OqG!5m>^kAvgm!MipRbiap8#iQuSbtNu=kOR+0cpO!>@g=uY6S8 zTk)piPpsb`uRjQ_CDQjl(*9uO<*laHz#}iAx5ct^h)v5LpA3D(krUK$7EXo+v^Nbp zzHlcxMYY%+Jg+(Z8gn`s+SPB_;lVs-KT={(4T1T8w%3@E$4|GqupJ-b9lb5k?+fsZ()u9X_mx;e@_9>r2 zTxvXP5hc?^kFH#cG7fx$Nat19uad9GH`OL--|g3tO=g_{`mOZ_JI`X`oXmCSRnR+q zECMgLP)|_FI-1#>1=9gM9q_Nly@ps;jcTFTk4S3*R10;~`Bc4(SwqS5f_*-EcY6l0 z3f2#)9%=%$e!` zJbm{U?>}?MUO&6Xtbw|uXZ>t+J~m&m)%_0i`EIeVdaGq+e0b{fdp<0-UOf%2KFnq> z6>u5AzZyflsTm$`xdXd?BQ?;qy=!CIPkp~BWqj>hl~&3+#b{#1w#-z#r~w{t!2WD2 z#y`L=(A+5AF_E!ihfRBzXPX0;n6>}g{rG3-)F|__<$3-bCQs|-KcYpasOsmLtF3}qu~FI4q6ZupTcckf8u z`V?}&l|h~O#B;FGH6J=BZhMv;8^{Z?7jZsyZ|G~`I#YDOyoOX`$alpq_#AEGYQV9R zIDpn?9oAlE8do;s!q=2tr}^*1&o=%qaguiMc9=1wFsAmiaZ_LT1~NJg99C-nk$sYZ zTlufSu4{PT_C2*%>sHm_dfHe2YFp>K1y`=L_mg(y_xZ9Z#jJAdlJ@r%Fmn#&dGNlKZfkqeqyrGw}ZQh%+Vxtkk-XQbY{Q9 zKg&-7yR_9lufjXpys)Gsaxldk^srayS>6{0^`w?omk{%PM$V{jVby zJBjaY_?p|e_iOcqeqde8^4vmGO>hI{{l6+=}93d095RhK~cbPSo`)YJ1mxcJOW|ay$(=-iogyzETcUaV}Sm zd*65QW@r>zBF7ma-WQP^%l6<=^J?;dSHWx81A9GlC7inWn`+_-=ht_{?y&Jto&`N* zLZjm0J3zt$(3QZs7bLVhmWh8!wqP7W$R>9i9=4+-NRa;YH!!#0kagI(x*WM;BjSdSV>c zB#c96^mt{Xm!DrW=g0Jp$14x>(YFVIBWpPPhK%W#mmFI83eUCjOmHaqXMALLo~duz zoHfMrepUi6I`7}&z7LHmf9<}%UGF0^)VAnW^-024k8E(>pUHEI0R*8}(Q4h_Q^Uzw zpOdJIsf*@R3#Y=T>?y?oI>0IQgwEa>!Ft7}r2p!e&$`=Z=j_)WsK2n+cu20I2WObJ zvSw zD^d znF(2;2)V%O30YP|{UpklEbgPHU(Mpa?j=5x_*=3wpLJ>Tf8;N1Cf>3z&D5;tjIXt- z75`s=U7BakYO?!s^$-n3+>KHG!@#j`o{c?fuYWj6 z>@6ypf&Zet0PGlFX87~OpOnjx&vX;(1?#dtXZGmO*&3^;Yn=$ZZM3n9I9eutQ*@T? z_Zaz&?{N`wK`?o94n|Hmeno_Vjw_;dY<3FPIwa z79QRL4|ac+iBrk;SV^0Mj-Mr*H|FA6e(Ms>8gI1xRgGE7&DiT6#486qI!=7kwozlz z`A?bQT@&s4eEG0##4A*@;o{2B{F8Y(JBZ;5mwwJ4`;TmElh&>&mL(fo@%_i(6U8$1 zUH}>@Yw(p8K||sV$@SU5QvnQaEockZLzh~cT6jnN%pNypk8{bk#hfo+XDzN@?989! zm3a>y{62jfe&apuMLRW0AumW#{vx$eB%enlU@!0}z%hzp7yKI5ga5%iUfFOHsTyCD>L+>rq;|LsXw zkFr4cVqS%JeR^q4v2FQ0@~w=Yi$AMew&Hga!9((j6&uOh6KfQ1{U)cXx;gd)zVTAp z+sXR}`8Tlu=2_=Z8JR&F^jnw|kKgz%@Kq8csJSKSOg=oUT7@<2@7rO`s%~AnXy$yb zPk={SmM)yh*^);WqGLLY4oO&}LECwpn|_7r&#*i6J)7@_rxWDlt6>jMf-g4L=*j=R zXyQS=`x#BT-Clo-4ZT4&#!BEGPkdiCh8+`ja8_W?lWMqjF@__^zYb`Ob&9Vog&*R- zqy`=v($qW7!d@gUraCifbWCk{+YD-i;63HfL@Pz?&2Q}TT>648bp8){wwy)8nY1U6 z@~ozY3I1y%{wrJyk1Od{eA*vu*t6BEcxD&RkO#>*0&I5!+ZzsS0bpu|zgmH%&A_60 zPYVA7ur$!G)?defMQ4TP^FH%p^1Xti6&NaLznJ!mY5yQ})ko(#_=)027#eea>z(cV z+ja`)wDizOz|cql8qxajBHGP_78W`*QUQ$=LnBL;78x4Jhej4cBL^KC5s&X6R@g(+ zJ^kBs@*`@DL?c`HJdZ}?cRR76n-gfo_}uW;!wz3r&Y$?}Od$EyTz|&#TYqmAz7t4& z^~dLO_tf~UYQ=lwf3>=!9nAG{=J*tH;%)kP-|BArfcRRR{2Xg(RO{B9`e^;hp+@&T zmmfm+Rq%WVbG?Rl0!h^|+KH)tL(kvM^T)wGJlYn=wuNrQi>c(7c3;gLo>e&j2y{f<@G#l5v5Ywx%v)+_fF%srO5^N*CZGo**~l_Lq?yYRdGFSXKm{PVsIQV?9|SyNMbF#_+G7 zwKgfP)WVu_#ho<=niEr#RK`3o7n+04N5K1|;13)gFAhac+!pLUSrUr8c^hM*EzPTZ zNYgLzI&73Zr5zE`RG0&=g$j`joseDCdxXcF(+%x_2c>?&U zfxq#|;q-kvzV8I{d=2L*rVrx`Lttn`r=_G_M-D70{JnSbbH0Z>d6QgKD{yGv8GWBi zpD+1B(<_PVT*-dJL#*v@t+R%#o1bi*ImSLE>v(68b$Ytqk&jYi6~EOAZZ(c|yffdo z(EL8kddYa%r}spegB9O7vw6Yg)+^&fpRI0w4c>Yk-eNAYg2a?7QqWtfaq@>R8urm< z(ZvGjqGexsQ$Dh(c__6r*aA`T-_Bk}&CHkdT*XD`3~W}`238ZhLZ=1mo8d|E=DEKT z?+egAc6)T5TMwOTY%)U^N zPb3}-iWUHqbcQS8jC{9cO{*j@qOlhH?*xhZC5ae>>KxB5PjN(J@b2ffvLWW zs;1@ym+N{6ecJwHX!#rLFIt5hl#Wb6o{Rv0OD-a>3{34=jawS=8CB=5=Q_r6t#o}AxVVp!ULO*qHied7myhW%UD=OZG`bSm=<2d}?g&NRy)#H( zoR|3!ddv7G!TPtmQ#pfdShx#aR)xNqmt>(MjU5t6Ps*BZ^ae1!`E3uMJ9@*w<2~VHTo28sb(9ApyMmGos*+}0_4o2=v`u6k^>w)R>$!+6X6}m9J*bhubm*I0Z zd*Hgu1DF5V^WmEJ3E-;YY&5N--v1kaX&&=fmCiY8p9#KJcEDe{jo(vOTGdmrwWd-> zB^#w|lHb(3U&Zwju9u7qcHhH2Kli$zH`!4>XxyglOQ7x1*Z^8zcTxC%s0A0#s$S;^ zvD!F()N!7bOnLqVcp3RMj&{%&&n-e{)%~ozNq(i>mi(d2@My-?3eHwEgSR{d%c~69=`rz zeC)K#gRflzzQ4tu|9|$+s{YfmZ_fOwe{|JS!;5KQ>eq5cbN`R{(w%{f@M+$A8+-L3 z?jxhS-^TWTo9m zz`fyP@bva0zRlmx7HsY`3(9SU0z4xLi(|_{$;Kr-b zTbd8atOeY2pEc_`rWNF*;B#ET^SjcfOy9-xOVZ9FLo&gAX7~o4Z--yLxxiY!&pJC@ zusn%v{c@6(WA8nH%m=pB*xCEbtl*6&Zo*SI{3%`ZB^Vqd$gn zZ@_1>`aZjh_>}BA!J_>Ry1>o7(Clf^HrE7?Xr9AM#@+x;Yyt=G(X54}A56kYKd98oM(ff&u$uGVh`pcMryh3N6 zfhN)~X75_$=5@@=DR_$dld<|lt^nT%1Jgen_(q!V|HOCse_h0HB=6);ug9Mrjz29K zBp+2VfG%ViIkU0XFb-;B=xcZw-#q7SoMm zz3(o&Z)Psn4Age*!LOu^HUz^M4JF(+%8H z%ov87@00kRdCpgQfPItx#54B+-&+3Pc3^zxV_@`yZ^8IYVB80c&p0r)0OOtn7>9%J z)4=#Pd^id?PXp(01Lw%F@-JP?@&9<>{75w%z#&@rfbRyE;QJIZ@@byCA2`2jV6|!D z9S7$9z7YnWoJnZnVWJ1ofbc2Yy0AVAJqXXjr{F&68-DaY@G0H%ENc=^0grI1*vV;p zY|(`avyD$1wm%v;ZTfhX@3IlsAMmm6Q?f_(ftqL8is>cGh$+8w7wz0(nfVz5&AnG( zb!UvR_2$@=VB~e{E7LPXi+5Vx??XRl`5%YwBu~5dG2#e1eVs2D$?)G>e;s?&t(9Gc4p)3bv71ihcGo<7 z0NRjjmmJUeAU?Jmo&9TF$4}7Xha`dc`A0eaLBiIS58@LqN z_X;+^dx1}dyMmp(Al$Smq!&MYmRnc*LK z^a1d1;$gt2&kXkbH@*{ebDHs2p9$tvTN%?&(BBzk>mPXTEPlj$*dQyXy8aT^yW^XK z)O30Mh{X7c=?7eDuZJFgnE5{WkP~-<&wApJci~ISfmX3e-XE8ja~9vC8yb3+{s+^? zK<%3tr_;9E<~i&l$%*Mzq2i>9uiZ+-usU|?P(C(fuo z1l;KRn|z9STl$oP0`V|iMpxfSt?hL;`M;6x=r@aAtt89o>ia%Vq89scCc*4{d z?X|64Jg0ZabBqGXt&wMh6C$KNiD#kb8jumtpS`J0x(D4xPaq@olqrMw>ptG~{u^+HM8m&)N z9l+x!$P@W1%6D}@FLSUtJMRxghBK$~yH&@nHGPUH z>UlkLlKav5p-9W!_8wth0oQl@CB9Fz@5;HS(4}d#(TW`+pUIrxK81Ka=UvN=f0Ejs z;n-?FVXv(3g3~vF>vPQUeemNPJ{7-jW=^EDOVHW(K2_et9@JGQcuq1-?G8B?ANw?Y zJkP&;Km52Hweu{oia7mpleEe zBaX6ObQ<(~YiHz|`5tQK{_pvI5;&5PW718s9ZmzwPk|-Z zKfGimuxRY;C4ZyVp}O`%KJZB1JOn%s0ndHX&9aezrxd&B8Q;jGdhZ%wQeN)~;1NFc z-Q}mx7&vS__i4V%5B=qC*2g5qbyJDm4YlmGo1@5yj3p;B4%wcm9L(k6{X5{xRA^x+ zG&X`*?u_nDm4(%rj8!Og#}1x|1MY~OtUqxJ74yLn%$C*Qw{eg>QG?@Cwu zz4bsX*8*!Xwa(D(L3|=NkN<KAbvAG*mr$8?a7#$5WjP`$oK# zq_rr{zBob72fP7#LnocLFAmSc+v|(r?N)SK-NEvvI`CJCjHtw48sAvnG@jpz#a5zA z7rbEqmc3qSJ+@)jOXW@46S0O^+=7f%TbiNccv%wh@8msEWY(02Or>Gk=+QT^64iC$Z^<`RCfG9G7ZSnES~y#;lSIs1$JW)HpR z;mvK(H}a9VIC)>>{`JhU^4y9iSnv!rKK335SM}mII-~D8X|089qc2<6+3O%5;#?io zMb%ot4}BTmxI8PX=<>zz-E;@1tkR^T4`kFtZ!dF7&s1~^Hnop*78wP(4m?H zbWq*H!3~lnTB{%*?sjM*aSSe9h!(!;p@km~dj21)-@?2Y+N|7QXLlkb0V zv-17Pee?ZW;gj9ykEh}1XW_M6^7Ysn&4K0h?*_yV&K^Ud@zpIQJhK~~zaJS}5U7sv zuF3K9PV>{$2G&|;pNzJ7x}F?veO9&w`vF21OQD6%0^0wJReCk{T>LQmVKHa%z3g|0 zJdWRPm4;YzuHP2t_Tih1jyG7PwGZ0Q*0Of(u&%xA?p;LtqABv`@mH+UqEepwBe_OC zp9pa6YG3Kg>L*G~v_4xo>)-)CPgtc5`ptdc7^|=d89#n#XajVbV?nbA&?ha1wv|H# zH`u~?=n-T&I6-HSqsm9N`_UC4;%ZsM)&5;@{WtC3XBFO~zOVC_-V40(iT=_kb+7up z?P8~I_JOz?S-6&*(Gc?Y#MqZnKT{|_PO@nUa`VV5#~!`PH-w-Q=a2#9e4AqCic=nc#EyHXy~v)3jOj&ia~1d0rq=K6=Gq!^VjV-jGF{`jhq}xzeCwB- zF-cEqJj(a3{jj_#n|yEI@uY;m#&|?G8k5FzC}i*b;PU$QoHL`f-KOS-_S^7P%BqC(c_N+zQ7WIrp&f0}2{3|{_x78z8vF~l&m2B(@@%YC*b9@$jjL*@5UFM^YPULvf zO7<$5<;$_>XsD6vF>u!M2Wt~H)4q1#Ish)Ck`w67Y~+0Fth^k_|Nr6{a%^YX$+792 zgJzy>VIGAKql2O2cILYpoG=DthZRo6uIsqV>P`daX(_i)@8o&KDX#PdBXfPo%wGJhz`c4R>$1@i zt0(d=wnR1=sA)*tjucAEg?EOmG+oPhW?fJA?HMJgeVY3zK54YGR+8 zWl?xp?cD^ulMjkCTKCoOg5K4puDj2#@_%K9kqyX;I%sMRG{u_pWwppV!M_;zCr2e) zl6&CSnjYc*JKDQYW2b-3f&6mW)!z1w&>rXgty`65!S*gcX`zY-!Kwp(Ym2TG(k7teN{OJTW)z zff>3kxu3+dv#rpKL&zqV#;@oqZ_-*=`82vFos@d4yh&#x#>+0k79YWX2K6XO;n`k% zJOn--;UD}pedNL4qg*TFANkDrgfU$Lk7pz#Mi zAlun@J1uO>^%U|@Y2i>Zc{F&xk$SKzsI&9V|8_6@p7~Gn!tb5`hQ9N^#RGrKo9Dy7 z?gH>@z7uKSPT=nV#!CKGpF9WNnlq$|2*~p9kiJ@1GCz z*FGW4R|2zOox-OV&UpjC`O|^mM9+G8s{lAZSd0x1T^>AhKAbmvLO2hjHz#l7yb1Jv z88Sq*esg^f)~ETdT-S-5m2Y~B^p9^T=eTMgMQRsER&J3jF?!%>_!wO>Tzj`MccF`j z{lcTQ=)-2oDR?{y8*>phroNXUKg}8h+RXMfOwVR~#n7SFr*4-Ft&X}w&H(FHtwIMfZVu~u7So2-sYyRb@7gsy>Am=aG{n&~w9Ipe1WX?j_jt*>1TvI)@bfxx%ll*Y+NpCK5?wf15 z;O9pFCbLfu`gRp~uCq$(SAkpQt25c7Fi$pl*|0s$z?g;Z{w%bRce!=i`1!?Fcl2)l z?_}%&WQ5Tf{_p{xhYtRFJ{|mYo-HFLAYZZBt0y2|WjDIMy>!oDY^A|ISH#$4f41Cd z&TT*>lMlql(_Ak~3u=$O>P5`GYCFL9KIuKhLE7f94j(^6xSDdSUB6)JkTlnt|2g3K z!_*l!ky{deSQEH+JAD<<7d8IayAN+5rb2zwiuyeIlr8l?^s5-E`m|%HAyYTQ+SnVv zi_dzTIf@a_T*G`<5?|BW2if!KR(aD}%dTvrjd^XUpz(svL$n!x}&F< zzhvrM_BYsdM{VH5@D6j34&3|k^$swe4zA0W(7yR?+_QNwSbv1}2nuifcSbsX4@CF8+&WvxADt{=``PvJ~w zOl#<)l{iL?)5l>4u1eaOz?f>BJ{sM=8Pj3zsRl}MAk~uyX9O2VABLtsX&=JdKz#^r z>Z8W-_ayHJs=4~bT=*QBsCoSL-)w$sb?loCXvwC-)bIiJ687@@oB%whx~v4>NbP8k zA?*Q?HrzhHYZ&x0-#5(Uhf;i&=}W$`;M6mm`?z-q&*%&<)oQ(nOi$;zleDphvp6~| zt4jN&c0pU=EY1prPbcx7_!C*Mw+rC ziSa2G)$`lb`gosBB^Gi1v&H6F#dsRwPkfP_c4V`yr<}8U1}R&`YiZyojar_xmA-22 zhxSw!YeJwW%fU^igBy)$A>-c;ZdSqzl9vsaSex1y?|y1%*;iof1KWtdCCsNAe`^`R zGsNH?{c+!T>#gAWJeBr0Y9i* zdh@kbWGC&eMCV9XKMMaeAP1w9(KpwIBHGik^;+Ud;8VYeaaDW!>x0ixHcqcdz-eq0 zHPO7^gHN-*^TPRtcpN!jK%8ypWA%Uj=tFmZ^Y!^Ulkx_u|9k`QD9=!dY~p+saOCnk zJ|OKZ#Shbdyz;YTe-uFT`flFA|C^m;bx#PA&t&YgoqLlqsA2QfzID?S#Q=Qa`4g?k zLgt|5D$ca}5wVO9pm*r|<{uFUnZtE-a(fEvKCfb)J_zO%aJ`7QjOJ+=^QAFqY~DPA z_J6W*YUd8x=CBV8c-EOTs^hL>9y6K8A;|FP9QHtAF6-dgI_7OVu!t7qt0yUr4h(PR zVK>14FKJI)+7j;DY%M=Iwu(e}f-Sy!$@d z9}It;DX{lDTWih?8sIz;;@YvFk#GD3bMuDQaz9p|Bbv*!B-1(j;l_c_65)9_ClxPC z*%SR)C^F`QQ=9X#SM!M%v}9xZK#Q_hSKN2Tx&B#mK9$K!{UQ_@;(Z?4CI``*uX5I= zq$6V_vlk+>3#6?5Qlj(L0%(<643ZC%b$ieCygAH>FmbSLeM2+{->`odNyO&pF~xvzY@^=RL#a z?SLI?^*j^g8A~=t!ZSp zTtj|20G#BwyDO$R=J#25S{lbb92J-*zRpdaB|K7IZ$(K_qjm@7l;%o<}Fye!9IcLeXgAr(82Ufd5mcy+Ncm)owvAzAq*g?rmH5z42J> zW9s%NxUZ4TA|6y5z~)zONACb1e2Oif95(g^eG9f)Y&hlF^v-RgY?$<{e27lQ_dMfJ zyU(Ei+Gxk%2pbnWuXG5xHFs?JqwHFdrV*@Z#E%VN&o08At+c*n_B9AFm+m+!X>$>H z(w=6rx3GH+ZnVB)0d;`rY;&GR6gtzM{_StZ_rA#-{{g=^1HX7ZesSEFu`GHzUib(6 z;>MMZPevc|&Eywr4`BJl8UytFiem1ohgLKl#17Nh=sVztBy3y*KjSI{Pi^$q=ArAG z0`|U(i84ZPp(lFeO_1mMlO<*@!E3BQ<4g;;f%6W=+)4k(=4ky^XhWB94-bAGSSyOy zrvf_l(#)}otxcLo;m*O^@^;|WxU`QqIL=`|oqD|kPIGi-foiBEs}6yK4)AOIj|TS4 zz#nSR8aM7g@$a7eII*0D0DHKkLVrUoyM77#eB+kBcElspoLSCak3D%oeT07a+xhmx z*J$^X*bldovmNOC;1*<<^h_&pjvl*}^T?*qFZ7Q6FwVAF(bGLOGDg;-m#_t!kxkpk zLzwf#pfUV^;{C+#znhoS3I8@i>u*5o>+lm)b1((kojTsnS|{v#&fq?dp6bNDNE^wV zAmf#vmA$FjU&;P>S?V6u6n?eD#L?{a$H=27a>>ZvL&|e2_u>zq0%p;wsf!s^(KNyG z_pvkHxY?1tu007|^~he=E_7^;9($5!dgwFZ8QG>&;hlCPdu_dziC!DRSg%-Mcxk!T ziQo^Le1`bt4J)bSYVzc=g}abfhseQC^aZDvI7HAQ?cVH{&yz8#X z_%h&I^ckSf1a`R@LvMlgBjZ^Kla$l4o>>e_b6y)EVKii|JM)u(z)zq z)#c3x&QC<|(A~xT(EB#p|2TSAeP}-Nt%W%Bcw!dgB@>}H@pU$FSZsv7g+;5Lxc>kn- zVP0*2#P+%S%qerZBw;Rp>&&5xkF^(+S1anbgNH?5y1( z?X9D=4~}2!BR)a>r#YjF_cR}>NBIiRR}n|+gvXDekJ_-CI^a=kvz+*4?4f}za2(kt zTU9)4??E#({50z}<$Ejs!JJ0)DVCduGV zWJVXT|B-n!ZFB$lwTub5Vr)>;Um*O)%dAc0b*8C5?Exb{eHXImNW6wzeQL=I#CLUe z))D$^8=ya}yY}{}^*6Ff7V%Ci;{)#HQTms!C)@20err>f&M*R}vdMeLo*q^_{SIu1 zDE6i63--t_bh6j~+x>QYuk6|r@cVG=neSrH)cA%kD|#nh_%im)-NZ!XN#%g1?Ex_Ko};ME}Nq@jTa~9}?hH97Jc&8T>NWu6?X{$d!tRAgjIc zkR75ua3frqcnG)){{!|lHoD?iZOHNCnpfeJcJ-Y0H;!>n^sM{LA#qS^xz=n&ncGAf z5e<3gY%b4z`A5k51laq?1&^%%`Vab-^%=B-*zEZml)PYXhJS-^6XnGu`uI3`Z{$UV z?Qf?SNM2mr<8Lc>-~6c6-BN~pW}Xy>d#4-ufV@UNJeMCFTitRu_a6a=CFrnhY5=i; zqQ(B||JXupGP%jf`L&DoXg+DV7nFVdm#s|^9b*oKW{qg$M$Rxqv zoXb1lRC}`KJqzqCD(8n#8mG?kAuJjJ_u@W%$?~QS=V^Bbc4ntc;u^9Vh1o6?6Knucc|vbmo>cuAET48 zYaNdE@tNv-c*7K**0(-Z@8;9(92;jrbeC;-iuR-nlm{iA(mgpS{efL5-Ulzc>9@mL zUccKsmlpPqhyKvr6USi-0P7mz=uo@PNhOUIK*ByL$VbM5_@y_h4IV-v&zIP6Dq}Ykh^psw<^=@iOLwmgNe|g{J zWZ}Ib{qWLGggohytv!6qo+GsNen0ox(N7KVrOPLk%#EQ> zVAEcJ$2t@jw<1X^II|#-bhLF?Qq^J3lhRmC{*~vK;*Y6zYD!AR4DGwV5*ib4Ov$qA zLG@jBjbdhs@o1hz<5xbzTuipi`9C-F&K1ufBWX`~{x*E1=M0~tH&^|{=5xugMZ{jb z_;1zTwe%as=5ED*s?6fNVeH%#`d`ETwH;?yY>*G1$-4OV-8EYpFMI5@M%GM_p9{m2 z%lD&8^!#u5RG*Shs?E386xq0Ysvq3BbF{6Wd!ixbU7sIYVb?t}Cet=}_-D>1F?(Gw zCmZ^C*KN1z0{1HWxhMZn{Id%jx^YkWhgY`53zL~YWY^K>hY?TV{J>q{2tBgAk+@vr z-{-$}1wNzZc}K0izpvpfcxXDZAS9guors?8y%}ws6!!yz3;S0uaPP|(xc8-g?rB`B zL(nL)PO((+ilNO`JMSxfsC~*BKbkz<#e4GQ=i~i@{9e3I>!%-$S?AWC`I>K2jJ16+ z=I6?Oo@>8~I9rxIpTbG)x{g~dQ%j<#dub^SNA&dcatSt)4q7};(pri zV+-LUedgc#+Ccw9&BdVX9dzcuoIT&(>H62f**iLaajl8v44i+IKN`OQp2jEr#rqzg z6uV@gbxzH7)0~_2)J9jQv4?nC zUV3#WHc==1`V_iYdXV>;0=~dHVsa7b)Vr-8uxF6H20WE_Izs8yIv1sbIZ@1B@%uHz z*91cux~l>h7Na*!T%Z0bA4sZR4Lnn5i*xL%kQMBEjC??L6<@Y8V*3+;@SjqxO+oyO z7RFV84WqR;nevspFB#xkyxhcn}QM9GKPP- zm*!vJl;TTS$1`E`46@L?OCF@>+C)=-S4ynAPp+>>rE@02SE;id-U$C3~f!TwZSOaw41|4|$Wfkwu!FH|V9H>%-+_uIJc${^Vv_*$jIl((6IPMjmYmR?E^cQWsq zga3erjeH*j&IkP*c&)XtK^aTWnV1)t%N0L>_Y&qeQLn7o)R*^WIlO1_H(35V2u~#P z-#^msVEk$6moEI?k46j}?~GwHx-rj8m;XZ3t6PX=w#-0gK!Y*%%a6e?Zp>3L&H(&X z41dMoj~Mev{MyLvB(7J&Uy}c=$YknD&2`Ct$#vP4i{R00cuTgVz8g7@E%aCD)5tvd zvQOPWg&o_>1m`v``iXTC(@^aC$^@J%cKsXhK3IG&=?CBMZX7(mrpQ@^6Yunm2{kpmOFRRd;Ug2zAkGB7Tfm7~e_nvSO*;nvdPg?C z;>_3|wvNmU7ZP`A0pEF1WDIknIC6}&!t&|As8}j|RD|!PdLqe6)d@-8N`FoyzAm3c zHHm4+&?k&cObH+1{Hzpma;s+pGcoRV=F7Hw(X04WjUoJeY_iUc$VS#YkqbGVJ@Sby z(vNCaHA5Y|6XU-8j5S6!`@*ZB75y$|kM|1ve!(i;{%d?cVmgta{Ea)Pp~GiUJH{8| znG(elxgW*XkZmXYox_*tk+-uPc}ot-7TaT z_o*l9^S&#`HQ!@A^WEQm1-BCS_3js;T2S^~jU+1;kL@vDa132hKTJ9qe2SLkr~2Tr zJalO`x-==Pys6kq3TMNQ!fOln#n%SzK>xC?^(yJy%foMONT5gLUF%h$$X`6V26fY; zZ|?b+{Fl)Ok}=4A?XR%q9mgiKMhu(><9Ye_vNt5tWrHEt_sTXJ&3N=Fyws+_yNs(D z9U$4J^?m4aQ`=^E8M)t+BghPPoAFoJTyU_vNsT^0g(b8L(J0pgnhf@Ne*O z!aMFfn)+HtKWy&@Uy4HvhF^t`{{3R#o@mqJ+s&5^_$@%)y>A? z!vkDD0#CU)m3C-UHOg_-M3C#&8m^9{;B@*UUaGan?%KWJbbIf_WMlI-(#9>wf5ivd z&2!kzs@=gaUt@iRJx4ObS26#}uPM)_vuaNGXO{NWGi|V;mqoK1p zw})8I%l*&qw`*{W4nUs_7k_YlD4%-fd3b%N;OE*S3D4TNB>#f!Uh!LJ{R(or$g0`m zO7mV17vSK1aCAD!co&dhMjZt>Q8 zw#2NQf50yAUl!cRJ~gHH0dI3GggjzB8^4ujoj=T1x(u2x4^Ee5FUhZ!KEGX?%fabP4_qza^uIl@2}Bn@&ZU4J&c|=;4%x{5@XxU+#VamOzG1`u zTI>$iHlss=tWWDhvo0JX;6ZFZ;ph@CEF+jNY`*9~@ECib7ao)IXHIAPgENc|g`6~T zDy~&nL1bW3csX<+dFJx|H)ZF-$C_6IJN*5CXq;!h!RLVRI=s}i{(N2<$R0?D!Yg9-Os+H%*lG$z2JS|{)P+4e~9c|qnZYxa-0QgsE` zPt7-2_@T@N`PkM+$;Xwk*IWhh$2G(gs;tP1%B3^US}&qF$-irU!PAfUls~1jtT7)q}boXKe<4gVrpyJQ|9`DzM?#5HEyICgbnuxwbOu3jT>&Q=ZeB!d2_-y3gUF z_jvIC()KRkRaIyH|2{bx`myo>TuFt_ILv1lromv^m$D1h5v{nIU%C{662c_fAeu z5={T||MNUNN%mfQUEcfqu6Mnwq`s1~`Q%sBARB9Z+~+gK+f?SWRvS1~I5rzPX~5s9 zv<0qY!|86?PGUUCV%CGd(v5#3n)^x`+)NG@c3py)L+4cDCB#N_mveV%Af$YFBUh1m zg~)Qzmu&np__7e2L3Cb+-hYn2y{-%)-jNHO>YTH5nLIZ(KeA;v?*v2nn{}LljS=76 zjXf*dK0qJHu98xImp$*{JK4AevZr1D0NIq!Gx=cd`=Q>sxmlN@2kp1q&6+wGFCX6O zU>zRDZFAZnbvA9W_y_oFjfRHMtD2|m1lbjpx!4upR&g=GuHb~f zM|a^SqVm_|~1w!2A_( zLalVKIe(XrZ7f-&d%FhkiX&^@e>#nKku|CIX_2uP`p;)28S@_CqqCFM=$bt0%(o&F z^Qc1~0Z#JolE6x~o^tt#`!^+lmHytxTvVs?Hb^IjP-*9Qy`8z@%E}j?DPXYc{ z0sZJ1Yb0mQ+ho@6v`@-ku7SScU7cAJe?9>3DR;M;_BzX@8Yc0YK&YCU4yoU!!$s#o z68PYqjt~CQ5HN~Qf;aHPJL&gTU@QG_p~B85d2*_B#MON|tha{v$Ro^a6}Whex%>_v z|BSaJ@wOMghni8`Z}Wu<#_u5(^Wo;`LfSn7tyIzWDCao%Uc8|@q#~>Q{7zi!F=Phv zXCt!0ju+eKbRXhx)%9`D>yGsNY!~o0w)~a;o-E?1qHD!$9;{@~BGWo0n$`aYiOp!Q z_j%-Y5pwe+ch_pqdkZx24)r4sI%jIPz_VL8x7*^}PjCx4Ra-pN0jF>ANQ-kn!L2-h zf#)wU?zf$B&oi!So_olR3s+b@XG^V~O6DV8igG4l z=Xm%O7z_TL^N@LuA@kgKE_P5T0<2Uc zVIRCF-=mk9!M{H^>Dp7-qY^L!rovY+=XMusN^H~v14K6?r}`VIX1Lvl4l zOS0i#c&UD;?w~r(T9W=dnlo9~Z_stBANoS(*rwxS$2OhEk0%$hCtQV%CENge!96}7 z-GomR2By?U-w|Huya!*gDtP^Vcyu0kydQssHsn#Oj$24E!YK1d@-C*Iz*I4R-A&*9 zc14NuNzN|U*%ez>*EW+khiuW;yoYP+t+UNpz-N32~yHEKk$^kh}9u~Oc>`GSf zb+g--P0KbNtFO<|S5C@U6Gk%@ za1@;<9tea!t+D9$IQC5!u}&qyrD&}0JCCzI^PM+1&Hausl&`AqyZAn0J+aeIAA*VG>=Njf`0=S_&`CS7 zh9v8T)>pQ@xM}A`==LadTjS8}GU&Dq`>f5E*>se=4E7>I8b8XIIoNhF>&T^ zlKI)_sZacNa6IbdQzMT@*=JFQ*{^6K#(t1k;8b{xT>c&Jy8E+v!|zYfJ_bM6fS;P% zGw@fTizeC5-rD=H-{j*ce?aF{!@&2;=il8?VCt!G2CopAGKv3r@Bns1R5}(t@FmtL z*{X9Oi*Iz!fiQ-V_0Yu^KfyT=#)uX}`@}J{A0KAUW-n=K%KpIAf%^kZ;4Pf?tk3os zZ`!p*EZct32=L>DKMN*9tH7v$ z{4e?N1>_HU6q9G4RdA^Uwk?*Yb~C!I%!wWAx$IOcA3Z`_i?-@xiD_$@w&+45-}Kz{ zd;6c!FLplPzapJiA{nB2k!!igd6vgBGyX)zf4|qXlMa!suQ;1(bD0{Pnj>>U=hVJ& zv3G$Vn=(Kx3JbkvK|Ai;C9jszu7h@?IA5x{{{|fB`FVb-&q!aNx`SDLdTP)9p?5(U zeXiGj1%1j+bz#@vr^ock+z0hJ)I5X#i+Q^AlACrvZm($G@pF4y$Za5p`g^}|`HVaW zY~JW?(1G}dxLS<%#`dJG=pT58LBQ6yP2;Rb-jU&;4{H6w;FXEYPw`B%DB|n>aMX;AM!&@ z4nFggoqH4gEF;d`4oxVgtGqVNt(^QH$s@s3g-Q1>i4AyuBP+GV=Ipf6uB*#hzI2yp;7S*Qf*dSk6C} z{#Tg#BK`560rdYgx@MAe4d;K}Vb2=c!w%!jV)5{Nz&9=*7~371lU#d|xkjPAa&XC- zLcO#T-MM)M;Yp4zsIc*t10K_#rQ&j2%G!Rwy4>}A5dQvZ2>eBwMvlMz)ExfP<-_ae z81{YqS=L8hR4=kZuzNwULrwrY>JV_h=Ww|MeA5RzZ0~C22cSn=9%PRQo=d`@rNaGu{Ty`0Dpe;&vOBa6XAK zz}qX)+XA6_@(A+b-wgP-5PnxaijkAhgzUW*>_(rp>vWd2=XB#08+X=I-`*Dpoc3{- zCUDa{$q7;iZ zOiDUMv5@KHn`#Zp&+LT9Ye+4=Q*@o!uiHC6}r1S za7DBBU+S$pW(Y1@@4yD4Pw8XXO%sr{I*({_(%=cd7kRCmG~y#R-`jLQ_i5-p?U_sW z=$?>dg1gr|AG%Goh1{6rXZ{R+_!_jCF3&#lXYj+EOYL8;VZIekUJde0`?Y7!yZhIp zK5+kf#Cz9k@OPleYoy~C=YP9*-Tk#o>|HxJkUsg{=E3m)t|MbdCXd!0_~;Pu{~rC0 zRG;LUe6s%ijSTjz#7l+P9fn_#J8|q8@o}%t>Ohkb$p&l~wcCS?(Z0b&-YI6%$am5= zmE?y_fLCY1tBvU7jp*Af^lc;ggpF1vwytfns%;J5DE?YO>{Z`X@=XojY~Y(rzNw)W zu<|J?_+}SzfB||g)i)Duqhkcye@cZdy35cu`r}ACeAD8u@>e2~uM45Qsq|ND$C)#b zSI6_IQx6XYRBsa=l>MoEb@@iBIiWRBH!}FD-~<~YM_j;~p&k+yNev{5@xp%To;h9Shq6NwFIQTzui%t8oyWh{T^BJVG0=Gaf{H%B0 z3lGB21=y}99Z1N$5XSKzIj`XaBn_Lze!&8MDP*s|9()_ibmXy3&p z^fB;nXYbQ}pT--4=TDzZkvR@L-TF)J`R;C$^LUARRts6@YuG3q*eFIWuRG9q4jTo& zLHBJf_fH(YCI#Q9p4cK_8G+Yg3vC}`G51x*p&jk-<~uSd{DA6{AWsZ$5fi-M-}Bv3 z)-xK@$Y|_~K0SzBGO%!KAt1LRd|xL111A&F`w_-<^K#m%GuR(f9K%=p5OEAs$AY;8 zKYu~-i-C14z+L2MfBfPubdd0<_{A>pm|n-?))~kNWTeK6F$eknnuGrKIXt2IF)`%o zQuu;eMhCDzLfS{t8Z&`G>@{Lp?A1L7t!n=gyDd~;)g6$ZqQ3j|)Fogr`>7N?M6t9#G<#^$Y^-|sQ0%sj82;eUcg5I&z`gXu{Z(@CBGDpc`oCQV#TtmiGfT?r3L6| zs94r_S+7eA(c2tapg-A?vg3l&o!V(r`)Sp{2YQm9_UkQ`oHZ1)p` zdG-|tFP8IfWcI?k0~3b8&r9?_V*HGk|1$jfkJxVH!rQ{n+5>fc`1yp5AMntZ|2$K& zlDcMU3(c?Re3N^QXEL_E*TeoMK8MLw7-z)#m0YuZ`xpz}hiD_qO-x<69KlA21w zP3La*bEst#foF2*Bj>PnN_W{#_E_+}|A6B0nLIyAyg9<2fg9WSG`2Qzmz4?fos2wY zK2hcxL#C)t?PHuRR4$`6El2$_H|ld=_yNB7oaVk-Ip=idHuo<7cC#OoU%$GAy?}Z6 z3(03VmyR4e56^3VF06HPp6&0MkM^8a@UtsFW3`?y=6BWlE2H0h92@%O(T7uLu>9jrO*2E|&>-u`6%7JsontEV+O^DVy+i#(VjR?s%?zP91L|`|XYN zKZ`X=29wKNdmnIebz@s`e;qt~ui3uy{OxJ|>lmuvy*i)&h_!kG>&c}52sjfCrA=ut35-}qH=3gkHhRkvFD>aOX%Z*a-rVm_orCr3+ukR z{T*v;(+l9Uk)JIdpNUiZxgX&v>dd~tzP#S)-rx1aorudf7x7Kl%58dwK7@DGiuiSt z!~f2iq5=HRUW4KPO=293m^Wf0HnM-L{P9EZr~GHuZ*qKvC&i}B_rx(Xeb%e;8J2iH zJEJmS*Om66$K_|pzWn*^o<2WB-^qrqpq=dSqb6=mya=1i^;OhHade{ts6SLeUai{7 zUcK)6i~;Sk=u2}umNqx{`$Ep+S0DpY$Lb!BzK71-b+~OSte+J}d1uReCoY$&f06Bv zrr~z4gI5=yMes!`yvteNH(fi>jrFDV`Ngz8MQ?6@`_tlwN94mm|20ls=h2Mk`hCLb zUjINiN>8r)fbs828(+0f^6(YQ;ZONUh0sAAbU++xf&4!oFfRn(4cv94zb$+%`48kJ z>1_O~W#Crh(*Bh|X5(qeA1mXD(`u{!ytnwbNtYkCK2=->ZrrwtGYOxIt|x!#x9he^ z-!6i86_+;ppZH4w@s~y9$a?6boZNGrhbZLz?}p(oJ72ZmUuI4wFX>vw>4V!mD91(jLP(f9)gY( zU(BUVPA=!4z|my#V5GMnWS$KU4SAs<<-bqin>V1H(VW+;rA;ku6c4(ES{?c+TGUzV zK|Tj^#qhRcTPN^;VzYr|g~gdB;@-p&AA+tPV*GQgV>bQh=WEd2K`ZxMHMXweu(Cy> z03sYB-^`5)g-!q+l9`Zbm@ICs+9v$?JVC=Iq$4VmzzRr=?w3NHHOwD@yoH5pxZQt+x_xI*{#%vDa z@93<-6pugjuy572&7M*GZiV*KF4xKp?&p0YcG*&JXWywtO&MVBNB_1$PaB}MHfp16 z>h0ZjkofIA+{KqoTjk3st~;Lpc{~pw_iS4uGkBO>O&14(y`eMgcfnpT);J050?s** zpE5f55I@gaqd3Fx#OcxKy(-V>hlu+u*oXe|L3fHF?L~%Zf69i9_QPy{@XKCe1I5G! zn5)hme^C3))R%DEyK_uH7iON!ubX+g^H9Eu_yKsH9+R&cT%#UZWa>O-2KOT`OPMD; zXVwjkj>}bU6@2s@&)SexnYpr?v(24Z`WqkB$U5vad^?N2b$OH#wMaz-Cs-SJgdlQq1u zo^~GADSfB-#jnUK(R``DyzMmkCtRRq?q4zY1L70ak{4KuPHRG+E#ciSXkYoH_QM9s zt8`m4?!*G`+mND9E(f-S$f0Y@dCfkX)3ql)C?2peIoRI(5dDwT-rR5E0sZ@n>;b*v z?yoD4yb}KbzvEOR^w8+@H8q}Jd!`=P{`R^*?eJsUC|)bOK2Z!lg$LRrGegoXlMRif z<#gXhEdcsz_hmJ0x+1G7=|@%+!oU39&hMT0o=4yX#eYS+ip{JemaDy}0CW=1BL?dO zuRM3#e3Kd`=Dp6z>b>ypykCa?Gw;A}oIS1pwuj=loy^zJ9P?F8nt9|uXunCieE{C1 z{~HJ5>!lQXZ$+BDCq5y*UedyylpbWB&IcSrUruc0o(ASs1MC*_bL)8QV%B#l+x2ML zxH@xYIsXdiuYi8Y-8hHNX6|E^(e+`97*6@uf~D&J*}pv+^d)Id*Uo ziw!=<9-CslRbzd$S@&2dC)w+qV~_K^G5@37zW|)!gY8-b{A{l>oUKaVpY--xw;hqW6Vq{P!^(eFt4 zr`zl|_s46FuwN6NjVvLK7QG)B?Y2Ti*K!v#G%p`n{_#`rjwL?B{xde+{qm9R`nh|J zK9-$FKCmwk+UK)EnfX@pasIn`8Mf?p?+&qJ41KiZ__?wtkBLv5G3DFs##b`6pk)gh zy!nDUb8h(7?=RWlw@Q|L%4&X{|BhW)(#3aALeEA2Nj-RcZVF{8*HBj13P^see^ znD`^(>%72j=y{*~Jk}(?D*``CkK&J;y*=VMrWRrr@=(v!w;i*#f8X<7_KZ04N_P1s z&U)^{25<9Q&GqQRUG)7Fv|W$vYvQM&)l0-OzSA&JR!O&{?lA@^mQDZkUD@7-Z!8Et<4;Xm!DmM#F6io5Gh7B_DIUJnUY z`YHM~ejGmstRwC3)`{qV$^EpuANd{w_M(UC$?%kXy<4cs$9|7X6JhX@FnA$X%g}(Y zcJ7rn4NPQ?%;(KL)QZcbR$Kz!*b6@?&tM6E%U;;T-_k>_je8upPsr?_!;j%v&B5>u z<1a=>xis?w_Z>LW+!lj3_g%a5&deQKMfgw9#_-&sii;Z#c`x?Sd1WB9tWxmOJ{h`{ zyrT`bnm03 zmhU=gzjOpV6{#Q0Q@8M)^o;w@)i*_)`S{c2{r1!@_$$?(isDm_6~9PNKyUIj46o#n zpH9AY8$WlgUAx`2UovPb`6Iic8hA->Rsc_87q5t)Zh|Le2bsMs@Or~F#L8TLs&I7X z2mBquCd;JHn;2I%e*znzhQE)JKPWvfd&Qm4RiYnkEJM%2-+1Q2oVk-W6vMufeAfP% z^vqJ8mlAs(&0R)@-`)9SqaQ~jcQ5CA^!Sr$@O=T;3Z8C!WyN(L9AD|}Wv>)?Dz;J* zPl>G@x?%X(3g1XJ5qk!%UK2x+Y?kjKnmoeuHsnx+pL{F982KXqNjQsK4gBG;7&3%C zK7$wAUt4|P>*)JKSAk#TisX7dIl!(T5+n9-0li{;OzOp$_o8d{Js-I7{_Elohb|0V z(}#Gop8YeIu8p6U@{Q)bkowt1Ptm?rwP)F5OYQfJGp^wm>b+}h({KKz`<<2AZ$ACP zU#b0mFSTD}w{)Uvh&i=yO7^1fHKwT_hRoLcgUE5&3sG{ZFSVwd7~8;t{v;Ozx9fZA z|*(d{yV`t^U*wNsPj{U?sMy?tDXb4&~$y5C;NeK z44lDjhUki)^0^JqU*Qi;yh3`BJT|^ta=v$(V)VKXNH&%Fkl*{CQ#{Xz{`9?mTH;4& zT{QoGMgP91_|E1t+a_$;fKQtC%(b5l?-dG$Hw5>uA1vSUhmmg|?2Em)#+%bzbG3iJ`Mn~idFgon{=zG){Wo6g*{}SFGGu{)ZF-E@ zkzt=rgW>mwfuDVTd+7D)yn7|~(*|^F+r_#w*x4b`L!;02!PjhWL`RD5yMRNro5wK( z9PYtqHZ+7?ln$e%!@y_)<5rOGt+;p%uqj8D3r@3;p2M+CM4Zv%i6PORuKlSAA>$>ho#+58xkXO+OE$@egYn3jY@x?ECEI z7=88^{pV}vG5!NqPh_Fh6RiSHHOQak@b`~gowoKsW7N&dWUn9FN@oboIe+|OWpMJevCQu z$2rh^a(AknGqK&AiJe63OEqzx1OC~>UKQs}GKO@f&ZHjZc`na6N7_?_9XH826Psjy zN#@oKOdrB7=%topl5?S&o1UpID)=hKHV=t^@06^AACx!LTbHvxKQ|D%t;6iqZ#8@M z*zoKDuwPHT?9}HKJe$pb=+Vw8qHZp@os3)p_gj@yRR0NQ46YKw@H8R zB}O0}-O2BI)&ZaVi1AFk&zZxUW_-R!e{CdxT<2NY2P)CI`UtU?Ms#BvJgNIjHC~&> zLI3Z?7czY_=d4>f9}CVifwz2k!CgO1Jc0gN8RL9IiY{~Dna+!DeDy!;2J>V58uT&! zSk6CJ-dtLrk^c+d**LWN>Q{Y_{y#{cMHJtG&kBHf0WeoBxP0WQ2N+cOtdEsnL0$*( z7IM%&hVQ(<^S4&>L=zKPb6_I&lIjb!!b?`QIZspKwzoHrj7&EKaMBkj(^E z=i;jyd6Zf|E(85w*Sw%6GH_O1Ecq~dS)Xn1A?L6clB_jxjlEtwkJcBQ@2r)WaF6Jt z5gcp)2W`J6)@At*pnppY?!As5mA(f0lTQ2GP-~#Sq3Q#jH2KgY%fHKxxN+H>OXlB2 zW|LP39AXvn3;EAIm^w!)+AFoZwaTNC9c9jtBA@1b>cS3>IYau5vh9t2{&9K7 z<+GID!`UEm=p<{zhHn3M{mlM&x@biA+SYIvc?~sAB=e-x z*JGz0<-cu%_)Bz-652$rW!5f2USzU=b{XvyV?0RRw8ij+Y6DIB8|%fSHM2SK;Ln%{Tud!GC}N3Mt`?oPqQQ1vry`PYwMab`BQJS-arnN&cm^n&KeyrYHq zS&FOT$DQYyd^#`dn#dUg&Yiut)bef40@vid89XLfgZ9cJ{M5d!a+D@H=Mg4z?jRRD z<&h&Qn>0e-=(>_p=J1?VZ|cJp(4Y1S0=!>D`%-K#wKef&XTD|DhMhi*!S@;Z32sH> z!@=dJ>-zcgwIS?{B6FU(A3n-cn0SwWbxV$2SHaLK>xf#`43`H}$I^T4P48uX9n`b@ zHhB;ow`Z)p7aH#1&Uvjxe;*=`@bk>qoKeL`)w~}8ro5jnxgo#nI^L(_xZ`1Ld+5Gp z9Ca%MH)uAkb`7nCAS zqd%`X4$oo*$b+{c(SZu?3~Ov~ODoyyJED9lJ(8&4ecvXEFAU<>YmP%O4Tn z!p_MDU+7Ky%rLg0-|L*6oaCGt#z&PN`9nZC5(A(0!D>8fMOI0+WTwJve1PYH(EqD^ zeBkv-;AL>-$Y%BbgS8{K59XxlQ^k(7ceoW^8bAXnGW;j>@9JpPUa^q zp|;lRnw5u_h1}L&Xs?xZPC4qYljqs?e($tCdE(&Q%^NyueRiNcbKZZKShtOzA?!qO zRi6S&@ecWo1K`0Y%vo>jEb-6Bf9>$kq3Of(&%ZkS!@39XPxWB_ zL6!}u&2M-O*e=0WHoODA!r~ol$9`Yl8+_)6@XmOLcbJXT)}V}JB3*T1>z zlJyF-zx5n7T?E^S$n-|vr-}=We$H6whd=A6*$kZ;y?`-j@|sP&2D<(Qe5zWos*Rw0 z=TscvpQ&E(G{xwn*EqEgycuuG_F+$GWtjL>pIn3I2FbMwhi3VH5jL0nEstY2jpRGY zbhpmJaDD$vU5dAu1_%EI4$|?xf&M-yz9Cyk@N{iE`9&?l z12ywoUL2}$- z4OVM$x#htYu=k82@Tclq7mza{+9>o~EH20I!ghM4;7%tFT#d~KE+fb&%~|p=A6cco z!+h`hH`EE(Uge{nw==e6ulru>)S47yt){lHXwO}*StswpoIx3Cz2~(~*6ZOXeNWT) z@{g*h{i`{-a}g{Su};-qR_$N2cEN;ag2^HE11!q;sW#6uPp#XmjXUH9ug%T}OYP6l zG-Il7S0BwW_UHhA?k)Lqg=G!@D}OG7dwLvyZfmMP7sW13_vhMxOJTV^p6nJE_NjD9 zjK=XN6~`RjpKNt}I@h1Pk=hS!_;ma5>0EzuH~wTS&7X`hzUxm4@2O)i>hmXc&h^jo zC%2BopG+UG&z?;4Cr6W)CLc0ad2fzCndLn5r9AVP-)$fBPviro`gZGP zvHYj!GCw<`EOT;kS-|3a9QFbDm@pZBIKq9an)J8$3_V$X0+I?C8&2*fso=vcky0(<%(aPpnjjm;5_8Y zv8?4#CArGfLM(vJ3w)j?YmBEU;$3|Jzi4%sw){L51#jiV_uBSMXv3^;(GI za<00-srMJ9uR{7!J?1j%G3T?VZs^{dW{aiR<~O9!PSml@Q|*iNd|3JaiUDmvh9sDpOMXRW&eKKDr~?yY~Kc} zC%Q?tktY;?+UiMcw|Y8vV1snvPgMYaa&i9Um*k4fXK&fuBb3=3t>K$GXmh#jDegt4 zFUftK!|9!;K1JiyRU{Wn^-niIb4$s|lD+Y7cd$<{d;V$c0rowjn~3xAoLC?=!u!wK z>3-GtZ1tNLtjXX!9PJ`iz=^(1Ucl|f_nM~nIu&F7i`kP5x%1e7-PEeHW{g*foFMWw;FqYQ0>#- z?IvCW?8m8Xg-`oO_%(<8p~P%#qj^?nk97rcgREf3A?;&$%vm81u#NNV_#Ji*+VMLq z&JbI~e(ahjdS}m-^NjZgLbEsn5}QYTa_HYYm%YdHY}OG5cEry^9{M-%(><8m@qLJ= za|hSTYUErUafN(-mO1v0tpj|)gN}VOk$uti*c7FQ?0r$m&H`W}8Kiwt)&4$=zAopv zY!}JFGTv$35ok+t(A4nV!CaV^Y{(e&DLQ?BRf^qN;rIkc?YfzjoP%v-PYJ#bN%l$J z)na$a=ZrruOl08;%vLlDeM`O)x;fNhWNf56E^&E)0Ys;KO|<*r~1d zVjd#y>C40pM1QcyAF6a{N;Mf5c9Dm~w@c7h3EES~#q84={sPW%?v)aZ;K`mw+EDAK zsd0&Yw-kH7r{iaAzg76v*u9;-JG|Jnb=bACspHE7A;oIzusz+sb>5-#OrWF#n=+2w zd5XVfqmE`B6XEeB<0YA67yOy$x#7`nM5T)MBLBA`k9CNzsNY}C;EFHmT%18zt_B|HBjrkm;XWRW!m}whuA3J zeVga{{sn#}pC~I?jt!yjI%#)yp#@Itb57{GaWx;hSgd@5bNNSip7(mEw0JxhYCqPp zvljffSfkHXJ7c`fx5~#dwETdrm*fkk)9>f*f_`VhkD}3q+6xEo@Wo?uhM?022GZ%M z6gr(fXJ|UTQFKbb$3E+~Wh`?jhc_gxP zCx6B6&kCMpZk&G%-b+pCr-0{Qdiv{OzdJJ!>V=5)UwcNgR4Qk#IixuycnR{ntX=$UdS z{$=%VcN9ogF#i~9R{nD-`&4iIPwxU#lN4T`ytdB1hrkM~R_?@pWI-u4rbWlPgHXJp zZw{fe^!JK<@;=tCW4uvKqgY=NI2zB~mD3aapWf+;k@U$X)~d4{>F~UbJ_od6ZRu@p zqRm&Czvlg2en+-7Kgoa5$6Rti&NCikmy~)&)vjl*n&a6&^-fovOFy#J?7cyYMf^VM zZ>-c3 zoo{VJ=Z#voX8SA;`6k3D4|2z%2c4)~60P$S$R^p@y9IM-S+<(wcYL;Ed!Z}q1b^lw z`(Af9lp}}B(RXFyd-(7$IjLdhllr~twI}FfkMsTdm!LyvW;1tV-?fGqPMYo>5W6cx z7hGeRI}>&OO>w-+$NGIV#dO${q78E#4<7Qc3Fy~K`RDp8myGXW?>_$X!SSA4#`>Um zkK6zLwD_LhszJ@&!Cr^S$E0>Q{Z*wNa>H zja^sDJL%&Av;u8>?;i%z#{Z#>i=QI1pVWUItry!rjIUwNqdg0}TF_$$WhbmX@W{`c z_^baaJEsu(?aL|TJLC7zR{lf{J_)hY>Dsf!?s`#qbQA7tIIUbu#kQ4O(p#6gU-dU< z{p4Ncm%M25^uQsp(4KG$uugrhI6XKtbv^JmquAY|rB6biIwKbqOav?D^sz#6O_)dO zJ>j;WYUkB0eSDZ2FXLHn9{+*a-=@NBJZs4dgkA=2mh;br-v{we5SW>1?* zR!ISNX5{TYpPAYf#O`Zo^E5bHE}Fq-=37HMw2z|$B^x?-*mn4OWJP4EW$H*TvnJ1w zkMS7md%_eeXs9CaVNP5C&)#}@hm@Z0(+&4m~U4VXS1&GGzandWX}Zg`OYEp zr=U-l$c}+_+^Mk9FaTY-e6{PZ8ctI~rzyf*JTQvKt=Khrz zw07DZWAEI3S1)^V>iUr4RBd`c6}y*sQ5W%|lgzWo@rll2Z&qQ$<-D|c=acwEt4JzUn>X73&VB=g|9ZEs-4XDm|fG(!)HTLS8X;MbF$T{XO^aPP(8AoOR8^wq z-#WTElkxO-4S&ZUXn+sBO)j1z#pogUHc}y3I2KuW8TU101iyT@$+bfkl56MqvJr4U zA)m7c3*nPubO1DR@k|Ph5OWGY#((Tj+vl}qM-dMf^zmYbkNurRW#gx(Q&1{xo`x{Y+qE&efQ9#6UtVoKZ1! z1pK1V)gSQ_q!X&i;nkTK$!+r;?-v1IwUvB&`aR~tGsVlKyK9I^)&Nt{yzm;vMwdQR zU-~BbMb9%f&9j#K8LQL^S;Tt8N2Z;Fvya{2v@3-N_*V5VI??%Rr+!oy`U|<_scOEo zS?uILO`_h6;pLgkUGX`__9ADn2~OeTuK`kG5Wm!k1b_*}NjO}W(9 z1E2aPg4|gWA%AH;ejGfie*M5&`GQNRhtk4*nOmUen~M0}si zT|Pw~Pg4deuPhgu_4}P%PNXD_>J54gm+(Cq# zn!=cG0_R#sPGK9Zocq%HolVfwUU;(Ikx_3Vqvj%`=4Os+S~hl6(^+I?5*#Ff=SgV0 zf_WMovAzk4nLww~Pt_&1zR;YNM{Mc=F)nLA#d!!LA3GQ`>!po@ z|3JPawxj$Y8)k|f+W9YU{g<ml6AmfzKuA^bPP<+r?$u zHYf&>`W-kp#CL+#K4Lzi!J;AWoyzLFH>xP*-YK=$x8G8{3c4Hm&Z_=9r)+w)W5sGO zdXqo!In5pTn7@IE&dswo5E4I2R%l(1;tMFAw*>z>L0c1}1Fms+Uw11ek-gMB?z=C; zz}op%e)19VEc{VTeu(-}uBzc#WOW|7h)wwYveRCC%&}=JY+X9Q2Pl-Rx*_=5s)2rh z{2BS17XL{>=xiH zxnOKbd<(^)WqY;XbfQ@G9I~i&bsSntTFVc}_RG4`)7%Li=XyNN-RS3mHe^=t4cZK4 zLoU1nnE*aTBk(jfDYA|6HMYi+{i^*##Y#ngVb-E^LFsnl9QqMmbnz{|nDTLDS8SCJ zRnTu&Y?Yl6!>(9_Pt{vD3L9cHHiRem#Y$sCY&AB-d|-<%P%fCUA>dWjNS6(fJY{SM z+F@r(7a{XhBR9f%8P~t+1pe;WyB0b&1aKB#8ykW(c#ta*=4$qY@#)?D3wKXae!Ao& zI&++Iz$9zBm`~0k@PcjMO@E3t6%l(ZLU+uISk32=w|Ug`=%N-GF(P7-{7no{_2Ej# z@{Rr;>->GC6lU>UxXYHrQJcF8q;aaPSoj1n6~&%t{r&fo3$ z<*y_2Tzq6uH%<0Pve>>iSZ9=y*~IGU;~4GTcB%fuf6!Jn#T#$;_e>=BNVK>fI+L9z z_{kSrMs4b&jHU0(sV}~p7~>)5tQBY9sm0E@XZmQPk6q|(>=0AmD+jnK=4i$(_Cxb_ z?E2g}#uUC7t6ulSNp8^ht?Ub!npM~lnolEr`Ou@rf9Ac(UqTZ}Q?>m*Ll_&)_NncCE$RJs@Y0D4NYYOy zc6}KA5?~DRm$7fq&FQ{N9y%=NrGU}T*aTZ$o8Tn+IR~2{Co`w%rm;CqoO87I-qaVm zOTLuWlWGrq0sM>i`|JVQc3s*Y*y{R8L)rttCfyzgqkF?6fJblLnEhe+``x!v_`3%B z!QVFe9G~0uBY*Sbe*Rwkxm5mk{7BZBi>)L6o`7vs!P+NaA5}UqaD7O@c|0&syMkK+ zp-9R+%e<=j#`(rHyp066@Bclq(6sLc=r;6P=A#4k+EQY+BhhElFXgO1Jw9`4<;e6| zZ_VxJiqg(6nD`9*rnufdXjwLOp5wpnBfgm+zIo7zZ@!LRQr>JEu#|su(1~wKUzxqq zE6``WL;sCSATwv9LndW>c82OBoA>xf*gw-7X>a1Bv{xMHpp{XZuXr?b$WrW?Z_OH= zJc)yD9ea2-^|}0@#Y41DhxdNqn5k-5p-2WN=^msdzZ_WvF~Nm@3Irw7gg=+koIJ>=ij->*1?Ti z$h#ZuDQOozuo;Y>4?dcSkp*(G44qiv0F61mrh3JgnaiYXd{Ew*d=cI^ zg5Qam%oDwA_Sf>!m+l)47uDnlF@i#WD;z`#-f5KI2Zh=iVw){Qh z_|nGaWxOXd?RA7J>{YAC0dK|ooR<2ti7IGnp%7Q9%2uo$0g9wV({Gn z3>AyfTxb0ne9ESCX@xPMp;OT{cK?eRC(fMIcME%*VRBKV11F{U_>-Jm7|mWoFsJ2p#mkU93rcC^m48_1AfFYM+Nrx*WR6 zgKpT1T_CvTfv<02%dOyl#+6U*)coSW)$lWL=DgZAt!KdubS>}LPY&j?w_ZvN_DkBQ zuMi)bSV~FGEaDK1S%fW9l$qObu46J;uco5um9>9+4=2$Z*v>`y%gF;ZW$a&9*2Rw;=JPTv+!>f_fzJ> z+v>Yj{lc%6;9Yrf>hmGizR~pQHGMYHXC-)7pFZ%e_QJn@+I5}1!S7&~oU4L9MgPut zhF@y!aV2jgS0qnFH@;M~JC$^}tg(H7>Z+>pbpUphoKt!OQJwR}GDz1_d! z6aUP&L*mP{^9H}c`%Z_>JJ=_`4w$H~dc~;d$JC5t4x(GlP4Xm_FVNEqlFT8-9Nf7_ zFRx=B$Q9Pr3C!MsHj~a6y^NtfgzzeS0px?eD}>$z+g|LRYWPm`&^Z9Nzs0~paHvh2 zYj~Bd1B6F?zaE?qwN}yP7x-4~r3bWLwT~{RHk<3)u;vPA)x2jtM^o0bi+o>=KTqTH zT?g}2?rsv?n))ip_d-X9#40W0M|bf~v_sq^6nn(h8Oqa0ht)1GeLHa44V+xMGjvWL zcZ2tCXoDP-=I~?4??-HyYFwRlox=XGsoe?fD-V?T$n;G7bn%d2kx8DA;=}vUKi%*{ z5qsB)4`;&*HzM;yyNUa4{bA@9yW<7)m(iyV9X0=ledMf9OO=LE4x;V91h ze89%&9e(FrZyz1kgFEG9NiLckMCPyW#<+5X-z671S*zrt8>=owcF*O$VLPUsZRU)8 zHgWBIWVg=Z3jQH}4ux~0~H-&{f{JmD1VEXJh8(|)Wg`$ zymt^Y$dhle?m#)?!N2S~e`v^>7;(k1)D{@8$BvclExgD+Fn7`uTkv~{Q{cbaHm{xQ zE*nuiVC*XPXp;B@%gJ3-?m`=NzU^}b(rL&_;xLNSS5R9zyd9cGCUi~`Z)XK9kN=OB zf6)z=$NHn>jGmhqTm^fl#E49+XNTmpH@Jy?kF)TBWc9Q@+@*d;O^V> zVWs>V8UEHC_=h3zmpMZG_0_YwN;tekJ*%VO@HjZ^CGRAA-GNg-a`R3KhOcEsTgAyG z*QEEgAGaHSxxw?P8SVH@(qYM?HqRXOZTy9BqWE3>xUB=vf4p}Gw!5hz6#<7w`DPKk z7Ad4gtsfinHmk?Rqc`~E4ct#ft~d0uAVQyfH(mC=e$OMP9b7Kp-21f7+iV=?dQ^Ad zx2MT#J9n7+6wkt|iU)2WrnXD6O!jjj@|>KO&D2~zL|%KCzFMIZwKZ|yu1_}0uF&6# z`<4+0c57WJ<{SPbcO-no`mKri689!f)Dx!9U!*>-;Mr{c-^_SN`*Uc%1Ww&?qRfds z$R^c;l780QzDNyE>1{Jl=rgLhGC#rYI(%ux3k8n?YrQ{ZXu1-Jkbmr3u-$*}^uZ{hXhZ_ff5bIB(!<4JL zi=2OZFIDHSvV&vbKeNYM%o@>cW^Vy{A@0pt1@zTu*33I|-en1U;^d^y17>@dpi^ll z{xLSC`Bw1{-BsfYjzWJbeyDh}+Dt%?RxpQ&z*6y*JZzXe=2`t>V5j`{26!$2kGZkg z0%E~l;xsz*l+T$bV$*i)*~t$~r$NCr^6+5#dvQ2;j^O^j_&#i?=aGj$QXbyA15f?X zm4`#$;}=7xnc9BfK=-FD8iQWjhYdMedC0^8o(Qb2!?$SVY~>`**G(E_O`imeAB5J( zLvB)CYh!ob;a`2yGnw3Y>?XfIG}&`U@d@^@9=y}P{Rz$%XfI2#mT!PtoiBWnpTa#j zAE&!q;_$KHyB^w%*eI|;rvv?opy;I+7b=$?qvCY!u=PNAP#qc<2ha1RUX zUab9f#*5RpXmP>EoO9)@$Gn&Sqxaw?L7RJd@AiMUS9#!$z2Wrlz8fGHopD&>Pjec#%JYo!P}@28)sEeBVyj2@F|E$Y^lxLIZDkp;HsM!$ zc9yYo$hU_MPI4|oH3!L~Td)E;U|+Lm6te7Y5BG79Z{EQ>-LEHkZ();X(Wct?dRf7r zGTt)&7T*5A?Fq8L9p_nWjIaBNDa9+Lt}#R?5E6y6v2NV6~(3 z<+2j->n6#&o7sz@%>?*N=R50>ZR?S3I?pMeO|p=9>#4#@-mkUuQ5KP>NBfehhwc0# z?FmfqaaOd}*>n2Q;3wq633oiF=KP7DLjIi}u8|M^+%r;rCyVq!T?o;YVi zOZH%IyLsZ3fuZxnXYt(ZuMmUZgZ(F(l)c}Af89!Kqs~GO&_8WTwD)odTuMF(#;WJ0 zT5FOUH-(iS5D0A|e$qzVG=Y3M&bP8(WEY(zzOKIOatG?(*i_DIIdfC4$1!X@>2dAV zEF&jZvdF$eF)LWfJ<9Q^flvd_jQj(4s>d0>P2<^T44Q~TxAHzI8qa2)qnW4Z_-g(G z^NMtsUv28$4#@8~dA;a$n0)X1>1Q{xZy&m*gT2?8R>(t){KEHLA8Oq2dEc~`j4^u` z&>X&FPXbw_y{0YLyi2L|>E83O7Z@zB#2$zC6kBctw$k%P7o#thS7Q4BBU?UmmlHDU zAAxNc+BZ2W5W{SIRDf{z6UsTY+G?Pz^2 ze(kY2Ps%qhVUv~dT^PEGAp5+))PA2A{NyR_mIv3O^QB_~(laHZnFM|DJNCLQyVXw% z{e;1ZaHHJzO7uiP`>Hct-n4a*z7>oG!!}^F+kvHYwfNbm81m(phRL^_^~$y%u0OZ0 zHgeAdyW!ybb*Hb?xx0ESeePNCNs{@yIZ>VPp>k=ICur~^c!0;niWviw_-q@GYZ*iS z))B2W1!ki}Hx=kaY(V8p>23jiZ|D^Hw^T54?7)rCBQT$~fpchWPJZBWWFs*nlM9d- zlhb5m#WatptD*UT6LbGb4egH6PIq3_aBqm@%o52><`QL&mDsnUpM&u3tS_^torbdk z{9FhRPO@$EzkFzDoit_``T67}^pSXZBfOlhk3Pg0Bhg0}8hj@I|KvO5|2Jd}$o~(& z4Q>AtdDMXnIm+Jdd}5N>j~|G>$=>cJ}lvCm-p<0RS~Z{ z%YIB9KjTMSW)XgZH>+vgBd*Nw(a_ zna>Rw7ryl*`-_iQJ?Cny(5#PB6C`kR^J`yu_+qs;@2C1+I+qyX4vm*bJX!p2c;EqO z5ID=mG4h4E{N$tHUh`T7P9Gu0>BuPUt!l2HD|=gPo|=TbeS>G5lQ?zuS^L==JTvPd z_sNxoib3ttS~N#+6J;&27I^U4K*+l2#4+9Z8~>iznzM#y-0xUhly3sqrK#&(?5x-J z34OsQQrpx2-_hP(*WVAZE_bfBe7F6-$LOPzIUWID?wn)W{XJjLcI1`jQUhGUl{>E5 ztM@whufLfj{|{>rWm=PGmr5ZtkznL=t-M#rU=C0J~H?Q`W%;U_s==xqCzB2ZF z1V6m!)3!f`eSM+m%JrOe_8+)qgGKK4=wNMTprr0fYvm&7xQHC=n>^qc+}FEt8frfY z|4IH&N7icpWD@P-$WO&Ak_-Iu_b)7u2DrnO8URk(4_W$zwk7BvuW#G&pPqz z-cl?q^INax+V$vu)@>#VVQW^=ApdE>g@{al?D`aVADy+2!`B5mID znYa4%4n;=}z3bbzhxoRVZ|A`Oeek_ZvO>IT!}izERTq79vHsVFSikI1bdb?mnVhdv zo}*$%skUw#_LS@{$s{{J+<(BQvlVIUC}1wv{U@}}Sgk{hB^>M=;`uD*zl%ADJ~a0a zlRG1LC20S(VcKiXySQ^5+v%l%;-=81zWwJ+;zIna=coSuhm^k74AGZ~pMiJ9jE*yp zBsxL!Sd7dS&L0QnI=3Slk$sI%T5|V(Yg(MOH$G$MK_;MqHu~5|?hx-oVdynN?DaFu zK|b#+e%>9h?WfLFiphz_Ji&)&1wvbpk>^{i(3jwkcN#3l!M4C3ll*yj7O^VmB8u)h zLS1#~7`IkO#5>lkS8`?@XFXh8h~GQ$t&*#x%gF0N*GUeXM@GKWKwrov(Nco%pXV&Y zIbzMx$E==LsDq<1l@Bdg{=#S5ul1kdyaX}AuY?DVp+4JGJBINEr%%y7$#*kl-|_Qq z>H>5U2Pj`ceGdNKM0`hQIXItQ`#gKly}j4&FM!`8O;*n?;O+;$6(uHi^OlJ@A4iYB z$^RziQ<&8kyZPxGCU*0dV%X88PV7c>=&Y-K9JxYibh(Ck9->B6*_~^)Tg0NRE5H%7 z_20FF<$>lpm$}bl-nDnF*?#Yp{+|2L<+YwMP3M8x`75ny_h$M_ZW(LYbtTvnXv)5} z_#FPhJnzLB!fS0AXX`UA&gg_DgzM$hg_}$6_grv%9((k@Ok{?K8U$s?msOKz*!-Fo zd=LInjKk6$%gpabL(ES#B)SZ}a%LXCbvFHqW~0DQvCKF!G80@Tp;?pDN8Kywtajvf zhtBxG!{Igkx~N`yGEHB7?-qD?jSZuJ8Db7mXi_%9)11SS{M&#G6+bQ|C-@2Gb^=^; z|1dePPK;%#T_fZPWPi>_{M%(CJ;{8Od!3i*SveLPO>=q@*)~wq8_@7Rc+;I{;}G*ihWAu(r^WK=fz>O3efM&Qx3w2+V3i%LXRXSq zZ@=BfRdxooJC*}G=HCvz7{6hO4Z8whCmzw*W?pGF#v_6o{3qO14>6zW57{vN+z{{7 zum1lDTCIE4TDcd0WE212v^MQbP+!Z`LIUohC(cWn+6FC79_UHv;3m#5b~rhNosO)L zERi4D;p7l@^SlT+=w6hY*h|mgopR@uAJF-B%g(*{Dz@!6I`~g-_wFd+eG>kZ&6=np z{|OoSd2;)P(|hyv?ty;Va&0HqW)s|Q0!E^l26U$CQYFA|8-CM1WO<8qjj8Wq;0q5& z;r%%FR093kRfSx9AQ1YSpYlDww^-!kr{N>rt{Tl)%5`_~H9>Jh`ZDvOFE8)YWyRlO z``CN1sxy)uJdZp`2FgnAW3Km&Jyd)Sc-%@J=&i~DDb=3v7<^!zkIV}`-%b8Kv2Tqh z`^(5;){!hF2a% zI~sXEwlBZsAHQxrldroo;foyNQ75Q_m%|)$GF~i>A`fyiTiGAXc_@r-bm6Jkw`}Zh z{)(I@=9gG5U1i7IHUCFhyBE55+ed5dHEd80FEsu9Lxbg|xuepC99VeriSKpkNzZd@Z`JgrCv~h?z1(1mraI>my zep@$08|hWUQ}9v;^(_O`OzEg5W`}N?a2PujShYFv6aAhUc;fU1pB0)IF?S_|{!!yE zbnHL+GIM^~h8-KL#{OG8){(8yoNNCryLm9poq9dktv7Ok3@=3LSp!~9Got=Om41AEe;sJ9GmG*nQ)-<&-`E}qSH72_hnYKG6FS-HQ zWpdISndat2H}c%gRd3*(WSZHp!spk#${9y@*+i)uCB36(vRUAp8NI!Kv7fNV{(?n1 z184OFX#1UG?`q#0I-cAd`8Vv3*ZBWPAoODD^MgD)%71t$vYVQHPVI<)J<(6w_3j-{ zDYi)qa1<^Atl46$_2^33Bf`axR}AK@NywSxOixJ#ZDo`8?{WHqKb`_lK5hGYl2;w% zSi8Qd{CvTDAACzKC8IOCW|ozlP#ffs*>^$ark`m&|1@%yy^^^vZ87Is*Fy_#t;Qqx znHBh%ZmmY@d>9+`+tx+u zHQ4fnMpYwXT#O&IE!5HSCKGnB;)-Gbo>1#;xt`k~Qzg^6A z4tOfce0*CG{f}a9ve)Nf``57-Pz?>#J%`P~Pxh2bltV6>mHyQ}p^5i!PC{c|DcwMy z>Ep%G1A>j(#`#`x|5|L{E@XnvAF@}9{=Q>IR;xu_4f8#AcBa9{9bcp705}l*)sNuQ z&3DG1V=UoRe;)*AKfo@^V*crUO!|O6qz~^At!7M~(TO~)v8-3Sn$WkoHhx5h<=DJt zt;llK2b+X0md$uf^2k}UJ3sl&nv>*>S)2DOGc+&x(#Mhay-q#pqsX^*WTB~>DV%8> z+33*v&Z6EOSFtw90)tQ9x$#5WuJi_*X(Ky#GW9%k4pZ&K&&HOe57EF0%@3HN-=_(V z#EPb?&pd430&rmZ2d;;-&uM7JmLJkhE&0~UQM6ft45&wbl&8oKKQcgL_kA-tK>XHQ z`xJDNKN;OepML2;@h!6A^A8S|^U|TakQF8t0sJ>PvclLW4!qj!*g}cs*#VAYk_)U= zHm~u&fq^R*%Z3=E{Z9XO`L<`t!8nS4S(Q2dQ9rWbY=*zM@^4kY%+$|X-EMv5z(#Tt zj83QRG3$;QvB#`X0(!U_nDY(x3=_e~#c8-}q1 zQtiTUd%y1N%gF!_u3!Jw6?P17)DYuzI{w*n4ju&;#mohlQNYFE)}bro?}7`LhBH#& z_PgbSaig`pGsJW4zqVUro7#aAz zI;~M}K8s9~&7=BRiou*?z8{B{@U?oDkvrUO#<0)wcj9-Lvl+yU3W)*4p0)Mwid?I? zy8*d6Oa7T^rmj7(D9d^#0pBX7=E^|X1Pk3eSshp`cF#hzfK%zo$?%BtF8XXB^gOnz z`@P~qeLl@4;!Ecm=&OpFjMxHop37>_B8z^rkaN7m20j|`G(SR2;9YWp-o>|h7y0_5 zu~yG9*8gRm|B&ZD18?bR`+_9i|zgw6j`a-FqTznGed;!dZX3) zUWb+WP(E;b-P$^%G2qy@tY3ES?|_Ty-En8tHI2Y@7IJhJ=bOd9S=^-s@0RF(>sDk= zBQj%ysd=$V`@o?%JhwjVX(or>(1q+^?H#{_PbQq{JH;K`K7{jn&TkvMOAgY9OAp4k zy#yWH%lurK_mLs^M|}ww(qCRDo>NP#TI-txFC{r&m&E_THVPGh{|@R1h2L)3>4zqC z_Rf8G5MEP$(2c|o+IZf|H{BYWwJEQm5IS74w(878o;UJ)x&<5(&jS3v*t)#tl0 zH*BJwB>vKJ{G}*k$OqETUCi|uc5VZ>I?CBf*^u(RW3%B$#*a>gcgf{Yf65JDP2hq% zx3Hfl;`1${U$@=HU!cP$4L<*&c_u3qpYJ~dg8#SG_5T**|LtDe@BdB2|BEr!jm$-B zSMG-PP(I3DL;#rE3h+`Ag>xPuHBYkT?ZMfb6?BO_UqSimTuiP z>Pb_d3R%W_YQvM3Mi}9UD?~$3ZKrPj^%TBk7DrXxr5ts@);op`5fBbZT;3b*>$|x8BqaA(jJ< zbeGH`Y*^Vz@-4#9a&$brWN>ZAJ0FRs_=wPy)*l@YY@kQsMc-F>w&N)hW zZ~6vsEBT`}ZE(&E?*&iCv9qa})s)1}-iV)_0G^54MAMnUN3lWUx5>u#nVP=J@tz1B ze28(>&mQ^jng?U0`v0yEzbnmtuaq95k5Y%0>iFpe@8`*V95(O$YG8+~Ta%8vtNlIO zfUU(p7k?{EzGeS?iw54{fPLFn!g;{65V!(c*_ku7w)ytj!svgU-7$5AtlDkKLg34H zqT#*htK7O$=OdU+|7B)}H?S3oiXQH8O^p^SSE5ysw<*)cLOXi-G#A7df@p z@^3S>6_~e64<`*hJh}5h=J>6=!09$CXLG9Vi|;`HQFA>(uAgEZNoXkv-OYiwamm9t9c7~-RGHy?1uBihs5LO!FLp$ z);*KlDd>RvH)k|i*Upgq*O~FNtm_1QbR#p(nNFU~B?hDzifC8&%g5LcjB~#En>PY$ zN7hQ$#&GzIAH`O`>Ly>WZ>j#{AFcp@`7o2mAc;cG=dT$lz{QJTCd}QeZ$e@?$_b54kz4$^^ zR?qtJfzv-eOx_?cgjQcH4^XdYCT;JBk4tHfo{rH+Oz}p(@m5nKrr7GKLl>xSX;wb< z+o0)ee@1f>`qDl`4BnC5;pW}SkE$Yu5vEVcJJ+}Ry!%YD4H{Lu&+sg2{7`%UL^4$V zihNr0y<`i2OK)Z&`(m^e9&BA*R^n3)7i4doK8=l(+3&NdM%rF{wj^`dM154n)Fx+B zuO7QfwFXp=YYBEi7r&?42FFa>>|iJUUuQ~NAH3h#YTFNL69FEQ;jvIHo%J((2tUSlr|_ZL0!!PEv4R`GgZ2uMmcOq=YGhs{2d~m{~_*zclJh!EsV>Hkh2KB z691-LZu|{?)<`z~1YO7Tyi@(}zv#SQsP{kbfBt~;{4@MiZD{T7+-(#&ktv=*u9}|!Z)7w5y+u{0I#XHG3^=)K`)4%$7n0Kjb4QZ{wZ9np8 zGyf-hHk&+{T*fptbJ&+LHFKOCn45|HuOJ7e)T!Y;2OGxZy09;#_bvKEFmTOlwdU73RkYx(TdJ+ zeN}g_NoOIo*VKrw+K9fWL0@RE8ku3}RqYS)Z9u**azK04?zhr4`gZ*gd)1ek%cb_K zfzhD->Vx0PFniOz;8ONz(#m{eIrGVa2LwNZWA-BUP(#kfG4Ubr@F;$f^y&w-yIt|D z6kNTEPHS590s0YpQo8Z$UmQX=VoT1aMv3M8bN#_f=|}0RA08a6AHPWde~y0K|7YsQ zBF026QDfxJ;qBBB=tr-kAF&mO)Q`Cy|LKwF$o1Fu>&Q?3|DYo!=O4a=e%zDJr_hn~ zV@Dc4|BiOjkBd_D)*6qV5eGZLH_4DIx@%T z$eiHlG#xn_9r<9&Js0xx<=f{tI`aRr_wVslRc9VQzE4iBTm%cP7u4L4n_9FW0nz3p z;VQM*fevk%HYDL{+EJu432#)-;oOoC zq9TrMjjiPS{;a)svU3QK&hPjA@0-`_yiU&AYp=_5f1dTMwcL9yygG8Rqa&4zp)ZDiDNxC~#c-je`y!B($_2T0`@Zpt1U!wo+x_GCfi+3jJ;_Z$u-hMLM zmsJ^LoXNU)yM{G24CJi#{BR90sW4_ zS6qf(SdOiSPik27BjjNLeMGxbEz#9xRrr-u%{dFeQ_yNC9ni@@*%cyP>% zPWZKQ-smOw$Is&Y63z?LUBj|BM*TZ6Bz#z-{~NL{zCWIKny}f?MeWMJ#unV)G6VaV z*vL?Fg0x3Yez42yL$5&(PL)5+9tz;17)nzHF&AvwUF2Tr9vj6gbl%FrptbY_c4Xtd zsrEfstINziSc>sKgX~KPi|3E8XAk@#`NooQj8{2{xmST- zd;-P0)-Z0BD?V0rm(j&b6WE{f;}kEGTvvRi$f)Nz4;&5N6c8>`U-3RNzb~)X9hu=*q(p-QWAd+3ba4e%Xp0N|0(dF9FI9f zo4w_ytP!HOuJbMqUt#Uv!AI+N?l}}@-LKLL=Yj{>L(sy6gJ0$DE9{}alRct!j^U24 z1uV6mm#7Se(;T>&@%inw7`?w6zf}7;i79huLS|@W*1ZKG+BETMt50PV9xuJ#x6~pg z-dbRVOUb7UpubDWr?mK7D&{|9yz{nKI6jD`L#K_;TfZ7xP_8p364V zUiWb(w@*%cTW{*QF;(GbG5EPVz`CK;=dny*pU1L&>6KB=Y?|KZfr7nRUnrRFyShO3 zu;!+C46)))IuQOPHxyS^j3~~hLbQ_3IUJO)4O(^EfPE9sck};Y{ud16ytfx$E{B+P zlzMr^x@DUt?ydR@~{jV5F@;m?k|9xqk^+Z#x%$-B(u4=-^PiHMg`QhS6 z<;+6c6VC9vjsL5N^As`v*K~g^dEHw%cOrTG>@%%f#7FO_4eejDc`&WAjCa$>OX?4w z>>`ij;I!0pdBDDf|KIwuwc&B@zFoUy!T1i!Q}C14FIhC6yt@+%xMwzvnAj;R^FhUn zvVEBkw(zaIt3&X~!uDh1COiB87V<5AOdzxEeZuLXAH3_^Y_TuoVsq!r1J;R>dGvC> zGt3>lEy^`wu0?s|B=f(~85zjAzE*o|0P+}_oVdx332gY{g>pG@Q!u>Gv3p#5r#0z3 zIv@Kd%Vi(%=_db5Z27m{(%Ox~+fJGMjA8Jy$qC}y@R@iTy{u$;K zHy1c(#*5#w;UVlA*)+zMp}j)zKMH!jk-VB`tn}K z^`k~)l4!FLIje82A5C%E(tCo9oj+@z`*kz$@#=|gy55=lU%rq;Q_TG^?OOb~^ps`J zN9vwG5yg%*XB@KTkyvSko2snvK;h#W_BG(2$qqXX|7LIVEqzOVE^7K^Km zKe1)2@u$1fx5juF*!9#l^S9yV(u}Kbo!|1^edHBr%*gYx$H4s_?pIExwTrbMN@`#0 zF^Z3CeP*7%ffc%D_Ht-U>pee*@3j6CL^o({Cm>Mw>Z(u@su0v1PYs{>VNeAmW^S=EUdbndh@K&Emc)eKPpHAvK`MvBn zu=5y;`iMbOJ;CCZ%d`;%cDe9NVZ^sIf^PD{s2krp`oPX5yCKv!nSTetBj|*t(ZTRQ zhmS4i&*kS zN4JLOB*{Ssj#|@BhTn8^R&!TAoboIuAp=scv@Lj z)<4JHDEQL)ojX8ziR5if3#=FlT^2L%6y(2~za_o@`@Ptv=*}oIF0S!Ve=YTQ0q6Q@ z){1iATZ~RWsd_FPoLsGXXgrAA)ff)(t@g`}p11QEkMfTEgl&co99zZB^Ga^(IOC^Y zJ@#n?**yjP)`Kr>>)DbQ^$(;heGa)$|9hw2e_2Z#s4rWiK4RZ5P@k~ZbBh><*24|0 zvv=wc^~$ih_|3hy+&|0Nt7XXbBIc$wBDdZ)c)G}`SCnSg^KqWf1@mSs4ZvEmpq}-e z=b+bm`tk9dkDgGDgZ9&wVv9%VTfTW7u8heXM60Iah7-a(oCm z-I5tsF-FFzwcfRAOZ-Ax@gd|v(VmG1VF&zFGUt4Up#fyrW!qQ0re>7&dX4p|x&-#C z&bDO_zTvBSa*D)X#BS_wXksYz(nLRNi315f=tOpoQI2jPdoD6E7-G<&Uv^; z$TfujIA=Mn+j+PtcLp{c{-|S|mlxHhOYe^wf9B%!9xoyO_yROPTK>p4_Vr=@5ojev z>yNr4^IVn^5k(_r~0)6VvS?I*jQBHOz z9nFW1BwvuRCLXIh1-C*kCWZ?wFA=@auIPn$=h6uAK76UL#@&r4(A!>~==dUZlT_A? zZqO6LZ&niRNMF48f1w}U|JMWkyz%+V(@!q*M_#uRCk-c72KH5vLz)W>6my<(3|I)B ziVv+pf0y3H9Ru|v5KwPb;{w4V~dqQe@^+k6*>Lu;?R5?yP*WRmIq$)8_Zr4 z>OjX+Z8}aEoG6D9Sp!ZgfJ+5%NdcB|@TZ)1?aiQ#uy`BU7_MUOarj_C(B8|aJlc;z z+bT1-L2vkd4dbfO)fM2Ze5m5x$W7{r{`c&$Z5ki2E`$%h2Hd3=g+B}Uy1Zds7kIOi zKd=!yb%x6eM{J!@;N=getdllXIS7{z3aY{F05jy<)L z_G;LpxW>_kH8$S*)C_Jlu zqOMI7_pjs*G2PFT9-6+)+8m>PU?6g3xcm%!TlzHlSMX!8pJ%e+rgq;aHtP%MtE94I ze*8)j43gtbm*Pjw`6=d{%#R~!^K$mh{{_B(KH!0G!}#987dl=WxioywJ?Oyq>c0)X zf0=W6_@@8=2;br!;QPj`-orO5U;NcYztVv>LT|`16aQ@t*tXSF%M;H|JQe*RRmx{x|Fj zJB}S-e??l`R>m2HH?+UPjlrg}|L*6UZ58;4`>&+?Xy0v9?b&BjsJ+z6zQ}DK^4-Wh z&S^`qf8+D`Hp)ZVn#LY##?r{xGm-b{+$qtF-=?*dR>t=#vPpaF&hYyLr-riT{v$hQX6?dxrT}r&^pTg}uwT;`Cnu?#itc&LSgL z#My50t0sXvV~;V$$+wWJFWZXe(mOSbVbZPEiWKe@l+BsKoq~d6IWU$!_5<(gv7B2% z{mG8)my7Rw2t8`(2tLULcB1oZ7_aWuExum;ai$D=OY+%U5@lRP;H4fNq&%#Ov78~x zzGX8;?6YDE$ZqD%W_mHuskF7SCS+#!cWkoAt?%;R}0D&U$!Tyj%vX*8|_v zyt9|@LSKdrXXdwykMJls%br)AHfJpJ=u>4Hm&)aHsUPhvOx7o_{atrm|3As=VJ6;r z5&sd{&`}R8(EY3SJF$|$l^6FJRTrI!{rzG^;M%%4HdZ{F^M$~H;}>qI$+@F0fsG)0 zX+HKqXSqc=c7pb}%qPyE@~Ry6fNbTgzKLDFCH{!*L&BTLLj0yK9sQe~>_cJe@-#sEImlA^rxoN4DKFhUKS}xQ0s7H1fv}Wwn2O*5Z#%Cz z?TCl7i6P}Vd&J$g-28a8wZ`ykit&X-8$*#-rSQjB!N>d;bq)&qR*)eT(2H^e6qlM$ z8RI!o&i@&}Ybax`h;WxL<=Q8%^40XM`|#XxCgXeL<^0!Q5nEvmR=GVdzl=Qu&8L{y zO18}>&}nB(5glm!SKg8SECW|7*&ABHS;v!?RiE5p`D;7v&Ax$sn>s$yy20(TH3x~` z`4;?gIk!CO`{Y6=VNtL zrR@z+|5V<&Er+h>42a+->qKAju}n-Izd`XP$+QQdXN^(kc@}@&InUGd3Ewfd^7HuJ z)YUq)xpN8|p$PjoNA@r4+=fOS8$@t&>jbD{^-$-r&ttX+Ay?1ed0sy)el$`-uL_Jp0=!kAD#X5-j6D*H$FjL z;z#+`8<8s355e7Ga90fOV)^usj8OS~-f|bG{?*|RUO4O2A7OG16%&uF543;9TYn;D z$ovR*$-d>SUqabbKH10+#K8)uMZ~0uxO8GFJn>qSr=eOrqEAPdN1I8Phv=TAPKF4=cOkCN@3z&0f_rvt1ow|L#V6`PdogD0h$M z|K8i34&(XQbLcPa(fqnccSxr6jy}J!Z&VNT8K$4!&}Y|ux0k-J$)?Fw`_}LC$SdnM zTV6@VKugG!x;XUU(xhaD?%`AJ{2RF*+H+})@)O>2#rZ^IqL~uO6P+oN68egVW-4|# zG&94Y8Twuaej+=9;T+bvL|Zzm_UHlU-cz1OP2KF!Di@Cvlkn(IF?jqJ7mv>GWIQVN zRow&r{>{N#@9?#1-_L+yvOKxxZ@^a;F)MGp#n`8;<0M#X>eTyl(d|F6Rt%YGZI0uA zlxdx3ICz>H44e4XPXa6EkwY8jcNKcpLMJv+Z<|}s$Z~RnsQ35OGvfun(s`Y5(K^dS z*~~YD?()KgwHDUCR_GiCS2w!!eC~+f-mgE6`+bh2b-UlE<7IGv5FR~(oI3^`oxqkP zr`dN^@MP;t#+GEC{6cszEHxxnY~BgjGCGc-rt=n>$6Zj(Qdm;v8m+pptH5#n!Q zeutY`8;&496UUI3Inv|y*}qQ|TAPDfFGglb7Nw5ot|jcKCfaj-Q`!ERoW&mLcyi+q zbfd=51Z}CjQ&&R6%40I^(#MXa&?fqAD{YAmW3oMY?~4ieh~JcjeK(`y82g7WC(-4R zG#lQtuob8)on3+dqjOqyR_ah=!vwHls`e>1tn&$E!^BQ7Ci)m#%$yXzbjB&0ETZu_ z<1qX6dG;mvVjkmDj^04&e9BB6#;rOJ0vq?a$zO4w!&}M&erz^(-Qct7JdL3`L%HhX zdo}0($nn?;&w|?*_`vhg5}l81%icxsf@>>mKkmq0U~cpQ{ml6*=OXZJ;7ps(Xb$S1 zI7?RQd)uf1i16bMHZR=QXGMyl!J&bDevY4>JaH-?3+2xk>YSkiK7`ZFii- ze)iu2d&LkM$6q*B&Xel~hnKzxj*x$XiDc%a+1lrAjg^gDe5-gN&^}#frqiB$dM~_Y zsV(%iV5s;=@HQc=u*q2{}tz!DL?a3(ipz3Jt z+?-XB)Yo|Ws=!PHo$3u7bh#hQxzY|$9T)DDO=BHbfEnfZ+R_cPx65_hI`95QMLtH1O7__ z_(kA<66-LW``6wyit9F0JJK$Az@=%R8*i$#bvw%>Bb`4?VhbXD;u1%iXzC{*JfYGxyWpa%b+^8}ZK< zncMHZ_1(G6>OQyoy>n~3aBf?en>+X7D{Bm&7#@(k6aFR=*9F$4z&eL@71@FvRsH!~ zu~+#0iFXVYz;+QI=6JwcUP;;g4jvn@QNW|t?1J#yv)+2ksJEPt!H+GUh?mrT+B1jZ zLG~EM7p{z2$Q;};28fL$<7%u2S5JETb8!WoJnAj?;HuhN?&6C24|&U7Tmg^e-g1`? zfyYvBxq~aowVa%kI?MRnHiY<0Uzoht>WR{7sQU@Ka*m9bWvt7_5 z#N^t1v~vaZPJPbt6KSqoZGS; zecH`0g$G~pmfr+lqFW+!1MNTamXD#VfKN8`gnjDzbe{tTq80g>C3lIAIah3!!?V!+ ziV2QS2fev#Z^p(gv3-Gma`EK+?zDLwJSDCIU*M{$2VBXY^X9u>a{Ue1{TSFK`vcQ^ zi?8YwJHAk$`!Z9z+tZR4Tc9uGKn#7PwMNAoKS6)cH0zs%wk^E{nGG(DEzLW|mZomv zY1tpx&$klq$F^7v-J3IGbRH?cBeN{dfx@;ZvEXa&Q^aQ0+DI$BT#K!78ar9`qFLjt zO|osPQ;lsKoypn@w!l$%CY^Jgo99UHr`7JDuQ<3}D_%qQHi7^3tXb7?UM}_nXZEh# zq_u6?_}m$UJZG*BkM0Jysk|3qUQy;?Y$;@qY^i1Atj!IB$e~8R=>GW@&gx!7o@py| zV9t=q3bgkfU>)d49r9q5eNYkf1isP!7VP%E@IL3nOsI--ZX0%r?*5Z((6bi$mpnCh zeO(i1zbWN`ak^8fm3NQv5iQCdT{ykw^Z>4zw{Yz43EkcY8ydf; z33=@LItx5~E}YYIpYO9?)66@E99SP8V9!DQ555fE7x``-=gw)^mwRsi_q4CJ1eZj; zz0Z@gO2f*X(LCkZ_6~+ZuQq4WB=}HXd{z5JX-zM zs6y`W$YlR+hL5`t@h!8l!?qGDkQ~q&v&oy8!#BLBbEz9A1t#pq?-<4zHEOGcy`Sbi z^+mtsx*u%@xsa^4i64hE4)tx?+rar5oY}2YEMw(9doES`nuybc zc5+vai?g0+A#u;UTdJYAICNIe`d@rBK9c2cE2lq`7sA=!<_!I}$lqq&q=Fo*qhBV! zB{;Bd$Ks0d`R6kVityp{fl~!OJZp&I_pvv<@!Q?xMHwFlIbmJzvGW~UHwJ$M?hS^Y z2zmUEO8ESKJ_YP)y3X^?GRl@)?e054?>j4bR>cQd)a-r7wMCI7vW2%3$CZD%;@`S_ zmNoMnI}!L9n;86UE3ogsHFy&bGM4Ki#QpXE)Id0om`4dd-AL&9HDv!y$o~6$eQNLS zPu`O+v#khwNp}JM3pUfnnQna5=D}{d7#;lm8QtxrJ7kaX*Bg6D`tY~UU#NeV(B|J_ zFD=PYOzz_LQpZ8X^dH(+Kwn1pHn1j&ev@w*Lw?1pJ?Gr1F7S5aSZ4hiottX*-r{>g zZ#p-n+7rL}19o`>vQY7*RDAzb_SU9id)C;x=XE3RmOClu^Qtljsd-xXWa*>=D9D)t+2`VjgrL7vWY<*940 zjY0M?h8Xv6Yd)>e-d5!VW&>;HGjA*3z)CT%)H{hqFm~l>G-6*YeB4^Gi*NGL-e_D^ zx~Xy1m*134g4}px*SimG+y&gXV}BSp(Z@;J)|&M^)~q|KGWH4<^N@{$;iDbblUK@m zi{j#Don$z$Kcd*S?O*PJ9s~=m=e_ccnv-i}r_!e3BgP#+Yqu?VGLLm^>AoOxHp1E5 z#x~+xHqn|pl@DPZPz+b_CD(l;Yn^S!$%k}v?^g5PL}bzsKI9j)1+ihOkuMs%-V?sG zM(o0SC;aLDzm5NcUuB(%aa6GeU(Z|&PdU_PjnF^68)N?k=C+`&;A_GGpI! z7s{t1+WcGOQ!D5GT}nRbeB92Qe|(bu^l9W&V93RNIdZDw@S^ay0GJ$w??ua6N4xQ% znv=R4jW)IN?Qt!!rZmzB| z@!W1cB>hhqV)WeWW?dROGi#eeh#z^&CEJjlk{}KyXWN}Y^MQvZu*Y(MERZ3 z>D_5c>xloi{VfmeyS4}V+DrSrqA!1{@jv(8ivQ_P@9uy81ehKJwq8&?-Aq24iMHog=#Mjh){d?P1S|Agp_oTXopCye|x>pSR8 zcl}29tzC!ThfFiFLo}x~8nfQPyJp>mwzvG*?4cbixuQBBQyt3HzVXE<`xL%Z0RPsG zSF!IJo%V?Q+Jbx_?9jMR>YwvFhGB68SG#r~h4js$>)Y^gOAYWHDv&QhFPg!P7z#UKQ zP0lkRo(hciYi^pqa_{v0x+81#|1bC-Kgz6)>7EMXhalGrIXhf?kYwkNH1apARz85{ z_20C!5ZU>T;5i(eBmX<9KCyS!wI05F8GQYa&qVsJ?pgzCh7MdFOQ~ODuaz(t!(+_j zKmQ24fTPB?o3Ta75mfz!(wQ6ja<(UVi1;PC|192SP3XiYIzzDdJ~;Q5#oGcCipV8x zrVq`n(PP(~!miOB3i5%DW7l-T?liGbxfA*H| zpllE0pl`|0-+9}5mS->UDHKgSWY+GZ%=;fb_|04A$WRY{zde@q4dkEK?^*1D&tY#L zGiZON4Ts_!>?q)%HOP64%`uk2v;K4eZUz);TWl-$L$YJpnCNV()x) z$-MEWbdC%ByKu?E@#}o)C-mMh&T{#f=os7D{!TY%rzl^lh%;0+@huyum3&vl#}w1* z3-2%C?tqc~xg!N%&4(TI-;8s_XB<1ol~)02~d1Ua#UC-Sw$yNxEwgvi&N~ z7jo<(%lYe-|Arp9FLa@O)IPO$`b+sQ(@j1_*ZydoOeToNSb6--q@+zSqsUV0~x|Fqq013Ye#S)rp!fx|zC(nap{t^fR^` zFjB5=(+oS7xIV!7Mb4T@Q?}LKLf-o#>sE5PvqQ=?*v43G9gbgfm{<_Lg!GBpR_t|4 zp3m%?QSNUO&zfo1$Y0+ zF=GV3+W!;>mVdy{lV2!XS@T#cywFe1UpmOU@P}3l4)iIy*msj}^PAwfti5CZ)&_GA zQJb&5V|ET>-r7KXoM-pUaCyy{qnCD|n=dBO4Ybg!^&{c^+u+@fOK5B$vbk- zgmQkXjSAN6{JbN(J}Mf8J`wqp z(~Nb>6Y+lj+9Lz)JBhV!srxas|Gox(yM}h_4bNwU5<^X{`2nqAYA+1&8IxD7eFcU8 z3QeP*?Da`#7&>bP|EIw{{9?{^nGZZFMlg3n3)$wrj2d`(=tmv<9|dlOKAV?qf7m%& z!hwNuDRjr0Vr3fRl1$}kXI1urUMhI^(N(K9<@@}#iXrQF=BwBhj4|71nKP3zk>RK5 zr;kr@H@ly9XvKw(?(=nF^Vs`>&B{#`_`r*>LEz516wHCRC+b4{FbcVieiP zCBaE@Npm3=W&b1epY6*qa!IfgJv7r-H~$7&3r*=R^X{XLrw8TI2Oz#o|(=RTxvyh}Up;2+s?iM<}wD`D(fQ<%@$@-+>a zb>jB~d^^e6H)6^oltYIJ@H~lliP@Jzyn6nH;61bPIY#xbdDZuwJ-9HyGa#`7gPu z{}-Bb|1;~F!N2&8y*DNv9;2-v1M38JwcaJUp!0Q1ED`zK4c^r@yk-CBY%#?ivH!x^ zR!Ze#(0K~HkVpPj9rH(Oz%yxda=?dq0|q*MKj{RwIMqZ`pUE>-^t}=Nui1t&-Bwalp`0 zPc{y`{zB5c;ts8P`F(m)|E5puh*We3`uINhXm-Ta6;3}#$rb68`4{PXLsH+8uj<$R z%ipSfGwcV$)|Tu%$UR$SjAaV@tR!m}v#0A6HuP%XuNa~1G3_tUosBF(PgD_O&E=Wk zk|3YXSCn3NGcZ$Kzw@nj4zjN+O1&c5HEXl9TZk?yqAW@~?%sd3Cp}q%+&DyExq%8@m(Dq<)2@5S=p?HJ^XWrX!0<d&9wqHozWk^drIrM%_Ju9&B-H|%{7JEyrat%rRP z$P4*{O~`cFm(Ne?F5l$m$R}(`U++ z6`eps%1cQ=hq5ozp$pR&I!iuQPj*uu{4m)~IrRZGu{;6a^nIqe3(Q5@R2MwH4`V}TU<>jd_>e7`5}HQc5&g*{P`-#M&kSW`vG#(D$jGwS z&LtP@er-N$09V~~mxE{FcASIyg_kn^*BXT2{aN5muHo$wU>X!&;M)Z7)*a&df4&3HSCEg==SP93){yq_ ze}`omcq)F^08EwtXWJy{wv1w&a4XV4h8sjN$&nF~O4`Cx)Xu5M#&T=dHyCHvd!K zwdtB^cU^-OmhDVG2O{iu%%C3=FTm!I?AwuQ^y zPv&u+?51HUo15uNxIM+ZnppER`xT*+fZti;VV%^LN4AXk%2dyO#h&avS2m8Z*LoIS z1kX*ZgRXaY$KtOy@=-Ym-v_VB^6?h>=#6|lS7PTIj{G$1Jtax`hUjd?n4_EEqb`@85r3WVg$~~!9Uj9TF?&gnX=Z%{*!{NUBb^It$0BLpoW}uuM}W8B z{$aI;7H7C?l6Ef5JjPngM{T77#~R=`A2>$mf`=`#V>tr^m;&oJbVhj7Ecj?9e0H_} z>2ltS(7$YfI^dzXMrSehxdC|1o^v1-zpW4*f{c;97S;R6nmBD#fZH?R=@Y<%{pTC2 ztgN;XBe@TNGR2xF`huKSZiQCz&3O`SLG0m(zb|mi0*?OBY~|h-(!ctgNT0|Bg9rFg z?Y1(0#YW5;pWrc5`EV&AjrpbjRNhN49P_}a7=8_CO*RQeG5-~zR&d@%zaxFvYT4HQ zxA6~U2&i8Q06?|vAWOj9md?ox`gu2{~1{6efJ$b z|3}*5?!s`T?~2+=!Rk?K=}m)IKc)BXqkb#(YxNv>zm2{Tyw(5H)Yb3bf%j8Zzcvdy zB*O0~^<%XA*Uxl^Zyfw4fT`xwG6#AG&aE?SSicSI^Xa3)>R($$E}WqYfB#T6`71H% zaGq;BXLp2)$+wi9UHV=7P7jx^w|BR*H+0(BqoEu6Epd3UbMFWJ-8sm^JC*Rw{d`6T z+Q)gzmr=HyHsGlMwpSe85-mZOK|jZlL!JE}s5x1JogamtW6aCM=Ae`8)965cOW%m5 zrPmaL5Fh_5|4)H8#K$fj_6Q^JE_!?mIJkIw2YS^R{<r&sq+H?LZNA*kTSNp&Iexu&9`klBf#j0J#=PiCe2VG4}2~Jqarz+*jHuhx9 zeixb5HjDfhY}APVO7J;|e)@$T@#3=p-tgel@Q#a9XS{8*0%7lX&ocgZfzMn10im;u z^M2oe6D`(&+Ox=ov&g*;pEW_Ypq`5l20Uz+xB2^yYQsjF3*P?%&2{)v+U6Nr8^G9P zH}(ycdB%3RaV5i1eE3$ZW4|klG*=(|-4jlFnx}V;+=p*N5XvMwll+`hZHOMbUN zm$EIjeqTa+MU$~PlH^)Xc6!qo+vb>F)U$0Vo8vrtQF?7}pzqi0xX|9XlJFU7Xr(`?Sy@`x_=)I(G@Zu>f1IX}EXs1P}v&dNae^K(Nvn+=G}rB_PaWxD!{sdaC{gaBSmW< zJQqFwHpH3(V^vIA{HQwUbrbiWJVG?8b7j*)=>FS@S?|}`y|QVvb~T^=+;t4Kr*ipE z{crTycW*MTwXESRz|OC^+CBqI^<&v)z2bJkMLy3_;zN3WYLRcVWT$NP?V3YA^VK*R zpIIB@UHQDkW-gl>)l|S4EYQ09ep9~iB7EtLJqy{a^Ig&_VVK#~8SI5Eu)Y+S4pY3Dx$7(}`P9D{>f3DKt8w4N ze$yL#n-k1g_|@GU$FPrdZwkKhiH!akwKW6z(AOH;a^F)sKT$hs4?ecr&knsa+S=^q zXa+eSP`KGeyTBOS2lgGN?v6Xrt&DXCd5vp$=C=9r-PYzG^W4oY^@ z>3@xAgSp6do#oO7I1v1FUi@k53XY-`{a?ZRDc9I^qIb?;;+@P~;t9}DHMDdZeWSC_ z(sF@sz^Xd}uju_||MGp!Bdl<_=$~<%p}hw7GiZNjIW%YH!Z;G%a%jjcALcEGx7_j^ z%9R6CPurpicRrd6F`96PV*Z->kedAvOo4J?e#`JYQ5!Aa~^6} zyd;7=Q>;odOEKER_y#)X>AH=?I*|!c=+~U_Ep1Z?Y&((Yc2aWxcn&)t0 z7tlfH_-WJRvzzrEf8`0zR8wENSFxMk1osbna332GXn#sH#h;7+SCj6$>B5h*XC4^w zhJmxz4d5GmIe+LoLmYeoFUf~BTLbOOZnHKk=Am`(>YY}53>X;rQ)f1E#LY3N*a>WC z^T_#*18bh?s`KofzRo)3z_b(AyubfV`<&J_$GhrRu?N7#?|0+Y=5DaffX@1g&N%+C%K&KU0B? z{IuE6*IxN?Z1I`4|L?9BWc`IWH}-(m7wlL#{v%`Xt9&Bm%et3;^daT&Tv& zpE7LmSY`LR@2PG9<%_!NZd2X4lvQ+2h_x&37 zCYGXSul}Gwu?^(~PJ6D%tbaU%jMX?kx!P_=@9DQ>A?LHS|HDnzX5{dG$-y-8I~B{& z`HXE^cbchszEH8#R=LyGOxiLrh1#x|f-Sr3c!J=c3SAvVjy8b<**((r!z1Yi7bC!p za4|BNVQ^vcc*j`IxUjj%t@;@84%u4G%Zc4R!hV7r|F2IoHr<(pj^Eg5J@VALe%Psu zQ8J_c1N;3baFz`&I5o{7{;Io&iStD7*Ia0uHD}HLL;OCK8M}*j)|xo1Su=jIacf3h za~1ll%3d>89oCXxY>ZI8lJb?5v!0&-cg>7(9q+a<&SR7**D%-@-3xr5fmfd)w>_ml zd`m1T#b?7_GUo?v&^K|181Eaqk};SZG2YSnh7CiMA47bY-)lX18AWVFdtIBBDW8Iz zBg?hdQbIo<_At32z3zK_E0228Kogq|@A}}rjm$5syG&1AP3)BU%MSV1JnR?X=k6^c zRyJ1fYsOAXMZTE-nR_EP-Z0q{#7^|Cfn^Eb$Y0fIqK#(aD2>=#yLfL0a_0#4M)?SP zzNa=ITd5~JNhaz1^729G5vQ%?JWufa+q`Sa7$@tE#y&9ZGlpHruU+V>+0M93pU`Zs zegh}>_x1d~6m9;$@vM>kH?kc@fS2RUdm?*Fm6v>2dCAD8<2hEHAKW(vINK9^nK>eN zbXLGm$p=ky=S`Vx%_ncQ;i`HMu>VywQtZA5tcUQ9%bW2+a#5iDp7?Y@@X~yG6#S%d zo`z^u_X=svSTa-nidU2$aqG?2=BDNFoz{GbD>OrQCSN*-m?v{RlIhF`{ArxB#YUqq zTBsKXUuLeJXOHkqw7Ww#gYfTpmaAvIz&218$>Uufx@^e0&C*-C%3FL{Ih z8LTzB^~lJU85XvzeGa^MNi?VRpjP5?x%lAnt<^`%4Ex=XPJ6rzY{mrIze|1AWlUcDkq^|im;*tqns`7OfF(AedZ=zBVS zYwk;kON@ec&wS9azm5Fg&+vae`CCQU#Kn|NMYaw1Sey=dY**6rku*h_`lR==M)@B>zUh~yi-AWxl4!l zlYjN3M^5ofc9_X;nQFDWvP`n?S=F1$bL=nC7jYcof~g^`9jSf`^iZU}w%&MqG;rZeaUL0e9&%Hq$p z#~%g07t4Q>{rR8YztA6BK--t|$Be&4u289y&y%;6wH4;8c@#rW3*a{s+`^ZaT8>2(?W{_OkEK0IXXPA9i(D0H}* zW+2Ok8#;953i8I0D+z}V)xRxYGFiX#hh7DS$-ZC5L=VjkpnvL!*7PTMpF3io|GJm; z((?nZ>^lEdx)wV#S`F>i;`^M%_n8zt`NH?G4NHvg^I~!Enz|VNN(@^xhRqz$XML3S zjPFDJM6K}R@qO?$b_bCu_z`=+8!>p>_nC!Eu4c~`bCxYV^5f{HG4yZv%OCpXpYc89 z>!9;GeI5EduJW5GM_+o&5377Q<#W21|5WAql%qpbU-?Uw=kPslB7YN`PjS=39|ITp z;DYbSOyt5Cdk*XHZ<-6NcG>bK{^j@`*siy$9j)p9^V|0MxqqsUjtP`p=Vw4?T= z$UG4x=6E75R))X?w8o6{ycUjqufJ=*8#=bV3OJn_|5_ zZehO%#`&)dw111|3;C@zuz%qHGtiV^yn1U!9d=C@Oo?Z02d2`IviUn<3Qg1``6LPG zXAOL*IsH>M@nvV6Ly0fX$Icms?~zGgaq5*j^`hYF@Hep)sjIOlemR~xX5ZwpB%hSE zbLC`N*j(yE`GA5~9NZ``yNMXW3GlNO8{Td&EhPBtMqXgYzusxb!)M2GkZaI%W5BWF zo%T-r(YE1D+t`un=li!HpY*&G+k-Pi)TgoGRmONn@s6Qa=)m=_*En>(92(a%<(cHb z3$ID$U~h8o?p1lvhG`f4-7URUN4A&e^VEDJ^X|{2Gwb14hx|(;XfU? zY2JdNV5wYu*It;`&0er`NM(bhLmSP|dNXTT$`Na!JzI{ZgzWN^&@sneU_4>vHYW<< zci?JZ%=pw_D`Tm~22{MF4BFLL#lL5j%fMbX`8LL9d5>fM&@ge2QhW(ruDbLdwR$&PYdm4tc~cb-HcUtA;@mhxwZP%KC1}h zZScKbU|XX+!}stf6jR}h7sD5_1*N09;A{IBqJ_WE?vWAp-H=*$ zD1)}kjJ~t?t4Myk@OTz@xHi1_tr>iBZp=92hw&b`2>T6%%W1$T z3!2#re9YNa{Lh}jPTOx7xJ>s6mwk+#^$75p27FF~SGznVbR76(V!t1EbfWqa?DZ|X zM)s@xhN<)=+wajobzIO_?2jG$)t5~leLCr8Dt(EDdZL@{w7C$t%fH{f6P_Q6KL$=+ zm@j!89s(btC5=b*1Y5y;2k&~06`{^Eh7rQ(qltr$ie3vY8 z9sfX^@80F^yRhX-r!C;ILH{zrV-Gks=-;wlDjQ(jcQ3R*kJ4^$?9WNqpY^Z%mdaNy z#-=;WUb`LeyJ7@A*_hkrS#?9fTMhg!9k`DFs~j7%c&lx{itnqTwS0J~H@V~Ti#zQf zzit1Fyg~NQ;4b?|G>&Z(m0hz8`$sw6*xvU)jXp;vfK%3QZ>fu+XA~!mp_}5>oC&~t z#{QvxVwq&PWB(wZO%7uvx{*2T!hU5f+t@p$UeU-=#~ zpSy~0mn>X8FWuIeJhRt8*-u)J9inFuo|OnT&NE_`zvP*09uu#m4mOeb-`FD-_Q*_l zcqVoTHi{Fk++gCB*caL_sd(j1WP@@a)|q#mI0x%?G4L9b43WN|&;PAOj?stsh5)ZSvE@851jTmT^~@Omn;3%Pxau3&Uk%J6#BPNjwWYpnigET; z0+}W{k?$dTUDRO5hBE(Hw(&G_LBHiQHl|i=Y(@sFUFrBHXi@qj3a?h;dp9!=*<3iSebzagizPCy4(Y`$oJHKWNu@>3)##i7y+y6q2 z@UHO<7{fnahkS9`^!f$`@T_R{cD{A4udx;2?OOlXF2hF<1Zo`#M^?K;?d&oGvZ0b{HPlnO?~kD8a#OZUoYhMCuqM{{C>pY_v=;#tNpRPVrN%7Za{3!W4+sIk(_+TLXNST>A!IRh-JJwQ?TQSHihHg-6)r?_toIs$!gdxGb(i^M~d;DvSQgj2j5K@Lm55*Mg^jQ_P( z5M!LmCzpS^Mm`9%qw{-jg6{SI;;rd*IsA`5{Gz)TVh3xFX5NgUOnV`|_ARp);@)dh zHY-N$j;{gTE1f6$);d)Ly4@;02@J&#n!}qToijF};eg+xSC81dH3GjvF_Gi&sA3cP zKb!nf#r0Acm&U3-50ih@VWm{w&AejJeKGUWzP()Lg>SXLoO#Hu&>Bt=->dIsy#~1D zvVT`HqM7$OXN9@TugMAxOA~x`-b!%7LdJaRMQdr4*rd*sb?+onF0%aEc~;7aYckJm zS$)05e!o$6j0t@rnJ}ococppWC|kq_UheNLucYjLKEOMAr0ZUytKHR^){7VtUW2^=s!&GiJo*FfK*ff%qd z@oN4rWxuK5tk~Q8)Di67tk8F_2964d^Q*7W0Xh!;e`V++D*&|w5#q$ z)kTJ=O~W5Nt4uien|SIyqI&!`^^gl1OWIo()_d5kNBgmtxxb#cXwcKA_7X@oMrp(C z?^x8@oYR*(QYjPtABRqK*4PMNW^Lw#z=~1ud$zC7eeA!PZPu&OtflwBbIdW^D%)Ya z@iF#mjZyUSdt!{zr~gP_9aSIOD;oc7hRZAP#3pdCg)t!aa-hK|=Yq?|(V9dA9JutK z_fv=dfsLVm=Knh9M|Q%Gc8lo)IWf+CXZw%s{jO=0t4w+QpVMFd!Q z;qZM=`<>^bdEoHPr1mZB5b>;mlc6_%=q`A_6IPVzc?_CdIfrvpq4^J=Mn)rl=du6A z_G{8i>@G8)I$^+O~0_dlp+?-vrUA{2I~fozQY8 z-Aa!2Et+tOGVh%pW?vM~j;5d6vJQFL$l0li!5g`WuQqG*S*LtNU2`SnlAHK2_jt>f zQMMdg7aDG0toyuet>jr1pIM?$?E`t((As1N#+uLY!!;*k?CH{&U0VBEF1e#F&oK_| zBe|}r!_cSRnfgY}$pr6o)^X<71TCMBV|&t;a*i8`Z4cud-#BBdfVY&Vq&pldIETI> zV?=@8zx#dq!Y;(nm_lIeb~MMx|OyRN6dU8xI(!G$A}w9#z`iKA3JFg zKAVkRkk8Z1*p4x-CXHz>cLFdbs-c38;kyWeoH3pxzA&RpeMmy&r5^hv+cz5Y18DJZ@_K` zejS#zv_E5SoP>;Z^2S?IIX}H0dB@Ndx#TOF=WrG}^EG4BncK7}KKdQ)$zMN4TjZ|4 z@hbE^@(DZN?+ovh`mCjyFFp3uqv)S}__HD~zE1Fdg}%}_4{ld#T5WZ|wAw|)b9GNv ze3tAr_Ck_pSH<4wBF5##aY~lX`z9Xi=tuScs(V~n}HciNoMhmCwC z=c&UBi>0&s%U&jTim^UHUV7npH>P9D_fB7LfYt8iQQSS&W4jFihlAL+*30{6WIL_< z_J#J^$7!=y_SzBWK9gbCYe$my7fV0ZBNumA#6EoFfBM1+Y`3NtZ2#N`Tu*%q8yDRK z?pZ(YQy0UYiq%7l;0c?eE>0W9b|bzM-67c9xdn+aw2f?OdyoA!W2i5=`w!aB_)qLh zC5H;WOd!iEteU3+T8Frac1o=9RQYT(R)?Pf-X^DNH2p!RS3r9vX0R#Qud(x2@`UG` zkk#}RF9FB2(J~sFn==Pry9yr$o}5Ik){U$~?h1aQZujE(A2biQ+NZ5zuQIyD$hll! z-D&JM&hna|wMpfGCD0oY%@>-QpJQ#Fmth?cPoAca4rJyD=wEv>`}fYsI&+hEE;i*RJBeDfr9e`Z5RppYR-Wu=Cs4gFQYF z7L0~#9|!NX0HZU^`84m8_yS?UN4SpxbKz8buMS*~&V}E$rm@cxoHP;}8b*A)qbduy z^w}Gwy*&6_@$fkCnFoBnYtPl*yFCNA&*Vc}-}aWzq71z$d(yQRqa`VIBW)OLFnhY2 zFNDG8fPsl`@!k<)?`F)<%l0eLQ;b`>;0qs|-||V(nR7?3yEoR1bzb+eF7=LSF5@Y+ z$6DzvckQefuq(XfmDIhT5AZ4VmM^0WJIkJ%ZAZy}eGeW4zh-WE@eAj6t%F}L4Qd~b zYy;^Q(W~;!w6E6X4biO5M7kTl!|1D-tHb%+IWhu%5D$!mR?dK&XJ!h(e3hum9u*q9ohlqE$B?vKHtbhZ)T=t zvL`6BwiVs1+|*0)cJnybKkgw{E!zqw1|hSqf{w^pJNqe*tQ~@_la1{#2s*zi(Ed|r zACcw!^~zsH1`Y%M#)hx9I?r!BKtH{azvlclaKNK67;F;A=_niRUvH#_~hpl#KsZlklT>&17J7 zBQRRaytgyn!?JzBPaGKitdY3`AJLWe!__lJi+YT?-O!1XL)UF=dKbJ+O&%9*{Essx z7k~D7vKQ_@Gk6?h6Z3s-*v%#7moSN9$h+ug42n$(e=Ml7UN7J60^_w$21|tLD z=|z@xKz5bvC~{agqQlyr;e00JTlf^KOb;DmzQWBA_LgV+d~FtXq3k!ENp?axq0ooo z=S{$%b&TvNazSW+7ws>geVv`D_Se%s=L5A(gC6B)wBY;bS#Fly{$J>$1Kiu~>l~1@ z(953on`!?v?JK{ek@g#DpV%Se&+Kgf6zyaC+U=t+^~{%cvG&tLPkY+$8h=(OKR00R zO4!ESkAlmceBaDDr)kVXWv@_H&G$0OY=7QoWP$7g(PI(xsPXInPn-WU%>NU6qEm+! zUb(G14;#Mkfj*}v^E3F&pKag&Aij;kmy-2^8LN>az`BgF4u(#>Vinw z$MRj)3{0!ln*6WX8xbEJ43|ky2*2>QVn&mId!dzDd6Qzb^r5p*)Xsd`skpPNopRGo zYKZ-D-P&;j#!$~<%I9EM^1Z+s5y&qnOe=0eN(jhgpWE%>G-*tg8P_=BpAu`!le zE7llGpf}}H%_p9aKqp4#a8|eKBS&Q`6POPJty79Tn&mzW-j}!&BM#j-^ zf8=rw`4A=_6d4!?N0K-33iA5{_B>bfUIla-M@CFyY&t)=nQ@43nvq)?|L>a5Z;9pG zxDDX5R`p}P@R;VS=WlwR&l|`yXh3n1`Gf8Mn+mXH$W>5z)dSecd^aHr77S)A{J(&4 zi*L0ywt&6Yrfi_?rys=bZz>3e_W-9wv#s!gOzpi$!A1#goceX_Pxxoi=f8Dw>gNx< z7h9F`bn#!yHWh=H!~L`;i1Q)2k1i$a@UeN95c81@IVuN)jc5zYAOI%8c6dEQ=hK^v<#j%2=CeSDr&PiiqNO! zd|1b+ET@jjQ=GoDq3sA~3~9|d*}ljcB75xWPFW=%dF=y1do!gh_c~IvEh#QWA5-lYJ*ib1Ree~pL)wO_g^Uve)x`arcE`>W$?)bz*_si|85 z|6=(zJ*i#YkBZ$kR%12v16-R5u`$t$t>EVr<4Jy|@)mTD#wr=3{9rF!%UhK*DcjW^ z)1(nr_!Y*uo6j!BDEqR}tmT{ae4bh1I`xwQ@APGSjt?OF;cKHk@@D|_js1TebzR=n zcc;A#J$wBn*B6S-6@3!V8Vr0gtvAxeci2cffv@W$#pddal+?<{@uShV=zQoB*||Om z*2tFjM;O1>dz3$7?y^SSz~A;e(B3o9p7vxvhn#D{rrRm{UM$)t#w_{t7QfLomBzY$CrM?P(ekL9CDP8puIJ}9^m*)x>ixqM5OwL$A%J5jtE z;T^^7=2KsJEoszGdB6(md?o2$Jy(1w4cL@I`}ZL)(-`kM=G~a8Ir3r7Q<$@Cfj!K1 zDtYJ@bGOht7QdnG@Y}Q}nLLbk4kE{%MYo79I&mtU0zTV6>A~lapuxL~za=@sU)On@ zvd^N>EAd2QOUcfwyB@e@LnG+966``_?;vZoB(Ud@lhJI!kQik@#VFYaf^2AE&L!Xk zy*k$LE%jypn>eGXZ|9er^=jrdiMb*>Ymv2PKjnPpCs^rx^S6MH+K?=fjI5@<)~OUP zQ$0KHkQ^%DfS+7>A3o_&Y^gNbl)bTzHjON!uJE~#aW!(+%tCCE-N5r0&nuiZu^+>6 z+GgBg#RXKK`{azST+mPOOf@p~XdmoU;8BD9DA{Y|BQW6nj}cv1Gkwaj_#z+m`B_Q0$I=Ib8_ zOwe8m<@{ss4><*|OjjTDxfc6b`vQfpD(r_C_Ji71zS$SEU3<^=Gi5h#u90^~FecefW^UAR^_G0XeBRYq zekZs?LmI#KB}+c_fj0Mor#{$d({*nV_EQ^kWG$zCs$#^Hu;9kL9+LR!&_65 z<%VO6p1GyF?2s*bj#!}N$2q^9|F)O2ATF6te@b^OJhboWCp*_e$fv)xj`J?tV~e0! z*=@w3<8%3DK5^>8=r^2 z$1tvDL}=$U+tG;E$hCdC!2M-TxcoAxMaUfqK{(wEly1# zcECCU@1s-)XS2>yL_K$m3#eB?J=u>sBS_~TNiK-qymb~*M`M*;vTGnVIQZR;ZMu*- zs=n3-Dh9((+{3qHm48SX`bA^C8x(6@L%@K7w~Fg)YJr1(!Bn2hd%$u+=4@!omF_mqRIc#w-% z(U*HJ=+7y~S7tA%_Fv#LOtoPq-Rg&KrB4Op>!Dv4h5=w`CBd+v6NcT-gOvaF+fTl` zr4hKbObmu&)RVmu&4(|6o#bXI{5DE(n`nh)JGkpv`2prlyhwI{a+9UEYk;Txgr<*r zpq)bTww;?LSpAC!PAPx(zzLb}($23=0w;dEaFVU$!bve#7f!EJo(`@~v6j~fFYF=h z_Y-_%>$va|&Aowq+Rr-|gNt&fYi@Pdx@|h_W}`W>_Q{(sl(oD6mh;=-mDj#`;d;v# zX}7oQElcpjE^5zLSYi0PeJXg>n%{QL2iE?NFJhAzdnb5D*ID;Gk7M7PoB`IW<+D8b z-uZ4Z)ow7z#^%VE+`1ujPcj^`X$K!fwz=i}+4{#`pMUjn9q6R>U^JZ zzT2Gdx18^{o$q&?@3VZr%h;~G!;bqErVOaO?eLRNU3rHUZaKpmI&wSuq}iKb-(^GY zpJFq^SZAK%$EPf{+9fZ{{lp*C7`rZy@#TNndbgtC&br8Y$+xsn4Qq1++*=;N4{fGB zOs;i-_5p`NQAX9NOa}KkX=G(OP(=@53er zr+y1QPM#@eQblRs=;>$dJ)`Pt82qO?+sSF#cIcxm7JEe^6&CfZ(D8_`4%>(Ik93Yp zV}BI$Ta1nv*;;clm%NgR$Z^F|vMry9qiiQH^Z{~mn=7&J7O)!jJpLkGr|fSNFItu!3{CH`Zs7dyd`tb8?v8W_;gd zP5LZn3%|{|f9TlniU!G>kqdh`l;R(Bt&eX7p{+FL|? z?ThFR2X@84G+s*^!1$Bzf>)J`HmUdhKRLgFvE*5NCU|&3{bh&psjId!$#c^A8*Y0> z?mcVQxmI|?;j`+jnr zjqd2JP(FdN9SW5`L8vmt{LwRdkm`gHua_;4;q67wmc9l7)P9W zCtg;)hmE|>2hQEbBlu9yhL1n=JKE7$#LKGJxB+`~WuU!-dy8ARKelCH{ZlQR4RU%0 zcp{(Sd16H=_&ss@TQJFvOE!UTy}N+(ZVlWRcYpZ5!NQgS_AT&%q3g4O37k?B-Yt(5P1vKD9PlYmr_D{k z0=g0%Y;)RF8_mneU*dhyvA!j{h&c^DhP}{IWzWID+o7S2yxZe=P22v^W1jIQ=TV-i z5?y!YP^OcA)#&6+0Ww8@M&Ov271pd3WSearVMZvtOs zdFK5;Cnqb5VAZ-%n}h&i(ZP-goKedmK~_6-DsOEE`vwwLgQHYCngZsKg~ebcYKIm( zLqx)oYPBh}J=28%5Xc>HY}R-b1+2Dhw$2e;7Ez$-%s@M7J8vB{;Ix5~oH2C|3q&`qA; zzpIBfrqU*I&ESc~o|n}7z2-YvW#-$oF`WHMH*K+wt;t%5Q9^e8lu0l#|#emC2RjXg6TTx4Cxe79=rQ}D(V#nn0M zsyN&+tm~MRjH<(fGOEx`Xp_9fv~v_3>!6*B#n`6NPMgzChX+4$!H-tjQ62~{oD;|0 zrt_Z6$M8nh%h1)9P`Kp7F6}|yluj|~LPe8oW~Ll-+%6usjk&X~Ev%W=wuAY5`zahk znQ_Fo!RG~^pS%4~-^3{E9d%oH-{^UlgshGsgLm-xgz}G4-q>z{h1y3yUwJFEyPLTl z12!()(g$a7$LN}R;9ep+)py~zaC#s(ekT13lhWTRliqiS`rJ7hxjh5@3f|w29W41% z*ovk=7tn!dAl+B;>}hzG$=%?{9PzVua{jymu3hDOdh0K^JLA9MW!uP|x9LE|)_ajd zw=m9k9=Gw+LhW2fUDKZX4%o+^ z3x$UyK8KITXMlh1bHRH(>-r4+JPy3+Py5BUB$xPX7f*vO238Y?49*Tl*Lnq<{qKiE z;Zw|a(|5nNRkA!CTu7g4$8rz8hd62QbyLcqs@;PJRShIRMIzsh5w8o4?@MK`Jt~3L zjU3Z>n4558I`j6zrA)NWJ6BGAT5!3qhZiKdG2t($zTe2`J18T3HRmV5SNSImyqJG~ z_% z-wm9}RDPD7;EZI+Zsc|{Q+kU-~nyyf7;4>)C@J~;6IPs^!s_S1&J-PBQ>rGCO5J z)#$+ks?y*k;@zj=-M_^SB76TK_AQG!`+)zUq?WS}`<=57v4^pBqR+`@X66JeulY56 zG9TUVVQ><-%C0vQ9@kt%Jo{b2=SE`hb8*0h!zjV1$UghfO1(DfMe-#JQ}I{p{s3}Y zNN>d7p)(&#lXVuY)Q-2ebZ2U2-7WMX+Lk>`urTYuda8cQw{0FiNd3@$BW;~>^il&? z`f5NA6)u?l;+kMU`H~8UEg&9o!*vHE~_+`IpO=F^vuPJ@&34;QckM(>U;GJUrlb?vtYp$K2EHZ(g1dZ)*IKbMW1?a#oZ$ z3&F4%Sm%8VxiP0lZbUMJov*&**q;((Oo!RydDT0fVXV34>ioI>(v2pbu&=)~imW!i zAaETYAifv-o)zVgjps6d>|er-?VsU10rpLmEuTOi;OB@pl^>h^5cVhe;EY`yI&o#* zmpDuB)~V!7T5B$NgAGc)x0V@JxPo@1uP9%fY~hMmJBXgHcBI28CLqqb-;O`3Z5%R5 zd|qQf{lMY1IfU+2%mw*FaMMM4x2`fW#XZv+o-LNsV&!U<%~0y zW51jKao&NSip@x3t=w_VVqC_@J7mD*FYV2%%V5d;|z%{CsjxNP`>Nm zKQ!kvwLTYww|=j0#g31PQa10kse$dv6Q#OyI7`}+z}v2cx6zOGb$N3WZPRX4zk2AhucMj_Jb$q4~_(PoWoCE*njdlGO_Bi{)-GWhl z`T6G(_`{|0u?T0kg0nXN={YYlhIX&if3eZT3-<7zwU)KdrS}8MgAd$ouzQB5kvoVwW4p4fbHkDUoV`4^9ed~) z>}g}BCgbO~>-o6*c^~yVhBo|mjL&E6!Kc|f;PXE|HY1~I)^+D6&F(Bc**4hhjrcrnr_Lr*ej63nYbL;wb8Lk z#&oWE_L#+aUFv3Fe;w0V@@$6BDoLe115<}TiFe7DrMRay#|N6$)iogstq4}y=kJ6! z9zfs6Z}3{tYj;&ILbn{Z#L&kbEyz-npPoM3tS9St(dVb>!>yb8Veh(ze?lv2<0jh3 zA}>so-&5h`dYAGWe7fjyvw@>>IxCi9zXM8VxgQqNCnJ70RTc0}XWR)6Z)wi?CX`p(q?-{GFIPXFlQV?DdLzxjUE z%vW}WR^XtRJbmBA`p8Zrcmj_JT_J3Z(3RdPUPZCgwY=NU^AOK<-nllt^rSnl!^>)) zXhSD$0p_)%+0U>(Ek9%})dyu)61L+Tc~nuQVpz$9b@fs_X;S zi8SPv$-7H`T@BXCGaX&?y5iQ#chTSOrEDAhy7-#AeAg4R?+!j^VozxM4RpTQ#4^qR zZwe^;_w+l4ezV6gCi)fLtKZYe3iaE~2c#cJ$GaZf945K)$-4O?J^Wx8y3RH5%k*Hy7dWfp(;KjYJkm4_SxLSvETPS*CNxvf5PJ7vQ-rZZb38QY>X(<2&!V^b zb$#XYRNB8%`J9n(|Cn_BX~a9d&V1e2;TZfwI+py2=!ko>R!=p$r{ZQym!V5?e#FqE zzenG8b(_V@urClBr+gemw0jS-q&7XJs)#%j(hXlCe=KJK!?F{+@I&-t@XY9E>^bA` zCB@VhQm>4DpX0sW>ABkfFWz*kqp7F-582SW^zYqPXzNkxN1(fHmaq6B*^$7zG{%t*owcJ=XBgW?hRMk` zhI(W0*JU_yiqPEz@G&eqdKEs^*=q*AFl+F!t;#PjmcGsa(-r8=o3I%up0>#16FS&H zou??jeD#1A&|^--u!F09`UZ_96Q6Tt-8=ltHZ#RH;LK;3`!-*CaT1@FZ_x3G-x_PJ z9{55o`7q#Fd#yo7wjR-1Q0K7V%{W`}LBn&32Qw$#Bi+cH(D6H%ODsygS2=&imcRHIfq-yRU?hwA3oQ1xts(!(^PZ6_eamJ@tefWpB{wDU2 zv+;TBEb7*gz0dWC{=S*hLw{dQzz<*ye%#!RAF^jOqlcOE7|4-{*RcOWHpza`jIN=5 zL=2o9I+R!naMXv7ejz?OA7hf9Czu#qaBLje@DkC`aCk``yfF`(S%G6S6CR3}^ulRm zxW>G~Gv+9GE!i#o(-qi8Ugtac4<~94{pUN4K2Ce9ke8+GDaZQ)U31xI5T|rQCA5c} zMnBq|*YHU@7vjUr?|#Y?&lM}uIN-C?@gt{WbFI!&VnCE%AX17=_=ESh6yB_yXn$jJ zqABjh?3WHvmwKY__vu5iCh~h~PpABpf6LkH8p&wnNv3Q?de1vMp3BaAtNg{1FDk$8 z7&_p6@Eo@+GDgog{ebafmk$xE9AQqH+XZBPx85+=7l_xSGz3c&M;@P#zhDJ=-u<%m`pH+H zQq}m#n&;L-OD(JI^O&{RvTLC=>9O1SRKJ4p%ka`zKD?BA3(WaH;^^UlBjJZp+OzMC zpf2=TIa&IZeXd6KR^xX@rY)eC)UB|`jT4*dD34U#sBy2=gIm%-e8Z-&_O!3+jQ`pc(F1Mtu(`1jIB|$0?(^t zezo9}%I<*QB({0LX>$?pm4mg6eU5wHFdcnMdXM7cR`CxHbe|sNn^)t^4rAJFf))*lRu;7@FVcWh zTRQRX@S;@7kBYH6-|nt zw(aQ2btzX_&l|df24tUAIoWs`yDFLv0+V&Al}(4lPaR!2J|0*?dtM#87hHhHq6B#8 zT%zUqGx~vZK4i?z(hvH-Zz1|NeA?O1OE35s@G&|;=x;B6K1BQZV$rfWZ`IlIHog;& zzhxafTE38U=4$qw@PTw}aM;AcV>(yKCKhgmCPwN0JLIQqX%!(8^U-O}Pf}O=z&JXB z?gHa%VrM1taVPSz@%$6Icc8@H^C#E6!C9>s@G6x|LpN9?UWClm_>3KX1xN8)xOSIBn_@?QqE}BCF)tqPu3C^m8_YyaT44A)i+J@^#TC{9ShGEY8{5W9Pgj zwgvV~)r+t#$S+WeZ9zImA$@5aE2IHTz1Q-gN92lkTBbR7ApWG?{+(6gx%3U9}+miY;EDQMP)7w1Z` zn+QIKu$kmwJ1OT=`f3ig6P*>!!*&9XGPaZ9*iQ5=AKQt}9ON)Y@#q}Jtg;1+FS|y1 zAvzRmH5}Usx}9yqn(xs?T|0r_)vD*H#qw4#Hlw%lSxUSHW1E)@ z9&4Xmf&AJwGx=N|eq`Ajmi} z={t#ivUK*vjH#9}?Oe8CaskhyjDP#G!pR4%q~nE*N%$Ed_j??8i4RU49%{N}%(*T4 z9LuL*qVKupd$RdHg73on?llmeT>~!x*G^>i#x?CVYdmWqv0~)OA$z~s@kOo4CGIa| zFQ(j&rEB3k@LJ&WT3&E$b+icjEQNNLs$b9jg_KXOfiI)ur#4_qK;KV`U>k;aD$YD3 zn|KF!>FIJ}IDN#wGLPBU5l@Itx(yzFivKSDeY~^fg1_!tZxj23Y>D1y>(1i6+PD4- z&y~Lmyp>hVW;{4l@iEZ!YaYk>|N$&QjQXU1_ z)0^SN2jF>X=coV7Icl{-9o-!$zgcFAU9O9}dbKZ9---(u!yJYa7m&<)s;=Z#tN)4m zpMRM(p|11=vp;{dhj-ex6q|4AT)dGz(D=5OeSyq-t(7%bS@W`nT6YYWjG;~KKVF>6 zy%@A-bbQ7j+o9q>MsPl-vSDhV5*@zc^{D~D%bdp!O@$_tizC>(TsT#Jva)GAI-J^+ ztvMN3$ALBYVc@LxBdn8bK59pNKzzu2cWe!=oRw@PPA;$$KC*-}c=CNNxmJ80pVZ7? zphfz*8N0vkqXpnC`((8frw=oB=B9CudY=1~_zr&q&gd=V;Ltt28-l^WZv537HghjD z>yrLqFd%z%J3K;o-OkwLU)?}I=w<;uQ@tImukL;LGy4+tpG3@5-4n$8(eFZ@N8wj` zUh8?LbuPL=d%HEyBG(N~t$f_Bqxq_yWdCC3dk^z1WWIUG`9kI^Jk8^GnKR#A%vE#L zdEge>)x5={-8E>vsS^FzUIVSG)?qv6Uc1+Ux~3lMptfV|33Gy0fHk^9IzS$@?Am>z z1vVeheEuPwyD8`^0__UUCLZQxTQ6AWj4jUC+;^wmOA3s7&D<{-Zacr~*(2CLTH!0k z&I>L&`mJb8c^8v1CXytg0xU3Vy^UgbX2nzKiC%ei=@It@cO zALi+U@u4GGb!}=}{mi%Fnh*a$H#rewpO?qFER>o`s#ddOdoUes7Z=$Y({3 z?Wd5RYCXD^;H0)qJ>Vg_*x~Rc?ZeCK;g3^n{v+OZxU#GlO%HK!Njif|*P54XkGUET zZ8~e*xrBRJ#k-};XP;PCEdcx_e?+mwfYe=pR-zmszN^6#?;ZT_9*@D$TG zeO`_alB2-fb155JD>700Z^^_CU~y~&ep$&u)=lvRerQ^LiWEM-_n*W((*8l}LxcAH ziNGfSoTAVJ&n6fgq0L9I$6bmSw_r2e&KgB-2d8Kw4qQYN;#0f8#RA1=Vq3?a44>NV%m2Oz9J6}EaiIr}!>{iP$A1Nmq6fv3bi)!l{60F&cJO;-a6mOa zsWaLK7`UXZs{fDgamEqbrz=m^QtnRppmeks_{2YRrUreCy$8IVv;62YcaBC+nql)C z@u^F}Ck|}Np+WUGlKlzy{gI1EGAX6527Aal`m=Kvt$OYNJWjIBUNd5*IM?tW>=EPO zRQUqi_AVKsJ*>gUd&wUn9>h8xK(4Jr#w+)lsn0rSPuo(!ddv@Ye&@XJ`CuC7d!SYP zQ1je2jyiNY8v2wExt)EG@Z|LbAF}Aw>qAar-tCmrIF3Q5ih(@_oqB!Aqu@8LFIl`$ z?W&IG)%~uq2@i$8I`?=Kyv=s-RyZqsO%uLS?f~U9w;A94up1|*`{9k)l)d^v+g#Ct zxpzK1#`i=${<3h}9PonrZNMX{Ph>_M{7Ur&!)jCVOnS)6k4Wy?Hc;6E+QDJv4QUsz z16Ngc73(NHMeifftYpaB#PMDV4_dR_{J)MLBF*aMBbNSs?h}3WZ_cOu_4_?=bZlwg z{a%>%uVlY>F5iy-*kfY2uJ87V;Xh}tj2rz|x}>?E9AEVMC&6p>;ot;*pue-@8(D+y z_(tk!{~Xi(jQz;(YSGUga8uGe8+lu?u-Da;tPp%zlhy2Y`pcQOLh7U2m<=Bi^zdIs1YMb#+ z!9Go&idE2krHRjFUs7MA+`fphl@IUR%A){XDj!`r{M76@(Zz)4`fg$rkn@MgS5b=0 zi;*KIM!z|Xvk00sew7HH)Gwe;Gd7Ij3&>H#Si4Ho_N;%`!ym;T*zc%JR!}+I>^(yB zAz$^4thrz)ds5+Tl}-7wCvol~YQ_!kWzLVlBR|zoAOCc*KC*iEVR`x(erx}I+)p1j z^wY=x>ZcDA3&Pmld9;H|?i|X-_TT;#+E={CL15(SU*ap`9inl~(<|@(^ebXA!MzLc z(O&!_-;O1Ei8_*zMUMST{tD%!(jF=gzDg|O8QmRG2o4sKr}G1FLu)gY^-^D@kFxgx z#@a(kcOoCDc`lrKY!G+pIDO~AtK|POyvpf2lIidT_jf;h;mokUeBtBHzP#H$!k)!z zAK83Ou=BI{tAlC8TS23vfUDOgA%3%ucCUmV82i$7YX2hf&MzR_;R$i}=`HYuR&>m^ zB5-#I`+x3!FI{77$?W~pFCP0$S^1b2vKGqWU343I>|kgUI5#7UW3*%QjLfu)NdH8x3pudRUNH!Z^G-adk{m*#brFq{Kffu~XbZ8SAo+$c?(k8Kx zCf_OkW$0RYR)T>p?owWhJZywE8X2!-q2gIhUyLXELI_<)e91mj{&q641B}US^A5Lf z%Fg>Owp93<9rOESz1o;@48DY|(>!BNhF|gg4`F;i*faB`Z}Ho_XI^LB=hzy$pEIWp zp39dI(b(Z@#y>+WYYThxcG}7Cr5w*0Y*i=o-(8O}3-8x8bDo}gWG;kXv41r0X^VYZ zlRK}wBkUg>I7#n}Fjn{}c0qWJ!`~l!j#z$g8OEDfrZ}+-W3NeQr;sw{PO3W-Yyy6p zhOctz$oZXU-;)1G@sO>V;3l#~_>3C>@*!1Gnj&I7kwp#Z8=oH$6 zPsA8YjCw}bpuBtzMK#D(Xw=wXEc*_=W@tzHs6KOsTGfk*XQ;Ib>+w5qe+0JT6-g_n zBGZk{g}T~LR(y~bsL;M>$eQ{rY}~^|!{Ad4eCjGq-m_pd_dB04a{A3|Vqu!WG0}Ad zTx$0B$hX_Ti{?z-F=_UrZ<_n(CTcH(A6<0ATr!DUXeR!;nfYqo7jDO9;YZ#pc4E8} z&w|Ws@E81AFmcOt$Gjwznej>d3<=K?apZFe>$Ej-eJ&wiv?gC;O%n0_<}1YabBAnw zv%};=zpe)dkSQkK16d+laW@Wtho@JebF$_}=WG~Z%N2M_x6Vo3ZajdWECLU-jyeOj zj?V-9OU_h`2s*lGa@|jm)wZt?xsR-mYHxfydOvGC4PM^@|5Kcwz2|e_4qxpHcbg|E z-mjuTYtKFmx>0P+49-sJ%wiq!h|QC%a2!05ouL-oW6584)F?B;?al zyA8wVn3u|%SoKd}Q$U`o-Y)93Sv_&~dOvbCet&<;@fPAZ50hiD7PxE&hK1D$`kWE+I~0k7W?;z2CKT1xL@f!?4JUvmjxY3pYe^wPh(|OH(x{9YrqHMUZk5Q z@jNdpt2zp7Bwv%H|5K0WZ{|e;)zN`GNA?cK-lOuF*b?-9$``DX5aa&vC9As2i4%3@ z@gC^hn-91PUL`-4>_hBhJG*{~JY?OqzuWay_w2>3)lv9~Vh!y);>bhl89qpP+2A};?G*zyBz+w?avx4`1ZY@Mtc5v z@!svkIY*K6Im|zXPNSFu#lejN4y@gTIPzWaRh)`@Pl(wkI&e-AoYfXO&w&TY=}!3t z&i+L9-7@x>?)w{yd-fnIm+!MCm4UPFSW3|IYOou){S;+!=3DL4zkvmMhI9h0ulKiN zz)gFdU3;aQ6+$y^pMPOYW**>k_dNJ6UWH%B@O8E4oyRkp2W5KA1Gu}yh3}$Z2EtZJ-+Zh z4jkOr?p65NzlzPo-JeImf61B{>#y+}S<7AJI)n4lUqnyvjq}nA?Q`z(tz6AIEL8hE zGwsdswCApeL*vu3{G2Z*Z^8%oj;+%AO60QeDvvlQ<<##*CyZ14_Vo3=X+`i-%)RF8 z=Kt+5d-RLMcRfryk23Ew&~7I2-*fN}aCYw-CC=VFlxps=iy~vhUt-8h+4zJLG0Mk^ z$rWaJZA#rP@TvU_`^Pn_o~uJI)}4CFLof#aEBaDrD||}6i8gr8(T23@n|z$T_5+*0 zU~_vJJOO@X$|v(M@O@P9RX&FdatbOo*a~OrEG+wxOl)fl$W<2P?i6f7Z{%J1*b6P71#!vfzMj}%-v%c7wr7H z-Pdbof8dS*-Q*eXb7u^)H3yO7x?@sfkbN=RGmfPE-s5QfF*b2@sMX%K9NkFg-yM=CiskRRD1UEysw={PDDPv{JD}?i&kXJj0L(E`TV4I z?FZl~ZRjxO9I9zQ-RwKGSJ=(Hyvh@IjC&1KF8%IR&pCH7bc#<4S502dyz-`z!i8soRECEIuk8Bl+ONiFuzfbK30m2)yKKI z7=67)**^Gy>=i!jX3e~|4A-9UFA4Zy-yhhMA4I;I(ZE4)8_*f-tYh5<{2?#!Ao6tV zXQu`DjqGvcX1OCr#mC@bxd+m!FHm;|JdBu%&Qb8NX4;9c9~ZB(;8h`LU2qNJe-Qk8 z@hW(ObP4gQ(egF(U2-l2uQE2uxmMV%GjfK*-#m4OIdxi~#Y%_2*|_YC)0L6KpqXpn z@xaPG`}=?wUc=b;T>~zli^#^c516_1laZhgNvF=t^8YILv&LWp=d=?f9v z9Y9=)7yqKfHN*OSk5E`P4uXW0LNh zg}y(G@$Oe$`qld+{HF);nI_>oE#p)CH3{FT+R6T%U}MLS`iODRyWzw*n0ok3<-bb8 zXKMBW#5PzpMyJ|~ovz-;I(y;JO%Gb*Ou@qnv^X>oyUs%sTI0+h?};a3ow*;eU;kkS zcq4*_e+iU2bUOcfAQ<`KP)%r z^Lp%)#xHQYg-shcr?VE?_kf>@lSY3Dr_bVkI&eh!8juVVNPwO5_> zA124izUZCW^Xk4#`<%9DQqT0e4LofJFJ-TnjkAXHomt(uWbfs9zqcK}rZ#3x$PX+> zzd900(mm##ZR6pyKNPK`*KH>^u50Vh`>pL4mv2;KKhyx8-6l6F4@xtzV1Nyi0D*1PEm{$xK#HgqKzQnzRiaFcCm=`f-%}ebC6UI-Dop38-Bo@=$ zGgU}F3+eYZk4>$+p0T!~UmSqGqzlIGB$kJ9xBuAYRRiHcsl00iPcq?g!w1;)C8yMe zft}i*&LR5IZ#~~meo>RFiEq8b%G?~k z$Zf@ZMCng?lLY%lV761d23QF%W)IKsk#p$XZm!d(pxx7qVK(_9 z;d9pxxQDXj&6`PXH_1KiMVo0)a}}T{MDziug~^z?+SA}4Ud(~Y(R%-gAT_q zM&&LW0IxCkG^gaoOUs4h9)#Gi>*%&3dxL*GuFbj~>IKKol935HXk z@zfOJ%6tPKjMKm3fNVY9rU&2eKH6f_2l|ZmEx=Ig+QD3uLr~+>nkkp5@&wK%r{HWS z58fE^;GJfkW65PI9ZTPZpQ^9#5n}rVzYcy29`(RZa5Z)o;Sb|Jn2;}MsW0?w2t1Q7 z&QgpC>#Mt`RaWf?#&d353(U!>&6wa1;n`v3d0Rtnkb&fbV~n2)cHYf6TG@ZK(r3Yq z$P@ajN6#~OOM69+6Sv2w)-@j-c?sP|ev*PscC7x5ran0--~}^?)pU7*_&^+*aq&Mo zkh|fT(-d&geOB0=_nGrG;OS)11$_z54>|ZFU#NUYOVI~1W&0-IQ5x&r#u?Ri_9f!Y zrO3%wq#H2DIJTBDc#-<}VZG*I!&Z4E-l0v!d_Q%*Yp>=!2N;x+>rOddb_(Wcma$Wc zH{X11k6hfEa6W90$p_HGpD&ib%g37i@+;0B*&-GKxJ5-H@aPzNB0Lbijy>`zE8t(i zeWlEkxpc~xy#yYYN}hei#^~(QLgv(*Yjql1+uUHMa%ipKJZ=a+FWZR)T}v;LUspI5 z;ZwRo9(rFAJTQy)M2}gwu@9rai{-8|_6_Pv4_b%JQJnF*C#=AWROxTj|G-3vZo2S3kbw{t_Jd1vp~loO9+w`1d8+zEXSSo`Cd)zWR;u ztO&SD4x@ivI}*LD7MiIYggpg1(VpU$$BAJ?U%+OvFAj|;{z-A}Yk4ny#+*H;++n9& z$dU~Xy8_P!(54x;quY4Dw_v}m0e6HGYS-YCkpZbDuZQfw>MI3WHuuCheY*Xr@7?s7 z%-DA54o2EgTMM1}Xz$aEEsnj~LRBep# zSrgqll8KGn2QuT{%BJ<4+Y=6(*bZ>qJC{`WYp!^#;sAy;f_G2@w+>YTx8 zL}xrTGx^;1bmSA?XJZ?j?Ypyj`tl`{yLev4d7&B0mrh16KE4E>$~x$^ZI<1)=2NTn zan`1Gd0F>-v`&j1SO^Bva~puI#-zBC^j>31H)Be7&MH~RAe{>;L}%BSW-_L9#x!90 z0yCyO_Fid>iQG}gmog^F>SgFwW-K0D8TpyYUgMd{czmpl_`%!aoz&BLp<%=c>hng$ zBRbDMZoa3Q_t)@U=lkqf{B-maJ0@-$u#}w21qK_y2|Gux^csKN?}3f(w3yBPiK(1P zao2ANXQ&jXCs}%kHnq32WrgmXv(IpCLuP1=(j0gQ23m_G;u9nb) zOD0eEr5e0W{jlo}mzT7{tF=ZhPuY=x z*RMM8v2n=8k*A2Q5e{wO^Ge6)(q0+1w*F|ZkTZZ@+S7j2g^A>(bS-zx72v%)-Vq6S zU+#?e)&BtvCgGRsj|QXcPZMcyH+P(_f3VD~nebct5u4tPEy}}#`lt6K*;H7oM0$^k z782-vCU*|5^3d>D2mYfK-nAoT`uLn16qC% zUgg}C2>%>Vyq58Z_D@6G@T}{lGZ)N)S32Xr7hKx}eLl7PLBp>K!Tt5l_*E|#8tp_s zE2bUA7wNnFMK^io^GC&}pzjH%-sijY23OaU-&J-m$=sT&`^xiNNB6V%Gyal%=e|U9 z9{wWva?W69S%uzKim!D)ItcVGJMz7cdg4xk<86KLVUIpoq;a4RQb&0=#9K|=2|A$U zX9aggF0!&FN}k)kyQI3~d#&dsy%AF?MRPPTMxWyJ+HG8@Wy@Ol^LQzc&I7ExOD#J&v*LF{9?>c zaUkUub3sRJ;k{rGBGyJatKi%#cMm+%=F`r(zcaz`i&pw1`QZegmmaeMC~DVgZ7y4v zF(%Cmg`u4ZQ3GG%1b`PhtI3y}L_0AvUh>inGyGT2 zig-5SbCpeNWrqO9T9a~Y`L55$!Zf^w7Hkxhq70DpWg?}?&lwv4)i{s&$9yl z#{+Zuft(nYe*+KQag{Zc+5Q_dFZQ~u&)4uv-7MHRu{E00ADTVmVBeznI`wzf`#hg# zGptU<*Jdq1#vfArlI;sy>*@30fxdmNlrM~Ry^^)Ok~RD0wfKn=aG;y!We0`k-8jST zLp^jqEZA-5=Dc^eF7ML+<<85C&VT#mzWV%f`nY0!KEb{!-)SxSgKJ+E{Y&>=jBQo% z=CW14<;GO{Z9AiMER)9(ec&ki$wu^((fD&Ruy;)H+4-xre@pSPhT@fJtlL1VlXwLK z8}Y*j`hiR0{e6PR9+OYK|NV#dxEina{-P6mT-d$X3rIJ^CNghZy0!8_`1g7%*rYPj zx#H+mvLm-MZa40x2tFZSnPjzMaiwo5_CEDJJ7z$7zQOg|;T_ro+zFq6XP7uO(`G1~ z_LsCt2axaLH=D^Lru_wbf_;7JIpzNY*a*JT!@PQ5H@rOZW2hHiL+JmSVCN4!IOOgJ z#~66^pD%9L8R8kB0~13rLUu#+M(|ks>Dx9CJHa~>4>7v;yOe5AJ>cf8_qiSTHmFzL zotI-Zc{!$?%)wq`+R6f6o_?lNUSrT&=>5W==rY)O{v~H$&bu1QYfQ$M&AR|~41An8 zg6leA!yNU$J&s*n`!-AANff z>sWv-A{)IS8JVyMe~aXaYy}qQZhhDhvn_lh*bsY-(}C?b@l7a?p4NI%7qKqPyOMUy znLq49%58QYQ(MyNPuixVj7XMc~DREk1 z`RrqS3id_NuylY*Xr%rgc@Q5VY$H!yeMkfD?wGuy- ztc{Hi@l1K^t%4BR{!lRlaoP zM2zvfoY*sSe~V}rn!T6tC_ZQeXCq5x2Lkre2UYaEu^h7@MG3T%-Qv{xwb5*=w1r|pGClMiefOqEdxWwMZOSnoZ7Ts6c3h^f0Q{9 z8%J3CwHD>g5w2#Uhk#GYaq7at@ND4m-c=qN1MhxJ8Obg8&!sn;U-!d*m`mQv_8E58 z;f@LafUVY{583gAlkz*dH~_sBKgF6a0%rFxe%Fo@hgOP!$078i@&p)41`<1E=Jc97 zC-IToP*~^Yh6Ce#U_65RJGl$sseIsk`c~ibHm~VDK8L{1Z{D+_uPk&Y5L6m;Aeu6VN$=ca`QE;jP4tj6K&3Np!b>DOT-}_#)*{goC z*-K3S0kQvXAB;1xk54{hkHPJ?5PUX!Q0mmsp4kr}$Mk+F{dw^yaee+Y*hAw(f}Jlg z=S2Fp{qsHaJsfxo#-iIIV9fZ~Z;^lLE_fMs@Cu;2EM&5^~w zO&H%Ec$hby0Ul!FOqDB4xQ&eHyodWr6a%F_>GWFg54@D!NNe`hf7fqkznLJXjC}#R z+UOkz>(}W2|fI#o1W%d;rTxUpXuvu&gPo)KG@IhK~5N)nIB?Ib`EKc;~Rf+ zXpONH;s=+W6qhZ4ay#)qzxf}WHASxGPvCr{_$2Rw6D|=e!no&q#|``v^9M_xNz4a6 zTye6%P5dASIfou|!nKh~MriM15kKL@b3bJy?{|c(6Pkd z@0?kyM#^~c*`}|)>$L(LHFzQWhJzdE|Hj_b%-ovAJD87|AGD}7EPfH(VLV<~B#!68 zpx!i}NM9RG{ME(Jzs2TQo$lN0wJJQV&Ot{@+T_9#oR6Sa~9$LKwC73Yf$0Nx^XY5b>*O}I0Uc9LmFdrh~UX|xmSr=5l5 zu!=Ij7<0%sb0mL*r(TeHRzLL~AL=>F;Ebu)`g-gTp@emI}@ zjNcdhGkifY_3qlsHz>Yi@RIct50`E7cdWnbA2c`!jfxJm_lq-5c;rO!*N@YdXkam8 zZLuN~7vC^d_LzM|zq9$M%1AdBPKmGT)9gK=1JOVpcZwK3BpWR{tNKv;UnK(A%W*tf zio&zY-3QR%FZi{0JRK(fvA4W3@jR1_Y_67!&7W+AgWMCBrL&`sZWDz@1p7E}N`X&G zZq0p@STff8$Zh`WcJ#1xU(nps(vB`>;>*Aj+3l3Ox6z6Fj1Y^}$Nu8C`Lhdi?LC4X zIG+Hvf@k;nlxgBgmp`Acur!?nMOvRS3DR(hs; z3U{HmwP0uImW}9=PoV3^!0|=UP0Pb}E{f(Up|Je7$vlhCusC-E-HDIzKAF8#&EK7$ zr1K%o=t1(`NET1yd!`eEtNtYK4u7fdS(k5+licJJnIG(QX~)((Y#+%~c&BtiU=@~} z6U{3gE3!1$c?bR?o#`-p2x8t#vHy&dO$Qksr))W8jm|^apB_XH8b@7~7Y#F~7QQR* zz*6RA&I(h$ZA5U-t`S4_WZh2OA#-h}-{{#;_#oqOVVS$80=V_SQaK8|I4^f!+6)E%nsdKUBSW!Cd4;^+=DkCxlfVdz)$RlHRUU!!c^?{F7o!&qd~`?kKS zJRjn#t#gSfWuA??>lh#HsiD@n=q>nbAHc7^`L1gD(sl0JZ8HWejSU^X`Jc2YS<)(5 zLc5K*)+Fz`9KvU(*iM~em5edAF0GC9EXKJ16=-}EW72pjr~QCpvEKb-*On~ZsraW* zI19V5+qd!>T^P?E#F^h2V4H1nkPg_>JVQEHu=AhZHaeZ1yWl?hxu1WndwI{9As;+X zYbu>CTG;o@&^hi&7)ZN`<7(?hz^4`y<5o_Ln{1}# z#JHUY&hjnF56Ze3-8B^+wr+z}A{(!Z8^*@~oOH*I&i3x)-U{itt>DQz_Qfijabu`y z5BE$7&eBN-(lTTK4;=oz$wbReRk6RN}&gi

94>$FVBBMf z&&BpUwtyJjF~sQNN76m>CKk5_9^mEsnxlcGhyS<2|BoOm+N_MaBh+*IH?%^0rtKd} zuKS_Jkk34TS0lQX^gfk61uPBx{7=>&9=c&`l-zq7cbstxUUk${Ia7~3th#5wz}P9b z1O4(v!BF$s9145yvp${QJJz}p9KB?$HFUc`duP^6bmGosyBl*oNAUF5Rnni%=-cZ? ze7yJ@{hM)JZNoio$_DGds`2mJH#XF7 zpP5c$Z3kMNQP~f)pBra&-;vFEjIeZ@jEsJC$Z@RGcziRrL$mB#U;m%v>qEc!H1IO> z@$C10o_=|K($!aO`%_>0oa_Pe!PSPGn9+z;?aJlp4^}qmo*?0Y?7Zg=U`NdrKgRwG z?HfC4ChLb$G$P}*yZnBWg6W+n;#|Ioj& zH^Me;@D7@(k=>SZM(3ekE%P(;$anNw?AmH;1ZQJH$e$Rp$j7IVSJba0FGTWKYjZ_p zaJ6DyqQFW0XCj~7b7&RBbdTWPX4%XYlcRA<|CtHwl}md)K2GK7oH01`?2(WaP?-*R z;>HScCGuRn``8Bi`Dx}+>siZ6a#)xgpXe&HujVYkTB~~YU~;EqS*EWy7Wk^4BKL*L z99f_{A(QJ4p}TQ@tP}Zaa<#rb&Fb{F`Jx9uwlhA>rx?75v(}mT2N$9<%T6l0sm{I$ zmIwcDo_}-JqSv~3X%+m+Nx-jS&z{cgKg#X=LbJvS$NIm|G+My=7GYl_uD;p7y1r?- z8}mQdJ{NyKc*6c8#vV5|N4Q|e{3|bqo71wQCMdqq`T9U;1AVdrKau>eqq35)frP@R z@U<1=mtt?<87pAFjo#l<1m5vkgnnE^{x`sN#pukmqx&$M_M@+Ze=4W8&3=b=Mc3P*7uo!5pRQ%jE$_#l8=;K|@8!>32VZpS z$EjaN-8{?EJw3n!n;m_8S9wo`m|ROchfmzTFXCi zubUP3+Oll%WZk*5mh}-_N8;zke}1wNf0g{c+F!`mt5~{9)^Q5{z6X)5;)^34KWXKP zU_kAj;@ykH6jU%zjrA+kjlOLK_NQB4o=TlE>g>pJ@&E%z#a0bxZG-6QYCi-YG5t`^ z;LKgCo?FY7Bf9 z0j@vdbHC*?aR|h00~gL$qU_cZb0$iZhUnf@xc}B z2S;J!Yy{7a5?`&D^x?!vz0Tbt$v!(KUA%aS*{frJrytRZd>MmmIAwfDHX zl60eksl8>q>}$|Ow}0%?_O#XYA1&*v|2$2bm$Rp3)j&V^M#ZE2;AE+EV0?iVv?QNZ z5wyAhd=gzIEwBQ*XE=#{OrG@>*$~1DCI?GutQ#hZr^z-a`+#_f{-@$g)|$LXERk$& z*|eF>eZ^|aqA!c~r&w0;0cbx+To(4Rl5FBo&=E=$S7h<$>Sue5J-#Qtt_z;-o?+G* zpRR4#t+ohPpRB(fSTHtnDc@X8T!`_bDFms0apuckYifV`;$>1Pv+RN3vm1Z$bkmr@HNVgFWfV6!uu-lK@#8qW z2t2vILU4c&F^|2%lT2`I9dkT2$hYz|bGwK81B6pibc{mYDW5=`b=Ue|fcLtxE3zdN z=%w>erw|?Dp4A1<)vo^EC%22gt2}!0O)*bILNas_`Gs{ zYCO6t{xEgy`)fjhUEo6-dtk{%gAbvhMmDy5bp6B_`fvONoe`BUP&PXF6ZS{VPw_1A z7dXeqGuUO!z<0r=i0J?kqx|lkZTpYR-Man++XOw)sBb0evh&Rw=(^ z5j-iMJpZz7u9I&IK3{?TavL_uIQAsk#ID78F!;$5_y}}&!o={g1{FiCYT2C?7i-{- zyfVHn%HK@v=z?@?#^A|1_|~c9VP950Na+`4+K(~5X5`tHHN;sUlh>kiNY~VJ=@5Qw z3k~cu=T3|HRu@f<0}tr8)MnUensEg{g2h}PPW3^ zvaIil-gGWX{xaoPciR+vG|z%3xu2ajR6oYpk?khu|3TR*8Jotu^_%wH4cW9Ixn}aG ztaj|*Dq~=rS@#=q|EnFCtBGxwJ}Uk4)4w+Qr7btH_nX*uU|`3u+dkLt#;DwuL{ACAfv+cYIwie*@P-vO2n z1%u&-Qio1@hrPqo+#~reH2B}#H~y+G7(VNJvi?=+aWe(ihLKdA1Rr$Z%YIm5px zCD{2MzJWnWgQ_;Kw5qR83YL5-$@Y0&on)1~N7+q*V9Bwu-P z0ZeJKbE2{ufwQ8orN}vWX)|rViJTqucfk^^)k<{X71q#6w>&$r`c~=n#9HuN2td~K`^KLc{lUE`5o>l<70lh^DumVV!3E4AucW7zr_i_W!noC$?b)8-l3 zu^pN(x)FZ>&)l`p9eRUOIgbcT4X%-ceG~U^5o>gZ@OrZ~s7mi|d%Ch|Xwuc@EbJ}( zeuV#X!cAcFKCm7tSSJlKXJH3XS9`ZjoVDA=S-b7n6^1?;d~O0d-SbIzR&RQ6#pKM{ zoWVmrY<}>O$(wvbkFVgI-M#0#?$DU0;7g1AN%^*rTaHcP+wiv#xRQ+A&|daBGjHf? zBmNfVylAp7a0pt93wDFBB|&dBlvf+3PB0i)G&4Ei#j|hS04%`4p8x~JloF$8$BmK? zYF*dTNx}gWlXTR^R}-^M{HtW?e(X(aiLKsowPLuf&i|r~2yoEeDnt?I+qd*SJU~^84}|-y$sg=Gfo;AaW=)2$Cht@3ENjxmnjB=$r}df0 z`NvrtV>Iy9>V5 z0AGqc3_pc8y<_vH&61J*@undLZ}Bg~8=~-qI6O(d>385u??OA`Q}4mAM0=u%qxA2> z@>>S3LkwKM$#==NNokj`mFF;~TzLFA+eRMrC&;Os5bx=KTqwNqiuZ$S>c6_UufCT- z+gBo=WKW*OeSlXK|0MklUHsRJ99_>Ea`Bw72KCtVWm~cW@P?9i;S_XFUQdV!RHCu=V*_jI7{h!wfM_y9>V!X)~98y9WN{T zAXi+c`ZhMeWyJ2`ziOR>e+~SWF0`GxIU%2kw~^g@czM?r>0?GWp)JXPMBQZYDn~cD zJwZ3Y#;N^pD{b3;LEApVod9p9uN_*QN-l&^U1^izb8VW9ldonSI;`$*YGmIgTaL<1 zr;N@ZX-|sJ(D}qSWu+ZIl5T}HX8D*k-anRgZ4rHcE7id@XAFt923H^2nUsKMjy@Ek z4a@U)CHj!o|NpT5MlbXDUml{5E5$eaJdkI9&%RxFG6Eb??CYXb@jYxk!WHbdr{N9S z|7+bB!s|FA(pk=4AU4A)IsO4Td8Hep`$@lb{S#lr&ukIf6Ppn#k!?dh2H};?5-Bzg zo2`9*Nc2d%#utLE>(IaGEEqIMTe98DHUi(SQchwY`n-8Y-K$-E8L#osFYotKSLXl> zZ2Gaqd!J`vF9H7G8MYSs$ir4rVEK!u!o#gB+N1A0^E{<0Ph$lq#4mfTF}m*fgtgt} zS<~+Iyg~GR`TRZ7IZqY2_LLl(wxI{bQkeT9(7|HhpYr!KLr;dbSu^N!pY{aU2#tJN z$G9DP{)r0Uy_9v-nX4|*{ZQ7D^%L!DJ(AO`eXY>6^837m?y9wrJ$@;6$u8%vMClXC zRfqmz^YN{fP2}gPlHBXoGl_}V@oGYRBV&w;H?Wqi(3XjFq#tai*sxaB%O<~G{oFwA zT;#d*9j&YSQC!oy7b=?$pvy|WclU$8`KinF13YN|tM!tHU8Sje8mQmgWOUZe=3F!T zW5rAupI~`U9Pne%mHL*QvhZ7u&T8O{&dNL%eFvS@nUmmsH|=X4$?%YEAv=agHlJPC zmx+luu?zdMbOt>;jJ?*_yRo}vP+l<&*u6Om<}>FD(s@>ErPozr2NAD5%$~VcIXEa^ z%h?0*#umzpzgF;W8~f=7bjt2ELGO2CPTf8DWY2h8fWNE1#2EWa>}#d>>CA!K#>lVt zZ6nvyhUVM=Z%)+Dcb34L!O4r|c=}w5E0djlWE#9;poM=Gykp;}J>!>reROcJ|;{0PfFC7ZnDg5pGS8b7l8 zPV_GivvrOf?>sr*(BJ*x%T0W}hd+-OP9)XcLw_xNmwiNQDSO&I*zapOpJCg`Wb;p{ zo55Z|pRNp4{*A8W%rEOK>HgKel|h{;rM~-KydIxhz`q>Zsx{QaAj{U+44uT`2QBam z?yfQCJmsJM`vaUO;vV&w;*F5UQS>F*d0ODZiq(X^CqZ)oXnH~fxTvoJY~2y!tS#_7 zi}6LrGk4}xM2-T@10F|?(NI$%b{>0fcFc#qBR{H_FwaJKffM@^SV9b9D{Ux8(rCp} zQ3iWX*qlM9?=+tkXyo(M25Y5{`Kqkyw$YzkHcDTz6Gt>oGajoh2Uu!9iM+!vgUyNO z7IiY6?;+^ZD@S_C0|%GutiHIsk$!}~ZhYy+(U-PI$POcaZFAa__5WDt*dapPvpt8k zSPIPNLO1zIJ$cV5AAguNfIo=;%P*+2>nXr*46%#3H`_j}RQ&E6klo6ITL;f|a!ip| zFthGD;^D+=-Ls?}wDmf$n6lAYIqKTATMr1v;y>t38(GH;_7JjNjX-Z)hd=n#QETM@ zhbJip^$0Q5vuY}v#wc&{y;G{CKXvH%7 zXxSVd*lC}=bL)>{Jdt9}_y2x;fY#F3*5>!=$j-eO7{}2& z%h=~e^PxrNJ_^4hb`7&nddaMpZBu!VSjl+4g9Gpi;d}ddY?%&yU_&LZEdCL2S-9fr z0A~M>e3L9VgMNGqISzluKK~Z>%pG&E$rH=BBP74#z`9oIwG+c3x^D!JGA(lHkbf*P z2OfofQmcOFa<p=+_$5+3}7!^Me<$wA}?^BEo#P@M4mW%oboe^HkTq_G#);Y zt+GF*R_%~Xywi^PRa@WJJo#;8;i6EWBH4E$1YTrbYn|Ip-lcWqoIHY!r7d(-b@Q?% z=dtGy&IpCwK09bn?Ysibn^?3-*lXYP=pXkXdu20YUA;E5 zdC9ry~KI`8D- z+*H3EgOG@GqG|D8wKJNz>CW|K;9QuomoxV^;#FQGp78*m>nSJRXmYGmwhjDTN?8jy zDyR7w#xNaRDTQB*y>8>yS&A3s8FDgkoU#Kc`(Ny<|K5-PB?0$)@lo`FFLqHTjXA(G zqeF=2xYGSN{PJHG_9Opk?~3I=IGgxU3xN)wp|)HihXV^vPEsnZnlcgQrbqI&ueA> zXOG`s_ivu|TiKVX59P{_D0W193)zAVfTw z{M;iOtdgntvxi&3l00j5{cv<-@eP}=IW!PR9PCAod^hod<~)C9_uX(=@X6u8P5UVEAcIfKf&s-*K~E>j;H~HvEAM6R znZLcqZ2boO!mcvkdT&cU?+bZn(VoTwoUp|v8UL&cAL;NbJaGAm7aqumkA`^Q zf$pq*y&Wsmb3Zcq7pg{p8_M%g2TqNk%st?w_BH4nCF1vsfsJ(S4`{#QF69!jsw#k` zX#4*OynfglUPJy0cx8Fu<-Olvqk-2ayYWZ9*LA?bGfH7g$#Dt=L?} z!*eN{PFXvjWvHYJo~4+NTzF18{6o)|@qHuTm7j^cqMe+nGWip_>Bg}uDgWP0{@whe zr;UunuJ7x~aVfjL^8R%ZHw3SkmyQj2+?TA^ipin3lzm4gw&mfh<+A0=CZmU#oS!o; zpf|FH2G5+nBD5|0cy1cJ55A!9BlzBn2DOKRM=IV~`1a<99y-)s3ZAJvGT#9gEdGqX zU2gmTIzA&D{8%?kyNcmgk6WG1tKcK0$jSZk`K_)mEpT*g@()Lgc=tGXx)gqojuxYi zvA8_EHzLcsx?DIEb%TSE%o&{Dw_9uN;yiN)}#a-r%!&mBep&wNe z_bc5Co56%yXhc4r<;2;K#HW~~{`jqRJk5G5&-zo0tCq9MwZX~N+9R}0<6HylI6GxP zRm-3O?6XSicMY<0&M1#!Gy9E>0(A5F$RgG%ZDXiJIZ~hUou8DR!n~kG>6wxX!YS-< zovtpInq>2cKA0qh)fGUo0)-M4gMniza1QD2hPHkbjFDM zsBWIidax#fW$S$UodLWGZ28iTT+C!&W9*gd(T~d|EBxr4=*LD!N~z1`e7ME_Q#Nb8 zTMWOcg$FN2jIqwxq z5om!HTPbstPqXi2KI(S~>wFY=sSfK_lH#*USDlXe4DTnyl~H?q~F86IN*iurby*(ie>0KN10cQ^-)=pI&BGWjITnt^QdeG z=+5Aia?Ghe?N5>^C%&rleVUK#D79vvlTwV)Wu9y$%UHX1^!L_PoB^Y}c!Fq5@;#qi z#u{rIWip^+&LCB_LB~t2(UU4@SM~3&lNqNSlY+=R%~%3%5jriusdVIE|kt0#3;nqnN;E?L8j1!n0^gbfs}? z?m<6&QgJiXJGv&3PZDt;CF;|UCeQ2J#et))%bIEP z{fogf@^~ohgEuq-FX?ALXU`Y8&-fv#1xL&H4D6Un?e*GMajp}Z>Hse?xtrnXv)m z7U%>%R^0;aD8}tlcp^U90)Azp8$9T=?b3_ju5p+?pqIDRK0HA*rRS}TNqkT_9J}d^ zwGfYMWSzv%Wb>DPIGyK)XNq=tH%fLOUBK2g;rX$IB8m(7YsXuQd_IhP z-UZ)ArsLBHKHG&qQ1V&4RPxuBz3@uravyv2O@p~-f%`6q59sXjU1ee-u43N5;P=;j zR_A`!A`P4uk2QRfJ!D&g9btOcS;u~F^EG#m;hxd@+@C#qAGU#Y&N;R#^AD`9|Js-O z+6Qi?%`3GJ*!S!8*yqiDj{ITwfS1j;Tb;6*=b;~z0Xy*=*`8(qf5kmZ*Xq`@9UrA^ zmoaQ-Et72BK(gn=ZtmJpeq_$+wcM##l;kR7@6vuA8-6xES=r^4Lwqgyl4XAm?VV%35MA;gDW8YUh}hiDg{+nQ zvq8%_!{UxRp5Uz>xC(Mwk28BALdvmxVO18@=Mw}Nn8KP zyxwMBvD83I3^_Q&7w~;7)HLM**Vi!6-v9g({|iU>?zP`J6n;ZJN(wZWFNT88rbpM$#t87 z8*rT<9yba;d&KN_9;-*U4V$wuj3LVSG$zvrvbl|Z+9@wz!{y2-2ILK5o>4j`>|ie1 z-!_tOBb9UPy02$uAQ)C2hXe5bqx3((r~93P_4qi#@>BoF$$e3w+%aa{y2HtixqJ&> zgA0>s&{3$Hc5IlKyCq}O1M2g1(&UN4^+sYw8&hwXG~GXR;!E_0e?6S~*-#U{d*Zci z*=64ol~OnBFTm!0a4Zo9%-z6%wmX1_?61csb1u^GBK+%q_z?Gg-p=^DO0VBj1N?6~ z{@xbf&DNX7H~u4VWIz9E`w(%jz*h9~3V5OU$~S)SWyd!Ttc^~`8vLtgzOJp=;Jkwa zF03kd_V}3Xx!CY}+Ec$jc)73)0!u3amM!;NVV&P!r#O`Ebr=AhK51gQ4If#ItY^F? zr#14i5xi1NwCa zm*e-rcfhj>a5o-6Z~rCZrtcL$w4SfYXCC>MIrl8z#=(TM^D6t*pOTl4w#?koz1chN z)B4C~mqxA=-E}qd`;|@F$EG=WZtiF$H%hK@djFuZX_Rb7$gD^Vc-+W7bCT6VlGbHjtF2VoPGNzFKLvch0R4#fhrM-7-U;5(UJLJk%DY~5wXW2O&sSZ4-S>I##h-TO zevG-x9-?}uDd)W(aVNCm&ixp3m(5diA2m3=O0j}&UpDPA4rlJ)(im9>Lwl3J%RBMO z5r5Sjn;uxJJr-+|gWXYkV119l+q0igjzi%odOSLk&*wY7pV*59@DrWM)*TPn=E7a2 z*Y4>my^jBnb2c-zuJ)LRr@sVF?cyJw;_dgJb$I>g>gI3r>{Y8%XGHSR(PQ9foPI;} z`E_so?@{gt{IjM}=S~OWK&nU2?~w`H;R*O5s>DBCnXriSIkKmiHRE}M@`X;ZIzPzw zSHECcLq9zG={+A7Sto`OLnr;DnQ;sc;pb)?G0H1Xwdi{%`+V6Q4`Gwg*>Kqq9`cT_ zn6W*~Kk!`Yef}uV9%p{wP>^~Hyzf@=uC(Xf7rpPwdAFW-z#<6GY5lwhW>vgL6U{sLS~l^22gsReuMNKi*ZG`zWxccy z&qfAhPvAE?m~;ZO4h!I6ti%7u+q=M5Rh@bN`{d*bC|Fe5f=wVGAZ^uxLI&r}Ndh8Z zixykj*Ukh92pDJ3GA&XrIgk*LU?o6bIyi3$U_jz{Y1Fo-w!Ka;~|c zNNqdDTJ!(@*4{hWIRs?>pZ|aSd@$#nz4p31>$yMAdY1HqPkGn*BI`I{uf^33q$kvS z)^hmh`D=M4iX3CE+SeHKG_sWM?s&t4zSZE2>WJ0dE7M1K!d5|9{t_xR|c=KmF`+ zWN8!sY}++ZAfK^v%@oJhnUpU4^+oWqW1L^8Antb$pDo~@HUSvJE9=lr0^sLdd>i36 zZQf!5SK#@A_~TqYi$~&zIblt(Y6Ew`3ol}e%s>Z8;Bz@69Zx<|-(}_P#I>7|#b4&! z)n0U-SMevFMrYGp%4x5-OZ#jq^bYvhF%y3hZB;9;N7o#HuDQzGH=0|DA z&>7zEAa6%^K%n4Uz?b*? za%#q2MqPYg{|+C1Aw3_)Sikf7f2s{1+e2(*D107!_V<52-+#_cfaUJ4A88@QqQ4^;vpV~{r6!*f< znyqDx_-I4QdG7A(dh~*}uI=%B>A>hB&?vm~`6PZ0`FS>ozhPH?PJfwCSoqE}@xv%{ zP+vdXiNBKZrDMA1RBNCyGY;}7?^#FQ@!8Oe^S+)hUgn(tm<;XvMelCCEjy=JXLb+4 zvjs2JEEeD9$EIzHbc%=P!vIm6)ixHWgx0@d$RIN!Vu zc+^|vjjT1Kn$&JhnuJJn5WiF`!1zi>-m(AKNNc}-!xuu%n(hS+7IdKxGXJ}dp${tF zgnxuRqSm zq0wDZgsv*aGmEToC-}3Xi@vbC#hhk!**_R|d zo!kV&Giqsfywl+qetSR9;}=7qH~59_VM>-jZ_|js!#iI4Qy;uz2=aX>c$&+4ONjGf zyO67TY3KK$-%RM&j;mS5f2DDLz&Mw}Kh9O!=l37Z7Z15`{U+6~>nfDLcU9xOIp}f| zjemhU8aG_HhLh^c8vJo;#g4Z+7u*JZ0^)X~cUbM#@+B_$h=#3Jd zTi4)E=DB2XHGax_hgvsPBLh#vYtC>FY39`*OkB&pNX|$e{qfsImf;`f&UE27{KXw# z=P+X(Rzbxb=>>+KC!lAsCu#U8^#1Rz#@1x43}PFyccaWlw${BrETRr6`P@JBv40s2 z2PXNK-}?c31<$Maz_Mi=Ym9*ZQOWUaJxa+E;rN{$pe`@KxU46VKXnH?c10dMb1sXYPi7VuLS$ z?`pry_{=BDnoay3I)Sc32du1eAHGMs&rJIKUgKkpcAt7r?G=NOkH-Bj+IBzdSp+&1 zY;>kXd@2m>EMTk!s(r*h4aARabQC@toH1|@G=AYnJ#e4To)No#W4_rl&fxNWKKxQN zFFk(#EhWq6vyWz9IyhGgPK2R5GY{ZZhO8*-zL%$>k$0E7ds+ru^5rjQUYgJ3M32vd zbJLyji>NQ`MpIweTcb(!Lv1>>d4}o|)xj4NM~(gPtnp`-fK$@dCbB+wi)*tihvp$G``tUIM5|@oITf|C zZ+7D>%B$T24V9tyW`I{_Z=D#4^4v?%SM=UI{G{?p>-=>IXZYgChR9&6^IzlO&S0B2 zbmI;@LvfhcQ0Qz3bq|mOdCbKko@VjB1z!4yZ4Uonwc@vS?xP!*$%5bYr|+S*teN12 z=}>%El5d{>)Nc`M%p)gJcAn{<^(fa-bP`|<@G280(jDj-;;0VWrvce8Ya{puea7x+{O$OpVG5$e$Nk&jIM^8RQA)*A9OT`GZ_# zj?Wfb&zU5LA13isZ~2;zQyuk})d-1>(m?uzPOB&nx~eo^mT|5^q`v z?`R#i`c$^hSCd`jubsBiD##?)Ugve9FH#?YnDRz+UDbhi_1$%EI`veThh)(@YB1~U zr`jj3$7cw9*HYJ3d@X(e{y@7UKclWKpH-hG$=r<2bVsT`dBcu2=&TKYvhE1c`9SyH z(QNdiZ0s8Oy$=HSe?Rix_RMRnXPbjxtWChrO`S!F&19s?!diroTGH#2nb? zJFwrG$2nbe!1=&=ExfEa;D?T^+I(OgKyGQTy}Z-QH}Cr|H{PD2dkODzZQTFP`yPHW zG|2DNSV+PDOR>*{Z%>17sruF5(*LFMmmHHH+jsp~6N`tg;`#PDIps{nM{5nr{mE#U zNK8?B1a?d)GCB|nYah_#=ONEZp~c0(P`vCq9KlCntu5#WC9GtU)%HQ(p%F~6% z${&L#bXn;}SAKP z_{+PXH~0WNVRLcd3fqod$Xd};O--r0#T$qX(mq;l^IZ96jnDQi@=ut%{9gJE976U6 z8pR9Z6N8~$tTPPEBlM^If*9`?4zeD+pR)@sFyx-u@vnow0^9Cw{sTz;`d$Kbr-z3KL{QW@Jp7twy@vWE8qRI zYfIVRyYWTzJeYk(UdpBk{vm~?B|C?he1-1(Y02}8`CEi5KL=M*>3KSRUkW{+YjWz{ znltiO_2g#@My23Q8E{(2d{1G2zv=i`;2~EDKgT=xY312AQz`oi&y6-Avv}X&r+hMH z!U5-Qb9i_aaykYcOOECK*xDvMR~v&*r;sJ|GnHB}5k4yyG6vjbGpU|?8GJbk4pw15 zO@R+f&Z)h4NNOGZyq|u&JjqO@fCpI_L$%%?=OE3dkMUnn};8S7;g*j z4afdCxUuOx_(HAV(2+$(GOtHyD(kBSwQ#MboS(7_%k^?Hq6ctDu!J$+7P4YaYJE)V^M%FLy4&mnGZ{ZN6hi>HB2zC(RkW z+0;MtOaF6dwaJ#XHGgtw)%o5{s{_GbWEj4{knum9^Ux|hKAO*(Mh8RJJG@?M=%vcv zS7)D3uYX7XmqM@N2W=OTzf*y|a7%j3H15HY9upsX!{=zrn9RY+jdRBMq&f83KX~lulzkKL z)?Vp9BcDrb{&#$=&dza*Q%dvSf(VOm-Ul^EXa2BKmeQ79dir}MBc*{KO zB)9)s{73HR`>^ZOk76py`uHW9(lcbyN;ZbIS>p(kgCL&{XQCPVum6c(nlVq)H#mAz82Hu^^GY%Y z*)eV6ZNNEs1AL1)J;7M}=wmVelGejJ1XJWOc4&U4|(i|#xZwo{iVv(7SKIEk2`Qw z9}(J*gx7cX0X}NHS<~!3OdGyOX=n6N#v*UOdwySGe%)}8yaf&c`X7G@aA<}XxNs=$ zJRc4}@xVcM$eD4NOCJ3X?W=$Is29#pd-`8{?)?6Lh!fVr5f2w|4OaGT5FWq_{IhS&u+%l^({yscjHW=f6>rOWpcet(JqK|az zw;uaTHjRlN0&8m9byn8}I&bA1x`|c6Pr}@vE#F0K3I6j;-FHo{DL!EM`x|>RKA70L z48I3wwA>m9%6TQ;e3xqnwZNATvnNH^RKl6>AAE0n%P{LbV-w93KjYuhK<5VU@6zAr z@b7wXiM?|5&!NEbG0q6dPAmSagG@c$jOz1hBb}qZeCjwL#+8QG(vRxIjmAf%afP#j znR0@Y=)sAJ{TnbwzF;%Gt1H4g#Bu=r}}F5lZUEYPwb{EwGPcUPiIQdfy_GL zf#O3ODtpf%7h56*U$kYKefRUY2WnHYi)`#S_ren;UudVk;^U!v#%hJfsEy*2i-}uCfcFUYvJCuEU4b_Gm`oh9 z(C6=%E8if`b+&DNCv=_CUxI$zKAY&v+)u(hE6A0UpHTC7O8ZSaa%`zHgnz-GcAe}k z6Gze-$Dm&^H{D+sX3x-BUYJiGviZF9QjISS9pTCtzq@sEym(aY@UudENgKgI#ojrS zMqUv(1kIfWHyf_zci>_4CE%trujQNx8v~rh`*QI4jHQ0BNdE6c?h;GI&xM^NwQ+Eci6OImS0M&a*K4FbTNT@myyE6*Kn_ zGPXTFINR=S;(PZy%u_Tqj(2jv>&3*a3#s>{oMYu;&L=lndn|gDPwzTv$KD29jsF?A z8a@YH7h!9((vNf`(d!rad)s#cTV}8iGkpG<8RSDu$*}AkdiJS;eNxj>KuJe@83#52>B-SkE2trj`0Zpmqhw9>} zhRbUofZyPs_E|cGa5N5n8vLG2eH!+>13W#-m?NTdA`~_Ph2a)+wDt_YvO4KU+ow%()Bv z{nRqBbI#H^^CRDC6?qW417#kxD_rXD)H0aAc)qD+Pz*0pErTj*8IV&o;h_2kU*^L% zRLf8NA%oxCdIs++w+Xnap22&3{sOr9gtKqmxm3s*=3L%>vg@wt z>D=ER=<^-^%Es6ajw+6IoPM6--@C#`_J1rn8;eqF2r#@oJy z)$gR}N`s-zA>iHkVCXf^9dVbcFa2cJ`TEjS#`q+CDGweo7d*9)J>b*}ifg68(|X0X znw(mhcmuB_cl;dP@}Dq}x|Wd)L<|-<&y5Fag@T z8(M`%s=%=r{zdn^z)L)9U1I6XZ|!mN5Y)a68Q%;JHsI5^kF|8LXO-vy?by2QWmaep z&rBUb_BnxX|W1RDS5O~=Q?9M3*! zZJRp|IgW3-LeO2|!&*1$9tYI%}yO;SNWWEXH zWi~la*{lgaWk@=^e&bw3XS@_R&|mg11ItZ6lc9HWzC?H7D!-q)5We7+KR0@OVt2#C zG;h{3m0XI_+nqdqt%>({Q}ZuM8`nQ~>c_lWPF@UiGkI#OM5{RsFJrIgaM$Qq=9Qc0 z|8)*$v=mRc4qwB}YgV5sC$?BlY_Z=et6;J8wmF=G1_m?k?D6lB!+&nZ6>H3Sl9_8b zv&S3^tjzd1%%50KiR5ywscR4$)qAdyLCm$3xz15uU2ek@%vH6%u!%#vv6}_Ydn8-w zxAuA6p-PMx*t)RVO&u+*Rqy^Y?`r)9$2NmU=##z99PqC9%)th9+3X^_R)@|U^n*94 zR>zpj`qgCRu&?aB<@?}fjkR0%ea;Sq%=rh#TJ4ObXY<&D=n~ezbDg))J)qjNhuJgD z$H1K05P~r>)#M;%PBk?gdY_?Tye@PAoux_E?cBlnU~{HM@0oG5uYwih%Xj{F&b}tV zpXLpmbH=xkFnf$Ga!1b|o#xC>Gk2~kMthtXtqUXdtMfTGu;=a=dN$AaQIvniSs-+q z5{)wpTGTk4m3P;qcd}WR&Ll+oM^% z_o$jZy4bmp#6sZB_!@777nj(NtC+W$GiR;gAJp|&wx#)&>8Gv*PTuwI)_dAN2d-JX z=Y4+IeeU3B*R#FxOl`Gqx_h-5JW}poUuUCCpY&0OZ%+GUbX8)_(wz#2+p*>x=+4;b z#G1t~ULw{UhG%Gf5uFp!{8|;(_>YHwG%=3*OnYaZd*JnA zU(Y>w`W(+CH$I$=KH-7`fof_9=V%$F8==yPOiE1meW>0)${=zWn9$<@Gn|`;+9gs}Ho9dS^Z7;UlLw%Z5Cf zddsSx4|FBQp2uosMXmIJ-*rMSJO=U zX4>yXJ~q!yt4*M*n6p1C16yS`U%Li*j=#>wGufI&dC0ze>T;lOj^H=h*z>SWRl{38 zi|*gBXCt}xZ^PYpsUs&Fkyy?05eLaj)92CDUW6`2P=`l26hRj%X6$0}dPbm68eb4G zXXz!~{-^Qe66RW=7`m1AW~_H_#*^EZ3oW2mJ%?^)Isduv8#_R{%x8LHpRx(iGg{DD zBFJ6Y^<5L~T+uggcXP|R>l1iJ3Yp(%jY-Ut_e{)F{v-H0F%;}6yT-HLH~s-^2N!q4 z6P+9~;-y-P@D*97Ga z4VR7|2ox~hghFZy$TyDf<#qXZ@;_UB@*eg;daHiZxtJKgtsytSjqiW>qOl8JH~u92 zS0>MfeQE*55%{`%#*cubZlAlacI<)@={eZISid(+kr*f)2-E*=kG)%a)jDAixMj{Yu%p3XI8nDhJl|HS$IrmWuQ_umIL zUBXu%{MFYP?eFW14fJ)!2m3k`%m{}IQp5|Z@2;70lncJa6mS?d?e9a`Wjq>u9MsFBXnV%$xA$HbtY?wqhnX^ z#7B7#@+g)+y+HQ>${!NG!28q?xl;P_{zt5BdB`TMBfd1y+1FUoyTd%!S|W@;lH8w9 zdgr@(XJAoh9eKhr-ZSgNE*Xjc&eY4rk5UC)B^gs|o0w(CvA)RPp1H`L@4fE1-nnEI zv3J1a(Lm=oV%>S@Z9VUv53@UYS3a(0&Z}jrPLp&9cU{c&&!0t?r$3zsZ9-pQtmhSL z(;SU&6nT>jl3RqV>9R6AM4w^kN;KI@n>6Qd7+I~pMQ4iNt{+-`@`#mHlVF~*LlXET z4&|lQwyXz#fQ_L&=F$8*_K4=Q9-Lx6AM!oH-zNA%_dJ2eeBwnGel>TksW2MCI;AfN zA6oE7XgFRWpaYkW6c2Owh-WS3)RT7S7iQh5b9@(A8Gj@5h~v|1C62wpnsl>tjwHJO z?E8FTWd<+tEo;5<4~g%#u>Qzw*~`QP`&z%&;937<&-&MnIDh@)yz8gm)b&5j`ZW*5 zVD;C`k#?e!YW64bDeDEDE!aDV_$p(|zdMh)t+lKd)&d{#nK6P9>-@!Ah8{imfZy1| zE5h`q?DwfwZPrS=+B zQz0E1vhfxlyxwO&5B-|65X4S|lkyQ%GPbwPfBuJwoxY&HC69ipc~4s#%7aJQ?chP+ zcGKn7HuwAU(Eio5Gx*Cplls^{?Q`B-_Sv(CFVF13;oUc$zlT5nfd_~CfPwC%d*O{?=rURkZ6Ze$laa6V1@=$)CVUb7o1Df{Tei%F-)91kYng-SJYRiu zzw2*E%q0)PdC#1$0Y}s>#(O>O(i?uZm{<;d+w#g88ycF?&+#+RM;-5orli*jPr6oe zCKI{*;rl&$o6#+rvW(7_xl1{t*wEl(VwTmJNgkuA>5q+l`bzFTz}MTKdAB0B6SLrv zcjLdg3cv1^eCM-j<+z`Z)nTLXy_x(~owwgh9WQTREr0F0Oa4yLqnCatYJ8V$Tjege zx}Q0NM_z>L&APgun-`%PBC>TQQ{w2jT4ymi3#t()(xpVZefvo;$ir7s*t2N0i;4BCeeTXi6bZM>n} z)_UaPKJ?*MQ-5w%Bk*0Wcx1HBPhB%VwHk=0`E;I0`TpQ?I{E>Bf5~5$4%WfTDmmM$ z^}n)+ykvNX(Kpbc&^Io+ZfZpj2{T9WXZ0(7tT?)AKgeH~h5lYhtf?QoZ8Y;e#(a}` z;0p7yHNbUgpmQm8i}cq$6E(_RC%R)dudWo#!GB=? zDXp_i_(mN(`f%p1Gf(IO*`{u3`|Myyagdq##1sq40q(_omdp|Uwy}m!F~9CQ<{RvL zFAlQi1kY3l>Mde3L-|L&#f~ugk!n!gPY$c*YQ`<29c@*&N%A)BGK;xnHnfjh8+v(z zuOPFQc-#_;Sa4UH?)OpSlyOwo?|O8f_t2{brg5j`W&HgNe2jNmfzesoWaE2W z^h?f2A>$4bKb8E6;=eL6UG_=v|K4n1&iqBQN!lG7Y3mG$CHC61F0JDXYt@|J-Ok;9 z^sjM+2gc{i*d6qJj&y78KF4$2Z+I$?{2=_gH?3N=b!pmFHH*@?Ukm#G6Lw@PezmK7S8e>W?k>EBb^5NX z`4jOy#c-Ca1*e!>i~nlyyuZPT?)g(Y(Vf5MeonBc(7XpWL@O-dkoWcFd zv2rVPR_pPBm&Af9oO?l+QXg_Ds9-+E3D2K{RrMI{wtuB6{a4* zP{E#g7(Xv`y&k>4oIIc9<=}h={R$@S!YyQ^ z>foC8)KoZTjiD}ezlQ1H`&i$18>fTkYOCMcSfk=y9nAlJ=C2qSzR%@~QEDBUzs_o! zwbC}sev1BeX6KCkw;=ZrbrG>6H-LBgeG#w{PL2e|QQAnhd`6#%k(gX!#=D>OY(O4m zv%i{);=y_kfBUo9cV1O%Xac|7rau)I+%F$L&sF=4^T%edBlP>DE0N#$t)tv;r1@#T z1v9g6+Use~zGxl5d7nD&!3o+9=ZhsR2Wh%axZeVjS3H+5FC zsLd7JvJZG0UJ5-`Q8!g}BG)nZdTQ{lgGUMoa)D7(-fZ{EYHh zxe)6P+BJEl%S+Y?$0S?yS-dY!P2TnF=@ZOBvOP&X*CaK0jh-O<1D?&~FEq2?w^Eb0 z%c;qmKsFr9JGR5(9PK-j*?d<`UcIN!s>vJo=QXUOCa>&@FgljzQ^kB-87%p`lX(6( z`3iueWaWBrI%%zFTn`*12R{RhqyxxqTE|*XTNxc|;OC~k9`?sNY|M4|91d{itj76W zc5*hqOD~gO;|XklG03HZ`Su*@e-;R>`-b=z@DW_-=XSMc?#9g zSwfBoG`4n@)wepZs`xjC~6-H?yC#i758Ndog_8apXW(196R^MV*0cWW%H29eA)Hh}_OD3h5k- z{?$`EML9DI*yFt`16vO%ZjUT1q^`g&t8z!n-Sm%qKsUV!-Q`*N@XDxp=;(FNnmd=K zSDU=Zu8L1{cIGqu`z&>+{0;t}8k_uC=%NJ7;=M@Y`$1B=o0} zFnPu`@KWZgJcA(r{_qn|AE#*hCjZa{OpL+k;hDATZZkH~v+_Bvz16W#*iY9-acHCQ zn;N|)Jee9)P3gUAP^~1N&(xq|4kO5ui9Cut<9&0U30Y$26b0b9{)Sh*^LdQ9>}2lj zLx8y+^FG_dvwb{czxC{(_t}#?dxn4P(^tH(c#hwG%D>6nXX$PKBEKErA8;{oM6H`O zO!KTeZN~X_*%I_#;iCFWwJlng<41?q^0@EQ;E#9&>ri}Y)CZ1FN56qj1=OOF%@_kd zRbgLk4EV%pTgSRKGS3)$S;ZNtSO;@FYtPebvtHxOQ}*A2J8k<-x|O>>-(-JUgujfX z-^8mmr-lFO#B=zp=fzjLG+@X3rU}1UgUi3lh;zqjx0iU`G4PrC(4EI2?OZ41$$a*xD=I&lYlSW3JqXKaGw-)Ip7uI z1q-mHWVFff&9~)+z!FO`BV&rDcCr9gX{>I>=^DmI2Wu7@XTF!a?TK7DE zYK~S6Kh%8XXqkEXj2@oKuRhN_4P2;!RZYGC_GhDVUyM&kumd*)yGHoB>PSz8pX)F)HYw!h;ug5&^ zAr4#|`yuD}>;CZjW4>*&rMQRKUIY8r7tj66U&tF`Zq>}q#5b{Hbl1go=!m7h?DFAe zUb)y(y1y{Hd>6LTXZS38a0ziX@p}C}gLW??`(`2&?;{6v26f&)kDM+?hbiZCg|A<^ zk9S|r!{0j`*@2v%VV(`3t=jP${ca?mNcT@1!FIp)VeEG+y&ON_T{}NdJ}!FUY5vaT zuY8_1y?x%$+x#1>%~gSn+8A^v`V1cI?YsG3(|TYws?ec5gWtA~;fugDb>EWk8H4lk zBQWkR@K`us#`h@pj(ESmOE)m>gxlB-I?LTc+e+ft^O4O}e_XvKi9NyH(yFhvTzM%Y z<@2ZA3EJuW_UOmqo6yjF=tMDs3+Y6UvR@mq0iNXF8FWTqSMZLlzZVF`lJnY+c5>35 z0**7V0ZXT+pNpU`l=J!BZ&~lX%Dpr%Q_rS?-w)IN#NzTvGkpC|=)LQJ|4!Zu)2H&a zs+1SSIQqPX&)RRr05s=g=pv=q*E8t58GRXDy zH@SAI@zIK2bDA+<1}|=-o%H16;E#!?qf>S9O!#(|`RoOb%^!Ski}?6nU?}}*pKNP* zhh&Rv9O;R&=elhna6Z)*68$|1j(1u8%V#{(W$d41nMJ-P?=rUPj2XWUZR8WHXCCpb z*p|?jtv_cqyvbRd0J@RvN$H(?Sx2+<6R@630TdlE`XUZYy zhmJoD{jq&3_sFm&^Bnr%&lq3+_|ZS;BCnl$Z_?pAT?;4fg>SjMW!=QyyygDQefUj*vEk3G;p~Ux zRT`dn*?By%m1i3mmpUonX77B=4b(G_@tgcYk}3Do<`MAmAJD_kqQ}U_`aZdu2dJ07 z0s4NI-_H6kZ&1zrq2%?w#lO=&_$0oZGjrgvJZqu92=;EtyWlAMpK5a$JJ7K=&dlMy z2KsEJzfFw0347;^kGKS|P#?+@edo-3=Kiw|{#vXVgiNWp8WUB zMYJV8{s^#^Kd2cWmvB$@9x|0HfPYIgk}O#p>Pok6Ob*()<5+;)XL#Ms%p-&OiiX`< zs`bO{`!$Q1@0;L@YAkErRi=^cO>M}0ft=BU`d=w31O!N{T^7InDb>65AVoNtlyZ*{ieA8ZGQJIa(x{<((J zk=}9k=wRq=2z+EHJZUnym-*oBX!sgFzIO1qqpYal<`3)~ic5>fKh*dsV4fO}-^I9> z5|7t;*ZtHb@Yb^tyhg!Wx~9p0hYhN@gEdJMq8oBj+!6uxdx{BR*4~ zW1;Fv@yyuEymxGy?E|sxVDcwNVc*N%pN3t{oqK94J+qbXPrxVF!ly^z=UWHOlH1;~ zh!`k$H`dB`xr;mfhFe!~m!Pl1LM|nMeUd$hjkZDs$gkLF_%U!z0$+5=TIn@u^jC~; zIEw$hg#Ja(!Ylbd53?5KUgTQ-@>h^W2a)|jbmzb=+$+dC_&j>m%Ml-Wi@X=D-^B&( z@x7iseiFQ~od2|c=SuAQ6pM!o#)EruV9KDKCFs*jv7eTqKfez>>O3ocwX3JNIWQy5 zowyO?p7LavYi*SG6l094E%%q%H`e$w1*IC=NCiM}A*W3wA zq(iNPm&7Mqox9oRJ;*JSlh5XbfI*b`UUT+UoRPh6?S*WZmRZN8u1p5nailjziO?KQl{ zUH1r+AKKs8lOs=f&e(eP{NKUJ1oy^HqpgV{0iP!N(OKCe{B`?^!;1#fhZkRt@~-=Q zQyn$nbFii1bM9}lYjo!G$LxiBo=$sS72wRpc;O-b7v*P6WZvjsvZsI2XzXe51$%lX zea)gBbJDYCyw7IyY!3g%vv1_FyK<)3gFmC@o{vBGz0%cd)@HswW^iCGdE9FXO|w>$Grm%jwse9 zIitJh%z2zEs9VV1-zHz|WyD>Ua&H-wF|$p{G&&>pQdVM#$(bS|83b{x6efeM3>TME_(y-5$#5X zVngxHn(VB{%J?h2Y6-Sq3>;g>`1o+;6Ap!kI`@t{IgBmfbsDhznU94T_HGWi#JqqpP51=0Amo8pIcc$_j!BJ=~ zI*a=G=uYB45%SXi<-32~E_!SMA0yKO$OYg8O-F&ZY}bXncLd%WrEOf#%zIf4=;GTW zz*F~Q98}z#ccg1x%URhl{h0n{QxEDC_2y_Ne@z*E>5QhyR}!o_6C|JET;7-8N_MYX z^Y%&Pg^@?RV{};Ba>q-}TE0h+9~wh-(l`8&db{)w9Pl;civm8TmIyQ$fR|eE(lC2x z_6yl3e(KJT9FJ{+r`z7;y{YZJZ7$U3ycqeCspDj^uKpJJUY0peBz(9(6(0sWHDE=2 z{O97s!>s?~fj#%zZl>KG>{}oU*s}k7+5c31?I!xZRQj8a&*bBQJ@vs33#QOi3-GXW zW$klRW(=pUhxC4(lUbLoyw{BKmzksZ;R3Ta8Jz86pQ+~+MVC_j<$wMsa1`1T?LTLu5oIXZOJyOcYf{Fe24(wbZwTQq-CDZi%y-^ikQlc-g9Vjg~% zDDQaZEn1Y{CBF?G1HAP)kI%Ut-O}J5aC`N1Z$9L$e`fUeD?fq%>>;+Z4}N?a9wa=W z2Ii_F_v}5ngYY8pj|hAt3eSw9vltzd_To9B{{_%|Voxx%4?3oPB{-B-z7|`4AADT8 zz3xTS{kRA6{11{>ahH75yMTXJp8s6NXShG+;QAe+@4d(ee32&-1F&b$tUT3(uifTL z=?ww+SrA{P_q9Tk0B;Sf9iDN7v;0Ok zMIS*oeZA`7;My4SsHL(e|N0Bin{*(|4k1fUjoPAo~ofk&ja>`5S6|=u4+9U-=1aqPS^S zAAChTbZ81LyLFzv41Kute{ue~s`2aKu9ue7Z~XU{&Oh6z7xD4H9{ol7iEv(ejEOaa zx3cT!abJkZpQC2>7rtZbBw=t^zM42XO9uEUoRt1j&E9A)T7Z|)Rp3|A{wo`&X%B!+ z27GHB@RgkD&mM@MnKd{%iu5DZNq(HY7VS~bdwU%5J=n(7`VmjTwLqh}I z-#JSnT=723cAkkJ=)Ik^>6V+$I=b7VXW{eTmb%Vfcrh4QGB@qt57@tO7W3=R{00V) zxdG!R+3JxIE`BUF@^4tT{%LdyXr)DbjJ+(;nt_Atf13~3=Rbg9ZPP)~yzXAqU5Kis zktu&V_ANTj6kv}(Te{3boqeVKq6xxV{Ne1KX@d`~>91YS$FAqQaD?x_Wv_Hjy9NCy zc0Ke4oaKj5Eu~)TWu14Ytn)-4>l&N}HJ4sy}R7x4-o%?Mxfm>i$0iPkjGnx=;R=qEmaY@%IFMwbC_97$+fphW@^L zfj$z@5_T-_ujc*YQ)Qm_-SG#PvNwIKXE!!!HhKJJ-i)Dr6r7Fxb=pUv!~FHuHqo!_ zlC>l8O{BER{ko@*G4%0%mrZBDZyWWG^zIJ!cq(h~?o}#Y{Q7sj@qZQX2;a|@IQ1jR z=elV9w7acN`CH;;=<^G)vC8pBF0tj6EAxYej$g?dbK#n5$WqmEGWtCGfIiq6o5S8x zPbyw+=jtSuu)pA*{$7i(NVd#T;Nr^9eGgQhj3GlZXrtehE1UgbwYjfCwV9;vyzumU z+Yh-lcHq6rxs~nWt;=*4b8CS^#;<`B{58L^2I6A2-nG!?r*2#AzuN7t#@2vVjGj^Au}#=pdruwP z1R9lWfY-|wC66|+6?^H#(E+xs7F=DQcD>{__^lXve{@LMRr19h7N2GfLFO#Jp2Z&E zUwa|W+B6r@;otlKytZiaS7|avc)6!OB@(v(O-Y)cA#bKCfA-$(4Xrg7r*~Z z3ckDi-uT6VtLqmp?1Mjkl78?N@Z9W6rDbeJjrY5^FI_*#Ns%ujz;UAk1KXqAr7D|X z8hcDE!kjI}FMcBHGVWd+lvQ&8U!D)$Upx#u>868uPW^TA2YmRGFV}t{H+1(&6xpZz zB-vXxYM&&Jv8SWRjxyex4{xio?E3`Fdi=H=>%}{ep<3Tj)|VBwH((|fa9)YJx7q8-(tA|vfZ^pn``RmDD>v#g2z#sP27J=WB z@!7B7ALlGP4q`hgA4F^YN|L#Af-Bqd!~d&p!4tpMA5~ zGaq|4+*)n+TKumPI=1)N-|)cSIrk*HwKh{|Mf*6rk9neB7(00veJMUU+?mHf`j<~+ z1oMIRPs|&TR+Bb}+UUSu^Q3nAR`B*jUpEfqV@vPk#xX?#F*kT)HzMIf2e4efTi3mNiGI^PzJ_ zg#q4$Pwqe$Wd4a7&QT1r9t=Pu(xnwg&>11KpG`J?dq0bZ8~y|?dUFHSueIxAo6ep0 zj-js!J{m)J@9OR*#jM)K=&V3ac>^|8w+|j1H@OJtKBL)R#qN`LD0jg6c9J~y_41#S zU#PlC+Q-u)tq1iz$vkFo4ue|Rq0Afnwbc0U)NieMhjz5$=Wp}-u4_XcN`A)3t&l#h z`D?!aUPlcCaQGPcL|RuXxS#9uogujx1kR!!hiL1aZOB@R2YuYJqo~+yP*$ zxwk>9L<{c=0U{pBNepK{wq# znC|^I{I5scFhTBbf^#~}z{TDF4d1TrKL4WM%=wq4)#eUe*;LY3g$wSv7vaWV zj&MejTrO89TLxa_0sr3n%>CuLMFoPL+EoKLgA$0*%BSiYV4cHPWbpVHIUI{P|CN1cQmudS!Vlbc zBE<8g18Ob5VC}ikT>|`)-DJz|K;vGYHPOa#Y)1MPkCncj;Jstmjq2;0F0MN;h=K=( zZ;B_zL zFTb!)oA$bAOtBP`lO{cU4f*UDx!4OkfeG=0_wiSa{UCdSXZ`><7gKJ=>x@PkZKUv{4H>G9-W z!jBGt6K2n#RrmhN5u8O%Blj=@zDA(&G;$9O|9xBh#Cq^4WSWoqaC$a^+(YfBK5H-i z)QOYN)lZ!`y;De?IIGUlMae((k-O)%j{rY&25z!Px18zJE^vHU;aOG)8hc$a({y?>=el9luA5A>Of6LlD zgIvbjs6|)d_|r=kmre5f{3purrz_Vi`=c&oH0RM6N4lka=(D2WBD_JLZ|Ae*ii@ie z*(BiWhyU4wuaSX)&ZnI{bK$ukp6=Z*(Wmk()YmBXZK@?dTY5tjnvBCs?K8IihHnWD z(BE9}uLWK@;-Ig#1l$rWR^=Vs5%ycx4Tmq0zj7`J9?rF_h5$I12RtIsmu00j+*b8q#5ce%DKf62QJa4(umJv(PD7XP{H$w`UVdgWbo32Vdtjz@h3iKMS!>ksjF zECDC5ON+pXR^*I{U*Bott6)I=3v-V^8|%thXBC9e<65I@3Y1eN-nW+f;w8rnpN6N2 zukPQ;odn3d9BNb*a#m3FnZn7U0^d~NM2$1WP>R#jYKEi3=A}D%H;%09-apX-YmWi* z_#Ueuu}^o5ey*Xq4>-hte|%4nHh}`^LoPgAe@fe@w8s~yNB<<_+>O0Yj*TxPc=Ah= z9k~`9cVWK?ZH@l{JoKSc%a-as*CY8ueUT)3yXue0KbD&T%=nBy4c)-ka9|L)#NT~a z+J6tg!_DsxD8G;AEig~A)y(mWZ1Zew|x9xb^;`a`-?=A2IHxDQP9CS~Z>}wZqrWCK^%(=ftco@cS zDP3N^+vThNy8RyTbtv?rTCTnTcmoY-UR%6ll`zgU{;{|Aoi4IF(;7zgF;;p|=iAR8 z>+dyI@tTv0OGjT!p$X=sIsY^M48d1-mQC{qI>RnqRN8d$w=PaO-}}O;+xoz%^&XsZ z`Txc6N&CB&{Y}NED=rbAgs*MJp6b!R#FwOJ*s*!RpLqL0(PMh~M)>}eJjLZ#!SA_$ z23kB!E_E@qSVhcr-p5@N*Rm&)xAFsZ$B!Ib-wnMV;-Bmz_)&rU5u^FrWu+N?A`N}w zGTxIsQ5=3P`h@ELwW3dCqfewQo;RtB-{&!pti=l_ksE5_^YgH4RU7OS@C(Clyzo#i zvGj>a%E4k>eZGm$xyZuqeQ|V)=$jroAK14&HQn4V)8l`Wy*HJbGI9KcuI{G0BBS8_ zRK;9akC~67cj>$l{x)+jWErwRHpc+kC(MKKxp@cqT!jo*eQ2G9Hn4Ye5&6Zd*b^Hz=?yi&TK2v2XS!|vi9Ela{RHL- zc-H)nx$i1>inJd_8tthVLfE2%lYD&U_h5 z`qQU@w~_Poue>AtQ#PG>+JBq&u1-+`@0{!MPA3N8J`3>7N_i$dMRSg^M;gcfGV|__ ztU^bK^4mP^qchg+tSP8`S7epuYH$mDilcYz1*eY?@W7L zd!3A(>CqYgyZgK3w-?aG#Gf4=^S$5n=F#FYqoBP@l9$lePbQr&FQ?MyrRZNqzcad5 zkAGEoHR=XphN^uBj)-@;`5?Cv!*#uMU6n^19K;P5iwz&G5{_#5aWF zneayL3P-;pAAmDzsuP6nTyPY-m6(Ic@@tcimvTR}E7MJW9XyuYi_UnHuRwd$g3O6zt!&&c zKEVDcKgaN6&T{y<%T05PKzq9t`+*;xCf^_o4Ajm%12%`nJ9s9Z{$H!%-8`4vGQ5}P z>E!Cf>0<#t&|Yyh);ahkJMJi0&Sj4kn~ydX6;#$aeh5eBNR`zluG?hW-+NQwA$p22 zhj>$<;6;y2>!z=i_?kC&Rl1P$Laq04t(ARk(O$DY;gf3Yfs4qZK;tj8R_D2L+;#)c zVxF}xcIY$Jm*(u>_fqET#@F2WO-E<+`hUFh!@pwlM8>OQEX~c}CG+^zCye{8lyQ|G zB)oC|^UC`+?ojzedH-5ZK4;EE$40YmxUi3c_LAG$YsqfO+dc3F@gg|?zeAd9gD~n3#TVpN2?@^zQy-loGc|Webe*~PD zUS@y)USlgXC)?V^|0ejGyvvL2gGzD@cJ=^f!x z^{~MH4I_*8SB)v&zjv6m|A~>l{g01H+b`Nt-=*xCXy;PalcaB*6P8XV|KnoD?;@_) zj=!)CUO6^{+FVy~w@nc>pM6?KX2VG4dn>udN%F1i+!uetpX-esOl=U)ox9MY^my?i z`Dz|!KPAiMqlr{kpB#aWB>C+6XqKx+H1D{+2*VF~F8@c8Jgin=rE@=;?~nL*hh!aiO1rT{S{}*H(@tbFTQtDA^utD z@~(#$FP=mVoD=urhds_ay1Pg=(R<42pnrXShtGm>&3}Ayj);7CKlu0FJXJj87W#H+ zLw{ZRyr?~ke17%j^X2p3(f_5&=bRM(ulS9Z2S}#s%)7yLhsWTL3(W_1Rq5$9Q^?J% z0vF{QZ$gKPBFAKVxV%bwt#Gpn{2>-mK8`rNVD*bdf8E|8cxE97`Xd({e)W|U*l3@; z@L1eWyrM^+aP1+J(~53U^)qAuIUI^_%Km#Ax+8zntVyzE>cNcKpF{go{m?)2I&=^` z!+&dhDBxHfI<%n|;T!E0Z>(jmuDzpkc}6$>MWAyExg=^E>A$M+kIcbi z&XaPsojz0#K|TUK)AttmjNbD}PZ2H9r}SO<&gDmLdxSdw(4BdPZ!u@{$9Ar`<{v(P z{>{er(Ai)7K+YP>eCZ=|`z6Mc9ewfLQy$!Oe0RIp0~a5sU&y~MIS)Kb#A~I~u@3n( z66p4ag%1uqMZ3~*N(WdE-iK_&P76&1m#R7M+B~VC_UNJolVn55w&!5#whVNzI60`Y zSHxeHVV8q9M6=U%3;e%XWQiJh_ukulrqENmoqd{@U{jb=XX_Y^wVlro?21?KZ` zO8%@%57MclORdnzU{0-UeffJt%aI!75PHQFovq@`88|yZ=fr}N@4!;~HrL>)oeLrz z$qTo9_EIq`?eV;DPwwpm@PDrCM`We=_I#cpn}7v1RayJqJgZAFJxg$I^a|8E-3*jNaHVxQ{H;PvGv!{Ble6Aq5Q1b7~ zpXA8Jn^OAitGrTwX{6{x%6w}Z_jxu`P7Dk5Avx+ z@_hxa4|x$f$U&p?70K2yd0@k{eKi*6D1;}9^Lu4N_q@u`yWl0UarWGPd(y*C$^txN z?c=cbFEGEH6#BCDHThS31!bJ0F2kM@e;^LJU1#*_(D(bKBh3TY{5)lR*xiCvAO;?8NF|_^uFC2&)56@vKk#3IE=^(o*aQaE7_que(l4DB^TDk z$NuIbdYFr!*q_3WFQwpz!OtPg{{r~=N&47*;Dy0QPrR!0jZ4?ZrW<{%N4|LNY1z=y zDUKmmlE6TB2qfOJ3RJ_$_R(e;e^UG{?)4zwL-Z>gk_=s^{RD?3lMP;>ml=Kfbf6%{ zKB9lx^S*#QYGn=HoLlMJq9gY|m%ofniI3#t4>5iaYf^3HqOuQ=30J0L7ge$r#f<#Y zftXhr{uTGkqSnIM6mw>=TaG*Mtb{)*E+YP3hHmf1MoRI+$j9P`U+T=FWR!9#M!-)L zA897Hs+lv3O^eF9&nzD1%;G%!NEbV^_-Ey!FqZWE_xUWIZg|~b^h-x)-Q~h&aFE{u zoxfy!7ar3ul&^BP_#^&5;30mfbw%zbmlGP1ji&Xyg6}^HADz$qt2hTWl7HQPd*D^Y z{wl5^n{^ERn0i}$uS7PMaW+ryjr!(>lShkx@`t@E(;sX8X#UnCA61=5qy^E#uk&&KDaPSGtKfSjdl$#wU(deYi_O-|z8+h&;Dd$8 z`Xh@*eL!x{5HCMYS3V4D(_J9g0NpYziA)pTsy3~OL%I6TP+M-??!vS`c!D1Kuk`EU zn*O@*<&1qVdq6r*?3Aw{{wBG4@T0W`M%1naMgyqxY3dHa>ss(lNk>YIM@Py-M>2Yg z@>e+z{IIPf#nF!vr-}-MgTh_E14<2~4tx?AvZ zC?@BW@u(Wv?zdhZESzqY5H@{Zhg{d^B|zg=bnv6;{&auF(g0}PH& z$+2oPXjfzP-&pRe;CJi6DH$7gDCT${G@!EwzXo2?F$CM#n?(iq;X?D_0n&f&;N2v= zbRV$McawAb`9Nq|PWH_@LnZnv6Aqz&9D#1Cpc`m+Qha=nI}gd10=MAvb(Xhsi0vn@qj+}E2W!2L;2*RNsLns=Q%)O_+#)wYy8)ZulC-Qf=)4^=uu>Y4)ZH0_Ig-_pZ>M1ECT zH_u9Im<~MMnrY%$iZh63ouwX0x6Ug$fG!@}%ARev_0D0h_m-C?7O@q1wLMVq2JgE3 z%dV&K+3xe5UCI@KFOhTK*|k$SDJvUaxe;8#h687aaTeA_z$?+IUH^a>C+`RjQQG_G zVn4vkRAa{M4gTdPpu2kZSUh?We(?pYS#jZG?9oek#5hKpb10qJJj>+S-mq1>D=1qn zvw_@v`pIhO0uRl1{Ec0-k*>ImJY4za1$+6ib%r*AUR5kU$^1n3UwVc6jE2~;Mztkp z;RQWg#Jlo)l;qj6yh8qZ=yfOK2!F8em6zAq0{$2uDgE~oozee1PyZ(m**<-A0n=7} zqC1!|W;tUNVPk5{na+3dx6%o~ka6b6bneKyd2TwkF!+oO77Dy%pKTezU7EwKG}1V% z<=Tr6k<9_WC(c@F)5#;JoH(5G-Ng&(mpfkT!2|HCTZXy&e^Gssz5fk+pQ=wTpwCP7 z?;SV(vL1a>_S6XIe*ReM1Xu;eHz4^gdWmrM``U*-HhyaDoxcCC1^Bh#*M?6VgqM?h z?qko=zz=^I|1+?azoU@-6Tdkiex>j1AM()jTgo%x2yH@!E_qgHp0Uptd}eUr0`JLB z0X-k_!SC>^u`mA2;+H2;ThhB2fU;3MSc(26@-+a%fi>SY0y>Jh*0bYNTd~IqgUaxlUU)6*>j4TlS zPho8NkM5z)tJ>JRjH&m%`6K ze@}goQSh9*Ipbu`B5!eWW|^C@8=3o6E8zRUSoVWEha&i59=`KF=fK?a7<*}7V;kPn zGj^tD?6u!Nf9yYh@6yK}eG)%F3QT&@t>ZttF$I?;tMNT{^J?$@UzA_7-}kZKsr>d^(97WqOOWA9k40+zqe=^@pSa8Xo+2$ zI2WC?gSvq;xhqDsiaR=j*bTaO+}}{jo!sW{WtOR9TzZ-F{R(K@jEA3&xm5hbx%&%U z;~=oq+~waDee3y&?{c;t`0GAmmu78xwey)&k4ERdO#U|OJwabRhLq~F2kO8c|z%XV>eW#j)D z4}aOCee>C|Ea5fkUu`5+0f;Af()NQBtI1jDb-{#(Sb2btB-@v$S&fE`iw@w%y zFp@sp{=&=H1L#LQL-bOOysYLO^o!0T|7vv}5DjWBz)A2}53Q?R_({c8p$GaF9MopO zRQSNM^MAkj9`g3suMfAT(nz{p6R*MwH8Ea-zI69?HZ+n+y{Mz&AHV>e{iNWeF^2wx z@j2sm5TA_ZQ*wi^R&5l&T}RCuZ0p+U307zUI1vRVW`D6QCUf{qyI?Gp3g3cuviTAXVKQKIl`?Tn< z{3&b_pLmL|VaiiB?EaDbH7^eBVQkd}b?04$K6C_JOwaRE|1q$<-dbt$zSd!*#Ab4S zlf41|Lt1~dA{eUv18|;IQ~(Snn7v{B+W#nf5_^Wdd=6NabG8J0NLDgOKDPmnV3moiFg0%OVA1H6fEQP$@u1T0ytMYco1QX|9vwx6)p$QfTi%P8J#WD zZ~a8;kuUot*7F25{!4dZ6YB4Tl7cb(J;wbzG2k29W8c4XWRkt6mN~>#b>@mal3(U; zYKfK8m-u^lPcS4ulfH}o!VB@yA~SY#|ElJKUH?M#QSuX@-_|l}q0lzLU)6Lwj=p-F zds$UqKKX>PmGSSfSF~xGL@f;V&#WJq#-PpH!7aUOXa~LaCEuipYDd0_iS4&8q&6SE zr7Yt58CR^|VPLPhbEi*?KJvDFygkYL=58)|3Hub*J4d~iFbL;XG~n9}ZI{j@A}{8hlH6Myyk0$>gu#NjRL z3VLY3&@l5$2fz0JJv0uSz5DV5`KOk#7tGOz%^sm&c<=L3;2=I1e}?-Y=<{CiL3&4G zk3L%=*_xW`gmL7g3SW`4#*a(?arRSso&4Tvvjp06;dOWr?N$IU+8Dn%?VG@H(WH2( z_C@_gR7-e?;A)?3*Zb22mu29I=38Np|LL##wrS3#;-lDM!k;s&SNE-{?OB6Exeb$q zi)F#keCnpJ#XoB1120&K9Fe>V4kIs*=dy`o`>aqUZ6xy}?2Fp&z}|>yZOar-$*4hA z7R1=wDvLSdU)Gq9SOZQxMSj>*oTEE{ekgmJoiiC1a&D(z0w zF1+2&uQ2OoOpW)cAAG!BW4Z5ZUGKsNUz^IBI2$TBy*8D7W{pwp5oyO1H1j=M84Pv#E;qjQ@7G!(<>GFJUI%@@ zsGtkJ^y-fv-Er1GsNqp~?(Lj4+*CBl#4aA4%3XGXRmSBtXD++E<`Hyk!Bzch?Sf16 zIjz43R%ah0zQ(%erCSr;Wp3~3UX8B>L;pzM=a{#ALGSYSoVjl!7&^s%EL|Pg`kXbm zW@%cWU@7!@?=9>zxmOE8P_&Jf|NGq%R*Yy9^ZS7V7UjAy*qLVdRLz+Bkx zPIqX*;Anb7EwB%7ML*!(X5`GZt}JFA^F&{w8?|NZYT8Qg6CSwz6}z;>bMfC*ra$Ur zI`Aq+54UMbeAULYe{%Nwlh;9e`i(KaciE@GUk`?!1D+b+|0U!Tw6vaawC9_a2MR`} zfv1(=2RQ!>xZlCwo$PZfG#UYhHh&;r6g{jRK51ZEiY@1}wq?JKzL1v> zd;wd6_XL;7Lg>ViMS5=A-nJY{LoU7ZeejXrO4%W#Uc5hiIeT92&;~N+0Q2sK3H{w>SudOp!e^be6uWyTnF~%Q?naNp zhkw-BL!-mPw=_l}`0)>Cy6(z^4~>S8>D;95jBDo3xFor0$2gaNH@bIZy%idbopT#! zH>p`f-QVDH#eb7agQ2OM2XV*NJjE}YzlC17-pP4nA0*E&Cht4o@$aI)lv1Fz@K?5?TV-*tS@Ng4d&Ji;78%~Jg*%g>#Tfjp z+?QT6(`SYJ*eg+VvvTN2c1zn*bV6(wFN`D9ZPnf`5>9MK{<2?^yIR+q+xU&oE!$Ze z^NRj7z}n$4&|xJs+gc7ST_rk{&my}ashBvvDSeM}ufQ>#eS8X)QPl7H|srPCxBnN`%iO^0$1#-2XoMU?i=**jtw3f7ms-f zo{-I+p77B6z0ms01FVqZ;Ys#M{i+}J@hZRRyY$@=d{!K&je1tH)y7`IIRI=--9

e2?xpga2y= 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 !fS%#Xx4CZ@GG+xFPPNi%b|W^ z_7#az>{y;vOlKkXc!G9wr)QiZZ)?^_o^P@y*S@%@Y*H&{psK!rdo9Ly<(thX$4KMX zIj%bxzjBb?r2psm)86XM!2F=)53&xpbO(8M+jFd?S})rK9%O469KtK&3(3$Ba$kOg z|?W(6I58ueC9zHC3pJQ$=|!1@uXv;H}j14tyS<$1<$b0 z9oo@e!0d)!6PLPVId*C{8FwK&RW@q=y%)Aom(b29vrq5d`JJQZ+o#9x`DFHKs^YWl zFQU`W^}Dpg{*|r@V>8Gu*@n-2KrsPySroX%u<*s4jyQtui?$T|kbmxzFN&NpeK`KPp6#kP?EJWog6S*F zJ(SIOdNH1UjAtO@8O&M<__I9!T=BSfHC+{Gt-^+rUmfldhKhDUo>u@^y!Pf-oG~rC~9<6t(&9gT$XK2S_-e%0i`}d~L`C}Nn zpb?&w-70%`3vh^(`h%tLPYBtqe#6)R!}=22=GiFv8hE}o4_YP;Ks?AklTz32My7}s z?6#_QibnOW+KAGo@o{PM0Q=Ln;nT48VQ{n`dQx1#w1HmlY$L;_bKdFF4ss!mZeh-^ zEr8~$Sch7P91$EuqfT7nwFS`gLTK5pOM_pg`^-Ujt)@@YA2|Jc{i&~vJZjgV?-JOB zb?`(CdBgm7YyQ#;XZdaH3&C+VaKpxt9S{Hp%Dc+N2Z^cnbGNx@KUM5>_O+?1oX7Tp zhcDh_{50YV#1e?1$d@sAF!&UX(rRCaHX_()n!o(y#*5b+&PNxiUjt*{y=ateqpN+v zWHq$-addF}j|r)~vL)&9@dnrAKh*$nnF*>UbnaGKHZ?a?20)&-DGhMpp`u^Bk0 zF+P^~FS@IvFP@K~qgX?_7X2{c1;&t5+_$y|c6JdpAdj&ZSZf9D^&{ZS{ciD$7ZxFS zzRPdN_J|DC+^s_4>s}B3BSSSNf8j4YvQ0AFmEVt<_-Uv7HZcHb_W|~cWdLV*$DC_m z`s}73A{BOjbG`jlu)a!PZu>7%bH^K>C3Ye|?6q?EVC8St9In7$mF^baEpnAiKPzq8 zTMo_}`4eqi&U&rMvF8(eq!QYhl?e^><-Kj-bq_vC1RPiJeH3)oj9(I8G=EYR*Y}~L zqKhgf)m!O@Dp(s=9Ca0PxAECEhvhG;?+|nL_AP&63x84LPbl{?t%0?=LfL}qJHzQa zK!5Uw%JHG(bB>_zYWiM{Pc%n<67XHIsC?2sEA3D@ed{cg{by3fw)6I9;t=>U-&)DJ zF?@c5PvKhMziz%~n(trZyU}wF-i2?U2mV{S@%tF^|Gn^cVPF4S8}@>2I`e;2bLCI= z{z&Gj{Q}s^z&gv!H_MrC6LUN&SogMJjnB9?$2Zydj0V>5fBNEzNsSJyg|qFzx-@9_ zC*HB)?X1x|xZXOYOO7U3FO-{4wnD#Ym~ zMCo6+mQ8;le2doh@z+UfF1{~JYvtrZ3*TN^n2MrO=n-$7M=ixWVulg;|ZiY5G#^va$@Ic8DAuKea!NV+7XKvogsc_*5&oi+w`eeo@87CTU7D9W{tsVU(ad`b1bX! z3Su2Ez>B#rTc`5*u6&re)W3L!oF}h5are>9?FOeHaB|^u1N?ig-zA;C6LuOgB67}v z5<%J*;8km4p7r_)lv~tb*Ez;y27c0<9viJI{FHS>;S9uK}HvG=9ru)@V9%0(Guw zdczLRtNhCso%}V~(>ycWoPDZuU{ohDx8ce!oZG0r^g_Wy79A%^B80F#_3d#$1sNTpNoH+zdPfT(!V2+OEK}P@QW-O zLG9ZA~#R zJ+mCyohutg4Wi?a;~;^yaF2<{Z)b$EtgZ*YC;jokAwe z(pp~>|EE4D^UyYIx^33yYwLTbA1X%%t>ii4$HB+7evcm$BR*b*9qh-K39yGJKA!sW z;3o^uGE{Gv_YqS_AOxkiQO1JxV{r=w}78rX(Y+Ca-r|jo}5C<`_3;haG-6 z&{ggTe^Wg8bLGvcQaj)Bh5_P!-IPbM8Q{+y%{@#y@T&8LpYszJm~Y=7q|v+neYz3wD>sD|G6d+tqj?m6`E)O_e?HP`l|bHngSjJWpO zrM}unEUW*AC%*XDhZWZA&jXha^R3tO*uQ(}bQ6bo%ETcgW6?vQ)4=@?ZzzqZ3 zUXtvUzU=RP9$Bn)_XzY-!uU%v?mc3B;6P4oU{U#*Oz*R$JUh*K7Q0X~xYpapjohEv z+18u0t*7P{%?x6{{nT$&9$ww?>=?7&tvFgpI-VMn(r;nrxa!X)r{F2^-acSZYEhHs z4xT}dnRp4f`9AVV?}bI<{1#qhGYO|>E4szb$WstM)!*&bD6)UMF%u)x@}UXji)ibK zA9a;&(R^@@3?k;xA>&;6_ObFE+DbrM-R1iaY5$YPQ*JQ!(fRx?*=}Su>wva=&uzGC zGW!_dd&Nnb*yE!*HAV(74$-f4!1s7YYczUa&vwtJ*YoquGj1MESN$jW%=f_Oj}A-( zk5i5P?0l*0v{`RA4(OUMH9id*OG}1J)7Zrl`H>D+wGPC_WtL zOAa@DcrkqF!$v594}I`q&)O($7(V3r)L36K^*;8)GyFy2j zZ{L{$)vu3^ElyUzyBXxR$7cG-jU%6rapbaBu?!ifwSpY@Tkos=woP{Z$cSQz2ce^x z#mUHjSp{L*iQZhClzi2*w=H6S^M5kNXBlICbuf(G{(k9z+Nvt+vCzyCa;d!h4J^m$ zkG8<8%{K#Tp9Owu7k%=S^iSzw*XOn8eEO0PH`=3OxUf9s%#897OOw6S`jXg@w+A&Mjt=70p=1?!VAT;9=$Ius4*LOKL;Q8s@i$~Y~O~^)8xv0*53aqILU6) z+Fhe^gyvX57dBz~9Y(A-3@!rP|DWqG04HD`29_?Yz6+cLBgvQH-yTcc7Cbw2@txuL zMD#bz!OQP^U`Nae1fx8oG0gw0eGcaQ&sxC%`H=s@d3FZZ%yTg3!foEk_+CZ+(O%XF zv)}w$bD#H546!zBewy{9SH+{$YUaMy)~ES$3Kp>cDg=Bi@w4b zKfkjNBQtXwj$WV-xBWQn$7#nM*L6JW&T%YrjKL?%u|NGfgCyJ6AyB(-1(z*ckB{Tr7|*;$ zf)^7HqrEwdFAchK=lqa|{@&u8K-Tnj8Tp6(E*zH<52-%0WL<2iJ%7nQy}OuwcF z(9#6+JY$&$Eyaf-Bdm;udGNks3*GNkTbKV-_x4yNrxYX7{i+{#(oqR#{k&T!9cRl6 z@rUBS?s$jt+q8)v5QE0586$RTTNK&rrPptI=Ji|6OY5T!jw0|x1l*Qj&-w2}C-A)( zJnMJKodH7+55Dx_M#=an_bRwv!F6x@#h&&z(|#U#sfPE~X0e9{T?P+JXEWEJ+wXrX zrh@!cn{(;U)(v)lkI|ogS6Fubw$UY$5zu{K2i8&E70s0Z>r!CN*$F$rPf~HYF4xc8 zy-wF%82+5GYHd4I+M_m1n~}!s+Hdx?HrRY?(`_Hmd~RbtWe?i$a`AmUsa%obWEwaZ zE_~FHcX@?4`XK3NTYgsUoQIw@I12QjULZMuea(8Ob03&+zr7EzmAr*d^;_#5}O}szXNx7fV&X>NNnZYow@iYqM^_-do4VaZXLqb4B9#$UkQFudtXF9ceIaYpm+y6Lg+mWLz|W_FVVp5<3z269o|>?|wu4{8*XgT* z(b??Nv&MJGpyAZ;*@F%1m2o@D;BR(EgZHX=Z^fdDGw$4v zA-6JVNANK@Kh%Ga{29f3T9{AH0DW5If>E!Jd+ZmlZ9x`2hOgH;n>|b5N%z{g*EY%* zypj9u`JA(?>(E9sHq$ZmaI@9BrWx2Z=P4Hp+4da!n|r~7cY{ZsldOz#P2;+y44dfN zzFlSwM)85!e20JV-3vL%q!F`nlyFdnTph_>O0Yh#Q>azUS~cyAl{-NX1FU>y3LfM-Oz8jH&>cLGN} zU(NlMJa6s+pDp<3l4W}*!H*8iBK@dAN?-N5HrUo-ZhT44{F~?5awjgA0i2%nT#qugU-^y zO%&g!nK`t=E3M*bXrVQbUE2yjYR`8K^$W)Ote{Poc3trJWb7Ycta^)@*HGwEF(cPb z+W{S=pu5|kyEVMOLo~@z?<9OLozo{k|n}Y~lEL&Wu(6^l>@1 zp5~MZ46xG%x%#^7GI;e4T{6LM&$CYR>cB~Q!}}YdIcR1cI-wdp5d#OJN%@e5Z=gHn z;ATN{$|G)M-L`74ZwWTjER9`ocYPNFC&sAu$`{ z>+Urp+Zco7;7@d&u}e-51MYcC9ouiSZTq>f-^CofxL(Cr$!}Uaf8!L@p(6iW^2F5c zVoxeQgLEjkzmGBgD$m3!2kE!r58~(Y7g`waOUOgp*0OCUV{4V+%Rzrz9lh~f&5_70jo3y&Dz z>ih5>eV2S6J{4~I5l`WLjceQQp$}sC%fYp4=e{jJ-oeXr&fcJ{jLo&T!@Ycl-X!bP zr}#x{-1~{4u%19oY}*!YgYThBa>lE6cF={|rSGwv6(YY!{e*jA%K*<9c*GA0j<~^^ zn0~{Vf@m)vbduZf&-Cq%&G$v(9nRP`FgD2sqto|h8-Ky=dlWPi(7K89Y$oH3K<~0C z1cS=7PWxdI-@W$3rNGjCZy9~;#cnoytTkfx0qnh6dA;`DsVH=;_G;d>bAZIV%wb*p zefH46cM0yR?&Ma#RVaH{zV@mq#L~fs-dpbJ3p^WGD*nCdk82KZQNDoi1#JmmX_BMP ze7?@JhCZ~G13h_Z;TW>YeeOn{^N%6U;%aDtFm!C#FoU>S&Be;}4ko`D8@RR*u-nZ%ECdMZ} z+VC4|)Lwt^KRsi=ly^ha295*kEaYDk^fD6oD;D-VcuXKq_wTjksm5xbmEqs{jSoK% z?k7r4SEDzlu$C_x6+CP|0eoi+;QORj!Q8j*?BIk+MrprGnZUYUF)0a z;Dhm%FuoGTw}O84Ox5I!rbU+R5#UYXN7`MGg4 za%68|ZS)rWex8~46!^HMm>5S!yW~^FF619F&y{}$FU(u?GtSfJ&*;;{X_*7M>Qo~8 zCp#iS#@&*e%7%SX5BHboC1_u+?Te#@8Ym|6km5X)}V2)4&)y zegn7d{C4{+WjtkW9)mNU+3>K|nq2sNp!FK$c_g6RM%94qNnQXx3^j9et@KK2;LI|$ zuBnBp`rk9K%Zq$HZw;|7u6jADC5nBrdl+qKO?|OBleKE6?1@a@-Rt&16LI-C!2a?6 z_iak&x?N|7b3XAsWjiPie;3#FDY`dtB-UfYx1-Z*i2pok1*i7tSUX*-wb0RjU2|A< zWTo>&yQ*h1=6}~5zMPup&9brUO-{X`)$+By>^KWKEvttj&sZDiu(goqamnr{sl!j~ zwE-U7LM);L9BZt)uJJ_b&=1J65oOq|(`f%a===6SaI=+lsG`hY7{#}Fdu6{a>#^S^ ze@pAJUwXx?xgr-?b3N@#hTijGcM}h$kDY#x%zU4FDgI^_Cx7j|o{lWdPD@7cVdenO z5HX2Kv>6^sY+r5m;(kB=>io%H@}7O2{PTfa8_Zu#Ab6$s`Jr6P<&U|I^j^>B+9>{} zA-lA95q%eCPM05M9m&WbuGORe9NTB0cojHEA0`eF!(mQs@NF2lR6+|S(1d)jIndEf z(2H!xYT!K`U7mAq)%t2`LZG{#vy4jZClc=UjNS=|MvcBpZy57p*EsZX>=2iJZ{oSw z9(-ne!qxbM+9RVp5cl0ncsIHyVCt;u9oG(v_QFR%{%*%sts|$koxG+PZH3?LTuV}n zrnD@*Rxzd#$mHsrj6w5jb0z1K&8kCZ1D{zjd~hSf zfS2+*>Nhy?ZpFs1yH^1Zt&vm!6BCz)u4P~M2hIi-mHwdQY_yTs9{8-oRPHza=gRza`+A z*6XMR$U0_oy|vVgTlNxt8b1NqqPnMFeg%J>aj^$J%W7bFCFSS3#ufxkSYa^w$uGKoNU{S^#{=3M-C-v~$4tNs2 z6HmVEz4tixp5(7oICXLo=%);vO704;@}uiN=(@K0uhd-#Gmq!fi2LoZ3_Z#|EWZ@m ztw6RhC*@t)K8l6hB_C^t)(bu+#&?Z^yrZ`X4_n(s@NgG1Mzlg}~F zpKf9ne&}Y67cL(`>z8~2TF(@%=NBjQfwfCpnp^q@somdz#?0C={;?Y?!7g669Ur(u z&tb=xvi6)l%eMi$%d87;M!wj7?)hu7^2;Rey}JA_?{vzL$@D3IIYHd&@()r4t>AUc z0CX$-qnaqgGLakDA@OI(lkjC$Vt1P}ueC;gJvHJYng_Ugq=_}hXP{B~lJDJ$uh#}# zbv|~B;EQi${99lt8^W~@=hh;lp0wqvc>7V>7hM@2i9HdfKAJ-dvU4&$@~<~z4?oA* zKG60E#;g1Tw-4DkZXb&GPE$Y65%ZOdNfG-}pUia?GLSumW>0HigRf9I9P#%}4p*%k z&kEhaS`%mgYHZulw@uVfQOqp|*v>~b?ipg8Dk0Z@J~^lE{R4~Up8;mcsq$anC(a|i zfliSRvsQZegVaRD%G5`c{^HM=`ZlLbe5?PeO)-NyH@swYBL+3QnHBqidn`PhiQ*FH-U4>DShfpm5~`|3R>tZ2i$km zDg^h`M&ET5*(uI+sQqGZC{M=4ll14aHqQ!{8$Q=5N2B6Pt|hqN z!ni`fTkZZYpYHo^d|dI1|6%OtBjnx4b~EcK%qQ2%uDo?1`{>Ah(fJU$ z=r!^oITsmuBU$U{?TgoY^u(*So^W-9-mO4S7#k2eZH_|Q;Q49b)RMhC_$y$m+8Xik zoYTuZH1@b7-$Qp<)JnE?X`SSkM8v>3_ z4=?BDady_dR$=ZK;#9on!gimLo2>DW7hHlob@fXR^h*(SSg(SfVuB04Zq`)ne$Jk< z^DFH0#}AN4ptefP8GuzgzbpI<^mXK*$iG~*H={O=-Z8WWZ#JV_ny8nc`e-3&Wx^Lv zZj52SRkKep=E_oZjMq;-_-dz)ku2C2v;BHEHzi%QTfBM%JG;9c=*j%tc}Mz4Uyx5> zp37)BaZTsFMUp8l?G9WX%)1u-0sLjJ#lh3JfWOWeb@5&f-i?gvWpWf=s|ciZtYyk} zd;r@pPq{hc(W~Ii_PK0+&|aK$c(Zh`Rht1n&&#k1$?2_BPb{u|1vNYtY z)qRa^F24A8h>bQnvWzHx@ z$B9l;Ru5By)YNV+_6P5`CKa?oCu5-BR%r1Cd=ABTa7qTTE?1fNRA7^QoawantM=5c zHs~*hXXert=kb`f+I5Y#rgPqup;g-I&G}#t_^g^1+HBF;ZiW6}jYH@9tv1%t#|YYu zy{)sHGa8mNM#ZA8pzbyLc>=K5MeVruFm`eTerv^^x&piFR>my;%oKivKjdo<);wg( zgpOFrR%mflZFX%lv^e_F?An$hVyEyQCz$^FP- zxBv29oN)`CUe7zivDVVOwXVgZs@L1bJ2RZ~F~@K|W*hZ9ugJ8|`_%VPRlxKocxXQO zPlLu>>`$^zy{irR)Q-P9gWp$VOfRtE*9-kb4N;yw(hLvqjOt;I_`Kwv4LhxeZ=Vtf zHqv*L*tXmmmKwNk z2S>+_hz4X!2i6I$fAzpzFxkSIp6fr%15R<~N={D)49AHFfHl7Q#14Dn?e6wO)y`GC zt2{*I$HeJV_+2G>;$886D{|nQ(0yyOl?>HW^AG)C`gdqVaGRq3n}I7i&hdKuV&>RJ zn~Tq-cK?WXEBLLsUGZRGX_eKpvh8$g))n{L-}BH>)DKVI>eyRj=K2forw(%4WbAhO z6P+{xCzm#)6Ga<}SG;wuQ--Ahr!SlJ8O|WO&9`J2dHJqAJzNnw_LKGKL7Sv`m4i7?B;72nIA&t7a;RR&yJk` zkLx^gz8*gUKO@e4bB4_1Vsqx!W}bb@`<&}@6rd02$Mri(U+K^XuNi&N+*Kb`_5b_& zU^RGh;n@CmC%;GPu=nJ1c=-i9%5SI!r?NAuPo#F$QG3Gpo(?UY*36&n>{w$Q_=UDOjR6^`7A!2S-Q2Q6F%$6&#^!yWl7j-7Or&ptY5P zG5tiSyZPU0i|=a7)^k5W<`8S7pNXD(|L&bLdTxQ{%ox?4X#W87oq?aE*hM>Mfc`X= z+NJY2zc)1yd<8o|H1xfx7B$3sx9>$3zXkud0gDK9+6tYHVNLnixZ>pMr?YDl(61R2 z?P$$g_OjOKq=TZ!7{xhCwt|C&yvrE!v0*fR$xO*hz56}J-U^J>ZadFZ;E%L2)-lxY zmcP<5=YHsQeBt=QKyb0_kw>f`JpY<%JGLDsXP);AY#iL&=YffVmt-{e6n|+QcTVvN z^X^aIvfu6K2Usud{w~+tcmIcXHNJdwnfIOB^v-%@zZXAFe|qjE-gBRyDjaQeo_)mT z`wy^V)UMG%_ZJr~R^9+IQfs0+ki{|RMC-}I&(W25D)n*q-)=m7)2ha8ykuG)If1JlSuf#BoJy?Yy?`)cx0I$(qjZ-E9} zTGClke?Vr49wc)vKh;ftfWvpZ{j3iJ|LpzESf)acb&OyBfa`;7ZfBk@%$Z*?er)p^ zWIZ~7-0+$vWX3*+za=mJ)H}5?z9tad0iI>QDDD$aC%<>>a(sc}WD1#qFFb1p??s&V zq#t6`V)6Cz$T{8{#&|?Kd(gpdtV1z}9eL!Z!?P`n$AW%uoP2U4dt<3}a&>Lowb7v+ zuZ{k{FLlafW4pGkIlK>9=-TL)P>)44-x2FEG_SpPow1r>9)4PV+A~(>_O9eL^L!fk zwPTxBVo%XL=&(7f4Hl9)3M{&i)snqT- z%YT&5P2BIpBr%D0bb32;8mmSJxfz^EcRuj zne}MtO=W-;lPb)?cSHwnrdu5+4G4X%7!;XpH_kxLEzh>gs&mbqC#ZPD_ z#}?cj|GbIKagP}GbKKjbdja+#fm_BZ+*dhq@E>{GY2?|1JPZCxEdNsNTT%>5d&5hZ zo7(=Px9vkb|0>U8-^^hREks9+`RL9NV{d#rwR;OVbYcHXU@scnN-m7cd#=xa>T2lov~5F0m&vbBubcsG zhffHP+G|p^ei*nJM(kX^kIADU&sDyPVqNirvTb%iei8^NsBAFO4!L?U@YisN3{sZ(GjXP0XKp z8yaEme>&7jBU`%6TXu<^BhUz*b;hV{6!LKt>lwl|{B86sFpU+!m*|4k$OU#t4NeRMSG;4_ zH}dcNjouq58_q|5a@TjGN6|yh`|fzMXy?B@bW9$`V96H63Fc|+iY8mhJSV^?)6$4TQnZ<%}Uz3jMrCTz8jMOKh}IJdvyG_^WTH_v#`; zR{g-1A)z+{!5@JOYTdk6!a7)_g1If^@9{wJ``+u7T)Q1#g7(XR*&hl|I`3Rv8@Ypf zcX1CMSKKs?ERa3B4Lwwk+$aMkFM6L}#`9G?&vRuwzt4MbCHL0whd%n9_j(Q29^w!E z{TuJ~^<3NN(;C8ST6?dKt~nf_&nLXkJi;?|{6V8(;1DIBS$ySp=u2x46%nVFN;era z7W#?+3&~9*V}O_Bq4J(h9v3mgIa>SrTWZ!r;538hL^rmqv-2rmxvJAHi}YI_+$28_ z`jU^+OdQ_CB9UX#C(4;@L1(qjR?heGV0%6`jOqyR?6lsgUBpj!9|Qi%BmIu)< z_-J!gZ)-#My?Q22&N!maL9go1;mN}f+H3stiMuF%Zs4Z-2eG@1-JZ!<6*tLhnE5qw zprISBUunHO&YVRv;%BvKViw5vl;k(D<3=YB!pxcWwBEJupq-!E==LQX0>90`-OWYR zdAlKWi*jv3M;OOxU`W4`_r^!f#oy>b{x>|P9KF@#=PCC4CHf3Zu!3d|!mHNHc&Au6 z?ML1jZJ0G#+E?!Q-LxO0?KpkNe_suKtDh`joH%VMo@8RWM(zMt<>miimN~O%SLjWP z^~2)iK|ir3#(_PSOb3RU?z|ir3U)r=)&bWy!2x|r2FpL%{#))*56ShRM|yL%8JA+` zG2RjEN`akZkvTVw@rZWKIcq!@=ecLE1ctQh+L6M^NNnJP9{KgV_pnQ$+u^;jErt@q z?dI2;HLyTNZ4CJoXPld%-vg68_DMawxdS?;Pd~Ql*P1+f=5g*l$sh8-_2K2ufA#mB zx?wmm-46R2VFII!Q1oK=|1`d(C>PI+E-V9E_Z;W|}UiN@n z`Tg>}j`BTEIXc2GV;3&<-UQ(hJeha&Ecea&489tBMP6^owSBc0@YO`eiZ8EV{3|%K znLTm4giG;H$G&CSj0{A-3b)7=e>XV%j^7%Sa?)FXODp5Jgf;~mjVA+I(byIu^Nfrm zP7$S@IPyxixSr9OxnK0aJ%UfI{$jLeKbPCEPPSRMe#ECu#9~Jh^OX$T>a0(zpK_fo z$NcVLeAK08ZL{nBv>x{TJGuWI?uU2a10hF7;RD6NT^yR!*px4#cI1bu-Orxwq=OR0 zrbIi8vz&GkJDjt_Jn(nnBH5w!$R^-Wgp9cL?bNIW;7;DluCc7q-0JIDGlN)z)}qFu zug7wZe5KDdkN@2FiElBsm40*#@>qI6{(xj>l-eV*-RwM4dw=M6 zsPP_P?ab)gJk?Rd7Xn9;aZT)dfVP&ziQAO3{c_2|zQhzgEt=z1xpsL9%U3o}PhMMrF@G zo|~mS0`FRDlza#?&t^x~GN%vvf*<7IN7<*L=0I@T0b{#7Wo#G6CN=VAbDEuF#N3tF zBKp#L$Y$oeoq1yK@D8?16drBn4;i=Fd)>83(VeoxWsl2d81KwoHp9yBg>8n*pdZaY z%=m=My`o9zO}>o_qvY65+H-vt;k=RS;S=P@1GC5p8y1nT`8HVCjG|$+^F8>-h3`K@ zL(#!@&Osz)CC%I|JKrD_<=jirfAsuVYjVGlvEZ8ACs+QaY~S%aUOI5)FYxoq-%~Gi z(m)!vQ-}QZ_-}vFTn2Z|QK;waiqA6Ui*9x5MmRZjUFt>*L{1JyK90A7s*P~jf^M}V z2EreM(Xr#vPbbc=AMqG5Yj6GGba1XZHuctMv(95`M>zGVN_9`N9XYA>ec2Vm|BEv= z?(whpKG$V@j43(4>zKme_>`zd|K>=vPE;x1h4hTrkgEOD>yV>JmuCnNvpld zOOrYG*>Y(dGE};WdH&@bI(=Fomr3OY- z56-^n`B>hi{`FUSdFDpOFw;s#Xh-wOeaSjiLCw(`#_nfbPPJ@Rdu%u|JyM{vPW;LH zymKh!{b~FaxN?C!!SuA+p`JNJE-;73nL~^*%a+v`jqS<4f7ORr?Hhe<>`fcqCJ(vC zeI{R7a}NWD-{l~enLoB)VVpL$@m`&?KXXsUB|j+Bn*AG{?~mx!_5EM-e)J80;XL3M z12)2|;&oeYDynt+5dGY$ew;qvcfVIM&r#S8HPmYWKIT6A5%-+=KsnUAsZGE08epfh zc{=t?a9_`@#!rilh2NQDf^o0zFZ#=DNYLi?-pC1EXI`tfisrZuPPT8h3hnbtavO%K z-6CYE#>6{mtbYqXBfv+89&qpx0cZX)=mT8X@;a^IH}H+-Dw$vG=GxQNJw2h{D#=Xn z2%Z8wa^_-ljQ^fphw1f2oRQG&eixaO4_`?p z4u!9C#iy4w{ApfS85GS2w~~uP(RaE2J^WH zj=c3zUjfI0kGD;CZkoq-&pdQSs5@kLysf78RA;@O6fo$h(S?jk-HwdQl?{CF&Rd$C znse0i07^T-@B|V&-yTG=nI=`v%ir24HHyjzGUH%`|-UYs@^33;NJ3Ch{0-~ZtO(5I?T6DOC z4EAJ0Koo4T106bLIswAf*wRSnAfjeN!p&$UN=t{t>|D4`ZHK5e|L^ZzYb7foAU*%X=M(ncYrWU!eeUn`KCkZ83hW<5IgKH~bJ^|l zdMnSch02P}#oqRf%tbQN+PLuU9N;Aytt5Uhb&%CEhc+zwR319@Yngs6`Ykv8&gEGS z_YFz?vsf>iX1aTDE!GQu)CIm>H~$nk z_8>Us#bx2}zm?oLeVpu+U(k!ol7CPA_s5&J!4o6!MAMI(yAAwxd840l$}3ff9h?CF z3=af{*Ge{n+u()aNge8EP`^7g;K1SpV~%9N6T3qrz~VO^ScnGO=+BI|J)bo>LR+G_ zmhqz(e-Zy!u4HUVs2Ke~bZ+v8KpQFGf${@SgrABQCm;irC+%(KhaIZ@0+UBH03OF_ zBb!*oY2d#ZbEo{Fg7Nn~$%wd&|7sbdpXK!lAJ}3Ozz*D3(cxOkhumyg)@DV!W2o_lM1em?0)#lWEieE1zaVwq@&9ADGK2cFvB z^BC|zFTwYO@P#E1mpbqqN2;p%si*vQq1A^4y|J z6r)STl=p~vYY!zcD;N#}o5Tz|e_@>RiQnn0fK~c6a+pSDp<~Uk!hY~1vCQU6_^l0( z)*aS4*`L_D0sV{jMQLXsWlfG#^s>>TjZV1H*sG2{)uLWu-;?7l;+D7rHO=|-IiGzLV@a;?TV>~PKPbAh`9ya%pSJG2QMz1a&-L6>#l4S= zeQG*-*m$jp?IZ9LBPcyJO5X!>pf&oFzIkp`7x1B;WT5661wQ2-_@vzA=*+-GvO#_I z!Vji(lf5pu=vkEac^U)rn-6Up9h7&e-f;x%ame0&`v%7GRnIt9cQKChAAzq<-wWw` z4(C0UkFkNV`FaLg8W>ADu^;lE`Aw{seJ8bYPpMvGCjRT`;6A)jzxV!$_NE&j?dTYA zGdzkl(_H7`Ls6M0$4gJl+Pj7EqdROg{sI@z3V{Rgb76U}GyV=bB5nL3109hz1Mr6! z{lz@^G||s<&Xz?w;ggvs^NEoAEOH~|krUo>ZMsOOcE>G5K6ZN6CLjBQdwt;*Bj6SA zPVw8oJdb?nALKnaHv$}opAtja#(%FbFQ3}~)X}TuWfpCJnm(z0+CuFq!&8)N(&hI{ zI^}Pak8>z^mPB7FCw}`moo%%TL3U{zm)^;Z0em)YL!b?3nx-s&_5k3jyt%nu-jrJG0a`85mB76m{Hd^g57F+=?0@2j ztCJ6}j*Z~`a*c~J>lDp*Xdk7xIG8o!Zxjw6s_8|e$e=Nxb-3J;$ET;%hw!M9bDMgB|1Ie>8v zV4UE_n{D&bDSrvirN*~JE2Ci55=-c+`{KnJ& z;oGn7{}%dB02kS3L13b>%Fp!RO;y|{oL&_Hc60Hsr}%^Tg0}rv&LrO^l@9_p(Y;%K zGUd(rAl5?V2V&Q#{4JjH@}qrN+O7i_TB@+^_}F|muetrZji>ekx8bSc3Fqf@;tBB5 zdmKH^a{jse?YjIFdKv;;?EWpIf2jR8Y5&vssiEH@TVHG(A^PptPQSu~>8t}dEk9uE zNOZ;N(iNZCzxuFq4;OxA=@zl+;38{ge1_CB^h^2Z4Cy4?Hw*sl-e*;F{*beVPwlVl zO|BE!&9iyl-QxU!FO+pxz?>1tx=T7xT4*oyo|R>dIXQ=TD`Erle8}t!>%d8Hvf254 z68?A2d=D1n-4%HMJb5l(C$G}pB}>K?zQCRL@cj+MYZ2#Z-kawqiDBmX-b)h;c3ny- zm`b}nqU;U86U7%df(L5zcn*4+cnf!+x|-3WtAN|h)fKA3JJ#EH2RsG481UIc z`|^K!``p2^+dDmbg=ezs6ReTe>cb-Y?yaEo3G@tuAMhB-8LgvRrcF2azbK=99LdBX z_{QBkPme?M4XlIiIL%nHXxtQE@3B)dQ>toHIj3{TIz7}nbmpv;(ainwGY=XcgnjSd zT;QsBg-Sl%=YHn6!<2ys;e(N^OZ##ltTSx6tf63J_A_$=_)yYH!3U@h@w?2#WZd#m)P^NDkb zr{BuBb9D9#IICUBOz!X;^CopFfkhoL$u9tl*V*rT9b9<>oV*AuE&_`SOTIqt3&7%y z%(SZ4({8GI{VnVCXMx2*-%SPq%~C2ls%9 z=vXw`0N!$bv!HpD4NtY1_ zhG!SvWtGjv7h&vf_(gV(|KG5^$K-CDP>{=~#-IDVuRwJt{$6o8R@n>S$h-jOV0ky` zaT}QwB2tBs~TcJDo!FwSmrXVN!KD+~ES{*}{7(Gw&qy&G0tLLdaI4LdL4lHs;R(z0BAbzltm_6m8$a=5h%rNp$ zoB*%tKf-6qnclZpOZR===hv9`X{?i;DMmlEWc8Vch#Qwak-V~Ee-i&f7V@MUGNk)9 z&X66ls(VJPY9D)A(P>u88_1{&=spdM=OQv-n2+z^@I!pM{XF~+_Ba-Mo-OIW-t@hm zX9raWI!tpu(;b^W8=GFw8!L!sPqWK3b)OLKc8C2u+sHk90s~|-C|?7ySm2`K#%_Zy z>!u(pB|m2c!q_Fx?S?PbO|y058t8(2!(+79AUkC;vM2_OrXY_R;BW4E&sV!y2O61Q zvd99~ob#NFj~SY2f`@dwHE3d+yP0v4gXAG%2=N0;XA)hX-sb3>v|CTV$s%|HV^ZAy zur&6vkZ-1+34sFfDt*_Te~aN^;*+8uyR9rE_ar-y{@mm$9Ak7@+SMH0w#8#*pQ{{g z-y(ZfYhd;b|LHjsM=ihFDsZ6YmFLVp;w_ZR-ef;pu+4tfOV4^|nsRkp>}TD0mU?I4 zCH5lA-ll%)ozJ|#7CWgnm{EOn@%$^3(3Q1sWX8*S39ed`P4W>io+#stO$&w#XlEz5 zWc)oRI8#Y{H1b_JhgV3K5FFgOtx4r<1#>t^&a^r7d2rZ$hIh%YGvDD|i4<$he0bL` zKEpJy@4{yU@6vPjEy&A&&H?|L5C76!a;6gpC^}>8 zh0s?WbSirF>ap4n?4ZjsW^|X)>|Yt%S?$yw0T;&GFp&LW#xW^SFbO=G4=y4LPtS)x zn{n{FLg$;QHwYXO++3Jw9RCbY+)f+wq)XuYTfkmMJ-!s>q1?I6SFL(Cea!wLJhQEy z2T$Vo0LyQ&%9LwF^p$xB=SY1g#wKWEl~Z4ORs}lzlh{?)YRBxapgS~DZ}@iQaxnL) zga=1`CU@(CG;8!g_9>g_W7@re@Trvh@`(pGxp?YXtHaisEfZJy3QEAyl1Fbf;}#8n z^c-?PFo!O;;qy`dqRl#L;MT%$_>i11-~5+A;F&g2T$Gy#AZP@I%Zc_bs3CQO1dL zZy=v@Ir~uPVKcG2jeZmN`%ek)lqdO!Rk5Ywn^stBwTm`PUS`Iz^G$ng%$z*yqWLs2 zN70dTuMYdM551i+0oPX#dB$>RLILz`ato~Ix%8?A=Hb?>;r+qhR@pCma-SXi2zxAC z$Zzt4&7ANSes=Wfk}J=?l#5)bU~DD&BW~ zGC6)Y2QiEFz_wA`K#ljgZ1ocUm_u}@Y+u{{9EUv9TF7@iZ>VE`GDp`g|E6*SqMI2! zWetk1@D4q#_=?rCdYE--Vt_r!MOI5}5#xb}ibt3@IpC;#PozsCZ13H zHud2dW8&1A13ifsif>E5*a3};M&7y%9yqjh$e}l_$$yWR&(NkFL#ObX1aPFi(ev>W zO!EC^tbDl%__>MSWvxm&@iOr|;i&RYsjt8NLi_mS>yJ}+F+OwoW^9`We;RnM+%_)m zE*Rw4Hq^Iqw_7OC33ux#-*+zhQ70aBm3}lryyfoDonP%jKN=ATpW!@?#lIWUkI+;8 z_Tbg}QQhC)n0}=FZR}KR=l1<*ufI;TxEmNL4zKp;gn~WjHpzVM4hV_{d?DG5qK}$H zV8vvgl`s8Md_z2I8#-i;Wbja6HUj!)y_5NYu&GDvTn&6y`i|k(&Yqy29fW4jqyHP* zi1uGa4@mcM{!3$^pZZTS^6N}2mD^WZXpQcd5Z-wDQaqLVYlf$I`)IW+v#)a)92$Vm zG!VUH;+683gp&i&ON1}p@@?za%Ys(!4!r?vz59%B(7t!Q9`5A-6yC~*W%istm{=hD zNPQ^BUc5i_hQ2&6$ExOTqRr^!qqV;$+Q~ugO}Nj_|1{w~bU(^R``PaXyf&d=JMBzx z$8SBoUt{lT+#2&L&zQaU@tF9ATeSYSxBE_zmGYrUr<9*4N{sQCe}O)+mr}I9c4&Nc z3>`BDO(_;Aj*lx&9pg8lyv-ZTU7jt8p|rzX{fu4qwsc~}_N+6plNqH=H*xNoH6F?u zi^s|Lb(Gji_M5_qTy#D7k_)#RU38|%@{mfhFNbWoOF|k0r(;6GSop;>-Y~Q6dzLOu( z@AzrtW4y+@lf{mY(JAZFm~i#qXSdVWEQhwd^mSc-BDi`pxN7Kt7#aDC)aG{D{4{%U zo@5cYB%Ty$eeosLB@V>wR~Q-wPj#o0IcEoai!EQXa_Ri36aCxweO}E^T|OXsSN?MC zOBwuwH!L`c{0~^wPw~CTkA4Cj%#rU4I2)RWCtSG*4LZNw^7x_@CK(-54m~T;wV6KAZ!-&vE#a=pg5T zq7^ydyuPdK){R!dwRp`!&-(qmtMxPd@#^@4IQ%6BzYwpCWjwS0Npym3I!Ay%CT8dX zKM3<>3@xjGm(eenBfgRr;pznRQ}M_T`7RhHsI!W;6sI76jNmC=(RM$2r?`Ze_3EU_93NkywBE0q3)} z(b+18ZP$f;CSI=hs-w2Dt-GH{a87p8CaXYeG7;G{4_T}}e@9u3q0dwJ%IMpy8Fh;o zd*nzkJSX!?{v4GpwsZTYA^&UeLF#u6IvG5yU_pj8dI9kW;%ACyeFXfGFV);v0e-9f z760|IWapdeL;6KMZL5u1+SvVlt7W9dAz5U`z?qbM@Pc|rve`r7+1l?jHt>e>r;?^# zM%7yCiDpzz^SvF~GWB`ipZ3rV-&4Hk!jbDuZX#0-m`sGX>h1<(KWR^ix*F5ZnTy+= z%6!0>-SJe=p2n*-;*9MT#^v@ES!(u!4j8?Oal)Tk>S)vCen+1`?;0}%pYc%M#Tman z4$ir=wzKYr-kG2LpgQ}06j^xG$WdRY4!N`j8Q{h>o4tGPpeeeJP4=aELY+jxaXSdnRrM-;i_{ z;|E5zNX`mJTc9tkmu#P0-RDMoYFBuq{;Jg%<3$(bjs#~;l=1d@%KG2-!WpneWs!l z+(&uV_%MAQ`6~8Pr@2Kkpxf>iF@07`JQsW&${diP^~ld;HqYSKC;zTpXE6Lam$e;= ztuAF(&{6!ZDn7# z_Z42%8lxNj`g_>;&U>3S?7LJ%8}dya>#e}=U%zYk3_z8dn)J4xIVV!fauT)lhSOc~xzKLAm$f<$IsmOF^-*|b04C6ol1^v(XzvzE2_O6%T zuI~|eDb>gRnejcO85sQ2r;TA~yNuC#-rvl_=&bAHu ziT)%Q-kx$LUwR4UjNa<YTkc_>$R^hWCgE zC4PoX;axp*#iz$U1Tv5{j7onS3BTuA3ADVEal}g4j}ae-Cze>&DekAu*ZmoM=UP1W z(;U7gdKl*X23`lEGthUO@u~eg&mkvfpbzoP@Cx`_5wavI*z#U-LuX!6E^%goGOj#X z<;oG->mWy{V_-p>Uib!puhj*7WsB8~a$rm>!C-uY$qvx{mlA*1YUq<4;8wrF_jC|LNnLN7ueY3bdj!#0nK8zu`aK$}{xe zna6uu)#5ki9c!p~^9Fm>g8@SiEDcN!2|MDP@W`d55|a>95dADg8YC zO{RVgYk@siFqu5#lNqmUKKEG-XTc={7E`ZqwujF;c<1ujuJl3C>Vvb|d2g&2xRHx4 z;GxyqXxHLjM}Bp88^7GxH_-AZwqzhf`1{QMXQ9W={J1B5+$cX@V)#+JKS(qq-=XmD z4=x{a{NGp2&BKd(cQvnmHZQJYPVRiJ-QSA+zy1sQ``~Z8fMXZ^J=|%2>)^KuYsLOw zd|F?fcd&)o*OE66Uqin(e!P*aAv6?2UP<4Wm<4~xh5wF(|AJ$a@taB3X&-0@ zJmA!?iHUaV$bYn&SgL<`5<86VvLkiw`UvIRGSVkw@3fy8D!KFO_dli0w)#0&zdz%x zKj`ZByS?@AyZZfMZ~f6%zrSgV06{i)UH#)8w?rjIxO1YGj! z2WH;m;H}DOzSiEo zk-bTLat%Kxzoz8wL40tmf0W#=AOB4LRU>!V|b&ZSz|LTC%cFqdxv-T!)|3QJi*Z({a-kpjr!FOT{?av;3(w=zDo=Wz?;IVru z?RR^6+n+U$TGbiIR$@d=otin6alRiUpQ`MJ0gU%8i}4pSwqDQdKhlh>V@$H`I*jWU zdt6Cm+@9N=?=$!g4rpA&{g6x1`97QPgY54IhdH13IPXe$cc1fYwDUR6`Fy}?(O8Th z3|U-<9FEcURx71Bj{i|({0N>Sn=ZndYHdFRr`zN!Jiy@f5!;4+_3w}^ot|~T!M@;) z!+&)~ImsF}OapJQlZ2bEeW??F?8}-v{88tXldKv0I+W+$Dsa~2&l?QCyq3IKu|EbL zc9u6~^mU{1#^%TE{`Gm#r118D%a6PAdo!OWJIzNnx#-OOr}4MtYcS^}uAQ#|zeWpw z4V%73p;r;-J;+O6)=1lCT?Ag`1J4Tf5TQ$#zWhOK{-x#~$rk@M^q^&ix3u^VaSy?A ze17m8>5B3lh{m+HSlGiVn~I(@l(R2M^ot~Im>6j3rufj3TDN?~t8up?b@pTh3gVXE z>`gvD+q(4psynJr5rcB>Ut)+;O0iczR!zs*FxXPps{Z_GW5q4WBMLyT{dyd=bHjJNqxgt-)WpBM2QJ{4nL#hec^dpqFH9PUpX z=`9BzLvL(R3`3sxIeblf4Q6i$+*a;m@$6p!Z+Fax?|0%oN&~(;8Tn-=XgFg2=G(9l<3m! z`#dsVd6qBVk_t@b|tpL)`wCruZGqq^8F;^&Ewp} zpe6Ii74sb1Z|1-y^Tw@aFJ#`ITSsf`^Cc^={}ub-?NjrgFp#`2ip635^?fzprQ>v1 zU)J@$PV4&WHP$nWeUmQZX=W4mgAS2^-_^kj>Q};(fS>jh8qmWsn7hGM@G>^r_QNOg z!N>8yY^D7A8Ktjd=MfVTPB3radx|^9ss{DOzn{YzA@k((m%b&tG>D&Wo9{|~l)Bro z9plJ4#Y!p0O#9d-UWz;X%B}1t;>gc9xwEvED*t=tru~rZ$c`9e8;D+@n8_SIBk&9Z zL)T_u4jq1HK&Rc|XZ@M4SB8$~H*oyV86NuR&pf?yb9^w|Ii6+-XRE#b9227k93?l% z3ly#|2aXl+b$I9i@GA;m&fA9`kIat3M`O$*&YTkELE|GHsCU3h`tAh45yB^@1-%%rfA;?dY}!pyNY%a zJcEzfI!BSMb9BI|T-H%G&3bcYD>3Y+8o&|UFU2+xFbb2%%ZxP)BhJD>SNr-}n+zP`{v z=IQuK3(8+hDT_)*Lhs7cCZ9_QxgcdjNggY%!HWw~=9deumB2?zz)_Xgei`R4H^+xM z_fFBj#^LHtz}o1o_y^1#REmu~!#vwy*WbpYN4zlVPyC7p78d{7;L!y=y6~9m!h<#K z01xg0(cIy2;X&+=uf~ToXtZdMdkK+E^Ig0kZcKO~_$-hw=DR6nKKM@w_)%>6P1y>{ z@-AF+rSzo*DhsU4o+stE3ZC5OH{Zb1j+vVO5%6R!{t|c|>jIvl_d3?OD|l+Jtus8Y z{7px?+}8y>FBjS8WwVBeCi}MATqRaZWGQ1_2Cgkf7i#louH3)-0CrKKV^;-D#PJFp&(I1+N-5rI#bHSOx5pn~ATdCld^3T*9LRaKZ`Dc>g2)4~> z&SaG~ao1Rqx{Kj)C$Lq`IXu2ELEh=SfNarv=%8^tx;%Omx_nFM67t2@|A}V!Uo+>C znylVqL)hTm(ycc`_y*oivt{K$`qnw69)mgO2yXPuBj*D7Re#C8+z9xDe=>B0EQykL zR{Zxa)C8O z$gXOH|EjHK&KccWGB%?h()XZNY(02=+nGFUv#WiG6_Tu_4aqonom@C87SF&M{w-L4K8qNAt7qx(Keo<{&#<^x8(V}t zm}XxcUX?%=*=w(}A*rDq#7WE{COzrs*68NpBx8$#yAAZ2%DB@Qv&N(TwcjrMzC=Cg zu1Vz_nZ=r4$r!8i+=}nMH`mw^8;u>on(91ul(ur95AT{Dgw_OS*(s~1J32pbaM$!l z${EMFqSKwdG}dc^Uvk~E$5mvnm-gct!84s-y~o_q)1&k;;wp77&*Sj)JYSEhdkO+8 ze)&nSe8D9bxE!ZWvY7jT0%p&)CGAn9AA!tVDZ*p0;#v*V{pRC(3 z*3H1hS-ZMo*s4|??(0Whk>bAzma|{-qt{#XxUB;g;x0C zOz<07m5pB7z<#C9cs_{CmM)Z7i4IY2_*%FrmsnzW-VylXG3DT*y!_0sT(bR|iIwOO z<>(HDzmpmGrbCe;rk+1b)OV+Quz8*^+`d80%npaiBsrR??ZdPw!-I-KTX8Y zG=rxXpvUvmtnfE_kQ1J^dZ%M|(AGETOLnwk_8O55mx^g?3T?0!$0vb<$eH7l^gAmw zl=E(f8K>ZjY$&V8=C19%bxSRJQyln-Zz~^oq2PWoP=HQ3TIXes&}aP=;1BK|?OEohk6O_l#l+JxNr8)>)y9xlh315s9utKC%7{(mAVbHiB|wdtCcVKl*S%t zX}#61uX>u3K9kde<;0|OrgsU?niv=NqMka(*f;1tqUl!n5zU!)k67K>=DC`f z5_=yyHT18HRd#1dPkZd*XY;uK)_wm=&83vFET;|lO1y~gjN=&Vq_Q#HiA4LF%UhH+ z=aCq5E%9cx@ZSVwBwH&tl1q`bGw|S<*5*~#F7pL*c4zbg_+<@eThbWItCR4pVq4Xw zrdOr)Os^6gSksnT{Echx*10z1@pNDcTy=Nj?o2CO>F_$)wh4IMD)eg3DXox>r?JVW zn)LhYFN z7Uq^%WQErNAK{|i-_zirz2CnQxFnc^vBkk*^rzEn!D00&f5+NeILpCWO0U`tU(tSF zJ^taHy*Zz8OZ&RSGIU3Uy?4G)ZBoAiTz2PlxKI1K{e#x6IH){)2Ir67X|I>oUUEoy zu6i?_a`nvR1oPlr>FKwD!&KI#xfGepy_x7 zHnYc&V_-Ns&KO05%3&t|rRF|?wbJJ{=vi^w^Y}fHwUeJhzhyW2S;rFS6Tj`~Ijo!I z;EA7glYeMpYD(3d9w}8m@WjY7Y>q?z;(zyk@1PHOWLy0x);iyoar>rs)DgTgu6`6S z%;(IqC&tj#ANJlRS=YWlRm|D%2)2s5M^(R*KAQ%4vI)x=G$OIBT2@&h$ji zMOioefT!KH8^GGdxU*{@ds2oTXk#0^B?`Y(3`XwLfdbi#@?AH{Hox=P_woHzO$_+C z+n$)Rr>%kjc6WsSB?BY_&D!HD7ap9OPCh@^9-z&{%Z!gPCegcv*Nu#|37l_cti|MS z7*1}c*mUlyHGYkZHou1KzMa2d&gf){Kb#LN>u6hNaFoMKZOWgTEac8IWQPlz)zE!{ z_QiX90W-x7U#sj6m1TS?o9cnDktrk5qmeB?y#rpyShY{K+kx#_{h69g9MvvbB!iPAuPyV0a$ud>9@P?b|LFD;+*zKTCmU0uOkFk>&7;Nt}hPba+J# za9Qif{awHWSzfU9M2fjMO!pWizG;#6Ipce2MdYz^yK6yf<6}-g|(v zbZ`9=yxn|fSx<^5T_@j}pL1^Otd_be*7QaECAr*FJk-vQp_rKa_c=L~0^I3^uC2YR z*dp-W@9&TsLuZL4(-JS*I!Fm?w-(q|rlOOwmdUC>%Q}1*x(By0)y};r?GvSu!S4fS>fmW)|*Q>+t*x9{JQQ`MlMN*&{ zAMllr2Dw2l?l@%TYn#-Pt; z$?!gstI;6$-bUe_+EJYKHBM>(xYl0{9XAdzU8~A>LTSX!pB>EH;#nXTio_fl9M2d{l3O3=AQ=7g|-#|ORbUaTh`i)l)eG%6Vmy?rC1fb z1bWdP=q27Mx1`0Hk~nLjJ5)27ljO(?@H&-=vX1szW0N^+{nMLSYwD?v#;woJ>)x~s ze$VrBOM}272pp}@MR4KLi^$z)11}?cPiGfcmluD|nz?PH^_~?RRNeo{#aHI|v;SQ> z=1^pk@c0CBb}0I_D`$tIV@u9T|I9+pp2YUfL(UFEMh#`%lBJe`gNvs|rm{u}@Ju{^ z9b>N(4|3*a@uZ;V%dXKm-a5uq!gxB@*-afY28Y({d&6~)Y<6f? z7v;B5zK(UT!}d0Q55_9rzs7qK__=-%wJG0+;3r#QICB_|Z8;VAH8TE(fM4Bm^rI5& z7vc@$TZO~IC4cCSkF@5brJ|<}BM?dQmNMLq3QkvLmT{WIb3v^diY_(dyTLozM2F;1bDX&*O zYn6l-Z2btobf-1`YwCR+f4B6?JYX+>-`l`F54_C-H#CMk2kygx`{#jsPhZcf*Ma+R z;Jz2Qlb6T%H0pcW^eY}~x%Tw=Wb@5hLkGs1r+wdzOQYGL zA5iAg#__o>#_=24Et2nQYdhYS>Q1LcHhv|R1;cB=-8yhrI3oB8hlFdZ=u`T&a>;B5 zJ}wT&H``^6&44|SDqE8}Mu%Sn%$ZjV*>}~NY=)=kJ#GJ1vJqZjWm<1`UJudd3GhTb zM0j$d6MasF$A~^pI`r8v-L^+v+@FWvD-Jy<-;3~nI`eSf#mH@8-Z2j8(GT(NFQbiT z3~gv!5$Yeh20uihF!+?mSjCH7euy0$R=hzH9xC2oWCV0Cc_AJkf0_K*N!CSUKJg*( z=&Xy%n?8AtY#L*}Gly-$XLxvnhZnoJJVf~|9A4Z2tPa78g+r$NFz9QmQ2xstZo^sbwcv?3t82%0A zBb3eYT^Z}ex3+br%)68ked)bm*(Tq3SMSLEvEbvU(bodjqBEcSI6o7d7V$Y`=zCoLQC(4VpN!74iqd*H70MLuc4|8SwaI zMLWJ9M#mT2zC-((o9^_MZ&UX&ma@k!c*zfJa9;RD*($+|=PGabDQzdV@~#BGk>_0- zoOo{bOek{>UK@Ei7!HDWs_)8_&c3f~(!b6#w$bDR zdI$d6?7ua1+21#$F^*0NwEWS3OK21Qp7q^Q`W)~ZpAsziSMHSGlyYm;rqx#Urj)>n zO^pAKvV|DqrgZD{re{~aT$RH8eXFeM`@5MvlT-I&W0d)<6^g-DS)C=g;M9?PkU!#I z!S_umecIanHhO@3##>W>iErzc*KU4(i^eRtY47H&)xDIx)|o#Bc7xNO-7lD3VC*|- zI|5CJhSH%C$xqu?Ex&NO$r(5ge(|eb@D}KUbB5KO;U_z#0}O##o1PBLTv%pXJxYK0 zaqG;)$F2Qd|H5^08s}QXo?z?t$411*kSs!%nS#v4uKvkXj~}BKYnTiD^+Q+f4?ShW z>x!}Vuef4}gV{Y|f3y^tzonMMgqj;AuQJ(DEbv5)szL@axX|mi<}NYV_f{D7(i>KZTy~vhw&hf@?|aM9CR!H24ntkLcM+?E!*|Zr;iU z{6{;XmqE~W6u8xatL5YZ=!R^G54CZ8HDh&S44?d&Is5;ne1-DSC^k!XVV{LY_3S@H zs~O-{cjnrQIWRxPtBEeoKimafFm|0Cv7CP{J?u5{Xzl**&gV1i98=Hi|Nal{^ApGi z?xx`U1vsm{fY?y__7n31j+;24vz)&uPur{Wyvfg8+PtH`?)v5oG;1PS(E3MNd->6{ zkMI=qHXFI7yDWCjRvrR!<{RI!?oP#*Kp)?h%%@$Q7ntY|m~(mtha4aAE1!4oceH)R z9pC~y_I85DTfo7c|EKYTdgg8V^5iS}N7}m)esKASy`P@XZ(DY#sA_DV(}PrrHhv+r+8@l|b_=&$|*dnMJ9$M-pH zkHelsE~~9k==>ib|NfP>Mxlc*bJ`l^=-}U^t#8xTn<>4j-lVP3=-@x0E%_yGVLX>- zXb*>T+<(H(D}hI>yapVYdm9{pm*8+2SsMjze-N$%N6l4x$IXmKFm0Y?h1EW>V&u11 zxgMcS=swTmvrJmIkPinKcC*GRKlfmCyzDmS z#vC{fVlrQ z{I>W6(RpgAD?7sIwcx=2Grg9!1fO~CUaG;#>`+MkO=mpdmf|m0)gl%M5f^r zaN70uSE2r}nmjMToz*>Du_g0)fJ|%M&Hw&4RM_%eY zWJaDZup*Bb`^KfV-=~qfe}s=Es+jvaD;!;f9Z8#t@oikrGxXHK*n0+M=xoN%&m2V8 zU)3Cz2g4^RuXzdv_3Kz~#-Z`-B`$q9y6RN=o=V?S>05i2rR;N9M&Y89OuvSyI~pkCm|zUnC;N`7_aX0mTmbk ze8zoeY^PG*@!Z(-jPVupPq#mJ+(Gqoztc|vv`yTWckZgIx!aqE?=YIrUB!SN2&Rg)7fB1JjfWr)y3b_ir&V$%v^-8N4lhNYYqM$(XZ`) z_nTPz>-8%e{96609rdfW);MD|bJBR}SM@j>S5@MScMao(zS?2+VlX_DwTPEu`x3L4 zON@LQ9JyQE@IB~V{Ol{hQgL4H`yJ$j_rCud!J2lYFZf;GjLSnawSKnm^&!f+ZNw_D z&FSCP(Nc_GCgRmq`=axVu)?zGq_0kx(n(+K%Q}rSJHz+^bGL9^F4U3f&9+G?q{K3QvAi%KIbuc+pc$%mVs+s^zO@ ztSz!@4)QxK$5&m4&a1P#XZc-^zGL=q(7mz;lT(3p&Hg8QZ(6jXGekPmc#mMrr`cn` zR#4p9arClej`2^CE6`UhKd@p))6>*GF{ac%VQesRkNfy;>hSRr*}8z<2}EXGoc zT(s~{Sj=ggfeCVh=gO_Rn=?}jt={>w`p2s_4EnDn;3FgX}XLeej z@6w*u|2xhn_GiB|czP0kWAejuey;|9%mQS*d@Xg@q2fh$ejweQYoAxj;qwst?orPC z6T5Ig&qagUcawb{VSa+!)3i^F1-gvx0%qLc+6LyMdoHq&y@ftIKWcyaRjif|{PF=y z-HD8hC$_vhI;ieOQtVw;X}8O*Gm%R#Ba=?O*0V>|<9&KmJwL#zeqnMj{LVeV&)2hb z0zM_3%Pg2mOm`=ox{Ch$K~paMKiCERJARxL+Ozm~Bleo;{3+0g5d{+W7E+e;U#f${-hD3q&UDY z6Z={}-Y%!#dav?vUs`vR_yeHOL?;qlQhkEGW;#GP#fp^BgMZ4l*k?H84C896< zNzkHv?$fTc&J>K5S25tXbMV;fYV)XV54%3YuH}p5$`2=BjaO^`5`1EP>sjB<`1Fso zdt>SqqU_Cy-aldoRA*AU?@>-e!En*;fsr4V9066e#c!N29wV-Mb%icsJm- zOPja%xAu9@3(4=--}}4-9;@tMxbg zXgvR`-+#P$A>*%Q{PjhQzX;x=F?O26eT;7z<1_W3hnV4C8KG~%<6Qi9&%@dDYvcY) z54n89{@pv4l2nh+iCW_{Dhfi$3k=H80wZyBSsTaYichPV2;oZHS-9MUsMX&IWeG?D$viS$RppAdfhLJujb>lg!0RG!LP^!^^ zvVY5c&f~G6TVFg=PMobiD-Km`F|vfQne+3sSC1T%jv`#w80%>(Dfw1q(^0z5TG8;L zbkNLDhEH-$eos3`!a4Xw75d8K%tvE8Pk+i4;P#>R)K5KeHag$eNSjTxmBjvShX0iN z(o3iIvu2*7P9^c6iQBj*3Ezj#5554Oxu96QG};9|ucL2O!f#CcDg4I5cb;JH>{rnA ze*y=UJ;&#Hv!6yi?yoy2{(`>zD|idPTh0UHgFfr>dHADr;q%Png%oS-(Ye7DmGGDI z;QH(Eodj*A;)gN6>0kFhR$4t3``Ut^zeRo?@d2F={S~}umk*x<&t;>l|99y7?0MUN zx(hwcttb9$@(oiqDc(HPc<))pVv*f?$5?b+vU$Nvr-rC-@Vt>r!U&SBl2*x}(JrQrEe{^+lbhj8Ap z4BU2k-c>w=zFu#z+f7h!O$0ocg4{v(ISAfvq%WP}lwY%+@$5#&lD#CGK(a^h(C2^f zsWRIhCr>)>=kZ=Pgkl*Y^r89x>|@T{(pI*W+FZw(H)HG5XHBX#Ryq33~9?x%$$NOw7&$JdFe#jY9-YGVJB4gcwPfs#edpUxG z@JBpFyye4X?fOF`-#Kr1#O9mwQ)XNK(zlVh%2zQ7dJ&FIBJY^as0n8BiSPe4Yg35t zO?}db`jU+(7y;u0Dz{f zNnSJeGfA7)U5A=mU z_LJPaJM`U&9rc2EUwB==K+Da}nW7u9PbH_%?7CV%m`mF?q#sl``D;ynuj|{ViClky z;-r+@>t6ayk$tMXdEiuR7HbZV>|mc#R`#j(nZ*ZnW@{($anN8(9kN(>8mBGcs&M!h z*x90K*{gLWq7~K>8(|H)gL2-=K9Q|}EN_v#5&bA$&%|y`Yv(Ion=XkR7-8)zk>zSz zwy|tb`D$M^xr;JOr|PT;_G$v%r2)G)%NGb&;q!TG2u*jQYQL& zCUl$vtFmu%B!;?QId%NEt|AH9K13!j%AdT2f|*T~{+@F?*r&0q5#%p4N) zg9TeHpE~A+e`I{>^tDF(71(LspJm)y1KClN z;5`ZX72w&m#9|+TKBA0CJ~oZ-UdEPSELy{$@kyB6v@La>r32m(0szN#l|x(`IxdTU-KOJ+f$ERGHqi+R+D#SMUD0Beq`|q#UF>5 zcLnwDopx!n_(KVQE{|~Mwve&c8J?LQ`W5AWFxl1TyY>Slc3K6Z-&ZGeLBBhL1;c5> z;@=I?FZdtZc{Tl((e{ndukwj4;cVe2y*|^X+l#)U(1`3R=&`_@8)ogK%L)FqE!Iy*dEq`Uk z9lWrKplFQu&~ zwcu~jSo!(~v+wQ=&7x1aD@nA@2Jg5j3{1Z6fuK!8) zj6Uhro{vp3x(NEMfPRY}Wgi52UIg4r{vNq(-JUP|qUd?6;OSInzr%?WX}ibB{q2lJ zxR~Z0Lnr*(YkWo5j>n0=j1F)Re-U!_XFD9eZgKY`>!r0daZkk8#0|egu2a_NbEDX+ zLMEI2uT0JZcelor+{ZffVqL+tIBOe47m(atKpa60w6}m50{n>KHJMgeuqJnn$=jv% zn*dCt8_C`eAH~;)pCf@Rm5zNxz8;=Ov+>ceM3!(8HSm1#<9g!Hk6CG_c5~?)Mmz;@{$oJHeb* zGbd9PI1D?BkBaAR-B>T|NX8^udVzZ0cP4LwX)`;tmUq(iv_{_irUp-)cqR2^Xp%h> zc=rLpT{OEExQn;01@8FG!pbMGwg;b`-o-}+!#k*}v3>HNjD_D_jkClVXC3c%(XLx& zHFr+^J@2kJ#+uCX_uJNDam|yp4+LHY-c>cjh@oa&#($O?Tv5aGgPgm4tc5%5S<4t} zsI@HN(_-DwYuT5uZAK6pVw0UexMq5q@otLv=98g$PZ>xuoyx$qC6qrMX_Zcbx7+bB~BK4?716LMNwp$ok4&ilc< z-`?rH)_`9m}T{F9GlSL&wZJ0&T8_$0fm!M0Pu=XYJbL}sF@paCXsgBEk{awV}IdFQLxkNJH1>NbV7kvV!)4<8) zw|2a2JHK zC_-;3w*7m;pMi?!V(lcC#FKw8jJ%lmPGYn-=|0wD25U>3(g$`=GH3Hn$Cul2kUJ+K zpJ*d}Sn$klc!GSvpGBY0SOmAV$hURKy7k1IY$b1XVurER;iu>=$TazurBmD?e$5;{ zEbVNU*uIYOoDY|ut!7SpZZun8$_^bS=eAq7D}S^6BsyQGdwfE`Birg$8baQ6dphtk zu|B6BBWKC*KHaLO4e(W$5@%KFTlrGy=O({D?UUBg4`aLJvA>$a__VjqK3z+4HZfzf ztZ)a-rKvnSM;y`x`qVw!=a&&n3g2j4gj|}X^-T}`5_-{I z(fL%?lHX^6r+&AZJ#l^`w_3?n^ANF1sq~vzirqo%lJVCUq8FIB!K_eSaWEYAqd!bz zUt2k|SVMEBfHf42|4Hk~yGmeJiLGMnlaJ~GUAd;YLq?3)5t z6O#ZB*ExFem_45?&F?`S7Y~muwDSSFuoC^`fQL!?dBNaHN~n>s56NR*@KIv7T2xp2 zR+*2lKcjPCZrvC#)_fj7A8309kBS46@k6amb$nO5duZd(P0o2a<}G;a5bd%KiRCsd zr)V8ZZQ9iP)rzrP#CzJ;nyCH%;jA_OxdR!jX+nC5)80JA0n%RGQsRdwC*P}g?Ix-{ z^~Zay-3ZEf-^Y|gNAI2fa(ORYGBJDb4s6xaNpM+pj!&{bMPKNnE%F$=*F{ke$GC>ruok^XV<_N2R^F*33vLn^+TIY($R{! z=ZakWTB8!y=oo9X6B%d9F@ATA-Uq+io@pGj@W&0YHmSaJ#rd@1g-4sdTPk?@Lub8x zGp1AYt+kCa*BHFxFtRjGe{&^^80*DIOXGu zSQlU?JF6TYvF^u<@=o+Wfb}&p3fY*>`R+>SeZKbGM^S$~djE>1*dxO)b+Z>Ev*I=|jLD;OS;X03Sm-T=6j6*>ejFn$ozhjXWtL&J(a)V_%J z{M7GHFFUe54U|2fw>-TE@?w3T(<2~O?-M}F9jlfIjSXAb-TzdU#f zZta^G_^awz1?9G~X6uBHsnz%m+VC>EQ+SErb`NJ{1IW2@tEKUW+~InEVDG&J6ZV?D zLh!x@oU8*!n(wpro*(Dio7ac^Q)H@S*a6PS3#Y^%l*3^Xu@vZ7Wl`w0C>7aE+w%V& zg~vz18OdGo>`yQ+@#>UNEiy0N_vl!a)mU#uU)H%~w~YE! zx#N5Xp4>2%RvHIXA^Dy$CGSW+G(fy1KP5kOE^bwzM4IN5t%eNz1jV=nb{A-=f zzuWNm<*x8J)!1mY@X80XImZo8G<^W4dU6zqW_0IpEp&MVd&wQY%fCyIC2pDB%epS} z70P($nWPWR^&!QVqR(xEA7tObJ{5b<*>|Os4IpN5iQ-t&tg;}!t0eF`iSE+4lC>F4 z+y{K&F=TAhXh$wPYvIaBjq&eTk9zpN(P3DF2yi<>ZkZC+@fbN_)TZdKL%ZwR+wF#K zsk2F(2dM6jewmGYb=Tb6Phl7R>?OZNq7?luf{w_Tx1u*GzE!@VT6Fh%qgN{DD!x$G z@~H8L@LRe)a>#{oZ+xH96Selz^{tzUg<>v7H$^T=H#Iq@X|s_w^*oa^Ma0*J<2)-N zc1pH@;u$o4)9w^>7*9^jUK+pC<}t=H8Cf4$#=ac&cS(-{mQmHgzmiH>#nvY&uQKks zubm~?&e>XE>f(j!{a&(J_4S-O!tvh?LjU5s{H%MxF~tMF%3S1cJ&ErnGcCBn@KbEr za_;4Lg!P|)%&IQ-rIwNhd*=LS?C;uFe3-Slletaubw5>!?XfjzT|PX_nz! z>QwG$c$gRh#Q;pAjdI#hJ;gEIq-V6{K3hUt(#_`ky0x{HLe6n-TT5t*^Cc@}Yt^t; z3oJWVxAa)iUlQ56Jrme4=NP#6>Oni+AkIFj^r!^$PL|+DPP4|=@m@ZFgY5m?%ejt& z_;n`2XRzUn&v40XYhT`kRQ3w8L%*hd-D{YFZjc6U?Z#(V>-Y>C@Hr8)b?QWBdewv3 zSMoFQIqe-(yQSWrK0Fhj(^-6mL+;w&&i?r*kpJ=vAw$Q<>8*)t915cLyph%+dw~=_hUn|7q}OGyCG%RSYnaF$>sPr z;P0zh7yJT-pGFsfxA4>deF+<0ei`hhG<+c9%RL2CbV}{(Zw9W48~?WR`7)pN==Ab^ zuE~LpWK$~p5{#v?!U;3YLrKFBy+|MMEdS29CGc>kRTE^Z#ec-~@sHTZlr9{GHmm^*&X ze&6E#gS>~=b$Bnj)EzeRD;=Sni5VkbcvBH}3Gd(0<#iOXkV@c6IhTAQ}r zY0IzUbI{M0Id+|kv+`k7wA;B$TK~LR=cQcv-9hHTdmCn;D*Q1GgO^l}&o#E{5 zDP?c5X2_=ZOip@a(*)uq#7EBF+5S#vH2hy#&s|z6RpQ@gb2`2|@@4y-W1GCE@^Pnp zYk8l&vPb53H+IK+CMKoIYKgpPwdl^O9Oyk-l-hP4{7>IEwuc!{%Kuz{CYL^qOa!LJ z_5cQbBwGaw=-AQ5nTxeOkz#wF$eh&s`EBTWz_^g#yI+ZyOlD`l+gg+df zkrJu|PN~uj)h;|j{=FId=?7V4`Y4gk48CCBtO1trx6%47zN|Cb+*#aD=jzYb!rcPkjp>{AcF3;+-XvBA!4J;VeDdeb;`hd0 zH0Qz6L+H$7-2Ece)t*rXYjd3T8#o`9=}W81f<-` zK|D}cJaLDg{)J!5>A#q|yw}*IznM08hRrrw^EEu?8Rf0zelPOZ>0H}1&Lx(Tqqda( zr^5S&b2f1fF&W~ss-w0HOill`Z%973B>m}J=jWQy#VKR>GtaiW{W{Nf=!}}`F0$dX zS7Ud}Q~%qY${&`m(L*nhQDKyo8uML-Xj)(3hUs^lp5irp!S@@BH@CJN#EUR^|+Z=KFItn|@`NBC2@j5Zy1BIgX) z^W2xTZm&)(o4(#=Ut@w&8a?gl&iPtEWc~>U*1iiVu z$MB?e*WgJN9eL94|GNvGGz*%8PQ)*M`DbVZ`cVGc|V|+^ba3-+7|CV)G zXJr<_w?*F<)h9el-?c`!BLj@B2TY}NE4E(t=m5sJ03D{YjnS14Yw5VFeX5VqkHx>X z{nqRGQ}H8(wp{H`Euh^S@u#-OH?{BQUMrtWCj9^#e5ikY?bwyG#Owf%`PdzU(jUrK zo+5nH1%)0SC%r{HPVt?hRq;hvrxDLeg=ejDcwAv89(NQTr*~c+mvG9rmZuuMWo(v* z$K|584COBy9><=y?050zlg!1{q2@j7#LO1SM!{EFNPJA<bxJ${jtti}erF?v1Yh-p|UH-oF0c z{d}E;OyF;>+i8Uxe!_ktxIa7#opcmFM)Ze!*y|+E!Rd3wHZKxim|Bg#ioDhLdnQ}q zh27Yn+k^dyEY!0o`=9pR743OIYd(et%&_Z3;ho^a0oj4W99wJ{_Lk^U&*W3_;|FTm z6AVv6S5cmov_9BhteZKb$Qi&4?6qC+l{EGr+n%!zU~;3O3vHl3mDTy}EXF&WIdsSF zDs^oAb2Hd~CLhDpA3wjP3cYa%=Qi9tei_(c4`F*Nk6(R{%&L>{cli~SC!rRfC34Ed z4(uR5p>nc(oxU`0cN}j1-UQu15mb@Sl{FeIt7BS2h=zk>o>?Lvly$4?$N&M4A)FBeUfMp+Y@96%Z`^mj? zANuUb6v|EKZX3qByC?U-0w;}ihskrIJT%(7>lMmp%^H}yKaIHqhcwnX-LtlbmD_hZ z>*wl&eBXv%TMz7HL!Dr3@_&6=US_Sm@|-MWJlGlG1&n6^zJb+FZhoJGAJvpOOOBH5 zJ;;T@+=tTs1;+XgbMGn-^##`cU3BSptzK0Z(WO7j+>_|?7Z}^S9=N^hf!n*C;C6q? zO$Ki7IdDr(v%(jrKu3&qeh0Y84#)`o`$yQ4!0ZU~aB*xNc`p-FZ2Wqsi}%VIl9*q6 zMjL;xXZ@yvcd9=`zKnpKN7l{dIzsC*#wr_t&vY$tspUNFJYcgd!9E4BFfrQF-N7O0 z12w!`BOTtMGvy~ePdUMK7dX~={a1AbGfzH~6%Nd#LweW6&0Q?I{)P)zXiWZQKX7vS zfcBXa(6*s}r<}$XgU0{H#chY54I~~j4li)^rLRyv0#ES9O|`|@I`N8~b&W(nc=#yz zR6cwdncPq$U)SBC>0>*}ANPzz-6(Xye0*cs@W`TI_#e@gB#$m1vG=<+{NoMoca3BZ z7P|LA=T|nf--XWwKF)qu?`!XOsm?m~36UwS*!r#Ls%^G3b~--C)Ac{H!mIEZM)7H` zgKmkjF}Ni7t~IthK3vM;$2;BdLtC!A%5&*!c3cm6xfc6u&7ntjXAunJnr!2ZrJb!=jcOc9c?CDrPAz z7*ba`E6e2{VEocc6Zpl}fIG@9xb6^sMEvIuF(>(>8yM?D%uBepglC#Z<4$BM&s29R z&$Q-ETZtv(St-9u`Q7|IeYeN+8ucfUf% z*E>hYH_y&HW{W7rDHgK7tuGke0nncpawsHaH)Q?a@<&DmHXCiS<^`eoq}9mk4$!T z&?AgV^1GIHQk|8Iq+XCrS) zp=0R%|LE+=O6CNOh|a}}&*C?VqEmFJPv55g_d3=;Nqw8Xu;*6V@tB4WFSqGEMn8w) z+p_Z;Y#ZZr1H9Y)&G#`;b8V~lW84tGUcE*)tyvcQ<%Z$(?;Irx| zM`xTd$&VvmqIG^;Yd|@zt(k+?UiTqrjc7yVN>rx8GCmvCndjv56u(xT*}Qk*d;S&NRNS#qb3A(H8r9ocjNmdl&Gi zs&oH;Pclh{J60@M)P$Q5u|+EoQay)Bf}+qKPXE$l&#}J)B-~T0)V7wQ%|OC6v=Fd| z{ed zGkdSS_PgHo-q*X{W#Px<2dwj23pQ&=tSc8TnmuVDH8I4u3+ZF4$9_&VGZaT#NMG)? zHS{GLXbo%BZeQgiy7sk(zK$r4=HM{OScS)Awf?P;)+QcfUR$6C>9gJ%3*$0p4)Ogh z{Dd>B<>U0Od3wzczIWcIZEfegnR(@Xnp3^&E$(;wu08g<65MxbT{I<{57&Yp z?24g`)!>Nhx|Roj>%Q_H6x-`UOU^rA6Fi$c$KNqF=Y4wSNZLEYn|T*~>zO3u5YFTq z3uYhwvFh5oJm_(Fu!F|o3yrgp{`8#s?x1Uf%lzQaxOb`X*E`R;K1d6)kXkRD=Sgnq zdYy_5ZlPpEHga-1`3oj*68%%o++~S2;h}2g&^=3XIA=+g`t377tI=Om z&|j*(Sx)WEQuI+4`3nU%1jx51=AfLC8R#Q?fe$wOJM$A~xPFh5x51k4VsiBq`(4Oq zf^kLe4urm{br8|=e4p=OY7GA zuzi-pYszh&%vwS%`%6?uH5VU1_11UK#y(@Oi2P&L_Cne>P)|S2(1Yq>{g&Elh7M!{ z7`*%Uj^q8p<43GX$u?^xMx#2w>xnz9&$A{-ek*6M5F1{y`-?weFH{A;*;k;tBSqkK zpQnE%Yg;qhG(PlKDY;9c&Bu3RTjpAg-j4O|@0j&&Z-MMdbJk5LN?*c*iE~0%hqZQr z-{acW#^<2TT=_JNV-q_ zFzfxQFEQhjX=2qxV(%GrlIai2_ucsU3w__Iz+*XoJ&C`{uYKv^3*+zqOy50;zn(9% z>jT^|QZd-U9ea%1%iuZUt`YJ8qQp&AAIa3k#0R;S_knk61B|qDnTcaWC&Rmu;?xm*o4_!}qEI&_Ex`cboM* z`&xKUgU??)>T3Uqefw?ODFH31Z9P7%?1+6M?X`ebuA4X~yf6x05S=NOxsNro#2Z^5 z88yI~kmJ#F(AhXE<6vIzXaYuVt;_Sy4;%YIDW&rQfaVB6Iz zun8J2)_2v#Tjhff^quj`Ms5NptFDLcbuIhey{qtnlmit7-#T}|?5m+K)`v`88nbT? zepD`-Y(ZOJCv6k|-<|6<@V=!qaCn8L&Q^j!FJ9Pl^wDJy42XUXRO`IuABpnRWolpn72c+-wiIk!BONRYwv}L z3o_3uv=-p-$xzOPX2WGVuZ>_T|O16_rnQ?C>*WGti@cfRf z{S&LnHvng;7;8}F=vVih$h0l7(GEQ5*A;@*fu~gcaIZWK#=qm5_DN~oDcS>ikgSl* zxD?IYG66Z6K}TKWBrHB35 z$VLI5+8=B7&ZGN2#eA4}C~JIXPwqG?G!Nai5_Y zUKm_Qpl{Wq(>ndF$f7FreH;2dz0XYCSQ)r^J#FnyICAwzYwxb`3+C-~w@czoZCc1L2abAesuAuYUe2tlBXBTM9^g(?JxBV>l9(5;l zuYx_G#*PCAHQ-HW4k%s~My{Cq*p@NiuVQUHhK(kDRo6Q)!$NjBJn@%flVK z_6+NYGbLL+s&&v z<%-#!x-#C)`gss}h>UY;Xp~{YvLF3#{r&mRpWSjJ|AH-(#;0cBQuU!k+xm0yxyazN zbN#s6`~l8%c)!lITZ-$V@UN+T0T0JUq}9G)Ej>0BI)vu4i4$LHZC$wq(ql3Dw&gr@ z_;1uW%D3n4)-kFtl~nnBj`%te_k^IM>YY_5CZFZ_!w3FzQ)L@v+Na zg`dD*>=O&cXQ1!l9ns4*@R@i6*^IxPS0{VH@ESaa9OgnI!)ex5`X;*_%iQy z>i($T*3b2fzufiEMHLsWhlaNzpLT$Y-N1S$=fB^@dGC{13neD>%tq$uE@zGcH`hfs z&~B?g72QnR3ike0fvf85x_fU#E~9Jbkb4o?A-{|@dT7n;?Ro+~g_=f(KW!By?_3@- z=ej%f3EFl$bq3&vpHr*gcf=3QQZw;Ycx_3sKec3#^~`JBGiM)uff|dKThEODyg${* z{`PO*=ubU^?43yrz?_NL-=7-9b;155dP21!?YXjJFlyt2zjc52Mectq#~&Kx@lSjQ zyGQN*y_ZrT?hztY=$yPGx>z(M7e?7IOsDDlQdd?~$u zaW`#seQr0`zniBlVV4;k za$eO{tnUie;%@ra^_#l6F8MUlneVaP+}CrXE^A;^>x}cU6o>oPVEkNoNO{Pr^LHEV?7hn54Iu+t(1i!E;gHRZCT@4HKXvZ`WFF6$ zbt&|P@@=B{YUyp}J8crg5?g4a*vWQ$xAZpu%W0$csg3;clgLT6W&PFujqhoG590R% zVjJkL9Ppgvdy?<=b9upey@}~C&x$F^Us;L$uRXu3S!+(B2aaMpv8I>O{`7bmwIl|r zU)JkKI-g^lPu88?amt3joj8Ttr}i{y&xHC{4$VrQ)%Q``|)Rb;Wjq2{N?S<9|rodMg;HxPYyH@*pU+Cp2C&p<5H$KEy7 z@-T4}WSiD@1nbTCD{kL{Rq&WOoMpcYoi|ADlzcn|ET@2F8uNMkXDwnn)P?6$dx-K1 zt(0mP8k?8*1Ak+L=d^!J?>Ya1J?|a!#XZHdv^HDswaj@R2f=e0wZOC|`sgkGklD|R zY+_yhwWGIKp@G0+;xhke$5gIGA2tPw>Y8gASFJy_54rx>z?w(&zJAAv3xhAwP?C4K zbhHoLYD}UFwbPgr;6rwY_FMJB*6GLnBhXA3UqW?!Z$oEf%IIhzwhsTzAUPeb@R=OUbQpQ21ID}3 zU<8)8CbK?_ZTSz-!CBsa4*hT+@xU`zS}Cp1tzd6mjCaJd2L@+vCl2W10$AMlb-~9c zy-PMZGzjlZaO>tUhwvtQD5kS-%_sYqJ*IuJk+`-C{?hNo=$3WJ7xB5`lYdYxfJ=Glz_AEfbZzC4t`ZELG51sPsZf%z{(pg z|Q|Jn-HorrN9tL~d!yW=u^b$p)~vZfq)src^Sf3bbbJF}qEJFz8!1NZ%b1sWTg zJ%DfG%eiB|fX>o*p$i{OhQ@%UmH9ZyTKqBANB$n!73Cde#J9Q|PlQ}r#gGS+2cdDW zCTH(;&*VSo?NW1n7J8k9@27L0&l3B4l{)(aIa6~W=V9k(SxbM1AJ@ja%z2;4g_GnS zv}tXMIlgz4<~}!A#V0Y=!EZw^CuBom*L{w>hAL10#mljODzEdWuz4E4kwxAyd3O9Z0eH}D4-n+19Y&J1G7S%mzJqf^A|fA`~$w`5)A-#i?-CSP$5K8|94^4XgnF>4CXC{`x?mlD4z z-S(Nf=umVcc9!C~(q%gLpp<&b+wr5dz7QEqAIwQ#o-zIkzOVf1i+$Jnt$4=x^sJ@i zvsY{yG*gP6_p(p9hV|kV#5EN6lW(tB#x6d!S551&rNjnz^1s!}s(dUncFb73&KPHT zJ!Zd492g~=n;F-tA@A+C~T&j~<4J^XXlh~DRKLKn7 z`&sgu(LvY_#s=BOGZxQSKI=7$=X4I6aN|L51n6@)_lI#`G00)&KKX3uG~G|fRTsLu zoOfvs@s9{JHdZhlz)Gp0{4k*>fiD4vp0NtRmG`jEFXfTii-q zcHdK+F-$J_zSlW-lh0e3bH(#z6A?Eqp6bJ9$|r6|{3XJCnKe3aDt_G%C#8RbpIa|`#=T=2kGru>$lfKky)yBAbQk0_S)|l?>-ZyAJL?q z#(x2}#AI!rauj|VH)P(L9|7*=zX`T3Y z)`!W1;5;hqZutsRow3egtW%knG05w7%eQzAvRQeK$^+|+GuwQ1;cxPvKdfqKcg9-- ze~pILwsLOYDPmfqp}jTGU9X48!_ax`&^TxMwe5$OR8Q{|yfvMF)kzV5CE=}U{Lk{_ z8U9j?u$g(UaB@-X`NY02(mHLg;FvA8OcB4CGf|k+gyx_5X(|EN0 zL00HRY#S#(JTxt}a8nSQW|RlIv>u}Nt!ycBjDg#S-tz&s&gRSVFn{oy#xMDlU>uL} zFWL~U9@#-t3_(YbL#;I_<4ZE{yI!|m!)IJVuJp`(jns$IdirQ!fakPM zsd3!{jcV(&5Uzz1@x|a5%C&*e2qTb-+ETQ zZpYXiSuGf=f$_^OPdL{zY5(dBd?>%fl{XESY5W&Ie^hbP_M7cJ3a`{+pFvmnT;x|2 zT>RWo#agimw4VyQ*5Fb(gIepYSnsK;#<$m4G)}GU8C*kWTk$=@teeU9E9k>{JLq`T zMX5qon@?!a`3;V^j$Vk(piiyY8M`?<_;Y;V2=t`;74Xvt;z#n)Z$mF?pUi01J(9#- zTX`-MALhMoJXiY-iikr-m=nQg{CsCDZePvNh0Zuw&3M$t?K?RZK0{Zn zfu41JE53#KEWjQCwl#iFo!3JfV31Frgm{Dk`)j~)3uDfvmeCHz9b;b28q&>axf3@#@yl#Gcj9}W#g@ysmPubL3%knJ zMQQYPNqdU?paam9;qSEg@|Wqar}oqx!!Av~_!{IuBb%ONtnT?@9x27oqA*p@dIOH=LJtd&qt_%NWM*@uNQNz z^X8Db=KP^_JR@VxxE(zIpK8-|1Gzeqx6r2eYY6c4r0;{0Kk!flUQt{rz6TrbN%kWm zTbiNeBs37StlAeGT`V3=f)nK#h>jFrJc6vte;RuP`!3G2$i4B0z!!Y|%{Y9$6M24U zJpI!5KJ3ET=+BUkxYrsP&{U_?pceD5qX|TjJ%%;8VrVG$&>+ z1o(UNF=8HEi#W0;i+I&H@Y5sXZ21-Exw*(3$ui+!p3jzl^N3$Ka?pG>!}r?zG#@!* zWY}oxS-xxAP9|Rgdc+Pe@EALQ_f;^D_FUt;0m~5TbLS&}1P@ zBcDq+$9CLK8^v^2BjZ|to!Z}xJ)sk=$NG8pOV=Z_GWe^D%#wXRmN_3MJYEz0%9yV5 z%U#D*zDBc?)8p#POUX0k+5T|dh4Sob`tPwkqh`m)13K-`DFOSeyLN23xx@$L6VcwUo&A)15(Z1L|M;e z3GjW@p+D7ZEgc9AVjo12 zzv4mp8sZ!I08wc22iS~S!&RI#Af1fOO23WE=_~q*zj(M`&pGndv9DLa+qsNS_>%pu z^B!c=>zr(jFOTtw?=>ck;{bBKiSKJwJB;y-W=to!z8#!jyJ-F-;6FB>@kuAFHa0eK zHegrHu}s{Grb~vi?_N1k$X0##rhWIA?_P8LV{%IJ3o>#|pjXl9p3xW5={I?w#oq|{ z?jY+7Baj1z=b@1*Xk-}h4rBdB@@y-EPBe;%SXcWBi{R?HP-Xon7eaPQc)>1+AD?X`SliSlO{Z=Gl^COea7Ow9n%He=is@R;+@ zYmkB2qG|9T-oYkg&yzQ}hB3>B{T%m1Cq8Jy&-eDK9L}oCrH)2!aPIqOx6B#poOz25 z6rJ0@udj>XpGQ7tZ5-y$;oL9oL7x%m(5**&9=PGnr?mI3ymrm;;lxeSWoG0AwjA;? z3hcwbC0m-Bu4%fcBpdtKqE4erD>zrO}QR$6UqJ<&k;gF+rl3elvK1ZQb<_7F@J+RL>YfXNd$^Cro z|0Ep5c3&$S@P3ia?335`hI@|*s zzr(Zf>??wQWxf)uYrF#s5S5=A6XFGQZ7wGi&3l-ps87JHKyH zEmLy#cy={5Zj!ulbW~_3-)pS<_A<{QQv(v(*vYe7S$|5Wr76glfaFUCz4a7l>3#X> z%j%}Dcp*?*qZ8Owq9&yMQK`$HYxxA^NZ|HF?L@IU?bg#VRa-OJ<$ULt?9Lmxe~ zclB!5ryO?iyfWIy&{1>A5yZ|~T0>rM%`K%Tyu_Jg(@4k6MlZem?uGiLQ;#Tik`$aVjB8!&YUXT3 z#+?29Z<5y!?fnfn%$%<;{SEWA*5m_ro_ALYF7fjRVV~fG*|tt^evkCBr@S5e6#0?< zK6{-*YpnP`=(|zK!hG`G*AZjQL08s$b81%(ByZlYoKO>E$5zM+Dn2)ybt(DVQEbf| z^srmk^hb}W7$Yag;Tv(UrufR|GGo8{=+dcL#A_?&Fb;fu;A?c+Kzp_!u=&6`we z*MG_Tj%8lrxAY%TnXLErlf!2QE^mrzP*V{ zbIzpJe8^dhNiSBR|9I!C#6hjg>6hO+dsgRO-ur9Ly(H%(j31^m#Eq`U9@d_PY%e;| zX}cmTaC|OpWz)LtW}~Cb9tZ5eFfv8HpqcyGMRoD1_C3XfOdr5m!2A01w=emT|4H0M@6)rh(bqBXqkXs| za#&v#Z1@8;=+Bk(Rd3DTyOMt9V)G`-RCn9Iw8>h!SG+~sXla7+a6c6{pX7JL`)cq0 zCVy?o9(aD`?X1<|dzJ8gE92H)6774k?JfK(>@vv)`782Cs;K9n^Ht`-Yt4*7XOeu^ z@CSCw&De&}+Xwfj$!cOJhDV(9%nk3ma}VxnegzJ(dGLuko-NB(oC-ak@vPDFY3(}n z!T)Bv_Nsmj0p@e?J83$t5?Z~Nf9#`3S$0S5!63XQTWL5nZPPotjB)(rRq3*-z1V{t z@OS9447jvj@k#jkzpc$&Y%%bOhI{N9&nIrO5 z)NjprY!mEA!!N5jf9?Tz1-h@|8hME0!}KSa?xBw!(~0Piz7$vf4Emq=q~|GW>3}s#ygZVs`^Py)HD~rC@xcvY~$>eRIblztj{BsX!J0-LfmUYub)J( z``Ob(z8-d0=Q;GU*@vOuBa*|ww&<^hZa12GI(KsIE(@BK4;~1;yZnse0Nmru`n$O| z%SuIgzhWbP?w?7&U%~wa{4?eVK3vo}r~a*##*W*lc))=lJM}iffwAMj-Jht(FMLJ8 z`*85oQ$El*MITzTO^ir8!78aGETe!#C!~MF){=xSr%63q$>}=LI zdNKY*Vpa><)(g5MdQVYglGPyL7- zu^#z%*k*fcF7y{l=<}2Oy8`&ygFJl9#9Xk`ksYPjHqyPaJ7v=kzn(fs$dh5n#5t@% z$cK>Jd!Mnp@Ns_BrPt5X{KNKYY$|jqpHt+%Pt=OdE!jciHNnEo_b-ui{ac3>Z&J*(n zKWw5c?<(M3vfs?wlj>CTAa1A{046pD{>zc$+OO7e20P;r3=95b?_)yzks=X-k<_iJT7v}PyUyNvVO>u>R&c(K>c9^&@K)Sg&%@US4^Mfn^;WtCeJ$R3?*?Q2f6dg2ozkF4XIfrMK z^3te-){gBXysQSVNpx;>7CzP%i+#eZsb2w}TzJ9J2;jGv!+iXn>)E3h-6Fe;v(EG^ z{WJ(}w>{&CasQhG88i3PR=&T<+q{by_BB@HYV>PM`&Q-JRhD1L`Xex|M$RR|CyW6sR} zMf#Wxf4qJ^O=lltE??n)GxWtgN}fl`a_bhrcapKP3!_gsIvW}^b|LWH^;_gCaLC5f zr-6?#-I~L`;w|!3%{mwU>i0G^-E!Lr@*Bq2+<<)#{59Y57n}8B;6G_C{Yx|WImue@ zx^$TRU18qc1DL;%2J?ZZE`<5IG?)dWU^cmLj7M{K=HH2nb6qkZfN!q*tEdsczM!Rf z$obXlt)&qoXV@OX=*KK zerfye{n)CU1Kcs+wCSbTNk4M-_&yaJ;)g9wT2-5px0IZK#)uJgrLouE?@D8_UgYUk z(m%Yaxm4Za>y5qCGg;769_?v6LxbQ!HqXTF=I{Yvh2C7+JG!Ei?y?@ga1KM%_Kkp> z$=DpmW=xYO9X@%6eCsK!|9`bh!dH?BNo<4F$dOj~NqSA^!6x}`@*&Vuwv6%b?c>TA z)-PG5y5VM}%kA1Vwb>-dbS;-51zC=6i`=eGt%6BEX zYSzGs`JT^wvxT^m+O$CDKI&1mOjn+a>LTX{Z{)gkx@6rbo{xo=%?u z@&GLFw!e_~wb%mAFgntM-XCUtW3LCDe>r`8SZ<#|pYxn^_P6*ESoEG@&{rJ2$-ey# zy*VY@S(D13E7i~bB;Cr|BlV_b7pU%k|KKU`IF0=?Rh;>@j^Y@{NLGobj)>fix>Ce zj6!FAZeZL-&Om3X9Tfwf&ygR6o*?f)XY1KDxqa*-@=;sX$8)Xd1l0&D%t0>YVB?5J zX@~Bk?))-x!+o{M`)CJ07A`S$!HV068&$sZ{Y^ZxsgS*A*jdF%e70FUFaIVRWm0z4n=>!An1QVgR~-1AgQ= z+B^vjiI4PMc)IZiCB;v_+dknk^i>^xr|JvbnClNcZGE-qx*M^bz}tEDi|yo`PpyMA zV_Thr&d%NpoMl$(?YnK7YXz?J+|Q-&8*`QK@#)|>=D$t#5}Dh-vd{2}9|o3A&bp#< zG5e>^-_2NSt<=C=e`><_mu-G$HQ%$YsD)lr=cZbzm*C_3f%#qf97&&TcXFP>rxcgF zqV@&s7U9TVQ|}G`WCfo`XUe8ZC|9ryzRjSaX7rtrr{G?&o|+77cLqX&&7F(0_)_Pl zGLE|gp||e_X5fEkHTqbws#+Uwg6H?t0%>Kv{ayMIU$)VQ>K(po^8~)cnj+nQn6W*~ zm>&Lue`%xTo9MQsj?!S=KMB0|5W|_~vz`&2)>CKT>(;=c)4YSR7`}{RzsJCxWVGxL ztwmh>k}cPD)=_t3HS0T!S9B&GG-JKQIL#Q%Sm0xL?dy#1H1GK#aLy^T?U*PqT=n;? zpK+#Sckk?i-;2D{#jA}s|6alQZQddL3-31F_Y0PD)`G?y-h>@A3wgjeh>1*yGpBBz zq3~wf^Q>vl+`Ufw2=K4COwU`UW~$nJV>8#Gi5KKE-D~rg{SMYtdA=$0xqEF`W;@SC zdH)L8Siq=xxK?vht@!L0;=fH4RbGd6tGa5eTNu()u=rXvfBz!x}(g4+Z* z(D)U%2>k?E!h5R=STo|;=IOGK z7FJA^b+g7KG-G5x{_F1EU!AD7#y9)NDaF*CU$TyTOu_0!H`JgTYS0aH6_Z(pZw3!1 zX2>_D_5v}i;hG!z*O)(knz7PXjQ7NsA@gSN9^R!o0s-22k!gw5qJ^B=8v0qm^X{`B zHsUYSem46bG*9hSgP5Z$`2Tc6xXhn=G<`mHFdw`5Xa0Vaeti$up5z}KZAicV3$8uu z%-=TVk61Z-v(5YsOPjyp&p0|GZT?I>3E(OKt|ViUer!P}`p}6!Pu1QQ^r4AWGj5GF zM{~h<&96RnO?xY&%$GaXM(~vWjK+6Kxz|&^1n(QjF~&Emlh3Vn3~Z_5Cj6KA#HMfk zmVcA>q$}_3JbXHky}tJeE@(uyX}EpErv29YMXHNCkU8&_)r(qC_L!tI??bP?-MHrX zqO5_n=g>EAi?)!R#LEX;yzeHS8^m*)vo5c_zd!3dSp(Zj$O~)ZeT&g88~A@4y@Y*P z{8#N|=ChqWXLDGq>KbD!{aen9V?W9@RTswBeny`?iLWVsSNKW!LR;-RR1bdN$rajvV_h^KI-d-^jj&R& z7_@#9pXh{`+Jc*G)rztv)y0N#eJFGaT`Rs8hX&^&SE|?ei(|xDB7^Pgtjlk#@n2OJ zABT(@M;rDbslCpnF!80S{?w%Vkkf;CC-2ogvzBl5t0OO--1yFCyu7=npxEq>ijU?x zeVD%Rt=+yx(N{aL>YTT-Y{fUa)~i~?yxD8hc1}m;oP9fE&VB|RxbgK%#zPhV2alQY z(2~DlzK)vxf1l~7cc}f?%BSDunN&n|0y2JP`N!I)i#lIt?xsObg zJkNs5$fkJj$u+27myr0Q}Yr?f{cIyt~SWZejUi;wcGF1d79W#D)}ZLG9E z7vHTJ_-N;S!h`ZKRYzI#telvaA9CrJ`drYZk(bbM>>%{ZGZ)aWYMqHbp}A~_9u3Wf z`(8j>hUTF6ICzdT9^zGo=9KR*dN*_j-LAgZp*zN13f=i#x?{aUYdFX99lCRVXX50I zpb@ZF-yZ?_F?wx#sPf;6oXBj$Q6gbw_`0z3-!+(wf>O>U|SS*V&F^ zJ7}?%y+Cz??#4dUE(f(YTl$kX#N=O9m^f7xUA|}A7Sjbvp4q$WB1{k zwUCz(2Cv%VCf=SqkaeO#fsp7eOXnNG=cQrJ5}-e=_cjqbl^#}oT@!;Sg9f2P%ca9I zCr=v~KDfv|>EPyoas^fY5m^D8`NU?Xp-1$NBfP)mMtDq0$+vE~UT{XxGT`wCVt&P?`{`4yA zYP8$IyNzt2HjC>M<#ASnVh4JrnfSn`BAoF+TiKS|*pJ&@mDix0i~ZE%9eVogmRpCa z&gkdr637qbcZZ?B$idF_#Gf;Vf?0L2Z+mgg@q^fz#;yWh#TxXUqs}`7b9gGgrEtX@ zsE*;K@P6zXhyR^<=t7&&#R{85Pfm~ zFf`-dS3Z0bbT-S%ty~Pv@V-zIxzY+v>8t_SkF1L{782ixgOgU?6Xny4v#fg^UXy`K z*>bKd)u&m1EVK7hEc$F${$||@8fDyjh%?@e%zw@b>3o$|XiupanDGtoVqsc<*6els*Iefb=G1b)^f8`h?5e+Y_9nZ}X5xEU;7YMO z^{*I}&SciyDi5G}27NQ%(K7IGn7*+!3?K5m?E@<&;%AMKxNoTYcMJAr>~j~-=`bYA zh>uK$chx_An;Jh?5Sycp^DD$Zo50swjQQu(;A~>d8t<-K$$Me!6|_^1o7Pu#4r()V zG=;c~^4h}4ub?vdnOl%|Os`_YW`QHIv zgsa`0pP;!r;G895^Il$X-=EcPVDJR@R@2!^&+1B z(iGxh_~@1RN|iZ%YNz$03+Dzvh&`Qpcs^m=7Y0z8mhpgh+)Zmyc&5Xzh|Z7 z*$kU+qIW|3^rwDTt0oHivkz+@Tag!0_>rh>$OFCw*DPw4%XjtE+4X<2;cw+1*!S2k z`P7O>l)th9`zeB68s?nIlXWZW+2n;)c(ZFu$UiF}USrEcTgRWB3QZ%o%jxg=Rpd;f zr|tz--& z=tjR^WDeFdC+mUzK4e=CzWY4RcXVY>sX3=92R?G+oBe~Mq1R!K403rzazk(t2k7)8 zh9aA>=d^EHHl6RvG~GEA`ExmA8_Ss>Y5S$!{d0>+99H;QJF_Mg$qwuV zjz(-W=S?gn4{wv6i4oIP%qKy6*+&(`Tn>Ue*(2IFoqTDH*{AHKjjrk3zvhj7>XgIP zJi^j`z47t`-TTUgn!|nRY~@wS7HY5ZHEg5Jf3=#}3wF>;%|cRmhYHBZ&pq<>~Fp5I4a5&S5>>RQ$+bFH0!sj+g`@p)V|+_h(6 zB)Oe&aK;|3)N=k^yZW|&tv+7O-gU*BOVJ0P`oYIr_ABS^W@6#kX(k3c#NUutP}0zA zOld=(8_F8uk7hL_cVsuT?(sIX{UWEqTLA4c|Ds>TTaBGR(%#p}StRJ7%@WWfO8=81#RRPaDTH4UEyR6~VlT#W_KYMFKe2CT1GSbs<>iVpP z)8n%n;>er0+5x-Z7Mv+yG<)T>r;zK?<10=4#;L88?aVzqVCKgCod+)afXe|k9rVed zgGbY7!1b3i<0%)!5BAydga24cJawog*+ng(Tj~`1GBE^r3xBpVhM@My!1QwrzKqWu z8H!v$=EcB!88HEUH*qrJX)*XO1`m}HHy92L#3tKq%E2Leiv6R+h8Gh%pzjaHX7Yt? z-~Pu?moK`vcaIG2$`jrBv!Bcl5AMzCh9BzayQloH*3^r;sv~|N`*I4gB+>RxYrm-} zsJP+C0!w?g&AOsJ$M(2(5~EU#sfv812G+IZ8?NH{`REwsxGC4QGmq#&@`$FK;NE!M zJI}r4_$cU8)AlWXYk$3Rp>%%%-;;c&hD6&7=&i(H^ds$`KlIU-ZS)~|mKaQ1=JL-x z8|J(CXD-iae~kKJE%X`fD-&Ebx<;O=`sNG_^t`t+j4s#Oi~3N1FVjzg?`m@p9PF_6 zPfWjmi2Lc|&)jd;MgAfC{vl(YxAVN~&uD%Z5li@ZKxh1>ON@rO&{-Ymlt$SUJN77N z7a5M+H?bJqM`pP9AI-SGh2I8NC+3m~+vp6~-gIDd;X8jY&*Xa+mV0LY^PoLR`lHl{%2VsFEzH}?d&OrCnIGgCdMQg8jqpB81H|pzRlEBG}yXf`X&!BB$z(9siY&WBD>VaNiP$J3NNEy;F7($9UD`6Tyjqsk=m|l{aLTp(1rmGbne!t4>u|CB28f)?1L&S<@m+2X|AHkMIK4J%67%T6d5Cad! zmH`(P{MIw#<9X2UJm0S-iWe&2U**~gFJJ4;eo3Cucaw+ILtKs6k3C2nS}-fVxRdq4 zxxg7~mt2GuVEBG~A8?S5?L0i=Y|9bwa!<~-jF#(6`-`7#Ih?aC zdotHCaL(Sx;;NCBIa^q8{x`8I!RO-nrN^y@XRH1*I9vt(nv+&2nS|#Ud*nkaB^eU0 zwQ0uWG!V;v{z2kmAKEfT{V4bUHs*g7G#pQ=e$~~cepP&&r&u(btQGF_&ABaRE}gk} zT>OX4ujk|AN{SQsR*I1&@w<||Q#xwQ7;1$LwkFv1b?jJQ@4?tDo2^hD{sn8i$MX8+ z)sDU_ueOCbKgIKX$W`cj1wPZGR;nL9(p#IYRHZcpyVi~goqEqoCEv!zL6&6UKMOAd z_t`lbG3706#^+#M1}4U7#_%@29OF3kp88dv$e}E2qSmLIs3Ek9eJZhmo;u>m#W^{F zO|1W}gI0=5ct@%8j)MnSf1vLO<4^Bj{knaM2h``w=m_CTbJ#-rQ}~R}fUjn9V|M=_ zuyh^cQchMoIazbCEvt41+5Twcp4CQ8RoT#|KX!W63D0<;= znA}Zjx8Ls6=ajC<>`(i6Hq)oME?*1Wz1GaQ&`-K%a%ADtTxiO|SIX9SxbEUqak?bq zF>CYi)KTaw54bc=<+dlmUweUlro<_5PaJ)4l24sSq8L&$Gi8RF=mhNGr{r&}c->id*PJ?d zyUFBDKxYm=#PJ11=SQf4HyXMbtvom316zGLaf?n``)-kuIrQ}}Z4U0cp(*X#?~c~w zf2l8**2J6FbIt8jbMdwRq9!LiP;))?iGfFR_Hy@*Y~51JeKt%vYIb8?VTlH-hX1$yzpkCElw@M<%>nnVV) z?jiPzj9L3(dt>VsTRuvTy|hO8JSC~&_j&80$QWZ^LN7IzRXYXU5oMmFM@x|zS>D-2 z&GdDcycgz~oav?HOiw+r8(un$oyoOSl6}xg#YmZpgV01X?>$7Evk5*uX$}2mLh=f@ zm3zG!T7ZuYAI6YZqAT?;J615IU(?*{p5mra`qViViX9g|!Pp+KQe&QAOpKrX1QQ~R zS@C5bvO;k--Z66wvciX)MFt(u_w-&oo4n8?jHBf&^$E;bUQ0R4YwC%|f#(Qg;abXf zhrf6XXYsVai@lbU7x;>m>P_5O@;I_g`FNgSC9x;v)6F9;m)LEEP7@PeuUIuPVde9F zaXk8Wye+f0^KQjv8vZ~`m@zcNSIOOh(BT^_bhgFb65>R!*s`X9wynrxCkI-g56f(s@oeJkmfMgIO~`=evGDge{=r#<`%&bL=62cxHjj&r zR{vqm@fg0YaIO1hJ%+iN_a^W;w55590TZ>}wrDQRx)?I0h3meYz|te^#cDpwS{wA> z^E_zw%^zVuq~L4eIbT0wwBX`^g9G6$=a0ly`80meYkmB(6A z_;l?f$|Z?G_Z5zPacBzhY2vD?(^1_wr*K~h$XFkg_;=vd=ix&izvfjN^Fem8ys3XT}v=<0F+m8(OqL1Q?J39?$ zfLT0|<3G*AC z*qX)@e~G8*MVBYqm{W%z#2YKW)2a8$-*n<^89cG=zcYB^82h!Dvk36Z?vtK1^9xKB z;Clpo5nhHoLKceV-L--i;?zf>^+Jc%$xU72dphvQTIRbMI&X65{3vv;I&QukU+uO1 ze6@!er_q1(Rp!veaOTF1^*#(Ph3m-OoG-5Z#|4+FDCI$cu^3AY; zyYN>H@12jG+T_iJzjAA5gXfF!SDbmr_glIOJ3%pI|#2e|I&g-p9bdhtr^7xgJyOy@8>#aR)O*+$;8=b;rj zpf!~??9bE8@9BN4AEMLVs~Z9Gx-#HZ{rV%8J^Uh3-|{7 z*|ks}GPO`#7&`oki@^ckYCNhxu!k|#TGlgt7|)&|oWI6cYtX-Dp3HpoF?&CLbA;Rj ze(#2c;f1=#kvAHvYB%g=-m}pcdFb9G^V!09rNgxcA}+rR`i+vS(2=8nj*?8257q+x zs~_bkq{E+%!&dGKkAm@Z8ZOUbKb~XV@jSVYlRuB|iR~IgA9TR)yjSn~^&6~lL5r?G z)RX?t(Z9xgmN7mJeUHes*Q$0*VeHJ^)6mxv>%OAP#srQ(Ejb;t=St_;?0T&;E>Yvd zj>k`FVH_s6>`HJ%4*4nI(|X|-!P|OAuB?ZzTgt7Cz7pFnpLQ$s3!c{J^sT+UU*FnO z(9{>d?5X=w|G@En(Cr$=j?J@o4d1=Yoxv4t+UVQZTF^AMQBe!{Q$N^M#oF&8UNie7 znNM^~-EPe%ZFa%mrSOdAUoC7uQYizI{7EH}ae@JkRWbX8?X~;b7<>}xXcu%z> z#yo62ybb;mzFq&ThTK;(E?~G0TTFghAACjajhN->TlppA&RFmuJc>uJ1HP9S?1`32|HHm~GTr=iEQ7IbKc-(ZIy>TMtunobk*<){lZlDv(E2=q=?MxX;v|TytD! zfad^*t|{+pRn*S=a{E!Ne7*WY2G51BI<9MOHLt+r_5tM>(l0c9`mVwqU6&`ZeP2bxc3{_*&Q+AE2$Yx93|WKrQKLZ z%QL+H4Qx}MaqW(geW~{bjPB_5pb*LB==WJ z$MRjeVijvv#2izrw`J9}&_8<>kZZnRJ@f|Lbvc&-ujCN&N3i68AMujDOaH`?T?zDL zHTJG~CpdimH{>ILH^q1j&Up8)xE98C!2WEE(4W?DWIOoi%d`P5(P8ft^T6jl*fnY| z+eWaP+zs$n>hu%gSz~|l8KF%S*rmI6jiIjo_27a&Bqw)c7cC%WQC|R!@ToSt8Jl8u zk3m~IdCv+LPH?N(G@JhI`bYGsxPh4iVA1=;U$L>CV$u9SehZJrUIYFq%zNT2=ahq^ z@y(ox2Rtj;A5lSGBC+RG>^Uo? zdEI4Y*EJIxI6~h(&%Jx`X+!e^c3!57<5|M{bDC$_{H#TNczB{})Ty8Hk)3mK{`rr$ z{9bWEU^ezI_}D!NSQ)=`n$FeC8HT;gJYnb9G7sIA-3kqEuu`+3RhRacv3JBfNp?3i z2!%)RlILYk*(Xw+&3c4z2+j{*Z`VuE{eR{9LEc%#9L!-36qlJhC=l`@X9a5o6!zaJ+{4>^9Ab-n5@2KloS9$`$_ZpdZ<^!^msAgMO~NA`p6s`Upl|6C2Uz9qczO zB+qI%-^-yp#o>FobO-&~_CS7c^IB|B#+(EXqPOU?mQBA-8?DRqUT?>zbU*g2jnjYL zVC>}%SQCu7Mf9vTJfl7Zzls0z?&x7?8XmhA+qfBCU2u#4g!Di!{0?+qUGE82$eg$C zwL(7fr!>EU(auTp1utu29(F?)yl00O`s!=jFQwQ{;>k?g{>xm264uvqDb*!|4s=#KGTZ%>LCt=p48*`;M{#p#hw2_@u`Qy@GDO zk>BI^tvu4^=XA~PQ@YrV2?$Tpd+)rCtwulf@JezYa?HxJbp~y-oV@Dz2I6G2OV?+L zX~Yhr&kh0~c#Nr^2b9BYEoshvU~dz2DBY;qKGeA2d{M$%dxPnGBu7^1v zw)t6|1B2{FhBx!xM4HTOeNgr8dj+vyC$vJ7@I;;P*9z_D0T+Dynw=-HjYWZS8IALnx(_}88z* z_apob7k+HRmGpb-c;;pnaW`-<1s_W^G1tK2h2O~k1kX*h6TI^sJg>&KY5_hUbt!!0 zqb>lpT=3jn!TV=*;&D5&(d6?o?zc`{i05)I_fOh*PB`~lpzS00YOT=XDPTT*Q%SMt zJyJoxTYwMQP@0Wji@q@DGXF0>{_nt|2=4|z6K=oE#O?88AKK)*y6l9Hc$DlS;SAkI z{#GY^FXLZ^w;;#q+kIaf{py{PHXQ0tSa66e=hKsRRBJl5Q$tJ!3xj<+%{FGpR zM7!nCwhKcYFtli$k$G(ff5iBTN5Y$jI2Wu2A6E8P+&u5CjXBRtCJg2*$N%OzjW@De z=Wc5Mi6>Y{3`zV}=+LyTweY;rU$vYY2#kh*7=KhbsK|Qh#A^6Q`ogTm2!Fq@LOBlK zs(q9^ckQQ^%$X~gnfDy}k}mhKwxc#Hq(5rmS^B)2HiFH(i++v%c!hh%Y&yF0g8TG; zg8L4gO~2rNSN&5a80fb*uueyw^u>O0<0)_b0=HPqH-5{SMff&sYDmYyXFQR-I%~ z^PBd2)HX_PN6f+5>z~m7%WnT>9ykw+Ip~-de1+JXg5|-z|MV0(k-m+NM8C^tHn}73 z!Aq{M{v>m=uj?FUj^`=&eWKHYfzVGFPe;Gdz%762`n-)V>}@li?BKTU#&ft6Uq4p= zTLYm2Xhe2JJ+`>==yxLHZ2fNA62Jb9Gfu(5+ev^7(cswkNnXcKD-hj>8{(zsltm zhaMgVhQx=e>t-3bV{jW{}wobA}8+VkYD&lwr}W@iklbIjtK?BJ&vtMqr+&@VPL zFs3ZR79{N7Ef%%=}55=mb?`<0S+2@&euFvJV@hRQ8Ud{Z7H|g{G z_pk-k#!p>pa_&U~vP0DG0`kP9Gqu)u7@g5V9zL<;rHpY?elKhu>J7BOOU5R@g0T;? z?=QrzUdXeP^y~>Mwc5h>t@ekcBjqouo^B+;;70Z}G>`=^%f|Jho7AR?Sia<|_IVz{CUu`XAUhF!ik^P+T35Ms0K3M1 zpDnk3$^9sJap8-dAfAD2;f&b9KCQhHw;YpdZ|q&?Q4O!9(})+agZ_8#c>He!^-xRz=U)wSr)Tw)i>*+|k?6aOdS2VzlXJxu$6iNq#r`EvuSo)yo@HV<#MLUX7OwVi*_!!l~|=7Uew`8T;ak~P2~zpnXBViX_cO*}x` za_Igb{gpFzH>T4bN?S(m8O`HoLS?2nZ z54=Nu^Z@E?+?A1Mn@5bKk7e%#xZFx6(6vKD0Mz!BzgyVd!xoabRemvJ{`~MX#@R-asp~oHxd?UnmEt7SR*LjCUF zYR`K)@%0_CHOJ>zS+!w}k!P-^mQBaIh&Lzu@$-!KzGprIKR1ex&3R%yXfGZ*3=Uhsk>X;9ud={xw&DFI)_MN0S}E(LQ|%`oEOHSO)2CR^S%ANY)ov+W(lRpZE^NBJa|rwyGkGdx1is|K%pyX@e5 zSHKS=I_FKaqj}SF;mO27foC@JC)hc6B=kJLrN1>s``pbyvFeu2rLNBF+*7~R!1C{d z&TUa&m%5!n$RY|D@LdZ)>cq0sl`(E4C<>FCGZPjo5yAwK>*FlEY*7wESq`)6GFvG!8( z<1S!z%Q*nSM(3PxE!IqyI--2If_(hZSW z^P%fnFL$r&dt`y;$!g>pb3*PJdPX%?Oxyzgm0Z{gJ(=Ig1rz6iH&?yr&f8aeS{F}%k^X!)4)R8D9ZxI>QL7Ne1(xuO<9NLt;D@mix=#$7g_0L#h^fyQH zk#~HTcj$MRv50re3j(36f3!jce1@4@&9UTQhfFKWkb_g1f2Xf`^c9|p&&OU9^(mas z1IP2hh0Yi$MF-9iPK9&ceV+FF8LxddmM2&MY|14FBk#@m?zAlhU)ap4FtoCbxi>jv z$a#-LFZvyZUS@Nz1ev1iqRCH!TR7GHmN@hAPnr*K5JRSyG5%OuAEnvC8}dA3?3sPs zsy-Nhv(lp{|PL*dPQ@xnF1NUt=xGJvr;awRbo z8JdsX(Np;Xe}4x4&Xg|=^xqTtqWxhF8Rw^!VDE~DrF(`KSg%Ea+wcN&5=Ab?;al0$ z=AG<=RIMGwjJH}@m8YPimB{T;tVLpLzE;mOqd1o$K3Xfh3ErL&7I=g*bD4eZ7EctGd=LKk))Fy`aix$irj{%+p8 zA{Ux9;~__eJujM{Qf%l0(CgF7@s%AoCGX9=Aa}HXR`*w~>%4F7(MGX>1Nefv9|K1} z*^95A*2fCgl?NB%r<%6nXYEZAu5En$)X}-mCPS`OIh(0_IZtD{;&m8H39Z1 zW9P37%YVSvK(3UIC(bCl1^XqP{**%>!*^005ZRlm8HE3i4~1_6e#|;0c+?p<$0o66 z>*>|@7`DnD`m6*WFZ290^xJ^nH2Evkh{iTmu8v|l6+_tfhHZY3?>mfMA$Eh$cv~@k z+LiDZ?XVM5CmEl;w<#<5N9Vix5bXcOZ`oAoFz>;}d6|DxYlA$YGvpWAxlnzKuh++^ zBRHEFY5wh;u?{XP-1{5)Ld(&k{eiK+)TdGSWoEGIFG4M?V(O; z)nfP)yDCd(X#_rPpC$MJygGwEu$5x;E814gD#ardua`X=znQU(T^^dp+D3D=Vg~Hd z^7-+XtqHl%PD_>Y>oq_Ay|Q&>qp1eei*0L;YmcAnXUGqo_6+_WeMfn3%Ldj#Z-yVZ z9;@X&o8d*i-$VUjFa0WhXP%}1AAiWcdC&V3Kk3tNfU0WUcM$_-;LbIOZderhUshqhGDM|R39 zKM_9RZ)ZGupWf9xo%KWB=Z^2xRDWt#j{R(u_(w@GF(Tj+FV5wiJK;s)RXDwk?*+){ zTzJRqUj`34AEMpLB|NCOgnuvdHz>?I<^wzJP5$t-;%u()HWFeoCGUg1teSzQp9=!7-!Kmki8=mtrX6q{D zEE2bwNnJDgaOq^_Uz}QDPJ7YGermglE?%dfI55S)VL7yD`UH1#KlpeHczVXgy^HH~ zI(kzupy%`+ljp^_cW6zDvFxNT^Q<$@hYfvogG+Q-dY{m|$y2ZS$0@~Iso_D5(wU+$ z$x+SwVPZqn%CD6?T^`2fWK6PGG^VNhKic9&M&chehQ}=r?N|KQ#Szcm|Jn8}pQiuz zs=f^o#w)+*)PJS-i*G7Y9 zyJmwsFSp%aef)s<7Z_!qRlvLZ`yd0rpV=G37=7s3);`P0x$!L7k1srVB{ny7>cUg% zU3*+Uo@@$TlYKlQXRV0`xM$vl;e)5r$9X4X#P5kRPT8SR=u@%X*?iw+x3l*V-c7q% z{DZ4VHRst;V_CLLv5k+X3_jW~#7CiMi}C**FbVdB$T7jc4f!rSnf1UgPbpSxcv^q< zVZn=Q&|RmPXVGN7_=$X`Ke%%RoWo|rJHRPg_XFpH>2SL9COFgPZ9p2FQE+1FK&Q=H z`!8%bRd)^CJ!R_ZeQ+VKyhFQBnqTE}2zFQQRGcdx$*Qe*k|61y<6 zKV6=r(@CyyhV09f*@>IbK}F0HIDju3B_oXtVLoKb)I5qU10A`1+9^kU!57A0ONkG_ zZxkH8crCw+oHapRb9l6@iWoomsdyawfH~`U<|cpYYhLSNQ;V;%(`T}6fNW#KYJNws zre9&LeIz!6*pc(TEY@$2BF8Oqbi*10bm2vp#hJ&I%wvM_Y=>vv_WvrsjrYmNn(g?$ zf?IyF;@FY_O(vF|Yhu|eb%qRWC3EVbqj}UoG5+y@<)M|tighm^J2o+c7)cE^?UC=z z&~d%B>XCU<@Y@-$)=}moZ%!g__Ap<~;0RrjsyIS^o8}e0Ih&Z1VryFS5Wb{~6oWEw zgEzq#2X5u58+`JN;8;PPrtG{-`sti=^Z+8=6>vJd++7#|b@-TjJ+c+zg4{iIwRXJ_8Q)5RuGl~p5F6)5G&PzW`Sz4*G(Em(#qnJ7o(%56 zcd6M|rn-5o$&6$DAs7va5=O%)(R!Y5sMtk9OAFGjKEIBHaG=O$RGQBZdY5>_^xAFYZ^y< zc_?x}A08fo-3FbXf@c4Tvl1=-Tz}(I@iGrK==_Bj`m^uk^vs_R40{V-$Bs2=ul-u|LXftyTdzhhB+v_{E;{l9S~T{ee5LW( ztnKpN2s|hmcRPFY1m6eHM_IP`*Qr^Z?KSeMmFJIMWtrMuW^Z3#UJ>+__qdrblqidab^sBmEgMK1zHb|^If=G0k6YzoNH&F4-!L; z&mren&&KZhc#EFNXU!?jezZfJJz?;{J+pR!jQj;OtUa;vJyxa3yp_y@&eav3zpeN2 z-N+E^=aD);i#{q2nf=<&bo9x)!u0u5`jj1L;HPhscT1eQ8vk4JW(9bw!SZXSa-GpK}fI!nkXr zz%vh|U$3D51VexGz>;APZ#Czpo)wm};PKhmk(`|1CSjlrkdM;ZIO+0Z3t5o;Y`I`1CAI4T%N z>`vZ`O{V#r9e|FEy=Cv&{*&{5?aA<7vG({1at-wk_x)D}u}{X@{p*_1OT2UR%jDBe zWgcm(`U!`a%R_n4)i{gwZmt85bg99uYftlB6xc+oqklskC&e+%yYQv(honnus9QaE zqg%fkn`S*Vn4zbNKic~;ejuC2pUb`q?tQd%jq$^NTtba&&K&%)C#2t1ld_kZXSSic zct;%FF_+l3_DIH&;i^%!dWfyhBG`?rL!~0v3oDpQ;Zu5W`txb^j?ve~Zzis?s(^Xt ze8(`lO|U1xiDZ(?1Ak%P=W5~=$|pJvKe9GmoMc^Q0da~Z){pu^&#Z@c(Fad-(FeVZ zJ~&H1L7$@!9J!LI4XZH&pt@3clE%Ieda-%eSm8KFkVjogZX6Mi@F)BVw5kYkJrRshjzrCR3BP;F}eeu zg63JzOC``l!;pOuY>5iwXhn_IMY4l$BU>!|!!UM63|cqq65RK&hd#nMRkw9J`c$z$ zt#8VPevZ$5?)oP86*qpNKlF*+5n+t-wS~`ftoiA@VaY#@eF`>XdOR;o1r7xiH_8l?i-sPe6przf1hFeBlEqvth9I)bXiY~EQ+4pEB{v2~Do#dS@!14bP_b%X7RcHSHKDiPuf`y7o zH6cMRUaAf#q}a(J0a38U4$RmowIBgeV~bQ<_mXmYM1wqs*N0IaYeAnJP*&G7W|L;G~KhKlroU`}3zU#fOcfISU9{k^D z{O4y_pNUo~QJGbG%KG$HELZ3HaQ`Ma3{0U1<1cdjNBhA&`6ZLgH6PnhGNNT7emU$$ zlcNM!wP0_FPlyLucC^VDjC`WMX4+O6GuF!TQpLoJHz&1zp7+9qBKZPX1Gj(maYY^W zD6ke@$ezHSGHYz&7=~~@YaTfhc;}8MG)S=Xr#^Shp}|CyoHU*_Kau63NAH?LkBKO` zfEb6?yv{?LqEVMV?R=uA@;~uDJI0H4=udeWA_Jrk(5wg+NY~+qUY|_{?;+xSu z<-Zc2Uk|)=M~n93;-WohPWq^9LB%wh*a@E5KDb=&2j)Bc*u-8z+ZEX!dlWrid%%iW zGI5fe>8T+`l4QkGYUKY0r}66;|BCX>MX@tyfXlkO^$X$&qwzJs2g1x#c%hitcbo0_ zN97X<4`;m@O9UE>qVLC9`-J$yXvHgIk1@8P$MZ)H#vagpqbBZ>HQ$9Tt2XU>Obdhe z{JZU2AB4`;Wt&c0ud|Nc_p%|?M;_-|qk976YsDu|yMq7bA?e0`%t1M{yS;7v@GDII zx(enqo_}bJ9AzCbAWyKi*kLP--}!vUpG!MNhoH^+XTV#tuGkXyk@JCP@sW;w>hvjJ z!4-;UaNadC-cYXV({W$?*_ zob<9}5AOD3UJ+~Q>Q@+B9K263R_$jS-vD!KW)7jY6S8SWB%pP}@15tx%GUrL7(XF2 z@GRxzD@ouh$@5v)8vpj>4FC2X2PfP%b|QO#mGo}mZMvpli}c-r%q_y)Dxjf(*yq|? zntb3?oQ^PFKkshxzJo6*p4G@>gYWh}%R$!9#rNU?4!$!#gYS$dA3u>|gfwUMeK3s- zlU$;Y>*+)9)_;LH^UlnfHA(V+(Oz=Kv*w?iX0EdPqUgLj<8deRx|BI-U554IPH)>~?sf4?&;H_V}HoQIu+|LEiiLY$;v1c7YhOYzXvs|19pHye4gX=let6htI zHh}vY!DAx>oj4!YuGIbW@{d<;#UEnw3B#|5@A@0?QN54&R2~7|NpB)fFUR=w>xyiD z{>QxUu#pD9pZY?(!21a=yq$Q<|8QXL@~2i4uhf~(dJJ@pe8->YLWxH^Pniph~f%zO=TaF3vCM~9FL5x8!|N460-NmkxgM4o2dah2Hz?Vd?TnC+cU zZ|>}I=5mt$c)oby`JKEFy-~8G8JaRa=nce3-h$ko3SWGdxK7qje7N5Xcq4OzH*PKW zv-a>3*+a(9fDR}9)9^;>NFO)6Z4x%?$LYrDtZ|fQ(yPQHmE*hCw_;?J_vXwvKBy9O z(?aZQ_|O#T|Jwg`ZHyeg$0=)cQ(zE5W|gxJtOaL1t+^KG-jzFFU zJPCa-x*-r!`_gUIuJYzdW}E#XbQ9(ilKqoUJdpGXjYs2Nv zY$PUOQLZ(j<{10f;9$*hUkC43>_E%VWe0M7xgEU!4xa5Bw(P(q>__RY4cW@+H$D6m zxg^;pnu;(6=|0W1zJ`^otIIPZ#SYJ89)@Q!*M+~tSL)19^U)j=j9qq$eDj)5%UIjq zvVS9U_^szA28(%*vvPxqBiM%y-m0@`DWA!!QDfP6!<$&|o0ZeadVzeErRA3HW7Bz^ z9J5CH1n`pj#$ovP3LEA5{x zf4&hM$-Ez}nYGnf4cF&Y4uAe{>uARm)xo>- z;6cWYW^UvdOf|F4#;yeSn*#WNY5O4j)i2wTy`A+uFNeO3uL?T(H`#^AciX>(ZAgEM zuy+brze02#`OJ2)E_!b4YuaD8im`%YhF0Mv((gO?b#HqOuF6=0mpr`9;?L#RcV_VG zvBVLq`CZoBBK){(uF5iZNR4FTft7q}Yaymul}ImwhPWe{>fCIPERh z;VX4zK<0ZdPJu`16DQ+QW_+m|f8UyM-=lP$=EIVaNF)i8?{fyS zEeo8}-b4=L)7cA^ze4siwiY(sTa}De{-|1X!dc+rT4EY1?;-A?48H}R8(Fv8`EUC0 z;g#soE73=Sv*cq1hcz~h#n?1_k7KhX;nm{j>gU%EZ?N&qmI>O&w(pHMi| zNyXUdTwM&gymXYm`qdM?N5VftN#K=$)@qSsE<9#%XZ)0V9XLQwhIi86JO>WOZUzox zfrD&fz1RHN-|4)U9QZF{zD7p}_T+F+wE#2igYI_vivAclU4|{JI1k_#iE)M={242dS@$D|?%k?kZ`K8bCFH~Bo z*nWHrZ?NAzIB+0$IFPR?AuHN<-cCWFSfsuLE`=M=1c_trT zIdC=afR%9gKdSNVnKjD_PRFNc_$2ja;>*&Q*sBT22Oq2Cnf#uNTei6BPL2>aNju_W z<*e^Q`964O_$mAI$g^uqdE}D%xcAp~d99D+nLfpT@o}2xjCG+qR_aIT z|6}yvBE09^zF1c;1A(BR;u}4D;2pP{Q3Z1F$tf_Ex?U4CaLd0ztFkOFRpEf zOs3o%a9r|_b&gWs@C)iR-|M&W6kZ^CXnZj6hWP!&f`Tj3RbLqj&4bS>t9A@MvyK}t z#Lw~pet^rle*rzf=&R&)6dmZh^z`H;WFz>VTMBMVwhqD%$DWpAFV^yX@asn!eeRj# zsmyB{|Mb`Qfq_EId%m{;>SwMouuEzpX>ZW<0yUi0@&Z_CsVNNUmGK zy`0YuQ|379-_;z9y}=wb-d`XKq+9PKMzruV-`oIud4;~Lxx3gSw)taz@O$K?C-yoO zodo`2huPyGCWk)eJpirfIeOp>Y+QG*M)slJyJaQ!-}?dbPJDMfdw{@IG&-!b0vHjC z4sB{~l6%rkj6Ml0O&jb%Vb?rv=u~Z939QUMh4cygo}#CBeb%@VJbjWi&6P|!5jh``8#~pwC zaQxPXIrqxi=$&v(?_a^M{XOvvBV+P|7XiaA;RIaG9L?I=`q3sAPQb)&(`WQ1@n=(( zaa?kx)BkDUaVPNjx~Kool>6RYLtx~ti`t7I&$M1>~*zi3#r{0VZvpY6BLKi}e>6|`djhgtBZ zjAtk5``BONVZ)DS@G$JIHYX0`Z1|UW$@kzTwtTRRU7>bA`}FMim;7PFGU7iZ`vxJ~ zXG*q%57H-!(Z__JT3?HI)335Z{__K&BI0vo$5v1VJpzA)Z~)zAg)=7CZpf#84-4Cp z^ynv_Tzv0|$QAaJ(^4j9voIHgsR& z=s+(aQ-RHfmnchL&ES)A5H(OUm2Cx{hClA|hnDRW5Ap>k{McXm$m8hj^#8B_&RLXxjO{Yy7Ht{-4{+Xy zt)%$AoqT`vcSg?G=h2aWiq#YE^~UcPg6qhcHzj8xS1z;V4C6O)hJL1!S3z+)ZeEv{ zC0lr2(1dK^d4j$r^V}R8g3Fh|U&E^@r}cB~zI*P2|MR=U#=~Y*`3op7zT6BPMGtC! z%&Zf}rZn~mbyQCKeuA^=ZyFm2?ZFn(UY+{dFxFnX2>e*Ngns)o@p`*|#RQu1Ku?@~ z4!M0ym;I%-rB5*rz1yf5QH`5^qTq-8e1DSsql|1^H~vXwtUXTN8kGkY3za*XaSA`h z6T9sMMta9uMriLCy0~z|=(Xtn*UQG`T_yA%WnWbITnUav(Mc4;vJl%v?P~3HXGBc0 zg7(g%-{_TgpXS{Pc#ETB*Ng?nX-7Uco*A3LjG1Sy+^ZbL9tv_TqG!-U9XkD3R^5jn1J{x^l^5jk#5nF0|3(s{vq8sySfu>!)+3f=CDc`;C zx3C8<{kxTS+Ouy-Tcwv`Cyv8Lyo9^E^Nn0*k zYRGF9#!k73d$ta7_O(WSbnwae(b;R8IL=S3Vh^)t(FW{T%zk6eg>K;sHxb*Sz1t}J z6$XC5Hv+6;&~+U6DHboe3VXbfJe*IUXTdL`_j1o4ZK$mr=Tms5-`zjWzgFX#z*r`5 zMzu{c?Hk<3@Jadwb8ZG(>0a*k^!BCpPS>B}S=@SxAJiFxY2eJ+)))LwyPoKi#-Gnx zni#waV2zEgb0*TaewxbQ4d|K1zdszf6atqD`6+-4XG|V(*4bU(J59V~7whY#jSAMc z-eS+sI@*GNsug>u+quhD-mPW$Wt}xIB+prM=i1(N8|yFl>kOW~ zw%Nh|I(C}1g*M{QpOI7b%waThDD&HEi+pg`@>23@xob)M%!mSLN$1$z^>|BuC+Ia! zdzIH31HYv=|!!KLtUJ-?I~j&8(d zbk9W>6fB3}1D{14eFeM>-mX}tXh8XU<;T=LsfEG4zam$j=o9&wq(8N@iL!&KuX08{ z!}}}9&v*IDc3HPvf_{gZxRGx4O)~?f2m9H3Ziy-6sKa)V%yHXTs2sG=y&LoJ``;4p zz#Kn;N4PTFtkWKQZzgp7uoJ7+#a@kQZHT>AdyaKMS3^!-pELQNO#Bb)VfwD^wBH`1 z-LsXqTQcmoOMuJu^K0xl1}ji4**e&FY~;G@9yW0(1MyL6PdWVJn$`B4?S3yA>WP0q zuUp4D*zpfJ!RKZ64nN9IXKSFEV*w^<7v zw?TX6o~T~fU!Hdl^KRTf!*k}KKQk`*Pqa4fI?ZK`Z2yw>BWxeju^-~spQAlF&eRf@ zmFVr?wz1FR)$uBPQ8i|+#LpBe&s9IyH>Eu@?S|@)5}1 zc@p25I}Y`=HSE|0@S&a55&UI)i683y@wLQjvd&(=kIma{yTC3>jwZ^g-R;05Haien zDE~V1R~~lh5SKxJ)6iksK2A>|HZP=@qbBwPnpjuu1EKF4zvLmw57|&^&x|Fn12^{F zGm2eXG~GX#6Dz${AR+5c5py3&0*G}ihG%* zgVp2n*M6hcafPS-vC`M!E!+*w*}Fis^e(s0Ze8?uZx{W!eNALd)YoP7r7={2Z#C$& z?euvF+?jRmqpLNBd+7h4KXv$Vg$?Tt8_4B9{aI6FsL_2&@Mj}?#22Q1?BUNYKkCm~ z48Rvqh|DQL2S@h&4I9bjPiNxS;t4DN^;CX6kbcgFUmvZ_HRoyfUFVzfVQv1&=V{wn zzmK8SPodSc#_vn%Zu)rNtWcu2FO}qe=N9gFPH*;=F6b3F(DF@q(+0zv-YoZD(h&JG z^*&}z4^nqeUPF}jj4Y>odJpn{4WAqMtYKe>c(m9%oVCS1)^DF5e0ZDw4WANC&);?* z{Yj8u${&I~{%{n#dc)Ua#nh zwoE)TZK?cE3-F^5H+mU#8C_#Pi@i-<+LP>F46ZGv9&rq*m+?96z|W@VhBm=(wXM5s zC)BfNtonR6K1%vu#yJ?34QG$B&${s5E#Jm|zIm5_>bv|oCmIFcPuer|g4%rJTaCN{ zjCP=7Z@_0Bz;C}_>jiAkd1LgYF?{DEbo%91D)I(620W9Dhx3FX#g!!XB3n53uJe#l z%4@$;d`WyYijHRHKzlwPwxnRIdGStX0Al;4hhb}Ko>~{${}ebQ7p`&dG?;~Ng!5_* zw~xSPWzD0MQH=N<Nw9L=&fd(oeAEa!UQzMl5GebM9;+Fn3j;$g^_VdQEqb8pC-l_KBR5^exJ{HzE3t_ zs=5Cd6C)#E^RS!HsVR5+&BTK-ZeSNmyvW#r+e~;OZKPWE1VT&45}QE$LO!`(lJu8E zPw$4ktGgg0>`gWcR>0=xkJ@Kc!<&)m%)gF0b?82I==8B?tyE&Ua>hJNy`1{w4#v`l zx=&dt&eV{T(-+Dn4^{Lxte^Nk?QO#!63bo?itkWN4SbLC&`oJdvso)$j8* zJ!rib7$0qJFacax<5c`b))qK!=6MTu<1A&bTH`&j9o&)ryu_v#(R~736TT$Tfwkx5 z>HxWnQGQB;XUwOF@we;^gnX>6TSxYC{8`p=75e!T= z^{X+rFn;C2h|>S{-K~*ovs*XW>FmiNvkr0}#(wl*-Az3Mo}u}P9~IMQ7Wa~r)2E4x z06x0od<%PPh3F{}PoHi-ZS<{J0=2a#ZCyKzHVPE$Ol;90pWgY1-Q%u4@Iy4Da*E57 zP7!77abS{o3V94%nt@9bckkk}-l}-^%gSqsT`#B?9T{CM*Pr?w?JKXujkGOYu7b}b zxRgY9Y}cW}Aw1^9mI>Y_&swnH(M2t~B zW8Dj%mtC)C`n^Qo=_AbV4ah$7R=!OPT&Q);m{MaWkMW205s%-RwnEc#2Yi3mVcF#P zLXgpqu%_alKH3rQ5s_CK-tx|aPNBI?z3?kO0S|bByQ&!19L9Zweg;!sF#9e%Sig(;ebDOFj-F_KD_7nT z;qo9`7Za}O40@Qg(V2POmHXWp=vG<>>T6uFCs=pps5$74b9daC<2~|(WCC()KYQ}v zUjqD7UkRSSK^*N7aO)~~!qHOh+sf0Y#T{IM&<7gNPTjlEyFM?=3cZ)z7yJ2Kom*k7 zg+bzK`)NG#wGO8KW_;%2k-A=<@B_KhEMm%myuwXXnovnIp^j4|gS3xY$JahCs! z*4$>`pnC{aUh~TWrt*!+U!~uzywmvId7o*%?`dx0ebf=I2$q}PPhYc~u^oZW9)T8) zoJ+oW^!nxCWF6}`7TzhIub9j?n8y)#(HqP|=Z2OuZk@kPGN;-2q5VpX9D~@(>RS@@_@fIA6c4Q;!hnZ%5HcM8Q3SwzQ6uG>@1Dnyj$*1flJ%p z0~W$v@samf$E=I}=6I$ z{2%6j1nsr*PJB&e+kwH|-~zTBGC2^s8+K7MOl`mCg1 zwNXVISAZAK(1vu9Nyx;*zH{oIVQs5uTjlj!k2k zIKmk8>~)@9NxSdSuIBm{?Ov7Dryh8PUZ>q7d;KZa_UIAd^DJXgA2-9tj=t?reE|Lr z%(J*_u5a)|+IsvMf9k$0i|4-JJm25OKmBfI{`1)5K`xZDCv_!$ z;w1Wk3cmn>$ofWgOBZf#J<_F&S+5PJ;%(g$`aCC(m1<)Ddvu9jp2~R{#28z@zm8%iL+%WL;dJSjBhX^3UjpuVnSFcj40s z&kKW#1R2N=NUD4!1@p9FtPw7{(rQ&Jm1)54iJ1sBTyt9Y)TcA(bMjD^&2JvNm z_qONaq)Y2(v%c@W6R0+P>0=uowZ^F= zbOHXzwN}GCU!Zg<|I>Uu+Ub8v6*?@wI>yUgo888g-o!n8f{Sth*Ko#jCubNmw|80V zryZE>0A5c6ufxpk8Q@ie?de0OzYKe{3i)zb*0GWA!smCeUo;(^MR2L|&At*%1f5l`}`~0>aA4x4P?$c zwr(mJ^E>S6yRA{=xG4<&3wQ169J7nxGj#Xg{o)6O!RKED&)*0(^! zudP0SZg8qR?`nJRa%wYdmWEe|zngk-yBlZYTC&TV-ER6@bT_ z4~)-eEeo?RuEGz4&!v-2*Jo=#<6?N*h48lS!BHV-u?sx&;{N{)j+Mdp)&kSgv4PO= zd>hWg@o9aq1{uP*c4S#cEBZdV+FkSVJo_%`_3V*`*VulW7Vg~sXUlq_oH-An9c;X} zlK9lLWtLw1$QH?iJ{KZ7fcfzVF)QUtkLd@H_0Y8-`~B2YBXNEe;%B1r9C@GsirMI$`FlaSImSF{{pay=M;1e-4Bm zqkr*mtxudf$M8MQr;)xn+qzM2u6gg>tGVdD}uh&dxfD@h884Q|E5# zgxiIq@DcWTS~uHsY(qZS`Q7ap9PRfGLk7y<*M?kBjK=Hexznt3svaRXRAjFeYGtk8 zSgL2etHK4=lsDKbxEVj%5nrGBBc=Z8_p*Bj3-bnie<$>I*f($GmEgxg^{JQ?{0!IQ zXGm_Ae=NUVK1+>faQ3m0F=(Ln6atPW?&rIi%!k@2=1-m zwsf*^yFauEIGm}CI<-N$F595(f202E=s^eZ52D`~dF|@|zyAjKMBi?|TI0ja{dM#> z`~uh7c&9npdQb=-p$oGJ^x*EN$j55v;C_5q;880$K12H}%mrM&M)m{#tLCdW9VLGXmC znalFenM;4>qBi9RV@-@rWppm)5oLUaj+txX(?H071AFVQ^r?AVvKHUxvrmuteQ;8p#qP~;NXEt*bo=OJ@6H}`C;*U9&ZCe=LOFq4J z)kkkTi0^s~I+31hk9;EWjl#_u=<;je)`W5B_t3C({i@s^wdSTdF7Y|@bLtA73E(MzhWx2jvw>+>Ya<@Z`ndfp z`Z{Yv-{E^%C&naLXsk07#{@pcpbN<+jdL|HG-dg2)_S@42KF;!Gx@`5*QFiN)ylu6 z8{3$}H1v@$FrS7#I?$nCvo33p-?A;#9{T&g{Lp$_dxqvWV~FtnyS(@Ej`igGHo5_F zOXK;z^6^#&f9OYa~i0x|M@3i#rzp# z$NaOpnE$uvt7B}y$EknNCh2A&``Eu21U7_o(j0hnYmKfiD`D`cqtdTzm)k{>wsmJbXy|VB&q^O^1_#knY*}y2EdwNn=0T zvNq4)!9DO$x4ifxF^&Dj?~5c$X-D!}eeFY*O25C0Gjn^HR{`^CWv}No+J4O%dTsaX z{Hq?Zj*WEp2}iT`ip6S1=H~G(IS=0;a;<8_FmHld0ms#DbxSME- z@*5?I$w_i9KHoR=T6E>=!Qjzs=8w*>U+_>&`fnJU{XILVv-gok_yF`Rf1qIQ+RSHT zH^>JnpOaU2`+$Dpz{;J&t&HE*PZi@P-QCbE>z#o1Qap=+Uy0}0OLy?z)mc^mn*=!Z zGV}G;i_)j+CLNt;4LKFsiOF%-t3x-Z%>+E`Ffzu(9H}30I7xloS$!vQK||Q5WN)V0 z?9otu7I@;)p7fVBUo-nx zPXOb0pkZ+8bbE{PlQ$7lmGvsVBZvwX>=-sW1e*(PjAT<5j zi4#*MfTQ~v>s`#@az1;)pC4sU|7-Xvf5aGvGXE=1q^}XbOV@m9O9Xr@N1u$`rcXQCUoqOoMn~xhgq_b+p*E)HJj0|L~ z;M2_2ZhRGc(Bvj`Wzmk0I(>03@%>%+_c`Fk5d(LB>3hhD*YR;4^z|}6nqI7#=KVCf z(T*E)j_xLZ&g*a5WXSKRg8Q3rXxo}3?FzUzCVp7x!y|GV6!rkvAXLoTuR zU9}5-T?ZUQ3sJ@|p3?(3==W}X0XMO>=y$}>`?s|bPoj02z%vsYK;75Cjds>yg0DwC z`gmyd$DES|h691?ZNRMv|Iy=J!3-FCVK&4Av-MY>3bX#e%!ShrfQ@wZG2HX^^hd<` z0Uv!2@?9}Eicygbr#K49IK!KW!P0#wI#=`<^~;VrafMENS4Ui7Zz~n;Yo$&)Q&D22 zT88i(pV7E?J#mG-fmvU4uKw5o!{G&m&}s>^Is~6HeOS)l*~AwruJ6G~r^Xi+(BIj` z7uxv<3a&qk^Rr8=R2)BSf>^aAu_`UxU8i%+ib;R#>+GdZwIoA1OWUI%QfZ|k_k$m^ zHUI3+v$T|t&12s1$V4skh6gQWty^xfV~_S-Wy|4VUxaT>w9MTdmw{(B+@GRzUJHov zXs)nQ+Q&-Nun(df6H~2_&YKoMo53(S_otDIM*DiR*{fz zEyP7))AYg*9XIpJ4RU{CXc<0#^{4Z@PvGl_BCoQs+05C(TY!(@v37iQm@}b@P0_m< z9s8Bp!QvT;-7O53Q(t)(3fM!JzoV7;7qGXkXWec_G;wI z-TXc4@c{H09&Z^wu00=fHoXd4GTT0zZl5i%<7N|;#0E+Bju+jb=Q?ZlD)28u?!Sgk z*j#Ca21C!fH%fPJ8-E49aO3BI$9nx7v3Z=eAdYTNPugURins1w&-^L`PyAf)m;_~p zpo_$vGUdtvF-^88Iw0llVy*P4b=r$hQt-w0o_htlWz$&Nk&kmedS?#4nx5zvw7ZwH zZNH~&ec#XLtE|mZXKk8Tn>T@j!3&Lvwv8W9ecod0iC+_buyz(}r#aLrevq+CpVmD7 z$bF>RAJW)g=AD_Fryb$gb+nNHj(gWy4WC+p(w3>{v+RMXU+#c!pAKJ4LJRpm@S8ob zM3oiVB)!EMQ)CXY6Y~E#zjvSG!o}Wi8$|m>W(+o6HQj9QEvo&4oU>}`vt)G(^M5s9 zpRv|FjsC(MV^f(YINp~wPJ#pZSfaCef4>cf9)g2A9_=sb9rffF$0@eTh_nmwfPFw5cdsbV(Nxb3cR@xFh@*DqSKg~VDZ_~HnUh7YN z^E~TucP!<~%Su@@59X7YNWNM2jXz*any0ZN9bD1eXR8`?UArP zZPc5FP0{VSM^-OG*IA4`+T`q&>|rpIUtynkBl2FcS{vzqBRbo9)@FufnSAf^1sa&%B0REr^$%u}BTM~Hwt1L||8&Mv z&RBH+t?C&6Cgc14``8P@TgtoR9z{8wb286?d32KaHTE0yl7M%+dv9vzkJLAGN&U6J zx|y+<{&`n^x9#HPZ}vobnI&D^Vl*P(|23+Z7K(9tL0 z(;i3sXq$mWcLNLZ%cW)k3(dXI0}D5=w`lfi;9=&Wv1=`XdkbsZ%AC}e`Y`hbht8o5 z)z!R~xNtd(ddeRvzrXSZ|K+f&hh?1a@aka$&{Ya8bSrd~iB?E@ShVdlde{KQT?oue z827|LD1_a7Hu{%zp9{Zss{XZwe$Gb!()srrPji1Zx)gBA;m!gJ*kuK0qL)g)tYkf+ ztgm#3Jyopz5ODA^@PRo zuK}X~>x;Q_YtSEk==g)M^Hhese%Kb|vi(Wc zT-{TV%a|pLviVdUeQ!etZN*+xF4yEF?i;`-p+YO+hleMC!A9_e{7>c%67PA@@aU8Cgq=+p;f!$S zOzk}SMZr23KVC2N?ViC|pQg7T;`h@_$CN%s%)-0)0Tn~{4F17`il0M2jx%nZ$vOl~ zHw@ApBpQGBV0kX*gg;AfH)|~Xn8aCxAK7=18~8Ez1n@I(gT@4_L%`)-;PF@5Q<=>7 zf|pxH?L(+kbhvm44-H|1c` zchQ9M6w2STV*FwGee2ZyKN6SC$>9uzdBp7b5~L zOIOo)5G1;8EQl6m<+)x~Ze6~6(+#Q*C*zdy!h^|+pScivJL2>I`wmp+-ey&+PMlc&7RpD^%MK%NM5~u-EyrVHl<7=( zUX{Dn5%jUB=n$Og3QyW8FMJR_wR1-L654qLd=)+mH^zY%qPbbzi#Cw&N9ZFa`@q4a zzo-4fS8~Q2_`b&eLTtQc?jhZ1_3E%0G`AS|I`=W;9(%q)$_X#ECR&?6@%_t($kCLs zcA0WUvSn1usj_8`lbcB*#g*r0Jb#Sr`2K`b^-~{hpN)R%-WO9)B6-z$UyS1ahJs6y z?b;_pF7+#ie`nzzF@AL3y@t*=fqY|YtnTf=-R$q_o#-q%*-9lOpQ_-^;?c;DOT{PQ z!86g{bXV^0IOn;;>RDyspFT9(3cU;bzK7rDM~>g-dz7!H-@)_!rH3j1I&?o6zn%P5 z8rNWAVs*~tb!_c7E_(RwBkVOD8I#@c<@wwv0B=i7vweZh;$g%n=)O`nR{gDC;(wS1 zt%7%vzWC>7JHCl&+7I)6r}qCR+cIJ?qUBvz-I@aDVJ^Xf(^Pfq7wz(&C zG5v<|9gb&Aaq5V7X`V9%(hsyEy|M>(lyuivm7dwMO#6)*m*NhTkGqUKR{(s<66k6u zbegX{w3&g@H2F-{VV5^oVb{ZFnr>j<41T3~D4&UFOfpw<`l;rJoNC5zk)W?6cqy5@ z5SW^ILu(q(XmnQHb*GrXg&zI3J7W)v&k06OS+)P{bi2ItsW4+ut`_k!d%s%o1$ORJ zQx6!7f6vVml4a+(r@a>1Yp1TxFu#tRVqLetK}`1%Y}q6D7SfJyAvOm-7KMKx-wl64 zMkJuWL?zF{R>PaDai6Tb`m4c-qjRj#o9r_PrUMweU^MnR|Ej^(x%I*quWpJS9~j9+7I1wL)SRAW8_p1cb@k5KmL9NSkyJjoRC zM#fG|K#d)92EUd3x|XqI5o4m2gF+Cca_A+kn^Z}+V>u9pi($%fVlU96IN!nK`F?S2|Dw zbFgKQ&aLDGS8@Jun$@?edn!HU1LprY`1;Sx|M9FZ))U8Ey(X(~)dKMKXVlB&f3kD2 zK|1bmPO!G1i#C)$9;3hAOkgC{Vvv6XkTMry@UL=;A({LM$h2+bJ*tIag6y-_Ux$_ z@r=Jbn>_;Q9U0?i&EMJyo#Y}@Bk+I0BOkq7x-j}islhS6m-)I^EnrN`*fSN}q_69| z9rqRNm;BJPSHQJ#W0xIxk~!&ak_dB>PNA_&=Q8nsjC+x6K;~BTQF_G7Hr~CpPJEJo zjY0d7gXvp)@v;$gK3FzEnXj7}!&1f|ex)%ezbE~fG3Z&{2kC2!tw_5SZOH13`DWs( zaP(_k;AmI(1<2oXCV4G5H^~Hu75Sx3UN2&6gA&V&NYGr@?W1zbPm9 z(?`g8fbS#Bo!O=@*9S8|Wq~z#XK-VPxz9!PVfI;EKa+es4?HNkadEkeyjOjZW6-hS zliLM+M8lc)eQ5l5_R;u1hkgs~eaGj=duZ1xK0WPHUU_WskEcYZqJy1Jl5+$Y==)^w zK%Zvs?H1n$LhDDY?lz_K2742M| z%(gD=hCY$Dd`FwETEqQ#xxq!~D;leOj+N+lCLaTQyplVKHZbN|beoy9!Ts;SnUvL7 z!;A^s+CGpv1{T2Tx3`ifg*EWo}Zhc|XbYu}HbDi7vDt7oGR zi@u%#XEN#QtF(DG^yTK8zVjyG=o#`&XZu32CCHg0_+zkJ7jQPC8~wuP$P3op&I^X! zA3+yBDc3aRV>OOGS;rpWHS7hwY44rgG@QLNbmh96{GnI{uwH_Vn=5|n3vw@FHTy6t z_kPQIGimi~NZfJzsDnN27}+PUB6rU%meJL1|4epp;5uR%ZxLRZdqqMUkJYT4#roB< zmX$d*=8g}u4*@Sf4;*ym&EQGP4(u_!85)|W_00_yKcsvo?A znGI{(Pp@_qXW6u(2f7Y*cj}%%?xF=(hWG;qxO*ZvWGj36jJJijoo?(!v>>my;A3t@ z9tSV?huXmZryd|)8oK)Bd~84Lu#LYMQyNcNrDLJ*nDCJ~#F!7bnaZ~wS(!}#_Wix- zgYVP+BjBl#BW1tvmCC1{L;e8i(n<90q&}%r$A1hxKzhFZD~Do(PPIZwKQg7AH6;hN z;`!QNFgE^H6W3D-Z<)=%;SF|7k8)8z%(`pd@*&LlhT}tEjU&L%_z=K@2J%TNra-wy zq80v7$xXzrL0{5W8`$?(Tz?&7jZYbBRYXA-y-lThZV(2J}XIjghl1ch+SxbBX zI$4|KAMZ7v1%o^v+Qzs8rS0EUb~I`PYvHBxwX2W!&J_t3UGSQE)}7oWyWS$1H9@QHqe zPs`_{hX@X|5vH$yV(#W$8TWU6)z*#lUbd#}F78FEFUKw^zYo4ge=7S=*HKRGQAhlG zF~5x+2QKURLiau8i`jQRhjuld8LZEqxr+}}au zHRdQfnAYYZ#whsfe1rDS;_d!Y=#}5LJW~Dj_XJL<*PD8U>~F{Mb5s6W?Zs>TY}zJ= zGC8?6YnF+0GE@i)lYJbW1i-RqZ3_Y;~UfQ47 zUH0}Z{?0~Ul-^c6?o@s8IoduOeNpzzjpnZHQ}bb00w3dJKz5@$rQ)p7Le^IPRK(nr#;N2ggMpnDgIuLs z?QfPar%L8j!kkog8gm-Re2}}_Bh06m`Dpy!vBa=z1&3UC$U??6!{|u4CO<@7I=xc& zDGwFQp_|df@@Zf2H+=4}eC_arDPh(sRszlO{F6iAA#;tDXnnZnP`UWfyAz|y%ZDy% zzC*X0pb7IGI@!cNw7#Ps*w2^`&q5ur1PA70^VBkypSK@r%)-2^Ox+CP zyd(GdR|=oDQ1&D`acuKA;}or2lu0Xn885UFXWY7H$xAQ8PIKR?i^IkqK_}bf!S4Z6 ztrZU<3q;q7BQ<^`7cYRJ_IF~yAkN&izpr&S?Xd2*^nrPJMr??Gj-hm4<1 zyd{hNKH*b+7&y_M=?5OBvI7}YGiz?fGSME3%DH8{>whL#9ca$rD;`+A=)meEc;UzM z`eUTCJE`_U!yX7(}s z6u%#IzCGSc7{?&^qx=N7^K39@sO3+L!8hW_S^1_F z-(l_@1#fq-Zei%bVouV7vUp$4e7>bm(Iw*-y=e~OiEEihGknI#3*J?_bIPC#@u&~O zopkpWb8*MNjJ>cEy)W*#&!9ZuYmj_dxYlZ@px+Y4;`ljIWmayx;!-P#k*t9CN|tiJ z{Yn0y%r*amr{73##_GV)?f*stzs~hGGN))v3jf&lvLc_oUcg9xL+^TxEi(SM>W#X$ z*YfMGzUp%5qdd*s-IAm5eCc>P_oe#>BfxhRW7XLa{!93sJJ1JBW(P&fw(l8V&*jE1u-)}bORo`67u|Y!qV|&PerbP- zV;|{5xx9&rK0H17MHhLepru^tLs1rG! z-oB6baelini#Rkh)dM%J_4AZ*X~tdeVdRuJ(YrI=Fg@Hl`Th*-k@T~QDSK#Jk8*{XL6Lz6T9C`FnC8Hv=QH zUyJS|TYVNb*9PEQ2h420VNP%dx?T}BilJX@Db81JH}z!m(9XTURsIRtriKof&rI6L z!A~RJJ&W(TtXIht+gA+krFQV|zubn|>F(EPjyitfJzeiJ2=W6`h^3;R#PSdtxJE@^IOGd`RsgN82qMq17&7_6XqTAV!-{jp5(2IK4;n!pO?&fHu*H=$8O71Eq>+{awwP(_-qbs?4#Z_J4 zfV)@x6AvzU3*K(C+xAB^=7fvG zOTe#k@GBR5=}yL3&TEz@^qH=MWiNaHT|tZXggTEhQm=H&1)WOl=rF~=L{ zx%USzcjD$4mstbmAFqY~!wU_4(Dp#^*T^}_$e;SQcog_MhR<=lD`$M`iiioLu4GQC z@pz-3yV=5&H+qa?f9^(S%fkL#$fw4Wh5af2&cOdstcPt=`>;Rtt{D5%)W!akEX%_F zRM|4@PYd`@m+pi8=|jIVdt>$JM(9Wu`jO3la_pEG)}wH(WpXv1soekDcg^ghd`QgW z6PDHIvm^hw<+Dobt#1+^_F0MbmV83vtpyV;%Ze&&5w#k)EDU*=CWdY|9Rv-_#T{Qd0r4EpL}2QP@%oX5Kw{^4JW zr(CamBH(F>7cW*ictL#^FDAamUMXuVTJZl&JQN(^yY^1?yznpZ+R@mGJMlL%=R)bJ zJTLF(oG%04WtTU@yKdOPolrFeThcY%w+PRQnDcD!_$M;HN&GXf+q};w^XwL9>=lYN zRlHAD@I&a>#pxM8KNY910;kol*&jv@2#+`S*`EDwns; zj1IyEicP|2sxzaEHxD_ZGHP?7&Jxm|=B9kYmpqBD(Rmlq+<}kwmd$(z~j)A2&dFWAnk9JABSQre)KlGk%Tzb~74Rh7X9!DIU5TsHb3xEGlNet>_`TF-q{s&_wp zll988e8^$WWh49R;QI#|uVSu^96x`I@!jdn>|*%iKJ1zuRzdp$^l@|lJ9F9e%&9!V zrBj!OmwIr0_u5nAo`0|qT(1>P(RY5$Ht{IUO)>2q@z3C-t#8I+-?f%LUB9bjrM?@!q;(wW zPyO3mavbn1>VZ)Oa%4JkB%A>w#ruRkUIU^PKp0E_gJ1weqiWZ_fAZJ zZ*=zoFL-bF1-u_`r4A9dNDLuo3VH^Y@J_!?uHFmAq`p>QKVNf!6*>f*9=X7m`lN)Kw)&-|VgyE+V#_Q5{G4`|QKzc*$=~L-I`#D9(Q|}poA3~!p-_P1~DlKeV z&`ApyF$QzafOZA~w`O2J9bDhnMPG_T@b>db{a{z5Vzz&*A=XE}Chn|ZZ8iaObAATD(<0&*Raa+aOueh9hkwDu;^KR-`ztj4 z4X1w>p1Zd!J0QNQvps^F?A!9`?3uzNqO>L0J=hiOfPoiwy?~vW|7fkX4YQj(Ff;u# zzsr9hJSxX8z#dyHbVuQHPPI_u?@xmsn|Gf>>5%0}^z zayEu|a$r3in6ZZ#S#DLUy%CgMgHOWDo&A6EFjm_!^yJh4wxZ)Cd#ZOKUt7+%8gzzz zsqxtcO1qI;Ts(|8l({YVu_E*{k@lWM_AF*EcKmhRFGEZjxDom-GF5o>6rVXA`y7hv z43yTf&oPsIj@Qoc?svRf%6!i_PWXG;%B~82lAe-eUs*7n1xyn|mK@lHof601TgYb= zS@g&hYIL@(+J(LI8$a3)w|$3k$Sya$ z92sy9xc7T``h7Z#aj+uG8pn&D;V z(H}BkMR}lSLj=AOxdpz6jupi>1#L4w+un{&V@}YJe3x-z0c2~$r-Bo#!A59wHatx9 zs&|x`!-@kB-;Yy`%c$%+aeobpyU=j zKstw?I+y>_$T$0Z8@iWb6V3U#?9TIZJAf6m^rnfsk<4NKhJVu6)+O*%en;Sm_8u&; zZ?rvww%2pE&>hcr=Agq;Mlll2jBOx#X%S^Kt{z>Dfw8jB+u{5Cxn~RupIv7AK0V|3 z5#tcgHhPg_RL`&uJO1jyb7yTbeaNr<>15o#T{OhsS=lq-S6&zR{A1cY8+ua%6MI9s3=~ZDhoD4IMFm zi{Lf&DGv?7OJu9bFWL+*ac!l;%)_N2;jcL(YQ~EmLcf>RKu6GpY$f5bY)U=XoFZBa z-hKCYx^X9RLBEZz3h&W-@gMD>3vSvw@8Cb|ncKFN&40=n_ipxAj4zP+l(CO?8#dn{ zo~bXsH}3q5a}%^LxjvBgBeXAFc_4LnF?Ydt5Oozhp}KmfXNt)f3qCELnoAM{L5dU!;CR@(BS~^!I3w@tHd8Y^f&^hV@;O8nK>GWcZb@MC{Ue7NE;WFHEz<)1NjBI{;&F??Ax5r+?}-eT*kzN^PRD<$7!BRzhAtQ zcozDLfS=;~bw9TrxAKYWF?I1Nt+nNr#--S@jo5nfIm_R4JM&3!*VFCD)=hjSpd~X# z#&ZXGn3Vry4|aU?d>?t?k+i*0hxW1K8|uMp`PTxXE#UDW zpPECq^BH4)lA*56xE|UNeJlRB92qIP5F8^VvRS%qnNC072zvO0D{Hl89yu2SPs|zu z+h~d44}So@4=>_5{T0*BLi#dtmGLb7t}XWl(w}H<19yhh-prbqb<7SPuftxUoMI3} zzXo^QxEb2@<6qFY%{jC_^~CPx)~oGxv{OEDF??$6`vYDg-fJ}cMfnIOdd>xmcFzUa z`~|)ja@V~Ee33n(Tz?Ck@m@l%RK1@8PPpT@_QQ|qPq;SjA@;NwtKs3`Nu~6yGW-4| zeeN_d&Ne*0f-F;6!CC90xFDbQco;)hb5wor96ESp#vG!ox$u1!JW4i)+LoW}`g9ul z0cSZAzk~n1#CiRV_pVOY+C`qGr1G+|&mA`RYWue-NA%kNf#+rP*}?OAgX{3Rr~cc+ z>v{u^F3v}u$)D{MOmXjyG;aUC7TER{{`dw;JNg4?V~7$Msv~gD6}3gM329YeOTn& z%tEAcDA@Ue)4-<)w61xnOb^|e!Kc~x;`vDJcU&0= zDgRFgt_-l{qwuBBi!TFg+4v*MTKu{4ur(vzOEfkU*_}`c^2MGUZ%BVp#-KhE!10gFSNu=8wkqz1=YbzJ z=pS!p!VGx5{f>vefLB-XerJl0Gdd8k6RgUBmGDq|Dv}Kwfr)ZnuTvgD@Tn45?7$~6 z0bi%)t5^(IC%p|g48%q<{Em57UI(pH2EJ$VS-s2Hn}Iimo$ic=5hKov~aVXmrrATl{GSa3L4uJ$m$r6c*jC~K<;>mbu)75C4D-!SHxMn zFJ-LVuq7kD#qc}EpX=}g;kNiebdKyW8^80tYf@qJY~j1|S~Qan%H*~% z_?};N7x8Izw6_@;$#1oQbx|Knn9F!_gV_En>3hZpXzt~>3qGyBwErerQTe67Pj}-9 z#!G=;1p6lj%*1!~em4Ct0bY_T@X@*G8dGB5wBL&!V^i$!q9Lsdutz>Hjv~d+=T}v! zJbmgsn`ljRHV%HH^_N^*%leB?8$Apf6R%f!@>Ye`kyG8!T@}1&4*nt09sEdir@R-M zi|z-IOi>J4$6ASZ7xE7;+WLo+c~P`55Nf1s=6VggNVdiq&Qot-ez%}&ra9Nh+9|)$ zt)m>~TbSZsGuW2QS|) z+Wwwk!>7(?{(lXlY-Hz*K|VXbGwX1qigP6zGwT{>EaEepi~L)*3>~xOsjJGjJUyyn zOMa2HrC_LUOOLCvw)7g6y=7w&@!mzu5qex(Ab}N{tGQ%dqDab_UAg{HskPIowqQ)O5nUsXN;JKd>&@s9Xqb5 z4{2GLq4D0}ObL1m{J(&9Tz-5e zeO|Qu{>W4H`31Clw)*_CjC_%j*W#&z;H6`c)52HrEAdQw-%9&NIl)EeF9_i$s+xeD zt@|}+LgDA+*{GNPD<6>J^9@})@#_)RQGOf2uadG0s51ln{PJDL8+U>O&3(mJeZit% z!()K=7}_tPocbJdzAt1^e!6AVH-iU0_|O2+3w12|6CPw?7w-OFir@0iqk~sFa`pO* zH4HjDTI=WfgV@VC^ZrAJUvvJpkFIs&{r=(fz97oG`w!5j@qx%^xdXV!R(iQF`W1S6 z6uzW9pR=(`HUneD@gv*X{j8b%sKze{U+}}TEa{J~&&~0D8~=dd3y(9rtoK9P{>pl- z#b+d)Nn7%lpxUZdz(p&qA(jf~K3Sx!X2D(=%vKGU(g%W&9zgKil?S{vmQ#W0?vrndgPU zM|c+HyIW8FeXWbS0hNQ7%mhZJ4a%7|n4|n<{jj|(awnSo5`Gskj_5|?x3TjBQ~;y# z{7b*~_-%d&ed0&i+SMM(Z0#}ARxxcYlswSb>Gy&=@!dGz0xv*nLBn)4@}=Rb^J4;m|mp2W|{8R_Im`Tn+<;O9TFk02j(4Y+xiAalNdI$ z=8hba>^a}lzs^dy@}|JpZ=LfsXH}4+l8bfFr~J$&=MB6Cf7;g0bALIu9ga@ijQopC zME8ZBOg;R}W6>FPwqqCLl^rX+L3V@2HLII{CBED3v#i|x8{lW+8ImKl_gJOUD~3=` zI{Z5Hfm)u|a6gWo57cw=pzLyTk*Ni&IwGeAC!j+pd@Ud=W&qnQ;wui8{(dlE|`k>=u^+UfA-ifbv zi6~Wg@#;sjs#;HAwwWsMXPTLymX6ADvaxY0vx+M46CCP`M z?q*#rT+#TIZ?E;aWe0Q*kbEHcV>{m6$-CG7Vab8<+zBI{??%>dSS~qF@NM46vmri{ z)4RXmLB5aV3^q&xNB450$;cDJ$DRHmD2p zS-yn^2Hvu_sx0#k08`VxWmP>!`@}?s{3p^Q+`2COymh}$U7a`8n0k4}q`7#@jisEy zQ^)6Wk{(n7UO@-gL7@cpxA=?Y#o6BAQ3-eizQ?hF69c$EjXqsou1~MNw59*&=u5Z!`O^2Exjs9WQyk^@+=B&GYrX~W< zl>Q)J^M7tIx`TbL%hesw1tP4yWQ=r(+1H>Sz(=J6D@NAd-?eoe_3<(GT$uNYZAeZE zgbMLnyvDs=%6Tn&Z87-Y4gAmZnK&igjoN|ZqTdAguUIqjy@MY7*Zf`u|8uC9$GfHA zKlgs5n!tbE0rWC+-U(gG_H}XV6^Dlyy@Iicm%OOCGrkynB+i&L#%AKkq~{k}SylTT zTGZZH$@XOjW>{JE^0}%_<&0_K*>3jfxA82=`k8$>)@rsjbfk2C^5*x;zms!C#5rl- zPxVCC`(9XfU@&xT)`5PFy$d`vwqFtZEts~@UKm&_7P#9mf9O?T(X~lprZU^=_N!$k zC#UumB+KHG71GT#N7{1dZ|KE&F8Y0dxx2VD7JV%MzxU$Opg*`V^N!!ckVjUhA9H5?=b>$PK_hm*mWeeIZKmEjJN?Jahqi2(=g-wDtR1lY5B_08u%f~d&!By(LA3lh}3B*wQlOJ@)&Q z=2~JZwkp?S-u?vnNCyrAk5~uY36^(mUj0(^^?~5T0_%>Et$oX@m1BMacXXy1hq3*u zJoZh6yDw?SlwX=Ne`OHA;V$duk?rt?Dss@`_Z!j5*ktdP>H+9(yW4$VCNr6t95{$tWjxLM{oT*=gh^D^ z&%XbBKKabdbGQ%JeVwoCzHZCZC==c1?YEkHkfj5B9&+gN0uN+b_z&zq&u0Ir@C+aJf7;@rT=-2Dv441@Vhh>_ zs8~%K@$?w+^qs^%@tM_AH()*dXGw+RQk5OERX^f2yZ*V+@Y3s*n6;M_cXdF1*AOya#PMUV!bY9Jv_0SnZ1sjyz=R zKboKR2SvzZTFt%!?fuan%0?e@6&@`+a5Hn84;&AF)q19p`d1zI0Kw@ckhc_C#@vxoed=1aGQ`e__ zzpeAS>onK7Z^L1XfrH*V2p?2_vu))4t!Q~ldbUeRGe_;($1UKl~LiSy*&96PhdRBIIe(IQ9 zJQaMwPZw7=r;I23+Godea|*0?vzB4_%;dtQLD|=mKb6n;gOlJ>(oJLF_EFVWW{v*$ z-+iL|PvesfeF+}2_qW)x{rE~B-3S{I96>(a7N85um^{K)-RtdZ{G3h$x zgr#*?;GYd~|FCs;$((6cGk%NuN!DX~hmm(99J_q&DRWJEU0XbtO64O`O+Rd;6LSW5 znkx9$7>3{HE33tp9e$to(-ZIGcN%rL_NUwXqa@!r3$bs$BQhdY57qmM`5oq;_{5Ue zp&P}UR?CN+=~^5RJ9oMj*16l6c+tZ=>)O^lfdu>U2+XzHXfM^`5g&!Rn}lVoxxL`K~n)6{nVTh~WWj~xF-na=dkcg2st z5C+ctlW(TryJNQ=bo7{1eLv?<`s(}Qr|rls?9~MJD!MHBVc=vGS<4vE5efpTLlAyd zG005go0mU9u*#aw9?x0O_^ZIDmi1ex_vB-=^){1NfUh_cUokbQ5=Y=UQS=k1o;7=s zI5(MfZ{zw7a8~gLk>$5gPKm8o+4`GsP<7qAS+ld?%!Bu-K6-xLV%GOT z;w9h0mu+(EJ)ApjpWRD+$^4!Q{N%4UTg`i@XTOI!?R%(+`ZLa)c!RxJs(XKk=ZBLM zK@NKG0{X|fN_Z*y!{%?X#>0URe6s~#YX|%>ioeC=-V`FQcvij=0}Iw)I_n1Bai2HW z%fS!92V98pu4=~XJb*5E#AZaYt_|NGta z*#rOA^HY1D&kFpF^L%Pw?z0hew-Gta0obqAoS@ZA=KsPVE3uZiqR#u63Y@T2mU!@s z?O>kxhK=7_Hr-s-EsP&YK5vb0V-@pdK2hcqD`g&xcPBYD;sZKwPO)d{lXFZg%dWX6 zJXynBCu8f(gJv`q;9IZt)qZ&Sd5YkZHI}EYhqZf;XZz4UxbMby%0CDH72m1g9fSXs z_W8VBWy1d}@Bi%h2>UvTeNFA*%X!dG?d`tV)w74&b%!4U2IzYcWToiG=-G-FJmxdJ zOujY2Y5_Hp&is~IEAZDd`^ZHj4@LW$q+7><>Fgma%f&wIP68+P0ChX(H|ZI{UZ1)rIySLkWAA1M z(t6LuT^iIFl^>5wC#hC&K75_+9X>zNBtZ)H-Ndm4lTc^ z^TL@we(8PsY+=vF0r0_$6Fk;9htrqFDt+F>TIj2izWVs?oxWng?kw=o9;1Bv`2LfZ z`NbaEuOru?l|I&8yKYndw|(^uocDb~{lUB9;JfzlpOtM=t22X5+#dUaGoO&-=dAlm z9%L`4+Szk8|IkotrtOREf!Aux;wcf%5f%@X?;r;4ZGivBfua1Pv3mtedtX>DKZeKH z?@~L6_nVln^f+@L9=ihBu@!w*@5vuao@FA!8qNU+BiP_`Ijd7^GJPI;F}9)bFANX5 zJP!JWe)Y`5j72zX@Rw^lpuzdnw^V-`pJMB(BT)dqvA{{y289lSx~KP_ok|_b8e{_V zh|!M84Q3pACPLrxiPj9VeaxM;_);9a6~1=!TX5A_4$*H6zIJRg_4w$c3;Y|`jvaUp z@AJ-0)EwT!|FWx}-lTpN-*I7jEBGupnp|dLT3*i&_8uc<5W7dTh1{WSc;#&!z`^)$ zCY$qaPOhAc%}75w<6z|=D=6DE$}{S_16qPV89$`P)vb1*gEnh(Y0SjUzP~p{A7&oh zH#O8)|JXu&My!F(WX&cgdbEdq;ml`?V8VYRV`=neG%bJcsneRrcjx0{Wb7K3AKtv3 zXC?z@ok0;>$T+=OO)L42s}IK1$y&(I^%cgd`uGiuLHP}{qse_P4!CRcy}2K690{FC zhdayr=ghm*Dn*`lA}eF?{chwbXARYL=W~uS@^mdU7`Jlq>jF>yb;hy}olX9kIP293 zF7F2SdZ54atefB>9nhSGGm9}-LO0x7%lxN!tP@f8K6Zm2HPA%}I&WvJ_yhO#-0KfM z@Z?h)Zn6e6i3XvUU=#2&d`r+{`0TbhiF&1xd!*CZG}^**QDCiedv&JPQuwvzo&+D<`R87}W>Zfk@|>}p zV~n=$;SWB@nm1M0`BU)lvQ|guU5nl!m_6vpI`KbvX6-FjGdLL>$k_EA9EYzg4a(Mx z({88FYCfK0pO4oc?q|6#*suKyt64I&fIiM$NY0FbpV@x@sqD1P+LyGrLf63ML*(|F zcqr#m+jF#OcRusf836a5OoL#g%Vp5ghssfp#whL*vpzZ?Hq`)ee9{8#o@AANV^ z=j*$++-Cd>;YY}{X~?urc&ynU|2VZEsT6svJ8P`qBK*L{4+^ciayyFL`>@%rR}wp9YD+8`4KIA2|1f70 zxz9(SDHn&&^St})QDSprs2QbmjPSJu4em2O`BCP&XMm#@NH+-aUI>~sK9(x+b*D{u zS`0c?UscbtuYj>DzjZ%;H$5x3>RkCwY(M3B^`6lUU5S6YXLL_vkFd95Vzcy!lSumGvqWh<^@h$#f4xbUm+UQAdVhxQg zF8D0{^UHSl0ombLJg+hDXAYauuasXohUYq+=k#4;(wwx8 znv>qwcmyY{t6;TIa9gN67GQ#0Otocu?HTdZ;o#e7c+wEQ!%uU6(~qAH2e(FpzeCu= z{CWFPkk_9M{Oo=a?b8%3j+Xo$ZYA2`Q|&|9KQqX~{&!zlv4?Zan3HH-`DWr5!#Kw; z{0#JTEBxq3zWS-@V@e{!ZCK4GelW$d_hD>**cY6q`Yg;>ISU;HmeDyI*(cTr9WImJ zIUc)mj;VLJPrmJFfp~+xmkb&VMtN5>E?eKg#>s1z|4jSGq#ui3pWpARClC2#0rZ&* zP3_14?})kCdluN2hTfqw*#}4c9^@=G<=1&^DY*RUP24u_rFSU^>Po1^by01I&`Rl%tcP##T<)_If zyu9AS*qg4re(dxz>AlHcrJ1wKc6xm#$MVd6@`u6sso0Zk;DU5u*+6GTq?x>qDy|zH z4_{1-d&1=y@frC5Vw_DfiaqS1@!;m8;OS%JUSRJ;vGv+-wGvZ!*Z7UVFBjg%Rs`1~ z;KZx<%BC>62q)WFf0u7{JPNG?%PMe9{r&r*Pi=png9G4hQ2qhe*P>X^RN|DjZJHH$ zo#z#gUj~fLnt-nn+U%gODEQh!?DH&pzdlp%Fa_Q>e*wIA_Jeo-`n2tu>u4)c1iaFa zMU%ks{rFCV;~n%Z{oUm8++?4ZwH^9cPJK?3=Q$d^fIM2i&uUK1!=26gNXEC4>u6}f z$>~h}-Un~M7pvd+f9s4}xS~H7Ulx6i|1->bj@<059Xw$h@ZB!m5SsbQ!<;<~A2mKo za6QaA{hIyB<~QFTDP>Lh)O==VPjUtU5x`+7^PhJUxC6i32^`KKzwzPDtmT~R?Sr*nA){^%zqRh|=)eSG zP0pj{JD+D(GOtX-cd`NpX=@TZX9xJZl{nC(dHyolliI_jGbiT)GlR$Iz2d#KzzO^a zZUaV@z^L5F3uoRA9`s-PrTyl8gn1kNx6qHJwlcQ2{iC8kv%FZ-%9>dsy#SZlLm2Uje`r-PvJE~7-A@|j8>V9~$ zhLuhn9{R}u<{jW*=6-nnI4fcHBf~F%IrWa7=sk1&C46rk;F|od;1_*U+vo-MEK}pn z_)uOVo-%;B=sL1^Cpqi7?)o0Y@37}hodNAtbLCAZyu(7jQvCs4SNn0^@8sPz$eRNA zbvOI=(An8fNWM7oM)6^6_Ih&;B4<5^uw&M+=EfhuGmUrHbsbkCW3oOOU!poq+u_Yq z+2h-G_q94ld$68uXRS2eEbt=^KTr*cwnCdXBWK9_2lj$DxF2F2{`t;NH~K%MHUPXu zytQ#OanZsd_C9rF=zREz@&IGZX#u_q*&f<2I~V@66`f9PeB%au_Pnn-h8dTx{gi8Z zcCLJX{MP*qTqCGIc0eyTK`_<%|^xH2g*=zQLVPkrMm11V>f8Hor zvs7z0o;9sw+_!5Dh5z>1oo9Z|`HAQpvdtEP3*zmv3#6AE4JoJHi|>c^fWMXF+gJ>L z(|Mv@#4Ec#9a7p3?rR@t41CnPc5N#8F|z_|zK?I1ybkGfJBd>sB~BT)p4xj9KfdI- zt{b@wPHJqD2l7`*HiuX@n;&@k)Pf9aU7R(U-hWM45AEl&QvPgymu>0~E&8En=6jVn zee3-Wr+&(K_K4o-_Uy;^UL0%q-`kUXMa|)B zcz%3EB0Pk5mV28cv}5>RIkiz<1@~`d|0ytzR#q4}7r(s%zG0uAu$w#@@?%a+&nF*p zP)<`9bgg_D=`Sygz!sk34-TlvA(zG8??F7O`7AN0^Z4P`W#VJvEQJ6x@FM=Obslfi zx;Z(`>+mzQcyi2n3}@jB>xy3AbS^!AY^%p}aosH~n*?w9wa-;mBwqB~wD!d@;K1X{ zg3$*OrJ)bteeaSpbJR+75A-CuBB~)sKGrRq3w^WI{HBj{o@ZOl7n#qkQ~kk5v#gWv z4)g@QBadvlb*dG77u)kR|L3{?CS$*V9)2Ou6MS%CB)%;3#cn$cKjvZZEA!Y(*Z5&q)p*ei~cv18@!a z3jTt5$GhMRbBSjIH_&41iz zC8}@X*>6rh-5juPyO^Fi_I+&V@-)vyFYv$G<6D1``94rG_4hMd|(aNjiz4ubyTlh8VX{4#189bjpR&#b;{7qy8-!)IQQJ!Wk z8BMNECOA4Ovg}k_+O~IO=NQ{d@9~WGi-=L-&uF{E!#r4;o28F!5yP_asIpdItE|a3Es2;1Hot~xFZ|!82+SO{3F%) zD5~*~JkNRXYBRRn3TA@K8hf1aY7ck^eb{l6?7&|38b`q&?3A({|7o4Xelh1o>_E=M zz&C1^H0=Nex*uBZ4{Dzv<4L5`rrm}&P_Y1hM?dZ0TR6P}zEY8BWWP!W?MkjS{@yw% z85X6z6q}_?x`^5ot}B)s0e?HdQ~A)p_Xq(6OE@Bu%f8-%;~`dF(7YZb}%1P`%RTa8Q-kM!-m zN3h=@z0Ag^W57!Ok#g`z@?Ur)oY2`a#5hma9I$QGZoh*!tgmdYx3fzF}`ePd~wDnA7GsE zsr}K6O|h;pa1{;+r!G?0A)>JZd&RUy89?T_9 zG6!5RV-wyoo(Ouj!CS`j9qtLAT|ckdNHT8m)?<@dXXsQl6XO}gz4Ei0?$5<{mSNQ! zzRvgzUNMiew4pkf|Bz)37QZs^e9nU3cmk@o-Gv+)g?x-L)+}mnyYw7Ej@Z8Ks{`4W zk{jcUNxt6Mj*m44eZgC9+0S@l;IVkhad?a5a7__sA98)H;UiwdN63F_J`OLbf`){P zox**_cNlxj(Cszo;*8s+*{_ODxG(;AjJV9PeO6iQIh#+mk;i4uQo=q;T3Ov&z@6;r z#4(X4Ue8l|JJFB&z=1KjaQF^z*f?lfX=&d5CB|WYBA0w}S732OB*VWyvgS$pegiT_$l@#uZ7+Jb~?@JtZfjEf#0!vc68f zaNF4@PPc{F11*^jzY|~iEJQ@c(XHXnRW~x5_~=wD#T|$(8i@d z;Cmg)e}R?Nv!A|YFNgD<*!yF0sr5{}75Qa!E#wmR7I=~9Y9U6$T7;mnI>s47CkUa_ zCDGMB9A0rb@1V&&D=){c2Z?_!e#ey4yX4;mE@mBp!%W(U@jDxtem{G!ymKZtdlxO7 zc#M0;Z?=L9xYl<6#O5~6xBMbLy1wZ$et22CW2~L@>Q2Vk`75g|RmTwyNvCo38CRG2 z<3`qwv9!%Ka<%^GV(F3DffJ8d&F@0@zhyl?;9Y2@UOCmt$F1Nc#{Deo`bLgF_yM{@ zf;Ig&^oqYjuXz8dCpUbUWi@}u^$*jp50s&w|6AJiszqJ@Z@g0jU#i~HvPnEr_mzkB zKL3gIuLiy|&KLai%)*in(J}tI;mHl($?n@uS^AAl;8T5By4ty>uKK`+O@Bp=zIW3H z2cFF$-}8=!)4xq0-1Kakzy3Y?--pfoY5FyRN3Y_%8}2{-)Z-iWc&=&MGsjo*%hDX}*3;jpdPfJvvdnWwmS>Q7hKJy;1>`uQfFnBcIrPIR4*P^4uU$E+X zUb5=n|D}~65REP2H$17o9{Uy6KXr{$_1M@h?4%cnGbZ5^tb5N(zIu1<&!0iRc68Z` z$bxs#E#3pSg$wWhlD#PKwM2SF;#2hBON{xeRsJAraq_EGTKmC)O=C4)-(JbX4}tH4 z2YvOeo*{Kl!xtZf7rYC;7&vo=TPy2*j+~)Z&((EHf$KSFQ@mJlCgs^1-O_>WyTDYq z^geA0=2yC(05YG?rk47iaNq$s5H9lKB`HRo8-$AyCuFIYazhXak zj^E$nxq&=)#xrp7dFMG@KhJYbv~>X-c$@E{Q+-dej&Jka`P)5ZT^G<#e_|!pp+}vq zBW8G`?=+i>UPf0ayU2K!P}_Y0a}TEv4B$%}oM8=Y6718QoG=sfMHiS0>?K2g2k+9{ z+ke9N#A_UwbX~A{uG&3|ZGVpOpTE7L>_YmGfX4RyE3`esY5UDD(YD*JY+JQ^AML)q z5FU*FcMyG&x}}M9<{-T@22H6J4tBZGowSzw64c6K4HO&MflnhdZDOfe;}?91za@ut zwqU`1@e|2Sa}Ri!91wJh4(2I+=tjnDw<9@a*B%~8-bx3!W6oZuuXfrDBjY0Mao4lL zy(rgA{L0aJySd*3T&q2KO|D+~JbGm&>(%PSXrkzk*dZqON_uar6Qk+XH}T^{ofu6N zn6#o-M$s$hgO8GddZ&9AbfqzYkFyw$#?rkDUPIp@)=M%+Ikp$T)wAID+Y8}itn&rl z6MTg`^BGeVxJEpgCps99(ODdu?sv5k&OUs2kV-6PR8N=<5Q=*7^62cr>PrySKQqqFQA~%x;Xb~^2ynU?Ol3R zbKauaoKu|_ID!2;E`4)J&1`E4eVV@igucTYpnv$M$uq`h+cp9@iq7)<-~auo)zt9y zKAH8L_mkQU>7T4T;jVj_+6!*Z#1_UC-Tf%g+TaE-lU&#PndpRZ z=8AqZLC;8kBgPm!%o%XH@8(vB#@1@iv@82pHbMM`r%oF?i+qo`o@bnz@75L6*J8eL z|5eR#_MK~QZyea*FYX<4>R39YcL2*!59`TT@k^DpL!0es*30O$Wz(=JI~n8i*dH;* z9tR%|<9l}JpUMa3Fh;dw)`q!9dG-}(_OF43zJCB6%+eait>7r|!_ea{l>FW&zE{1VNHcUL&inms8z|D7**-nA`-zvj#mY|Gr+tl(qW z>`wr1BG7R!UUROZ`d>yqk?8neSKIiacT>k98L6>I-^ukfoUUTesBFXJAkI1azM3SQj z;HqyS|KO3`$j9n@Ut&guFPO)ELiN!TQOq;1ZvUNj-qMsD{O@V-L5-cZjUS8WYVd)5 zkL$JMOGjQ{uebOY?J2%_^Adb!Z(6|!Kue z7vlTs1TI|z8UIGfYTsVzY&GDF{6=vz=G;IUc~SA-N&oi*W?YM{jUT6nF)O#>p!glv zJBgRXk;9$34xHpS>Uq_%!MT>*&iN9^)=sV!pr1WReva0s8y%!3v)~cQDe)TBLG4E0 zn}P1z;K^Mq`$pGQdvY=P75c7oX}fQb?>eo{eNVMSbgvj+`}B_sN;|P{a^O9~u~Q6R zI&B%hQU`X_eAdE063Ld1PZ!c%YZ@6yTT3$KUcr?J1v3KGUtU6^}|I7YMkH@a^utsbcrp z36pl8zoT;Zu@Tnp*KYFc{>_B6-EZ8HzB^tBZ5ASHcs_m_9!@;$D0@x}uE6Uf*iaqR z?V3FQ(~Z$|{JzAec48;D5uZYDum7U4{KU*n{%7;KQ@k2Ox(<~g@8A7hGuASgc6x=a>Bydf7)q}+5qV#i= z^+{&9IOH|w0w2ZaWX|R;HaXheoINo!N~}kD2>oG_WKTzw_1+0gjsg=mX4l0$WWQ+7 znerlq59b-f8}QikjBPPE9V1V?3;&SD+yGwxX^i|D#(F0?fGyy)AN)Nl{AHXMdH>Gq z$usBs8^Gd>XFzv|`?*(pn(xH^T<2-ndnY-DdOpUp`V>AZRRogJu94SW z_aONz$`{^Ej7WK^s-4npSxv)$<0Nygds<)|d7stDt2%g_ix1}9C-iIO{r}@T_@0@+ zat3scl=QBVyzlz)rTa&CPX7EF`Kfuf<6UUsP2?GTyb~GpJI1*a8rI&8EXEr9i51+1 zEu%Qk^AF?yWQ`1OhjvWPEp%k`|CN_{ys-;tuj41S-L;>4Mu!(qV6D)t%EV8h&-J4SLGAA$RO+o7Ot(8OHC|{xm{(YSDokUAUpWA5DU#~BU^*D~7M>$Hx^}hN=o-sC00^fxj((Qf-4flUvyuXWQ z3{H+@|FmmgumRy8N?V z`7cM2MbLTV0yx3kxN%UId;frXAy*81E>jA#_wSNq#G6 zh5Oq7xrn}E%v=2ZPmw_jh;?+4e>TeG0Qm7q+O=#w@IckHQ(s%z(_#1@GRKWmh2Vd> zCmr9|4a_;7f-lnXzt8*12kM|d;mq3oKJpK9>&Bu(C|9kCzHg%MCVWFgl(dlp&E`M|BNIRCl2U-*bi<()Xey%U4zpL>r}L*P07TReF^`*pU%FD>kb0rZc* zl~~aQzOb*`b(`k@YRM&r)qG|0whUw9UFm_A19jal-g2!QW%zG2ODovDy0M zn6xOCrnnjTSJ1=zk`1(fmKfK2inaXMSO3Gb!qWGNy$zY<3vRR~mWaj&<#O&RHqtR- zcNxU)kY~;NY z;1%OCat^&w{-r(8N0c$EE!i-6PP^?9D=`axsx$hgzOm-iA@baXr?QKrSBY*8!#AUX z4fBnIE8;(HJEB{yqjXZmAj35lup`b&zgpX|oHr$%IEVFxkDGj`wgEX!$FXI~J=w;V zIgSmnd*IzA#0Z1!f3Om5$cNY=azQP-cA@<9hThO`>|6!A{y=OZyz&pMUk!Yo@o8+G zjM3qq7hrzk|O=l*^&q z`i#JG_;r+aKRV=XZfLM}dzicS4c&F)`HfqsQ)B9^4D}>J1^f%QfTQ?)JI{Y>*vA_M zYg1?Dtu?2pXW3-?Qw3`~4`dOrjvTtIuZO`a*B2Q}e|)cSb9IIFEd2B32x}8!?i#yS z=jd+34?a6z`4_gI)_GU+U3d;(EqH2twfF;~>4l|X@L2Y)U}pF=cCK`dZs1Yl@z!O) zS5{kVH+9akf<5f1Xmap4f^7WMT@&cq#Ka#X|Mo9|rC=*QMC`)k;e#tt?rD$Dzc9B) z^d8q9=2K(QUPCuFUjU69r*6z5{PA5pBb}bS5bS_UB}TVKFPQG=1^T_%WBYv8q7xLe zhpgDyL$(;5U>y2IU1na>ba+NFanR$1#0HRU$Ilo`O z#@goiq<(`>s?HhfO2+zHh7}y4{ZGI#)mNNcepx>b!;gA^rDEWQ#;uAn(YR!UU>IWE z_cOnCXhQQ)TQ&C(%i?+A3-@j_>m)tnIqCzRCwD^kz*mEhJRg@H03En7NjDxTe)lwc zk3z3NtIRu`{nXwFJhFo^iASm3-)gL{*nYaO@B0%{{G8J^ZQb$!Z8w1{%uW7~_S49wICIEgFCF@XTQ5;D zyOHQi;z{BsW^AnYlE3(LW9&40CBG&&bzV&U++|&y>$|47kP^PK?RN zCl0=~TG>5*^g(=f^#%BViu4`1UT}-`i1f4eL-;DdU1A@m9?y(Yw zCP-)Z1n&n<%I)#~iyh-~^*QOG;t9_zb9guXg?oGnOEEQcJL#W4XgzQCC_H|E{q{|L zbCW{Z_$BhJzWeQmqSF*u%=5;;vR|j{R~QJqu0dBA2aJXSqXJ*z&)@5}Ul5%9!u|H- zzW;NR5X)7>K{n4cPGJuAG{{xS5IeeJ`Yb!4os{Dsr^ z7wmJY>OWUtXE}fF{;vP3|Gih}f8&4A|L8B#f0x;7b$LH#a=aDP{(zCt&M15UXYk(+ zV9%!ZadZr4T}xTVh*duvx=^hZ{YQYAcpcQ|T15ffU=xYbObS`;?^8HtlLpVD9nUboT@R1WQ4>OOXmplPJmCJNDbN9dx zlsD2jX#anBslTGRbY1h*-Z38UiJTm7)AKo(N{bT>r{g1zZR$+-jxFATZOXoi_{}Yw z%6QMj7|<`2yZ3ydRWDhFT~I#)-OlQM~=1Z)Ef9!fhT9N511dbo+;Vk=qx)5ZQVujq9f=C@~zu;7w2$V*d?@a zXoP*%=63d936C<-;g100rFW|qVL@Oy`QQJE9TFPvo=fYo^B}zqr%j$?MFuh0T|XN0 z4dR@NcaFjL$h^Dmz+YFEadJ0vmrqrDou~fG`Hf?^&Yp&oad1?y=ZqKpF!uR3o~V zkR!Hy)OFE^`#xuFKzp9RFzkdm^j-dYYsm||U&J1OBCFvPpUvneWxebE1$$Qq^@GEH zVBoMe^I`TkrQ7w(awdw$4(>hkEjbIkT4*KO>zL<5jOS72_!zkGIJvK9IESiSy4MqX zU;P?uUS;-t{CtxC+UD>*JiicJy_a{EQ@@OMu~^=-{S)=Rq6lSN(rDE2ZXFxr1}*=?3S_zDQ_BdfF;* ze^qi}sZA3ZfoM5$?k*dLiBFZqD{1cma{t*A*Ip@oop{{!oKc(oPo-wOKjkcz+5UR@ z=E5`JDa>s+F@{AuKQZTRD}OIz5cM|)`_`{uPvH)0K=bzd=S^%OzB8LO(;CUQ-9AI` z1TMfL@EAJd3|q%H`F}j4zQm(6_Sg(~y5CyT!~2bQXEd(_U)ub0_M)5P1M%&Z-i4p< zo;CK2<+(VDeM98&1oTeFU9??}&RB_#Y2XfzWv*sid?w%W zn6uSZ0&Dq5Y*=A)F)rTU*IA`;+cpHe5?p2Nm`meRyhUq>Y$YF>SWRx7hj*&!znV5*qmGs4QiDCNT6uz@ za-0RPj>o7&K-^;$YazHTyGk}eR^Ywy@CVkU1^f%at93q0CTp;THHd;ABk`HFLg%_3 zy^FPT)&X7D`0ivI$luxVC^8y8J%>8Z?ckB*Z&+&%eeD2ug;TBI(+Tit1^BYl!Ka;! zN4T^DxJ12|N>_3ZnlQNJEjqF(nw~kf6$mv(?lM|eKUTy_vs$s}iIibI>ck3H)z z+dLygiC7^?CcPuvboYlADIyZ1Q4b?83gtBEAs2-G-B3^h;`_ zs22VTV50M-SJ*cFTe9i18T)cZ1yt94c>Zte{f zQ*Tx_(InpKWPReypM5uFHRxj1;D!6Vt{)?p$;RF6x&z>;-qAUnq6FX+&FFBu_5TVb5tRFnh@Fn>+9^f3I0&GnA%{8W0=t4NI_JnI~%;gMq zCYLg%5YKBbnC=OGj9&%#?Bp4E6FA0Re%dfRZ-&O>+dGr?)vo(|Oz*Nc&Uxpg-ckQA z(ta;pFrR6_%IHFxJN!!Z1)IN)+|_T^Y3`GsY)q94mGB-@pRphBxtVoTJ0<8B{rS>o zY$9ZObf{$4je&3eb3c7T_RtXMYp5?V{`2bP0JAT&hme^+yy3ItZm3R2gqkQ3+K8}55uT5L zH^QI!(tBP^TLQnIxzcaTh6Uugi>ASa;2C^Z@^i&DEBu;!e ziLEnRdKPlXVvGg!B|I$z$N6n+K#RVh;|ao3@nXrcx#(wU==S0R^7GZ`J!H#V-s88) zd7Q+1b9qm(2i427&%ai!?KJ278@qn2evAL4-j~lsdYkTv|5n12!}pLM$*0lp)F<;f zz3?&y_RZEj%Z?jJheNZnK`zZ!>n_Fo*jGxi^gWS^uEc z`bx0;GVqSU6SQ9T8dFCB7*%MGKQPku7!xSRLa?#s~AIsHY5vs^+fV!_Jbb<_oXd4 zk-+Z*tO_-6;M+c$8o)g70nQ=d-ag#<&f0$&xX2$>PTkP4eyE#0%7&h*4{zW_rd&@Ns7MqQw*2tlSd|fN7`X0&`nhip2# z62j{*Gq(`qQq78QAB2Z#9r*rNd>0>l4}RFo2OWC55+D5dpT3w6{yTiowXfFv7yPdT zK4k3Gl=Iw<(Ds+*f71tv|9!QW|H(#MfKO04sjK;1gs*Td|9PIQ0QpLRoVrtC@tw$1d^(HOw=FN9T#p{OBueaCvAP!qtu*>&53*EkZ>7Dtmi4lDoNT0?2CH6r zg!<9{7XHj(YWEuU`eY4Fvx}n#v;J9=x#v38`t@0ysK#=c}O~y~lz3*gL&!&#)oBwRf z@z29m$?L!T0z7>f+OksqjQxAaso(uq!l|o!aVpdR&t49Wtg`TbdV*7cq0Sr;JY_?g z&xKZE8a|^%(6}3e?s}9OD#`%|zm#h-gIuPbhq&g!ww#4LMmC49d19|>-hcc*u$}oG zc}V&SpV0kq&e-c<{wsQON}t$^UQ{o8Ac}n7vYGv?v=?dsMyz)v@5g(ex{-5A;KS1U zMb}YahMsJGw@g;eEKdNRzx^A3mwv~&go3qfP@oAAz^K96(iHsU- z#~;v-Ps&~}YjMc7wL5Cjm3gmyxz;O#JwMj79ktXQ=2^X;kxZ7fqo>Ipkp4b}y&dq*T`KkAn~W_)|E{u- zE95{!|BB&K@A45J^wR?$P=4J5S4_)n#Oi&|^Y zlExfcWsfUVOU-e{6siG+jA4b}YTgWdFR#(#W{qO$Kis==j8*S(*2rBS!RK1msDt+8 z$7rvyW#Qrf#u};rWuj-=T+TYZnZr8Ko_tuT>-1CN_JXtKFqO5}e3VDnmpER6m$8Zq^4_=~>m96mN`z_o_LioN4%j;qQWn?zy~Nef~N9h<^?< zxrfvUWbV5D#7&>dr}naVg7l>Qe@yOEKYCyHZy?WQH*IHt&zblocVhd;p?|a21HTz@ zwe|8L>3w)mQ14~lhV4&GDoT6eF>0rsaf^5Vmi>_Mv!HlESl66>y3^nZ{5JCi*79$G zGv+L?M$Q9M`|)d*23Hw=Wc%TFay|Yi@(X|bjzWL^5&XlAyxYj{6`V1{8a1!r%o*zB z4bhq}V7(TmTs2pBmiw4Yb~34KR9{c!17($friqdEj(E@YJ=J zir(0CKK-h(XYkFR$KN45&~-g?#*@|^`ZzgL&kFaHTcSQ!(&yTqWNB?ra)RoPy>9x+ zuY-TgTuDua*NO4(VH~f+ztv|qxN{cViBwv_rj?NE-NL|`HIBf`q%RzpW#^wqvHe3;#GJLRb=bAd6{()p7IX>it@u7LeUmXC;rjU;%{32NU_Sx*%b%d1Di=L^5AB0H zUGN@bhk#SEPpG$Ff5sYQ{4G)ZMe^M#_CJ+2MeE`(HJ;46bIkcQ-XV|v#Qglsrm6hv zecR3{2z0~GFiQ8q*Mfp)6k7O-gEz+*L*y>##n5-Q8QTo%Ih(b0XhyQlg_qtsfq#)TwaxM1U6!cn8oa1x{cFep6kf#Xqr31B`zg}LHbC3e4sDz3 z%y*KN8+eoXs@>E&X$|lTwfhk5UZC9zw0nVeli;D+6>s=i(V>#-wqqWgH6` zhl!ib1|IlclIYML?CTwjfqfNYljznv(56eJTXYFg3a@E^ z*C5Ac)(r40siWNnKB2MCw6FI}oRoH!j3DI+%?&JEwUH)Ykp<_fQn&K;%(X!uqerjy}KQ^=>1?@}?VRbK1a2;;7`&=~~tThSlc z%j3S^;M`BQ@N2pEM_j)DnC|nA{DG>um}zAO=CU7bF0k$8`@HA2*P0EV;CVf(vFZ6` zg-h|x4Y77uN&Dm@6n*H7CtLrsaVR>T^XQ-pJ!jrS$H;;nR9~|C1N=hc z(euEs;n-x1`NVQ!0ow+pH$}#A?pPuIq|sJl8Srt(yUne$3+^-mqq)r8ott#6j+D8r z*4#9&anwXDbaMEtr`Bg!8G#*lOgcT1bMJ&-wVOT7bD+;FSe*6Z#QA{5D0FkmO*$E-k0q>(D2Mi~Ky3!v$aL z%wYcy`FG?$5M%S#7f{Dm{8H<}nIVbM)TGs!%WaJ3ATUzRPx(e~L7%}!n4q|MJ8Nuk z4qZ4pj(8AjtvFsgcq0F3glogmM=MM$-M@aA;x*8@!4qeEeR$qAz+?!p0oF76!P?|D z4FN8+@4~x_m|*I8ekP6#f7AZ_BKXh_;_$7+caOn?j-Wfs7a;g<=TrRG$+I!_(&ax@ z{BjvEo`PLLe5kt*Z*<1H0zB+9{(kV5-*+o{DBxzWhi<9lh1&`2)US?$KMx zgLLM9ae2C_ce?u^wUCx)_N{mN0(AZgxbZ5yr4@KC=Nz*F&he(6a`0LcTX<{I{;xKN zw{ia!)@qkvp4rU4Z9a)D@NA^j<|WEW$^>T8NAYbXGJVPkG~a`ncPpM?f0u7>j=>Yo z2jeqmw&Z_KpqyBn&MoTVel0d_`ZeSpFSioW7Ap~Z&SD>mmFV2SSZCoE_zAw4CXIpk zx^%bYOM}vR&ZQ4H@nZgfrn9Ro?1}+R9rsx5vom#sO|HXvzQ5!{?$>f3dYNbBiM=<* z>9ipLULeztuU^JUJOU$h0?^Eq_4jp*PTu;+e)j@jh&i)=r45Bu;Q^Cd3S3KrO6 z%lWLb5^tlYp2UZI5#6-B&06BeXI%c8Z7b`{pVn(FYAjt9_;YaVjeO1*V?44?5FqeL z)kf2Jt_u8hzwyXt@MXrN@x0BrE}|o!cgFQD{r-%8zvlE2X79=R3eK&-uNmQ4$%R_v zdL?_am-{(8g*6Jj0u9sFojN;>x$2qOgDsP9(Eph;j5YNc!O$It=947f)Z~fK?-)I6 zU`C(teChJ7hpi%}(fyup%v8#s0yJdbNh{3QF~ z6}#|@CW$jh2W~xP>%h`O#ml8Lsg6Q>1GtMmvWhur%+tWT1L?}?Wj_TxsNewa!GpTM zGh+i(5G(qHU30Pu_+zst;tQcu=JpWpb@N=o9?l577T@>l=w)6$_mJ-bPl{s?P2>Fn z-bYt5`jl)Hvwq-n1RUpHZt&Er1mBIQvImUF4_}qnSJT# z<qUUIA-wThdQgRUhTh&->-)`=J44Gj5W4AXs_Y# zflawJ(>upszq<`AN-g=|y0+|($&ItgqtJB|cZX+XBhTHuMdf=d-g*X_ z(%z`976%vplzp^cvx3Kf`*g;i1MTR!F80nHm#+@lDPNb~FDN8W5k7d_;HZ85DA&8; zPi+Hok)?du zp}y3%>fyUq|Yw=IOJ>AErs4SFZMRzx4Ew*#%IjBuhgu8j~MOGZC)a}yV3Yk9oWDd zw?OBsp3$7x`^&9nl+e^h8SR3K<|6**qH=2Hv z^jksuvE}5*(M|_6a%409dE~F;`WfW9)>ofqZJ~<@a_|lI`G)R-H$KN&fxD7l`+>K` z+FHEtfro_~6w^(^1jib<0$*0nXg;u0TdEcQ2H&spAp7~A&!_UHo=5NMq`y}9*B)#u z<+Donoa@lD^n5cu@bD+Znxf9Q6q^zM4m;0EUU*ZUCB|W%jWLII(en)A-j>yk9y>D% z-rBVHdG09@hAHOJT*xbQ2?T0k^a*QDr7BO&I zW8DD_ZD)SsPsUdXJxsuN*M~m=Bk`vgb8=&A;#(`YCO@8h*Nx0+J9Bb*T7Q4G)=2zK zV-rlIvzpir^zYgs;xz?M?XXqwwGQ-!7Kg8i4i#f+bog3}Q#-7U>xSPkp2H4blW(Mf zJx_Jm&7$c7;M0pE+zU}R%TP$_u?G*hY3>@U;49xQdCqnCCufH0tl%WZ zD|~g|`$ZwLu?}3~dF45qd$gne0^HMe#$6_T+P+7d4$f91J0-6+r{H;v=f&s66Pefg zBlr$nypK9~|2p##-k;!8^DAWT;xQg@Wf-_JDWhTUFmR;+Tn*vNYzI%xTxfS8zf}+S zBfSf4ik7v%5L@}StU?=>EAjIxM^S#${m_``bPJzT;o)uQZ@052cR}UkMD_31oSI6` zsq~{!T+>-CIv+h&soa6f`<4vsp)pg(-Qfj?irJ@DiS3XAOS2apo!aC_eht_?XJBVw zI*i&OF3dk3`QL+Ee|}M0=s)#6)sVv{+#eqv1s_5WnfP_DZe;Wy;O_D>&8wMtXkE1) z5$2<7jf~w~qaM1(+;Ojc{f+-0$30%-Cid5V+*25LAKKjreSycTMC;H;W+wV1{%&}l z*^9P@y=dLUCWtMcSj_p6!bjPWP;>=*S%cJ`8Ins ziD~3~+pg*2HP>^S@_65UE{AsYte5x4T;YAKkNS4?DCtjTj~(=Q5BT~3@@^fuMk~QN z#ih=H*U$*HkBA?b*hW@B{&jG5W;gRz?h<*+MoygPx8fN;p)RDIr?hyY`qT9`_zXHv z^Ga;*ZtTLT^tF>Yt?SK$BKMPL7Lfb2?gzg0%A1Z5e^LC>$&*U7Ikcl%6JB(qzoDNu zmJVt@w&?zeUeDv}S9`{+MMp1lX{?Pr+s>g&O>O*jJiCtEsntBIXXGDOT^GgV#vu2- zMYevWd<@6`RMv_9uk%O-e4I3K;(W$p=uA8fIk=13M4{Tx;>WMaLy>+eo-moUiq_(X za{Os4#m^stchSGg*M$$Atch$s)pi>NuaWOfy0&!bo$&lAv?KrjPGp$ixDy%Xu3>y3 zaHl_4A69((HJuOjkYpqIity99@CwD_6_+w|NYNRBvLhPcnc#x-1GhaR_Zh3sf=WFH zYJtOdlrI!6zpS67#;>>2X1Ltp;k1znTt|@;*Y@zl<|FsdpD5auZLd5=@hpw$41V|j z4zGTWb`a`~yV=|9-pX06*4+h7q(v+K$gJGyxt@!q;8 zAK$P@b(Fv}={(ByG3)RuFj_8H>vr^pY5IS2no(1DCJ;Xs^~>K7z~F>P=i@Cq9J*1(!E!On?k zv+~x)kad}~Wsj#}Zx{BM?yGI_gHgn-ZCmaKcKo)*=Iz=;E<1hLwa^6fb!GD}nQwvP z7YOmJ+SU9u9=GkbYps$jv9#Id6dj=0BUmqvlOdbX{$OQS- z=G|@V0@DWiQGEy;mmZ>fvKM1DS_6wUNDqW~H^ls7%prV_m1y56Ux{NksBNAZuUc-r zGmo)hZ-7fi@2VF(qO85KOOT)Q!SUtb_z`ei@|5u#I7FencmsTpypk2hw&1l{N5zP+k>)ZqBaI@5n-_C7Vp);ITU8n_=C7?Z6$9rXGld!J96K0(gP0$2E4yBZo0ZjPbtE8&7@a0@;K1KUT*E7zU_Z0KJ9L#}`QQRL86 zWZF>bOe{p#^S-t0R5p9&xlWA+Lrdh*)QXmZ#&-n{o^gDI@(T)=m4{%~MBf>g@JBEb z?%DciPT8+=fq1cxl10Q>Z7lsscJg}-+b-Eofh&UpVLEIX=`rF&QTg9pBS8_7xfK5B~3j9TRoqF>A1=zi>YVv4>%UKATVc3)=m% z`NaMAgNkp+<`Rq~*TUExCT9^ImTfINwTgYT)Xp;dXxqMEAMF(6wY`s)96a=aLq4l) zq}f-T8Q2Am-;bVDK#sy@;4Yg-@NA^Uo{{aNp}ld?!*WkqY^Y`OfBseH@eQ?Yr_gBD zV4QeuMH#sZed0!aVo2GvlLsviR9iYn^~OL`e|RtVmHi7c*W#}i-uQ@9<6nv^n(;6X z6Zgly97(>1>`cYgc7Qk1cZ9?G-WI|KMBZFe>O729#e$*h(3gq@-Mh^t3XR14R0B#en#8(c_WsOXJ&`x-68~fhc3gr`!E}3C++vQtnEWEsjvJsxU z5q#15{jKnZwiMG9tcz%`!19>(JhWHDe#9c$E26z}a$ijRoc4+e_isW+9$Q1MPm#mJ zr7NjUSRY(SrF(GpZ(i)nWBAe*e|Lx5E)ON25WgM@HV_`Jb8<(Q*^xa3>#Owcus4e z*nc0{!JNL`Z%*>{Xg(JY+2<3lF*P%;?ak*W*Epg4?e<#u;X?Q!zNjR5j@rYXdzFb@ z|9sMZa(-{;KKhMpqR1ik#qpkrUGr?R5*=otXvrfVTYV$BAB}fRIz5kCJ@ftc{>qWy zzxIR>b2oB)A$%qdFW0+Ts~do!`u*^pesRV__SwZ(y4PN3!$#u?F~&>O*XpS92bW48 zfQLqJ1@B9FhI=u_X?(bbu7pRKbtGxdY_GD|%U}(DoxL#8T4!$vvhLtu*UwxK$d#|o z%RI)5M^NvGw%R6RLsHLYCv)$l&m3%_Zu%=`Zr=TNWlX!?_LVLC zprAy!x|Q)6JAnJu_u0H({P{}o6g@{7uWDjz-;K#zT<0hEFthG;_%E@)L_lXKv$s1w z5qb3Kz!KFHzfzmY2Jh}1>+x-HQo5I^>G%6JrzXK;1Ph~&Gso$ivEYuQ0^O_7)x8`%dJ;X+ z@C4^~ANqmcNtUgCp)X$$&mPbG5M}1ivuq^0c6tE)&6=feRw(NM1DCFJK~yj-a5uDpQ-d?J)6n(1+;$#9yN|Udw1Nu_%~Ye z>GFO*@mKBNOBNvWX=fz0$3{V`naqn=UvmtYbgou>h_fh=AC0RyKNT3SCNIs4ZRRB> zx)C|sXc3S3x$(i&ch*?-%aL7?Qt@fK#)he3&bzW{I~&Q9U~lIDU@Sk#O8S%EsGWQW z^|R&E?2_1UjmM5j?FR3N1^3n^&2`qp;OKHYhfe&by4|+rq$4Xo-PFiMw{FFz>joCc zkzfq|rgmSuL3z#Tb#t&u*ZNf>TmEQoz|_n|-ZqeHH=Fg*_*LWbFmPCko)ktO`Zo3M zftq!Qgq5&(YJ30RyD-#hKv6oYe!2*vU6h6oX>X7VUSMV4J>M?!TmaYbPKMu z--zCLIFU^ba4t2HGXhQIZjVEcj03OaP1cgNJZqj~48L&N%W^)|k7<|pehn_5-7nxOi{ihrK$ScWHwdbd=4&G6mG)wd4_gFLT0cO7F zi^P`5vt{1Zp3$=>8P>-Og3oCVdw^@HHlVQSfo@MN5r$9^fz za}>PzO7NV)_}u%#CE=KhUuS{i%eqfH73@Qv@XHGu_4#!^i$u3vH}nJUh?k6||IyIt zD(Ey0odS(5y5LtvRs-W@V*@HYGoveC$m zNGwEmi%Q1L^OqfA9Fl933ZY@nv6zG}YZB|Tm2qi5zwEFhW5^lcos{#s6Z4%~T>amh z%X`DXo8k1!9P0mH?3h%TwlGe7uruZR)pL4A`H-p4^x9I+K6rN>jK5|$_7VOQ83caksLMtUigp?o!LTXmfdgG z1l?QuO#7F3X6K94P3ZSt@7fIoo&~@Y9XoaH_B?-?j>ALIGYWtc`nJ1v@(H-~d_{em zHHon%sdyyZ_yO&IS$%tvsh@CpKS3W`zm~Dfeti^NU_Bb4mtD|H2lOI-CYxP6OR`)1 zQTdwMXV=L(PlrFFht{#_V`dk0RLmX#*@m(KySRT7?^GkVtC2}Hm)qt#>GwP~3KE-d4ACl=0(vOR;In@13)z3}dGPqEn z^IBNrII=K|eJ(vYn>kB>oGZ30Gq8%O~UD$WeI6XnZ!(CA(Hvl&wi7 zC&WjP3zlHN4|Ppjr~CAyajFigd_V?gvXRll?V6|8y094TuRrL_zYrYXO1*c6JT-)BtO@crZi9+P*xi!-6&1!cN_%*)vm)NMSLA(_J& zfde=%!fV?#_$`8ZKgRpX0e1XEzuk9_@Q%)&a{E!Pk?~8Utp9HOo~iYtjn4pEdMZ3g zK8GUcbR@dNRP=^cVlRcruc`PJM|rL*!CzzYuG^@gx5JuP(z~XI>@^(;|7f++yFK92 za=+DF3;!C9-)S;D2HTjLgpY54cQ?&N2NfLeL0)Z6-D~Q!)4$#S>)*nSJougXIy57C zS-11E^zsVu60PV@^m6e~n%V!g=DY0wI+W3O|JMfev=-XkM!UOc^95+}CFI2~(W}a} z5A4akrC#*Khm5}X^GOzb|8bsefv+|2JT+q?v|;o`o=?^wXSPv$06dj{RQTok;)I{W z(sY(vdf>0>sB8WhwL*9v-H`Xw0v)@ML-5p<_)6f5CT}_ZOL!FgNIAF4sfgTVC03Hp z7pt-o;^}d8ThX-60MY(_)w0-~VSO zmr1yV1x2Nrgn$shs)tL+s?CsaGuYKGbhV{6fq+~_MP#=)DrSIi9jpdyX<@ekBm$#U zrMm5$?kOk=YSapBYxiuoJ*mCxBPClP}X6Ao+FVFkjpXYtv zJ@CK>@NLNMSB;105-U~&?$rVp)pD#S&*VSIwKD!0)pKAx)b7tWbB&Kl{YRJB<7zF_ zSdjNq$th>7;`8c9?Tfyh?>q3@%(b)!8lOJbn}GE;#;1OD7OvxeAD(%BliD->b&ZMV z%pMHp^`8UD0R!ghs}0%|4D50D2sgZl>_k45rdy+%xc?mZkIn{7xfX@uGRJFubVR&j z((TA7WJF8W!ObmxV8{FtJ1TXQYza)S9_CMPG^kq5mTv_IP z?;X^pWDaJGeq=0TZ3fQx{MzbH;IF*JmEQj# zFR1M~z_)k(Yd_p9I*>jfze_>9#=r^2^4sj!Hh<(HPsHsyb&~v4(&tHZ zo|DW=dT#4nE7mcWzUb$Wb?#rI+~4zL5c{iFDEc{dyET8{C43WH#TW1p@Ysi9kc+~v^X6^Z&I$FYBe9) z+{XHr0N+w*rLGLR0j`RZHZlguj%KdCg)NliN(!yUe=vbsc8yNoz;;~!^Qv+1iu{tI z`xIcN-0~>zN3)m*?+@qfN1ch?4E(ZLKaEfQtM3E!m-t&_P%cPxE`GMTHe7`x^6_UP z&)-2O@8I1hv-eXg$1=5Y_JAY!WetuTM~C+&`(j^b%x|HaTHs}i_+PfJE#3H@t5>Ku zV|@QxS5*Go#dv5}G2SRJ6duh5kMK|JrSM^Y!C8CTQfW`;xk#t=qCd9)hl9**811Df zhnV)fwD%VCYX&B76SEo4Jl|p8OEWxNxy)~)OB8WdQ!99A^mg!Jdr$j}-MS)Q>^Jj~ zFI+Qx57>R3I8QTce-OCJ9+g~aeaYsZEjV+k1@_^#7b|1=j$28qo$$%gU=e%CY}-Pn(=Yp zoKqdYFZuTr_v;?B_mefCcR9~(r)HtrFfvllsJ+G5BJ@`ejm$zWhz74@eGQ-53VkjH zzn=x~u%izlpBm5?8_MlD9GC#!Gaj8YnKGI9>tgXU?Y&sI7rqv$UCj6yhuUr^=UqQ} z@w8=ZfTcciuzQ5xMRy#LZ_cqcy7Y*A&a$R|;>L%c>+3>%3OpCq8YW{%=7YJsO{~XohcZ8JdbyIPV;?>dFb8DIQ$MwAa2CGDj07? zQc|dlGe#QGYi1|OKB3kT&#wfZnnhD_TcU+N^nUeAYc{W9?#a+{b=(GNroElA=1d64n1qMmmx_$fXnc{H1GtYRE< z8Ha2iwb`=79>+n(0iPZ1VH{=gam-~L2N}n~q?Awty5wxxC9J*n2PyXEhd=53O24aT zsMN?|uEFm{!k=`eWl!2#4}ZGfW%E1nQso&a=O7n(shUYTbLtJ+TT^{v(`x=TrYCng z@q1f7UCIVlE|m28A3ytLz25j~26ARXLQNmX9{!8|MRfT0lfUd=yq7*M*T2}BD|;*9 zyqW^^yF7dS^lAJ<$ZhRqkew_WvIY4ox)xjve9-GlkU0yGIojiyPR_XW?1~Ah<(6(@ zKS@^*zmx5Sev(A2ue;I~mV2!iP>^DF66!;HG$FbAjlP{9XQ)e}}&GwDNS{T)F(na`4~OLgIb#_}|=# zO~$9~Td@5z^4%5!bJ;lZ--;(@19Nm1|2yO_iZ2yoBg;Sfu3*l22V2ooG`?nPPPd_3 zp9H4G*uN#Nq_*z&6gw)$rY;Hee|THB_v&;H`zVY(o!B0^iUST}cc)-?D>j3!58t%% z5}%Rpw!R=3DNMruf)Az;m|h>W?T$&%dG~vhp;x_sJ!3g|lW&9eaBJ+7T&p&}dn@}U zRcDMiO*3tZ##6lbooO@sd%pbFGT7(NT)z)|tCFvN*at3FxsvRf_&lGT$&TBej3l#b-R~>uS56rjP&^K_jRwT*L4r?SAG_7H*?3Ir<|8>;xke0k7M!up5J7@ z=XUl@mBjaZzRuju^Wbk9ZI@hPzvt`R6aTA6ccWI&qI&kQqZf}BtV(?LISAW1{~?83 z`QtqE^X%6*zeW8py`$e%wuwS&1F^TV#;Q#3X|ENRHABG%Eq>;fpPHfUM;!Ao?`tKC_GC3sp zEhV?7;)_bdVGEopN-(v zg!Qg`?N=%LqkNIpq9<94B3}w?iB9r))f)5OPsT?oSlTKN%je!A`m`N^Tor|t7|p8c0~M`rT7KksBdV_z%V zYF|@6R%V9R^CZm1RWF|TcxYJ2F#ZIAv7Z4aUCT4bMcX~xr@`g?lJ=bQAqM6rL}1HXi4 zpCZ2sS!bWtca#&Wvg5CJqW^Ti)}1D#^L%I9m+4>vJiO0{32Jqd`{R-Qs ztM;>L|8n)6x33j_T{w@U7X6|g-J$`1LE{$uAkdfg^c>9c1)7(jYlHt$c$$fs&I?A0 zZ^ceR-)Mb2ZD1YiD88op#oAYXoPYT#+iqkXSiujj~-zfX)!Cr^1Iff3t2mE`C z?+af{9VkD~v-G)8{+=Sn&)8qgvI1|ir?}di9GXbYQ(}a%ZP*^$p+VW1S95M@(0y)f zQ;~DN%M%-$(LYohWvB9YWGjLfCg+gv%FAfJTQV0MoD6ONla6V`!kB|(v2rr9Zj7joxVsA zJ--B9r)g)^X4RXOeY2C#xjn7XS-@cgeG8s$bpJx>8NJ*g?FlNR@72_xt+%*FzuS>1 z*%{PhV{V0vMb`##&B%H5R`-1Av6jDs*oZq#&jbTgXmj^Ze|lu?Pa}WMUFzME`$gHt zVPC8<=LHrfrPUO2zofq%iz@V5hvh%Lo$=GosX=|0Yfsz8%wE=_5x~RS%R0O(AN zv|N~VVeeZZ`vasGwqk?fKdYISd@k>Hp2;0@;h90&AICE$*27taQ`o=m?d6NDWq$Ix zxm~`<6suRwKH{owo^1qXg^!dUo&D_}9hva$SO2{Harc(O&u1P@p$%X&d>+@Qa6M^h z(w601Zv=kZUG9)zv>X^^Q(LByc_{ZXo0tfCbp#$4xewg3eQ~yKI%)ffO%wV59{<9{ zPV%|lY44o=0rq9a6TXcZ=^3HBdS!$%di!FB!O5G``-Z;Nt8eILexK%<#ZNr3@gX<& z-M+{oH`ndR-*H@qK$2$%96=nzR zythW|tU0Bo{#T%B27U`abJh=}0N|f>%-Ipx8kha-e;N&R3WJKQlapXLWX+3td(7+%$_b`*?Re@9FnO z{pLOA_fzJ+_$0ELHPtzbU9uY9Y4FnHF+TGXCBevh(C3Lu^lkDPn2+WXr6yqu^U&Dq z?@j7EYfUKzn4$5tp zKK>u2_~4iq@q;mrPfGYTlQk9$Wfw>{T^^rj1F(E)88V7o3CW!U$O>?}zn-mSOoFpV zaOKlnQ@e~;H3OV>o1t6z%p1zANcXmX8gDzwGtKd~^}O0{D6`vdp}k-5zCLyDCB6#| z2P{ubIXWu3Cb4~L@?fJekLeRw@9aN!zWN4msv`D32!2mq;VJm(bm}m?bdWp(;j45y zi=2fie6Au_f&FO4zuHEw!X#Hp%{##IIrc{va}I6AVEc^7;%!#tF>)2OFRg;S1gE_> z=IwZ-82K`Rm_r452PQv>zU%3;yjy;Rd<*^Pa{+x8bIw;LJhh!Z7r4@ErlzHb(#enT z(`VV>cQ&_q(ue!$le#0P%ILFg*);KN5&7P+`b z?$ZHmGwlyI`a3d1dB*>?^~9!hp7(K1tnx6*8K?3iqz}pe@Cx@+xW8X*b6+sjeZ?`g zj;|mGYP;d|MZC73WpYg%necBvyM#;_0No8lAHnW&B6MOHZZ}9%y+5TLC+Q=Nm)N0ere_WH7K2p3dG(cout?;ZvR9>hY1*^fmBzFY%Av z_sf5p=6`1d{tMPfI;nDca_{v;b`QTNuK}8FEsw_nZq~Cs{B_q;haUf3Xdd-r9aUoq!v@oqTV3W#p?yB2w&S_Li8W9tk{HA2QH-t*oX zUqt*>xjXGoS%HoaXJONh9S?!8#$`(ezVhbDUA#Hcf{wy`BJbg|H@t?q2tEz)Il-d^ zI&Pi8JWAlPPjRkH$QL-lyiPI}YS+gy;9Kc#`y5dD@|#xE_6j>b-^6E>-)+#lVj()C z<~VXLdbg!>G+tFc!bs$ja@LH!u+WOMBR8K1?z7R!8jGx0DzY+)%xu7C*F-ytkJ)qS z6F&8Q#U!kVm1d0*e^FhLVbrRMf^RLUPwZ73vvr{_g08Va^QoJL45KfHcfO6ENwFHI zcH!IjnOc^RBag4?zg;sC{;XVz2Jv9vDBQ5)H^ikF&r8%`Qta!X@^;~q^23w2>vzW7 zx_`~)Tzpamu9O8^;XkdsGrX_KwTy^Y>$l+6&bYz12xonT+L$9TRezD52gYs8wFsS1 z@h|DRPTQA)ht^u_9KG9KYst~$bA1uB#;kc8vO=-?4)}+1$z|gjd}ofx=2vBV%%YDD zKeB8wIuC2ugl?m~TNPSEbf46_SVQbVdkuSBw1&a>8U~S%1}^yR4uaElj6rQTEJiLf zHlOBEAlY>3nv>X=k)fsV#1Z~MS(z@xlY}{<4|GPr<%ulu$ z^2_)?>zQW}c7mRfuG4+~S|jN?&8)TPvBOWjV(3uobDVWid?A~8y>^8aOaB{d%s%#Q z<)Wi+Ll)L~T*C|E^32Kib0a$$Cw|Dx@H2cS=KD1x&t50rZxS}(EY1@;h#Yb9{SI!G z|Ip6&Lw@)75xWiWnG9cSf-i|*9z#|c8ioEFR{LTD#dE-=gRI4KT3fEygQL3lecr8| zhTaAL{nXDod*V6j)8cy93R~~0<()d77kq@%iNB>&CjPEPH`E^9lq}^^TZ`5M<5I~) z%L>W=WZ{PoTI2F`&AQ7vEO;wNSnH(s^nIJjkEP}(ZHV`)4U6Y%X+t)4Hf?O94Hwt4 zXhV3U81fKuJ7hyw^WHw*BTr>I@fF5{z8fFUH+4L1k^GsrHr+of88~90dm)h>@o{D_$Va1%BzQzH__krRi*M)!d&tI*Z{5c*2 zye$0$9pU}+pMA+6b}#K;mVQ!X@4s&~dkh9#&`*$G=ui~1|C87p(L8jGQNZwSYPMxjSN=xE2>c}*wYR{;t>G_C z@I=X4)wUjR?-!d|=wJI;+w#x@xK<3WNr%_$S1#L)Hf`UB?5#!a8hU2TpB7z$o{Mas zr|gmIZ-(ch7nIS~n>P`6XYOVkqcm6KC3UvMH=^_z^%;I1IRtMJ>`Y!0?N5SV?3Yi~ z!JBydmoo;{6OixG)ve7h@gS$o%beSPRwdwZ*SlZFW8rY)mP_OC0?{0QmxI5;qw6k# zzk6u=a`3ma?56hIzJEPl(g+S~|Giz;;fcLCu!Othyrz8h9x0x0U|k*DtrqTrr`7ll zt1W5-KJMGN6TjeU{DRTPQ?^7uFWcDs`Kp>j*l*QIsWsKy-xv1_R(ox~;7)Me@V|_e zn-9WIw9i|9!Gk@m!ztYH}`{Jt@Ow@9B&n#o(g&1v!VK<{)vuojenb+l6|j ziDwl5X8%&`KIo?zeL!&p<($aoQ_NX8v^lgRf3j*TD{mXV9Z6;XfvJ~3n?~=0o)jn7 zzRq*x$TdPAiWf2Oi2M-ZcTseRLpRX|Iv_dVmFVP=x8dc|HPo+kp|%mC$>eY&?=(Sk z+IL`&2N^}1Wzd_+2Sl!B;xC-~S?BZv$k$p=+VDE)6&ST|eQE9HEXLSS1kJD(ibHha zcah`UuxWD0zns`Kn19){!-d1$?qAAI6b_I23LKsf4qp!b)={hdL2$|VSrXzAUu?d7 z{N3HHo{Ncf4f92kgKLgdajvWnUv#7EuCa3-0@jkx=>Bt5V*yz*3!JP+uE-yhbtCbc zfyT#{Uq8V1waMO};C^Uq8P5ri%XsbpGF|(^R8y%QTg}-|b`S5@4rL8lJMC4HFJ>Co zRF4Pw8MA#!w$Jw>cml^d=3AS}yFF;L4|#nF@XKZViT+mOV+D`O$hDo2<*ID#XVHF= zsgqEf39reqz#UI`w8oQ3n>n<}xTp`Zsew<;L+jksk37z=NzNpNtL{;aX7co)lR2eU zplX<9`@Wof{X|*Jcwg-{-rpsTw_80e#Stc!`U2&|fFEG*fdenWuA^2$NhK8Y5 zWEMWrV>fXgDfuO}tclt0#n@Ky?(4TMJ^DIuU)9;Up~OmQN9Ijm#{6%=m)rm?KE`Lc z^N%jn2kBbV zp{x}=s!;0)j+Ncx3nZ>D=az2TpNx(z{6p{B0!%bd>9xP+yT-MT`PUj4+2;_|Q%~;9 z4qz3BM-pu=2iCJJ&KL%D@k^#?Cmq(ZT7TUQD;jyRujFg8beM&VN;Zk}uNx z%a8-M+<;c7_aa(ZNB+eeWMB&QT;9w`-msY5Sc(xV!>)=`=>m(hi z0vLji0rjU?YBliF9OhuxD#yg&qId+)Q#bklrj1IqAv#l^>d&-ApUSUGoX16c8~pg} zCl}Lq;{Gwi2Z5(xv4R+cntB#!dvkhM?C?^^LuhX@|Ktx)^C-E!7Qc>jt%Ym*EN?shis?fJ2LreB zUjS}OA07fMZ|7gXp9lYj0L$C?*Y9=Q$M4ua^HcR53{2)2Y|uBctQ(H^3KW`dpQ|U(dVLv)P1x$XZFCXS|Gk4rANFdfvv|8ySn9H8n+2 zAKUv&@hQ!ZF_a?5RFBcHWsFEYV(SKc<{=^(}}J+$y?mwb)^@<=yOkHpkmk*rOGujXUu zIm`AJIPK@lR$)%cxi$Ru^G@pF*)WzUX}QKg2t_$-=Gwl%32XK;ftNEbpclRjkpBs||x z0By4la~LD_J!6VBD-KO9l`u6bVsDb~tMgOj_e=)<;w`IcrPrt9>*%R-`4+uL?GVL4 z-^Rx`zlS&PZO&COb)IOifPFv9r03uZ(f&u-*SW5ob!&mWbFH0gYr)4{eDE{qL(i=x z2CMsx+|zIQ0yVBq`s<**3E!da4)!qiX=oKRp=Sl(Rp2rCLWft4w6CR*^F5h89>=J~ zn+5HrkoVmjTVm?Y)=lOaXvO0Kzwr}EC(gw7v*RV6@XPFLEEUfMe~f&`Zd5KH@l|uK z;{^PSvw6M(e}Z7+Jg48f-Y_{BP+pXHnS8m*PZ|y%k={Iq+St#5cL%M-+8e`jZq5Z^ zZwBocy_$E;IKW|JW1yEPZm*cV=<#RFHOO4+J<9^x7mhE{_%y!>Y?d*1;liirl|GN{ zA2#^B!sZu(v)1nRPdf8L$hnd1|I$7L;%PBII;`M*miCFkwQuD-ZU5E5$OvSju4^yd zaZit$=hCZgFZl$N5tt&KKEx(I4J)v5cUeL0}^9I{5w< z|1Rs|v%z)|>q;hGvM(MlX@ZAT zLo?N^nfTJac)TRabrVMcPEFi{2Jut-_IA?njH{zwr2rd)l<9x)}0r zzJuSWm>7=yj|ahV0OR9nO9;UCZUTxx4{K>K^p!+uT;ig(%fvfdR8R1tFCIc zrkYvQda30d^(#IpexbT8(JH%US`(kbsV`o{@$I55b4<~kx6kq=-@ zoE}fDaGU-9xzFgl*KYg$L&%{`tj`wYP?Z&Hc$W4zx&xi5`0Qukv+o@|a?826-!nL{ zvVH~6ZDI{q^DKL=8+hNyBA##9Lf@hXV5@)ePJMQkfCKtY4tEi;>!xzzW{+91HLS6G z?CH6_NLxAi9-Ix+@vJZQWTmU}_!29&hunZYt|vB>le^kZjQeC>@QA*6_i` z$E=9jKfc8ZoaFQ5YAew1USHrec?4H{#~1j7^FgkJUd|L*G4Bn*Knpnrb;uW;x2_s} zwv6c;eg)gIb}IcYW}btsK$P*T?o1uBt**)n)B>vyso`7uEcf^>e}4TJt4#?#F6 z?T?YmHC1$hAAtXCa8Y`a_Bv`EJ`G)v1GO`pIAN0EoAqVDzl1epPB*k;%f|a?ppQoS zXo~j{r4O_3xs36FXF8`u`zG4JbJIU_tLL81eW-ml7|{Or!QZyV^!&Eue9!Po#_DE8oIG`1l+(zEaoC-3AG@gCpp=K?$gNNmgPof5F zX7~a9?z{hg=f-ovlz&D}M$PcFv{2ducK(@n$lIG+@yRRytbklFFL}lH@Se%f;8QhN zluy9AE(qfH6AdVCCp_V-s=(CS%8zo6jj0Vbbu0A{pt%QJKGEx5;>$Xt^JcAC`^M!4 zCr>T`SHN%8-A*9~+P>Z+{7qtY!r8C0*1u(~^-QL_kDvW^)76IXPw(~?{_!ciLzbe` zEoF~y(NW+z<`!2l{}?r{#-sOL5AJYnH1JuZ{>2B@GOk?CB1Yedn0C6ZJ!Gy)x6l~W zxBP+5nDtxltACvb(!n#iYkm0z^z|fdldD6!{=ILbht^GIt?%^37W00o%QtosFtP71 zHTNZ}TEV+EXi538diGwPUB&)z!FVR~)jNl1a|*gGK9TSt+HHn69Grlx+XP=KhxS>A zM#d#u{yF6^(57_u{oryJj$)^$xQ30L1YS-7U%hG6Xh#3kK7HvS4lUP~iJvhp_>vhH z{AC_nb>sb zWsj?WXb(Etd+1OT$g7OkSqoI7qpbvPN!+U-2Q`VdPI&r-PtnI|;4uqWshx_~bOu9` z?7_&8Z)lHTk8rPa(NDkdq6NXox6-W9r^wmk?A5^H2gU#U`R_+pw5V~bvF5@{a^b)8 z;WKJ?H+yWA<9CAZI?w$5dwr1~j=m?a$&WwaZfYp-{PdfGN2=UjQ%g6e7jh?#hxJ=n zQ=K1MVnw`+ZwS2VS#T@y{twUD_a&#QZnEuu=^6Sx;YRj{-5u8>!Lv6;S)-K~ItUuZ z_Uo$uRmT`p;B8Kh?F;-)%&m>W+Y~=lYS#Qyt=DLEjpc}yvqg(z8o7j_76NNTSPB?mf^e60V%t#6; z9y)0__AEFn8QzNhSkd#~H5II}?Am7Jw)p6}TiIKJuHF;B*@QR6gOmJw;3q}@`{E!+aU2PZUTxfeOZTq0N+F|HQnjgF-eVFPkr!8=)-XwmmHs)MB zp0fzRxjV=!uA+bWqt`JO$?_MN^IG~YXZ{Z`uKDz>eMa+LJ!`VCTQW7DOrEE&`OHK6 zXXf*+Y#TkVd_wt~=hKFBZ7pr2a&4`vM^_te_JgU7wY1U7c*Scb-X)&^zD3a=v~T#s z+@Q%>q>e~L_E`nvZ`^4GjL(2)hfq7cNxA}funqZVaHJ|2c$l*Z4Zd?->s=4u5<>BIFU(8LU1?C;25k{+OIiTbg0Q^EeL?x{9uV-fwi(D4{U3w(DC z@N7h0bfA;1*LQfebTaduby806`tR9mb{u`~N%<(bege4tka6n!N%Xd-OnkU!xC*;? zCO)#+;K2vfMa*<3`Hz!p^byZxd{@7@&+m5TjlCUMj0$nBPv> zH_-Y{;S6v$z7Blol3Tl&lg<;~1#i-MXv2{U&x4B{(vy&HKS#dp;ko0?s~Xu>ZS@Yp z?_O!Jk25+k^Zw-7cFcCVe z?vFnOzEi>VL|iEaPc%;Hqfy|yQ+U8USm%J51N(qkx;*3V6?(>P$78Db zT}|C9!C<93xyF&Jz9W;z8reFGdhEdBhwKqh8|(R$K2QgKi+&s61B&l7`O*8pcj*9M zr6V}9`47xP`!`bkt@@9rZ&(Shy1s`TQ_*(3G*yu3CS*h(cZ)_AgZTWX|4_oO8-81%(uFD70N}J{x z`bocmn!c>7bad5^D29jhxWNjbL(w+ZnRhX~S31(aF`p^GJ%u^!XZ(r#HI&!)Cih#Q zAv0da<%M><(2h5ib9#|&I_I+_*IM*EvE{bK@Q{VrcZ{VFTx|rOR^D2Ew2+)4?Z2#l z(YC$MwP6##7z}vmbC%@}H7sNu76&7MogCV$TtIpkVno}VmQ1CMfD_wQ{*cQR`Z{WJq#t+B=}ekeUg?RN3K$>7AD*u|eS zXP)^x+Bpmz-t2y2?_uar`LLJNBawT?cHmvbn`9e22=DZ!l^?}U`#^Tuu=%^p{+=l= z_Ik2!#sz&6e;m-d@x-QF=9dKG5>|d^?kIVHhr+@A{k&IR}theOMQ z@qg|Ry=U2bE~U$`59yUv_#TgO#(;~pA!ZUO#}B#<+N&rT$m2|MU733Y@gb)#J5M_) zoH_2iIs4Sa@ovOk9f98ynr_Nro_VYTeb!=^T@(YPf9;*EHaM=axWkhf%Ra^;{GQBM zb}^PH`+}m3g?s^XCflXj(VQ;A;~eBB@rxU}<8Th=W$|nR`gX;SbMf;h#sf`!0eq=P zPi!c#Y#9t*p|i!bUg95$7rcQ#&G@>RZ#{ZgLxJuy=Mfe%7Wm2s|B_v&#o(l3z2~U~ z&3Y&Lv+a6Fv`?(B+M2&X{=oUz8t4P3ny6EvK1I{gtBaX zu5*E8%b9or_FoP0``j_Y-!y+I_~`6iWKNNmp`6(wzb*BCbX~f)U4zuNiL}0dWNkBv z5h~aJ;&~!BnZMZ+GnDyCmNM@h^k?M75b{($Eyy$Si7_5c#DRF+tUC{9KT`fgC2flToGP;S=jGn3HSBjG|GmtjCaD#x!ynB$#yUT= z@;jOLYyE;p7W~=C9lo}*9(%ujp%2}c{tmb+8+fk)d~M))PpRAFR3x((Xbw7_{J7G` z?ql7X@iWf_AEKffYG@~)=Vm9DLx=dRpI%@AGR zMeVsYYuJy-^%n4X7qzl<-K^_RgMl@_vI0BcySpB8SFVHi7AO1mu9IFb-1`yomG7D8 z7ty=p@|kDw+2nP_f0(ay1mXO4&Lb9%G$5PxTkD`a16xN;GWF40r-IMi@1Q;D;I;UW zUwa0B{zCbA+~I~6&NF0PR4=BGwqFN!1~+-WmGKMD^68@qe3jn2^ATd$DZ{8OZPT-8 zZesEyW1DzBPKWrB%h7elAH{YV?X)qBHdYG1<82P+x8P&oGTs+yagWQ}g|E_kThY;Z zyr+H#@=Ue$*oNv`CmscV%r({gt6dB(X`bNHF2-C?YRvYt{T-YgJ z1)pBt6HJ}{#S0RDD|fq|b=Gz9c-bDhpOs~eNzNkvHWgU|>{@`qj=|*J5u27=65Tfe zU!Co@4gX`OHSpnj(R+L?eo0=2;Q^ebWZ*nCPW!aoLZ2EBb2D|i|BJSgi5Dr3A^W!4 zdW5-8>6-iRxZeh@%1%r|2S&CA8d=9C=K5Tzd^p(R^WvZ6ZR)qyY@e~EIL8@V$^4$6 zvt{@_*!~?|B3n#&ni75k{rfrOB6tvMW?l!Fljd?#K* zjH=B&CtCTEWnTL3@OW$F$MlPb^!0{nuBAo}YjJWRu_NELTm!oP&E}=wsIEcDEKy#07vZna*aiM9an}lfwMFPzqH}013eSq(I{xTf;Q{@3V)Le6L0xazzQ{ev zzfa2&VwVMRTc9Yu$1y(ddg34rtjDX}=07Apf60U zTtg2%tT-6?3k$ZA*R5NxnY35mt+nHncF$;EUa&@kbH~ax@$QRXt zeV=krKF}0DbUfYo5AgdA1%FeXu&?jo`aIy{+{@zLeXfj}{mfB5(m}+GoO>VO=bQ(f z$mcunP3lCuy~gLOIE?d*e7^VLGtG3Tn0sFQSI#~8d{f*#y4rTb3!Hm3@wV6GTF|RI z?D%e;BNs@%n;m>kd-}wtdFY?oSMScS#$>vZ+g~UDQgil#Zyoq-(Fv$g>1`_&u7iuR zOWNW4hMwR724}ebk5Ovbn>|CB;aQAJbXJ5MXhe=d69MIml*9Xr;OFJ=bCWlQ4A5s8 zHgMB4BYVvC=EbZHFlYgHB$IQ=ftindkWMZi>jHE({2s5C!CMbl59Jl%Z&`r+DJCaj z0evOYf7dl^a$QqD3kLHHwS>#nmVOh5T>$;-yC1)f?Q2Q(uVXHAW+iN8a*acvw&2J$I65UIr9(4EJm zqNnzNm!aQFw}0cwi~S6o^?6DAjCd}({dHZs{nPz8i=4IerIPcF&U^mkm;DP*()Q)} z7o78}Z_igBfBF3C#$UJss@dIq)D?(6hD||jJ*S4_w;6+*l;pzTt(EoY`|_pNqi+H4 z3ujvMd?P&A@KE3^d{y4fTKLv*XvWYG^(!SS*H9a*10U6K= zl>^CMXY|G%;f}c`-o^X9!|!tc#4pANPWqLzkz#B{au^P;ze#k}H+&3UcpO|kB|V7t zPSgG~X|#2PMZf*SAA5S%tnb|uo=Tn>c=9o48C1FYx68L7e%V1ERj#B3%fwHKsg+%c zj0YF=y;(Scd{&Nc-B5H`?3q?{*^iJv?btX;*^B{u$@9e0jgFo2{OQj&nfw@NwCXC} z)u)l=eBLUV?g{_;2J3^;)kR+fv#c-ldx$4^WaZ%avv=9gIQo4xy4XtgYP`-oVA;zfF|>}EZ$y_dbnrFHq& z!Dl;fu_9@-pNnr_c785(By#Z$wsL)U+POU0`rlOigMRL(hEoUEj)Mp9V`Ch1_4GeL zj>iecc_-t{C0C%87@u%zw-?^n-^jj@loyfrhZVk zh`H5+3kR;{*;~kKW=yIpG+%t0-;?_4{9ccL9yPw7Ll$THtVQYIoovx}vi5IQ{wqG} z1`Jeb%zQwEmOf1OGYGK1aN;Ztaml__>9H%7+#{ z=25@8j%Vu<@M*k9?I+acjN_c@^m^d)MaVqihUP82(Dh7wK6juKnL4Sgr3d(D1OIHs zS;xL9Gj_(74ezLf4(pkR>|-DImtSfg&_&`ruJ|kSNdCW=#~@_7vp!|Rs5Qbm48p#v zhbI_&jJo>R7Wwj5?_;0EVC22@IoVc)*yqa)u3_8Vs#pQOkqkRGRC;#KKU(O~R(=8U z*_Y+}LNI=!kbSh85ASCo|BOsSpQdg`tRU;lXO9&CSGA?{Oa@b1i(1B}wpJ542k476 zE2%#|ftruiIkto}}T`Tam@!=o{?aj>m;wIv9@&nb;e#55s|D)0Sjo#s0JGXcPbBP$fg`Ajjnz*jbC-QT!O>6V82X2Yij$@wvvzRCM zOPGIc9(Ha5PWiwo>k>Fs^W=$5N$93Q#+FzI!_I@S!ta6iuk(y#_*+jQ!@KjrL>b-> z9y|^EeIRSK*a}49`;zPLhc1@ucKiTcdmyy67+VE?myKO=Iq?J4M@~8MW%>Ri`nVkV zZt4p_CyDzX-JDr#?+;R*b&|gry{RndsvL}roro?~oy6Kvca_}c$Qf={o_v_8n@jF=?8EB=6vU_Mos#Q1=_ z@9P{W9qqdC(nJ^zr0yT>HpP! zPrU}l{{ zV~{OT@lofdENVBkOcQ_ia+ZKEFtjiJ*1O@$+&6YKdM@v75Pi$frTjH=D8_X8?vQ;A zJmX~_jp}3K^Ls@)ZwoxS2Ww@2PYn~V#b;nGlFvXit9KmTSh<+QMLBQ8evUTA=$dL} zX`iIVr?GX737FVpqP`Pj`aWa2)OhIcR2zObGX~^M`&{%Fp6|#LZ{tjJbc6q)u>g~q zahT}-KV-7!pPc0e)?PRuyT8bz{bIbx zbTysx!P;l?DVkH9tE~i|0DAUY=p@SBM3?D;vsrV4hpH!}b92+eIltQ~uL`Y}G|v7e|zbV&Qb&pO8};Q!0x(YZzTcz(@zE(M2H z1BbPn%{qhost@7&A@ZR+o^+EB;$_9_zAO*kyKMfybnmK;FZ2H^X!COTzY`x?d+TNJ z%im(p08e5njR z+5rDlyvDJC8hR|it8^yOVACk@4t>e^ zneT=dac*c7TdQyaIEkN3GRx#{ft!wenuy<~(co5Udp$C7KR!(3tH-WOPM$J$;xc<5 zRy*y!@Ud)9Y(&O`z1OxM8QI2scF?Zk6&?8ARuZegRt@*Q&9^&a;`rVDzE!x}`|YCL z*)!8B>zL~q=-~ZtSi3)%uF6L`p!vMW9DnP+E3f)% z+B@j>yRgR;FE|L_97ewFNh3cjVA?0#l&tZkgrCCK^IIS1h;Z*C#*}ddK4`AjaBht1 zt-VG3OmP|2CY%TCl!LL0Yid{T>YaAk2nFymVqy;hyZ65xjJyx;6yL0ejwBn?iLppO zaIU?B?|8rbVv=F3t@9kUv^UA;W&FwV`7*E7`0H!2{bbvcZ#24*^^O9oO!T*v*iG7B z)5NpeZ+-k|J^Qd$npzsk?cN+~`bzL=8M>}&8T^|6eU_`8e&Maj;l9s6v$w$GXs?+* zC2t04uKeCvnr>p6l6OviViSEe0jE^>Z#{h#QafR_=_|E;9yy*vm!($@%eE>9lEeQQ zeRaZfv*5XA{{`=TveE8O^N>tbpQ<;h^N9+8o&1RKfAnM4mXnpm&u?7noh~o1W?34#zM+{CjPR`?x zb4INC6&b=(|t#$RP$;BsIu*^EO93P2u?}7RA z$t&(<{OxOLcOSXQdcT$aoM*(R*3!0fZ+Al5^3m=l=gw)n(DwJ5G2Ktw+zT}nS&?^H z?{8iaWIq7=P{74bS8tO`eVjgz;Ro*d338l1j1PzY-=&Xd!RL2feQMS-?kdLZhDSdz z|Ne3BGTwjIJ>Kn<&xhxwQ*6>T`JO9{G2bujPE- zZoa3P>s1Ng|C#Tqk@K7Q=fCkOJ~VbcdO|n;Tzd&U!MBD!Qo)ZN&{Q9IV?ST44>)MW z|1QT~l0NXK!DKBp8jRh8jib+2YBa1ZwZGf` zPggkYjkQPC;ty$rPl(PG*Haz1Uf@*Qji%0SWgE0#jQncJf!_=Sc8p89fn-3d_y9B| zJE01GI}2S}ds~W-X~S!+%Be1LNw)RjQ-0*6aE&jmvO@X;eSC{Pq^E|mUf+D&;~u_` zy<>j-aq>awy3R{!LywWp(QqSm-@u2XF5mgd0jJS1rbw|FB)In2Rg@XW#d}=95?z> z-EP5qG_^MLylH;~ z)2DI{ho5~1e)JT|hSoj{8A(3StET2Pa4m85UXW$- zMEk%eh_y`&Mm}Op(nH#ZvKH{AGwfHW8|sU_Ksy=4{yOmcpJF`g8B3VcvlQTQk zGnVy?Wj$k2zOcr!F6#q)vl+uVr|ncR>n)hcj`h3JnNQ#F|E5iccBR`-TYZ6MZ{nUq ztNOJ4750ATv~u=47j@h3+>X8tZSA_%cXSHtY|iV1MskrOx%a9j;Y}CLe=oB4*yB>?XeJ4m3Xtp6(7y06C_xl;{P=N zAM-E%E}XFQ8|^V_{TtYysy(wUo-4v*zUDhRhBLLQ+`ZcC$u;~}`YExl^snbTzB_Xk zP)3R`cC$Mptm}fgK8soVkFW!N06)1K|Lz(0m7(9eeX-xNuj>=j_Lbo#V6JD*AVbf3 zt_=TvxG(Z!?_GJbt#M;Nc@&xC#{YTN%0K&<6+4ZteF_>>E`{FrCbOs7Ga!7n(3gMC zGoWTbp8+9nU;g1&9`LGRn)Kbw@V$(u#c4aKH17=iezk6AY2ysA)S8^*Ir&eoL=V;& z&v5_Be%31=Zg5qeb^8Km-A`;d`;Ee*OQ;Y1;kxnpAHoClzBgC77=0gZ!OtPyqHF5& z55MsRe*d~JaBj5~I1?hL44&BuzKBo6`2UoDbk6=`f$fh!?i^jm-t05+IeA_E$k!Gv zWQHH-nYtfv77jWmHRFyhqhDZ?SBpGUOhKQ=iF>JU=ledFWojAz6Fg)lxRK613%^9- z8ml&O;%{<>$Jt3P=$ zuSR#W#}T|p_4x8T$xGgfOz+(4HhaW%Pw~1`*BZFiGQ*0T1#T2BiG4cP zihW#yzi+#%GPNv-jJi4eCiLdiW>yZ=1oS$KT%+2j;F)KA`6j<(8aBh?Lg=m#x@+spIYWF_$mRZwdCt<;-s}^ICXe zj%V+rrjled@OuQm<5~L7qVIDv&^PF}9ykeyf9|#Oa2uf!1M7sbTmrVP;vC=fR~vdDzp&wFU6$w(skEy8n6k6Rsm324B0|H6SGTpBs+v4qW~n zc*goJKp&W%o*LLt0zdY;?76E(bQHJ^3GL-E*4-w5 zk~1~=G~;57dQUjmK}}kHwoOKdA|D_55WAkd^ShFLu@5YrXB7-gy4DvPg3qnE7tgFE zSBM<=5?6*FJ~CbHWxyB2uk}4lzIU<9x4~JH^T6bzyV0%Y5{m~;$vk(S_3X(z9b8x6 zDb&Hap7>}pezaBW7xpt})0f5oewyoC40b1NYTu8ShJ`i|2g=KI?lCFmrtyA z^zcmI(LeED?7Hrq>!=y=4cB#{Kf!PQROHKNO<5P#nfAWV+BoZ?waB5}cX;n=-pO}e z9m?mOeBR0DonqJ3?|g^8eu}(*{pxdhG1l`uGJgeUpyCf3PMrHxDLnH}(8YNR-wCu4 zrA?>(C^FzYeTpYL*92$vEBJQ5_8*KRpSg4&%THb2u`$0d#+bmztNnGXC&p`Kmd6*d ztOxdHd5FW&w_vR`Q#-N0u|^-GRzb|#y!nHE=kk7*{lVss(3LXbF&~Vo+WZXidmQxg z4?KH}ec_Ugul>!M%`MRKKR`Rl=wjk~TDvCJLU?i)u=t3YH(Cefixp#6KXl!>yp^hmT4x*qHR_hH}PH434yc z>l%AI_VLTq)+pHQUbJ60yxqMBdYSIL_aX1SO#Pt(w?}l;b^S2c_srCp2E8u2E~FrG(;Dpb#eVYh z&R0G~ZeEv~uusgBx?t;zozwpW4oqGVucHPn3f~krOYH$4;`4U$UJG2_1zVBFEzpD) z8lS?RwJ5aQu)>Zj))nv_UO9_*HSWJZ^@aS?uhtcyH=_G1kEs+K7q8T{+NnHGTh8-s z&;#+kR}`yI|6cx;2YI#xnnkbp*nO4Jf&O3XkY6XCa40xCh5z{3efiqAil3g`q*Q~q zso<^rDYf9L@OC>oN-8)!47~M%w>{!`yBzqWg12+ycsuk{>V*M||JP%d-fJ;#2bT`5 zw{huBK9&1p&RCMKg}PXo=(@wv7jn^2dZI_IjpuSflkKwQb-%|c?2Z3V_-Ew=JbMqR% z!x_=!_N?IiydAgtOm3gf&nx45nb&oAfcP;*mzs6(x zYg!lLukm#A*Wg2_U5#xL!iO-*ZP%qk=ahf=M~zNhIuCVxxW5{|nQU;*P-@`42INSC z>e%6X=oCK*$!DipspHMQi2H$$V(hZXRp&x7WgC0Z#8bxOORU9raUVS9KFQTl%T0|9 zeJTbu58YVysGe0`EO-}bp2oP)vBaD3ugABpS3ThdoZ+#K*l`qK}ksd<&hw z1$&TMOd-iEJ1(oUFFoP^yy|n#SteKIZg3jiVeOoP!oQFx}uRo3;&Ix`4RW0{E$c$BKQUQ82pxx^m+KI zVoj%^8Odam&(9eB*oQsAonF+sUq7VRmi04xRrUtgbRIZ$NK77ZJ9w}7PH2c_a``wr2*GdbIOs0Oo%f9@soQ}TabfB}X#}{{hvPB*Nv2$P+A|}>089L;h5dr07 z_XyvS-CUZweWsh&HyGGiN=yeuEPeo;^Apce4V8thleN7>Js?+eV6dKbhA znM1BGvM#kW@5!v-kz!Y`btQe17FoR40>5nm_oNqq-!b_z-HcVS%VD(R<$ZFu3|%#P z{s|b-em5B9@_ep=QJQ}l_|pRYD<3T#7^r54XeS*wsBQTIG@f+kAo^+L*+dw&0>gH$ ziBD)QefXRQ4OZd*%9gALcGRVN82yV_PLJ^Yf-`;GPy41luIW9sp_q(WL*5CK-!U9` zIb$s$j_JZ~X-Q(gSSflTFp!Q^01WibAOi!=2aUs0_4{>3`2|=IbBM!1bZ_i}1USrO ztkN0Dbi zZ_-)W4(}|2rb{nD)7sNj48Lr}55Et7dBY!(lV$K3Kl>4YOKvV}1U-r`wL*uv+4k=? z{Pp^sMqLNN@f0u-juyD_opb#(cI;?uy-#RkEbI7;d+fUY`xI3%%x4&pU8e?1tu*?o2B)IuxrjQh&)$5WM$lpg+9 zYRjBvO>^NR^I6kO+N=Xd-09Hzqxc_Ji}tS|7exE!`ytD`;lGRF|3!Y*&wx+PMZYM+ z|A`!R_+EPv{=}z(f#V_K_a)@yf!`lN6Q>piBOgx%SD=HltAhat_HFX{mQersTHnUo zIWtUqHmL76ecH9<8>dsc{ySLnQNk~GKeNuK z!Rdj(bCmEZe(fmst@gYhbzfbx7+fs}S7%*gP4DMlJnpEwUr79o1GFm(z?=2(jHB#{ zEb!RvjRJ49=A%4UcD+03D*N40o_?XljAikaR;6fIvGHr~ z(w%^n3Wt@7%-|4ZrRk{sf%Xz27BE$Dm$i zwiQs#$D>13V=^tA$DU68eh0m69lU&@G9kZg7*&Isc!LKr4w+ri%y^qhc@1(UyV=t zNgMOTzU3VIAoXdfp{R9YT^0-u2JX)a25x}A*UGM7ouwaYy*`0IpNP}fI$-yE@Xv?; zBc?XoSNp^G#e@&nA%Bi}`Wyesb@v4EXQ#cR`#(EhkoQmMcK-;!d5`vmM{VGHEwIQW zA8EMekFNL&^udq0{%vq(A8RH&(%QZPU;I)08Ze&z0>9Np2W_4PR>y@`8Xs-wT%hjP z>bWL;)8HR4mJXyEH-fWrYof}LpvGO!j8d@5%juj-sQ` zfw4{NCu7^7zbNx+uw&KM45Z!yBtOqaa zc8+ct%s!^h&R3(MthI|g z*lg;GWZydRDExg)T^@U$Mk=={Jv`}l_MurRZFRh_{Oe^~t;!+Pf~dA0-8+Q+Uy?Pt zu6)lG;KyL_V+Ht;6Eu6(V~ya*U~oh={2W>poj&x$1vPeTvdy2A=B6~ z>?s;hNv*J$_Vd)Ut_{>3Yv4WO_u-v7c%IJHb8_DI;4iAnhKu=hS-zF%)WT^7u& z#D^AZfR2iUt2}eydh4SyUw&mn4%c(IPQ4=Wui7GCY%4fhFP=)@OFp1}2JL1|L6^(J zPEejWINd^*GTtoWY;ufNFunDajXCqp;L zA;DQ|)wJ~T_}?jy$38D&qx^BnhyUf%g56batMZE+>u~25)@3K_@;oql5xD#U`u?RA zYx=bnYd-A`M9W>qPSX0hIG65)W31O)vtBP1T7xU=L%g?>HF%15$wg_PJ+of&(@ljg zp7+IES?nKOO}#pJgZ6>RZfi91U;9Pm`+9Wm-?Emqzx2gwS%*f}fqGfw*t-@&Cv^;=hSy`KGjwahiz zkDNaGHgOB`0?Ya$55R3RKIV%qi7rijEc&+VV^LFLg)jCNW7hT7U$9@F{D0+zxBZ%& z2pG zid@aBQmw?75k~NNh!pCg+n{4>Ve)e-1zAWCydlMRnA*dbZZ1xYaPp@ddz23rk)qwo0 zzVo8CyZB2 z{xl;q6uWI_EPlq{&NK2e>bFzNhP?d9KJxLN#9vn2SAI47%&ub2?UJwfn?rnoUg!Jd zee-Hx>^*ddc4&B>@yq-6%8xPLp<77OojI(_q`V8ZG{j=1uvv^*3 zdtfyBBp$Qs((hO*~gk?V9J%X%AXYnDfrMx21O8Wls1q0v3K@wILbW2)|NW z5B|H+TSq(lAlsmcbbPM$+*b_0b_Md1`YO7gcFL+8jxJN|3hc!e!-gbA&vWiHyLO+x z%U`CxE;SD2?foCx&ILZI>e~NjCU4#fR$J60ydzq*2$*V{ApsH4Vhb%=+e=8oOSF_) zt6Wir5C{-02JKBR-WKF3V{H}n+Uesj5C~d)fxT_-ZF@;Fd4h`6M~zhS|Nizld*);a zi1&a0`F!%3nRE7I?X}ikYwfkyUb`4Q&`2M`g&7a{&BAYi?`2V=V%knqH^|*7w)|(` zbI(LIFg7E*e;>-Py}2JDUeFQzN%vo?F$-UO*F3%fzfFvHW-cJ>2Xlvl-pLP}m4*L> z`IGWscyS49J=F^(mB+>~n+v+^0(%}13R4JFEwi0x6P_p0}WR1qp``LPbjeMi*$52l1EWI=7OLK{Nus8<) z1%UN0?6(B@>RXH z{l>hBPI326*yqR#5o12!dvC-0eXxg#^BZ#oGNIqOZ|zC0y|`-^%; z^iFgBF#i3w;hp2ys;{0?z5Y8{f&8A-Sul>X3xTW0-VnHAOi%JIntXUe>8E4yx}ULT zTS~p7=#d4)K50yPuk!|)_xi3r^jrM%HgMYC$^%MX`203(3dsxXfdOwJ3y2Y~ev98f zoE4~kli%6wSG;nr&eimZyuzN%J1M;n^zPHU>au=rY!<>aXpXvoq?8=Drwm`DRD% z0?*BzYu7bTB^D36>Q!KVd#ckhsxTCNmpt^N@V7ieE|zz&b($t(8_@o%;O>XqWi5Ps z{tL)?+PDgwO(zficT%qy8%kvjoHZ_gKl^2^_Y&tbAsmGtqjT9Kmn}6>pVxV^1bL!3^9L|10^fR-}@fkkU_o#~n2Iy-CN_j38(jBJpeRh}K` zz0UxP_AKDP0fWC7iVh3%Ts%lWI_u`{1*S(9%|5C9IU^$)XSy<4v0~Z}luVWkJi;6~ zO5B&`)-m|)9r}8AD)_nydB}_To*o-UKk`W^&)7-gMcj3i@a@_H!v9|$Pn;Lk`5BXo zp7!?Vxcb?^2+n0Mv_O-MPjj~q-(@q(XWV*0IJ*4`>@fIUXVaVEe=Fl#p_j&BXhz#+ z{RMs7&D_XZKs?!W&81%0ysJN(_2^LcLz|~L=;O4=W$^ry@bn!Y-92U)bB8=w2U^H6 zG>m+?b)KD|^E_^>c{;MFM`ScQtA#$5GfU@r>cE5LC!Hx294~-7gA>LOH8C{lky+K@ z=HW$q?gk;IhhxempikW#d>YdwZ}KcUy`xHj{l?-CgBS zM!o^*q#nSkIX)BFbs0RIIRQTha(eQ8#2=@T>%Dgmay~8H*(1$aEM028^C|tC?tMz0 z>9^*+KGn9$SzN{E9(>(p?lI>y_l_|x&66YWpqYpGQ*QvT#2-{2J1^7$e?QCF#G}iI zKX~U>a-0O+{rWlZ{!_xgZ!8+ejf}(0Y2giAZvDr&Hx%cz51&yA z>o&uqv?<**p8wYIAJ-^Ps$`C0Twety&Qs%a>JuSne@8(u>*y?C)A;plGqTXOG3dPT zAy*!yM&<^>>#hhv%m1NF`mz^ZDUHP}IO5Zji zbEH?LU$eo@gZSEeLR-y|1w(s1x_~*N*n$Pp32HOV)l1(cM&Ni#zXMnF=~tC^4*$7M z^%ciM`L8<{klU+Iq%ZZ~K`v?EwgsH@2!zIdm-+R&Q+&$%|K|My+9fvZ$S&-%~tFA;gj^eWsei#RCHw611-Q=sUzU7jsle}rtrKI9N^uD7GvQz8dK5kpZVi6m zZ}Eh_3&-C9Ho@|pKp?-Ab;FN=U9l!s54}xYolQ~xTFF)`_iB+V)s5^?G5#R;9=-=Y zMt=_36YO~;1ijHi9i!8+b$EXs_a9z4CLA3N555pQXF&+x=T7=5X<#nF7c-syNB3|p z@F=qGtK?F7Pr3-&bOz2jQcu~1lbq_~*xtH_;yAXq;x@Gh&_W!SIq#Um{`v^d=0i5l zJIp>M#bfx+XPrLK>1a`I zC*y~`I5J~#!p9ho;X9wXI1nA8+)nshzvjj8osEA?eyJb+`BeYdMf7tv`vb>oId>K8 zcXYnV|DMR-s92(gQU`q@e*p4ztaJ}C8R+*TmpjB3gE?#%%mnXjQF1E_M)D|`9)MRzd97VKcH-Ano*v%z)4<)Mzvs*irvo&>R?9V?3an7g9qfSWq>Lml_QZRKBO zZ^H&v+op|Pi8j`$4cay9Kzs?yu^m)ic@Mt8*hO>OUkR~>DkocAcJjktLcdej*d5e$ z>#=@>KQ4hMdcrpgu*(iJhU=bQxnB7=*Fb~EIai!H?rO6)-D3j$0jvwsdRASJ&mapM z!|Z#|UTY?~8{wf#Xm1Mb5jWNG0PS_s-rT1v*XtZ{742=Oz1EQ1ULNfo_1YUwdq*;z zXbSO1wMROylKrOf$R1G)q{h{V58CRznT)5NwMWCWP;^${im@77ExsH({&Mz8Y}x6i zEMunZZs+>3y94vaC=Wy(v{T-c>sWJ|`s7LLuKswhzRK)>ma_t>0TaVidqp_9_rgS- z#*F*Phm;+;n)2dL|2xq``@71Oe+BP_f6eJO>{!;(2af>9WbmaiA7w4E6up}Fbk%y% zz>l*do3SGjze1&=hAD*tfr>ZVc1Gv>F}H-e{y`M(QY zZ^l|2Fz;1XW#qHEj=8G6VJ??3IjUpKcjh$fq?E|qr$YJA`ankSjH*gDI z%C3%J7e_uKC%5>C^;{1VyU7|tK3djFb2;}q{08^#Q^m3APKs7!*n%7rUs(Mzd5+%# zzh*5BKmH8-s*ksMCOhFZc=H&zUJGu220uRF@%O9n<63a5yi_mu?pxLB^gJNhrC8e5 z)C|rPAMvEOGTa-9zwo~7oNmFxQX{gtTQ)b-|1bi|3<%g zcvp^MjdKV-&az#OTNfPEawgUINNe3a)1%l03ufWhqyJ8)=h23m4eMnW&PsL0=-usU z;pp3}DP98x<;7Tr-c?N9hC2erZ?$25z^o^g1L$`0ZS@@&imnBZuVsudclch%Sj2mo z=#_K$zM*$;k@ofKm=kl-@Ws=|6Me$#kem5`Wjq_c&ieEO_xE`3b+4FsXfB`1pZy|Z z?aO-h7C-^(Y&Wu#q|_=&(Np>noCbT8#+ap-XQLbBE1Hd7 zn1ehn{beZM$O6W%J2j+-wcjS6)h{fJ;IIsOY>@518q?&AqTJTski!^RPprAw53EQ{ zC4X^h)$CMfvFI!ru6tki4k70(^xZSU9sgcUiyC;xhE1&YnpYHsbHyyuh5jH2GI0j{@v9y86J~d$)Zz z4rE^R$KC{nK|UB72ZnhLtiWm4FO#sx{pXL8`!A(`*$Ik;Xc+9Em+srS3^*DFi`VeS zW!tzKcMU3gM!v1k+>bq7)fG0u^zmH@ylBnt@E3>YZ1ItC-_Du9QH)NJ-VLzN`boGr z?CaO!LNRIn{_|MNe=2+c$Cr}uu^HP@cJ}O4WDoGoX1>UuG8=luu**3kY}V`gu5*O% z&pAD=cKTq}`DMYXKZ~!I&;=*^ChiZ^oq!Fj`C`}vnpeu>y8>RC4KJ1RJ;U(QlAZko zGxJFMD8|1D9|tpuHG$40*l~@}dK|F*^F1HeWOKJm7&(;9*`-|Q(+KVLuAVw|BR}SD zfO~#A&MEn6PEPT~xs=oT%U@HI z>>=3jUi&HN@+Rn;#^;pFJvoU_mgKk>n1aj82iEiUzG<;$nm55U?C<)Nxj+3m&$`2@=$PUg&+Dh*uTMkI(*FTH8}B?- zZv0Q_S@bFCS=&wD$@JXu3G@FHdSYMYCed>cGNA}s8oEKtWV%f_1C7@EVAQ=~RtDJl zpT#-C?(B=x>IdwOMtJT+^l7qv0Z(BUp&#I}a&l|wE*8L zx)0oK<@?GdX^(16K>pgJzrz zpM^Y-eXViJ4!f9fS-HLmIbh^EFv>?T9vC&3%J{t(TUTS%eA}V1qJy!=KT#j9>jvik z@YCZH;5~KyNRCPDJwN}|f>+@ed;Hm4K4s_Dvu5ZHpW=->d@v>32mcfM@0DbDj2%nt z8L*V-J9x8j{R+5@{mnbk{u|)(lkAysK6tJDr}c|po+SUa@+FTuT>a;R=d8_-ym6wYez;j*K2+#%2ej;U_PpZf7N{R%Jr$#l_LG{Xy8eZV z9NFi@Q6iI58MES`S29MOT^<6z$w$<}{oZ5v-nle=ht6;fFFIBe_?+`lZus-nT61zH zp`(5{b(RO>@xZ_Oy@>~YXcp_eJy~nqJEQRF7~cVKMYvz1p7|qw);K<5JsL{!Vpzbh z;eiy_-`&EzOTmw0_NzGmq5W&@m3(9oZgAF}ghlz4H}22A}=; zica!3HDvtr&YQ(Y@D6@O&c9q)-S{wkv>iUGVSL1U$InwxKK2ZJ1kR*4CiHNgof8h_ zrxTB=^Dv6ZRs6I3oKwj0kKBB=Uh7MqFQa@AouGYu`Hcp?^>IxTZH2MZ?fWKpLpi5y znRC4|;?FQK`g*T(1Ld60Dq#(zeJ!2wZl?XmXy4Y;zTfgAAJ;U~ehYQvpWn#cvx*1X zLwv#~)&0Kes-77uv1#1rr+(GW){0R6iVEGq>-uq9SB3KTuhQKL-h1$|BJ90?D3rhN zAtzt4$inqUk0$ut<#jjyJ&rrth=ISH4CfKy#>`9FJ6sl6^ceiTl5x*r+$$NwF!b3< zaJ3RSs$4OLJ--e9mWNC{ey=rdZV~V;x(MgLyXYSVC#}!BcdobaY33Jas)l8R$Ecjy z9{`sXL-CZHIpjHB9*YC#q&CPRF(30fh0o)u5(UZ8i|;CI??8Se7c5qweF z2WW(r{&MYJIm5e@Rk`gO*^fehtKApiMb&F#pKKEQFzxV~o}2Rl?8!V1Z|ePsbJ(AO zFHIeIP|sT7-Oif>i*^(5V{tX%pOzomtQ<5RoQ2#&`mJVnZkl<=yb;_{a3UN$&*%5C z;kxi|hC{A#WQHdbo6bjWAQ$id?x}LI>HJW~?};O`ve9o3ol!m_r~duWsq%3GeVmPa zR6hKdIIn-Q@8{y@0f&Out?;_yH@0)9$$sc1n`$C@M)`(!qi2*G-|S^E$0S#F!bjpa zS5AArNnf2D^iAi#5fek*PR=YY>*GwH$o!hvXV;kR^z~!v%f8UwzxKklw=!38E+Ogd6>FIy=dGZDKW58Y6BfO41o_zEHcfzDb_5h1ydhi&0L0!Wa z$nARScWIY0`zX7D9C?a!*w)Y0-!D2L_GM=8oDUw_iA8#my_q!nZACY@u%<;u!uM*g z8TfRsUK4dHJ}g_;L|K~$Duo!Uul|8EU6c_F!+M6-A^-C08CN}f{yMKLy`BpUxzKA6 zcCq$TVmz1KOiX7q*SQBDGxL-4TslW2IOPW^y_tBLOC9cX3{-DHu9h+1#--9XcoU4d z&ri*?Ph_~dtpt*NW{HQ(gROqd} z#Qzv@vZk2($^Gp$YdrKL`iL*YzxOjQTXRAk!^xvLk1;3?tdqMEX0hj9j}7SO8P*Hc z8=MT2BWlv6++%=D?dG?9uF0UdYu0JFy-aX^`9U9$$y-vX$1apyVxgZ-Yc##g|mU0_y3}I@SkK- z(+u=6xM7`V=C;lph)2!4DLlvLDEesMz6@Kbfi{heUu4S#B728v&z86#WQ^u<8Ff^~ zJXgFB^HDZd8GVQrCA2Si8mDrWV>jzaV2A;a)_Fy|)A)5JxiAI0#wqxN;jvnmMn}Kr z=?L$47dl`!OGlWPOvWr-@$PrJ@{HD5qN$0;q|X{34_SJhNneOAmp~Vn@16L0OV~8X%qVnK+MfmZn2F^vKEA(Kr*>OBu@n&e&kzbxL-p+`qHpb?*-CU7vC9 z&<1aYe^}dyhs>Ic@(rcjg)N;klk=d+ddZ?W$Suh%eb@O8?eVp+kKTF!eSRzW=UIQ= zYd>0RKV#28|M)rzy1HX_*HN|1b@gNGi-wXH&D#IKwlJ{}^r<`oNAUmY3^KV27)NI0 zHssPJoQae?&>bl{BPO{rng827eIr=f&|AiarH=A@2uA6mO|9r1U^aZie!e-|%AUW0 z1sUEBT#8*Xx(HZIPE+D#UgTcOxx^SKu2JVv-Lv*-w3`~4#hRd4I*WD`&$gXB=B>cl z>Nr)cIqdt>UM6uNZ6POrH#}p@{U5$-O}7_3yRhn9Pio}B7Hs_ja0yO+Mj7p)nme4) zRX^*TJ67?wN3dyicEhY=nTwidmy-*27jbDO#*TJc`f|S?x@ZeJ4_z9~42RdXbw>Zz z>SV4#mqxb$8$LJ5hyf~V@uIuG)W2fRFJ{hYP3@=ODf4C|`~A$9;oZ%bk>Ti9Y3FR_ zhxoJvK24q<$M5*$`B8+euoPP%fUQ%M8OoQu&dpH_OJKnQ&CVguuK|wYehuhh<`6j%V#q;nJ(~XlFpWc}%)(9&=spKzOXt$m z9m~MI_RT){^0AtR&wBS>BkMGOj86|;(I`I&v|SBO8j4(<|0rjhOYmjHW-mWfh=0@2 zA2{y$9Os&`V?HS-LuAqEb21oP89F`(zUwnW9rmuM=gyjb_wD=}I7+79va_I{=yAL@ zXyVN$72q$ZP0Ek@FnHMj&u>P?Z3l;I$)hkATZsD|Z;aEWpt^A>?>9h~<(mj%*nZA=jyo8mWzI%(7tTS=>pSTOoHuL^bxgaIv%JWiM!t`O zRt*c)w`j{9k$2*w-bLK%-A>2#tgART-7$%EQ#(8}8CoA%;B*w`0LNUX<1llqihhrl zI>b(eqD>2&XuV)$&V4@RA2lKFa;cXL=UD^os=r4r;9Q&iO`q@V!lp2No4tu>ZQz2j zDl1*NkGvjRor|lR??r#zi;eE-(52|ia@Ndhr|kvoWa`UC-N5=u^449qao--f1V7kBJ?Wyy#f6?s4QqGvBv5x9@D$_fld;kw*qL;FL|!1fSl_`D^nIJ5{)oZL8-h z_f_6WKNYk8(h3Y_?E+le@%y(T=VgCn@yVKXK^1eQ{ciFF(N}P&+mB)}R`oww6J||f z>o-z=ljNpww2++FZ+~3VM%#+1%O2{=G*cGca^&uCv`4^+rbA!#C0(XZTVC)gZZPk4 zr@9Ac4v7`7?l~IYHDhgq);(?^Zi{%n%--a-rJW}1K=mvCrQ(!Z?uK5RxmJHo9=;6@ zsP8XRr81Ot*KVN>^vSc$j9cyM^t`E=BU7gf#roL#k5uVxuPpVF> z{8PfiX7Ofr71P6+AmAaR0)$jaaq z{8lbq=9uQ%M-Th-`COal#m%KFnW{19(_zm>a15fIP0&m0luqoDarBu>pR!RJ=(CZw z$u~zHVYjUM9Hc(aqQ4f}7oJ`uK3Q>fFJ4V7Fy|&leA|h(^DK{N?L1SNmx`g+x580_ zp903mdQG-~Y?(W+bk85`%5iC!Bi~>V=T(@inZ$)>AtO?t!-%v{bY5`dShHSYJad3w z{wb3zYN%tE_!!tEcO>ssZ!B$U-C7TRZvyY7*o@k5C`0}gQs2UL2kmP;QH1P^A8iNQ82d=5*Axz!!$v->Su@5t_5$UN2<7^mv?cHBGC zn-?Ai6C5YLR=SL?28yQ~qQZB7zxw;*dQZS`sCn;g$z z@u-+0gD3Ey0B=z5Pn*Q5OJYvHCBYV7IBs_Y#=twSfXeGOR zBWpfKIg&<7&oaMm8lV3H@u^Q}K10*S%kjYvIa#CkTGQ@=_R@uBj_`f}G|)ReGv%58 zR$l-0zZKJp?4X_*(`o!h2X5;+U%HJ)i_47>T@(B5h0_E$MPUk!h z@V`(TF!8qJo{z?6V)J3Iw#LZYaXDum@zpP5jioZhDodRJztI)1oBZ(?t~peWuFzPf zo&S#->^S554W1i5bf@IPty(tdu;T{aOFG`)YpE_W8gCp6h($JznJczw-Ktr_Ybe z=uT`lV>?W9@ar&7u`#um-#~my-2uC1&vAXAQ=ymUauGQcsV7^(#3IbVhlq@e^9D8^?_T>s=Th80LLUtXpqU36)V*);becYK>!M^&2M}mur zee!hc$b>xYBtL&DG_mvX4b}^1nq$IAVK+GO$4~7r@p}pVu$%L)(s$Bn!&nEg)_Jah zIih$0=|asNV-LbZ;!EATbD85jl8sE4%rtWHa(D$=Yu~IP;NV-qpTh6Wv{#fv8?>Fv zcXZ9ODd1)>_LB5!2wddu3RDO9tv$nW@ZDC*ZQ@ftfXconYtR>0)zhv6E(72)*O|LB z04@z4PNOFSNjQ)X*2>Rz6W^3LzfuTHn;COGV|Mw^-8*OozU!cm&dkl@GdqyJU|COR z`gQDI&*R_x#&*1p*o%4mo8R26bRF>)^Y}Nv@io>9f1|)JGNu)|(sZvAEyOk}2DI+|6NqE9GG4Gj| z<~^VG{b=5!e@EBfOP)vk#ip+zUSE9r`}!~X+UVb7L~hD|>c`FLz9-}GfBkm`xU}mB z=@j&-cz(saQ{_MtI+Xk#ahuc9|D{1)_usYW-GIz25=~fdi7uu1drDb{$FP42;m1a3 zcf)Y(Pwa$7Xi#{w>%)=_V$SD{Wqk|3H1=GAtWA&Hav6G&a^opij-SKqo1)u{&xdm5 zC0W?m6N<54}VlBK8JC%UgPFRj9M z;%wwgz~6qATPA%rGPR=nzCR=eU48FemHgiI1-;|FuPq~16*^h?MH|81#(Tr(%U%B8 zpF@t;e)un$!zL&92;y+?6Ya<>9@CCIDBx^+i22?OzibUV)v~*kFMMb{xxSFEYTvc@ zQzBb0f|ro3&AgXyZ#&~^V_c6jF3tZoJuBlocrdsFM|HeUpAQa@g)c%k`6d;^5Jm^9 zjmLo}^CJGiStdCVvbPdrgT0=G95@0!F7fWPQCW@Ij#oU}L_CMa`~+i;KS#%Nrg`1p zz5pJ9scs&40tWlurL&96pQxVrgL41QoD&?Yu{H7<23K<*;?a%xc-`NZnBO`4uH=2| zQv--8;yrMh-&eT5ALFiW@oYPIAumYv5kqfy0Gz~tJ+&KpE%CwdBVf=ToQX$*kA#!9 zdE%L@NE`IH#Pj)%#OEtt+V5yL9e-~fb1)r$@8H?p_fhKWV+nou`J;<{f=nu&+f^o! zgD5VG9R934Y9|-7KOV@+qek>ZY^f9d{4ny+G8QwZmxS_VgYIJf!jft0GuaVgakmpJ(vmw2sZq7zkF`KB!G-1xzih-i8#V{2JT3?F&r$@M?o z;*Y!l`SQb&b76E3a5))Vs+}IpOZBNdE4N>C{~Hf*$HW8l+4DZ`#Gub3MNSlZ^Qn2* zo9Wd(UA~ds*vIw9HqoYhvKi>FT;zn}X1bi^2c|)s6^|7mW6@iwz-P-SUyNW-P6Oq- zNuNN>32@l6`gOfBs^<0xAKK43^`5|}dN$|4UQf<8_GKMFyW;z|M!Icl{EENL9^f3` z!(86Kg zSKT;o&WC26Y7T?n0CQOF)dTNF^uOeiY_h@dlWfurInJUZ%)v5vr<{8d3qvW@rOfrg z@J|RCEiy@%_NCS<@%9Y>)i7i0xG9QfngREU3JfhQgOU@01XGWqgk!h{;RY3gFQSP47 zU9s`G?i+VmH{-6QtmeA@G=96D-SOqF>shU3%{ulO^x5-_`_~S3F8Tx8PSM>Snj;_c&cta{Ad~y(E+uk7qyJX*E+!8+`W+p3cpiQv z>}$0vIU}Eg)(oPr)&zy=;X~(wWA;9y4bO+8kCCre@JqMU3g?VbHg5@Yx5=|1(nS-> z?4^u-zeje7@Ic!qFLB@3@_x4FrPszL=&SkhfqjqOFgnavW)Jz9%>1W}`W>e6(^rhL zwjG@&g{ugo7{9j&hf(og-5eALlH}e0t6L)zH`9&P%kDNxqQG zw9Kkuy)&!!)6QM+qiB`FI881ZmMx3@F;@nOod_2ufeA~()va&I^13U@Ug z-348>S5!BIeeewU3OV#9zh6OyD96#O=!aL(Ny_aj*k18;($5+DYv_k#-2Hb9{qQO> zwRwVpAz+_$aiqoOg!5c(xl^COBjx zy$BrA_XWAmB5a-MS@fC59i(~mY4!~1Hy7P*c$_-^`O-Rr@q1&}-J;6vqL?7TCBLNV zNTzT{DYWPjx#7yf{M#9?__~~TMfu1i=97uxL{`L@JAyF{UC@l)HS1yZiLCts``Y!> zkZ<%+$~;uP5@_1Md--C-j~ctiyC4;RGW~1Mzf^jMI?c#{7UXz7{kAZNG6LxbV$2=E zYUhl>BXel1$BTc*_HbpP>sx8R6&VPfG&aczKQ1)agb(TePVVr$qn^9|ZgrwB5Zf<% zQnuY1_;oV2-Art|V(GXg$RyNr0EEfIA<=|LDJ`Y+koaY=U+#PCi39 z%7_=rCJ$8rc-vBmS%-FOfQK08h1`7|=Mxh* zHVqvCz9cWXrocDK^J8_G(|`|0V1OON&Nu`7CE%?VK|9 zByFA`zlHeA$`{!zI+LxupIPK>>dtmy{k2&5R~f@Ak_qUSIpk#$&nrj$ENn7;uLs6m z-W)Y+IOeF%E6ik$_JFRJFh?hogKIK#)T{wzZ!kxd`%8G~D<0?5*ytk|C-G1lhB)NG2xjEU( zg*As*4*)67lxz9M>5Z`iN0Otvx)jLp9eFSha(%X zFFx}2Jgt2+{~Xx{3H!*}LxX``wvyswbw+N);DkRyzBI}7U@kla4jTKg?}*)`u@6UI z@7LX3l(}AOMEG-FdhwX+<-=ml>R^wJFLwPIL0_zdY@*@tjMj9u(ue$(Z(Uy|2<_3G{Ay{+fR<$v&A{#5nbY;o=Nt@5v&rr-Yb zYwS>O%-jLy$#K^w5$CyqE}zww`uJ=hxd1qCq{kh!TPnq-u@mM0B*zgIwC0yoV zUmt8zr)&* z9KnV*-|^Ot%4hrzGN4~DP}Q$6rFtQ2$38*wZqeRC>b^q`-`AEqO6p!o-S1NOa_TDXtYr#w1RJ((qC<{Z;zy9nt=JoH&gD+iQYZTMMDlDGIMGVl zcH>#HBchM;xJ^C>{Ve+wJ=lniQ9pw-hCFMVh#W$$D1U9^6m-071K!1o&>NJ`xJ5jb zg%0jx_=&u$$nlKGH$+?N?m^e6yzY~TQU5ppVE*!4>(hE{>{RiN-qVMlcdk=?bn&hn z{>eeCw)QcnZCTl;G2~!VX*hZfWmRAF6m9fhhwN*a;h6FUCY3FK58>O(J=khjCEDAA zjjpzI-`jBBH`1ScoBQ$Kb+Y%n5g&MGW?)ecpLOtv_6xK>tF?%MNq9pBSsixd0@iJ` zQC|dIXlJ6@xyRj0mQ7{G?~QvCeaFDBkuUV0;lXG0SP{6n6@M4|Viu2$j79!|`NE~w zMx*p6&zit-GxYmlICIFpqYe4AzC=zP;mPdxfgjl-Dx>r5CO_U>>>ui7F(%>A)-Un$ zr<(gXk->-6Hnvn)dWQCl9ZGvy@Mc`bi4N$RJao+(SJymbZT;V&Ypkt*9X5(=eeHv^ z(pC@eGmclD#qk4tqR$KTFMble_vN@W6s`?FfZI|(UZ}Gf`=JTFy%HJRGSjtD?btT4 zu2((r#SYp%-FS}9#Lhr&+q|&LIdfU+<>1@Pc!r`ox2C35E$@|9rM`sQd5kLtUa%1k zVuy9;4xtyo$=+ux*2~Aq-q=+Yv}1GmHPg;YY&Yfd+d?kC<;NUuFby<|3w`(XdV8Gt@Jw^dt#U4+6S_oO&jpnMzw*Rx1!tnDe?L%eDzhn9)1dE zVCP^9Kjzsu4e(k3`kyU4*w9hcmw!T^{rFT}$sf~(>>TXwx3F`HM@X&{(?B09E_Lfk z&#RuhwoWngoc>*V3!WD*CXek1Hl1+8`SYq$4>uZHF|dfgOnI;02kAFVznVW~^lA75 z9#ag=AMO6*a(5kJ^^a_vAtedjGn@5>wP(2d6J2vbeDB`o5->J_r*mFH=je{mR^-}# zWU_n?b?`}x{2uU!aB~we#Vx>5dm%db0(c!hH?bIAzTmm-8DgGbO&=rFTZ zetRtE0?{GTH#2)SuW8&H)#9MjuF4 zj&jvXeh=>X?&Bm?S*b7NigkbL!RtQEAzmQPsibdrIbt2lzuc9874cY79KwxFEn3+ zEpPF}*c$mA!^ig|ca6n$wZ}VlAF_!u(rNDv_3%G0f%`)EHfG+ZMBen?$9<7rJH{Ro z4b>NAEZrJKUu2}QRe1Lo+kSWSrQGlRb!l%GwvC}Lb^m|R7h5sDCY5~tO>sg#|Eo_v zXC=i$XuYX;g+^rM+H7}?*~$EDgl1Y(rfZI5GgpzXE&SH{M0T^D4I_3|YasIFceD(4 zjJ}oa=9f=e?^FvH&*1;zdt=P0{wnb#^c%G{M;&^gPwiY4^C~L%B<|5zNru$d_))+)f$UU2Uwj($hlGmJjESQJvZ{ z;s`$MG`wBVuK*n<`{>x%H`KxXE@q844t=Q@n_PTOxqM&7+Sl|$+p-z-UG}!a?*hkJa1@W{Ge5xbK)ez(IOm=jHfS7cMqBA%!ozEFQdX}ft8 zHiYoaxb2#tS+W1{hvLhOy?!_I=uVYoZc;W2e3?3W4?SeF-^4zE-ecDtY#z({jCZmj zw7xNW2h@}O-gGbRK=TiWB-+>{zXt6$(T`;Dao$;ZA^t3}cD+|ueYa7@zkk$)4ucu@ za3}8HX`Y#wTcU~IzoYvw9saC6l$F=LJ=FN96OC=4-OaSSow@KtVh`xai@~k2!2%}N zX$(ADd$W)=m~7xWbnfh{-MhskS7u-B?$2%mU;DBBTCs~;vHj*?_ccQo?I|f=OeHq3 z*8MM1zmoc`@TBTjdiAyE;OfnE<4a#f{o&~BX7ohsMBrt9UXOoMHk*y*;69|bu2FY#C34G|Tfz8;q^9()s0neJy17=S!6w2R1JXzbL*i-+B zUlE?IC+1%=D7)GF&6-jCo5No5EabU(y`J*p_}(y;{$_CQwO6LO@6X6?_^?FlOk}e4 zW8EQMDFWv+uzmjIEUHJI9R7=AVxkW>(GRwRk=4=(s&Dz_3Ge`~eVh8mo(FHXk3zea zHD$6R(|tT=%NRHqbCXwQ3T3+O=T^6$BHsJ`wWsU{6?NSYn!|Y>yVmS(Kgjl#3~L_! zSX>l?bKzhdI8oopKKFU_p?d^mb8256KkmUE_}=Zh_IlQ}+HcT3EuxLu(C>Sx7mp3_ z@EVT|nCXsJw$|q)3%vJ(6c4~VLpSKxIhc3T&`r>7CNMq*tS#u)!;c3{?i2Bae$RxK z> zzrQJE@y;^*_yz`O@e^z+!wZa6wut1oK9Qz$Lc$8-4>U#1CfW>P85H4w0Sslb0ojfe{259 zCu;|SzienU7#a-^Q-*ygY#YRFT;8s}wyV4~`?BD%owcX-B95}2=`{hL2z=WLZu6G8 zYnya@m@`=iv1d44d5$Kp2<6YjU(WiS^IP^jg16S>y^p|~$d&iG~nOLaiOYuD-SA^3Ta4%p@ zEdPOd&%0*IXpY$TrM%br-n_roeZR+7|5o1D!-JZ;y6e%s+ekUZLOVxjZZS?Hn;!+w z8^AO3p@sRUb%pk4+7A;OWMnnIQ20=MAX~dxpM-+VmK?CbUm|2kV$O(R1<_Xbp6X z{b~8JyITYOg1W9ByQf*dPo-{ee9>=CWbIz$L^%fy9D&HxJY)ngF691{qA$r`+$W+n zcoVP*ZwCf3|G`Twz8Hfe@NDP_&YO`{wR#WE4%0>)hv;9?C62#aS;P5g^CtD)D&k%q z+8PQj2g4`H{XS{?g-2|^1}^FeuC2Vc&y5V`d6NgzPyZib67ToIXC*pWpMUls*PrL& zw1>f|{QnEVD`gE16&EjDy8O}8@I!Cf5xs6O^y(Gq^kM$#rYWAqI%F52_3Hk0@v zoBsVeQMByz^iFqs$E~c@_e<}1<8GzTmczsiT@hH+!rehFe|GX4;pKAZXxo*2ub4gK zpQeBDqxyE}+wx?Iwa1W)vd21dfs3;Be-7oN42;bo87O(NpV+S^bXRhFZ&F9)LmnMZ zXb61L^dF!9qD#tNdo7h2{EL= z{itxmr{NdyRf!#0Pd&4aI)i?fUVr3U-Rt!}N&4K~A5WZLDRtcar*h$TIBQD$$U3tU zL+9!Y;@AFmqNcbnYtn&w2Hdi(h6CeB^vk=PMHU6c1tx)k|s-fNsC zL)3=br(}mM@2+jLBP;)dJr>$*rZ26p!b9YLCTAx;k$oe84I9H>=c7Nm<;}S&>KK}P z@TtwedGEzvCjTgHS^s7o=Tf$D22$^gZ;x{*l{))K88esJCZoW_R+0AKGRyg zKXC%A(e3(thsi&G`uuC1FOXvkUQ+JkCw_avm;3n3XUw^#xs9CfP_Eww=7{u7Gro<- za&)#lP%WNlEO2viHQ*b;_NA=O9xLAhz8m%~3pjJCvpt3vXlo0+-1IT`(o)wEUjvum zQ$Dm%ik=nxLH;>|lUf%i+h%euKj~TA=JtF{Pbc9>c{eS7&U~KkzMXG_6VspXJl%b? zcedy0@;F0vvhNx2-wFP)sf7P2e*EuBJw5)Z69a$E&|nsLGIW3j#hjgxUWkRq<(Cmt ztytn#=?#PTj7ZUE+5d(n&EQx5ipQvn55nwsYoAu-K6eglCv@JE$V-)tQMMlYS$0I? zw{(^hRo|*J`(o{@ql+1b$(;th3ZYj>^uo6C)9Z_(SJJa&dQC{8m+lrkTY8muL$7nr zl3vGC-26>1ZB)MJr2I|y!oQWwlPc!xTKM^4hx1y2X!GTPXy+fvS%^>W&%a^*EJRK_ z&QpcExC;7C%2qND?xy^5ayik4&Jx8aA6x6jOUC9p9i`~SSgG1}@!9-Y?3tPB2RtH& z3h_r3afYjj_bbPnc*BD&&tw1ay>X!vEqx%oIJVGPoQ=+0iBGCwA?>JN=&$^qx9le8 zA`sbJ6e81w3z_Nn8l$t@XTR)D7^}{)%vPuCXCf zB0o$O--XCyiq57#*;EsUVAH{G`_TuT-T^Mjp-6(27G>13*(VaXru0nl-IcA zw~sNVrf0Bi7>{IA4S;kWjiUX@M3xWA)#@mX#h$YIvGT373y_RA?RTmN#(%U`5t$DoU10PE0i zhrK)mhm}K^I=X-Kb?Wp>cdB3a>gd@!)KT3lSqm0?A+RWf9baFH{{;K&ICH$e^D$Ov16;bgMKvdnEn~(d#qD_!1F(FkMj>0v+(c%{p0}y zzOU*@S8Ch?B5PRxO%C+0TElupYn%5{J`?%F7pX`4KLF07)EVQoGlq7As}HF62xT6j z%=B?i^funBjoWx%hs`SbsN8YJ@d5adyn3JiwwbImf5G1C6HfGfY*L-|d1nSOPRJM8 zodc<-JWJ_L?<%#Uvjb*tbs_x7_?72KyfQKyT{{;Wk}{Sj6l*LVYr~#vhcDiIf_2F+ zSWm(q$B;|!U=s?S_p$RnfTyyt9iJecb~Ct8o9b(mi3iN2pI(u3O&|EUu!G7ySt?ta zIfm~b7}*M4nr~&i_h5H!2Y$6dyLRv34}F>I3!IMT?Ysw$t;8K~2Hx0I>=eqiVjs&d z+6F#$KrhjxopyFy&3jFdTC+P-#CPw)2e&OU4GPyY+(|A}z)mwL~5Ys26vsa(170cA&i zp}y~B+~BQ|vTEle{O?v)?8*TiXk5&iqKWtA$P||rj=|fg53yZ&UV+>Z9yTC*nleH= zmphybr!CVi^(Xudn(^5R91ZZxW41kPKb14~4KQS%roEN4Cw#=)q>U@QHr1Zm)mTl8 zF|ZWi`*E-%UP8tgnc-wDSjIk9F@6`pS%AD5hM%kzJnUgFKe4V2m~n{@<_R~I;D)xP z7u5Ip@4L9EMP?gVD7VSP!@B2PZ#8uoBXvULjSwFFW&QhxH&NElJMs0@^Y8||bv^F| zhl!J6-Fk|zzY<>(aai{32fqH-&*bYD{w=QBz?IH@WZ_Q}E&}L_O!+;*oAk~y^hJsG z#*q#3DVy~j;}<-GG)Av2;as@4XMb|28^gcU9c~6tPi14L!Cf!j8+={cef?DRJCT^~ zG}fQUn_Tu8hf7v4*9DiES5sVhrv5*?$Zc=$74Sdh>nOXAvT@in4{7ghTMk)qrgBZT zTL0PKUl(_z?XugGcY}8fWLHZ+CHn!VUPp%FH?Xj(NCf zhMzR%2bkBb^d}kkIP*fjr6YmrC z`szLXh`zs-4)gc#wUMs=8Pj&gA$uu@c!uqs9kd&ruQ7`b##g+-F+L2|`=h0EjPD$| z(}rD`4*px7aiS{QGTxo{W^Dk!Hp7#~56gTI3=e|K24r+YDeduFv2k`x!cT*I+!j_J z9{#N7jAs{g>XtV)xO0CJykY7Cdt+%hIy#5n9vRde z{9p|lcQhyh?3LKI?wy70jPGtYPZN3D*j&^7UufU)$0(%(~ptbs4+@9&jZEwG?J>?laeS4O_LOXw@_8zwISv&;|&7QICNzOeiI2j{l z-7&a!faOcsE7{QabUN%P_5E?;vpJi$)r%9?-hhn{*vA>y$B_>$;I!rL#2k&|)!;7} zk^ZV*o8Y;)y>z$BG9glj7Rh`ymaU3$Nd$J z`%z0TOGnopoya@?ypQALP8TQ7p8+4L*Z%1L5>Bc<9ZvjqvEL@H0$w98kZspv-|fZk zk%|uTkI}|;$|hOrl{YzFgk#AflN&*DC?#^YH~#Kud1UFQfH~Ej>x0zxG*^C0&dsEK z`LaH`H{ow}{m-c;XHq>mnfA*rLEZ(}OSAr&9KP@I);@c%UyA+y8D!q+{4+W$W9&QG z(a2T1M%TWQ>!S%7Uyx!~tk34*6P@Rm=CBSSx5C^J=t5#CiP?E7vte*`Hg`sC#AbJY zUt)ge*x$syoA=0R^Pbpu{eFztci9>B@+0AAbiZdubRMtoH|?EF-uN?|j^unz&6i7_ zTpYRJ8>jl=m9we&a{LS*ot^(uKE$v6@>G9w!`IKw-)!?SWT6kvlwYv(u$x=(7tedS z1;c|sF}I-X+fwjdiyw(Q6!BMcuNpkt4Bm9MM{Ryol*BhhZaj&5wj&c7rbd=u>U8YI z_n`Y6TAh1#Ryq#$1AaokyA}fqUPSEwggQDwEq#@$nljOuWy;;-hx-t0Uc;2g&SA%Dc7N7+%AeP;esHMcXa48c zIBrhE;mmRJF}Zp*7%71Ef>k*U3#Xi#)9~`(KWgmx_GWA}&d)~22W}eMFpar`d{;bG zMJUMGZ00mH+JHUV^v4bB<#%+;kcaVa8DpBR;jERDy5Nq#bxyaqnef#$hqefR_^h;- zE86y_KjrJZ@s=~>E`;}Qfj{dr7)wv=_P(KxZ=bcle#y>%fd`ZKSB9P?zbhYN9(IiX z{$Aw|-2|^F_xAFuoQ^NzFV@~gF1V3@`d4B0sKL9tC*inqEookBJ`YJ6llIkg=HK!D z?0!U+Ip3VLzcUdzF~uPsi2aZk9B+SZ$<8| z&Hey&%-W}B;*Qh-&W@%j?p=@A$kEav?5!CZrI4@mL=EQ_z4&B&8|XjAny)=XVmc?C zufRNa+ckcEeskBC?yhU&eGLAVe%c0nb2Mk+ADwa1XBfOc#=r8159B}F2^_6Q2Dd^d z$@Tk*HEzrXx3tj;UDReX<>gbaqrH9P;su_3!`sxaxG?m_K5`gsB`?sHd1Y7cb*>&$ z4-N(IpUDSn+cI}tAe&ZT*DD^u%nx!LZy@&N33P($JlYFh@a-{5&ghD z^PjjEx%}pC_9EGXY+$dpaips!emI@E!W?OUpBm8*-|=|L^3$33BbV&_9XymgUv8nz zv)zxJgs%3_m!aUg2wgge|Lc&MhwIsg06)XP)nRajubw>#@(4o%?dR-auS)YP#+c*_ zUq?Kr=EhR;qn>F_+1!R-(fBhMzb7kHS9{w>lk7zjmU{ zFEHQGL+)L^OLqSKIp2PE_?k27ILSxJJTtdua39ATtoN9!4ZjXYm*HP&egT=8>RicQ z!gQ6DO}-V}ZGEpWe*$@btPW_nmAgja+r2yA^7KGn{BB?KjyicmeLCVay5Kj^+3JGw zuY33Y8W^!vrlL>CMJ>G|Sdb@1zKc&|^sjg-l^Oec{Qa7n?7dt4JOLixC?03d8G3m- z`u8*7-K1w-_GO{BXlU)7zf9|%jEKZX4NOgH?zmA228pXZzX^+f#4_-jLNRIv7` zxHRS9hTjB^w`rdYSu-@1`-`}1HP{~)~kKHSE=)tSqBS7*(idk^QT z7UVE@b10i#A3R=;FJw6FwBN!xtU&MT;gmT-+da4!a?>M$>X6q~kUE95l{&xVo(+!> z-z?cEf9JntA8*9=X!xe{RIbyfI%i(VJ$^XH0bi~&isz+Wo|}4%Em3c7m-h|-;66@b z$MiW>pZ%8|x{=So`QbxTyx)`fG;2uNErYppb2#(_&wu}#Hzx;&cotf`-NUt&r?Qu_ z7*DtP^kqN7Urq3-?A$Q)G(0p?&l2)(SjeeUH1L-N5PON^dG09Pc07$-UAk1WPNw?KLKxoKP>-kEmkgSWD;js~JlCy>$4b0^qgXK@4P8Lof!M9m=CiMxhWH~yM3$FLV(V9wU2RmZ4n>_n9> z00-}iKE!5#hbDfv9396VcY35Vlyc$J zEyzp1*k9*geRYSJ|r;Gkk4 z)@*bRPUJJur(&DkygBmGw_leS(+uhxT!Gv1#2Z$yHqFM@G@iIajlb;2>ibcf99gkEIo5+r-FBt*eaa^oJGaV z8~O3IhqR3Hn%i1e@B2b!mv!N0@@nY*6!hMrCgn@7gfD5^w!7DH#x&AzA>&E8DSSv{ zOs6m9pULG}0lzz!ewKRxKDWa>0|wbk_dI3nrH69E*h>eP8?P}pR7dZD=P!ed&BXi9 zS2w)D`#J>B@U)ku{SN zIQkQ1%IUv|{tJPzgtJ1#HXba~ZzuIY34YbrRAyJew4>)*qscchUf(Ih9Tw3#+Yavv zd0rt}n>I2I=!|SRWqzwNVfdt#d5P?b+TRaxuUlODaDm0e_y$`OCZznlLn zNNiYk#68QUb5X=s&PlW}iZ=W-HMF74WP1Mo#zdWA8WZpdX7PaJOn0yr%u3Yxtm;rM zS>BhICd%~l%2+x`9)9gBiT9bj7q3_Nc)|LXw)o1O?8BIVPkfp@AJ_ZJy+=9CM=M+3 z(eJQRJrkMomcG+hk!W!Rcck-K>I`2a8CPMxr$(4p(U@0Gb&Q<4!a1n#f7Nqfh(CYG z{r*Sqxy6OrF!gvJ%XVe_t4U=_|8mb8{&Fex8;l&>>-8NY)>rR$dA|p<_oUyy(Qn`_ z@_zr)`)&2XSUE>iB9C6?ynb&=cJ=Imp&jOX zQFis*!J!>1E^u~K<^**Iq@^L=@j z`JNW}5qm;0{_l})T|Su@9$IzIfRM1ITOd2DIICNcAs z@j=Iq7&af2M@05qAPna zH+n{nf5?5Bz%aQXcrX-5@YC(;i#px*MIWXw`Y?Ubhv^I0Okefg_w@(c*SHkZm-?N; zch!9Yd>1|@T;iAclGBj^{w(f_cwQnLLQ^&l;`l2PjEr9}CV0x;@9v)WlfPB>^t7ei zy|bOq=PV3?K$r1ep|%*0@F{rI=8=2-bD^h^OOgZf&&S)%aNFHLyAAisKac+xJ}H84 zO5q#P4ZOl@oXPJSUYBBgzrn~jo%a&$>60?t<>Q_S(eH7-dEEoJ%5xHWIz9fIH70Eb z`MrWVlBJr5$@1d2uMmezKNXbGyw`WhYK=kmTQl(vs=vv@ujZJ1o+n=Q>`UJ5;oUaJ z)h}DY&lX?V%U+|Lx31-Whyhl{i5?}N2_KRy|8A`Z1MrnoSACehVd(iI3m@r1Q>n{4Z&TOUuikk5 zaNG$T_T5Gw{v*I4T{aWBW$2~vyx+p}<>11~`ZAuGyxlyr^Zj$*OU(5js~z4I0`sPI zfoEll8o9yR@3M7)>4n6j6yhgC{v2rR6|5@h$6X81DXv%Faq=rIEc8{ucYGnN!O6Kz zx$E^w`xE(G0j<;@Bl9L%TfbE~hE&rtBDIlqnX+8b1SJ8RgEmFzic-_PXkPa}R6pP@PL zNqqiF&Q)$QUZkzc4u1bJY^!>`hlk&rvc|8p}C*)s( z{;~m1)$Mm7ySa1i?{1x$!Z;;;mnwp>NY4bwj{w z`C(^IXFysgVD3oPTuac)g=6t|m;-CEMX*aZQcvxh{VMN{*D7?r)~5T^KXQHxZInX? zD`z$C>1iixnrI`)*j3hrgSkx|$$ksVT0bm|MY6>Y&o}-TV7an8Sm-MmmfL})JA8~5 z49JVEz$ScH*o#%Z8<_KKdEWWUPgi+(LpsYp#*1uu-kI|BwT^xH8#rybE<{vr9wj_4WfO6Qrfd^bJ=%E$Chee+B>5ikEY&(36z{40BH z$@YlKOP32@o3N$D_sg{=guc7k6Sw%;Put=b@oEA;*^vs{Chx+)p!Qer{d8^q%-1FX zSB7r#1N_4KZhaz8=r=Iw-Q(VO`)-SVhn?ya;y@U8bfbO?HsQ|0#iKl1!SBsJcuUAT zAbK9y?b#c&zY&=27=Nfbw4*wzYiun~zp3tTZ9SK!@p@rjU#g#6?-!@3_dTya>5^o= zD@0~mTyEmMOP7SK);P3R@~8U~cEUf=p2b0eMk$enMczDRywVqTyk9#_`BJZZ8RINv zJi_U6U%l~ydzY&NB}Wo{r9}pKaEn*Usdp>+#N>aUUA*SdX2oT}SCZpDhY!s7Xvd5X z*p^e?zW<_ahxcL2S6*2^jg0M`6J!mX@R7LZ#dW4Oopq`1I^v!X?2{eS6YH1$8UwJq z^<917AIGb|>wc~XR?T+{r|k8VVe<8{dYEtuFVs6b~nv9=feg&V=7b~Y!$)$W^{(xV#d3LhO0307e1j^AYq z?6dHJr;WaPd#P7RJ^36~LAMmyEQ~c>pTLmG=jvU7gG0Nlc{3PuW@O$k68yST?a;Pq zhxSZ8aF<-qwI>vJnG(6#SAP@rB?lxQH}G9^Nc?Sd67Yy`6F5(aJXx6N`(etr!iNo% zsjLsWFi^*gfp*gTW624+b~3ck*=&vDl3ASF0_Ws!JXr6;&3*oM!GRf@ZI>|$SAxlH z$DPCH+qQti-_~uuw%j^)f6Vo>%m0#T>w-sr-CKQiE1`*{mB!VzE!nHV$OpyVc*0#_ zm_$3>$&_#Ua2cXZIXH96g`<+m*XSAJ-poFmevj4fuuH3}^c|Q)FVTqi9hdWL1<#Bu zq+WtJ$n>;wtlLsLp82O z&wkztjVi$?k;2tvSKT;!rIS9)__CFq;0;jyq@VB zi}=VlmVeV&rX`JqHvD6GSY?P4J=1vCsLVvyhBvTINx<6r!f9|(l)!~>);N*eAl>1D zw!SG`6!~y5Ez$mKwBIc*7;7>v9t0PP^CpI5aVa$5-r*gw^ZWBZZAYvou~#R5;+3c2 zjU}{U*EMzz+wy54cR)#JTn9ebQ6Bz*jnv3v(8|DchghMZRkGs#EF{o zXfKA(EXJ9fCTP-h{<-{rZAX)jCMDqZ<@dVIS37r0Xj5$o53xH#(a*>x^L%Ih!13v1 zk7!le} zCF7^U*N+{G<=FP=oBZ_d(MNaroTI$BX6*_5a zi1mn+po`Nrmw;)O;G^$G+AWc-=keYRK02Rjho(i2T3F$Qux~zmS@nwH4`gTD_N7cL z2@kS;ZxgSJ?!5QUsmo}iJmlFD-a6Rx+2E_kuOFVZQ})DQ^+h@0gAYUGB?+xFK6TD2 zuH?PJC3xscgY3wk_Ir4yU%hi_LnP_Z@lU855frKnL zV<7WUqjBh}>ZU=+LW~Zbt={kNKF_Usx~L|AzMp@8KK-ex=ef(d=br7Jd+xaw|HpG( zI%?}Z&DdxseQcZU*r1#Av2C>PJe=6^X>9k|aYMWIxgGbDcCKmjlyUPc)42a=WgqV~ zw`SaYf3I=DgGg!DmZ<~w#|FBZE?0qI0GjJ9*^hhynHIZv~_sz zue07)Cw;xYB`17vcX~bObqDy{!~AWxeStsWtct!~{9|f;xzw9O!IR#01^O^z+jczt z;BT8}e!Mm)ABwN-2DM$2;_o~Yn3|w9t-Q?xo4ooZf-|no~ znBG>?Fl|-PmTdCYA^jIb62wRO`OngnXze8Llv~WahbC0lyeChBrMY_gv+u*qvHjjg z*=_L6^03o>_*U13Jw=xB{EBB?*|GyXDy9kF<+Sber7;Tz^=EnXT01u0`)Ok&V`~9V ztS!6p`Mwf7Y7Ldg9gb#?opuxC_^ct`P`R9R1~gdYv>TbqT*Q#41?(@y$e(IyRCv|i zIJs+Q7`aWG^|V<}KgjLDzD9ibjMvI$e;HF3U2#%6#2dpF*;S3M?eGD{;nxKk;}%2z zu57!&_a2zd8d?4w`AynJIMe12gC8diKjnLVX=YHF#>~!s43Z??uvA7lP?0gb?pWG)cHv66KzQ>Pjza1X$30}VM zq2Huj^XAat%hS96NPEkH&(LWaUjNOu$$LYm9$quGdB`hkadbNRUzOgj2g?n>(hAIN z;68<`g2=cxyBZUhvAJAee+nij@h(Pv?@F=XYD?O zwmcjad$jeHbXe6U_}Jp3op^O{;r!s=h~;vS*h+b*h|J zdCf=CZuI8x&a|?&j~~)UCLQvRw!Gu>|MERk+x2N>ZQC1ZTQYne=PfsAER4a7g=gtw z`J8QoGGQN&-y`@=DPIt|#+K)uzx*=FOU9(|QcS`2-mC)=o{661&ru#glSdf8;}O>EimN@wzj$WdJU2GWbM(I-v>XV@0#yW%0D-UXDb+&V3u5139O2} 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

ONr2)zAFI_vWBi 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

uD@D*uZ^>@d1)Z<;9Qnclf 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

L%@7DpJ4xuUhvMwxtW>P+y9uw<)DbV)lkhXL2 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 Y)B~xDtbjQ+9yS{(M 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

jjrn3Hl>asWP-c=U0UJY2GYGGEfy*Tg1rlYGU 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 z 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
fCktL2X8J~%IX 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�xB6G_P7cPWQ`maaXX?#T%|$VKUa^1@_FD0PdXvLG z*4;+!1M;V}!Z|G?fBd?w^CZ_qyB*+Gwcq=waWJw@Ji&F@ANp+qv}9r!V~Amp7mecY znYadYYT_EuW-+o*x^)Ng$)OL>*p<=zc#s|ckvwaEMs_Z9MQiAr#@AIXrs`%yn_;uK! zMVtXp$r!3JSnZFojxh!?#_fzjji(u79b;@~j2dWh5o4Ui-xC
Kys*aq4#DC(DM~ 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�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