@liquidmetal-ai/drizzle 0.4.8 → 0.4.10

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.
Files changed (32) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/dist/liquidmetal/v1alpha1/catalog_pb.d.ts +1 -1
  3. package/dist/liquidmetal/v1alpha1/catalog_pb.d.ts.map +1 -1
  4. package/dist/liquidmetal/v1alpha1/catalog_pb.js +2 -2
  5. package/dist/liquidmetal/v1alpha1/events_connect.d.ts +39 -0
  6. package/dist/liquidmetal/v1alpha1/events_connect.d.ts.map +1 -0
  7. package/dist/liquidmetal/v1alpha1/events_connect.js +43 -0
  8. package/dist/liquidmetal/v1alpha1/events_pb.d.ts +175 -0
  9. package/dist/liquidmetal/v1alpha1/events_pb.d.ts.map +1 -0
  10. package/dist/liquidmetal/v1alpha1/events_pb.js +51 -0
  11. package/dist/liquidmetal/v1alpha1/logging_pb.d.ts +87 -0
  12. package/dist/liquidmetal/v1alpha1/logging_pb.d.ts.map +1 -0
  13. package/dist/liquidmetal/v1alpha1/logging_pb.js +25 -0
  14. package/dist/liquidmetal/v1alpha1/riverjack_pb.d.ts +74 -0
  15. package/dist/liquidmetal/v1alpha1/riverjack_pb.d.ts.map +1 -0
  16. package/dist/liquidmetal/v1alpha1/riverjack_pb.js +24 -0
  17. package/dist/unsafe/framework.d.ts.map +1 -1
  18. package/dist/unsafe/framework.js +48 -12
  19. package/dist/unsafe/framework.test.js +97 -62
  20. package/eslint.config.mjs +7 -4
  21. package/package.json +14 -15
  22. package/src/liquidmetal/v1alpha1/catalog_pb.ts +3 -3
  23. package/src/liquidmetal/v1alpha1/events_connect.ts +48 -0
  24. package/src/liquidmetal/v1alpha1/events_pb.ts +210 -0
  25. package/src/liquidmetal/v1alpha1/logging_pb.ts +108 -0
  26. package/src/liquidmetal/v1alpha1/riverjack_pb.ts +92 -0
  27. package/src/unsafe/framework.test.ts +96 -64
  28. package/src/unsafe/framework.ts +50 -10
  29. package/tsconfig.tsbuildinfo +1 -1
  30. package/.turbo/turbo-build.log +0 -22
  31. package/.turbo/turbo-lint.log +0 -4
  32. package/.turbo/turbo-test.log +0 -277
@@ -0,0 +1,25 @@
1
+ // @generated by protoc-gen-es v2.2.5 with parameter "target=ts,import_extension=.js"
2
+ // @generated from file liquidmetal/v1alpha1/logging.proto (package liquidmetal.v1alpha1, syntax proto3)
3
+ /* eslint-disable */
4
+ import { fileDesc, messageDesc, serviceDesc } from "@bufbuild/protobuf/codegenv1";
5
+ import { file_google_protobuf_struct, file_google_protobuf_timestamp } from "@bufbuild/protobuf/wkt";
6
+ /**
7
+ * Describes the file liquidmetal/v1alpha1/logging.proto.
8
+ */
9
+ export const file_liquidmetal_v1alpha1_logging = /*@__PURE__*/ fileDesc("CiJsaXF1aWRtZXRhbC92MWFscGhhMS9sb2dnaW5nLnByb3RvEhRsaXF1aWRtZXRhbC52MWFscGhhMSK+AQoPU3RvcmVMb2dSZXF1ZXN0EhcKD29yZ2FuaXphdGlvbl9pZBgBIAEoCRIYChBhcHBsaWNhdGlvbl9uYW1lGAIgASgJEh4KFmFwcGxpY2F0aW9uX3ZlcnNpb25faWQYAyABKAkSKQoIbG9nX2RhdGEYBCABKAsyFy5nb29nbGUucHJvdG9idWYuU3RydWN0Ei0KCXRpbWVzdGFtcBgFIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXAiNAoQU3RvcmVMb2dSZXNwb25zZRIPCgdzdWNjZXNzGAEgASgIEg8KB21lc3NhZ2UYAiABKAkyawoOTG9nZ2luZ1NlcnZpY2USWQoIU3RvcmVMb2cSJS5saXF1aWRtZXRhbC52MWFscGhhMS5TdG9yZUxvZ1JlcXVlc3QaJi5saXF1aWRtZXRhbC52MWFscGhhMS5TdG9yZUxvZ1Jlc3BvbnNlQucBChhjb20ubGlxdWlkbWV0YWwudjFhbHBoYTFCDExvZ2dpbmdQcm90b1ABWkxnaXRodWIuY29tL2xpcXVpZG1ldGFsLWFpL3Byb3RvZ2VuMi9saXF1aWRtZXRhbC92MWFscGhhMTtsaXF1aWRtZXRhbHYxYWxwaGExogIDTFhYqgIUTGlxdWlkbWV0YWwuVjFhbHBoYTHKAhRMaXF1aWRtZXRhbFxWMWFscGhhMeICIExpcXVpZG1ldGFsXFYxYWxwaGExXEdQQk1ldGFkYXRh6gIVTGlxdWlkbWV0YWw6OlYxYWxwaGExYgZwcm90bzM", [file_google_protobuf_struct, file_google_protobuf_timestamp]);
10
+ /**
11
+ * Describes the message liquidmetal.v1alpha1.StoreLogRequest.
12
+ * Use `create(StoreLogRequestSchema)` to create a new message.
13
+ */
14
+ export const StoreLogRequestSchema = /*@__PURE__*/ messageDesc(file_liquidmetal_v1alpha1_logging, 0);
15
+ /**
16
+ * Describes the message liquidmetal.v1alpha1.StoreLogResponse.
17
+ * Use `create(StoreLogResponseSchema)` to create a new message.
18
+ */
19
+ export const StoreLogResponseSchema = /*@__PURE__*/ messageDesc(file_liquidmetal_v1alpha1_logging, 1);
20
+ /**
21
+ * LoggingService defines the interface for log storage and retrieval operations.
22
+ *
23
+ * @generated from service liquidmetal.v1alpha1.LoggingService
24
+ */
25
+ export const LoggingService = /*@__PURE__*/ serviceDesc(file_liquidmetal_v1alpha1_logging, 0);
@@ -0,0 +1,74 @@
1
+ import type { GenFile, GenMessage, GenService } from "@bufbuild/protobuf/codegenv1";
2
+ import type { Message } from "@bufbuild/protobuf";
3
+ /**
4
+ * Describes the file liquidmetal/v1alpha1/riverjack.proto.
5
+ */
6
+ export declare const file_liquidmetal_v1alpha1_riverjack: GenFile;
7
+ /**
8
+ * @generated from message liquidmetal.v1alpha1.StreamLogsRequest
9
+ */
10
+ export type StreamLogsRequest = Message<"liquidmetal.v1alpha1.StreamLogsRequest"> & {
11
+ /**
12
+ * organization_id is the organization context for the log storage
13
+ *
14
+ * @generated from field: string organization_id = 1;
15
+ */
16
+ organizationId: string;
17
+ /**
18
+ * user_id is the user context for the log storage
19
+ *
20
+ * @generated from field: string user_id = 2;
21
+ */
22
+ userId: string;
23
+ /**
24
+ * application_name is the name of the application generating the logs
25
+ *
26
+ * @generated from field: string application_name = 3;
27
+ */
28
+ applicationName: string;
29
+ /**
30
+ * application_version_id is the version of the application generating the logs
31
+ *
32
+ * @generated from field: string application_version_id = 4;
33
+ */
34
+ applicationVersionId: string;
35
+ };
36
+ /**
37
+ * Describes the message liquidmetal.v1alpha1.StreamLogsRequest.
38
+ * Use `create(StreamLogsRequestSchema)` to create a new message.
39
+ */
40
+ export declare const StreamLogsRequestSchema: GenMessage<StreamLogsRequest>;
41
+ /**
42
+ * @generated from message liquidmetal.v1alpha1.StreamLogsResponse
43
+ */
44
+ export type StreamLogsResponse = Message<"liquidmetal.v1alpha1.StreamLogsResponse"> & {
45
+ /**
46
+ * message contains any relevant response message
47
+ *
48
+ * @generated from field: string message = 1;
49
+ */
50
+ message: string;
51
+ };
52
+ /**
53
+ * Describes the message liquidmetal.v1alpha1.StreamLogsResponse.
54
+ * Use `create(StreamLogsResponseSchema)` to create a new message.
55
+ */
56
+ export declare const StreamLogsResponseSchema: GenMessage<StreamLogsResponse>;
57
+ /**
58
+ * Riverjack defines the interface for log storage and retrieval operations.
59
+ *
60
+ * @generated from service liquidmetal.v1alpha1.RiverjackService
61
+ */
62
+ export declare const RiverjackService: GenService<{
63
+ /**
64
+ * StreamLogs streams log events to the log-store bucket.
65
+ *
66
+ * @generated from rpc liquidmetal.v1alpha1.RiverjackService.StreamLogs
67
+ */
68
+ streamLogs: {
69
+ methodKind: "server_streaming";
70
+ input: typeof StreamLogsRequestSchema;
71
+ output: typeof StreamLogsResponseSchema;
72
+ };
73
+ }>;
74
+ //# sourceMappingURL=riverjack_pb.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"riverjack_pb.d.ts","sourceRoot":"","sources":["../../../src/liquidmetal/v1alpha1/riverjack_pb.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAEpF,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAElD;;GAEG;AACH,eAAO,MAAM,mCAAmC,EAAE,OACsuB,CAAC;AAEzxB;;GAEG;AACH,MAAM,MAAM,iBAAiB,GAAG,OAAO,CAAC,wCAAwC,CAAC,GAAG;IAClF;;;;OAIG;IACH,cAAc,EAAE,MAAM,CAAC;IAEvB;;;;OAIG;IACH,MAAM,EAAE,MAAM,CAAC;IAEf;;;;OAIG;IACH,eAAe,EAAE,MAAM,CAAC;IAExB;;;;OAIG;IACH,oBAAoB,EAAE,MAAM,CAAC;CAC9B,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,uBAAuB,EAAE,UAAU,CAAC,iBAAiB,CACb,CAAC;AAEtD;;GAEG;AACH,MAAM,MAAM,kBAAkB,GAAG,OAAO,CAAC,yCAAyC,CAAC,GAAG;IACpF;;;;OAIG;IACH,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,wBAAwB,EAAE,UAAU,CAAC,kBAAkB,CACf,CAAC;AAEtD;;;;GAIG;AACH,eAAO,MAAM,gBAAgB,EAAE,UAAU,CAAC;IACxC;;;;OAIG;IACH,UAAU,EAAE;QACV,UAAU,EAAE,kBAAkB,CAAC;QAC/B,KAAK,EAAE,OAAO,uBAAuB,CAAC;QACtC,MAAM,EAAE,OAAO,wBAAwB,CAAC;KACzC,CAAC;CACH,CACoD,CAAC"}
@@ -0,0 +1,24 @@
1
+ // @generated by protoc-gen-es v2.2.5 with parameter "target=ts,import_extension=.js"
2
+ // @generated from file liquidmetal/v1alpha1/riverjack.proto (package liquidmetal.v1alpha1, syntax proto3)
3
+ /* eslint-disable */
4
+ import { fileDesc, messageDesc, serviceDesc } from "@bufbuild/protobuf/codegenv1";
5
+ /**
6
+ * Describes the file liquidmetal/v1alpha1/riverjack.proto.
7
+ */
8
+ export const file_liquidmetal_v1alpha1_riverjack = /*@__PURE__*/ fileDesc("CiRsaXF1aWRtZXRhbC92MWFscGhhMS9yaXZlcmphY2sucHJvdG8SFGxpcXVpZG1ldGFsLnYxYWxwaGExIncKEVN0cmVhbUxvZ3NSZXF1ZXN0EhcKD29yZ2FuaXphdGlvbl9pZBgBIAEoCRIPCgd1c2VyX2lkGAIgASgJEhgKEGFwcGxpY2F0aW9uX25hbWUYAyABKAkSHgoWYXBwbGljYXRpb25fdmVyc2lvbl9pZBgEIAEoCSIlChJTdHJlYW1Mb2dzUmVzcG9uc2USDwoHbWVzc2FnZRgBIAEoCTJ1ChBSaXZlcmphY2tTZXJ2aWNlEmEKClN0cmVhbUxvZ3MSJy5saXF1aWRtZXRhbC52MWFscGhhMS5TdHJlYW1Mb2dzUmVxdWVzdBooLmxpcXVpZG1ldGFsLnYxYWxwaGExLlN0cmVhbUxvZ3NSZXNwb25zZTABQukBChhjb20ubGlxdWlkbWV0YWwudjFhbHBoYTFCDlJpdmVyamFja1Byb3RvUAFaTGdpdGh1Yi5jb20vbGlxdWlkbWV0YWwtYWkvcHJvdG9nZW4yL2xpcXVpZG1ldGFsL3YxYWxwaGExO2xpcXVpZG1ldGFsdjFhbHBoYTGiAgNMWFiqAhRMaXF1aWRtZXRhbC5WMWFscGhhMcoCFExpcXVpZG1ldGFsXFYxYWxwaGEx4gIgTGlxdWlkbWV0YWxcVjFhbHBoYTFcR1BCTWV0YWRhdGHqAhVMaXF1aWRtZXRhbDo6VjFhbHBoYTFiBnByb3RvMw");
9
+ /**
10
+ * Describes the message liquidmetal.v1alpha1.StreamLogsRequest.
11
+ * Use `create(StreamLogsRequestSchema)` to create a new message.
12
+ */
13
+ export const StreamLogsRequestSchema = /*@__PURE__*/ messageDesc(file_liquidmetal_v1alpha1_riverjack, 0);
14
+ /**
15
+ * Describes the message liquidmetal.v1alpha1.StreamLogsResponse.
16
+ * Use `create(StreamLogsResponseSchema)` to create a new message.
17
+ */
18
+ export const StreamLogsResponseSchema = /*@__PURE__*/ messageDesc(file_liquidmetal_v1alpha1_riverjack, 1);
19
+ /**
20
+ * Riverjack defines the interface for log storage and retrieval operations.
21
+ *
22
+ * @generated from service liquidmetal.v1alpha1.RiverjackService
23
+ */
24
+ export const RiverjackService = /*@__PURE__*/ serviceDesc(file_liquidmetal_v1alpha1_riverjack, 0);
@@ -1 +1 @@
1
- {"version":3,"file":"framework.d.ts","sourceRoot":"","sources":["../../src/unsafe/framework.ts"],"names":[],"mappings":"AAKA;;GAEG;AACH,eAAO,MAAM,iBAAiB,uCAAuC,CAAC;AAiFtE;;;;GAIG;AACH,wBAAsB,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAkBnF"}
1
+ {"version":3,"file":"framework.d.ts","sourceRoot":"","sources":["../../src/unsafe/framework.ts"],"names":[],"mappings":"AAMA;;GAEG;AACH,eAAO,MAAM,iBAAiB,uCAAuC,CAAC;AAwHtE;;;;GAIG;AACH,wBAAsB,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAkBnF"}
@@ -2,11 +2,29 @@ import { exec } from 'node:child_process';
2
2
  import { lstat } from 'node:fs/promises';
