From 26a50f4069f50c37d65b45e0d39ae0cb42de5425 Mon Sep 17 00:00:00 2001 From: Weny Xu Date: Mon, 13 Apr 2026 16:10:25 +0800 Subject: [PATCH] feat: add staging leader (#313) Signed-off-by: WenyXu --- c++/greptime/v1/meta/heartbeat.pb.cc | 20 ++++--- c++/greptime/v1/meta/heartbeat.pb.h | 3 +- go/greptime/v1/meta/heartbeat.pb.go | 43 ++++++++------ .../greptime/v1/meta/HeartbeatOuterClass.java | 54 ++++++++++++------ proto/greptime/v1/meta/heartbeat.proto | 2 + src/generated/greptime.v1.meta.rs | 4 ++ src/generated/greptime_grpc_desc.bin | Bin 183792 -> 183886 bytes 7 files changed, 79 insertions(+), 47 deletions(-) diff --git a/c++/greptime/v1/meta/heartbeat.pb.cc b/c++/greptime/v1/meta/heartbeat.pb.cc index 5483817..0ec63f2 100644 --- a/c++/greptime/v1/meta/heartbeat.pb.cc +++ b/c++/greptime/v1/meta/heartbeat.pb.cc @@ -707,22 +707,23 @@ const char descriptor_table_protodef_greptime_2fv1_2fmeta_2fheartbeat_2eproto[] ".greptime.v1.meta.MailboxMessageHeader\022\n" "\n\002id\030\001 \001(\004\022\017\n\007subject\030\002 \001(\t\022\014\n\004from\030\003 \001(" "\t\022\n\n\002to\030\004 \001(\t\022\030\n\020timestamp_millis\030\005 \001(\003\022" - "\016\n\004json\030\006 \001(\tH\000B\t\n\007payload*=\n\nRegionRole" + "\016\n\004json\030\006 \001(\tH\000B\t\n\007payload*P\n\nRegionRole" "\022\n\n\006Leader\020\000\022\014\n\010Follower\020\001\022\025\n\021Downgradin" - "gLeader\020\0022\277\001\n\tHeartbeat\022Z\n\tHeartbeat\022\".g" - "reptime.v1.meta.HeartbeatRequest\032#.grept" - "ime.v1.meta.HeartbeatResponse\"\000(\0010\001\022V\n\tA" - "skLeader\022\".greptime.v1.meta.AskLeaderReq" - "uest\032#.greptime.v1.meta.AskLeaderRespons" - "e\"\000B::min(), RegionRole_INT_MAX_SENTINEL_DO_NOT_USE_ = std::numeric_limits::max() }; bool RegionRole_IsValid(int value); constexpr RegionRole RegionRole_MIN = Leader; -constexpr RegionRole RegionRole_MAX = DowngradingLeader; +constexpr RegionRole RegionRole_MAX = StagingLeader; constexpr int RegionRole_ARRAYSIZE = RegionRole_MAX + 1; const ::PROTOBUF_NAMESPACE_ID::EnumDescriptor* RegionRole_descriptor(); diff --git a/go/greptime/v1/meta/heartbeat.pb.go b/go/greptime/v1/meta/heartbeat.pb.go index aad4d05..a1d2af9 100644 --- a/go/greptime/v1/meta/heartbeat.pb.go +++ b/go/greptime/v1/meta/heartbeat.pb.go @@ -47,6 +47,8 @@ const ( // This role is used to prevent the region from being written during the // downgrade process. RegionRole_DowngradingLeader RegionRole = 2 + // A leader under staging mode. + RegionRole_StagingLeader RegionRole = 3 ) // Enum value maps for RegionRole. @@ -55,11 +57,13 @@ var ( 0: "Leader", 1: "Follower", 2: "DowngradingLeader", + 3: "StagingLeader", } RegionRole_value = map[string]int32{ "Leader": 0, "Follower": 1, "DowngradingLeader": 2, + "StagingLeader": 3, } ) @@ -1575,28 +1579,29 @@ var file_greptime_v1_meta_heartbeat_proto_rawDesc = []byte{ 0x69, 0x6c, 0x6c, 0x69, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x4d, 0x69, 0x6c, 0x6c, 0x69, 0x73, 0x12, 0x14, 0x0a, 0x04, 0x6a, 0x73, 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x04, 0x6a, 0x73, - 0x6f, 0x6e, 0x42, 0x09, 0x0a, 0x07, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x2a, 0x3d, 0x0a, + 0x6f, 0x6e, 0x42, 0x09, 0x0a, 0x07, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x2a, 0x50, 0x0a, 0x0a, 0x52, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x52, 0x6f, 0x6c, 0x65, 0x12, 0x0a, 0x0a, 0x06, 0x4c, 0x65, 0x61, 0x64, 0x65, 0x72, 0x10, 0x00, 0x12, 0x0c, 0x0a, 0x08, 0x46, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x72, 0x10, 0x01, 0x12, 0x15, 0x0a, 0x11, 0x44, 0x6f, 0x77, 0x6e, 0x67, 0x72, 0x61, - 0x64, 0x69, 0x6e, 0x67, 0x4c, 0x65, 0x61, 0x64, 0x65, 0x72, 0x10, 0x02, 0x32, 0xbf, 0x01, 0x0a, - 0x09, 0x48, 0x65, 0x61, 0x72, 0x74, 0x62, 0x65, 0x61, 0x74, 0x12, 0x5a, 0x0a, 0x09, 0x48, 0x65, - 0x61, 0x72, 0x74, 0x62, 0x65, 0x61, 0x74, 0x12, 0x22, 0x2e, 0x67, 0x72, 0x65, 0x70, 0x74, 0x69, - 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x6d, 0x65, 0x74, 0x61, 0x2e, 0x48, 0x65, 0x61, 0x72, 0x74, - 0x62, 0x65, 0x61, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x67, 0x72, - 0x65, 0x70, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x6d, 0x65, 0x74, 0x61, 0x2e, 0x48, - 0x65, 0x61, 0x72, 0x74, 0x62, 0x65, 0x61, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x22, 0x00, 0x28, 0x01, 0x30, 0x01, 0x12, 0x56, 0x0a, 0x09, 0x41, 0x73, 0x6b, 0x4c, 0x65, 0x61, - 0x64, 0x65, 0x72, 0x12, 0x22, 0x2e, 0x67, 0x72, 0x65, 0x70, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x76, - 0x31, 0x2e, 0x6d, 0x65, 0x74, 0x61, 0x2e, 0x41, 0x73, 0x6b, 0x4c, 0x65, 0x61, 0x64, 0x65, 0x72, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x67, 0x72, 0x65, 0x70, 0x74, 0x69, - 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x6d, 0x65, 0x74, 0x61, 0x2e, 0x41, 0x73, 0x6b, 0x4c, 0x65, - 0x61, 0x64, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x42, 0x3c, - 0x5a, 0x3a, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x47, 0x72, 0x65, - 0x70, 0x74, 0x69, 0x6d, 0x65, 0x54, 0x65, 0x61, 0x6d, 0x2f, 0x67, 0x72, 0x65, 0x70, 0x74, 0x69, - 0x6d, 0x65, 0x2d, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x6f, 0x2f, 0x67, 0x72, 0x65, 0x70, - 0x74, 0x69, 0x6d, 0x65, 0x2f, 0x76, 0x31, 0x2f, 0x6d, 0x65, 0x74, 0x61, 0x62, 0x06, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x33, + 0x64, 0x69, 0x6e, 0x67, 0x4c, 0x65, 0x61, 0x64, 0x65, 0x72, 0x10, 0x02, 0x12, 0x11, 0x0a, 0x0d, + 0x53, 0x74, 0x61, 0x67, 0x69, 0x6e, 0x67, 0x4c, 0x65, 0x61, 0x64, 0x65, 0x72, 0x10, 0x03, 0x32, + 0xbf, 0x01, 0x0a, 0x09, 0x48, 0x65, 0x61, 0x72, 0x74, 0x62, 0x65, 0x61, 0x74, 0x12, 0x5a, 0x0a, + 0x09, 0x48, 0x65, 0x61, 0x72, 0x74, 0x62, 0x65, 0x61, 0x74, 0x12, 0x22, 0x2e, 0x67, 0x72, 0x65, + 0x70, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x6d, 0x65, 0x74, 0x61, 0x2e, 0x48, 0x65, + 0x61, 0x72, 0x74, 0x62, 0x65, 0x61, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, + 0x2e, 0x67, 0x72, 0x65, 0x70, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x6d, 0x65, 0x74, + 0x61, 0x2e, 0x48, 0x65, 0x61, 0x72, 0x74, 0x62, 0x65, 0x61, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x22, 0x00, 0x28, 0x01, 0x30, 0x01, 0x12, 0x56, 0x0a, 0x09, 0x41, 0x73, 0x6b, + 0x4c, 0x65, 0x61, 0x64, 0x65, 0x72, 0x12, 0x22, 0x2e, 0x67, 0x72, 0x65, 0x70, 0x74, 0x69, 0x6d, + 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x6d, 0x65, 0x74, 0x61, 0x2e, 0x41, 0x73, 0x6b, 0x4c, 0x65, 0x61, + 0x64, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x67, 0x72, 0x65, + 0x70, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x6d, 0x65, 0x74, 0x61, 0x2e, 0x41, 0x73, + 0x6b, 0x4c, 0x65, 0x61, 0x64, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, + 0x00, 0x42, 0x3c, 0x5a, 0x3a, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, + 0x47, 0x72, 0x65, 0x70, 0x74, 0x69, 0x6d, 0x65, 0x54, 0x65, 0x61, 0x6d, 0x2f, 0x67, 0x72, 0x65, + 0x70, 0x74, 0x69, 0x6d, 0x65, 0x2d, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x6f, 0x2f, 0x67, + 0x72, 0x65, 0x70, 0x74, 0x69, 0x6d, 0x65, 0x2f, 0x76, 0x31, 0x2f, 0x6d, 0x65, 0x74, 0x61, 0x62, + 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( diff --git a/java/src/main/java/greptime/v1/meta/HeartbeatOuterClass.java b/java/src/main/java/greptime/v1/meta/HeartbeatOuterClass.java index 02adee9..5a227aa 100644 --- a/java/src/main/java/greptime/v1/meta/HeartbeatOuterClass.java +++ b/java/src/main/java/greptime/v1/meta/HeartbeatOuterClass.java @@ -46,6 +46,14 @@ public final class HeartbeatOuterClass { * DowngradingLeader = 2; */ DowngradingLeader(2), + /** + *
+     * A leader under staging mode.
+     * 
+ * + * StagingLeader = 3; + */ + StagingLeader(3), UNRECOGNIZED(-1), ; @@ -76,6 +84,14 @@ public final class HeartbeatOuterClass { * DowngradingLeader = 2; */ public static final int DowngradingLeader_VALUE = 2; + /** + *
+     * A leader under staging mode.
+     * 
+ * + * StagingLeader = 3; + */ + public static final int StagingLeader_VALUE = 3; public final int getNumber() { @@ -105,6 +121,7 @@ public final class HeartbeatOuterClass { case 0: return Leader; case 1: return Follower; case 2: return DowngradingLeader; + case 3: return StagingLeader; default: return null; } } @@ -6151,7 +6168,7 @@ com.google.protobuf.ByteString defaultValue); * * uint32 cpus = 4 [deprecated = true]; * @deprecated greptime.v1.meta.NodeInfo.cpus is deprecated. - * See greptime/v1/meta/heartbeat.proto;l=96 + * See greptime/v1/meta/heartbeat.proto;l=98 * @return The cpus. */ @java.lang.Deprecated int getCpus(); @@ -6163,7 +6180,7 @@ com.google.protobuf.ByteString defaultValue); * * uint64 memory_bytes = 5 [deprecated = true]; * @deprecated greptime.v1.meta.NodeInfo.memory_bytes is deprecated. - * See greptime/v1/meta/heartbeat.proto;l=98 + * See greptime/v1/meta/heartbeat.proto;l=100 * @return The memoryBytes. */ @java.lang.Deprecated long getMemoryBytes(); @@ -6479,7 +6496,7 @@ com.google.protobuf.ByteString defaultValue); * * uint32 cpus = 4 [deprecated = true]; * @deprecated greptime.v1.meta.NodeInfo.cpus is deprecated. - * See greptime/v1/meta/heartbeat.proto;l=96 + * See greptime/v1/meta/heartbeat.proto;l=98 * @return The cpus. */ @java.lang.Override @@ -6496,7 +6513,7 @@ com.google.protobuf.ByteString defaultValue); * * uint64 memory_bytes = 5 [deprecated = true]; * @deprecated greptime.v1.meta.NodeInfo.memory_bytes is deprecated. - * See greptime/v1/meta/heartbeat.proto;l=98 + * See greptime/v1/meta/heartbeat.proto;l=100 * @return The memoryBytes. */ @java.lang.Override @@ -7314,7 +7331,7 @@ com.google.protobuf.ByteString defaultValue); * * uint32 cpus = 4 [deprecated = true]; * @deprecated greptime.v1.meta.NodeInfo.cpus is deprecated. - * See greptime/v1/meta/heartbeat.proto;l=96 + * See greptime/v1/meta/heartbeat.proto;l=98 * @return The cpus. */ @java.lang.Override @@ -7328,7 +7345,7 @@ com.google.protobuf.ByteString defaultValue); * * uint32 cpus = 4 [deprecated = true]; * @deprecated greptime.v1.meta.NodeInfo.cpus is deprecated. - * See greptime/v1/meta/heartbeat.proto;l=96 + * See greptime/v1/meta/heartbeat.proto;l=98 * @param value The cpus to set. * @return This builder for chaining. */ @@ -7345,7 +7362,7 @@ com.google.protobuf.ByteString defaultValue); * * uint32 cpus = 4 [deprecated = true]; * @deprecated greptime.v1.meta.NodeInfo.cpus is deprecated. - * See greptime/v1/meta/heartbeat.proto;l=96 + * See greptime/v1/meta/heartbeat.proto;l=98 * @return This builder for chaining. */ @java.lang.Deprecated public Builder clearCpus() { @@ -7363,7 +7380,7 @@ com.google.protobuf.ByteString defaultValue); * * uint64 memory_bytes = 5 [deprecated = true]; * @deprecated greptime.v1.meta.NodeInfo.memory_bytes is deprecated. - * See greptime/v1/meta/heartbeat.proto;l=98 + * See greptime/v1/meta/heartbeat.proto;l=100 * @return The memoryBytes. */ @java.lang.Override @@ -7377,7 +7394,7 @@ com.google.protobuf.ByteString defaultValue); * * uint64 memory_bytes = 5 [deprecated = true]; * @deprecated greptime.v1.meta.NodeInfo.memory_bytes is deprecated. - * See greptime/v1/meta/heartbeat.proto;l=98 + * See greptime/v1/meta/heartbeat.proto;l=100 * @param value The memoryBytes to set. * @return This builder for chaining. */ @@ -7394,7 +7411,7 @@ com.google.protobuf.ByteString defaultValue); * * uint64 memory_bytes = 5 [deprecated = true]; * @deprecated greptime.v1.meta.NodeInfo.memory_bytes is deprecated. - * See greptime/v1/meta/heartbeat.proto;l=98 + * See greptime/v1/meta/heartbeat.proto;l=100 * @return This builder for chaining. */ @java.lang.Deprecated public Builder clearMemoryBytes() { @@ -19174,15 +19191,16 @@ java.lang.String defaultValue); ".greptime.v1.meta.MailboxMessageHeader\022\n" + "\n\002id\030\001 \001(\004\022\017\n\007subject\030\002 \001(\t\022\014\n\004from\030\003 \001(" + "\t\022\n\n\002to\030\004 \001(\t\022\030\n\020timestamp_millis\030\005 \001(\003\022" + - "\016\n\004json\030\006 \001(\tH\000B\t\n\007payload*=\n\nRegionRole" + + "\016\n\004json\030\006 \001(\tH\000B\t\n\007payload*P\n\nRegionRole" + "\022\n\n\006Leader\020\000\022\014\n\010Follower\020\001\022\025\n\021Downgradin" + - "gLeader\020\0022\277\001\n\tHeartbeat\022Z\n\tHeartbeat\022\".g" + - "reptime.v1.meta.HeartbeatRequest\032#.grept" + - "ime.v1.meta.HeartbeatResponse\"\000(\0010\001\022V\n\tA" + - "skLeader\022\".greptime.v1.meta.AskLeaderReq" + - "uest\032#.greptime.v1.meta.AskLeaderRespons" + - "e\"\000B "Leader", Self::Follower => "Follower", Self::DowngradingLeader => "DowngradingLeader", + Self::StagingLeader => "StagingLeader", } } /// Creates an enum from field names used in the ProtoBuf definition. @@ -394,6 +397,7 @@ impl RegionRole { "Leader" => Some(Self::Leader), "Follower" => Some(Self::Follower), "DowngradingLeader" => Some(Self::DowngradingLeader), + "StagingLeader" => Some(Self::StagingLeader), _ => None, } } diff --git a/src/generated/greptime_grpc_desc.bin b/src/generated/greptime_grpc_desc.bin index d7c79156006387b631e36baa4e12b5e692006180..ed6aa0b67d5ba32aa73547f3715e1c867f2274a1 100644 GIT binary patch delta 3208 zcmYLLTW?fV6rQzb&zW=fbUN+nm1zryLb;4oKuQ&;QPMO-B|!xOAxHqHP)MDIS`jNa zgb*$vrWh_q6wrv6mWyHlOM)?k1c;&f-)aF*4}IFeg679 z^XtXT;X8DtDS7%W6~BLzW=}q8qN*Id9{)CvUaSjiRd)Tzj@^4oyVv&bDE1H6BqwX< z6OlUBqtaojI`J#r{(JLU5r6q1b)0{dyvZ{K8c);a$)4xvIF+AKGL;a?Fu6(8=VwN% zqd{#Gy;p)+^scdv-We+PKdV%gN->$3opVS4g>_0PA!R7HB!&pTlTw1U#jjBvN=hjb zVREZz$TvqD2Ku8C+@hWD?HMda@xRNcuCP`3?8ZE(wgxp0A+N1<^{P{QAha#+?xMwo zZ52N8pFy4F6ZqR2o78;GM`GLKu`XKp?Dh&@fWJLxw0y36`;5HWruhIn#k~9*@yE-l zDgLjE`qu2M2)XE;LDmYB%&n<)$Oj5LR91N?A?b6lZm!y_U1gXo#wVB4mNmtS8ShOo zXs~h#ezAFmLoh4mJFS^yvtr94wLqJt!sM>F&`pKHu8LU-X1fBHOA7p5^$n^^^Sv-R z5P#H7-Gu>>whMUR5BRMPfj=-SQqO6AI!x}3fA6NQ!rlr$4gOv~Z~1BP_qNTn{>XJO z?s*>mgB89H{$RzQ^B=7E2Vt@lUwodr%B2cF0KZi655O0Z3gy1UN2Z;)%6)#Q zGRQNl&m0`ObKp+kWp^L$8xS>(4&@zNZL~VXiv>{&i0xd6$*d$Vd`)I_k zvMTPQkz9>hsa5Es{qeUiP)}ihh0lGozryD}+7JF>%?CIT*RPMloZCk8%%+#(Xw{af?b;H9E%*wr45dqBHV2qjQ7?;9~)T6wpaIqjOXnxhSOPXb!gk zFN+g6PhytJc5AJG7C39k?0lZ8^A19Lo^WHlt+hZG;(uPG{_+J9c)YX&AH@X<+Z|*Q zbC1>- z)>R;dKoGQmPRko`nF3P;qR?LEA~vEqROo$0iErZ8muN%zEAsgsmr`*uR|vNf*8~JZ zKw}69!z+Y)$wpy#g>W$$DS}^}Q{txG*$kNDnfQ7bUC z6EwrL3m{gRaP5-e6t0mlhYN�W|vpsG~ufb>`x(Q8e3Tf!eNR$Zyt*ROt!4GZLVB0P5|M1pB60C8<-2dp9tTf z=FP}~`4jn#Y8iZU?E4^Y>80hJ58MFYPjDVklW7V-xILh#U9Hv<1RutSda1Ybp=*Ym zF69(E6rOYE&YSn{bUN+pFVhxEX(+1!S~tNuS~PL1 zKx1jzF|lbsjLc+c{1c+Rjb-*%w(MG(|@j{ zU0eD}W?X(>RO93l{J#2G9>J_H-{H(8oAos;Rtt<-Do*z6)2paZ=r5V2VAdb`TvFio zSJ$Xc!w=%*9{t-YT2!m3Kj*)%kse{|Nm3O>;0MLZ)JQ zF!6<*7_RbQ7^@8OO!34Fh&q!J0J<{Z+5rUOKot8J>;`ITRhN+=bVyX@7dLOyci*O! zg+nfhl;H6>6qY#^kI$i8h3YmcjL%`Mx@c|TaEZ_3bGXFk@i`3s62k{Lq6fNYS>Z^D z&*O6>v}c?WJU&Mnn^fNLF(HHcRTniD21`}&gbYSGmk&?KU|i++D0fI#c2i?5_7{MXU^_|m$Yw1q$9ElpE$DbgbquN#vVRw$&7r>4s z2%aag%mpbh(AI>YiPkLkQAp3zlBFh-Fb*zI;)=@zt0OOv851c(QA8#eNi-T^C=##* ztnd)zi&RX3r_Lt<1Sz1Gaz>Y^ve`!=y+rd`ofJ*KOk$48t}GT}n_1dRy!EVSOSo<1#V5|xgF;g_1?77v+3ZSze7qByupiLYG) za2Lp{6!KKc_8Un)b2I1OqQ5fDJ z+&fl^;7t;>F35)gSmvRLVt1{SbGb=aUX~V>z-f&5g9L&W(2f=$v?GKCwpwog2w{VH z$TM+pixPKTXER{lqL5#ZQf9cAQSSF>IcF|zjGE`VEKu8R5)CdWAO-YNHZI;Kyra3ejNsyK6JFA` z0-!r27P(*&6#)7QlCZi%8Qas0-~qft@qAA<+Jyzvrm{G=M~UxTo65kvM`68rNSWEd z`#!@m(-^><@c{(+K2_KR0bzUJCMaY!4jxeAk+aQ$`M@uBmb*Xh_ZkT82DHlw2=2Js z>jM%Pw&Q-Wv)q-3Bo9pXuK>(#DQwei(A5uxAuyOr3y`JfrfQ z`rJq`M^pO!_vmPGYDU7Hnj(Bcaz!~aK2wBmNFJXY57V@7BM{~V(2gD;q|=12JuBsR z$FyxDOEGHC{c!<73TUMZfuVgqlPO-^fXLML1LU7bH09g$A2rmZe;F4keSQ;_FU7xU z_c*-ELBb5$r{iS~h&R_fPCQJ+!3z?v^y^L3vi1dq{Efg_;lN&!v=;*q9t3Fj0T7li VDPsp05SA~`6gJaDVY6uc@_z>BGkyR7