From a6dbb02443e04de1b5536ef83dcd3846c580fb29 Mon Sep 17 00:00:00 2001
From: Yoshida Hiroshi <yoshida@shiguredo.jp>
Date: Thu, 19 Dec 2024 15:38:09 +0900
Subject: [PATCH 01/19] =?UTF-8?q?=E7=99=BA=E8=A9=B1=E6=99=82=E9=96=93?=
 =?UTF-8?q?=E3=81=AB=E3=82=88=E3=82=8B=E8=A9=95=E4=BE=A1=E3=81=A8=E4=BF=A1?=
 =?UTF-8?q?=E9=A0=BC=E3=82=B9=E3=82=B3=E3=82=A2=E3=81=AE=E8=A9=95=E4=BE=A1?=
 =?UTF-8?q?=E3=82=92=E5=88=86=E3=81=91=E3=82=8B?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 amazon_transcribe_handler.go | 46 ++++++++++++++++--------------------
 1 file changed, 20 insertions(+), 26 deletions(-)

diff --git a/amazon_transcribe_handler.go b/amazon_transcribe_handler.go
index 06b04c8..03e5bf7 100644
--- a/amazon_transcribe_handler.go
+++ b/amazon_transcribe_handler.go
@@ -203,47 +203,41 @@ func buildMessage(config Config, alt transcribestreamingservice.Alternative, isP
 	minimumTranscribedTime := config.MinimumTranscribedTime
 
 	var message string
-	if minimumConfidenceScore > 0 {
-		if isPartial {
-			// IsPartial: true の場合は Transcript をそのまま使用する
-			if alt.Transcript != nil {
-				message = *alt.Transcript
+	items := alt.Items
+
+	for _, item := range items {
+		// minimumTranscribedTime が設定されている場合のみ時間を評価する
+		if minimumTranscribedTime > 0 {
+			if (item.StartTime != nil) && (item.EndTime != nil) {
+				if (*item.EndTime - *item.StartTime) > 0 {
+					if (*item.EndTime - *item.StartTime) < minimumTranscribedTime {
+						// 発話時間が短い場合は次へ
+						continue
+					}
+				}
 			}
-		} else {
-			items := alt.Items
+		}
 
-			for _, item := range items {
+		// minimumConfidenceScore が設定されている場合のみ信頼スコアを評価する
+		if minimumConfidenceScore > 0 {
+			// isPartial が false の場合のみ信頼スコアを評価する
+			if !isPartial {
 				if item.Confidence != nil {
 					if *item.Confidence < minimumConfidenceScore {
 						// 信頼スコアが低い場合は次へ
 						continue
 					}
 				}
-
-				if (item.StartTime != nil) && (item.EndTime != nil) {
-					if (*item.EndTime - *item.StartTime) > 0 {
-						if (*item.EndTime - *item.StartTime) < minimumTranscribedTime {
-							// 発話時間が短い場合は次へ
-							continue
-						}
-					}
-				}
-
-				message += *item.Content
 			}
 		}
-	} else {
-		// minimumConfidenceScore が設定されていない(0)場合は Transcript をそのまま使用する
-		if alt.Transcript != nil {
-			message = *alt.Transcript
-		}
+
+		message += *item.Content
 	}
 
-	// メッセージが空の場合は次へ
+	// 各評価の結果、メッセージが空の場合は次へ
 	if message == "" {
 		return message, false
 	}
 
 	return message, true
-
 }

From 4b4dc7c6fe3712ed48455b948fc1284eff0ed933 Mon Sep 17 00:00:00 2001
From: Yoshida Hiroshi <yoshida@shiguredo.jp>
Date: Thu, 19 Dec 2024 16:28:33 +0900
Subject: [PATCH 02/19] =?UTF-8?q?=E3=83=86=E3=82=B9=E3=83=88=E7=94=A8?=
 =?UTF-8?q?=E3=81=AE=E3=83=95=E3=82=A1=E3=82=A4=E3=83=AB=E3=82=92=E8=BF=BD?=
 =?UTF-8?q?=E5=8A=A0=E3=81=99=E3=82=8B?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 amazon_transcribe_handler_test.go | 66 +++++++++++++++++++++++++++++++
 1 file changed, 66 insertions(+)
 create mode 100644 amazon_transcribe_handler_test.go

diff --git a/amazon_transcribe_handler_test.go b/amazon_transcribe_handler_test.go
new file mode 100644
index 0000000..843006a
--- /dev/null
+++ b/amazon_transcribe_handler_test.go
@@ -0,0 +1,66 @@
+package suzu
+
+import (
+	"testing"
+
+	"github.com/aws/aws-sdk-go/aws"
+	"github.com/aws/aws-sdk-go/service/transcribestreamingservice"
+	"github.com/stretchr/testify/assert"
+)
+
+func TestBuildMessage(t *testing.T) {
+
+	type Input struct {
+		Alt       transcribestreamingservice.Alternative
+		IsPartial bool
+	}
+
+	type Expect struct {
+		Message string
+		Ok      bool
+	}
+
+	testCases := []struct {
+		Name   string
+		Config Config
+		Input  Input
+		Expect Expect
+	}{
+		{
+			Name: "minimumTranscribedTime is 0",
+			Config: Config{
+				MinimumTranscribedTime: 0,
+			},
+			Input: Input{
+				Alt: transcribestreamingservice.Alternative{
+					Items: []*transcribestreamingservice.Item{
+						{
+							StartTime: aws.Float64(0),
+							EndTime:   aws.Float64(1),
+							Content:   aws.String("test"),
+						},
+						{
+							StartTime: aws.Float64(0),
+							EndTime:   aws.Float64(1),
+							Content:   aws.String("data"),
+						},
+					},
+				},
+				IsPartial: false,
+			},
+			Expect: Expect{
+				Message: "testdata",
+				Ok:      true,
+			},
+		},
+	}
+
+	for _, tc := range testCases {
+		t.Run(tc.Name, func(t *testing.T) {
+			actual, ok := buildMessage(tc.Config, tc.Input.Alt, tc.Input.IsPartial)
+			assert.Equal(t, tc.Expect.Ok, ok)
+			assert.Equal(t, tc.Expect.Message, actual)
+		})
+	}
+
+}

From 4a1448335e32068d41ce9e2d1d4de771de310058 Mon Sep 17 00:00:00 2001
From: Yoshida Hiroshi <yoshida@shiguredo.jp>
Date: Thu, 19 Dec 2024 17:31:48 +0900
Subject: [PATCH 03/19] =?UTF-8?q?=E3=83=86=E3=82=B9=E3=83=88=E3=82=92?=
 =?UTF-8?q?=E8=BF=BD=E5=8A=A0=E3=81=99=E3=82=8B?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 amazon_transcribe_handler_test.go | 240 +++++++++++++++++++++++++++++-
 1 file changed, 238 insertions(+), 2 deletions(-)

diff --git a/amazon_transcribe_handler_test.go b/amazon_transcribe_handler_test.go
index 843006a..7dd4691 100644
--- a/amazon_transcribe_handler_test.go
+++ b/amazon_transcribe_handler_test.go
@@ -36,12 +36,12 @@ func TestBuildMessage(t *testing.T) {
 					Items: []*transcribestreamingservice.Item{
 						{
 							StartTime: aws.Float64(0),
-							EndTime:   aws.Float64(1),
+							EndTime:   aws.Float64(0),
 							Content:   aws.String("test"),
 						},
 						{
 							StartTime: aws.Float64(0),
-							EndTime:   aws.Float64(1),
+							EndTime:   aws.Float64(0),
 							Content:   aws.String("data"),
 						},
 					},
@@ -53,6 +53,242 @@ func TestBuildMessage(t *testing.T) {
 				Ok:      true,
 			},
 		},
+		{
+			Name: "minimumConfidenceScore is 0",
+			Config: Config{
+				MinimumConfidenceScore: 0,
+			},
+			Input: Input{
+				Alt: transcribestreamingservice.Alternative{
+					Items: []*transcribestreamingservice.Item{
+						{
+							Confidence: aws.Float64(0),
+							StartTime:  aws.Float64(0),
+							EndTime:    aws.Float64(0),
+							Content:    aws.String("test"),
+						},
+						{
+							Confidence: aws.Float64(0),
+							StartTime:  aws.Float64(0),
+							EndTime:    aws.Float64(0),
+							Content:    aws.String("data"),
+						},
+					},
+				},
+				IsPartial: false,
+			},
+			Expect: Expect{
+				Message: "testdata",
+				Ok:      true,
+			},
+		},
+		{
+			Name: "transcribedTime > MinimumTranscribedTime",
+			Config: Config{
+				MinimumTranscribedTime: 0.02,
+				MinimumConfidenceScore: 0,
+			},
+			Input: Input{
+				Alt: transcribestreamingservice.Alternative{
+					Items: []*transcribestreamingservice.Item{
+						{
+							StartTime: aws.Float64(1.00),
+							EndTime:   aws.Float64(1.03),
+							Content:   aws.String("test"),
+						},
+						{
+							StartTime: aws.Float64(1.03),
+							EndTime:   aws.Float64(1.04),
+							Content:   aws.String("data"),
+						},
+						{
+							StartTime: aws.Float64(1.04),
+							EndTime:   aws.Float64(1.06),
+							Content:   aws.String("0"),
+						},
+					},
+				},
+				IsPartial: false,
+			},
+			Expect: Expect{
+				Message: "test0",
+				Ok:      true,
+			},
+		},
+		{
+			Name: "transcribedTime == MinimumTranscribedTime",
+			Config: Config{
+				MinimumTranscribedTime: 0.01,
+				MinimumConfidenceScore: 0,
+			},
+			Input: Input{
+				Alt: transcribestreamingservice.Alternative{
+					Items: []*transcribestreamingservice.Item{
+						{
+							StartTime: aws.Float64(1.00),
+							EndTime:   aws.Float64(1.01),
+							Content:   aws.String("test"),
+						},
+						{
+							StartTime: aws.Float64(1.01),
+							EndTime:   aws.Float64(1.02),
+							Content:   aws.String("data"),
+						},
+						{
+							StartTime: aws.Float64(1.02),
+							EndTime:   aws.Float64(1.03),
+							Content:   aws.String("0"),
+						},
+					},
+				},
+				IsPartial: false,
+			},
+			Expect: Expect{
+				Message: "testdata0",
+				Ok:      true,
+			},
+		},
+		{
+			Name: "transcribedTime < MinimumTranscribedTime",
+			Config: Config{
+				MinimumTranscribedTime: 0.02,
+				MinimumConfidenceScore: 0,
+			},
+			Input: Input{
+				Alt: transcribestreamingservice.Alternative{
+					Items: []*transcribestreamingservice.Item{
+						{
+							StartTime: aws.Float64(1.00),
+							EndTime:   aws.Float64(1.019),
+							Content:   aws.String("test"),
+						},
+						{
+							StartTime: aws.Float64(1.019),
+							EndTime:   aws.Float64(1.038),
+							Content:   aws.String("data"),
+						},
+						{
+							StartTime: aws.Float64(1.038),
+							EndTime:   aws.Float64(1.057),
+							Content:   aws.String("0"),
+						},
+					},
+				},
+				IsPartial: false,
+			},
+			Expect: Expect{
+				Message: "",
+				Ok:      false,
+			},
+		},
+		{
+			Name: "confidence > minimumConfidenceScore ",
+			Config: Config{
+				MinimumConfidenceScore: 0.1,
+				MinimumTranscribedTime: 0,
+			},
+			Input: Input{
+				Alt: transcribestreamingservice.Alternative{
+					Items: []*transcribestreamingservice.Item{
+						{
+							Confidence: aws.Float64(0.11),
+							StartTime:  aws.Float64(0),
+							EndTime:    aws.Float64(0),
+							Content:    aws.String("test"),
+						},
+						{
+							Confidence: aws.Float64(0),
+							StartTime:  aws.Float64(0),
+							EndTime:    aws.Float64(0),
+							Content:    aws.String("data"),
+						},
+						{
+							Confidence: aws.Float64(0.11),
+							StartTime:  aws.Float64(0),
+							EndTime:    aws.Float64(0),
+							Content:    aws.String("1"),
+						},
+					},
+				},
+				IsPartial: false,
+			},
+			Expect: Expect{
+				Message: "test1",
+				Ok:      true,
+			},
+		},
+		{
+			Name: "confidence == minimumConfidenceScore ",
+			Config: Config{
+				MinimumConfidenceScore: 0.1,
+				MinimumTranscribedTime: 0,
+			},
+			Input: Input{
+				Alt: transcribestreamingservice.Alternative{
+					Items: []*transcribestreamingservice.Item{
+						{
+							Confidence: aws.Float64(0.1),
+							StartTime:  aws.Float64(0),
+							EndTime:    aws.Float64(0),
+							Content:    aws.String("test"),
+						},
+						{
+							Confidence: aws.Float64(0.1),
+							StartTime:  aws.Float64(0),
+							EndTime:    aws.Float64(0),
+							Content:    aws.String("data"),
+						},
+						{
+							Confidence: aws.Float64(0.1),
+							StartTime:  aws.Float64(0),
+							EndTime:    aws.Float64(0),
+							Content:    aws.String("1"),
+						},
+					},
+				},
+				IsPartial: false,
+			},
+			Expect: Expect{
+				Message: "testdata1",
+				Ok:      true,
+			},
+		},
+		{
+			Name: "confidence < minimumConfidenceScore ",
+			Config: Config{
+				MinimumConfidenceScore: 0.1,
+				MinimumTranscribedTime: 0,
+			},
+			Input: Input{
+				Alt: transcribestreamingservice.Alternative{
+					Items: []*transcribestreamingservice.Item{
+						{
+							Confidence: aws.Float64(0),
+							StartTime:  aws.Float64(0),
+							EndTime:    aws.Float64(0),
+							Content:    aws.String("test"),
+						},
+						{
+							Confidence: aws.Float64(0.09),
+							StartTime:  aws.Float64(0),
+							EndTime:    aws.Float64(0),
+							Content:    aws.String("data"),
+						},
+						{
+							Confidence: aws.Float64(0.09),
+							StartTime:  aws.Float64(0),
+							EndTime:    aws.Float64(0),
+							Content:    aws.String("1"),
+						},
+					},
+				},
+				IsPartial: false,
+			},
+			Expect: Expect{
+				Message: "",
+				Ok:      false,
+			},
+		},
 	}
 
 	for _, tc := range testCases {

From 7e5750e628e90863905d2085dba19a2377cc4b19 Mon Sep 17 00:00:00 2001
From: Yoshida Hiroshi <yoshida@shiguredo.jp>
Date: Fri, 20 Dec 2024 10:30:51 +0900
Subject: [PATCH 04/19] =?UTF-8?q?=E3=83=86=E3=82=B9=E3=83=88=E3=82=92?=
 =?UTF-8?q?=E5=88=86=E3=81=91=E3=82=8B?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 amazon_transcribe_handler_test.go | 512 ++++++++++++++++--------------
 1 file changed, 266 insertions(+), 246 deletions(-)

diff --git a/amazon_transcribe_handler_test.go b/amazon_transcribe_handler_test.go
index 7dd4691..61cb911 100644
--- a/amazon_transcribe_handler_test.go
+++ b/amazon_transcribe_handler_test.go
@@ -20,283 +20,303 @@ func TestBuildMessage(t *testing.T) {
 		Ok      bool
 	}
 
-	testCases := []struct {
-		Name   string
-		Config Config
-		Input  Input
-		Expect Expect
-	}{
-		{
-			Name: "minimumTranscribedTime is 0",
-			Config: Config{
-				MinimumTranscribedTime: 0,
-			},
-			Input: Input{
-				Alt: transcribestreamingservice.Alternative{
-					Items: []*transcribestreamingservice.Item{
-						{
-							StartTime: aws.Float64(0),
-							EndTime:   aws.Float64(0),
-							Content:   aws.String("test"),
-						},
-						{
-							StartTime: aws.Float64(0),
-							EndTime:   aws.Float64(0),
-							Content:   aws.String("data"),
+	t.Run("minimumTranscribedTime", func(t *testing.T) {
+		testCases := []struct {
+			Name   string
+			Config Config
+			Input  Input
+			Expect Expect
+		}{
+			{
+				Name: "minimumTranscribedTime is 0",
+				Config: Config{
+					MinimumTranscribedTime: 0,
+				},
+				Input: Input{
+					Alt: transcribestreamingservice.Alternative{
+						Items: []*transcribestreamingservice.Item{
+							{
+								StartTime: aws.Float64(0),
+								EndTime:   aws.Float64(0),
+								Content:   aws.String("test"),
+							},
+							{
+								StartTime: aws.Float64(0),
+								EndTime:   aws.Float64(0),
+								Content:   aws.String("data"),
+							},
 						},
 					},
+					IsPartial: false,
+				},
+				Expect: Expect{
+					Message: "testdata",
+					Ok:      true,
 				},
-				IsPartial: false,
-			},
-			Expect: Expect{
-				Message: "testdata",
-				Ok:      true,
-			},
-		},
-		{
-			Name: "minimumConfidenceScore is 0",
-			Config: Config{
-				MinimumConfidenceScore: 0,
 			},
-			Input: Input{
-				Alt: transcribestreamingservice.Alternative{
-					Items: []*transcribestreamingservice.Item{
-						{
-							Confidence: aws.Float64(0),
-							StartTime:  aws.Float64(0),
-							EndTime:    aws.Float64(0),
-							Content:    aws.String("test"),
-						},
-						{
-							Confidence: aws.Float64(0),
-							StartTime:  aws.Float64(0),
-							EndTime:    aws.Float64(0),
-							Content:    aws.String("data"),
+			{
+				Name: "transcribedTime > MinimumTranscribedTime",
+				Config: Config{
+					MinimumTranscribedTime: 0.02,
+					MinimumConfidenceScore: 0,
+				},
+				Input: Input{
+					Alt: transcribestreamingservice.Alternative{
+						Items: []*transcribestreamingservice.Item{
+							{
+								StartTime: aws.Float64(1.00),
+								EndTime:   aws.Float64(1.03),
+								Content:   aws.String("test"),
+							},
+							{
+								StartTime: aws.Float64(1.03),
+								EndTime:   aws.Float64(1.04),
+								Content:   aws.String("data"),
+							},
+							{
+								StartTime: aws.Float64(1.04),
+								EndTime:   aws.Float64(1.06),
+								Content:   aws.String("0"),
+							},
 						},
 					},
+					IsPartial: false,
+				},
+				Expect: Expect{
+					Message: "test0",
+					Ok:      true,
 				},
-				IsPartial: false,
-			},
-			Expect: Expect{
-				Message: "testdata",
-				Ok:      true,
-			},
-		},
-		{
-			Name: "transcribedTime > MinimumTranscribedTime",
-			Config: Config{
-				MinimumTranscribedTime: 0.02,
-				MinimumConfidenceScore: 0,
 			},
-			Input: Input{
-				Alt: transcribestreamingservice.Alternative{
-					Items: []*transcribestreamingservice.Item{
-						{
-							StartTime: aws.Float64(1.00),
-							EndTime:   aws.Float64(1.03),
-							Content:   aws.String("test"),
-						},
-						{
-							StartTime: aws.Float64(1.03),
-							EndTime:   aws.Float64(1.04),
-							Content:   aws.String("data"),
-						},
-						{
-							StartTime: aws.Float64(1.04),
-							EndTime:   aws.Float64(1.06),
-							Content:   aws.String("0"),
+			{
+				Name: "transcribedTime == MinimumTranscribedTime",
+				Config: Config{
+					MinimumTranscribedTime: 0.01,
+					MinimumConfidenceScore: 0,
+				},
+				Input: Input{
+					Alt: transcribestreamingservice.Alternative{
+						Items: []*transcribestreamingservice.Item{
+							{
+								StartTime: aws.Float64(1.00),
+								EndTime:   aws.Float64(1.01),
+								Content:   aws.String("test"),
+							},
+							{
+								StartTime: aws.Float64(1.01),
+								EndTime:   aws.Float64(1.02),
+								Content:   aws.String("data"),
+							},
+							{
+								StartTime: aws.Float64(1.02),
+								EndTime:   aws.Float64(1.03),
+								Content:   aws.String("0"),
+							},
 						},
 					},
+					IsPartial: false,
+				},
+				Expect: Expect{
+					Message: "testdata0",
+					Ok:      true,
 				},
-				IsPartial: false,
-			},
-			Expect: Expect{
-				Message: "test0",
-				Ok:      true,
-			},
-		},
-		{
-			Name: "transcribedTime == MinimumTranscribedTime",
-			Config: Config{
-				MinimumTranscribedTime: 0.01,
-				MinimumConfidenceScore: 0,
 			},
-			Input: Input{
-				Alt: transcribestreamingservice.Alternative{
-					Items: []*transcribestreamingservice.Item{
-						{
-							StartTime: aws.Float64(1.00),
-							EndTime:   aws.Float64(1.01),
-							Content:   aws.String("test"),
-						},
-						{
-							StartTime: aws.Float64(1.01),
-							EndTime:   aws.Float64(1.02),
-							Content:   aws.String("data"),
-						},
-						{
-							StartTime: aws.Float64(1.02),
-							EndTime:   aws.Float64(1.03),
-							Content:   aws.String("0"),
+			{
+				Name: "transcribedTime < MinimumTranscribedTime",
+				Config: Config{
+					MinimumTranscribedTime: 0.02,
+					MinimumConfidenceScore: 0,
+				},
+				Input: Input{
+					Alt: transcribestreamingservice.Alternative{
+						Items: []*transcribestreamingservice.Item{
+							{
+								StartTime: aws.Float64(1.00),
+								EndTime:   aws.Float64(1.019),
+								Content:   aws.String("test"),
+							},
+							{
+								StartTime: aws.Float64(1.019),
+								EndTime:   aws.Float64(1.038),
+								Content:   aws.String("data"),
+							},
+							{
+								StartTime: aws.Float64(1.038),
+								EndTime:   aws.Float64(1.057),
+								Content:   aws.String("0"),
+							},
 						},
 					},
+					IsPartial: false,
+				},
+				Expect: Expect{
+					Message: "",
+					Ok:      false,
 				},
-				IsPartial: false,
-			},
-			Expect: Expect{
-				Message: "testdata0",
-				Ok:      true,
-			},
-		},
-		{
-			Name: "transcribedTime < MinimumTranscribedTime",
-			Config: Config{
-				MinimumTranscribedTime: 0.02,
-				MinimumConfidenceScore: 0,
 			},
-			Input: Input{
-				Alt: transcribestreamingservice.Alternative{
-					Items: []*transcribestreamingservice.Item{
-						{
-							StartTime: aws.Float64(1.00),
-							EndTime:   aws.Float64(1.019),
-							Content:   aws.String("test"),
-						},
-						{
-							StartTime: aws.Float64(1.019),
-							EndTime:   aws.Float64(1.038),
-							Content:   aws.String("data"),
-						},
-						{
-							StartTime: aws.Float64(1.038),
-							EndTime:   aws.Float64(1.057),
-							Content:   aws.String("0"),
+		}
+
+		for _, tc := range testCases {
+			t.Run(tc.Name, func(t *testing.T) {
+				actual, ok := buildMessage(tc.Config, tc.Input.Alt, tc.Input.IsPartial)
+				assert.Equal(t, tc.Expect.Ok, ok)
+				assert.Equal(t, tc.Expect.Message, actual)
+			})
+		}
+
+	})
+
+	t.Run("minimumConfidence", func(t *testing.T) {
+		testCases := []struct {
+			Name   string
+			Config Config
+			Input  Input
+			Expect Expect
+		}{
+			{
+				Name: "minimumConfidenceScore is 0",
+				Config: Config{
+					MinimumConfidenceScore: 0,
+				},
+				Input: Input{
+					Alt: transcribestreamingservice.Alternative{
+						Items: []*transcribestreamingservice.Item{
+							{
+								Confidence: aws.Float64(0),
+								StartTime:  aws.Float64(0),
+								EndTime:    aws.Float64(0),
+								Content:    aws.String("test"),
+							},
+							{
+								Confidence: aws.Float64(0),
+								StartTime:  aws.Float64(0),
+								EndTime:    aws.Float64(0),
+								Content:    aws.String("data"),
+							},
 						},
 					},
+					IsPartial: false,
+				},
+				Expect: Expect{
+					Message: "testdata",
+					Ok:      true,
 				},
-				IsPartial: false,
-			},
-			Expect: Expect{
-				Message: "",
-				Ok:      false,
-			},
-		},
-		{
-			Name: "confidence > minimumConfidenceScore ",
-			Config: Config{
-				MinimumConfidenceScore: 0.1,
-				MinimumTranscribedTime: 0,
 			},
-			Input: Input{
-				Alt: transcribestreamingservice.Alternative{
-					Items: []*transcribestreamingservice.Item{
-						{
-							Confidence: aws.Float64(0.11),
-							StartTime:  aws.Float64(0),
-							EndTime:    aws.Float64(0),
-							Content:    aws.String("test"),
-						},
-						{
-							Confidence: aws.Float64(0),
-							StartTime:  aws.Float64(0),
-							EndTime:    aws.Float64(0),
-							Content:    aws.String("data"),
-						},
-						{
-							Confidence: aws.Float64(0.11),
-							StartTime:  aws.Float64(0),
-							EndTime:    aws.Float64(0),
-							Content:    aws.String("1"),
+			{
+				Name: "confidence > minimumConfidenceScore ",
+				Config: Config{
+					MinimumConfidenceScore: 0.1,
+					MinimumTranscribedTime: 0,
+				},
+				Input: Input{
+					Alt: transcribestreamingservice.Alternative{
+						Items: []*transcribestreamingservice.Item{
+							{
+								Confidence: aws.Float64(0.11),
+								StartTime:  aws.Float64(0),
+								EndTime:    aws.Float64(0),
+								Content:    aws.String("test"),
+							},
+							{
+								Confidence: aws.Float64(0),
+								StartTime:  aws.Float64(0),
+								EndTime:    aws.Float64(0),
+								Content:    aws.String("data"),
+							},
+							{
+								Confidence: aws.Float64(0.11),
+								StartTime:  aws.Float64(0),
+								EndTime:    aws.Float64(0),
+								Content:    aws.String("1"),
+							},
 						},
 					},
+					IsPartial: false,
+				},
+				Expect: Expect{
+					Message: "test1",
+					Ok:      true,
 				},
-				IsPartial: false,
-			},
-			Expect: Expect{
-				Message: "test1",
-				Ok:      true,
-			},
-		},
-		{
-			Name: "confidence == minimumConfidenceScore ",
-			Config: Config{
-				MinimumConfidenceScore: 0.1,
-				MinimumTranscribedTime: 0,
 			},
-			Input: Input{
-				Alt: transcribestreamingservice.Alternative{
-					Items: []*transcribestreamingservice.Item{
-						{
-							Confidence: aws.Float64(0.1),
-							StartTime:  aws.Float64(0),
-							EndTime:    aws.Float64(0),
-							Content:    aws.String("test"),
-						},
-						{
-							Confidence: aws.Float64(0.1),
-							StartTime:  aws.Float64(0),
-							EndTime:    aws.Float64(0),
-							Content:    aws.String("data"),
-						},
-						{
-							Confidence: aws.Float64(0.1),
-							StartTime:  aws.Float64(0),
-							EndTime:    aws.Float64(0),
-							Content:    aws.String("1"),
+			{
+				Name: "confidence == minimumConfidenceScore ",
+				Config: Config{
+					MinimumConfidenceScore: 0.1,
+					MinimumTranscribedTime: 0,
+				},
+				Input: Input{
+					Alt: transcribestreamingservice.Alternative{
+						Items: []*transcribestreamingservice.Item{
+							{
+								Confidence: aws.Float64(0.1),
+								StartTime:  aws.Float64(0),
+								EndTime:    aws.Float64(0),
+								Content:    aws.String("test"),
+							},
+							{
+								Confidence: aws.Float64(0.1),
+								StartTime:  aws.Float64(0),
+								EndTime:    aws.Float64(0),
+								Content:    aws.String("data"),
+							},
+							{
+								Confidence: aws.Float64(0.1),
+								StartTime:  aws.Float64(0),
+								EndTime:    aws.Float64(0),
+								Content:    aws.String("1"),
+							},
 						},
 					},
+					IsPartial: false,
+				},
+				Expect: Expect{
+					Message: "testdata1",
+					Ok:      true,
 				},
-				IsPartial: false,
-			},
-			Expect: Expect{
-				Message: "testdata1",
-				Ok:      true,
-			},
-		},
-		{
-			Name: "confidence < minimumConfidenceScore ",
-			Config: Config{
-				MinimumConfidenceScore: 0.1,
-				MinimumTranscribedTime: 0,
 			},
-			Input: Input{
-				Alt: transcribestreamingservice.Alternative{
-					Items: []*transcribestreamingservice.Item{
-						{
-							Confidence: aws.Float64(0),
-							StartTime:  aws.Float64(0),
-							EndTime:    aws.Float64(0),
-							Content:    aws.String("test"),
-						},
-						{
-							Confidence: aws.Float64(0.09),
-							StartTime:  aws.Float64(0),
-							EndTime:    aws.Float64(0),
-							Content:    aws.String("data"),
-						},
-						{
-							Confidence: aws.Float64(0.09),
-							StartTime:  aws.Float64(0),
-							EndTime:    aws.Float64(0),
-							Content:    aws.String("1"),
+			{
+				Name: "confidence < minimumConfidenceScore ",
+				Config: Config{
+					MinimumConfidenceScore: 0.1,
+					MinimumTranscribedTime: 0,
+				},
+				Input: Input{
+					Alt: transcribestreamingservice.Alternative{
+						Items: []*transcribestreamingservice.Item{
+							{
+								Confidence: aws.Float64(0),
+								StartTime:  aws.Float64(0),
+								EndTime:    aws.Float64(0),
+								Content:    aws.String("test"),
+							},
+							{
+								Confidence: aws.Float64(0.09),
+								StartTime:  aws.Float64(0),
+								EndTime:    aws.Float64(0),
+								Content:    aws.String("data"),
+							},
+							{
+								Confidence: aws.Float64(0.09),
+								StartTime:  aws.Float64(0),
+								EndTime:    aws.Float64(0),
+								Content:    aws.String("1"),
+							},
 						},
 					},
+					IsPartial: false,
+				},
+				Expect: Expect{
+					Message: "",
+					Ok:      false,
 				},
-				IsPartial: false,
-			},
-			Expect: Expect{
-				Message: "",
-				Ok:      false,
 			},
-		},
-	}
-
-	for _, tc := range testCases {
-		t.Run(tc.Name, func(t *testing.T) {
-			actual, ok := buildMessage(tc.Config, tc.Input.Alt, tc.Input.IsPartial)
-			assert.Equal(t, tc.Expect.Ok, ok)
-			assert.Equal(t, tc.Expect.Message, actual)
-		})
-	}
+		}
 
+		for _, tc := range testCases {
+			t.Run(tc.Name, func(t *testing.T) {
+				actual, ok := buildMessage(tc.Config, tc.Input.Alt, tc.Input.IsPartial)
+				assert.Equal(t, tc.Expect.Ok, ok)
+				assert.Equal(t, tc.Expect.Message, actual)
+			})
+		}
+	})
 }

From d564323f220eda37c44527c559983582b3f97d16 Mon Sep 17 00:00:00 2001
From: Yoshida Hiroshi <yoshida@shiguredo.jp>
Date: Fri, 20 Dec 2024 11:53:48 +0900
Subject: [PATCH 05/19] =?UTF-8?q?=E5=8F=A5=E8=AA=AD=E7=82=B9=E3=81=AE?=
 =?UTF-8?q?=E3=83=86=E3=82=B9=E3=83=88=E3=82=92=E8=BF=BD=E5=8A=A0=E3=81=99?=
 =?UTF-8?q?=E3=82=8B?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 amazon_transcribe_handler_test.go | 71 +++++++++++++++++++++++++++++++
 1 file changed, 71 insertions(+)

diff --git a/amazon_transcribe_handler_test.go b/amazon_transcribe_handler_test.go
index 61cb911..41bd263 100644
--- a/amazon_transcribe_handler_test.go
+++ b/amazon_transcribe_handler_test.go
@@ -153,6 +153,40 @@ func TestBuildMessage(t *testing.T) {
 					Ok:      false,
 				},
 			},
+			{
+				Name: "punctuation",
+				Config: Config{
+					MinimumTranscribedTime: 0.01,
+					MinimumConfidenceScore: 0,
+				},
+				Input: Input{
+					Alt: transcribestreamingservice.Alternative{
+						Items: []*transcribestreamingservice.Item{
+							{
+								StartTime: aws.Float64(1.00),
+								EndTime:   aws.Float64(1.02),
+								Content:   aws.String("テスト"),
+							},
+							{
+								// 句読点は StartTime と EndTime が同じ
+								StartTime: aws.Float64(1.02),
+								EndTime:   aws.Float64(1.02),
+								Content:   aws.String("、"),
+							},
+							{
+								StartTime: aws.Float64(1.02),
+								EndTime:   aws.Float64(1.04),
+								Content:   aws.String("データ"),
+							},
+						},
+					},
+					IsPartial: false,
+				},
+				Expect: Expect{
+					Message: "テスト、データ",
+					Ok:      true,
+				},
+			},
 		}
 
 		for _, tc := range testCases {
@@ -309,6 +343,43 @@ func TestBuildMessage(t *testing.T) {
 					Ok:      false,
 				},
 			},
+			{
+				Name: "punctuation",
+				Config: Config{
+					MinimumConfidenceScore: 0.1,
+					MinimumTranscribedTime: 0,
+				},
+				Input: Input{
+					Alt: transcribestreamingservice.Alternative{
+						Items: []*transcribestreamingservice.Item{
+							{
+								Confidence: aws.Float64(0.2),
+								StartTime:  aws.Float64(1.0),
+								EndTime:    aws.Float64(1.02),
+								Content:    aws.String("テスト"),
+							},
+							{
+								// 句読点は Confidence は nil
+								Confidence: nil,
+								StartTime:  aws.Float64(1.02),
+								EndTime:    aws.Float64(1.02),
+								Content:    aws.String("、"),
+							},
+							{
+								Confidence: aws.Float64(0.2),
+								StartTime:  aws.Float64(1.02),
+								EndTime:    aws.Float64(1.04),
+								Content:    aws.String("データ"),
+							},
+						},
+					},
+					IsPartial: false,
+				},
+				Expect: Expect{
+					Message: "テスト、データ",
+					Ok:      true,
+				},
+			},
 		}
 
 		for _, tc := range testCases {

From 7e737fd3cd675c5d38159932bef74d0b319b25a9 Mon Sep 17 00:00:00 2001
From: Yoshida Hiroshi <yoshida@shiguredo.jp>
Date: Fri, 20 Dec 2024 12:26:57 +0900
Subject: [PATCH 06/19] =?UTF-8?q?IsPartial=20=E5=80=A4=E3=81=94=E3=81=A8?=
 =?UTF-8?q?=E3=81=AE=E3=83=86=E3=82=B9=E3=83=88=E3=82=92=E8=BF=BD=E5=8A=A0?=
 =?UTF-8?q?=E3=81=99=E3=82=8B?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 amazon_transcribe_handler_test.go | 520 ++++++++++++++++++++----------
 1 file changed, 357 insertions(+), 163 deletions(-)

diff --git a/amazon_transcribe_handler_test.go b/amazon_transcribe_handler_test.go
index 41bd263..a88e44f 100644
--- a/amazon_transcribe_handler_test.go
+++ b/amazon_transcribe_handler_test.go
@@ -200,194 +200,388 @@ func TestBuildMessage(t *testing.T) {
 	})
 
 	t.Run("minimumConfidence", func(t *testing.T) {
-		testCases := []struct {
-			Name   string
-			Config Config
-			Input  Input
-			Expect Expect
-		}{
-			{
-				Name: "minimumConfidenceScore is 0",
-				Config: Config{
-					MinimumConfidenceScore: 0,
-				},
-				Input: Input{
-					Alt: transcribestreamingservice.Alternative{
-						Items: []*transcribestreamingservice.Item{
-							{
-								Confidence: aws.Float64(0),
-								StartTime:  aws.Float64(0),
-								EndTime:    aws.Float64(0),
-								Content:    aws.String("test"),
-							},
-							{
-								Confidence: aws.Float64(0),
-								StartTime:  aws.Float64(0),
-								EndTime:    aws.Float64(0),
-								Content:    aws.String("data"),
+		t.Run("IsPartial == false", func(t *testing.T) {
+			testCases := []struct {
+				Name   string
+				Config Config
+				Input  Input
+				Expect Expect
+			}{
+				{
+					Name: "minimumConfidenceScore is 0",
+					Config: Config{
+						MinimumConfidenceScore: 0,
+					},
+					Input: Input{
+						Alt: transcribestreamingservice.Alternative{
+							Items: []*transcribestreamingservice.Item{
+								{
+									Confidence: aws.Float64(0),
+									StartTime:  aws.Float64(0),
+									EndTime:    aws.Float64(0),
+									Content:    aws.String("test"),
+								},
+								{
+									Confidence: aws.Float64(0),
+									StartTime:  aws.Float64(0),
+									EndTime:    aws.Float64(0),
+									Content:    aws.String("data"),
+								},
 							},
 						},
+						IsPartial: false,
+					},
+					Expect: Expect{
+						Message: "testdata",
+						Ok:      true,
 					},
-					IsPartial: false,
-				},
-				Expect: Expect{
-					Message: "testdata",
-					Ok:      true,
-				},
-			},
-			{
-				Name: "confidence > minimumConfidenceScore ",
-				Config: Config{
-					MinimumConfidenceScore: 0.1,
-					MinimumTranscribedTime: 0,
 				},
-				Input: Input{
-					Alt: transcribestreamingservice.Alternative{
-						Items: []*transcribestreamingservice.Item{
-							{
-								Confidence: aws.Float64(0.11),
-								StartTime:  aws.Float64(0),
-								EndTime:    aws.Float64(0),
-								Content:    aws.String("test"),
-							},
-							{
-								Confidence: aws.Float64(0),
-								StartTime:  aws.Float64(0),
-								EndTime:    aws.Float64(0),
-								Content:    aws.String("data"),
-							},
-							{
-								Confidence: aws.Float64(0.11),
-								StartTime:  aws.Float64(0),
-								EndTime:    aws.Float64(0),
-								Content:    aws.String("1"),
+				{
+					Name: "confidence > minimumConfidenceScore ",
+					Config: Config{
+						MinimumConfidenceScore: 0.1,
+						MinimumTranscribedTime: 0,
+					},
+					Input: Input{
+						Alt: transcribestreamingservice.Alternative{
+							Items: []*transcribestreamingservice.Item{
+								{
+									Confidence: aws.Float64(0.11),
+									StartTime:  aws.Float64(0),
+									EndTime:    aws.Float64(0),
+									Content:    aws.String("test"),
+								},
+								{
+									Confidence: aws.Float64(0),
+									StartTime:  aws.Float64(0),
+									EndTime:    aws.Float64(0),
+									Content:    aws.String("data"),
+								},
+								{
+									Confidence: aws.Float64(0.11),
+									StartTime:  aws.Float64(0),
+									EndTime:    aws.Float64(0),
+									Content:    aws.String("1"),
+								},
 							},
 						},
+						IsPartial: false,
+					},
+					Expect: Expect{
+						Message: "test1",
+						Ok:      true,
 					},
-					IsPartial: false,
-				},
-				Expect: Expect{
-					Message: "test1",
-					Ok:      true,
-				},
-			},
-			{
-				Name: "confidence == minimumConfidenceScore ",
-				Config: Config{
-					MinimumConfidenceScore: 0.1,
-					MinimumTranscribedTime: 0,
 				},
-				Input: Input{
-					Alt: transcribestreamingservice.Alternative{
-						Items: []*transcribestreamingservice.Item{
-							{
-								Confidence: aws.Float64(0.1),
-								StartTime:  aws.Float64(0),
-								EndTime:    aws.Float64(0),
-								Content:    aws.String("test"),
-							},
-							{
-								Confidence: aws.Float64(0.1),
-								StartTime:  aws.Float64(0),
-								EndTime:    aws.Float64(0),
-								Content:    aws.String("data"),
-							},
-							{
-								Confidence: aws.Float64(0.1),
-								StartTime:  aws.Float64(0),
-								EndTime:    aws.Float64(0),
-								Content:    aws.String("1"),
+				{
+					Name: "confidence == minimumConfidenceScore ",
+					Config: Config{
+						MinimumConfidenceScore: 0.1,
+						MinimumTranscribedTime: 0,
+					},
+					Input: Input{
+						Alt: transcribestreamingservice.Alternative{
+							Items: []*transcribestreamingservice.Item{
+								{
+									Confidence: aws.Float64(0.1),
+									StartTime:  aws.Float64(0),
+									EndTime:    aws.Float64(0),
+									Content:    aws.String("test"),
+								},
+								{
+									Confidence: aws.Float64(0.1),
+									StartTime:  aws.Float64(0),
+									EndTime:    aws.Float64(0),
+									Content:    aws.String("data"),
+								},
+								{
+									Confidence: aws.Float64(0.1),
+									StartTime:  aws.Float64(0),
+									EndTime:    aws.Float64(0),
+									Content:    aws.String("1"),
+								},
 							},
 						},
+						IsPartial: false,
+					},
+					Expect: Expect{
+						Message: "testdata1",
+						Ok:      true,
 					},
-					IsPartial: false,
-				},
-				Expect: Expect{
-					Message: "testdata1",
-					Ok:      true,
-				},
-			},
-			{
-				Name: "confidence < minimumConfidenceScore ",
-				Config: Config{
-					MinimumConfidenceScore: 0.1,
-					MinimumTranscribedTime: 0,
 				},
-				Input: Input{
-					Alt: transcribestreamingservice.Alternative{
-						Items: []*transcribestreamingservice.Item{
-							{
-								Confidence: aws.Float64(0),
-								StartTime:  aws.Float64(0),
-								EndTime:    aws.Float64(0),
-								Content:    aws.String("test"),
-							},
-							{
-								Confidence: aws.Float64(0.09),
-								StartTime:  aws.Float64(0),
-								EndTime:    aws.Float64(0),
-								Content:    aws.String("data"),
-							},
-							{
-								Confidence: aws.Float64(0.09),
-								StartTime:  aws.Float64(0),
-								EndTime:    aws.Float64(0),
-								Content:    aws.String("1"),
+				{
+					Name: "confidence < minimumConfidenceScore ",
+					Config: Config{
+						MinimumConfidenceScore: 0.1,
+						MinimumTranscribedTime: 0,
+					},
+					Input: Input{
+						Alt: transcribestreamingservice.Alternative{
+							Items: []*transcribestreamingservice.Item{
+								{
+									Confidence: aws.Float64(0),
+									StartTime:  aws.Float64(0),
+									EndTime:    aws.Float64(0),
+									Content:    aws.String("test"),
+								},
+								{
+									Confidence: aws.Float64(0.09),
+									StartTime:  aws.Float64(0),
+									EndTime:    aws.Float64(0),
+									Content:    aws.String("data"),
+								},
+								{
+									Confidence: aws.Float64(0.09),
+									StartTime:  aws.Float64(0),
+									EndTime:    aws.Float64(0),
+									Content:    aws.String("1"),
+								},
 							},
 						},
+						IsPartial: false,
+					},
+					Expect: Expect{
+						Message: "",
+						Ok:      false,
 					},
-					IsPartial: false,
 				},
-				Expect: Expect{
-					Message: "",
-					Ok:      false,
+				{
+					Name: "punctuation",
+					Config: Config{
+						MinimumConfidenceScore: 0.1,
+						MinimumTranscribedTime: 0,
+					},
+					Input: Input{
+						Alt: transcribestreamingservice.Alternative{
+							Items: []*transcribestreamingservice.Item{
+								{
+									Confidence: aws.Float64(0.2),
+									StartTime:  aws.Float64(1.0),
+									EndTime:    aws.Float64(1.02),
+									Content:    aws.String("テスト"),
+								},
+								{
+									// 句読点は Confidence は nil
+									Confidence: nil,
+									StartTime:  aws.Float64(1.02),
+									EndTime:    aws.Float64(1.02),
+									Content:    aws.String("、"),
+								},
+								{
+									Confidence: aws.Float64(0.2),
+									StartTime:  aws.Float64(1.02),
+									EndTime:    aws.Float64(1.04),
+									Content:    aws.String("データ"),
+								},
+							},
+						},
+						IsPartial: false,
+					},
+					Expect: Expect{
+						Message: "テスト、データ",
+						Ok:      true,
+					},
 				},
-			},
-			{
-				Name: "punctuation",
-				Config: Config{
-					MinimumConfidenceScore: 0.1,
-					MinimumTranscribedTime: 0,
+			}
+
+			for _, tc := range testCases {
+				t.Run(tc.Name, func(t *testing.T) {
+					actual, ok := buildMessage(tc.Config, tc.Input.Alt, tc.Input.IsPartial)
+					assert.Equal(t, tc.Expect.Ok, ok)
+					assert.Equal(t, tc.Expect.Message, actual)
+				})
+			}
+		})
+
+		t.Run("IsPartial == true", func(t *testing.T) {
+			testCases := []struct {
+				Name   string
+				Config Config
+				Input  Input
+				Expect Expect
+			}{
+				{
+					Name: "minimumConfidenceScore is 0",
+					Config: Config{
+						MinimumConfidenceScore: 0,
+					},
+					Input: Input{
+						Alt: transcribestreamingservice.Alternative{
+							Items: []*transcribestreamingservice.Item{
+								{
+									Confidence: aws.Float64(0),
+									StartTime:  aws.Float64(0),
+									EndTime:    aws.Float64(0),
+									Content:    aws.String("test"),
+								},
+								{
+									Confidence: aws.Float64(0),
+									StartTime:  aws.Float64(0),
+									EndTime:    aws.Float64(0),
+									Content:    aws.String("data"),
+								},
+							},
+						},
+						IsPartial: true,
+					},
+					Expect: Expect{
+						Message: "testdata",
+						Ok:      true,
+					},
 				},
-				Input: Input{
-					Alt: transcribestreamingservice.Alternative{
-						Items: []*transcribestreamingservice.Item{
-							{
-								Confidence: aws.Float64(0.2),
-								StartTime:  aws.Float64(1.0),
-								EndTime:    aws.Float64(1.02),
-								Content:    aws.String("テスト"),
+				{
+					Name: "confidence > minimumConfidenceScore ",
+					Config: Config{
+						MinimumConfidenceScore: 0.1,
+						MinimumTranscribedTime: 0,
+					},
+					Input: Input{
+						Alt: transcribestreamingservice.Alternative{
+							Items: []*transcribestreamingservice.Item{
+								{
+									Confidence: aws.Float64(0.11),
+									StartTime:  aws.Float64(0),
+									EndTime:    aws.Float64(0),
+									Content:    aws.String("test"),
+								},
+								{
+									Confidence: aws.Float64(0),
+									StartTime:  aws.Float64(0),
+									EndTime:    aws.Float64(0),
+									Content:    aws.String("data"),
+								},
+								{
+									Confidence: aws.Float64(0.11),
+									StartTime:  aws.Float64(0),
+									EndTime:    aws.Float64(0),
+									Content:    aws.String("1"),
+								},
 							},
-							{
-								// 句読点は Confidence は nil
-								Confidence: nil,
-								StartTime:  aws.Float64(1.02),
-								EndTime:    aws.Float64(1.02),
-								Content:    aws.String("、"),
+						},
+						IsPartial: true,
+					},
+					Expect: Expect{
+						Message: "testdata1",
+						Ok:      true,
+					},
+				},
+				{
+					Name: "confidence == minimumConfidenceScore ",
+					Config: Config{
+						MinimumConfidenceScore: 0.1,
+						MinimumTranscribedTime: 0,
+					},
+					Input: Input{
+						Alt: transcribestreamingservice.Alternative{
+							Items: []*transcribestreamingservice.Item{
+								{
+									Confidence: aws.Float64(0.1),
+									StartTime:  aws.Float64(0),
+									EndTime:    aws.Float64(0),
+									Content:    aws.String("test"),
+								},
+								{
+									Confidence: aws.Float64(0.1),
+									StartTime:  aws.Float64(0),
+									EndTime:    aws.Float64(0),
+									Content:    aws.String("data"),
+								},
+								{
+									Confidence: aws.Float64(0.1),
+									StartTime:  aws.Float64(0),
+									EndTime:    aws.Float64(0),
+									Content:    aws.String("1"),
+								},
 							},
-							{
-								Confidence: aws.Float64(0.2),
-								StartTime:  aws.Float64(1.02),
-								EndTime:    aws.Float64(1.04),
-								Content:    aws.String("データ"),
+						},
+						IsPartial: true,
+					},
+					Expect: Expect{
+						Message: "testdata1",
+						Ok:      true,
+					},
+				},
+				{
+					Name: "confidence < minimumConfidenceScore ",
+					Config: Config{
+						MinimumConfidenceScore: 0.1,
+						MinimumTranscribedTime: 0,
+					},
+					Input: Input{
+						Alt: transcribestreamingservice.Alternative{
+							Items: []*transcribestreamingservice.Item{
+								{
+									Confidence: aws.Float64(0),
+									StartTime:  aws.Float64(0),
+									EndTime:    aws.Float64(0),
+									Content:    aws.String("test"),
+								},
+								{
+									Confidence: aws.Float64(0.09),
+									StartTime:  aws.Float64(0),
+									EndTime:    aws.Float64(0),
+									Content:    aws.String("data"),
+								},
+								{
+									Confidence: aws.Float64(0.09),
+									StartTime:  aws.Float64(0),
+									EndTime:    aws.Float64(0),
+									Content:    aws.String("1"),
+								},
 							},
 						},
+						IsPartial: true,
+					},
+					Expect: Expect{
+						Message: "testdata1",
+						Ok:      true,
 					},
-					IsPartial: false,
 				},
-				Expect: Expect{
-					Message: "テスト、データ",
-					Ok:      true,
+				{
+					Name: "punctuation",
+					Config: Config{
+						MinimumConfidenceScore: 0.1,
+						MinimumTranscribedTime: 0,
+					},
+					Input: Input{
+						Alt: transcribestreamingservice.Alternative{
+							Items: []*transcribestreamingservice.Item{
+								{
+									Confidence: aws.Float64(0.2),
+									StartTime:  aws.Float64(1.0),
+									EndTime:    aws.Float64(1.02),
+									Content:    aws.String("テスト"),
+								},
+								{
+									// 句読点は Confidence は nil
+									Confidence: nil,
+									StartTime:  aws.Float64(1.02),
+									EndTime:    aws.Float64(1.02),
+									Content:    aws.String("、"),
+								},
+								{
+									Confidence: aws.Float64(0.2),
+									StartTime:  aws.Float64(1.02),
+									EndTime:    aws.Float64(1.04),
+									Content:    aws.String("データ"),
+								},
+							},
+						},
+						IsPartial: true,
+					},
+					Expect: Expect{
+						Message: "テスト、データ",
+						Ok:      true,
+					},
 				},
-			},
-		}
+			}
 
-		for _, tc := range testCases {
-			t.Run(tc.Name, func(t *testing.T) {
-				actual, ok := buildMessage(tc.Config, tc.Input.Alt, tc.Input.IsPartial)
-				assert.Equal(t, tc.Expect.Ok, ok)
-				assert.Equal(t, tc.Expect.Message, actual)
-			})
-		}
+			for _, tc := range testCases {
+				t.Run(tc.Name, func(t *testing.T) {
+					actual, ok := buildMessage(tc.Config, tc.Input.Alt, tc.Input.IsPartial)
+					assert.Equal(t, tc.Expect.Ok, ok)
+					assert.Equal(t, tc.Expect.Message, actual)
+				})
+			}
+		})
 	})
 }

From 0748eb856caa9525325754a46a8a7f76aca38e5e Mon Sep 17 00:00:00 2001
From: Yoshida Hiroshi <yoshida@shiguredo.jp>
Date: Fri, 20 Dec 2024 14:48:28 +0900
Subject: [PATCH 07/19] =?UTF-8?q?=E3=83=95=E3=82=A3=E3=83=AB=E3=82=BF?=
 =?UTF-8?q?=E3=83=AA=E3=83=B3=E3=82=B0=E3=81=AE=E6=9D=A1=E4=BB=B6=E3=82=92?=
 =?UTF-8?q?=E9=96=A2=E6=95=B0=E3=81=AB=E3=81=BE=E3=81=A8=E3=82=81=E3=82=8B?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 amazon_transcribe_handler.go | 70 ++++++++++++++++++++++++------------
 1 file changed, 47 insertions(+), 23 deletions(-)

diff --git a/amazon_transcribe_handler.go b/amazon_transcribe_handler.go
index 03e5bf7..d34ac7c 100644
--- a/amazon_transcribe_handler.go
+++ b/amazon_transcribe_handler.go
@@ -198,37 +198,61 @@ func (h *AmazonTranscribeHandler) Handle(ctx context.Context, opusCh chan opusCh
 	return r, nil
 }
 
-func buildMessage(config Config, alt transcribestreamingservice.Alternative, isPartial bool) (string, bool) {
-	minimumConfidenceScore := config.MinimumConfidenceScore
+func contentFilterByTranscribedTime(config Config, item transcribestreamingservice.Item) bool {
 	minimumTranscribedTime := config.MinimumTranscribedTime
 
+	// minimumTranscribedTime が設定されていない場合はフィルタリングしない
+	if minimumTranscribedTime <= 0 {
+		return true
+	}
+
+	// StartTime または EndTime が nil の場合はフィルタリングしない
+	if (item.StartTime == nil) || (item.EndTime == nil) {
+		return true
+	}
+
+	// 発話時間が 0 の場合はフィルタリングしない(句読点を想定)
+	if *item.EndTime == *item.StartTime {
+		return true
+	}
+
+	// 発話時間が minimumTranscribedTime 未満の場合はフィルタリングする
+	return (*item.EndTime - *item.StartTime) >= minimumTranscribedTime
+}
+
+func contentFilterByConfidenceScore(config Config, item transcribestreamingservice.Item, isPartial bool) bool {
+	minimumConfidenceScore := config.MinimumConfidenceScore
+
+	// minimumConfidenceScore が設定されていない場合はフィルタリングしない
+	if minimumConfidenceScore <= 0 {
+		return true
+	}
+
+	// isPartial が true の場合はフィルタリングしない
+	if isPartial {
+		return true
+	}
+
+	// Confidence が nil の場合はフィルタリングしない
+	if item.Confidence == nil {
+		return true
+	}
+
+	// 信頼スコアが minimumConfidenceScore 未満の場合はフィルタリングする
+	return *item.Confidence >= minimumConfidenceScore
+}
+
+func buildMessage(config Config, alt transcribestreamingservice.Alternative, isPartial bool) (string, bool) {
 	var message string
 	items := alt.Items
 
 	for _, item := range items {
-		// minimumTranscribedTime が設定されている場合のみ時間を評価する
-		if minimumTranscribedTime > 0 {
-			if (item.StartTime != nil) && (item.EndTime != nil) {
-				if (*item.EndTime - *item.StartTime) > 0 {
-					if (*item.EndTime - *item.StartTime) < minimumTranscribedTime {
-						// 発話時間が短い場合は次へ
-						continue
-					}
-				}
-			}
+		if !contentFilterByTranscribedTime(config, *item) {
+			continue
 		}
 
-		// minimumConfidenceScore が設定されている場合のみ信頼スコアを評価する
-		if minimumConfidenceScore > 0 {
-			// isPartial が false の場合のみ信頼スコアを評価する
-			if !isPartial {
-				if item.Confidence != nil {
-					if *item.Confidence < minimumConfidenceScore {
-						// 信頼スコアが低い場合は次へ
-						continue
-					}
-				}
-			}
+		if !contentFilterByConfidenceScore(config, *item, isPartial) {
+			continue
 		}
 
 		message += *item.Content

From b06f498d6d7a2f1be00e4e3945b88babad16b227 Mon Sep 17 00:00:00 2001
From: Yoshida Hiroshi <yoshida@shiguredo.jp>
Date: Fri, 20 Dec 2024 16:23:08 +0900
Subject: [PATCH 08/19] =?UTF-8?q?=E5=8F=A5=E8=AA=AD=E7=82=B9=E3=81=AE?=
 =?UTF-8?q?=E5=A0=B4=E5=90=88=E3=81=AE=E5=87=A6=E7=90=86=E3=82=92=E4=BF=AE?=
 =?UTF-8?q?=E6=AD=A3=E3=81=99=E3=82=8B?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 amazon_transcribe_handler.go      | 13 +++++++---
 amazon_transcribe_handler_test.go | 43 ++++++++++++++++++++++++++++++-
 2 files changed, 51 insertions(+), 5 deletions(-)

diff --git a/amazon_transcribe_handler.go b/amazon_transcribe_handler.go
index d34ac7c..8870772 100644
--- a/amazon_transcribe_handler.go
+++ b/amazon_transcribe_handler.go
@@ -206,13 +206,13 @@ func contentFilterByTranscribedTime(config Config, item transcribestreamingservi
 		return true
 	}
 
-	// StartTime または EndTime が nil の場合はフィルタリングしない
-	if (item.StartTime == nil) || (item.EndTime == nil) {
+	// 句読点の場合はフィルタリングしない
+	if *item.Type == transcribestreamingservice.ItemTypePunctuation {
 		return true
 	}
 
-	// 発話時間が 0 の場合はフィルタリングしない(句読点を想定)
-	if *item.EndTime == *item.StartTime {
+	// StartTime または EndTime が nil の場合はフィルタリングしない
+	if (item.StartTime == nil) || (item.EndTime == nil) {
 		return true
 	}
 
@@ -233,6 +233,11 @@ func contentFilterByConfidenceScore(config Config, item transcribestreamingservi
 		return true
 	}
 
+	// 句読点の場合はフィルタリングしない
+	if *item.Type == transcribestreamingservice.ItemTypePunctuation {
+		return true
+	}
+
 	// Confidence が nil の場合はフィルタリングしない
 	if item.Confidence == nil {
 		return true
diff --git a/amazon_transcribe_handler_test.go b/amazon_transcribe_handler_test.go
index a88e44f..eb7aeec 100644
--- a/amazon_transcribe_handler_test.go
+++ b/amazon_transcribe_handler_test.go
@@ -39,11 +39,13 @@ func TestBuildMessage(t *testing.T) {
 								StartTime: aws.Float64(0),
 								EndTime:   aws.Float64(0),
 								Content:   aws.String("test"),
+								Type:      aws.String(transcribestreamingservice.ItemTypePronunciation),
 							},
 							{
 								StartTime: aws.Float64(0),
 								EndTime:   aws.Float64(0),
 								Content:   aws.String("data"),
+								Type:      aws.String(transcribestreamingservice.ItemTypePronunciation),
 							},
 						},
 					},
@@ -67,16 +69,19 @@ func TestBuildMessage(t *testing.T) {
 								StartTime: aws.Float64(1.00),
 								EndTime:   aws.Float64(1.03),
 								Content:   aws.String("test"),
+								Type:      aws.String(transcribestreamingservice.ItemTypePronunciation),
 							},
 							{
 								StartTime: aws.Float64(1.03),
 								EndTime:   aws.Float64(1.04),
 								Content:   aws.String("data"),
+								Type:      aws.String(transcribestreamingservice.ItemTypePronunciation),
 							},
 							{
 								StartTime: aws.Float64(1.04),
 								EndTime:   aws.Float64(1.06),
 								Content:   aws.String("0"),
+								Type:      aws.String(transcribestreamingservice.ItemTypePronunciation),
 							},
 						},
 					},
@@ -100,16 +105,19 @@ func TestBuildMessage(t *testing.T) {
 								StartTime: aws.Float64(1.00),
 								EndTime:   aws.Float64(1.01),
 								Content:   aws.String("test"),
+								Type:      aws.String(transcribestreamingservice.ItemTypePronunciation),
 							},
 							{
 								StartTime: aws.Float64(1.01),
 								EndTime:   aws.Float64(1.02),
 								Content:   aws.String("data"),
+								Type:      aws.String(transcribestreamingservice.ItemTypePronunciation),
 							},
 							{
 								StartTime: aws.Float64(1.02),
 								EndTime:   aws.Float64(1.03),
 								Content:   aws.String("0"),
+								Type:      aws.String(transcribestreamingservice.ItemTypePronunciation),
 							},
 						},
 					},
@@ -133,16 +141,19 @@ func TestBuildMessage(t *testing.T) {
 								StartTime: aws.Float64(1.00),
 								EndTime:   aws.Float64(1.019),
 								Content:   aws.String("test"),
+								Type:      aws.String(transcribestreamingservice.ItemTypePronunciation),
 							},
 							{
 								StartTime: aws.Float64(1.019),
 								EndTime:   aws.Float64(1.038),
 								Content:   aws.String("data"),
+								Type:      aws.String(transcribestreamingservice.ItemTypePronunciation),
 							},
 							{
 								StartTime: aws.Float64(1.038),
 								EndTime:   aws.Float64(1.057),
 								Content:   aws.String("0"),
+								Type:      aws.String(transcribestreamingservice.ItemTypePronunciation),
 							},
 						},
 					},
@@ -166,17 +177,19 @@ func TestBuildMessage(t *testing.T) {
 								StartTime: aws.Float64(1.00),
 								EndTime:   aws.Float64(1.02),
 								Content:   aws.String("テスト"),
+								Type:      aws.String(transcribestreamingservice.ItemTypePronunciation),
 							},
 							{
-								// 句読点は StartTime と EndTime が同じ
 								StartTime: aws.Float64(1.02),
 								EndTime:   aws.Float64(1.02),
 								Content:   aws.String("、"),
+								Type:      aws.String(transcribestreamingservice.ItemTypePunctuation),
 							},
 							{
 								StartTime: aws.Float64(1.02),
 								EndTime:   aws.Float64(1.04),
 								Content:   aws.String("データ"),
+								Type:      aws.String(transcribestreamingservice.ItemTypePronunciation),
 							},
 						},
 					},
@@ -220,12 +233,14 @@ func TestBuildMessage(t *testing.T) {
 									StartTime:  aws.Float64(0),
 									EndTime:    aws.Float64(0),
 									Content:    aws.String("test"),
+									Type:       aws.String(transcribestreamingservice.ItemTypePronunciation),
 								},
 								{
 									Confidence: aws.Float64(0),
 									StartTime:  aws.Float64(0),
 									EndTime:    aws.Float64(0),
 									Content:    aws.String("data"),
+									Type:       aws.String(transcribestreamingservice.ItemTypePronunciation),
 								},
 							},
 						},
@@ -250,18 +265,21 @@ func TestBuildMessage(t *testing.T) {
 									StartTime:  aws.Float64(0),
 									EndTime:    aws.Float64(0),
 									Content:    aws.String("test"),
+									Type:       aws.String(transcribestreamingservice.ItemTypePronunciation),
 								},
 								{
 									Confidence: aws.Float64(0),
 									StartTime:  aws.Float64(0),
 									EndTime:    aws.Float64(0),
 									Content:    aws.String("data"),
+									Type:       aws.String(transcribestreamingservice.ItemTypePronunciation),
 								},
 								{
 									Confidence: aws.Float64(0.11),
 									StartTime:  aws.Float64(0),
 									EndTime:    aws.Float64(0),
 									Content:    aws.String("1"),
+									Type:       aws.String(transcribestreamingservice.ItemTypePronunciation),
 								},
 							},
 						},
@@ -286,18 +304,21 @@ func TestBuildMessage(t *testing.T) {
 									StartTime:  aws.Float64(0),
 									EndTime:    aws.Float64(0),
 									Content:    aws.String("test"),
+									Type:       aws.String(transcribestreamingservice.ItemTypePronunciation),
 								},
 								{
 									Confidence: aws.Float64(0.1),
 									StartTime:  aws.Float64(0),
 									EndTime:    aws.Float64(0),
 									Content:    aws.String("data"),
+									Type:       aws.String(transcribestreamingservice.ItemTypePronunciation),
 								},
 								{
 									Confidence: aws.Float64(0.1),
 									StartTime:  aws.Float64(0),
 									EndTime:    aws.Float64(0),
 									Content:    aws.String("1"),
+									Type:       aws.String(transcribestreamingservice.ItemTypePronunciation),
 								},
 							},
 						},
@@ -322,18 +343,21 @@ func TestBuildMessage(t *testing.T) {
 									StartTime:  aws.Float64(0),
 									EndTime:    aws.Float64(0),
 									Content:    aws.String("test"),
+									Type:       aws.String(transcribestreamingservice.ItemTypePronunciation),
 								},
 								{
 									Confidence: aws.Float64(0.09),
 									StartTime:  aws.Float64(0),
 									EndTime:    aws.Float64(0),
 									Content:    aws.String("data"),
+									Type:       aws.String(transcribestreamingservice.ItemTypePronunciation),
 								},
 								{
 									Confidence: aws.Float64(0.09),
 									StartTime:  aws.Float64(0),
 									EndTime:    aws.Float64(0),
 									Content:    aws.String("1"),
+									Type:       aws.String(transcribestreamingservice.ItemTypePronunciation),
 								},
 							},
 						},
@@ -358,6 +382,7 @@ func TestBuildMessage(t *testing.T) {
 									StartTime:  aws.Float64(1.0),
 									EndTime:    aws.Float64(1.02),
 									Content:    aws.String("テスト"),
+									Type:       aws.String(transcribestreamingservice.ItemTypePronunciation),
 								},
 								{
 									// 句読点は Confidence は nil
@@ -365,12 +390,14 @@ func TestBuildMessage(t *testing.T) {
 									StartTime:  aws.Float64(1.02),
 									EndTime:    aws.Float64(1.02),
 									Content:    aws.String("、"),
+									Type:       aws.String(transcribestreamingservice.ItemTypePunctuation),
 								},
 								{
 									Confidence: aws.Float64(0.2),
 									StartTime:  aws.Float64(1.02),
 									EndTime:    aws.Float64(1.04),
 									Content:    aws.String("データ"),
+									Type:       aws.String(transcribestreamingservice.ItemTypePronunciation),
 								},
 							},
 						},
@@ -412,12 +439,14 @@ func TestBuildMessage(t *testing.T) {
 									StartTime:  aws.Float64(0),
 									EndTime:    aws.Float64(0),
 									Content:    aws.String("test"),
+									Type:       aws.String(transcribestreamingservice.ItemTypePronunciation),
 								},
 								{
 									Confidence: aws.Float64(0),
 									StartTime:  aws.Float64(0),
 									EndTime:    aws.Float64(0),
 									Content:    aws.String("data"),
+									Type:       aws.String(transcribestreamingservice.ItemTypePronunciation),
 								},
 							},
 						},
@@ -442,18 +471,21 @@ func TestBuildMessage(t *testing.T) {
 									StartTime:  aws.Float64(0),
 									EndTime:    aws.Float64(0),
 									Content:    aws.String("test"),
+									Type:       aws.String(transcribestreamingservice.ItemTypePronunciation),
 								},
 								{
 									Confidence: aws.Float64(0),
 									StartTime:  aws.Float64(0),
 									EndTime:    aws.Float64(0),
 									Content:    aws.String("data"),
+									Type:       aws.String(transcribestreamingservice.ItemTypePronunciation),
 								},
 								{
 									Confidence: aws.Float64(0.11),
 									StartTime:  aws.Float64(0),
 									EndTime:    aws.Float64(0),
 									Content:    aws.String("1"),
+									Type:       aws.String(transcribestreamingservice.ItemTypePronunciation),
 								},
 							},
 						},
@@ -478,18 +510,21 @@ func TestBuildMessage(t *testing.T) {
 									StartTime:  aws.Float64(0),
 									EndTime:    aws.Float64(0),
 									Content:    aws.String("test"),
+									Type:       aws.String(transcribestreamingservice.ItemTypePronunciation),
 								},
 								{
 									Confidence: aws.Float64(0.1),
 									StartTime:  aws.Float64(0),
 									EndTime:    aws.Float64(0),
 									Content:    aws.String("data"),
+									Type:       aws.String(transcribestreamingservice.ItemTypePronunciation),
 								},
 								{
 									Confidence: aws.Float64(0.1),
 									StartTime:  aws.Float64(0),
 									EndTime:    aws.Float64(0),
 									Content:    aws.String("1"),
+									Type:       aws.String(transcribestreamingservice.ItemTypePronunciation),
 								},
 							},
 						},
@@ -514,18 +549,21 @@ func TestBuildMessage(t *testing.T) {
 									StartTime:  aws.Float64(0),
 									EndTime:    aws.Float64(0),
 									Content:    aws.String("test"),
+									Type:       aws.String(transcribestreamingservice.ItemTypePronunciation),
 								},
 								{
 									Confidence: aws.Float64(0.09),
 									StartTime:  aws.Float64(0),
 									EndTime:    aws.Float64(0),
 									Content:    aws.String("data"),
+									Type:       aws.String(transcribestreamingservice.ItemTypePronunciation),
 								},
 								{
 									Confidence: aws.Float64(0.09),
 									StartTime:  aws.Float64(0),
 									EndTime:    aws.Float64(0),
 									Content:    aws.String("1"),
+									Type:       aws.String(transcribestreamingservice.ItemTypePronunciation),
 								},
 							},
 						},
@@ -550,6 +588,7 @@ func TestBuildMessage(t *testing.T) {
 									StartTime:  aws.Float64(1.0),
 									EndTime:    aws.Float64(1.02),
 									Content:    aws.String("テスト"),
+									Type:       aws.String(transcribestreamingservice.ItemTypePronunciation),
 								},
 								{
 									// 句読点は Confidence は nil
@@ -557,12 +596,14 @@ func TestBuildMessage(t *testing.T) {
 									StartTime:  aws.Float64(1.02),
 									EndTime:    aws.Float64(1.02),
 									Content:    aws.String("、"),
+									Type:       aws.String(transcribestreamingservice.ItemTypePunctuation),
 								},
 								{
 									Confidence: aws.Float64(0.2),
 									StartTime:  aws.Float64(1.02),
 									EndTime:    aws.Float64(1.04),
 									Content:    aws.String("データ"),
+									Type:       aws.String(transcribestreamingservice.ItemTypePronunciation),
 								},
 							},
 						},

From 419a4e046868d233f64ba4a6d0d7399be556b9e2 Mon Sep 17 00:00:00 2001
From: Yoshida Hiroshi <yoshida@shiguredo.jp>
Date: Fri, 20 Dec 2024 16:40:15 +0900
Subject: [PATCH 09/19] =?UTF-8?q?=E3=83=95=E3=82=A3=E3=83=AB=E3=82=BF?=
 =?UTF-8?q?=E3=83=AA=E3=83=B3=E3=82=B0=E3=81=AE=E7=B5=90=E6=9E=9C=E3=80=81?=
 =?UTF-8?q?content=20=E3=81=AB=E7=99=BA=E8=A9=B1=E3=81=8C=E3=81=AA?=
 =?UTF-8?q?=E3=81=8F=E5=8F=A5=E8=AA=AD=E7=82=B9=E3=81=AE=E3=81=BF=E3=81=A0?=
 =?UTF-8?q?=E3=81=A3=E3=81=9F=E5=A0=B4=E5=90=88=E3=81=AF=E7=B5=90=E6=9E=9C?=
 =?UTF-8?q?=E3=82=92=E8=BF=94=E3=81=95=E3=81=AA=E3=81=84?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 amazon_transcribe_handler.go | 13 ++++++++++---
 1 file changed, 10 insertions(+), 3 deletions(-)

diff --git a/amazon_transcribe_handler.go b/amazon_transcribe_handler.go
index 8870772..50baaa0 100644
--- a/amazon_transcribe_handler.go
+++ b/amazon_transcribe_handler.go
@@ -251,6 +251,9 @@ func buildMessage(config Config, alt transcribestreamingservice.Alternative, isP
 	var message string
 	items := alt.Items
 
+	// 句読点以外の content が含まれているかどうか
+	punctuationOnly := true
+
 	for _, item := range items {
 		if !contentFilterByTranscribedTime(config, *item) {
 			continue
@@ -260,12 +263,16 @@ func buildMessage(config Config, alt transcribestreamingservice.Alternative, isP
 			continue
 		}
 
+		if *item.Type == transcribestreamingservice.ItemTypePronunciation {
+			punctuationOnly = false
+		}
+
 		message += *item.Content
 	}
 
-	// 各評価の結果、メッセージが空の場合は次へ
-	if message == "" {
-		return message, false
+	// 各評価の結果、句読点のみかメッセージが空の場合は次へ
+	if punctuationOnly || (message == "") {
+		return "", false
 	}
 
 	return message, true

From e3520267c66022fd5b155619de14f514caab6f43 Mon Sep 17 00:00:00 2001
From: Yoshida Hiroshi <yoshida@shiguredo.jp>
Date: Fri, 20 Dec 2024 16:48:53 +0900
Subject: [PATCH 10/19] =?UTF-8?q?=E5=8F=A5=E8=AA=AD=E7=82=B9=E3=81=AE?=
 =?UTF-8?q?=E3=83=86=E3=82=B9=E3=83=88=E3=82=92=E8=BF=BD=E5=8A=A0=E3=81=99?=
 =?UTF-8?q?=E3=82=8B?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 amazon_transcribe_handler_test.go | 103 ++++++++++++++++++++++++++++++
 1 file changed, 103 insertions(+)

diff --git a/amazon_transcribe_handler_test.go b/amazon_transcribe_handler_test.go
index eb7aeec..1895f13 100644
--- a/amazon_transcribe_handler_test.go
+++ b/amazon_transcribe_handler_test.go
@@ -625,4 +625,107 @@ func TestBuildMessage(t *testing.T) {
 			}
 		})
 	})
+
+	t.Run("punctuation", func(t *testing.T) {
+		testCases := []struct {
+			Name   string
+			Config Config
+			Input  Input
+			Expect Expect
+		}{
+			{
+				Name: "pronunciation with punctuation",
+				Config: Config{
+					MinimumConfidenceScore: 0.1,
+					MinimumTranscribedTime: 0.1,
+				},
+				Input: Input{
+					Alt: transcribestreamingservice.Alternative{
+						Items: []*transcribestreamingservice.Item{
+							{
+								Confidence: nil,
+								StartTime:  aws.Float64(0),
+								EndTime:    aws.Float64(0.1),
+								Content:    aws.String("テスト"),
+								Type:       aws.String(transcribestreamingservice.ItemTypePronunciation),
+							},
+							{
+								Confidence: nil,
+								StartTime:  aws.Float64(0.1),
+								EndTime:    aws.Float64(0.1),
+								Content:    aws.String("、"),
+								Type:       aws.String(transcribestreamingservice.ItemTypePunctuation),
+							},
+							{
+								Confidence: nil,
+								StartTime:  aws.Float64(0.1),
+								EndTime:    aws.Float64(0.2),
+								Content:    aws.String("データ"),
+								Type:       aws.String(transcribestreamingservice.ItemTypePronunciation),
+							},
+							{
+								Confidence: nil,
+								StartTime:  aws.Float64(0.2),
+								EndTime:    aws.Float64(0.2),
+								Content:    aws.String("。"),
+								Type:       aws.String(transcribestreamingservice.ItemTypePunctuation),
+							},
+						},
+					},
+					IsPartial: false,
+				},
+				Expect: Expect{
+					Message: "テスト、データ。",
+					Ok:      true,
+				},
+			},
+			{
+				Name: "no pronunciation",
+				Config: Config{
+					MinimumConfidenceScore: 0.1,
+					MinimumTranscribedTime: 0,
+				},
+				Input: Input{
+					Alt: transcribestreamingservice.Alternative{
+						Items: []*transcribestreamingservice.Item{
+							{
+								Confidence: nil,
+								StartTime:  aws.Float64(0),
+								EndTime:    aws.Float64(0),
+								Content:    aws.String("。"),
+								Type:       aws.String(transcribestreamingservice.ItemTypePunctuation),
+							},
+							{
+								Confidence: nil,
+								StartTime:  aws.Float64(0),
+								EndTime:    aws.Float64(0),
+								Content:    aws.String("、"),
+								Type:       aws.String(transcribestreamingservice.ItemTypePunctuation),
+							},
+							{
+								Confidence: nil,
+								StartTime:  aws.Float64(0),
+								EndTime:    aws.Float64(0),
+								Content:    aws.String("。"),
+								Type:       aws.String(transcribestreamingservice.ItemTypePunctuation),
+							},
+						},
+					},
+					IsPartial: false,
+				},
+				Expect: Expect{
+					Message: "",
+					Ok:      false,
+				},
+			},
+		}
+
+		for _, tc := range testCases {
+			t.Run(tc.Name, func(t *testing.T) {
+				actual, ok := buildMessage(tc.Config, tc.Input.Alt, tc.Input.IsPartial)
+				assert.Equal(t, tc.Expect.Ok, ok)
+				assert.Equal(t, tc.Expect.Message, actual)
+			})
+		}
+	})
 }

From 6583abf128995cd332db6c705bbc4a57a6489055 Mon Sep 17 00:00:00 2001
From: Yoshida Hiroshi <yoshida@shiguredo.jp>
Date: Fri, 20 Dec 2024 16:53:55 +0900
Subject: [PATCH 11/19] =?UTF-8?q?=E3=82=B3=E3=82=B9=E3=83=A1?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 amazon_transcribe_handler.go | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/amazon_transcribe_handler.go b/amazon_transcribe_handler.go
index 50baaa0..fc7e753 100644
--- a/amazon_transcribe_handler.go
+++ b/amazon_transcribe_handler.go
@@ -251,7 +251,7 @@ func buildMessage(config Config, alt transcribestreamingservice.Alternative, isP
 	var message string
 	items := alt.Items
 
-	// 句読点以外の content が含まれているかどうか
+	// 句読点のみかどうか
 	punctuationOnly := true
 
 	for _, item := range items {

From 7ff0726556ab6ac265fade51a3e61d22e5a1a123 Mon Sep 17 00:00:00 2001
From: Yoshida Hiroshi <yoshida@shiguredo.jp>
Date: Mon, 23 Dec 2024 11:09:49 +0900
Subject: [PATCH 12/19] =?UTF-8?q?=E5=A4=89=E6=9B=B4=E5=B1=A5=E6=AD=B4?=
 =?UTF-8?q?=E3=82=92=E6=9B=B4=E6=96=B0=E3=81=99=E3=82=8B?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 CHANGES.md | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/CHANGES.md b/CHANGES.md
index dbfa5ac..9eb1c6d 100644
--- a/CHANGES.md
+++ b/CHANGES.md
@@ -11,6 +11,11 @@
 
 ## develop
 
+- [CHANGE] minimum_confidence_score と minimum_transcribed_time を独立させて、minimum_confidence_score が無効でも minimum_transcribed_time が有効な場合は minimum_transcribed_time でのフィルタリングが有効になるように変更する
+  - @Hexa
+- [CHANGE] フィルタリングの結果が句読点のみになった場合はクライアントに結果を返さないように変更する
+  - @Hexa
+
 ### misc
 
 - [CHANGE] GitHub Actions の ubuntu-latest を ubuntu-24.04 に変更する

From fdfb069f7eb57c4d2da1559dc0850b82634458c3 Mon Sep 17 00:00:00 2001
From: Yoshida Hiroshi <yoshida@shiguredo.jp>
Date: Mon, 23 Dec 2024 11:18:03 +0900
Subject: [PATCH 13/19] =?UTF-8?q?=E3=82=B3=E3=82=B9=E3=83=A1?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 amazon_transcribe_handler.go | 7 +++----
 1 file changed, 3 insertions(+), 4 deletions(-)

diff --git a/amazon_transcribe_handler.go b/amazon_transcribe_handler.go
index fc7e753..44d84ac 100644
--- a/amazon_transcribe_handler.go
+++ b/amazon_transcribe_handler.go
@@ -251,8 +251,7 @@ func buildMessage(config Config, alt transcribestreamingservice.Alternative, isP
 	var message string
 	items := alt.Items
 
-	// 句読点のみかどうか
-	punctuationOnly := true
+	includePronunciation := false
 
 	for _, item := range items {
 		if !contentFilterByTranscribedTime(config, *item) {
@@ -264,14 +263,14 @@ func buildMessage(config Config, alt transcribestreamingservice.Alternative, isP
 		}
 
 		if *item.Type == transcribestreamingservice.ItemTypePronunciation {
-			punctuationOnly = false
+			includePronunciation = true
 		}
 
 		message += *item.Content
 	}
 
 	// 各評価の結果、句読点のみかメッセージが空の場合は次へ
-	if punctuationOnly || (message == "") {
+	if !includePronunciation || (message == "") {
 		return "", false
 	}
 

From 20bba27b76017b3b9d96cca05302ec2a2822ffb5 Mon Sep 17 00:00:00 2001
From: Yoshida Hiroshi <yoshida@shiguredo.jp>
Date: Mon, 23 Dec 2024 12:04:33 +0900
Subject: [PATCH 14/19] =?UTF-8?q?go=20=E3=81=AE=E3=83=90=E3=83=BC=E3=82=B8?=
 =?UTF-8?q?=E3=83=A7=E3=83=B3=E3=82=92=E4=B8=8A=E3=81=92=E3=82=8B?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 go.mod |   7 +-
 go.sum | 369 ---------------------------------------------------------
 2 files changed, 1 insertion(+), 375 deletions(-)

diff --git a/go.mod b/go.mod
index c5e3d95..7c6b58b 100644
--- a/go.mod
+++ b/go.mod
@@ -1,6 +1,6 @@
 module github.com/shiguredo/suzu
 
-go 1.22.2
+go 1.23.4
 
 require (
 	cloud.google.com/go/speech v1.23.0
@@ -25,7 +25,6 @@ require (
 	cloud.google.com/go v0.112.1 // indirect
 	cloud.google.com/go/auth v0.3.0 // indirect
 	cloud.google.com/go/auth/oauth2adapt v0.2.2 // indirect
-	cloud.google.com/go/compute v1.24.0 // indirect
 	cloud.google.com/go/compute/metadata v0.3.0 // indirect
 	cloud.google.com/go/longrunning v0.5.6 // indirect
 	github.com/beorn7/perks v1.0.1 // indirect
@@ -45,8 +44,6 @@ require (
 	github.com/labstack/gommon v0.4.2 // indirect
 	github.com/mattn/go-colorable v0.1.13 // indirect
 	github.com/mattn/go-isatty v0.0.20 // indirect
-	github.com/matttproud/golang_protobuf_extensions v1.0.4 // indirect
-	github.com/pion/webrtc/v4 v4.0.1 // indirect
 	github.com/pmezard/go-difflib v1.0.0 // indirect
 	github.com/prometheus/client_golang v1.19.0 // indirect
 	github.com/prometheus/client_model v0.6.1 // indirect
@@ -65,8 +62,6 @@ require (
 	golang.org/x/sys v0.26.0 // indirect
 	golang.org/x/text v0.19.0 // indirect
 	golang.org/x/time v0.5.0 // indirect
-	google.golang.org/appengine v1.6.8 // indirect
-	google.golang.org/genproto v0.0.0-20240227224415-6ceb2ff114de // indirect
 	google.golang.org/genproto/googleapis/api v0.0.0-20240401170217-c3f982113cda // indirect
 	google.golang.org/genproto/googleapis/rpc v0.0.0-20240415180920-8c6c420018be // indirect
 	gopkg.in/yaml.v3 v3.0.1 // indirect
diff --git a/go.sum b/go.sum
index f640911..d9ad9e1 100644
--- a/go.sum
+++ b/go.sum
@@ -1,98 +1,26 @@
 cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
-cloud.google.com/go v0.110.10 h1:LXy9GEO+timppncPIAZoOj3l58LIU9k+kn48AN7IO3Y=
-cloud.google.com/go v0.110.10/go.mod h1:v1OoFqYxiBkUrruItNM3eT4lLByNjxmJSV/xDKJNnic=
-cloud.google.com/go v0.111.0 h1:YHLKNupSD1KqjDbQ3+LVdQ81h/UJbJyZG203cEfnQgM=
-cloud.google.com/go v0.111.0/go.mod h1:0mibmpKP1TyOOFYQY5izo0LnT+ecvOQ0Sg3OdmMiNRU=
-cloud.google.com/go v0.112.0 h1:tpFCD7hpHFlQ8yPwT3x+QeXqc2T6+n6T+hmABHfDUSM=
-cloud.google.com/go v0.112.0/go.mod h1:3jEEVwZ/MHU4djK5t5RHuKOA/GbLddgTdVubX1qnPD4=
 cloud.google.com/go v0.112.1 h1:uJSeirPke5UNZHIb4SxfZklVSiWWVqW4oXlETwZziwM=
 cloud.google.com/go v0.112.1/go.mod h1:+Vbu+Y1UU+I1rjmzeMOb/8RfkKJK2Gyxi1X6jJCZLo4=
-cloud.google.com/go/auth v0.2.2 h1:gmxNJs4YZYcw6YvKRtVBaF2fyUE6UrWPyzU8jHvYfmI=
-cloud.google.com/go/auth v0.2.2/go.mod h1:2bDNJWtWziDT3Pu1URxHHbkHE/BbOCuyUiKIGcNvafo=
 cloud.google.com/go/auth v0.3.0 h1:PRyzEpGfx/Z9e8+lHsbkoUVXD0gnu4MNmm7Gp8TQNIs=
 cloud.google.com/go/auth v0.3.0/go.mod h1:lBv6NKTWp8E3LPzmO1TbiiRKc4drLOfHsgmlH9ogv5w=
-cloud.google.com/go/auth/oauth2adapt v0.2.1 h1:VSPmMmUlT8CkIZ2PzD9AlLN+R3+D1clXMWHHa6vG/Ag=
-cloud.google.com/go/auth/oauth2adapt v0.2.1/go.mod h1:tOdK/k+D2e4GEwfBRA48dKNQiDsqIXxLh7VU319eV0g=
 cloud.google.com/go/auth/oauth2adapt v0.2.2 h1:+TTV8aXpjeChS9M+aTtN/TjdQnzJvmzKFt//oWu7HX4=
 cloud.google.com/go/auth/oauth2adapt v0.2.2/go.mod h1:wcYjgpZI9+Yu7LyYBg4pqSiaRkfEK3GQcpb7C/uyF1Q=
-cloud.google.com/go/compute v1.23.3 h1:6sVlXXBmbd7jNX0Ipq0trII3e4n1/MsADLK6a+aiVlk=
-cloud.google.com/go/compute v1.23.3/go.mod h1:VCgBUoMnIVIR0CscqQiPJLAG25E3ZRZMzcFZeQ+h8CI=
-cloud.google.com/go/compute v1.23.4 h1:EBT9Nw4q3zyE7G45Wvv3MzolIrCJEuHys5muLY0wvAw=
-cloud.google.com/go/compute v1.23.4/go.mod h1:/EJMj55asU6kAFnuZET8zqgwgJ9FvXWXOkkfQZa4ioI=
-cloud.google.com/go/compute v1.24.0 h1:phWcR2eWzRJaL/kOiJwfFsPs4BaKq1j6vnpZrc1YlVg=
-cloud.google.com/go/compute v1.24.0/go.mod h1:kw1/T+h/+tK2LJK0wiPPx1intgdAM3j/g3hFDlscY40=
-cloud.google.com/go/compute/metadata v0.2.3 h1:mg4jlk7mCAj6xXp9UJ4fjI9VUI5rubuGBW5aJ7UnBMY=
-cloud.google.com/go/compute/metadata v0.2.3/go.mod h1:VAV5nSsACxMJvgaAuX6Pk2AawlZn8kiOGuCv6gTkwuA=
 cloud.google.com/go/compute/metadata v0.3.0 h1:Tz+eQXMEqDIKRsmY3cHTL6FVaynIjX2QxYC4trgAKZc=
 cloud.google.com/go/compute/metadata v0.3.0/go.mod h1:zFmK7XCadkQkj6TtorcaGlCW1hT1fIilQDwofLpJ20k=
-cloud.google.com/go/longrunning v0.5.4 h1:w8xEcbZodnA2BbW6sVirkkoC+1gP8wS57EUUgGS0GVg=
-cloud.google.com/go/longrunning v0.5.4/go.mod h1:zqNVncI0BOP8ST6XQD1+VcvuShMmq7+xFSzOL++V0dI=
-cloud.google.com/go/longrunning v0.5.5 h1:GOE6pZFdSrTb4KAiKnXsJBtlE6mEyaW44oKyMILWnOg=
-cloud.google.com/go/longrunning v0.5.5/go.mod h1:WV2LAxD8/rg5Z1cNW6FJ/ZpX4E4VnDnoTk0yawPBB7s=
 cloud.google.com/go/longrunning v0.5.6 h1:xAe8+0YaWoCKr9t1+aWe+OeQgN/iJK1fEgZSXmjuEaE=
 cloud.google.com/go/longrunning v0.5.6/go.mod h1:vUaDrWYOMKRuhiv6JBnn49YxCPz2Ayn9GqyjaBT8/mA=
-cloud.google.com/go/speech v1.21.0 h1:qkxNao58oF8ghAHE1Eghen7XepawYEN5zuZXYWaUTA4=
-cloud.google.com/go/speech v1.21.0/go.mod h1:wwolycgONvfz2EDU8rKuHRW3+wc9ILPsAWoikBEWavY=
-cloud.google.com/go/speech v1.21.1 h1:nuFc+Kj5B8de75nN4FdPyUbI2SiBoHZG6BLurXL56Q0=
-cloud.google.com/go/speech v1.21.1/go.mod h1:E5GHZXYQlkqWQwY5xRSLHw2ci5NMQNG52FfMU1aZrIA=
-cloud.google.com/go/speech v1.22.0 h1:AWpbl2POalAOvO5uudJoaknkFNhATuBVODozDXyTD1Q=
-cloud.google.com/go/speech v1.22.0/go.mod h1:d7pmrSKyrD12c7dRrjqgA/U0eeyZs0i4VpvOlpJXEBA=
-cloud.google.com/go/speech v1.22.1 h1:xo/cmhBtqoqqNg/5I8m0ECXPiqYg2fS2ioOccH+qbKE=
-cloud.google.com/go/speech v1.22.1/go.mod h1:s8C9OLTemdGb4FHX3imHIp5AanwKR4IhdSno0Cg1s7k=
 cloud.google.com/go/speech v1.23.0 h1:evZ9B5S6OBGP5PeJXnYWW1UpgIYV4jbsXwsQr5x7fPM=
 cloud.google.com/go/speech v1.23.0/go.mod h1:a5rtCeVQ9tJglWLBNc6rYEMjfZg6DDaBKq1bEjvH+I8=
 github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
-github.com/aws/aws-sdk-go v1.49.4 h1:qiXsqEeLLhdLgUIyfr5ot+N/dGPWALmtM1SetRmbUlY=
-github.com/aws/aws-sdk-go v1.49.4/go.mod h1:LF8svs817+Nz+DmiMQKTO3ubZ/6IaTpq3TjupRn3Eqk=
-github.com/aws/aws-sdk-go v1.49.9 h1:4xoyi707rsifB1yMsd5vGbAH21aBzwpL3gNRMSmjIyc=
-github.com/aws/aws-sdk-go v1.49.9/go.mod h1:LF8svs817+Nz+DmiMQKTO3ubZ/6IaTpq3TjupRn3Eqk=
-github.com/aws/aws-sdk-go v1.49.13 h1:f4mGztsgnx2dR9r8FQYa9YW/RsKb+N7bgef4UGrOW1Y=
-github.com/aws/aws-sdk-go v1.49.13/go.mod h1:LF8svs817+Nz+DmiMQKTO3ubZ/6IaTpq3TjupRn3Eqk=
-github.com/aws/aws-sdk-go v1.49.16 h1:KAQwhLg296hfffRdh+itA9p7Nx/3cXS/qOa3uF9ssig=
-github.com/aws/aws-sdk-go v1.49.16/go.mod h1:LF8svs817+Nz+DmiMQKTO3ubZ/6IaTpq3TjupRn3Eqk=
-github.com/aws/aws-sdk-go v1.49.21 h1:Rl8KW6HqkwzhATwvXhyr7vD4JFUMi7oXGAw9SrxxIFY=
-github.com/aws/aws-sdk-go v1.49.21/go.mod h1:LF8svs817+Nz+DmiMQKTO3ubZ/6IaTpq3TjupRn3Eqk=
-github.com/aws/aws-sdk-go v1.50.0 h1:HBtrLeO+QyDKnc3t1+5DR1RxodOHCGr8ZcrHudpv7jI=
-github.com/aws/aws-sdk-go v1.50.0/go.mod h1:LF8svs817+Nz+DmiMQKTO3ubZ/6IaTpq3TjupRn3Eqk=
-github.com/aws/aws-sdk-go v1.50.5 h1:H2Aadcgwr7a2aqS6ZwcE+l1mA6ZrTseYCvjw2QLmxIA=
-github.com/aws/aws-sdk-go v1.50.5/go.mod h1:LF8svs817+Nz+DmiMQKTO3ubZ/6IaTpq3TjupRn3Eqk=
-github.com/aws/aws-sdk-go v1.50.10 h1:H3NQvqRUKG+9oysCKTIyylpkqfPA7MiBtzTnu/cIGqE=
-github.com/aws/aws-sdk-go v1.50.10/go.mod h1:LF8svs817+Nz+DmiMQKTO3ubZ/6IaTpq3TjupRn3Eqk=
-github.com/aws/aws-sdk-go v1.50.15 h1:wEMnPfEQQFaoIJwuO18zq/vtG4Ft7NxQ3r9xlEi/8zg=
-github.com/aws/aws-sdk-go v1.50.15/go.mod h1:LF8svs817+Nz+DmiMQKTO3ubZ/6IaTpq3TjupRn3Eqk=
-github.com/aws/aws-sdk-go v1.50.20 h1:xfAnSDVf/azIWTVQXQODp89bubvCS85r70O3nuQ4dnE=
-github.com/aws/aws-sdk-go v1.50.20/go.mod h1:LF8svs817+Nz+DmiMQKTO3ubZ/6IaTpq3TjupRn3Eqk=
-github.com/aws/aws-sdk-go v1.50.25 h1:vhiHtLYybv1Nhx3Kv18BBC6L0aPJHaG9aeEsr92W99c=
-github.com/aws/aws-sdk-go v1.50.25/go.mod h1:LF8svs817+Nz+DmiMQKTO3ubZ/6IaTpq3TjupRn3Eqk=
-github.com/aws/aws-sdk-go v1.50.30 h1:2OelKH1eayeaH7OuL1Y9Ombfw4HK+/k0fEnJNWjyLts=
-github.com/aws/aws-sdk-go v1.50.30/go.mod h1:LF8svs817+Nz+DmiMQKTO3ubZ/6IaTpq3TjupRn3Eqk=
-github.com/aws/aws-sdk-go v1.50.35 h1:llQnNddBI/64pK7pwUFBoWYmg8+XGQUCs214eMbSDZc=
-github.com/aws/aws-sdk-go v1.50.35/go.mod h1:LF8svs817+Nz+DmiMQKTO3ubZ/6IaTpq3TjupRn3Eqk=
-github.com/aws/aws-sdk-go v1.51.1 h1:AFvTihcDPanvptoKS09a4yYmNtPm3+pXlk6uYHmZiFk=
-github.com/aws/aws-sdk-go v1.51.1/go.mod h1:LF8svs817+Nz+DmiMQKTO3ubZ/6IaTpq3TjupRn3Eqk=
-github.com/aws/aws-sdk-go v1.51.6 h1:Ld36dn9r7P9IjU8WZSaswQ8Y/XUCRpewim5980DwYiU=
-github.com/aws/aws-sdk-go v1.51.6/go.mod h1:LF8svs817+Nz+DmiMQKTO3ubZ/6IaTpq3TjupRn3Eqk=
-github.com/aws/aws-sdk-go v1.51.11 h1:El5VypsMIz7sFwAAj/j06JX9UGs4KAbAIEaZ57bNY4s=
-github.com/aws/aws-sdk-go v1.51.11/go.mod h1:LF8svs817+Nz+DmiMQKTO3ubZ/6IaTpq3TjupRn3Eqk=
-github.com/aws/aws-sdk-go v1.51.16 h1:vnWKK8KjbftEkuPX8bRj3WHsLy1uhotn0eXptpvrxJI=
-github.com/aws/aws-sdk-go v1.51.16/go.mod h1:LF8svs817+Nz+DmiMQKTO3ubZ/6IaTpq3TjupRn3Eqk=
-github.com/aws/aws-sdk-go v1.51.21 h1:UrT6JC9R9PkYYXDZBV0qDKTualMr+bfK2eboTknMgbs=
-github.com/aws/aws-sdk-go v1.51.21/go.mod h1:LF8svs817+Nz+DmiMQKTO3ubZ/6IaTpq3TjupRn3Eqk=
-github.com/aws/aws-sdk-go v1.51.25 h1:DjTT8mtmsachhV6yrXR8+yhnG6120dazr720nopRsls=
-github.com/aws/aws-sdk-go v1.51.25/go.mod h1:LF8svs817+Nz+DmiMQKTO3ubZ/6IaTpq3TjupRn3Eqk=
 github.com/aws/aws-sdk-go v1.51.30 h1:RVFkjn9P0JMwnuZCVH0TlV5k9zepHzlbc4943eZMhGw=
 github.com/aws/aws-sdk-go v1.51.30/go.mod h1:LF8svs817+Nz+DmiMQKTO3ubZ/6IaTpq3TjupRn3Eqk=
 github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM=
 github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw=
 github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
-github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44=
-github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
 github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs=
 github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
 github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
 github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc=
-github.com/cncf/xds/go v0.0.0-20230607035331-e9ce68804cb4 h1:/inchEIKaYC1Akx+H+gqO04wryn5h75LSazbRlnya1k=
-github.com/cncf/xds/go v0.0.0-20230607035331-e9ce68804cb4/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs=
 github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc=
 github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
 github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
@@ -102,13 +30,9 @@ github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymF
 github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
 github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98=
 github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
-github.com/envoyproxy/protoc-gen-validate v1.0.2 h1:QkIBuU5k+x7/QXPvPPnWXWlCdaBFApVqftFV6k087DA=
-github.com/envoyproxy/protoc-gen-validate v1.0.2/go.mod h1:GpiZQP3dDbg4JouG/NNS7QWXpgx6x8QiMKdmN72jogE=
 github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg=
 github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U=
 github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
-github.com/go-logr/logr v1.3.0 h1:2y3SDp0ZXuc6/cjLSZ+Q3ir+QB9T/iG5yYRXqsagWSY=
-github.com/go-logr/logr v1.3.0/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
 github.com/go-logr/logr v1.4.1 h1:pKouT5E8xu9zeFC39JXRDukb6JFQPXM5p5I91188VAQ=
 github.com/go-logr/logr v1.4.1/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
 github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag=
@@ -130,10 +54,6 @@ github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:W
 github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0=
 github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8=
 github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
-github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk=
-github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
-github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg=
-github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
 github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek=
 github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps=
 github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
@@ -142,7 +62,6 @@ github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMyw
 github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
 github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
 github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
-github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
 github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI=
 github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
 github.com/google/s2a-go v0.1.7 h1:60BLSyTrOV4/haCDW4zb1guZItoSq8foHCXrAnjBo/o=
@@ -150,12 +69,6 @@ github.com/google/s2a-go v0.1.7/go.mod h1:50CgR4k1jNlWBu4UfS4AcfhVe1r6pdZPygJ3R8
 github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
 github.com/googleapis/enterprise-certificate-proxy v0.3.2 h1:Vie5ybvEvT75RniqhfFxPRy3Bf7vr3h0cechB90XaQs=
 github.com/googleapis/enterprise-certificate-proxy v0.3.2/go.mod h1:VLSiSSBs/ksPL8kq3OBOQ6WRI2QnaFynd1DCjZ62+V0=
-github.com/googleapis/gax-go/v2 v2.12.0 h1:A+gCJKdRfqXkr+BIRGtZLibNXf0m1f9E4HG56etFpas=
-github.com/googleapis/gax-go/v2 v2.12.0/go.mod h1:y+aIqrI5eb1YGMVJfuV3185Ts/D7qKpsEkdD5+I6QGU=
-github.com/googleapis/gax-go/v2 v2.12.1 h1:9F8GV9r9ztXyAi00gsMQHNoF51xPZm8uj1dpYt2ZETM=
-github.com/googleapis/gax-go/v2 v2.12.1/go.mod h1:61M8vcyyXR2kqKFxKrfA22jaA8JGF7Dc8App1U3H6jc=
-github.com/googleapis/gax-go/v2 v2.12.2 h1:mhN09QQW1jEWeMF74zGR81R30z4VJzjZsfkUhuHF+DA=
-github.com/googleapis/gax-go/v2 v2.12.2/go.mod h1:61M8vcyyXR2kqKFxKrfA22jaA8JGF7Dc8App1U3H6jc=
 github.com/googleapis/gax-go/v2 v2.12.3 h1:5/zPPDvw8Q1SuXjrqrZslrqT7dL/uJT2CQii/cLCKqA=
 github.com/googleapis/gax-go/v2 v2.12.3/go.mod h1:AKloxT6GtNbaLm8QTNSidHUVsHYcBHwWRvkNFJUQcS4=
 github.com/jmespath/go-jmespath v0.4.0 h1:BEgLn5cpjn8UN1mAw4NjwDrS35OdebyEtFe+9YPoQUg=
@@ -166,268 +79,100 @@ github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
 github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk=
 github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
 github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
-github.com/labstack/echo-contrib v0.15.0 h1:9K+oRU265y4Mu9zpRDv3X+DGTqUALY6oRHCSZZKCRVU=
-github.com/labstack/echo-contrib v0.15.0/go.mod h1:lei+qt5CLB4oa7VHTE0yEfQSEB9XTJI1LUqko9UWvo4=
-github.com/labstack/echo-contrib v0.16.0 h1:vk5Kd+egpTOJxD3l+3IvZzQWPbrXiYxhkkgkJL99j/w=
-github.com/labstack/echo-contrib v0.16.0/go.mod h1:mjX5VB3OqJcroIEycptBOY9Hr7rK+unq79W8QFKGNV0=
 github.com/labstack/echo-contrib v0.17.1 h1:7I/he7ylVKsDUieaGRZ9XxxTYOjfQwVzHzUYrNykfCU=
 github.com/labstack/echo-contrib v0.17.1/go.mod h1:SnsCZtwHBAZm5uBSAtQtXQHI3wqEA73hvTn0bYMKnZA=
-github.com/labstack/echo/v4 v4.11.3 h1:Upyu3olaqSHkCjs1EJJwQ3WId8b8b1hxbogyommKktM=
-github.com/labstack/echo/v4 v4.11.3/go.mod h1:UcGuQ8V6ZNRmSweBIJkPvGfwCMIlFmiqrPqiEBfPYws=
-github.com/labstack/echo/v4 v4.11.4 h1:vDZmA+qNeh1pd/cCkEicDMrjtrnMGQ1QFI9gWN1zGq8=
-github.com/labstack/echo/v4 v4.11.4/go.mod h1:noh7EvLwqDsmh/X/HWKPUl1AjzJrhyptRyEbQJfxen8=
 github.com/labstack/echo/v4 v4.12.0 h1:IKpw49IMryVB2p1a4dzwlhP1O2Tf2E0Ir/450lH+kI0=
 github.com/labstack/echo/v4 v4.12.0/go.mod h1:UP9Cr2DJXbOK3Kr9ONYzNowSh7HP0aG0ShAyycHSJvM=
-github.com/labstack/gommon v0.4.0 h1:y7cvthEAEbU0yHOf4axH8ZG2NH8knB9iNSoTO8dyIk8=
-github.com/labstack/gommon v0.4.0/go.mod h1:uW6kP17uPlLJsD3ijUYn3/M5bAxtlZhMI6m3MFxTMTM=
 github.com/labstack/gommon v0.4.2 h1:F8qTUNXgG1+6WQmqoUWnz8WiEU60mXVVw0P4ht1WRA0=
 github.com/labstack/gommon v0.4.2/go.mod h1:QlUFxVM+SNXhDL/Z7YhocGIBYOiwB0mXm1+1bAPHPyU=
-github.com/mattn/go-colorable v0.1.11/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4=
 github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA=
 github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg=
-github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94=
 github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM=
-github.com/mattn/go-isatty v0.0.19 h1:JITubQf0MOLdlGRuRq+jtsDlekdYPia9ZFsB8h/APPA=
 github.com/mattn/go-isatty v0.0.19/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
 github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY=
 github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
-github.com/matttproud/golang_protobuf_extensions v1.0.4 h1:mmDVorXM7PCGKw94cs5zkfA9PSy5pEvNWRP0ET0TIVo=
-github.com/matttproud/golang_protobuf_extensions v1.0.4/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4=
 github.com/pion/randutil v0.1.0 h1:CFG1UdESneORglEsnimhUjf33Rwjubwj6xfiOXBa3mA=
 github.com/pion/randutil v0.1.0/go.mod h1:XcJrSMMbbMRhASFVOlj/5hQial/Y8oH/HVo7TBZq+j8=
-github.com/pion/rtp v1.8.3 h1:VEHxqzSVQxCkKDSHro5/4IUUG1ea+MFdqR2R3xSpNU8=
-github.com/pion/rtp v1.8.3/go.mod h1:pBGHaFt/yW7bf1jjWAoUjpSNoDnw98KTMg+jWWvziqU=
-github.com/pion/rtp v1.8.4 h1:VqNGMNjMDMy9y0d+h+0dfjiWVKUEDQvA963jhJwu200=
-github.com/pion/rtp v1.8.4/go.mod h1:pBGHaFt/yW7bf1jjWAoUjpSNoDnw98KTMg+jWWvziqU=
-github.com/pion/rtp v1.8.5 h1:uYzINfaK+9yWs7r537z/Rc1SvT8ILjBcmDOpJcTB+OU=
-github.com/pion/rtp v1.8.5/go.mod h1:pBGHaFt/yW7bf1jjWAoUjpSNoDnw98KTMg+jWWvziqU=
-github.com/pion/rtp v1.8.6 h1:MTmn/b0aWWsAzux2AmP8WGllusBVw4NPYPVFFd7jUPw=
-github.com/pion/rtp v1.8.6/go.mod h1:pBGHaFt/yW7bf1jjWAoUjpSNoDnw98KTMg+jWWvziqU=
 github.com/pion/rtp v1.8.9 h1:E2HX740TZKaqdcPmf4pw6ZZuG8u5RlMMt+l3dxeu6Wk=
 github.com/pion/rtp v1.8.9/go.mod h1:pBGHaFt/yW7bf1jjWAoUjpSNoDnw98KTMg+jWWvziqU=
-github.com/pion/webrtc/v4 v4.0.1 h1:6Unwc6JzoTsjxetcAIoWH81RUM4K5dBc1BbJGcF9WVE=
-github.com/pion/webrtc/v4 v4.0.1/go.mod h1:SfNn8CcFxR6OUVjLXVslAQ3a3994JhyE3Hw1jAuqEto=
 github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
 github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
 github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
-github.com/prometheus/client_golang v1.16.0 h1:yk/hx9hDbrGHovbci4BY+pRMfSuuat626eFsHb7tmT8=
-github.com/prometheus/client_golang v1.16.0/go.mod h1:Zsulrv/L9oM40tJ7T815tM89lFEugiJ9HzIqaAx4LKc=
 github.com/prometheus/client_golang v1.19.0 h1:ygXvpU1AoN1MhdzckN+PyD9QJOSD4x7kmXYlnfbA6JU=
 github.com/prometheus/client_golang v1.19.0/go.mod h1:ZRM9uEAypZakd+q/x7+gmsvXdURP+DABIEIjnmDdp+k=
 github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
-github.com/prometheus/client_model v0.4.0 h1:5lQXD3cAg1OXBf4Wq03gTrXHeaV0TQvGfUooCfx1yqY=
-github.com/prometheus/client_model v0.4.0/go.mod h1:oMQmHW1/JoDwqLtg57MGgP/Fb1CJEYF2imWWhWtMkYU=
-github.com/prometheus/client_model v0.6.0 h1:k1v3CzpSRUTrKMppY35TLwPvxHqBu0bYgxZzqGIgaos=
-github.com/prometheus/client_model v0.6.0/go.mod h1:NTQHnmxFpouOD0DpvP4XujX3CdOAGQPoaGhyTchlyt8=
 github.com/prometheus/client_model v0.6.1 h1:ZKSh/rekM+n3CeS952MLRAdFwIKqeY8b62p8ais2e9E=
 github.com/prometheus/client_model v0.6.1/go.mod h1:OrxVMOVHjw3lKMa8+x6HeMGkHMQyHDk9E3jmP2AmGiY=
-github.com/prometheus/common v0.44.0 h1:+5BrQJwiBB9xsMygAB3TNvpQKOwlkc25LbISbrdOOfY=
-github.com/prometheus/common v0.44.0/go.mod h1:ofAIvZbQ1e/nugmZGz4/qCb9Ap1VoSTIO7x0VV9VvuY=
-github.com/prometheus/common v0.50.0 h1:YSZE6aa9+luNa2da6/Tik0q0A5AbR+U003TItK57CPQ=
-github.com/prometheus/common v0.50.0/go.mod h1:wHFBCEVWVmHMUpg7pYcOm2QUR/ocQdYSJVQJKnHc3xQ=
 github.com/prometheus/common v0.53.0 h1:U2pL9w9nmJwJDa4qqLQ3ZaePJ6ZTwt7cMD3AG3+aLCE=
 github.com/prometheus/common v0.53.0/go.mod h1:BrxBKv3FWBIGXw89Mg1AeBq7FSyRzXWI3l3e7W3RN5U=
-github.com/prometheus/procfs v0.11.1 h1:xRC8Iq1yyca5ypa9n1EZnWZkt7dwcoRPQwX/5gwaUuI=
-github.com/prometheus/procfs v0.11.1/go.mod h1:eesXgaPo1q7lBpVMoMy0ZOFTth9hBn4W/y0/p/ScXhY=
 github.com/prometheus/procfs v0.13.0 h1:GqzLlQyfsPbaEHaQkO7tbDlriv/4o5Hudv6OXHGKX7o=
 github.com/prometheus/procfs v0.13.0/go.mod h1:cd4PFCR54QLnGKPaKGA6l+cfuNXtht43ZKY6tow0Y1g=
 github.com/rogpeppe/go-internal v1.10.0 h1:TMyTOH3F/DB16zRVcYyreMH6GnZZrwQVAoYjRBZyWFQ=
 github.com/rogpeppe/go-internal v1.10.0/go.mod h1:UQnix2H7Ngw/k4C5ijL5+65zddjncjaFoBhdsK/akog=
 github.com/rs/xid v1.5.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg=
-github.com/rs/zerolog v1.31.0 h1:FcTR3NnLWW+NnTwwhFWiJSZr4ECLpqCm6QsEnyvbV4A=
-github.com/rs/zerolog v1.31.0/go.mod h1:/7mN4D5sKwJLZQ2b/znpjC3/GQWY/xaDXUM0kKWRHss=
 github.com/rs/zerolog v1.32.0 h1:keLypqrlIjaFsbmJOBdB/qvyF8KEtCWHwobLp5l/mQ0=
 github.com/rs/zerolog v1.32.0/go.mod h1:/7mN4D5sKwJLZQ2b/znpjC3/GQWY/xaDXUM0kKWRHss=
 github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
 github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
 github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo=
-github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
 github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
 github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
 github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
-github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk=
-github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
 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/valyala/bytebufferpool v1.0.0 h1:GqA5TC/0021Y/b9FG4Oi9Mr3q7XYx6KllzawFIhcdPw=
 github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc=
-github.com/valyala/fasttemplate v1.2.1/go.mod h1:KHLXt3tVN2HBp8eijSv/kGJopbvo7S+qRAEEKiv+SiQ=
 github.com/valyala/fasttemplate v1.2.2 h1:lxLXG0uE3Qnshl9QyaK6XJxMXlQZELvChBOCmQD0Loo=
 github.com/valyala/fasttemplate v1.2.2/go.mod h1:KHLXt3tVN2HBp8eijSv/kGJopbvo7S+qRAEEKiv+SiQ=
-github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=
 go.opencensus.io v0.24.0 h1:y73uSU6J157QMP2kn2r30vwW1A2W2WFwSCGnAVxeaD0=
 go.opencensus.io v0.24.0/go.mod h1:vNK8G9p7aAivkbmorf4v+7Hgx+Zs0yY+0fOtgBfjQKo=
-go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.46.1 h1:SpGay3w+nEwMpfVnbqOLH5gY52/foP8RE8UzTZ1pdSE=
-go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.46.1/go.mod h1:4UoMYEZOC0yN/sPGH76KPkkU7zgiEWYWL9vwmbnTJPE=
-go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.47.0 h1:UNQQKPfTDe1J81ViolILjTKPr9WetKW6uei2hFgJmFs=
-go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.47.0/go.mod h1:r9vWsPS/3AQItv3OSlEJ/E4mbrhUbbw18meOjArPtKQ=
-go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.48.0 h1:P+/g8GpuJGYbOp2tAdKrIPUX9JO02q8Q0YNlHolpibA=
-go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.48.0/go.mod h1:tIKj3DbO8N9Y2xo52og3irLsPI4GW02DSMtrVgNMgxg=
 go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.49.0 h1:4Pp6oUg3+e/6M4C0A/3kJ2VYa++dsWVTtGgLVj5xtHg=
 go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.49.0/go.mod h1:Mjt1i1INqiaoZOMGR1RIUJN+i3ChKoFRqzrRQhlkbs0=
-go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.46.1 h1:aFJWCqJMNjENlcleuuOkGAPH82y0yULBScfXcIEdS24=
-go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.46.1/go.mod h1:sEGXWArGqc3tVa+ekntsN65DmVbVeW+7lTKTjZF3/Fo=
-go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.47.0 h1:sv9kVfal0MK0wBMCOGr+HeJm9v803BkJxGrk2au7j08=
-go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.47.0/go.mod h1:SK2UL73Zy1quvRPonmOmRDiWk1KBV3LyIeeIxcEApWw=
-go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.48.0 h1:doUP+ExOpH3spVTLS0FcWGLnQrPct/hD/bCPbDRUEAU=
-go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.48.0/go.mod h1:rdENBZMT2OE6Ne/KLwpiXudnAsbdrdBaqBvTN8M8BgA=
 go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0 h1:jq9TW8u3so/bN+JPT166wjOI6/vQPF6Xe7nMNIltagk=
 go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0/go.mod h1:p8pYQP+m5XfbZm9fxtSKAbM6oIllS7s2AfxrChvc7iw=
-go.opentelemetry.io/otel v1.21.0 h1:hzLeKBZEL7Okw2mGzZ0cc4k/A7Fta0uoPgaJCr8fsFc=
-go.opentelemetry.io/otel v1.21.0/go.mod h1:QZzNPQPm1zLX4gZK4cMi+71eaorMSGT3A4znnUvNNEo=
-go.opentelemetry.io/otel v1.22.0 h1:xS7Ku+7yTFvDfDraDIJVpw7XPyuHlB9MCiqqX5mcJ6Y=
-go.opentelemetry.io/otel v1.22.0/go.mod h1:eoV4iAi3Ea8LkAEI9+GFT44O6T/D0GWAVFyZVCC6pMI=
-go.opentelemetry.io/otel v1.23.0 h1:Df0pqjqExIywbMCMTxkAwzjLZtRf+bBKLbUcpxO2C9E=
-go.opentelemetry.io/otel v1.23.0/go.mod h1:YCycw9ZeKhcJFrb34iVSkyT0iczq/zYDtZYFufObyB0=
 go.opentelemetry.io/otel v1.24.0 h1:0LAOdjNmQeSTzGBzduGe/rU4tZhMwL5rWgtp9Ku5Jfo=
 go.opentelemetry.io/otel v1.24.0/go.mod h1:W7b9Ozg4nkF5tWI5zsXkaKKDjdVjpD4oAt9Qi/MArHo=
-go.opentelemetry.io/otel/metric v1.21.0 h1:tlYWfeo+Bocx5kLEloTjbcDwBuELRrIFxwdQ36PlJu4=
-go.opentelemetry.io/otel/metric v1.21.0/go.mod h1:o1p3CA8nNHW8j5yuQLdc1eeqEaPfzug24uvsyIEJRWM=
-go.opentelemetry.io/otel/metric v1.22.0 h1:lypMQnGyJYeuYPhOM/bgjbFM6WE44W1/T45er4d8Hhg=
-go.opentelemetry.io/otel/metric v1.22.0/go.mod h1:evJGjVpZv0mQ5QBRJoBF64yMuOf4xCWdXjK8pzFvliY=
-go.opentelemetry.io/otel/metric v1.23.0 h1:pazkx7ss4LFVVYSxYew7L5I6qvLXHA0Ap2pwV+9Cnpo=
-go.opentelemetry.io/otel/metric v1.23.0/go.mod h1:MqUW2X2a6Q8RN96E2/nqNoT+z9BSms20Jb7Bbp+HiTo=
 go.opentelemetry.io/otel/metric v1.24.0 h1:6EhoGWWK28x1fbpA4tYTOWBkPefTDQnb8WSGXlc88kI=
 go.opentelemetry.io/otel/metric v1.24.0/go.mod h1:VYhLe1rFfxuTXLgj4CBiyz+9WYBA8pNGJgDcSFRKBco=
-go.opentelemetry.io/otel/trace v1.21.0 h1:WD9i5gzvoUPuXIXH24ZNBudiarZDKuekPqi/E8fpfLc=
-go.opentelemetry.io/otel/trace v1.21.0/go.mod h1:LGbsEB0f9LGjN+OZaQQ26sohbOmiMR+BaslueVtS/qQ=
-go.opentelemetry.io/otel/trace v1.22.0 h1:Hg6pPujv0XG9QaVbGOBVHunyuLcCC3jN7WEhPx83XD0=
-go.opentelemetry.io/otel/trace v1.22.0/go.mod h1:RbbHXVqKES9QhzZq/fE5UnOSILqRt40a21sPw2He1xo=
-go.opentelemetry.io/otel/trace v1.23.0 h1:37Ik5Ib7xfYVb4V1UtnT97T1jI+AoIYkJyPkuL4iJgI=
-go.opentelemetry.io/otel/trace v1.23.0/go.mod h1:GSGTbIClEsuZrGIzoEHqsVfxgn5UkggkflQwDScNUsk=
 go.opentelemetry.io/otel/trace v1.24.0 h1:CsKnnL4dUAr/0llH9FKuc698G04IrpWV0MQA/Y1YELI=
 go.opentelemetry.io/otel/trace v1.24.0/go.mod h1:HPc3Xr/cOApsBI154IU0OI0HJexz+aw5uPdbs3UCjNU=
 golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
 golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
-golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
-golang.org/x/crypto v0.16.0 h1:mMMrFzRSCF0GvB7Ne27XVtVAaXLrPmgPC7/v0tkwHaY=
-golang.org/x/crypto v0.16.0/go.mod h1:gCAAfMLgwOJRpTjQ2zCCt2OcSfYMTeZVSRtQlPC7Nq4=
-golang.org/x/crypto v0.17.0 h1:r8bRNjWL3GshPW3gkd+RpvzWrZAwPS49OmTGZ/uhM4k=
-golang.org/x/crypto v0.17.0/go.mod h1:gCAAfMLgwOJRpTjQ2zCCt2OcSfYMTeZVSRtQlPC7Nq4=
-golang.org/x/crypto v0.18.0 h1:PGVlW0xEltQnzFZ55hkuX5+KLyrMYhHld1YHO4AKcdc=
-golang.org/x/crypto v0.18.0/go.mod h1:R0j02AL6hcrfOiy9T4ZYp/rcWeMxM3L6QYxlOuEG1mg=
-golang.org/x/crypto v0.19.0 h1:ENy+Az/9Y1vSrlrvBSyna3PITt4tiZLf7sgCjZBX7Wo=
-golang.org/x/crypto v0.19.0/go.mod h1:Iy9bg/ha4yyC70EfRS8jz+B6ybOBKMaSxLj6P6oBDfU=
-golang.org/x/crypto v0.21.0 h1:X31++rzVUdKhX5sWmSOFZxx8UW/ldWx55cbf08iNAMA=
-golang.org/x/crypto v0.21.0/go.mod h1:0BP7YvVV9gBbVKyeTG0Gyn+gZm94bibOW5BjDEYAOMs=
-golang.org/x/crypto v0.22.0 h1:g1v0xeRhjcugydODzvb3mEM9SQ0HGp9s/nh3COQ/C30=
-golang.org/x/crypto v0.22.0/go.mod h1:vr6Su+7cTlO45qkww3VDJlzDn0ctJvRgYbC2NvXHt+M=
 golang.org/x/crypto v0.28.0 h1:GBDwsMXVQi34v5CCYUm2jkJvu4cbtru2U4TN2PSyQnw=
 golang.org/x/crypto v0.28.0/go.mod h1:rmgy+3RHxRZMyY0jjAJShp2zgEdOqj2AO7U0pYmeQ7U=
 golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
-golang.org/x/exp v0.0.0-20231214170342-aacd6d4b4611 h1:qCEDpW1G+vcj3Y7Fy52pEM1AWm3abj8WimGYejI3SC4=
-golang.org/x/exp v0.0.0-20231214170342-aacd6d4b4611/go.mod h1:iRJReGqOEeBhDZGkGbynYwcHlctCvnjTYIamk7uXpHI=
-golang.org/x/exp v0.0.0-20231219180239-dc181d75b848 h1:+iq7lrkxmFNBM7xx+Rae2W6uyPfhPeDWD+n+JgppptE=
-golang.org/x/exp v0.0.0-20231219180239-dc181d75b848/go.mod h1:iRJReGqOEeBhDZGkGbynYwcHlctCvnjTYIamk7uXpHI=
-golang.org/x/exp v0.0.0-20231226003508-02704c960a9b h1:kLiC65FbiHWFAOu+lxwNPujcsl8VYyTYYEZnsOO1WK4=
-golang.org/x/exp v0.0.0-20231226003508-02704c960a9b/go.mod h1:iRJReGqOEeBhDZGkGbynYwcHlctCvnjTYIamk7uXpHI=
-golang.org/x/exp v0.0.0-20240103183307-be819d1f06fc h1:ao2WRsKSzW6KuUY9IWPwWahcHCgR0s52IfwutMfEbdM=
-golang.org/x/exp v0.0.0-20240103183307-be819d1f06fc/go.mod h1:iRJReGqOEeBhDZGkGbynYwcHlctCvnjTYIamk7uXpHI=
-golang.org/x/exp v0.0.0-20240112132812-db7319d0e0e3 h1:hNQpMuAJe5CtcUqCXaWga3FHu+kQvCqcsoVaQgSV60o=
-golang.org/x/exp v0.0.0-20240112132812-db7319d0e0e3/go.mod h1:idGWGoKP1toJGkd5/ig9ZLuPcZBC3ewk7SzmH0uou08=
-golang.org/x/exp v0.0.0-20240119083558-1b970713d09a h1:Q8/wZp0KX97QFTc2ywcOE0YRjZPVIx+MXInMzdvQqcA=
-golang.org/x/exp v0.0.0-20240119083558-1b970713d09a/go.mod h1:idGWGoKP1toJGkd5/ig9ZLuPcZBC3ewk7SzmH0uou08=
-golang.org/x/exp v0.0.0-20240205201215-2c58cdc269a3 h1:/RIbNt/Zr7rVhIkQhooTxCxFcdWLGIKnZA4IXNFSrvo=
-golang.org/x/exp v0.0.0-20240205201215-2c58cdc269a3/go.mod h1:idGWGoKP1toJGkd5/ig9ZLuPcZBC3ewk7SzmH0uou08=
-golang.org/x/exp v0.0.0-20240213143201-ec583247a57a h1:HinSgX1tJRX3KsL//Gxynpw5CTOAIPhgL4W8PNiIpVE=
-golang.org/x/exp v0.0.0-20240213143201-ec583247a57a/go.mod h1:CxmFvTBINI24O/j8iY7H1xHzx2i4OsyguNBmN/uPtqc=
-golang.org/x/exp v0.0.0-20240222234643-814bf88cf225 h1:LfspQV/FYTatPTr/3HzIcmiUFH7PGP+OQ6mgDYo3yuQ=
-golang.org/x/exp v0.0.0-20240222234643-814bf88cf225/go.mod h1:CxmFvTBINI24O/j8iY7H1xHzx2i4OsyguNBmN/uPtqc=
-golang.org/x/exp v0.0.0-20240314144324-c7f7c6466f7f h1:3CW0unweImhOzd5FmYuRsD4Y4oQFKZIjAnKbjV4WIrw=
-golang.org/x/exp v0.0.0-20240314144324-c7f7c6466f7f/go.mod h1:CxmFvTBINI24O/j8iY7H1xHzx2i4OsyguNBmN/uPtqc=
-golang.org/x/exp v0.0.0-20240318143956-a85f2c67cd81 h1:6R2FC06FonbXQ8pK11/PDFY6N6LWlf9KlzibaCapmqc=
-golang.org/x/exp v0.0.0-20240318143956-a85f2c67cd81/go.mod h1:CQ1k9gNrJ50XIzaKCRR2hssIjF07kZFEiieALBM/ARQ=
-golang.org/x/exp v0.0.0-20240325151524-a685a6edb6d8 h1:aAcj0Da7eBAtrTp03QXWvm88pSyOt+UgdZw2BFZ+lEw=
-golang.org/x/exp v0.0.0-20240325151524-a685a6edb6d8/go.mod h1:CQ1k9gNrJ50XIzaKCRR2hssIjF07kZFEiieALBM/ARQ=
-golang.org/x/exp v0.0.0-20240404231335-c0f41cb1a7a0 h1:985EYyeCOxTpcgOTJpflJUwOeEz0CQOdPt73OzpE9F8=
-golang.org/x/exp v0.0.0-20240404231335-c0f41cb1a7a0/go.mod h1:/lliqkxwWAhPjf5oSOIJup2XcqJaw8RGS6k3TGEc7GI=
-golang.org/x/exp v0.0.0-20240409090435-93d18d7e34b8 h1:ESSUROHIBHg7USnszlcdmjBEwdMj9VUvU+OPk4yl2mc=
-golang.org/x/exp v0.0.0-20240409090435-93d18d7e34b8/go.mod h1:/lliqkxwWAhPjf5oSOIJup2XcqJaw8RGS6k3TGEc7GI=
 golang.org/x/exp v0.0.0-20240416160154-fe59bbe5cc7f h1:99ci1mjWVBWwJiEKYY6jWa4d2nTQVIEhZIptnrVb1XY=
 golang.org/x/exp v0.0.0-20240416160154-fe59bbe5cc7f/go.mod h1:/lliqkxwWAhPjf5oSOIJup2XcqJaw8RGS6k3TGEc7GI=
 golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
 golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
 golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
-golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
 golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
 golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
 golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
 golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
 golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
-golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
 golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
-golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
-golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
-golang.org/x/net v0.19.0 h1:zTwKpTd2XuCqf8huc7Fo2iSy+4RHPd10s4KzeTnVr1c=
-golang.org/x/net v0.19.0/go.mod h1:CfAk/cbD4CthTvqiEl8NpboMuiuOYsAr/7NOjZJtv1U=
-golang.org/x/net v0.20.0 h1:aCL9BSgETF1k+blQaYUBx9hJ9LOGP3gAVemcZlf1Kpo=
-golang.org/x/net v0.20.0/go.mod h1:z8BVo6PvndSri0LbOE3hAn0apkU+1YvI6E70E9jsnvY=
-golang.org/x/net v0.21.0 h1:AQyQV4dYCvJ7vGmJyKki9+PBdyvhkSd8EIx/qb0AYv4=
-golang.org/x/net v0.21.0/go.mod h1:bIjVDfnllIU7BJ2DNgfnXvpSvtn8VRwhlsaeUTyUS44=
-golang.org/x/net v0.22.0 h1:9sGLhx7iRIHEiX0oAJ3MRZMUCElJgy7Br1nO+AMN3Tc=
-golang.org/x/net v0.22.0/go.mod h1:JKghWKKOSdJwpW2GEx0Ja7fmaKnMsbu+MWVZTokSYmg=
-golang.org/x/net v0.24.0 h1:1PcaxkF854Fu3+lvBIx5SYn9wRlBzzcnHZSiaFFAb0w=
-golang.org/x/net v0.24.0/go.mod h1:2Q7sJY5mzlzWjKtYUEXSlBWCdyaioyXzRB2RtU8KVE8=
 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/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
-golang.org/x/oauth2 v0.15.0 h1:s8pnnxNVzjWyrvYdFUQq5llS1PX2zhPXmccZv99h7uQ=
-golang.org/x/oauth2 v0.15.0/go.mod h1:q48ptWNTY5XWf+JNten23lcvHpLJ0ZSxF5ttTHKVCAM=
-golang.org/x/oauth2 v0.16.0 h1:aDkGMBSYxElaoP81NpoUoz2oo2R2wHdZpGToUxfyQrQ=
-golang.org/x/oauth2 v0.16.0/go.mod h1:hqZ+0LWXsiVoZpeld6jVt06P3adbS2Uu911W1SsJv2o=
-golang.org/x/oauth2 v0.17.0 h1:6m3ZPmLEFdVxKKWnKq4VqZ60gutO35zm+zrAHVmHyDQ=
-golang.org/x/oauth2 v0.17.0/go.mod h1:OzPDGQiuQMguemayvdylqddI7qcD9lnSDb+1FiwQ5HA=
-golang.org/x/oauth2 v0.18.0 h1:09qnuIAgzdx1XplqJvW6CQqMCtGZykZWcXzPMPUusvI=
-golang.org/x/oauth2 v0.18.0/go.mod h1:Wf7knwG0MPoWIMMBgFlEaSUDaKskp0dCfrlJRJXbBi8=
 golang.org/x/oauth2 v0.19.0 h1:9+E/EZBCbTLNrbN35fHv/a/d/mOBatymz1zbtQrXpIg=
 golang.org/x/oauth2 v0.19.0/go.mod h1:vYi7skDa1x015PmRRYZ7+s1cWyPgrPiSYRe4rnsexc8=
 golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.5.0 h1:60k92dhOjHxJkrqnwsfl8KuaHbn/5dl0lUPUklKo3qE=
-golang.org/x/sync v0.5.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
-golang.org/x/sync v0.6.0 h1:5BMeUDZ7vkXGfEr1x9B4bRcTH4lpkTkpdh0T/J+qjbQ=
-golang.org/x/sync v0.6.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
-golang.org/x/sync v0.7.0 h1:YsImfSBoP9QPYL0xyKJPq0gcaJdG3rInoqxTWbfQu9M=
-golang.org/x/sync v0.7.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
 golang.org/x/sync v0.8.0 h1:3NFvSEYkUoMifnESzZl15y791HH1qU2xm6eCJU5ZPXQ=
 golang.org/x/sync v0.8.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
 golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
 golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
 golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.0.0-20211103235746-7861aae1554b/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.15.0 h1:h48lPFYpsTvQJZF4EKyI4aLHaev3CxivZmv7yZig9pc=
-golang.org/x/sys v0.15.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
-golang.org/x/sys v0.16.0 h1:xWw16ngr6ZMtmxDyKyIgsE93KNKz5HKmMa3b8ALHidU=
-golang.org/x/sys v0.16.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
-golang.org/x/sys v0.17.0 h1:25cE3gD+tdBA7lp7QfhuV+rJiE9YXTcS3VG1SqssI/Y=
-golang.org/x/sys v0.17.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
-golang.org/x/sys v0.18.0 h1:DBdB3niSjOA/O0blCZBqDefyWNYveAYMNF1Wum0DYQ4=
-golang.org/x/sys v0.18.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
-golang.org/x/sys v0.19.0 h1:q5f1RH2jigJ1MoAWp2KTp3gm5zAGFUTarQZ5U386+4o=
-golang.org/x/sys v0.19.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
 golang.org/x/sys v0.26.0 h1:KHjCJyddX0LoSTb3J+vWpupP9p0oznkqVk/IfjymZbo=
 golang.org/x/sys v0.26.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-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
 golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
 golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
-golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
-golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ=
-golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ=
-golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=
 golang.org/x/text v0.19.0 h1:kTxAhCbGbxhK0IwgSKiMO5awPoDQ0RpfiVYBfK860YM=
 golang.org/x/text v0.19.0/go.mod h1:BuEKDfySbSR4drPmRPG/7iBdf8hvFMuRexcpahXilzY=
 golang.org/x/time v0.5.0 h1:o7cqy6amK/52YcAKIPlM3a+Fpj35zvRj2TP+e1xFSfk=
@@ -437,109 +182,16 @@ golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGm
 golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
 golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
 golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
-golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
-golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc=
-golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
 golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-google.golang.org/api v0.154.0 h1:X7QkVKZBskztmpPKWQXgjJRPA2dJYrL6r+sYPRLj050=
-google.golang.org/api v0.154.0/go.mod h1:qhSMkM85hgqiokIYsrRyKxrjfBeIhgl4Z2JmeRkYylc=
-google.golang.org/api v0.155.0 h1:vBmGhCYs0djJttDNynWo44zosHlPvHmA0XiN2zP2DtA=
-google.golang.org/api v0.155.0/go.mod h1:GI5qK5f40kCpHfPn6+YzGAByIKWv8ujFnmoWm7Igduk=
-google.golang.org/api v0.156.0 h1:yloYcGbBtVYjLKQe4enCunxvwn3s2w/XPrrhVf6MsvQ=
-google.golang.org/api v0.156.0/go.mod h1:bUSmn4KFO0Q+69zo9CNIDp4Psi6BqM0np0CbzKRSiSY=
-google.golang.org/api v0.157.0 h1:ORAeqmbrrozeyw5NjnMxh7peHO0UzV4wWYSwZeCUb20=
-google.golang.org/api v0.157.0/go.mod h1:+z4v4ufbZ1WEpld6yMGHyggs+PmAHiaLNj5ytP3N01g=
-google.golang.org/api v0.159.0 h1:fVTj+7HHiUYz4JEZCHHoRIeQX7h5FMzrA2RF/DzDdbs=
-google.golang.org/api v0.159.0/go.mod h1:0mu0TpK33qnydLvWqbImq2b1eQ5FHRSDCBzAxX9ZHyw=
-google.golang.org/api v0.161.0 h1:oYzk/bs26WN10AV7iU7MVJVXBH8oCPS2hHyBiEeFoSU=
-google.golang.org/api v0.161.0/go.mod h1:0mu0TpK33qnydLvWqbImq2b1eQ5FHRSDCBzAxX9ZHyw=
-google.golang.org/api v0.163.0 h1:4BBDpPaSH+H28NhnX+WwjXxbRLQ7TWuEKp4BQyEjxvk=
-google.golang.org/api v0.163.0/go.mod h1:6SulDkfoBIg4NFmCuZ39XeeAgSHCPecfSUuDyYlAHs0=
-google.golang.org/api v0.165.0 h1:zd5d4JIIIaYYsfVy1HzoXYZ9rWCSBxxAglbczzo7Bgc=
-google.golang.org/api v0.165.0/go.mod h1:2OatzO7ZDQsoS7IFf3rvsE17/TldiU3F/zxFHeqUB5o=
-google.golang.org/api v0.167.0 h1:CKHrQD1BLRii6xdkatBDXyKzM0mkawt2QP+H3LtPmSE=
-google.golang.org/api v0.167.0/go.mod h1:4FcBc686KFi7QI/U51/2GKKevfZMpM17sCdibqe/bSA=
-google.golang.org/api v0.169.0 h1:QwWPy71FgMWqJN/l6jVlFHUa29a7dcUy02I8o799nPY=
-google.golang.org/api v0.169.0/go.mod h1:gpNOiMA2tZ4mf5R9Iwf4rK/Dcz0fbdIgWYWVoxmsyLg=
-google.golang.org/api v0.170.0 h1:zMaruDePM88zxZBG+NG8+reALO2rfLhe/JShitLyT48=
-google.golang.org/api v0.170.0/go.mod h1:/xql9M2btF85xac/VAm4PsLMTLVGUOpq4BE9R8jyNy8=
-google.golang.org/api v0.171.0 h1:w174hnBPqut76FzW5Qaupt7zY8Kql6fiVjgys4f58sU=
-google.golang.org/api v0.171.0/go.mod h1:Hnq5AHm4OTMt2BUVjael2CWZFD6vksJdWCWiUAmjC9o=
-google.golang.org/api v0.172.0 h1:/1OcMZGPmW1rX2LCu2CmGUD1KXK1+pfzxotxyRUCCdk=
-google.golang.org/api v0.172.0/go.mod h1:+fJZq6QXWfa9pXhnIzsjx4yI22d4aI9ZpLb58gvXjis=
-google.golang.org/api v0.175.0 h1:9bMDh10V9cBuU8N45Wlc3cKkItfqMRV0Fi8UscLEtbY=
-google.golang.org/api v0.175.0/go.mod h1:Rra+ltKu14pps/4xTycZfobMgLpbosoaaL7c+SEMrO8=
 google.golang.org/api v0.176.1 h1:DJSXnV6An+NhJ1J+GWtoF2nHEuqB1VNoTfnIbjNvwD4=
 google.golang.org/api v0.176.1/go.mod h1:j2MaSDYcvYV1lkZ1+SMW4IeF90SrEyFA+tluDYWRrFg=
 google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
 google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
-google.golang.org/appengine v1.6.8 h1:IhEN5q69dyKagZPYMSdIjS2HqprW324FRQZJcGqPAsM=
-google.golang.org/appengine v1.6.8/go.mod h1:1jJ3jBArFh5pcgW8gCtRJnepW8FzD1V44FJffLiz/Ds=
 google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
 google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=
 google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo=
-google.golang.org/genproto v0.0.0-20231120223509-83a465c0220f h1:Vn+VyHU5guc9KjB5KrjI2q0wCOWEOIh0OEsleqakHJg=
-google.golang.org/genproto v0.0.0-20231120223509-83a465c0220f/go.mod h1:nWSwAFPb+qfNJXsoeO3Io7zf4tMSfN8EA8RlDA04GhY=
-google.golang.org/genproto v0.0.0-20231211222908-989df2bf70f3 h1:1hfbdAfFbkmpg41000wDVqr7jUpK/Yo+LPnIxxGzmkg=
-google.golang.org/genproto v0.0.0-20231211222908-989df2bf70f3/go.mod h1:5RBcpGRxr25RbDzY5w+dmaqpSEvl8Gwl1x2CICf60ic=
-google.golang.org/genproto v0.0.0-20231212172506-995d672761c0 h1:YJ5pD9rF8o9Qtta0Cmy9rdBwkSjrTCT6XTiUQVOtIos=
-google.golang.org/genproto v0.0.0-20231212172506-995d672761c0/go.mod h1:l/k7rMz0vFTBPy+tFSGvXEd3z+BcoG1k7EHbqm+YBsY=
-google.golang.org/genproto v0.0.0-20240102182953-50ed04b92917 h1:nz5NESFLZbJGPFxDT/HCn+V1mZ8JGNoY4nUpmW/Y2eg=
-google.golang.org/genproto v0.0.0-20240102182953-50ed04b92917/go.mod h1:pZqR+glSb11aJ+JQcczCvgf47+duRuzNSKqE8YAQnV0=
-google.golang.org/genproto v0.0.0-20240116215550-a9fa1716bcac h1:ZL/Teoy/ZGnzyrqK/Optxxp2pmVh+fmJ97slxSRyzUg=
-google.golang.org/genproto v0.0.0-20240116215550-a9fa1716bcac/go.mod h1:+Rvu7ElI+aLzyDQhpHMFMMltsD6m7nqpuWDd2CwJw3k=
-google.golang.org/genproto v0.0.0-20240125205218-1f4bbc51befe h1:USL2DhxfgRchafRvt/wYyyQNzwgL7ZiURcozOE/Pkvo=
-google.golang.org/genproto v0.0.0-20240125205218-1f4bbc51befe/go.mod h1:cc8bqMqtv9gMOr0zHg2Vzff5ULhhL2IXP4sbcn32Dro=
-google.golang.org/genproto v0.0.0-20240205150955-31a09d347014 h1:g/4bk7P6TPMkAUbUhquq98xey1slwvuVJPosdBqYJlU=
-google.golang.org/genproto v0.0.0-20240205150955-31a09d347014/go.mod h1:xEgQu1e4stdSSsxPDK8Azkrk/ECl5HvdPf6nbZrTS5M=
-google.golang.org/genproto v0.0.0-20240213162025-012b6fc9bca9 h1:9+tzLLstTlPTRyJTh+ah5wIMsBW5c4tQwGTN3thOW9Y=
-google.golang.org/genproto v0.0.0-20240213162025-012b6fc9bca9/go.mod h1:mqHbVIp48Muh7Ywss/AD6I5kNVKZMmAa/QEW58Gxp2s=
-google.golang.org/genproto v0.0.0-20240227224415-6ceb2ff114de h1:F6qOa9AZTYJXOUEr4jDysRDLrm4PHePlge4v4TGAlxY=
-google.golang.org/genproto v0.0.0-20240227224415-6ceb2ff114de/go.mod h1:VUhTRKeHn9wwcdrk73nvdC9gF178Tzhmt/qyaFcPLSo=
-google.golang.org/genproto/googleapis/api v0.0.0-20231120223509-83a465c0220f h1:2yNACc1O40tTnrsbk9Cv6oxiW8pxI/pXj0wRtdlYmgY=
-google.golang.org/genproto/googleapis/api v0.0.0-20231120223509-83a465c0220f/go.mod h1:Uy9bTZJqmfrw2rIBxgGLnamc78euZULUBrLZ9XTITKI=
-google.golang.org/genproto/googleapis/api v0.0.0-20231211222908-989df2bf70f3 h1:EWIeHfGuUf00zrVZGEgYFxok7plSAXBGcH7NNdMAWvA=
-google.golang.org/genproto/googleapis/api v0.0.0-20231211222908-989df2bf70f3/go.mod h1:k2dtGpRrbsSyKcNPKKI5sstZkrNCZwpU/ns96JoHbGg=
-google.golang.org/genproto/googleapis/api v0.0.0-20231212172506-995d672761c0 h1:s1w3X6gQxwrLEpxnLd/qXTVLgQE2yXwaOaoa6IlY/+o=
-google.golang.org/genproto/googleapis/api v0.0.0-20231212172506-995d672761c0/go.mod h1:CAny0tYF+0/9rmDB9fahA9YLzX3+AEVl1qXbv5hhj6c=
-google.golang.org/genproto/googleapis/api v0.0.0-20240102182953-50ed04b92917 h1:rcS6EyEaoCO52hQDupoSfrxI3R6C2Tq741is7X8OvnM=
-google.golang.org/genproto/googleapis/api v0.0.0-20240102182953-50ed04b92917/go.mod h1:CmlNWB9lSezaYELKS5Ym1r44VrrbPUa7JTvw+6MbpJ0=
-google.golang.org/genproto/googleapis/api v0.0.0-20240125205218-1f4bbc51befe h1:0poefMBYvYbs7g5UkjS6HcxBPaTRAmznle9jnxYoAI8=
-google.golang.org/genproto/googleapis/api v0.0.0-20240125205218-1f4bbc51befe/go.mod h1:4jWUdICTdgc3Ibxmr8nAJiiLHwQBY0UI0XZcEMaFKaA=
-google.golang.org/genproto/googleapis/api v0.0.0-20240205150955-31a09d347014 h1:x9PwdEgd11LgK+orcck69WVRo7DezSO4VUMPI4xpc8A=
-google.golang.org/genproto/googleapis/api v0.0.0-20240205150955-31a09d347014/go.mod h1:rbHMSEDyoYX62nRVLOCc4Qt1HbsdytAYoVwgjiOhF3I=
-google.golang.org/genproto/googleapis/api v0.0.0-20240221002015-b0ce06bbee7c h1:9g7erC9qu44ks7UK4gDNlnk4kOxZG707xKm4jVniy6o=
-google.golang.org/genproto/googleapis/api v0.0.0-20240221002015-b0ce06bbee7c/go.mod h1:5iCWqnniDlqZHrd3neWVTOwvh/v6s3232omMecelax8=
-google.golang.org/genproto/googleapis/api v0.0.0-20240311132316-a219d84964c2 h1:rIo7ocm2roD9DcFIX67Ym8icoGCKSARAiPljFhh5suQ=
-google.golang.org/genproto/googleapis/api v0.0.0-20240311132316-a219d84964c2/go.mod h1:O1cOfN1Cy6QEYr7VxtjOyP5AdAuR0aJ/MYZaaof623Y=
 google.golang.org/genproto/googleapis/api v0.0.0-20240401170217-c3f982113cda h1:b6F6WIV4xHHD0FA4oIyzU6mHWg2WI2X1RBehwa5QN38=
 google.golang.org/genproto/googleapis/api v0.0.0-20240401170217-c3f982113cda/go.mod h1:AHcE/gZH76Bk/ROZhQphlRoWo5xKDEtz3eVEO1LfA8c=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20231127180814-3a041ad873d4 h1:DC7wcm+i+P1rN3Ff07vL+OndGg5OhNddHyTA+ocPqYE=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20231127180814-3a041ad873d4/go.mod h1:eJVxU6o+4G1PSczBr85xmyvSNYAKvAYgkub40YGomFM=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20231212172506-995d672761c0 h1:/jFB8jK5R3Sq3i/lmeZO0cATSzFfZaJq1J2Euan3XKU=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20231212172506-995d672761c0/go.mod h1:FUoWkonphQm3RhTS+kOEhF8h0iDpm4tdXolVCeZ9KKA=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20240102182953-50ed04b92917 h1:6G8oQ016D88m1xAKljMlBOOGWDZkes4kMhgGFlf8WcQ=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20240102182953-50ed04b92917/go.mod h1:xtjpI3tXFPP051KaWnhvxkiubL/6dJ18vLVf7q2pTOU=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20240116215550-a9fa1716bcac h1:nUQEQmH/csSvFECKYRv6HWEyypysidKl2I6Qpsglq/0=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20240116215550-a9fa1716bcac/go.mod h1:daQN87bsDqDoe316QbbvX60nMoJQa4r6Ds0ZuoAe5yA=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20240125205218-1f4bbc51befe h1:bQnxqljG/wqi4NTXu2+DJ3n7APcEA882QZ1JvhQAq9o=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20240125205218-1f4bbc51befe/go.mod h1:PAREbraiVEVGVdTZsVWjSbbTtSyGbAgIIvni8a8CD5s=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20240205150955-31a09d347014 h1:FSL3lRCkhaPFxqi0s9o+V4UI2WTzAVOvkgbd4kVV4Wg=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20240205150955-31a09d347014/go.mod h1:SaPjaZGWb0lPqs6Ittu0spdfrOArqji4ZdeP5IC/9N4=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20240213162025-012b6fc9bca9 h1:hZB7eLIaYlW9qXRfCq/qDaPdbeY3757uARz5Vvfv+cY=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20240213162025-012b6fc9bca9/go.mod h1:YUWgXUFRPfoYK1IHMuxH5K6nPEXSCzIMljnQ59lLRCk=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20240221002015-b0ce06bbee7c h1:NUsgEN92SQQqzfA+YtqYNqYmB3DMMYLlIwUZAQFVFbo=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20240221002015-b0ce06bbee7c/go.mod h1:H4O17MA/PE9BsGx3w+a+W2VOLLD1Qf7oJneAoU6WktY=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20240304161311-37d4d3c04a78 h1:Xs9lu+tLXxLIfuci70nG4cpwaRC+mRQPUL7LoIeDJC4=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20240304161311-37d4d3c04a78/go.mod h1:UCOku4NytXMJuLQE5VuqA5lX3PcHCBo8pxNyvkf4xBs=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20240311132316-a219d84964c2 h1:9IZDv+/GcI6u+a4jRFRLxQs0RUCfavGfoOgEW6jpkI0=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20240311132316-a219d84964c2/go.mod h1:UCOku4NytXMJuLQE5VuqA5lX3PcHCBo8pxNyvkf4xBs=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20240314234333-6e1732d8331c h1:lfpJ/2rWPa/kJgxyyXM8PrNnfCzcmxJ265mADgwmvLI=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20240314234333-6e1732d8331c/go.mod h1:WtryC6hu0hhx87FDGxWCDptyssuo68sk10vYjF+T9fY=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20240318140521-94a12d6c2237 h1:NnYq6UN9ReLM9/Y01KWNOWyI5xQ9kbIms5GGJVwS/Yc=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20240318140521-94a12d6c2237/go.mod h1:WtryC6hu0hhx87FDGxWCDptyssuo68sk10vYjF+T9fY=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20240401170217-c3f982113cda h1:LI5DOvAxUPMv/50agcLLoo+AdWc1irS9Rzz4vPuD1V4=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20240401170217-c3f982113cda/go.mod h1:WtryC6hu0hhx87FDGxWCDptyssuo68sk10vYjF+T9fY=
 google.golang.org/genproto/googleapis/rpc v0.0.0-20240415180920-8c6c420018be h1:LG9vZxsWGOmUKieR8wPAUR3u3MpnYFQZROPIMaXh7/A=
 google.golang.org/genproto/googleapis/rpc v0.0.0-20240415180920-8c6c420018be/go.mod h1:WtryC6hu0hhx87FDGxWCDptyssuo68sk10vYjF+T9fY=
 google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
@@ -547,20 +199,6 @@ google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyac
 google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY=
 google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
 google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc=
-google.golang.org/grpc v1.60.0 h1:6FQAR0kM31P6MRdeluor2w2gPaS4SVNrD/DNTxrQ15k=
-google.golang.org/grpc v1.60.0/go.mod h1:OlCHIeLYqSSsLi6i49B5QGdzaMZK9+M7LXN2FKz4eGM=
-google.golang.org/grpc v1.60.1 h1:26+wFr+cNqSGFcOXcabYC0lUVJVRa2Sb2ortSK7VrEU=
-google.golang.org/grpc v1.60.1/go.mod h1:OlCHIeLYqSSsLi6i49B5QGdzaMZK9+M7LXN2FKz4eGM=
-google.golang.org/grpc v1.61.0 h1:TOvOcuXn30kRao+gfcvsebNEa5iZIiLkisYEkf7R7o0=
-google.golang.org/grpc v1.61.0/go.mod h1:VUbo7IFqmF1QtCAstipjG0GIoq49KvMe9+h1jFLBNJs=
-google.golang.org/grpc v1.61.1 h1:kLAiWrZs7YeDM6MumDe7m3y4aM6wacLzM1Y/wiLP9XY=
-google.golang.org/grpc v1.61.1/go.mod h1:VUbo7IFqmF1QtCAstipjG0GIoq49KvMe9+h1jFLBNJs=
-google.golang.org/grpc v1.62.0 h1:HQKZ/fa1bXkX1oFOvSjmZEUL8wLSaZTjCcLAlmZRtdk=
-google.golang.org/grpc v1.62.0/go.mod h1:IWTG0VlJLCh1SkC58F7np9ka9mx/WNkjl4PGJaiq+QE=
-google.golang.org/grpc v1.62.1 h1:B4n+nfKzOICUXMgyrNd19h/I9oH0L1pizfk1d4zSgTk=
-google.golang.org/grpc v1.62.1/go.mod h1:IWTG0VlJLCh1SkC58F7np9ka9mx/WNkjl4PGJaiq+QE=
-google.golang.org/grpc v1.63.0 h1:WjKe+dnvABXyPJMD7KDNLxtoGk5tgk+YFWN6cBWjZE8=
-google.golang.org/grpc v1.63.0/go.mod h1:WAX/8DgncnokcFUldAxq7GeB5DXHDbMF+lLvDomNkRA=
 google.golang.org/grpc v1.63.2 h1:MUeiw1B2maTVZthpU5xvASfTh3LDbxHd6IJ6QQVU+xM=
 google.golang.org/grpc v1.63.2/go.mod h1:WAX/8DgncnokcFUldAxq7GeB5DXHDbMF+lLvDomNkRA=
 google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
@@ -572,12 +210,6 @@ google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2
 google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
 google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
 google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c=
-google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
-google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
-google.golang.org/protobuf v1.31.0 h1:g0LDEJHgrBl9N9r17Ru3sqWhkIx2NB67okBHPwC7hs8=
-google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
-google.golang.org/protobuf v1.32.0 h1:pPC6BG5ex8PDFnkbrGU3EixyhKcQ2aDuBS36lqK/C7I=
-google.golang.org/protobuf v1.32.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos=
 google.golang.org/protobuf v1.33.0 h1:uNO2rsAINq/JlFpSdYEKIZ0uKD/R9cpdv0T+yoGwGmI=
 google.golang.org/protobuf v1.33.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos=
 gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
@@ -591,7 +223,6 @@ gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
 gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=
 gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=
 gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
-gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
 gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
 gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
 honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=

From e716e3ed24651bcd196ac11dc6043b138cd217e4 Mon Sep 17 00:00:00 2001
From: Yoshida Hiroshi <yoshida@shiguredo.jp>
Date: Mon, 23 Dec 2024 12:06:22 +0900
Subject: [PATCH 15/19] =?UTF-8?q?=E5=A4=89=E6=9B=B4=E5=B1=A5=E6=AD=B4?=
 =?UTF-8?q?=E3=82=92=E6=9B=B4=E6=96=B0=E3=81=99=E3=82=8B?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 CHANGES.md | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/CHANGES.md b/CHANGES.md
index 9eb1c6d..7373a47 100644
--- a/CHANGES.md
+++ b/CHANGES.md
@@ -15,6 +15,8 @@
   - @Hexa
 - [CHANGE] フィルタリングの結果が句読点のみになった場合はクライアントに結果を返さないように変更する
   - @Hexa
+- [UPDATE] go.mod の Go のバージョンを 1.23.4 にあげる
+  - @Hexa
 
 ### misc
 

From 24016b7fdae4a48751db232fa46bd39002025974 Mon Sep 17 00:00:00 2001
From: Yoshida Hiroshi <yoshida@shiguredo.jp>
Date: Mon, 23 Dec 2024 12:11:57 +0900
Subject: [PATCH 16/19] =?UTF-8?q?staticcheck=20=E3=81=AE=E3=83=90=E3=83=BC?=
 =?UTF-8?q?=E3=82=B8=E3=83=A7=E3=83=B3=E3=82=92=E4=B8=8A=E3=81=92=E3=82=8B?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .github/workflows/ci.yaml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml
index 5758956..3558502 100644
--- a/.github/workflows/ci.yaml
+++ b/.github/workflows/ci.yaml
@@ -27,7 +27,7 @@ jobs:
 
       - uses: dominikh/staticcheck-action@v1.3.1
         with:
-          version: "2023.1.6"
+          version: "2024.1.1"
           install-go: false
 
       - name: Test

From f69e98fa0f782c2e1c103292c2d19f041cf1672d Mon Sep 17 00:00:00 2001
From: Yoshida Hiroshi <yoshida@shiguredo.jp>
Date: Tue, 24 Dec 2024 10:59:43 +0900
Subject: [PATCH 17/19] =?UTF-8?q?staticcheck-action@v1=20=E3=81=AB?=
 =?UTF-8?q?=E5=A4=89=E6=9B=B4=E3=81=99=E3=82=8B?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .github/workflows/ci.yaml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml
index 3558502..630ddda 100644
--- a/.github/workflows/ci.yaml
+++ b/.github/workflows/ci.yaml
@@ -25,7 +25,7 @@ jobs:
       - name: Patch
         run: make patch
 
-      - uses: dominikh/staticcheck-action@v1.3.1
+      - uses: dominikh/staticcheck-action@v1
         with:
           version: "2024.1.1"
           install-go: false

From 605bf312aa728d940a79fe53600ab38014136585 Mon Sep 17 00:00:00 2001
From: Hiroshi Yoshida <yoshida@shiguredo.jp>
Date: Tue, 24 Dec 2024 11:11:44 +0900
Subject: [PATCH 18/19] Update CHANGES.md

Co-authored-by: V <nakai@shiguredo.jp>
---
 CHANGES.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/CHANGES.md b/CHANGES.md
index 7373a47..986872c 100644
--- a/CHANGES.md
+++ b/CHANGES.md
@@ -11,7 +11,7 @@
 
 ## develop
 
-- [CHANGE] minimum_confidence_score と minimum_transcribed_time を独立させて、minimum_confidence_score が無効でも minimum_transcribed_time が有効な場合は minimum_transcribed_time でのフィルタリングが有効になるように変更する
+- [CHANGE] Amazon Transcribe 向けの minimum_confidence_score と minimum_transcribed_time を独立させて、minimum_confidence_score が無効でも minimum_transcribed_time が有効な場合は minimum_transcribed_time でのフィルタリングが有効になるように変更する
   - @Hexa
 - [CHANGE] フィルタリングの結果が句読点のみになった場合はクライアントに結果を返さないように変更する
   - @Hexa

From 30908ec8d1053aa4978f38132c0370e1ca23807d Mon Sep 17 00:00:00 2001
From: Yoshida Hiroshi <yoshida@shiguredo.jp>
Date: Tue, 24 Dec 2024 11:14:05 +0900
Subject: [PATCH 19/19] =?UTF-8?q?=E5=A4=89=E6=9B=B4=E5=B1=A5=E6=AD=B4?=
 =?UTF-8?q?=E3=82=92=E6=9B=B4=E6=96=B0=E3=81=99=E3=82=8B?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 CHANGES.md | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/CHANGES.md b/CHANGES.md
index 986872c..d1cfc3a 100644
--- a/CHANGES.md
+++ b/CHANGES.md
@@ -15,13 +15,15 @@
   - @Hexa
 - [CHANGE] フィルタリングの結果が句読点のみになった場合はクライアントに結果を返さないように変更する
   - @Hexa
-- [UPDATE] go.mod の Go のバージョンを 1.23.4 にあげる
-  - @Hexa
 
 ### misc
 
 - [CHANGE] GitHub Actions の ubuntu-latest を ubuntu-24.04 に変更する
   - @voluntas
+- [UPDATE] go.mod の Go のバージョンを 1.23.4 にあげる
+  - @Hexa
+- [UPDATE] GitHub Actions の staticcheck のバージョンを 2024.1.1 に上げる
+  - @Hexa
 
 ## 2024.8.0