curvance 1.0.0

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 (47) hide show
  1. package/README.md +17 -0
  2. package/dist/abis/BaseCToken.json +1550 -0
  3. package/dist/abis/BorrowableCToken.json +2188 -0
  4. package/dist/abis/IDynamicIRM.json +158 -0
  5. package/dist/abis/MarketManagerIsolated.json +1587 -0
  6. package/dist/abis/ProtocolReader.json +767 -0
  7. package/dist/classes/CToken.d.ts +170 -0
  8. package/dist/classes/CToken.d.ts.map +1 -0
  9. package/dist/classes/CToken.js +292 -0
  10. package/dist/classes/CToken.js.map +1 -0
  11. package/dist/classes/CVE.d.ts +7 -0
  12. package/dist/classes/CVE.d.ts.map +1 -0
  13. package/dist/classes/CVE.js +7 -0
  14. package/dist/classes/CVE.js.map +1 -0
  15. package/dist/classes/ERC20.d.ts +35 -0
  16. package/dist/classes/ERC20.d.ts.map +1 -0
  17. package/dist/classes/ERC20.js +68 -0
  18. package/dist/classes/ERC20.js.map +1 -0
  19. package/dist/classes/Faucet.d.ts +25 -0
  20. package/dist/classes/Faucet.d.ts.map +1 -0
  21. package/dist/classes/Faucet.js +48 -0
  22. package/dist/classes/Faucet.js.map +1 -0
  23. package/dist/classes/Market.d.ts +68 -0
  24. package/dist/classes/Market.d.ts.map +1 -0
  25. package/dist/classes/Market.js +136 -0
  26. package/dist/classes/Market.js.map +1 -0
  27. package/dist/classes/OracleManager.d.ts +13 -0
  28. package/dist/classes/OracleManager.d.ts.map +1 -0
  29. package/dist/classes/OracleManager.js +34 -0
  30. package/dist/classes/OracleManager.js.map +1 -0
  31. package/dist/classes/ProtocolReader.d.ts +116 -0
  32. package/dist/classes/ProtocolReader.d.ts.map +1 -0
  33. package/dist/classes/ProtocolReader.js +136 -0
  34. package/dist/classes/ProtocolReader.js.map +1 -0
  35. package/dist/helpers.d.ts +20 -0
  36. package/dist/helpers.d.ts.map +1 -0
  37. package/dist/helpers.js +45 -0
  38. package/dist/helpers.js.map +1 -0
  39. package/dist/setup.d.ts +11 -0
  40. package/dist/setup.d.ts.map +1 -0
  41. package/dist/setup.js +28 -0
  42. package/dist/setup.js.map +1 -0
  43. package/dist/types.d.ts +10 -0
  44. package/dist/types.d.ts.map +1 -0
  45. package/dist/types.js +3 -0
  46. package/dist/types.js.map +1 -0
  47. package/package.json +31 -0
