@longdotxyz/shared 0.0.74 → 0.0.75

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.
@@ -1,14 +1,22 @@
1
1
  import z from "zod";
2
2
  declare const ipfsContract: {
3
3
  uploadImage: {
4
- [x: string]: any;
5
4
  description: "Upload an image to IPFS";
6
5
  method: "POST";
7
6
  contentType: "multipart/form-data";
8
7
  body: z.ZodAny;
8
+ path: "/ipfs/upload-image";
9
+ responses: {
10
+ 200: z.ZodObject<{
11
+ result: z.ZodString;
12
+ }, "strip", z.ZodTypeAny, {
13
+ result: string;
14
+ }, {
15
+ result: string;
16
+ }>;
17
+ };
9
18
  };
10
19
  uploadMetadata: {
11
- [x: string]: any;
12
20
  description: "Upload metadata to IPFS";
13
21
  method: "POST";
14
22
  body: z.ZodObject<{
@@ -18,13 +26,61 @@ declare const ipfsContract: {
18
26
  social_links: z.ZodDefault<z.ZodOptional<z.ZodArray<z.ZodObject<{
19
27
  label: z.ZodString;
20
28
  url: z.ZodString;
21
- }, z.core.$strip>>>>;
29
+ }, "strip", z.ZodTypeAny, {
30
+ label: string;
31
+ url: string;
32
+ }, {
33
+ label: string;
34
+ url: string;
35
+ }>, "many">>>;
22
36
  vesting_recipients: z.ZodDefault<z.ZodOptional<z.ZodArray<z.ZodObject<{
23
37
  address: z.ZodString;
24
38
  amount: z.ZodNumber;
25
- }, z.core.$strip>>>>;
39
+ }, "strip", z.ZodTypeAny, {
40
+ address: string;
41
+ amount: number;
42
+ }, {
43
+ address: string;
44
+ amount: number;
45
+ }>, "many">>>;
26
46
  fee_receiver: z.ZodDefault<z.ZodOptional<z.ZodString>>;
27
- }, z.core.$strip>;
47
+ }, "strip", z.ZodTypeAny, {
48
+ name: string;
49
+ description: string;
50
+ image_hash: string;
51
+ fee_receiver: string;
52
+ social_links: {
53
+ label: string;
54
+ url: string;
55
+ }[];
56
+ vesting_recipients: {
57
+ address: string;
58
+ amount: number;
59
+ }[];
60
+ }, {
61
+ name: string;
62
+ description: string;
63
+ image_hash: string;
64
+ fee_receiver?: string | undefined;
65
+ social_links?: {
66
+ label: string;
67
+ url: string;
68
+ }[] | undefined;
69
+ vesting_recipients?: {
70
+ address: string;
71
+ amount: number;
72
+ }[] | undefined;
73
+ }>;
74
+ path: "/ipfs/upload-metadata";
75
+ responses: {
76
+ 200: z.ZodObject<{
77
+ result: z.ZodString;
78
+ }, "strip", z.ZodTypeAny, {
79
+ result: string;
80
+ }, {
81
+ result: string;
82
+ }>;
83
+ };
28
84
  };
29
85
  };
30
86
  export { ipfsContract };
@@ -1,11 +1,48 @@
1
1
  import z from "zod";
