@1delta/margin-fetcher 0.0.34 → 0.0.36

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 (77) hide show
  1. package/dist/abis/morpho/lens.d.ts +38 -15
  2. package/dist/abis/morpho/lens.d.ts.map +1 -1
  3. package/dist/abis/morpho/lens.js +30 -20
  4. package/dist/flash-liquidity/assets.d.ts +2 -2
  5. package/dist/flash-liquidity/assets.d.ts.map +1 -1
  6. package/dist/flash-liquidity/assets.js +2 -2
  7. package/dist/flash-liquidity/fetchLiquidity.d.ts.map +1 -1
  8. package/dist/flash-liquidity/fetchLiquidity.js +2 -2
  9. package/dist/lending/fetchLender.d.ts.map +1 -1
  10. package/dist/lending/fetchLender.js +24 -5
  11. package/dist/lending/fetchLenderAll.d.ts.map +1 -1
  12. package/dist/lending/fetchLenderAll.js +15 -3
  13. package/dist/lending/morpho/chainsConfigs.d.ts +21 -0
  14. package/dist/lending/morpho/chainsConfigs.d.ts.map +1 -0
  15. package/dist/lending/morpho/chainsConfigs.js +234 -0
  16. package/dist/lending/morpho/constants/markets.d.ts +4 -0
  17. package/dist/lending/morpho/constants/markets.d.ts.map +1 -0
  18. package/dist/lending/morpho/constants/markets.js +63 -0
  19. package/dist/lending/morpho/convertPublic.d.ts.map +1 -1
  20. package/dist/lending/morpho/convertPublic.js +2 -13
  21. package/dist/lending/morpho/getMarketsFromChain.d.ts +8 -0
  22. package/dist/lending/morpho/getMarketsFromChain.d.ts.map +1 -0
  23. package/dist/lending/morpho/getMarketsFromChain.js +318 -0
  24. package/dist/lending/morpho/publicCallBuild.d.ts +5 -0
  25. package/dist/lending/morpho/publicCallBuild.d.ts.map +1 -1
  26. package/dist/lending/morpho/publicCallBuild.js +16 -0
  27. package/dist/lending/morpho/utils/evmParser.d.ts +22 -0
  28. package/dist/lending/morpho/utils/evmParser.d.ts.map +1 -0
  29. package/dist/lending/morpho/utils/evmParser.js +103 -0
  30. package/dist/lending/morpho/utils/mathLib.d.ts +125 -0
  31. package/dist/lending/morpho/utils/mathLib.d.ts.map +1 -0
  32. package/dist/lending/morpho/utils/mathLib.js +334 -0
  33. package/dist/lending/morpho/utils/parsers.d.ts +10 -0
  34. package/dist/lending/morpho/utils/parsers.d.ts.map +1 -0
  35. package/dist/lending/morpho/utils/parsers.js +37 -0
  36. package/dist/lending/user-data/aave-v2-type/userCallParse.js +2 -2
  37. package/dist/lending/user-data/aave-v3-type/userCallParse.js +2 -2
  38. package/dist/lending/user-data/aave-v3-type/userCallParseYldr.js +2 -2
  39. package/dist/lending/user-data/abis.d.ts +37 -14
  40. package/dist/lending/user-data/abis.d.ts.map +1 -1
  41. package/dist/lending/user-data/morpho/userCallBuild.d.ts +3 -0
  42. package/dist/lending/user-data/morpho/userCallBuild.d.ts.map +1 -1
  43. package/dist/lending/user-data/morpho/userCallBuild.js +9 -8
  44. package/dist/lending-pairs/computeLendingPairs.d.ts.map +1 -1
  45. package/dist/lending-pairs/computeLendingPairs.js +11 -7
  46. package/dist/prices/main-prices/fetchOracleData.d.ts +0 -2
  47. package/dist/prices/main-prices/fetchOracleData.d.ts.map +1 -1
  48. package/dist/prices/main-prices/fetchOracleData.js +2 -22
  49. package/dist/utils/index.d.ts.map +1 -1
  50. package/dist/utils/index.js +2 -5
  51. package/dist/utils/parsing.d.ts +2 -0
  52. package/dist/utils/parsing.d.ts.map +1 -1
  53. package/dist/utils/parsing.js +20 -0
  54. package/package.json +1 -1
  55. package/src/abis/morpho/lens.ts +40 -30
  56. package/src/flash-liquidity/assets.ts +3 -2
  57. package/src/flash-liquidity/fetchLiquidity.ts +3 -2
  58. package/src/lending/fetchLender.ts +29 -4
  59. package/src/lending/fetchLenderAll.ts +32 -12
  60. package/src/lending/morpho/chainsConfigs.ts +268 -0
  61. package/src/lending/morpho/constants/markets.ts +64 -0
  62. package/src/lending/morpho/convertPublic.ts +2 -14
  63. package/src/lending/morpho/getMarketsFromChain.ts +402 -0
  64. package/src/lending/morpho/publicCallBuild.ts +17 -0
  65. package/src/lending/morpho/utils/evmParser.ts +122 -0
  66. package/src/lending/morpho/utils/mathLib.ts +434 -0
  67. package/src/lending/morpho/utils/parsers.ts +53 -0
  68. package/src/lending/user-data/aave-v2-type/userCallParse.ts +2 -2
  69. package/src/lending/user-data/aave-v3-type/userCallParse.ts +2 -2
  70. package/src/lending/user-data/aave-v3-type/userCallParseYldr.ts +2 -2
  71. package/src/lending/user-data/morpho/userCallBuild.ts +9 -8
  72. package/src/lending-pairs/computeLendingPairs.ts +15 -10
  73. package/src/prices/main-prices/fetchOracleData.ts +2 -34
  74. package/src/utils/index.ts +3 -4
  75. package/src/utils/parsing.ts +32 -0
  76. package/test/lenderData.test.ts +1 -1
  77. package/test/mbChain.test.ts +44 -0
