diff --git a/k8s/timoni/codebattle/templates/httproute.cue b/k8s/timoni/codebattle/templates/httproute.cue
index f8e22c184..e99dfe9af 100644
--- a/k8s/timoni/codebattle/templates/httproute.cue
+++ b/k8s/timoni/codebattle/templates/httproute.cue
@@ -32,6 +32,7 @@ import (
value: "/assets"
}
}]
+ timeouts: request: "60s"
backendRefs: [{
name: metadata.name
port: 80
diff --git a/services/app/apps/codebattle/assets/js/widgets/pages/game/TaskAssignment.jsx b/services/app/apps/codebattle/assets/js/widgets/pages/game/TaskAssignment.jsx
index 74acec2ea..6fdf8aeaf 100644
--- a/services/app/apps/codebattle/assets/js/widgets/pages/game/TaskAssignment.jsx
+++ b/services/app/apps/codebattle/assets/js/widgets/pages/game/TaskAssignment.jsx
@@ -16,7 +16,7 @@ import useTaskDescriptionParams from '../../utils/useTaskDescriptionParams';
import ContributorsList from './ContributorsList';
import TaskDescriptionMarkdown from './TaskDescriptionMarkdown';
-// import TaskLanguagesSelection from './TaskLanguageSelection';
+import TaskLanguagesSelection from './TaskLanguageSelection';
const renderTaskLink = name => {
const link = `https://github.com/hexlet-codebattle/battle_asserts/tree/master/src/battle_asserts/issues/${name}.clj`;
@@ -62,9 +62,6 @@ function TaskAssignment({
fullSize = false,
}) {
const [avaibleLanguages, displayLanguage, description] = useTaskDescriptionParams(task, taskLanguage);
- console.log(handleSetLanguage);
- console.log(avaibleLanguages);
- console.log(displayLanguage);
const handleTaskSizeIncrease = useCallback(() => {
changeTaskDescriptionSizes(taskSize + 1);
}, [taskSize, changeTaskDescriptionSizes]);
@@ -111,11 +108,11 @@ function TaskAssignment({
{task.name}
- {/* */}
+ />
{!fullSize && (
diff --git a/services/app/apps/codebattle/lib/codebattle_web/templates/session/local_password.html.heex b/services/app/apps/codebattle/lib/codebattle_web/templates/session/local_password.html.heex
index cee9a18b7..bbebecdcb 100644
--- a/services/app/apps/codebattle/lib/codebattle_web/templates/session/local_password.html.heex
+++ b/services/app/apps/codebattle/lib/codebattle_web/templates/session/local_password.html.heex
@@ -12,6 +12,16 @@
<% end %>
+
+
+
<%= form_for @conn, Routes.session_path(@conn, :create), [as: :session], fn f -> %>
diff --git a/services/app/apps/codebattle/priv/gettext/ru/LC_MESSAGES/default.po b/services/app/apps/codebattle/priv/gettext/ru/LC_MESSAGES/default.po
index 31bc585e4..f2e347220 100644
--- a/services/app/apps/codebattle/priv/gettext/ru/LC_MESSAGES/default.po
+++ b/services/app/apps/codebattle/priv/gettext/ru/LC_MESSAGES/default.po
@@ -922,8 +922,8 @@ msgstr "Уровень сложности"
msgid "Play with"
msgstr "Играть с"
-msgid "Go!"
-msgstr "Вперед!"
+msgid "Try simple battle"
+msgstr "Попробовать простую игру"
msgid "You don't have access to this game"
msgstr "У вас нет доступа к этой игре"
diff --git a/services/app/apps/codebattle/test/codebattle_web/integration/tournament/swiss_95_percentile_test.exs b/services/app/apps/codebattle/test/codebattle_web/integration/tournament/swiss_95_percentile_test.exs
index 2756b211c..61ec29b13 100644
--- a/services/app/apps/codebattle/test/codebattle_web/integration/tournament/swiss_95_percentile_test.exs
+++ b/services/app/apps/codebattle/test/codebattle_web/integration/tournament/swiss_95_percentile_test.exs
@@ -183,6 +183,7 @@ defmodule CodebattleWeb.Integration.Tournament.SwissClan95PercentileTest do
event: "tournament:round_created",
payload: %{
tournament: %{
+ round_timeout_seconds: 180,
break_state: "off",
current_round_position: 0,
last_round_ended_at: nil,
@@ -309,6 +310,27 @@ defmodule CodebattleWeb.Integration.Tournament.SwissClan95PercentileTest do
assert Process.info(self(), :message_queue_len) == {:message_queue_len, 0}
+ # ----------------
+ # somebody leave
+ # ----------------
+ #
+ Phoenix.ChannelTest.push(socket6, "tournament:leave", %{})
+
+ :timer.sleep(100)
+ left_id = user6.id
+
+ Enum.each(1..10, fn _i ->
+ assert_receive %Message{
+ event: "tournament:player:left",
+ payload: %{
+ player_id: ^left_id,
+ tournament: %{players_count: 8}
+ }
+ }
+ end)
+
+ assert Process.info(self(), :message_queue_len) == {:message_queue_len, 0}
+
# ----------------
# finish 1 round
# start 2 round
@@ -318,8 +340,8 @@ defmodule CodebattleWeb.Integration.Tournament.SwissClan95PercentileTest do
:timer.sleep(100)
- # 5 players got match timeout notification
- Enum.each(1..5, fn _i ->
+ # 4 players got match timeout notification
+ Enum.each(1..3, fn _i ->
assert_receive %Message{
event: "tournament:match:upserted",
payload: %{
@@ -329,6 +351,15 @@ defmodule CodebattleWeb.Integration.Tournament.SwissClan95PercentileTest do
}
end)
+ # event without left_player
+ assert_receive %Message{
+ event: "tournament:match:upserted",
+ payload: %{
+ players: [%{state: "active"}],
+ match: %{state: "timeout", task_id: ^t1_id}
+ }
+ }
+
# 8 users got notification about round finished
Enum.each(1..8, fn _i ->
assert_receive %Message{
@@ -409,7 +440,7 @@ defmodule CodebattleWeb.Integration.Tournament.SwissClan95PercentileTest do
}
}
- Enum.each(1..7, fn _i ->
+ Enum.each(1..6, fn _i ->
assert_receive %Message{
event: "tournament:match:upserted",
payload: %{
@@ -529,7 +560,7 @@ defmodule CodebattleWeb.Integration.Tournament.SwissClan95PercentileTest do
:timer.sleep(100)
# 5 players got match timeout notification
- Enum.each(1..6, fn _i ->
+ Enum.each(1..5, fn _i ->
assert_receive %Message{
event: "tournament:match:upserted",
payload: %{
@@ -618,7 +649,7 @@ defmodule CodebattleWeb.Integration.Tournament.SwissClan95PercentileTest do
}
}
- Enum.each(1..7, fn _i ->
+ Enum.each(1..6, fn _i ->
assert_receive %Message{
event: "tournament:match:upserted",
payload: %{
@@ -655,11 +686,12 @@ defmodule CodebattleWeb.Integration.Tournament.SwissClan95PercentileTest do
_player6,
_player7,
_player8,
- _player_bot
+ _player_bot1,
+ _player_bot2
],
page_number: 1,
page_size: 10,
- total_entries: 9
+ total_entries: 10
}
}
}
@@ -739,7 +771,7 @@ defmodule CodebattleWeb.Integration.Tournament.SwissClan95PercentileTest do
:timer.sleep(100)
# 5 players got match timeout notification
- Enum.each(1..6, fn _i ->
+ Enum.each(1..5, fn _i ->
assert_receive %Message{
event: "tournament:match:upserted",
payload: %{
@@ -836,14 +868,15 @@ defmodule CodebattleWeb.Integration.Tournament.SwissClan95PercentileTest do
_player3,
_player4,
_player5,
- _player6,
_player7,
_player8,
- _player_bot
+ _player_bot1,
+ _player_bot2,
+ _player_bot3
],
page_number: 1,
page_size: 10,
- total_entries: 9
+ total_entries: 11
}
}
}
diff --git a/services/app/mix.lock b/services/app/mix.lock
index 527edcfc9..92c9cd113 100644
--- a/services/app/mix.lock
+++ b/services/app/mix.lock
@@ -2,7 +2,7 @@
"bandit": {:hex, :bandit, "1.6.7", "42f30e37a1c89a2a12943c5dca76f731a2313e8a2e21c1a95dc8241893e922d1", [:mix], [{:hpax, "~> 1.0", [hex: :hpax, repo: "hexpm", optional: false]}, {:plug, "~> 1.14", [hex: :plug, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}, {:thousand_island, "~> 1.0", [hex: :thousand_island, repo: "hexpm", optional: false]}, {:websock, "~> 0.5", [hex: :websock, repo: "hexpm", optional: false]}], "hexpm", "551ba8ff5e4fc908cbeb8c9f0697775fb6813a96d9de5f7fe02e34e76fd7d184"},
"bcrypt_elixir": {:hex, :bcrypt_elixir, "2.3.1", "5114d780459a04f2b4aeef52307de23de961b69e13a5cd98a911e39fda13f420", [:make, :mix], [{:comeonin, "~> 5.3", [hex: :comeonin, repo: "hexpm", optional: false]}, {:elixir_make, "~> 0.6", [hex: :elixir_make, repo: "hexpm", optional: false]}], "hexpm", "42182d5f46764def15bf9af83739e3bf4ad22661b1c34fc3e88558efced07279"},
"bunt": {:hex, :bunt, "1.0.0", "081c2c665f086849e6d57900292b3a161727ab40431219529f13c4ddcf3e7a44", [:mix], [], "hexpm", "dc5f86aa08a5f6fa6b8096f0735c4e76d54ae5c9fa2c143e5a1fc7c1cd9bb6b5"},
- "castore": {:hex, :castore, "1.0.11", "4bbd584741601eb658007339ea730b082cc61f3554cf2e8f39bf693a11b49073", [:mix], [], "hexpm", "e03990b4db988df56262852f20de0f659871c35154691427a5047f4967a16a62"},
+ "castore": {:hex, :castore, "1.0.12", "053f0e32700cbec356280c0e835df425a3be4bc1e0627b714330ad9d0f05497f", [:mix], [], "hexpm", "3dca286b2186055ba0c9449b4e95b97bf1b57b47c1f2644555879e659960c224"},
"certifi": {:hex, :certifi, "2.14.0", "ed3bef654e69cde5e6c022df8070a579a79e8ba2368a00acf3d75b82d9aceeed", [:rebar3], [], "hexpm", "ea59d87ef89da429b8e905264fdec3419f84f2215bb3d81e07a18aac919026c3"},
"chromic_pdf": {:hex, :chromic_pdf, "1.17.0", "d392a82b94bd55efbe973d59d5741515b5d6858317fc3122a1288a06355d2069", [:mix], [{:jason, "~> 1.1", [hex: :jason, repo: "hexpm", optional: false]}, {:nimble_pool, "~> 0.2 or ~> 1.0", [hex: :nimble_pool, repo: "hexpm", optional: false]}, {:phoenix_html, "~> 2.14 or ~> 3.3 or ~> 4.0", [hex: :phoenix_html, repo: "hexpm", optional: true]}, {:plug, "~> 1.11", [hex: :plug, repo: "hexpm", optional: true]}, {:plug_crypto, "~> 1.2 or ~> 2.0", [hex: :plug_crypto, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}, {:websockex, ">= 0.4.3", [hex: :websockex, repo: "hexpm", optional: true]}], "hexpm", "3609f2e6f04fc0a4b3655be00bd4a4af53cc1cd5f1166dd856816e4d6fa82828"},
"combine": {:hex, :combine, "0.10.0", "eff8224eeb56498a2af13011d142c5e7997a80c8f5b97c499f84c841032e429f", [:mix], [], "hexpm", "1b1dbc1790073076580d0d1d64e42eae2366583e7aecd455d1215b0d16f2451b"},
@@ -34,7 +34,7 @@
"fun_with_flags": {:hex, :fun_with_flags, "1.12.0", "8036ad262ae4321d160e36c4db13c8cadf1890121d74c4f5852ab0de0ac3ad2b", [:mix], [{:ecto_sql, "~> 3.0", [hex: :ecto_sql, repo: "hexpm", optional: true]}, {:phoenix_pubsub, "~> 2.0", [hex: :phoenix_pubsub, repo: "hexpm", optional: true]}, {:redix, "~> 1.0", [hex: :redix, repo: "hexpm", optional: true]}], "hexpm", "9ed303bee60687f7a07dde2c036d3e8905771001ebd77790543ba5655a5f9066"},
"fun_with_flags_ui": {:hex, :fun_with_flags_ui, "1.0.0", "d764a4d1cc1233bdbb18dfb416a6ef96d0ecf4a5dc5a0201f7aa0b13cf2e7802", [:mix], [{:cowboy, ">= 2.0.0", [hex: :cowboy, repo: "hexpm", optional: true]}, {:fun_with_flags, "~> 1.11", [hex: :fun_with_flags, repo: "hexpm", optional: false]}, {:plug, "~> 1.12", [hex: :plug, repo: "hexpm", optional: false]}, {:plug_cowboy, ">= 2.0.0", [hex: :plug_cowboy, repo: "hexpm", optional: true]}], "hexpm", "b0c145894c00d65d5dc20ee5b1f18457985d1fd0b87866f0b41894d5979e55e0"},
"gettext": {:hex, :gettext, "0.26.2", "5978aa7b21fada6deabf1f6341ddba50bc69c999e812211903b169799208f2a8", [:mix], [{:expo, "~> 0.5.1 or ~> 1.0", [hex: :expo, repo: "hexpm", optional: false]}], "hexpm", "aa978504bcf76511efdc22d580ba08e2279caab1066b76bb9aa81c4a1e0a32a5"},
- "hackney": {:hex, :hackney, "1.22.0", "4efc68df70322d4d2e3d2744e9bd191a39a0cb8d08c35379a08d9fb0f040d595", [:rebar3], [{:certifi, "~> 2.14.0", [hex: :certifi, repo: "hexpm", optional: false]}, {:idna, "~> 6.1.0", [hex: :idna, repo: "hexpm", optional: false]}, {:metrics, "~> 1.0.0", [hex: :metrics, repo: "hexpm", optional: false]}, {:mimerl, "~> 1.1", [hex: :mimerl, repo: "hexpm", optional: false]}, {:parse_trans, "3.4.1", [hex: :parse_trans, repo: "hexpm", optional: false]}, {:ssl_verify_fun, "~> 1.1.0", [hex: :ssl_verify_fun, repo: "hexpm", optional: false]}, {:unicode_util_compat, "~> 0.7.0", [hex: :unicode_util_compat, repo: "hexpm", optional: false]}], "hexpm", "628569e451820950382be3d3e6481d7c59997e606c7823bddb4ce5d10812dfcb"},
+ "hackney": {:hex, :hackney, "1.23.0", "55cc09077112bcb4a69e54be46ed9bc55537763a96cd4a80a221663a7eafd767", [:rebar3], [{:certifi, "~> 2.14.0", [hex: :certifi, repo: "hexpm", optional: false]}, {:idna, "~> 6.1.0", [hex: :idna, repo: "hexpm", optional: false]}, {:metrics, "~> 1.0.0", [hex: :metrics, repo: "hexpm", optional: false]}, {:mimerl, "~> 1.1", [hex: :mimerl, repo: "hexpm", optional: false]}, {:parse_trans, "3.4.1", [hex: :parse_trans, repo: "hexpm", optional: false]}, {:ssl_verify_fun, "~> 1.1.0", [hex: :ssl_verify_fun, repo: "hexpm", optional: false]}, {:unicode_util_compat, "~> 0.7.0", [hex: :unicode_util_compat, repo: "hexpm", optional: false]}], "hexpm", "6cd1c04cd15c81e5a493f167b226a15f0938a84fc8f0736ebe4ddcab65c0b44e"},
"hpax": {:hex, :hpax, "1.0.2", "762df951b0c399ff67cc57c3995ec3cf46d696e41f0bba17da0518d94acd4aac", [:mix], [], "hexpm", "2f09b4c1074e0abd846747329eaa26d535be0eb3d189fa69d812bfb8bfefd32f"},
"idna": {:hex, :idna, "6.1.1", "8a63070e9f7d0c62eb9d9fcb360a7de382448200fbbd1b106cc96d3d8099df8d", [:rebar3], [{:unicode_util_compat, "~> 0.7.0", [hex: :unicode_util_compat, repo: "hexpm", optional: false]}], "hexpm", "92376eb7894412ed19ac475e4a86f7b413c1b9fbb5bd16dccd57934157944cea"},
"jason": {:hex, :jason, "1.4.4", "b9226785a9aa77b6857ca22832cffa5d5011a667207eb2a0ad56adb5db443b8a", [:mix], [{:decimal, "~> 1.0 or ~> 2.0", [hex: :decimal, repo: "hexpm", optional: true]}], "hexpm", "c5eb0cab91f094599f94d55bc63409236a8ec69a21a67814529e8d5f6cc90b3b"},
@@ -63,7 +63,7 @@
"phoenix_template": {:hex, :phoenix_template, "1.0.4", "e2092c132f3b5e5b2d49c96695342eb36d0ed514c5b252a77048d5969330d639", [:mix], [{:phoenix_html, "~> 2.14.2 or ~> 3.0 or ~> 4.0", [hex: :phoenix_html, repo: "hexpm", optional: true]}], "hexpm", "2c0c81f0e5c6753faf5cca2f229c9709919aba34fab866d3bc05060c9c444206"},
"phoenix_view": {:hex, :phoenix_view, "2.0.4", "b45c9d9cf15b3a1af5fb555c674b525391b6a1fe975f040fb4d913397b31abf4", [:mix], [{:phoenix_html, "~> 2.14.2 or ~> 3.0 or ~> 4.0", [hex: :phoenix_html, repo: "hexpm", optional: true]}, {:phoenix_template, "~> 1.0", [hex: :phoenix_template, repo: "hexpm", optional: false]}], "hexpm", "4e992022ce14f31fe57335db27a28154afcc94e9983266835bb3040243eb620b"},
"plug": {:hex, :plug, "1.16.1", "40c74619c12f82736d2214557dedec2e9762029b2438d6d175c5074c933edc9d", [:mix], [{:mime, "~> 1.0 or ~> 2.0", [hex: :mime, repo: "hexpm", optional: false]}, {:plug_crypto, "~> 1.1.1 or ~> 1.2 or ~> 2.0", [hex: :plug_crypto, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4.3 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "a13ff6b9006b03d7e33874945b2755253841b238c34071ed85b0e86057f8cddc"},
- "plug_cowboy": {:hex, :plug_cowboy, "2.7.2", "fdadb973799ae691bf9ecad99125b16625b1c6039999da5fe544d99218e662e4", [:mix], [{:cowboy, "~> 2.7", [hex: :cowboy, repo: "hexpm", optional: false]}, {:cowboy_telemetry, "~> 0.3", [hex: :cowboy_telemetry, repo: "hexpm", optional: false]}, {:plug, "~> 1.14", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm", "245d8a11ee2306094840c000e8816f0cbed69a23fc0ac2bcf8d7835ae019bb2f"},
+ "plug_cowboy": {:hex, :plug_cowboy, "2.7.3", "1304d36752e8bdde213cea59ef424ca932910a91a07ef9f3874be709c4ddb94b", [:mix], [{:cowboy, "~> 2.7", [hex: :cowboy, repo: "hexpm", optional: false]}, {:cowboy_telemetry, "~> 0.3", [hex: :cowboy_telemetry, repo: "hexpm", optional: false]}, {:plug, "~> 1.14", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm", "77c95524b2aa5364b247fa17089029e73b951ebc1adeef429361eab0bb55819d"},
"plug_crypto": {:hex, :plug_crypto, "2.1.0", "f44309c2b06d249c27c8d3f65cfe08158ade08418cf540fd4f72d4d6863abb7b", [:mix], [], "hexpm", "131216a4b030b8f8ce0f26038bc4421ae60e4bb95c5cf5395e1421437824c4fa"},
"porcelain": {:hex, :porcelain, "2.0.3", "2d77b17d1f21fed875b8c5ecba72a01533db2013bd2e5e62c6d286c029150fdc", [:mix], [], "hexpm", "dc996ab8fadbc09912c787c7ab8673065e50ea1a6245177b0c24569013d23620"},
"postgrex": {:hex, :postgrex, "0.20.0", "363ed03ab4757f6bc47942eff7720640795eb557e1935951c1626f0d303a3aed", [:mix], [{:db_connection, "~> 2.1", [hex: :db_connection, repo: "hexpm", optional: false]}, {:decimal, "~> 1.5 or ~> 2.0", [hex: :decimal, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:table, "~> 0.1.0", [hex: :table, repo: "hexpm", optional: true]}], "hexpm", "d36ef8b36f323d29505314f704e21a1a038e2dc387c6409ee0cd24144e187c0f"},
@@ -81,7 +81,7 @@
"telemetry_metrics": {:hex, :telemetry_metrics, "0.6.2", "2caabe9344ec17eafe5403304771c3539f3b6e2f7fb6a6f602558c825d0d0bfb", [:mix], [{:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "9b43db0dc33863930b9ef9d27137e78974756f5f198cae18409970ed6fa5b561"},
"telemetry_poller": {:hex, :telemetry_poller, "1.1.0", "58fa7c216257291caaf8d05678c8d01bd45f4bdbc1286838a28c4bb62ef32999", [:rebar3], [{:telemetry, "~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "9eb9d9cbfd81cbd7cdd24682f8711b6e2b691289a0de6826e58452f28c103c8f"},
"temp": {:hex, :temp, "0.4.9", "eb6355bfa7925a568b3d9eb3bb57e89aa6d2b78bfe8dfb6b698e090631b7f41f", [:mix], [], "hexpm", "bc8bf7b27d9105bef933ef4bf4ba37ac6b899dbeba329deaa88c60b62d6b4b6d"},
- "thousand_island": {:hex, :thousand_island, "1.3.10", "a9971ebab1dfb36e2710a86b37c3f54973fbc9470d892035334415521fb53328", [:mix], [{:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "17ab1f1b13aadb1f4b4c8e5b59c06874d701119fed082884c9c6d38addad254f"},
+ "thousand_island": {:hex, :thousand_island, "1.3.11", "b68f3e91f74d564ae20b70d981bbf7097dde084343c14ae8a33e5b5fbb3d6f37", [:mix], [{:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "555c18c62027f45d9c80df389c3d01d86ba11014652c00be26e33b1b64e98d29"},
"timex": {:hex, :timex, "3.7.11", "bb95cb4eb1d06e27346325de506bcc6c30f9c6dea40d1ebe390b262fad1862d1", [:mix], [{:combine, "~> 0.10", [hex: :combine, repo: "hexpm", optional: false]}, {:gettext, "~> 0.20", [hex: :gettext, repo: "hexpm", optional: false]}, {:tzdata, "~> 1.1", [hex: :tzdata, repo: "hexpm", optional: false]}], "hexpm", "8b9024f7efbabaf9bd7aa04f65cf8dcd7c9818ca5737677c7b76acbc6a94d1aa"},
"typed_struct": {:hex, :typed_struct, "0.3.0", "939789e3c1dca39d7170c87f729127469d1315dcf99fee8e152bb774b17e7ff7", [:mix], [], "hexpm", "c50bd5c3a61fe4e198a8504f939be3d3c85903b382bde4865579bc23111d1b6d"},
"tzdata": {:hex, :tzdata, "1.1.2", "45e5f1fcf8729525ec27c65e163be5b3d247ab1702581a94674e008413eef50b", [:mix], [{:hackney, "~> 1.17", [hex: :hackney, repo: "hexpm", optional: false]}], "hexpm", "cec7b286e608371602318c414f344941d5eb0375e14cfdab605cca2fe66cba8b"},