3
3
  import { dirname, join, parse } from 'node:path';
4
4
  import { promisify } from 'node:util';
5
+ import { readFile } from 'node:fs/promises';
5
6
  /**
6
7
  * The name of the framework package
7
8
  */
8
9
  export const FRAMEWORK_PACKAGE = '@liquidmetal-ai/raindrop-framework';
9
10
  const execAsync = promisify(exec);
11
+ async function resolveWorkspaceLink(version, currentDir) {
12
+ if (!version.startsWith('link:')) {
13
+ return version;
14
+ }
15
+ const linkPath = version.substring(5); // Remove 'link:' prefix
16
+ const absolutePath = join(currentDir, linkPath);
17
+ try {
18
+ const packageJsonPath = join(absolutePath, 'package.json');
19
+ const packageJsonContent = await readFile(packageJsonPath, 'utf8');
20
+ const packageJson = JSON.parse(packageJsonContent);
21
+ return packageJson.version || null;
22
+ }
23
+ catch (error) {
24
+ console.error(`Error reading version from linked package at ${absolutePath}:`, error);
25
+ return null;
26
+ }
27
+ }
10
28
  function findDependencyVersion(deps, packageName) {
11
29
  if (!deps)
12
30
  return null;
@@ -32,36 +50,54 @@ async function fileExists(path) {
32
50
  }
33
51
  }
34
52
  async function detectPackageManager(dir) {
35
- if (await fileExists(join(dir, 'package-lock.json')))
36
- return 'npm';
37
- if (await fileExists(join(dir, 'yarn.lock')))
38
- return 'yarn';
39
- if (await fileExists(join(dir, 'pnpm-lock.yaml')))
40
- return 'pnpm';
53
+ let currentDir = dir;
54
+ while (currentDir !== parse(currentDir).root) {
55
+ if (await fileExists(join(currentDir, 'package-lock.json')))
56
+ return 'npm';
57
+ if (await fileExists(join(currentDir, 'yarn.lock')))
58
+ return 'yarn';
59
+ if (await fileExists(join(currentDir, 'pnpm-lock.yaml')))
60
+ return 'pnpm';
61
+ currentDir = dirname(currentDir);
62
+ }
41
63
  return null;
42
64
  }