@@ -0,0 +1,25 @@
1
+ import { Contract } from "ethers";
2
+ import { TransactionResponse } from "ethers";
3
+ import { address, curvance_signer } from "../types";
4
+ export interface IFaucet {
5
+ userLastClaimed(user: address, token: address): Promise<bigint>;
6
+ multiLastClaimed(user: address, tokens: address[]): Promise<bigint[]>;
7
+ multiClaim(user: address, tokens: address[], amounts: bigint[]): Promise<TransactionResponse>;
8
+ claim(user: address, token: address, amount: bigint): Promise<TransactionResponse>;
9
+ multiIsAvailable(tokenAddrs: address[], amounts: bigint[]): Promise<boolean[]>;
10
+ }
11
+ export declare class Faucet {
12
+ signer: curvance_signer;
13
+ address: address;
14
+ contract: Contract & IFaucet;
15
+ constructor(signer: curvance_signer, address: address);
16
+ isAvailable(tokenAddr: address, amount: bigint): Promise<boolean>;
17
+ multiIsAvailable(tokenAddrs: address[], amounts: bigint[]): Promise<{
18
+ [address: `0x${string}`]: boolean;
19
+ }>;
20
+ lastClaimed(user: address, token: address): Promise<bigint>;
21
+ multiLastClaimed(user: address, tokens: address[]): Promise<bigint[]>;
22
+ multiClaim(user: address, tokens: address[], amounts: bigint[]): Promise<TransactionResponse>;
23
+ claim(user: address, token: address, amount: bigint): Promise<TransactionResponse>;
24
+ }
25
+ //# sourceMappingURL=Faucet.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Faucet.d.ts","sourceRoot":"","sources":["../../src/classes/Faucet.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAClC,OAAO,EAAE,mBAAmB,EAAE,MAAM,QAAQ,CAAC;AAC7C,OAAO,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAEpD,MAAM,WAAW,OAAO;IACpB,eAAe,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAChE,gBAAgB,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IACtE,UAAU,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAAC;IAC9F,KAAK,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAAC;IACnF,gBAAgB,CAAC,UAAU,EAAE,OAAO,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;CAClF;AAED,qBAAa,MAAM;IACf,MAAM,EAAE,eAAe,CAAC;IACxB,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC;gBAEjB,MAAM,EAAE,eAAe,EAAE,OAAO,EAAE,OAAO;IAY/C,WAAW,CAAC,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM;IAM9C,gBAAgB,CAAC,UAAU,EAAE,OAAO,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE;;;IAWzD,WAAW,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO;IAIzC,gBAAgB,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE;IAIjD,UAAU,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE;IAI9D,KAAK,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM;CAG5D"}
@@ -0,0 +1,48 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Faucet = void 0;
4
+ const helpers_1 = require("../helpers");
5
+ const ERC20_1 = require("./ERC20");
6
+ class Faucet {
7
+ signer;
8
+ address;
9
+ contract;
10
+ constructor(signer, address) {
11
+ this.signer = signer;
12
+ this.address = address;
13
+ this.contract = (0, helpers_1.contractSetup)(signer, this.address, [
14
+ "function userLastClaimed(address user, address token) view returns (uint256)",
15
+ "function multiLastClaimed(address user, address[] tokens) view returns (uint256[])",
16
+ "function multiClaim(address user, address[] tokens, uint256[] amounts) external",
17
+ "function claim(address user, address token, uint256 amount) external",
18
+ "function multiIsAvailable(address[] tokenAddrs, uint256[] amounts) view returns (bool[])"
19
+ ]);
20
+ }
21
+ async isAvailable(tokenAddr, amount) {
22
+ const token = new ERC20_1.ERC20(this.signer, tokenAddr);
23
+ const faucetBalance = await token.balanceOf(this.address);
24
+ return amount <= faucetBalance;
25
+ }
26
+ async multiIsAvailable(tokenAddrs, amounts) {
27
+ const data = await this.contract.multiIsAvailable(tokenAddrs, amounts);
28
+ let availability = {};
29
+ for (let i = 0; i < tokenAddrs.length; i++) {
30
+ availability[tokenAddrs[i]] = data[i];
31
+ }
32
+ return availability;
33
+ }
34
+ async lastClaimed(user, token) {
35
+ return this.contract.userLastClaimed(user, token);
36
+ }
37
+ async multiLastClaimed(user, tokens) {
38
+ return this.contract.multiLastClaimed(user, tokens);
39
+ }
40
+ async multiClaim(user, tokens, amounts) {
41
+ return this.contract.multiClaim(user, tokens, amounts);
42
+ }
43
+ async claim(user, token, amount) {
44
+ return this.contract.claim(user, token, amount);
45
+ }
46
+ }
47
+ exports.Faucet = Faucet;
48
+ //# sourceMappingURL=Faucet.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Faucet.js","sourceRoot":"","sources":["../../src/classes/Faucet.ts"],"names":[],"mappings":";;;AAAA,wCAA2C;AAC3C,mCAAgC;AAahC,MAAa,MAAM;IACf,MAAM,CAAkB;IACxB,OAAO,CAAU;IACjB,QAAQ,CAAqB;IAE7B,YAAY,MAAuB,EAAE,OAAgB;QACjD,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,QAAQ,GAAG,IAAA,uBAAa,EAAU,MAAM,EAAE,IAAI,CAAC,OAAO,EAAE;YACzD,8EAA8E;YAC9E,oFAAoF;YACpF,iFAAiF;YACjF,sEAAsE;YACtE,0FAA0F;SAC7F,CAAC,CAAC;IACP,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,SAAkB,EAAE,MAAc;QAChD,MAAM,KAAK,GAAG,IAAI,aAAK,CAAC,IAAI,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;QAChD,MAAM,aAAa,GAAG,MAAM,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC1D,OAAO,MAAM,IAAI,aAAa,CAAC;IACnC,CAAC;IAED,KAAK,CAAC,gBAAgB,CAAC,UAAqB,EAAE,OAAiB;QAC3D,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QAEvE,IAAI,YAAY,GAAoC,EAAE,CAAC;QACvD,KAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACxC,YAAY,CAAC,UAAU,CAAC,CAAC,CAAY,CAAC,GAAG,IAAI,CAAC,CAAC,CAAE,CAAC;QACtD,CAAC;QAED,OAAO,YAAY,CAAC;IACxB,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,IAAa,EAAE,KAAc;QAC3C,OAAO,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IACtD,CAAC;IAED,KAAK,CAAC,gBAAgB,CAAC,IAAa,EAAE,MAAiB;QACnD,OAAO,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACxD,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,IAAa,EAAE,MAAiB,EAAE,OAAiB;QAChE,OAAO,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;IAC3D,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,IAAa,EAAE,KAAc,EAAE,MAAc;QACrD,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;IACpD,CAAC;CACJ;AAjDD,wBAiDC"}
@@ -0,0 +1,68 @@
1
+ import { Contract } from "ethers";
2
+ import { DynamicMarketData, ProtocolReader, StaticMarketData, UserMarket } from "./ProtocolReader";
3
+ import { BorrowableCToken, CToken } from "./CToken";
4
+ import { Decimal } from "decimal.js";
5
+ import { address, curvance_signer } from "../types";
6
+ import { OracleManager } from "./OracleManager";
7
+ export interface StatusOf {
8
+ collateral: bigint;
9
+ maxDebt: bigint;
10
+ debt: bigint;
11
+ }
12
+ export interface LiquidationStatusOf {
13
+ lFactor: bigint;
14
+ collateralPrice: bigint;
15
+ debtPrice: bigint;
16
+ }
17
+ export interface HypotheticalLiquidityOf {
18
+ collateralSurplus: bigint;
19
+ liquidityDeficit: bigint;
20
+ positionsToClose: boolean[];
21
+ }
22
+ export interface IMarket {
23
+ accountAssets(account: address): Promise<bigint>;
24
+ MIN_HOLD_PERIOD(): Promise<bigint>;
25
+ hypotheticalLiquidityOf(account: address, cTokenModified: address, redemptionShares: bigint, borrowAssets: bigint): Promise<HypotheticalLiquidityOf>;
26
+ statusOf(account: address): Promise<StatusOf>;
27
+ liquidationStatusOf(account: address, collateralToken: address, debtToken: address): Promise<LiquidationStatusOf>;
28
+ }
29
+ export declare class Market {
30
+ signer: curvance_signer;
31
+ address: address;
32
+ contract: Contract & IMarket;
33
+ abi: any;
34
+ adapters: bigint[];
35
+ cooldownLength: bigint;
36
+ tokens: (CToken | BorrowableCToken)[];
37
+ oracle_manager: OracleManager;
38
+ cache: {
39
+ static: StaticMarketData;
40
+ dynamic: DynamicMarketData;
41
+ user: UserMarket;
42
+ };
43
+ constructor(signer: curvance_signer, static_data: StaticMarketData, dynamic_data: DynamicMarketData, user_data: UserMarket, oracle_manager: OracleManager);
44
+ get tvl(): Decimal;
45
+ get totalDebt(): Decimal;
46
+ get totalCollateral(): Decimal;
47
+ statusOf(account: address): Promise<{
48
+ collateral: bigint;
49
+ maxDebt: bigint;
50
+ debt: bigint;
51
+ }>;
52
+ liquidationStatusOf(account: address, collateralToken: address, debtToken: address): Promise<{
53
+ lFactor: bigint;
54
+ collateralPrice: bigint;
55
+ debtPrice: bigint;
56
+ }>;
57
+ hypotheticalLiquidityOf(account: address, cTokenModified: address, redemptionShares: bigint, borrowAssets: bigint): Promise<{
58
+ collateralSurplus: bigint;
59
+ liquidityDeficit: bigint;
60
+ positionsToClose: boolean[];
61
+ }>;
62
+ expiresAt(account: address, fetch?: boolean): Promise<Date | null>;
63
+ multiHoldExpiresAt(markets: Market[], reader: ProtocolReader): Promise<{
64
+ [address: `0x${string}`]: Date | null;
65
+ }>;
66
+ static getAll(signer: curvance_signer, reader: ProtocolReader, oracle_manager: OracleManager): Promise<Market[]>;
67
+ }
68
+ //# sourceMappingURL=Market.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Market.d.ts","sourceRoot":"","sources":["../../src/classes/Market.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAClC,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACnG,OAAO,EAAE,gBAAgB,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAEpD,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AACrC,OAAO,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEhD,MAAM,WAAW,QAAQ;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,mBAAmB;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,eAAe,EAAE,MAAM,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,uBAAuB;IACpC,iBAAiB,EAAE,MAAM,CAAC;IAC1B,gBAAgB,EAAE,MAAM,CAAC;IACzB,gBAAgB,EAAE,OAAO,EAAE,CAAA;CAC9B;AAED,MAAM,WAAW,OAAO;IACpB,aAAa,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACjD,eAAe,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;IACnC,uBAAuB,CAAC,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,OAAO,EAAE,gBAAgB,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,uBAAuB,CAAC,CAAC;IACrJ,QAAQ,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC9C,mBAAmB,CAAC,OAAO,EAAE,OAAO,EAAE,eAAe,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAAC;CACrH;AAED,qBAAa,MAAM;IACf,MAAM,EAAE,eAAe,CAAC;IACxB,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC;IAC7B,GAAG,EAAE,GAAG,CAAC;IACT,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,CAAC,MAAM,GAAG,gBAAgB,CAAC,EAAE,CAAM;IAC3C,cAAc,EAAE,aAAa,CAAC;IAC9B,KAAK,EAAE;QAAE,MAAM,EAAE,gBAAgB,CAAC;QAAC,OAAO,EAAE,iBAAiB,CAAC;QAAC,IAAI,EAAE,UAAU,CAAA;KAAE,CAAC;gBAG9E,MAAM,EAAE,eAAe,EACvB,WAAW,EAAE,gBAAgB,EAC7B,YAAY,EAAE,iBAAiB,EAC/B,SAAS,EAAE,UAAU,EACrB,cAAc,EAAE,aAAa;IA2BjC,IAAI,GAAG,YAMN;IAED,IAAI,SAAS,YAQZ;IAED,IAAI,eAAe,YAMlB;IAEK,QAAQ,CAAC,OAAO,EAAE,OAAO;;;;;IASzB,mBAAmB,CAAC,OAAO,EAAE,OAAO,EAAE,eAAe,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO;;;;;IASlF,uBAAuB,CAAC,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,OAAO,EAAE,gBAAgB,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM;;;;;IASjH,SAAS,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,UAAQ;IAOzC,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,cAAc;;;WAqBrD,MAAM,CAAC,MAAM,EAAE,eAAe,EAAE,MAAM,EAAE,cAAc,EAAE,cAAc,EAAE,aAAa;CA2BrG"}
@@ -0,0 +1,136 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.Market = void 0;
7
+ const helpers_1 = require("../helpers");
8
+ const CToken_1 = require("./CToken");
9
+ const MarketManagerIsolated_json_1 = __importDefault(require("../abis/MarketManagerIsolated.json"));
10
+ const decimal_js_1 = require("decimal.js");
11
+ class Market {
12
+ signer;
13
+ address;
14
+ contract;
15
+ abi;
16
+ adapters;
17
+ cooldownLength;
18
+ tokens = [];
19
+ oracle_manager;
20
+ cache;
21
+ constructor(signer, static_data, dynamic_data, user_data, oracle_manager) {
22
+ this.signer = signer;
23
+ this.address = static_data.address;
24
+ this.adapters = static_data.adapters;
25
+ this.oracle_manager = oracle_manager;
26
+ this.cooldownLength = static_data.cooldownLength;
27
+ this.contract = (0, helpers_1.contractSetup)(signer, this.address, MarketManagerIsolated_json_1.default);
28
+ this.cache = { static: static_data, dynamic: dynamic_data, user: user_data };
29
+ for (let i = 0; i < static_data.tokens.length; i++) {
30
+ const tokenData = {
31
+ ...static_data.tokens[i],
32
+ ...dynamic_data.tokens[i],
33
+ ...user_data.tokens[i]
34
+ };
35
+ if (tokenData.isBorrowable) {
36
+ const ctoken = new CToken_1.BorrowableCToken(signer, tokenData.address, tokenData, this);
37
+ this.tokens.push(ctoken);
38
+ }
39
+ else {
40
+ const ctoken = new CToken_1.CToken(signer, tokenData.address, tokenData, this);
41
+ this.tokens.push(ctoken);
42
+ }
43
+ }
44
+ }
45
+ get tvl() {
46
+ let marketTvl = new decimal_js_1.Decimal(0);
47
+ for (const token of this.tokens) {
48
+ marketTvl = marketTvl.add(token.getTvl(true));
49
+ }
50
+ return marketTvl;
51
+ }
52
+ get totalDebt() {
53
+ let marketDebt = new decimal_js_1.Decimal(0);
54
+ for (const token of this.tokens) {
55
+ if (token.isBorrowable) {
56
+ marketDebt = marketDebt.add(token.getTotalDebt(true));
57
+ }
58
+ }
59
+ return marketDebt;
60
+ }
61
+ get totalCollateral() {
62
+ let marketCollateral = new decimal_js_1.Decimal(0);
63
+ for (const token of this.tokens) {
64
+ marketCollateral = marketCollateral.add(token.getTotalCollateral(true));
65
+ }
66
+ return marketCollateral;
67
+ }
68
+ async statusOf(account) {
69
+ const data = await this.contract.statusOf(account);
70
+ return {
71
+ collateral: BigInt(data.collateral),
72
+ maxDebt: BigInt(data.maxDebt),
73
+ debt: BigInt(data.debt)
74
+ };
75
+ }
76
+ async liquidationStatusOf(account, collateralToken, debtToken) {
77
+ const data = await this.contract.liquidationStatusOf(account, collateralToken, debtToken);
78
+ return {
79
+ lFactor: BigInt(data.lFactor),
80
+ collateralPrice: BigInt(data.collateralPrice),
81
+ debtPrice: BigInt(data.debtPrice)
82
+ };
83
+ }
84
+ async hypotheticalLiquidityOf(account, cTokenModified, redemptionShares, borrowAssets) {
85
+ const data = await this.contract.hypotheticalLiquidityOf(account, cTokenModified, redemptionShares, borrowAssets);
86
+ return {
87
+ collateralSurplus: BigInt(data.collateralSurplus),
88
+ liquidityDeficit: BigInt(data.liquidityDeficit),
89
+ positionsToClose: data.positionsToClose
90
+ };
91
+ }
92
+ async expiresAt(account, fetch = false) {
93
+ const cooldownTimestamp = await this.contract.accountAssets(account);
94
+ const cooldownLength = fetch || this.cooldownLength == 0n ? await this.contract.MIN_HOLD_PERIOD() : this.cooldownLength;
95
+ const unlockTime = cooldownTimestamp + cooldownLength;
96
+ return unlockTime == cooldownLength ? null : new Date(Number(unlockTime * 1000n));
97
+ }
98
+ async multiHoldExpiresAt(markets, reader) {
99
+ if (markets.length == 0) {
100
+ throw new Error("You can't fetch expirations for no markets.");
101
+ }
102
+ const marketAddresses = markets.map(market => market.address);
103
+ const cooldownTimestamps = await reader.marketMultiCooldown(marketAddresses, this.signer.address);
104
+ let cooldowns = {};
105
+ for (let i = 0; i < markets.length; i++) {
106
+ const market = markets[i];
107
+ const cooldownTimestamp = cooldownTimestamps[i];
108
+ const cooldownLength = market.cooldownLength;
109
+ cooldowns[market.address] = cooldownTimestamp == cooldownLength ? null : new Date(Number(cooldownTimestamp * 1000n));
110
+ }
111
+ return cooldowns;
112
+ }
113
+ static async getAll(signer, reader, oracle_manager) {
114
+ const all_data = await reader.getAllMarketData(signer.address);
115
+ let markets = [];
116
+ for (let i = 0; i < all_data.staticMarket.length; i++) {
117
+ const staticData = all_data.staticMarket[i];
118
+ const dynamicData = all_data.dynamicMarket[i];
119
+ const userData = all_data.userData.markets[i];
120
+ if (staticData == undefined) {
121
+ throw new Error(`Could not find static market data for index: ${i}`);
122
+ }
123
+ if (dynamicData == undefined) {
124
+ throw new Error(`Could not find dynamic market data for index: ${i}`);
125
+ }
126
+ if (userData == undefined) {
127
+ throw new Error(`Could not find user market data for index: ${i}`);
128
+ }
129
+ const market = new Market(signer, staticData, dynamicData, userData, oracle_manager);
130
+ markets.push(market);
131
+ }
132
+ return markets;
133
+ }
134
+ }
135
+ exports.Market = Market;
136
+ //# sourceMappingURL=Market.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Market.js","sourceRoot":"","sources":["../../src/classes/Market.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import { address, curvance_signer } from "../types";
2
+ import { Contract } from "ethers";
3
+ export interface IOracleManager {
4
+ getPrice(asset: address, inUSD: boolean, getLower: boolean): Promise<[bigint, bigint]>;
5
+ }
6
+ export declare class OracleManager {
7
+ signer: curvance_signer;
8
+ address: address;
9
+ contract: Contract & IOracleManager;
10
+ constructor(signer: curvance_signer, address: address);
11
+ getPrice(asset: address, inUSD: boolean, getLower: boolean): Promise<bigint>;
12
+ }
13
+ //# sourceMappingURL=OracleManager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OracleManager.d.ts","sourceRoot":"","sources":["../../src/classes/OracleManager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAEpD,OAAO,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAElC,MAAM,WAAW,cAAc;IAC3B,QAAQ,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,GAAG,OAAO,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;CAC1F;AAED,qBAAa,aAAa;IACtB,MAAM,EAAE,eAAe,CAAC;IACxB,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,QAAQ,GAAG,cAAc,CAAC;gBAExB,MAAM,EAAE,eAAe,EAAE,OAAO,EAAE,OAAO;IAQ/C,QAAQ,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO;CAmBnE"}
@@ -0,0 +1,34 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.OracleManager = void 0;
4
+ const helpers_1 = require("../helpers");
5
+ class OracleManager {
6
+ signer;
7
+ address;
8
+ contract;
9
+ constructor(signer, address) {
10
+ this.signer = signer;
11
+ this.address = address;
12
+ this.contract = (0, helpers_1.contractSetup)(signer, this.address, [
13
+ "function getPrice(address, bool, bool) view returns (uint256, uint256)",
14
+ ]);
15
+ }
16
+ async getPrice(asset, inUSD, getLower) {
17
+ const [price, errorCode] = await this.contract.getPrice(asset, inUSD, getLower);
18
+ if (errorCode != 0n) {
19
+ let addon_msg = "unknown";
20
+ switch (errorCode) {
21
+ case 1n:
22
+ addon_msg = "indicates that price should be taken with caution.";
23
+ break;
24
+ case 2n:
25
+ addon_msg = "indicates a complete failure in receiving a price.";
26
+ break;
27
+ }
28
+ throw new Error(`Error getting price for asset ${asset}: code ${errorCode} - ${addon_msg}`);
29
+ }
30
+ return price;
31
+ }
32
+ }
33
+ exports.OracleManager = OracleManager;
34
+ //# sourceMappingURL=OracleManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OracleManager.js","sourceRoot":"","sources":["../../src/classes/OracleManager.ts"],"names":[],"mappings":";;;AACA,wCAA2C;AAO3C,MAAa,aAAa;IACtB,MAAM,CAAkB;IACxB,OAAO,CAAU;IACjB,QAAQ,CAA4B;IAEpC,YAAY,MAAuB,EAAE,OAAgB;QACjD,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,OAAO,GAAG,OAAkB,CAAC;QAClC,IAAI,CAAC,QAAQ,GAAG,IAAA,uBAAa,EAAiB,MAAM,EAAE,IAAI,CAAC,OAAO,EAAE;YAChE,wEAAwE;SAC3E,CAAC,CAAC;IACP,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,KAAc,EAAE,KAAc,EAAE,QAAiB;QAC5D,MAAM,CAAC,KAAK,EAAE,SAAS,CAAC,GAAa,MAAM,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;QAE1F,IAAG,SAAS,IAAI,EAAE,EAAE,CAAC;YACjB,IAAI,SAAS,GAAG,SAAS,CAAC;YAC1B,QAAO,SAAS,EAAE,CAAC;gBACf,KAAK,EAAE;oBACH,SAAS,GAAG,oDAAoD,CAAC;oBACjE,MAAM;gBACV,KAAK,EAAE;oBACH,SAAS,GAAG,oDAAoD,CAAC;oBACjE,MAAM;YACd,CAAC;YAED,MAAM,IAAI,KAAK,CAAC,iCAAiC,KAAK,UAAU,SAAS,MAAM,SAAS,EAAE,CAAC,CAAC;QAChG,CAAC;QAED,OAAO,KAAK,CAAC;IACjB,CAAC;CACJ;AAhCD,sCAgCC"}
@@ -0,0 +1,116 @@
1
+ import { Contract } from "ethers";
2
+ import { address, curvance_signer } from "../types";
3
+ export interface StaticMarketAsset {
4
+ address: address;
5
+ name: string;
6
+ symbol: string;
7
+ decimals: bigint;
8
+ totalSupply: bigint;
9
+ }
10
+ export interface StaticMarketToken {
11
+ address: address;
12
+ asset: StaticMarketAsset;
13
+ name: string;
14
+ symbol: string;
15
+ decimals: bigint;
16
+ adapters: [bigint, bigint];
17
+ isBorrowable: boolean;
18
+ borrowPaused: boolean;
19
+ collateralizationPaused: boolean;
20
+ mintPaused: boolean;
21
+ collateralCap: bigint;
22
+ debtCap: bigint;
23
+ isListed: boolean;
24
+ collRatio: bigint;
25
+ collReqSoft: bigint;
26
+ collReqHard: bigint;
27
+ liqIncBase: bigint;
28
+ liqIncCurve: bigint;
29
+ liqIncMin: bigint;
30
+ liqIncMax: bigint;
31
+ closeFactorBase: bigint;
32
+ closeFactorCurve: bigint;
33
+ closeFactorMin: bigint;
34
+ closeFactorMax: bigint;
35
+ }
36
+ export interface StaticMarketData {
37
+ address: address;
38
+ adapters: bigint[];
39
+ cooldownLength: bigint;
40
+ tokens: StaticMarketToken[];
41
+ }
42
+ export interface DynamicMarketToken {
43
+ address: address;
44
+ tvl: bigint;
45
+ collateral: bigint;
46
+ debt: bigint;
47
+ sharePrice: bigint;
48
+ assetPrice: bigint;
49
+ sharePriceLower: bigint;
50
+ assetPriceLower: bigint;
51
+ borrowRate: bigint;
52
+ predictedBorrowRate: bigint;
53
+ utilizationRate: bigint;
54
+ supplyRate: bigint;
55
+ liquidity: bigint;
56
+ }
57
+ export interface DynamicMarketData {
58
+ address: address;
59
+ tokens: DynamicMarketToken[];
60
+ }
61
+ export interface UserMarketToken {
62
+ address: address;
63
+ assetAmount: bigint;
64
+ shareAmount: bigint;
65
+ collateral: bigint;
66
+ debt: bigint;
67
+ }
68
+ export interface UserMarket {
69
+ address: address;
70
+ collateral: bigint;
71
+ maxDebt: bigint;
72
+ debt: bigint;
73
+ positionHealth: bigint;
74
+ cooldown: bigint;
75
+ tokens: UserMarketToken[];
76
+ }
77
+ export interface UserLock {
78
+ lockIndex: bigint;
79
+ amount: bigint;
80
+ unlockTime: bigint;
81
+ }
82
+ export interface UserData {
83
+ locks: UserLock[];
84
+ markets: UserMarket[];
85
+ }
86
+ export interface IProtocolReader {
87
+ getUserData(account: address): Promise<UserData>;
88
+ getDynamicMarketData(): Promise<DynamicMarketData[]>;
89
+ getStaticMarketData(): Promise<StaticMarketData[]>;
90
+ marketMultiCooldown(markets: address[], account: address): Promise<bigint[]>;
91
+ hypotheticalMaxLeverage(account: address, borrowableCToken: address, cToken: address, assets: bigint): {
92
+ maxDebtBorrowable: bigint;
93
+ isOffset: boolean;
94
+ };
95
+ }
96
+ export declare class ProtocolReader {
97
+ signer: curvance_signer;
98
+ address: address;
99
+ contract: Contract & IProtocolReader;
100
+ constructor(signer: curvance_signer, address: address);
101
+ getAllMarketData(account: address, use_api?: boolean): Promise<{
102
+ staticMarket: StaticMarketData[];
103
+ dynamicMarket: DynamicMarketData[];
104
+ userData: UserData;
105
+ }>;
106
+ getDynamicMarketData(use_api?: boolean): Promise<DynamicMarketData[]>;
107
+ getUserData(account: address): Promise<UserData>;
108
+ getAllDynamicState(use_api?: boolean): Promise<void>;
109
+ hypotheticalMaxLeverage(account: address, borrowableCToken: address, cToken: address, assets: bigint): Promise<{
110
+ maxDebtBorrowable: bigint;
111
+ isOffset: boolean;
112
+ }>;
113
+ marketMultiCooldown(markets: address[], account: address): Promise<bigint[]>;
114
+ getStaticMarketData(use_api?: boolean): Promise<StaticMarketData[]>;
115
+ }
116
+ //# sourceMappingURL=ProtocolReader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ProtocolReader.d.ts","sourceRoot":"","sources":["../../src/classes/ProtocolReader.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,136 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.ProtocolReader = void 0;
7
+ const helpers_1 = require("../helpers");
8
+ const ProtocolReader_json_1 = __importDefault(require("../abis/ProtocolReader.json"));
9
+ class ProtocolReader {
10
+ signer;
11
+ address;
12
+ contract;
13
+ constructor(signer, address) {
14
+ this.signer = signer;
15
+ this.address = address;
16
+ this.contract = (0, helpers_1.contractSetup)(signer, address, ProtocolReader_json_1.default);
17
+ }
18
+ async getAllMarketData(account, use_api = true) {
19
+ const all = await Promise.all([
20
+ this.getStaticMarketData(use_api),
21
+ this.getDynamicMarketData(use_api),
22
+ this.getUserData(account)
23
+ ]);
24
+ return {
25
+ staticMarket: all[0],
26
+ dynamicMarket: all[1],
27
+ userData: all[2]
28
+ };
29
+ }
30
+ async getDynamicMarketData(use_api = true) {
31
+ // TODO: Implement API call
32
+ const data = await this.contract.getDynamicMarketData();
33
+ const typedData = data.map((market) => ({
34
+ address: market._address,
35
+ tokens: market.tokens.map((token) => ({
36
+ address: token._address,
37
+ tvl: BigInt(token.tvl),
38
+ collateral: BigInt(token.collateral),
39
+ debt: BigInt(token.debt),
40
+ sharePrice: BigInt(token.sharePrice),
41
+ assetPrice: BigInt(token.assetPrice),
42
+ sharePriceLower: BigInt(token.sharePriceLower),
43
+ assetPriceLower: BigInt(token.assetPriceLower),
44
+ borrowRate: BigInt(token.borrowRate),
45
+ predictedBorrowRate: BigInt(token.predictedBorrowRate),
46
+ utilizationRate: BigInt(token.utilizationRate),
47
+ supplyRate: BigInt(token.supplyRate),
48
+ liquidity: BigInt(token.liquidity)
49
+ }))
50
+ }));
51
+ return typedData;
52
+ }
53
+ async getUserData(account) {
54
+ const data = await this.contract.getUserData(account);
55
+ const typedData = {
56
+ locks: data.locks.map((lock) => ({
57
+ lockIndex: BigInt(lock.lockIndex),
58
+ amount: BigInt(lock.amount),
59
+ unlockTime: BigInt(lock.unlockTime)
60
+ })),
61
+ markets: data.markets.map((market) => ({
62
+ address: market._address,
63
+ collateral: BigInt(market.collateral),
64
+ maxDebt: BigInt(market.maxDebt),
65
+ debt: BigInt(market.debt),
66
+ positionHealth: BigInt(market.positionHealth),
67
+ cooldown: BigInt(market.cooldown),
68
+ tokens: market.tokens.map((token) => ({
69
+ address: token._address,
70
+ assetAmount: BigInt(token.assetAmount),
71
+ shareAmount: BigInt(token.shareAmount),
72
+ collateral: BigInt(token.collateral),
73
+ debt: BigInt(token.debt)
74
+ }))
75
+ }))
76
+ };
77
+ return typedData;
78
+ }
79
+ async getAllDynamicState(use_api = true) {
80
+ // TODO: Implement API call
81
+ }
82
+ async hypotheticalMaxLeverage(account, borrowableCToken, cToken, assets) {
83
+ const data = await this.contract.hypotheticalMaxLeverage(account, borrowableCToken, cToken, assets);
84
+ return {
85
+ maxDebtBorrowable: BigInt(data.maxDebtBorrowable),
86
+ isOffset: data.isOffset
87
+ };
88
+ }
89
+ async marketMultiCooldown(markets, account) {
90
+ return await this.contract.marketMultiCooldown(markets, account);
91
+ }
92
+ async getStaticMarketData(use_api = true) {
93
+ // TODO: Implement API call
94
+ const data = await this.contract.getStaticMarketData();
95
+ const typedData = data.map((market) => ({
96
+ address: market._address,
97
+ adapters: market.adapters,
98
+ cooldownLength: market.cooldownLength,
99
+ tokens: market.tokens.map((token) => ({
100
+ address: token._address,
101
+ name: token.name,
102
+ symbol: token.symbol,
103
+ decimals: BigInt(token.decimals),
104
+ asset: {
105
+ address: token.asset._address,
106
+ name: token.asset.name,
107
+ symbol: token.asset.symbol,
108
+ decimals: BigInt(token.asset.decimals),
109
+ totalSupply: BigInt(token.asset.totalSupply)
110
+ },
111
+ adapters: [BigInt(token.adapters[0]), BigInt(token.adapters[1])],
112
+ isBorrowable: token.isBorrowable,
113
+ borrowPaused: token.borrowPaused,
114
+ collateralizationPaused: token.collateralizationPaused,
115
+ mintPaused: token.mintPaused,
116
+ collateralCap: BigInt(token.collateralCap),
117
+ debtCap: BigInt(token.debtCap),
118
+ isListed: token.isListed,
119
+ collRatio: BigInt(token.collRatio),
120
+ collReqSoft: BigInt(token.collReqSoft),
121
+ collReqHard: BigInt(token.collReqHard),
122
+ liqIncBase: BigInt(token.liqIncBase),
123
+ liqIncCurve: BigInt(token.liqIncCurve),
124
+ liqIncMin: BigInt(token.liqIncMin),
125
+ liqIncMax: BigInt(token.liqIncMax),
126
+ closeFactorBase: BigInt(token.closeFactorBase),
127
+ closeFactorCurve: BigInt(token.closeFactorCurve),
128
+ closeFactorMin: BigInt(token.closeFactorMin),
129
+ closeFactorMax: BigInt(token.closeFactorMax)
130
+ }))
131
+ }));
132
+ return typedData;
133
+ }
134
+ }
135
+ exports.ProtocolReader = ProtocolReader;
136
+ //# sourceMappingURL=ProtocolReader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ProtocolReader.js","sourceRoot":"","sources":["../../src/classes/ProtocolReader.ts"],"names":[],"mappings":";;;;;;AACA,wCAA2C;AAC3C,sFAA6C;AAuG7C,MAAa,cAAc;IACvB,MAAM,CAAkB;IACxB,OAAO,CAAU;IACjB,QAAQ,CAA6B;IAErC,YAAY,MAAuB,EAAE,OAAgB;QACjD,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,QAAQ,GAAG,IAAA,uBAAa,EAAkB,MAAM,EAAE,OAAO,EAAE,6BAAG,CAAC,CAAC;IACzE,CAAC;IAED,KAAK,CAAC,gBAAgB,CAAC,OAAgB,EAAE,OAAO,GAAG,IAAI;QACnD,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;YAC1B,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC;YACjC,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC;YAClC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC;SAC5B,CAAC,CAAA;QAEF,OAAO;YACH,YAAY,EAAG,GAAG,CAAC,CAAC,CAAC;YACrB,aAAa,EAAE,GAAG,CAAC,CAAC,CAAC;YACrB,QAAQ,EAAO,GAAG,CAAC,CAAC,CAAC;SACxB,CAAA;IACL,CAAC;IAED,KAAK,CAAC,oBAAoB,CAAC,OAAO,GAAG,IAAI;QACrC,2BAA2B;QAC3B,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,oBAAoB,EAAE,CAAC;QACxD,MAAM,SAAS,GAAwB,IAAI,CAAC,GAAG,CAAC,CAAC,MAAW,EAAE,EAAE,CAAC,CAAC;YAC9D,OAAO,EAAE,MAAM,CAAC,QAAQ;YACxB,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAU,EAAE,EAAE,CAAC,CAAC;gBACvC,OAAO,EAAE,KAAK,CAAC,QAAQ;gBACvB,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC;gBACtB,UAAU,EAAE,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC;gBACpC,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC;gBACxB,UAAU,EAAE,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC;gBACpC,UAAU,EAAE,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC;gBACpC,eAAe,EAAE,MAAM,CAAC,KAAK,CAAC,eAAe,CAAC;gBAC9C,eAAe,EAAE,MAAM,CAAC,KAAK,CAAC,eAAe,CAAC;gBAC9C,UAAU,EAAE,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC;gBACpC,mBAAmB,EAAE,MAAM,CAAC,KAAK,CAAC,mBAAmB,CAAC;gBACtD,eAAe,EAAE,MAAM,CAAC,KAAK,CAAC,eAAe,CAAC;gBAC9C,UAAU,EAAE,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC;gBACpC,SAAS,EAAE,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC;aACrC,CAAC,CAAC;SACN,CAAC,CAAC,CAAC;QAEJ,OAAO,SAAS,CAAC;IAErB,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,OAAgB;QAC9B,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;QAEtD,MAAM,SAAS,GAAa;YACxB,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAS,EAAE,EAAE,CAAC,CAAC;gBAClC,SAAS,EAAE,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC;gBACjC,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC;gBAC3B,UAAU,EAAE,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC;aACtC,CAAC,CAAC;YACH,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAW,EAAE,EAAE,CAAC,CAAC;gBACxC,OAAO,EAAE,MAAM,CAAC,QAAQ;gBACxB,UAAU,EAAE,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC;gBACrC,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC;gBAC/B,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC;gBACzB,cAAc,EAAE,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC;gBAC7C,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC;gBACjC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAU,EAAE,EAAE,CAAC,CAAC;oBACvC,OAAO,EAAE,KAAK,CAAC,QAAQ;oBACvB,WAAW,EAAE,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC;oBACtC,WAAW,EAAE,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC;oBACtC,UAAU,EAAE,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC;oBACpC,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC;iBAC3B,CAAC,CAAC;aACN,CAAC,CAAC;SACN,CAAC;QAEF,OAAO,SAAS,CAAC;IACrB,CAAC;IAED,KAAK,CAAC,kBAAkB,CAAC,OAAO,GAAG,IAAI;QACnC,2BAA2B;IAC/B,CAAC;IAED,KAAK,CAAC,uBAAuB,CAAC,OAAgB,EAAE,gBAAyB,EAAE,MAAe,EAAE,MAAc;QACtG,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,uBAAuB,CAAC,OAAO,EAAE,gBAAgB,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;QACpG,OAAO;YACH,iBAAiB,EAAE,MAAM,CAAC,IAAI,CAAC,iBAAiB,CAAC;YACjD,QAAQ,EAAE,IAAI,CAAC,QAAQ;SAC1B,CAAC;IACN,CAAC;IAED,KAAK,CAAC,mBAAmB,CAAC,OAAkB,EAAE,OAAgB;QAC1D,OAAO,MAAM,IAAI,CAAC,QAAQ,CAAC,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IACrE,CAAC;IAED,KAAK,CAAC,mBAAmB,CAAC,OAAO,GAAG,IAAI;QACpC,2BAA2B;QAC3B,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,mBAAmB,EAAE,CAAC;QAEvD,MAAM,SAAS,GAAuB,IAAI,CAAC,GAAG,CAAC,CAAC,MAAW,EAAE,EAAE,CAAC,CAAC;YAC7D,OAAO,EAAE,MAAM,CAAC,QAAQ;YACxB,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,cAAc,EAAE,MAAM,CAAC,cAAc;YACrC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAU,EAAE,EAAE,CAAC,CAAC;gBACvC,OAAO,EAAE,KAAK,CAAC,QAAQ;gBACvB,IAAI,EAAE,KAAK,CAAC,IAAI;gBAChB,MAAM,EAAE,KAAK,CAAC,MAAM;gBACpB,QAAQ,EAAE,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC;gBAChC,KAAK,EAAE;oBACH,OAAO,EAAE,KAAK,CAAC,KAAK,CAAC,QAAQ;oBAC7B,IAAI,EAAE,KAAK,CAAC,KAAK,CAAC,IAAI;oBACtB,MAAM,EAAE,KAAK,CAAC,KAAK,CAAC,MAAM;oBAC1B,QAAQ,EAAE,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC;oBACtC,WAAW,EAAE,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC;iBAC/C;gBACD,QAAQ,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;gBAChE,YAAY,EAAE,KAAK,CAAC,YAAY;gBAChC,YAAY,EAAE,KAAK,CAAC,YAAY;gBAChC,uBAAuB,EAAE,KAAK,CAAC,uBAAuB;gBACtD,UAAU,EAAE,KAAK,CAAC,UAAU;gBAC5B,aAAa,EAAE,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC;gBAC1C,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC;gBAC9B,QAAQ,EAAE,KAAK,CAAC,QAAQ;gBACxB,SAAS,EAAE,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC;gBAClC,WAAW,EAAE,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC;gBACtC,WAAW,EAAE,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC;gBACtC,UAAU,EAAE,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC;gBACpC,WAAW,EAAE,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC;gBACtC,SAAS,EAAE,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC;gBAClC,SAAS,EAAE,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC;gBAClC,eAAe,EAAE,MAAM,CAAC,KAAK,CAAC,eAAe,CAAC;gBAC9C,gBAAgB,EAAE,MAAM,CAAC,KAAK,CAAC,gBAAgB,CAAC;gBAChD,cAAc,EAAE,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC;gBAC5C,cAAc,EAAE,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC;aAC/C,CAAC,CAAC;SACN,CAAC,CAAC,CAAC;QACJ,OAAO,SAAS,CAAC;IACrB,CAAC;CACJ;AA3ID,wCA2IC"}