UNPKG

@raydium-io/raydium-sdk-v2

Version:

An SDK for building applications on top of Raydium.

1 lines 39.7 kB
{"version":3,"sources":["../../../src/marshmallow/index.ts","../../../src/marshmallow/buffer-layout.ts","../../../src/raydium/clmm/libraries/constants.ts","../../../src/raydium/clmm/layout.ts"],"sourcesContent":["import { PublicKey } from \"@solana/web3.js\";\nimport BN, { isBN } from \"bn.js\";\n\nimport {\n bits,\n blob,\n Blob,\n Layout,\n offset as _offset,\n seq as _seq,\n Structure as _Structure,\n u32 as _u32,\n u8 as _u8,\n UInt,\n union as _union,\n Union as _Union,\n} from \"./buffer-layout\";\n\nexport * from \"./buffer-layout\";\nexport { blob };\n\nexport class BNLayout<P extends string = \"\"> extends Layout<BN, P> {\n blob: Layout<Buffer>;\n signed: boolean;\n\n constructor(span: number, signed: boolean, property?: P) {\n //@ts-expect-error type wrong for super()'s type different from extends, but it desn't matter\n super(span, property);\n this.blob = blob(span);\n this.signed = signed;\n }\n\n /** @override */\n decode(b: Buffer, offset = 0): BN {\n const num = new BN(this.blob.decode(b, offset), 10, \"le\");\n if (this.signed) {\n return num.fromTwos(this.span * 8).clone();\n }\n return num;\n }\n\n /** @override */\n encode(src: BN, b: Buffer, offset = 0): number {\n if (typeof src === \"number\") src = new BN(src); // src will pass a number accidently in union\n if (this.signed) {\n src = src.toTwos(this.span * 8);\n }\n return this.blob.encode(src.toArrayLike(Buffer, \"le\", this.span), b, offset);\n }\n}\n\nexport class WideBits<P extends string = \"\"> extends Layout<Record<string, boolean>, P> {\n _lower: any;\n _upper: any;\n // TODO: unknown\n constructor(property?: P) {\n //@ts-expect-error type wrong for super()'s type different from extends , but it desn't matter\n super(8, property);\n this._lower = bits(_u32(), false);\n this._upper = bits(_u32(), false);\n }\n\n addBoolean(property: string): void {\n if (this._lower.fields.length < 32) {\n this._lower.addBoolean(property);\n } else {\n this._upper.addBoolean(property);\n }\n }\n\n decode(b: Buffer, offset = 0): Record<string, boolean> {\n const lowerDecoded = this._lower.decode(b, offset);\n const upperDecoded = this._upper.decode(b, offset + this._lower.span);\n return { ...lowerDecoded, ...upperDecoded };\n }\n\n encode(src: any /* TEMP */, b: Buffer, offset = 0): any {\n return this._lower.encode(src, b, offset) + this._upper.encode(src, b, offset + this._lower.span);\n }\n}\n\nexport function u8<P extends string = \"\">(property?: P): UInt<number, P> {\n return new UInt(1, property);\n}\n\nexport function u32<P extends string = \"\">(property?: P): UInt<number, P> {\n return new UInt(4, property);\n}\n\nexport function u64<P extends string = \"\">(property?: P): BNLayout<P> {\n return new BNLayout(8, false, property);\n}\n\nexport function u128<P extends string = \"\">(property?: P): BNLayout<P> {\n return new BNLayout(16, false, property);\n}\n\nexport function i8<P extends string = \"\">(property?: P): BNLayout<P> {\n return new BNLayout(1, true, property);\n}\n\nexport function i64<P extends string = \"\">(property?: P): BNLayout<P> {\n return new BNLayout(8, true, property);\n}\n\nexport function i128<P extends string = \"\">(property?: P): BNLayout<P> {\n return new BNLayout(16, true, property);\n}\n\nexport class WrappedLayout<T, U, P extends string = \"\"> extends Layout<U, P> {\n layout: Layout<T>;\n decoder: (data: T) => U;\n encoder: (src: U) => T;\n\n constructor(layout: Layout<T>, decoder: (data: T) => U, encoder: (src: U) => T, property?: P) {\n //@ts-expect-error type wrong for super()'s type different from extends , but it desn't matter\n super(layout.span, property);\n this.layout = layout;\n this.decoder = decoder;\n this.encoder = encoder;\n }\n\n decode(b: Buffer, offset?: number): U {\n return this.decoder(this.layout.decode(b, offset));\n }\n\n encode(src: U, b: Buffer, offset?: number): number {\n return this.layout.encode(this.encoder(src), b, offset);\n }\n\n getSpan(b: Buffer, offset?: number): number {\n return this.layout.getSpan(b, offset);\n }\n}\n\nexport function publicKey<P extends string = \"\">(property?: P): Layout<PublicKey, P> {\n return new WrappedLayout(\n blob(32),\n (b: Buffer) => new PublicKey(b),\n (key: PublicKey) => key.toBuffer(),\n property,\n );\n}\n\nexport class OptionLayout<T, P> extends Layout<T | null, P> {\n layout: Layout<T>;\n discriminator: Layout<number>;\n\n constructor(layout: Layout<T>, property?: P) {\n //@ts-expect-error type wrong for super()'s type different from extends , but it desn't matter\n super(-1, property);\n this.layout = layout;\n this.discriminator = _u8();\n }\n\n encode(src: T | null, b: Buffer, offset = 0): number {\n if (src === null || src === undefined) {\n return this.discriminator.encode(0, b, offset);\n }\n this.discriminator.encode(1, b, offset);\n return this.layout.encode(src, b, offset + 1) + 1;\n }\n\n decode(b: Buffer, offset = 0): T | null {\n const discriminator = this.discriminator.decode(b, offset);\n if (discriminator === 0) {\n return null;\n } else if (discriminator === 1) {\n return this.layout.decode(b, offset + 1);\n }\n throw new Error(\"Invalid option \" + this.property);\n }\n\n getSpan(b: Buffer, offset = 0): number {\n const discriminator = this.discriminator.decode(b, offset);\n if (discriminator === 0) {\n return 1;\n } else if (discriminator === 1) {\n return this.layout.getSpan(b, offset + 1) + 1;\n }\n throw new Error(\"Invalid option \" + this.property);\n }\n}\n\nexport function option<T, P extends string = \"\">(layout: Layout<T>, property?: P): Layout<T | null, P> {\n return new OptionLayout<T, P>(layout, property);\n}\n\nexport function bool<P extends string = \"\">(property?: P): Layout<boolean, P> {\n return new WrappedLayout(_u8(), decodeBool, encodeBool, property);\n}\n\nexport function decodeBool(value: number): boolean {\n if (value === 0) {\n return false;\n } else if (value === 1) {\n return true;\n }\n throw new Error(\"Invalid bool: \" + value);\n}\n\nexport function encodeBool(value: boolean): number {\n return value ? 1 : 0;\n}\n\nexport function vec<T, P extends string = \"\">(elementLayout: Layout<T>, property?: P): Layout<T[], P> {\n const length = _u32(\"length\");\n const layout: Layout<{ values: T[] }> = struct([\n length,\n seq(elementLayout, _offset(length, -length.span), \"values\"),\n ]) as any; // Something I don't know\n return new WrappedLayout(\n layout,\n ({ values }) => values,\n (values) => ({ values }),\n property,\n );\n}\n\nexport function tagged<T, P extends string = \"\">(tag: BN, layout: Layout<T>, property?: P): Layout<T, P> {\n const wrappedLayout: Layout<{ tag: BN; data: T }> = struct([u64(\"tag\"), layout.replicate(\"data\")]) as any; // Something I don't know\n\n function decodeTag({ tag: receivedTag, data }: { tag: BN; data: T }): T {\n if (!receivedTag.eq(tag)) {\n throw new Error(\"Invalid tag, expected: \" + tag.toString(\"hex\") + \", got: \" + receivedTag.toString(\"hex\"));\n }\n return data;\n }\n\n return new WrappedLayout(wrappedLayout, decodeTag, (data) => ({ tag, data }), property);\n}\n\nexport function vecU8<P extends string = \"\">(property?: P): Layout<Buffer, P> {\n const length = _u32(\"length\");\n const layout: Layout<{ data: Buffer }> = struct([length, blob(_offset(length, -length.span), \"data\")]) as any; // Something I don't know\n return new WrappedLayout(\n layout,\n ({ data }) => data,\n (data) => ({ data }),\n property,\n );\n}\n\nexport function str<P extends string = \"\">(property?: P): Layout<string, P> {\n return new WrappedLayout(\n vecU8(),\n (data) => data.toString(\"utf-8\"),\n (s) => Buffer.from(s, \"utf-8\"),\n property,\n );\n}\n\nexport interface EnumLayout<T, P extends string = \"\"> extends Layout<T, P> {\n registry: Record<string, Layout<any>>;\n}\n\nexport function rustEnum<T, P extends string = \"\">(variants: Layout<any>[], property?: P): EnumLayout<T, P> {\n const unionLayout = _union(_u8(), property);\n variants.forEach((variant, index) => unionLayout.addVariant(index, variant, variant.property));\n return unionLayout as any; // ?why use UnionLayout? This must be a fault\n}\n\nexport function array<T, P extends string = \"\">(\n elementLayout: Layout<T>,\n length: number,\n property?: P,\n): Layout<T[], P> {\n const layout = struct([seq(elementLayout, length, \"values\")]) as any as Layout<{ values: T[] }>; // Something I don't know\n return new WrappedLayout(\n layout,\n ({ values }) => values,\n (values) => ({ values }),\n property,\n );\n}\n\nexport class Structure<T, P, D extends { [key: string]: any; }> extends _Structure<T, P, D> {\n /** @override */\n decode(b: Buffer, offset?: number): D {\n return super.decode(b, offset);\n }\n}\n\nexport function struct<T, P extends string = \"\">(\n fields: T,\n property?: P,\n decodePrefixes?: boolean,\n): T extends Layout<infer Value, infer Property>[]\n ? Structure<\n Value,\n P,\n {\n [K in Exclude<Extract<Property, string>, \"\">]: Extract<T[number], Layout<any, K>> extends Layout<infer V, any>\n ? V\n : any;\n }\n >\n : any {\n //@ts-expect-error this type is not quite satisfied the define, but, never no need to worry about.\n return new Structure(fields, property, decodePrefixes);\n}\n\nexport type GetLayoutSchemaFromStructure<T extends Structure<any, any, any>> = T extends Structure<any, any, infer S>\n ? S\n : any;\nexport type GetStructureFromLayoutSchema<S extends { [key: string]: any; }> = Structure<any, any, S>;\n\nexport class Union<Schema extends { [key: string]: any; }> extends _Union<Schema> {\n encodeInstruction(instruction: any): Buffer {\n const instructionMaxSpan = Math.max(...Object.values(this.registry).map((r) => r.span));\n const b = Buffer.alloc(instructionMaxSpan);\n return b.slice(0, this.encode(instruction, b));\n }\n\n decodeInstruction(instruction: any): Partial<Schema> {\n return this.decode(instruction);\n }\n}\nexport function union<UnionSchema extends { [key: string]: any } = any>(\n discr: any,\n defaultLayout?: any,\n property?: string,\n): Union<UnionSchema> {\n return new Union(discr, defaultLayout, property);\n}\n\nclass Zeros extends Blob {\n decode(b: Buffer, offset: number): Buffer {\n const slice = super.decode(b, offset);\n if (!slice.every((v) => v === 0)) {\n throw new Error(\"nonzero padding bytes\");\n }\n return slice;\n }\n}\n\nexport function zeros(length: number): Zeros {\n return new Zeros(length);\n}\n\nexport function seq<T, P extends string = \"\", AnotherP extends string = \"\">(\n elementLayout: Layout<T, P>,\n count: number | BN | Layout<BN | number, P>,\n property?: AnotherP,\n): Layout<T[], AnotherP> {\n let parsedCount: number;\n const superCount =\n typeof count === \"number\"\n ? count\n : isBN(count)\n ? count.toNumber()\n : new Proxy(count as unknown as Layout<number> /* pretend to be Layout<number> */, {\n get(target, property): any {\n if (!parsedCount) {\n // get count in targetLayout. note that count may be BN\n const countProperty = Reflect.get(target, \"count\");\n\n // let targetLayout's property:count be a number\n parsedCount = isBN(countProperty) ? countProperty.toNumber() : countProperty;\n\n // record the count\n Reflect.set(target, \"count\", parsedCount);\n }\n return Reflect.get(target, property);\n },\n set(target, property, value): any {\n if (property === \"count\") {\n parsedCount = value;\n }\n return Reflect.set(target, property, value);\n },\n });\n\n // @ts-expect-error force type\n return _seq(elementLayout, superCount, property);\n}\n","import {\n bits as _bits,\n BitStructure as _BitStructure,\n blob as _blob,\n Blob as _Blob,\n cstr as _cstr,\n f32 as _f32,\n f32be as _f32be,\n f64 as _f64,\n f64be as _f64be,\n greedy as _greedy,\n Layout as _Layout,\n ns64 as _ns64,\n ns64be as _ns64be,\n nu64 as _nu64,\n nu64be as _nu64be,\n offset as _offset,\n s16 as _s16,\n s16be as _s16be,\n s24 as _s24,\n s24be as _s24be,\n s32 as _s32,\n s32be as _s32be,\n s40 as _s40,\n s40be as _s40be,\n s48 as _s48,\n s48be as _s48be,\n s8 as _s8,\n seq as _seq,\n struct as _struct,\n Structure as _Structure,\n u16 as _u16,\n u16be as _u16be,\n u24 as _u24,\n u24be as _u24be,\n u32 as _u32,\n u32be as _u32be,\n u40 as _u40,\n u40be as _u40be,\n u48 as _u48,\n u48be as _u48be,\n u8 as _u8,\n UInt as _UInt,\n union as _union,\n Union as _Union,\n unionLayoutDiscriminator as _unionLayoutDiscriminator,\n utf8 as _utf8,\n} from \"@solana/buffer-layout\";\n\n//#region ------------------- Layout -------------------\nexport interface Layout<T = any, P = \"\"> {\n span: number;\n property?: P;\n decode(b: Buffer, offset?: number): T;\n encode(src: T, b: Buffer, offset?: number): number;\n getSpan(b: Buffer, offset?: number): number;\n replicate<AP extends string>(name: AP): Layout<T, AP>;\n}\nexport interface LayoutConstructor {\n new <T, P>(): Layout<T, P>; // for class extends syntex\n new <T, P>(span?: T, property?: P): Layout<T, P>;\n readonly prototype: Layout;\n}\nexport const Layout = _Layout as unknown as LayoutConstructor;\n//#endregion\n\n//#region ------------------- Structure -------------------\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nexport interface Structure<T = any, P = \"\", DecodeSchema extends { [key: string]: any } = any>\n extends Layout<DecodeSchema, P> {\n span: number;\n decode(b: Buffer, offset?: number): DecodeSchema;\n layoutFor<AP extends string>(property: AP): Layout<DecodeSchema[AP]>;\n offsetOf<AP extends string>(property: AP): number;\n}\ninterface StructureConstructor {\n new <T = any, P = \"\", DecodeSchema extends { [key: string]: any } = any>(): Structure<T, P, DecodeSchema>;\n new <T = any, P = \"\", DecodeSchema extends { [key: string]: any } = any>(\n fields: T,\n property?: P,\n decodePrefixes?: boolean,\n ): Structure<T, P, DecodeSchema>;\n}\nexport const Structure = _Structure as unknown as StructureConstructor;\n//#endregion\n\n//#region ------------------- Union -------------------\nexport interface Union<UnionSchema extends { [key: string]: any } = any> extends Layout {\n registry: object;\n decode(b: Buffer, offset?: number): Partial<UnionSchema>;\n addVariant(\n variant: number,\n layout: Structure<any, any, Partial<UnionSchema>> | Layout<any, keyof UnionSchema>,\n property?: string,\n ): any /* TEMP: code in Layout.js 1809 */;\n}\ninterface UnionConstructor {\n new <UnionSchema extends { [key: string]: any } = any>(): Union<UnionSchema>;\n new <UnionSchema extends { [key: string]: any } = any>(\n discr: Layout<any, any>,\n defaultLayout: Layout<any, any>,\n property?: string,\n ): Union<UnionSchema>;\n}\nexport const Union = _Union as unknown as UnionConstructor;\n//#endregion\n\n//#region ------------------- BitStructure -------------------\nexport type BitStructure<T = unknown /* TEMP */, P = \"\"> = Layout<T, P>;\ninterface BitStructureConstructor {\n new (...params: any[]): BitStructure;\n}\nexport const BitStructure = _BitStructure as BitStructureConstructor;\n//#endregion\n\n//#region ------------------- UInt -------------------\nexport type UInt<T = any, P = \"\"> = Layout<T, P>;\ninterface UIntConstructor {\n new <T, P>(span?: T, property?: P): UInt<T, P>;\n}\nexport const UInt = _UInt as UIntConstructor;\n//#endregion\n\n//#region ------------------- Blob -------------------\nexport type Blob<P extends string = \"\"> = Layout<Buffer, P>;\ninterface BlobConstructor {\n new (...params: ConstructorParameters<LayoutConstructor>): Blob;\n}\nexport const Blob = _Blob as unknown as BlobConstructor;\n//#endregion\n\nexport const greedy = _greedy as <P extends string = \"\">(elementSpan?: number, property?: P) => Layout<number, P>;\nexport const u8 = _u8 as <P extends string = \"\">(property?: P) => Layout<number, P>;\nexport const u16 = _u16 as <P extends string = \"\">(property?: P) => Layout<number, P>;\nexport const u24 = _u24 as <P extends string = \"\">(property?: P) => Layout<number, P>;\nexport const u32 = _u32 as <P extends string = \"\">(property?: P) => Layout<number, P>;\nexport const u40 = _u40 as <P extends string = \"\">(property?: P) => Layout<number, P>;\nexport const u48 = _u48 as <P extends string = \"\">(property?: P) => Layout<number, P>;\nexport const nu64 = _nu64 as <P extends string = \"\">(property?: P) => Layout<number, P>;\nexport const u16be = _u16be as <P extends string = \"\">(property?: P) => Layout<number, P>;\nexport const u24be = _u24be as <P extends string = \"\">(property?: P) => Layout<number, P>;\nexport const u32be = _u32be as <P extends string = \"\">(property?: P) => Layout<number, P>;\nexport const u40be = _u40be as <P extends string = \"\">(property?: P) => Layout<number, P>;\nexport const u48be = _u48be as <P extends string = \"\">(property?: P) => Layout<number, P>;\nexport const nu64be = _nu64be as <P extends string = \"\">(property?: P) => Layout<number, P>;\nexport const s8 = _s8 as <P extends string = \"\">(property?: P) => Layout<number, P>;\nexport const s16 = _s16 as <P extends string = \"\">(property?: P) => Layout<number, P>;\nexport const s24 = _s24 as <P extends string = \"\">(property?: P) => Layout<number, P>;\nexport const s32 = _s32 as <P extends string = \"\">(property?: P) => Layout<number, P>;\nexport const s40 = _s40 as <P extends string = \"\">(property?: P) => Layout<number, P>;\nexport const s48 = _s48 as <P extends string = \"\">(property?: P) => Layout<number, P>;\nexport const ns64 = _ns64 as <P extends string = \"\">(property?: P) => Layout<number, P>;\nexport const s16be = _s16be as <P extends string = \"\">(property?: P) => Layout<number, P>;\nexport const s24be = _s24be as <P extends string = \"\">(property?: P) => Layout<number, P>;\nexport const s32be = _s32be as <P extends string = \"\">(property?: P) => Layout<number, P>;\nexport const s40be = _s40be as <P extends string = \"\">(property?: P) => Layout<number, P>;\nexport const s48be = _s48be as <P extends string = \"\">(property?: P) => Layout<number, P>;\nexport const ns64be = _ns64be as <P extends string = \"\">(property?: P) => Layout<number, P>;\nexport const f32 = _f32 as <P extends string = \"\">(property?: P) => Layout<number, P>;\nexport const f32be = _f32be as <P extends string = \"\">(property?: P) => Layout<number, P>;\nexport const f64 = _f64 as <P extends string = \"\">(property?: P) => Layout<number, P>;\nexport const f64be = _f64be as <P extends string = \"\">(property?: P) => Layout<number, P>;\n\nexport const struct = _struct as <T, P extends string = \"\">(\n fields: T,\n property?: P,\n decodePrefixes?: boolean,\n) => T extends Layout<infer Value, infer Property>[]\n ? Structure<\n Value,\n P,\n {\n [K in Exclude<Extract<Property, string>, \"\">]: Extract<T[number], Layout<any, K>> extends Layout<infer V, any>\n ? V\n : any;\n }\n >\n : any;\n\nexport const seq = _seq as unknown as <T, P>(\n elementLayout: Layout<T, string>,\n count: number | Layout<number, string>,\n property?: P,\n) => Layout<T[]>;\nexport const union = _union as <UnionSchema extends { [key: string]: any } = any>(\n discr: Layout<any, any>,\n defaultLayout?: any,\n property?: string,\n) => Union<UnionSchema>;\nexport const unionLayoutDiscriminator = _unionLayoutDiscriminator as <P extends string = \"\">(\n layout: Layout<any, P>,\n property?: P,\n) => any;\nexport const blob = _blob as unknown as <P extends string = \"\">(\n length: number | Layout<number, P>,\n property?: P,\n) => Blob<P>;\nexport const cstr = _cstr as <P extends string = \"\">(property?: P) => Layout<string, P>;\nexport const utf8 = _utf8 as <P extends string = \"\">(maxSpan: number, property?: P) => Layout<string, P>;\nexport const bits = _bits as unknown as <T, P extends string = \"\">(\n word: Layout<T>,\n msb?: boolean,\n property?: P,\n) => BitStructure<T, P>; // TODO: not quite sure\nexport const offset = _offset as unknown as <T, P extends string = \"\">(\n layout: Layout<T, P>,\n offset?: number,\n property?: P,\n) => Layout<T, P>;\n\nexport type GetStructureSchema<T extends Structure> = T extends Structure<any, any, infer S> ? S : unknown;\n","import BN from \"bn.js\";\n\nexport const Q64 = new BN(1).shln(64);\n\nexport const RESOLUTION = 64;\n\nexport const Q128 = new BN(1).shln(128);\n\nexport const U64_MAX = new BN(1).shln(64).subn(1);\n\nexport const U128_MAX = new BN(1).shln(128).subn(1);\n\nexport const MIN_TICK = -443636;\n\nexport const MAX_TICK = 443636;\n\nexport const MIN_SQRT_PRICE_X64 = new BN(\"4295048016\");\n\nexport const MAX_SQRT_PRICE_X64 = new BN(\"79226673521066979257578248091\");\n\nexport const LOG_B_2_X32 = new BN(\"59543866431248\");\n\nexport const LOG_B_P_ERR_MARGIN_LOWER_X64 = new BN(\"184467440737095516\");\n\nexport const LOG_B_P_ERR_MARGIN_UPPER_X64 = new BN(\"15793534762490258745\");\n\nexport const BIT_PRECISION = 16;\n\nexport const TICK_ARRAY_BITMAP_SIZE = 512;\n\nexport const TICK_ARRAY_SIZE = 60;\n\nexport const MAGIC_SQRT_10001 = new BN(\"18446743708227953217\");\n\nexport const TICK_TO_SQRT_PRICE_FACTORS: { bit: number; factor: BN }[] = [\n { bit: 0, factor: new BN(\"fffcb933bd6fb800\", 16) }, // i=0\n { bit: 1, factor: new BN(\"fff97272373d4000\", 16) }, // i=1\n { bit: 2, factor: new BN(\"fff2e50f5f657000\", 16) }, // i=2\n { bit: 3, factor: new BN(\"ffe5caca7e10f000\", 16) }, // i=3\n { bit: 4, factor: new BN(\"ffcb9843d60f7000\", 16) }, // i=4\n { bit: 5, factor: new BN(\"ff973b41fa98e800\", 16) }, // i=5\n { bit: 6, factor: new BN(\"ff2ea16466c9b000\", 16) }, // i=6\n { bit: 7, factor: new BN(\"fe5dee046a9a3800\", 16) }, // i=7\n { bit: 8, factor: new BN(\"fcbe86c7900bb000\", 16) }, // i=8\n { bit: 9, factor: new BN(\"f987a7253ac65800\", 16) }, // i=9\n { bit: 10, factor: new BN(\"f3392b0822bb6000\", 16) }, // i=10\n { bit: 11, factor: new BN(\"e7159475a2caf000\", 16) }, // i=11\n { bit: 12, factor: new BN(\"d097f3bdfd2f2000\", 16) }, // i=12\n { bit: 13, factor: new BN(\"a9f746462d9f8000\", 16) }, // i=13\n { bit: 14, factor: new BN(\"70d869a156f31c00\", 16) }, // i=14\n { bit: 15, factor: new BN(\"31be135f97ed3200\", 16) }, // i=15\n { bit: 16, factor: new BN(\"9aa508b5b85a500\", 16) }, // i=16\n { bit: 17, factor: new BN(\"5d6af8dedc582c\", 16) }, // i=17\n { bit: 18, factor: new BN(\"2216e584f5fa\", 16) }, // i=18\n];\n\nexport const FEE_RATE_DENOMINATOR = 1_000_000;\n\nexport const MAX_FEE_RATE = 100_000;\n\nexport enum CollectFeeOn {\n FromInput = 0,\n TokenOnlyA = 1,\n TokenOnlyB = 2,\n}\n\n// export const FEE_RATE_DENOMINATOR_VALUE = 1_000_000;\n\nexport const MAX_FEE_RATE_NUMERATOR = 100_000;\nexport const VOLATILITY_ACCUMULATOR_SCALE = 10_000;\nexport const REDUCTION_FACTOR_DENOMINATOR = 10_000;\nexport const DYNAMIC_FEE_CONTROL_DENOMINATOR = 100_000;\n\nexport const TICK_ARRAY_SIZE_USIZE = 60;\n\nexport const REWARD_NUM = 3;\n\nexport const OBSERVATION_NUM = 100;\nexport const OBSERVATION_UPDATE_DURATION_DEFAULT = 15;\n\nexport const OPERATION_SIZE_USIZE = 10;\nexport const WHITE_MINT_SIZE_USIZE = 100;\n\nexport const EXTENSION_TICKARRAY_BITMAP_SIZE = 14;\n\nexport enum PoolStatusBitIndex {\n OpenPositionOrIncreaseLiquidity = 0,\n DecreaseLiquidity = 1,\n CollectFee = 2,\n CollectReward = 3,\n Swap = 4,\n LimitOrder = 5,\n}\n\nexport enum PoolStatusBitFlag {\n Enable = 0,\n Disable = 1,\n}\n\nexport enum RewardState {\n Uninitialized = 0,\n Initialized = 1,\n Opening = 2,\n Ended = 3,\n}\n\nexport enum UpdateAmmConfigParam {\n TradeFeeRate = 0,\n ProtocolFeeRate = 1,\n FundFeeRate = 2,\n NewOwner = 3,\n NewFundOwner = 4,\n}\n\nexport enum UpdateOperationAccountParam {\n UpdateOperationOwner = 0,\n RemoveOperationOwner = 1,\n UpdateWhitelistMint = 2,\n RemoveWhitelistMint = 3,\n}\n\nexport const BN_ZERO = new BN(0);\nexport const BN_ONE = new BN(1);\nexport const BN_NEGATIVE_ONE = new BN(-1);\n\nexport const mockV3CreatePoolInfo = {\n tvl: 0,\n volumeQuote: 0,\n mintAmountA: 0,\n mintAmountB: 0,\n rewardDefaultInfos: [],\n farmUpcomingCount: 0,\n farmOngoingCount: 0,\n farmFinishedCount: 0,\n\n day: {\n volume: 0,\n volumeQuote: 0,\n volumeFee: 0,\n apr: 0,\n feeApr: 0,\n priceMin: 0,\n priceMax: 0,\n rewardApr: [0],\n },\n week: {\n volume: 0,\n volumeQuote: 0,\n volumeFee: 0,\n apr: 0,\n feeApr: 0,\n priceMin: 0,\n priceMax: 0,\n rewardApr: [0],\n },\n month: {\n volume: 0,\n volumeQuote: 0,\n volumeFee: 0,\n apr: 0,\n feeApr: 0,\n priceMin: 0,\n priceMax: 0,\n rewardApr: [0],\n },\n pooltype: [],\n};\n\n/**\n * Get human-readable description for collectFeeOn value\n * CollectFeeOn enum values:\n * 0 = FromInput - fee collected from input token during swap\n * 1 = Token0Only - fee collected from token0\n * 2 = Token1Only - fee collected from token1\n */\nexport function getCollectFeeOnDescription(value: number): string {\n switch (value) {\n case 0:\n return \"0 (FromInput - fee from input token)\";\n case 1:\n return \"1 (Token0Only - fee from token0)\";\n case 2:\n return \"2 (Token1Only - fee from token1)\";\n default:\n return `${value} (unknown)`;\n }\n}\n\nexport const DYNAMIC_CONFIG_INDEX = 2;\nexport const U64_IGNORE_RANGE = new BN(\"18446744073700000000\");\n","import { blob, bool, i128, i64, publicKey, s32, seq, struct, u128, u16, u32, u64, u8 } from \"../../marshmallow\";\nimport {\n EXTENSION_TICKARRAY_BITMAP_SIZE,\n OBSERVATION_NUM,\n OPERATION_SIZE_USIZE,\n REWARD_NUM,\n TICK_ARRAY_SIZE,\n WHITE_MINT_SIZE_USIZE,\n} from \"./libraries/constants\";\n\nexport const ClmmConfigLayout = struct([\n blob(8),\n u8(\"bump\"),\n u16(\"index\"),\n publicKey(\"owner\"),\n u32(\"protocolFeeRate\"),\n u32(\"tradeFeeRate\"),\n u16(\"tickSpacing\"),\n u32(\"fundFeeRate\"),\n seq(u32(), 1),\n publicKey(\"fundOwner\"),\n seq(u64(), 3),\n]);\n\nexport const ObservationItemLayout = struct([u32(\"blockTimestamp\"), i64(\"tickCumulative\"), seq(u64(), 4)]);\n\nexport const ObservationLayout = struct([\n blob(8),\n bool(\"initialized\"),\n u64(\"recentEpoch\"),\n u16(\"observationIndex\"),\n publicKey(\"poolId\"),\n seq(ObservationItemLayout, OBSERVATION_NUM, \"observations\"),\n seq(u64(), 4),\n]);\n\nexport const DynamicFeeInfoLayout = struct([\n u16(\"filterPeriod\"),\n u16(\"decayPeriod\"),\n u16(\"reductionFactor\"),\n u32(\"dynamicFeeControl\"),\n u32(\"maxVolatilityAccumulator\"),\n s32(\"tickSpacingIndexReference\"),\n u32(\"volatilityReference\"),\n u32(\"volatilityAccumulator\"),\n u64(\"lastUpdateTimestamp\"),\n seq(u8(), 46),\n]);\n\nexport const RewardInfoLayout = struct([\n u8(\"state\"),\n u64(\"openTime\"),\n u64(\"endTime\"),\n u64(\"lastUpdateTime\"),\n u128(\"emissionsPerSecondX64\"),\n u64(\"totalEmissioned\"),\n u64(\"claimed\"),\n publicKey(\"mint\"),\n publicKey(\"vault\"),\n publicKey(\"creator\"),\n u128(\"growthGlobalX64\"),\n]);\n\nexport const PoolInfoLayout = struct([\n blob(8),\n u8(\"bump\"),\n publicKey(\"configId\"),\n publicKey(\"creator\"),\n publicKey(\"mintA\"),\n publicKey(\"mintB\"),\n publicKey(\"vaultA\"),\n publicKey(\"vaultB\"),\n publicKey(\"observationId\"),\n\n u8(\"mintDecimalsA\"),\n u8(\"mintDecimalsB\"),\n u16(\"tickSpacing\"),\n u128(\"liquidity\"),\n u128(\"sqrtPriceX64\"),\n s32(\"tickCurrent\"),\n\n u32(),\n\n u128(\"feeGrowthGlobalX64A\"),\n u128(\"feeGrowthGlobalX64B\"),\n u64(\"protocolFeesTokenA\"),\n u64(\"protocolFeesTokenB\"),\n\n seq(u128(), 4),\n // u128(\"swapInAmountTokenA\"),\n // u128(\"swapOutAmountTokenB\"),\n // u128(\"swapInAmountTokenB\"),\n // u128(\"swapOutAmountTokenA\"),\n\n u8(\"status\"),\n u8(\"feeOn\"),\n blob(6),\n\n seq(RewardInfoLayout, REWARD_NUM, \"rewardInfos\"),\n\n blob(8 * 16, \"tickArrayBitmap\"),\n\n seq(u64(), 4),\n // u64(\"totalFeesTokenA\"),\n // u64(\"totalFeesClaimedTokenA\"),\n // u64(\"totalFeesTokenB\"),\n // u64(\"totalFeesClaimedTokenB\"),\n\n u64(\"fundFeesTokenA\"),\n u64(\"fundFeesTokenB\"),\n\n u64(\"startTime\"),\n u64(\"recentEpoch\"),\n\n DynamicFeeInfoLayout.replicate(\"dynamicFeeInfo\"),\n seq(u64(), 46),\n]);\n\nexport const PositionRewardInfoLayout = struct([u128(\"growthInsideLastX64\"), u64(\"rewardAmountOwed\")]);\nexport const PersonalPositionLayout = struct([\n blob(8),\n u8(\"bump\"),\n publicKey(\"nftMint\"),\n publicKey(\"poolId\"),\n\n s32(\"tickLower\"),\n s32(\"tickUpper\"),\n u128(\"liquidity\"),\n u128(\"feeGrowthInsideLastX64A\"),\n u128(\"feeGrowthInsideLastX64B\"),\n u64(\"tokenFeesOwedA\"),\n u64(\"tokenFeesOwedB\"),\n\n seq(PositionRewardInfoLayout, REWARD_NUM, \"rewardInfos\"),\n u64(\"recentEpoch\"),\n seq(u64(), 7),\n]);\n\nexport const ProtocolPositionLayout = struct([\n blob(8),\n u8(\"bump\"),\n publicKey(\"poolId\"),\n s32(\"tickLower\"),\n s32(\"tickUpper\"),\n u128(\"liquidity\"),\n u128(\"feeGrowthInsideLastX64A\"),\n u128(\"feeGrowthInsideLastX64B\"),\n u64(\"tokenFeesOwedA\"),\n u64(\"tokenFeesOwedB\"),\n seq(u128(), REWARD_NUM, \"rewardGrowthInside\"),\n u64(\"recentEpoch\"),\n seq(u64(), 7),\n]);\n\nexport const TickLayout = struct([\n s32(\"tick\"),\n i128(\"liquidityNet\"),\n u128(\"liquidityGross\"),\n u128(\"feeGrowthOutsideX64A\"),\n u128(\"feeGrowthOutsideX64B\"),\n seq(u128(), REWARD_NUM, \"rewardGrowthsOutsideX64\"),\n\n u64(\"orderPhase\"),\n u64(\"ordersAmount\"),\n u64(\"partFilledOrdersRemaining\"),\n u128(\"unfilledRatioX64\"),\n seq(u32(), 3),\n]);\n\nexport const TickArrayLayout = struct([\n blob(8),\n publicKey(\"poolId\"),\n s32(\"startTickIndex\"),\n seq(TickLayout, TICK_ARRAY_SIZE, \"ticks\"),\n u8(\"initializedTickCount\"),\n u64(\"recentEpoch\"),\n seq(u8(), 107),\n]);\n\nexport const OperationLayout = struct([\n blob(8),\n u8(\"bump\"),\n seq(publicKey(), OPERATION_SIZE_USIZE, \"operationOwners\"),\n seq(publicKey(), WHITE_MINT_SIZE_USIZE, \"whitelistMints\"),\n]);\n\nexport const LimitOrderLayout = struct([\n blob(8),\n publicKey(\"poolId\"),\n publicKey(\"owner\"),\n s32(\"tick\"),\n bool(\"zeroForOne\"),\n u64(\"orderPhase\"),\n u64(\"totalAmount\"),\n u64(\"filledAmount\"),\n u64(\"settleBase\"),\n u64(\"settleOutput\"),\n u64(\"openTime\"),\n u128(\"unfilledRatioX64\"),\n seq(u64(), 4),\n]);\n\nexport const TickArrayBitmapExtensionLayout = struct([\n blob(8),\n publicKey(\"poolId\"),\n\n blob(8 * 8 * EXTENSION_TICKARRAY_BITMAP_SIZE, \"positiveTickArrayBitmap\"),\n blob(8 * 8 * EXTENSION_TICKARRAY_BITMAP_SIZE, \"negativeTickArrayBitmap\"),\n]);\n\nexport const DynamicFeeConfigLayout = struct([\n blob(8),\n u16(\"index\"),\n u16(\"filterPeriod\"),\n u16(\"decayPeriod\"),\n u16(\"reductionFactor\"),\n u32(\"dynamicFeeControl\"),\n u32(\"maxVolatilityAccumulator\"),\n seq(u64(), 8),\n]);\n\nexport const LimitOrderNonceLayout = struct([\n blob(8),\n publicKey(\"wallet\"),\n u8(\"nonceIndex\"),\n u64(\"orderNonce\"),\n seq(u64(), 4),\n]);\n\nexport const LockPositionLayout = struct([\n u64(),\n u8(\"bump\"),\n publicKey(\"owner\"),\n publicKey(\"poolId\"),\n publicKey(\"positionId\"),\n publicKey(\"nftAccount\"),\n seq(u64(), 8),\n]);\n\nexport const LockClPositionLayoutV2 = struct([\n blob(8),\n u8(\"bump\"),\n publicKey(\"lockOwner\"),\n publicKey(\"poolId\"),\n publicKey(\"positionId\"),\n publicKey(\"nftAccount\"),\n publicKey(\"lockNftMint\"),\n u64(\"recentEpoch\"),\n seq(u64(), 8),\n]);\n\nexport type ClmmPositionLayout = ReturnType<typeof PersonalPositionLayout.decode>;\n"],"mappings":"AAAA,4CACA,gCCDA,+jBA+DO,GAAM,GAAS,EAoBT,EAAY,EAqClB,GAAM,GAAO,EAYb,GAAM,GAAK,EACL,EAAM,EAeZ,GAAM,GAAM,EA+BZ,GAAM,GAAM,EAcZ,GAAM,GAAO,ED5Kb,mBAA8C,EAAc,CAIjE,YAAY,EAAc,EAAiB,EAAc,CAEvD,MAAM,EAAM,CAAQ,EACpB,KAAK,KAAO,EAAK,CAAI,EACrB,KAAK,OAAS,CAChB,CAGA,OAAO,EAAW,EAAS,EAAO,CAChC,GAAM,GAAM,GAAI,GAAG,KAAK,KAAK,OAAO,EAAG,CAAM,EAAG,GAAI,IAAI,EACxD,MAAI,MAAK,OACA,EAAI,SAAS,KAAK,KAAO,CAAC,EAAE,MAAM,EAEpC,CACT,CAGA,OAAO,EAAS,EAAW,EAAS,EAAW,CAC7C,MAAI,OAAO,IAAQ,UAAU,GAAM,GAAI,GAAG,CAAG,GACzC,KAAK,QACP,GAAM,EAAI,OAAO,KAAK,KAAO,CAAC,GAEzB,KAAK,KAAK,OAAO,EAAI,YAAY,OAAQ,KAAM,KAAK,IAAI,EAAG,EAAG,CAAM,CAC7E,CACF,EAgCO,WAAmC,EAA+B,CACvE,MAAO,IAAI,GAAK,EAAG,CAAQ,CAC7B,CAEO,WAAoC,EAA+B,CACxE,MAAO,IAAI,GAAK,EAAG,CAAQ,CAC7B,CAEO,WAAoC,EAA2B,CACpE,MAAO,IAAI,GAAS,EAAG,GAAO,CAAQ,CACxC,CAEO,WAAqC,EAA2B,CACrE,MAAO,IAAI,GAAS,GAAI,GAAO,CAAQ,CACzC,CAMO,WAAoC,EAA2B,CACpE,MAAO,IAAI,GAAS,EAAG,GAAM,CAAQ,CACvC,CAEO,WAAqC,EAA2B,CACrE,MAAO,IAAI,GAAS,GAAI,GAAM,CAAQ,CACxC,CAEO,mBAAyD,EAAa,CAK3E,YAAY,EAAmB,EAAyB,EAAwB,EAAc,CAE5F,MAAM,EAAO,KAAM,CAAQ,EAC3B,KAAK,OAAS,EACd,KAAK,QAAU,EACf,KAAK,QAAU,CACjB,CAEA,OAAO,EAAW,EAAoB,CACpC,MAAO,MAAK,QAAQ,KAAK,OAAO,OAAO,EAAG,CAAM,CAAC,CACnD,CAEA,OAAO,EAAQ,EAAW,EAAyB,CACjD,MAAO,MAAK,OAAO,OAAO,KAAK,QAAQ,CAAG,EAAG,EAAG,CAAM,CACxD,CAEA,QAAQ,EAAW,EAAyB,CAC1C,MAAO,MAAK,OAAO,QAAQ,EAAG,CAAM,CACtC,CACF,EAEO,WAA0C,EAAoC,CACnF,MAAO,IAAI,GACT,EAAK,EAAE,EACP,AAAC,GAAc,GAAI,GAAU,CAAC,EAC9B,AAAC,GAAmB,EAAI,SAAS,EACjC,CACF,CACF,CA8CO,WAAqC,EAAkC,CAC5E,MAAO,IAAI,GAAc,EAAI,EAAG,EAAY,EAAY,CAAQ,CAClE,CAEO,WAAoB,EAAwB,CACjD,GAAI,IAAU,EACZ,MAAO,GACF,GAAI,IAAU,EACnB,MAAO,GAET,KAAM,IAAI,OAAM,iBAAmB,CAAK,CAC1C,CAEO,WAAoB,EAAwB,CACjD,MAAO,GAAQ,EAAI,CACrB,CAyEO,mBAAiE,EAAoB,CAE1F,OAAO,EAAW,EAAoB,CACpC,MAAO,OAAM,OAAO,EAAG,CAAM,CAC/B,CACF,EAEO,WACL,EACA,EACA,EAWM,CAEN,MAAO,IAAI,GAAU,EAAQ,EAAU,CAAc,CACvD,CAwCO,WACL,EACA,EACA,EACuB,CACvB,GAAI,GACE,EACJ,MAAO,IAAU,SACb,EACA,EAAK,CAAK,EACR,EAAM,SAAS,EACf,GAAI,OAAM,EAAuE,CACjF,IAAI,EAAQ,EAAe,CACzB,GAAI,CAAC,EAAa,CAEhB,GAAM,GAAgB,QAAQ,IAAI,EAAQ,OAAO,EAGjD,EAAc,EAAK,CAAa,EAAI,EAAc,SAAS,EAAI,EAG/D,QAAQ,IAAI,EAAQ,QAAS,CAAW,CAC1C,CACA,MAAO,SAAQ,IAAI,EAAQ,CAAQ,CACrC,EACA,IAAI,EAAQ,EAAU,EAAY,CAChC,MAAI,KAAa,SACf,GAAc,GAET,QAAQ,IAAI,EAAQ,EAAU,CAAK,CAC5C,CACF,CAAC,EAGP,MAAO,GAAK,EAAe,EAAY,CAAQ,CACjD,CEvXA,qBAEO,GAAM,IAAM,GAAI,GAAG,CAAC,EAAE,KAAK,EAAE,EAI7B,GAAM,IAAO,GAAI,GAAG,CAAC,EAAE,KAAK,GAAG,EAEzB,GAAU,GAAI,GAAG,CAAC,EAAE,KAAK,EAAE,EAAE,KAAK,CAAC,EAEnC,GAAW,GAAI,GAAG,CAAC,EAAE,KAAK,GAAG,EAAE,KAAK,CAAC,EAM3C,GAAM,IAAqB,GAAI,GAAG,YAAY,EAExC,GAAqB,GAAI,GAAG,+BAA+B,EAE3D,GAAc,GAAI,GAAG,gBAAgB,EAErC,GAA+B,GAAI,GAAG,oBAAoB,EAE1D,GAA+B,GAAI,GAAG,sBAAsB,EAMlE,GAAM,GAAkB,GAElB,GAAmB,GAAI,GAAG,sBAAsB,EAEhD,GAA4D,CACvE,CAAE,IAAK,EAAG,OAAQ,GAAI,GAAG,mBAAoB,EAAE,CAAE,EACjD,CAAE,IAAK,EAAG,OAAQ,GAAI,GAAG,mBAAoB,EAAE,CAAE,EACjD,CAAE,IAAK,EAAG,OAAQ,GAAI,GAAG,mBAAoB,EAAE,CAAE,EACjD,CAAE,IAAK,EAAG,OAAQ,GAAI,GAAG,mBAAoB,EAAE,CAAE,EACjD,CAAE,IAAK,EAAG,OAAQ,GAAI,GAAG,mBAAoB,EAAE,CAAE,EACjD,CAAE,IAAK,EAAG,OAAQ,GAAI,GAAG,mBAAoB,EAAE,CAAE,EACjD,CAAE,IAAK,EAAG,OAAQ,GAAI,GAAG,mBAAoB,EAAE,CAAE,EACjD,CAAE,IAAK,EAAG,OAAQ,GAAI,GAAG,mBAAoB,EAAE,CAAE,EACjD,CAAE,IAAK,EAAG,OAAQ,GAAI,GAAG,mBAAoB,EAAE,CAAE,EACjD,CAAE,IAAK,EAAG,OAAQ,GAAI,GAAG,mBAAoB,EAAE,CAAE,EACjD,CAAE,IAAK,GAAI,OAAQ,GAAI,GAAG,mBAAoB,EAAE,CAAE,EAClD,CAAE,IAAK,GAAI,OAAQ,GAAI,GAAG,mBAAoB,EAAE,CAAE,EAClD,CAAE,IAAK,GAAI,OAAQ,GAAI,GAAG,mBAAoB,EAAE,CAAE,EAClD,CAAE,IAAK,GAAI,OAAQ,GAAI,GAAG,mBAAoB,EAAE,CAAE,EAClD,CAAE,IAAK,GAAI,OAAQ,GAAI,GAAG,mBAAoB,EAAE,CAAE,EAClD,CAAE,IAAK,GAAI,OAAQ,GAAI,GAAG,mBAAoB,EAAE,CAAE,EAClD,CAAE,IAAK,GAAI,OAAQ,GAAI,GAAG,kBAAmB,EAAE,CAAE,EACjD,CAAE,IAAK,GAAI,OAAQ,GAAI,GAAG,iBAAkB,EAAE,CAAE,EAChD,CAAE,IAAK,GAAI,OAAQ,GAAI,GAAG,eAAgB,EAAE,CAAE,CAChD,EAqBO,GAAM,GAAa,EAEb,EAAkB,IAGxB,GAAM,GAAuB,GACvB,EAAwB,IAExB,EAAkC,GAsCxC,GAAM,IAAU,GAAI,GAAG,CAAC,EAClB,GAAS,GAAI,GAAG,CAAC,EACjB,GAAkB,GAAI,GAAG,EAAE,EAkEjC,GAAM,IAAmB,GAAI,GAAG,sBAAsB,ECnLtD,GAAM,IAAmB,EAAO,CACrC,EAAK,CAAC,EACN,EAAG,MAAM,EACT,EAAI,OAAO,EACX,EAAU,OAAO,EACjB,EAAI,iBAAiB,EACrB,EAAI,cAAc,EAClB,EAAI,aAAa,EACjB,EAAI,aAAa,EACjB,EAAI,EAAI,EAAG,CAAC,EACZ,EAAU,WAAW,EACrB,EAAI,EAAI,EAAG,CAAC,CACd,CAAC,EAEY,EAAwB,EAAO,CAAC,EAAI,gBAAgB,EAAG,EAAI,gBAAgB,EAAG,EAAI,EAAI,EAAG,CAAC,CAAC,CAAC,EAE5F,GAAoB,EAAO,CACtC,EAAK,CAAC,EACN,EAAK,aAAa,EAClB,EAAI,aAAa,EACjB,EAAI,kBAAkB,EACtB,EAAU,QAAQ,EAClB,EAAI,EAAuB,EAAiB,cAAc,EAC1D,EAAI,EAAI,EAAG,CAAC,CACd,CAAC,EAEY,EAAuB,EAAO,CACzC,EAAI,cAAc,EAClB,EAAI,aAAa,EACjB,EAAI,iBAAiB,EACrB,EAAI,mBAAmB,EACvB,EAAI,0BAA0B,EAC9B,EAAI,2BAA2B,EAC/B,EAAI,qBAAqB,EACzB,EAAI,uBAAuB,EAC3B,EAAI,qBAAqB,EACzB,EAAI,EAAG,EAAG,EAAE,CACd,CAAC,EAEY,EAAmB,EAAO,CACrC,EAAG,OAAO,EACV,EAAI,UAAU,EACd,EAAI,SAAS,EACb,EAAI,gBAAgB,EACpB,EAAK,uBAAuB,EAC5B,EAAI,iBAAiB,EACrB,EAAI,SAAS,EACb,EAAU,MAAM,EAChB,EAAU,OAAO,EACjB,EAAU,SAAS,EACnB,EAAK,iBAAiB,CACxB,CAAC,EAEY,GAAiB,EAAO,CACnC,EAAK,CAAC,EACN,EAAG,MAAM,EACT,EAAU,UAAU,EACpB,EAAU,SAAS,EACnB,EAAU,OAAO,EACjB,EAAU,OAAO,EACjB,EAAU,QAAQ,EAClB,EAAU,QAAQ,EAClB,EAAU,eAAe,EAEzB,EAAG,eAAe,EAClB,EAAG,eAAe,EAClB,EAAI,aAAa,EACjB,EAAK,WAAW,EAChB,EAAK,cAAc,EACnB,EAAI,aAAa,EAEjB,EAAI,EAEJ,EAAK,qBAAqB,EAC1B,EAAK,qBAAqB,EAC1B,EAAI,oBAAoB,EACxB,EAAI,oBAAoB,EAExB,EAAI,EAAK,EAAG,CAAC,EAMb,EAAG,QAAQ,EACX,EAAG,OAAO,EACV,EAAK,CAAC,EAEN,EAAI,EAAkB,EAAY,aAAa,EAE/C,EAAK,EAAI,GAAI,iBAAiB,EAE9B,EAAI,EAAI,EAAG,CAAC,EAMZ,EAAI,gBAAgB,EACpB,EAAI,gBAAgB,EAEpB,EAAI,WAAW,EACf,EAAI,aAAa,EAEjB,EAAqB,UAAU,gBAAgB,EAC/C,EAAI,EAAI,EAAG,EAAE,CACf,CAAC,EAEY,GAA2B,EAAO,CAAC,EAAK,qBAAqB,EAAG,EAAI,kBAAkB,CAAC,CAAC,EACxF,GAAyB,EAAO,CAC3C,EAAK,CAAC,EACN,EAAG,MAAM,EACT,EAAU,SAAS,EACnB,EAAU,QAAQ,EAElB,EAAI,WAAW,EACf,EAAI,WAAW,EACf,EAAK,WAAW,EAChB,EAAK,yBAAyB,EAC9B,EAAK,yBAAyB,EAC9B,EAAI,gBAAgB,EACpB,EAAI,gBAAgB,EAEpB,EAAI,GAA0B,EAAY,aAAa,EACvD,EAAI,aAAa,EACjB,EAAI,EAAI,EAAG,CAAC,CACd,CAAC,EAEY,GAAyB,EAAO,CAC3C,EAAK,CAAC,EACN,EAAG,MAAM,EACT,EAAU,QAAQ,EAClB,EAAI,WAAW,EACf,EAAI,WAAW,EACf,EAAK,WAAW,EAChB,EAAK,yBAAyB,EAC9B,EAAK,yBAAyB,EAC9B,EAAI,gBAAgB,EACpB,EAAI,gBAAgB,EACpB,EAAI,EAAK,EAAG,EAAY,oBAAoB,EAC5C,EAAI,aAAa,EACjB,EAAI,EAAI,EAAG,CAAC,CACd,CAAC,EAEY,GAAa,EAAO,CAC/B,EAAI,MAAM,EACV,EAAK,cAAc,EACnB,EAAK,gBAAgB,EACrB,EAAK,sBAAsB,EAC3B,EAAK,sBAAsB,EAC3B,EAAI,EAAK,EAAG,EAAY,yBAAyB,EAEjD,EAAI,YAAY,EAChB,EAAI,cAAc,EAClB,EAAI,2BAA2B,EAC/B,EAAK,kBAAkB,EACvB,EAAI,EAAI,EAAG,CAAC,CACd,CAAC,EAEY,GAAkB,EAAO,CACpC,EAAK,CAAC,EACN,EAAU,QAAQ,EAClB,EAAI,gBAAgB,EACpB,EAAI,GAAY,EAAiB,OAAO,EACxC,EAAG,sBAAsB,EACzB,EAAI,aAAa,EACjB,EAAI,EAAG,EAAG,GAAG,CACf,CAAC,EAEY,GAAkB,EAAO,CACpC,EAAK,CAAC,EACN,EAAG,MAAM,EACT,EAAI,EAAU,EAAG,EAAsB,iBAAiB,EACxD,EAAI,EAAU,EAAG,EAAuB,gBAAgB,CAC1D,CAAC,EAEY,GAAmB,EAAO,CACrC,EAAK,CAAC,EACN,EAAU,QAAQ,EAClB,EAAU,OAAO,EACjB,EAAI,MAAM,EACV,EAAK,YAAY,EACjB,EAAI,YAAY,EAChB,EAAI,aAAa,EACjB,EAAI,cAAc,EAClB,EAAI,YAAY,EAChB,EAAI,cAAc,EAClB,EAAI,UAAU,EACd,EAAK,kBAAkB,EACvB,EAAI,EAAI,EAAG,CAAC,CACd,CAAC,EAEY,GAAiC,EAAO,CACnD,EAAK,CAAC,EACN,EAAU,QAAQ,EAElB,EAAK,EAAI,EAAI,EAAiC,yBAAyB,EACvE,EAAK,EAAI,EAAI,EAAiC,yBAAyB,CACzE,CAAC,EAEY,GAAyB,EAAO,CAC3C,EAAK,CAAC,EACN,EAAI,OAAO,EACX,EAAI,cAAc,EAClB,EAAI,aAAa,EACjB,EAAI,iBAAiB,EACrB,EAAI,mBAAmB,EACvB,EAAI,0BAA0B,EAC9B,EAAI,EAAI,EAAG,CAAC,CACd,CAAC,EAEY,GAAwB,EAAO,CAC1C,EAAK,CAAC,EACN,EAAU,QAAQ,EAClB,EAAG,YAAY,EACf,EAAI,YAAY,EAChB,EAAI,EAAI,EAAG,CAAC,CACd,CAAC,EAEY,GAAqB,EAAO,CACvC,EAAI,EACJ,EAAG,MAAM,EACT,EAAU,OAAO,EACjB,EAAU,QAAQ,EAClB,EAAU,YAAY,EACtB,EAAU,YAAY,EACtB,EAAI,EAAI,EAAG,CAAC,CACd,CAAC,EAEY,GAAyB,EAAO,CAC3C,EAAK,CAAC,EACN,EAAG,MAAM,EACT,EAAU,WAAW,EACrB,EAAU,QAAQ,EAClB,EAAU,YAAY,EACtB,EAAU,YAAY,EACtB,EAAU,aAAa,EACvB,EAAI,aAAa,EACjB,EAAI,EAAI,EAAG,CAAC,CACd,CAAC","names":[]}