@@ -1,16 +1,39 @@
1
- export declare const MorphoLensAbi: {
2
- inputs: {
3
- internalType: string;
4
- name: string;
5
- type: string;
6
- }[];
7
- name: string;
8
- outputs: {
9
- internalType: string;
10
- name: string;
11
- type: string;
12
- }[];
13
- stateMutability: string;
14
- type: string;
15
- }[];
1
+ export declare const MorphoLensAbi: readonly [{
2
+ readonly inputs: readonly [{
3
+ readonly internalType: "bytes32[]";
4
+ readonly name: "marketsIds";
5
+ readonly type: "bytes32[]";
6
+ }, {
7
+ readonly internalType: "address";
8
+ readonly name: "user";
9
+ readonly type: "address";
10
+ }, {
11
+ readonly internalType: "address";
12
+ readonly name: "morpho";
13
+ readonly type: "address";
14
+ }];
15
+ readonly name: "getUserDataCompact";
16
+ readonly outputs: readonly [{
17
+ readonly internalType: "bytes";
18
+ readonly name: "data";
19
+ readonly type: "bytes";
20
+ }];
21
+ readonly stateMutability: "view";
22
+ readonly type: "function";
23
+ }, {
24
+ readonly name: "getMarketDataCompact";
25
+ readonly type: "function";
26
+ readonly stateMutability: "view";
27
+ readonly inputs: readonly [{
28
+ readonly type: "address";
29
+ readonly name: "morpho";
30
+ }, {
31
+ readonly type: "bytes32[]";
32
+ readonly name: "marketsIds";
33
+ }];
34
+ readonly outputs: readonly [{
35
+ readonly type: "bytes";
36
+ readonly name: "data";
37
+ }];
38
+ }];
16
39
  //# sourceMappingURL=lens.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"lens.d.ts","sourceRoot":"","sources":["../../../src/abis/morpho/lens.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,aAAa;;;;;;;;;;;;;;GA8BzB,CAAA"}
1
+ {"version":3,"file":"lens.d.ts","sourceRoot":"","sources":["../../../src/abis/morpho/lens.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAwChB,CAAA"}
@@ -1,31 +1,41 @@
1
1
  export const MorphoLensAbi = [
2
2
  {
3
- "inputs": [
3
+ inputs: [
4
4
  {
5
- "internalType": "bytes32[]",
6
- "name": "marketsIds",
7
- "type": "bytes32[]"
5
+ internalType: 'bytes32[]',
6
+ name: 'marketsIds',
7
+ type: 'bytes32[]',
8
8
  },
9
9
  {
10
- "internalType": "address",
11
- "name": "user",
12
- "type": "address"
10
+ internalType: 'address',
11
+ name: 'user',
12
+ type: 'address',
13
13
  },
14
14
  {
15
- "internalType": "address",
16
- "name": "morpho",
17
- "type": "address"
18
- }
15
+ internalType: 'address',
16
+ name: 'morpho',
17
+ type: 'address',
18
+ },
19
19
  ],
20
- "name": "getUserDataCompact",
21
- "outputs": [
20
+ name: 'getUserDataCompact',
21
+ outputs: [
22
22
  {
23
- "internalType": "bytes",
24
- "name": "data",
25
- "type": "bytes"
26
- }
23
+ internalType: 'bytes',
24
+ name: 'data',
25
+ type: 'bytes',
26
+ },
27
+ ],
28
+ stateMutability: 'view',
29
+ type: 'function',
30
+ },
31
+ {
32
+ name: 'getMarketDataCompact',
33
+ type: 'function',
34
+ stateMutability: 'view',
35
+ inputs: [
36
+ { type: 'address', name: 'morpho' },
37
+ { type: 'bytes32[]', name: 'marketsIds' },
27
38
  ],
28
- "stateMutability": "view",
29
- "type": "function"
30
- }
39
+ outputs: [{ type: 'bytes', name: 'data' }],
40
+ },
31
41
  ];