2
2
  export declare const sponsorshipContract: {
3
3
  broadcastSponsored: {
4
- [x: string]: any;
5
4
  description: "Broadcast a transaction with gas sponsorship using Privy server wallet";
6
5
  method: "POST";
7
6
  body: z.ZodObject<{
8
- encoded_payload: z.ZodPipe<z.ZodString, z.ZodCustom<`0x${string}`, `0x${string}`>>;
9
- }, z.core.$strip>;
7
+ encoded_payload: z.ZodPipeline<z.ZodString, z.ZodType<`0x${string}`, z.ZodTypeDef, `0x${string}`>>;
8
+ }, "strip", z.ZodTypeAny, {
9
+ encoded_payload: `0x${string}`;
10
+ }, {
11
+ encoded_payload: string;
12
+ }>;
13
+ path: "/sponsorship";
14
+ responses: {
15
+ 200: z.ZodObject<{
16
+ result: z.ZodObject<{
17
+ transaction_hash: z.ZodPipeline<z.ZodString, z.ZodType<`0x${string}`, z.ZodTypeDef, `0x${string}`>>;
18
+ }, "strip", z.ZodTypeAny, {
19
+ transaction_hash: `0x${string}`;
20
+ }, {
21
+ transaction_hash: string;
22
+ }>;
23
+ }, "strip", z.ZodTypeAny, {
24
+ result: {
25
+ transaction_hash: `0x${string}`;
26
+ };
27
+ }, {
28
+ result: {
29
+ transaction_hash: string;
30
+ };
31
+ }>;
32
+ 400: z.ZodObject<{
33
+ message: z.ZodString;
34
+ }, "strip", z.ZodTypeAny, {
35
+ message: string;
36
+ }, {
37
+ message: string;
38
+ }>;
39
+ 500: z.ZodObject<{
40
+ message: z.ZodString;
41
+ }, "strip", z.ZodTypeAny, {
42
+ message: string;
43
+ }, {
44
+ message: string;
45
+ }>;
46
+ };
10
47
  };
11
48
  };
@@ -1,2 +1,2 @@
1
1
  import z from "zod";
2
- export declare const coerceBigInt: z.ZodPipe<z.ZodAny, z.ZodTransform<bigint, any>>;
2
+ export declare const coerceBigInt: z.ZodEffects<z.ZodAny, bigint, any>;
@@ -15,7 +15,3 @@ export declare enum ChainID {
15
15
  BASE_MAINNET = 8453,
16
16
  BASE_TESTNET = 84532
17
17
  }
18
- export declare const MULTICURVE_HOOK_ADDRESS: {
19
- readonly 8453: "0x892d3c2b4abeaaf67d52a7b29783e2161b7cad40";
20
- readonly 84532: "0x6a1061fc558dde1e6fd0efd641b370d435b56d40";
21
- };
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.MULTICURVE_HOOK_ADDRESS = exports.ChainID = exports.AssetStatusQuery = exports.AssetStatus = void 0;
3
+ exports.ChainID = exports.AssetStatusQuery = exports.AssetStatus = void 0;
4
4
  var AssetStatus;
5
5
  (function (AssetStatus) {
6
6
  AssetStatus["LIVE"] = "live";
@@ -21,8 +21,4 @@ var ChainID;
21
21
  ChainID[ChainID["BASE_MAINNET"] = 8453] = "BASE_MAINNET";
22
22
  ChainID[ChainID["BASE_TESTNET"] = 84532] = "BASE_TESTNET";
23
23
  })(ChainID || (exports.ChainID = ChainID = {}));
