@corca-org/ceal-host-linux-arm64 1.0.19 → 1.0.20

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -980,6 +980,7 @@ var REQUIRED_FIELDS = CEAL_CLIENT_WIRE_CONTRACT.command_response.bare_document_f
980
980
  var OPTIONAL_FIELDS = CEAL_CLIENT_WIRE_CONTRACT.command_response.bare_document_optional_fields;
981
981
 
982
982
  // packages/ceal-client-protocol/src/resource-row.ts
983
+ var CEAL_RESOURCE_ROW_TITLE_MATCH_DISPOSITIONS = vocabulary(["exact", "not_exact", "unknown"]);
983
984
  var CEAL_RESOURCE_SEARCH_ORDERS = vocabulary(["relevance", "modified", "viewed", "created"]);
984
985
  var CEAL_RESOURCE_SEARCH_DIRECTIONS = vocabulary(["ascending", "descending"]);
985
986
  var CEAL_RESOURCE_SEARCH_FILTERS = vocabulary(["query", "modified_since", "since", "until", "authored_by_me", "authored_by", "include_replies", "kinds", "container_ref", "container_refs", "container_names", "addressed_to_me", "unread"]);
@@ -1063,6 +1064,7 @@ var RESOURCE_ROW_KEY_RULES = Object.freeze({
1063
1064
  next: { required: true, timestamp: false },
1064
1065
  kind: { required: true, timestamp: false },
1065
1066
  matched_kinds: { required: false, timestamp: false },
1067
+ title_match: { required: false, timestamp: false },
1066
1068
  title: { required: true, timestamp: false },
1067
1069
  container_label: { required: true, timestamp: false },
1068
1070
  container_ref: { required: false, timestamp: false },
@@ -1508,7 +1510,7 @@ var CEAL_HOST_AUTHENTICATION_POLICY = Object.freeze({
1508
1510
  invalid_arguments: Object.freeze({ classification: "host_arguments_invalid", next_action: "answer_with_gap" }),
1509
1511
  options_invalid: Object.freeze({ classification: "host_configuration_invalid", next_action: "answer_with_gap" }),
1510
1512
  session_unavailable: Object.freeze({ classification: "host_session_unavailable", next_action: "answer_with_gap" }),
1511
- context_unavailable: Object.freeze({ classification: "host_context_unavailable", next_action: "refresh_host_invocation_context", remedy: "the Host has no invocation context from the current transcript turn; run `ceal-host install` to repair the Host hook registration, then retry this command on a fresh Host turn" }),
1513
+ context_unavailable: Object.freeze({ classification: "host_context_unavailable", next_action: "refresh_host_invocation_context", remedy: "the Host has no invocation context from the current transcript turn; send a new message to start a fresh Host turn, then retry this command on that turn (run `ceal-host install` only if the Host hook registration is missing or drifted)" }),
1512
1514
  context_replaced: Object.freeze({ classification: "host_invocation_context_stale", next_action: "refresh_host_invocation_context" }),
1513
1515
  no_binding: Object.freeze({ classification: "host_binding_unavailable", next_action: "refresh_host_invocation_context" }),
1514
1516
  context_stale: Object.freeze({ classification: "host_invocation_context_stale", next_action: "refresh_host_invocation_context" }),
@@ -1585,6 +1587,7 @@ function exactKeys(value, expected) {
1585
1587
  }
1586
1588
 
1587
1589
  // packages/ceal-client-protocol/src/host-service-diagnostic.ts
1590
+ var CEAL_HOST_SERVICE_DIAGNOSTIC_SCHEMA = "ceal.host_service_diagnostic.v1";
1588
1591
  var CEAL_HOST_SERVICE_DIAGNOSTIC_PRODUCERS = vocabulary(["claude", "codex"]);
1589
1592
  var CEAL_HOST_SERVICE_DIAGNOSTIC_EVENTS = vocabulary([
1590
1593
  "hook_invoked",
@@ -1593,6 +1596,7 @@ var CEAL_HOST_SERVICE_DIAGNOSTIC_EVENTS = vocabulary([
1593
1596
  "watcher_turn_observed",
1594
1597
  "current_prompt_registered",
1595
1598
  "current_prompt_registration_failed",
1599
+ "current_prompt_capacity_exhausted",
1596
1600
  "activation_recorded",
1597
1601
  "activation_failed",
1598
1602
  "watcher_scan_failed",
@@ -1749,6 +1753,17 @@ function errorCode(error) {
1749
1753
  import { copyFile, open, stat, truncate } from "node:fs/promises";
1750
1754
  import { isAbsolute } from "node:path";
1751
1755
  var HOST_SERVICE_LOG_ENVIRONMENT = "CEAL_HOST_SERVICE_LOG";
1756
+ function writeHostServiceDiagnostic(producer_id, event, failure_kind, cause, sink) {
1757
+ const line = `${JSON.stringify({ schema_version: CEAL_HOST_SERVICE_DIAGNOSTIC_SCHEMA, producer_id, event, ...event === "watcher_scan_failed" && failure_kind !== void 0 ? { failure_kind } : {}, ...event === "watcher_scan_failed" && cause !== void 0 ? { cause } : {} })}
1758
+ `;
1759
+ try {
1760
+ (sink ?? defaultHostServiceDiagnosticSink)(line);
1761
+ } catch {
1762
+ }
1763
+ }
1764
+ function defaultHostServiceDiagnosticSink(line) {
1765
+ process.stderr.write(line);
1766
+ }
1752
1767
  var HOST_SERVICE_LOG_MAX_BYTES = 1024 * 1024;
1753
1768
  var HOST_SERVICE_LOG_CHECK_INTERVAL_MS = 6e4;
1754
1769
  function hostServiceLogPreviousPath(path) {
@@ -3502,10 +3517,20 @@ import { dirname as dirname3, join as join6 } from "node:path";
3502
3517
  import { createHash as createHash5 } from "node:crypto";
3503
3518
  var HOST_CURRENT_PROMPT_MAX_BYTES = 256 * 1024;
3504
3519
  var MAX_CURRENT_PROMPTS = 1024;
3520
+ var MAX_CONSUMED_PROMPTS = 1024;
3521
+ var HostCurrentPromptCapacityError = class extends Error {
3522
+ report_diagnostic;
3523
+ constructor(reportDiagnostic) {
3524
+ super("current_prompt_unavailable");
3525
+ this.name = "HostCurrentPromptCapacityError";
3526
+ this.report_diagnostic = reportDiagnostic;
3527
+ }
3528
+ };
3505
3529
  var HostCurrentPromptCustody = class {
3506
3530
  #records = /* @__PURE__ */ new Map();
3507
3531
  #consumed = /* @__PURE__ */ new Map();
3508
3532
  #now;
3533
+ #capacityDiagnosticReported = false;
3509
3534
  constructor(now = Date.now) {
3510
3535
  this.#now = now;
3511
3536
  }
@@ -3517,10 +3542,14 @@ var HostCurrentPromptCustody = class {
3517
3542
  this.#purge();
3518
3543
  const key = promptKey(identity);
3519
3544
  if (this.#consumed.has(key)) return;
3520
- if (!this.#records.has(key) && this.#records.size + this.#consumed.size >= MAX_CURRENT_PROMPTS) throw new TypeError("current_prompt_unavailable");
3545
+ if (!this.#records.has(key) && this.#records.size >= MAX_CURRENT_PROMPTS) {
3546
+ const reportDiagnostic = !this.#capacityDiagnosticReported;
3547
+ this.#capacityDiagnosticReported = true;
3548
+ throw new HostCurrentPromptCapacityError(reportDiagnostic);
3549
+ }
3521
3550
  this.#records.set(key, { prompt, expires_at_ms: expiry });
3522
3551
  }
3523
- /** Transfer this turn's prompt into at most one authenticated invocation. */
3552
+ /** Transfer this turn's prompt once while its bounded recent replay guard retains the identity. */
3524
3553
  take(identity) {
3525
3554
  this.#purge();
3526
3555
  const key = promptKey(identity);
@@ -3528,14 +3557,38 @@ var HostCurrentPromptCustody = class {
3528
3557
  if (prompt !== void 0) {
3529
3558
  const expiresAt = this.#records.get(key)?.expires_at_ms;
3530
3559
  this.#records.delete(key);
3531
- if (expiresAt !== void 0) this.#consumed.set(key, expiresAt);
3560
+ if (expiresAt !== void 0) this.#rememberConsumed(key, expiresAt);
3561
+ this.#resetCapacityDiagnosticIfAvailable();
3532
3562
  }
3533
3563
  return prompt;
3534
3564
  }
3565
+ /** Release a prompt after its turn ends while retaining the same bounded replay guard. */
3566
+ release(identity) {
3567
+ this.#purge();
3568
+ const key = promptKey(identity);
3569
+ const record6 = this.#records.get(key);
3570
+ if (record6 === void 0) return false;
3571
+ this.#records.delete(key);
3572
+ this.#rememberConsumed(key, record6.expires_at_ms);
3573
+ this.#resetCapacityDiagnosticIfAvailable();
3574
+ return true;
3575
+ }
3576
+ #rememberConsumed(key, expiresAt) {
3577
+ this.#consumed.set(key, expiresAt);
3578
+ while (this.#consumed.size > MAX_CONSUMED_PROMPTS) {
3579
+ const oldest = this.#consumed.keys().next().value;
3580
+ if (oldest === void 0) return;
3581
+ this.#consumed.delete(oldest);
3582
+ }
3583
+ }
3535
3584
  #purge() {
3536
3585
  const now = this.#now();
3537
3586
  for (const [key, value] of this.#records) if (value.expires_at_ms <= now) this.#records.delete(key);
3538
3587
  for (const [key, expiresAt] of this.#consumed) if (expiresAt <= now) this.#consumed.delete(key);
3588
+ this.#resetCapacityDiagnosticIfAvailable();
3589
+ }
3590
+ #resetCapacityDiagnosticIfAvailable() {
3591
+ if (this.#records.size < MAX_CURRENT_PROMPTS) this.#capacityDiagnosticReported = false;
3539
3592
  }
3540
3593
  };
3541
3594
  function promptKey(value) {
@@ -3564,6 +3617,7 @@ var HOST_RELAY_BINDING_RESULT_SCHEMA = "ceal.host_relay_binding_result.v1";
3564
3617
  var HOST_RELAY_INVOCATION_CONTEXT_QUERY_SCHEMA = "ceal.host_relay_invocation_context_query.v1";
3565
3618
  var HOST_RELAY_INVOCATION_CONTEXT_RESULT_SCHEMA = "ceal.host_relay_invocation_context_result.v1";
3566
3619
  var HOST_RELAY_CURRENT_PROMPT_REGISTER_SCHEMA = "ceal.host_relay_current_prompt_register.v1";
3620
+ var HOST_RELAY_CURRENT_PROMPT_RELEASE_SCHEMA = "ceal.host_relay_current_prompt_release.v1";
3567
3621
  var HOST_RELAY_CURRENT_PROMPT_RESULT_SCHEMA = "ceal.host_relay_current_prompt_result.v1";
3568
3622
  var HOST_RELAY_IPC_LENGTH_BYTES = Uint32Array.BYTES_PER_ELEMENT;
3569
3623
  var HOST_RELAY_INVOCATION_MINT_REFUSAL_REASONS = vocabulary([
@@ -3687,7 +3741,7 @@ function serveSocket(socket, options, currentPrompts, quarantine, active, socket
3687
3741
  socket.once("error", () => closeConnection(socket, state, active, sockets));
3688
3742
  socket.once("close", () => closeConnection(socket, state, active, sockets));
3689
3743
  socket.once("end", () => {
3690
- if (state.buffer.length > 0 && currentPromptWire(state.buffer)) {
3744
+ if (state.buffer.length > 0 && isCurrentPromptWire(state.buffer)) {
3691
3745
  writeCurrentPromptResponse(socket, "current_prompt_unavailable");
3692
3746
  socket.end();
3693
3747
  } else if (state.buffer.length > 0) void quarantine.retainMalformed(state.buffer, "frame_truncated").finally(() => {
@@ -3703,7 +3757,7 @@ async function drainFrames(socket, state, options, currentPrompts, quarantine, a
3703
3757
  }
3704
3758
  async function processBufferedRequest(socket, state, options, currentPrompts, quarantine, active) {
3705
3759
  const length = state.buffer.readUInt32BE(0);
3706
- const promptWire = currentPromptWire(state.buffer);
3760
+ const promptWire = isCurrentPromptWire(state.buffer);
3707
3761
  const maximum = promptWire ? HOST_CURRENT_PROMPT_MAX_BYTES + 4096 : HOST_PRODUCER_MAX_JSON_BYTES;
3708
3762
  if (length === 0 || length > maximum) {
3709
3763
  await refuseInvalidBufferedRequest(socket, state.buffer, length, promptWire, quarantine);
@@ -3721,13 +3775,8 @@ async function processBufferedRequest(socket, state, options, currentPrompts, qu
3721
3775
  await refuseMalformedRequest(socket, encoded, promptWire, error, quarantine);
3722
3776
  return true;
3723
3777
  }
3724
- if (request2.schema_version === HOST_RELAY_CURRENT_PROMPT_REGISTER_SCHEMA) {
3725
- try {
3726
- currentPrompts.register(request2, request2.current_prompt, request2.context_expires_at);
3727
- writeCurrentPromptResponse(socket, "registered");
3728
- } catch {
3729
- writeCurrentPromptResponse(socket, "current_prompt_unavailable");
3730
- }
3778
+ if (request2.schema_version === HOST_RELAY_CURRENT_PROMPT_REGISTER_SCHEMA || request2.schema_version === HOST_RELAY_CURRENT_PROMPT_RELEASE_SCHEMA) {
3779
+ answerCurrentPromptRequest(socket, request2, currentPrompts, options.diagnostic_sink);
3731
3780
  return true;
3732
3781
  }
3733
3782
  const answered = await processHostQuery(socket, request2, options, currentPrompts, state.abort.signal);
@@ -3739,6 +3788,22 @@ async function processBufferedRequest(socket, state, options, currentPrompts, qu
3739
3788
  await processProducerRequest(socket, state, request2, encoded, options.admission, quarantine, active);
3740
3789
  return true;
3741
3790
  }
3791
+ function answerCurrentPromptRequest(socket, request2, currentPrompts, sink) {
3792
+ if (request2.schema_version === HOST_RELAY_CURRENT_PROMPT_RELEASE_SCHEMA) {
3793
+ currentPrompts.release(request2);
3794
+ writeCurrentPromptResponse(socket, "released");
3795
+ return;
3796
+ }
3797
+ try {
3798
+ currentPrompts.register(request2, request2.current_prompt, request2.context_expires_at);
3799
+ writeCurrentPromptResponse(socket, "registered");
3800
+ } catch (error) {
3801
+ if (error instanceof HostCurrentPromptCapacityError) {
3802
+ if (error.report_diagnostic) writeHostServiceDiagnostic(request2.producer_id, "current_prompt_capacity_exhausted", void 0, void 0, sink);
3803
+ writeCurrentPromptResponse(socket, "capacity_exhausted");
3804
+ } else writeCurrentPromptResponse(socket, "current_prompt_unavailable");
3805
+ }
3806
+ }
3742
3807
  async function refuseInvalidBufferedRequest(socket, rawBuffer, length, promptWire, quarantine) {
3743
3808
  if (promptWire) {
3744
3809
  writeCurrentPromptResponse(socket, "current_prompt_unavailable");
@@ -3986,6 +4051,10 @@ function decodeLocalRequest(value) {
3986
4051
  if (!validCurrentPromptRegisterRequest(value)) throw new HostProducerFrameError("invalid_frame_shape");
3987
4052
  return value;
3988
4053
  }
4054
+ if (value.schema_version === HOST_RELAY_CURRENT_PROMPT_RELEASE_SCHEMA) {
4055
+ if (!validCurrentPromptReleaseRequest(value)) throw new HostProducerFrameError("invalid_frame_shape");
4056
+ return value;
4057
+ }
3989
4058
  if (value.schema_version === HOST_RELAY_BINDING_QUERY_SCHEMA) {
3990
4059
  if (!validBindingQueryRequest(value)) throw new HostProducerFrameError("invalid_frame_shape");
3991
4060
  return value;
@@ -3999,6 +4068,9 @@ function decodeLocalRequest(value) {
3999
4068
  function validCurrentPromptRegisterRequest(value) {
4000
4069
  return validQueryIdentity(value, HOST_RELAY_CURRENT_PROMPT_REGISTER_SCHEMA) && exactKeys4(value, ["schema_version", "producer_id", "producer_installation_ref", "local_session_ref", "local_turn_ref", "prompt_ref", "current_prompt", "context_expires_at"]) && safeRef3(value.prompt_ref) && typeof value.current_prompt === "string" && Buffer.byteLength(value.current_prompt, "utf8") > 0 && Buffer.byteLength(value.current_prompt, "utf8") <= HOST_CURRENT_PROMPT_MAX_BYTES && validTimestamp2(value.context_expires_at);
4001
4070
  }
4071
+ function validCurrentPromptReleaseRequest(value) {
4072
+ return validQueryIdentity(value, HOST_RELAY_CURRENT_PROMPT_RELEASE_SCHEMA) && exactKeys4(value, ["schema_version", "producer_id", "producer_installation_ref", "local_session_ref", "local_turn_ref", "prompt_ref"]) && safeRef3(value.prompt_ref);
4073
+ }
4002
4074
  function validBindingQueryRequest(value) {
4003
4075
  return validQueryIdentity(value, HOST_RELAY_BINDING_QUERY_SCHEMA) && exactKeys4(value, ["schema_version", "producer_id", "producer_installation_ref", "local_session_ref", "local_turn_ref"]);
4004
4076
  }
@@ -4033,9 +4105,15 @@ function encodeLengthPrefixed(value) {
4033
4105
  body.copy(output, HOST_RELAY_IPC_LENGTH_BYTES);
4034
4106
  return output;
4035
4107
  }
4036
- function currentPromptWire(value) {
4108
+ function isCurrentPromptWire(value) {
4109
+ return currentPromptRegisterWire(value) || currentPromptReleaseWire(value);
4110
+ }
4111
+ function currentPromptRegisterWire(value) {
4037
4112
  return value.subarray(HOST_RELAY_IPC_LENGTH_BYTES, Math.min(value.length, HOST_RELAY_IPC_LENGTH_BYTES + 128)).includes(Buffer.from(`"schema_version":"${HOST_RELAY_CURRENT_PROMPT_REGISTER_SCHEMA}"`, "utf8"));
4038
4113
  }
4114
+ function currentPromptReleaseWire(value) {
4115
+ return value.subarray(HOST_RELAY_IPC_LENGTH_BYTES, Math.min(value.length, HOST_RELAY_IPC_LENGTH_BYTES + 128)).includes(Buffer.from(`"schema_version":"${HOST_RELAY_CURRENT_PROMPT_RELEASE_SCHEMA}"`, "utf8"));
4116
+ }
4039
4117
  function exactKeys4(value, required, optional = []) {
4040
4118
  const keys = Object.keys(value);
4041
4119
  return required.every((key) => Object.hasOwn(value, key)) && keys.every((key) => required.includes(key) || optional.includes(key));
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@corca-org/ceal-host-linux-arm64",
3
- "version": "1.0.19",
3
+ "version": "1.0.20",
4
4
  "license": "MIT",
5
5
  "repository": {
6
6
  "type": "git",
@@ -3,12 +3,12 @@
3
3
  "product": "ceal-host",
4
4
  "version_source": {
5
5
  "product": "ceal-host",
6
- "version": "1.0.19"
6
+ "version": "1.0.20"
7
7
  },
8
8
  "source": {
9
9
  "repository": "corca-ai/ceal",
10
- "commit": "5871860149550912c8f86cfd6e6b505b6a8d10a6",
11
- "tree": "76cdad29fbb7f8c9380217a69d2ebb564fdcd72e"
10
+ "commit": "489268bcad5cb18af4d945a670ce408825193fa6",
11
+ "tree": "cccf6b16edbb9503414c7a007c29cf45bf373c4e"
12
12
  },
13
13
  "target": "linux-arm64",
14
14
  "required_features": [],
@@ -19,7 +19,7 @@
19
19
  ],
20
20
  "executable": true,
21
21
  "path": "bin/ceal-host",
22
- "sha256": "469b1d063d5a9eae0f6fc650df2bbb9c49b4bca03020a394312201af4fd45a75"
22
+ "sha256": "3ebd34e70d10390332afb57fdb82a342af46a8d11c05a347806676802dbd916d"
23
23
  },
24
24
  {
25
25
  "owners": [
@@ -27,7 +27,7 @@
27
27
  ],
28
28
  "executable": false,
29
29
  "path": "libexec/ceal-host/claude-hook.mjs",
30
- "sha256": "44d8da51c91fa2ba356b0df5538818141ee290b0bef1b5fc2984d152840493e6"
30
+ "sha256": "9855ee0b659db272d9a085a25678c66e8fa1ab8e324894374c62fc0abe5763f5"
31
31
  },
32
32
  {
33
33
  "owners": [
@@ -35,7 +35,7 @@
35
35
  ],
36
36
  "executable": false,
37
37
  "path": "libexec/ceal-host/claude-invocation-authentication.mjs",
38
- "sha256": "4637588828466aa1078a2b0b33a3fe6bd2941161a9f27cc51448579c38d6228a"
38
+ "sha256": "4170ceaf9105eb5f8561ec47e4399236270c2405ba46ba2cc054d1866bfa7bc7"
39
39
  },
40
40
  {
41
41
  "owners": [
@@ -43,7 +43,7 @@
43
43
  ],
44
44
  "executable": false,
45
45
  "path": "libexec/ceal-host/claude-producer.mjs",
46
- "sha256": "ba7e1746a217e894d58bdd09f7000bc4a6c29b06192786bfa9ba1380b78d8c23"
46
+ "sha256": "a052b05bec47ae8bb585fd6b21498c7e203b0438a0c8bf73898b842d9c80f7af"
47
47
  },
48
48
  {
49
49
  "owners": [
@@ -51,7 +51,7 @@
51
51
  ],
52
52
  "executable": false,
53
53
  "path": "libexec/ceal-host/codex-hook.mjs",
54
- "sha256": "7fcdd86c3b845604c57556898d31f5a47c001972f618807445341957dcb685a8"
54
+ "sha256": "29e069007aaed9a1ffcb07ce3aefe80b010fafc18114ecdba770f5c60414d8e4"
55
55
  },
56
56
  {
57
57
  "owners": [
@@ -59,7 +59,7 @@
59
59
  ],
60
60
  "executable": false,
61
61
  "path": "libexec/ceal-host/codex-invocation-authentication.mjs",
62
- "sha256": "a91b97287f7a5869ff3880e00afa3483b40958a5d7cc6242b01229c6e7d676ad"
62
+ "sha256": "d0f5fcb696478a5de6caff04f41ee09b99690440ae957e670fe1624635652a0a"
63
63
  },
64
64
  {
65
65
  "owners": [
@@ -67,7 +67,7 @@
67
67
  ],
68
68
  "executable": false,
69
69
  "path": "libexec/ceal-host/codex-producer.mjs",
70
- "sha256": "54e2b17433b5d1a3891586a9474a3122b5759c2550b0fb9e1dd300c0affa7c68"
70
+ "sha256": "29d32a67b1a000d4efa1c27a6546beaab9a2f97150d6ad956cdd4a848b93bae9"
71
71
  },
72
72
  {
73
73
  "owners": [
@@ -75,7 +75,7 @@
75
75
  ],
76
76
  "executable": false,
77
77
  "path": "libexec/ceal-host/control.mjs",
78
- "sha256": "b346a2767ef5207ace310eb5a9d5202ac262a1bb98f967b0296253944ab763dd"
78
+ "sha256": "7d568d3b37924d7cc8ec6bc0f328996fcc22540d2b38b4e84c2362336cf15ec1"
79
79
  },
80
80
  {
81
81
  "owners": [
@@ -91,7 +91,7 @@
91
91
  ],
92
92
  "executable": false,
93
93
  "path": "libexec/ceal-host/relay.mjs",
94
- "sha256": "1fcbc0c957eddb3d6420e2b1db3ffa866cb03b5a6f7ff7c7169972bf5ffafa2e"
94
+ "sha256": "9481b8dab66eef5f06d8fbcc88f96602d25be001ffbaf5073aeea0ecada9384a"
95
95
  }
96
96
  ]
97
97
  }
@@ -1 +1 @@
1
- {"mediaType":"application/vnd.dev.sigstore.bundle.v0.3+json","verificationMaterial":{"certificate":{"rawBytes":"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"},"tlogEntries":[{"logIndex":"3210249472","logId":{"keyId":"wNI9atQGlz+VWfO6LRygH4QUfY/8W4RFwiT5i5WRgB0="},"kindVersion":{"kind":"hashedrekord","version":"0.0.1"},"integratedTime":"1791734077","inclusionPromise":{"signedEntryTimestamp":"MEUCIQCM9CvaVh+PZXogOcPQA6CF2gF9Wdm6HqBcbAs3Vg5bzwIgPxhb6peCx3qvMR4ASPKGMiUmj8tCSGkoUQ3JNBqtLB4="},"inclusionProof":{"logIndex":"3088345210","rootHash":"L4pRENoUIGvsR9KjM3FD4L8GAtnfb2Jo1kQcTVD4Yb8=","treeSize":"3088345225","hashes":["KJrxYyNIYUvZp/a6FLRsNv/8jK+As9g9+mi6wkuofmQ=","cL5ITdwRz7zGoMLa+e9eVSLxxPxr1ZdgcxB7+nKRINI=","3wj2WEHAeB0bYDw5Oo8lAc+TwgJxVZa1UTBPPmSedU8=","SKRSHSKyDNsJq7I8uv0leCrg6IYFhHd7DAILq1Dze5A=","KHI0MeMYAPA0E/9MnDs2Csso+cb7mgJ+2kn4BtKGOHk=","pVWSAbS+JiV192PxvxI9ppbDOkdSrBtXpDx+0gZuDn0=","WlYMNI2JraGI7a71vPzoczZBs6Y7cWqDo5fRRslSQGA=","XogJ0eE6qEOImLWhCCgj/xSOyYYmdcpQbKPqIo+CAw0=","CoM9DPdvc/fBqVMmmESxU4T2IS3OUjKNTgaSBKfhji8=","4L0Cx8FyMDcjKuKWCwQtt9duwZMegDqtEN59fZdOwiM=","eI71K/Tn7La+VKhffQJdBulBroInGNTTHSiRgrdRXs0=","Uy2Yv6LQFM5LVRKwIxlnijL05jP2gZXe0FqxQjOKmVw=","eY8V0Jmm3eYUC9SSy+CqoiziR24WFSzUuOL3IeQTx2g=","gg9GNApNke3+zNhl4tsWtmIycCFrOMCB3lys6XuSQNQ=","NlOclldmKPA1tMKIskqHAwuQDYHp31YwpK+OOMrMccc=","qxzHanAzz57SDdmJe0B7bJK72NTIBbwEMGBBKvDOROw=","xH/DCseLHr9eKoYT8qsORZK7zVdEGYWHuVtsVrD95wY="],"checkpoint":{"envelope":"rekor.sigstore.dev - 1193050959916656506\n3088345225\nL4pRENoUIGvsR9KjM3FD4L8GAtnfb2Jo1kQcTVD4Yb8=\n\n— rekor.sigstore.dev wNI9ajBGAiEAo7Qav9pcEVAp0ie6oBqfIMyCTsCg57lReJEGOYrAidUCIQD5luzMZj/6fTq4uNXObdkw9Z1Ij3kpQ8tQEyFI12bCLw==\n"}},"canonicalizedBody":"eyJhcGlWZXJzaW9uIjoiMC4wLjEiLCJraW5kIjoiaGFzaGVkcmVrb3JkIiwic3BlYyI6eyJkYXRhIjp7Imhhc2giOnsiYWxnb3JpdGhtIjoic2hhMjU2IiwidmFsdWUiOiIzZDMyZjhlMjk0MDdhN2Q2YWE4Y2EzNDM0Yjc2NDlhOTg5NGZhZjdiMzAyZDdmNjM3NTAzYTFlNTA2OWQ1ZTExIn19LCJzaWduYXR1cmUiOnsiY29udGVudCI6Ik1FWUNJUUMwWUs5b1pKNFQ4TjBDWWFKUnRnOHh0b3FKQTNwcVZ0US9iTUhYN3p2K2xRSWhBS1AydUg1VmIwMVBhV2J6VEpsQU9wNlF1ek01WFhSS2xDdUczamhiSjFZViIsInB1YmxpY0tleSI6eyJjb250ZW50IjoiTFMwdExTMUNSVWRKVGlCRFJWSlVTVVpKUTBGVVJTMHRMUzB0Q2sxSlNVYzNWRU5EUW01VFowRjNTVUpCWjBsVlJXcEpTRnBZUldnMGVqRnNUMVJJWjFKbk9XMDBRMU5JZG5KVmQwTm5XVWxMYjFwSmVtb3dSVUYzVFhjS1RucEZWazFDVFVkQk1WVkZRMmhOVFdNeWJHNWpNMUoyWTIxVmRWcEhWakpOVWpSM1NFRlpSRlpSVVVSRmVGWjZZVmRrZW1SSE9YbGFVekZ3WW01U2JBcGpiVEZzV2tkc2FHUkhWWGRJYUdOT1RXcFplRTFFUlhoTlZGVXhUa1JOTTFkb1kwNU5hbGw0VFVSRmVFMVVXWGRPUkUwelYycEJRVTFHYTNkRmQxbElDa3R2V2tsNmFqQkRRVkZaU1V0dldrbDZhakJFUVZGalJGRm5RVVZwWlU5a09Ua3phWHBpWkcxMGJYSnhkVEY2U1Znd1RrbzRhMlJYVVdOUFZHdDNWVGdLVW14NVF6RlFhV05IZEd4UFV6VnVjRVJOTVc4MFpFeG1LMW92UVhOVGJ6VnpiM1JrUzBKV09XTkZlV1JMZUVaeWIzRlBRMEphVFhkbloxZFFUVUUwUndwQk1WVmtSSGRGUWk5M1VVVkJkMGxJWjBSQlZFSm5UbFpJVTFWRlJFUkJTMEpuWjNKQ1owVkdRbEZqUkVGNlFXWkNaMDVXU0ZOTlJVZEVRVmRuUWxSbUNqQXJibEJXYVZGU2JIWnRiekpQYTI5V1lVeEhUR2hvYTFCNlFtMUNaMDVXU0ZKRlFrRm1PRVZZUkVKaGFHeG9iMlJJVW5kamVtOTJUREprY0dSSGFERUtXV2sxYW1JeU1IWlpNamw1V1RKRmRGbFhhM1paTWxab1lrTTRkVm95YkRCaFNGWnBURE5rZG1OdGRHMWlSemt6WTNrNWVWcFhlR3haV0U1c1RGZE9hQXBpYlZKd1drZEdNRnBUTlRWaVYzaEJZMjFXYldONU9XOWFWMFpyWTNrNWRGbFhiSFZOUkd0SFEybHpSMEZSVVVKbk56aDNRVkZGUlVzeWFEQmtTRUo2Q2s5cE9IWmtSemx5V2xjMGRWbFhUakJoVnpsMVkzazFibUZZVW05a1Ywb3hZekpXZVZreU9YVmtSMVoxWkVNMWFtSXlNSGRJZDFsTFMzZFpRa0pCUjBRS2RucEJRa0ZuVVZKa01qbDVZVEphYzJJelpHWmFSMng2WTBkR01Ga3laM2RPWjFsTFMzZFpRa0pCUjBSMmVrRkNRWGRSYjA1VVp6Tk5WR2N5VFVSRk1BcFBWRlV4VFVScmVFMXRUVFJhYW1jeVdUSmFhMDV0VlRKWmFsVjNUbGRKTWxsVWFHdE5WRUpvVG1wQmEwSm5iM0pDWjBWRlFWbFBMMDFCUlVWQ1FscEVDbHBYUm5OSlNFcHNZa2RXYUdNeVZXZFpNa1oxV2tkc2ExbFlVbXhOUW5OSFEybHpSMEZSVVVKbk56aDNRVkZWUlVSWFRuWmpiVTVvVEZkR2NFd3lUbXdLV1ZkM2QwaFJXVXRMZDFsQ1FrRkhSSFo2UVVKQ1oxRlFZMjFXYldONU9XOWFWMFpyWTNrNWRGbFhiSFZOUkhOSFEybHpSMEZSVVVKbk56aDNRVkZuUlFwTVVYZHlZVWhTTUdOSVRUWk1lVGt3WWpKMGJHSnBOV2haTTFKd1lqSTFla3h0WkhCa1IyZ3hXVzVXZWxwWVNtcGlNalV3V2xjMU1FeHRUblppVkVKdkNrSm5iM0pDWjBWRlFWbFBMMDFCUlVwQ1JtOU5WMGRvTUdSSVFucFBhVGgyV2pKc01HRklWbWxNYlU1MllsTTVhbUl6U21wWlV6Rm9ZVk01YWxwWFJuTUtUSGsxYm1GWVVtOWtWMGwyWkRJNWVXRXlXbk5pTTJSNlRETktiR0pIVm1oak1sVjBXVEpHZFZwSGJHdFpXRkpzVEc1c2RHSkZRbmxhVjFwNlRESm9iQXBaVjFKNlRESXhhR0ZYTkhkUFFWbExTM2RaUWtKQlIwUjJla0ZDUTJkUmNVUkRaekZQUkdONFQwUlpkMDFVVVRWT1ZGVjNUMVJGZVZsNmFHMVBSRnBxQ2xwdFVUSmFWRnBwVGxSQk1WbHFXbWhQUjFGNFRVZEZNazFDTUVkRGFYTkhRVkZSUW1jM09IZEJVWE5GUkhkM1Rsb3liREJoU0ZacFRGZG9kbU16VW13S1drUkJkMEpuYjNKQ1owVkZRVmxQTDAxQlJVMUNRMGxOU1Vkb01HUklRbnBQYVRoMldqSnNNR0ZJVm1sTWJVNTJZbE01YW1JelNtcFpVekZvWVZNNWFncGFWMFp6VFVSblIwTnBjMGRCVVZGQ1p6YzRkMEZSTUVWTFozZHZUbFJuTTAxVVp6Sk5SRVV3VDFSVk1VMUVhM2hOYlUwMFdtcG5NbGt5V210T2JWVXlDbGxxVlhkT1Ywa3lXVlJvYTAxVVFtaE9ha0ZtUW1kdmNrSm5SVVZCV1U4dlRVRkZUMEpDUlUxRU0wcHNXbTVOZG1GSFZtaGFTRTEyWWxkR2NHSnFRV0VLUW1kdmNrSm5SVVZCV1U4dlRVRkZVRUpCZDAxRGFrVjRUMVJGTVU1VVVURlBWRTEzUzNkWlMwdDNXVUpDUVVkRWRucEJRa1ZCVVdSRVFuUnZaRWhTZHdwamVtOTJUREprY0dSSGFERlphVFZxWWpJd2Rsa3lPWGxaTWtWMFdWZHJkMGRCV1V0TGQxbENRa0ZIUkhaNlFVSkZVVkZMUkVGbk0wMXFhek5QUkdjeUNrMUVRbTlDWjI5eVFtZEZSVUZaVHk5TlFVVlRRa1p2VFZkSGFEQmtTRUo2VDJrNGRsb3liREJoU0ZacFRHMU9kbUpUT1dwaU0wcHFXVk14YUdGVE9Xb0tXbGRHYzB4NU5XNWhXRkp2WkZkSmRtUXlPWGxoTWxwellqTmtla3d6U214aVIxWm9ZekpWZEZreVJuVmFSMnhyV1ZoU2JFeHViSFJpUlVKNVdsZGFlZ3BNTW1oc1dWZFNla3d5TVdoaFZ6UjNUMEZaUzB0M1dVSkNRVWRFZG5wQlFrVjNVWEZFUTJjeFQwUmplRTlFV1hkTlZGRTFUbFJWZDA5VVJYbFplbWh0Q2s5RVdtcGFiVkV5V2xSYWFVNVVRVEZaYWxwb1QwZFJlRTFIUlRKTlEwVkhRMmx6UjBGUlVVSm5OemgzUVZKUlJVVjNkMUprTWpsNVlUSmFjMkl6WkdZS1drZHNlbU5IUmpCWk1tZDNWa0ZaUzB0M1dVSkNRVWRFZG5wQlFrWlJVa2RFUlZKdlpFaFNkMk42YjNaTU1tUndaRWRvTVZscE5XcGlNakIyV1RJNWVRcFpNa1YwV1ZkcmRsa3lWbWhpUXpsb1dUTlNjR0l5TlhwTU0wb3hZbTVOZGsxNlozaE9WRWt4VFhwbk1FNVVWWFpaV0ZJd1dsY3hkMlJJVFhaTlZFRllDa0puYjNKQ1owVkZRVmxQTDAxQlJWZENRV3ROUWpOQ2VXRllXbWhrUjFWM1RtZFpTMHQzV1VKQ1FVZEVkbnBCUWtkQlVXOUVRMXA1V2xoQ2RrOXRUbllLWTIxT2FFeFhSbkJNTWs1c1dWZDNObU50Vm0xUGJrcHNXbTVOZG1GSFZtaGFTRTEyWWxkR2NHSnFRMEpwWjFsTFMzZFpRa0pCU0ZkbFVVbEZRV2RTT0FwQ1NHOUJaVUZDTWtGT01EbE5SM0pIZUhoRmVWbDRhMlZJU214dVRuZExhVk5zTmpRemFubDBMelJsUzJOdlFYWkxaVFpQUVVGQlFtOVRkWE5YU1RSQkNrRkJVVVJCUldOM1VsRkphRUZOZG5jMVduSkdSRU5IYWk5cUwwbExLMnh6TkdkcFZEUnpUMk00WXpRNVNHUXlZMmN5UVZkSU0xTkdRV2xCWm1zemJEa0tSbTg0TUM5WlRHSkNaaTlWTm1kUGIxVXllRWhUY1V3MWN6VnJSRTlaTTAxMFZURjVNVlJCUzBKblozRm9hMnBQVUZGUlJFRjNUbTVCUkVKclFXcEJPUXB3YXpSWU1uRkJUVVJpTTFaRkt6RTBSRTFXWjNwRFZVcFNOSGRRU1RCeE9XOXdNbXd2Vm5KMllVRm5XbU5pZEZsWVZWWlBiR2N3VkhaWFQwWm9RekJEQ2sxREswZHZXV1U1U3k4eVIwTlhSMEozY1hkbVdXUllWemx2WlU5dVEyOXdjVms0SzBaTFdrOHdZMDQxZGk5TGQyUkZPRWhNUVU5aGQzZDVabEZaTVV3S1JYYzlQUW90TFMwdExVVk9SQ0JEUlZKVVNVWkpRMEZVUlMwdExTMHRDZz09In19fX0="}]},"messageSignature":{"messageDigest":{"algorithm":"SHA2_256","digest":"PTL44pQHp9aqjKNDS3ZJqYlPr3swLX9jdQOh5QadXhE="},"signature":"MEYCIQC0YK9oZJ4T8N0CYaJRtg8xtoqJA3pqVtQ/bMHX7zv+lQIhAKP2uH5Vb01PaWbzTJlAOp6QuzM5XXRKlCuG3jhbJ1YV"}}
1
+ {"mediaType":"application/vnd.dev.sigstore.bundle.v0.3+json","verificationMaterial":{"certificate":{"rawBytes":"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"},"tlogEntries":[{"logIndex":"3233362836","logId":{"keyId":"wNI9atQGlz+VWfO6LRygH4QUfY/8W4RFwiT5i5WRgB0="},"kindVersion":{"kind":"hashedrekord","version":"0.0.1"},"integratedTime":"1791830895","inclusionPromise":{"signedEntryTimestamp":"MEUCIH8q7h5cnTUpysghPCKv9G6nKXwidvbRjT4TiHs4Pqw6AiEAzozx65IDc87I3Kjw3ALXAn4bfCFggwsFjo+irHmchnI="},"inclusionProof":{"logIndex":"3111458574","rootHash":"pZlSB+TuhRZ9JN5BhCoXyJZ9OiPYaCpjIiDESplV+/k=","treeSize":"3111458623","hashes":["/+SRLAVThQ9eozLgb4REOe+0Zsgsd5DjdRatz3QUz/U=","t52ENlNedu5eCyiO39R8rhgHb5owf29CNpyYYPi1fqs=","QpYXdKJLRePxU6pW839GEnWR4YDkM96OLy5Ii0nu+6Y=","0fxy7TTYJ2MBtCi5k6qVYht03VMld+kJDUZhrf8VWtI=","A4N6yxjQmfc4sBgpim+Av4k+EAjSQqv6cm4f2X36W/w=","ZqOBH50p5z13bYkC/0Kk23dgcbmUQWVohvvJKFJ2LhM=","jjAkoVUCuoBi/+V/5coC8Eo3l4Yw4jAJ1KCEyiclxhE=","sCbKvCDmv7fJdQs3vTECWS2SpqHCLry+IRQEg9rUPg8=","3ID17r5Q8jp+QUyKZnrjaIq8Xc3XIN5QHn4xhsbyKfw=","+UgtumUZSML/VsvGwhYPSFP/ujC0QRoKzrQsBzVYdbk=","SCqUpxr32TXzhwUo+Hn5LiTtltJKOXKJ+M0VwRKeEMA=","OvjTb/10AyDIGTcsr05zJgGF29+xxAC6469LD5wLGgA=","w+ANyfpAQd7aN9Rtw6/7/kLsa6YqS8OAe4u7I0i4kvo=","sK5tyejFNs4i3Poi+8A7KeNdZHPy32HPtSJ7z8TnTyo=","kWfGIR953AP4Z87NAshsRz5VcurxE91SnXPMKYNxk5c=","bpfx3CvxJAnYOghd+Bi2asK3AkgiPItBYoCGoLVZlrI=","gg9GNApNke3+zNhl4tsWtmIycCFrOMCB3lys6XuSQNQ=","NlOclldmKPA1tMKIskqHAwuQDYHp31YwpK+OOMrMccc=","qxzHanAzz57SDdmJe0B7bJK72NTIBbwEMGBBKvDOROw=","xH/DCseLHr9eKoYT8qsORZK7zVdEGYWHuVtsVrD95wY="],"checkpoint":{"envelope":"rekor.sigstore.dev - 1193050959916656506\n3111458623\npZlSB+TuhRZ9JN5BhCoXyJZ9OiPYaCpjIiDESplV+/k=\n\n— rekor.sigstore.dev wNI9ajBFAiEA9nY6wi/qUDmMdj+G7iqUmG9GkPDI2v+OkJ/QlKMOxwcCIFDxbpaz9cR16lxKVOgdMRrilzflUOsmza6axk8pFBFy\n"}},"canonicalizedBody":"eyJhcGlWZXJzaW9uIjoiMC4wLjEiLCJraW5kIjoiaGFzaGVkcmVrb3JkIiwic3BlYyI6eyJkYXRhIjp7Imhhc2giOnsiYWxnb3JpdGhtIjoic2hhMjU2IiwidmFsdWUiOiJjNTFhYTdhZTU0NTExM2NhMzYxMWYzOTQzZjQ5NTczYmIxOGE5MjFhMjMyYThlMDFkMzZhOTFlOTkxZGQwYjc1In19LCJzaWduYXR1cmUiOnsiY29udGVudCI6Ik1FVUNJUUNUc1padVY0YUYxbVFFc05KNkRnZTVnYitHV0t6ZkJxYjBGTFdNWVR0djRBSWdjYU9Kb2JFcmNFSVdrLytUekUxUlgzZm1FenIyTytRRS80NXJmSjJETmxzPSIsInB1YmxpY0tleSI6eyJjb250ZW50IjoiTFMwdExTMUNSVWRKVGlCRFJWSlVTVVpKUTBGVVJTMHRMUzB0Q2sxSlNVYzNha05EUW01UFowRjNTVUpCWjBsVldESnZZa2RsTURkUlVVSk9jemQ0VmxwRGNUSkJRMHBRVkRGWmQwTm5XVWxMYjFwSmVtb3dSVUYzVFhjS1RucEZWazFDVFVkQk1WVkZRMmhOVFdNeWJHNWpNMUoyWTIxVmRWcEhWakpOVWpSM1NFRlpSRlpSVVVSRmVGWjZZVmRrZW1SSE9YbGFVekZ3WW01U2JBcGpiVEZzV2tkc2FHUkhWWGRJYUdOT1RXcFplRTFFUlhsTlZHY3dUMFJGTVZkb1kwNU5hbGw0VFVSRmVVMVVaekZQUkVVeFYycEJRVTFHYTNkRmQxbElDa3R2V2tsNmFqQkRRVkZaU1V0dldrbDZhakJFUVZGalJGRm5RVVZTTm1OamIySmtVbU41TWpOdFozTkVVREV4YlZOa1dqVk1kbEozUW5ocWJHVjJNVkFLT0hkWFF6RlZZVXRSTTFsbU9VMWtUbVowVDFWU2RIcFNheXRGTTBRelFYazFkSFE1WTBkd1RuWTJiazlHSzNaQ2IyRlBRMEphU1hkbloxZFBUVUUwUndwQk1WVmtSSGRGUWk5M1VVVkJkMGxJWjBSQlZFSm5UbFpJVTFWRlJFUkJTMEpuWjNKQ1owVkdRbEZqUkVGNlFXWkNaMDVXU0ZOTlJVZEVRVmRuUWxSbUNqQXJibEJXYVZGU2JIWnRiekpQYTI5V1lVeEhUR2hvYTFCNlFtMUNaMDVXU0ZKRlFrRm1PRVZZUkVKaGFHeG9iMlJJVW5kamVtOTJUREprY0dSSGFERUtXV2sxYW1JeU1IWlpNamw1V1RKRmRGbFhhM1paTWxab1lrTTRkVm95YkRCaFNGWnBURE5rZG1OdGRHMWlSemt6WTNrNWVWcFhlR3haV0U1c1RGZE9hQXBpYlZKd1drZEdNRnBUTlRWaVYzaEJZMjFXYldONU9XOWFWMFpyWTNrNWRGbFhiSFZOUkd0SFEybHpSMEZSVVVKbk56aDNRVkZGUlVzeWFEQmtTRUo2Q2s5cE9IWmtSemx5V2xjMGRWbFhUakJoVnpsMVkzazFibUZZVW05a1Ywb3hZekpXZVZreU9YVmtSMVoxWkVNMWFtSXlNSGRJZDFsTFMzZFpRa0pCUjBRS2RucEJRa0ZuVVZKa01qbDVZVEphYzJJelpHWmFSMng2WTBkR01Ga3laM2RPWjFsTFMzZFpRa0pCUjBSMmVrRkNRWGRSYjA1RVp6Vk5hbGswV1cxT2FBcGFSRlpxV1dwRk5GbFhXVEJhUkdzd1RsZEZNazU2UW1wYVZGRjNUMFJuZVU1VVJUVk5NbHBvVG1wQmEwSm5iM0pDWjBWRlFWbFBMMDFCUlVWQ1FscEVDbHBYUm5OSlNFcHNZa2RXYUdNeVZXZFpNa1oxV2tkc2ExbFlVbXhOUW5OSFEybHpSMEZSVVVKbk56aDNRVkZWUlVSWFRuWmpiVTVvVEZkR2NFd3lUbXdLV1ZkM2QwaFJXVXRMZDFsQ1FrRkhSSFo2UVVKQ1oxRlFZMjFXYldONU9XOWFWMFpyWTNrNWRGbFhiSFZOUkhOSFEybHpSMEZSVVVKbk56aDNRVkZuUlFwTVVYZHlZVWhTTUdOSVRUWk1lVGt3WWpKMGJHSnBOV2haTTFKd1lqSTFla3h0WkhCa1IyZ3hXVzVXZWxwWVNtcGlNalV3V2xjMU1FeHRUblppVkVKdkNrSm5iM0pDWjBWRlFWbFBMMDFCUlVwQ1JtOU5WMGRvTUdSSVFucFBhVGgyV2pKc01HRklWbWxNYlU1MllsTTVhbUl6U21wWlV6Rm9ZVk01YWxwWFJuTUtUSGsxYm1GWVVtOWtWMGwyWkRJNWVXRXlXbk5pTTJSNlRETktiR0pIVm1oak1sVjBXVEpHZFZwSGJHdFpXRkpzVEc1c2RHSkZRbmxhVjFwNlRESm9iQXBaVjFKNlRESXhhR0ZYTkhkUFFWbExTM2RaUWtKQlIwUjJla0ZDUTJkUmNVUkRaekJQUkd0NVRtcG9hVmt5Um10T1YwNXBUVlJvYUZwcVVtdFBWRkV4Q2xsVVdUTk5SMDVzVGtSQk5FOUVTVEZOVkd0NldtMUZNazFDTUVkRGFYTkhRVkZSUW1jM09IZEJVWE5GUkhkM1Rsb3liREJoU0ZacFRGZG9kbU16VW13S1drUkJkMEpuYjNKQ1owVkZRVmxQTDAxQlJVMUNRMGxOU1Vkb01HUklRbnBQYVRoMldqSnNNR0ZJVm1sTWJVNTJZbE01YW1JelNtcFpVekZvWVZNNWFncGFWMFp6VFVSblIwTnBjMGRCVVZGQ1p6YzRkMEZSTUVWTFozZHZUa1JuTlUxcVdUUlpiVTVvV2tSV2FsbHFSVFJaVjFrd1drUnJNRTVYUlRKT2VrSnFDbHBVVVhkUFJHZDVUbFJGTlUweVdtaE9ha0ZtUW1kdmNrSm5SVVZCV1U4dlRVRkZUMEpDUlUxRU0wcHNXbTVOZG1GSFZtaGFTRTEyWWxkR2NHSnFRV0VLUW1kdmNrSm5SVVZCV1U4dlRVRkZVRUpCZDAxRGFrVjRUMVJGTVU1VVVURlBWRTEzUzNkWlMwdDNXVUpDUVVkRWRucEJRa1ZCVVdSRVFuUnZaRWhTZHdwamVtOTJUREprY0dSSGFERlphVFZxWWpJd2Rsa3lPWGxaTWtWMFdWZHJkMGRCV1V0TGQxbENRa0ZIUkhaNlFVSkZVVkZMUkVGbk0wMXFhek5QUkdjeUNrMUVRbTlDWjI5eVFtZEZSVUZaVHk5TlFVVlRRa1p2VFZkSGFEQmtTRUo2VDJrNGRsb3liREJoU0ZacFRHMU9kbUpUT1dwaU0wcHFXVk14YUdGVE9Xb0tXbGRHYzB4NU5XNWhXRkp2WkZkSmRtUXlPWGxoTWxwellqTmtla3d6U214aVIxWm9ZekpWZEZreVJuVmFSMnhyV1ZoU2JFeHViSFJpUlVKNVdsZGFlZ3BNTW1oc1dWZFNla3d5TVdoaFZ6UjNUMEZaUzB0M1dVSkNRVWRFZG5wQlFrVjNVWEZFUTJjd1QwUnJlVTVxYUdsWk1rWnJUbGRPYVUxVWFHaGFhbEpyQ2s5VVVURlpWRmt6VFVkT2JFNUVRVFJQUkVreFRWUnJlbHB0UlRKTlEwVkhRMmx6UjBGUlVVSm5OemgzUVZKUlJVVjNkMUprTWpsNVlUSmFjMkl6WkdZS1drZHNlbU5IUmpCWk1tZDNWa0ZaUzB0M1dVSkNRVWRFZG5wQlFrWlJVa2RFUlZKdlpFaFNkMk42YjNaTU1tUndaRWRvTVZscE5XcGlNakIyV1RJNWVRcFpNa1YwV1ZkcmRsa3lWbWhpUXpsb1dUTlNjR0l5TlhwTU0wb3hZbTVOZGsxNlozbFBWRWw0VFZSbk1rOVVUWFpaV0ZJd1dsY3hkMlJJVFhaTlZFRllDa0puYjNKQ1owVkZRVmxQTDAxQlJWZENRV3ROUWpOQ2VXRllXbWhrUjFWM1RtZFpTMHQzV1VKQ1FVZEVkbnBCUWtkQlVXOUVRMXA1V2xoQ2RrOXRUbllLWTIxT2FFeFhSbkJNTWs1c1dWZDNObU50Vm0xUGJrcHNXbTVOZG1GSFZtaGFTRTEyWWxkR2NHSnFRMEpwVVZsTFMzZFpRa0pCU0ZkbFVVbEZRV2RTTndwQ1NHdEJaSGRDTVVGT01EbE5SM0pIZUhoRmVWbDRhMlZJU214dVRuZExhVk5zTmpRemFubDBMelJsUzJOdlFYWkxaVFpQUVVGQlFtOVVSbmh5UkRSQkNrRkJVVVJCUlZsM1VrRkpaMEpRSzB4TVNIRjNUVGhJTkdSRGRVTXZOVzVHUjFJdlVFWkJhR0pZUW1aM04wRTVkbEpXYVRKNWRWbERTVWc1WW1jNU5ra0tSa0pzZUcwcmFGSkZMM2wxV1haNE0ydzFlRVZsU1ZOdlRXbzJVVk54Tm5vNFRsVklUVUZ2UjBORGNVZFRUVFE1UWtGTlJFRXlhMEZOUjFsRFRWRkVZUXBRUmxocmRscG9TVXhJZURWc2JsTjBTMGQ2TjBKNlJGWlRNRkJZWkRnMU5IUnhlRmxyYkhkRVpVRlBNMFUyYVRaSFNIazNjbkJCTjJWVU0zZzJaRTFEQ2sxUlJFTkVNMlJKUjNKMGJXTnFMMlIyV0hSdmRpOXFTMjQ1VWtWS2RHVTRSbmxEVlVKcWVFRXhabWhXYkhNNVp6WlhTbTFYVTFWd1pFeDJkblpuVURZS04yWm5QUW90TFMwdExVVk9SQ0JEUlZKVVNVWkpRMEZVUlMwdExTMHRDZz09In19fX0="}]},"messageSignature":{"messageDigest":{"algorithm":"SHA2_256","digest":"xRqnrlRRE8o2EfOUP0lXO7GKkhojKo4B02qR6ZHdC3U="},"signature":"MEUCIQCTsZZuV4aF1mQEsNJ6Dge5gb+GWKzfBqb0FLWMYTtv4AIgcaOJobErcEIWk/+TzE1RX3fmEzr2O+QE/45rfJ2DNls="}}