@@ -1,4 +1,4 @@
1
- export declare const RELEVANT_LENDING_ASSETS: {
1
+ export declare const RELEVANT_LENDING_ASSETS: () => {
2
2
  [chainId: string]: string[];
3
3
  };
4
4
  interface PoolData {
@@ -8,7 +8,7 @@ interface PoolData {
8
8
  export declare const RELEVANT_BALANCER_V2_FORKS: {
9
9
  [chainId: string]: PoolData[];
10
10
  };
11
- export declare const RELEVANT_MORPHOB_FORKS: {
11
+ export declare const RELEVANT_MORPHOB_FORKS: () => {
12
12
  [chainId: string]: PoolData[];
13
13
  };
14
14
  export declare const RELEVANT_BALANCER_V3_FORKS: {
@@ -1 +1 @@
1
- {"version":3,"file":"assets.d.ts","sourceRoot":"","sources":["../../src/flash-liquidity/assets.ts"],"names":[],"mappings":"AA+CA,eAAO,MAAM,uBAAuB;;CAA6B,CAAA;AAEjE,UAAU,QAAQ;IAChB,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,CAAA;CAChB;AAmBD,eAAO,MAAM,0BAA0B;;CACO,CAAA;AAE9C,eAAO,MAAM,sBAAsB;;CAA2C,CAAA;AAE9E,eAAO,MAAM,0BAA0B;;CAGtC,CAAA;AAED,eAAO,MAAM,yBAAyB;;CAGrC,CAAA"}
1
+ {"version":3,"file":"assets.d.ts","sourceRoot":"","sources":["../../src/flash-liquidity/assets.ts"],"names":[],"mappings":"AA+CA,eAAO,MAAM,uBAAuB;;CAAmC,CAAA;AAEvE,UAAU,QAAQ;IAChB,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,CAAA;CAChB;AAmBD,eAAO,MAAM,0BAA0B;;CACO,CAAA;AAE9C,eAAO,MAAM,sBAAsB;;CACO,CAAA;AAE1C,eAAO,MAAM,0BAA0B;;CAGtC,CAAA;AAED,eAAO,MAAM,yBAAyB;;CAGrC,CAAA"}
@@ -35,7 +35,7 @@ function createAssetArrayPerChain() {
35
35
  });
36
36
  return assetsPerChain;
37
37
  }
38
- export const RELEVANT_LENDING_ASSETS = createAssetArrayPerChain();
38
+ export const RELEVANT_LENDING_ASSETS = () => createAssetArrayPerChain();
39
39
  function createSimpleArrayPerChain(fork, field = undefined) {
40
40
  let pools = {};
41
41
  Object.entries(fork ?? {}).forEach(([b2, data]) => {
@@ -49,6 +49,6 @@ function createSimpleArrayPerChain(fork, field = undefined) {
49
49
  return pools;
50
50
  }
51
51
  export const RELEVANT_BALANCER_V2_FORKS = createSimpleArrayPerChain(BALANCER_V2_FORKS);
52
- export const RELEVANT_MORPHOB_FORKS = createSimpleArrayPerChain(morphoPools());
52
+ export const RELEVANT_MORPHOB_FORKS = () => createSimpleArrayPerChain(morphoPools());
53
53
  export const RELEVANT_BALANCER_V3_FORKS = createSimpleArrayPerChain(BALANCER_V3_FORKS, 'vault');
54
54
  export const RELEVANT_UNISWAP_V4_FORKS = createSimpleArrayPerChain(UNISWAP_V4_FORKS, 'pm');
@@ -1 +1 @@
1
- {"version":3,"file":"fetchLiquidity.d.ts","sourceRoot":"","sources":["../../src/flash-liquidity/fetchLiquidity.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,sBAAsB,EAAE,SAAS,EAAE,MAAM,UAAU,CAAA;AAE5D,OAAO,EAAE,uBAAuB,EAAgB,MAAM,SAAS,CAAA;AAsB/D,wBAAsB,2BAA2B,CAC/C,KAAK,EAAE,MAAM,EACb,cAAc,EAAE,sBAAsB,EACtC,IAAI,GAAE,SAAc,oCA0SrB"}
1
+ {"version":3,"file":"fetchLiquidity.d.ts","sourceRoot":"","sources":["../../src/flash-liquidity/fetchLiquidity.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,sBAAsB,EAAE,SAAS,EAAE,MAAM,UAAU,CAAA;AAE5D,OAAO,EAAE,uBAAuB,EAAgB,MAAM,SAAS,CAAA;AAuB/D,wBAAsB,2BAA2B,CAC/C,KAAK,EAAE,MAAM,EACb,cAAc,EAAE,sBAAsB,EACtC,IAAI,GAAE,SAAc,oCA0SrB"}
@@ -43,8 +43,8 @@ export async function fetchFlashLiquidityForChain(chain, multicallRetry, list =
43
43
  ];
44
44
  });
45
45
  // @ts-ignore
46
- const morphoBs = RELEVANT_MORPHOB_FORKS[chain] ?? [];
47
- const otherAssets = RELEVANT_LENDING_ASSETS[chain] ?? [];
46
+ const morphoBs = RELEVANT_MORPHOB_FORKS()?.[chain] ?? [];
47
+ const otherAssets = RELEVANT_LENDING_ASSETS()?.[chain] ?? [];
48
48
  let morphoCalls = [];
49
49
  if (morphoBs && morphoBs.length > 0) {
50
50
  morphoBs.forEach((bFork) => {
@@ -1 +1 @@
1
- {"version":3,"file":"fetchLender.d.ts","sourceRoot":"","sources":["../../src/lending/fetchLender.ts"],"names":[],"mappings":"AAyBA,OAAO,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,MAAM,UAAU,CAAA;AAWnE,OAAO,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAA;AAGhD,OAAO,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAA;AA+E1C,eAAO,MAAM,mBAAmB,GAC9B,SAAS,MAAM,EACf,SAAS,MAAM,EAAE,EACjB,QAAQ;IAAE,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAAA;CAAE,EACnC,kBAAkB,gBAAgB,EAClC,gBAAgB,sBAAsB,EACtC,YAAW,MAAM,OAAO,CAAC,gBAAgB,CAExC,KACA,OAAO,CAAC;IAAE,CAAC,MAAM,EAAE,MAAM,GAAG,GAAG,CAAA;CAAE,CAqDnC,CAAA"}
1
+ {"version":3,"file":"fetchLender.d.ts","sourceRoot":"","sources":["../../src/lending/fetchLender.ts"],"names":[],"mappings":"AA2BA,OAAO,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,MAAM,UAAU,CAAA;AAWnE,OAAO,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAA;AAGhD,OAAO,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAA;AA8F1C,eAAO,MAAM,mBAAmB,GAC9B,SAAS,MAAM,EACf,SAAS,MAAM,EAAE,EACjB,QAAQ;IAAE,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAAA;CAAE,EACnC,kBAAkB,gBAAgB,EAClC,gBAAgB,sBAAsB,EACtC,YAAW,MAAM,OAAO,CAAC,gBAAgB,CAExC,KACA,OAAO,CAAC;IAAE,CAAC,MAAM,EAAE,MAAM,GAAG,GAAG,CAAA;CAAE,CA6DnC,CAAA"}
@@ -12,7 +12,7 @@ import { InitLensAbi } from '../abis/init/InitLens';
12
12
  import { CometAbi } from '../abis/compound-v3/Comet';
13
13
  import { CometExtAbi } from '../abis/compound-v3/CometExt';
14
14
  import { IrgetterAbi } from '../abis/compound-v3/IrGetter';
15
- import { isAaveV2Type, isAaveV32Type, isAaveV3Type, isCompoundV3, isInit, } from '../utils';
15
+ import { isAaveV2Type, isAaveV32Type, isAaveV3Type, isCompoundV3, isInit, isMorphoType, isMultiMarket, } from '../utils';
16
16
  import { buildAaveV2StyleLenderReserveCall } from './aave-v2-type/publicCallBuild';
17
17
  import { buildAaveV3StyleLenderReserveCall } from './aave-v3-type/publicCallBuild';
18
18
  import { buildInitStyleLenderReserveCall } from './init/publicCallBuild';
@@ -25,6 +25,9 @@ import { AavePoolLegacyAbi } from '../abis/aave-v3/AavePoolLegacy';
25
25
  import { AavePoolDataProviderLegacyAbi } from '../abis/aave-v3/AavePoolDataProviderLegacy';
26
26
  import { Lender } from '@1delta/lender-registry';
27
27
  import { YLDRProtocolDataProviderAbi } from '../abis/aave-v2/YLDR';
28
+ import { buildMorphoCall } from './morpho/publicCallBuild';
29
+ import { getMorphoMarketDataConverter } from './morpho/getMarketsFromChain';
30
+ import { MorphoLensAbi } from '../abis/morpho/lens';
28
31
  function buildLenderCall(chainId, lender) {
29
32
  if (isAaveV2Type(lender))
30
33
  return buildAaveV2StyleLenderReserveCall(chainId, lender);
@@ -34,6 +37,8 @@ function buildLenderCall(chainId, lender) {
34
37
  return buildCompoundV3StyleLenderReserveCall(chainId, lender);
35
38
  if (isInit(lender))
36
39
  return buildInitStyleLenderReserveCall(chainId, lender);
40
+ if (isMorphoType(lender))
41
+ return buildMorphoCall(chainId);
37
42
  return [];
38
43
  }
39
44
  function getLenderDataConverter(lender, chainId, prices, additionalYields, tokenList = {}) {
@@ -45,6 +50,8 @@ function getLenderDataConverter(lender, chainId, prices, additionalYields, token
45
50
  return getCompoundV3ReservesDataConverter(lender, chainId, prices, additionalYields, tokenList);
46
51
  if (isInit(lender))
47
52
  return getInitReservesDataConverter(lender, chainId, prices, additionalYields, tokenList);
53
+ if (isMorphoType(lender))
54
+ return getMorphoMarketDataConverter(lender, chainId, prices, additionalYields, tokenList);
48
55
  return [() => null, 0];
49
56
  }
50
57
  const getAbi = (lender) => {
@@ -65,6 +72,8 @@ const getAbi = (lender) => {
65
72
  return [...IrgetterAbi, ...CometAbi, ...CometExtAbi];
66
73
  if (isInit(lender))
67
74
  return InitLensAbi;
75
+ if (isMorphoType(lender))
76
+ return MorphoLensAbi;
68
77
  return [];
69
78
  };
70
79
  export const getLenderPublicData = async (chainId, lenders, prices, additionalYields, multicallRetry, tokenList = async () => {
@@ -84,18 +93,28 @@ export const getLenderPublicData = async (chainId, lenders, prices, additionalYi
84
93
  await tokenList(),
85
94
  ]);
86
95
  const invalidLenders = [];
87
- const lenderData = {};
96
+ let lenderData = {};
88
97
  let currentSlice = 0;
89
98
  for (const lender of lenders) {
90
99
  const [converter, sliceLength] = getLenderDataConverter(lender, chainId, prices, additionalYields, list);
91
100
  if (sliceLength > 0) {
92
101
  const data = rawResults.slice(currentSlice, currentSlice + sliceLength);
93
102
  const convertedData = converter(data);
94
- if (!convertedData) {
95
- invalidLenders.push(lender);
103
+ if (isMultiMarket(lender)) {
104
+ if (!convertedData) {
105
+ invalidLenders.push(lender);
106
+ }
107
+ else {
108
+ lenderData = { ...lenderData, ...convertedData };
109
+ }
96
110
  }
97
111
  else {
98
- lenderData[lender] = convertedData;
112
+ if (!convertedData) {
113
+ invalidLenders.push(lender);
114
+ }
115
+ else {
116
+ lenderData[lender] = convertedData;
117
+ }
99
118
  }
100
119
  currentSlice += sliceLength;
101
120
  }
@@ -1 +1 @@
1
- {"version":3,"file":"fetchLenderAll.d.ts","sourceRoot":"","sources":["../../src/lending/fetchLenderAll.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,MAAM,UAAU,CAAA;AACnE,OAAO,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAA;AAGhD,OAAO,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAA;AAI1C,eAAO,MAAM,sBAAsB,GACjC,SAAS,MAAM,EACf,SAAS,MAAM,EAAE,EACjB,QAAQ;IAAE,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAAA;CAAE,EACnC,kBAAkB,gBAAgB,EAClC,gBAAgB,sBAAsB,EACtC,YAAY,MAAM,OAAO,CAAC,gBAAgB,CAAC,KAC1C,OAAO,CAAC;IAAE,CAAC,MAAM,EAAE,MAAM,GAAG,GAAG,CAAA;CAAE,CAcnC,CAAA"}
1
+ {"version":3,"file":"fetchLenderAll.d.ts","sourceRoot":"","sources":["../../src/lending/fetchLenderAll.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,MAAM,UAAU,CAAA;AACnE,OAAO,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAA;AAGhD,OAAO,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAA;AAa1C,eAAO,MAAM,sBAAsB,GACjC,SAAS,MAAM,EACf,SAAS,MAAM,EAAE,EACjB,QAAQ;IAAE,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAAA;CAAE,EACnC,kBAAkB,gBAAgB,EAClC,gBAAgB,sBAAsB,EACtC,YAAY,MAAM,OAAO,CAAC,gBAAgB,CAAC,KAC1C,OAAO,CAAC;IAAE,CAAC,MAAM,EAAE,MAAM,GAAG,GAAG,CAAA;CAAE,CAyBnC,CAAA"}
@@ -1,10 +1,22 @@
1
1
  import { Lender } from '@1delta/lender-registry';
2
2
  import { getLenderPublicData } from './fetchLender';
3
3
  import { getLenderPublicDataViaApi } from './fetchLenderExt';
4
- const LENDERS_VIA_API = [Lender.MORPHO_BLUE];
4
+ import { Chain } from '@1delta/chain-registry';
5
+ function lenderCanUseApi(lender, chainId) {
6
+ if (lender === Lender.MORPHO_BLUE) {
7
+ if (chainId === Chain.HYPEREVM)
8
+ return false;
9
+ if (chainId === Chain.OP_MAINNET)
10
+ return false;
11
+ if (chainId === Chain.SONEIUM)
12
+ return false;
13
+ return true;
14
+ }
15
+ return false;
16
+ }
5
17
  export const getLenderPublicDataAll = async (chainId, lenders, prices, additionalYields, multicallRetry, tokenList) => {
6
- const lendersApi = lenders.filter(l => LENDERS_VIA_API.includes(l));
7
- const lendersOnChain = lenders.filter(l => !LENDERS_VIA_API.includes(l));
18
+ const lendersApi = lenders.filter((l) => lenderCanUseApi(l, chainId));
19
+ const lendersOnChain = lenders.filter((l) => !lenderCanUseApi(l, chainId));
8
20
  const onChain = getLenderPublicData(chainId, lendersOnChain, prices, additionalYields, multicallRetry, tokenList);
9
21
  const api = getLenderPublicDataViaApi(chainId, lendersApi, prices, additionalYields, tokenList);
10
22
  const [onChainRes, apiRes] = await Promise.all([onChain, api]);
@@ -0,0 +1,21 @@
1
+ import { Address } from 'viem';
2
+ type MorphoContractName = 'Morpho' | 'MetaMorphoFactory' | 'MetaMorphoV1_1Factory';
3
+ type OptionalContracts = 'MetaMorphoFactory';
4
+ type RequiredContracts = Exclude<MorphoContractName, OptionalContracts>;
5
+ type DeploymentDetails = {
6
+ address: Address;
7
+ fromBlock: bigint;
8
+ };
9
+ export type Deployments = {
10
+ [chainId: string]: {
11
+ [name in RequiredContracts]-?: DeploymentDetails;
12
+ } & {
13
+ [name in OptionalContracts]?: DeploymentDetails;
14
+ };
15
+ };
16
+ export declare const DEPLOYMENTS: Deployments;
17
+ export declare function getContractDeploymentInfo(chainId: number, name: OptionalContracts): DeploymentDetails | undefined;
18
+ export declare function getContractDeploymentInfo(chainId: number, name: RequiredContracts): DeploymentDetails;
19
+ export declare function getContractDeploymentInfo(chainId: number | undefined, name: MorphoContractName): DeploymentDetails | undefined;
20
+ export {};
21
+ //# sourceMappingURL=chainsConfigs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chainsConfigs.d.ts","sourceRoot":"","sources":["../../../src/lending/morpho/chainsConfigs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAA;AAG9B,KAAK,kBAAkB,GACnB,QAAQ,GACR,mBAAmB,GACnB,uBAAuB,CAAA;AAE3B,KAAK,iBAAiB,GAAG,mBAAmB,CAAA;AAC5C,KAAK,iBAAiB,GAAG,OAAO,CAAC,kBAAkB,EAAE,iBAAiB,CAAC,CAAA;AACvE,KAAK,iBAAiB,GAAG;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAAA;AAChE,MAAM,MAAM,WAAW,GAAG;IACxB,CAAC,OAAO,EAAE,MAAM,GAAG;SAChB,IAAI,IAAI,iBAAiB,CAAC,CAAC,GAAG,iBAAiB;KACjD,GAAG;SACD,IAAI,IAAI,iBAAiB,CAAC,CAAC,EAAE,iBAAiB;KAChD,CAAA;CACF,CAAA;AAED,eAAO,MAAM,WAAW,EAAE,WAqOzB,CAAA;AAED,wBAAgB,yBAAyB,CACvC,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,iBAAiB,GACtB,iBAAiB,GAAG,SAAS,CAAA;AAChC,wBAAgB,yBAAyB,CACvC,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,iBAAiB,GACtB,iBAAiB,CAAA;AACpB,wBAAgB,yBAAyB,CACvC,OAAO,EAAE,MAAM,GAAG,SAAS,EAC3B,IAAI,EAAE,kBAAkB,GACvB,iBAAiB,GAAG,SAAS,CAAA"}
@@ -0,0 +1,234 @@
1
+ import { Chain } from '@1delta/chain-registry';
2
+ export const DEPLOYMENTS = {
3
+ [Chain.ETHEREUM_MAINNET]: {
4
+ Morpho: {
5
+ address: '0xBBBBBbbBBb9cC5e90e3b3Af64bdAF62C37EEFFCb',
6
+ fromBlock: 18883124n,
7
+ },
8
+ MetaMorphoFactory: {
9
+ address: '0xA9c3D3a366466Fa809d1Ae982Fb2c46E5fC41101',
10
+ fromBlock: 18925584n,
11
+ },
12
+ MetaMorphoV1_1Factory: {
13
+ address: '0x1897A8997241C1cD4bD0698647e4EB7213535c24',
14
+ fromBlock: 21439510n,
15
+ },
16
+ },
17
+ [Chain.BASE]: {
18
+ Morpho: {
19
+ address: '0xBBBBBbbBBb9cC5e90e3b3Af64bdAF62C37EEFFCb',
20
+ fromBlock: 13977148n,
21
+ },
22
+ MetaMorphoFactory: {
23
+ address: '0xA9c3D3a366466Fa809d1Ae982Fb2c46E5fC41101',
24
+ fromBlock: 13978134n,
25
+ },
26
+ MetaMorphoV1_1Factory: {
27
+ address: '0xFf62A7c278C62eD665133147129245053Bbf5918',
28
+ fromBlock: 23928808n,
29
+ },
30
+ },
31
+ [Chain.INK]: {
32
+ Morpho: {
33
+ address: '0x857f3EefE8cbda3Bc49367C996cd664A880d3042',
34
+ fromBlock: 4078776n,
35
+ },
36
+ MetaMorphoV1_1Factory: {
37
+ address: '0xd3f39505d0c48AFED3549D625982FdC38Ea9904b',
38
+ fromBlock: 4078830n,
39
+ },
40
+ },
41
+ [Chain.ARBITRUM_ONE]: {
42
+ Morpho: {
43
+ address: '0x6c247b1F6182318877311737BaC0844bAa518F5e',
44
+ fromBlock: 296446593n,
45
+ },
46
+ MetaMorphoV1_1Factory: {
47
+ address: '0x878988f5f561081deEa117717052164ea1Ef0c82',
48
+ fromBlock: 296447195n,
49
+ },
50
+ },
51
+ [Chain.OP_MAINNET]: {
52
+ Morpho: {
53
+ address: '0xce95AfbB8EA029495c66020883F87aaE8864AF92',
54
+ fromBlock: 130770075n,
55
+ },
56
+ MetaMorphoV1_1Factory: {
57
+ address: '0x3Bb6A6A0Bc85b367EFE0A5bAc81c5E52C892839a',
58
+ fromBlock: 130770189n,
59
+ },
60
+ },
61
+ [Chain.POLYGON_MAINNET]: {
62
+ Morpho: {
63
+ address: '0x1bF0c2541F820E775182832f06c0B7Fc27A25f67',
64
+ fromBlock: 66931042n,
65
+ },
66
+ MetaMorphoV1_1Factory: {
67
+ address: '0xa9c87daB340631C34BB738625C70499e29ddDC98',
68
+ fromBlock: 66931118n,
69
+ },
70
+ },
71
+ [Chain.WORLD_CHAIN]: {
72
+ Morpho: {
73
+ address: '0xE741BC7c34758b4caE05062794E8Ae24978AF432',
74
+ fromBlock: 9025669n,
75
+ },
76
+ MetaMorphoV1_1Factory: {
77
+ address: '0x4DBB3a642a2146d5413750Cca3647086D9ba5F12',
78
+ fromBlock: 9025733n,
79
+ },
80
+ },
81
+ [Chain.SCROLL]: {
82
+ Morpho: {
83
+ address: '0x2d012EdbAdc37eDc2BC62791B666f9193FDF5a55',
84
+ fromBlock: 12842868n,
85
+ },
86
+ MetaMorphoV1_1Factory: {
87
+ address: '0x56b65742ade55015e6480959808229Ad6dbc9295',
88
+ fromBlock: 12842903n,
89
+ },
90
+ },
91
+ [Chain.FRAXTAL]: {
92
+ Morpho: {
93
+ address: '0xa6030627d724bA78a59aCf43Be7550b4C5a0653b',
94
+ fromBlock: 15317931n,
95
+ },
96
+ MetaMorphoV1_1Factory: {
97
+ address: '0x27D4Af0AC9E7FDfA6D0853236f249CC27AE79488',
98
+ fromBlock: 15318007n,
99
+ },
100
+ },
101
+ [Chain.UNICHAIN]: {
102
+ Morpho: {
103
+ address: '0x8f5ae9CddB9f68de460C77730b018Ae7E04a140A',
104
+ fromBlock: 9139027n,
105
+ },
106
+ MetaMorphoV1_1Factory: {
107
+ address: '0xe9EdE3929F43a7062a007C3e8652e4ACa610Bdc0',
108
+ fromBlock: 9316789n,
109
+ },
110
+ },
111
+ [Chain.CORN]: {
112
+ Morpho: {
113
+ address: '0xc2B1E031540e3F3271C5F3819F0cC7479a8DdD90',
114
+ fromBlock: 251401n,
115
+ },
116
+ MetaMorphoV1_1Factory: {
117
+ address: '0xe430821595602eA5DD0cD350f86987437c7362fA',
118
+ fromBlock: 253027n,
119
+ },
120
+ },
121
+ [Chain.MODE]: {
122
+ Morpho: {
123
+ address: '0xd85cE6BD68487E0AaFb0858FDE1Cd18c76840564',
124
+ fromBlock: 19983370n,
125
+ },
126
+ MetaMorphoV1_1Factory: {
127
+ address: '0xae5b0884bfff430493D6C844B9fd052Af7d79278',
128
+ fromBlock: 19983443n,
129
+ },
130
+ },
131
+ [Chain.HEMI_NETWORK]: {
132
+ Morpho: {
133
+ address: '0xa4Ca2c2e25b97DA19879201bA49422bc6f181f42',
134
+ fromBlock: 1188872n,
135
+ },
136
+ MetaMorphoV1_1Factory: {
137
+ address: '0x8e52179BeB18E882040b01632440d8Ca0f01da82',
138
+ fromBlock: 1188885n,
139
+ },
140
+ },
141
+ [Chain.SONIC_MAINNET]: {
142
+ Morpho: {
143
+ address: '0xd6c916eB7542D0Ad3f18AEd0FCBD50C582cfa95f',
144
+ fromBlock: 9100931n,
145
+ },
146
+ MetaMorphoV1_1Factory: {
147
+ address: '0x0cE9e3512CB4df8ae7e265e62Fb9258dc14f12e8',
148
+ fromBlock: 9101319n,
149
+ },
150
+ },
151
+ [Chain.PLUME_MAINNET]: {
152
+ Morpho: {
153
+ address: '0x42b18785CE0Aed7BF7Ca43a39471ED4C0A3e0bB5',
154
+ fromBlock: 765994n,
155
+ },
156
+ MetaMorphoV1_1Factory: {
157
+ address: '0x2525D453D9BA13921D5aB5D8c12F9202b0e19456',
158
+ fromBlock: 766078n,
159
+ },
160
+ },
161
+ [Chain.LISK]: {
162
+ Morpho: {
163
+ address: '0x00cD58DEEbd7A2F1C55dAec715faF8aed5b27BF8',
164
+ fromBlock: 15731231n,
165
+ },
166
+ MetaMorphoV1_1Factory: {
167
+ address: '0x01dD876130690469F685a65C2B295A90a81BaD91',
168
+ fromBlock: 15731333n,
169
+ },
170
+ },
171
+ [Chain.SONEIUM]: {
172
+ Morpho: {
173
+ address: '0xE75Fc5eA6e74B824954349Ca351eb4e671ADA53a',
174
+ fromBlock: 6440817n,
175
+ },
176
+ MetaMorphoV1_1Factory: {
177
+ address: '0x7026b436f294e560b3C26E731f5cac5992cA2B33',
178
+ fromBlock: 6440899n,
179
+ },
180
+ },
181
+ [Chain.FLAME]: {
182
+ Morpho: {
183
+ address: '0x63971484590b054b6Abc4FEe9F31BC6F68CfeC04',
184
+ fromBlock: 5991116n,
185
+ },
186
+ MetaMorphoV1_1Factory: {
187
+ address: '0xf2BD176D3A89f6E9f6D0c7F17C4Ae6A3515007a8',
188
+ fromBlock: 5991236n,
189
+ },
190
+ },
191
+ [Chain.BASECAMP]: {
192
+ Morpho: {
193
+ address: '0xc7CAd9B1377Eb8103397Cb07Cb5c4f03eb2eBEa8',
194
+ fromBlock: 4804080n,
195
+ },
196
+ MetaMorphoV1_1Factory: {
197
+ address: '0xa8CD521d42b716821D7ddD2Ca6a237087aA5b487',
198
+ fromBlock: 4804270n,
199
+ },
200
+ },
201
+ [Chain.HYPEREVM]: {
202
+ Morpho: {
203
+ address: '0x68e37dE8d93d3496ae143F2E900490f6280C57cD',
204
+ fromBlock: 1988429n,
205
+ },
206
+ MetaMorphoV1_1Factory: {
207
+ address: '0xec051b19d654C48c357dC974376DeB6272f24e53',
208
+ fromBlock: 1988677n,
209
+ },
210
+ },
211
+ [Chain.KATANA]: {
212
+ Morpho: {
213
+ address: '0xD50F2DffFd62f94Ee4AEd9ca05C61d0753268aBc',
214
+ fromBlock: 2741069n,
215
+ },
216
+ MetaMorphoV1_1Factory: {
217
+ address: '0x1c8De6889acee12257899BFeAa2b7e534de32E16',
218
+ fromBlock: 2741420n,
219
+ },
220
+ },
221
+ [Chain.TAC_MAINNET]: {
222
+ Morpho: {
223
+ address: '0x918B9F2E4B44E20c6423105BB6cCEB71473aD35c',
224
+ fromBlock: 853025n,
225
+ },
226
+ MetaMorphoV1_1Factory: {
227
+ address: '0xcDA78f4979d17Ec93052A84A12001fe0088AD734',
228
+ fromBlock: 978654n,
229
+ },
230
+ },
231
+ };
232
+ export function getContractDeploymentInfo(chainId, name) {
233
+ return chainId !== undefined ? DEPLOYMENTS[chainId][name] : undefined;
234
+ }
@@ -0,0 +1,4 @@
1
+ export declare const MORPHO_MARKETS: {
2
+ [chain: string]: string[];
3
+ };
4
+ //# sourceMappingURL=markets.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"markets.d.ts","sourceRoot":"","sources":["../../../../src/lending/morpho/constants/markets.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,cAAc,EAAE;IAAE,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CAAA;CA6DvD,CAAA"}
@@ -0,0 +1,63 @@
1
+ import { Chain } from '@1delta/chain-registry';
2
+ export const MORPHO_MARKETS = {
3
+ [Chain.HYPEREVM]: [
4
+ '0xf9f0473b23ebeb82c83078f0f0f77f27ac534c9fb227cb4366e6057b6163ffbf',
5
+ '0xb5b215bd2771f5ed73125bf6a02e7b743fadc423dfbb095ad59df047c50d3e81',
6
+ '0x64e7db7f042812d4335947a7cdf6af1093d29478aff5f1ccd93cc67f8aadfddc',
7
+ '0xc0a3063a0a7755b7d58642e9a6d3be1c05bc974665ef7d3b158784348d4e17c5',
8
+ '0x78f6b57d825ef01a5dc496ad1f426a6375c685047d07a30cd07ac5107ffc7976',
9
+ '0xd2e8f6fd195556222d7a0314d4fb93fdf84ae920faaebba6dbcf584ac865e1f5',
10
+ '0xd5c5b5db889eb5d4f4026b9704cddffbc1356732a37c2b543330c10756ae7a18',
11
+ '0xfdece686f16877984325c7a1c192e0f18862bae3829d000a1a62b5bc2b31d4ef',
12
+ '0x076689a210adf3fdaa54e8ed452615ed641ba0d985f95e1376c3df3017d62878',
13
+ '0x0bb2900086fe38fa9633c664e1f955eb8dcf66a81174967e83dee867e083a105',
14
+ '0x0ecf5be1fadf4bec3f79ce196f02a327b507b34d230c0f033f4970b1b510119c',
15
+ '0x15f505f8dda26a523f7490ad0322f3ed4f325a54fd50832bc65e4bd75e3dca54',
16
+ '0x19bbcc95b876740c0765ed1e4bac1979c4aea1b4bfbfee0e61dc1fe76a6887dc',
17
+ '0x19e47d37453628ebf0fd18766ce6fee1b08ea46752a5da83ca0bfecb270d07e8',
18
+ '0x1c6b87ae1b97071ef444eedcba9f5a92cfe974edbbcaa1946644fc7ab0e283af',
19
+ '0x1da89208e6cb5173e97a83461853b8400de4f7c37542cf010a10579a5f7ca451',
20
+ '0x216bd19960f140177a4a3fb9cf258edcbadb1f5d54740fc944503bff4a00e65e',
21
+ '0x2acd218c67daa94dd2f92e81f477ffc9f8507319f0f2d698eae5ed631ae14039',
22
+ '0x2b62c4153d81d5b5a233d1d2b7ef899d3fca4076d458e215ff3a00176b415b0d',
23
+ '0x31aaa663d718e83ea15326ec110c4bcf5e123585d0b6c4d0ad61a50c4aa65b1e',
24
+ '0x33c935bb0699b737d9cbd4274b5936a9004eee03ccfa70e266ff7c1513fd4808',
25
+ '0x5031ac4543f8232df889e5eb24389f8cf9520366f21dc62240017cb3bc6ecc59',
26
+ '0x53bf81793c2cc384c19a3bc9b032467e179a390a9225cd9542742ac10f539cc2',
27
+ '0x5ecb7a25d51c870ec57f810c880e3e20743e56d0524575b7b8934a778aaec1af',
28
+ '0x5ef35fe4418a6bcfcc70fe32efce30074f22e9a782f81d432c1e537ddbda11e2',
29
+ '0x65f2a559764859a559d8c39604cf665942bab7d10dfaa1b82e914c9d351038d4',
30
+ '0x7268244d330f1462f77ded7a14e2f868893e86e76e8b8eaa869405d588aff6ce',
31
+ '0x83bab0d612f592d0f145b2ec82fd730144dfb3d72c8fc838b27555558e49c496',
32
+ '0x8eb8cfe3b1ac8f653608ae09fb099263fa2fe25d4a59305c309937292c2aeee9',
33
+ '0x964e7d1db11bdf32262c71274c297dcdb4710d73acb814f04fdca8b0c7cdf028',
34
+ '0x9e28003bb5c29c1df3552e99b04d656fadf1aedaf81256637dcc51d91cf6c639',
35
+ '0xa24d04c3aff60d49b3475f0084334546cbf66182e788b6bf173e6f9990b2c816',
36
+ '0xa62327642e110efd38ba2d153867a8625c8dc40832e1d211ba4f4151c3de9050',
37
+ '0xa7fe39c692f0192fb2f281a6cc16c8b2e1c8f9b9f2bc418e0c0c1e9374bf4b04',
38
+ '0xb142d65d7c624def0a9f4b49115b83f400a86bd2904d4f3339ec4441e28483ea',
39
+ '0xb5b575e402c7c19def8661069c39464c8bf3297b638e64d841b09a4eb2807de5',
40
+ '0xbc15a1782163f4be46c23ac61f5da50fed96ad40293f86a5ce0501ce4a246b32',
41
+ '0xc5526286d537c890fdd879d17d80c4a22dc7196c1e1fff0dd6c853692a759c62',
42
+ '0xc59a3f8a3918d89ebef44ee1dcda435719f543cfd3f37ead7e74852ea5931581',
43
+ '0xd173e9d80aeacac486b46a9a849ecb386cec260cc7dd5be0db3505a0f9f93fb5',
44
+ '0xdb2cf3ad3ef91c9bb673bf35744e7141bc2950b27a75c8d11b0ead9f6742d927',
45
+ '0xe0ede98b4425285a9c93d51f8ba27d9a09bc0033874e4a883d3f29d41f9f2e4a',
46
+ '0xe41ace68f2de7be8e47185b51ddc23d4a58aac4ce9f8cc5f9384fe26f2104ec8',
47
+ '0xebeabb17bd69d4b8ed6929a821d69478b564f4cc604d0995944c9da8b5cb3f04',
48
+ '0xed00791e29eb08c9bc0d8b389fe1f00084699baf2a785ba2a42e915706b17b82',
49
+ '0xf25db2433ae650155eae04ebd8b3795d19bfcb318d22926a8a5e746e8028e0a8',
50
+ ],
51
+ [Chain.OP_MAINNET]: [
52
+ '0x173b66359f0741b1c7f1963075cd271c739b6dc73b658e108a54ce6febeb279b',
53
+ '0x67840b3ace736fe47ab919ad003e0330da50536f61f9fcb96af80d0f37a57070',
54
+ '0xc7ae57c1998c67a4c21804df606db1309b68a518ba5acc8b1dc3ffcb1b26b071',
55
+ ],
56
+ [Chain.SONEIUM]: [
57
+ '0xc35eda4e57363a5679949be05c65b81c2c274bfcd21173344d99726147236614',
58
+ '0x80a26251892573c16d88f2aabd447bc46d918daa035e1bbaedc9ca315bfb3275',
59
+ '0x87f0a5e65f1cfb879d2d5e7300691332ba227f3babe8fbd4bd2cbca862d8ae5e',
60
+ '0xebaf3dc6fa2fb3f78d18c87adcc37c06fe64874c5b2d69619ef7696088780df9',
61
+ '0x5869019d7ec9f92db2e90c0156b542cda7c0a679c626eac842aa5117a0483d4a',
62
+ ],
63
+ };
@@ -1 +1 @@
1
- {"version":3,"file":"convertPublic.d.ts","sourceRoot":"","sources":["../../../src/lending/morpho/convertPublic.ts"],"names":[],"mappings":"AACA,OAAO,EACL,2BAA2B,EAE3B,kBAAkB,EACnB,MAAM,SAAS,CAAA;AAEhB,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAA;AAC9C,OAAO,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAA;AAc3C,wBAAgB,8BAA8B,CAC5C,QAAQ,EAAE,kBAAkB,EAC5B,OAAO,EAAE,MAAM,EACf,gBAAgB,GAAE,gBAIjB,EACD,MAAM,GAAE,gBAAqB,GAC5B;IAAE,CAAC,CAAC,EAAE,MAAM,GAAG,2BAA2B,CAAA;CAAE,CAgI9C"}
1
+ {"version":3,"file":"convertPublic.d.ts","sourceRoot":"","sources":["../../../src/lending/morpho/convertPublic.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,2BAA2B,EAE3B,kBAAkB,EACnB,MAAM,SAAS,CAAA;AAEhB,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAA;AAC9C,OAAO,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAA;AAG3C,wBAAgB,8BAA8B,CAC5C,QAAQ,EAAE,kBAAkB,EAC5B,OAAO,EAAE,MAAM,EACf,gBAAgB,GAAE,gBAIjB,EACD,MAAM,GAAE,gBAAqB,GAC5B;IAAE,CAAC,CAAC,EAAE,MAAM,GAAG,2BAA2B,CAAA;CAAE,CAgI9C"}