24
- exports.MULTICURVE_HOOK_ADDRESS = {
25
- [ChainID.BASE_MAINNET]: "0x892d3c2b4abeaaf67d52a7b29783e2161b7cad40",
26
- [ChainID.BASE_TESTNET]: "0x6a1061fc558dde1e6fd0efd641b370d435b56d40",
27
- };
28
24
  //# sourceMappingURL=constants.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/types/constants.ts"],"names":[],"mappings":";;;AAAA,IAAY,WAKX;AALD,WAAY,WAAW;IACnB,4BAAa,CAAA;IACb,sCAAuB,CAAA;IACvB,oCAAqB,CAAA;IACrB,8BAAe,CAAA;AACnB,CAAC,EALW,WAAW,2BAAX,WAAW,QAKtB;AAED,IAAY,gBAMX;AAND,WAAY,gBAAgB;IACxB,iCAAa,CAAA;IACb,2CAAuB,CAAA;IACvB,yCAAqB,CAAA;IACrB,mCAAe,CAAA;IACf,+BAAW,CAAA;AACf,CAAC,EANW,gBAAgB,gCAAhB,gBAAgB,QAM3B;AAED,IAAY,OAGX;AAHD,WAAY,OAAO;IACf,wDAAmB,CAAA;IACnB,yDAAoB,CAAA;AACxB,CAAC,EAHW,OAAO,uBAAP,OAAO,QAGlB;AAMY,QAAA,uBAAuB,GAAG;IACnC,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,4CAAqD;IAC7E,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,4CAAqD;CACvE,CAAC"}
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/types/constants.ts"],"names":[],"mappings":";;;AAAA,IAAY,WAKX;AALD,WAAY,WAAW;IACnB,4BAAa,CAAA;IACb,sCAAuB,CAAA;IACvB,oCAAqB,CAAA;IACrB,8BAAe,CAAA;AACnB,CAAC,EALW,WAAW,2BAAX,WAAW,QAKtB;AAED,IAAY,gBAMX;AAND,WAAY,gBAAgB;IACxB,iCAAa,CAAA;IACb,2CAAuB,CAAA;IACvB,yCAAqB,CAAA;IACrB,mCAAe,CAAA;IACf,+BAAW,CAAA;AACf,CAAC,EANW,gBAAgB,gCAAhB,gBAAgB,QAM3B;AAED,IAAY,OAGX;AAHD,WAAY,OAAO;IACf,wDAAmB,CAAA;IACnB,yDAAoB,CAAA;AACxB,CAAC,EAHW,OAAO,uBAAP,OAAO,QAGlB"}
@@ -1,3 +1,3 @@
1
1
  import z from "zod";
2
2
  export type Hex = `0x${string}`;
3
- export declare const hex: z.ZodCustom<`0x${string}`, `0x${string}`>;
3
+ export declare const hex: z.ZodType<`0x${string}`, z.ZodTypeDef, `0x${string}`>;
@@ -8,9 +8,21 @@ export type PoolKey = {
8
8
  hooks: Hex;
9
9
  };