43
- const getVersionFromCommand = async (packageName, packageManager) => {
65
+ const getVersionFromCommand = async (packageName, packageManager, currentDir) => {
44
66
  try {
45
67
  const command = {
46
68
  npm: `npm list ${packageName} --json`,
47
69
  yarn: `yarn list --pattern "${packageName}" --json`,
48
70
  pnpm: `pnpm list ${packageName} --json`,
49
71
  }[packageManager];
50
- const { stdout } = await execAsync(command);
72
+ const { stdout } = await execAsync(command, { cwd: currentDir });
51
73
  if (packageManager === 'yarn') {
52
74
  const lines = stdout.split('\n').filter((line) => line.trim());
53
75
  for (const line of lines) {
54
76
  const parsed = JSON.parse(line);
55
77
  if (parsed.data?.trees) {
56
78
  const match = parsed.data.trees.find((t) => t.name === packageName);
57
- if (match)
58
- return match.version;
79
+ if (match) {
80
+ return await resolveWorkspaceLink(match.version, currentDir);
81
+ }
59
82
  }
60
83
  }
61
84
  }
62
85
  else {
63
86
  const data = JSON.parse(stdout);
64
- return findDependencyVersion(data.dependencies, packageName);
87
+ // Handle pnpm array format vs npm object format
88
+ let dependencies;
89
+ if (Array.isArray(data)) {
90
+ // pnpm format: array of objects
91
+ dependencies = data[0]?.dependencies;
92
+ }
93
+ else {
94
+ // npm format: single object with dependencies
95
+ dependencies = data.dependencies;
96
+ }
97
+ const version = findDependencyVersion(dependencies, packageName);
98
+ if (version) {
99
+ return await resolveWorkspaceLink(version, currentDir);
100
+ }
65
101
  }
66
102
  }
67
103
  catch (error) {
@@ -81,7 +117,7 @@ export async function getPackageVersion(packageName) {
81
117
  while (currentDir !== parse(currentDir).root) {
82
118
  const packageManager = await detectPackageManager(currentDir);
83
119
  if (packageManager) {
84
- const version = await getVersionFromCommand(packageName, packageManager);
120
+ const version = await getVersionFromCommand(packageName, packageManager, currentDir);
85
121
  if (version)
86
122
  return version;
87
123
  }
@@ -21,17 +21,22 @@ describe('getPackageVersion', () => {
21
21
  // Create package-lock.json to indicate npm
22
22
  await writeFile(join(tempDir, 'package-lock.json'), JSON.stringify({ name: 'test' }));
23
23
  // Mock npm list command output
24
- vi.mocked(exec).mockImplementation((command, callback) => {
24
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
25
+ vi.mocked(exec).mockImplementation((command, options, callback) => {
26
+ // Handle both (command, callback) and (command, options, callback) signatures
27
+ const cb = typeof options === 'function' ? options : callback;
25
28
  if (command.includes('npm list')) {
26
- callback(null, {
27
- stdout: JSON.stringify({
28
- dependencies: {
29
- 'test-package': {
30
- version: '1.2.3',
29
+ process.nextTick(() => {
30
+ cb?.(null, {
31
+ stdout: JSON.stringify({
32
+ dependencies: {
33
+ 'test-package': {
34
+ version: '1.2.3',
35
+ },
31
36
  },
32
- },
33
- }),
34
- stderr: '',
37
+ }),
38
+ stderr: '',
39
+ });
35
40
  });
36
41
  }
37
42
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
@@ -44,20 +49,25 @@ describe('getPackageVersion', () => {
44
49
  // Create yarn.lock to indicate yarn
45
50
  await writeFile(join(tempDir, 'yarn.lock'), 'yarn lock contents');
46
51
  // Mock yarn list command output
47
- vi.mocked(exec).mockImplementation((command, callback) => {
52
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
53
+ vi.mocked(exec).mockImplementation((command, options, callback) => {
54
+ // Handle both (command, callback) and (command, options, callback) signatures
55
+ const cb = typeof options === 'function' ? options : callback;
48
56
  if (command.includes('yarn list')) {
49
- callback(null, {
50
- stdout: JSON.stringify({
51
- data: {
52
- trees: [
53
- {
54
- name: 'test-package',
55
- version: '2.3.4',
56
- },
57
- ],
58
- },
59
- }),
60
- stderr: '',
57
+ process.nextTick(() => {
58
+ cb?.(null, {
59
+ stdout: JSON.stringify({
60
+ data: {
61
+ trees: [
62
+ {
63
+ name: 'test-package',
64
+ version: '2.3.4',
65
+ },
66
+ ],
67
+ },
68
+ }),
69
+ stderr: '',
70
+ });
61
71
  });
62
72
  }
63
73
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
@@ -70,17 +80,22 @@ describe('getPackageVersion', () => {
70
80
  // Create pnpm-lock.yaml to indicate pnpm
71
81
  await writeFile(join(tempDir, 'pnpm-lock.yaml'), 'pnpm lock contents');
72
82
  // Mock pnpm list command output
73
- vi.mocked(exec).mockImplementation((command, callback) => {
83
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
84
+ vi.mocked(exec).mockImplementation((command, options, callback) => {
85
+ // Handle both (command, callback) and (command, options, callback) signatures
86
+ const cb = typeof options === 'function' ? options : callback;
74
87
  if (command.includes('pnpm list')) {
75
- callback(null, {
76
- stdout: JSON.stringify({
77
- dependencies: {
78
- 'test-package': {
79
- version: '3.4.5',
88
+ process.nextTick(() => {
89
+ cb?.(null, {
90
+ stdout: JSON.stringify({
91
+ dependencies: {
92
+ 'test-package': {
93
+ version: '3.4.5',
94
+ },
80
95
  },
81
- },
82
- }),
83
- stderr: '',
96
+ }),
97
+ stderr: '',
98
+ });
84
99
  });
85
100
  }
86
101
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
@@ -91,22 +106,27 @@ describe('getPackageVersion', () => {
91
106
  });
92
107
  it('should handle nested dependencies', async () => {
93
108
  await writeFile(join(tempDir, 'package-lock.json'), JSON.stringify({ name: 'test' }));
94
- vi.mocked(exec).mockImplementation((command, callback) => {
109
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
110
+ vi.mocked(exec).mockImplementation((command, options, callback) => {
111
+ // Handle both (command, callback) and (command, options, callback) signatures
112
+ const cb = typeof options === 'function' ? options : callback;
95
113
  if (command.includes('npm list')) {
96
- callback(null, {
97
- stdout: JSON.stringify({
98
- dependencies: {
99
- 'parent-package': {
100
- version: '1.0.0',
101
- dependencies: {
102
- 'test-package': {
103
- version: '4.5.6',
114
+ process.nextTick(() => {
115
+ cb?.(null, {
116
+ stdout: JSON.stringify({
117
+ dependencies: {
118
+ 'parent-package': {
119
+ version: '1.0.0',
120
+ dependencies: {
121
+ 'test-package': {
122
+ version: '4.5.6',
123
+ },
104
124
  },
105
125
  },
106
126
  },
107
- },
108
- }),
109
- stderr: '',
127
+ }),
128
+ stderr: '',
129
+ });
110
130
  });
111
131
  }
112
132
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
@@ -117,13 +137,18 @@ describe('getPackageVersion', () => {
117
137
  });
118
138
  it('should return null when package is not found', async () => {
119
139
  await writeFile(join(tempDir, 'package-lock.json'), JSON.stringify({ name: 'test' }));
120
- vi.mocked(exec).mockImplementation((command, callback) => {
140
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
141
+ vi.mocked(exec).mockImplementation((command, options, callback) => {
142
+ // Handle both (command, callback) and (command, options, callback) signatures
143
+ const cb = typeof options === 'function' ? options : callback;
121
144
  if (command.includes('npm list')) {
122
- callback(null, {
123
- stdout: JSON.stringify({
124
- dependencies: {},
125
- }),
126
- stderr: '',
145
+ process.nextTick(() => {
146
+ cb?.(null, {
147
+ stdout: JSON.stringify({
148
+ dependencies: {},
149
+ }),
150
+ stderr: '',
151
+ });
127
152
  });
128
153
  }
129
154
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
@@ -140,17 +165,22 @@ describe('getPackageVersion', () => {
140
165
  await writeFile(join(tempDir, 'package-lock.json'), JSON.stringify({ name: 'test' }));
141
166
  // Set cwd to nested directory
142
167
  vi.spyOn(process, 'cwd').mockReturnValue(nestedDir);
143
- vi.mocked(exec).mockImplementation((command, callback) => {
168
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
169
+ vi.mocked(exec).mockImplementation((command, options, callback) => {
170
+ // Handle both (command, callback) and (command, options, callback) signatures
171
+ const cb = typeof options === 'function' ? options : callback;
144
172
  if (command.includes('npm list')) {
145
- callback(null, {
146
- stdout: JSON.stringify({
147
- dependencies: {
148
- 'test-package': {
149
- version: '5.6.7',
173
+ process.nextTick(() => {
174
+ cb?.(null, {
175
+ stdout: JSON.stringify({
176
+ dependencies: {
177
+ 'test-package': {
178
+ version: '5.6.7',
179
+ },
150
180
  },
151
- },
152
- }),
153
- stderr: '',
181
+ }),
182
+ stderr: '',
183
+ });
154
184
  });
155
185
  }
156
186
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
@@ -161,10 +191,15 @@ describe('getPackageVersion', () => {
161
191
  });
162
192
  it('should handle command execution errors', async () => {
163
193
  await writeFile(join(tempDir, 'package-lock.json'), JSON.stringify({ name: 'test' }));
164
- vi.mocked(exec).mockImplementation((_command, callback) => {
165
- callback(new Error('Command failed'), {
166
- stdout: '',
167
- stderr: 'failure',
194
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
195
+ vi.mocked(exec).mockImplementation((command, options, callback) => {
196
+ // Handle both (command, callback) and (command, options, callback) signatures
197
+ const cb = typeof options === 'function' ? options : callback;
198
+ process.nextTick(() => {
199
+ cb?.(new Error('Command failed'), {
200
+ stdout: '',
201
+ stderr: 'failure',
202
+ });
168
203
  });
169
204
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
170
205
  return {};
package/eslint.config.mjs CHANGED
@@ -1,5 +1,8 @@
1
- import repo_config from '@repo/eslint-config/eslint.config.mjs';
1
+ import repo_config from '@liquidmetal-ai/eslint-config/eslint.config.mjs';
2
2
 
3
- export default repo_config.concat([
4
- { ignores: ['src/liquidmetal/v1alpha1/*'] },
5
- ]);
3
+ /**
4
+ * @type {import('eslint').Linter.Config[]}
5
+ */
6
+ const config = [...repo_config, { ignores: ['src/liquidmetal/v1alpha1/*'] }];
7
+
8
+ export default config;
package/package.json CHANGED
@@ -1,27 +1,15 @@
1
1
  {
2
2
  "name": "@liquidmetal-ai/drizzle",
3
- "version": "0.4.8",
3
+ "version": "0.4.10",
4
4
  "description": "Raindrop core operational libraries",
5
5
  "main": "dist/index.js",
6
6
  "type": "module",
7
- "scripts": {
8
- "prebuild": "npm install --ignore-scripts",
9
- "prepublishOnly": "npm run build",
10
- "build": "shx rm -rf dist && tsc -b",
11
- "format": "prettier --write \"**/*.{ts,tsx,md}\"",
12
- "lint": "eslint . --max-warnings=0",
13
- "posttest": "npm run lint",
14
- "test": "vitest run",
15
- "test:watch": "vitest"
16
- },
17
7
  "author": "Ian Sung-Schenck",
18
8
  "license": "MIT",
19
9
  "devDependencies": {
20
10
  "@bufbuild/protobuf": "^2.2.3",
21
11
  "@changesets/cli": "^2.27.9",
22
12
  "@eslint/js": "^9.11.1",
23
- "@repo/eslint-config": "*",
24
- "@repo/typescript-config": "*",
25
13
  "@types/node": "^22",
26
14
  "@vitest/coverage-v8": "^2.1.1",
27
15
  "chai": "^5",
@@ -31,7 +19,9 @@
31
19
  "typescript": "^5",
32
20
  "typescript-eslint": "^8.7.0",
33
21
  "vitest": "^2.1.1",
34
- "@liquidmetal-ai/raindrop-framework": "*"
22
+ "@liquidmetal-ai/eslint-config": "0.0.0",
23
+ "@liquidmetal-ai/raindrop-framework": "0.4.10",
24
+ "@liquidmetal-ai/typescript-config": "0.0.0"
35
25
  },
36
26
  "dependencies": {
37
27
  "fflate": "^0.8.2"
@@ -45,5 +35,14 @@
45
35
  "import": "./dist/*.js",
46
36
  "types": "./dist/*.d.ts"
47
37
  }
38
+ },
39
+ "scripts": {
40
+ "prebuild": "pnpm install --ignore-scripts",
41
+ "build": "shx rm -rf dist && tsc -b",
42
+ "format": "prettier --write \"**/*.{ts,tsx,md}\"",
43
+ "lint": "eslint . --max-warnings=0",
44
+ "posttest": "pnpm run lint",
45
+ "test": "vitest run",
46
+ "test:watch": "vitest"
48
47
  }
49
- }
48
+ }
@@ -6,17 +6,17 @@ import type { GenEnum, GenFile, GenMessage, GenService } from "@bufbuild/protobu
6
6
  import { enumDesc, fileDesc, messageDesc, serviceDesc } from "@bufbuild/protobuf/codegenv1";
7
7
  import type { Timestamp } from "@bufbuild/protobuf/wkt";
8
8
  import { file_google_protobuf_struct, file_google_protobuf_timestamp } from "@bufbuild/protobuf/wkt";
9
- import type { BucketLocator, BucketResponse } from "./bucket_name_pb.js";
10
- import { file_liquidmetal_v1alpha1_bucket_name } from "./bucket_name_pb.js";
11
9
  import type { AgentMemoryLocator, AgentMemoryResponse } from "./agent_memory_name_pb.js";
12
10
  import { file_liquidmetal_v1alpha1_agent_memory_name } from "./agent_memory_name_pb.js";
11
+ import type { BucketLocator, BucketResponse } from "./bucket_name_pb.js";
12
+ import { file_liquidmetal_v1alpha1_bucket_name } from "./bucket_name_pb.js";
13
13
  import type { JsonObject, Message } from "@bufbuild/protobuf";
14
14
 
15
15
  /**
16
16
  * Describes the file liquidmetal/v1alpha1/catalog.proto.
17
17
  */
18
18
  export const file_liquidmetal_v1alpha1_catalog: GenFile = /*@__PURE__*/
19
- fileDesc("CiJsaXF1aWRtZXRhbC92MWFscGhhMS9jYXRhbG9nLnByb3RvEhRsaXF1aWRtZXRhbC52MWFscGhhMSKHAQoTQXBwbGljYXRpb25zUmVxdWVzdBIPCgd1c2VyX2lkGAEgASgJEhcKD29yZ2FuaXphdGlvbl9pZBgCIAEoCRIUCgxzaG93X2RlbGV0ZWQYAyABKAgSHAoPbmV4dF9wYWdlX3Rva2VuGAQgASgJSACIAQFCEgoQX25leHRfcGFnZV90b2tlbiKEBQoUQXBwbGljYXRpb25zUmVzcG9uc2USTAoMYXBwbGljYXRpb25zGAEgAygLMjYubGlxdWlkbWV0YWwudjFhbHBoYTEuQXBwbGljYXRpb25zUmVzcG9uc2UuQXBwbGljYXRpb24SHAoPbmV4dF9wYWdlX3Rva2VuGAIgASgJSACIAQEa6wMKC0FwcGxpY2F0aW9uEgwKBG5hbWUYASABKAkSEgoKdmVyc2lvbl9pZBgCIAEoCRIQCghtYW5pZmVzdBgDIAEoCRISCgVzdWl0ZRgEIAEoCUgAiAEBEi4KCmNyZWF0ZWRfYXQYBSABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEi4KCnVwZGF0ZWRfYXQYBiABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEjMKCmRlbGV0ZWRfYXQYByABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wSAGIAQESEQoJaXNfYWN0aXZlGAggASgIEhcKD29yZ2FuaXphdGlvbl9pZBgJIAEoCRITCgZicmFuY2gYCiABKAlIAogBARIUCgxpc19zYW5kYm94ZWQYCyABKAgSIAoTcHJldmlvdXNfdmVyc2lvbl9pZBgMIAEoCUgDiAEBEi4KBXN0YXRlGA0gASgOMh8ubGlxdWlkbWV0YWwudjFhbHBoYTEuVW5pdFN0YXRlEhEKBGxvY2sYDiABKAlIBIgBAUIICgZfc3VpdGVCDQoLX2RlbGV0ZWRfYXRCCQoHX2JyYW5jaEIWChRfcHJldmlvdXNfdmVyc2lvbl9pZEIHCgVfbG9ja0ISChBfbmV4dF9wYWdlX3Rva2VuItIBChBCb290c3RyYXBSZXF1ZXN0Eg8KB3VzZXJfaWQYASABKAkSFwoPb3JnYW5pemF0aW9uX2lkGAIgASgJEg0KBXRva2VuGAMgASgJEh0KFWNsb3VkZmxhcmVfYWNjb3VudF9pZBgEIAEoCRIfChdjbG91ZGZsYXJlX2JlYXJlcl90b2tlbhgFIAEoCRIjChtsaXF1aWRtZXRhbF9zZXJ2aWNlc19kb21haW4YBiABKAkSIAoYY3VzdG9tZXJfc2VydmljZXNfZG9tYWluGAcgASgJIhMKEUJvb3RzdHJhcFJlc3BvbnNlIiwKKkludGVybmFsQXBwbGljYXRpb25zUmVxdWVzdFBhZ2luYXRpb25Ub2tlbiLeAQoTVXBsb2FkQnVuZGxlUmVxdWVzdBIPCgd1c2VyX2lkGAEgASgJEhcKD29yZ2FuaXphdGlvbl9pZBgCIAEoCRIYChBhcHBsaWNhdGlvbl9uYW1lGAMgASgJEh4KFmFwcGxpY2F0aW9uX3ZlcnNpb25faWQYBCABKAkSEwoLYnVuZGxlX25hbWUYBSABKAkSPQoMYXJjaGl2ZV90eXBlGAYgASgOMicubGlxdWlkbWV0YWwudjFhbHBoYTEuQnVuZGxlQXJjaGl2ZVR5cGUSDwoHYXJjaGl2ZRgHIAEoDCIWChRVcGxvYWRCdW5kbGVSZXNwb25zZSJ7ChVRdWVyeVJlc291cmNlc1JlcXVlc3QSDwoHdXNlcl9pZBgBIAEoCRIXCg9vcmdhbml6YXRpb25faWQYAiABKAkSGAoQYXBwbGljYXRpb25fbmFtZRgDIAEoCRIeChZhcHBsaWNhdGlvbl92ZXJzaW9uX2lkGAQgASgJIvUHChZRdWVyeVJlc291cmNlc1Jlc3BvbnNlEkgKCXJlc291cmNlcxgBIAMoCzI1LmxpcXVpZG1ldGFsLnYxYWxwaGExLlF1ZXJ5UmVzb3VyY2VzUmVzcG9uc2UuUmVzb3VyY2USHAoPbmV4dF9wYWdlX3Rva2VuGAIgASgJSACIAQEa3gYKCFJlc291cmNlEhcKD29yZ2FuaXphdGlvbl9pZBgBIAEoCRIYChBhcHBsaWNhdGlvbl9uYW1lGAIgASgJEh4KFmFwcGxpY2F0aW9uX3ZlcnNpb25faWQYAyABKAkSEwoLcmVzb3VyY2VfaWQYBCABKAkSDAoEbmFtZRgFIAEoCRIMCgR0eXBlGAYgASgJElkKDXJlc291cmNlX3R5cGUYByABKA4yQi5saXF1aWRtZXRhbC52MWFscGhhMS5RdWVyeVJlc291cmNlc1Jlc3BvbnNlLlJlc291cmNlLlJlc291cmNlVHlwZRIrCgphdHRyaWJ1dGVzGAggASgLMhcuZ29vZ2xlLnByb3RvYnVmLlN0cnVjdBIuCgpjcmVhdGVkX2F0GAkgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIuCgp1cGRhdGVkX2F0GAogASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcCLlAwoMUmVzb3VyY2VUeXBlEh0KGVJFU09VUkNFX1RZUEVfVU5TUEVDSUZJRUQQABIgChxSRVNPVVJDRV9UWVBFX1FVRVVFX0NPTlNVTUVSEAESGAoUUkVTT1VSQ0VfVFlQRV9TQ1JJUFQQAhIUChBSRVNPVVJDRV9UWVBFX0QxEAMSGgoWUkVTT1VSQ0VfVFlQRV9EMV9RVUVSWRAEEhsKF1JFU09VUkNFX1RZUEVfVkVDVE9SSVpFEAUSGQoVUkVTT1VSQ0VfVFlQRV9FTlZfVkFSEAYSGAoUUkVTT1VSQ0VfVFlQRV9CVUNLRVQQBxIXChNSRVNPVVJDRV9UWVBFX1FVRVVFEAgSIAocUkVTT1VSQ0VfVFlQRV9TQ1JJUFRfQklORElORxAJEiUKIVJFU09VUkNFX1RZUEVfQlVDS0VUX05PVElGSUNBVElPThAKEhoKFlJFU09VUkNFX1RZUEVfTUVUQURBVEEQCxIfChtSRVNPVVJDRV9UWVBFX0NVU1RPTV9ET01BSU4QDBIXChNSRVNPVVJDRV9UWVBFX1JPVVRFEA0SHgoaUkVTT1VSQ0VfVFlQRV9TTUFSVF9CVUNLRVQQDhIeChpSRVNPVVJDRV9UWVBFX0FHRU5UX01FTU9SWRAPQhIKEF9uZXh0X3BhZ2VfdG9rZW4ipAQKDURlcGxveVJlcXVlc3QSDwoHdXNlcl9pZBgBIAEoCRIXCg9vcmdhbml6YXRpb25faWQYAiABKAkSRQoMYXBwbGljYXRpb25zGAMgAygLMi8ubGlxdWlkbWV0YWwudjFhbHBoYTEuRGVwbG95UmVxdWVzdC5BcHBsaWNhdGlvbhouChNBcHBsaWNhdGlvbk1ldGFkYXRhEhcKD3J1bnRpbWVfdmVyc2lvbhgBIAEoCRrxAgoLQXBwbGljYXRpb24SDQoFc3VpdGUYASABKAkSEwoLYXBwbGljYXRpb24YAiABKAkSIAoTcHJldmlvdXNfdmVyc2lvbl9pZBgDIAEoCUgAiAEBEh8KEmN1cnJlbnRfdmVyc2lvbl9pZBgEIAEoCUgBiAEBEhMKBmJyYW5jaBgFIAEoCUgCiAEBEhAKCG1hbmlmZXN0GAYgASgJEkkKCG1ldGFkYXRhGAcgASgLMjcubGlxdWlkbWV0YWwudjFhbHBoYTEuRGVwbG95UmVxdWVzdC5BcHBsaWNhdGlvbk1ldGFkYXRhEg0KBWFtZW5kGAggASgIEhYKCWlzX2FjdGl2ZRgJIAEoCEgDiAEBEhEKBGxvY2sYCiABKAlIBIgBAUIWChRfcHJldmlvdXNfdmVyc2lvbl9pZEIVChNfY3VycmVudF92ZXJzaW9uX2lkQgkKB19icmFuY2hCDAoKX2lzX2FjdGl2ZUIHCgVfbG9jayLUAQoORGVwbG95UmVzcG9uc2USFwoPb3JnYW5pemF0aW9uX2lkGAEgASgJEkYKDGFwcGxpY2F0aW9ucxgCIAMoCzIwLmxpcXVpZG1ldGFsLnYxYWxwaGExLkRlcGxveVJlc3BvbnNlLkFwcGxpY2F0aW9uGmEKC0FwcGxpY2F0aW9uEhgKEGFwcGxpY2F0aW9uX25hbWUYASABKAkSGgoSY3VycmVudF92ZXJzaW9uX2lkGAIgASgJEg4KBmJyYW5jaBgDIAEoCRIMCgRsb2NrGAQgASgJIt4BCg5TZXRFbnZzUmVxdWVzdBIPCgd1c2VyX2lkGAEgASgJEhcKD29yZ2FuaXphdGlvbl9pZBgCIAEoCRI2CgRlbnZzGAMgAygLMigubGlxdWlkbWV0YWwudjFhbHBoYTEuU2V0RW52c1JlcXVlc3QuRW52GmoKA0VudhIYChBhcHBsaWNhdGlvbl9uYW1lGAEgASgJEhoKEmN1cnJlbnRfdmVyc2lvbl9pZBgCIAEoCRILCgNrZXkYAyABKAkSDQoFdmFsdWUYBCABKAkSEQoJaXNfc2VjcmV0GAUgASgIIhEKD1NldEVudnNSZXNwb25zZSK8AQoOR2V0RW52c1JlcXVlc3QSDwoHdXNlcl9pZBgBIAEoCRIXCg9vcmdhbml6YXRpb25faWQYAiABKAkSNgoEZW52cxgDIAMoCzIoLmxpcXVpZG1ldGFsLnYxYWxwaGExLkdldEVudnNSZXF1ZXN0LkVudhpICgNFbnYSGAoQYXBwbGljYXRpb25fbmFtZRgBIAEoCRIaChJjdXJyZW50X3ZlcnNpb25faWQYAiABKAkSCwoDa2V5GAMgASgJIrYBCg9HZXRFbnZzUmVzcG9uc2USNwoEZW52cxgBIAMoCzIpLmxpcXVpZG1ldGFsLnYxYWxwaGExLkdldEVudnNSZXNwb25zZS5FbnYaagoDRW52EhgKEGFwcGxpY2F0aW9uX25hbWUYASABKAkSGgoSY3VycmVudF92ZXJzaW9uX2lkGAIgASgJEgsKA2tleRgDIAEoCRINCgV2YWx1ZRgEIAEoCRIRCglpc19zZWNyZXQYBSABKAgiwAEKDlJlbGVhc2VSZXF1ZXN0Eg8KB3VzZXJfaWQYASABKAkSFwoPb3JnYW5pemF0aW9uX2lkGAIgASgJEjgKBWxvY2tzGAMgAygLMikubGlxdWlkbWV0YWwudjFhbHBoYTEuUmVsZWFzZVJlcXVlc3QuTG9jaxpKCgRMb2NrEhgKEGFwcGxpY2F0aW9uX25hbWUYASABKAkSGgoSY3VycmVudF92ZXJzaW9uX2lkGAIgASgJEgwKBGxvY2sYAyABKAkiEQoPUmVsZWFzZVJlc3BvbnNlIsMBCgxXYXRjaFJlcXVlc3QSDwoHdXNlcl9pZBgBIAEoCRIXCg9vcmdhbml6YXRpb25faWQYAiABKAkSRAoMYXBwbGljYXRpb25zGAMgAygLMi4ubGlxdWlkbWV0YWwudjFhbHBoYTEuV2F0Y2hSZXF1ZXN0LkFwcGxpY2F0aW9uGkMKC0FwcGxpY2F0aW9uEhgKEGFwcGxpY2F0aW9uX25hbWUYASABKAkSGgoSY3VycmVudF92ZXJzaW9uX2lkGAIgASgJIpkBCg1XYXRjaFJlc3BvbnNlEhgKEGFwcGxpY2F0aW9uX25hbWUYASABKAkSGgoSY3VycmVudF92ZXJzaW9uX2lkGAIgASgJEhAKCGV2ZW50X2lkGAMgASgJEkAKCmV2ZW50X3R5cGUYBCABKA4yLC5saXF1aWRtZXRhbC52MWFscGhhMS5XYXRjaFJlc3BvbnNlRXZlbnRUeXBlIsUBCg1EZWxldGVSZXF1ZXN0Eg8KB3VzZXJfaWQYASABKAkSFwoPb3JnYW5pemF0aW9uX2lkGAIgASgJEkUKDGFwcGxpY2F0aW9ucxgDIAMoCzIvLmxpcXVpZG1ldGFsLnYxYWxwaGExLkRlbGV0ZVJlcXVlc3QuQXBwbGljYXRpb24aQwoLQXBwbGljYXRpb24SGAoQYXBwbGljYXRpb25fbmFtZRgBIAEoCRIaChJjdXJyZW50X3ZlcnNpb25faWQYAiABKAkiEAoORGVsZXRlUmVzcG9uc2Ui3gEKEFNldEFjdGl2ZVJlcXVlc3QSDwoHdXNlcl9pZBgBIAEoCRIXCg9vcmdhbml6YXRpb25faWQYAiABKAkSSAoMYXBwbGljYXRpb25zGAMgAygLMjIubGlxdWlkbWV0YWwudjFhbHBoYTEuU2V0QWN0aXZlUmVxdWVzdC5BcHBsaWNhdGlvbhpWCgtBcHBsaWNhdGlvbhIYChBhcHBsaWNhdGlvbl9uYW1lGAEgASgJEhoKEmN1cnJlbnRfdmVyc2lvbl9pZBgCIAEoCRIRCglpc19hY3RpdmUYAyABKAgiEwoRU2V0QWN0aXZlUmVzcG9uc2Ui4wEKEVNldFNhbmRib3hSZXF1ZXN0Eg8KB3VzZXJfaWQYASABKAkSFwoPb3JnYW5pemF0aW9uX2lkGAIgASgJEkkKDGFwcGxpY2F0aW9ucxgDIAMoCzIzLmxpcXVpZG1ldGFsLnYxYWxwaGExLlNldFNhbmRib3hSZXF1ZXN0LkFwcGxpY2F0aW9uGlkKC0FwcGxpY2F0aW9uEhgKEGFwcGxpY2F0aW9uX25hbWUYASABKAkSGgoSY3VycmVudF92ZXJzaW9uX2lkGAIgASgJEhQKDGlzX3NhbmRib3hlZBgDIAEoCCIUChJTZXRTYW5kYm94UmVzcG9uc2UibwoNU3RhdHVzUmVxdWVzdBIPCgd1c2VyX2lkGAEgASgJEhcKD29yZ2FuaXphdGlvbl9pZBgCIAEoCRIYChBhcHBsaWNhdGlvbl9uYW1lGAMgASgJEhoKEmN1cnJlbnRfdmVyc2lvbl9pZBgEIAEoCSLwAQoOU3RhdHVzUmVzcG9uc2USLgoFc3RhdGUYASABKA4yHy5saXF1aWRtZXRhbC52MWFscGhhMS5Vbml0U3RhdGUSPAoHbW9kdWxlcxgCIAMoCzIrLmxpcXVpZG1ldGFsLnYxYWxwaGExLlN0YXR1c1Jlc3BvbnNlLk1vZHVsZRIRCgRsb2NrGAMgASgJSACIAQEaVAoGTW9kdWxlEgwKBG5hbWUYASABKAkSLgoFc3RhdGUYAiABKA4yHy5saXF1aWRtZXRhbC52MWFscGhhMS5Vbml0U3RhdGUSDAoEdXJscxgDIAMoCUIHCgVfbG9jayLdAQoTUXVlcnlNb2R1bGVzUmVxdWVzdBIPCgd1c2VyX2lkGAEgASgJEhcKD29yZ2FuaXphdGlvbl9pZBgCIAEoCRIdChBhcHBsaWNhdGlvbl9uYW1lGAMgASgJSACIAQESIwoWYXBwbGljYXRpb25fdmVyc2lvbl9pZBgEIAEoCUgBiAEBEhgKC21vZHVsZV90eXBlGAUgASgJSAKIAQFCEwoRX2FwcGxpY2F0aW9uX25hbWVCGQoXX2FwcGxpY2F0aW9uX3ZlcnNpb25faWRCDgoMX21vZHVsZV90eXBlIvINChRRdWVyeU1vZHVsZXNSZXNwb25zZRJCCgdtb2R1bGVzGAEgAygLMjEubGlxdWlkbWV0YWwudjFhbHBoYTEuUXVlcnlNb2R1bGVzUmVzcG9uc2UuTW9kdWxlEhwKD25leHRfcGFnZV90b2tlbhgCIAEoCUgAiAEBGiAKEVNtYXJ0QnVja2V0TW9kdWxlEgsKA3VybBgBIAEoCRobCgxCdWNrZXRNb2R1bGUSCwoDdXJsGAEgASgJGg8KDVNlcnZpY2VNb2R1bGUaEAoOT2JzZXJ2ZXJNb2R1bGUaDAoKVGFza01vZHVsZRoTChFTUUxEYXRhYmFzZU1vZHVsZRoTChFWZWN0b3JJbmRleE1vZHVsZRoNCgtRdWV1ZU1vZHVsZRoPCg1LVlN0b3JlTW9kdWxlGhMKEUFnZW50TWVtb3J5TW9kdWxlGsUICgZNb2R1bGUSFwoPb3JnYW5pemF0aW9uX2lkGAEgASgJEhgKEGFwcGxpY2F0aW9uX25hbWUYAiABKAkSHgoWYXBwbGljYXRpb25fdmVyc2lvbl9pZBgDIAEoCRIRCgltb2R1bGVfaWQYBCABKAkSDAoEbmFtZRgFIAEoCRIMCgR0eXBlGAYgASgJEkoKC21vZHVsZV90eXBlGAcgASgOMjUubGlxdWlkbWV0YWwudjFhbHBoYTEuUXVlcnlNb2R1bGVzUmVzcG9uc2UuTW9kdWxlVHlwZRI1Cgxjb252ZXJnZWRfYXQYCCABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wSAGIAQESVAoMc21hcnRfYnVja2V0GAkgASgLMjwubGlxdWlkbWV0YWwudjFhbHBoYTEuUXVlcnlNb2R1bGVzUmVzcG9uc2UuU21hcnRCdWNrZXRNb2R1bGVIABJJCgZidWNrZXQYCiABKAsyNy5saXF1aWRtZXRhbC52MWFscGhhMS5RdWVyeU1vZHVsZXNSZXNwb25zZS5CdWNrZXRNb2R1bGVIABJLCgdzZXJ2aWNlGAsgASgLMjgubGlxdWlkbWV0YWwudjFhbHBoYTEuUXVlcnlNb2R1bGVzUmVzcG9uc2UuU2VydmljZU1vZHVsZUgAEk0KCG9ic2VydmVyGAwgASgLMjkubGlxdWlkbWV0YWwudjFhbHBoYTEuUXVlcnlNb2R1bGVzUmVzcG9uc2UuT2JzZXJ2ZXJNb2R1bGVIABJFCgR0YXNrGA0gASgLMjUubGlxdWlkbWV0YWwudjFhbHBoYTEuUXVlcnlNb2R1bGVzUmVzcG9uc2UuVGFza01vZHVsZUgAElQKDHNxbF9kYXRhYmFzZRgOIAEoCzI8LmxpcXVpZG1ldGFsLnYxYWxwaGExLlF1ZXJ5TW9kdWxlc1Jlc3BvbnNlLlNRTERhdGFiYXNlTW9kdWxlSAASVAoMdmVjdG9yX2luZGV4GA8gASgLMjwubGlxdWlkbWV0YWwudjFhbHBoYTEuUXVlcnlNb2R1bGVzUmVzcG9uc2UuVmVjdG9ySW5kZXhNb2R1bGVIABJHCgVxdWV1ZRgQIAEoCzI2LmxpcXVpZG1ldGFsLnYxYWxwaGExLlF1ZXJ5TW9kdWxlc1Jlc3BvbnNlLlF1ZXVlTW9kdWxlSAASTAoIa3Zfc3RvcmUYESABKAsyOC5saXF1aWRtZXRhbC52MWFscGhhMS5RdWVyeU1vZHVsZXNSZXNwb25zZS5LVlN0b3JlTW9kdWxlSAASVAoMYWdlbnRfbWVtb3J5GBIgASgLMjwubGlxdWlkbWV0YWwudjFhbHBoYTEuUXVlcnlNb2R1bGVzUmVzcG9uc2UuQWdlbnRNZW1vcnlNb2R1bGVIAEIICgZtb2R1bGVCDwoNX2NvbnZlcmdlZF9hdCLMAgoKTW9kdWxlVHlwZRIbChdNT0RVTEVfVFlQRV9VTlNQRUNJRklFRBAAEhwKGE1PRFVMRV9UWVBFX1NNQVJUX0JVQ0tFVBABEhYKEk1PRFVMRV9UWVBFX0JVQ0tFVBACEhcKE01PRFVMRV9UWVBFX1NFUlZJQ0UQAxIYChRNT0RVTEVfVFlQRV9PQlNFUlZFUhAEEhQKEE1PRFVMRV9UWVBFX1RBU0sQBRIcChhNT0RVTEVfVFlQRV9TUUxfREFUQUJBU0UQBhIcChhNT0RVTEVfVFlQRV9WRUNUT1JfSU5ERVgQBxIXChNNT0RVTEVfVFlQRV9FTlZfVkFSEAgSFQoRTU9EVUxFX1RZUEVfUVVFVUUQCRIYChRNT0RVTEVfVFlQRV9LVl9TVE9SRRAKEhwKGE1PRFVMRV9UWVBFX0FHRU5UX01FTU9SWRALQhIKEF9uZXh0X3BhZ2VfdG9rZW4ikAEKJlJlc29sdmVCdWNrZXRMb2NhdGlvblRvTW9kdWxlSWRSZXF1ZXN0Eg8KB3VzZXJfaWQYASABKAkSFwoPb3JnYW5pemF0aW9uX2lkGAIgASgJEjwKD2J1Y2tldF9sb2NhdGlvbhgDIAEoCzIjLmxpcXVpZG1ldGFsLnYxYWxwaGExLkJ1Y2tldExvY2F0b3IiZQomUmVzb2x2ZU1vZHVsZUlkVG9CdWNrZXRMb2NhdGlvblJlcXVlc3QSDwoHdXNlcl9pZBgBIAEoCRIXCg9vcmdhbml6YXRpb25faWQYAiABKAkSEQoJbW9kdWxlX2lkGAMgASgJIl8KJ1Jlc29sdmVCdWNrZXRMb2NhdGlvblRvTW9kdWxlSWRSZXNwb25zZRI0CgZidWNrZXQYASABKAsyJC5saXF1aWRtZXRhbC52MWFscGhhMS5CdWNrZXRSZXNwb25zZSJfCidSZXNvbHZlTW9kdWxlSWRUb0J1Y2tldExvY2F0aW9uUmVzcG9uc2USNAoGYnVja2V0GAEgASgLMiQubGlxdWlkbWV0YWwudjFhbHBoYTEuQnVja2V0UmVzcG9uc2UioAEKK1Jlc29sdmVBZ2VudE1lbW9yeUxvY2F0aW9uVG9Nb2R1bGVJZFJlcXVlc3QSDwoHdXNlcl9pZBgBIAEoCRIXCg9vcmdhbml6YXRpb25faWQYAiABKAkSRwoVYWdlbnRfbWVtb3J5X2xvY2F0aW9uGAMgASgLMigubGlxdWlkbWV0YWwudjFhbHBoYTEuQWdlbnRNZW1vcnlMb2NhdG9yImoKK1Jlc29sdmVNb2R1bGVJZFRvQWdlbnRNZW1vcnlMb2NhdGlvblJlcXVlc3QSDwoHdXNlcl9pZBgBIAEoCRIXCg9vcmdhbml6YXRpb25faWQYAiABKAkSEQoJbW9kdWxlX2lkGAMgASgJIm8KLFJlc29sdmVBZ2VudE1lbW9yeUxvY2F0aW9uVG9Nb2R1bGVJZFJlc3BvbnNlEj8KDGFnZW50X21lbW9yeRgBIAEoCzIpLmxpcXVpZG1ldGFsLnYxYWxwaGExLkFnZW50TWVtb3J5UmVzcG9uc2UibwosUmVzb2x2ZU1vZHVsZUlkVG9BZ2VudE1lbW9yeUxvY2F0aW9uUmVzcG9uc2USPwoMYWdlbnRfbWVtb3J5GAEgASgLMikubGlxdWlkbWV0YWwudjFhbHBoYTEuQWdlbnRNZW1vcnlSZXNwb25zZSrSAQoJVW5pdFN0YXRlEhoKFlVOSVRfU1RBVEVfVU5TUEVDSUZJRUQQABIWChJVTklUX1NUQVRFX1BFTkRJTkcQARIXChNVTklUX1NUQVRFX1NUQVJUSU5HEAISFgoSVU5JVF9TVEFURV9SVU5OSU5HEAMSFwoTVU5JVF9TVEFURV9TVE9QUElORxAEEhYKElVOSVRfU1RBVEVfU1RPUFBFRBAFEhcKE1VOSVRfU1RBVEVfREVMRVRJTkcQBhIWChJVTklUX1NUQVRFX0RFTEVURUQQBypVChFCdW5kbGVBcmNoaXZlVHlwZRIjCh9CVU5ETEVfQVJDSElWRV9UWVBFX1VOU1BFQ0lGSUVEEAASGwoXQlVORExFX0FSQ0hJVkVfVFlQRV9aSVAQASqSAQoWV2F0Y2hSZXNwb25zZUV2ZW50VHlwZRIpCiVXQVRDSF9SRVNQT05TRV9FVkVOVF9UWVBFX1VOU1BFQ0lGSUVEEAASJQohV0FUQ0hfUkVTUE9OU0VfRVZFTlRfVFlQRV9NRVNTQUdFEAESJgoiV0FUQ0hfUkVTUE9OU0VfRVZFTlRfVFlQRV9DT01QTEVURRACMswPCg5DYXRhbG9nU2VydmljZRJrCg5RdWVyeVJlc291cmNlcxIrLmxpcXVpZG1ldGFsLnYxYWxwaGExLlF1ZXJ5UmVzb3VyY2VzUmVxdWVzdBosLmxpcXVpZG1ldGFsLnYxYWxwaGExLlF1ZXJ5UmVzb3VyY2VzUmVzcG9uc2USZQoMUXVlcnlNb2R1bGVzEikubGlxdWlkbWV0YWwudjFhbHBoYTEuUXVlcnlNb2R1bGVzUmVxdWVzdBoqLmxpcXVpZG1ldGFsLnYxYWxwaGExLlF1ZXJ5TW9kdWxlc1Jlc3BvbnNlElwKCUJvb3RzdHJhcBImLmxpcXVpZG1ldGFsLnYxYWxwaGExLkJvb3RzdHJhcFJlcXVlc3QaJy5saXF1aWRtZXRhbC52MWFscGhhMS5Cb290c3RyYXBSZXNwb25zZRJlCgxBcHBsaWNhdGlvbnMSKS5saXF1aWRtZXRhbC52MWFscGhhMS5BcHBsaWNhdGlvbnNSZXF1ZXN0GioubGlxdWlkbWV0YWwudjFhbHBoYTEuQXBwbGljYXRpb25zUmVzcG9uc2USUwoGRGVwbG95EiMubGlxdWlkbWV0YWwudjFhbHBoYTEuRGVwbG95UmVxdWVzdBokLmxpcXVpZG1ldGFsLnYxYWxwaGExLkRlcGxveVJlc3BvbnNlEmUKDFVwbG9hZEJ1bmRsZRIpLmxpcXVpZG1ldGFsLnYxYWxwaGExLlVwbG9hZEJ1bmRsZVJlcXVlc3QaKi5saXF1aWRtZXRhbC52MWFscGhhMS5VcGxvYWRCdW5kbGVSZXNwb25zZRJWCgdTZXRFbnZzEiQubGlxdWlkbWV0YWwudjFhbHBoYTEuU2V0RW52c1JlcXVlc3QaJS5saXF1aWRtZXRhbC52MWFscGhhMS5TZXRFbnZzUmVzcG9uc2USVgoHR2V0RW52cxIkLmxpcXVpZG1ldGFsLnYxYWxwaGExLkdldEVudnNSZXF1ZXN0GiUubGlxdWlkbWV0YWwudjFhbHBoYTEuR2V0RW52c1Jlc3BvbnNlElYKB1JlbGVhc2USJC5saXF1aWRtZXRhbC52MWFscGhhMS5SZWxlYXNlUmVxdWVzdBolLmxpcXVpZG1ldGFsLnYxYWxwaGExLlJlbGVhc2VSZXNwb25zZRJSCgVXYXRjaBIiLmxpcXVpZG1ldGFsLnYxYWxwaGExLldhdGNoUmVxdWVzdBojLmxpcXVpZG1ldGFsLnYxYWxwaGExLldhdGNoUmVzcG9uc2UwARJTCgZEZWxldGUSIy5saXF1aWRtZXRhbC52MWFscGhhMS5EZWxldGVSZXF1ZXN0GiQubGlxdWlkbWV0YWwudjFhbHBoYTEuRGVsZXRlUmVzcG9uc2USXAoJU2V0QWN0aXZlEiYubGlxdWlkbWV0YWwudjFhbHBoYTEuU2V0QWN0aXZlUmVxdWVzdBonLmxpcXVpZG1ldGFsLnYxYWxwaGExLlNldEFjdGl2ZVJlc3BvbnNlEl8KClNldFNhbmRib3gSJy5saXF1aWRtZXRhbC52MWFscGhhMS5TZXRTYW5kYm94UmVxdWVzdBooLmxpcXVpZG1ldGFsLnYxYWxwaGExLlNldFNhbmRib3hSZXNwb25zZRJTCgZTdGF0dXMSIy5saXF1aWRtZXRhbC52MWFscGhhMS5TdGF0dXNSZXF1ZXN0GiQubGlxdWlkbWV0YWwudjFhbHBoYTEuU3RhdHVzUmVzcG9uc2USngEKH1Jlc29sdmVCdWNrZXRMb2NhdGlvblRvTW9kdWxlSWQSPC5saXF1aWRtZXRhbC52MWFscGhhMS5SZXNvbHZlQnVja2V0TG9jYXRpb25Ub01vZHVsZUlkUmVxdWVzdBo9LmxpcXVpZG1ldGFsLnYxYWxwaGExLlJlc29sdmVCdWNrZXRMb2NhdGlvblRvTW9kdWxlSWRSZXNwb25zZRKeAQofUmVzb2x2ZU1vZHVsZUlkVG9CdWNrZXRMb2NhdGlvbhI8LmxpcXVpZG1ldGFsLnYxYWxwaGExLlJlc29sdmVNb2R1bGVJZFRvQnVja2V0TG9jYXRpb25SZXF1ZXN0Gj0ubGlxdWlkbWV0YWwudjFhbHBoYTEuUmVzb2x2ZU1vZHVsZUlkVG9CdWNrZXRMb2NhdGlvblJlc3BvbnNlEq0BCiRSZXNvbHZlQWdlbnRNZW1vcnlMb2NhdGlvblRvTW9kdWxlSWQSQS5saXF1aWRtZXRhbC52MWFscGhhMS5SZXNvbHZlQWdlbnRNZW1vcnlMb2NhdGlvblRvTW9kdWxlSWRSZXF1ZXN0GkIubGlxdWlkbWV0YWwudjFhbHBoYTEuUmVzb2x2ZUFnZW50TWVtb3J5TG9jYXRpb25Ub01vZHVsZUlkUmVzcG9uc2USrQEKJFJlc29sdmVNb2R1bGVJZFRvQWdlbnRNZW1vcnlMb2NhdGlvbhJBLmxpcXVpZG1ldGFsLnYxYWxwaGExLlJlc29sdmVNb2R1bGVJZFRvQWdlbnRNZW1vcnlMb2NhdGlvblJlcXVlc3QaQi5saXF1aWRtZXRhbC52MWFscGhhMS5SZXNvbHZlTW9kdWxlSWRUb0FnZW50TWVtb3J5TG9jYXRpb25SZXNwb25zZULnAQoYY29tLmxpcXVpZG1ldGFsLnYxYWxwaGExQgxDYXRhbG9nUHJvdG9QAVpMZ2l0aHViLmNvbS9saXF1aWRtZXRhbC1haS9wcm90b2dlbjIvbGlxdWlkbWV0YWwvdjFhbHBoYTE7bGlxdWlkbWV0YWx2MWFscGhhMaICA0xYWKoCFExpcXVpZG1ldGFsLlYxYWxwaGExygIUTGlxdWlkbWV0YWxcVjFhbHBoYTHiAiBMaXF1aWRtZXRhbFxWMWFscGhhMVxHUEJNZXRhZGF0YeoCFUxpcXVpZG1ldGFsOjpWMWFscGhhMWIGcHJvdG8z", [file_google_protobuf_struct, file_google_protobuf_timestamp, file_liquidmetal_v1alpha1_bucket_name, file_liquidmetal_v1alpha1_agent_memory_name]);
19
+ fileDesc("CiJsaXF1aWRtZXRhbC92MWFscGhhMS9jYXRhbG9nLnByb3RvEhRsaXF1aWRtZXRhbC52MWFscGhhMSKHAQoTQXBwbGljYXRpb25zUmVxdWVzdBIPCgd1c2VyX2lkGAEgASgJEhcKD29yZ2FuaXphdGlvbl9pZBgCIAEoCRIUCgxzaG93X2RlbGV0ZWQYAyABKAgSHAoPbmV4dF9wYWdlX3Rva2VuGAQgASgJSACIAQFCEgoQX25leHRfcGFnZV90b2tlbiKEBQoUQXBwbGljYXRpb25zUmVzcG9uc2USTAoMYXBwbGljYXRpb25zGAEgAygLMjYubGlxdWlkbWV0YWwudjFhbHBoYTEuQXBwbGljYXRpb25zUmVzcG9uc2UuQXBwbGljYXRpb24SHAoPbmV4dF9wYWdlX3Rva2VuGAIgASgJSACIAQEa6wMKC0FwcGxpY2F0aW9uEgwKBG5hbWUYASABKAkSEgoKdmVyc2lvbl9pZBgCIAEoCRIQCghtYW5pZmVzdBgDIAEoCRISCgVzdWl0ZRgEIAEoCUgAiAEBEi4KCmNyZWF0ZWRfYXQYBSABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEi4KCnVwZGF0ZWRfYXQYBiABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEjMKCmRlbGV0ZWRfYXQYByABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wSAGIAQESEQoJaXNfYWN0aXZlGAggASgIEhcKD29yZ2FuaXphdGlvbl9pZBgJIAEoCRITCgZicmFuY2gYCiABKAlIAogBARIUCgxpc19zYW5kYm94ZWQYCyABKAgSIAoTcHJldmlvdXNfdmVyc2lvbl9pZBgMIAEoCUgDiAEBEi4KBXN0YXRlGA0gASgOMh8ubGlxdWlkbWV0YWwudjFhbHBoYTEuVW5pdFN0YXRlEhEKBGxvY2sYDiABKAlIBIgBAUIICgZfc3VpdGVCDQoLX2RlbGV0ZWRfYXRCCQoHX2JyYW5jaEIWChRfcHJldmlvdXNfdmVyc2lvbl9pZEIHCgVfbG9ja0ISChBfbmV4dF9wYWdlX3Rva2VuItIBChBCb290c3RyYXBSZXF1ZXN0Eg8KB3VzZXJfaWQYASABKAkSFwoPb3JnYW5pemF0aW9uX2lkGAIgASgJEg0KBXRva2VuGAMgASgJEh0KFWNsb3VkZmxhcmVfYWNjb3VudF9pZBgEIAEoCRIfChdjbG91ZGZsYXJlX2JlYXJlcl90b2tlbhgFIAEoCRIjChtsaXF1aWRtZXRhbF9zZXJ2aWNlc19kb21haW4YBiABKAkSIAoYY3VzdG9tZXJfc2VydmljZXNfZG9tYWluGAcgASgJIhMKEUJvb3RzdHJhcFJlc3BvbnNlIiwKKkludGVybmFsQXBwbGljYXRpb25zUmVxdWVzdFBhZ2luYXRpb25Ub2tlbiLeAQoTVXBsb2FkQnVuZGxlUmVxdWVzdBIPCgd1c2VyX2lkGAEgASgJEhcKD29yZ2FuaXphdGlvbl9pZBgCIAEoCRIYChBhcHBsaWNhdGlvbl9uYW1lGAMgASgJEh4KFmFwcGxpY2F0aW9uX3ZlcnNpb25faWQYBCABKAkSEwoLYnVuZGxlX25hbWUYBSABKAkSPQoMYXJjaGl2ZV90eXBlGAYgASgOMicubGlxdWlkbWV0YWwudjFhbHBoYTEuQnVuZGxlQXJjaGl2ZVR5cGUSDwoHYXJjaGl2ZRgHIAEoDCIWChRVcGxvYWRCdW5kbGVSZXNwb25zZSJ7ChVRdWVyeVJlc291cmNlc1JlcXVlc3QSDwoHdXNlcl9pZBgBIAEoCRIXCg9vcmdhbml6YXRpb25faWQYAiABKAkSGAoQYXBwbGljYXRpb25fbmFtZRgDIAEoCRIeChZhcHBsaWNhdGlvbl92ZXJzaW9uX2lkGAQgASgJIvUHChZRdWVyeVJlc291cmNlc1Jlc3BvbnNlEkgKCXJlc291cmNlcxgBIAMoCzI1LmxpcXVpZG1ldGFsLnYxYWxwaGExLlF1ZXJ5UmVzb3VyY2VzUmVzcG9uc2UuUmVzb3VyY2USHAoPbmV4dF9wYWdlX3Rva2VuGAIgASgJSACIAQEa3gYKCFJlc291cmNlEhcKD29yZ2FuaXphdGlvbl9pZBgBIAEoCRIYChBhcHBsaWNhdGlvbl9uYW1lGAIgASgJEh4KFmFwcGxpY2F0aW9uX3ZlcnNpb25faWQYAyABKAkSEwoLcmVzb3VyY2VfaWQYBCABKAkSDAoEbmFtZRgFIAEoCRIMCgR0eXBlGAYgASgJElkKDXJlc291cmNlX3R5cGUYByABKA4yQi5saXF1aWRtZXRhbC52MWFscGhhMS5RdWVyeVJlc291cmNlc1Jlc3BvbnNlLlJlc291cmNlLlJlc291cmNlVHlwZRIrCgphdHRyaWJ1dGVzGAggASgLMhcuZ29vZ2xlLnByb3RvYnVmLlN0cnVjdBIuCgpjcmVhdGVkX2F0GAkgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIuCgp1cGRhdGVkX2F0GAogASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcCLlAwoMUmVzb3VyY2VUeXBlEh0KGVJFU09VUkNFX1RZUEVfVU5TUEVDSUZJRUQQABIgChxSRVNPVVJDRV9UWVBFX1FVRVVFX0NPTlNVTUVSEAESGAoUUkVTT1VSQ0VfVFlQRV9TQ1JJUFQQAhIUChBSRVNPVVJDRV9UWVBFX0QxEAMSGgoWUkVTT1VSQ0VfVFlQRV9EMV9RVUVSWRAEEhsKF1JFU09VUkNFX1RZUEVfVkVDVE9SSVpFEAUSGQoVUkVTT1VSQ0VfVFlQRV9FTlZfVkFSEAYSGAoUUkVTT1VSQ0VfVFlQRV9CVUNLRVQQBxIXChNSRVNPVVJDRV9UWVBFX1FVRVVFEAgSIAocUkVTT1VSQ0VfVFlQRV9TQ1JJUFRfQklORElORxAJEiUKIVJFU09VUkNFX1RZUEVfQlVDS0VUX05PVElGSUNBVElPThAKEhoKFlJFU09VUkNFX1RZUEVfTUVUQURBVEEQCxIfChtSRVNPVVJDRV9UWVBFX0NVU1RPTV9ET01BSU4QDBIXChNSRVNPVVJDRV9UWVBFX1JPVVRFEA0SHgoaUkVTT1VSQ0VfVFlQRV9TTUFSVF9CVUNLRVQQDhIeChpSRVNPVVJDRV9UWVBFX0FHRU5UX01FTU9SWRAPQhIKEF9uZXh0X3BhZ2VfdG9rZW4ipAQKDURlcGxveVJlcXVlc3QSDwoHdXNlcl9pZBgBIAEoCRIXCg9vcmdhbml6YXRpb25faWQYAiABKAkSRQoMYXBwbGljYXRpb25zGAMgAygLMi8ubGlxdWlkbWV0YWwudjFhbHBoYTEuRGVwbG95UmVxdWVzdC5BcHBsaWNhdGlvbhouChNBcHBsaWNhdGlvbk1ldGFkYXRhEhcKD3J1bnRpbWVfdmVyc2lvbhgBIAEoCRrxAgoLQXBwbGljYXRpb24SDQoFc3VpdGUYASABKAkSEwoLYXBwbGljYXRpb24YAiABKAkSIAoTcHJldmlvdXNfdmVyc2lvbl9pZBgDIAEoCUgAiAEBEh8KEmN1cnJlbnRfdmVyc2lvbl9pZBgEIAEoCUgBiAEBEhMKBmJyYW5jaBgFIAEoCUgCiAEBEhAKCG1hbmlmZXN0GAYgASgJEkkKCG1ldGFkYXRhGAcgASgLMjcubGlxdWlkbWV0YWwudjFhbHBoYTEuRGVwbG95UmVxdWVzdC5BcHBsaWNhdGlvbk1ldGFkYXRhEg0KBWFtZW5kGAggASgIEhYKCWlzX2FjdGl2ZRgJIAEoCEgDiAEBEhEKBGxvY2sYCiABKAlIBIgBAUIWChRfcHJldmlvdXNfdmVyc2lvbl9pZEIVChNfY3VycmVudF92ZXJzaW9uX2lkQgkKB19icmFuY2hCDAoKX2lzX2FjdGl2ZUIHCgVfbG9jayLUAQoORGVwbG95UmVzcG9uc2USFwoPb3JnYW5pemF0aW9uX2lkGAEgASgJEkYKDGFwcGxpY2F0aW9ucxgCIAMoCzIwLmxpcXVpZG1ldGFsLnYxYWxwaGExLkRlcGxveVJlc3BvbnNlLkFwcGxpY2F0aW9uGmEKC0FwcGxpY2F0aW9uEhgKEGFwcGxpY2F0aW9uX25hbWUYASABKAkSGgoSY3VycmVudF92ZXJzaW9uX2lkGAIgASgJEg4KBmJyYW5jaBgDIAEoCRIMCgRsb2NrGAQgASgJIt4BCg5TZXRFbnZzUmVxdWVzdBIPCgd1c2VyX2lkGAEgASgJEhcKD29yZ2FuaXphdGlvbl9pZBgCIAEoCRI2CgRlbnZzGAMgAygLMigubGlxdWlkbWV0YWwudjFhbHBoYTEuU2V0RW52c1JlcXVlc3QuRW52GmoKA0VudhIYChBhcHBsaWNhdGlvbl9uYW1lGAEgASgJEhoKEmN1cnJlbnRfdmVyc2lvbl9pZBgCIAEoCRILCgNrZXkYAyABKAkSDQoFdmFsdWUYBCABKAkSEQoJaXNfc2VjcmV0GAUgASgIIhEKD1NldEVudnNSZXNwb25zZSK8AQoOR2V0RW52c1JlcXVlc3QSDwoHdXNlcl9pZBgBIAEoCRIXCg9vcmdhbml6YXRpb25faWQYAiABKAkSNgoEZW52cxgDIAMoCzIoLmxpcXVpZG1ldGFsLnYxYWxwaGExLkdldEVudnNSZXF1ZXN0LkVudhpICgNFbnYSGAoQYXBwbGljYXRpb25fbmFtZRgBIAEoCRIaChJjdXJyZW50X3ZlcnNpb25faWQYAiABKAkSCwoDa2V5GAMgASgJIrYBCg9HZXRFbnZzUmVzcG9uc2USNwoEZW52cxgBIAMoCzIpLmxpcXVpZG1ldGFsLnYxYWxwaGExLkdldEVudnNSZXNwb25zZS5FbnYaagoDRW52EhgKEGFwcGxpY2F0aW9uX25hbWUYASABKAkSGgoSY3VycmVudF92ZXJzaW9uX2lkGAIgASgJEgsKA2tleRgDIAEoCRINCgV2YWx1ZRgEIAEoCRIRCglpc19zZWNyZXQYBSABKAgiwAEKDlJlbGVhc2VSZXF1ZXN0Eg8KB3VzZXJfaWQYASABKAkSFwoPb3JnYW5pemF0aW9uX2lkGAIgASgJEjgKBWxvY2tzGAMgAygLMikubGlxdWlkbWV0YWwudjFhbHBoYTEuUmVsZWFzZVJlcXVlc3QuTG9jaxpKCgRMb2NrEhgKEGFwcGxpY2F0aW9uX25hbWUYASABKAkSGgoSY3VycmVudF92ZXJzaW9uX2lkGAIgASgJEgwKBGxvY2sYAyABKAkiEQoPUmVsZWFzZVJlc3BvbnNlIsMBCgxXYXRjaFJlcXVlc3QSDwoHdXNlcl9pZBgBIAEoCRIXCg9vcmdhbml6YXRpb25faWQYAiABKAkSRAoMYXBwbGljYXRpb25zGAMgAygLMi4ubGlxdWlkbWV0YWwudjFhbHBoYTEuV2F0Y2hSZXF1ZXN0LkFwcGxpY2F0aW9uGkMKC0FwcGxpY2F0aW9uEhgKEGFwcGxpY2F0aW9uX25hbWUYASABKAkSGgoSY3VycmVudF92ZXJzaW9uX2lkGAIgASgJIpkBCg1XYXRjaFJlc3BvbnNlEhgKEGFwcGxpY2F0aW9uX25hbWUYASABKAkSGgoSY3VycmVudF92ZXJzaW9uX2lkGAIgASgJEhAKCGV2ZW50X2lkGAMgASgJEkAKCmV2ZW50X3R5cGUYBCABKA4yLC5saXF1aWRtZXRhbC52MWFscGhhMS5XYXRjaFJlc3BvbnNlRXZlbnRUeXBlIsUBCg1EZWxldGVSZXF1ZXN0Eg8KB3VzZXJfaWQYASABKAkSFwoPb3JnYW5pemF0aW9uX2lkGAIgASgJEkUKDGFwcGxpY2F0aW9ucxgDIAMoCzIvLmxpcXVpZG1ldGFsLnYxYWxwaGExLkRlbGV0ZVJlcXVlc3QuQXBwbGljYXRpb24aQwoLQXBwbGljYXRpb24SGAoQYXBwbGljYXRpb25fbmFtZRgBIAEoCRIaChJjdXJyZW50X3ZlcnNpb25faWQYAiABKAkiEAoORGVsZXRlUmVzcG9uc2Ui3gEKEFNldEFjdGl2ZVJlcXVlc3QSDwoHdXNlcl9pZBgBIAEoCRIXCg9vcmdhbml6YXRpb25faWQYAiABKAkSSAoMYXBwbGljYXRpb25zGAMgAygLMjIubGlxdWlkbWV0YWwudjFhbHBoYTEuU2V0QWN0aXZlUmVxdWVzdC5BcHBsaWNhdGlvbhpWCgtBcHBsaWNhdGlvbhIYChBhcHBsaWNhdGlvbl9uYW1lGAEgASgJEhoKEmN1cnJlbnRfdmVyc2lvbl9pZBgCIAEoCRIRCglpc19hY3RpdmUYAyABKAgiEwoRU2V0QWN0aXZlUmVzcG9uc2Ui4wEKEVNldFNhbmRib3hSZXF1ZXN0Eg8KB3VzZXJfaWQYASABKAkSFwoPb3JnYW5pemF0aW9uX2lkGAIgASgJEkkKDGFwcGxpY2F0aW9ucxgDIAMoCzIzLmxpcXVpZG1ldGFsLnYxYWxwaGExLlNldFNhbmRib3hSZXF1ZXN0LkFwcGxpY2F0aW9uGlkKC0FwcGxpY2F0aW9uEhgKEGFwcGxpY2F0aW9uX25hbWUYASABKAkSGgoSY3VycmVudF92ZXJzaW9uX2lkGAIgASgJEhQKDGlzX3NhbmRib3hlZBgDIAEoCCIUChJTZXRTYW5kYm94UmVzcG9uc2UibwoNU3RhdHVzUmVxdWVzdBIPCgd1c2VyX2lkGAEgASgJEhcKD29yZ2FuaXphdGlvbl9pZBgCIAEoCRIYChBhcHBsaWNhdGlvbl9uYW1lGAMgASgJEhoKEmN1cnJlbnRfdmVyc2lvbl9pZBgEIAEoCSLwAQoOU3RhdHVzUmVzcG9uc2USLgoFc3RhdGUYASABKA4yHy5saXF1aWRtZXRhbC52MWFscGhhMS5Vbml0U3RhdGUSPAoHbW9kdWxlcxgCIAMoCzIrLmxpcXVpZG1ldGFsLnYxYWxwaGExLlN0YXR1c1Jlc3BvbnNlLk1vZHVsZRIRCgRsb2NrGAMgASgJSACIAQEaVAoGTW9kdWxlEgwKBG5hbWUYASABKAkSLgoFc3RhdGUYAiABKA4yHy5saXF1aWRtZXRhbC52MWFscGhhMS5Vbml0U3RhdGUSDAoEdXJscxgDIAMoCUIHCgVfbG9jayLdAQoTUXVlcnlNb2R1bGVzUmVxdWVzdBIPCgd1c2VyX2lkGAEgASgJEhcKD29yZ2FuaXphdGlvbl9pZBgCIAEoCRIdChBhcHBsaWNhdGlvbl9uYW1lGAMgASgJSACIAQESIwoWYXBwbGljYXRpb25fdmVyc2lvbl9pZBgEIAEoCUgBiAEBEhgKC21vZHVsZV90eXBlGAUgASgJSAKIAQFCEwoRX2FwcGxpY2F0aW9uX25hbWVCGQoXX2FwcGxpY2F0aW9uX3ZlcnNpb25faWRCDgoMX21vZHVsZV90eXBlIvINChRRdWVyeU1vZHVsZXNSZXNwb25zZRJCCgdtb2R1bGVzGAEgAygLMjEubGlxdWlkbWV0YWwudjFhbHBoYTEuUXVlcnlNb2R1bGVzUmVzcG9uc2UuTW9kdWxlEhwKD25leHRfcGFnZV90b2tlbhgCIAEoCUgAiAEBGiAKEVNtYXJ0QnVja2V0TW9kdWxlEgsKA3VybBgBIAEoCRobCgxCdWNrZXRNb2R1bGUSCwoDdXJsGAEgASgJGg8KDVNlcnZpY2VNb2R1bGUaEAoOT2JzZXJ2ZXJNb2R1bGUaDAoKVGFza01vZHVsZRoTChFTUUxEYXRhYmFzZU1vZHVsZRoTChFWZWN0b3JJbmRleE1vZHVsZRoNCgtRdWV1ZU1vZHVsZRoPCg1LVlN0b3JlTW9kdWxlGhMKEUFnZW50TWVtb3J5TW9kdWxlGsUICgZNb2R1bGUSFwoPb3JnYW5pemF0aW9uX2lkGAEgASgJEhgKEGFwcGxpY2F0aW9uX25hbWUYAiABKAkSHgoWYXBwbGljYXRpb25fdmVyc2lvbl9pZBgDIAEoCRIRCgltb2R1bGVfaWQYBCABKAkSDAoEbmFtZRgFIAEoCRIMCgR0eXBlGAYgASgJEkoKC21vZHVsZV90eXBlGAcgASgOMjUubGlxdWlkbWV0YWwudjFhbHBoYTEuUXVlcnlNb2R1bGVzUmVzcG9uc2UuTW9kdWxlVHlwZRI1Cgxjb252ZXJnZWRfYXQYCCABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wSAGIAQESVAoMc21hcnRfYnVja2V0GAkgASgLMjwubGlxdWlkbWV0YWwudjFhbHBoYTEuUXVlcnlNb2R1bGVzUmVzcG9uc2UuU21hcnRCdWNrZXRNb2R1bGVIABJJCgZidWNrZXQYCiABKAsyNy5saXF1aWRtZXRhbC52MWFscGhhMS5RdWVyeU1vZHVsZXNSZXNwb25zZS5CdWNrZXRNb2R1bGVIABJLCgdzZXJ2aWNlGAsgASgLMjgubGlxdWlkbWV0YWwudjFhbHBoYTEuUXVlcnlNb2R1bGVzUmVzcG9uc2UuU2VydmljZU1vZHVsZUgAEk0KCG9ic2VydmVyGAwgASgLMjkubGlxdWlkbWV0YWwudjFhbHBoYTEuUXVlcnlNb2R1bGVzUmVzcG9uc2UuT2JzZXJ2ZXJNb2R1bGVIABJFCgR0YXNrGA0gASgLMjUubGlxdWlkbWV0YWwudjFhbHBoYTEuUXVlcnlNb2R1bGVzUmVzcG9uc2UuVGFza01vZHVsZUgAElQKDHNxbF9kYXRhYmFzZRgOIAEoCzI8LmxpcXVpZG1ldGFsLnYxYWxwaGExLlF1ZXJ5TW9kdWxlc1Jlc3BvbnNlLlNRTERhdGFiYXNlTW9kdWxlSAASVAoMdmVjdG9yX2luZGV4GA8gASgLMjwubGlxdWlkbWV0YWwudjFhbHBoYTEuUXVlcnlNb2R1bGVzUmVzcG9uc2UuVmVjdG9ySW5kZXhNb2R1bGVIABJHCgVxdWV1ZRgQIAEoCzI2LmxpcXVpZG1ldGFsLnYxYWxwaGExLlF1ZXJ5TW9kdWxlc1Jlc3BvbnNlLlF1ZXVlTW9kdWxlSAASTAoIa3Zfc3RvcmUYESABKAsyOC5saXF1aWRtZXRhbC52MWFscGhhMS5RdWVyeU1vZHVsZXNSZXNwb25zZS5LVlN0b3JlTW9kdWxlSAASVAoMYWdlbnRfbWVtb3J5GBIgASgLMjwubGlxdWlkbWV0YWwudjFhbHBoYTEuUXVlcnlNb2R1bGVzUmVzcG9uc2UuQWdlbnRNZW1vcnlNb2R1bGVIAEIICgZtb2R1bGVCDwoNX2NvbnZlcmdlZF9hdCLMAgoKTW9kdWxlVHlwZRIbChdNT0RVTEVfVFlQRV9VTlNQRUNJRklFRBAAEhwKGE1PRFVMRV9UWVBFX1NNQVJUX0JVQ0tFVBABEhYKEk1PRFVMRV9UWVBFX0JVQ0tFVBACEhcKE01PRFVMRV9UWVBFX1NFUlZJQ0UQAxIYChRNT0RVTEVfVFlQRV9PQlNFUlZFUhAEEhQKEE1PRFVMRV9UWVBFX1RBU0sQBRIcChhNT0RVTEVfVFlQRV9TUUxfREFUQUJBU0UQBhIcChhNT0RVTEVfVFlQRV9WRUNUT1JfSU5ERVgQBxIXChNNT0RVTEVfVFlQRV9FTlZfVkFSEAgSFQoRTU9EVUxFX1RZUEVfUVVFVUUQCRIYChRNT0RVTEVfVFlQRV9LVl9TVE9SRRAKEhwKGE1PRFVMRV9UWVBFX0FHRU5UX01FTU9SWRALQhIKEF9uZXh0X3BhZ2VfdG9rZW4ikAEKJlJlc29sdmVCdWNrZXRMb2NhdGlvblRvTW9kdWxlSWRSZXF1ZXN0Eg8KB3VzZXJfaWQYASABKAkSFwoPb3JnYW5pemF0aW9uX2lkGAIgASgJEjwKD2J1Y2tldF9sb2NhdGlvbhgDIAEoCzIjLmxpcXVpZG1ldGFsLnYxYWxwaGExLkJ1Y2tldExvY2F0b3IiZQomUmVzb2x2ZU1vZHVsZUlkVG9CdWNrZXRMb2NhdGlvblJlcXVlc3QSDwoHdXNlcl9pZBgBIAEoCRIXCg9vcmdhbml6YXRpb25faWQYAiABKAkSEQoJbW9kdWxlX2lkGAMgASgJIl8KJ1Jlc29sdmVCdWNrZXRMb2NhdGlvblRvTW9kdWxlSWRSZXNwb25zZRI0CgZidWNrZXQYASABKAsyJC5saXF1aWRtZXRhbC52MWFscGhhMS5CdWNrZXRSZXNwb25zZSJfCidSZXNvbHZlTW9kdWxlSWRUb0J1Y2tldExvY2F0aW9uUmVzcG9uc2USNAoGYnVja2V0GAEgASgLMiQubGlxdWlkbWV0YWwudjFhbHBoYTEuQnVja2V0UmVzcG9uc2UioAEKK1Jlc29sdmVBZ2VudE1lbW9yeUxvY2F0aW9uVG9Nb2R1bGVJZFJlcXVlc3QSDwoHdXNlcl9pZBgBIAEoCRIXCg9vcmdhbml6YXRpb25faWQYAiABKAkSRwoVYWdlbnRfbWVtb3J5X2xvY2F0aW9uGAMgASgLMigubGlxdWlkbWV0YWwudjFhbHBoYTEuQWdlbnRNZW1vcnlMb2NhdG9yImoKK1Jlc29sdmVNb2R1bGVJZFRvQWdlbnRNZW1vcnlMb2NhdGlvblJlcXVlc3QSDwoHdXNlcl9pZBgBIAEoCRIXCg9vcmdhbml6YXRpb25faWQYAiABKAkSEQoJbW9kdWxlX2lkGAMgASgJIm8KLFJlc29sdmVBZ2VudE1lbW9yeUxvY2F0aW9uVG9Nb2R1bGVJZFJlc3BvbnNlEj8KDGFnZW50X21lbW9yeRgBIAEoCzIpLmxpcXVpZG1ldGFsLnYxYWxwaGExLkFnZW50TWVtb3J5UmVzcG9uc2UibwosUmVzb2x2ZU1vZHVsZUlkVG9BZ2VudE1lbW9yeUxvY2F0aW9uUmVzcG9uc2USPwoMYWdlbnRfbWVtb3J5GAEgASgLMikubGlxdWlkbWV0YWwudjFhbHBoYTEuQWdlbnRNZW1vcnlSZXNwb25zZSrSAQoJVW5pdFN0YXRlEhoKFlVOSVRfU1RBVEVfVU5TUEVDSUZJRUQQABIWChJVTklUX1NUQVRFX1BFTkRJTkcQARIXChNVTklUX1NUQVRFX1NUQVJUSU5HEAISFgoSVU5JVF9TVEFURV9SVU5OSU5HEAMSFwoTVU5JVF9TVEFURV9TVE9QUElORxAEEhYKElVOSVRfU1RBVEVfU1RPUFBFRBAFEhcKE1VOSVRfU1RBVEVfREVMRVRJTkcQBhIWChJVTklUX1NUQVRFX0RFTEVURUQQBypVChFCdW5kbGVBcmNoaXZlVHlwZRIjCh9CVU5ETEVfQVJDSElWRV9UWVBFX1VOU1BFQ0lGSUVEEAASGwoXQlVORExFX0FSQ0hJVkVfVFlQRV9aSVAQASqSAQoWV2F0Y2hSZXNwb25zZUV2ZW50VHlwZRIpCiVXQVRDSF9SRVNQT05TRV9FVkVOVF9UWVBFX1VOU1BFQ0lGSUVEEAASJQohV0FUQ0hfUkVTUE9OU0VfRVZFTlRfVFlQRV9NRVNTQUdFEAESJgoiV0FUQ0hfUkVTUE9OU0VfRVZFTlRfVFlQRV9DT01QTEVURRACMswPCg5DYXRhbG9nU2VydmljZRJrCg5RdWVyeVJlc291cmNlcxIrLmxpcXVpZG1ldGFsLnYxYWxwaGExLlF1ZXJ5UmVzb3VyY2VzUmVxdWVzdBosLmxpcXVpZG1ldGFsLnYxYWxwaGExLlF1ZXJ5UmVzb3VyY2VzUmVzcG9uc2USZQoMUXVlcnlNb2R1bGVzEikubGlxdWlkbWV0YWwudjFhbHBoYTEuUXVlcnlNb2R1bGVzUmVxdWVzdBoqLmxpcXVpZG1ldGFsLnYxYWxwaGExLlF1ZXJ5TW9kdWxlc1Jlc3BvbnNlElwKCUJvb3RzdHJhcBImLmxpcXVpZG1ldGFsLnYxYWxwaGExLkJvb3RzdHJhcFJlcXVlc3QaJy5saXF1aWRtZXRhbC52MWFscGhhMS5Cb290c3RyYXBSZXNwb25zZRJlCgxBcHBsaWNhdGlvbnMSKS5saXF1aWRtZXRhbC52MWFscGhhMS5BcHBsaWNhdGlvbnNSZXF1ZXN0GioubGlxdWlkbWV0YWwudjFhbHBoYTEuQXBwbGljYXRpb25zUmVzcG9uc2USUwoGRGVwbG95EiMubGlxdWlkbWV0YWwudjFhbHBoYTEuRGVwbG95UmVxdWVzdBokLmxpcXVpZG1ldGFsLnYxYWxwaGExLkRlcGxveVJlc3BvbnNlEmUKDFVwbG9hZEJ1bmRsZRIpLmxpcXVpZG1ldGFsLnYxYWxwaGExLlVwbG9hZEJ1bmRsZVJlcXVlc3QaKi5saXF1aWRtZXRhbC52MWFscGhhMS5VcGxvYWRCdW5kbGVSZXNwb25zZRJWCgdTZXRFbnZzEiQubGlxdWlkbWV0YWwudjFhbHBoYTEuU2V0RW52c1JlcXVlc3QaJS5saXF1aWRtZXRhbC52MWFscGhhMS5TZXRFbnZzUmVzcG9uc2USVgoHR2V0RW52cxIkLmxpcXVpZG1ldGFsLnYxYWxwaGExLkdldEVudnNSZXF1ZXN0GiUubGlxdWlkbWV0YWwudjFhbHBoYTEuR2V0RW52c1Jlc3BvbnNlElYKB1JlbGVhc2USJC5saXF1aWRtZXRhbC52MWFscGhhMS5SZWxlYXNlUmVxdWVzdBolLmxpcXVpZG1ldGFsLnYxYWxwaGExLlJlbGVhc2VSZXNwb25zZRJSCgVXYXRjaBIiLmxpcXVpZG1ldGFsLnYxYWxwaGExLldhdGNoUmVxdWVzdBojLmxpcXVpZG1ldGFsLnYxYWxwaGExLldhdGNoUmVzcG9uc2UwARJTCgZEZWxldGUSIy5saXF1aWRtZXRhbC52MWFscGhhMS5EZWxldGVSZXF1ZXN0GiQubGlxdWlkbWV0YWwudjFhbHBoYTEuRGVsZXRlUmVzcG9uc2USXAoJU2V0QWN0aXZlEiYubGlxdWlkbWV0YWwudjFhbHBoYTEuU2V0QWN0aXZlUmVxdWVzdBonLmxpcXVpZG1ldGFsLnYxYWxwaGExLlNldEFjdGl2ZVJlc3BvbnNlEl8KClNldFNhbmRib3gSJy5saXF1aWRtZXRhbC52MWFscGhhMS5TZXRTYW5kYm94UmVxdWVzdBooLmxpcXVpZG1ldGFsLnYxYWxwaGExLlNldFNhbmRib3hSZXNwb25zZRJTCgZTdGF0dXMSIy5saXF1aWRtZXRhbC52MWFscGhhMS5TdGF0dXNSZXF1ZXN0GiQubGlxdWlkbWV0YWwudjFhbHBoYTEuU3RhdHVzUmVzcG9uc2USngEKH1Jlc29sdmVCdWNrZXRMb2NhdGlvblRvTW9kdWxlSWQSPC5saXF1aWRtZXRhbC52MWFscGhhMS5SZXNvbHZlQnVja2V0TG9jYXRpb25Ub01vZHVsZUlkUmVxdWVzdBo9LmxpcXVpZG1ldGFsLnYxYWxwaGExLlJlc29sdmVCdWNrZXRMb2NhdGlvblRvTW9kdWxlSWRSZXNwb25zZRKeAQofUmVzb2x2ZU1vZHVsZUlkVG9CdWNrZXRMb2NhdGlvbhI8LmxpcXVpZG1ldGFsLnYxYWxwaGExLlJlc29sdmVNb2R1bGVJZFRvQnVja2V0TG9jYXRpb25SZXF1ZXN0Gj0ubGlxdWlkbWV0YWwudjFhbHBoYTEuUmVzb2x2ZU1vZHVsZUlkVG9CdWNrZXRMb2NhdGlvblJlc3BvbnNlEq0BCiRSZXNvbHZlQWdlbnRNZW1vcnlMb2NhdGlvblRvTW9kdWxlSWQSQS5saXF1aWRtZXRhbC52MWFscGhhMS5SZXNvbHZlQWdlbnRNZW1vcnlMb2NhdGlvblRvTW9kdWxlSWRSZXF1ZXN0GkIubGlxdWlkbWV0YWwudjFhbHBoYTEuUmVzb2x2ZUFnZW50TWVtb3J5TG9jYXRpb25Ub01vZHVsZUlkUmVzcG9uc2USrQEKJFJlc29sdmVNb2R1bGVJZFRvQWdlbnRNZW1vcnlMb2NhdGlvbhJBLmxpcXVpZG1ldGFsLnYxYWxwaGExLlJlc29sdmVNb2R1bGVJZFRvQWdlbnRNZW1vcnlMb2NhdGlvblJlcXVlc3QaQi5saXF1aWRtZXRhbC52MWFscGhhMS5SZXNvbHZlTW9kdWxlSWRUb0FnZW50TWVtb3J5TG9jYXRpb25SZXNwb25zZULnAQoYY29tLmxpcXVpZG1ldGFsLnYxYWxwaGExQgxDYXRhbG9nUHJvdG9QAVpMZ2l0aHViLmNvbS9saXF1aWRtZXRhbC1haS9wcm90b2dlbjIvbGlxdWlkbWV0YWwvdjFhbHBoYTE7bGlxdWlkbWV0YWx2MWFscGhhMaICA0xYWKoCFExpcXVpZG1ldGFsLlYxYWxwaGExygIUTGlxdWlkbWV0YWxcVjFhbHBoYTHiAiBMaXF1aWRtZXRhbFxWMWFscGhhMVxHUEJNZXRhZGF0YeoCFUxpcXVpZG1ldGFsOjpWMWFscGhhMWIGcHJvdG8z", [file_google_protobuf_struct, file_google_protobuf_timestamp, file_liquidmetal_v1alpha1_agent_memory_name, file_liquidmetal_v1alpha1_bucket_name]);
20
20
 
21
21
  /**
22
22
  * @generated from message liquidmetal.v1alpha1.ApplicationsRequest