10
10
  export declare const poolKeySchema: z.ZodObject<{
11
- currency0: z.ZodPipe<z.ZodString, z.ZodCustom<`0x${string}`, `0x${string}`>>;
12
- currency1: z.ZodPipe<z.ZodString, z.ZodCustom<`0x${string}`, `0x${string}`>>;
11
+ currency0: z.ZodPipeline<z.ZodString, z.ZodType<`0x${string}`, z.ZodTypeDef, `0x${string}`>>;
12
+ currency1: z.ZodPipeline<z.ZodString, z.ZodType<`0x${string}`, z.ZodTypeDef, `0x${string}`>>;
13
13
  fee: z.ZodNumber;
14
14
  tickSpacing: z.ZodNumber;
15
- hooks: z.ZodPipe<z.ZodString, z.ZodCustom<`0x${string}`, `0x${string}`>>;
16
- }, z.core.$strip>;
15
+ hooks: z.ZodPipeline<z.ZodString, z.ZodType<`0x${string}`, z.ZodTypeDef, `0x${string}`>>;
16
+ }, "strip", z.ZodTypeAny, {
17
+ currency0: `0x${string}`;
18
+ currency1: `0x${string}`;
19
+ fee: number;
20
+ tickSpacing: number;
21
+ hooks: `0x${string}`;
22
+ }, {
23
+ currency0: string;
24
+ currency1: string;
25
+ fee: number;
26
+ tickSpacing: number;
27
+ hooks: string;
28
+ }>;
@@ -0,0 +1,21 @@
1
+ import { Hex } from "../types";
2
+ export declare const NATIVE_ETH_ADDRESS: Hex;
3
+ export interface AddressRegistryEntry {
4
+ airlock: Hex;
5
+ tokenFactory: Hex;
6
+ governanceFactory: Hex;
7
+ v2UniswapMigrator: Hex;
8
+ v3UniswapMigrator: Hex;
9
+ v4UniswapMigrator: Hex;
10
+ v4MulticurveInitializer: Hex;
11
+ v4MulticurveHook: Hex;
12
+ migratorMulticurve: Hex;
13
+ dopplerBeneficiary: Hex;
14
+ wrappedNativeToken: Hex;
15
+ }
16
+ export interface AddressRegistry {
17
+ [chainId: number]: AddressRegistryEntry;
18
+ }
19
+ export declare const getAddressRegistry: (chainId: number) => AddressRegistryEntry;
20
+ export declare const getWETHAddress: (chainId: number) => Hex;
21
+ export declare const isNativeETH: (address: string) => boolean;
@@ -0,0 +1,47 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.isNativeETH = exports.getWETHAddress = exports.getAddressRegistry = exports.NATIVE_ETH_ADDRESS = void 0;
4
+ const viem_1 = require("viem");
5
+ const zero_address_type_1 = require("../types/zero-address.type");
6
+ exports.NATIVE_ETH_ADDRESS = "0x0000000000000000000000000000000000000000";
7
+ const ADDRESS_REGISTRY = {
8
+ 8453: {
9
+ airlock: (0, viem_1.getAddress)("0x660eAaEdEBc968f8f3694354FA8EC0b4c5Ba8D12"),
10
+ tokenFactory: (0, viem_1.getAddress)("0x80A27Feee1A22b9c68185ea64E7c2652286980B5"),
11
+ governanceFactory: (0, viem_1.getAddress)("0xb4deE32EB70A5E55f3D2d861F49Fb3D79f7a14d9"),
12
+ v2UniswapMigrator: zero_address_type_1.zeroAddress,
13
+ v3UniswapMigrator: (0, viem_1.getAddress)("0x9C18A677902d2068be71e1A6bb11051fb69C74d5"),
14
+ v4UniswapMigrator: zero_address_type_1.zeroAddress,
15
+ v4MulticurveInitializer: (0, viem_1.getAddress)("0x65dE470Da664A5be139A5D812bE5FDa0d76CC951"),
16
+ v4MulticurveHook: (0, viem_1.getAddress)("0x892d3c2b4abeaaf67d52a7b29783e2161b7cad40"),
17
+ migratorMulticurve: (0, viem_1.getAddress)("0x6ddfED58D238Ca3195E49d8ac3d4cEa6386E5C33"),
18
+ dopplerBeneficiary: (0, viem_1.getAddress)("0x21E2ce70511e4FE542a97708e89520471DAa7A66"),
19
+ wrappedNativeToken: (0, viem_1.getAddress)("0x4200000000000000000000000000000000000006"),
20
+ },
21
+ 84532: {
22
+ airlock: (0, viem_1.getAddress)("0x3411306ce66c9469bff1535ba955503c4bde1c6e"),
23
+ tokenFactory: zero_address_type_1.zeroAddress,
24
+ governanceFactory: zero_address_type_1.zeroAddress,
25
+ v2UniswapMigrator: zero_address_type_1.zeroAddress,
26
+ v3UniswapMigrator: zero_address_type_1.zeroAddress,
27
+ v4UniswapMigrator: zero_address_type_1.zeroAddress,
28
+ v4MulticurveInitializer: zero_address_type_1.zeroAddress,
29
+ v4MulticurveHook: (0, viem_1.getAddress)("0x6a1061fc558dde1e6fd0efd641b370d435b56d40"),
30
+ migratorMulticurve: zero_address_type_1.zeroAddress,
31
+ dopplerBeneficiary: zero_address_type_1.zeroAddress,
32
+ wrappedNativeToken: (0, viem_1.getAddress)("0x4200000000000000000000000000000000000006"),
33
+ },
34
+ };
35
+ const getAddressRegistry = (chainId) => {
36
+ return ADDRESS_REGISTRY[chainId];
37
+ };
38
+ exports.getAddressRegistry = getAddressRegistry;
39
+ const getWETHAddress = (chainId) => {
40
+ return (0, exports.getAddressRegistry)(chainId).wrappedNativeToken;
41
+ };
42
+ exports.getWETHAddress = getWETHAddress;
43
+ const isNativeETH = (address) => {
44
+ return address.toLowerCase() === exports.NATIVE_ETH_ADDRESS.toLowerCase();
45
+ };
46
+ exports.isNativeETH = isNativeETH;
47
+ //# sourceMappingURL=address-registry.util.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"address-registry.util.js","sourceRoot":"","sources":["../../src/utils/address-registry.util.ts"],"names":[],"mappings":";;;AAAA,+BAAkC;AAGlC,kEAAyD;AAE5C,QAAA,kBAAkB,GAAG,4CAAmD,CAAC;AAoBtF,MAAM,gBAAgB,GAAoB;IACtC,IAAI,EAAE;QACF,OAAO,EAAE,IAAA,iBAAU,EAAC,4CAA4C,CAAC;QACjE,YAAY,EAAE,IAAA,iBAAU,EAAC,4CAA4C,CAAC;QACtE,iBAAiB,EAAE,IAAA,iBAAU,EAAC,4CAA4C,CAAC;QAC3E,iBAAiB,EAAE,+BAAW;QAC9B,iBAAiB,EAAE,IAAA,iBAAU,EAAC,4CAA4C,CAAC;QAC3E,iBAAiB,EAAE,+BAAW;QAC9B,uBAAuB,EAAE,IAAA,iBAAU,EAAC,4CAA4C,CAAC;QACjF,gBAAgB,EAAE,IAAA,iBAAU,EAAC,4CAA4C,CAAC;QAC1E,kBAAkB,EAAE,IAAA,iBAAU,EAAC,4CAA4C,CAAC;QAC5E,kBAAkB,EAAE,IAAA,iBAAU,EAAC,4CAA4C,CAAC;QAC5E,kBAAkB,EAAE,IAAA,iBAAU,EAAC,4CAA4C,CAAC;KAC/E;IACD,KAAK,EAAE;QACH,OAAO,EAAE,IAAA,iBAAU,EAAC,4CAA4C,CAAC;QACjE,YAAY,EAAE,+BAAW;QACzB,iBAAiB,EAAE,+BAAW;QAC9B,iBAAiB,EAAE,+BAAW;QAC9B,iBAAiB,EAAE,+BAAW;QAC9B,iBAAiB,EAAE,+BAAW;QAC9B,uBAAuB,EAAE,+BAAW;QACpC,gBAAgB,EAAE,IAAA,iBAAU,EAAC,4CAA4C,CAAC;QAC1E,kBAAkB,EAAE,+BAAW;QAC/B,kBAAkB,EAAE,+BAAW;QAC/B,kBAAkB,EAAE,IAAA,iBAAU,EAAC,4CAA4C,CAAC;KAC/E;CACJ,CAAC;AAEK,MAAM,kBAAkB,GAAG,CAAC,OAAe,EAAwB,EAAE;IACxE,OAAO,gBAAgB,CAAC,OAAO,CAAC,CAAC;AACrC,CAAC,CAAC;AAFW,QAAA,kBAAkB,sBAE7B;AAEK,MAAM,cAAc,GAAG,CAAC,OAAe,EAAO,EAAE;IACnD,OAAO,IAAA,0BAAkB,EAAC,OAAO,CAAC,CAAC,kBAAkB,CAAC;AAC1D,CAAC,CAAC;AAFW,QAAA,cAAc,kBAEzB;AAEK,MAAM,WAAW,GAAG,CAAC,OAAe,EAAW,EAAE;IACpD,OAAO,OAAO,CAAC,WAAW,EAAE,KAAK,0BAAkB,CAAC,WAAW,EAAE,CAAC;AACtE,CAAC,CAAC;AAFW,QAAA,WAAW,eAEtB"}
@@ -1,4 +1,4 @@
1
+ export * from "./address-registry.util";
1
2
  export * from "./beneficiary.util";
2
3
  export * from "./migrator-encoder.util";
3
- export * from "./native-token.util";
4
4
  export * from "./pool.util";
@@ -14,8 +14,8 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
14
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./address-registry.util"), exports);
17
18
  __exportStar(require("./beneficiary.util"), exports);
18
19
  __exportStar(require("./migrator-encoder.util"), exports);
19
- __exportStar(require("./native-token.util"), exports);
20
20
  __exportStar(require("./pool.util"), exports);
21
21
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,qDAAmC;AACnC,0DAAwC;AACxC,sDAAoC;AACpC,8CAA4B"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,0DAAwC;AACxC,qDAAmC;AACnC,0DAAwC;AACxC,8CAA4B"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@longdotxyz/shared",
3
- "version": "0.0.74",
3
+ "version": "0.0.75",
4
4
  "description": "Shared types and utilities for Long.xyz API",
5
5
  "files": [
6
6
  "dist"
@@ -1,5 +0,0 @@
1
- import { Hex } from "../types";
2
- export declare const NATIVE_ETH_ADDRESS: Hex;
3
- export declare const WETH_ADDRESSES: Record<number, Hex>;
4
- export declare function getWETHAddress(chainId: number): Hex;
5
- export declare function isNativeETH(address: string): boolean;
@@ -1,26 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.WETH_ADDRESSES = exports.NATIVE_ETH_ADDRESS = void 0;
4
- exports.getWETHAddress = getWETHAddress;
5
- exports.isNativeETH = isNativeETH;
6
- exports.NATIVE_ETH_ADDRESS = "0x0000000000000000000000000000000000000000";
7
- exports.WETH_ADDRESSES = {
8
- 1: "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2",
9
- 8453: "0x4200000000000000000000000000000000000006",
10
- 10: "0x4200000000000000000000000000000000000006",
11
- 42161: "0x82aF49447D8a07e3bd95BD0d56f35241523fBab1",
12
- 137: "0x0d500B1d8E8eF31E21C99d1Db9A6444d3ADf1270",
13
- 56: "0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c",
14
- 43114: "0xB31f66AA3C1e785363F0875A1B74E27b85FD66c7",
15
- };
16
- function getWETHAddress(chainId) {
17
- const weth = exports.WETH_ADDRESSES[chainId];
18
- if (!weth) {
19
- throw new Error(`WETH address not configured for chain ${chainId}`);
20
- }
21
- return weth;
22
- }
23
- function isNativeETH(address) {
24
- return address.toLowerCase() === exports.NATIVE_ETH_ADDRESS.toLowerCase();
25
- }
26
- //# sourceMappingURL=native-token.util.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"native-token.util.js","sourceRoot":"","sources":["../../src/utils/native-token.util.ts"],"names":[],"mappings":";;;AAcA,wCAMC;AAED,kCAEC;AAtBY,QAAA,kBAAkB,GAAG,4CAAmD,CAAC;AAEzE,QAAA,cAAc,GAAwB;IAC/C,CAAC,EAAE,4CAA4C;IAC/C,IAAI,EAAE,4CAA4C;IAClD,EAAE,EAAE,4CAA4C;IAChD,KAAK,EAAE,4CAA4C;IACnD,GAAG,EAAE,4CAA4C;IACjD,EAAE,EAAE,4CAA4C;IAChD,KAAK,EAAE,4CAA4C;CAC7C,CAAC;AAEX,SAAgB,cAAc,CAAC,OAAe;IAC1C,MAAM,IAAI,GAAG,sBAAc,CAAC,OAAO,CAAC,CAAC;IACrC,IAAI,CAAC,IAAI,EAAE,CAAC;QACR,MAAM,IAAI,KAAK,CAAC,yCAAyC,OAAO,EAAE,CAAC,CAAC;IACxE,CAAC;IACD,OAAO,IAAI,CAAC;AAChB,CAAC;AAED,SAAgB,WAAW,CAAC,OAAe;IACvC,OAAO,OAAO,CAAC,WAAW,EAAE,KAAK,0BAAkB,CAAC,WAAW,EAAE,CAAC;AACtE,CAAC"}