@taquito/michel-codec 12.1.1 → 13.0.1
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.
- package/dist/lib/michelson-typecheck.js +3 -1
- package/dist/lib/michelson-typecheck.js.map +1 -1
- package/dist/lib/michelson-types.js.map +1 -1
- package/dist/lib/michelson-validator.js +5 -0
- package/dist/lib/michelson-validator.js.map +1 -1
- package/dist/lib/utils.js +2 -0
- package/dist/lib/utils.js.map +1 -1
- package/dist/lib/version.js +2 -2
- package/dist/taquito-michel-codec.es6.js +13 -4
- package/dist/taquito-michel-codec.es6.js.map +1 -1
- package/dist/taquito-michel-codec.umd.js +13 -4
- package/dist/taquito-michel-codec.umd.js.map +1 -1
- package/dist/types/michelson-types.d.ts +2 -2
- package/dist/types/utils.d.ts +1 -1
- package/package.json +9 -10
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"taquito-michel-codec.es6.js","sources":["../src/micheline.ts","../src/scan.ts","../src/michelson-types.ts","../src/macros.ts","../src/global-constants.ts","../src/micheline-parser.ts","../src/micheline-emitter.ts","../src/base58.ts","../src/error.ts","../src/utils.ts","../src/michelson-validator.ts","../src/binary.ts","../src/michelson-typecheck.ts","../src/michelson-contract.ts","../src/formatters.ts","../src/version.ts"],"sourcesContent":["// Michelson abstract syntax tree types https://tezos.gitlab.io/whitedoc/michelson.html#concrete-syntax\n\nexport type SourceReference = {\n first: number;\n last: number;\n macro?: Expr;\n globalConstant?: Expr;\n};\n\nexport const sourceReference: unique symbol = Symbol('source_reference');\n\nexport interface Node {\n [sourceReference]?: SourceReference;\n}\n\n/**\n * An AST node representing Michelson string literal.\n */\nexport interface StringLiteral extends Node {\n string: string;\n}\n\n/**\n * An AST node representing Michelson int literal.\n */\nexport interface IntLiteral<T extends string = string> extends Node {\n int: T;\n}\n\n/**\n * An AST node representing Michelson bytes literal.\n */\nexport interface BytesLiteral extends Node {\n bytes: string;\n}\n\n/**\n * An AST node representing Michelson primitive.\n */\nexport interface Prim<PT extends string = string, AT extends Expr[] = Expr[]> extends Node {\n prim: PT;\n args?: AT;\n annots?: string[];\n}\n\nexport type List<T extends Expr> = T[] & Node;\n\n// eslint-disable-next-line @typescript-eslint/no-empty-interface\ninterface ExprList extends List<Expr> {}\n\n/**\n * An AST node representing valid Michelson expression. Directly corresponds to JSON-encoded Michelson node\n */\n\nexport type Expr = Prim | StringLiteral | IntLiteral | BytesLiteral | ExprList;\n","/**\n * @category Error\n * @description Error that indicates a failure when performing the scan step when parsing Michelson\n */\nexport class ScanError extends Error {\n constructor(public src: string, public idx: number, message?: string) {\n super(message);\n Object.setPrototypeOf(this, ScanError.prototype);\n }\n}\n\nexport enum Literal {\n Comment,\n Number,\n String,\n Bytes,\n Ident,\n}\n\nexport type TokenType = '(' | ')' | '{' | '}' | ';' | Literal;\n\nconst isSpace = new RegExp('\\\\s');\nconst isIdentStart = new RegExp('[:@%_A-Za-z]');\nconst isIdent = new RegExp('[@%_\\\\.A-Za-z0-9]');\nconst isDigit = new RegExp('[0-9]');\nconst isHex = new RegExp('[0-9a-fA-F]');\n\nexport interface Token {\n t: TokenType;\n v: string;\n first: number;\n last: number;\n}\n\nexport function* scan(src: string, scanComments = false): Generator<Token, void> {\n let i = 0;\n while (i < src.length) {\n // Skip space\n while (i < src.length && isSpace.test(src[i])) {\n i++;\n }\n if (i === src.length) {\n return;\n }\n\n const s = src[i];\n const start = i;\n if (isIdentStart.test(s)) {\n // Identifier\n i++;\n while (i < src.length && isIdent.test(src[i])) {\n i++;\n }\n yield { t: Literal.Ident, v: src.slice(start, i), first: start, last: i };\n } else if (src.length - i > 1 && src.substr(i, 2) === '0x') {\n // Bytes\n i += 2;\n while (i < src.length && isHex.test(src[i])) {\n i++;\n }\n if (((i - start) & 1) !== 0) {\n throw new ScanError(src, i, 'Bytes literal length is expected to be power of two');\n }\n yield { t: Literal.Bytes, v: src.slice(start, i), first: start, last: i };\n } else if (isDigit.test(s) || s === '-') {\n // Number\n if (s === '-') {\n i++;\n }\n const ii = i;\n while (i < src.length && isDigit.test(src[i])) {\n i++;\n }\n if (ii === i) {\n throw new ScanError(src, i, 'Number literal is too short');\n }\n yield { t: Literal.Number, v: src.slice(start, i), first: start, last: i };\n } else if (s === '\"') {\n // String\n i++;\n let esc = false;\n for (; i < src.length && (esc || src[i] !== '\"'); i++) {\n if (!esc && src[i] === '\\\\') {\n esc = true;\n } else {\n esc = false;\n }\n }\n if (i === src.length) {\n throw new ScanError(src, i, 'Unterminated string literal');\n }\n i++;\n yield { t: Literal.String, v: src.slice(start, i), first: start, last: i };\n } else if (s === '#') {\n // Comment\n i++;\n while (i < src.length && src[i] !== '\\n') {\n i++;\n }\n if (scanComments) {\n yield { t: Literal.Comment, v: src.slice(start, i), first: start, last: i };\n }\n } else if (src.length - i > 1 && src.substr(i, 2) === '/*') {\n // C style comment\n i += 2;\n while (i < src.length && !(src.length - i > 1 && src.substr(i, 2) === '*/')) {\n i++;\n }\n if (i === src.length) {\n throw new ScanError(src, i, 'Unterminated C style comment');\n }\n i += 2;\n if (scanComments) {\n yield { t: Literal.Comment, v: src.slice(start, i), first: start, last: i };\n }\n } else if (s === '(' || s === ')' || s === '{' || s === '}' || s === ';') {\n i++;\n yield { t: s, v: s, first: start, last: i };\n } else {\n throw new ScanError(src, i, `Invalid character at offset ${i}: \\`${s}'`);\n }\n }\n}\n","/* eslint-disable @typescript-eslint/no-empty-interface */\nimport { Prim, Expr, IntLiteral, StringLiteral, BytesLiteral, List, Node } from './micheline';\n\ninterface Prim0<PT extends string = string> extends Prim<PT> {\n args?: never;\n}\ninterface PrimX<PT extends string = string, AT extends Expr[] = Expr[]> extends Prim<PT, AT> {\n args: AT;\n}\n\n// Instructions\ntype MichelsonNoArgInstructionID =\n | 'ABS'\n | 'ADD'\n | 'ADDRESS'\n | 'AMOUNT'\n | 'AND'\n | 'APPLY'\n | 'BALANCE'\n | 'BLAKE2B'\n | 'CAR'\n | 'CDR'\n | 'CHAIN_ID'\n | 'CHECK_SIGNATURE'\n | 'COMPARE'\n | 'CONCAT'\n | 'CONS'\n | 'EDIV'\n | 'EQ'\n | 'EXEC'\n | 'FAILWITH'\n | 'GE'\n | 'GET_AND_UPDATE'\n | 'GT'\n | 'HASH_KEY'\n | 'IMPLICIT_ACCOUNT'\n | 'INT'\n | 'ISNAT'\n | 'JOIN_TICKETS'\n | 'KECCAK'\n | 'LE'\n | 'LEVEL'\n | 'LSL'\n | 'LSR'\n | 'LT'\n | 'MEM'\n | 'MUL'\n | 'NEG'\n | 'NEQ'\n | 'NEVER'\n | 'NOT'\n | 'NOW'\n | 'OR'\n | 'PACK'\n | 'PAIRING_CHECK'\n | 'READ_TICKET'\n | 'SAPLING_VERIFY_UPDATE'\n | 'SELF'\n | 'SELF_ADDRESS'\n | 'SENDER'\n | 'SET_DELEGATE'\n | 'SHA256'\n | 'SHA3'\n | 'SHA512'\n | 'SIZE'\n | 'SLICE'\n | 'SOME'\n | 'SOURCE'\n | 'SPLIT_TICKET'\n | 'SUB'\n | 'SUB_MUTEZ'\n | 'SWAP'\n | 'TICKET'\n | 'TOTAL_VOTING_POWER'\n | 'TRANSFER_TOKENS'\n | 'UNIT'\n | 'VOTING_POWER'\n | 'XOR'\n | 'RENAME'\n | 'OPEN_CHEST';\n\ntype MichelsonRegularInstructionID =\n | 'CONTRACT'\n | 'CREATE_CONTRACT'\n | 'DIG'\n | 'DIP'\n | 'DROP'\n | 'DUG'\n | 'DUP'\n | 'EMPTY_BIG_MAP'\n | 'EMPTY_MAP'\n | 'EMPTY_SET'\n | 'GET'\n | 'IF'\n | 'IF_CONS'\n | 'IF_LEFT'\n | 'IF_NONE'\n | 'ITER'\n | 'LAMBDA'\n | 'LEFT'\n | 'LOOP'\n | 'LOOP_LEFT'\n | 'MAP'\n | 'NIL'\n | 'NONE'\n | 'PAIR'\n | 'PUSH'\n | 'RIGHT'\n | 'SAPLING_EMPTY_STATE'\n | 'UNPACK'\n | 'UNPAIR'\n | 'UPDATE'\n | 'CAST'\n | 'VIEW'\n // legacy\n | 'CREATE_ACCOUNT'\n | 'STEPS_TO_QUOTA';\n\nexport type MichelsonInstructionID = MichelsonNoArgInstructionID | MichelsonRegularInstructionID;\ntype InstrPrim<PT extends MichelsonInstructionID, AT extends Expr[]> = Prim<PT, AT>;\ntype Instr0<PT extends MichelsonNoArgInstructionID> = Prim0<PT>;\ntype InstrX<PT extends MichelsonRegularInstructionID, AT extends Expr[]> = PrimX<PT, AT>;\n\nexport type MichelsonCode = InstructionList | MichelsonInstruction;\nexport interface InstructionList extends List<MichelsonCode> {}\n\nexport type MichelsonNoArgInstruction = Instr0<MichelsonNoArgInstructionID>;\nexport type MichelsonInstruction =\n | MichelsonNoArgInstruction\n | InstrX<'DIG' | 'DUG' | 'SAPLING_EMPTY_STATE', [IntLiteral]>\n | InstrX<'NONE' | 'LEFT' | 'RIGHT' | 'NIL' | 'CAST', [MichelsonType]>\n | InstrX<'IF_NONE' | 'IF_LEFT' | 'IF_CONS' | 'IF', [InstructionList, InstructionList]>\n | InstrX<'MAP' | 'ITER' | 'LOOP' | 'LOOP_LEFT' | 'DIP', [InstructionList]>\n | InstrX<'UNPACK', [MichelsonType]>\n | InstrX<'CONTRACT', [MichelsonType]>\n | InstrX<'CREATE_CONTRACT', [MichelsonContract]>\n | InstrX<'PUSH', [MichelsonType, MichelsonData]>\n | InstrX<'EMPTY_SET', [MichelsonType]>\n | InstrX<'EMPTY_MAP', [MichelsonType, MichelsonType]>\n | InstrX<'EMPTY_BIG_MAP', [MichelsonType, MichelsonType]>\n | InstrX<'LAMBDA', [MichelsonType, MichelsonType, InstructionList]>\n | InstrX<'DIP', [IntLiteral, InstructionList] | [InstructionList]>\n | InstrX<'VIEW', [StringLiteral, MichelsonType]>\n | InstrPrim<'DROP' | 'PAIR' | 'UNPAIR' | 'DUP' | 'GET' | 'UPDATE', [IntLiteral]>;\n\n// Types\n\nexport type MichelsonSimpleComparableTypeID =\n | 'string'\n | 'nat'\n | 'int'\n | 'bytes'\n | 'bool'\n | 'mutez'\n | 'key_hash'\n | 'address'\n | 'timestamp'\n | 'never'\n | 'key'\n | 'unit'\n | 'signature'\n | 'chain_id';\n\nexport type MichelsonTypeID =\n | MichelsonSimpleComparableTypeID\n | 'option'\n | 'list'\n | 'set'\n | 'contract'\n | 'operation'\n | 'pair'\n | 'or'\n | 'lambda'\n | 'map'\n | 'big_map'\n | 'sapling_transaction'\n | 'sapling_state'\n | 'ticket'\n | 'bls12_381_g1'\n | 'bls12_381_g2'\n | 'bls12_381_fr'\n | 'chest_key'\n | 'chest';\n\ntype Type0<PT extends MichelsonTypeID> = Prim0<PT>;\ntype TypeX<PT extends MichelsonTypeID, AT extends Expr[]> = PrimX<PT, AT>;\n\n// Michelson types\n\nexport const refContract: unique symbol = Symbol('ref_contract');\nexport interface MichelsonTypeAddress extends Type0<'address'> {\n [refContract]?: MichelsonTypeContract<MichelsonType>;\n}\n\nexport type MichelsonTypeInt = Type0<'int'>;\nexport type MichelsonTypeNat = Type0<'nat'>;\nexport type MichelsonTypeString = Type0<'string'>;\nexport type MichelsonTypeBytes = Type0<'bytes'>;\nexport type MichelsonTypeMutez = Type0<'mutez'>;\nexport type MichelsonTypeBool = Type0<'bool'>;\nexport type MichelsonTypeKeyHash = Type0<'key_hash'>;\nexport type MichelsonTypeTimestamp = Type0<'timestamp'>;\nexport type MichelsonTypeKey = Type0<'key'>;\nexport type MichelsonTypeUnit = Type0<'unit'>;\nexport type MichelsonTypeSignature = Type0<'signature'>;\nexport type MichelsonTypeOperation = Type0<'operation'>;\nexport type MichelsonTypeChainID = Type0<'chain_id'>;\nexport type MichelsonTypeNever = Type0<'never'>;\nexport type MichelsonTypeBLS12_381_G1 = Type0<'bls12_381_g1'>;\nexport type MichelsonTypeBLS12_381_G2 = Type0<'bls12_381_g2'>;\nexport type MichelsonTypeBLS12_381_FR = Type0<'bls12_381_fr'>;\nexport type MichelsonTypeChestKey = Type0<'chest_key'>;\nexport type MichelsonTypeChest = Type0<'chest'>;\n\ntype TypeList<T extends MichelsonType[]> = T & Node;\nexport type MichelsonTypePair<T extends MichelsonType[]> = TypeX<'pair', T> | TypeList<T>;\n\nexport interface MichelsonTypeOption<T extends MichelsonType> extends TypeX<'option', [T]> {}\nexport interface MichelsonTypeList<T extends MichelsonType> extends TypeX<'list', [T]> {}\nexport interface MichelsonTypeContract<T extends MichelsonType> extends TypeX<'contract', [T]> {}\nexport interface MichelsonTypeOr<T extends [MichelsonType, MichelsonType]> extends TypeX<'or', T> {}\nexport interface MichelsonTypeLambda<Arg extends MichelsonType, Ret extends MichelsonType>\n extends TypeX<'lambda', [Arg, Ret]> {}\nexport interface MichelsonTypeSet<T extends MichelsonType> extends TypeX<'set', [T]> {}\nexport interface MichelsonTypeMap<K extends MichelsonType, V extends MichelsonType>\n extends TypeX<'map', [K, V]> {}\nexport interface MichelsonTypeBigMap<K extends MichelsonType, V extends MichelsonType>\n extends TypeX<'big_map', [K, V]> {}\nexport interface MichelsonTypeSaplingState<S extends string = string>\n extends TypeX<'sapling_state', [IntLiteral<S>]> {}\nexport interface MichelsonTypeSaplingTransaction<S extends string = string>\n extends TypeX<'sapling_transaction', [IntLiteral<S>]> {}\nexport interface MichelsonTypeTicket<T extends MichelsonType> extends TypeX<'ticket', [T]> {}\n\nexport type MichelsonType<T extends MichelsonTypeID = MichelsonTypeID> = T extends 'int'\n ? MichelsonTypeInt\n : T extends 'nat'\n ? MichelsonTypeNat\n : T extends 'string'\n ? MichelsonTypeString\n : T extends 'bytes'\n ? MichelsonTypeBytes\n : T extends 'mutez'\n ? MichelsonTypeMutez\n : T extends 'bool'\n ? MichelsonTypeBool\n : T extends 'key_hash'\n ? MichelsonTypeKeyHash\n : T extends 'timestamp'\n ? MichelsonTypeTimestamp\n : T extends 'address'\n ? MichelsonTypeAddress\n : T extends 'key'\n ? MichelsonTypeKey\n : T extends 'unit'\n ? MichelsonTypeUnit\n : T extends 'signature'\n ? MichelsonTypeSignature\n : T extends 'operation'\n ? MichelsonTypeOperation\n : T extends 'chain_id'\n ? MichelsonTypeChainID\n : T extends 'option'\n ? MichelsonTypeOption<MichelsonType>\n : T extends 'list'\n ? MichelsonTypeList<MichelsonType>\n : T extends 'contract'\n ? MichelsonTypeContract<MichelsonType>\n : T extends 'ticket'\n ? MichelsonTypeTicket<MichelsonType>\n : T extends 'pair'\n ? MichelsonTypePair<MichelsonType[]>\n : T extends 'or'\n ? MichelsonTypeOr<[MichelsonType, MichelsonType]>\n : T extends 'lambda'\n ? MichelsonTypeLambda<MichelsonType, MichelsonType>\n : T extends 'set'\n ? MichelsonTypeSet<MichelsonType>\n : T extends 'map'\n ? MichelsonTypeMap<MichelsonType, MichelsonType>\n : T extends 'big_map'\n ? MichelsonTypeBigMap<MichelsonType, MichelsonType>\n : T extends 'never'\n ? MichelsonTypeNever\n : T extends 'bls12_381_g1'\n ? MichelsonTypeBLS12_381_G1\n : T extends 'bls12_381_g2'\n ? MichelsonTypeBLS12_381_G2\n : T extends 'bls12_381_fr'\n ? MichelsonTypeBLS12_381_FR\n : T extends 'sapling_transaction'\n ? MichelsonTypeSaplingTransaction\n : T extends 'sapling_state'\n ? MichelsonTypeSaplingState\n : T extends 'chest_key'\n ? MichelsonTypeChestKey\n : MichelsonTypeChest;\n\n// Data\n\nexport type MichelsonDataID =\n | 'Unit'\n | 'True'\n | 'False'\n | 'None'\n | 'Pair'\n | 'Left'\n | 'Right'\n | 'Some';\n\ntype Data0<PT extends MichelsonDataID> = Prim0<PT>;\ntype DataX<PT extends MichelsonDataID, AT extends MichelsonData[]> = PrimX<PT, AT>;\n\nexport type MichelsonDataOption = DataX<'Some', [MichelsonData]> | Data0<'None'>;\nexport type MichelsonDataOr = DataX<'Left' | 'Right', [MichelsonData]>;\ntype DataList<T extends MichelsonData[]> = T & Node;\nexport type MichelsonDataPair<T extends MichelsonData[]> = DataX<'Pair', T> | DataList<T>;\nexport type MichelsonMapElt = PrimX<'Elt', [MichelsonData, MichelsonData]>;\nexport type MichelsonMapEltList = List<MichelsonMapElt>;\n\nexport type MichelsonData =\n | IntLiteral\n | StringLiteral\n | BytesLiteral\n | Data0<'Unit' | 'True' | 'False'>\n | MichelsonDataOption\n | MichelsonDataOr\n | DataList<MichelsonData[]>\n | MichelsonDataPair<MichelsonData[]>\n | InstructionList\n | MichelsonMapEltList;\n\n// Top level script sections\n\nexport type MichelsonSectionID = 'parameter' | 'storage' | 'code' | 'view';\ntype SectionPrim<PT extends MichelsonSectionID, AT extends Expr[]> = PrimX<PT, AT>;\n\nexport type MichelsonContractParameter = SectionPrim<'parameter', [MichelsonType]>;\nexport type MichelsonContractStorage = SectionPrim<'storage', [MichelsonType]>;\nexport type MichelsonContractCode = SectionPrim<'code', [InstructionList]>;\nexport type MichelsonContractView = SectionPrim<\n 'view',\n [StringLiteral, MichelsonType, MichelsonType, InstructionList]\n>;\n\nexport type MichelsonContract = MichelsonContractSection[];\n\nexport type MichelsonContractSection<T extends MichelsonSectionID = MichelsonSectionID> =\n T extends 'parameter'\n ? MichelsonContractParameter\n : T extends 'storage'\n ? MichelsonContractStorage\n : T extends 'view'\n ? MichelsonContractView\n : MichelsonContractCode;\n\n// Code analysis types\nexport interface MichelsonTypeFailed {\n failed: MichelsonType;\n level: number;\n}\n\nexport type MichelsonReturnType = MichelsonType[] | MichelsonTypeFailed;\n\nexport enum Protocol {\n Ps9mPmXa = 'Ps9mPmXaRzmzk35gbAYNCAw6UXdE2qoABTHbN2oEEc1qM7CwT9P',\n PtCJ7pwo = 'PtCJ7pwoxe8JasnHY8YonnLYjcVHmhiARPJvqcC6VfHT5s8k8sY',\n PsYLVpVv = 'PsYLVpVvgbLhAhoqAkMFUo6gudkJ9weNXhUYCiLDzcUpFpkk8Wt',\n PsddFKi3 = 'PsddFKi32cMJ2qPjf43Qv5GDWLDPZb3T3bF6fLKiF5HtvHNU7aP',\n Pt24m4xi = 'Pt24m4xiPbLDhVgVfABUjirbmda3yohdN82Sp9FeuAXJ4eV9otd',\n PsBABY5H = 'PsBABY5HQTSkA4297zNHfsZNKtxULfL18y95qb3m53QJiXGmrbU',\n PsBabyM1 = 'PsBabyM1eUXZseaJdmXFApDSBqj8YBfwELoxZHHW77EMcAbbwAS',\n PsCARTHA = 'PsCARTHAGazKbHtnKfLzQg3kms52kSRpgnDY982a9oYsSXRLQEb',\n PsDELPH1 = 'PsDELPH1Kxsxt8f9eWbxQeRxkjfbxoqM52jvs5Y5fBxWWh4ifpo',\n PtEdoTez = 'PtEdoTezd3RHSC31mpxxo1npxFjoWWcFgQtxapi51Z8TLu6v6Uq',\n PtEdo2Zk = 'PtEdo2ZkT9oKpimTah6x2embF25oss54njMuPzkJTEi5RqfdZFA',\n PsFLoren = 'PsFLorenaUUuikDWvMDr6fGBRG8kt3e3D3fHoXK1j1BFRxeSH4i',\n PsFLorena = 'PsFLorenaUUuikDWvMDr6fGBRG8kt3e3D3fHoXK1j1BFRxeSH4i',\n PtGRANAD = 'PtGRANADsDU8R9daYKAgWnQYAJ64omN1o3KMGVCykShA97vQbvV',\n PtGRANADs = 'PtGRANADsDU8R9daYKAgWnQYAJ64omN1o3KMGVCykShA97vQbvV',\n PtHangzH = 'PtHangzHogokSuiMHemCuowEavgYTP8J5qQ9fQS793MHYFpCY3r',\n PtHangz2 = 'PtHangz2aRngywmSRGGvrcTyMbbdpWdpFKuS4uMWxg2RaH9i1qx',\n PsiThaCa = 'PsiThaCaT47Zboaw71QWScM8sXeMM7bbQFncK9FLqYc6EKdpjVP',\n Psithaca2 = 'Psithaca2MLRFYargivpo7YvUr7wUDqyxrdhC5CQq78mRvimz6A',\n PtJakarta = 'PtJakartaiDz69SfDDLXJSiuZqTSeSKRDbKVZC8MNzJnvRjvnGw',\n PtJakart2 = 'PtJakart2xVj7pYXJBXrqHgd82rdkLey5ZeeGwDgPp9rhQUbSqY',\n ProtoALpha = 'ProtoALphaALphaALphaALphaALphaALphaALphaALphaDdp3zK', // temporary protocol hash\n}\n\nexport const DefaultProtocol = Protocol.Psithaca2;\n\nexport type ProtocolID = `${Protocol}`;\n\nconst protoLevel: Record<ProtocolID, number> = {\n Ps9mPmXaRzmzk35gbAYNCAw6UXdE2qoABTHbN2oEEc1qM7CwT9P: 0,\n PtCJ7pwoxe8JasnHY8YonnLYjcVHmhiARPJvqcC6VfHT5s8k8sY: 1,\n PsYLVpVvgbLhAhoqAkMFUo6gudkJ9weNXhUYCiLDzcUpFpkk8Wt: 2,\n PsddFKi32cMJ2qPjf43Qv5GDWLDPZb3T3bF6fLKiF5HtvHNU7aP: 3,\n Pt24m4xiPbLDhVgVfABUjirbmda3yohdN82Sp9FeuAXJ4eV9otd: 4,\n PsBABY5HQTSkA4297zNHfsZNKtxULfL18y95qb3m53QJiXGmrbU: 5,\n PsBabyM1eUXZseaJdmXFApDSBqj8YBfwELoxZHHW77EMcAbbwAS: 5,\n PsCARTHAGazKbHtnKfLzQg3kms52kSRpgnDY982a9oYsSXRLQEb: 6,\n PsDELPH1Kxsxt8f9eWbxQeRxkjfbxoqM52jvs5Y5fBxWWh4ifpo: 7,\n PtEdoTezd3RHSC31mpxxo1npxFjoWWcFgQtxapi51Z8TLu6v6Uq: 8,\n PtEdo2ZkT9oKpimTah6x2embF25oss54njMuPzkJTEi5RqfdZFA: 8,\n PsFLorenaUUuikDWvMDr6fGBRG8kt3e3D3fHoXK1j1BFRxeSH4i: 9,\n PtGRANADsDU8R9daYKAgWnQYAJ64omN1o3KMGVCykShA97vQbvV: 10,\n PtHangzHogokSuiMHemCuowEavgYTP8J5qQ9fQS793MHYFpCY3r: 11,\n PtHangz2aRngywmSRGGvrcTyMbbdpWdpFKuS4uMWxg2RaH9i1qx: 11,\n PsiThaCaT47Zboaw71QWScM8sXeMM7bbQFncK9FLqYc6EKdpjVP: 12,\n Psithaca2MLRFYargivpo7YvUr7wUDqyxrdhC5CQq78mRvimz6A: 12,\n PtJakartaiDz69SfDDLXJSiuZqTSeSKRDbKVZC8MNzJnvRjvnGw: 13,\n PtJakart2xVj7pYXJBXrqHgd82rdkLey5ZeeGwDgPp9rhQUbSqY: 13,\n ProtoALphaALphaALphaALphaALphaALphaALphaALphaDdp3zK: 14,\n};\n\nexport function ProtoGreaterOfEqual(a: ProtocolID, b: ProtocolID): boolean {\n return protoLevel[a] >= protoLevel[b];\n}\n\nexport function ProtoInferiorTo(a: ProtocolID, b: ProtocolID): boolean {\n return protoLevel[a] < protoLevel[b];\n}\n\nexport interface ProtocolOptions {\n protocol?: ProtocolID;\n}\n","import { Prim, Expr, IntLiteral } from './micheline';\nimport { DefaultProtocol, Protocol, ProtocolOptions, ProtoInferiorTo } from './michelson-types';\nimport { Tuple, NoArgs, ReqArgs, NoAnnots } from './utils';\n\n/**\n * @category Error\n * @description Indicates that an error has occurred preventing macros from being expanded in a plain Michelson input\n */\nexport class MacroError extends Error {\n constructor(public prim: Prim, message?: string) {\n super(message);\n Object.setPrototypeOf(this, MacroError.prototype);\n }\n}\n\nfunction assertArgs<N extends number>(\n ex: Prim,\n n: N\n): ex is N extends 0 ? NoArgs<Prim<string>> : ReqArgs<Prim<string, Tuple<N, Expr>>> {\n if ((n === 0 && ex.args === undefined) || ex.args?.length === n) {\n return true;\n }\n throw new MacroError(ex, `macro ${ex.prim} expects ${n} arguments, was given ${ex.args?.length}`);\n}\n\nfunction assertNoAnnots(ex: Prim): ex is NoAnnots<Prim> {\n if (ex.annots === undefined) {\n return true;\n }\n throw new MacroError(ex, `unexpected annotation on macro ${ex.prim}: ${ex.annots}`);\n}\n\nfunction assertIntArg(ex: Prim, arg: Expr): arg is IntLiteral {\n if ('int' in arg) {\n return true;\n }\n throw new MacroError(ex, `macro ${ex.prim} expects int argument`);\n}\n\ntype PT = [number, [string | null, string | null]];\n\nfunction parsePairUnpairExpr(\n p: Prim,\n expr: string,\n annotations: string[],\n agg: (l: PT[] | undefined, r: PT[] | undefined, top: PT) => PT[]\n): { r: PT[]; n: number; an: number } {\n let i = 0;\n let ai = 0;\n const ann: [string | null, string | null] = [null, null];\n\n // Left expression\n let lexpr: PT[] | undefined;\n if (i === expr.length) {\n throw new MacroError(p, `unexpected end: ${p.prim}`);\n }\n let c = expr[i++];\n switch (c) {\n case 'P': {\n const { r, n, an } = parsePairUnpairExpr(p, expr.slice(i), annotations.slice(ai), agg);\n lexpr = r;\n i += n;\n ai += an;\n break;\n }\n case 'A':\n if (ai !== annotations.length) {\n ann[0] = annotations[ai++];\n }\n break;\n default:\n throw new MacroError(p, `${p.prim}: unexpected character: ${c}`);\n }\n\n // Right expression\n let rexpr: PT[] | undefined;\n if (i === expr.length) {\n throw new MacroError(p, `unexpected end: ${p.prim}`);\n }\n c = expr[i++];\n switch (c) {\n case 'P': {\n const { r, n, an } = parsePairUnpairExpr(p, expr.slice(i), annotations.slice(ai), agg);\n rexpr = r.map<PT>(([v, a]) => [v + 1, a]);\n i += n;\n ai += an;\n break;\n }\n case 'I':\n if (ai !== annotations.length) {\n ann[1] = annotations[ai++];\n }\n break;\n default:\n throw new MacroError(p, `${p.prim}: unexpected character: ${c}`);\n }\n\n return { r: agg(lexpr, rexpr, [0, ann]), n: i, an: ai };\n}\n\nfunction parseSetMapCadr(p: Prim, expr: string, vann: string[], term: { a: Expr; d: Expr }): Expr {\n const c = expr[0];\n switch (c) {\n case 'A':\n return expr.length > 1\n ? [\n { prim: 'DUP' },\n {\n prim: 'DIP',\n args: [\n [{ prim: 'CAR', annots: ['@%%'] }, parseSetMapCadr(p, expr.slice(1), [], term)],\n ],\n },\n { prim: 'CDR', annots: ['@%%'] },\n { prim: 'SWAP' },\n { prim: 'PAIR', annots: ['%@', '%@', ...vann] },\n ]\n : term.a;\n\n case 'D':\n return expr.length > 1\n ? [\n { prim: 'DUP' },\n {\n prim: 'DIP',\n args: [\n [{ prim: 'CDR', annots: ['@%%'] }, parseSetMapCadr(p, expr.slice(1), [], term)],\n ],\n },\n { prim: 'CAR', annots: ['@%%'] },\n { prim: 'PAIR', annots: ['%@', '%@', ...vann] },\n ]\n : term.d;\n\n default:\n throw new MacroError(p, `${p.prim}: unexpected character: ${c}`);\n }\n}\n\nfunction trimLast<T>(a: T[], v: T): T[] {\n let l = a.length;\n while (l > 0 && a[l - 1] === v) {\n l--;\n }\n return a.slice(0, l);\n}\n\nfunction filterAnnotations(a?: string[]): {\n fields: string[];\n rest: string[];\n} {\n const fields: string[] = [];\n const rest: string[] = [];\n if (a !== undefined) {\n for (const v of a) {\n (v.length !== 0 && v[0] === '%' ? fields : rest).push(v);\n }\n }\n return { fields, rest };\n}\n\nfunction mkPrim({ prim, annots, args }: Prim): Prim {\n return {\n prim,\n ...(annots && { annots }),\n ...(args && { args }),\n };\n}\n\nconst pairRe = /^P[PAI]{3,}R$/;\nconst unpairRe = /^UNP[PAI]{2,}R$/;\nconst cadrRe = /^C[AD]{2,}R$/;\nconst setCadrRe = /^SET_C[AD]+R$/;\nconst mapCadrRe = /^MAP_C[AD]+R$/;\nconst diipRe = /^DI{2,}P$/;\nconst duupRe = /^DU+P$/;\n\nexport function expandMacros(ex: Prim, opt?: ProtocolOptions): Expr {\n const proto = opt?.protocol || DefaultProtocol;\n\n function mayRename(annots?: string[]): Prim[] {\n return annots !== undefined ? [{ prim: 'RENAME', annots }] : [];\n }\n\n switch (ex.prim) {\n // Compare\n case 'CMPEQ':\n case 'CMPNEQ':\n case 'CMPLT':\n case 'CMPGT':\n case 'CMPLE':\n case 'CMPGE':\n if (assertArgs(ex, 0)) {\n return [{ prim: 'COMPARE' }, mkPrim({ prim: ex.prim.slice(3), annots: ex.annots })];\n }\n break;\n\n case 'IFEQ':\n case 'IFNEQ':\n case 'IFLT':\n case 'IFGT':\n case 'IFLE':\n case 'IFGE':\n if (assertArgs(ex, 2)) {\n return [\n { prim: ex.prim.slice(2) },\n mkPrim({ prim: 'IF', annots: ex.annots, args: ex.args }),\n ];\n }\n break;\n\n case 'IFCMPEQ':\n case 'IFCMPNEQ':\n case 'IFCMPLT':\n case 'IFCMPGT':\n case 'IFCMPLE':\n case 'IFCMPGE':\n if (assertArgs(ex, 2)) {\n return [\n { prim: 'COMPARE' },\n { prim: ex.prim.slice(5) },\n mkPrim({ prim: 'IF', annots: ex.annots, args: ex.args }),\n ];\n }\n break;\n\n // Fail\n case 'FAIL':\n if (assertArgs(ex, 0) && assertNoAnnots(ex)) {\n return [{ prim: 'UNIT' }, { prim: 'FAILWITH' }];\n }\n break;\n\n // Assertion macros\n case 'ASSERT':\n if (assertArgs(ex, 0) && assertNoAnnots(ex)) {\n return [\n {\n prim: 'IF',\n args: [[], [[{ prim: 'UNIT' }, { prim: 'FAILWITH' }]]],\n },\n ];\n }\n break;\n\n case 'ASSERT_EQ':\n case 'ASSERT_NEQ':\n case 'ASSERT_LT':\n case 'ASSERT_GT':\n case 'ASSERT_LE':\n case 'ASSERT_GE':\n if (assertArgs(ex, 0) && assertNoAnnots(ex)) {\n return [\n { prim: ex.prim.slice(7) },\n {\n prim: 'IF',\n args: [[], [[{ prim: 'UNIT' }, { prim: 'FAILWITH' }]]],\n },\n ];\n }\n break;\n\n case 'ASSERT_CMPEQ':\n case 'ASSERT_CMPNEQ':\n case 'ASSERT_CMPLT':\n case 'ASSERT_CMPGT':\n case 'ASSERT_CMPLE':\n case 'ASSERT_CMPGE':\n if (assertArgs(ex, 0) && assertNoAnnots(ex)) {\n return [\n [{ prim: 'COMPARE' }, { prim: ex.prim.slice(10) }],\n {\n prim: 'IF',\n args: [[], [[{ prim: 'UNIT' }, { prim: 'FAILWITH' }]]],\n },\n ];\n }\n break;\n\n case 'ASSERT_NONE':\n if (assertArgs(ex, 0) && assertNoAnnots(ex)) {\n return [\n {\n prim: 'IF_NONE',\n args: [[], [[{ prim: 'UNIT' }, { prim: 'FAILWITH' }]]],\n },\n ];\n }\n break;\n\n case 'ASSERT_SOME':\n if (assertArgs(ex, 0)) {\n return [\n {\n prim: 'IF_NONE',\n args: [[[{ prim: 'UNIT' }, { prim: 'FAILWITH' }]], mayRename(ex.annots)],\n },\n ];\n }\n break;\n\n case 'ASSERT_LEFT':\n if (assertArgs(ex, 0)) {\n return [\n {\n prim: 'IF_LEFT',\n args: [mayRename(ex.annots), [[{ prim: 'UNIT' }, { prim: 'FAILWITH' }]]],\n },\n ];\n }\n break;\n\n case 'ASSERT_RIGHT':\n if (assertArgs(ex, 0)) {\n return [\n {\n prim: 'IF_LEFT',\n args: [[[{ prim: 'UNIT' }, { prim: 'FAILWITH' }]], mayRename(ex.annots)],\n },\n ];\n }\n break;\n\n // Syntactic conveniences\n\n case 'IF_SOME':\n if (assertArgs(ex, 2)) {\n return [mkPrim({ prim: 'IF_NONE', annots: ex.annots, args: [ex.args[1], ex.args[0]] })];\n }\n break;\n\n case 'IF_RIGHT':\n if (assertArgs(ex, 2)) {\n return [mkPrim({ prim: 'IF_LEFT', annots: ex.annots, args: [ex.args[1], ex.args[0]] })];\n }\n break;\n\n // CAR/CDR n\n case 'CAR':\n case 'CDR':\n if (ex.args !== undefined) {\n if (assertArgs(ex, 1) && assertIntArg(ex, ex.args[0])) {\n const n = parseInt(ex.args[0].int, 10);\n return mkPrim({\n prim: 'GET',\n args: [{ int: ex.prim === 'CAR' ? String(n * 2 + 1) : String(n * 2) }],\n annots: ex.annots,\n });\n }\n } else {\n return ex;\n }\n }\n\n // More syntactic conveniences\n\n // PAPPAIIR macro\n if (pairRe.test(ex.prim)) {\n if (assertArgs(ex, 0)) {\n const { fields, rest } = filterAnnotations(ex.annots);\n const { r } = parsePairUnpairExpr(ex, ex.prim.slice(1), fields, (l, r, top) => [\n ...(l || []),\n ...(r || []),\n top,\n ]);\n\n return r.map(([v, a], i) => {\n const ann = [\n ...trimLast(a, null).map((v) => (v === null ? '%' : v)),\n ...(v === 0 && i === r.length - 1 ? rest : []),\n ];\n\n const leaf = mkPrim({ prim: 'PAIR', annots: ann.length !== 0 ? ann : undefined });\n\n return v === 0\n ? leaf\n : {\n prim: 'DIP',\n args: v === 1 ? [[leaf]] : [{ int: String(v) }, [leaf]],\n };\n });\n }\n }\n\n // UNPAPPAIIR macro\n if (unpairRe.test(ex.prim)) {\n if (ProtoInferiorTo(proto, Protocol.PtEdo2Zk) && assertArgs(ex, 0)) {\n const { r } = parsePairUnpairExpr(ex, ex.prim.slice(3), ex.annots || [], (l, r, top) => [\n top,\n ...(r || []),\n ...(l || []),\n ]);\n return r.map(([v, a]) => {\n const leaf: Prim[] = [\n { prim: 'DUP' },\n mkPrim({ prim: 'CAR', annots: a[0] !== null ? [a[0]] : undefined }),\n {\n prim: 'DIP',\n args: [[mkPrim({ prim: 'CDR', annots: a[1] !== null ? [a[1]] : undefined })]],\n },\n ];\n\n return v === 0\n ? leaf\n : {\n prim: 'DIP',\n args: v === 1 ? [[leaf]] : [{ int: String(v) }, [leaf]],\n };\n });\n } else {\n if (ex.prim === 'UNPAIR') {\n return ex;\n }\n if (assertArgs(ex, 0)) {\n // 008_edo: annotations are deprecated\n const { r } = parsePairUnpairExpr(ex, ex.prim.slice(3), [], (l, r, top) => [\n top,\n ...(r || []),\n ...(l || []),\n ]);\n return r.map(([v]) => {\n const leaf = mkPrim({\n prim: 'UNPAIR',\n });\n\n return v === 0\n ? leaf\n : {\n prim: 'DIP',\n args: v === 1 ? [[leaf]] : [{ int: String(v) }, [leaf]],\n };\n });\n }\n }\n }\n\n // C[AD]+R macro\n if (cadrRe.test(ex.prim)) {\n if (assertArgs(ex, 0)) {\n const ch = [...ex.prim.slice(1, ex.prim.length - 1)];\n\n return ch.map<Prim>((c, i) => {\n const ann = i === ch.length - 1 ? ex.annots : undefined;\n switch (c) {\n case 'A':\n return mkPrim({ prim: 'CAR', annots: ann });\n case 'D':\n return mkPrim({ prim: 'CDR', annots: ann });\n default:\n throw new MacroError(ex, `unexpected character: ${c}`);\n }\n });\n }\n }\n\n // SET_C[AD]+R macro\n if (setCadrRe.test(ex.prim)) {\n if (assertArgs(ex, 0)) {\n const { fields, rest } = filterAnnotations(ex.annots);\n if (fields.length > 1) {\n throw new MacroError(ex, `unexpected annotation on macro ${ex.prim}: ${fields}`);\n }\n\n const term =\n fields.length !== 0\n ? {\n a: [\n { prim: 'DUP' },\n { prim: 'CAR', annots: fields },\n { prim: 'DROP' },\n { prim: 'CDR', annots: ['@%%'] },\n { prim: 'SWAP' },\n { prim: 'PAIR', annots: [fields[0], '%@'] },\n ],\n d: [\n { prim: 'DUP' },\n { prim: 'CDR', annots: fields },\n { prim: 'DROP' },\n { prim: 'CAR', annots: ['@%%'] },\n { prim: 'PAIR', annots: ['%@', fields[0]] },\n ],\n }\n : {\n a: [\n { prim: 'CDR', annots: ['@%%'] },\n { prim: 'SWAP' },\n { prim: 'PAIR', annots: ['%', '%@'] },\n ],\n d: [\n { prim: 'CAR', annots: ['@%%'] },\n { prim: 'PAIR', annots: ['%@', '%'] },\n ],\n };\n\n return parseSetMapCadr(ex, ex.prim.slice(5, ex.prim.length - 1), rest, term);\n }\n }\n\n // MAP_C[AD]+R macro\n if (mapCadrRe.test(ex.prim)) {\n if (assertArgs(ex, 1)) {\n const { fields } = filterAnnotations(ex.annots);\n if (fields.length > 1) {\n throw new MacroError(ex, `unexpected annotation on macro ${ex.prim}: ${fields}`);\n }\n\n const term = {\n a: [\n { prim: 'DUP' },\n { prim: 'CDR', annots: ['@%%'] },\n {\n prim: 'DIP',\n args: [\n [\n mkPrim({\n prim: 'CAR',\n annots: fields.length !== 0 ? ['@' + fields[0].slice(1)] : undefined,\n }),\n ex.args[0],\n ],\n ],\n },\n { prim: 'SWAP' },\n { prim: 'PAIR', annots: [fields.length !== 0 ? fields[0] : '%', '%@'] },\n ],\n d: [\n { prim: 'DUP' },\n mkPrim({\n prim: 'CDR',\n annots: fields.length !== 0 ? ['@' + fields[0].slice(1)] : undefined,\n }),\n ex.args[0],\n { prim: 'SWAP' },\n { prim: 'CAR', annots: ['@%%'] },\n { prim: 'PAIR', annots: ['%@', fields.length !== 0 ? fields[0] : '%'] },\n ],\n };\n\n return parseSetMapCadr(ex, ex.prim.slice(5, ex.prim.length - 1), [], term);\n }\n }\n\n // Expand deprecated DI...IP to [DIP n]\n if (diipRe.test(ex.prim)) {\n if (assertArgs(ex, 1)) {\n let n = 0;\n while (ex.prim[1 + n] === 'I') {\n n++;\n }\n return mkPrim({ prim: 'DIP', args: [{ int: String(n) }, ex.args[0]] });\n }\n }\n\n // Expand DU...UP and DUP n\n if (duupRe.test(ex.prim)) {\n let n = 0;\n while (ex.prim[1 + n] === 'U') {\n n++;\n }\n if (ProtoInferiorTo(proto, Protocol.PtEdo2Zk)) {\n if (n === 1) {\n if (ex.args === undefined) {\n return ex; // skip\n }\n if (assertArgs(ex, 1) && assertIntArg(ex, ex.args[0])) {\n n = parseInt(ex.args[0].int, 10);\n }\n } else {\n assertArgs(ex, 0);\n }\n\n if (n === 1) {\n return [mkPrim({ prim: 'DUP', annots: ex.annots })];\n } else if (n === 2) {\n return [\n {\n prim: 'DIP',\n args: [[mkPrim({ prim: 'DUP', annots: ex.annots })]],\n },\n { prim: 'SWAP' },\n ];\n } else {\n return [\n {\n prim: 'DIP',\n args: [{ int: String(n - 1) }, [mkPrim({ prim: 'DUP', annots: ex.annots })]],\n },\n {\n prim: 'DIG',\n args: [{ int: String(n) }],\n },\n ];\n }\n } else {\n if (n === 1) {\n return ex;\n }\n if (assertArgs(ex, 0)) {\n return mkPrim({ prim: 'DUP', args: [{ int: String(n) }], annots: ex.annots });\n }\n }\n }\n\n return ex;\n}\n","import { Prim, Expr } from './micheline';\nimport { GlobalConstantHashAndValue } from './micheline-parser';\n\nexport function expandGlobalConstants(ex: Prim, hashAndValue: GlobalConstantHashAndValue): Expr {\n if (\n ex.args !== undefined &&\n ex.args.length === 1 &&\n 'string' in ex.args[0] &&\n ex.args[0].string in hashAndValue\n ) {\n return hashAndValue[ex.args[0].string];\n }\n\n return ex;\n}\n","import { scan, Token, Literal } from './scan';\nimport {\n Expr,\n Prim,\n StringLiteral,\n IntLiteral,\n BytesLiteral,\n sourceReference,\n List,\n SourceReference,\n} from './micheline';\nimport { expandMacros } from './macros';\nimport { ProtocolOptions } from './michelson-types';\nimport { expandGlobalConstants } from './global-constants';\n\n/**\n * @category Error\n * @description Error indicating a failure when parsing Micheline expressions\n */\nexport class MichelineParseError extends Error {\n /**\n * @param token A token caused the error\n * @param message An error message\n */\n constructor(public token: Token | null, message?: string) {\n super(message);\n Object.setPrototypeOf(this, MichelineParseError.prototype);\n }\n}\n\n/**\n * @category Error\n * @description Error that inidicates a failure when parsing Micheline JSON\n */\nexport class JSONParseError extends Error {\n /**\n * @param node A node caused the error\n * @param message An error message\n */\n constructor(public node: unknown, message?: string) {\n super(message);\n Object.setPrototypeOf(this, JSONParseError.prototype);\n }\n}\n\nexport interface GlobalConstantHashAndValue {\n [globalConstantHash: string]: Expr;\n}\n\nconst errEOF = new MichelineParseError(null, 'Unexpected EOF');\n\nfunction isAnnotation(tok: Token): boolean {\n return tok.t === Literal.Ident && (tok.v[0] === '@' || tok.v[0] === '%' || tok.v[0] === ':');\n}\n\nconst intRe = new RegExp('^-?[0-9]+$');\nconst bytesRe = new RegExp('^([0-9a-fA-F]{2})*$');\n\nexport interface ParserOptions extends ProtocolOptions {\n /**\n * Expand [Michelson macros](https://tezos.gitlab.io/whitedoc/michelson.html#macros) during parsing.\n */\n expandMacros?: boolean;\n /**\n * Expand global constants during parsing.\n * `expandGlobalConstant` expects an object where the keys are global constant hashes and the values are the corresponding JSON Micheline expressions.\n * @example\n * ```\n * const parserOptions: ParserOptions = {\n * expandGlobalConstant: {\n * 'expr...': { prim: 'DROP', args: [{ int: '2' }] }\n * }\n * }\n *\n * const p = new Parser(parserOptions);\n * ```\n */\n expandGlobalConstant?: GlobalConstantHashAndValue;\n}\n\n/**\n * Converts and validates Michelson expressions between JSON-based Michelson and Micheline\n *\n * Pretty Print a Michelson Smart Contract:\n * ```\n * const contract = await Tezos.contract.at(\"KT1Vsw3kh9638gqWoHTjvHCoHLPKvCbMVbCg\");\n * const p = new Parser();\n *\n * const michelsonCode = p.parseJSON(contract.script.code);\n * const storage = p.parseJSON(contract.script.storage);\n *\n * console.log(\"Pretty print Michelson smart contract:\");\n * console.log(emitMicheline(michelsonCode, {indent:\" \", newline: \"\\n\",}));\n *\n * console.log(\"Pretty print Storage:\");\n * console.log(emitMicheline(storage, {indent:\" \", newline: \"\\n\",}));\n * ```\n *\n * Encode a Michelson expression for inital storage of a smart contract\n * ```\n * const src = `(Pair (Pair { Elt 1\n * (Pair (Pair \"tz1gjaF81ZRRvdzjobyfVNsAeSC6PScjfQwN\" \"tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx\")\n * 0x0501000000026869) }\n * 10000000)\n * (Pair 2 333))`;\n *\n * const p = new Parser();\n *\n * const exp = p.parseMichelineExpression(src);\n * console.log(JSON.stringify(exp));\n * ```\n */\nexport class Parser {\n constructor(private opt?: ParserOptions) {}\n\n private expand(ex: Prim): Expr {\n if (this.opt?.expandGlobalConstant !== undefined && ex.prim === 'constant') {\n const ret = expandGlobalConstants(ex, this.opt.expandGlobalConstant);\n if (ret !== ex) {\n ret[sourceReference] = {\n ...(ex[sourceReference] || { first: 0, last: 0 }),\n globalConstant: ex,\n };\n }\n return ret;\n }\n if (this.opt?.expandMacros !== undefined ? this.opt?.expandMacros : true) {\n const ret = expandMacros(ex, this.opt);\n if (ret !== ex) {\n ret[sourceReference] = { ...(ex[sourceReference] || { first: 0, last: 0 }), macro: ex };\n }\n return ret;\n } else {\n return ex;\n }\n }\n\n private parseListExpr(scanner: Iterator<Token>, start: Token): Expr {\n const ref: SourceReference = {\n first: start.first,\n last: start.last,\n };\n\n const expectBracket = start.t === '(';\n let tok: IteratorResult<Token>;\n if (expectBracket) {\n tok = scanner.next();\n if (tok.done) {\n throw errEOF;\n }\n ref.last = tok.value.last;\n } else {\n tok = { value: start };\n }\n\n if (tok.value.t !== Literal.Ident) {\n throw new MichelineParseError(tok.value, `not an identifier: ${tok.value.v}`);\n }\n\n const ret: Prim = {\n prim: tok.value.v,\n [sourceReference]: ref,\n };\n\n for (;;) {\n const tok = scanner.next();\n if (tok.done) {\n if (expectBracket) {\n throw errEOF;\n }\n break;\n } else if (tok.value.t === ')') {\n if (!expectBracket) {\n throw new MichelineParseError(tok.value, 'unexpected closing bracket');\n }\n ref.last = tok.value.last;\n break;\n } else if (isAnnotation(tok.value)) {\n ret.annots = ret.annots || [];\n ret.annots.push(tok.value.v);\n ref.last = tok.value.last;\n } else {\n ret.args = ret.args || [];\n const arg = this.parseExpr(scanner, tok.value);\n ref.last = arg[sourceReference]?.last || ref.last;\n ret.args.push(arg);\n }\n }\n return this.expand(ret);\n }\n\n private parseArgs(scanner: Iterator<Token>, start: Token): [Prim, IteratorResult<Token>] {\n // Identifier with arguments\n const ref: SourceReference = {\n first: start.first,\n last: start.last,\n };\n const p: Prim = {\n prim: start.v,\n [sourceReference]: ref,\n };\n\n for (;;) {\n const t = scanner.next();\n if (t.done || t.value.t === '}' || t.value.t === ';') {\n return [p, t];\n }\n\n if (isAnnotation(t.value)) {\n ref.last = t.value.last;\n p.annots = p.annots || [];\n p.annots.push(t.value.v);\n } else {\n const arg = this.parseExpr(scanner, t.value);\n ref.last = arg[sourceReference]?.last || ref.last;\n p.args = p.args || [];\n p.args.push(arg);\n }\n }\n }\n\n private parseSequenceExpr(scanner: Iterator<Token>, start: Token): List<Expr> {\n const ref: SourceReference = {\n first: start.first,\n last: start.last,\n };\n const seq: List<Expr> = [];\n seq[sourceReference] = ref;\n\n const expectBracket = start.t === '{';\n let tok: IteratorResult<Token> | null = start.t === '{' ? null : { value: start };\n\n for (;;) {\n if (tok === null) {\n tok = scanner.next();\n if (!tok.done) {\n ref.last = tok.value.last;\n }\n }\n if (tok.done) {\n if (expectBracket) {\n throw errEOF;\n } else {\n return seq;\n }\n }\n\n if (tok.value.t === '}') {\n if (!expectBracket) {\n throw new MichelineParseError(tok.value, 'unexpected closing bracket');\n } else {\n return seq;\n }\n } else if (tok.value.t === Literal.Ident) {\n // Identifier with arguments\n const [itm, n] = this.parseArgs(scanner, tok.value);\n ref.last = itm[sourceReference]?.last || ref.last;\n seq.push(this.expand(itm));\n tok = n;\n } else {\n // Other\n const ex = this.parseExpr(scanner, tok.value);\n ref.last = ex[sourceReference]?.last || ref.last;\n seq.push(ex);\n tok = null;\n }\n\n if (tok === null) {\n tok = scanner.next();\n if (!tok.done) {\n ref.last = tok.value.last;\n }\n }\n if (!tok.done && tok.value.t === ';') {\n tok = null;\n }\n }\n }\n\n private parseExpr(scanner: Iterator<Token>, tok: Token): Expr {\n switch (tok.t) {\n case Literal.Ident:\n return this.expand({\n prim: tok.v,\n [sourceReference]: { first: tok.first, last: tok.last },\n });\n\n case Literal.Number:\n return { int: tok.v, [sourceReference]: { first: tok.first, last: tok.last } };\n\n case Literal.String:\n return {\n string: JSON.parse(tok.v) as string,\n [sourceReference]: { first: tok.first, last: tok.last },\n };\n\n case Literal.Bytes:\n return { bytes: tok.v.slice(2), [sourceReference]: { first: tok.first, last: tok.last } };\n\n case '{':\n return this.parseSequenceExpr(scanner, tok);\n\n default:\n return this.parseListExpr(scanner, tok);\n }\n }\n\n /**\n * Parses a Micheline sequence expression, such as smart contract source. Enclosing curly brackets may be omitted.\n * @param src A Micheline sequence `{parameter ...; storage int; code { DUP ; ...};}` or `parameter ...; storage int; code { DUP ; ...};`\n */\n parseSequence(src: string): Expr[] | null {\n if (typeof src !== 'string') {\n throw new TypeError(`string type was expected, got ${typeof src} instead`);\n }\n\n const scanner = scan(src);\n const tok = scanner.next();\n if (tok.done) {\n return null;\n }\n return this.parseSequenceExpr(scanner, tok.value);\n }\n\n /**\n * Parse a Micheline sequence expression. Enclosing curly brackets may be omitted.\n * @param src A Michelson list expression such as `(Pair {Elt \"0\" 0} 0)` or `Pair {Elt \"0\" 0} 0`\n * @returns An AST node or null for empty document.\n */\n parseList(src: string): Expr | null {\n if (typeof src !== 'string') {\n throw new TypeError(`string type was expected, got ${typeof src} instead`);\n }\n\n const scanner = scan(src);\n const tok = scanner.next();\n if (tok.done) {\n return null;\n }\n return this.parseListExpr(scanner, tok.value);\n }\n\n /**\n * Parse any Michelson expression\n * @param src A Michelson expression such as `(Pair {Elt \"0\" 0} 0)` or `{parameter ...; storage int; code { DUP ; ...};}`\n * @returns An AST node or null for empty document.\n */\n parseMichelineExpression(src: string): Expr | null {\n if (typeof src !== 'string') {\n throw new TypeError(`string type was expected, got ${typeof src} instead`);\n }\n\n const scanner = scan(src);\n const tok = scanner.next();\n if (tok.done) {\n return null;\n }\n return this.parseExpr(scanner, tok.value);\n }\n\n /**\n * Parse a Micheline sequence expression, such as smart contract source. Enclosing curly brackets may be omitted.\n * An alias for `parseSequence`\n * @param src A Micheline sequence `{parameter ...; storage int; code { DUP ; ...};}` or `parameter ...; storage int; code { DUP ; ...};`\n */\n parseScript(src: string): Expr[] | null {\n return this.parseSequence(src);\n }\n\n /**\n * Parse a Micheline sequence expression. Enclosing curly brackets may be omitted.\n * An alias for `parseList`\n * @param src A Michelson list expression such as `(Pair {Elt \"0\" 0} 0)` or `Pair {Elt \"0\" 0} 0`\n * @returns An AST node or null for empty document.\n */\n parseData(src: string): Expr | null {\n return this.parseList(src);\n }\n\n /**\n * Takes a JSON-encoded Michelson, validates it, strips away unneeded properties and optionally expands macros (See {@link ParserOptions}).\n * @param src An object containing JSON-encoded Michelson, usually returned by `JSON.parse()`\n */\n parseJSON(src: object): Expr {\n if (typeof src !== 'object') {\n throw new TypeError(`object type was expected, got ${typeof src} instead`);\n }\n\n if (Array.isArray(src)) {\n const ret: Expr[] = [];\n for (const n of src) {\n if (n === null || typeof n !== 'object') {\n throw new JSONParseError(n, `unexpected sequence element: ${n}`);\n }\n ret.push(this.parseJSON(n));\n }\n return ret;\n } else if ('prim' in src) {\n const p = src as { prim: unknown; annots?: unknown[]; args?: unknown[] };\n if (\n typeof p.prim === 'string' &&\n (p.annots === undefined || Array.isArray(p.annots)) &&\n (p.args === undefined || Array.isArray(p.args))\n ) {\n const ret: Prim = {\n prim: p.prim,\n };\n\n if (p.annots !== undefined) {\n for (const a of p.annots) {\n if (typeof a !== 'string') {\n throw new JSONParseError(a, `string expected: ${a}`);\n }\n }\n ret.annots = p.annots;\n }\n\n if (p.args !== undefined) {\n ret.args = [];\n for (const a of p.args) {\n if (a === null || typeof a !== 'object') {\n throw new JSONParseError(a, `unexpected argument: ${a}`);\n }\n ret.args.push(this.parseJSON(a));\n }\n }\n\n return this.expand(ret);\n }\n\n throw new JSONParseError(src, `malformed prim expression: ${src}`);\n } else if ('string' in src) {\n if (typeof (src as StringLiteral).string === 'string') {\n return { string: (src as StringLiteral).string };\n }\n\n throw new JSONParseError(src, `malformed string literal: ${src}`);\n } else if ('int' in src) {\n if (typeof (src as IntLiteral).int === 'string' && intRe.test((src as IntLiteral).int)) {\n return { int: (src as IntLiteral).int };\n }\n\n throw new JSONParseError(src, `malformed int literal: ${src}`);\n } else if ('bytes' in src) {\n if (\n typeof (src as BytesLiteral).bytes === 'string' &&\n bytesRe.test((src as BytesLiteral).bytes)\n ) {\n return { bytes: (src as BytesLiteral).bytes };\n }\n\n throw new JSONParseError(src, `malformed bytes literal: ${src}`);\n } else {\n throw new JSONParseError(src, `unexpected object: ${src}`);\n }\n }\n}\n","import { Expr, Prim, sourceReference } from './micheline';\n\nexport interface FormatOptions {\n /**\n * A string used for code indentation if desired. Usually a tab character or a number of spaces.\n */\n indent?: string;\n /**\n * A string used for line separation. Usually a newline character (\"\\n\");\n */\n newline?: string;\n}\n\nclass Formatter {\n constructor(private opt?: FormatOptions, private lev: number = 0) {}\n\n indent(n = 0): string {\n let ret = '';\n if (this.opt?.indent !== undefined) {\n for (let i = this.lev + n; i > 0; i--) {\n ret += this.opt.indent;\n }\n }\n return ret;\n }\n\n get lf(): string {\n return this.opt?.newline || '';\n }\n\n get lfsp(): string {\n return this.opt?.newline || ' ';\n }\n\n down(n: number): Formatter {\n return new Formatter(this.opt, this.lev + n);\n }\n}\n\nfunction hasArgs(node: Expr): node is Prim {\n return (\n 'prim' in node &&\n ((node.annots !== undefined && node.annots.length !== 0) ||\n (node.args !== undefined && node.args.length !== 0))\n );\n}\n\nfunction isMultiline(node: Prim): boolean {\n if (node.args !== undefined) {\n for (const a of node.args) {\n if (Array.isArray(a) || hasArgs(a)) {\n return true;\n }\n }\n }\n return false;\n}\n\nfunction emitExpr(node: Expr, f: Formatter, foldMacros: boolean): string {\n const macro = node[sourceReference]?.macro;\n if (foldMacros && macro) {\n return emitExpr(macro, f, foldMacros);\n }\n\n if (Array.isArray(node)) {\n return emitSeq(node, f, foldMacros);\n } else if ('string' in node) {\n return JSON.stringify(node.string);\n } else if ('int' in node) {\n return node.int;\n } else if ('bytes' in node) {\n return '0x' + node.bytes;\n } else {\n if (\n (node.annots === undefined || node.annots.length === 0) &&\n (node.args === undefined || node.args.length === 0)\n ) {\n return node.prim;\n }\n\n let ret = '(' + node.prim;\n if (node.annots !== undefined) {\n for (const a of node.annots) {\n ret += ' ' + a;\n }\n }\n if (node.args !== undefined) {\n const multiline = isMultiline(node);\n for (const a of node.args) {\n if (multiline) {\n ret += f.lfsp + f.indent(1) + emitExpr(a, f.down(1), foldMacros);\n } else {\n ret += ' ' + emitExpr(a, f, foldMacros);\n }\n }\n }\n return ret + ')';\n }\n}\n\nfunction emitSeq(node: Expr[], f: Formatter, foldMacros: boolean): string {\n let ret = '{' + f.lf;\n let i = node.length;\n for (const el of node) {\n ret += f.indent(1);\n\n if ('prim' in el) {\n ret += el.prim;\n\n if (el.annots !== undefined) {\n for (const a of el.annots) {\n ret += ' ' + a;\n }\n }\n if (el.args !== undefined) {\n const multiline = isMultiline(el);\n for (const a of el.args) {\n if (multiline) {\n ret += f.lfsp + f.indent(2) + emitExpr(a, f.down(2), foldMacros);\n } else {\n ret += ' ' + emitExpr(a, f, foldMacros);\n }\n }\n }\n } else {\n ret += emitExpr(el, f.down(1), foldMacros);\n }\n\n ret += i > 1 ? ';' + f.lfsp : f.lf;\n i--;\n }\n return ret + f.indent() + '}';\n}\n\n/**\n * Formats Micheline expression\n * @param expr An AST node\n * @param opt Options\n */\nexport function emitMicheline(expr: Expr, opt?: FormatOptions, foldMacros = false): string {\n if (typeof expr !== 'object') {\n throw new TypeError(`object type was expected, got ${typeof expr} instead`);\n }\n\n return emitExpr(expr, new Formatter(opt), foldMacros);\n}\n","const H = [\n 0x6a09e667 | 0,\n 0xbb67ae85 | 0,\n 0x3c6ef372 | 0,\n 0xa54ff53a | 0,\n 0x510e527f | 0,\n 0x9b05688c | 0,\n 0x1f83d9ab | 0,\n 0x5be0cd19 | 0,\n];\n\nconst K = [\n 0x428a2f98 | 0,\n 0x71374491 | 0,\n 0xb5c0fbcf | 0,\n 0xe9b5dba5 | 0,\n 0x3956c25b | 0,\n 0x59f111f1 | 0,\n 0x923f82a4 | 0,\n 0xab1c5ed5 | 0,\n 0xd807aa98 | 0,\n 0x12835b01 | 0,\n 0x243185be | 0,\n 0x550c7dc3 | 0,\n 0x72be5d74 | 0,\n 0x80deb1fe | 0,\n 0x9bdc06a7 | 0,\n 0xc19bf174 | 0,\n 0xe49b69c1 | 0,\n 0xefbe4786 | 0,\n 0x0fc19dc6 | 0,\n 0x240ca1cc | 0,\n 0x2de92c6f | 0,\n 0x4a7484aa | 0,\n 0x5cb0a9dc | 0,\n 0x76f988da | 0,\n 0x983e5152 | 0,\n 0xa831c66d | 0,\n 0xb00327c8 | 0,\n 0xbf597fc7 | 0,\n 0xc6e00bf3 | 0,\n 0xd5a79147 | 0,\n 0x06ca6351 | 0,\n 0x14292967 | 0,\n 0x27b70a85 | 0,\n 0x2e1b2138 | 0,\n 0x4d2c6dfc | 0,\n 0x53380d13 | 0,\n 0x650a7354 | 0,\n 0x766a0abb | 0,\n 0x81c2c92e | 0,\n 0x92722c85 | 0,\n 0xa2bfe8a1 | 0,\n 0xa81a664b | 0,\n 0xc24b8b70 | 0,\n 0xc76c51a3 | 0,\n 0xd192e819 | 0,\n 0xd6990624 | 0,\n 0xf40e3585 | 0,\n 0x106aa070 | 0,\n 0x19a4c116 | 0,\n 0x1e376c08 | 0,\n 0x2748774c | 0,\n 0x34b0bcb5 | 0,\n 0x391c0cb3 | 0,\n 0x4ed8aa4a | 0,\n 0x5b9cca4f | 0,\n 0x682e6ff3 | 0,\n 0x748f82ee | 0,\n 0x78a5636f | 0,\n 0x84c87814 | 0,\n 0x8cc70208 | 0,\n 0x90befffa | 0,\n 0xa4506ceb | 0,\n 0xbef9a3f7 | 0,\n 0xc67178f2 | 0,\n];\n\n/**\n * @category Error\n * @description Error that indicates a failure when decoding a base58 encoding\n */\nexport class Base58DecodingError extends Error {\n public name = 'Base58DecodingError';\n constructor(public message: string) {\n super(message);\n }\n}\n\n/**\n * @category Error\n * @description\n */\nexport class InvalidMessageError extends Error {\n public name = 'InvalidMessageError';\n constructor(public message: string) {\n super(message);\n }\n}\n\n// https://tools.ietf.org/html/rfc6234\nfunction sha256(msg: number[] | Uint8Array): number[] {\n // pad the message\n const r = (msg.length + 9) % 64;\n const pad = r === 0 ? 0 : 64 - r;\n\n if (msg.length > 268435455) {\n throw new InvalidMessageError(`SHA-256 -- message length is too big: ${msg.length}`);\n }\n\n const l = msg.length << 3;\n const buffer = [\n ...msg,\n 0x80,\n ...new Array<number>(pad).fill(0),\n 0,\n 0,\n 0,\n 0,\n (l >> 24) & 0xff,\n (l >> 16) & 0xff,\n (l >> 8) & 0xff,\n l & 0xff,\n ];\n\n function ror(x: number, n: number): number {\n return (x >>> n) | (x << (32 - n));\n }\n\n const h = [...H];\n const w = new Array<number>(64);\n const v = new Array<number>(8);\n\n for (let offset = 0; offset < buffer.length; offset += 64) {\n let q = offset;\n let i = 0;\n while (i < 16) {\n w[i] = (buffer[q] << 24) | (buffer[q + 1] << 16) | (buffer[q + 2] << 8) | buffer[q + 3];\n q += 4;\n i++;\n }\n while (i < 64) {\n const s0 = ror(w[i - 15], 7) ^ ror(w[i - 15], 18) ^ (w[i - 15] >>> 3);\n const s1 = ror(w[i - 2], 17) ^ ror(w[i - 2], 19) ^ (w[i - 2] >>> 10);\n w[i] = ((s1 | 0) + w[i - 7] + s0 + w[i - 16]) | 0;\n i++;\n }\n\n for (let i = 0; i < 8; i++) {\n v[i] = h[i];\n }\n\n for (let i = 0; i < 64; i++) {\n const b0 = ror(v[0], 2) ^ ror(v[0], 13) ^ ror(v[0], 22);\n const b1 = ror(v[4], 6) ^ ror(v[4], 11) ^ ror(v[4], 25);\n const t1 = (v[7] + b1 + ((v[4] & v[5]) ^ (~v[4] & v[6])) + K[i] + w[i]) | 0;\n const t2 = (b0 + ((v[0] & v[1]) ^ (v[0] & v[2]) ^ (v[1] & v[2]))) | 0;\n\n v[7] = v[6];\n v[6] = v[5];\n v[5] = v[4];\n v[4] = (v[3] + t1) | 0;\n v[3] = v[2];\n v[2] = v[1];\n v[1] = v[0];\n v[0] = (t1 + t2) | 0;\n }\n\n for (let i = 0; i < 8; i++) {\n h[i] = (h[i] + v[i]) | 0;\n }\n }\n\n const digest: number[] = [];\n for (const v of h) {\n digest.push((v >> 24) & 0xff);\n digest.push((v >> 16) & 0xff);\n digest.push((v >> 8) & 0xff);\n digest.push(v & 0xff);\n }\n\n return digest;\n}\n\nconst base58alphabetFwd: number[] = [\n 0, 1, 2, 3, 4, 5, 6, 7, 8, -1, -1, -1, -1, -1, -1, -1, 9, 10, 11, 12, 13, 14, 15, 16, -1, 17, 18,\n 19, 20, 21, -1, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, -1, -1, -1, -1, -1, -1, 33, 34, 35,\n 36, 37, 38, 39, 40, 41, 42, 43, -1, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57,\n];\n\nconst base58alphabetBwd: number[] = [\n 0, 1, 2, 3, 4, 5, 6, 7, 8, 16, 17, 18, 19, 20, 21, 22, 23, 25, 26, 27, 28, 29, 31, 32, 33, 34, 35,\n 36, 37, 38, 39, 40, 41, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 60, 61, 62, 63, 64, 65, 66,\n 67, 68, 69, 70, 71, 72, 73,\n];\n\nfunction byteAt(src: string, i: number): number {\n const c = src.charCodeAt(i) - 49;\n if (c >= base58alphabetFwd.length || base58alphabetFwd[c] === -1) {\n throw new Base58DecodingError(`Unexpected character at position ${i}: ${src[i]}`);\n }\n return base58alphabetFwd[c];\n}\n\nexport function decodeBase58(src: string): number[] {\n const acc: number[] = [];\n let i = 0;\n // count and skip leading zeros\n while (i < src.length && byteAt(src, i) === 0) {\n i++;\n }\n let zeros = i;\n while (i < src.length) {\n let carry = byteAt(src, i++);\n /*\n for every symbol x\n acc = acc * 58 + x\n where acc is a little endian arbitrary length integer\n */\n let ii = 0;\n while (carry !== 0 || ii < acc.length) {\n const m = (acc[ii] || 0) * 58 + carry;\n acc[ii++] = m % 256;\n carry = Math.floor(m / 256);\n }\n }\n while (zeros-- > 0) {\n acc.push(0);\n }\n return acc.reverse();\n}\n\nexport function encodeBase58(src: number[] | Uint8Array): string {\n const acc: number[] = [];\n let i = 0;\n // count and skip leading zeros\n while (i < src.length && src[i] === 0) {\n i++;\n }\n let zeros = i;\n while (i < src.length) {\n let carry = src[i++];\n let ii = 0;\n while (carry !== 0 || ii < acc.length) {\n const m = (acc[ii] || 0) * 256 + carry;\n acc[ii++] = m % 58;\n carry = Math.floor(m / 58);\n }\n }\n while (zeros-- > 0) {\n acc.push(0);\n }\n acc.reverse();\n return String.fromCharCode(...acc.map((v) => base58alphabetBwd[v] + 49));\n}\n\nexport function decodeBase58Check(src: string): number[] {\n const buffer = decodeBase58(src);\n if (buffer.length < 4) {\n throw new Base58DecodingError(`Data is too short ${buffer.length}`);\n }\n\n const data = buffer.slice(0, buffer.length - 4);\n const sum = buffer.slice(buffer.length - 4);\n const computed = sha256(sha256(data));\n if (\n sum[0] !== computed[0] ||\n sum[1] !== computed[1] ||\n sum[2] !== computed[2] ||\n sum[3] !== computed[3]\n ) {\n throw new Base58DecodingError('Invalid checksum');\n }\n\n return data;\n}\n\nexport function encodeBase58Check(src: number[] | Uint8Array): string {\n const sum = sha256(sha256(src));\n return encodeBase58([...src, ...sum.slice(0, 4)]);\n}\n","/**\n * @category Error\n * @description Error that indicates an invalid contract being passed or used\n */\nexport class InvalidContractError extends Error {\n public name = 'InvalidContractError';\n constructor(public message: string) {\n super(message);\n }\n}\n\n/**\n * @category Error\n * @description Error that indicates an invalid type expression being passed or used\n */\nexport class InvalidTypeExpressionError extends Error {\n public name = 'InvalidTypeExpressionError';\n constructor(public message: string) {\n super(message);\n }\n}\n\n/**\n * @category Error\n * @description Error that indicates an invalid data expression being passed or used\n */\nexport class InvalidDataExpressionError extends Error {\n public name = 'InvalidDataExpressionError';\n constructor(public message: string) {\n super(message);\n }\n}\n\n/**\n * @category Error\n * @description Error that indicates an invalid contract entrypoint being referenced or passed\n */\nexport class InvalidEntrypointError extends Error {\n public name = 'InvalidEntrypointError';\n constructor(public entrypoint?: string) {\n super(`Contract has no entrypoint named: '${entrypoint}'`);\n }\n}\n\n/**\n * @category Error\n * @description Error that indicates a failure happening when trying to encode Tezos ID\n */\nexport class TezosIdEncodeError extends Error {\n public name = 'TezosIdEncodeError';\n constructor(public message: string) {\n super(message);\n }\n}\n\n/**\n * @category Error\n * @description Error that indicates a general error happening when trying to create a LongInteger\n */\nexport class LongIntegerError extends Error {\n public name = 'LongIntegerError';\n constructor(public message: string) {\n super(message);\n }\n}\n\n/**\n * @category Error\n * @description Error that indicates a failure occurring when trying to parse a hex byte\n */\nexport class HexParseError extends Error {\n public name = 'HexParseError';\n constructor(public hexByte: string) {\n super(`Unable to parse hex byte: ${hexByte}`);\n }\n}\n","import { Prim, Expr, StringLiteral, IntLiteral } from './micheline';\nimport { decodeBase58Check, encodeBase58Check } from './base58';\nimport {\n MichelsonData,\n MichelsonDataPair,\n MichelsonType,\n MichelsonTypePair,\n} from './michelson-types';\nimport { HexParseError, LongIntegerError, TezosIdEncodeError } from './error';\n\nexport type Tuple<N extends number, T> = N extends 1\n ? [T]\n : N extends 2\n ? [T, T]\n : N extends 3\n ? [T, T, T]\n : N extends 4\n ? [T, T, T, T]\n : N extends 5\n ? [T, T, T, T, T]\n : N extends 6\n ? [T, T, T, T, T, T]\n : N extends 7\n ? [T, T, T, T, T, T, T]\n : N extends 8\n ? [T, T, T, T, T, T, T, T]\n : T[];\n\ntype RequiredProp<T, K extends keyof T> = Omit<T, K> & Required<Pick<T, K>>;\ntype OmitProp<T, K extends keyof T> = Omit<T, K> & { [P in K]?: undefined };\n\nexport type ReqArgs<T extends Prim> = RequiredProp<T, 'args'>;\nexport type NoArgs<T extends Prim> = OmitProp<T, 'args'>;\nexport type NoAnnots<T extends Prim> = OmitProp<T, 'annots'>;\n\nexport type Nullable<T> = { [P in keyof T]: T[P] | null };\n\n/**\n * @category Error\n * @description Error that indicates a Michelson failure occurring\n */\nexport class MichelsonError<T extends Expr = Expr> extends Error {\n /**\n * @param val Value of a AST node caused the error\n * @param path Path to a node caused the error\n * @param message An error message\n */\n constructor(public val: T, message?: string) {\n super(message);\n Object.setPrototypeOf(this, MichelsonError.prototype);\n }\n}\n\nexport function isMichelsonError<T extends Expr = Expr>(err: unknown): err is MichelsonError<T> {\n return err instanceof MichelsonError;\n}\n\nexport class MichelsonTypeError extends MichelsonError<MichelsonType | MichelsonType[]> {\n public data?: Expr;\n\n /**\n * @param val Value of a type node caused the error\n * @param data Value of a data node caused the error\n * @param message An error message\n */\n constructor(val: MichelsonType | MichelsonType[], data?: Expr, message?: string) {\n super(val, message);\n if (data !== undefined) {\n this.data = data;\n }\n Object.setPrototypeOf(this, MichelsonTypeError.prototype);\n }\n}\n\n// Ad hoc big integer parser\nexport class LongInteger {\n private neg = false;\n private buf: number[] = [];\n\n private append(c: number) {\n let i = 0;\n while (c !== 0 || i < this.buf.length) {\n const m = (this.buf[i] || 0) * 10 + c;\n this.buf[i++] = m % 256;\n c = Math.floor(m / 256);\n }\n }\n\n constructor(arg?: string | number) {\n if (arg === undefined) {\n return;\n }\n if (typeof arg === 'string') {\n for (let i = 0; i < arg.length; i++) {\n const c = arg.charCodeAt(i);\n if (i === 0 && c === 0x2d) {\n this.neg = true;\n } else {\n if (c < 0x30 || c > 0x39) {\n throw new LongIntegerError(`unexpected character in integer constant: ${arg[i]}`);\n }\n this.append(c - 0x30);\n }\n }\n } else if (arg < 0) {\n this.neg = true;\n this.append(-arg);\n } else {\n this.append(arg);\n }\n }\n\n cmp(arg: LongInteger): number {\n if (this.neg !== arg.neg) {\n return (arg.neg ? 1 : 0) - (this.neg ? 1 : 0);\n } else {\n let ret = 0;\n if (this.buf.length !== arg.buf.length) {\n ret = this.buf.length < arg.buf.length ? -1 : 1;\n } else if (this.buf.length !== 0) {\n let i = arg.buf.length - 1;\n while (i >= 0 && this.buf[i] === arg.buf[i]) {\n i--;\n }\n ret = i < 0 ? 0 : this.buf[i] < arg.buf[i] ? -1 : 1;\n }\n return !this.neg ? ret : ret === 0 ? 0 : -ret;\n }\n }\n\n get sign(): number {\n return this.buf.length === 0 ? 0 : this.neg ? -1 : 1;\n }\n}\n\nexport function parseBytes(s: string): number[] | null {\n const ret: number[] = [];\n for (let i = 0; i < s.length; i += 2) {\n const x = parseInt(s.slice(i, i + 2), 16);\n if (Number.isNaN(x)) {\n return null;\n }\n ret.push(x);\n }\n return ret;\n}\n\nexport function compareBytes(a: number[] | Uint8Array, b: number[] | Uint8Array): number {\n if (a.length !== b.length) {\n return a.length < b.length ? -1 : 1;\n } else if (a.length !== 0) {\n let i = 0;\n while (i < a.length && a[i] === b[i]) {\n i++;\n }\n return i === a.length ? 0 : a[i] < b[i] ? -1 : 1;\n } else {\n return 0;\n }\n}\n\nexport function isDecimal(x: string): boolean {\n try {\n new LongInteger(x);\n return true;\n } catch {\n return false;\n }\n}\n\nexport function isNatural(x: string): boolean {\n try {\n return new LongInteger(x).sign >= 0;\n } catch {\n return false;\n }\n}\n\nexport interface UnpackedAnnotations {\n f?: string[];\n t?: string[];\n v?: string[];\n}\n\nexport interface UnpackAnnotationsOptions {\n specialVar?: boolean; // CAR, CDR\n emptyVar?: boolean;\n specialFields?: boolean; // PAIR, LEFT, RIGHT\n emptyFields?: boolean;\n}\n\nconst annRe = /^(@%|@%%|%@|[@:%]([_0-9a-zA-Z][_0-9a-zA-Z.%@]*)?)$/;\n\nexport function unpackAnnotations(\n p: Prim | Expr[],\n opt?: UnpackAnnotationsOptions\n): UnpackedAnnotations {\n if (Array.isArray(p)) {\n return {};\n }\n\n let field: string[] | undefined;\n let type: string[] | undefined;\n let vars: string[] | undefined;\n\n if (p.annots !== undefined) {\n for (const v of p.annots) {\n if (v.length !== 0) {\n if (\n !annRe.test(v) ||\n (!opt?.specialVar && (v === '@%' || v === '@%%')) ||\n (!opt?.specialFields && v === '%@')\n ) {\n throw new MichelsonError(p, `${p.prim}: unexpected annotation: ${v}`);\n }\n\n switch (v[0]) {\n case '%':\n if (opt?.emptyFields || v.length > 1) {\n field = field || [];\n field.push(v);\n }\n break;\n case ':':\n if (v.length > 1) {\n type = type || [];\n type.push(v);\n }\n break;\n case '@':\n if (opt?.emptyVar || v.length > 1) {\n vars = vars || [];\n vars.push(v);\n }\n break;\n }\n }\n }\n }\n return { f: field, t: type, v: vars };\n}\n\nexport type TezosIDType =\n | 'BlockHash'\n | 'OperationHash'\n | 'OperationListHash'\n | 'OperationListListHash'\n | 'ProtocolHash'\n | 'ContextHash'\n | 'ED25519PublicKeyHash'\n | 'SECP256K1PublicKeyHash'\n | 'P256PublicKeyHash'\n | 'ContractHash'\n | 'CryptoboxPublicKeyHash'\n | 'ED25519Seed'\n | 'ED25519PublicKey'\n | 'SECP256K1SecretKey'\n | 'P256SecretKey'\n | 'ED25519EncryptedSeed'\n | 'SECP256K1EncryptedSecretKey'\n | 'P256EncryptedSecretKey'\n | 'SECP256K1PublicKey'\n | 'P256PublicKey'\n | 'SECP256K1Scalar'\n | 'SECP256K1Element'\n | 'ED25519SecretKey'\n | 'ED25519Signature'\n | 'SECP256K1Signature'\n | 'P256Signature'\n | 'GenericSignature'\n | 'ChainID';\n\nexport type TezosIDPrefix = [number, number[]]; // payload length, prefix\n\nexport const tezosPrefix: Record<TezosIDType, TezosIDPrefix> = {\n BlockHash: [32, [1, 52]], // B(51)\n OperationHash: [32, [5, 116]], // o(51)\n OperationListHash: [32, [133, 233]], // Lo(52)\n OperationListListHash: [32, [29, 159, 109]], // LLo(53)\n ProtocolHash: [32, [2, 170]], // P(51)\n ContextHash: [32, [79, 199]], // Co(52)\n ED25519PublicKeyHash: [20, [6, 161, 159]], // tz1(36)\n SECP256K1PublicKeyHash: [20, [6, 161, 161]], // tz2(36)\n P256PublicKeyHash: [20, [6, 161, 164]], // tz3(36)\n ContractHash: [20, [2, 90, 121]], // KT1(36)\n CryptoboxPublicKeyHash: [16, [153, 103]], // id(30)\n ED25519Seed: [32, [13, 15, 58, 7]], // edsk(54)\n ED25519PublicKey: [32, [13, 15, 37, 217]], // edpk(54)\n SECP256K1SecretKey: [32, [17, 162, 224, 201]], // spsk(54)\n P256SecretKey: [32, [16, 81, 238, 189]], // p2sk(54)\n ED25519EncryptedSeed: [56, [7, 90, 60, 179, 41]], // edesk(88)\n SECP256K1EncryptedSecretKey: [56, [9, 237, 241, 174, 150]], // spesk(88)\n P256EncryptedSecretKey: [56, [9, 48, 57, 115, 171]], // p2esk(88)\n SECP256K1PublicKey: [33, [3, 254, 226, 86]], // sppk(55)\n P256PublicKey: [33, [3, 178, 139, 127]], // p2pk(55)\n SECP256K1Scalar: [33, [38, 248, 136]], // SSp(53)\n SECP256K1Element: [33, [5, 92, 0]], // GSp(54)\n ED25519SecretKey: [64, [43, 246, 78, 7]], // edsk(98)\n ED25519Signature: [64, [9, 245, 205, 134, 18]], // edsig(99)\n SECP256K1Signature: [64, [13, 115, 101, 19, 63]], // spsig1(99)\n P256Signature: [64, [54, 240, 44, 52]], // p2sig(98)\n GenericSignature: [64, [4, 130, 43]], // sig(96)\n ChainID: [4, [87, 82, 0]],\n};\n\nexport function checkDecodeTezosID<T extends TezosIDType[]>(\n id: string,\n ...types: T\n): [T[number], number[]] | null {\n const buf = decodeBase58Check(id);\n for (const t of types) {\n const [plen, p] = tezosPrefix[t];\n if (buf.length === plen + p.length) {\n let i = 0;\n while (i < p.length && buf[i] === p[i]) {\n i++;\n }\n if (i === p.length) {\n return [t, buf.slice(p.length)];\n }\n }\n }\n return null;\n}\n\nexport function encodeTezosID(id: TezosIDType, data: number[] | Uint8Array): string {\n const [plen, p] = tezosPrefix[id];\n if (data.length !== plen) {\n throw new TezosIdEncodeError(`Incorrect data length for ${id}: ${data.length}`);\n }\n return encodeBase58Check([...p, ...data]);\n}\n\n// reassemble comb pair for transparent comparison etc. non-recursive!\ntype PairTypeOrDataPrim<I extends 'pair' | 'Pair'> = I extends 'pair'\n ? Extract<MichelsonTypePair<MichelsonType[]>, Prim>\n : Extract<MichelsonDataPair<MichelsonData[]>, Prim>;\nexport function unpackComb<I extends 'pair' | 'Pair'>(\n id: I,\n v: I extends 'pair' ? MichelsonTypePair<MichelsonType[]> : MichelsonDataPair<MichelsonData[]>\n): PairTypeOrDataPrim<I> {\n const vv: MichelsonTypePair<MichelsonType[]> | MichelsonDataPair<MichelsonData[]> = v;\n const args = Array.isArray(vv) ? vv : vv.args;\n if (args.length === 2) {\n // it's a way to make a union of two interfaces not an interface with two independent properties of union types\n const ret =\n id === 'pair'\n ? {\n prim: 'pair',\n args,\n }\n : {\n prim: 'Pair',\n args,\n };\n return ret as PairTypeOrDataPrim<I>;\n }\n\n return {\n ...(Array.isArray(vv) ? { prim: id } : vv),\n args: [\n args[0],\n {\n prim: id,\n args: args.slice(1),\n },\n ],\n } as PairTypeOrDataPrim<I>;\n}\n\nexport function isPairType(t: MichelsonType): t is MichelsonTypePair<MichelsonType[]> {\n return Array.isArray(t) || t.prim === 'pair';\n}\n\nexport function isPairData(d: Expr): d is MichelsonDataPair<MichelsonData[]> {\n return Array.isArray(d) || ('prim' in d && d.prim === 'Pair');\n}\n\nconst rfc3339Re =\n /^[0-9]{4}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])[T ]([01][0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9]|60)(\\.[0-9]+)?(Z|[+-]([01][0-9]|2[0-3]):([0-5][0-9]))$/;\n\nexport function parseDate(a: StringLiteral | IntLiteral): Date | null {\n if ('string' in a) {\n if (isNatural(a.string)) {\n return new Date(parseInt(a.string, 10));\n } else if (rfc3339Re.test(a.string)) {\n const x = new Date(a.string);\n if (!Number.isNaN(x.valueOf)) {\n return x;\n }\n }\n } else if (isDecimal(a.int)) {\n return new Date(parseInt(a.int, 10));\n }\n return null;\n}\n\nexport function parseHex(s: string): number[] {\n const res: number[] = [];\n for (let i = 0; i < s.length; i += 2) {\n const ss = s.slice(i, i + 2);\n const x = parseInt(ss, 16);\n if (Number.isNaN(x)) {\n throw new HexParseError(ss);\n }\n res.push(x);\n }\n return res;\n}\n\nexport function hexBytes(bytes: number[]): string {\n return bytes.map((x) => ((x >> 4) & 0xf).toString(16) + (x & 0xf).toString(16)).join('');\n}\n","import { Prim, Expr, IntLiteral, StringLiteral } from './micheline';\nimport { Tuple, NoArgs, ReqArgs, MichelsonError } from './utils';\nimport {\n MichelsonCode,\n MichelsonType,\n MichelsonData,\n MichelsonContract,\n MichelsonNoArgInstruction,\n MichelsonInstruction,\n InstructionList,\n MichelsonTypeID,\n MichelsonSimpleComparableTypeID,\n} from './michelson-types';\n\n// Michelson validator\n\nconst maxViewNameLength = 31;\n\nconst noArgInstructionIDs: Record<MichelsonNoArgInstruction['prim'], true> = {\n ABS: true,\n ADD: true,\n ADDRESS: true,\n AMOUNT: true,\n AND: true,\n APPLY: true,\n BALANCE: true,\n BLAKE2B: true,\n CAR: true,\n CDR: true,\n CHAIN_ID: true,\n CHECK_SIGNATURE: true,\n COMPARE: true,\n CONCAT: true,\n CONS: true,\n EDIV: true,\n EQ: true,\n EXEC: true,\n FAILWITH: true,\n GE: true,\n GET_AND_UPDATE: true,\n GT: true,\n HASH_KEY: true,\n IMPLICIT_ACCOUNT: true,\n INT: true,\n ISNAT: true,\n JOIN_TICKETS: true,\n KECCAK: true,\n LE: true,\n LEVEL: true,\n LSL: true,\n LSR: true,\n LT: true,\n MEM: true,\n MUL: true,\n NEG: true,\n NEQ: true,\n NEVER: true,\n NOT: true,\n NOW: true,\n OR: true,\n PACK: true,\n PAIRING_CHECK: true,\n READ_TICKET: true,\n SAPLING_VERIFY_UPDATE: true,\n SELF: true,\n SELF_ADDRESS: true,\n SENDER: true,\n SET_DELEGATE: true,\n SHA256: true,\n SHA3: true,\n SHA512: true,\n SIZE: true,\n SLICE: true,\n SOME: true,\n SOURCE: true,\n SPLIT_TICKET: true,\n SUB: true,\n SWAP: true,\n TICKET: true,\n TOTAL_VOTING_POWER: true,\n TRANSFER_TOKENS: true,\n UNIT: true,\n VOTING_POWER: true,\n XOR: true,\n RENAME: true,\n OPEN_CHEST: true,\n SUB_MUTEZ: true,\n};\n\nexport const instructionIDs: Record<MichelsonInstruction['prim'], true> = Object.assign(\n {},\n noArgInstructionIDs,\n {\n CONTRACT: true,\n CREATE_CONTRACT: true,\n DIG: true,\n DIP: true,\n DROP: true,\n DUG: true,\n DUP: true,\n EMPTY_BIG_MAP: true,\n EMPTY_MAP: true,\n EMPTY_SET: true,\n GET: true,\n IF: true,\n IF_CONS: true,\n IF_LEFT: true,\n IF_NONE: true,\n ITER: true,\n LAMBDA: true,\n LEFT: true,\n LOOP: true,\n LOOP_LEFT: true,\n MAP: true,\n NIL: true,\n NONE: true,\n PAIR: true,\n PUSH: true,\n RIGHT: true,\n SAPLING_EMPTY_STATE: true,\n UNPACK: true,\n UNPAIR: true,\n UPDATE: true,\n CAST: true,\n VIEW: true,\n } as const\n);\n\nconst simpleComparableTypeIDs: Record<MichelsonSimpleComparableTypeID, true> = {\n unit: true,\n never: true,\n bool: true,\n int: true,\n nat: true,\n string: true,\n chain_id: true,\n bytes: true,\n mutez: true,\n key_hash: true,\n key: true,\n signature: true,\n timestamp: true,\n address: true,\n};\n\nconst typeIDs: Record<MichelsonTypeID, true> = Object.assign({}, simpleComparableTypeIDs, {\n or: true,\n pair: true,\n set: true,\n big_map: true,\n contract: true,\n lambda: true,\n list: true,\n map: true,\n operation: true,\n option: true,\n bls12_381_g1: true,\n bls12_381_g2: true,\n bls12_381_fr: true,\n sapling_transaction: true,\n sapling_state: true,\n ticket: true,\n chest_key: true,\n chest: true,\n} as const);\n\nexport class MichelsonValidationError extends MichelsonError {\n /**\n * @param val Value of a node caused the error\n * @param message An error message\n */\n constructor(public val: Expr, message?: string) {\n super(val, message);\n Object.setPrototypeOf(this, MichelsonValidationError.prototype);\n }\n}\n\nfunction isPrim(ex: Expr): ex is Prim {\n return 'prim' in ex;\n}\n\nfunction isPrimOrSeq(ex: Expr): ex is Prim | Expr[] {\n return Array.isArray(ex) || 'prim' in ex;\n}\n\nfunction assertPrim(ex: Expr): ex is Prim {\n if (isPrim(ex)) {\n return true;\n }\n throw new MichelsonValidationError(ex, 'prim expression expected');\n}\n\nfunction assertSeq(ex: Expr): ex is Expr[] {\n if (Array.isArray(ex)) {\n return true;\n }\n throw new MichelsonValidationError(ex, 'sequence expression expected');\n}\n\nfunction assertPrimOrSeq(ex: Expr): ex is Prim | Expr[] {\n if (isPrimOrSeq(ex)) {\n return true;\n }\n throw new MichelsonValidationError(ex, 'prim or sequence expression expected');\n}\n\nfunction assertNatural(i: IntLiteral) {\n if (i.int[0] === '-') {\n throw new MichelsonValidationError(i, 'natural number expected');\n }\n}\n\nfunction assertIntLiteral(ex: Expr): ex is IntLiteral {\n if ('int' in ex) {\n return true;\n }\n throw new MichelsonValidationError(ex, 'int literal expected');\n}\n\nfunction assertStringLiteral(ex: Expr): ex is StringLiteral {\n if ('string' in ex) {\n return true;\n }\n throw new MichelsonValidationError(ex, 'string literal expected');\n}\n\nfunction assertArgs<N extends number>(\n ex: Prim,\n n: N\n): ex is N extends 0 ? NoArgs<Prim<string>> : ReqArgs<Prim<string, Tuple<N, Expr>>> {\n if ((n === 0 && ex.args === undefined) || ex.args?.length === n) {\n return true;\n }\n throw new MichelsonValidationError(ex, `${n} arguments expected`);\n}\n\n/**\n * Checks if the node is a valid Michelson code (sequence of instructions).\n * This is a type guard function which either returns true of throws an exception.\n * @param ex An AST node\n */\nexport function assertMichelsonInstruction(ex: Expr): ex is MichelsonCode {\n if (Array.isArray(ex)) {\n for (const n of ex) {\n if (!Array.isArray(n) && !isPrim(n)) {\n throw new MichelsonValidationError(ex, 'sequence or prim expected');\n }\n assertMichelsonInstruction(n);\n }\n return true;\n }\n\n if (assertPrim(ex)) {\n if (Object.prototype.hasOwnProperty.call(noArgInstructionIDs, ex.prim)) {\n assertArgs(ex, 0);\n return true;\n }\n\n switch (ex.prim) {\n case 'DROP':\n case 'PAIR':\n case 'UNPAIR':\n case 'DUP':\n case 'UPDATE':\n case 'GET':\n if (ex.args !== undefined && assertArgs(ex, 1)) {\n /* istanbul ignore else */\n if (assertIntLiteral(ex.args[0])) {\n assertNatural(ex.args[0]);\n }\n }\n break;\n\n case 'DIG':\n case 'DUG':\n case 'SAPLING_EMPTY_STATE':\n /* istanbul ignore else */\n if (assertArgs(ex, 1)) {\n /* istanbul ignore else */\n if (assertIntLiteral(ex.args[0])) {\n assertNatural(ex.args[0]);\n }\n }\n break;\n\n case 'NONE':\n case 'LEFT':\n case 'RIGHT':\n case 'NIL':\n case 'CAST':\n /* istanbul ignore else */\n if (assertArgs(ex, 1)) {\n assertMichelsonType(ex.args[0]);\n }\n break;\n\n case 'UNPACK':\n /* istanbul ignore else */\n if (assertArgs(ex, 1)) {\n assertMichelsonPackableType(ex.args[0]);\n }\n break;\n\n case 'CONTRACT':\n /* istanbul ignore else */\n if (assertArgs(ex, 1)) {\n assertMichelsonPassableType(ex.args[0]);\n }\n break;\n\n case 'IF_NONE':\n case 'IF_LEFT':\n case 'IF_CONS':\n case 'IF':\n /* istanbul ignore else */\n if (assertArgs(ex, 2)) {\n /* istanbul ignore else */\n if (assertSeq(ex.args[0])) {\n assertMichelsonInstruction(ex.args[0]);\n }\n /* istanbul ignore else */\n if (assertSeq(ex.args[1])) {\n assertMichelsonInstruction(ex.args[1]);\n }\n }\n break;\n\n case 'MAP':\n case 'ITER':\n case 'LOOP':\n case 'LOOP_LEFT':\n /* istanbul ignore else */\n if (assertArgs(ex, 1)) {\n assertMichelsonInstruction(ex.args[0]);\n }\n break;\n\n case 'CREATE_CONTRACT':\n /* istanbul ignore else */\n if (assertArgs(ex, 1)) {\n assertMichelsonContract(ex.args[0]);\n }\n break;\n\n case 'DIP':\n if (ex.args?.length === 2) {\n /* istanbul ignore else */\n if (assertIntLiteral(ex.args[0])) {\n assertNatural(ex.args[0]);\n }\n /* istanbul ignore else */\n if (assertSeq(ex.args[1])) {\n assertMichelsonInstruction(ex.args[1]);\n }\n } else if (ex.args?.length === 1) {\n /* istanbul ignore else */\n if (assertSeq(ex.args[0])) {\n assertMichelsonInstruction(ex.args[0]);\n }\n } else {\n throw new MichelsonValidationError(ex, '1 or 2 arguments expected');\n }\n break;\n\n case 'PUSH':\n /* istanbul ignore else */\n if (assertArgs(ex, 2)) {\n assertMichelsonPushableType(ex.args[0]);\n assertMichelsonData(ex.args[1]);\n }\n break;\n\n case 'EMPTY_SET':\n /* istanbul ignore else */\n if (assertArgs(ex, 1)) {\n assertMichelsonComparableType(ex.args[0]);\n }\n break;\n\n case 'EMPTY_MAP':\n /* istanbul ignore else */\n if (assertArgs(ex, 2)) {\n assertMichelsonComparableType(ex.args[0]);\n assertMichelsonType(ex.args[1]);\n }\n break;\n\n case 'EMPTY_BIG_MAP':\n /* istanbul ignore else */\n if (assertArgs(ex, 2)) {\n assertMichelsonComparableType(ex.args[0]);\n assertMichelsonBigMapStorableType(ex.args[1]);\n }\n break;\n\n case 'LAMBDA':\n /* istanbul ignore else */\n if (assertArgs(ex, 3)) {\n assertMichelsonType(ex.args[0]);\n assertMichelsonType(ex.args[1]);\n /* istanbul ignore else */\n if (assertSeq(ex.args[2])) {\n assertMichelsonInstruction(ex.args[2]);\n }\n }\n break;\n\n case 'VIEW':\n /* istanbul ignore else */\n if (assertArgs(ex, 2)) {\n if (assertStringLiteral(ex.args[0])) {\n assertViewNameValid(ex.args[0]);\n }\n if (assertMichelsonType(ex.args[1])) {\n assertMichelsonPushableType(ex.args[1]);\n }\n }\n break;\n\n default:\n throw new MichelsonValidationError(ex, 'instruction expected');\n }\n }\n return true;\n}\n\nexport function assertMichelsonComparableType(ex: Expr): ex is MichelsonType {\n /* istanbul ignore else */\n if (assertPrimOrSeq(ex)) {\n if (Array.isArray(ex) || ex.prim === 'pair' || ex.prim === 'or' || ex.prim === 'option') {\n traverseType(ex, (ex) => assertMichelsonComparableType(ex));\n } else if (!Object.prototype.hasOwnProperty.call(simpleComparableTypeIDs, ex.prim)) {\n throw new MichelsonValidationError(ex, `${ex.prim}: type is not comparable`);\n }\n }\n return true;\n}\n\nexport function assertMichelsonPackableType(ex: Expr): ex is MichelsonType {\n /* istanbul ignore else */\n if (assertPrimOrSeq(ex)) {\n if (isPrim(ex)) {\n if (\n !Object.prototype.hasOwnProperty.call(typeIDs, ex.prim) ||\n ex.prim === 'big_map' ||\n ex.prim === 'operation' ||\n ex.prim === 'sapling_state' ||\n ex.prim === 'ticket'\n ) {\n throw new MichelsonValidationError(\n ex,\n `${ex.prim}: type can't be used inside PACK/UNPACK instructions`\n );\n }\n traverseType(ex, (ex) => assertMichelsonPackableType(ex));\n }\n }\n return true;\n}\n\nexport function assertMichelsonPushableType(ex: Expr): ex is MichelsonType {\n /* istanbul ignore else */\n if (assertPrimOrSeq(ex)) {\n if (isPrim(ex)) {\n if (\n !Object.prototype.hasOwnProperty.call(typeIDs, ex.prim) ||\n ex.prim === 'big_map' ||\n ex.prim === 'operation' ||\n ex.prim === 'sapling_state' ||\n ex.prim === 'ticket' ||\n ex.prim === 'contract'\n ) {\n throw new MichelsonValidationError(ex, `${ex.prim}: type can't be pushed`);\n }\n traverseType(ex, (ex) => assertMichelsonPushableType(ex));\n }\n }\n return true;\n}\n\nexport function assertMichelsonStorableType(ex: Expr): ex is MichelsonType {\n /* istanbul ignore else */\n if (assertPrimOrSeq(ex)) {\n if (isPrim(ex)) {\n if (\n !Object.prototype.hasOwnProperty.call(typeIDs, ex.prim) ||\n ex.prim === 'operation' ||\n ex.prim === 'contract'\n ) {\n throw new MichelsonValidationError(\n ex,\n `${ex.prim}: type can't be used as part of a storage`\n );\n }\n traverseType(ex, (ex) => assertMichelsonStorableType(ex));\n }\n }\n return true;\n}\n\nexport function assertMichelsonPassableType(ex: Expr): ex is MichelsonType {\n /* istanbul ignore else */\n if (assertPrimOrSeq(ex)) {\n if (isPrim(ex)) {\n if (!Object.prototype.hasOwnProperty.call(typeIDs, ex.prim) || ex.prim === 'operation') {\n throw new MichelsonValidationError(\n ex,\n `${ex.prim}: type can't be used as part of a parameter`\n );\n }\n traverseType(ex, (ex) => assertMichelsonPassableType(ex));\n }\n }\n return true;\n}\n\nexport function assertMichelsonBigMapStorableType(ex: Expr): ex is MichelsonType {\n /* istanbul ignore else */\n if (assertPrimOrSeq(ex)) {\n if (isPrim(ex)) {\n if (\n !Object.prototype.hasOwnProperty.call(typeIDs, ex.prim) ||\n ex.prim === 'big_map' ||\n ex.prim === 'operation' ||\n ex.prim === 'sapling_state'\n ) {\n throw new MichelsonValidationError(ex, `${ex.prim}: type can't be used inside a big_map`);\n }\n traverseType(ex, (ex) => assertMichelsonBigMapStorableType(ex));\n }\n }\n return true;\n}\n\nconst viewRe = new RegExp('^[a-zA-Z0-9_.%@]*$');\n\nexport function assertViewNameValid(name: StringLiteral): void {\n if (name.string.length > maxViewNameLength) {\n throw new MichelsonValidationError(name, `view name too long: ${name.string}`);\n }\n if (!viewRe.test(name.string)) {\n throw new MichelsonValidationError(name, `invalid character(s) in view name: ${name.string}`);\n }\n}\n\n/**\n * Checks if the node is a valid Michelson type expression.\n * This is a type guard function which either returns true of throws an exception.\n * @param ex An AST node\n */\nexport function assertMichelsonType(ex: Expr): ex is MichelsonType {\n /* istanbul ignore else */\n if (assertPrimOrSeq(ex)) {\n if (isPrim(ex)) {\n if (!Object.prototype.hasOwnProperty.call(typeIDs, ex.prim)) {\n throw new MichelsonValidationError(ex, 'type expected');\n }\n traverseType(ex, (ex) => assertMichelsonType(ex));\n }\n }\n return true;\n}\n\nfunction traverseType(ex: Prim | Expr[], cb: (ex: Prim | Expr[]) => void): ex is MichelsonType {\n if (Array.isArray(ex) || ex.prim === 'pair') {\n const args = Array.isArray(ex) ? ex : ex.args;\n if (args === undefined || args.length < 2) {\n throw new MichelsonValidationError(ex, 'at least 2 arguments expected');\n }\n args.forEach((a) => {\n if (assertPrimOrSeq(a)) {\n cb(a);\n }\n });\n return true;\n }\n\n switch (ex.prim) {\n case 'option':\n case 'list':\n /* istanbul ignore else */\n if (assertArgs(ex, 1) && assertPrimOrSeq(ex.args[0])) {\n cb(ex.args[0]);\n }\n break;\n\n case 'contract':\n /* istanbul ignore else */\n if (assertArgs(ex, 1)) {\n assertMichelsonPassableType(ex.args[0]);\n }\n break;\n\n case 'or':\n /* istanbul ignore else */\n if (assertArgs(ex, 2) && assertPrimOrSeq(ex.args[0]) && assertPrimOrSeq(ex.args[1])) {\n cb(ex.args[0]);\n cb(ex.args[1]);\n }\n break;\n\n case 'lambda':\n /* istanbul ignore else */\n if (assertArgs(ex, 2)) {\n assertMichelsonType(ex.args[0]);\n assertMichelsonType(ex.args[1]);\n }\n break;\n\n case 'set':\n /* istanbul ignore else */\n if (assertArgs(ex, 1)) {\n assertMichelsonComparableType(ex.args[0]);\n }\n break;\n\n case 'map':\n /* istanbul ignore else */\n if (assertArgs(ex, 2) && assertPrimOrSeq(ex.args[0]) && assertPrimOrSeq(ex.args[1])) {\n assertMichelsonComparableType(ex.args[0]);\n cb(ex.args[1]);\n }\n break;\n\n case 'big_map':\n /* istanbul ignore else */\n if (assertArgs(ex, 2) && assertPrimOrSeq(ex.args[0]) && assertPrimOrSeq(ex.args[1])) {\n assertMichelsonComparableType(ex.args[0]);\n assertMichelsonBigMapStorableType(ex.args[1]);\n cb(ex.args[1]);\n }\n break;\n\n case 'ticket':\n /* istanbul ignore else */\n if (assertArgs(ex, 1) && assertPrimOrSeq(ex.args[0])) {\n assertMichelsonComparableType(ex.args[0]);\n }\n break;\n\n case 'sapling_state':\n case 'sapling_transaction':\n if (assertArgs(ex, 1)) {\n assertIntLiteral(ex.args[0]);\n }\n break;\n\n default:\n assertArgs(ex, 0);\n }\n\n return true;\n}\n/**\n * Checks if the node is a valid Michelson data literal such as `(Pair {Elt \"0\" 0} 0)`.\n * This is a type guard function which either returns true of throws an exception.\n * @param ex An AST node\n */\nexport function assertMichelsonData(ex: Expr): ex is MichelsonData {\n if ('int' in ex || 'string' in ex || 'bytes' in ex) {\n return true;\n }\n\n if (Array.isArray(ex)) {\n let mapElts = 0;\n for (const n of ex) {\n if (isPrim(n) && n.prim === 'Elt') {\n /* istanbul ignore else */\n if (assertArgs(n, 2)) {\n assertMichelsonData(n.args[0]);\n assertMichelsonData(n.args[1]);\n }\n mapElts++;\n } else {\n assertMichelsonData(n);\n }\n }\n\n if (mapElts !== 0 && mapElts !== ex.length) {\n throw new MichelsonValidationError(ex, \"data entries and map elements can't be intermixed\");\n }\n return true;\n }\n\n if (isPrim(ex)) {\n switch (ex.prim) {\n case 'Unit':\n case 'True':\n case 'False':\n case 'None':\n assertArgs(ex, 0);\n break;\n\n case 'Pair':\n /* istanbul ignore else */\n if (ex.args === undefined || ex.args.length < 2) {\n throw new MichelsonValidationError(ex, 'at least 2 arguments expected');\n }\n for (const a of ex.args) {\n assertMichelsonData(a);\n }\n break;\n\n case 'Left':\n case 'Right':\n case 'Some':\n /* istanbul ignore else */\n if (assertArgs(ex, 1)) {\n assertMichelsonData(ex.args[0]);\n }\n break;\n\n default:\n if (Object.prototype.hasOwnProperty.call(instructionIDs, ex.prim)) {\n assertMichelsonInstruction(ex);\n } else {\n throw new MichelsonValidationError(ex, 'data entry or instruction expected');\n }\n }\n } else {\n throw new MichelsonValidationError(ex, 'data entry expected');\n }\n\n return true;\n}\n\n/**\n * Checks if the node is a valid Michelson smart contract source containing all required and valid properties such as `parameter`, `storage` and `code`.\n * This is a type guard function which either returns true of throws an exception.\n * @param ex An AST node\n */\nexport function assertMichelsonContract(ex: Expr): ex is MichelsonContract {\n /* istanbul ignore else */\n if (assertSeq(ex)) {\n const toplevelSec: { [sec: string]: boolean } = {};\n const views: { [name: string]: boolean } = {};\n for (const sec of ex) {\n if (assertPrim(sec)) {\n if (sec.prim !== 'view') {\n if (sec.prim in toplevelSec) {\n throw new MichelsonValidationError(ex, `duplicate contract section: ${sec.prim}`);\n }\n toplevelSec[sec.prim] = true;\n }\n\n /* istanbul ignore else */\n switch (sec.prim) {\n case 'code':\n if (assertArgs(sec, 1)) {\n /* istanbul ignore else */\n if (assertSeq(sec.args[0])) {\n assertMichelsonInstruction(sec.args[0]);\n }\n }\n break;\n\n case 'parameter':\n if (assertArgs(sec, 1)) {\n assertMichelsonPassableType(sec.args[0]);\n }\n break;\n\n case 'storage':\n if (assertArgs(sec, 1)) {\n assertMichelsonStorableType(sec.args[0]);\n }\n break;\n\n case 'view':\n if (assertArgs(sec, 4)) {\n if (assertStringLiteral(sec.args[0])) {\n const name = sec.args[0];\n if (name.string in views) {\n throw new MichelsonValidationError(ex, `duplicate view name: ${name.string}`);\n }\n views[name.string] = true;\n assertViewNameValid(name);\n }\n\n assertMichelsonPushableType(sec.args[1]);\n assertMichelsonPushableType(sec.args[2]);\n if (assertSeq(sec.args[3])) {\n assertMichelsonInstruction(sec.args[3]);\n }\n }\n break;\n\n default:\n throw new MichelsonValidationError(ex, `unexpected contract section: ${sec.prim}`);\n }\n }\n }\n }\n return true;\n}\n\n/**\n * Checks if the node is a valid Michelson smart contract source containing all required and valid properties such as `parameter`, `storage` and `code`.\n * @param ex An AST node\n */\nexport function isMichelsonScript(ex: Expr): ex is MichelsonContract {\n try {\n assertMichelsonContract(ex);\n return true;\n } catch {\n return false;\n }\n}\n\n/**\n * Checks if the node is a valid Michelson data literal such as `(Pair {Elt \"0\" 0} 0)`.\n * @param ex An AST node\n */\nexport function isMichelsonData(ex: Expr): ex is MichelsonData {\n try {\n assertMichelsonData(ex);\n return true;\n } catch {\n return false;\n }\n}\n\n/**\n * Checks if the node is a valid Michelson code (sequence of instructions).\n * @param ex An AST node\n */\nexport function isMichelsonCode(ex: Expr): ex is InstructionList {\n try {\n assertMichelsonInstruction(ex);\n return true;\n } catch {\n return false;\n }\n}\n\n/**\n * Checks if the node is a valid Michelson type expression.\n * @param ex An AST node\n */\nexport function isMichelsonType(ex: Expr): ex is MichelsonType {\n try {\n assertMichelsonType(ex);\n return true;\n } catch {\n return false;\n }\n}\n\nexport function isInstruction(p: Prim): p is MichelsonInstruction {\n return Object.prototype.hasOwnProperty.call(instructionIDs, p.prim);\n}\n\nexport function assertDataListIfAny(d: MichelsonData): d is MichelsonData[] {\n if (!Array.isArray(d)) {\n return false;\n }\n for (const v of d) {\n if ('prim' in v) {\n if (isInstruction(v)) {\n throw new MichelsonError(d, `Instruction outside of a lambda: ${JSON.stringify(d)}`);\n } else if (v.prim === 'Elt') {\n throw new MichelsonError(d, `Elt item outside of a map literal: ${JSON.stringify(d)}`);\n }\n }\n }\n return true;\n}\n","import { BytesLiteral, Expr, IntLiteral, Prim } from './micheline';\nimport {\n MichelsonTypeID,\n MichelsonDataID,\n MichelsonSectionID,\n MichelsonInstructionID,\n MichelsonData,\n MichelsonType,\n MichelsonDataOr,\n MichelsonDataOption,\n MichelsonInstruction,\n} from './michelson-types';\nimport {\n assertDataListIfAny,\n assertMichelsonData,\n assertMichelsonInstruction,\n} from './michelson-validator';\nimport {\n checkDecodeTezosID,\n encodeTezosID,\n hexBytes,\n isPairData,\n isPairType,\n MichelsonTypeError,\n parseBytes,\n parseDate,\n parseHex,\n unpackComb,\n} from './utils';\n\ntype PrimID =\n | MichelsonTypeID\n | MichelsonDataID\n | MichelsonSectionID\n | MichelsonInstructionID\n | 'Elt'\n | 'constant';\n\nconst primitives: PrimID[] = [\n 'parameter',\n 'storage',\n 'code',\n 'False',\n 'Elt',\n 'Left',\n 'None',\n 'Pair',\n 'Right',\n 'Some',\n 'True',\n 'Unit',\n 'PACK',\n 'UNPACK',\n 'BLAKE2B',\n 'SHA256',\n 'SHA512',\n 'ABS',\n 'ADD',\n 'AMOUNT',\n 'AND',\n 'BALANCE',\n 'CAR',\n 'CDR',\n 'CHECK_SIGNATURE',\n 'COMPARE',\n 'CONCAT',\n 'CONS',\n 'CREATE_ACCOUNT',\n 'CREATE_CONTRACT',\n 'IMPLICIT_ACCOUNT',\n 'DIP',\n 'DROP',\n 'DUP',\n 'EDIV',\n 'EMPTY_MAP',\n 'EMPTY_SET',\n 'EQ',\n 'EXEC',\n 'FAILWITH',\n 'GE',\n 'GET',\n 'GT',\n 'HASH_KEY',\n 'IF',\n 'IF_CONS',\n 'IF_LEFT',\n 'IF_NONE',\n 'INT',\n 'LAMBDA',\n 'LE',\n 'LEFT',\n 'LOOP',\n 'LSL',\n 'LSR',\n 'LT',\n 'MAP',\n 'MEM',\n 'MUL',\n 'NEG',\n 'NEQ',\n 'NIL',\n 'NONE',\n 'NOT',\n 'NOW',\n 'OR',\n 'PAIR',\n 'PUSH',\n 'RIGHT',\n 'SIZE',\n 'SOME',\n 'SOURCE',\n 'SENDER',\n 'SELF',\n 'STEPS_TO_QUOTA',\n 'SUB',\n 'SWAP',\n 'TRANSFER_TOKENS',\n 'SET_DELEGATE',\n 'UNIT',\n 'UPDATE',\n 'XOR',\n 'ITER',\n 'LOOP_LEFT',\n 'ADDRESS',\n 'CONTRACT',\n 'ISNAT',\n 'CAST',\n 'RENAME',\n 'bool',\n 'contract',\n 'int',\n 'key',\n 'key_hash',\n 'lambda',\n 'list',\n 'map',\n 'big_map',\n 'nat',\n 'option',\n 'or',\n 'pair',\n 'set',\n 'signature',\n 'string',\n 'bytes',\n 'mutez',\n 'timestamp',\n 'unit',\n 'operation',\n 'address',\n 'SLICE',\n 'DIG',\n 'DUG',\n 'EMPTY_BIG_MAP',\n 'APPLY',\n 'chain_id',\n 'CHAIN_ID',\n 'LEVEL',\n 'SELF_ADDRESS',\n 'never',\n 'NEVER',\n 'UNPAIR',\n 'VOTING_POWER',\n 'TOTAL_VOTING_POWER',\n 'KECCAK',\n 'SHA3',\n 'PAIRING_CHECK',\n 'bls12_381_g1',\n 'bls12_381_g2',\n 'bls12_381_fr',\n 'sapling_state',\n 'sapling_transaction',\n 'SAPLING_EMPTY_STATE',\n 'SAPLING_VERIFY_UPDATE',\n 'ticket',\n 'TICKET',\n 'READ_TICKET',\n 'SPLIT_TICKET',\n 'JOIN_TICKETS',\n 'GET_AND_UPDATE',\n 'chest',\n 'chest_key',\n 'OPEN_CHEST',\n 'VIEW',\n 'view',\n 'constant',\n 'SUB_MUTEZ',\n];\n\nconst primTags: { [key in PrimID]?: number } & { [key: string]: number | undefined } =\n Object.assign({}, ...primitives.map((v, i) => ({ [v]: i })));\n\nenum Tag {\n Int = 0,\n String = 1,\n Sequence = 2,\n Prim0 = 3,\n Prim0Annot = 4,\n Prim1 = 5,\n Prim1Annot = 6,\n Prim2 = 7,\n Prim2Annot = 8,\n Prim = 9,\n Bytes = 10,\n}\nclass Writer {\n public buffer: number[] = [];\n\n get length(): number {\n return this.buffer.length;\n }\n\n writeBytes(val: number[]) {\n this.buffer.push(...val.map((v) => v & 0xff));\n }\n\n writeUint8(val: number) {\n const v = val | 0;\n this.buffer.push(v & 0xff);\n }\n\n writeUint16(val: number) {\n const v = val | 0;\n this.buffer.push((v >> 8) & 0xff);\n this.buffer.push(v & 0xff);\n }\n\n writeUint32(val: number) {\n const v = val | 0;\n this.buffer.push((v >> 24) & 0xff);\n this.buffer.push((v >> 16) & 0xff);\n this.buffer.push((v >> 8) & 0xff);\n this.buffer.push(v & 0xff);\n }\n\n writeInt8(val: number) {\n this.writeUint8(val);\n }\n\n writeInt16(val: number) {\n this.writeUint16(val);\n }\n\n writeInt32(val: number) {\n this.writeUint32(val);\n }\n}\n\nconst boundsErr = new Error('bounds out of range');\nclass Reader {\n constructor(\n private buffer: number[] | Uint8Array,\n private idx: number = 0,\n private cap: number = buffer.length\n ) {}\n\n /** Remaining length */\n get length(): number {\n return this.cap - this.idx;\n }\n\n readBytes(len: number): number[] | Uint8Array {\n if (this.cap - this.idx < len) {\n throw boundsErr;\n }\n const ret = this.buffer.slice(this.idx, this.idx + len);\n this.idx += len;\n return ret;\n }\n\n reader(len: number): Reader {\n if (this.cap - this.idx < len) {\n throw boundsErr;\n }\n const ret = new Reader(this.buffer, this.idx, this.idx + len);\n this.idx += len;\n return ret;\n }\n\n copy(): Reader {\n return new Reader(this.buffer, this.idx, this.cap);\n }\n\n readUint8(): number {\n if (this.cap - this.idx < 1) {\n throw boundsErr;\n }\n return this.buffer[this.idx++] >>> 0;\n }\n\n readUint16(): number {\n if (this.cap - this.idx < 2) {\n throw boundsErr;\n }\n const x0 = this.buffer[this.idx++];\n const x1 = this.buffer[this.idx++];\n return ((x0 << 8) | x1) >>> 0;\n }\n\n readUint32(): number {\n if (this.cap - this.idx < 4) {\n throw boundsErr;\n }\n const x0 = this.buffer[this.idx++];\n const x1 = this.buffer[this.idx++];\n const x2 = this.buffer[this.idx++];\n const x3 = this.buffer[this.idx++];\n return ((x0 << 24) | (x1 << 16) | (x2 << 8) | x3) >>> 0;\n }\n\n readInt8(): number {\n if (this.cap - this.idx < 1) {\n throw boundsErr;\n }\n const x = this.buffer[this.idx++];\n return (x << 24) >> 24;\n }\n\n readInt16(): number {\n if (this.cap - this.idx < 2) {\n throw boundsErr;\n }\n const x0 = this.buffer[this.idx++];\n const x1 = this.buffer[this.idx++];\n return (((x0 << 8) | x1) << 16) >> 16;\n }\n\n readInt32(): number {\n if (this.cap - this.idx < 4) {\n throw boundsErr;\n }\n const x0 = this.buffer[this.idx++];\n const x1 = this.buffer[this.idx++];\n const x2 = this.buffer[this.idx++];\n const x3 = this.buffer[this.idx++];\n return (x0 << 24) | (x1 << 16) | (x2 << 8) | x3;\n }\n}\n\nenum ContractID {\n Implicit = 0,\n Originated = 1,\n}\n\nenum PublicKeyHashID {\n ED25519 = 0,\n SECP256K1 = 1,\n P256 = 2,\n}\n\ntype AddressType =\n | 'ED25519PublicKeyHash'\n | 'SECP256K1PublicKeyHash'\n | 'P256PublicKeyHash'\n | 'ContractHash';\n\nexport interface Address {\n type: AddressType;\n hash: number[] | Uint8Array;\n entryPoint?: string;\n}\n\nfunction readPublicKeyHash(rd: Reader): Address {\n let type: AddressType;\n const tag = rd.readUint8();\n switch (tag) {\n case PublicKeyHashID.ED25519:\n type = 'ED25519PublicKeyHash';\n break;\n case PublicKeyHashID.SECP256K1:\n type = 'SECP256K1PublicKeyHash';\n break;\n case PublicKeyHashID.P256:\n type = 'P256PublicKeyHash';\n break;\n default:\n throw new Error(`unknown public key hash tag: ${tag}`);\n }\n return { type, hash: rd.readBytes(20) };\n}\n\nfunction readAddress(rd: Reader): Address {\n let address: Address;\n const tag = rd.readUint8();\n switch (tag) {\n case ContractID.Implicit:\n address = readPublicKeyHash(rd);\n break;\n\n case ContractID.Originated:\n address = {\n type: 'ContractHash',\n hash: rd.readBytes(20),\n };\n rd.readBytes(1);\n break;\n\n default:\n throw new Error(`unknown address tag: ${tag}`);\n }\n\n if (rd.length !== 0) {\n // entry point\n const dec = new TextDecoder();\n address.entryPoint = dec.decode(new Uint8Array(rd.readBytes(rd.length)));\n }\n return address;\n}\n\nfunction writePublicKeyHash(a: Address, w: Writer): void {\n let tag: PublicKeyHashID;\n switch (a.type) {\n case 'ED25519PublicKeyHash':\n tag = PublicKeyHashID.ED25519;\n break;\n case 'SECP256K1PublicKeyHash':\n tag = PublicKeyHashID.SECP256K1;\n break;\n case 'P256PublicKeyHash':\n tag = PublicKeyHashID.P256;\n break;\n default:\n throw new Error(`unexpected address type: ${a.type}`);\n }\n w.writeUint8(tag);\n w.writeBytes(Array.from(a.hash));\n}\n\nfunction writeAddress(a: Address, w: Writer): void {\n if (a.type === 'ContractHash') {\n w.writeUint8(ContractID.Originated);\n w.writeBytes(Array.from(a.hash));\n w.writeUint8(0);\n } else {\n w.writeUint8(ContractID.Implicit);\n writePublicKeyHash(a, w);\n }\n\n if (a.entryPoint !== undefined && a.entryPoint !== '' && a.entryPoint !== 'default') {\n const enc = new TextEncoder();\n const bytes = enc.encode(a.entryPoint);\n w.writeBytes(Array.from(bytes));\n }\n}\n\nenum PublicKeyID {\n ED25519 = 0,\n SECP256K1 = 1,\n P256 = 2,\n}\n\nexport type PublicKeyType = 'ED25519PublicKey' | 'SECP256K1PublicKey' | 'P256PublicKey';\nexport interface PublicKey {\n type: PublicKeyType;\n publicKey: number[] | Uint8Array;\n}\n\nfunction readPublicKey(rd: Reader): PublicKey {\n let ln: number;\n let type: PublicKeyType;\n const tag = rd.readUint8();\n switch (tag) {\n case PublicKeyID.ED25519:\n type = 'ED25519PublicKey';\n ln = 32;\n break;\n case PublicKeyID.SECP256K1:\n type = 'SECP256K1PublicKey';\n ln = 33;\n break;\n case PublicKeyID.P256:\n type = 'P256PublicKey';\n ln = 33;\n break;\n default:\n throw new Error(`unknown public key tag: ${tag}`);\n }\n return { type, publicKey: rd.readBytes(ln) };\n}\n\nfunction writePublicKey(pk: PublicKey, w: Writer): void {\n let tag: PublicKeyID;\n switch (pk.type) {\n case 'ED25519PublicKey':\n tag = PublicKeyID.ED25519;\n break;\n case 'SECP256K1PublicKey':\n tag = PublicKeyID.SECP256K1;\n break;\n case 'P256PublicKey':\n tag = PublicKeyID.P256;\n break;\n default:\n throw new Error(`unexpected public key type: ${pk.type}`);\n }\n w.writeUint8(tag);\n w.writeBytes(Array.from(pk.publicKey));\n}\n\ntype WriteTransformFunc = (e: Expr) => [Expr, IterableIterator<WriteTransformFunc>];\n\nfunction writeExpr(expr: Expr, wr: Writer, tf: WriteTransformFunc): void {\n const [e, args] = tf(expr);\n\n if (Array.isArray(e)) {\n const w = new Writer();\n for (const v of e) {\n const a = args.next();\n if (a.done) {\n throw new Error('REPORT ME: iterator is done');\n }\n writeExpr(v, w, a.value);\n }\n wr.writeUint8(Tag.Sequence);\n wr.writeUint32(w.length);\n wr.writeBytes(w.buffer);\n return;\n }\n\n if ('string' in e) {\n const enc = new TextEncoder();\n const bytes = enc.encode(e.string);\n wr.writeUint8(Tag.String);\n wr.writeUint32(bytes.length);\n wr.writeBytes(Array.from(bytes));\n return;\n }\n\n if ('int' in e) {\n wr.writeUint8(Tag.Int);\n let val = BigInt(e.int);\n const sign = val < 0;\n if (sign) {\n val = -val;\n }\n let i = 0;\n do {\n const bits = i === 0 ? BigInt(6) : BigInt(7);\n let byte = val & ((BigInt(1) << bits) - BigInt(1));\n val >>= bits;\n if (val) {\n byte |= BigInt(0x80);\n }\n if (i === 0 && sign) {\n byte |= BigInt(0x40);\n }\n wr.writeUint8(Number(byte));\n i++;\n } while (val);\n return;\n }\n\n if ('bytes' in e) {\n const bytes = parseHex(e.bytes);\n wr.writeUint8(Tag.Bytes);\n wr.writeUint32(bytes.length);\n wr.writeBytes(bytes);\n return;\n }\n\n const prim = primTags[e.prim];\n if (prim === undefined) {\n throw new TypeError(`Can't encode primary: ${e.prim}`);\n }\n\n const tag =\n (e.args?.length || 0) < 3\n ? Tag.Prim0 +\n (e.args?.length || 0) * 2 +\n (e.annots === undefined || e.annots.length === 0 ? 0 : 1)\n : Tag.Prim;\n\n wr.writeUint8(tag);\n wr.writeUint8(prim);\n\n if (e.args !== undefined) {\n if (e.args.length < 3) {\n for (const v of e.args) {\n const a = args.next();\n if (a.done) {\n throw new Error('REPORT ME: iterator is done');\n }\n writeExpr(v, wr, a.value);\n }\n } else {\n const w = new Writer();\n for (const v of e.args) {\n const a = args.next();\n if (a.done) {\n throw new Error('REPORT ME: iterator is done');\n }\n writeExpr(v, w, a.value);\n }\n wr.writeUint32(w.length);\n wr.writeBytes(w.buffer);\n }\n }\n\n if (e.annots !== undefined && e.annots.length !== 0) {\n const enc = new TextEncoder();\n const bytes = enc.encode(e.annots.join(' '));\n wr.writeUint32(bytes.length);\n wr.writeBytes(Array.from(bytes));\n } else if (e.args !== undefined && e.args.length >= 3) {\n wr.writeUint32(0);\n }\n}\n\ntype ReadTransformFuncs = [(e: Expr) => IterableIterator<ReadTransformFuncs>, (e: Expr) => Expr];\n\nfunction readExpr(rd: Reader, tf: ReadTransformFuncs): Expr {\n function* passThrough() {\n while (true) {\n yield readPassThrough;\n }\n }\n const [args, tr] = tf;\n const tag = rd.readUint8();\n switch (tag) {\n case Tag.Int: {\n const buf: number[] = [];\n let byte: number;\n do {\n byte = rd.readInt8();\n buf.push(byte);\n } while ((byte & 0x80) !== 0);\n let val = BigInt(0);\n let sign = false;\n for (let i = buf.length - 1; i >= 0; i--) {\n const bits = i === 0 ? BigInt(6) : BigInt(7);\n const byte = BigInt(buf[i]);\n val <<= bits;\n val |= byte & ((BigInt(1) << bits) - BigInt(1));\n if (i === 0) {\n sign = !!(byte & BigInt(0x40));\n }\n }\n if (sign) {\n val = -val;\n }\n return tr({ int: String(val) });\n }\n\n case Tag.String: {\n const length = rd.readUint32();\n const bytes = rd.readBytes(length);\n const dec = new TextDecoder();\n return tr({ string: dec.decode(new Uint8Array(bytes)) });\n }\n\n case Tag.Bytes: {\n const length = rd.readUint32();\n const bytes = rd.readBytes(length);\n const hex = hexBytes(Array.from(bytes));\n return tr({ bytes: hex });\n }\n\n case Tag.Sequence: {\n const length = rd.readUint32();\n let res: Expr[] = [];\n let savedrd = rd.copy();\n // make two passes\n let it: IterableIterator<ReadTransformFuncs> = passThrough();\n for (let n = 0; n < 2; n++) {\n const r = savedrd.reader(length);\n res = [];\n while (r.length > 0) {\n const a = it.next();\n if (a.done) {\n throw new Error('REPORT ME: iterator is done');\n }\n res.push(readExpr(r, a.value));\n }\n // make a second pass with injected side effects\n it = args(res);\n savedrd = rd;\n }\n return tr(res);\n }\n\n default: {\n if (tag > 9) {\n throw new Error(`Unknown tag: ${tag}`);\n }\n const p = rd.readUint8();\n if (p >= primitives.length) {\n throw new Error(`Unknown primitive tag: ${p}`);\n }\n const prim = primitives[p];\n const argn = (tag - 3) >> 1;\n let res: Prim = { prim };\n // make two passes\n let it: IterableIterator<ReadTransformFuncs> = passThrough();\n let savedrd = rd.copy();\n for (let n = 0; n < 2; n++) {\n res = { prim };\n if (argn < 3) {\n for (let i = 0; i < argn; i++) {\n const a = it.next();\n if (a.done) {\n throw new Error('REPORT ME: iterator is done');\n }\n res.args = res.args || [];\n res.args.push(readExpr(savedrd, a.value));\n }\n } else {\n res.args = res.args || [];\n const length = savedrd.readUint32();\n const r = savedrd.reader(length);\n while (r.length > 0) {\n const a = it.next();\n if (a.done) {\n throw new Error('REPORT ME: iterator is done');\n }\n res.args.push(readExpr(r, a.value));\n }\n }\n // make a second pass with injected side effects\n it = args(res);\n savedrd = rd;\n }\n\n if (((tag - 3) & 1) === 1 || argn === 3) {\n // read annotations\n const length = rd.readUint32();\n if (length !== 0) {\n const bytes = rd.readBytes(length);\n const dec = new TextDecoder();\n res.annots = dec.decode(new Uint8Array(bytes)).split(' ');\n }\n }\n return tr(res);\n }\n }\n}\n\nconst isOrData = (e: Expr): e is MichelsonDataOr =>\n 'prim' in e && (e.prim === 'Left' || e.prim === 'Right');\nconst isOptionData = (e: Expr): e is MichelsonDataOption =>\n 'prim' in e && (e.prim === 'Some' || e.prim === 'None');\n\nconst getWriteTransformFunc = (t: MichelsonType): WriteTransformFunc => {\n if (isPairType(t)) {\n return (d: Expr) => {\n if (!isPairData(d)) {\n throw new MichelsonTypeError(t, d, `pair expected: ${JSON.stringify(d)}`);\n }\n assertDataListIfAny(d);\n // combs aren't used in pack format\n const tc = unpackComb('pair', t);\n const dc = unpackComb('Pair', d);\n return [\n dc,\n (function* () {\n for (const a of tc.args) {\n yield getWriteTransformFunc(a);\n }\n })(),\n ];\n };\n }\n\n switch (t.prim) {\n case 'or':\n return (d: Expr) => {\n if (!isOrData(d)) {\n throw new MichelsonTypeError(t, d, `or expected: ${JSON.stringify(d)}`);\n }\n return [\n d,\n (function* () {\n yield getWriteTransformFunc(t.args[d.prim === 'Left' ? 0 : 1]);\n })(),\n ];\n };\n\n case 'option':\n return (d: Expr) => {\n if (!isOptionData(d)) {\n throw new MichelsonTypeError(t, d, `option expected: ${JSON.stringify(d)}`);\n }\n return [\n d,\n (function* () {\n const dd = d;\n if (dd.prim === 'Some') {\n yield getWriteTransformFunc(t.args[0]);\n }\n })(),\n ];\n };\n\n case 'list':\n case 'set':\n return (d: Expr) => {\n if (!Array.isArray(d)) {\n throw new MichelsonTypeError(t, d, `${t.prim} expected: ${JSON.stringify(d)}`);\n }\n return [\n d,\n (function* () {\n for (const _v of d) {\n yield getWriteTransformFunc(t.args[0]);\n }\n })(),\n ];\n };\n\n case 'map':\n return (d: Expr) => {\n if (!Array.isArray(d)) {\n throw new MichelsonTypeError(t, d, `map expected: ${JSON.stringify(d)}`);\n }\n return [\n d,\n (function* (): Generator<WriteTransformFunc> {\n for (const _elt of d) {\n yield (elt: Expr) => {\n if (!('prim' in elt) || elt.prim !== 'Elt') {\n throw new MichelsonTypeError(\n t,\n elt,\n `map element expected: ${JSON.stringify(elt)}`\n );\n }\n return [\n elt,\n (function* () {\n for (const a of t.args) {\n yield getWriteTransformFunc(a);\n }\n })(),\n ];\n };\n }\n })(),\n ];\n };\n\n case 'chain_id':\n return (d: Expr) => {\n if (!('bytes' in d) && !('string' in d)) {\n throw new MichelsonTypeError(t, d, `chain id expected: ${JSON.stringify(d)}`);\n }\n let bytes: BytesLiteral;\n if ('string' in d) {\n const id = checkDecodeTezosID(d.string, 'ChainID');\n if (id === null) {\n throw new MichelsonTypeError(t, d, `chain id base58 expected: ${d.string}`);\n }\n bytes = { bytes: hexBytes(id[1]) };\n } else {\n bytes = d;\n }\n return [bytes, [][Symbol.iterator]()];\n };\n\n case 'signature':\n return (d: Expr) => {\n if (!('bytes' in d) && !('string' in d)) {\n throw new MichelsonTypeError(t, d, `signature expected: ${JSON.stringify(d)}`);\n }\n let bytes: BytesLiteral;\n if ('string' in d) {\n const sig = checkDecodeTezosID(\n d.string,\n 'ED25519Signature',\n 'SECP256K1Signature',\n 'P256Signature',\n 'GenericSignature'\n );\n if (sig === null) {\n throw new MichelsonTypeError(t, d, `signature base58 expected: ${d.string}`);\n }\n bytes = { bytes: hexBytes(sig[1]) };\n } else {\n bytes = d;\n }\n return [bytes, [][Symbol.iterator]()];\n };\n\n case 'key_hash':\n return (d: Expr) => {\n if (!('bytes' in d) && !('string' in d)) {\n throw new MichelsonTypeError(t, d, `key hash expected: ${JSON.stringify(d)}`);\n }\n let bytes: BytesLiteral;\n if ('string' in d) {\n const pkh = checkDecodeTezosID(\n d.string,\n 'ED25519PublicKeyHash',\n 'SECP256K1PublicKeyHash',\n 'P256PublicKeyHash'\n );\n if (pkh === null) {\n throw new MichelsonTypeError(t, d, `key hash base58 expected: ${d.string}`);\n }\n const w = new Writer();\n writePublicKeyHash({ type: pkh[0], hash: pkh[1] }, w);\n bytes = { bytes: hexBytes(w.buffer) };\n } else {\n bytes = d;\n }\n return [bytes, [][Symbol.iterator]()];\n };\n\n case 'key':\n return (d: Expr) => {\n if (!('bytes' in d) && !('string' in d)) {\n throw new MichelsonTypeError(t, d, `public key expected: ${JSON.stringify(d)}`);\n }\n let bytes: BytesLiteral;\n if ('string' in d) {\n const key = checkDecodeTezosID(\n d.string,\n 'ED25519PublicKey',\n 'SECP256K1PublicKey',\n 'P256PublicKey'\n );\n if (key === null) {\n throw new MichelsonTypeError(t, d, `public key base58 expected: ${d.string}`);\n }\n const w = new Writer();\n writePublicKey({ type: key[0], publicKey: key[1] }, w);\n bytes = { bytes: hexBytes(w.buffer) };\n } else {\n bytes = d;\n }\n return [bytes, [][Symbol.iterator]()];\n };\n\n case 'address':\n return (d: Expr) => {\n if (!('bytes' in d) && !('string' in d)) {\n throw new MichelsonTypeError(t, d, `address expected: ${JSON.stringify(d)}`);\n }\n let bytes: BytesLiteral;\n if ('string' in d) {\n const s = d.string.split('%');\n const address = checkDecodeTezosID(\n s[0],\n 'ED25519PublicKeyHash',\n 'SECP256K1PublicKeyHash',\n 'P256PublicKeyHash',\n 'ContractHash'\n );\n if (address === null) {\n throw new MichelsonTypeError(t, d, `address base58 expected: ${d.string}`);\n }\n const w = new Writer();\n writeAddress(\n { type: address[0], hash: address[1], entryPoint: s.length > 1 ? s[1] : undefined },\n w\n );\n bytes = { bytes: hexBytes(w.buffer) };\n } else {\n bytes = d;\n }\n return [bytes, [][Symbol.iterator]()];\n };\n\n case 'timestamp':\n return (d: Expr) => {\n if (!('string' in d) && !('int' in d)) {\n throw new MichelsonTypeError(t, d, `timestamp expected: ${JSON.stringify(d)}`);\n }\n let int: IntLiteral;\n if ('string' in d) {\n const p = parseDate(d);\n if (p === null) {\n throw new MichelsonTypeError(t, d, `can't parse date: ${d.string}`);\n }\n int = { int: String(Math.floor(p.getTime() / 1000)) };\n } else {\n int = d;\n }\n return [int, [][Symbol.iterator]()];\n };\n\n default:\n return writePassThrough;\n }\n};\n\ntype PushInstruction = MichelsonInstruction & Prim<'PUSH'>;\nconst isPushInstruction = (e: Expr): e is PushInstruction => 'prim' in e && e.prim === 'PUSH';\n\nconst writePassThrough: WriteTransformFunc = (e: Expr) => {\n if (isPushInstruction(e)) {\n assertMichelsonInstruction(e);\n // capture inlined type definition\n return [\n e,\n (function* () {\n yield writePassThrough;\n yield getWriteTransformFunc(e.args[0]);\n })(),\n ];\n }\n\n return [\n e,\n (function* () {\n while (true) {\n yield writePassThrough;\n }\n })(),\n ];\n};\n\n/**\n * Serializes any value of packable type to its optimized binary representation\n * identical to the one used by PACK and UNPACK Michelson instructions.\n * Without a type definition (not recommended) the data will be encoded as a binary form of a generic Michelson expression.\n * Type definition allows some types like `timestamp` and `address` and other base58 representable types to be encoded to\n * corresponding optimized binary forms borrowed from the Tezos protocol\n *\n * ```typescript\n * const data: MichelsonData = {\n * string: \"KT1RvkwF4F7pz1gCoxkyZrG1RkrxQy3gmFTv%foo\"\n * };\n *\n * const typ: MichelsonType = {\n * prim: \"address\"\n * };\n *\n * const packed = packData(data, typ);\n *\n * // 050a0000001901be41ee922ddd2cf33201e49d32da0afec571dce300666f6f\n * ```\n *\n * Without a type definition the base58 encoded address will be treated as a string\n * ```typescript\n * const data: MichelsonData = {\n * string: \"KT1RvkwF4F7pz1gCoxkyZrG1RkrxQy3gmFTv%foo\"\n * };\n *\n * const packed = packData(data);\n *\n * // 0501000000284b543152766b7746344637707a3167436f786b795a724731526b7278517933676d46547625666f6f\n * ```\n * @param d Data object\n * @param t Optional type definition\n * @returns Binary representation as numeric array\n */\nexport function packData(d: MichelsonData, t?: MichelsonType): number[] {\n const w = new Writer();\n w.writeUint8(5);\n writeExpr(d, w, t !== undefined ? getWriteTransformFunc(t) : writePassThrough);\n return w.buffer;\n}\n\n/**\n * Serializes any value of packable type to its optimized binary representation\n * identical to the one used by PACK and UNPACK Michelson instructions.\n * Same as {@link packData} but returns a `bytes` Michelson data literal instead of an array\n *\n * ```typescript\n * const data: MichelsonData = {\n * string: \"2019-09-26T10:59:51Z\"\n * };\n *\n * const typ: MichelsonType = {\n * prim: \"timestamp\"\n * };\n *\n * const packed = packDataBytes(data, typ);\n *\n * // { bytes: \"0500a7e8e4d80b\" }\n * ```\n * @param d Data object\n * @param t Optional type definition\n * @returns Binary representation as a bytes literal\n */\nexport function packDataBytes(d: MichelsonData, t?: MichelsonType): BytesLiteral {\n return { bytes: hexBytes(packData(d, t)) };\n}\n\nconst getReadTransformFuncs = (t: MichelsonType): ReadTransformFuncs => {\n if (isPairType(t)) {\n const args = Array.isArray(t) ? t : t.args;\n return [\n (d: Expr) => {\n if (!isPairData(d)) {\n throw new MichelsonTypeError(t, d, `pair expected: ${JSON.stringify(d)}`);\n }\n return (function* () {\n for (const a of args) {\n yield getReadTransformFuncs(a);\n }\n })();\n },\n (d: Expr) => d,\n ];\n }\n\n switch (t.prim) {\n case 'or':\n return [\n (d: Expr) => {\n if (!isOrData(d)) {\n throw new MichelsonTypeError(t, d, `or expected: ${JSON.stringify(d)}`);\n }\n return (function* () {\n yield getReadTransformFuncs(t.args[d.prim === 'Left' ? 0 : 1]);\n })();\n },\n (d: Expr) => d,\n ];\n\n case 'option':\n return [\n (d: Expr) => {\n if (!isOptionData(d)) {\n throw new MichelsonTypeError(t, d, `option expected: ${JSON.stringify(d)}`);\n }\n return (function* () {\n if (d.prim === 'Some') {\n yield getReadTransformFuncs(t.args[0]);\n }\n })();\n },\n (d: Expr) => d,\n ];\n\n case 'list':\n case 'set':\n return [\n (d: Expr) => {\n if (!Array.isArray(d)) {\n throw new MichelsonTypeError(t, d, `${t.prim} expected: ${JSON.stringify(d)}`);\n }\n return (function* () {\n while (true) {\n yield getReadTransformFuncs(t.args[0]);\n }\n })();\n },\n (d: Expr) => d,\n ];\n\n case 'map':\n return [\n (d: Expr): IterableIterator<ReadTransformFuncs> => {\n if (!Array.isArray(d)) {\n throw new MichelsonTypeError(t, d, `map expected: ${JSON.stringify(d)}`);\n }\n return (function* (): Generator<ReadTransformFuncs> {\n while (true) {\n yield [\n (elt: Expr) => {\n if (!('prim' in elt) || elt.prim !== 'Elt') {\n throw new MichelsonTypeError(\n t,\n elt,\n `map element expected: ${JSON.stringify(elt)}`\n );\n }\n return (function* () {\n for (const a of t.args) {\n yield getReadTransformFuncs(a);\n }\n })();\n },\n (elt: Expr) => elt,\n ];\n }\n })();\n },\n (d: Expr) => d,\n ];\n\n case 'chain_id':\n return [\n () => [][Symbol.iterator](),\n (d: Expr) => {\n if (!('bytes' in d) && !('string' in d)) {\n throw new MichelsonTypeError(t, d, `chain id expected: ${JSON.stringify(d)}`);\n }\n if ('string' in d) {\n return d;\n }\n const bytes = parseBytes(d.bytes);\n if (bytes === null) {\n throw new MichelsonTypeError(t, d, `can't parse bytes: ${d.bytes}`);\n }\n return { string: encodeTezosID('ChainID', bytes) };\n },\n ];\n\n case 'signature':\n return [\n () => [][Symbol.iterator](),\n (d: Expr) => {\n if (!('bytes' in d) && !('string' in d)) {\n throw new MichelsonTypeError(t, d, `signature expected: ${JSON.stringify(d)}`);\n }\n if ('string' in d) {\n return d;\n }\n const bytes = parseBytes(d.bytes);\n if (bytes === null) {\n throw new MichelsonTypeError(t, d, `can't parse bytes: ${d.bytes}`);\n }\n return { string: encodeTezosID('GenericSignature', bytes) };\n },\n ];\n\n case 'key_hash':\n return [\n () => [][Symbol.iterator](),\n (d: Expr) => {\n if (!('bytes' in d) && !('string' in d)) {\n throw new MichelsonTypeError(t, d, `key hash expected: ${JSON.stringify(d)}`);\n }\n if ('string' in d) {\n return d;\n }\n const bytes = parseBytes(d.bytes);\n if (bytes === null) {\n throw new MichelsonTypeError(t, d, `can't parse bytes: ${d.bytes}`);\n }\n const rd = new Reader(new Uint8Array(bytes));\n const addr = readPublicKeyHash(rd);\n return {\n string:\n encodeTezosID(addr.type, addr.hash) + (addr.entryPoint ? '%' + addr.entryPoint : ''),\n };\n },\n ];\n\n case 'key':\n return [\n () => [][Symbol.iterator](),\n (d: Expr) => {\n if (!('bytes' in d) && !('string' in d)) {\n throw new MichelsonTypeError(t, d, `public key expected: ${JSON.stringify(d)}`);\n }\n if ('string' in d) {\n return d;\n }\n const bytes = parseBytes(d.bytes);\n if (bytes === null) {\n throw new MichelsonTypeError(t, d, `can't parse bytes: ${d.bytes}`);\n }\n const rd = new Reader(new Uint8Array(bytes));\n const pk = readPublicKey(rd);\n return { string: encodeTezosID(pk.type, pk.publicKey) };\n },\n ];\n\n case 'address':\n return [\n () => [][Symbol.iterator](),\n (d: Expr) => {\n if (!('bytes' in d) && !('string' in d)) {\n throw new MichelsonTypeError(t, d, `address expected: ${JSON.stringify(d)}`);\n }\n if ('string' in d) {\n return d;\n }\n const bytes = parseBytes(d.bytes);\n if (bytes === null) {\n throw new MichelsonTypeError(t, d, `can't parse bytes: ${d.bytes}`);\n }\n const rd = new Reader(new Uint8Array(bytes));\n const addr = readAddress(rd);\n return {\n string:\n encodeTezosID(addr.type, addr.hash) + (addr.entryPoint ? '%' + addr.entryPoint : ''),\n };\n },\n ];\n\n case 'timestamp':\n return [\n () => [][Symbol.iterator](),\n (d: Expr) => {\n if (!('int' in d) && !('string' in d)) {\n throw new MichelsonTypeError(t, d, `address expected: ${JSON.stringify(d)}`);\n }\n if ('string' in d) {\n return d;\n }\n const date = new Date(parseInt(d.int, 10) * 1000);\n return { string: date.toISOString().slice(0, 19) + 'Z' };\n },\n ];\n\n default:\n return readPassThrough;\n }\n};\n\nconst readPassThrough: ReadTransformFuncs = [\n (e: Expr) => {\n if (isPushInstruction(e)) {\n assertMichelsonInstruction(e);\n // capture inlined type definition\n return (function* () {\n yield readPassThrough;\n yield getReadTransformFuncs(e.args[0]);\n })();\n }\n\n return (function* () {\n while (true) {\n yield readPassThrough;\n }\n })();\n },\n (e: Expr) => e,\n];\n\n/**\n * Deserialize a byte array into the corresponding Michelson value.\n * Without a type definition (not recommended) the binary data will be treated as a binary form of a generic Michelson expression and returned as is.\n * Type definition allows some types like `timestamp` and `address` and other types usually encoded in optimized binary forms to be transformed\n * back to their string representations like base58 and ISO timestamps.\n *\n * ```typescript\n * const src = [0x05, 0x00, 0xa7, 0xe8, 0xe4, 0xd8, 0x0b];\n *\n * const typ: MichelsonType = {\n * prim: \"timestamp\"\n * };\n *\n * const data = unpackData(src, typ);\n *\n * // { string: \"2019-09-26T10:59:51Z\" }\n * ```\n *\n * Same binary data without a type definition\n * ```typescript\n * const src = [0x05, 0x00, 0xa7, 0xe8, 0xe4, 0xd8, 0x0b];\n *\n * const data = unpackData(src);\n *\n * // { int: \"1569495591\" }\n * ```\n * @param src Byte array\n * @param t Optional type definition\n * @returns Deserialized data\n */\nexport function unpackData(src: number[] | Uint8Array, t?: MichelsonType): MichelsonData {\n const r = new Reader(src);\n if (r.readUint8() !== 5) {\n throw new Error('incorrect packed data magic number');\n }\n const ex = readExpr(r, t !== undefined ? getReadTransformFuncs(t) : readPassThrough);\n if (assertMichelsonData(ex)) {\n return ex;\n }\n throw new Error(); // never\n}\n\n/**\n * Deserialize a byte array into the corresponding Michelson value.\n * Same as {@link unpackData} but takes a `bytes` Michelson data literal instead of an array\n *\n * ```typescript\n * const src = { bytes: \"0500a7e8e4d80b\" };\n *\n * const typ: MichelsonType = {\n * prim: \"timestamp\"\n * };\n *\n * const data = unpackDataBytes(src, typ);\n *\n * // { string: \"2019-09-26T10:59:51Z\" }\n * ```\n * @param src Bytes object\n * @param t Optional type definition\n * @returns Deserialized data\n */\nexport function unpackDataBytes(src: BytesLiteral, t?: MichelsonType): MichelsonData {\n const bytes = parseBytes(src.bytes);\n if (bytes === null) {\n throw new Error(`can't parse bytes: \"${src.bytes}\"`);\n }\n return unpackData(bytes, t);\n}\n\n// helper functions also used by validator\n\nexport function decodeAddressBytes(b: BytesLiteral): Address {\n const bytes = parseBytes(b.bytes);\n if (bytes === null) {\n throw new Error(`can't parse bytes: \"${b.bytes}\"`);\n }\n const rd = new Reader(new Uint8Array(bytes));\n return readAddress(rd);\n}\n\nexport function decodePublicKeyHashBytes(b: BytesLiteral): Address {\n const bytes = parseBytes(b.bytes);\n if (bytes === null) {\n throw new Error(`can't parse bytes: \"${b.bytes}\"`);\n }\n const rd = new Reader(new Uint8Array(bytes));\n return readPublicKeyHash(rd);\n}\n\nexport function decodePublicKeyBytes(b: BytesLiteral): PublicKey {\n const bytes = parseBytes(b.bytes);\n if (bytes === null) {\n throw new Error(`can't parse bytes: \"${b.bytes}\"`);\n }\n const rd = new Reader(new Uint8Array(bytes));\n return readPublicKey(rd);\n}\n","import { Prim, Expr } from './micheline';\nimport {\n MichelsonType,\n MichelsonData,\n MichelsonCode,\n MichelsonTypeOption,\n MichelsonContract,\n MichelsonContractSection,\n MichelsonReturnType,\n MichelsonTypePair,\n MichelsonInstruction,\n InstructionList,\n MichelsonTypeID,\n MichelsonTypeOr,\n DefaultProtocol,\n Protocol,\n refContract,\n MichelsonTypeAddress,\n MichelsonContractView,\n ProtoInferiorTo,\n} from './michelson-types';\nimport {\n unpackAnnotations,\n MichelsonError,\n isNatural,\n LongInteger,\n parseBytes,\n compareBytes,\n isDecimal,\n checkDecodeTezosID,\n UnpackedAnnotations,\n Nullable,\n UnpackAnnotationsOptions,\n unpackComb,\n MichelsonTypeError,\n isPairType,\n isPairData,\n parseDate,\n} from './utils';\nimport { decodeBase58Check } from './base58';\nimport { decodeAddressBytes, decodePublicKeyBytes, decodePublicKeyHashBytes } from './binary';\nimport {\n assertMichelsonComparableType,\n assertMichelsonPackableType,\n assertMichelsonStorableType,\n assertMichelsonBigMapStorableType,\n assertMichelsonPushableType,\n isInstruction,\n assertDataListIfAny,\n} from './michelson-validator';\nimport { ParserOptions } from './micheline-parser';\n\nexport interface Context extends ParserOptions {\n contract?: MichelsonContract;\n traceCallback?: (t: InstructionTrace) => void;\n}\n\nexport class MichelsonInstructionError extends MichelsonError<MichelsonCode> {\n /**\n * @param val Value of a type node caused the error\n * @param stackState Current stack state\n * @param message An error message\n */\n constructor(val: MichelsonCode, public stackState: MichelsonReturnType, message?: string) {\n super(val, message);\n Object.setPrototypeOf(this, MichelsonInstructionError.prototype);\n }\n}\n\n// 'sequence as a pair' edo syntax helpers\nfunction typeID(t: MichelsonType): MichelsonTypeID {\n return Array.isArray(t) ? 'pair' : t.prim;\n}\n\ntype TypeArgs<T extends MichelsonType> = T extends Prim ? T['args'] : T;\nfunction typeArgs<T extends MichelsonType>(t: T): TypeArgs<T> {\n return ('prim' in t ? (t as Extract<MichelsonType, Prim>).args : t) as TypeArgs<T>;\n}\n\nfunction assertScalarTypesEqual(a: MichelsonType, b: MichelsonType, field = false): void {\n if (typeID(a) !== typeID(b)) {\n throw new MichelsonTypeError(a, undefined, `types mismatch: ${typeID(a)} != ${typeID(b)}`);\n }\n\n const ann = [unpackAnnotations(a), unpackAnnotations(b)];\n if (ann[0].t && ann[1].t && ann[0].t[0] !== ann[1].t[0]) {\n throw new MichelsonTypeError(\n a,\n undefined,\n `${typeID(a)}: type names mismatch: ${ann[0].t[0]} != ${ann[1].t[0]}`\n );\n }\n if (field && ann[0].f && ann[1].f && ann[0].f[0] !== ann[1].f[0]) {\n throw new MichelsonTypeError(\n a,\n undefined,\n `${typeID(a)}: field names mismatch: ${ann[0].f[0]} != ${ann[1].f}`\n );\n }\n\n if (isPairType(a)) {\n const aArgs = unpackComb('pair', a);\n const bArgs = unpackComb('pair', b as typeof a);\n assertScalarTypesEqual(aArgs.args[0], bArgs.args[0], true);\n assertScalarTypesEqual(aArgs.args[1], bArgs.args[1], true);\n return;\n }\n\n switch (a.prim) {\n case 'option':\n case 'list':\n case 'contract':\n case 'set':\n case 'ticket':\n assertScalarTypesEqual(a.args[0], (b as typeof a).args[0]);\n break;\n\n case 'or':\n assertScalarTypesEqual(a.args[0], (b as typeof a).args[0], true);\n assertScalarTypesEqual(a.args[1], (b as typeof a).args[1], true);\n break;\n\n case 'lambda':\n case 'map':\n case 'big_map':\n assertScalarTypesEqual(a.args[0], (b as typeof a).args[0]);\n assertScalarTypesEqual(a.args[1], (b as typeof a).args[1]);\n break;\n\n case 'sapling_state':\n case 'sapling_transaction':\n if (parseInt(a.args[0].int, 10) !== parseInt((b as typeof a).args[0].int, 10)) {\n throw new MichelsonTypeError(\n a,\n undefined,\n `${typeID(a)}: type argument mismatch: ${a.args[0].int} != ${(b as typeof a).args[0].int}`\n );\n }\n }\n}\n\nfunction assertStacksEqual<T1 extends MichelsonType[], T2 extends T1>(a: T1, b: T2): void {\n if (a.length !== b.length) {\n throw new MichelsonTypeError(a, undefined, `stack length mismatch: ${a.length} != ${b.length}`);\n }\n for (let i = 0; i < a.length; i++) {\n assertScalarTypesEqual(a[i], b[i]);\n }\n}\n\nexport function assertTypeAnnotationsValid(t: MichelsonType, field = false): void {\n if (!Array.isArray(t)) {\n const ann = unpackAnnotations(t);\n if ((ann.t?.length || 0) > 1) {\n throw new MichelsonTypeError(\n t,\n undefined,\n `${t.prim}: at most one type annotation allowed: ${t.annots}`\n );\n }\n\n if (field) {\n if ((ann.f?.length || 0) > 1) {\n throw new MichelsonTypeError(\n t,\n undefined,\n `${t.prim}: at most one field annotation allowed: ${t.annots}`\n );\n }\n } else {\n if ((ann.f?.length || 0) > 0) {\n throw new MichelsonTypeError(\n t,\n undefined,\n `${t.prim}: field annotations aren't allowed: ${t.annots}`\n );\n }\n }\n }\n\n if (isPairType(t)) {\n const args = typeArgs(t);\n for (const a of args) {\n assertTypeAnnotationsValid(a, true);\n }\n return;\n }\n\n switch (t.prim) {\n case 'option':\n case 'list':\n case 'contract':\n case 'set':\n assertTypeAnnotationsValid(t.args[0]);\n break;\n\n case 'or':\n for (const a of t.args) {\n assertTypeAnnotationsValid(a, true);\n }\n break;\n\n case 'lambda':\n case 'map':\n case 'big_map':\n assertTypeAnnotationsValid(t.args[0]);\n assertTypeAnnotationsValid(t.args[1]);\n }\n}\n\n// Data integrity check\n\nfunction _compareMichelsonData(t: MichelsonType, a: MichelsonData, b: MichelsonData): number {\n if (isPairType(t)) {\n if (isPairData(a) && isPairData(b)) {\n assertDataListIfAny(a);\n assertDataListIfAny(b);\n const tComb = unpackComb('pair', t);\n const aComb = unpackComb('Pair', a);\n const bComb = unpackComb('Pair', b);\n const x = _compareMichelsonData(tComb.args[0], aComb.args[0], bComb.args[0]);\n if (x !== 0) {\n return x;\n }\n return _compareMichelsonData(tComb.args[0], aComb.args[1], bComb.args[1]);\n }\n } else {\n switch (t.prim) {\n case 'int':\n case 'nat':\n case 'mutez':\n if ('int' in a && 'int' in b) {\n return new LongInteger(a.int).cmp(new LongInteger(b.int));\n }\n break;\n\n case 'string':\n if ('string' in a && 'string' in b) {\n const x = a.string.localeCompare(b.string);\n return x < 0 ? -1 : x > 0 ? 1 : 0;\n }\n break;\n\n case 'bytes':\n if ('bytes' in a && 'bytes' in b) {\n const aa = parseBytes(a.bytes);\n const bb = parseBytes(b.bytes);\n if (aa !== null && bb !== null) {\n return compareBytes(aa, bb);\n }\n }\n break;\n\n case 'bool':\n if (\n 'prim' in a &&\n 'prim' in b &&\n (a.prim === 'True' || a.prim === 'False') &&\n (b.prim === 'True' || b.prim === 'False')\n ) {\n return a.prim === b.prim ? 0 : a.prim === 'False' ? -1 : 1;\n }\n break;\n\n case 'key':\n case 'key_hash':\n case 'address':\n case 'signature':\n case 'chain_id':\n if (('string' in a || 'bytes' in a) && ('string' in b || 'bytes' in b)) {\n return compareBytes(\n 'string' in a ? decodeBase58Check(a.string) : parseBytes(a.bytes) || [],\n 'string' in b ? decodeBase58Check(b.string) : parseBytes(b.bytes) || []\n );\n }\n break;\n\n case 'timestamp':\n if (('string' in a || 'int' in a) && ('string' in b || 'int' in b)) {\n const aa = parseDate(a);\n const bb = parseDate(b);\n if (aa !== null && bb !== null) {\n const x = aa.valueOf() - bb.valueOf();\n return x < 0 ? -1 : x > 0 ? 1 : 0;\n }\n }\n break;\n\n case 'unit':\n if ('prim' in a && 'prim' in b && a.prim === 'Unit' && b.prim === 'Unit') {\n return 0;\n }\n }\n }\n\n // Unlikely, types are expected to be verified before the function call\n throw new MichelsonTypeError(\n t,\n undefined,\n `${typeID(t)}: not comparable values: ${JSON.stringify(a)}, ${JSON.stringify(b)}`\n );\n}\n\n// Simplified version of assertMichelsonInstruction() for previously validated data\nfunction isFunction(d: MichelsonData): d is InstructionList {\n if (!Array.isArray(d)) {\n return false;\n }\n for (const v of d) {\n if (!((Array.isArray(v) && isFunction(v)) || ('prim' in v && isInstruction(v)))) {\n return false;\n }\n }\n return true;\n}\n\nfunction assertDataValidInternal(d: MichelsonData, t: MichelsonType, ctx: Context | null): void {\n if (isPairType(t)) {\n if (isPairData(d)) {\n assertDataListIfAny(d);\n const dc = unpackComb('Pair', d);\n const tc = unpackComb('pair', t);\n assertDataValidInternal(dc.args[0], tc.args[0], ctx);\n assertDataValidInternal(dc.args[1], tc.args[1], ctx);\n return;\n }\n throw new MichelsonTypeError(t, d, `pair expected: ${JSON.stringify(d)}`);\n }\n\n switch (t.prim) {\n // Atomic literals\n case 'int':\n if ('int' in d && isDecimal(d.int)) {\n return;\n }\n throw new MichelsonTypeError(t, d, `integer value expected: ${JSON.stringify(d)}`);\n\n case 'nat':\n case 'mutez':\n if ('int' in d && isNatural(d.int)) {\n return;\n }\n throw new MichelsonTypeError(t, d, `natural value expected: ${JSON.stringify(d)}`);\n\n case 'string':\n if ('string' in d) {\n return;\n }\n throw new MichelsonTypeError(t, d, `string value expected: ${JSON.stringify(d)}`);\n\n case 'bytes':\n case 'bls12_381_g1':\n case 'bls12_381_g2':\n if ('bytes' in d && parseBytes(d.bytes) !== null) {\n return;\n }\n throw new MichelsonTypeError(t, d, `bytes value expected: ${JSON.stringify(d)}`);\n\n case 'bool':\n if ('prim' in d && (d.prim === 'True' || d.prim === 'False')) {\n return;\n }\n throw new MichelsonTypeError(t, d, `boolean value expected: ${JSON.stringify(d)}`);\n\n case 'key_hash':\n if (\n 'string' in d &&\n checkDecodeTezosID(\n d.string,\n 'ED25519PublicKeyHash',\n 'SECP256K1PublicKeyHash',\n 'P256PublicKeyHash'\n ) !== null\n ) {\n return;\n } else if ('bytes' in d) {\n try {\n decodePublicKeyHashBytes(d);\n return;\n } catch (err) {\n // ignore message\n }\n }\n throw new MichelsonTypeError(t, d, `key hash expected: ${JSON.stringify(d)}`);\n\n case 'timestamp':\n if (('string' in d || 'int' in d) && parseDate(d) !== null) {\n return;\n }\n throw new MichelsonTypeError(t, d, `timestamp expected: ${JSON.stringify(d)}`);\n\n case 'address':\n if ('string' in d) {\n let address = d.string;\n const ep = d.string.indexOf('%');\n if (ep >= 0) {\n // trim entry point\n address = d.string.slice(0, ep);\n }\n if (\n checkDecodeTezosID(\n address,\n 'ED25519PublicKeyHash',\n 'SECP256K1PublicKeyHash',\n 'P256PublicKeyHash',\n 'ContractHash'\n ) !== null\n ) {\n return;\n }\n } else if ('bytes' in d) {\n try {\n decodeAddressBytes(d);\n return;\n } catch (err) {\n // ignore message\n }\n }\n throw new MichelsonTypeError(t, d, `address expected: ${JSON.stringify(d)}`);\n\n case 'key':\n if (\n 'string' in d &&\n checkDecodeTezosID(d.string, 'ED25519PublicKey', 'SECP256K1PublicKey', 'P256PublicKey') !==\n null\n ) {\n return;\n } else if ('bytes' in d) {\n try {\n decodePublicKeyBytes(d);\n return;\n } catch (err) {\n // ignore message\n }\n }\n throw new MichelsonTypeError(t, d, `public key expected: ${JSON.stringify(d)}`);\n\n case 'unit':\n if ('prim' in d && d.prim === 'Unit') {\n return;\n }\n throw new MichelsonTypeError(t, d, `unit value expected: ${JSON.stringify(d)}`);\n\n case 'signature':\n if (\n 'bytes' in d ||\n ('string' in d &&\n checkDecodeTezosID(\n d.string,\n 'ED25519Signature',\n 'SECP256K1Signature',\n 'P256Signature',\n 'GenericSignature'\n ) !== null)\n ) {\n return;\n }\n throw new MichelsonTypeError(t, d, `signature expected: ${JSON.stringify(d)}`);\n\n case 'chain_id':\n if ('bytes' in d || 'string' in d) {\n const x = 'string' in d ? decodeBase58Check(d.string) : parseBytes(d.bytes);\n if (x !== null) {\n return;\n }\n }\n throw new MichelsonTypeError(t, d, `chain id expected: ${JSON.stringify(d)}`);\n\n // Complex types\n case 'option':\n if ('prim' in d) {\n if (d.prim === 'None') {\n return;\n } else if (d.prim === 'Some') {\n assertDataValidInternal(d.args[0], t.args[0], ctx);\n return;\n }\n }\n throw new MichelsonTypeError(t, d, `option expected: ${JSON.stringify(d)}`);\n\n case 'list':\n case 'set':\n if (assertDataListIfAny(d)) {\n //let prev: MichelsonData | undefined;\n for (const v of d) {\n assertDataValidInternal(v, t.args[0], ctx);\n }\n return;\n }\n throw new MichelsonTypeError(t, d, `${t.prim} expected: ${JSON.stringify(d)}`);\n\n case 'or':\n if ('prim' in d) {\n if (d.prim === 'Left') {\n assertDataValidInternal(d.args[0], t.args[0], ctx);\n return;\n } else if (d.prim === 'Right') {\n assertDataValidInternal(d.args[0], t.args[1], ctx);\n return;\n }\n }\n throw new MichelsonTypeError(t, d, `union (or) expected: ${JSON.stringify(d)}`);\n\n case 'lambda':\n if (isFunction(d)) {\n const ret = functionTypeInternal(d, [t.args[0]], ctx);\n if ('failed' in ret) {\n throw new MichelsonTypeError(t, d, `function is failed with error type: ${ret.failed}`);\n }\n if (ret.length !== 1) {\n throw new MichelsonTypeError(t, d, 'function must return a value');\n }\n assertScalarTypesEqual(t.args[1], ret[0]);\n return;\n }\n throw new MichelsonTypeError(t, d, `function expected: ${JSON.stringify(d)}`);\n\n case 'map':\n case 'big_map':\n if (Array.isArray(d)) {\n //let prev: MichelsonMapElt | undefined;\n for (const v of d) {\n if (!('prim' in v) || v.prim !== 'Elt') {\n throw new MichelsonTypeError(t, d, `map elements expected: ${JSON.stringify(d)}`);\n }\n assertDataValidInternal(v.args[0], t.args[0], ctx);\n assertDataValidInternal(v.args[1], t.args[1], ctx);\n }\n return;\n }\n throw new MichelsonTypeError(t, d, `${t.prim} expected: ${JSON.stringify(d)}`);\n\n case 'bls12_381_fr':\n if (('int' in d && isDecimal(d.int)) || ('bytes' in d && parseBytes(d.bytes) !== null)) {\n return;\n }\n throw new MichelsonTypeError(t, d, `BLS12-381 element expected: ${JSON.stringify(d)}`);\n\n case 'sapling_state':\n if (Array.isArray(d)) {\n return;\n }\n throw new MichelsonTypeError(t, d, `sapling state expected: ${JSON.stringify(d)}`);\n\n case 'ticket':\n assertDataValidInternal(\n d,\n {\n prim: 'pair',\n args: [{ prim: 'address' }, t.args[0], { prim: 'nat' }],\n },\n ctx\n );\n return;\n\n default:\n throw new MichelsonTypeError(\n t,\n d,\n `type ${typeID(t)} don't have Michelson literal representation`\n );\n }\n}\n\n// Code validation\n\ntype StackType<T extends (MichelsonTypeID[] | null)[]> = {\n [N in keyof T]: T[N] extends MichelsonTypeID[] ? MichelsonType<T[N][number]> : MichelsonType;\n};\n\nexport interface InstructionTrace {\n op: MichelsonCode;\n in: MichelsonType[];\n out: MichelsonReturnType;\n}\n\nfunction instructionListType(\n inst: InstructionList,\n stack: MichelsonType[],\n ctx: Context | null\n): MichelsonReturnType {\n let ret: MichelsonReturnType = stack;\n let s = stack;\n let i = 0;\n for (const op of inst) {\n const ft = functionTypeInternal(op, s, ctx);\n ret = ft;\n if ('failed' in ft) {\n break;\n }\n s = ft;\n i++;\n }\n\n if (\n 'failed' in ret &&\n ret.level == 0 &&\n (!('prim' in ret.failed) || ret.failed.prim !== 'never') &&\n i !== inst.length - 1\n ) {\n throw new MichelsonInstructionError(inst, ret, 'FAIL must appear in a tail position');\n }\n\n if (ctx?.traceCallback !== undefined) {\n const trace: InstructionTrace = {\n op: inst,\n in: stack,\n out: ret,\n };\n ctx.traceCallback(trace);\n }\n return 'failed' in ret ? { failed: ret.failed, level: ret.level + 1 } : ret;\n}\n\nfunction functionTypeInternal(\n inst: MichelsonCode,\n stack: MichelsonType[],\n ctx: Context | null\n): MichelsonReturnType {\n const proto = ctx?.protocol || DefaultProtocol;\n\n if (Array.isArray(inst)) {\n return instructionListType(inst, stack, ctx);\n }\n const instruction = inst; // Make it const for type guarding\n\n // make sure the stack has enough number of arguments of specific types\n function args<T extends (MichelsonTypeID[] | null)[]>(n: number, ...typeIds: T): StackType<T> {\n if (stack.length < typeIds.length + n) {\n throw new MichelsonInstructionError(\n instruction,\n stack,\n `${instruction.prim}: stack must have at least ${typeIds.length} element(s)`\n );\n }\n\n let i = n;\n for (const ids of typeIds) {\n if (ids !== null && ids.length !== 0) {\n let ii = 0;\n while (ii < ids.length && ids[ii] !== typeID(stack[i])) {\n ii++;\n }\n if (ii === ids.length) {\n throw new MichelsonInstructionError(\n instruction,\n stack,\n `${instruction.prim}: stack type mismatch: [${i}] expected to be ${ids}, got ${typeID(\n stack[i]\n )} instead`\n );\n }\n }\n i++;\n }\n return stack.slice(n, typeIds.length + n) as StackType<T>;\n }\n\n function rethrow<T extends unknown[], U>(fn: (...args: T) => U) {\n return (...args: T): U => {\n try {\n return fn(...args);\n } catch (err) {\n if (err instanceof MichelsonError) {\n throw new MichelsonInstructionError(instruction, stack, err.message);\n } else {\n throw err;\n }\n }\n };\n }\n\n function rethrowTypeGuard<T extends Expr, U extends MichelsonType & T>(fn: (arg: T) => arg is U) {\n return (arg: T): arg is U => {\n try {\n return fn(arg);\n } catch (err) {\n if (err instanceof MichelsonError) {\n throw new MichelsonInstructionError(instruction, stack, err.message);\n } else {\n throw err;\n }\n }\n };\n }\n\n const argAnn = rethrow(unpackAnnotations);\n const ensureStacksEqual = rethrow(assertStacksEqual);\n const ensureTypesEqual = rethrow(assertScalarTypesEqual);\n const ensureComparableType = rethrowTypeGuard(assertMichelsonComparableType);\n const ensurePackableType = rethrowTypeGuard(assertMichelsonPackableType);\n const ensureStorableType = rethrowTypeGuard(assertMichelsonStorableType);\n const ensurePushableType = rethrowTypeGuard(assertMichelsonPushableType);\n const ensureBigMapStorableType = rethrowTypeGuard(assertMichelsonBigMapStorableType);\n\n // unpack instruction annotations and assert their maximum number\n function instructionAnn(\n num: { f?: number; t?: number; v?: number },\n opt?: UnpackAnnotationsOptions\n ) {\n const a = argAnn(instruction, {\n ...opt,\n emptyFields: num.f !== undefined && num.f > 1,\n emptyVar: num.v !== undefined && num.v > 1,\n });\n const assertNum = (a: string[] | undefined, n: number | undefined, type: string) => {\n if (a && a.length > (n || 0)) {\n throw new MichelsonInstructionError(\n instruction,\n stack,\n `${instruction.prim}: at most ${n || 0} ${type} annotations allowed`\n );\n }\n };\n assertNum(a.f, num.f, 'field');\n assertNum(a.t, num.t, 'type');\n assertNum(a.v, num.v, 'variable');\n return a;\n }\n\n // also keeps annotation class if null is provided\n function annotate<T extends MichelsonType>(tt: T, a: Nullable<UnpackedAnnotations>): T {\n const tx: MichelsonType = tt;\n const t: Extract<MichelsonType, Prim> = Array.isArray(tx) ? { prim: 'pair', args: tx } : tx;\n const src = argAnn(t);\n const ann =\n a.v !== undefined || a.t !== undefined || a.f !== undefined\n ? [\n ...((a.v === null ? src.v : a.v) || []),\n ...((a.t === null ? src.t : a.t) || []),\n ...((a.f === null ? src.f : a.f) || []),\n ]\n : undefined;\n\n const { annots: _annots, ...rest } = t;\n return { ...(rest as T), ...(ann && ann.length !== 0 && { annots: ann }) };\n }\n\n // shortcut to copy at most one variable annotation from the instruction to the type\n function annotateVar<T extends MichelsonType>(t: T, def?: string) {\n const ia = instructionAnn({ v: 1 });\n return annotate(t, {\n v: ia.v !== undefined ? ia.v : def !== undefined ? [def] : null,\n t: null,\n });\n }\n\n // annotate CAR/CDR/UNPAIR/GET\n function annotateField(\n arg: MichelsonTypePair<MichelsonType[]>,\n field: MichelsonType,\n insAnn: UnpackedAnnotations,\n n: number,\n defField: string\n ): MichelsonType {\n const fieldAnn = argAnn(field).f?.[0]; // field's field annotation\n const insFieldAnn = insAnn.f?.[n];\n if (\n insFieldAnn !== undefined &&\n insFieldAnn !== '%' &&\n fieldAnn !== undefined &&\n insFieldAnn !== fieldAnn\n ) {\n throw new MichelsonInstructionError(\n instruction,\n stack,\n `${instruction.prim}: field names doesn't match: ${insFieldAnn} !== ${fieldAnn}`\n );\n }\n const insVarAnn = insAnn.v?.[n]; // nth instruction's variable annotation\n const varAnn = argAnn(arg).v?.[0]; // instruction argument's variable annotation\n return annotate(field, {\n t: null,\n v: insVarAnn\n ? insVarAnn === '@%'\n ? fieldAnn\n ? ['@' + fieldAnn.slice(1)]\n : undefined\n : insVarAnn === '@%%'\n ? varAnn\n ? ['@' + varAnn.slice(1) + '.' + (fieldAnn ? fieldAnn.slice(1) : defField)]\n : fieldAnn\n ? ['@' + fieldAnn.slice(1)]\n : undefined\n : [insVarAnn]\n : null,\n });\n }\n\n // comb helper functions\n function getN(\n src: MichelsonTypePair<MichelsonType[]>,\n n: number,\n i: number = n\n ): MichelsonType[] {\n const p = unpackComb('pair', src);\n if (i === 1) {\n return [p.args[0]];\n } else if (i === 2) {\n return p.args;\n }\n const right = p.args[1];\n if (isPairType(right)) {\n return [p.args[0], ...getN(right, n, i - 1)];\n } else {\n throw new MichelsonInstructionError(\n instruction,\n stack,\n `${instruction.prim}: at least ${n} fields are expected`\n );\n }\n }\n\n function getNth(\n src: MichelsonTypePair<MichelsonType[]>,\n n: number,\n i: number = n\n ): MichelsonType {\n if (i === 0) {\n return src;\n }\n const p = unpackComb('pair', src);\n if (i === 1) {\n return p.args[0];\n }\n const right = p.args[1];\n if (isPairType(right)) {\n return getNth(right, n, i - 2);\n } else if (i === 2) {\n return right;\n }\n throw new MichelsonInstructionError(\n instruction,\n stack,\n `${instruction.prim}: at least ${n + 1} fields are expected`\n );\n }\n\n function updateNth(\n src: MichelsonTypePair<MichelsonType[]>,\n x: MichelsonType,\n n: number,\n i: number = n\n ): MichelsonType {\n if (i === 0) {\n return x;\n }\n const p = unpackComb('pair', src);\n if (i === 1) {\n return {\n ...p,\n args: [x, p.args[1]],\n };\n }\n const right = p.args[1];\n if (isPairType(right)) {\n return {\n ...p,\n args: [p.args[0], updateNth(right, x, n, i - 2)],\n };\n } else if (i === 2) {\n return {\n ...p,\n args: [p.args[0], x],\n };\n }\n throw new MichelsonInstructionError(\n instruction,\n stack,\n `${instruction.prim}: at least ${n + 1} fields are expected`\n );\n }\n\n const varSuffix = (a: UnpackedAnnotations, suffix: string) => [\n '@' + (a.v ? a.v[0].slice(1) + '.' : '') + suffix,\n ];\n\n function branchType(br0: MichelsonReturnType, br1: MichelsonReturnType): MichelsonReturnType {\n if ('failed' in br0 || 'failed' in br1) {\n return 'failed' in br0 ? br1 : br0;\n } else {\n ensureStacksEqual(br0, br1);\n return br0;\n }\n }\n\n const retStack = ((instruction: MichelsonInstruction): MichelsonReturnType => {\n switch (instruction.prim) {\n case 'DUP': {\n const n = instruction.args ? parseInt(instruction.args[0].int, 10) : 1;\n if (n === 0) {\n throw new MichelsonInstructionError(instruction, stack, 'DUP 0 is forbidden');\n }\n const s = args(n - 1, null)[0];\n if (typeID(s) === 'ticket') {\n throw new MichelsonInstructionError(instruction, stack, \"ticket can't be DUPed\");\n }\n return [s, ...stack];\n }\n\n case 'SWAP': {\n const s = args(0, null, null);\n instructionAnn({});\n return [s[1], s[0], ...stack.slice(2)];\n }\n\n case 'SOME':\n return [\n annotate({ prim: 'option', args: [args(0, null)[0]] }, instructionAnn({ t: 1, v: 1 })),\n ...stack.slice(1),\n ];\n\n case 'UNIT':\n return [annotate({ prim: 'unit' }, instructionAnn({ v: 1, t: 1 })), ...stack];\n\n case 'PAIR': {\n const n = instruction.args ? parseInt(instruction.args[0].int, 10) : 2;\n if (n < 2) {\n throw new MichelsonInstructionError(instruction, stack, `PAIR ${n} is forbidden`);\n }\n const s = args(0, ...new Array<null>(n).fill(null));\n const ia = instructionAnn({ f: n, t: 1, v: 1 }, { specialFields: true });\n const trim = (s: string) => {\n const i = s.lastIndexOf('.');\n return s.slice(i > 0 ? i + 1 : 1);\n };\n const retArgs = s.map((v, i) => {\n const va = argAnn(v);\n const f =\n ia.f && ia.f.length > i && ia.f[i] !== '%'\n ? ia.f[i] === '%@'\n ? va.v\n ? ['%' + trim(va.v?.[0] || '')]\n : undefined\n : [ia.f[i]]\n : undefined;\n return annotate(v, { v: null, t: null, f });\n });\n return [\n annotate(\n {\n prim: 'pair',\n args: retArgs,\n },\n { t: ia.t, v: ia.v }\n ),\n ...stack.slice(n),\n ];\n }\n\n case 'UNPAIR': {\n const n = instruction.args ? parseInt(instruction.args[0].int, 10) : 2;\n if (n < 2) {\n throw new MichelsonInstructionError(instruction, stack, `UNPAIR ${n} is forbidden`);\n }\n const s = args(0, ['pair'])[0];\n const ia = instructionAnn({ f: 2, v: 2 }, { specialVar: true });\n const fields = getN(s, n);\n return [\n ...fields.map((field, i) => annotateField(s, field, ia, i, i === 0 ? 'car' : 'cdr')),\n ...stack.slice(1),\n ];\n }\n\n case 'CAR':\n case 'CDR': {\n const s = unpackComb('pair', args(0, ['pair'])[0]);\n const field = s.args[instruction.prim === 'CAR' ? 0 : 1];\n const ia = instructionAnn({ f: 1, v: 1 }, { specialVar: true });\n return [\n annotateField(s, field, ia, 0, instruction.prim.toLocaleLowerCase()),\n ...stack.slice(1),\n ];\n }\n\n case 'CONS': {\n const s = args(0, null, ['list']);\n ensureTypesEqual(s[0], s[1].args[0]);\n return [annotateVar({ prim: 'list', args: [s[1].args[0]] }), ...stack.slice(2)];\n }\n\n case 'SIZE':\n args(0, ['string', 'list', 'set', 'map', 'bytes']);\n return [annotateVar({ prim: 'nat' }), ...stack.slice(1)];\n\n case 'MEM': {\n const s = args(0, null, ['set', 'map', 'big_map']);\n ensureComparableType(s[0]);\n ensureTypesEqual(s[0], s[1].args[0]);\n return [annotateVar({ prim: 'bool' }), ...stack.slice(2)];\n }\n\n case 'GET':\n if (instruction.args) {\n // comb operation\n const n = parseInt(instruction.args[0].int, 10);\n const s = args(0, ['pair'])[0];\n return [annotateVar(getNth(s, n)), ...stack.slice(1)];\n } else {\n // map operation\n const s = args(0, null, ['map', 'big_map']);\n ensureComparableType(s[0]);\n ensureTypesEqual(s[0], s[1].args[0]);\n return [annotateVar({ prim: 'option', args: [s[1].args[1]] }), ...stack.slice(2)];\n }\n\n case 'UPDATE':\n if (instruction.args) {\n // comb operation\n const n = parseInt(instruction.args[0].int, 10);\n const s = args(0, null, ['pair']);\n return [annotateVar(updateNth(s[1], s[0], n)), ...stack.slice(2)];\n } else {\n // map operation\n const s0 = args(0, null, ['bool', 'option']);\n ensureComparableType(s0[0]);\n if (s0[1].prim === 'bool') {\n const s1 = args(2, ['set']);\n ensureTypesEqual(s0[0], s1[0].args[0]);\n return [\n annotateVar({\n prim: 'set',\n args: [annotate(s0[0], { t: null })],\n }),\n ...stack.slice(3),\n ];\n }\n\n const s1 = args(2, ['map', 'big_map']);\n ensureTypesEqual(s0[0], s1[0].args[0]);\n if (s1[0].prim === 'map') {\n return [\n annotateVar({\n prim: 'map',\n args: [annotate(s0[0], { t: null }), annotate(s0[1].args[0], { t: null })],\n }),\n ...stack.slice(3),\n ];\n }\n ensureBigMapStorableType(s0[1].args[0]);\n return [\n annotateVar({\n prim: 'big_map',\n args: [annotate(s0[0], { t: null }), annotate(s0[1].args[0], { t: null })],\n }),\n ...stack.slice(3),\n ];\n }\n\n case 'GET_AND_UPDATE': {\n const ia = instructionAnn({ v: 2 });\n const s = args(0, null, ['option'], ['map', 'big_map']);\n ensureComparableType(s[0]);\n ensureTypesEqual(s[0], s[2].args[0]);\n ensureTypesEqual(s[1].args[0], s[2].args[1]);\n const va = ia.v?.map((v) => (v !== '@' ? [v] : undefined));\n if (s[2].prim === 'map') {\n return [\n annotate({ prim: 'option', args: [s[2].args[1]] }, { v: va?.[0] }),\n annotate(\n {\n prim: 'map',\n args: [annotate(s[0], { t: null }), annotate(s[1].args[0], { t: null })],\n },\n { v: va?.[1] }\n ),\n ...stack.slice(3),\n ];\n }\n ensureBigMapStorableType(s[1].args[0]);\n return [\n annotate({ prim: 'option', args: [s[2].args[1]] }, { v: va?.[0] }),\n annotate(\n {\n prim: 'big_map',\n args: [annotate(s[0], { t: null }), annotate(s[1].args[0], { t: null })],\n },\n { v: va?.[1] }\n ),\n ...stack.slice(3),\n ];\n }\n\n case 'EXEC': {\n const s = args(0, null, ['lambda']);\n ensureTypesEqual(s[0], s[1].args[0]);\n return [annotateVar(s[1].args[1]), ...stack.slice(2)];\n }\n\n case 'APPLY': {\n const s = args(0, null, ['lambda']);\n ensureStorableType(s[0]);\n ensurePushableType(s[0]);\n if (!isPairType(s[1].args[0])) {\n throw new MichelsonInstructionError(\n instruction,\n stack,\n `${instruction.prim}: function's argument must be a pair: ${typeID(s[1].args[0])}`\n );\n }\n const pt = s[1].args[0];\n ensureTypesEqual(s[0], typeArgs(pt)[0]);\n return [\n annotateVar({ prim: 'lambda', args: [typeArgs(pt)[1], s[1].args[1]] }),\n ...stack.slice(2),\n ];\n }\n\n case 'FAILWITH': {\n const s = args(0, null)[0];\n if (!ProtoInferiorTo(proto, Protocol.PtEdo2Zk)) {\n ensurePackableType(s);\n }\n return { failed: s, level: 0 };\n }\n\n case 'NEVER':\n args(0, ['never']);\n return { failed: { prim: 'never' }, level: 0 };\n\n case 'RENAME':\n return [annotateVar(args(0, null)[0]), ...stack.slice(1)];\n\n case 'CONCAT': {\n const s0 = args(0, ['string', 'list', 'bytes']);\n if (s0[0].prim === 'list') {\n if (typeID(s0[0].args[0]) !== 'string' && typeID(s0[0].args[0]) !== 'bytes') {\n throw new MichelsonInstructionError(\n instruction,\n stack,\n `${instruction.prim}: can't concatenate list of ${typeID(s0[0].args[0])}'s`\n );\n }\n return [annotateVar(s0[0].args[0]), ...stack.slice(1)];\n }\n const s1 = args(1, ['string', 'bytes']);\n if (s0[0].prim !== s1[0].prim) {\n throw new MichelsonInstructionError(\n instruction,\n stack,\n `${instruction.prim}: can't concatenate ${s0[0].prim} with ${s1[0].prim}`\n );\n }\n return [annotateVar(s1[0]), ...stack.slice(2)];\n }\n\n case 'SLICE':\n return [\n annotateVar(\n { prim: 'option', args: [args(0, ['nat'], ['nat'], ['string', 'bytes'])[2]] },\n '@slice'\n ),\n ...stack.slice(3),\n ];\n\n case 'PACK': {\n const s = args(0, null)[0];\n ensurePackableType(s);\n return [annotateVar({ prim: 'bytes' }, '@packed'), ...stack.slice(1)];\n }\n\n case 'ADD': {\n const s = args(\n 0,\n ['nat', 'int', 'timestamp', 'mutez', 'bls12_381_g1', 'bls12_381_g2', 'bls12_381_fr'],\n ['nat', 'int', 'timestamp', 'mutez', 'bls12_381_g1', 'bls12_381_g2', 'bls12_381_fr']\n );\n if (\n (s[0].prim === 'nat' && s[1].prim === 'int') ||\n (s[0].prim === 'int' && s[1].prim === 'nat')\n ) {\n return [annotateVar({ prim: 'int' }), ...stack.slice(2)];\n } else if (\n (s[0].prim === 'int' && s[1].prim === 'timestamp') ||\n (s[0].prim === 'timestamp' && s[1].prim === 'int')\n ) {\n return [annotateVar({ prim: 'timestamp' }), ...stack.slice(2)];\n } else if (\n (s[0].prim === 'int' ||\n s[0].prim === 'nat' ||\n s[0].prim === 'mutez' ||\n s[0].prim === 'bls12_381_g1' ||\n s[0].prim === 'bls12_381_g2' ||\n s[0].prim === 'bls12_381_fr') &&\n s[0].prim === s[1].prim\n ) {\n return [annotateVar(s[0]), ...stack.slice(2)];\n }\n throw new MichelsonInstructionError(\n instruction,\n stack,\n `${instruction.prim}: can't add ${s[0].prim} to ${s[1].prim}`\n );\n }\n\n case 'SUB': {\n const s = ProtoInferiorTo(proto, Protocol.PsiThaCa)\n ? args(0, ['nat', 'int', 'timestamp', 'mutez'], ['nat', 'int', 'timestamp', 'mutez'])\n : args(0, ['nat', 'int', 'timestamp'], ['nat', 'int', 'timestamp']);\n\n if (\n ((s[0].prim === 'nat' || s[0].prim === 'int') &&\n (s[1].prim === 'nat' || s[1].prim === 'int')) ||\n (s[0].prim === 'timestamp' && s[1].prim === 'timestamp')\n ) {\n return [annotateVar({ prim: 'int' }), ...stack.slice(2)];\n } else if (s[0].prim === 'timestamp' && s[1].prim === 'int') {\n return [annotateVar({ prim: 'timestamp' }), ...stack.slice(2)];\n } else if (s[0].prim === 'mutez' && s[1].prim === 'mutez') {\n return [annotateVar({ prim: 'mutez' }), ...stack.slice(2)];\n }\n throw new MichelsonInstructionError(\n instruction,\n stack,\n `${instruction.prim}: can't subtract ${s[0].prim} from ${s[1].prim}`\n );\n }\n\n case 'SUB_MUTEZ': {\n const _s = args(0, ['mutez'], ['mutez']);\n return [annotateVar({ prim: 'option', args: [{ prim: 'mutez' }] }), ...stack.slice(2)];\n }\n\n case 'MUL': {\n const s = args(\n 0,\n ['nat', 'int', 'mutez', 'bls12_381_g1', 'bls12_381_g2', 'bls12_381_fr'],\n ['nat', 'int', 'mutez', 'bls12_381_g1', 'bls12_381_g2', 'bls12_381_fr']\n );\n if (\n (s[0].prim === 'nat' && s[1].prim === 'int') ||\n (s[0].prim === 'int' && s[1].prim === 'nat')\n ) {\n return [annotateVar({ prim: 'int' }), ...stack.slice(2)];\n } else if (\n (s[0].prim === 'nat' && s[1].prim === 'mutez') ||\n (s[0].prim === 'mutez' && s[1].prim === 'nat')\n ) {\n return [annotateVar({ prim: 'mutez' }), ...stack.slice(2)];\n } else if (\n ((s[0].prim === 'bls12_381_g1' ||\n s[0].prim === 'bls12_381_g2' ||\n s[0].prim === 'bls12_381_fr') &&\n s[1].prim === 'bls12_381_fr') ||\n ((s[0].prim === 'nat' || s[0].prim === 'int') && s[0].prim === s[1].prim)\n ) {\n return [annotateVar(s[0]), ...stack.slice(2)];\n } else if (\n ((s[0].prim === 'nat' || s[0].prim === 'int') && s[1].prim === 'bls12_381_fr') ||\n ((s[1].prim === 'nat' || s[1].prim === 'int') && s[0].prim === 'bls12_381_fr')\n ) {\n return [annotateVar({ prim: 'bls12_381_fr' }), ...stack.slice(2)];\n }\n throw new MichelsonInstructionError(\n instruction,\n stack,\n `${instruction.prim}: can't multiply ${s[0].prim} by ${s[1].prim}`\n );\n }\n\n case 'EDIV': {\n const res = (\n a: 'nat' | 'int' | 'mutez',\n b: 'nat' | 'int' | 'mutez'\n ): MichelsonTypeOption<MichelsonType> => ({\n prim: 'option',\n args: [{ prim: 'pair', args: [{ prim: a }, { prim: b }] }],\n });\n const s = args(0, ['nat', 'int', 'mutez'], ['nat', 'int', 'mutez']);\n if (s[0].prim === 'nat' && s[1].prim === 'nat') {\n return [annotateVar(res('nat', 'nat')), ...stack.slice(2)];\n } else if (\n (s[0].prim === 'nat' || s[0].prim === 'int') &&\n (s[1].prim === 'nat' || s[1].prim === 'int')\n ) {\n return [annotateVar(res('int', 'nat')), ...stack.slice(2)];\n } else if (s[0].prim === 'mutez' && s[1].prim === 'nat') {\n return [annotateVar(res('mutez', 'mutez')), ...stack.slice(2)];\n } else if (s[0].prim === 'mutez' && s[1].prim === 'mutez') {\n return [annotateVar(res('nat', 'mutez')), ...stack.slice(2)];\n }\n throw new MichelsonInstructionError(\n instruction,\n stack,\n `${instruction.prim}: can't euclideally divide ${s[0].prim} by ${s[1].prim}`\n );\n }\n\n case 'ABS':\n args(0, ['int']);\n return [annotateVar({ prim: 'nat' }), ...stack.slice(1)];\n\n case 'ISNAT':\n args(0, ['int']);\n return [annotateVar({ prim: 'option', args: [{ prim: 'nat' }] }), ...stack.slice(1)];\n\n case 'INT':\n args(0, ['nat', 'bls12_381_fr']);\n return [annotateVar({ prim: 'int' }), ...stack.slice(1)];\n\n case 'NEG': {\n const s = args(0, ['nat', 'int', 'bls12_381_g1', 'bls12_381_g2', 'bls12_381_fr'])[0];\n if (s.prim === 'nat' || s.prim === 'int') {\n return [annotateVar({ prim: 'int' }), ...stack.slice(1)];\n }\n return [annotateVar(s), ...stack.slice(1)];\n }\n\n case 'LSL':\n case 'LSR':\n args(0, ['nat'], ['nat']);\n return [annotateVar({ prim: 'nat' }), ...stack.slice(2)];\n\n case 'OR':\n case 'XOR': {\n const s = args(0, ['nat', 'bool'], ['nat', 'bool']);\n if (s[0].prim !== s[1].prim) {\n throw new MichelsonInstructionError(\n instruction,\n stack,\n `${instruction.prim}: both arguments must be of the same type: ${s[0].prim}, ${s[1].prim}`\n );\n }\n return [annotateVar(s[1]), ...stack.slice(2)];\n }\n\n case 'AND': {\n const s = args(0, ['nat', 'bool', 'int'], ['nat', 'bool']);\n if ((s[0].prim !== 'int' || s[1].prim !== 'nat') && s[0].prim !== s[1].prim) {\n throw new MichelsonInstructionError(\n instruction,\n stack,\n `${instruction.prim}: both arguments must be of the same type: ${s[0].prim}, ${s[1].prim}`\n );\n }\n return [annotateVar(s[1]), ...stack.slice(2)];\n }\n\n case 'NOT': {\n const s = args(0, ['nat', 'bool', 'int'])[0];\n if (s.prim === 'bool') {\n return [annotateVar({ prim: 'bool' }), ...stack.slice(1)];\n }\n return [annotateVar({ prim: 'int' }), ...stack.slice(1)];\n }\n\n case 'COMPARE': {\n const s = args(0, null, null);\n ensureComparableType(s[0]);\n ensureComparableType(s[1]);\n return [annotateVar({ prim: 'int' }), ...stack.slice(2)];\n }\n\n case 'EQ':\n case 'NEQ':\n case 'LT':\n case 'GT':\n case 'LE':\n case 'GE':\n args(0, ['int']);\n return [annotateVar({ prim: 'bool' }), ...stack.slice(1)];\n\n case 'SELF': {\n if (ctx?.contract === undefined) {\n throw new MichelsonInstructionError(\n instruction,\n stack,\n `${instruction.prim}: contract required`\n );\n }\n const ia = instructionAnn({ f: 1, v: 1 });\n const ep = contractEntryPoint(ctx.contract, ia.f?.[0]);\n if (ep === null) {\n throw new MichelsonInstructionError(\n instruction,\n stack,\n `${instruction.prim}: contract has no entrypoint ${ep}`\n );\n }\n return [\n annotate({ prim: 'contract', args: [ep] }, { v: ia.v ? ia.v : ['@self'] }),\n ...stack,\n ];\n }\n\n case 'TRANSFER_TOKENS': {\n const s = args(0, null, ['mutez'], ['contract']);\n ensureTypesEqual(s[0], s[2].args[0]);\n return [annotateVar({ prim: 'operation' }), ...stack.slice(3)];\n }\n\n case 'SET_DELEGATE': {\n const s = args(0, ['option'])[0];\n if (typeID(s.args[0]) !== 'key_hash') {\n throw new MichelsonInstructionError(\n instruction,\n stack,\n `${instruction.prim}: key hash expected: ${typeID(s.args[0])}`\n );\n }\n return [annotateVar({ prim: 'operation' }), ...stack.slice(1)];\n }\n\n case 'IMPLICIT_ACCOUNT':\n args(0, ['key_hash']);\n return [annotateVar({ prim: 'contract', args: [{ prim: 'unit' }] }), ...stack.slice(1)];\n\n case 'NOW':\n return [annotateVar({ prim: 'timestamp' }, '@now'), ...stack];\n\n case 'AMOUNT':\n return [annotateVar({ prim: 'mutez' }, '@amount'), ...stack];\n\n case 'BALANCE':\n return [annotateVar({ prim: 'mutez' }, '@balance'), ...stack];\n\n case 'CHECK_SIGNATURE':\n args(0, ['key'], ['signature'], ['bytes']);\n return [annotateVar({ prim: 'bool' }), ...stack.slice(3)];\n\n case 'BLAKE2B':\n case 'SHA256':\n case 'SHA512':\n case 'KECCAK':\n case 'SHA3':\n args(0, ['bytes']);\n return [annotateVar({ prim: 'bytes' }), ...stack.slice(1)];\n\n case 'HASH_KEY':\n args(0, ['key']);\n return [annotateVar({ prim: 'key_hash' }), ...stack.slice(1)];\n\n case 'SOURCE':\n return [annotateVar({ prim: 'address' }, '@source'), ...stack];\n\n case 'SENDER':\n return [annotateVar({ prim: 'address' }, '@sender'), ...stack];\n\n case 'ADDRESS': {\n const s = args(0, ['contract'])[0];\n const ia = instructionAnn({ v: 1 });\n return [\n annotate(\n { prim: 'address', [refContract]: s },\n { v: ia.v ? ia.v : varSuffix(argAnn(s), 'address') }\n ),\n ...stack.slice(1),\n ];\n }\n\n case 'SELF_ADDRESS': {\n const addr: MichelsonTypeAddress = { prim: 'address' };\n if (ctx?.contract !== undefined) {\n addr[refContract] = {\n prim: 'contract',\n args: [contractSection(ctx.contract, 'parameter').args[0]],\n };\n }\n return [annotateVar(addr, '@address'), ...stack];\n }\n\n case 'CHAIN_ID':\n return [annotateVar({ prim: 'chain_id' }), ...stack];\n\n case 'DROP': {\n instructionAnn({});\n const n = instruction.args !== undefined ? parseInt(instruction.args[0].int, 10) : 1;\n args(n - 1, null);\n return stack.slice(n);\n }\n\n case 'DIG': {\n instructionAnn({});\n const n = parseInt(instruction.args[0].int, 10);\n return [args(n, null)[0], ...stack.slice(0, n), ...stack.slice(n + 1)];\n }\n\n case 'DUG': {\n instructionAnn({});\n const n = parseInt(instruction.args[0].int, 10);\n return [...stack.slice(1, n + 1), args(0, null)[0], ...stack.slice(n + 1)];\n }\n\n case 'NONE':\n assertTypeAnnotationsValid(instruction.args[0]);\n return [\n annotate({ prim: 'option', args: [instruction.args[0]] }, instructionAnn({ t: 1, v: 1 })),\n ...stack,\n ];\n\n case 'LEFT':\n case 'RIGHT': {\n const s = args(0, null)[0];\n const ia = instructionAnn({ f: 2, t: 1, v: 1 }, { specialFields: true });\n const va = argAnn(s);\n\n const children: [MichelsonType, MichelsonType] = [\n annotate(s, {\n t: null,\n v: null,\n f:\n ia.f && ia.f.length > 0 && ia.f[0] !== '%'\n ? ia.f[0] === '%@'\n ? va.v\n ? ['%' + va.v[0].slice(1)]\n : undefined\n : ia.f\n : undefined,\n }),\n annotate(instruction.args[0], {\n t: null,\n f: ia.f && ia.f.length > 1 && ia.f[1] !== '%' ? ia.f : undefined,\n }),\n ];\n\n return [\n annotate(\n {\n prim: 'or',\n args: instruction.prim === 'LEFT' ? children : [children[1], children[0]],\n },\n { t: ia.t, v: ia.v }\n ),\n ...stack.slice(1),\n ];\n }\n\n case 'NIL':\n assertTypeAnnotationsValid(instruction.args[0]);\n return [\n annotate({ prim: 'list', args: [instruction.args[0]] }, instructionAnn({ t: 1, v: 1 })),\n ...stack,\n ];\n\n case 'UNPACK':\n args(0, ['bytes']);\n assertTypeAnnotationsValid(instruction.args[0]);\n return [\n annotateVar({ prim: 'option', args: [instruction.args[0]] }, '@unpacked'),\n ...stack.slice(1),\n ];\n\n case 'CONTRACT': {\n const s = args(0, ['address'])[0];\n assertTypeAnnotationsValid(instruction.args[0]);\n const ia = instructionAnn({ v: 1, f: 1 });\n const contract = s[refContract];\n if (contract !== undefined) {\n const ep = contractEntryPoint(contract, ia.f?.[0]);\n if (ep === null) {\n throw new MichelsonInstructionError(\n instruction,\n stack,\n `${instruction.prim}: contract has no entrypoint ${ep}`\n );\n }\n ensureTypesEqual(ep, instruction.args[0]);\n }\n return [\n annotate(\n { prim: 'option', args: [{ prim: 'contract', args: [instruction.args[0]] }] },\n { v: ia.v ? ia.v : varSuffix(argAnn(s), 'contract') }\n ),\n ...stack.slice(1),\n ];\n }\n\n case 'CAST': {\n instructionAnn({});\n const s = args(0, null)[0];\n assertTypeAnnotationsValid(instruction.args[0]);\n ensureTypesEqual(instruction.args[0], s);\n return [instruction.args[0], ...stack.slice(1)];\n }\n\n case 'IF_NONE': {\n instructionAnn({});\n const s = args(0, ['option'])[0];\n const tail = stack.slice(1);\n const br0 = functionTypeInternal(instruction.args[0], tail, ctx);\n const br1 = functionTypeInternal(\n instruction.args[1],\n [annotate(s.args[0], { t: null, v: varSuffix(argAnn(s), 'some') }), ...tail],\n ctx\n );\n return branchType(br0, br1);\n }\n\n case 'IF_LEFT': {\n instructionAnn({});\n const s = args(0, ['or'])[0];\n const va = argAnn(s);\n const lefta = argAnn(s.args[0]);\n const righta = argAnn(s.args[1]);\n const tail = stack.slice(1);\n const br0 = functionTypeInternal(\n instruction.args[0],\n [\n annotate(s.args[0], {\n t: null,\n v: varSuffix(va, lefta.f ? lefta.f[0].slice(1) : 'left'),\n }),\n ...tail,\n ],\n ctx\n );\n const br1 = functionTypeInternal(\n instruction.args[1],\n [\n annotate(s.args[1], {\n t: null,\n v: varSuffix(va, righta.f ? righta.f[0].slice(1) : 'right'),\n }),\n ...tail,\n ],\n ctx\n );\n return branchType(br0, br1);\n }\n\n case 'IF_CONS': {\n instructionAnn({});\n const s = args(0, ['list'])[0];\n const va = argAnn(s);\n const tail = stack.slice(1);\n const br0 = functionTypeInternal(\n instruction.args[0],\n [\n annotate(s.args[0], { t: null, v: varSuffix(va, 'hd') }),\n annotate(s, { t: null, v: varSuffix(va, 'tl') }),\n ...tail,\n ],\n ctx\n );\n const br1 = functionTypeInternal(instruction.args[1], tail, ctx);\n return branchType(br0, br1);\n }\n\n case 'IF': {\n instructionAnn({});\n args(0, ['bool']);\n const tail = stack.slice(1);\n const br0 = functionTypeInternal(instruction.args[0], tail, ctx);\n const br1 = functionTypeInternal(instruction.args[1], tail, ctx);\n return branchType(br0, br1);\n }\n\n case 'MAP': {\n const s = args(0, ['list', 'map', 'option'])[0];\n const tail = stack.slice(1);\n const elt = s.prim === 'map' ? { prim: 'pair' as const, args: s.args } : s.args[0];\n const body = functionTypeInternal(\n instruction.args[0],\n [annotate(elt, { t: null, v: varSuffix(argAnn(s), 'elt') }), ...tail],\n ctx\n );\n if ('failed' in body) {\n if (!('prim' in body.failed) || body.failed.prim !== 'never') {\n throw new MichelsonInstructionError(\n instruction,\n stack,\n `${instruction.prim}: FAIL is not allowed in MAP`\n );\n }\n return { failed: body.failed, level: body.level + 1 };\n }\n if (body.length < 1) {\n throw new MichelsonInstructionError(\n instruction,\n stack,\n `${instruction.prim}: function must return a value`\n );\n }\n ensureStacksEqual(body.slice(1), tail);\n return s.prim === 'list'\n ? [annotateVar({ prim: 'list', args: [body[0]] }), ...tail]\n : s.prim === 'map'\n ? [annotateVar({ prim: 'map', args: [s.args[0], body[0]] }), ...tail]\n : [annotateVar({ prim: 'option', args: [body[0]] }), ...tail];\n }\n\n case 'ITER': {\n instructionAnn({});\n const s = args(0, ['set', 'list', 'map'])[0];\n const tail = stack.slice(1);\n const elt = s.prim === 'map' ? { prim: 'pair' as const, args: s.args } : s.args[0];\n const body = functionTypeInternal(\n instruction.args[0],\n [annotate(elt, { t: null, v: varSuffix(argAnn(s), 'elt') }), ...tail],\n ctx\n );\n if ('failed' in body) {\n return { failed: body.failed, level: body.level + 1 };\n }\n ensureStacksEqual(body, tail);\n return tail;\n }\n\n case 'LOOP': {\n instructionAnn({});\n args(0, ['bool']);\n const tail = stack.slice(1);\n const body = functionTypeInternal(instruction.args[0], tail, ctx);\n if ('failed' in body) {\n return { failed: body.failed, level: body.level + 1 };\n }\n ensureStacksEqual(body, [{ prim: 'bool' }, ...tail]);\n return tail;\n }\n\n case 'LOOP_LEFT': {\n instructionAnn({});\n const s = args(0, ['or'])[0];\n const tail = stack.slice(1);\n const body = functionTypeInternal(\n instruction.args[0],\n [annotate(s.args[0], { t: null, v: varSuffix(argAnn(s), 'left') }), ...tail],\n ctx\n );\n if ('failed' in body) {\n return { failed: body.failed, level: body.level + 1 };\n }\n ensureStacksEqual(body, [s, ...tail]);\n return [annotate(s.args[1], { t: null, v: instructionAnn({ v: 1 }).v }), ...tail];\n }\n\n case 'DIP': {\n instructionAnn({});\n const n = instruction.args.length === 2 ? parseInt(instruction.args[0].int, 10) : 1;\n args(n - 1, null);\n const head = stack.slice(0, n);\n const tail = stack.slice(n);\n // ternary operator is a type guard so use it instead of just `instruction.args.length - 1`\n const body =\n instruction.args.length === 2\n ? functionTypeInternal(instruction.args[1], tail, ctx)\n : functionTypeInternal(instruction.args[0], tail, ctx);\n if ('failed' in body) {\n return { failed: body.failed, level: body.level + 1 };\n }\n return [...head, ...body];\n }\n\n case 'CREATE_CONTRACT': {\n const ia = instructionAnn({ v: 2 });\n const s = args(0, ['option'], ['mutez'], null);\n if (typeID(s[0].args[0]) !== 'key_hash') {\n throw new MichelsonInstructionError(\n instruction,\n stack,\n `${instruction.prim}: key hash expected: ${typeID(s[0].args[0])}`\n );\n }\n if (ensureStorableType(s[2])) {\n assertContractValid(instruction.args[0]);\n assertScalarTypesEqual(contractSection(instruction.args[0], 'storage').args[0], s[2]);\n }\n\n const va = ia.v?.map((v) => (v !== '@' ? [v] : undefined));\n return [\n annotate({ prim: 'operation' }, { v: va?.[0] }),\n annotate(\n {\n prim: 'address',\n [refContract]: {\n prim: 'contract',\n args: [contractSection(instruction.args[0], 'parameter').args[0]],\n },\n },\n { v: va?.[1] }\n ),\n ...stack.slice(3),\n ];\n }\n\n case 'PUSH':\n assertTypeAnnotationsValid(instruction.args[0]);\n assertDataValidInternal(instruction.args[1], instruction.args[0], {\n ...ctx,\n contract: undefined,\n });\n return [annotateVar(instruction.args[0]), ...stack];\n\n case 'EMPTY_SET':\n assertTypeAnnotationsValid(instruction.args[0]);\n ensureComparableType(instruction.args[0]);\n return [\n annotate({ prim: 'set', args: instruction.args }, instructionAnn({ t: 1, v: 1 })),\n ...stack,\n ];\n\n case 'EMPTY_MAP':\n assertTypeAnnotationsValid(instruction.args[0]);\n ensureComparableType(instruction.args[0]);\n assertTypeAnnotationsValid(instruction.args[1]);\n return [\n annotate({ prim: 'map', args: instruction.args }, instructionAnn({ t: 1, v: 1 })),\n ...stack,\n ];\n\n case 'EMPTY_BIG_MAP':\n assertTypeAnnotationsValid(instruction.args[0]);\n ensureComparableType(instruction.args[0]);\n assertTypeAnnotationsValid(instruction.args[1]);\n ensureBigMapStorableType(instruction.args[0]);\n return [\n annotate({ prim: 'big_map', args: instruction.args }, instructionAnn({ t: 1, v: 1 })),\n ...stack,\n ];\n\n case 'LAMBDA': {\n assertTypeAnnotationsValid(instruction.args[0]);\n assertTypeAnnotationsValid(instruction.args[1]);\n const body = functionTypeInternal(instruction.args[2], [instruction.args[0]], {\n ...ctx,\n contract: undefined,\n });\n if ('failed' in body) {\n return { failed: body.failed, level: body.level + 1 };\n }\n if (body.length !== 1) {\n throw new MichelsonInstructionError(\n instruction,\n stack,\n `${instruction.prim}: function must return a value`\n );\n }\n ensureTypesEqual(instruction.args[1], body[0]);\n return [\n annotateVar({ prim: 'lambda', args: [instruction.args[0], instruction.args[1]] }),\n ...stack,\n ];\n }\n\n case 'LEVEL':\n return [annotateVar({ prim: 'nat' }, '@level'), ...stack];\n\n case 'TOTAL_VOTING_POWER':\n return [annotateVar({ prim: 'nat' }), ...stack];\n\n case 'VOTING_POWER':\n args(0, ['key_hash']);\n return [annotateVar({ prim: 'nat' }), ...stack.slice(1)];\n\n case 'TICKET': {\n const s = args(0, null, ['nat'])[0];\n ensureComparableType(s);\n return [\n annotate({ prim: 'ticket', args: [s] }, instructionAnn({ t: 1, v: 1 })),\n ...stack.slice(2),\n ];\n }\n\n case 'JOIN_TICKETS': {\n const s = unpackComb('pair', args(0, ['pair'])[0]);\n if (typeID(s.args[0]) !== 'ticket') {\n throw new MichelsonInstructionError(\n instruction,\n stack,\n `${instruction.prim}: ticket expected: ${typeID(s.args[0])}`\n );\n }\n ensureTypesEqual(s.args[0], s.args[1]);\n return [\n annotateVar({\n prim: 'option',\n args: [annotate(s.args[0], { t: null })],\n }),\n ...stack.slice(1),\n ];\n }\n\n case 'SPLIT_TICKET': {\n const s = args(0, ['ticket'], ['pair']);\n const p = unpackComb('pair', s[1]);\n if (typeID(p.args[0]) !== 'nat') {\n throw new MichelsonInstructionError(\n instruction,\n stack,\n `${instruction.prim}: nat expected: ${typeID(p.args[0])}`\n );\n }\n ensureTypesEqual(p.args[0], p.args[1]);\n return [\n annotateVar({\n prim: 'option',\n args: [\n {\n prim: 'pair',\n args: [annotate(s[0], { t: null }), annotate(s[0], { t: null })],\n },\n ],\n }),\n ...stack.slice(2),\n ];\n }\n\n case 'READ_TICKET': {\n const ia = instructionAnn({ v: 2 });\n const s = args(0, ['ticket'])[0];\n const va = ia.v?.map((v) => (v !== '@' ? [v] : undefined));\n return [\n annotate(\n {\n prim: 'pair',\n args: [{ prim: 'address' }, annotate(s.args[0], { t: null }), { prim: 'nat' }],\n },\n { v: va?.[0] }\n ),\n annotate(s, { v: va?.[1], t: null }),\n ...stack.slice(1),\n ];\n }\n\n case 'PAIRING_CHECK': {\n const p = args(0, ['list'])[0].args[0];\n if (!isPairType(p)) {\n throw new MichelsonInstructionError(\n instruction,\n stack,\n `${instruction.prim}: pair expected: ${typeID(p)}`\n );\n }\n const c = unpackComb('pair', p);\n if (typeID(c.args[0]) !== 'bls12_381_g1') {\n throw new MichelsonInstructionError(\n instruction,\n stack,\n `${instruction.prim}: bls12_381_g1 expected: ${typeID(c.args[0])}`\n );\n }\n if (typeID(c.args[1]) !== 'bls12_381_g2') {\n throw new MichelsonInstructionError(\n instruction,\n stack,\n `${instruction.prim}: bls12_381_g2 expected: ${typeID(c.args[1])}`\n );\n }\n return [annotateVar({ prim: 'bool' }), ...stack.slice(1)];\n }\n\n case 'SAPLING_EMPTY_STATE':\n return [\n annotate(\n { prim: 'sapling_state', args: [instruction.args[0]] },\n instructionAnn({ v: 1, t: 1 })\n ),\n ...stack,\n ];\n\n case 'SAPLING_VERIFY_UPDATE': {\n const s = args(0, ['sapling_transaction'], ['sapling_state']);\n if (parseInt(s[0].args[0].int, 10) !== parseInt(s[1].args[0].int, 10)) {\n throw new MichelsonInstructionError(\n instruction,\n stack,\n `${instruction.prim}: sapling memo size mismatch: ${s[0].args[0].int} != ${s[1].args[0].int}`\n );\n }\n return ProtoInferiorTo(proto, Protocol.PtJakarta)\n ? [\n annotateVar({\n prim: 'option',\n args: [\n {\n prim: 'pair',\n args: [{ prim: 'int' }, annotate(s[1], { t: null })],\n },\n ],\n }),\n ...stack.slice(2),\n ]\n : [\n annotateVar({\n prim: 'option',\n args: [\n {\n prim: 'pair',\n args: [\n { prim: 'bytes' },\n {\n prim: 'pair',\n args: [{ prim: 'int' }, annotate(s[1], { t: null })],\n },\n ],\n },\n ],\n }),\n ...stack.slice(2),\n ];\n }\n\n case 'OPEN_CHEST':\n args(0, ['chest_key'], ['chest'], ['nat']);\n return [\n annotateVar({ prim: 'or', args: [{ prim: 'bytes' }, { prim: 'bool' }] }),\n ...stack.slice(3),\n ];\n\n case 'VIEW': {\n const s = args(0, null, ['address']);\n ensurePushableType(s[0]);\n return [annotateVar({ prim: 'option', args: [instruction.args[1]] }), ...stack.slice(2)];\n }\n\n default:\n throw new MichelsonError(\n instruction as MichelsonCode,\n `unexpected instruction: ${(instruction as Prim).prim}`\n );\n }\n })(instruction);\n\n if (ctx?.traceCallback !== undefined) {\n const trace: InstructionTrace = {\n op: instruction,\n in: stack,\n out: retStack,\n };\n ctx.traceCallback(trace);\n }\n\n return retStack;\n}\n\nexport function contractSection<T extends 'parameter' | 'storage' | 'code'>(\n contract: MichelsonContract,\n section: T\n): MichelsonContractSection<T> {\n for (const s of contract) {\n if (s.prim === section) {\n return s as MichelsonContractSection<T>;\n }\n }\n throw new MichelsonError(contract, `missing contract section: ${section}`);\n}\n\nexport function contractViews(contract: MichelsonContract): {\n [name: string]: MichelsonContractView;\n} {\n const views: { [name: string]: MichelsonContractView } = {};\n for (const s of contract) {\n if (s.prim === 'view') {\n views[s.args[0].string] = s;\n }\n }\n return views;\n}\n\nfunction isContract(v: Expr): v is MichelsonContract {\n if (Array.isArray(v)) {\n for (const s of v) {\n if ('prim' in s && (s.prim === 'parameter' || s.prim === 'storage' || s.prim === 'code')) {\n return true;\n }\n }\n }\n return false;\n}\n\nexport function contractEntryPoint(\n src: MichelsonContract | MichelsonType,\n ep?: string\n): MichelsonType | null {\n ep = ep || '%default';\n const entryPoint = contractEntryPoints(src).find((x) => x[0] === ep);\n\n if (entryPoint !== undefined) {\n return entryPoint[1];\n } else if (ep === '%default') {\n return isContract(src) ? contractSection(src, 'parameter').args[0] : src;\n }\n return null;\n}\n\nfunction isOrType(t: MichelsonType): t is MichelsonTypeOr<[MichelsonType, MichelsonType]> {\n return Array.isArray(t) || t.prim === 'or';\n}\n\nexport function contractEntryPoints(\n src: MichelsonContract | MichelsonType\n): [string, MichelsonType][] {\n if (isContract(src)) {\n const param = contractSection(src, 'parameter');\n const ch = contractEntryPoints(param.args[0]);\n const a = unpackAnnotations(param);\n return a.f ? [[a.f[0], param.args[0]], ...ch] : ch;\n }\n\n if (isOrType(src)) {\n const args = typeArgs(src);\n const getArg = (n: 0 | 1): [string, MichelsonType][] => {\n const a = unpackAnnotations(args[n]);\n if (typeID(args[n]) === 'or') {\n const ch = contractEntryPoints(args[n]);\n return a.f ? [[a.f[0], args[n]], ...ch] : ch;\n }\n return a.f ? [[a.f[0], args[n]]] : [];\n };\n return [...getArg(0), ...getArg(1)];\n }\n return [];\n}\n\n// Contract validation\n\nexport function assertContractValid(\n contract: MichelsonContract,\n ctx?: Context\n): MichelsonReturnType {\n const assertSection = (\n parameter: MichelsonType,\n storage: MichelsonType,\n ret: MichelsonType,\n code: InstructionList\n ): MichelsonReturnType => {\n assertTypeAnnotationsValid(parameter, true);\n assertTypeAnnotationsValid(storage);\n const arg: MichelsonType = {\n prim: 'pair',\n args: [\n { ...parameter, ...{ annots: ['@parameter'] } },\n { ...storage, ...{ annots: ['@storage'] } },\n ],\n };\n const out = functionTypeInternal(code, [arg], { ...ctx, ...{ contract } });\n if ('failed' in out) {\n return out;\n }\n\n try {\n assertStacksEqual(out, [ret]);\n } catch (err) {\n if (err instanceof MichelsonError) {\n throw new MichelsonInstructionError(code, out, err.message);\n } else {\n throw err;\n }\n }\n return out;\n };\n\n const parameter = contractSection(contract, 'parameter').args[0];\n const storage = contractSection(contract, 'storage').args[0];\n const code = contractSection(contract, 'code').args[0];\n const expected: MichelsonType = {\n prim: 'pair',\n args: [{ prim: 'list', args: [{ prim: 'operation' }] }, storage],\n };\n const ret = assertSection(parameter, storage, expected, code);\n\n for (const view of Object.values(contractViews(contract))) {\n assertSection(view.args[1], storage, view.args[2], view.args[3]);\n }\n\n return ret;\n}\n\n// Exported wrapper functions\n\nexport function assertDataValid(d: MichelsonData, t: MichelsonType, ctx?: Context): void {\n assertTypeAnnotationsValid(t);\n assertDataValidInternal(d, t, ctx || null);\n}\n\nexport function functionType(\n inst: MichelsonCode,\n stack: MichelsonType[],\n ctx?: Context\n): MichelsonReturnType {\n for (const t of stack) {\n assertTypeAnnotationsValid(t);\n }\n\n if (ctx?.contract !== undefined) {\n for (const typesec of ['parameter', 'storage'] as const) {\n const sec = contractSection(ctx.contract, typesec).args[0];\n assertTypeAnnotationsValid(sec);\n }\n }\n\n return functionTypeInternal(inst, stack, ctx || null);\n}\n\nexport function assertTypesEqual<T1 extends MichelsonType | MichelsonType[], T2 extends T1>(\n a: T1,\n b: T2,\n field = false\n): void {\n if (Array.isArray(a)) {\n // type guards don't work for parametrized generic types\n for (const v of a as MichelsonType[]) {\n assertTypeAnnotationsValid(v);\n }\n for (const v of b as MichelsonType[]) {\n assertTypeAnnotationsValid(v);\n }\n } else {\n assertTypeAnnotationsValid(a as MichelsonType);\n assertTypeAnnotationsValid(b as MichelsonType);\n }\n assertScalarTypesEqual(a, b, field);\n}\n\nexport function isTypeAnnotationsValid(t: MichelsonType, field = false): boolean {\n try {\n assertTypeAnnotationsValid(t, field);\n return true;\n } catch {\n return false;\n }\n}\n\nexport function isContractValid(\n contract: MichelsonContract,\n ctx?: Context\n): MichelsonReturnType | null {\n try {\n return assertContractValid(contract, ctx);\n } catch {\n return null;\n }\n}\n\nexport function isDataValid(d: MichelsonData, t: MichelsonType, ctx?: Context): boolean {\n try {\n assertDataValid(d, t, ctx);\n return true;\n } catch {\n return false;\n }\n}\n\nexport function isTypeEqual<T1 extends MichelsonType | MichelsonType[], T2 extends T1>(\n a: T1,\n b: T2,\n field = false\n): boolean {\n try {\n assertTypesEqual(a, b, field);\n return true;\n } catch {\n return false;\n }\n}\n","import {\n MichelsonContract,\n MichelsonContractSection,\n MichelsonType,\n MichelsonData,\n MichelsonCode,\n MichelsonReturnType,\n} from './michelson-types';\nimport {\n assertContractValid,\n contractSection,\n contractEntryPoint,\n assertDataValid,\n assertTypeAnnotationsValid,\n InstructionTrace,\n Context,\n functionType,\n isDataValid,\n contractEntryPoints,\n} from './michelson-typecheck';\nimport { Parser, ParserOptions } from './micheline-parser';\nimport {\n assertMichelsonContract,\n assertMichelsonType,\n assertMichelsonData,\n} from './michelson-validator';\nimport {\n InvalidDataExpressionError,\n InvalidEntrypointError,\n InvalidContractError,\n InvalidTypeExpressionError,\n} from './error';\n\nexport interface ContractOptions extends ParserOptions {\n traceCallback?: (t: InstructionTrace) => void;\n}\n\nexport class Contract {\n private ctx: Context;\n public readonly output: MichelsonReturnType;\n\n constructor(public readonly contract: MichelsonContract, opt?: ContractOptions) {\n this.ctx = { contract, ...opt };\n this.output = assertContractValid(contract, this.ctx);\n }\n\n static parse(src: string | object, opt?: ContractOptions): Contract {\n const p = new Parser(opt);\n const expr = typeof src === 'string' ? p.parseScript(src) : p.parseJSON(src);\n if (expr === null) {\n throw new InvalidContractError('empty contract');\n }\n if (assertMichelsonContract(expr)) {\n return new Contract(expr, opt);\n }\n throw undefined;\n }\n\n static parseTypeExpression(src: string | object, opt?: ParserOptions): MichelsonType {\n const p = new Parser(opt);\n const expr = typeof src === 'string' ? p.parseScript(src) : p.parseJSON(src);\n if (expr === null) {\n throw new InvalidTypeExpressionError('empty type expression');\n }\n if (assertMichelsonType(expr) && assertTypeAnnotationsValid(expr)) {\n return expr;\n }\n throw undefined;\n }\n\n static parseDataExpression(src: string | object, opt?: ParserOptions): MichelsonData {\n const p = new Parser(opt);\n const expr = typeof src === 'string' ? p.parseScript(src) : p.parseJSON(src);\n if (expr === null) {\n throw new InvalidDataExpressionError('empty data expression');\n }\n if (assertMichelsonData(expr)) {\n return expr;\n }\n throw undefined;\n }\n\n section<T extends 'parameter' | 'storage' | 'code'>(section: T): MichelsonContractSection<T> {\n return contractSection(this.contract, section);\n }\n\n entryPoints(): [string, MichelsonType][] {\n return contractEntryPoints(this.contract);\n }\n\n entryPoint(ep?: string): MichelsonType | null {\n return contractEntryPoint(this.contract, ep);\n }\n\n assertDataValid(d: MichelsonData, t: MichelsonType): void {\n assertDataValid(d, t, this.ctx);\n }\n\n isDataValid(d: MichelsonData, t: MichelsonType): boolean {\n return isDataValid(d, t, this.ctx);\n }\n\n assertParameterValid(ep: string | null, d: MichelsonData): void {\n const t = this.entryPoint(ep || undefined);\n if (t === null) {\n throw new InvalidEntrypointError(ep?.toString());\n }\n this.assertDataValid(d, t);\n }\n\n isParameterValid(ep: string | null, d: MichelsonData): boolean {\n try {\n this.assertParameterValid(ep, d);\n return true;\n } catch {\n return false;\n }\n }\n\n functionType(inst: MichelsonCode, stack: MichelsonType[]): MichelsonReturnType {\n return functionType(inst, stack, this.ctx);\n }\n}\n\nexport const dummyContract = new Contract([\n { prim: 'parameter', args: [{ prim: 'unit' }] },\n { prim: 'storage', args: [{ prim: 'unit' }] },\n {\n prim: 'code',\n args: [[{ prim: 'CAR' }, { prim: 'NIL', args: [{ prim: 'operation' }] }, { prim: 'PAIR' }]],\n },\n]);\n","import { sourceReference, Expr } from './micheline';\nimport { InstructionTrace, MichelsonInstructionError } from './michelson-typecheck';\nimport { emitMicheline } from './micheline-emitter';\nimport { unpackAnnotations, MichelsonError, MichelsonTypeError } from './utils';\nimport { MichelsonReturnType } from './michelson-types';\n\nexport function formatStack(s: MichelsonReturnType): string {\n if ('failed' in s) {\n return `[FAILED: ${emitMicheline(s.failed)}]`;\n }\n\n return s\n .map((v, i) => {\n const ann = unpackAnnotations(v);\n return `[${i}${ann.v ? '/' + ann.v[0] : ''}]: ${emitMicheline(v)}`;\n })\n .join('\\n');\n}\n\nexport function traceDumpFunc(\n blocks: boolean,\n cb: (s: string) => void\n): (v: InstructionTrace) => void {\n return (v: InstructionTrace) => {\n if (Array.isArray(v) && !blocks) {\n return;\n }\n const macro = v.op[sourceReference]?.macro;\n\n const msg = `${macro ? 'Macro' : 'Op'}: ${\n macro ? emitMicheline(macro, undefined, true) + ' / ' : ''\n }${emitMicheline(v.op)}\nInput:\n${formatStack(v.in)}\nOutput:\n${formatStack(v.out)}\n`;\n cb(msg);\n };\n}\n\nexport function formatError(err: MichelsonError): string {\n if (err instanceof MichelsonInstructionError) {\n const macro = err.val[sourceReference]?.macro;\n return `${macro ? 'Macro' : 'Op'}: ${\n macro ? emitMicheline(macro, undefined, true) + ' / ' : ''\n }${emitMicheline(err.val)}\nStack:\n${formatStack(err.stackState)}\n`;\n } else if (err instanceof MichelsonTypeError) {\n const type = Array.isArray(err.val)\n ? '[' + (err.val as Expr[]).map((v, i) => `[${i}]: ${emitMicheline(v)}`).join('; ') + ']'\n : emitMicheline(err.val);\n\n return `Type: ${type}\n${\n err.data\n ? `Data: ${emitMicheline(err.data)}\n`\n : ''\n}\n`;\n } else {\n return `Value: ${emitMicheline(err.val)}`;\n }\n}\n","\n// IMPORTANT: THIS FILE IS AUTO GENERATED! DO NOT MANUALLY EDIT OR CHECKIN!\nexport const VERSION = {\n \"commitHash\": \"38da814ec2bb4e81c7ad5a45b6b183a4d0b8dc25\",\n \"version\": \"12.1.1\"\n};\n"],"names":["assertArgs"],"mappings":"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AC,CAAC;AACxD;;ACjJA,MAAM,CAAC,GAAG;IACR,UAAU,GAAG,CAAC;IACd,UAAU,GAAG,CAAC;IACd,UAAU,GAAG,CAAC;IACd,UAAU,GAAG,CAAC;IACd,UAAU,GAAG,CAAC;IACd,UAAU,GAAG,CAAC;IACd,UAAU,GAAG,CAAC;IACd,UAAU,GAAG,CAAC;CACf,CAAC;AAEF,MAAM,CAAC,GAAG;IACR,UAAU,GAAG,CAAC;IACd,UAAU,GAAG,CAAC;IACd,UAAU,GAAG,CAAC;IACd,UAAU,GAAG,CAAC;IACd,UAAU,GAAG,CAAC;IACd,UAAU,GAAG,CAAC;IACd,UAAU,GAAG,CAAC;IACd,UAAU,GAAG,CAAC;IACd,UAAU,GAAG,CAAC;IACd,UAAU,GAAG,CAAC;IACd,UAAU,GAAG,CAAC;IACd,UAAU,GAAG,CAAC;IACd,UAAU,GAAG,CAAC;IACd,UAAU,GAAG,CAAC;IACd,UAAU,GAAG,CAAC;IACd,UAAU,GAAG,CAAC;IACd,UAAU,GAAG,CAAC;IACd,UAAU,GAAG,CAAC;IACd,UAAU,GAAG,CAAC;IACd,UAAU,GAAG,CAAC;IACd,UAAU,GAAG,CAAC;IACd,UAAU,GAAG,CAAC;IACd,UAAU,GAAG,CAAC;IACd,UAAU,GAAG,CAAC;IACd,UAAU,GAAG,CAAC;IACd,UAAU,GAAG,CAAC;IACd,UAAU,GAAG,CAAC;IACd,UAAU,GAAG,CAAC;IACd,UAAU,GAAG,CAAC;IACd,UAAU,GAAG,CAAC;IACd,UAAU,GAAG,CAAC;IACd,UAAU,GAAG,CAAC;IACd,UAAU,GAAG,CAAC;IACd,UAAU,GAAG,CAAC;IACd,UAAU,GAAG,CAAC;IACd,UAAU,GAAG,CAAC;IACd,UAAU,GAAG,CAAC;IACd,UAAU,GAAG,CAAC;IACd,UAAU,GAAG,CAAC;IACd,UAAU,GAAG,CAAC;IACd,UAAU,GAAG,CAAC;IACd,UAAU,GAAG,CAAC;IACd,UAAU,GAAG,CAAC;IACd,UAAU,GAAG,CAAC;IACd,UAAU,GAAG,CAAC;IACd,UAAU,GAAG,CAAC;IACd,UAAU,GAAG,CAAC;IACd,UAAU,GAAG,CAAC;IACd,UAAU,GAAG,CAAC;IACd,UAAU,GAAG,CAAC;IACd,UAAU,GAAG,CAAC;IACd,UAAU,GAAG,CAAC;IACd,UAAU,GAAG,CAAC;IACd,UAAU,GAAG,CAAC;IACd,UAAU,GAAG,CAAC;IACd,UAAU,GAAG,CAAC;IACd,UAAU,GAAG,CAAC;IACd,UAAU,GAAG,CAAC;IACd,UAAU,GAAG,CAAC;IACd,UAAU,GAAG,CAAC;IACd,UAAU,GAAG,CAAC;IACd,UAAU,GAAG,CAAC;IACd,UAAU,GAAG,CAAC;IACd,UAAU,GAAG,CAAC;CACf,CAAC;AAEF;;;;MAIa,mBAAoB,SAAQ,KAAK;IAE5C,YAAmB,OAAe;QAChC,KAAK,CAAC,OAAO,CAAC,CAAC;QADE,YAAO,GAAP,OAAO,CAAQ;QAD3B,SAAI,GAAG,qBAAqB,CAAC;KAGnC;CACF;AAED;;;;MAIa,mBAAoB,SAAQ,KAAK;IAE5C,YAAmB,OAAe;QAChC,KAAK,CAAC,OAAO,CAAC,CAAC;QADE,YAAO,GAAP,OAAO,CAAQ;QAD3B,SAAI,GAAG,qBAAqB,CAAC;KAGnC;CACF;AAED;AACA,SAAS,MAAM,CAAC,GAA0B;;IAExC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;IAChC,MAAM,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IAEjC,IAAI,GAAG,CAAC,MAAM,GAAG,SAAS,EAAE;QAC1B,MAAM,IAAI,mBAAmB,CAAC,yCAAyC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;KACtF;IAED,MAAM,CAAC,GAAG,GAAG,CAAC,MAAM,IAAI,CAAC,CAAC;IAC1B,MAAM,MAAM,GAAG;QACb,GAAG,GAAG;QACN,IAAI;QACJ,GAAG,IAAI,KAAK,CAAS,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;QACjC,CAAC;QACD,CAAC;QACD,CAAC;QACD,CAAC;QACD,CAAC,CAAC,IAAI,EAAE,IAAI,IAAI;QAChB,CAAC,CAAC,IAAI,EAAE,IAAI,IAAI;QAChB,CAAC,CAAC,IAAI,CAAC,IAAI,IAAI;QACf,CAAC,GAAG,IAAI;KACT,CAAC;IAEF,SAAS,GAAG,CAAC,CAAS,EAAE,CAAS;QAC/B,OAAO,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;KACpC;IAED,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;IACjB,MAAM,CAAC,GAAG,IAAI,KAAK,CAAS,EAAE,CAAC,CAAC;IAChC,MAAM,CAAC,GAAG,IAAI,KAAK,CAAS,CAAC,CAAC,CAAC;IAE/B,KAAK,IAAI,MAAM,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,IAAI,EAAE,EAAE;QACzD,IAAI,CAAC,GAAG,MAAM,CAAC;QACf,IAAI,CAAC,GAAG,CAAC,CAAC;QACV,OAAO,CAAC,GAAG,EAAE,EAAE;YACb,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,IAAI,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YACxF,CAAC,IAAI,CAAC,CAAC;YACP,CAAC,EAAE,CAAC;SACL;QACD,OAAO,CAAC,GAAG,EAAE,EAAE;YACb,MAAM,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;YACtE,MAAM,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;YACrE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;YAClD,CAAC,EAAE,CAAC;SACL;QAED,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;YAC1B,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;SACb;QAED,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE;YAC3B,MAAM,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACxD,MAAM,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACxD,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YAC5E,MAAM,EAAE,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YAEtE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YACZ,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YACZ,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YACZ,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;YACvB,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YACZ,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YACZ,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YACZ,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;SACtB;QAED,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;YAC1B,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;SAC1B;KACF;IAED,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,KAAK,MAAM,CAAC,IAAI,CAAC,EAAE;QACjB,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,IAAI,CAAC,CAAC;QAC9B,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,IAAI,CAAC,CAAC;QAC9B,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC;QAC7B,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;KACvB;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,iBAAiB,GAAa;IAClC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE;IAChG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;IAC9F,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;CAC3F,CAAC;AAEF,MAAM,iBAAiB,GAAa;IAClC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;IACjG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;IAC9F,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;CAC3B,CAAC;AAEF,SAAS,MAAM,CAAC,GAAW,EAAE,CAAS;IACpC,MAAM,CAAC,GAAG,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;IACjC,IAAI,CAAC,IAAI,iBAAiB,CAAC,MAAM,IAAI,iBAAiB,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE;QAChE,MAAM,IAAI,mBAAmB,CAAC,oCAAoC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;KACnF;IACD,OAAO,iBAAiB,CAAC,CAAC,CAAC,CAAC;AAC9B,CAAC;SAEe,YAAY,CAAC,GAAW;IACtC,MAAM,GAAG,GAAa,EAAE,CAAC;IACzB,IAAI,CAAC,GAAG,CAAC,CAAC;;IAEV,OAAO,CAAC,GAAG,GAAG,CAAC,MAAM,IAAI,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,KAAK,CAAC,EAAE;QAC7C,CAAC,EAAE,CAAC;KACL;IACD,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,OAAO,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE;QACrB,IAAI,KAAK,GAAG,MAAM,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;;;;;;QAM7B,IAAI,EAAE,GAAG,CAAC,CAAC;QACX,OAAO,KAAK,KAAK,CAAC,IAAI,EAAE,GAAG,GAAG,CAAC,MAAM,EAAE;YACrC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,KAAK,CAAC;YACtC,GAAG,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;YACpB,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC;SAC7B;KACF;IACD,OAAO,KAAK,EAAE,GAAG,CAAC,EAAE;QAClB,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;KACb;IACD,OAAO,GAAG,CAAC,OAAO,EAAE,CAAC;AACvB,CAAC;SAEe,YAAY,CAAC,GAA0B;IACrD,MAAM,GAAG,GAAa,EAAE,CAAC;IACzB,IAAI,CAAC,GAAG,CAAC,CAAC;;IAEV,OAAO,CAAC,GAAG,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE;QACrC,CAAC,EAAE,CAAC;KACL;IACD,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,OAAO,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE;QACrB,IAAI,KAAK,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;QACrB,IAAI,EAAE,GAAG,CAAC,CAAC;QACX,OAAO,KAAK,KAAK,CAAC,IAAI,EAAE,GAAG,GAAG,CAAC,MAAM,EAAE;YACrC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,GAAG,GAAG,KAAK,CAAC;YACvC,GAAG,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC;YACnB,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;SAC5B;KACF;IACD,OAAO,KAAK,EAAE,GAAG,CAAC,EAAE;QAClB,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;KACb;IACD,GAAG,CAAC,OAAO,EAAE,CAAC;IACd,OAAO,MAAM,CAAC,YAAY,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,iBAAiB,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;AAC3E,CAAC;SAEe,iBAAiB,CAAC,GAAW;IAC3C,MAAM,MAAM,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC;IACjC,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE;QACrB,MAAM,IAAI,mBAAmB,CAAC,qBAAqB,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;KACrE;IAED,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAChD,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAC5C,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;IACtC,IACE,GAAG,CAAC,CAAC,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC;QACtB,GAAG,CAAC,CAAC,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC;QACtB,GAAG,CAAC,CAAC,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC;QACtB,GAAG,CAAC,CAAC,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,EACtB;QACA,MAAM,IAAI,mBAAmB,CAAC,kBAAkB,CAAC,CAAC;KACnD;IAED,OAAO,IAAI,CAAC;AACd,CAAC;SAEe,iBAAiB,CAAC,GAA0B;IAC1D,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;IAChC,OAAO,YAAY,CAAC,CAAC,GAAG,GAAG,EAAE,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AACpD;;ACxRA;;;;MAIa,oBAAqB,SAAQ,KAAK;IAE7C,YAAmB,OAAe;QAChC,KAAK,CAAC,OAAO,CAAC,CAAC;QADE,YAAO,GAAP,OAAO,CAAQ;QAD3B,SAAI,GAAG,sBAAsB,CAAC;KAGpC;CACF;AAED;;;;MAIa,0BAA2B,SAAQ,KAAK;IAEnD,YAAmB,OAAe;QAChC,KAAK,CAAC,OAAO,CAAC,CAAC;QADE,YAAO,GAAP,OAAO,CAAQ;QAD3B,SAAI,GAAG,4BAA4B,CAAC;KAG1C;CACF;AAED;;;;MAIa,0BAA2B,SAAQ,KAAK;IAEnD,YAAmB,OAAe;QAChC,KAAK,CAAC,OAAO,CAAC,CAAC;QADE,YAAO,GAAP,OAAO,CAAQ;QAD3B,SAAI,GAAG,4BAA4B,CAAC;KAG1C;CACF;AAED;;;;MAIa,sBAAuB,SAAQ,KAAK;IAE/C,YAAmB,UAAmB;QACpC,KAAK,CAAC,sCAAsC,UAAU,GAAG,CAAC,CAAC;QAD1C,eAAU,GAAV,UAAU,CAAS;QAD/B,SAAI,GAAG,wBAAwB,CAAC;KAGtC;CACF;AAED;;;;MAIa,kBAAmB,SAAQ,KAAK;IAE3C,YAAmB,OAAe;QAChC,KAAK,CAAC,OAAO,CAAC,CAAC;QADE,YAAO,GAAP,OAAO,CAAQ;QAD3B,SAAI,GAAG,oBAAoB,CAAC;KAGlC;CACF;AAED;;;;MAIa,gBAAiB,SAAQ,KAAK;IAEzC,YAAmB,OAAe;QAChC,KAAK,CAAC,OAAO,CAAC,CAAC;QADE,YAAO,GAAP,OAAO,CAAQ;QAD3B,SAAI,GAAG,kBAAkB,CAAC;KAGhC;CACF;AAED;;;;MAIa,aAAc,SAAQ,KAAK;IAEtC,YAAmB,OAAe;QAChC,KAAK,CAAC,6BAA6B,OAAO,EAAE,CAAC,CAAC;QAD7B,YAAO,GAAP,OAAO,CAAQ;QAD3B,SAAI,GAAG,eAAe,CAAC;KAG7B;;;ACrCH;;;;MAIa,cAAsC,SAAQ,KAAK;;;;;;IAM9D,YAAmB,GAAM,EAAE,OAAgB;QACzC,KAAK,CAAC,OAAO,CAAC,CAAC;QADE,QAAG,GAAH,GAAG,CAAG;QAEvB,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,cAAc,CAAC,SAAS,CAAC,CAAC;KACvD;CACF;SAEe,gBAAgB,CAAwB,GAAY;IAClE,OAAO,GAAG,YAAY,cAAc,CAAC;AACvC,CAAC;MAEY,kBAAmB,SAAQ,cAA+C;;;;;;IAQrF,YAAY,GAAoC,EAAE,IAAW,EAAE,OAAgB;QAC7E,KAAK,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;QACpB,IAAI,IAAI,KAAK,SAAS,EAAE;YACtB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;SAClB;QACD,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,kBAAkB,CAAC,SAAS,CAAC,CAAC;KAC3D;CACF;AAED;MACa,WAAW;IAatB,YAAY,GAAqB;QAZzB,QAAG,GAAG,KAAK,CAAC;QACZ,QAAG,GAAa,EAAE,CAAC;QAYzB,IAAI,GAAG,KAAK,SAAS,EAAE;YACrB,OAAO;SACR;QACD,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE;YAC3B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBACnC,MAAM,CAAC,GAAG,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;gBAC5B,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE;oBACzB,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC;iBACjB;qBAAM;oBACL,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,IAAI,EAAE;wBACxB,MAAM,IAAI,gBAAgB,CAAC,6CAA6C,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;qBACnF;oBACD,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;iBACvB;aACF;SACF;aAAM,IAAI,GAAG,GAAG,CAAC,EAAE;YAClB,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC;YAChB,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC;SACnB;aAAM;YACL,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;SAClB;KACF;IA/BO,MAAM,CAAC,CAAS;QACtB,IAAI,CAAC,GAAG,CAAC,CAAC;QACV,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE;YACrC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;YACtC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;YACxB,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC;SACzB;KACF;IA0BD,GAAG,CAAC,GAAgB;QAClB,IAAI,IAAI,CAAC,GAAG,KAAK,GAAG,CAAC,GAAG,EAAE;YACxB,OAAO,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;SAC/C;aAAM;YACL,IAAI,GAAG,GAAG,CAAC,CAAC;YACZ,IAAI,IAAI,CAAC,GAAG,CAAC,MAAM,KAAK,GAAG,CAAC,GAAG,CAAC,MAAM,EAAE;gBACtC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,GAAG,GAAG,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;aACjD;iBAAM,IAAI,IAAI,CAAC,GAAG,CAAC,MAAM,KAAK,CAAC,EAAE;gBAChC,IAAI,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC;gBAC3B,OAAO,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE;oBAC3C,CAAC,EAAE,CAAC;iBACL;gBACD,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;aACrD;YACD,OAAO,CAAC,IAAI,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC;SAC/C;KACF;IAED,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,GAAG,CAAC,MAAM,KAAK,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;KACtD;CACF;SAEe,UAAU,CAAC,CAAS;IAClC,MAAM,GAAG,GAAa,EAAE,CAAC;IACzB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE;QACpC,MAAM,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAC1C,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;YACnB,OAAO,IAAI,CAAC;SACb;QACD,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;KACb;IACD,OAAO,GAAG,CAAC;AACb,CAAC;SAgBe,SAAS,CAAC,CAAS;IACjC,IAAI;QACF,IAAI,WAAW,CAAC,CAAC,CAAC,CAAC;QACnB,OAAO,IAAI,CAAC;KACb;IAAC,WAAM;QACN,OAAO,KAAK,CAAC;KACd;AACH,CAAC;SAEe,SAAS,CAAC,CAAS;IACjC,IAAI;QACF,OAAO,IAAI,WAAW,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC;KACrC;IAAC,WAAM;QACN,OAAO,KAAK,CAAC;KACd;AACH,CAAC;AAeD,MAAM,KAAK,GAAG,oDAAoD,CAAC;SAEnD,iBAAiB,CAC/B,CAAgB,EAChB,GAA8B;IAE9B,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;QACpB,OAAO,EAAE,CAAC;KACX;IAED,IAAI,KAA2B,CAAC;IAChC,IAAI,IAA0B,CAAC;IAC/B,IAAI,IAA0B,CAAC;IAE/B,IAAI,CAAC,CAAC,MAAM,KAAK,SAAS,EAAE;QAC1B,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE;YACxB,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE;gBAClB,IACE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;qBACb,EAAC,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,UAAU,CAAA,KAAK,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,KAAK,CAAC,CAAC;qBAChD,EAAC,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,aAAa,CAAA,IAAI,CAAC,KAAK,IAAI,CAAC,EACnC;oBACA,MAAM,IAAI,cAAc,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,IAAI,4BAA4B,CAAC,EAAE,CAAC,CAAC;iBACvE;gBAED,QAAQ,CAAC,CAAC,CAAC,CAAC;oBACV,KAAK,GAAG;wBACN,IAAI,CAAA,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,WAAW,KAAI,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE;4BACpC,KAAK,GAAG,KAAK,IAAI,EAAE,CAAC;4BACpB,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;yBACf;wBACD,MAAM;oBACR,KAAK,GAAG;wBACN,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE;4BAChB,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC;4BAClB,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;yBACd;wBACD,MAAM;oBACR,KAAK,GAAG;wBACN,IAAI,CAAA,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,QAAQ,KAAI,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE;4BACjC,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC;4BAClB,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;yBACd;wBACD,MAAM;iBACT;aACF;SACF;KACF;IACD,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC;AACxC,CAAC;AAkCM,MAAM,WAAW,GAAuC;IAC7D,SAAS,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACxB,aAAa,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IAC7B,iBAAiB,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IACnC,qBAAqB,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;IAC3C,YAAY,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IAC5B,WAAW,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;IAC5B,oBAAoB,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;IACzC,sBAAsB,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;IAC3C,iBAAiB,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;IACtC,YAAY,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC;IAChC,sBAAsB,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IACxC,WAAW,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;IAClC,gBAAgB,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC;IACzC,kBAAkB,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;IAC7C,aAAa,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;IACvC,oBAAoB,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC;IAChD,2BAA2B,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;IAC1D,sBAAsB,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;IACnD,kBAAkB,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC;IAC3C,aAAa,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;IACvC,eAAe,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;IACrC,gBAAgB,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;IAClC,gBAAgB,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;IACxC,gBAAgB,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC;IAC9C,kBAAkB,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IAChD,aAAa,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IACtC,gBAAgB,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC;IACpC,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;CAC1B,CAAC;SAEc,kBAAkB,CAChC,EAAU,EACV,GAAG,KAAQ;IAEX,MAAM,GAAG,GAAG,iBAAiB,CAAC,EAAE,CAAC,CAAC;IAClC,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE;QACrB,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;QACjC,IAAI,GAAG,CAAC,MAAM,KAAK,IAAI,GAAG,CAAC,CAAC,MAAM,EAAE;YAClC,IAAI,CAAC,GAAG,CAAC,CAAC;YACV,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE;gBACtC,CAAC,EAAE,CAAC;aACL;YACD,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,EAAE;gBAClB,OAAO,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;aACjC;SACF;KACF;IACD,OAAO,IAAI,CAAC;AACd,CAAC;SAEe,aAAa,CAAC,EAAe,EAAE,IAA2B;IACxE,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,GAAG,WAAW,CAAC,EAAE,CAAC,CAAC;IAClC,IAAI,IAAI,CAAC,MAAM,KAAK,IAAI,EAAE;QACxB,MAAM,IAAI,kBAAkB,CAAC,6BAA6B,EAAE,KAAK,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;KACjF;IACD,OAAO,iBAAiB,CAAC,CAAC,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC;AAC5C,CAAC;SAMe,UAAU,CACxB,EAAK,EACL,CAA6F;IAE7F,MAAM,EAAE,GAA4E,CAAC,CAAC;IACtF,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC;IAC9C,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;;QAErB,MAAM,GAAG,GACP,EAAE,KAAK,MAAM;cACT;gBACE,IAAI,EAAE,MAAM;gBACZ,IAAI;aACL;cACD;gBACE,IAAI,EAAE,MAAM;gBACZ,IAAI;aACL,CAAC;QACR,OAAO,GAA4B,CAAC;KACrC;IAED,OAAO,iCACD,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,EAAE,MACzC,IAAI,EAAE;YACJ,IAAI,CAAC,CAAC,CAAC;YACP;gBACE,IAAI,EAAE,EAAE;gBACR,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;aACpB;SACF,GACuB,CAAC;AAC7B,CAAC;SAEe,UAAU,CAAC,CAAgB;IACzC,OAAO,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC;AAC/C,CAAC;SAEe,UAAU,CAAC,CAAO;IAChC,OAAO,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,MAAM,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC;AAChE,CAAC;AAED,MAAM,SAAS,GACb,0JAA0J,CAAC;SAE7I,SAAS,CAAC,CAA6B;IACrD,IAAI,QAAQ,IAAI,CAAC,EAAE;QACjB,IAAI,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE;YACvB,OAAO,IAAI,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC;SACzC;aAAM,IAAI,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE;YACnC,MAAM,CAAC,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;YAC7B,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE;gBAC5B,OAAO,CAAC,CAAC;aACV;SACF;KACF;SAAM,IAAI,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE;QAC3B,OAAO,IAAI,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC;KACtC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;SAEe,QAAQ,CAAC,CAAS;IAChC,MAAM,GAAG,GAAa,EAAE,CAAC;IACzB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE;QACpC,MAAM,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;QAC7B,MAAM,CAAC,GAAG,QAAQ,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;QAC3B,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;YACnB,MAAM,IAAI,aAAa,CAAC,EAAE,CAAC,CAAC;SAC7B;QACD,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;KACb;IACD,OAAO,GAAG,CAAC;AACb,CAAC;SAEe,QAAQ,CAAC,KAAe;IACtC,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,GAAG,EAAE,QAAQ,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AAC3F;;AC9YA;AAEA,MAAM,iBAAiB,GAAG,EAAE,CAAC;AAE7B,MAAM,mBAAmB,GAAoD;IAC3E,GAAG,EAAE,IAAI;IACT,GAAG,EAAE,IAAI;IACT,OAAO,EAAE,IAAI;IACb,MAAM,EAAE,IAAI;IACZ,GAAG,EAAE,IAAI;IACT,KAAK,EAAE,IAAI;IACX,OAAO,EAAE,IAAI;IACb,OAAO,EAAE,IAAI;IACb,GAAG,EAAE,IAAI;IACT,GAAG,EAAE,IAAI;IACT,QAAQ,EAAE,IAAI;IACd,eAAe,EAAE,IAAI;IACrB,OAAO,EAAE,IAAI;IACb,MAAM,EAAE,IAAI;IACZ,IAAI,EAAE,IAAI;IACV,IAAI,EAAE,IAAI;IACV,EAAE,EAAE,IAAI;IACR,IAAI,EAAE,IAAI;IACV,QAAQ,EAAE,IAAI;IACd,EAAE,EAAE,IAAI;IACR,cAAc,EAAE,IAAI;IACpB,EAAE,EAAE,IAAI;IACR,QAAQ,EAAE,IAAI;IACd,gBAAgB,EAAE,IAAI;IACtB,GAAG,EAAE,IAAI;IACT,KAAK,EAAE,IAAI;IACX,YAAY,EAAE,IAAI;IAClB,MAAM,EAAE,IAAI;IACZ,EAAE,EAAE,IAAI;IACR,KAAK,EAAE,IAAI;IACX,GAAG,EAAE,IAAI;IACT,GAAG,EAAE,IAAI;IACT,EAAE,EAAE,IAAI;IACR,GAAG,EAAE,IAAI;IACT,GAAG,EAAE,IAAI;IACT,GAAG,EAAE,IAAI;IACT,GAAG,EAAE,IAAI;IACT,KAAK,EAAE,IAAI;IACX,GAAG,EAAE,IAAI;IACT,GAAG,EAAE,IAAI;IACT,EAAE,EAAE,IAAI;IACR,IAAI,EAAE,IAAI;IACV,aAAa,EAAE,IAAI;IACnB,WAAW,EAAE,IAAI;IACjB,qBAAqB,EAAE,IAAI;IAC3B,IAAI,EAAE,IAAI;IACV,YAAY,EAAE,IAAI;IAClB,MAAM,EAAE,IAAI;IACZ,YAAY,EAAE,IAAI;IAClB,MAAM,EAAE,IAAI;IACZ,IAAI,EAAE,IAAI;IACV,MAAM,EAAE,IAAI;IACZ,IAAI,EAAE,IAAI;IACV,KAAK,EAAE,IAAI;IACX,IAAI,EAAE,IAAI;IACV,MAAM,EAAE,IAAI;IACZ,YAAY,EAAE,IAAI;IAClB,GAAG,EAAE,IAAI;IACT,IAAI,EAAE,IAAI;IACV,MAAM,EAAE,IAAI;IACZ,kBAAkB,EAAE,IAAI;IACxB,eAAe,EAAE,IAAI;IACrB,IAAI,EAAE,IAAI;IACV,YAAY,EAAE,IAAI;IAClB,GAAG,EAAE,IAAI;IACT,MAAM,EAAE,IAAI;IACZ,UAAU,EAAE,IAAI;IAChB,SAAS,EAAE,IAAI;CAChB,CAAC;MAEW,cAAc,GAA+C,MAAM,CAAC,MAAM,CACrF,EAAE,EACF,mBAAmB,EACnB;IACE,QAAQ,EAAE,IAAI;IACd,eAAe,EAAE,IAAI;IACrB,GAAG,EAAE,IAAI;IACT,GAAG,EAAE,IAAI;IACT,IAAI,EAAE,IAAI;IACV,GAAG,EAAE,IAAI;IACT,GAAG,EAAE,IAAI;IACT,aAAa,EAAE,IAAI;IACnB,SAAS,EAAE,IAAI;IACf,SAAS,EAAE,IAAI;IACf,GAAG,EAAE,IAAI;IACT,EAAE,EAAE,IAAI;IACR,OAAO,EAAE,IAAI;IACb,OAAO,EAAE,IAAI;IACb,OAAO,EAAE,IAAI;IACb,IAAI,EAAE,IAAI;IACV,MAAM,EAAE,IAAI;IACZ,IAAI,EAAE,IAAI;IACV,IAAI,EAAE,IAAI;IACV,SAAS,EAAE,IAAI;IACf,GAAG,EAAE,IAAI;IACT,GAAG,EAAE,IAAI;IACT,IAAI,EAAE,IAAI;IACV,IAAI,EAAE,IAAI;IACV,IAAI,EAAE,IAAI;IACV,KAAK,EAAE,IAAI;IACX,mBAAmB,EAAE,IAAI;IACzB,MAAM,EAAE,IAAI;IACZ,MAAM,EAAE,IAAI;IACZ,MAAM,EAAE,IAAI;IACZ,IAAI,EAAE,IAAI;IACV,IAAI,EAAE,IAAI;CACF,EACV;AAEF,MAAM,uBAAuB,GAAkD;IAC7E,IAAI,EAAE,IAAI;IACV,KAAK,EAAE,IAAI;IACX,IAAI,EAAE,IAAI;IACV,GAAG,EAAE,IAAI;IACT,GAAG,EAAE,IAAI;IACT,MAAM,EAAE,IAAI;IACZ,QAAQ,EAAE,IAAI;IACd,KAAK,EAAE,IAAI;IACX,KAAK,EAAE,IAAI;IACX,QAAQ,EAAE,IAAI;IACd,GAAG,EAAE,IAAI;IACT,SAAS,EAAE,IAAI;IACf,SAAS,EAAE,IAAI;IACf,OAAO,EAAE,IAAI;CACd,CAAC;AAEF,MAAM,OAAO,GAAkC,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,uBAAuB,EAAE;IACxF,EAAE,EAAE,IAAI;IACR,IAAI,EAAE,IAAI;IACV,GAAG,EAAE,IAAI;IACT,OAAO,EAAE,IAAI;IACb,QAAQ,EAAE,IAAI;IACd,MAAM,EAAE,IAAI;IACZ,IAAI,EAAE,IAAI;IACV,GAAG,EAAE,IAAI;IACT,SAAS,EAAE,IAAI;IACf,MAAM,EAAE,IAAI;IACZ,YAAY,EAAE,IAAI;IAClB,YAAY,EAAE,IAAI;IAClB,YAAY,EAAE,IAAI;IAClB,mBAAmB,EAAE,IAAI;IACzB,aAAa,EAAE,IAAI;IACnB,MAAM,EAAE,IAAI;IACZ,SAAS,EAAE,IAAI;IACf,KAAK,EAAE,IAAI;CACH,CAAC,CAAC;MAEC,wBAAyB,SAAQ,cAAc;;;;;IAK1D,YAAmB,GAAS,EAAE,OAAgB;QAC5C,KAAK,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;QADH,QAAG,GAAH,GAAG,CAAM;QAE1B,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,wBAAwB,CAAC,SAAS,CAAC,CAAC;KACjE;CACF;AAED,SAAS,MAAM,CAAC,EAAQ;IACtB,OAAO,MAAM,IAAI,EAAE,CAAC;AACtB,CAAC;AAED,SAAS,WAAW,CAAC,EAAQ;IAC3B,OAAO,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,IAAI,MAAM,IAAI,EAAE,CAAC;AAC3C,CAAC;AAED,SAAS,UAAU,CAAC,EAAQ;IAC1B,IAAI,MAAM,CAAC,EAAE,CAAC,EAAE;QACd,OAAO,IAAI,CAAC;KACb;IACD,MAAM,IAAI,wBAAwB,CAAC,EAAE,EAAE,0BAA0B,CAAC,CAAC;AACrE,CAAC;AAED,SAAS,SAAS,CAAC,EAAQ;IACzB,IAAI,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE;QACrB,OAAO,IAAI,CAAC;KACb;IACD,MAAM,IAAI,wBAAwB,CAAC,EAAE,EAAE,8BAA8B,CAAC,CAAC;AACzE,CAAC;AAED,SAAS,eAAe,CAAC,EAAQ;IAC/B,IAAI,WAAW,CAAC,EAAE,CAAC,EAAE;QACnB,OAAO,IAAI,CAAC;KACb;IACD,MAAM,IAAI,wBAAwB,CAAC,EAAE,EAAE,sCAAsC,CAAC,CAAC;AACjF,CAAC;AAED,SAAS,aAAa,CAAC,CAAa;IAClC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE;QACpB,MAAM,IAAI,wBAAwB,CAAC,CAAC,EAAE,yBAAyB,CAAC,CAAC;KAClE;AACH,CAAC;AAED,SAAS,gBAAgB,CAAC,EAAQ;IAChC,IAAI,KAAK,IAAI,EAAE,EAAE;QACf,OAAO,IAAI,CAAC;KACb;IACD,MAAM,IAAI,wBAAwB,CAAC,EAAE,EAAE,sBAAsB,CAAC,CAAC;AACjE,CAAC;AAED,SAAS,mBAAmB,CAAC,EAAQ;IACnC,IAAI,QAAQ,IAAI,EAAE,EAAE;QAClB,OAAO,IAAI,CAAC;KACb;IACD,MAAM,IAAI,wBAAwB,CAAC,EAAE,EAAE,yBAAyB,CAAC,CAAC;AACpE,CAAC;AAED,SAAS,UAAU,CACjB,EAAQ,EACR,CAAI;;IAEJ,IAAI,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,IAAI,KAAK,SAAS,KAAK,OAAA,EAAE,CAAC,IAAI,0CAAE,MAAM,MAAK,CAAC,EAAE;QAC/D,OAAO,IAAI,CAAC;KACb;IACD,MAAM,IAAI,wBAAwB,CAAC,EAAE,EAAE,GAAG,CAAC,qBAAqB,CAAC,CAAC;AACpE,CAAC;AAED;;;;;SAKgB,0BAA0B,CAAC,EAAQ;;IACjD,IAAI,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE;QACrB,KAAK,MAAM,CAAC,IAAI,EAAE,EAAE;YAClB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE;gBACnC,MAAM,IAAI,wBAAwB,CAAC,EAAE,EAAE,2BAA2B,CAAC,CAAC;aACrE;YACD,0BAA0B,CAAC,CAAC,CAAC,CAAC;SAC/B;QACD,OAAO,IAAI,CAAC;KACb;IAED,IAAI,UAAU,CAAC,EAAE,CAAC,EAAE;QAClB,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,mBAAmB,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE;YACtE,UAAU,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;YAClB,OAAO,IAAI,CAAC;SACb;QAED,QAAQ,EAAE,CAAC,IAAI;YACb,KAAK,MAAM,CAAC;YACZ,KAAK,MAAM,CAAC;YACZ,KAAK,QAAQ,CAAC;YACd,KAAK,KAAK,CAAC;YACX,KAAK,QAAQ,CAAC;YACd,KAAK,KAAK;gBACR,IAAI,EAAE,CAAC,IAAI,KAAK,SAAS,IAAI,UAAU,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE;;oBAE9C,IAAI,gBAAgB,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE;wBAChC,aAAa,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;qBAC3B;iBACF;gBACD,MAAM;YAER,KAAK,KAAK,CAAC;YACX,KAAK,KAAK,CAAC;YACX,KAAK,qBAAqB;;gBAExB,IAAI,UAAU,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE;;oBAErB,IAAI,gBAAgB,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE;wBAChC,aAAa,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;qBAC3B;iBACF;gBACD,MAAM;YAER,KAAK,MAAM,CAAC;YACZ,KAAK,MAAM,CAAC;YACZ,KAAK,OAAO,CAAC;YACb,KAAK,KAAK,CAAC;YACX,KAAK,MAAM;;gBAET,IAAI,UAAU,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE;oBACrB,mBAAmB,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;iBACjC;gBACD,MAAM;YAER,KAAK,QAAQ;;gBAEX,IAAI,UAAU,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE;oBACrB,2BAA2B,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;iBACzC;gBACD,MAAM;YAER,KAAK,UAAU;;gBAEb,IAAI,UAAU,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE;oBACrB,2BAA2B,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;iBACzC;gBACD,MAAM;YAER,KAAK,SAAS,CAAC;YACf,KAAK,SAAS,CAAC;YACf,KAAK,SAAS,CAAC;YACf,KAAK,IAAI;;gBAEP,IAAI,UAAU,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE;;oBAErB,IAAI,SAAS,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE;wBACzB,0BAA0B,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;qBACxC;;oBAED,IAAI,SAAS,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE;wBACzB,0BAA0B,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;qBACxC;iBACF;gBACD,MAAM;YAER,KAAK,KAAK,CAAC;YACX,KAAK,MAAM,CAAC;YACZ,KAAK,MAAM,CAAC;YACZ,KAAK,WAAW;;gBAEd,IAAI,UAAU,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE;oBACrB,0BAA0B,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;iBACxC;gBACD,MAAM;YAER,KAAK,iBAAiB;;gBAEpB,IAAI,UAAU,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE;oBACrB,uBAAuB,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;iBACrC;gBACD,MAAM;YAER,KAAK,KAAK;gBACR,IAAI,OAAA,EAAE,CAAC,IAAI,0CAAE,MAAM,MAAK,CAAC,EAAE;;oBAEzB,IAAI,gBAAgB,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE;wBAChC,aAAa,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;qBAC3B;;oBAED,IAAI,SAAS,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE;wBACzB,0BAA0B,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;qBACxC;iBACF;qBAAM,IAAI,OAAA,EAAE,CAAC,IAAI,0CAAE,MAAM,MAAK,CAAC,EAAE;;oBAEhC,IAAI,SAAS,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE;wBACzB,0BAA0B,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;qBACxC;iBACF;qBAAM;oBACL,MAAM,IAAI,wBAAwB,CAAC,EAAE,EAAE,2BAA2B,CAAC,CAAC;iBACrE;gBACD,MAAM;YAER,KAAK,MAAM;;gBAET,IAAI,UAAU,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE;oBACrB,2BAA2B,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;oBACxC,mBAAmB,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;iBACjC;gBACD,MAAM;YAER,KAAK,WAAW;;gBAEd,IAAI,UAAU,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE;oBACrB,6BAA6B,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;iBAC3C;gBACD,MAAM;YAER,KAAK,WAAW;;gBAEd,IAAI,UAAU,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE;oBACrB,6BAA6B,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;oBAC1C,mBAAmB,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;iBACjC;gBACD,MAAM;YAER,KAAK,eAAe;;gBAElB,IAAI,UAAU,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE;oBACrB,6BAA6B,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;oBAC1C,iCAAiC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;iBAC/C;gBACD,MAAM;YAER,KAAK,QAAQ;;gBAEX,IAAI,UAAU,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE;oBACrB,mBAAmB,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;oBAChC,mBAAmB,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;;oBAEhC,IAAI,SAAS,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE;wBACzB,0BAA0B,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;qBACxC;iBACF;gBACD,MAAM;YAER,KAAK,MAAM;;gBAET,IAAI,UAAU,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE;oBACrB,IAAI,mBAAmB,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE;wBACnC,mBAAmB,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;qBACjC;oBACD,IAAI,mBAAmB,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE;wBACnC,2BAA2B,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;qBACzC;iBACF;gBACD,MAAM;YAER;gBACE,MAAM,IAAI,wBAAwB,CAAC,EAAE,EAAE,sBAAsB,CAAC,CAAC;SAClE;KACF;IACD,OAAO,IAAI,CAAC;AACd,CAAC;SAEe,6BAA6B,CAAC,EAAQ;;IAEpD,IAAI,eAAe,CAAC,EAAE,CAAC,EAAE;QACvB,IAAI,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,KAAK,MAAM,IAAI,EAAE,CAAC,IAAI,KAAK,IAAI,IAAI,EAAE,CAAC,IAAI,KAAK,QAAQ,EAAE;YACvF,YAAY,CAAC,EAAE,EAAE,CAAC,EAAE,KAAK,6BAA6B,CAAC,EAAE,CAAC,CAAC,CAAC;SAC7D;aAAM,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,uBAAuB,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE;YAClF,MAAM,IAAI,wBAAwB,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,IAAI,0BAA0B,CAAC,CAAC;SAC9E;KACF;IACD,OAAO,IAAI,CAAC;AACd,CAAC;SAEe,2BAA2B,CAAC,EAAQ;;IAElD,IAAI,eAAe,CAAC,EAAE,CAAC,EAAE;QACvB,IAAI,MAAM,CAAC,EAAE,CAAC,EAAE;YACd,IACE,CAAC,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC,IAAI,CAAC;gBACvD,EAAE,CAAC,IAAI,KAAK,SAAS;gBACrB,EAAE,CAAC,IAAI,KAAK,WAAW;gBACvB,EAAE,CAAC,IAAI,KAAK,eAAe;gBAC3B,EAAE,CAAC,IAAI,KAAK,QAAQ,EACpB;gBACA,MAAM,IAAI,wBAAwB,CAChC,EAAE,EACF,GAAG,EAAE,CAAC,IAAI,sDAAsD,CACjE,CAAC;aACH;YACD,YAAY,CAAC,EAAE,EAAE,CAAC,EAAE,KAAK,2BAA2B,CAAC,EAAE,CAAC,CAAC,CAAC;SAC3D;KACF;IACD,OAAO,IAAI,CAAC;AACd,CAAC;SAEe,2BAA2B,CAAC,EAAQ;;IAElD,IAAI,eAAe,CAAC,EAAE,CAAC,EAAE;QACvB,IAAI,MAAM,CAAC,EAAE,CAAC,EAAE;YACd,IACE,CAAC,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC,IAAI,CAAC;gBACvD,EAAE,CAAC,IAAI,KAAK,SAAS;gBACrB,EAAE,CAAC,IAAI,KAAK,WAAW;gBACvB,EAAE,CAAC,IAAI,KAAK,eAAe;gBAC3B,EAAE,CAAC,IAAI,KAAK,QAAQ;gBACpB,EAAE,CAAC,IAAI,KAAK,UAAU,EACtB;gBACA,MAAM,IAAI,wBAAwB,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,IAAI,wBAAwB,CAAC,CAAC;aAC5E;YACD,YAAY,CAAC,EAAE,EAAE,CAAC,EAAE,KAAK,2BAA2B,CAAC,EAAE,CAAC,CAAC,CAAC;SAC3D;KACF;IACD,OAAO,IAAI,CAAC;AACd,CAAC;SAEe,2BAA2B,CAAC,EAAQ;;IAElD,IAAI,eAAe,CAAC,EAAE,CAAC,EAAE;QACvB,IAAI,MAAM,CAAC,EAAE,CAAC,EAAE;YACd,IACE,CAAC,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC,IAAI,CAAC;gBACvD,EAAE,CAAC,IAAI,KAAK,WAAW;gBACvB,EAAE,CAAC,IAAI,KAAK,UAAU,EACtB;gBACA,MAAM,IAAI,wBAAwB,CAChC,EAAE,EACF,GAAG,EAAE,CAAC,IAAI,2CAA2C,CACtD,CAAC;aACH;YACD,YAAY,CAAC,EAAE,EAAE,CAAC,EAAE,KAAK,2BAA2B,CAAC,EAAE,CAAC,CAAC,CAAC;SAC3D;KACF;IACD,OAAO,IAAI,CAAC;AACd,CAAC;SAEe,2BAA2B,CAAC,EAAQ;;IAElD,IAAI,eAAe,CAAC,EAAE,CAAC,EAAE;QACvB,IAAI,MAAM,CAAC,EAAE,CAAC,EAAE;YACd,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,IAAI,KAAK,WAAW,EAAE;gBACtF,MAAM,IAAI,wBAAwB,CAChC,EAAE,EACF,GAAG,EAAE,CAAC,IAAI,6CAA6C,CACxD,CAAC;aACH;YACD,YAAY,CAAC,EAAE,EAAE,CAAC,EAAE,KAAK,2BAA2B,CAAC,EAAE,CAAC,CAAC,CAAC;SAC3D;KACF;IACD,OAAO,IAAI,CAAC;AACd,CAAC;SAEe,iCAAiC,CAAC,EAAQ;;IAExD,IAAI,eAAe,CAAC,EAAE,CAAC,EAAE;QACvB,IAAI,MAAM,CAAC,EAAE,CAAC,EAAE;YACd,IACE,CAAC,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC,IAAI,CAAC;gBACvD,EAAE,CAAC,IAAI,KAAK,SAAS;gBACrB,EAAE,CAAC,IAAI,KAAK,WAAW;gBACvB,EAAE,CAAC,IAAI,KAAK,eAAe,EAC3B;gBACA,MAAM,IAAI,wBAAwB,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,IAAI,uCAAuC,CAAC,CAAC;aAC3F;YACD,YAAY,CAAC,EAAE,EAAE,CAAC,EAAE,KAAK,iCAAiC,CAAC,EAAE,CAAC,CAAC,CAAC;SACjE;KACF;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,oBAAoB,CAAC,CAAC;SAEhC,mBAAmB,CAAC,IAAmB;IACrD,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,iBAAiB,EAAE;QAC1C,MAAM,IAAI,wBAAwB,CAAC,IAAI,EAAE,uBAAuB,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;KAChF;IACD,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE;QAC7B,MAAM,IAAI,wBAAwB,CAAC,IAAI,EAAE,sCAAsC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;KAC/F;AACH,CAAC;AAED;;;;;SAKgB,mBAAmB,CAAC,EAAQ;;IAE1C,IAAI,eAAe,CAAC,EAAE,CAAC,EAAE;QACvB,IAAI,MAAM,CAAC,EAAE,CAAC,EAAE;YACd,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE;gBAC3D,MAAM,IAAI,wBAAwB,CAAC,EAAE,EAAE,eAAe,CAAC,CAAC;aACzD;YACD,YAAY,CAAC,EAAE,EAAE,CAAC,EAAE,KAAK,mBAAmB,CAAC,EAAE,CAAC,CAAC,CAAC;SACnD;KACF;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,YAAY,CAAC,EAAiB,EAAE,EAA+B;IACtE,IAAI,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,KAAK,MAAM,EAAE;QAC3C,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC;QAC9C,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE;YACzC,MAAM,IAAI,wBAAwB,CAAC,EAAE,EAAE,+BAA+B,CAAC,CAAC;SACzE;QACD,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;YACb,IAAI,eAAe,CAAC,CAAC,CAAC,EAAE;gBACtB,EAAE,CAAC,CAAC,CAAC,CAAC;aACP;SACF,CAAC,CAAC;QACH,OAAO,IAAI,CAAC;KACb;IAED,QAAQ,EAAE,CAAC,IAAI;QACb,KAAK,QAAQ,CAAC;QACd,KAAK,MAAM;;YAET,IAAI,UAAU,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,eAAe,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE;gBACpD,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;aAChB;YACD,MAAM;QAER,KAAK,UAAU;;YAEb,IAAI,UAAU,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE;gBACrB,2BAA2B,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;aACzC;YACD,MAAM;QAER,KAAK,IAAI;;YAEP,IAAI,UAAU,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,eAAe,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,eAAe,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE;gBACnF,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;gBACf,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;aAChB;YACD,MAAM;QAER,KAAK,QAAQ;;YAEX,IAAI,UAAU,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE;gBACrB,mBAAmB,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;gBAChC,mBAAmB,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;aACjC;YACD,MAAM;QAER,KAAK,KAAK;;YAER,IAAI,UAAU,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE;gBACrB,6BAA6B,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;aAC3C;YACD,MAAM;QAER,KAAK,KAAK;;YAER,IAAI,UAAU,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,eAAe,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,eAAe,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE;gBACnF,6BAA6B,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC1C,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;aAChB;YACD,MAAM;QAER,KAAK,SAAS;;YAEZ,IAAI,UAAU,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,eAAe,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,eAAe,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE;gBACnF,6BAA6B,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC1C,iCAAiC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC9C,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;aAChB;YACD,MAAM;QAER,KAAK,QAAQ;;YAEX,IAAI,UAAU,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,eAAe,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE;gBACpD,6BAA6B,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;aAC3C;YACD,MAAM;QAER,KAAK,eAAe,CAAC;QACrB,KAAK,qBAAqB;YACxB,IAAI,UAAU,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE;gBACrB,gBAAgB,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;aAC9B;YACD,MAAM;QAER;YACE,UAAU,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;KACrB;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AACD;;;;;SAKgB,mBAAmB,CAAC,EAAQ;IAC1C,IAAI,KAAK,IAAI,EAAE,IAAI,QAAQ,IAAI,EAAE,IAAI,OAAO,IAAI,EAAE,EAAE;QAClD,OAAO,IAAI,CAAC;KACb;IAED,IAAI,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE;QACrB,IAAI,OAAO,GAAG,CAAC,CAAC;QAChB,KAAK,MAAM,CAAC,IAAI,EAAE,EAAE;YAClB,IAAI,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,KAAK,EAAE;;gBAEjC,IAAI,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE;oBACpB,mBAAmB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;oBAC/B,mBAAmB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;iBAChC;gBACD,OAAO,EAAE,CAAC;aACX;iBAAM;gBACL,mBAAmB,CAAC,CAAC,CAAC,CAAC;aACxB;SACF;QAED,IAAI,OAAO,KAAK,CAAC,IAAI,OAAO,KAAK,EAAE,CAAC,MAAM,EAAE;YAC1C,MAAM,IAAI,wBAAwB,CAAC,EAAE,EAAE,mDAAmD,CAAC,CAAC;SAC7F;QACD,OAAO,IAAI,CAAC;KACb;IAED,IAAI,MAAM,CAAC,EAAE,CAAC,EAAE;QACd,QAAQ,EAAE,CAAC,IAAI;YACb,KAAK,MAAM,CAAC;YACZ,KAAK,MAAM,CAAC;YACZ,KAAK,OAAO,CAAC;YACb,KAAK,MAAM;gBACT,UAAU,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;gBAClB,MAAM;YAER,KAAK,MAAM;;gBAET,IAAI,EAAE,CAAC,IAAI,KAAK,SAAS,IAAI,EAAE,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE;oBAC/C,MAAM,IAAI,wBAAwB,CAAC,EAAE,EAAE,+BAA+B,CAAC,CAAC;iBACzE;gBACD,KAAK,MAAM,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE;oBACvB,mBAAmB,CAAC,CAAC,CAAC,CAAC;iBACxB;gBACD,MAAM;YAER,KAAK,MAAM,CAAC;YACZ,KAAK,OAAO,CAAC;YACb,KAAK,MAAM;;gBAET,IAAI,UAAU,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE;oBACrB,mBAAmB,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;iBACjC;gBACD,MAAM;YAER;gBACE,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,cAAc,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE;oBACjE,0BAA0B,CAAC,EAAE,CAAC,CAAC;iBAChC;qBAAM;oBACL,MAAM,IAAI,wBAAwB,CAAC,EAAE,EAAE,oCAAoC,CAAC,CAAC;iBAC9E;SACJ;KACF;SAAM;QACL,MAAM,IAAI,wBAAwB,CAAC,EAAE,EAAE,qBAAqB,CAAC,CAAC;KAC/D;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;SAKgB,uBAAuB,CAAC,EAAQ;;IAE9C,IAAI,SAAS,CAAC,EAAE,CAAC,EAAE;QACjB,MAAM,WAAW,GAA+B,EAAE,CAAC;QACnD,MAAM,KAAK,GAAgC,EAAE,CAAC;QAC9C,KAAK,MAAM,GAAG,IAAI,EAAE,EAAE;YACpB,IAAI,UAAU,CAAC,GAAG,CAAC,EAAE;gBACnB,IAAI,GAAG,CAAC,IAAI,KAAK,MAAM,EAAE;oBACvB,IAAI,GAAG,CAAC,IAAI,IAAI,WAAW,EAAE;wBAC3B,MAAM,IAAI,wBAAwB,CAAC,EAAE,EAAE,+BAA+B,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;qBACnF;oBACD,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;iBAC9B;;gBAGD,QAAQ,GAAG,CAAC,IAAI;oBACd,KAAK,MAAM;wBACT,IAAI,UAAU,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE;;4BAEtB,IAAI,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE;gCAC1B,0BAA0B,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;6BACzC;yBACF;wBACD,MAAM;oBAER,KAAK,WAAW;wBACd,IAAI,UAAU,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE;4BACtB,2BAA2B,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;yBAC1C;wBACD,MAAM;oBAER,KAAK,SAAS;wBACZ,IAAI,UAAU,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE;4BACtB,2BAA2B,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;yBAC1C;wBACD,MAAM;oBAER,KAAK,MAAM;wBACT,IAAI,UAAU,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE;4BACtB,IAAI,mBAAmB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE;gCACpC,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gCACzB,IAAI,IAAI,CAAC,MAAM,IAAI,KAAK,EAAE;oCACxB,MAAM,IAAI,wBAAwB,CAAC,EAAE,EAAE,wBAAwB,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;iCAC/E;gCACD,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC;gCAC1B,mBAAmB,CAAC,IAAI,CAAC,CAAC;6BAC3B;4BAED,2BAA2B,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;4BACzC,2BAA2B,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;4BACzC,IAAI,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE;gCAC1B,0BAA0B,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;6BACzC;yBACF;wBACD,MAAM;oBAER;wBACE,MAAM,IAAI,wBAAwB,CAAC,EAAE,EAAE,gCAAgC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;iBACtF;aACF;SACF;KACF;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;SAIgB,iBAAiB,CAAC,EAAQ;IACxC,IAAI;QACF,uBAAuB,CAAC,EAAE,CAAC,CAAC;QAC5B,OAAO,IAAI,CAAC;KACb;IAAC,WAAM;QACN,OAAO,KAAK,CAAC;KACd;AACH,CAAC;AAED;;;;SAIgB,eAAe,CAAC,EAAQ;IACtC,IAAI;QACF,mBAAmB,CAAC,EAAE,CAAC,CAAC;QACxB,OAAO,IAAI,CAAC;KACb;IAAC,WAAM;QACN,OAAO,KAAK,CAAC;KACd;AACH,CAAC;AAED;;;;SAIgB,eAAe,CAAC,EAAQ;IACtC,IAAI;QACF,0BAA0B,CAAC,EAAE,CAAC,CAAC;QAC/B,OAAO,IAAI,CAAC;KACb;IAAC,WAAM;QACN,OAAO,KAAK,CAAC;KACd;AACH,CAAC;AAED;;;;SAIgB,eAAe,CAAC,EAAQ;IACtC,IAAI;QACF,mBAAmB,CAAC,EAAE,CAAC,CAAC;QACxB,OAAO,IAAI,CAAC;KACb;IAAC,WAAM;QACN,OAAO,KAAK,CAAC;KACd;AACH,CAAC;SAEe,aAAa,CAAC,CAAO;IACnC,OAAO,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;AACtE,CAAC;SAEe,mBAAmB,CAAC,CAAgB;IAClD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;QACrB,OAAO,KAAK,CAAC;KACd;IACD,KAAK,MAAM,CAAC,IAAI,CAAC,EAAE;QACjB,IAAI,MAAM,IAAI,CAAC,EAAE;YACf,IAAI,aAAa,CAAC,CAAC,CAAC,EAAE;gBACpB,MAAM,IAAI,cAAc,CAAC,CAAC,EAAE,oCAAoC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;aACtF;iBAAM,IAAI,CAAC,CAAC,IAAI,KAAK,KAAK,EAAE;gBAC3B,MAAM,IAAI,cAAc,CAAC,CAAC,EAAE,sCAAsC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;aACxF;SACF;KACF;IACD,OAAO,IAAI,CAAC;AACd;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC5zBA,MAAM,UAAU,GAAa;IAC3B,WAAW;IACX,SAAS;IACT,MAAM;IACN,OAAO;IACP,KAAK;IACL,MAAM;IACN,MAAM;IACN,MAAM;IACN,OAAO;IACP,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,QAAQ;IACR,SAAS;IACT,QAAQ;IACR,QAAQ;IACR,KAAK;IACL,KAAK;IACL,QAAQ;IACR,KAAK;IACL,SAAS;IACT,KAAK;IACL,KAAK;IACL,iBAAiB;IACjB,SAAS;IACT,QAAQ;IACR,MAAM;IACN,gBAAgB;IAChB,iBAAiB;IACjB,kBAAkB;IAClB,KAAK;IACL,MAAM;IACN,KAAK;IACL,MAAM;IACN,WAAW;IACX,WAAW;IACX,IAAI;IACJ,MAAM;IACN,UAAU;IACV,IAAI;IACJ,KAAK;IACL,IAAI;IACJ,UAAU;IACV,IAAI;IACJ,SAAS;IACT,SAAS;IACT,SAAS;IACT,KAAK;IACL,QAAQ;IACR,IAAI;IACJ,MAAM;IACN,MAAM;IACN,KAAK;IACL,KAAK;IACL,IAAI;IACJ,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,MAAM;IACN,KAAK;IACL,KAAK;IACL,IAAI;IACJ,MAAM;IACN,MAAM;IACN,OAAO;IACP,MAAM;IACN,MAAM;IACN,QAAQ;IACR,QAAQ;IACR,MAAM;IACN,gBAAgB;IAChB,KAAK;IACL,MAAM;IACN,iBAAiB;IACjB,cAAc;IACd,MAAM;IACN,QAAQ;IACR,KAAK;IACL,MAAM;IACN,WAAW;IACX,SAAS;IACT,UAAU;IACV,OAAO;IACP,MAAM;IACN,QAAQ;IACR,MAAM;IACN,UAAU;IACV,KAAK;IACL,KAAK;IACL,UAAU;IACV,QAAQ;IACR,MAAM;IACN,KAAK;IACL,SAAS;IACT,KAAK;IACL,QAAQ;IACR,IAAI;IACJ,MAAM;IACN,KAAK;IACL,WAAW;IACX,QAAQ;IACR,OAAO;IACP,OAAO;IACP,WAAW;IACX,MAAM;IACN,WAAW;IACX,SAAS;IACT,OAAO;IACP,KAAK;IACL,KAAK;IACL,eAAe;IACf,OAAO;IACP,UAAU;IACV,UAAU;IACV,OAAO;IACP,cAAc;IACd,OAAO;IACP,OAAO;IACP,QAAQ;IACR,cAAc;IACd,oBAAoB;IACpB,QAAQ;IACR,MAAM;IACN,eAAe;IACf,cAAc;IACd,cAAc;IACd,cAAc;IACd,eAAe;IACf,qBAAqB;IACrB,qBAAqB;IACrB,uBAAuB;IACvB,QAAQ;IACR,QAAQ;IACR,aAAa;IACb,cAAc;IACd,cAAc;IACd,gBAAgB;IAChB,OAAO;IACP,WAAW;IACX,YAAY;IACZ,MAAM;IACN,MAAM;IACN,UAAU;IACV,WAAW;CACZ,CAAC;AAEF,MAAM,QAAQ,GACZ,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AAE/D,IAAK,GAYJ;AAZD,WAAK,GAAG;IACN,2BAAO,CAAA;IACP,iCAAU,CAAA;IACV,qCAAY,CAAA;IACZ,+BAAS,CAAA;IACT,yCAAc,CAAA;IACd,+BAAS,CAAA;IACT,yCAAc,CAAA;IACd,+BAAS,CAAA;IACT,yCAAc,CAAA;IACd,6BAAQ,CAAA;IACR,gCAAU,CAAA;AACZ,CAAC,EAZI,GAAG,KAAH,GAAG,QAYP;AACD,MAAM,MAAM;IAAZ;QACS,WAAM,GAAa,EAAE,CAAC;KAwC9B;IAtCC,IAAI,MAAM;QACR,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;KAC3B;IAED,UAAU,CAAC,GAAa;QACtB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;KAC/C;IAED,UAAU,CAAC,GAAW;QACpB,MAAM,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC;QAClB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;KAC5B;IAED,WAAW,CAAC,GAAW;QACrB,MAAM,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC;QAClB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC;QAClC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;KAC5B;IAED,WAAW,CAAC,GAAW;QACrB,MAAM,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC;QAClB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,IAAI,CAAC,CAAC;QACnC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,IAAI,CAAC,CAAC;QACnC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC;QAClC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;KAC5B;IAED,SAAS,CAAC,GAAW;QACnB,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;KACtB;IAED,UAAU,CAAC,GAAW;QACpB,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;KACvB;IAED,UAAU,CAAC,GAAW;QACpB,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;KACvB;CACF;AAED,MAAM,SAAS,GAAG,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC;AACnD,MAAM,MAAM;IACV,YACU,MAA6B,EAC7B,MAAc,CAAC,EACf,MAAc,MAAM,CAAC,MAAM;QAF3B,WAAM,GAAN,MAAM,CAAuB;QAC7B,QAAG,GAAH,GAAG,CAAY;QACf,QAAG,GAAH,GAAG,CAAwB;KACjC;;IAGJ,IAAI,MAAM;QACR,OAAO,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC;KAC5B;IAED,SAAS,CAAC,GAAW;QACnB,IAAI,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,GAAG,GAAG,EAAE;YAC7B,MAAM,SAAS,CAAC;SACjB;QACD,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC;QACxD,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC;QAChB,OAAO,GAAG,CAAC;KACZ;IAED,MAAM,CAAC,GAAW;QAChB,IAAI,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,GAAG,GAAG,EAAE;YAC7B,MAAM,SAAS,CAAC;SACjB;QACD,MAAM,GAAG,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC;QAC9D,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC;QAChB,OAAO,GAAG,CAAC;KACZ;IAED,IAAI;QACF,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;KACpD;IAED,SAAS;QACP,IAAI,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC,EAAE;YAC3B,MAAM,SAAS,CAAC;SACjB;QACD,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC;KACtC;IAED,UAAU;QACR,IAAI,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC,EAAE;YAC3B,MAAM,SAAS,CAAC;SACjB;QACD,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;QACnC,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;QACnC,OAAO,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;KAC/B;IAED,UAAU;QACR,IAAI,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC,EAAE;YAC3B,MAAM,SAAS,CAAC;SACjB;QACD,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;QACnC,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;QACnC,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;QACnC,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;QACnC,OAAO,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;KACzD;IAED,QAAQ;QACN,IAAI,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC,EAAE;YAC3B,MAAM,SAAS,CAAC;SACjB;QACD,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;QAClC,OAAO,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC;KACxB;IAED,SAAS;QACP,IAAI,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC,EAAE;YAC3B,MAAM,SAAS,CAAC;SACjB;QACD,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;QACnC,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;QACnC,OAAO,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;KACvC;IAED,SAAS;QACP,IAAI,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC,EAAE;YAC3B,MAAM,SAAS,CAAC;SACjB;QACD,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;QACnC,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;QACnC,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;QACnC,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;QACnC,OAAO,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,GAAG,EAAE,CAAC;KACjD;CACF;AAED,IAAK,UAGJ;AAHD,WAAK,UAAU;IACb,mDAAY,CAAA;IACZ,uDAAc,CAAA;AAChB,CAAC,EAHI,UAAU,KAAV,UAAU,QAGd;AAED,IAAK,eAIJ;AAJD,WAAK,eAAe;IAClB,2DAAW,CAAA;IACX,+DAAa,CAAA;IACb,qDAAQ,CAAA;AACV,CAAC,EAJI,eAAe,KAAf,eAAe,QAInB;AAcD,SAAS,iBAAiB,CAAC,EAAU;IACnC,IAAI,IAAiB,CAAC;IACtB,MAAM,GAAG,GAAG,EAAE,CAAC,SAAS,EAAE,CAAC;IAC3B,QAAQ,GAAG;QACT,KAAK,eAAe,CAAC,OAAO;YAC1B,IAAI,GAAG,sBAAsB,CAAC;YAC9B,MAAM;QACR,KAAK,eAAe,CAAC,SAAS;YAC5B,IAAI,GAAG,wBAAwB,CAAC;YAChC,MAAM;QACR,KAAK,eAAe,CAAC,IAAI;YACvB,IAAI,GAAG,mBAAmB,CAAC;YAC3B,MAAM;QACR;YACE,MAAM,IAAI,KAAK,CAAC,gCAAgC,GAAG,EAAE,CAAC,CAAC;KAC1D;IACD,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,EAAE,CAAC;AAC1C,CAAC;AAED,SAAS,WAAW,CAAC,EAAU;IAC7B,IAAI,OAAgB,CAAC;IACrB,MAAM,GAAG,GAAG,EAAE,CAAC,SAAS,EAAE,CAAC;IAC3B,QAAQ,GAAG;QACT,KAAK,UAAU,CAAC,QAAQ;YACtB,OAAO,GAAG,iBAAiB,CAAC,EAAE,CAAC,CAAC;YAChC,MAAM;QAER,KAAK,UAAU,CAAC,UAAU;YACxB,OAAO,GAAG;gBACR,IAAI,EAAE,cAAc;gBACpB,IAAI,EAAE,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC;aACvB,CAAC;YACF,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;YAChB,MAAM;QAER;YACE,MAAM,IAAI,KAAK,CAAC,wBAAwB,GAAG,EAAE,CAAC,CAAC;KAClD;IAED,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE;;QAEnB,MAAM,GAAG,GAAG,IAAI,WAAW,EAAE,CAAC;QAC9B,OAAO,CAAC,UAAU,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,UAAU,CAAC,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;KAC1E;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,kBAAkB,CAAC,CAAU,EAAE,CAAS;IAC/C,IAAI,GAAoB,CAAC;IACzB,QAAQ,CAAC,CAAC,IAAI;QACZ,KAAK,sBAAsB;YACzB,GAAG,GAAG,eAAe,CAAC,OAAO,CAAC;YAC9B,MAAM;QACR,KAAK,wBAAwB;YAC3B,GAAG,GAAG,eAAe,CAAC,SAAS,CAAC;YAChC,MAAM;QACR,KAAK,mBAAmB;YACtB,GAAG,GAAG,eAAe,CAAC,IAAI,CAAC;YAC3B,MAAM;QACR;YACE,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;KACzD;IACD,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;IAClB,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;AACnC,CAAC;AAED,SAAS,YAAY,CAAC,CAAU,EAAE,CAAS;IACzC,IAAI,CAAC,CAAC,IAAI,KAAK,cAAc,EAAE;QAC7B,CAAC,CAAC,UAAU,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;QACpC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;QACjC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;KACjB;SAAM;QACL,CAAC,CAAC,UAAU,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;QAClC,kBAAkB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;KAC1B;IAED,IAAI,CAAC,CAAC,UAAU,KAAK,SAAS,IAAI,CAAC,CAAC,UAAU,KAAK,EAAE,IAAI,CAAC,CAAC,UAAU,KAAK,SAAS,EAAE;QACnF,MAAM,GAAG,GAAG,IAAI,WAAW,EAAE,CAAC;QAC9B,MAAM,KAAK,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;QACvC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;KACjC;AACH,CAAC;AAED,IAAK,WAIJ;AAJD,WAAK,WAAW;IACd,mDAAW,CAAA;IACX,uDAAa,CAAA;IACb,6CAAQ,CAAA;AACV,CAAC,EAJI,WAAW,KAAX,WAAW,QAIf;AAQD,SAAS,aAAa,CAAC,EAAU;IAC/B,IAAI,EAAU,CAAC;IACf,IAAI,IAAmB,CAAC;IACxB,MAAM,GAAG,GAAG,EAAE,CAAC,SAAS,EAAE,CAAC;IAC3B,QAAQ,GAAG;QACT,KAAK,WAAW,CAAC,OAAO;YACtB,IAAI,GAAG,kBAAkB,CAAC;YAC1B,EAAE,GAAG,EAAE,CAAC;YACR,MAAM;QACR,KAAK,WAAW,CAAC,SAAS;YACxB,IAAI,GAAG,oBAAoB,CAAC;YAC5B,EAAE,GAAG,EAAE,CAAC;YACR,MAAM;QACR,KAAK,WAAW,CAAC,IAAI;YACnB,IAAI,GAAG,eAAe,CAAC;YACvB,EAAE,GAAG,EAAE,CAAC;YACR,MAAM;QACR;YACE,MAAM,IAAI,KAAK,CAAC,2BAA2B,GAAG,EAAE,CAAC,CAAC;KACrD;IACD,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,EAAE,CAAC;AAC/C,CAAC;AAED,SAAS,cAAc,CAAC,EAAa,EAAE,CAAS;IAC9C,IAAI,GAAgB,CAAC;IACrB,QAAQ,EAAE,CAAC,IAAI;QACb,KAAK,kBAAkB;YACrB,GAAG,GAAG,WAAW,CAAC,OAAO,CAAC;YAC1B,MAAM;QACR,KAAK,oBAAoB;YACvB,GAAG,GAAG,WAAW,CAAC,SAAS,CAAC;YAC5B,MAAM;QACR,KAAK,eAAe;YAClB,GAAG,GAAG,WAAW,CAAC,IAAI,CAAC;YACvB,MAAM;QACR;YACE,MAAM,IAAI,KAAK,CAAC,+BAA+B,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC;KAC7D;IACD,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;IAClB,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;AACzC,CAAC;AAID,SAAS,SAAS,CAAC,IAAU,EAAE,EAAU,EAAE,EAAsB;;IAC/D,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;IAE3B,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;QACpB,MAAM,CAAC,GAAG,IAAI,MAAM,EAAE,CAAC;QACvB,KAAK,MAAM,CAAC,IAAI,CAAC,EAAE;YACjB,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;YACtB,IAAI,CAAC,CAAC,IAAI,EAAE;gBACV,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;aAChD;YACD,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC;SAC1B;QACD,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC5B,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;QACzB,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;QACxB,OAAO;KACR;IAED,IAAI,QAAQ,IAAI,CAAC,EAAE;QACjB,MAAM,GAAG,GAAG,IAAI,WAAW,EAAE,CAAC;QAC9B,MAAM,KAAK,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;QACnC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAC1B,EAAE,CAAC,WAAW,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAC7B,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;QACjC,OAAO;KACR;IAED,IAAI,KAAK,IAAI,CAAC,EAAE;QACd,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACvB,IAAI,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QACxB,MAAM,IAAI,GAAG,GAAG,GAAG,CAAC,CAAC;QACrB,IAAI,IAAI,EAAE;YACR,GAAG,GAAG,CAAC,GAAG,CAAC;SACZ;QACD,IAAI,CAAC,GAAG,CAAC,CAAC;QACV,GAAG;YACD,MAAM,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;YAC7C,IAAI,IAAI,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,IAAI,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;YACnD,GAAG,KAAK,IAAI,CAAC;YACb,IAAI,GAAG,EAAE;gBACP,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC;aACtB;YACD,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,EAAE;gBACnB,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC;aACtB;YACD,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;YAC5B,CAAC,EAAE,CAAC;SACL,QAAQ,GAAG,EAAE;QACd,OAAO;KACR;IAED,IAAI,OAAO,IAAI,CAAC,EAAE;QAChB,MAAM,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;QAChC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACzB,EAAE,CAAC,WAAW,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAC7B,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;QACrB,OAAO;KACR;IAED,MAAM,IAAI,GAAG,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IAC9B,IAAI,IAAI,KAAK,SAAS,EAAE;QACtB,MAAM,IAAI,SAAS,CAAC,yBAAyB,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;KACxD;IAED,MAAM,GAAG,GACP,CAAC,OAAA,CAAC,CAAC,IAAI,0CAAE,MAAM,KAAI,CAAC,IAAI,CAAC;UACrB,GAAG,CAAC,KAAK;YACT,CAAC,OAAA,CAAC,CAAC,IAAI,0CAAE,MAAM,KAAI,CAAC,IAAI,CAAC;aACxB,CAAC,CAAC,MAAM,KAAK,SAAS,IAAI,CAAC,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;UACzD,GAAG,CAAC,IAAI,CAAC;IAEf,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;IACnB,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;IAEpB,IAAI,CAAC,CAAC,IAAI,KAAK,SAAS,EAAE;QACxB,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE;YACrB,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE;gBACtB,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;gBACtB,IAAI,CAAC,CAAC,IAAI,EAAE;oBACV,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;iBAChD;gBACD,SAAS,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC;aAC3B;SACF;aAAM;YACL,MAAM,CAAC,GAAG,IAAI,MAAM,EAAE,CAAC;YACvB,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE;gBACtB,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;gBACtB,IAAI,CAAC,CAAC,IAAI,EAAE;oBACV,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;iBAChD;gBACD,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC;aAC1B;YACD,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;YACzB,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;SACzB;KACF;IAED,IAAI,CAAC,CAAC,MAAM,KAAK,SAAS,IAAI,CAAC,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE;QACnD,MAAM,GAAG,GAAG,IAAI,WAAW,EAAE,CAAC;QAC9B,MAAM,KAAK,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;QAC7C,EAAE,CAAC,WAAW,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAC7B,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;KAClC;SAAM,IAAI,CAAC,CAAC,IAAI,KAAK,SAAS,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,EAAE;QACrD,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;KACnB;AACH,CAAC;AAID,SAAS,QAAQ,CAAC,EAAU,EAAE,EAAsB;IAClD,UAAU,WAAW;QACnB,OAAO,IAAI,EAAE;YACX,MAAM,eAAe,CAAC;SACvB;KACF;IACD,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC;IACtB,MAAM,GAAG,GAAG,EAAE,CAAC,SAAS,EAAE,CAAC;IAC3B,QAAQ,GAAG;QACT,KAAK,GAAG,CAAC,GAAG,EAAE;YACZ,MAAM,GAAG,GAAa,EAAE,CAAC;YACzB,IAAI,IAAY,CAAC;YACjB,GAAG;gBACD,IAAI,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC;gBACrB,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;aAChB,QAAQ,CAAC,IAAI,GAAG,IAAI,MAAM,CAAC,EAAE;YAC9B,IAAI,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;YACpB,IAAI,IAAI,GAAG,KAAK,CAAC;YACjB,KAAK,IAAI,CAAC,GAAG,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE;gBACxC,MAAM,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;gBAC7C,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC5B,GAAG,KAAK,IAAI,CAAC;gBACb,GAAG,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,IAAI,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;gBAChD,IAAI,CAAC,KAAK,CAAC,EAAE;oBACX,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;iBAChC;aACF;YACD,IAAI,IAAI,EAAE;gBACR,GAAG,GAAG,CAAC,GAAG,CAAC;aACZ;YACD,OAAO,EAAE,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;SACjC;QAED,KAAK,GAAG,CAAC,MAAM,EAAE;YACf,MAAM,MAAM,GAAG,EAAE,CAAC,UAAU,EAAE,CAAC;YAC/B,MAAM,KAAK,GAAG,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;YACnC,MAAM,GAAG,GAAG,IAAI,WAAW,EAAE,CAAC;YAC9B,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,IAAI,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;SAC1D;QAED,KAAK,GAAG,CAAC,KAAK,EAAE;YACd,MAAM,MAAM,GAAG,EAAE,CAAC,UAAU,EAAE,CAAC;YAC/B,MAAM,KAAK,GAAG,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;YACnC,MAAM,GAAG,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;YACxC,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;SAC3B;QAED,KAAK,GAAG,CAAC,QAAQ,EAAE;YACjB,MAAM,MAAM,GAAG,EAAE,CAAC,UAAU,EAAE,CAAC;YAC/B,IAAI,GAAG,GAAW,EAAE,CAAC;YACrB,IAAI,OAAO,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC;;YAExB,IAAI,EAAE,GAAyC,WAAW,EAAE,CAAC;YAC7D,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;gBAC1B,MAAM,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;gBACjC,GAAG,GAAG,EAAE,CAAC;gBACT,OAAO,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE;oBACnB,MAAM,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC;oBACpB,IAAI,CAAC,CAAC,IAAI,EAAE;wBACV,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;qBAChD;oBACD,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;iBAChC;;gBAED,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;gBACf,OAAO,GAAG,EAAE,CAAC;aACd;YACD,OAAO,EAAE,CAAC,GAAG,CAAC,CAAC;SAChB;QAED,SAAS;YACP,IAAI,GAAG,GAAG,CAAC,EAAE;gBACX,MAAM,IAAI,KAAK,CAAC,gBAAgB,GAAG,EAAE,CAAC,CAAC;aACxC;YACD,MAAM,CAAC,GAAG,EAAE,CAAC,SAAS,EAAE,CAAC;YACzB,IAAI,CAAC,IAAI,UAAU,CAAC,MAAM,EAAE;gBAC1B,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,EAAE,CAAC,CAAC;aAChD;YACD,MAAM,IAAI,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;YAC3B,MAAM,IAAI,GAAG,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC;YAC5B,IAAI,GAAG,GAAS,EAAE,IAAI,EAAE,CAAC;;YAEzB,IAAI,EAAE,GAAyC,WAAW,EAAE,CAAC;YAC7D,IAAI,OAAO,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC;YACxB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;gBAC1B,GAAG,GAAG,EAAE,IAAI,EAAE,CAAC;gBACf,IAAI,IAAI,GAAG,CAAC,EAAE;oBACZ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,EAAE;wBAC7B,MAAM,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC;wBACpB,IAAI,CAAC,CAAC,IAAI,EAAE;4BACV,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;yBAChD;wBACD,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC;wBAC1B,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;qBAC3C;iBACF;qBAAM;oBACL,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC;oBAC1B,MAAM,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;oBACpC,MAAM,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;oBACjC,OAAO,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE;wBACnB,MAAM,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC;wBACpB,IAAI,CAAC,CAAC,IAAI,EAAE;4BACV,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;yBAChD;wBACD,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;qBACrC;iBACF;;gBAED,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;gBACf,OAAO,GAAG,EAAE,CAAC;aACd;YAED,IAAI,CAAC,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,KAAK,CAAC,EAAE;;gBAEvC,MAAM,MAAM,GAAG,EAAE,CAAC,UAAU,EAAE,CAAC;gBAC/B,IAAI,MAAM,KAAK,CAAC,EAAE;oBAChB,MAAM,KAAK,GAAG,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;oBACnC,MAAM,GAAG,GAAG,IAAI,WAAW,EAAE,CAAC;oBAC9B,GAAG,CAAC,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;iBAC3D;aACF;YACD,OAAO,EAAE,CAAC,GAAG,CAAC,CAAC;SAChB;KACF;AACH,CAAC;AAED,MAAM,QAAQ,GAAG,CAAC,CAAO,KACvB,MAAM,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,MAAM,IAAI,CAAC,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC;AAC3D,MAAM,YAAY,GAAG,CAAC,CAAO,KAC3B,MAAM,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,MAAM,IAAI,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC;AAE1D,MAAM,qBAAqB,GAAG,CAAC,CAAgB;IAC7C,IAAI,UAAU,CAAC,CAAC,CAAC,EAAE;QACjB,OAAO,CAAC,CAAO;YACb,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE;gBAClB,MAAM,IAAI,kBAAkB,CAAC,CAAC,EAAE,CAAC,EAAE,kBAAkB,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;aAC3E;YACD,mBAAmB,CAAC,CAAC,CAAC,CAAC;;YAEvB,MAAM,EAAE,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;YACjC,MAAM,EAAE,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;YACjC,OAAO;gBACL,EAAE;gBACF,CAAC;oBACC,KAAK,MAAM,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE;wBACvB,MAAM,qBAAqB,CAAC,CAAC,CAAC,CAAC;qBAChC;iBACF,GAAG;aACL,CAAC;SACH,CAAC;KACH;IAED,QAAQ,CAAC,CAAC,IAAI;QACZ,KAAK,IAAI;YACP,OAAO,CAAC,CAAO;gBACb,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE;oBAChB,MAAM,IAAI,kBAAkB,CAAC,CAAC,EAAE,CAAC,EAAE,gBAAgB,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;iBACzE;gBACD,OAAO;oBACL,CAAC;oBACD,CAAC;wBACC,MAAM,qBAAqB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;qBAChE,GAAG;iBACL,CAAC;aACH,CAAC;QAEJ,KAAK,QAAQ;YACX,OAAO,CAAC,CAAO;gBACb,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE;oBACpB,MAAM,IAAI,kBAAkB,CAAC,CAAC,EAAE,CAAC,EAAE,oBAAoB,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;iBAC7E;gBACD,OAAO;oBACL,CAAC;oBACD,CAAC;wBACC,MAAM,EAAE,GAAG,CAAC,CAAC;wBACb,IAAI,EAAE,CAAC,IAAI,KAAK,MAAM,EAAE;4BACtB,MAAM,qBAAqB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;yBACxC;qBACF,GAAG;iBACL,CAAC;aACH,CAAC;QAEJ,KAAK,MAAM,CAAC;QACZ,KAAK,KAAK;YACR,OAAO,CAAC,CAAO;gBACb,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;oBACrB,MAAM,IAAI,kBAAkB,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,IAAI,cAAc,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;iBAChF;gBACD,OAAO;oBACL,CAAC;oBACD,CAAC;wBACC,KAAK,MAAM,EAAE,IAAI,CAAC,EAAE;4BAClB,MAAM,qBAAqB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;yBACxC;qBACF,GAAG;iBACL,CAAC;aACH,CAAC;QAEJ,KAAK,KAAK;YACR,OAAO,CAAC,CAAO;gBACb,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;oBACrB,MAAM,IAAI,kBAAkB,CAAC,CAAC,EAAE,CAAC,EAAE,iBAAiB,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;iBAC1E;gBACD,OAAO;oBACL,CAAC;oBACD,CAAC;wBACC,KAAK,MAAM,IAAI,IAAI,CAAC,EAAE;4BACpB,MAAM,CAAC,GAAS;gCACd,IAAI,EAAE,MAAM,IAAI,GAAG,CAAC,IAAI,GAAG,CAAC,IAAI,KAAK,KAAK,EAAE;oCAC1C,MAAM,IAAI,kBAAkB,CAC1B,CAAC,EACD,GAAG,EACH,yBAAyB,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAC/C,CAAC;iCACH;gCACD,OAAO;oCACL,GAAG;oCACH,CAAC;wCACC,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE;4CACtB,MAAM,qBAAqB,CAAC,CAAC,CAAC,CAAC;yCAChC;qCACF,GAAG;iCACL,CAAC;6BACH,CAAC;yBACH;qBACF,GAAG;iBACL,CAAC;aACH,CAAC;QAEJ,KAAK,UAAU;YACb,OAAO,CAAC,CAAO;gBACb,IAAI,EAAE,OAAO,IAAI,CAAC,CAAC,IAAI,EAAE,QAAQ,IAAI,CAAC,CAAC,EAAE;oBACvC,MAAM,IAAI,kBAAkB,CAAC,CAAC,EAAE,CAAC,EAAE,sBAAsB,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;iBAC/E;gBACD,IAAI,KAAmB,CAAC;gBACxB,IAAI,QAAQ,IAAI,CAAC,EAAE;oBACjB,MAAM,EAAE,GAAG,kBAAkB,CAAC,CAAC,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;oBACnD,IAAI,EAAE,KAAK,IAAI,EAAE;wBACf,MAAM,IAAI,kBAAkB,CAAC,CAAC,EAAE,CAAC,EAAE,6BAA6B,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;qBAC7E;oBACD,KAAK,GAAG,EAAE,KAAK,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;iBACpC;qBAAM;oBACL,KAAK,GAAG,CAAC,CAAC;iBACX;gBACD,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;aACvC,CAAC;QAEJ,KAAK,WAAW;YACd,OAAO,CAAC,CAAO;gBACb,IAAI,EAAE,OAAO,IAAI,CAAC,CAAC,IAAI,EAAE,QAAQ,IAAI,CAAC,CAAC,EAAE;oBACvC,MAAM,IAAI,kBAAkB,CAAC,CAAC,EAAE,CAAC,EAAE,uBAAuB,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;iBAChF;gBACD,IAAI,KAAmB,CAAC;gBACxB,IAAI,QAAQ,IAAI,CAAC,EAAE;oBACjB,MAAM,GAAG,GAAG,kBAAkB,CAC5B,CAAC,CAAC,MAAM,EACR,kBAAkB,EAClB,oBAAoB,EACpB,eAAe,EACf,kBAAkB,CACnB,CAAC;oBACF,IAAI,GAAG,KAAK,IAAI,EAAE;wBAChB,MAAM,IAAI,kBAAkB,CAAC,CAAC,EAAE,CAAC,EAAE,8BAA8B,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;qBAC9E;oBACD,KAAK,GAAG,EAAE,KAAK,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;iBACrC;qBAAM;oBACL,KAAK,GAAG,CAAC,CAAC;iBACX;gBACD,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;aACvC,CAAC;QAEJ,KAAK,UAAU;YACb,OAAO,CAAC,CAAO;gBACb,IAAI,EAAE,OAAO,IAAI,CAAC,CAAC,IAAI,EAAE,QAAQ,IAAI,CAAC,CAAC,EAAE;oBACvC,MAAM,IAAI,kBAAkB,CAAC,CAAC,EAAE,CAAC,EAAE,sBAAsB,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;iBAC/E;gBACD,IAAI,KAAmB,CAAC;gBACxB,IAAI,QAAQ,IAAI,CAAC,EAAE;oBACjB,MAAM,GAAG,GAAG,kBAAkB,CAC5B,CAAC,CAAC,MAAM,EACR,sBAAsB,EACtB,wBAAwB,EACxB,mBAAmB,CACpB,CAAC;oBACF,IAAI,GAAG,KAAK,IAAI,EAAE;wBAChB,MAAM,IAAI,kBAAkB,CAAC,CAAC,EAAE,CAAC,EAAE,6BAA6B,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;qBAC7E;oBACD,MAAM,CAAC,GAAG,IAAI,MAAM,EAAE,CAAC;oBACvB,kBAAkB,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;oBACtD,KAAK,GAAG,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC;iBACvC;qBAAM;oBACL,KAAK,GAAG,CAAC,CAAC;iBACX;gBACD,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;aACvC,CAAC;QAEJ,KAAK,KAAK;YACR,OAAO,CAAC,CAAO;gBACb,IAAI,EAAE,OAAO,IAAI,CAAC,CAAC,IAAI,EAAE,QAAQ,IAAI,CAAC,CAAC,EAAE;oBACvC,MAAM,IAAI,kBAAkB,CAAC,CAAC,EAAE,CAAC,EAAE,wBAAwB,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;iBACjF;gBACD,IAAI,KAAmB,CAAC;gBACxB,IAAI,QAAQ,IAAI,CAAC,EAAE;oBACjB,MAAM,GAAG,GAAG,kBAAkB,CAC5B,CAAC,CAAC,MAAM,EACR,kBAAkB,EAClB,oBAAoB,EACpB,eAAe,CAChB,CAAC;oBACF,IAAI,GAAG,KAAK,IAAI,EAAE;wBAChB,MAAM,IAAI,kBAAkB,CAAC,CAAC,EAAE,CAAC,EAAE,+BAA+B,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;qBAC/E;oBACD,MAAM,CAAC,GAAG,IAAI,MAAM,EAAE,CAAC;oBACvB,cAAc,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;oBACvD,KAAK,GAAG,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC;iBACvC;qBAAM;oBACL,KAAK,GAAG,CAAC,CAAC;iBACX;gBACD,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;aACvC,CAAC;QAEJ,KAAK,SAAS;YACZ,OAAO,CAAC,CAAO;gBACb,IAAI,EAAE,OAAO,IAAI,CAAC,CAAC,IAAI,EAAE,QAAQ,IAAI,CAAC,CAAC,EAAE;oBACvC,MAAM,IAAI,kBAAkB,CAAC,CAAC,EAAE,CAAC,EAAE,qBAAqB,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;iBAC9E;gBACD,IAAI,KAAmB,CAAC;gBACxB,IAAI,QAAQ,IAAI,CAAC,EAAE;oBACjB,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;oBAC9B,MAAM,OAAO,GAAG,kBAAkB,CAChC,CAAC,CAAC,CAAC,CAAC,EACJ,sBAAsB,EACtB,wBAAwB,EACxB,mBAAmB,EACnB,cAAc,CACf,CAAC;oBACF,IAAI,OAAO,KAAK,IAAI,EAAE;wBACpB,MAAM,IAAI,kBAAkB,CAAC,CAAC,EAAE,CAAC,EAAE,4BAA4B,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;qBAC5E;oBACD,MAAM,CAAC,GAAG,IAAI,MAAM,EAAE,CAAC;oBACvB,YAAY,CACV,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,SAAS,EAAE,EACnF,CAAC,CACF,CAAC;oBACF,KAAK,GAAG,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC;iBACvC;qBAAM;oBACL,KAAK,GAAG,CAAC,CAAC;iBACX;gBACD,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;aACvC,CAAC;QAEJ,KAAK,WAAW;YACd,OAAO,CAAC,CAAO;gBACb,IAAI,EAAE,QAAQ,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,IAAI,CAAC,CAAC,EAAE;oBACrC,MAAM,IAAI,kBAAkB,CAAC,CAAC,EAAE,CAAC,EAAE,uBAAuB,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;iBAChF;gBACD,IAAI,GAAe,CAAC;gBACpB,IAAI,QAAQ,IAAI,CAAC,EAAE;oBACjB,MAAM,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;oBACvB,IAAI,CAAC,KAAK,IAAI,EAAE;wBACd,MAAM,IAAI,kBAAkB,CAAC,CAAC,EAAE,CAAC,EAAE,qBAAqB,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;qBACrE;oBACD,GAAG,GAAG,EAAE,GAAG,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC;iBACvD;qBAAM;oBACL,GAAG,GAAG,CAAC,CAAC;iBACT;gBACD,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;aACrC,CAAC;QAEJ;YACE,OAAO,gBAAgB,CAAC;KAC3B;AACH,CAAC,CAAC;AAGF,MAAM,iBAAiB,GAAG,CAAC,CAAO,KAA2B,MAAM,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC;AAE9F,MAAM,gBAAgB,GAAuB,CAAC,CAAO;IACnD,IAAI,iBAAiB,CAAC,CAAC,CAAC,EAAE;QACxB,0BAA0B,CAAC,CAAC,CAAC,CAAC;;QAE9B,OAAO;YACL,CAAC;YACD,CAAC;gBACC,MAAM,gBAAgB,CAAC;gBACvB,MAAM,qBAAqB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;aACxC,GAAG;SACL,CAAC;KACH;IAED,OAAO;QACL,CAAC;QACD,CAAC;YACC,OAAO,IAAI,EAAE;gBACX,MAAM,gBAAgB,CAAC;aACxB;SACF,GAAG;KACL,CAAC;AACJ,CAAC,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;SAmCgB,QAAQ,CAAC,CAAgB,EAAE,CAAiB;IAC1D,MAAM,CAAC,GAAG,IAAI,MAAM,EAAE,CAAC;IACvB,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;IAChB,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,SAAS,GAAG,qBAAqB,CAAC,CAAC,CAAC,GAAG,gBAAgB,CAAC,CAAC;IAC/E,OAAO,CAAC,CAAC,MAAM,CAAC;AAClB,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;SAsBgB,aAAa,CAAC,CAAgB,EAAE,CAAiB;IAC/D,OAAO,EAAE,KAAK,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;AAC7C,CAAC;AAED,MAAM,qBAAqB,GAAG,CAAC,CAAgB;IAC7C,IAAI,UAAU,CAAC,CAAC,CAAC,EAAE;QACjB,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;QAC3C,OAAO;YACL,CAAC,CAAO;gBACN,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE;oBAClB,MAAM,IAAI,kBAAkB,CAAC,CAAC,EAAE,CAAC,EAAE,kBAAkB,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;iBAC3E;gBACD,OAAO,CAAC;oBACN,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE;wBACpB,MAAM,qBAAqB,CAAC,CAAC,CAAC,CAAC;qBAChC;iBACF,GAAG,CAAC;aACN;YACD,CAAC,CAAO,KAAK,CAAC;SACf,CAAC;KACH;IAED,QAAQ,CAAC,CAAC,IAAI;QACZ,KAAK,IAAI;YACP,OAAO;gBACL,CAAC,CAAO;oBACN,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE;wBAChB,MAAM,IAAI,kBAAkB,CAAC,CAAC,EAAE,CAAC,EAAE,gBAAgB,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;qBACzE;oBACD,OAAO,CAAC;wBACN,MAAM,qBAAqB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;qBAChE,GAAG,CAAC;iBACN;gBACD,CAAC,CAAO,KAAK,CAAC;aACf,CAAC;QAEJ,KAAK,QAAQ;YACX,OAAO;gBACL,CAAC,CAAO;oBACN,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE;wBACpB,MAAM,IAAI,kBAAkB,CAAC,CAAC,EAAE,CAAC,EAAE,oBAAoB,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;qBAC7E;oBACD,OAAO,CAAC;wBACN,IAAI,CAAC,CAAC,IAAI,KAAK,MAAM,EAAE;4BACrB,MAAM,qBAAqB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;yBACxC;qBACF,GAAG,CAAC;iBACN;gBACD,CAAC,CAAO,KAAK,CAAC;aACf,CAAC;QAEJ,KAAK,MAAM,CAAC;QACZ,KAAK,KAAK;YACR,OAAO;gBACL,CAAC,CAAO;oBACN,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;wBACrB,MAAM,IAAI,kBAAkB,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,IAAI,cAAc,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;qBAChF;oBACD,OAAO,CAAC;wBACN,OAAO,IAAI,EAAE;4BACX,MAAM,qBAAqB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;yBACxC;qBACF,GAAG,CAAC;iBACN;gBACD,CAAC,CAAO,KAAK,CAAC;aACf,CAAC;QAEJ,KAAK,KAAK;YACR,OAAO;gBACL,CAAC,CAAO;oBACN,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;wBACrB,MAAM,IAAI,kBAAkB,CAAC,CAAC,EAAE,CAAC,EAAE,iBAAiB,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;qBAC1E;oBACD,OAAO,CAAC;wBACN,OAAO,IAAI,EAAE;4BACX,MAAM;gCACJ,CAAC,GAAS;oCACR,IAAI,EAAE,MAAM,IAAI,GAAG,CAAC,IAAI,GAAG,CAAC,IAAI,KAAK,KAAK,EAAE;wCAC1C,MAAM,IAAI,kBAAkB,CAC1B,CAAC,EACD,GAAG,EACH,yBAAyB,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAC/C,CAAC;qCACH;oCACD,OAAO,CAAC;wCACN,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE;4CACtB,MAAM,qBAAqB,CAAC,CAAC,CAAC,CAAC;yCAChC;qCACF,GAAG,CAAC;iCACN;gCACD,CAAC,GAAS,KAAK,GAAG;6BACnB,CAAC;yBACH;qBACF,GAAG,CAAC;iBACN;gBACD,CAAC,CAAO,KAAK,CAAC;aACf,CAAC;QAEJ,KAAK,UAAU;YACb,OAAO;gBACL,MAAM,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE;gBAC3B,CAAC,CAAO;oBACN,IAAI,EAAE,OAAO,IAAI,CAAC,CAAC,IAAI,EAAE,QAAQ,IAAI,CAAC,CAAC,EAAE;wBACvC,MAAM,IAAI,kBAAkB,CAAC,CAAC,EAAE,CAAC,EAAE,sBAAsB,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;qBAC/E;oBACD,IAAI,QAAQ,IAAI,CAAC,EAAE;wBACjB,OAAO,CAAC,CAAC;qBACV;oBACD,MAAM,KAAK,GAAG,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;oBAClC,IAAI,KAAK,KAAK,IAAI,EAAE;wBAClB,MAAM,IAAI,kBAAkB,CAAC,CAAC,EAAE,CAAC,EAAE,sBAAsB,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;qBACrE;oBACD,OAAO,EAAE,MAAM,EAAE,aAAa,CAAC,SAAS,EAAE,KAAK,CAAC,EAAE,CAAC;iBACpD;aACF,CAAC;QAEJ,KAAK,WAAW;YACd,OAAO;gBACL,MAAM,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE;gBAC3B,CAAC,CAAO;oBACN,IAAI,EAAE,OAAO,IAAI,CAAC,CAAC,IAAI,EAAE,QAAQ,IAAI,CAAC,CAAC,EAAE;wBACvC,MAAM,IAAI,kBAAkB,CAAC,CAAC,EAAE,CAAC,EAAE,uBAAuB,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;qBAChF;oBACD,IAAI,QAAQ,IAAI,CAAC,EAAE;wBACjB,OAAO,CAAC,CAAC;qBACV;oBACD,MAAM,KAAK,GAAG,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;oBAClC,IAAI,KAAK,KAAK,IAAI,EAAE;wBAClB,MAAM,IAAI,kBAAkB,CAAC,CAAC,EAAE,CAAC,EAAE,sBAAsB,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;qBACrE;oBACD,OAAO,EAAE,MAAM,EAAE,aAAa,CAAC,kBAAkB,EAAE,KAAK,CAAC,EAAE,CAAC;iBAC7D;aACF,CAAC;QAEJ,KAAK,UAAU;YACb,OAAO;gBACL,MAAM,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE;gBAC3B,CAAC,CAAO;oBACN,IAAI,EAAE,OAAO,IAAI,CAAC,CAAC,IAAI,EAAE,QAAQ,IAAI,CAAC,CAAC,EAAE;wBACvC,MAAM,IAAI,kBAAkB,CAAC,CAAC,EAAE,CAAC,EAAE,sBAAsB,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;qBAC/E;oBACD,IAAI,QAAQ,IAAI,CAAC,EAAE;wBACjB,OAAO,CAAC,CAAC;qBACV;oBACD,MAAM,KAAK,GAAG,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;oBAClC,IAAI,KAAK,KAAK,IAAI,EAAE;wBAClB,MAAM,IAAI,kBAAkB,CAAC,CAAC,EAAE,CAAC,EAAE,sBAAsB,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;qBACrE;oBACD,MAAM,EAAE,GAAG,IAAI,MAAM,CAAC,IAAI,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC;oBAC7C,MAAM,IAAI,GAAG,iBAAiB,CAAC,EAAE,CAAC,CAAC;oBACnC,OAAO;wBACL,MAAM,EACJ,aAAa,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,UAAU,GAAG,GAAG,GAAG,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;qBACvF,CAAC;iBACH;aACF,CAAC;QAEJ,KAAK,KAAK;YACR,OAAO;gBACL,MAAM,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE;gBAC3B,CAAC,CAAO;oBACN,IAAI,EAAE,OAAO,IAAI,CAAC,CAAC,IAAI,EAAE,QAAQ,IAAI,CAAC,CAAC,EAAE;wBACvC,MAAM,IAAI,kBAAkB,CAAC,CAAC,EAAE,CAAC,EAAE,wBAAwB,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;qBACjF;oBACD,IAAI,QAAQ,IAAI,CAAC,EAAE;wBACjB,OAAO,CAAC,CAAC;qBACV;oBACD,MAAM,KAAK,GAAG,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;oBAClC,IAAI,KAAK,KAAK,IAAI,EAAE;wBAClB,MAAM,IAAI,kBAAkB,CAAC,CAAC,EAAE,CAAC,EAAE,sBAAsB,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;qBACrE;oBACD,MAAM,EAAE,GAAG,IAAI,MAAM,CAAC,IAAI,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC;oBAC7C,MAAM,EAAE,GAAG,aAAa,CAAC,EAAE,CAAC,CAAC;oBAC7B,OAAO,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC;iBACzD;aACF,CAAC;QAEJ,KAAK,SAAS;YACZ,OAAO;gBACL,MAAM,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE;gBAC3B,CAAC,CAAO;oBACN,IAAI,EAAE,OAAO,IAAI,CAAC,CAAC,IAAI,EAAE,QAAQ,IAAI,CAAC,CAAC,EAAE;wBACvC,MAAM,IAAI,kBAAkB,CAAC,CAAC,EAAE,CAAC,EAAE,qBAAqB,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;qBAC9E;oBACD,IAAI,QAAQ,IAAI,CAAC,EAAE;wBACjB,OAAO,CAAC,CAAC;qBACV;oBACD,MAAM,KAAK,GAAG,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;oBAClC,IAAI,KAAK,KAAK,IAAI,EAAE;wBAClB,MAAM,IAAI,kBAAkB,CAAC,CAAC,EAAE,CAAC,EAAE,sBAAsB,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;qBACrE;oBACD,MAAM,EAAE,GAAG,IAAI,MAAM,CAAC,IAAI,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC;oBAC7C,MAAM,IAAI,GAAG,WAAW,CAAC,EAAE,CAAC,CAAC;oBAC7B,OAAO;wBACL,MAAM,EACJ,aAAa,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,UAAU,GAAG,GAAG,GAAG,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;qBACvF,CAAC;iBACH;aACF,CAAC;QAEJ,KAAK,WAAW;YACd,OAAO;gBACL,MAAM,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE;gBAC3B,CAAC,CAAO;oBACN,IAAI,EAAE,KAAK,IAAI,CAAC,CAAC,IAAI,EAAE,QAAQ,IAAI,CAAC,CAAC,EAAE;wBACrC,MAAM,IAAI,kBAAkB,CAAC,CAAC,EAAE,CAAC,EAAE,qBAAqB,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;qBAC9E;oBACD,IAAI,QAAQ,IAAI,CAAC,EAAE;wBACjB,OAAO,CAAC,CAAC;qBACV;oBACD,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC;oBAClD,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC;iBAC1D;aACF,CAAC;QAEJ;YACE,OAAO,eAAe,CAAC;KAC1B;AACH,CAAC,CAAC;AAEF,MAAM,eAAe,GAAuB;IAC1C,CAAC,CAAO;QACN,IAAI,iBAAiB,CAAC,CAAC,CAAC,EAAE;YACxB,0BAA0B,CAAC,CAAC,CAAC,CAAC;;YAE9B,OAAO,CAAC;gBACN,MAAM,eAAe,CAAC;gBACtB,MAAM,qBAAqB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;aACxC,GAAG,CAAC;SACN;QAED,OAAO,CAAC;YACN,OAAO,IAAI,EAAE;gBACX,MAAM,eAAe,CAAC;aACvB;SACF,GAAG,CAAC;KACN;IACD,CAAC,CAAO,KAAK,CAAC;CACf,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;SA8BgB,UAAU,CAAC,GAA0B,EAAE,CAAiB;IACtE,MAAM,CAAC,GAAG,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC;IAC1B,IAAI,CAAC,CAAC,SAAS,EAAE,KAAK,CAAC,EAAE;QACvB,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;KACvD;IACD,MAAM,EAAE,GAAG,QAAQ,CAAC,CAAC,EAAE,CAAC,KAAK,SAAS,GAAG,qBAAqB,CAAC,CAAC,CAAC,GAAG,eAAe,CAAC,CAAC;IACrF,IAAI,mBAAmB,CAAC,EAAE,CAAC,EAAE;QAC3B,OAAO,EAAE,CAAC;KACX;IACD,MAAM,IAAI,KAAK,EAAE,CAAC;AACpB,CAAC;AAED;;;;;;;;;;;;;;;;;;;SAmBgB,eAAe,CAAC,GAAiB,EAAE,CAAiB;IAClE,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACpC,IAAI,KAAK,KAAK,IAAI,EAAE;QAClB,MAAM,IAAI,KAAK,CAAC,uBAAuB,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC;KACtD;IACD,OAAO,UAAU,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;AAC9B,CAAC;AAED;SAEgB,kBAAkB,CAAC,CAAe;IAChD,MAAM,KAAK,GAAG,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IAClC,IAAI,KAAK,KAAK,IAAI,EAAE;QAClB,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC;KACpD;IACD,MAAM,EAAE,GAAG,IAAI,MAAM,CAAC,IAAI,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC;IAC7C,OAAO,WAAW,CAAC,EAAE,CAAC,CAAC;AACzB,CAAC;SAEe,wBAAwB,CAAC,CAAe;IACtD,MAAM,KAAK,GAAG,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IAClC,IAAI,KAAK,KAAK,IAAI,EAAE;QAClB,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC;KACpD;IACD,MAAM,EAAE,GAAG,IAAI,MAAM,CAAC,IAAI,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC;IAC7C,OAAO,iBAAiB,CAAC,EAAE,CAAC,CAAC;AAC/B,CAAC;SAEe,oBAAoB,CAAC,CAAe;IAClD,MAAM,KAAK,GAAG,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IAClC,IAAI,KAAK,KAAK,IAAI,EAAE;QAClB,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC;KACpD;IACD,MAAM,EAAE,GAAG,IAAI,MAAM,CAAC,IAAI,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC;IAC7C,OAAO,aAAa,CAAC,EAAE,CAAC,CAAC;AAC3B;;MCz0Ca,yBAA0B,SAAQ,cAA6B;;;;;;IAM1E,YAAY,GAAkB,EAAS,UAA+B,EAAE,OAAgB;QACtF,KAAK,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;QADiB,eAAU,GAAV,UAAU,CAAqB;QAEpE,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,yBAAyB,CAAC,SAAS,CAAC,CAAC;KAClE;CACF;AAED;AACA,SAAS,MAAM,CAAC,CAAgB;IAC9B,OAAO,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC;AAC5C,CAAC;AAGD,SAAS,QAAQ,CAA0B,CAAI;IAC7C,QAAQ,MAAM,IAAI,CAAC,GAAI,CAAkC,CAAC,IAAI,GAAG,CAAC,EAAiB;AACrF,CAAC;AAED,SAAS,sBAAsB,CAAC,CAAgB,EAAE,CAAgB,EAAE,KAAK,GAAG,KAAK;IAC/E,IAAI,MAAM,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,CAAC,EAAE;QAC3B,MAAM,IAAI,kBAAkB,CAAC,CAAC,EAAE,SAAS,EAAE,mBAAmB,MAAM,CAAC,CAAC,CAAC,OAAO,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;KAC5F;IAED,MAAM,GAAG,GAAG,CAAC,iBAAiB,CAAC,CAAC,CAAC,EAAE,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC;IACzD,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE;QACvD,MAAM,IAAI,kBAAkB,CAC1B,CAAC,EACD,SAAS,EACT,GAAG,MAAM,CAAC,CAAC,CAAC,0BAA0B,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CACtE,CAAC;KACH;IACD,IAAI,KAAK,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE;QAChE,MAAM,IAAI,kBAAkB,CAC1B,CAAC,EACD,SAAS,EACT,GAAG,MAAM,CAAC,CAAC,CAAC,2BAA2B,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CACpE,CAAC;KACH;IAED,IAAI,UAAU,CAAC,CAAC,CAAC,EAAE;QACjB,MAAM,KAAK,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QACpC,MAAM,KAAK,GAAG,UAAU,CAAC,MAAM,EAAE,CAAa,CAAC,CAAC;QAChD,sBAAsB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;QAC3D,sBAAsB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;QAC3D,OAAO;KACR;IAED,QAAQ,CAAC,CAAC,IAAI;QACZ,KAAK,QAAQ,CAAC;QACd,KAAK,MAAM,CAAC;QACZ,KAAK,UAAU,CAAC;QAChB,KAAK,KAAK,CAAC;QACX,KAAK,QAAQ;YACX,sBAAsB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAG,CAAc,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;YAC3D,MAAM;QAER,KAAK,IAAI;YACP,sBAAsB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAG,CAAc,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;YACjE,sBAAsB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAG,CAAc,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;YACjE,MAAM;QAER,KAAK,QAAQ,CAAC;QACd,KAAK,KAAK,CAAC;QACX,KAAK,SAAS;YACZ,sBAAsB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAG,CAAc,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;YAC3D,sBAAsB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAG,CAAc,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;YAC3D,MAAM;QAER,KAAK,eAAe,CAAC;QACrB,KAAK,qBAAqB;YACxB,IAAI,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,KAAK,QAAQ,CAAE,CAAc,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE;gBAC7E,MAAM,IAAI,kBAAkB,CAC1B,CAAC,EACD,SAAS,EACT,GAAG,MAAM,CAAC,CAAC,CAAC,6BAA6B,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,OAAQ,CAAc,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAC3F,CAAC;aACH;KACJ;AACH,CAAC;AAED,SAAS,iBAAiB,CAA4C,CAAK,EAAE,CAAK;IAChF,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM,EAAE;QACzB,MAAM,IAAI,kBAAkB,CAAC,CAAC,EAAE,SAAS,EAAE,0BAA0B,CAAC,CAAC,MAAM,OAAO,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;KACjG;IACD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;QACjC,sBAAsB,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;KACpC;AACH,CAAC;SAEe,0BAA0B,CAAC,CAAgB,EAAE,KAAK,GAAG,KAAK;;IACxE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;QACrB,MAAM,GAAG,GAAG,iBAAiB,CAAC,CAAC,CAAC,CAAC;QACjC,IAAI,CAAC,OAAA,GAAG,CAAC,CAAC,0CAAE,MAAM,KAAI,CAAC,IAAI,CAAC,EAAE;YAC5B,MAAM,IAAI,kBAAkB,CAC1B,CAAC,EACD,SAAS,EACT,GAAG,CAAC,CAAC,IAAI,0CAA0C,CAAC,CAAC,MAAM,EAAE,CAC9D,CAAC;SACH;QAED,IAAI,KAAK,EAAE;YACT,IAAI,CAAC,OAAA,GAAG,CAAC,CAAC,0CAAE,MAAM,KAAI,CAAC,IAAI,CAAC,EAAE;gBAC5B,MAAM,IAAI,kBAAkB,CAC1B,CAAC,EACD,SAAS,EACT,GAAG,CAAC,CAAC,IAAI,2CAA2C,CAAC,CAAC,MAAM,EAAE,CAC/D,CAAC;aACH;SACF;aAAM;YACL,IAAI,CAAC,OAAA,GAAG,CAAC,CAAC,0CAAE,MAAM,KAAI,CAAC,IAAI,CAAC,EAAE;gBAC5B,MAAM,IAAI,kBAAkB,CAC1B,CAAC,EACD,SAAS,EACT,GAAG,CAAC,CAAC,IAAI,uCAAuC,CAAC,CAAC,MAAM,EAAE,CAC3D,CAAC;aACH;SACF;KACF;IAED,IAAI,UAAU,CAAC,CAAC,CAAC,EAAE;QACjB,MAAM,IAAI,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;QACzB,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE;YACpB,0BAA0B,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;SACrC;QACD,OAAO;KACR;IAED,QAAQ,CAAC,CAAC,IAAI;QACZ,KAAK,QAAQ,CAAC;QACd,KAAK,MAAM,CAAC;QACZ,KAAK,UAAU,CAAC;QAChB,KAAK,KAAK;YACR,0BAA0B,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;YACtC,MAAM;QAER,KAAK,IAAI;YACP,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE;gBACtB,0BAA0B,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;aACrC;YACD,MAAM;QAER,KAAK,QAAQ,CAAC;QACd,KAAK,KAAK,CAAC;QACX,KAAK,SAAS;YACZ,0BAA0B,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;YACtC,0BAA0B,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;KACzC;AACH,CAAC;AA+FD;AACA,SAAS,UAAU,CAAC,CAAgB;IAClC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;QACrB,OAAO,KAAK,CAAC;KACd;IACD,KAAK,MAAM,CAAC,IAAI,CAAC,EAAE;QACjB,IAAI,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,UAAU,CAAC,CAAC,CAAC,MAAM,MAAM,IAAI,CAAC,IAAI,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE;YAC/E,OAAO,KAAK,CAAC;SACd;KACF;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,uBAAuB,CAAC,CAAgB,EAAE,CAAgB,EAAE,GAAmB;IACtF,IAAI,UAAU,CAAC,CAAC,CAAC,EAAE;QACjB,IAAI,UAAU,CAAC,CAAC,CAAC,EAAE;YACjB,mBAAmB,CAAC,CAAC,CAAC,CAAC;YACvB,MAAM,EAAE,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;YACjC,MAAM,EAAE,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;YACjC,uBAAuB,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;YACrD,uBAAuB,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;YACrD,OAAO;SACR;QACD,MAAM,IAAI,kBAAkB,CAAC,CAAC,EAAE,CAAC,EAAE,kBAAkB,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;KAC3E;IAED,QAAQ,CAAC,CAAC,IAAI;;QAEZ,KAAK,KAAK;YACR,IAAI,KAAK,IAAI,CAAC,IAAI,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE;gBAClC,OAAO;aACR;YACD,MAAM,IAAI,kBAAkB,CAAC,CAAC,EAAE,CAAC,EAAE,2BAA2B,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAErF,KAAK,KAAK,CAAC;QACX,KAAK,OAAO;YACV,IAAI,KAAK,IAAI,CAAC,IAAI,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE;gBAClC,OAAO;aACR;YACD,MAAM,IAAI,kBAAkB,CAAC,CAAC,EAAE,CAAC,EAAE,2BAA2B,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAErF,KAAK,QAAQ;YACX,IAAI,QAAQ,IAAI,CAAC,EAAE;gBACjB,OAAO;aACR;YACD,MAAM,IAAI,kBAAkB,CAAC,CAAC,EAAE,CAAC,EAAE,0BAA0B,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAEpF,KAAK,OAAO,CAAC;QACb,KAAK,cAAc,CAAC;QACpB,KAAK,cAAc;YACjB,IAAI,OAAO,IAAI,CAAC,IAAI,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,IAAI,EAAE;gBAChD,OAAO;aACR;YACD,MAAM,IAAI,kBAAkB,CAAC,CAAC,EAAE,CAAC,EAAE,yBAAyB,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAEnF,KAAK,MAAM;YACT,IAAI,MAAM,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,MAAM,IAAI,CAAC,CAAC,IAAI,KAAK,OAAO,CAAC,EAAE;gBAC5D,OAAO;aACR;YACD,MAAM,IAAI,kBAAkB,CAAC,CAAC,EAAE,CAAC,EAAE,2BAA2B,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAErF,KAAK,UAAU;YACb,IACE,QAAQ,IAAI,CAAC;gBACb,kBAAkB,CAChB,CAAC,CAAC,MAAM,EACR,sBAAsB,EACtB,wBAAwB,EACxB,mBAAmB,CACpB,KAAK,IAAI,EACV;gBACA,OAAO;aACR;iBAAM,IAAI,OAAO,IAAI,CAAC,EAAE;gBACvB,IAAI;oBACF,wBAAwB,CAAC,CAAC,CAAC,CAAC;oBAC5B,OAAO;iBACR;gBAAC,OAAO,GAAG,EAAE;;iBAEb;aACF;YACD,MAAM,IAAI,kBAAkB,CAAC,CAAC,EAAE,CAAC,EAAE,sBAAsB,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAEhF,KAAK,WAAW;YACd,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE;gBAC1D,OAAO;aACR;YACD,MAAM,IAAI,kBAAkB,CAAC,CAAC,EAAE,CAAC,EAAE,uBAAuB,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAEjF,KAAK,SAAS;YACZ,IAAI,QAAQ,IAAI,CAAC,EAAE;gBACjB,IAAI,OAAO,GAAG,CAAC,CAAC,MAAM,CAAC;gBACvB,MAAM,EAAE,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;gBACjC,IAAI,EAAE,IAAI,CAAC,EAAE;;oBAEX,OAAO,GAAG,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;iBACjC;gBACD,IACE,kBAAkB,CAChB,OAAO,EACP,sBAAsB,EACtB,wBAAwB,EACxB,mBAAmB,EACnB,cAAc,CACf,KAAK,IAAI,EACV;oBACA,OAAO;iBACR;aACF;iBAAM,IAAI,OAAO,IAAI,CAAC,EAAE;gBACvB,IAAI;oBACF,kBAAkB,CAAC,CAAC,CAAC,CAAC;oBACtB,OAAO;iBACR;gBAAC,OAAO,GAAG,EAAE;;iBAEb;aACF;YACD,MAAM,IAAI,kBAAkB,CAAC,CAAC,EAAE,CAAC,EAAE,qBAAqB,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAE/E,KAAK,KAAK;YACR,IACE,QAAQ,IAAI,CAAC;gBACb,kBAAkB,CAAC,CAAC,CAAC,MAAM,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,eAAe,CAAC;oBACrF,IAAI,EACN;gBACA,OAAO;aACR;iBAAM,IAAI,OAAO,IAAI,CAAC,EAAE;gBACvB,IAAI;oBACF,oBAAoB,CAAC,CAAC,CAAC,CAAC;oBACxB,OAAO;iBACR;gBAAC,OAAO,GAAG,EAAE;;iBAEb;aACF;YACD,MAAM,IAAI,kBAAkB,CAAC,CAAC,EAAE,CAAC,EAAE,wBAAwB,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAElF,KAAK,MAAM;YACT,IAAI,MAAM,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,MAAM,EAAE;gBACpC,OAAO;aACR;YACD,MAAM,IAAI,kBAAkB,CAAC,CAAC,EAAE,CAAC,EAAE,wBAAwB,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAElF,KAAK,WAAW;YACd,IACE,OAAO,IAAI,CAAC;iBACX,QAAQ,IAAI,CAAC;oBACZ,kBAAkB,CAChB,CAAC,CAAC,MAAM,EACR,kBAAkB,EAClB,oBAAoB,EACpB,eAAe,EACf,kBAAkB,CACnB,KAAK,IAAI,CAAC,EACb;gBACA,OAAO;aACR;YACD,MAAM,IAAI,kBAAkB,CAAC,CAAC,EAAE,CAAC,EAAE,uBAAuB,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAEjF,KAAK,UAAU;YACb,IAAI,OAAO,IAAI,CAAC,IAAI,QAAQ,IAAI,CAAC,EAAE;gBACjC,MAAM,CAAC,GAAG,QAAQ,IAAI,CAAC,GAAG,iBAAiB,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;gBAC5E,IAAI,CAAC,KAAK,IAAI,EAAE;oBACd,OAAO;iBACR;aACF;YACD,MAAM,IAAI,kBAAkB,CAAC,CAAC,EAAE,CAAC,EAAE,sBAAsB,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;;QAGhF,KAAK,QAAQ;YACX,IAAI,MAAM,IAAI,CAAC,EAAE;gBACf,IAAI,CAAC,CAAC,IAAI,KAAK,MAAM,EAAE;oBACrB,OAAO;iBACR;qBAAM,IAAI,CAAC,CAAC,IAAI,KAAK,MAAM,EAAE;oBAC5B,uBAAuB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;oBACnD,OAAO;iBACR;aACF;YACD,MAAM,IAAI,kBAAkB,CAAC,CAAC,EAAE,CAAC,EAAE,oBAAoB,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAE9E,KAAK,MAAM,CAAC;QACZ,KAAK,KAAK;YACR,IAAI,mBAAmB,CAAC,CAAC,CAAC,EAAE;;gBAE1B,KAAK,MAAM,CAAC,IAAI,CAAC,EAAE;oBACjB,uBAAuB,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;iBAC5C;gBACD,OAAO;aACR;YACD,MAAM,IAAI,kBAAkB,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,IAAI,cAAc,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAEjF,KAAK,IAAI;YACP,IAAI,MAAM,IAAI,CAAC,EAAE;gBACf,IAAI,CAAC,CAAC,IAAI,KAAK,MAAM,EAAE;oBACrB,uBAAuB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;oBACnD,OAAO;iBACR;qBAAM,IAAI,CAAC,CAAC,IAAI,KAAK,OAAO,EAAE;oBAC7B,uBAAuB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;oBACnD,OAAO;iBACR;aACF;YACD,MAAM,IAAI,kBAAkB,CAAC,CAAC,EAAE,CAAC,EAAE,wBAAwB,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAElF,KAAK,QAAQ;YACX,IAAI,UAAU,CAAC,CAAC,CAAC,EAAE;gBACjB,MAAM,GAAG,GAAG,oBAAoB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;gBACtD,IAAI,QAAQ,IAAI,GAAG,EAAE;oBACnB,MAAM,IAAI,kBAAkB,CAAC,CAAC,EAAE,CAAC,EAAE,uCAAuC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;iBACzF;gBACD,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,EAAE;oBACpB,MAAM,IAAI,kBAAkB,CAAC,CAAC,EAAE,CAAC,EAAE,8BAA8B,CAAC,CAAC;iBACpE;gBACD,sBAAsB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC1C,OAAO;aACR;YACD,MAAM,IAAI,kBAAkB,CAAC,CAAC,EAAE,CAAC,EAAE,sBAAsB,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAEhF,KAAK,KAAK,CAAC;QACX,KAAK,SAAS;YACZ,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;;gBAEpB,KAAK,MAAM,CAAC,IAAI,CAAC,EAAE;oBACjB,IAAI,EAAE,MAAM,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,KAAK,EAAE;wBACtC,MAAM,IAAI,kBAAkB,CAAC,CAAC,EAAE,CAAC,EAAE,0BAA0B,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;qBACnF;oBACD,uBAAuB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;oBACnD,uBAAuB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;iBACpD;gBACD,OAAO;aACR;YACD,MAAM,IAAI,kBAAkB,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,IAAI,cAAc,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAEjF,KAAK,cAAc;YACjB,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,OAAO,IAAI,CAAC,IAAI,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,EAAE;gBACtF,OAAO;aACR;YACD,MAAM,IAAI,kBAAkB,CAAC,CAAC,EAAE,CAAC,EAAE,+BAA+B,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAEzF,KAAK,eAAe;YAClB,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;gBACpB,OAAO;aACR;YACD,MAAM,IAAI,kBAAkB,CAAC,CAAC,EAAE,CAAC,EAAE,2BAA2B,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAErF,KAAK,QAAQ;YACX,uBAAuB,CACrB,CAAC,EACD;gBACE,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;aACxD,EACD,GAAG,CACJ,CAAC;YACF,OAAO;QAET;YACE,MAAM,IAAI,kBAAkB,CAC1B,CAAC,EACD,CAAC,EACD,QAAQ,MAAM,CAAC,CAAC,CAAC,8CAA8C,CAChE,CAAC;KACL;AACH,CAAC;AAcD,SAAS,mBAAmB,CAC1B,IAAqB,EACrB,KAAsB,EACtB,GAAmB;IAEnB,IAAI,GAAG,GAAwB,KAAK,CAAC;IACrC,IAAI,CAAC,GAAG,KAAK,CAAC;IACd,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,KAAK,MAAM,EAAE,IAAI,IAAI,EAAE;QACrB,MAAM,EAAE,GAAG,oBAAoB,CAAC,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC;QAC5C,GAAG,GAAG,EAAE,CAAC;QACT,IAAI,QAAQ,IAAI,EAAE,EAAE;YAClB,MAAM;SACP;QACD,CAAC,GAAG,EAAE,CAAC;QACP,CAAC,EAAE,CAAC;KACL;IAED,IACE,QAAQ,IAAI,GAAG;QACf,GAAG,CAAC,KAAK,IAAI,CAAC;SACb,EAAE,MAAM,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,KAAK,OAAO,CAAC;QACxD,CAAC,KAAK,IAAI,CAAC,MAAM,GAAG,CAAC,EACrB;QACA,MAAM,IAAI,yBAAyB,CAAC,IAAI,EAAE,GAAG,EAAE,qCAAqC,CAAC,CAAC;KACvF;IAED,IAAI,CAAA,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,aAAa,MAAK,SAAS,EAAE;QACpC,MAAM,KAAK,GAAqB;YAC9B,EAAE,EAAE,IAAI;YACR,EAAE,EAAE,KAAK;YACT,GAAG,EAAE,GAAG;SACT,CAAC;QACF,GAAG,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;KAC1B;IACD,OAAO,QAAQ,IAAI,GAAG,GAAG,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC;AAC9E,CAAC;AAED,SAAS,oBAAoB,CAC3B,IAAmB,EACnB,KAAsB,EACtB,GAAmB;IAEnB,MAAM,KAAK,GAAG,CAAA,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,QAAQ,KAAI,eAAe,CAAC;IAE/C,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;QACvB,OAAO,mBAAmB,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC;KAC9C;IACD,MAAM,WAAW,GAAG,IAAI,CAAC;;IAGzB,SAAS,IAAI,CAAyC,CAAS,EAAE,GAAG,OAAU;QAC5E,IAAI,KAAK,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE;YACrC,MAAM,IAAI,yBAAyB,CACjC,WAAW,EACX,KAAK,EACL,GAAG,WAAW,CAAC,IAAI,8BAA8B,OAAO,CAAC,MAAM,aAAa,CAC7E,CAAC;SACH;QAED,IAAI,CAAC,GAAG,CAAC,CAAC;QACV,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE;YACzB,IAAI,GAAG,KAAK,IAAI,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,EAAE;gBACpC,IAAI,EAAE,GAAG,CAAC,CAAC;gBACX,OAAO,EAAE,GAAG,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,EAAE,CAAC,KAAK,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE;oBACtD,EAAE,EAAE,CAAC;iBACN;gBACD,IAAI,EAAE,KAAK,GAAG,CAAC,MAAM,EAAE;oBACrB,MAAM,IAAI,yBAAyB,CACjC,WAAW,EACX,KAAK,EACL,GAAG,WAAW,CAAC,IAAI,2BAA2B,CAAC,oBAAoB,GAAG,SAAS,MAAM,CACnF,KAAK,CAAC,CAAC,CAAC,CACT,UAAU,CACZ,CAAC;iBACH;aACF;YACD,CAAC,EAAE,CAAC;SACL;QACD,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC,MAAM,GAAG,CAAC,CAAiB,CAAC;KAC3D;IAED,SAAS,OAAO,CAAyB,EAAqB;QAC5D,OAAO,CAAC,GAAG,IAAO;YAChB,IAAI;gBACF,OAAO,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC;aACpB;YAAC,OAAO,GAAG,EAAE;gBACZ,IAAI,GAAG,YAAY,cAAc,EAAE;oBACjC,MAAM,IAAI,yBAAyB,CAAC,WAAW,EAAE,KAAK,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;iBACtE;qBAAM;oBACL,MAAM,GAAG,CAAC;iBACX;aACF;SACF,CAAC;KACH;IAED,SAAS,gBAAgB,CAA8C,EAAwB;QAC7F,OAAO,CAAC,GAAM;YACZ,IAAI;gBACF,OAAO,EAAE,CAAC,GAAG,CAAC,CAAC;aAChB;YAAC,OAAO,GAAG,EAAE;gBACZ,IAAI,GAAG,YAAY,cAAc,EAAE;oBACjC,MAAM,IAAI,yBAAyB,CAAC,WAAW,EAAE,KAAK,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;iBACtE;qBAAM;oBACL,MAAM,GAAG,CAAC;iBACX;aACF;SACF,CAAC;KACH;IAED,MAAM,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;IAC1C,MAAM,iBAAiB,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;IACrD,MAAM,gBAAgB,GAAG,OAAO,CAAC,sBAAsB,CAAC,CAAC;IACzD,MAAM,oBAAoB,GAAG,gBAAgB,CAAC,6BAA6B,CAAC,CAAC;IAC7E,MAAM,kBAAkB,GAAG,gBAAgB,CAAC,2BAA2B,CAAC,CAAC;IACzE,MAAM,kBAAkB,GAAG,gBAAgB,CAAC,2BAA2B,CAAC,CAAC;IACzE,MAAM,kBAAkB,GAAG,gBAAgB,CAAC,2BAA2B,CAAC,CAAC;IACzE,MAAM,wBAAwB,GAAG,gBAAgB,CAAC,iCAAiC,CAAC,CAAC;;IAGrF,SAAS,cAAc,CACrB,GAA2C,EAC3C,GAA8B;QAE9B,MAAM,CAAC,GAAG,MAAM,CAAC,WAAW,kCACvB,GAAG,KACN,WAAW,EAAE,GAAG,CAAC,CAAC,KAAK,SAAS,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,EAC7C,QAAQ,EAAE,GAAG,CAAC,CAAC,KAAK,SAAS,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,IAC1C,CAAC;QACH,MAAM,SAAS,GAAG,CAAC,CAAuB,EAAE,CAAqB,EAAE,IAAY;YAC7E,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE;gBAC5B,MAAM,IAAI,yBAAyB,CACjC,WAAW,EACX,KAAK,EACL,GAAG,WAAW,CAAC,IAAI,aAAa,CAAC,IAAI,CAAC,IAAI,IAAI,sBAAsB,CACrE,CAAC;aACH;SACF,CAAC;QACF,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;QAC/B,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;QAC9B,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;QAClC,OAAO,CAAC,CAAC;KACV;;IAGD,SAAS,QAAQ,CAA0B,EAAK,EAAE,CAAgC;QAChF,MAAM,EAAE,GAAkB,EAAE,CAAC;QAC7B,MAAM,CAAC,GAAiC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC;QAC5F,MAAM,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;QACtB,MAAM,GAAG,GACP,CAAC,CAAC,CAAC,KAAK,SAAS,IAAI,CAAC,CAAC,CAAC,KAAK,SAAS,IAAI,CAAC,CAAC,CAAC,KAAK,SAAS;cACvD;gBACE,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC;gBACvC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC;gBACvC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC;aACxC;cACD,SAAS,CAAC;cAEY,IAAI,UAAK,CAAC,EAAhC,UAA4B,EAAK;QACvC,uCAAa,IAAU,IAAM,GAAG,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,GAAI;KAC5E;;IAGD,SAAS,WAAW,CAA0B,CAAI,EAAE,GAAY;QAC9D,MAAM,EAAE,GAAG,cAAc,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;QACpC,OAAO,QAAQ,CAAC,CAAC,EAAE;YACjB,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,SAAS,GAAG,EAAE,CAAC,CAAC,GAAG,GAAG,KAAK,SAAS,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI;YAC/D,CAAC,EAAE,IAAI;SACR,CAAC,CAAC;KACJ;;IAGD,SAAS,aAAa,CACpB,GAAuC,EACvC,KAAoB,EACpB,MAA2B,EAC3B,CAAS,EACT,QAAgB;;QAEhB,MAAM,QAAQ,SAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,0CAAG,CAAC,CAAC,CAAC;QACtC,MAAM,WAAW,SAAG,MAAM,CAAC,CAAC,0CAAG,CAAC,CAAC,CAAC;QAClC,IACE,WAAW,KAAK,SAAS;YACzB,WAAW,KAAK,GAAG;YACnB,QAAQ,KAAK,SAAS;YACtB,WAAW,KAAK,QAAQ,EACxB;YACA,MAAM,IAAI,yBAAyB,CACjC,WAAW,EACX,KAAK,EACL,GAAG,WAAW,CAAC,IAAI,gCAAgC,WAAW,QAAQ,QAAQ,EAAE,CACjF,CAAC;SACH;QACD,MAAM,SAAS,SAAG,MAAM,CAAC,CAAC,0CAAG,CAAC,CAAC,CAAC;QAChC,MAAM,MAAM,SAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,0CAAG,CAAC,CAAC,CAAC;QAClC,OAAO,QAAQ,CAAC,KAAK,EAAE;YACrB,CAAC,EAAE,IAAI;YACP,CAAC,EAAE,SAAS;kBACR,SAAS,KAAK,IAAI;sBAChB,QAAQ;0BACN,CAAC,GAAG,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;0BACzB,SAAS;sBACX,SAAS,KAAK,KAAK;0BACnB,MAAM;8BACJ,CAAC,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,GAAG,IAAI,QAAQ,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC;8BACzE,QAAQ;kCACR,CAAC,GAAG,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;kCACzB,SAAS;0BACX,CAAC,SAAS,CAAC;kBACb,IAAI;SACT,CAAC,CAAC;KACJ;;IAGD,SAAS,IAAI,CACX,GAAuC,EACvC,CAAS,EACT,IAAY,CAAC;QAEb,MAAM,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QAClC,IAAI,CAAC,KAAK,CAAC,EAAE;YACX,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;SACpB;aAAM,IAAI,CAAC,KAAK,CAAC,EAAE;YAClB,OAAO,CAAC,CAAC,IAAI,CAAC;SACf;QACD,MAAM,KAAK,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACxB,IAAI,UAAU,CAAC,KAAK,CAAC,EAAE;YACrB,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;SAC9C;aAAM;YACL,MAAM,IAAI,yBAAyB,CACjC,WAAW,EACX,KAAK,EACL,GAAG,WAAW,CAAC,IAAI,cAAc,CAAC,sBAAsB,CACzD,CAAC;SACH;KACF;IAED,SAAS,MAAM,CACb,GAAuC,EACvC,CAAS,EACT,IAAY,CAAC;QAEb,IAAI,CAAC,KAAK,CAAC,EAAE;YACX,OAAO,GAAG,CAAC;SACZ;QACD,MAAM,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QAClC,IAAI,CAAC,KAAK,CAAC,EAAE;YACX,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;SAClB;QACD,MAAM,KAAK,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACxB,IAAI,UAAU,CAAC,KAAK,CAAC,EAAE;YACrB,OAAO,MAAM,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;SAChC;aAAM,IAAI,CAAC,KAAK,CAAC,EAAE;YAClB,OAAO,KAAK,CAAC;SACd;QACD,MAAM,IAAI,yBAAyB,CACjC,WAAW,EACX,KAAK,EACL,GAAG,WAAW,CAAC,IAAI,cAAc,CAAC,GAAG,CAAC,sBAAsB,CAC7D,CAAC;KACH;IAED,SAAS,SAAS,CAChB,GAAuC,EACvC,CAAgB,EAChB,CAAS,EACT,IAAY,CAAC;QAEb,IAAI,CAAC,KAAK,CAAC,EAAE;YACX,OAAO,CAAC,CAAC;SACV;QACD,MAAM,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QAClC,IAAI,CAAC,KAAK,CAAC,EAAE;YACX,uCACK,CAAC,KACJ,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IACpB;SACH;QACD,MAAM,KAAK,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACxB,IAAI,UAAU,CAAC,KAAK,CAAC,EAAE;YACrB,uCACK,CAAC,KACJ,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,IAChD;SACH;aAAM,IAAI,CAAC,KAAK,CAAC,EAAE;YAClB,uCACK,CAAC,KACJ,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IACpB;SACH;QACD,MAAM,IAAI,yBAAyB,CACjC,WAAW,EACX,KAAK,EACL,GAAG,WAAW,CAAC,IAAI,cAAc,CAAC,GAAG,CAAC,sBAAsB,CAC7D,CAAC;KACH;IAED,MAAM,SAAS,GAAG,CAAC,CAAsB,EAAE,MAAc,KAAK;QAC5D,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,EAAE,CAAC,GAAG,MAAM;KAClD,CAAC;IAEF,SAAS,UAAU,CAAC,GAAwB,EAAE,GAAwB;QACpE,IAAI,QAAQ,IAAI,GAAG,IAAI,QAAQ,IAAI,GAAG,EAAE;YACtC,OAAO,QAAQ,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;SACpC;aAAM;YACL,iBAAiB,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;YAC5B,OAAO,GAAG,CAAC;SACZ;KACF;IAED,MAAM,QAAQ,GAAG,CAAC,CAAC,WAAiC;;QAClD,QAAQ,WAAW,CAAC,IAAI;YACtB,KAAK,KAAK,EAAE;gBACV,MAAM,CAAC,GAAG,WAAW,CAAC,IAAI,GAAG,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC;gBACvE,IAAI,CAAC,KAAK,CAAC,EAAE;oBACX,MAAM,IAAI,yBAAyB,CAAC,WAAW,EAAE,KAAK,EAAE,oBAAoB,CAAC,CAAC;iBAC/E;gBACD,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC/B,IAAI,MAAM,CAAC,CAAC,CAAC,KAAK,QAAQ,EAAE;oBAC1B,MAAM,IAAI,yBAAyB,CAAC,WAAW,EAAE,KAAK,EAAE,uBAAuB,CAAC,CAAC;iBAClF;gBACD,OAAO,CAAC,CAAC,EAAE,GAAG,KAAK,CAAC,CAAC;aACtB;YAED,KAAK,MAAM,EAAE;gBACX,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;gBAC9B,cAAc,CAAC,EAAE,CAAC,CAAC;gBACnB,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;aACxC;YAED,KAAK,MAAM;gBACT,OAAO;oBACL,QAAQ,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,cAAc,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;oBACtF,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;iBAClB,CAAC;YAEJ,KAAK,MAAM;gBACT,OAAO,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,cAAc,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,KAAK,CAAC,CAAC;YAEhF,KAAK,MAAM,EAAE;gBACX,MAAM,CAAC,GAAG,WAAW,CAAC,IAAI,GAAG,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC;gBACvE,IAAI,CAAC,GAAG,CAAC,EAAE;oBACT,MAAM,IAAI,yBAAyB,CAAC,WAAW,EAAE,KAAK,EAAE,QAAQ,CAAC,eAAe,CAAC,CAAC;iBACnF;gBACD,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,EAAE,GAAG,IAAI,KAAK,CAAO,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;gBACpD,MAAM,EAAE,GAAG,cAAc,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;gBACzE,MAAM,IAAI,GAAG,CAAC,CAAS;oBACrB,MAAM,CAAC,GAAG,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;oBAC7B,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;iBACnC,CAAC;gBACF,MAAM,OAAO,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;;oBACzB,MAAM,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;oBACrB,MAAM,CAAC,GACL,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG;0BACtC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI;8BACd,EAAE,CAAC,CAAC;kCACF,CAAC,GAAG,GAAG,IAAI,CAAC,OAAA,EAAE,CAAC,CAAC,0CAAG,CAAC,MAAK,EAAE,CAAC,CAAC;kCAC7B,SAAS;8BACX,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;0BACX,SAAS,CAAC;oBAChB,OAAO,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC;iBAC7C,CAAC,CAAC;gBACH,OAAO;oBACL,QAAQ,CACN;wBACE,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,OAAO;qBACd,EACD,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CACrB;oBACD,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;iBAClB,CAAC;aACH;YAED,KAAK,QAAQ,EAAE;gBACb,MAAM,CAAC,GAAG,WAAW,CAAC,IAAI,GAAG,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC;gBACvE,IAAI,CAAC,GAAG,CAAC,EAAE;oBACT,MAAM,IAAI,yBAAyB,CAAC,WAAW,EAAE,KAAK,EAAE,UAAU,CAAC,eAAe,CAAC,CAAC;iBACrF;gBACD,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC/B,MAAM,EAAE,GAAG,cAAc,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC;gBAChE,MAAM,MAAM,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;gBAC1B,OAAO;oBACL,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,KAAK,aAAa,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,KAAK,GAAG,KAAK,CAAC,CAAC;oBACpF,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;iBAClB,CAAC;aACH;YAED,KAAK,KAAK,CAAC;YACX,KAAK,KAAK,EAAE;gBACV,MAAM,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBACnD,MAAM,KAAK,GAAG,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,KAAK,KAAK,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;gBACzD,MAAM,EAAE,GAAG,cAAc,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC;gBAChE,OAAO;oBACL,aAAa,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,WAAW,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC;oBACpE,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;iBAClB,CAAC;aACH;YAED,KAAK,MAAM,EAAE;gBACX,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;gBAClC,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;gBACrC,OAAO,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;aACjF;YAED,KAAK,MAAM;gBACT,IAAI,CAAC,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC;gBACnD,OAAO,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YAE3D,KAAK,KAAK,EAAE;gBACV,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC;gBACnD,oBAAoB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC3B,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;gBACrC,OAAO,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;aAC3D;YAED,KAAK,KAAK;gBACR,IAAI,WAAW,CAAC,IAAI,EAAE;;oBAEpB,MAAM,CAAC,GAAG,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;oBAChD,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;oBAC/B,OAAO,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;iBACvD;qBAAM;;oBAEL,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC;oBAC5C,oBAAoB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;oBAC3B,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;oBACrC,OAAO,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;iBACnF;YAEH,KAAK,QAAQ;gBACX,IAAI,WAAW,CAAC,IAAI,EAAE;;oBAEpB,MAAM,CAAC,GAAG,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;oBAChD,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;oBAClC,OAAO,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;iBACnE;qBAAM;;oBAEL,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC;oBAC7C,oBAAoB,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;oBAC5B,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,EAAE;wBACzB,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;wBAC5B,gBAAgB,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;wBACvC,OAAO;4BACL,WAAW,CAAC;gCACV,IAAI,EAAE,KAAK;gCACX,IAAI,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;6BACrC,CAAC;4BACF,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;yBAClB,CAAC;qBACH;oBAED,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC;oBACvC,gBAAgB,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;oBACvC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,KAAK,EAAE;wBACxB,OAAO;4BACL,WAAW,CAAC;gCACV,IAAI,EAAE,KAAK;gCACX,IAAI,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;6BAC3E,CAAC;4BACF,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;yBAClB,CAAC;qBACH;oBACD,wBAAwB,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;oBACxC,OAAO;wBACL,WAAW,CAAC;4BACV,IAAI,EAAE,SAAS;4BACf,IAAI,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;yBAC3E,CAAC;wBACF,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;qBAClB,CAAC;iBACH;YAEH,KAAK,gBAAgB,EAAE;gBACrB,MAAM,EAAE,GAAG,cAAc,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;gBACpC,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC;gBACxD,oBAAoB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC3B,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;gBACrC,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC7C,MAAM,EAAE,SAAG,EAAE,CAAC,CAAC,0CAAE,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC;gBAC3D,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,KAAK,EAAE;oBACvB,OAAO;wBACL,QAAQ,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,aAAF,EAAE,uBAAF,EAAE,CAAG,CAAC,CAAC,EAAE,CAAC;wBAClE,QAAQ,CACN;4BACE,IAAI,EAAE,KAAK;4BACX,IAAI,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;yBACzE,EACD,EAAE,CAAC,EAAE,EAAE,aAAF,EAAE,uBAAF,EAAE,CAAG,CAAC,CAAC,EAAE,CACf;wBACD,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;qBAClB,CAAC;iBACH;gBACD,wBAAwB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;gBACvC,OAAO;oBACL,QAAQ,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,aAAF,EAAE,uBAAF,EAAE,CAAG,CAAC,CAAC,EAAE,CAAC;oBAClE,QAAQ,CACN;wBACE,IAAI,EAAE,SAAS;wBACf,IAAI,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;qBACzE,EACD,EAAE,CAAC,EAAE,EAAE,aAAF,EAAE,uBAAF,EAAE,CAAG,CAAC,CAAC,EAAE,CACf;oBACD,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;iBAClB,CAAC;aACH;YAED,KAAK,MAAM,EAAE;gBACX,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;gBACpC,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;gBACrC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;aACvD;YAED,KAAK,OAAO,EAAE;gBACZ,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;gBACpC,kBAAkB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBACzB,kBAAkB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBACzB,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE;oBAC7B,MAAM,IAAI,yBAAyB,CACjC,WAAW,EACX,KAAK,EACL,GAAG,WAAW,CAAC,IAAI,yCAAyC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CACnF,CAAC;iBACH;gBACD,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBACxB,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBACxC,OAAO;oBACL,WAAW,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;oBACtE,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;iBAClB,CAAC;aACH;YAED,KAAK,UAAU,EAAE;gBACf,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC3B,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,QAAQ,CAAC,QAAQ,CAAC,EAAE;oBAC9C,kBAAkB,CAAC,CAAC,CAAC,CAAC;iBACvB;gBACD,OAAO,EAAE,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;aAChC;YAED,KAAK,OAAO;gBACV,IAAI,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;gBACnB,OAAO,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;YAEjD,KAAK,QAAQ;gBACX,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YAE5D,KAAK,QAAQ,EAAE;gBACb,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;gBAChD,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,EAAE;oBACzB,IAAI,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,QAAQ,IAAI,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,OAAO,EAAE;wBAC3E,MAAM,IAAI,yBAAyB,CACjC,WAAW,EACX,KAAK,EACL,GAAG,WAAW,CAAC,IAAI,+BAA+B,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAC5E,CAAC;qBACH;oBACD,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;iBACxD;gBACD,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC;gBACxC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE;oBAC7B,MAAM,IAAI,yBAAyB,CACjC,WAAW,EACX,KAAK,EACL,GAAG,WAAW,CAAC,IAAI,uBAAuB,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAC1E,CAAC;iBACH;gBACD,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;aAChD;YAED,KAAK,OAAO;gBACV,OAAO;oBACL,WAAW,CACT,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAC7E,QAAQ,CACT;oBACD,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;iBAClB,CAAC;YAEJ,KAAK,MAAM,EAAE;gBACX,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC3B,kBAAkB,CAAC,CAAC,CAAC,CAAC;gBACtB,OAAO,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,SAAS,CAAC,EAAE,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;aACvE;YAED,KAAK,KAAK,EAAE;gBACV,MAAM,CAAC,GAAG,IAAI,CACZ,CAAC,EACD,CAAC,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,CAAC,EACpF,CAAC,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,CAAC,CACrF,CAAC;gBACF,IACE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,KAAK;qBAC1C,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,KAAK,CAAC,EAC5C;oBACA,OAAO,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;iBAC1D;qBAAM,IACL,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,WAAW;qBAChD,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,WAAW,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,KAAK,CAAC,EAClD;oBACA,OAAO,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,EAAE,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;iBAChE;qBAAM,IACL,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,KAAK;oBAClB,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,KAAK;oBACnB,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,OAAO;oBACrB,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,cAAc;oBAC5B,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,cAAc;oBAC5B,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,cAAc;oBAC9B,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EACvB;oBACA,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;iBAC/C;gBACD,MAAM,IAAI,yBAAyB,CACjC,WAAW,EACX,KAAK,EACL,GAAG,WAAW,CAAC,IAAI,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAC9D,CAAC;aACH;YAED,KAAK,KAAK,EAAE;gBACV,MAAM,CAAC,GAAG,eAAe,CAAC,KAAK,EAAE,QAAQ,CAAC,QAAQ,CAAC;sBAC/C,IAAI,CAAC,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,OAAO,CAAC,CAAC;sBACnF,IAAI,CAAC,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC;gBAEtE,IACE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,KAAK;qBACzC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,KAAK,CAAC;qBAC7C,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,WAAW,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,WAAW,CAAC,EACxD;oBACA,OAAO,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;iBAC1D;qBAAM,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,WAAW,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,KAAK,EAAE;oBAC3D,OAAO,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,EAAE,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;iBAChE;qBAAM,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,OAAO,EAAE;oBACzD,OAAO,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,EAAE,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;iBAC5D;gBACD,MAAM,IAAI,yBAAyB,CACjC,WAAW,EACX,KAAK,EACL,GAAG,WAAW,CAAC,IAAI,oBAAoB,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CACrE,CAAC;aACH;YAED,KAAK,WAAW,EAAE;gBACL,IAAI,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE;gBACzC,OAAO,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;aACxF;YAED,KAAK,KAAK,EAAE;gBACV,MAAM,CAAC,GAAG,IAAI,CACZ,CAAC,EACD,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,CAAC,EACvE,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,CAAC,CACxE,CAAC;gBACF,IACE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,KAAK;qBAC1C,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,KAAK,CAAC,EAC5C;oBACA,OAAO,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;iBAC1D;qBAAM,IACL,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,OAAO;qBAC5C,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,KAAK,CAAC,EAC9C;oBACA,OAAO,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,EAAE,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;iBAC5D;qBAAM,IACL,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,cAAc;oBAC5B,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,cAAc;oBAC5B,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,cAAc;oBAC5B,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,cAAc;qBAC7B,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EACzE;oBACA,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;iBAC/C;qBAAM,IACL,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,cAAc;qBAC5E,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,cAAc,CAAC,EAC9E;oBACA,OAAO,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,CAAC,EAAE,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;iBACnE;gBACD,MAAM,IAAI,yBAAyB,CACjC,WAAW,EACX,KAAK,EACL,GAAG,WAAW,CAAC,IAAI,oBAAoB,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CACnE,CAAC;aACH;YAED,KAAK,MAAM,EAAE;gBACX,MAAM,GAAG,GAAG,CACV,CAA0B,EAC1B,CAA0B,MACc;oBACxC,IAAI,EAAE,QAAQ;oBACd,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;iBAC3D,CAAC,CAAC;gBACH,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC;gBACpE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,KAAK,EAAE;oBAC9C,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,EAAE,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;iBAC5D;qBAAM,IACL,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,KAAK;qBAC1C,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,KAAK,CAAC,EAC5C;oBACA,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,EAAE,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;iBAC5D;qBAAM,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,KAAK,EAAE;oBACvD,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,EAAE,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;iBAChE;qBAAM,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,OAAO,EAAE;oBACzD,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,EAAE,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;iBAC9D;gBACD,MAAM,IAAI,yBAAyB,CACjC,WAAW,EACX,KAAK,EACL,GAAG,WAAW,CAAC,IAAI,8BAA8B,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAC7E,CAAC;aACH;YAED,KAAK,KAAK;gBACR,IAAI,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;gBACjB,OAAO,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YAE3D,KAAK,OAAO;gBACV,IAAI,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;gBACjB,OAAO,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YAEvF,KAAK,KAAK;gBACR,IAAI,CAAC,CAAC,EAAE,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC,CAAC;gBACjC,OAAO,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YAE3D,KAAK,KAAK,EAAE;gBACV,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBACrF,IAAI,CAAC,CAAC,IAAI,KAAK,KAAK,IAAI,CAAC,CAAC,IAAI,KAAK,KAAK,EAAE;oBACxC,OAAO,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;iBAC1D;gBACD,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;aAC5C;YAED,KAAK,KAAK,CAAC;YACX,KAAK,KAAK;gBACR,IAAI,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;gBAC1B,OAAO,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YAE3D,KAAK,IAAI,CAAC;YACV,KAAK,KAAK,EAAE;gBACV,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC;gBACpD,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE;oBAC3B,MAAM,IAAI,yBAAyB,CACjC,WAAW,EACX,KAAK,EACL,GAAG,WAAW,CAAC,IAAI,8CAA8C,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAC3F,CAAC;iBACH;gBACD,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;aAC/C;YAED,KAAK,KAAK,EAAE;gBACV,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC;gBAC3D,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE;oBAC3E,MAAM,IAAI,yBAAyB,CACjC,WAAW,EACX,KAAK,EACL,GAAG,WAAW,CAAC,IAAI,8CAA8C,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAC3F,CAAC;iBACH;gBACD,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;aAC/C;YAED,KAAK,KAAK,EAAE;gBACV,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC7C,IAAI,CAAC,CAAC,IAAI,KAAK,MAAM,EAAE;oBACrB,OAAO,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;iBAC3D;gBACD,OAAO,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;aAC1D;YAED,KAAK,SAAS,EAAE;gBACd,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;gBAC9B,oBAAoB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC3B,oBAAoB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC3B,OAAO,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;aAC1D;YAED,KAAK,IAAI,CAAC;YACV,KAAK,KAAK,CAAC;YACX,KAAK,IAAI,CAAC;YACV,KAAK,IAAI,CAAC;YACV,KAAK,IAAI,CAAC;YACV,KAAK,IAAI;gBACP,IAAI,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;gBACjB,OAAO,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YAE5D,KAAK,MAAM,EAAE;gBACX,IAAI,CAAA,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,QAAQ,MAAK,SAAS,EAAE;oBAC/B,MAAM,IAAI,yBAAyB,CACjC,WAAW,EACX,KAAK,EACL,GAAG,WAAW,CAAC,IAAI,qBAAqB,CACzC,CAAC;iBACH;gBACD,MAAM,EAAE,GAAG,cAAc,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;gBAC1C,MAAM,EAAE,GAAG,kBAAkB,CAAC,GAAG,CAAC,QAAQ,QAAE,EAAE,CAAC,CAAC,0CAAG,CAAC,EAAE,CAAC;gBACvD,IAAI,EAAE,KAAK,IAAI,EAAE;oBACf,MAAM,IAAI,yBAAyB,CACjC,WAAW,EACX,KAAK,EACL,GAAG,WAAW,CAAC,IAAI,gCAAgC,EAAE,EAAE,CACxD,CAAC;iBACH;gBACD,OAAO;oBACL,QAAQ,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;oBAC1E,GAAG,KAAK;iBACT,CAAC;aACH;YAED,KAAK,iBAAiB,EAAE;gBACtB,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC;gBACjD,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;gBACrC,OAAO,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,EAAE,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;aAChE;YAED,KAAK,cAAc,EAAE;gBACnB,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBACjC,IAAI,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,UAAU,EAAE;oBACpC,MAAM,IAAI,yBAAyB,CACjC,WAAW,EACX,KAAK,EACL,GAAG,WAAW,CAAC,IAAI,wBAAwB,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAC/D,CAAC;iBACH;gBACD,OAAO,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,EAAE,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;aAChE;YAED,KAAK,kBAAkB;gBACrB,IAAI,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC;gBACtB,OAAO,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YAE1F,KAAK,KAAK;gBACR,OAAO,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,EAAE,MAAM,CAAC,EAAE,GAAG,KAAK,CAAC,CAAC;YAEhE,KAAK,QAAQ;gBACX,OAAO,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,SAAS,CAAC,EAAE,GAAG,KAAK,CAAC,CAAC;YAE/D,KAAK,SAAS;gBACZ,OAAO,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,UAAU,CAAC,EAAE,GAAG,KAAK,CAAC,CAAC;YAEhE,KAAK,iBAAiB;gBACpB,IAAI,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,WAAW,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;gBAC3C,OAAO,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YAE5D,KAAK,SAAS,CAAC;YACf,KAAK,QAAQ,CAAC;YACd,KAAK,QAAQ,CAAC;YACd,KAAK,QAAQ,CAAC;YACd,KAAK,MAAM;gBACT,IAAI,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;gBACnB,OAAO,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,EAAE,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YAE7D,KAAK,UAAU;gBACb,IAAI,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;gBACjB,OAAO,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,EAAE,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YAEhE,KAAK,QAAQ;gBACX,OAAO,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,SAAS,CAAC,EAAE,GAAG,KAAK,CAAC,CAAC;YAEjE,KAAK,QAAQ;gBACX,OAAO,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,SAAS,CAAC,EAAE,GAAG,KAAK,CAAC,CAAC;YAEjE,KAAK,SAAS,EAAE;gBACd,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBACnC,MAAM,EAAE,GAAG,cAAc,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;gBACpC,OAAO;oBACL,QAAQ,CACN,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,WAAW,GAAG,CAAC,EAAE,EACrC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,EAAE,CACrD;oBACD,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;iBAClB,CAAC;aACH;YAED,KAAK,cAAc,EAAE;gBACnB,MAAM,IAAI,GAAyB,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;gBACvD,IAAI,CAAA,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,QAAQ,MAAK,SAAS,EAAE;oBAC/B,IAAI,CAAC,WAAW,CAAC,GAAG;wBAClB,IAAI,EAAE,UAAU;wBAChB,IAAI,EAAE,CAAC,eAAe,CAAC,GAAG,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;qBAC3D,CAAC;iBACH;gBACD,OAAO,CAAC,WAAW,CAAC,IAAI,EAAE,UAAU,CAAC,EAAE,GAAG,KAAK,CAAC,CAAC;aAClD;YAED,KAAK,UAAU;gBACb,OAAO,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,EAAE,GAAG,KAAK,CAAC,CAAC;YAEvD,KAAK,MAAM,EAAE;gBACX,cAAc,CAAC,EAAE,CAAC,CAAC;gBACnB,MAAM,CAAC,GAAG,WAAW,CAAC,IAAI,KAAK,SAAS,GAAG,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC;gBACrF,IAAI,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC;gBAClB,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;aACvB;YAED,KAAK,KAAK,EAAE;gBACV,cAAc,CAAC,EAAE,CAAC,CAAC;gBACnB,MAAM,CAAC,GAAG,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;gBAChD,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;aACxE;YAED,KAAK,KAAK,EAAE;gBACV,cAAc,CAAC,EAAE,CAAC,CAAC;gBACnB,MAAM,CAAC,GAAG,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;gBAChD,OAAO,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;aAC5E;YAED,KAAK,MAAM;gBACT,0BAA0B,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;gBAChD,OAAO;oBACL,QAAQ,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,cAAc,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;oBACzF,GAAG,KAAK;iBACT,CAAC;YAEJ,KAAK,MAAM,CAAC;YACZ,KAAK,OAAO,EAAE;gBACZ,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC3B,MAAM,EAAE,GAAG,cAAc,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;gBACzE,MAAM,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;gBAErB,MAAM,QAAQ,GAAmC;oBAC/C,QAAQ,CAAC,CAAC,EAAE;wBACV,CAAC,EAAE,IAAI;wBACP,CAAC,EAAE,IAAI;wBACP,CAAC,EACC,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG;8BACtC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI;kCACd,EAAE,CAAC,CAAC;sCACF,CAAC,GAAG,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;sCACxB,SAAS;kCACX,EAAE,CAAC,CAAC;8BACN,SAAS;qBAChB,CAAC;oBACF,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE;wBAC5B,CAAC,EAAE,IAAI;wBACP,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,GAAG,EAAE,CAAC,CAAC,GAAG,SAAS;qBACjE,CAAC;iBACH,CAAC;gBAEF,OAAO;oBACL,QAAQ,CACN;wBACE,IAAI,EAAE,IAAI;wBACV,IAAI,EAAE,WAAW,CAAC,IAAI,KAAK,MAAM,GAAG,QAAQ,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC;qBAC1E,EACD,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CACrB;oBACD,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;iBAClB,CAAC;aACH;YAED,KAAK,KAAK;gBACR,0BAA0B,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;gBAChD,OAAO;oBACL,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,cAAc,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;oBACvF,GAAG,KAAK;iBACT,CAAC;YAEJ,KAAK,QAAQ;gBACX,IAAI,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;gBACnB,0BAA0B,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;gBAChD,OAAO;oBACL,WAAW,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,WAAW,CAAC;oBACzE,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;iBAClB,CAAC;YAEJ,KAAK,UAAU,EAAE;gBACf,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBAClC,0BAA0B,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;gBAChD,MAAM,EAAE,GAAG,cAAc,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;gBAC1C,MAAM,QAAQ,GAAG,CAAC,CAAC,WAAW,CAAC,CAAC;gBAChC,IAAI,QAAQ,KAAK,SAAS,EAAE;oBAC1B,MAAM,EAAE,GAAG,kBAAkB,CAAC,QAAQ,QAAE,EAAE,CAAC,CAAC,0CAAG,CAAC,EAAE,CAAC;oBACnD,IAAI,EAAE,KAAK,IAAI,EAAE;wBACf,MAAM,IAAI,yBAAyB,CACjC,WAAW,EACX,KAAK,EACL,GAAG,WAAW,CAAC,IAAI,gCAAgC,EAAE,EAAE,CACxD,CAAC;qBACH;oBACD,gBAAgB,CAAC,EAAE,EAAE,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;iBAC3C;gBACD,OAAO;oBACL,QAAQ,CACN,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAC7E,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,EAAE,CACtD;oBACD,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;iBAClB,CAAC;aACH;YAED,KAAK,MAAM,EAAE;gBACX,cAAc,CAAC,EAAE,CAAC,CAAC;gBACnB,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC3B,0BAA0B,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;gBAChD,gBAAgB,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;gBACzC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;aACjD;YAED,KAAK,SAAS,EAAE;gBACd,cAAc,CAAC,EAAE,CAAC,CAAC;gBACnB,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBACjC,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;gBAC5B,MAAM,GAAG,GAAG,oBAAoB,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC;gBACjE,MAAM,GAAG,GAAG,oBAAoB,CAC9B,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EACnB,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,EAAE,CAAC,EAAE,GAAG,IAAI,CAAC,EAC5E,GAAG,CACJ,CAAC;gBACF,OAAO,UAAU,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;aAC7B;YAED,KAAK,SAAS,EAAE;gBACd,cAAc,CAAC,EAAE,CAAC,CAAC;gBACnB,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC7B,MAAM,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;gBACrB,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;gBAChC,MAAM,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;gBACjC,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;gBAC5B,MAAM,GAAG,GAAG,oBAAoB,CAC9B,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EACnB;oBACE,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE;wBAClB,CAAC,EAAE,IAAI;wBACP,CAAC,EAAE,SAAS,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC;qBACzD,CAAC;oBACF,GAAG,IAAI;iBACR,EACD,GAAG,CACJ,CAAC;gBACF,MAAM,GAAG,GAAG,oBAAoB,CAC9B,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EACnB;oBACE,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE;wBAClB,CAAC,EAAE,IAAI;wBACP,CAAC,EAAE,SAAS,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC;qBAC5D,CAAC;oBACF,GAAG,IAAI;iBACR,EACD,GAAG,CACJ,CAAC;gBACF,OAAO,UAAU,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;aAC7B;YAED,KAAK,SAAS,EAAE;gBACd,cAAc,CAAC,EAAE,CAAC,CAAC;gBACnB,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC/B,MAAM,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;gBACrB,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;gBAC5B,MAAM,GAAG,GAAG,oBAAoB,CAC9B,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EACnB;oBACE,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,SAAS,CAAC,EAAE,EAAE,IAAI,CAAC,EAAE,CAAC;oBACxD,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,SAAS,CAAC,EAAE,EAAE,IAAI,CAAC,EAAE,CAAC;oBAChD,GAAG,IAAI;iBACR,EACD,GAAG,CACJ,CAAC;gBACF,MAAM,GAAG,GAAG,oBAAoB,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC;gBACjE,OAAO,UAAU,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;aAC7B;YAED,KAAK,IAAI,EAAE;gBACT,cAAc,CAAC,EAAE,CAAC,CAAC;gBACnB,IAAI,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;gBAClB,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;gBAC5B,MAAM,GAAG,GAAG,oBAAoB,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC;gBACjE,MAAM,GAAG,GAAG,oBAAoB,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC;gBACjE,OAAO,UAAU,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;aAC7B;YAED,KAAK,KAAK,EAAE;gBACV,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,MAAM,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBAChD,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;gBAC5B,MAAM,GAAG,GAAG,CAAC,CAAC,IAAI,KAAK,KAAK,GAAG,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBACnF,MAAM,IAAI,GAAG,oBAAoB,CAC/B,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EACnB,CAAC,QAAQ,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC,EAAE,GAAG,IAAI,CAAC,EACrE,GAAG,CACJ,CAAC;gBACF,IAAI,QAAQ,IAAI,IAAI,EAAE;oBACpB,IAAI,EAAE,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,OAAO,EAAE;wBAC5D,MAAM,IAAI,yBAAyB,CACjC,WAAW,EACX,KAAK,EACL,GAAG,WAAW,CAAC,IAAI,8BAA8B,CAClD,CAAC;qBACH;oBACD,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC;iBACvD;gBACD,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE;oBACnB,MAAM,IAAI,yBAAyB,CACjC,WAAW,EACX,KAAK,EACL,GAAG,WAAW,CAAC,IAAI,gCAAgC,CACpD,CAAC;iBACH;gBACD,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;gBACvC,OAAO,CAAC,CAAC,IAAI,KAAK,MAAM;sBACpB,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,IAAI,CAAC;sBACzD,CAAC,CAAC,IAAI,KAAK,KAAK;0BAChB,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,IAAI,CAAC;0BACnE,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC;aACjE;YAED,KAAK,MAAM,EAAE;gBACX,cAAc,CAAC,EAAE,CAAC,CAAC;gBACnB,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC7C,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;gBAC5B,MAAM,GAAG,GAAG,CAAC,CAAC,IAAI,KAAK,KAAK,GAAG,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBACnF,MAAM,IAAI,GAAG,oBAAoB,CAC/B,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EACnB,CAAC,QAAQ,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC,EAAE,GAAG,IAAI,CAAC,EACrE,GAAG,CACJ,CAAC;gBACF,IAAI,QAAQ,IAAI,IAAI,EAAE;oBACpB,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC;iBACvD;gBACD,iBAAiB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;gBAC9B,OAAO,IAAI,CAAC;aACb;YAED,KAAK,MAAM,EAAE;gBACX,cAAc,CAAC,EAAE,CAAC,CAAC;gBACnB,IAAI,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;gBAClB,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;gBAC5B,MAAM,IAAI,GAAG,oBAAoB,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC;gBAClE,IAAI,QAAQ,IAAI,IAAI,EAAE;oBACpB,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC;iBACvD;gBACD,iBAAiB,CAAC,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC;gBACrD,OAAO,IAAI,CAAC;aACb;YAED,KAAK,WAAW,EAAE;gBAChB,cAAc,CAAC,EAAE,CAAC,CAAC;gBACnB,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC7B,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;gBAC5B,MAAM,IAAI,GAAG,oBAAoB,CAC/B,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EACnB,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,EAAE,CAAC,EAAE,GAAG,IAAI,CAAC,EAC5E,GAAG,CACJ,CAAC;gBACF,IAAI,QAAQ,IAAI,IAAI,EAAE;oBACpB,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC;iBACvD;gBACD,iBAAiB,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC;gBACtC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,cAAc,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC;aACnF;YAED,KAAK,KAAK,EAAE;gBACV,cAAc,CAAC,EAAE,CAAC,CAAC;gBACnB,MAAM,CAAC,GAAG,WAAW,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,GAAG,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC;gBACpF,IAAI,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC;gBAClB,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;gBAC/B,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;;gBAE5B,MAAM,IAAI,GACR,WAAW,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC;sBACzB,oBAAoB,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC;sBACpD,oBAAoB,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC;gBAC3D,IAAI,QAAQ,IAAI,IAAI,EAAE;oBACpB,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC;iBACvD;gBACD,OAAO,CAAC,GAAG,IAAI,EAAE,GAAG,IAAI,CAAC,CAAC;aAC3B;YAED,KAAK,iBAAiB,EAAE;gBACtB,MAAM,EAAE,GAAG,cAAc,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;gBACpC,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC,CAAC;gBAC/C,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,UAAU,EAAE;oBACvC,MAAM,IAAI,yBAAyB,CACjC,WAAW,EACX,KAAK,EACL,GAAG,WAAW,CAAC,IAAI,wBAAwB,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAClE,CAAC;iBACH;gBACD,IAAI,kBAAkB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE;oBAC5B,mBAAmB,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;oBACzC,sBAAsB,CAAC,eAAe,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;iBACvF;gBAED,MAAM,EAAE,SAAG,EAAE,CAAC,CAAC,0CAAE,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC;gBAC3D,OAAO;oBACL,QAAQ,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,aAAF,EAAE,uBAAF,EAAE,CAAG,CAAC,CAAC,EAAE,CAAC;oBAC/C,QAAQ,CACN;wBACE,IAAI,EAAE,SAAS;wBACf,CAAC,WAAW,GAAG;4BACb,IAAI,EAAE,UAAU;4BAChB,IAAI,EAAE,CAAC,eAAe,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;yBAClE;qBACF,EACD,EAAE,CAAC,EAAE,EAAE,aAAF,EAAE,uBAAF,EAAE,CAAG,CAAC,CAAC,EAAE,CACf;oBACD,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;iBAClB,CAAC;aACH;YAED,KAAK,MAAM;gBACT,0BAA0B,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;gBAChD,uBAAuB,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,kCAC3D,GAAG,KACN,QAAQ,EAAE,SAAS,IACnB,CAAC;gBACH,OAAO,CAAC,WAAW,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,KAAK,CAAC,CAAC;YAEtD,KAAK,WAAW;gBACd,0BAA0B,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;gBAChD,oBAAoB,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC1C,OAAO;oBACL,QAAQ,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,WAAW,CAAC,IAAI,EAAE,EAAE,cAAc,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;oBACjF,GAAG,KAAK;iBACT,CAAC;YAEJ,KAAK,WAAW;gBACd,0BAA0B,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;gBAChD,oBAAoB,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC1C,0BAA0B,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;gBAChD,OAAO;oBACL,QAAQ,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,WAAW,CAAC,IAAI,EAAE,EAAE,cAAc,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;oBACjF,GAAG,KAAK;iBACT,CAAC;YAEJ,KAAK,eAAe;gBAClB,0BAA0B,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;gBAChD,oBAAoB,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC1C,0BAA0B,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;gBAChD,wBAAwB,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC9C,OAAO;oBACL,QAAQ,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,WAAW,CAAC,IAAI,EAAE,EAAE,cAAc,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;oBACrF,GAAG,KAAK;iBACT,CAAC;YAEJ,KAAK,QAAQ,EAAE;gBACb,0BAA0B,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;gBAChD,0BAA0B,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;gBAChD,MAAM,IAAI,GAAG,oBAAoB,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,kCACvE,GAAG,KACN,QAAQ,EAAE,SAAS,IACnB,CAAC;gBACH,IAAI,QAAQ,IAAI,IAAI,EAAE;oBACpB,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC;iBACvD;gBACD,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;oBACrB,MAAM,IAAI,yBAAyB,CACjC,WAAW,EACX,KAAK,EACL,GAAG,WAAW,CAAC,IAAI,gCAAgC,CACpD,CAAC;iBACH;gBACD,gBAAgB,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC/C,OAAO;oBACL,WAAW,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;oBACjF,GAAG,KAAK;iBACT,CAAC;aACH;YAED,KAAK,OAAO;gBACV,OAAO,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,QAAQ,CAAC,EAAE,GAAG,KAAK,CAAC,CAAC;YAE5D,KAAK,oBAAoB;gBACvB,OAAO,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,KAAK,CAAC,CAAC;YAElD,KAAK,cAAc;gBACjB,IAAI,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC;gBACtB,OAAO,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YAE3D,KAAK,QAAQ,EAAE;gBACb,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBACpC,oBAAoB,CAAC,CAAC,CAAC,CAAC;gBACxB,OAAO;oBACL,QAAQ,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,cAAc,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;oBACvE,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;iBAClB,CAAC;aACH;YAED,KAAK,cAAc,EAAE;gBACnB,MAAM,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBACnD,IAAI,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,QAAQ,EAAE;oBAClC,MAAM,IAAI,yBAAyB,CACjC,WAAW,EACX,KAAK,EACL,GAAG,WAAW,CAAC,IAAI,sBAAsB,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAC7D,CAAC;iBACH;gBACD,gBAAgB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;gBACvC,OAAO;oBACL,WAAW,CAAC;wBACV,IAAI,EAAE,QAAQ;wBACd,IAAI,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;qBACzC,CAAC;oBACF,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;iBAClB,CAAC;aACH;YAED,KAAK,cAAc,EAAE;gBACnB,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;gBACxC,MAAM,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBACnC,IAAI,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,KAAK,EAAE;oBAC/B,MAAM,IAAI,yBAAyB,CACjC,WAAW,EACX,KAAK,EACL,GAAG,WAAW,CAAC,IAAI,mBAAmB,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAC1D,CAAC;iBACH;gBACD,gBAAgB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;gBACvC,OAAO;oBACL,WAAW,CAAC;wBACV,IAAI,EAAE,QAAQ;wBACd,IAAI,EAAE;4BACJ;gCACE,IAAI,EAAE,MAAM;gCACZ,IAAI,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;6BACjE;yBACF;qBACF,CAAC;oBACF,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;iBAClB,CAAC;aACH;YAED,KAAK,aAAa,EAAE;gBAClB,MAAM,EAAE,GAAG,cAAc,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;gBACpC,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBACjC,MAAM,EAAE,SAAG,EAAE,CAAC,CAAC,0CAAE,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC;gBAC3D,OAAO;oBACL,QAAQ,CACN;wBACE,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;qBAC/E,EACD,EAAE,CAAC,EAAE,EAAE,aAAF,EAAE,uBAAF,EAAE,CAAG,CAAC,CAAC,EAAE,CACf;oBACD,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,aAAF,EAAE,uBAAF,EAAE,CAAG,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC;oBACpC,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;iBAClB,CAAC;aACH;YAED,KAAK,eAAe,EAAE;gBACpB,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBACvC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE;oBAClB,MAAM,IAAI,yBAAyB,CACjC,WAAW,EACX,KAAK,EACL,GAAG,WAAW,CAAC,IAAI,oBAAoB,MAAM,CAAC,CAAC,CAAC,EAAE,CACnD,CAAC;iBACH;gBACD,MAAM,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;gBAChC,IAAI,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,cAAc,EAAE;oBACxC,MAAM,IAAI,yBAAyB,CACjC,WAAW,EACX,KAAK,EACL,GAAG,WAAW,CAAC,IAAI,4BAA4B,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CACnE,CAAC;iBACH;gBACD,IAAI,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,cAAc,EAAE;oBACxC,MAAM,IAAI,yBAAyB,CACjC,WAAW,EACX,KAAK,EACL,GAAG,WAAW,CAAC,IAAI,4BAA4B,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CACnE,CAAC;iBACH;gBACD,OAAO,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;aAC3D;YAED,KAAK,qBAAqB;gBACxB,OAAO;oBACL,QAAQ,CACN,EAAE,IAAI,EAAE,eAAe,EAAE,IAAI,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,EACtD,cAAc,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAC/B;oBACD,GAAG,KAAK;iBACT,CAAC;YAEJ,KAAK,uBAAuB,EAAE;gBAC5B,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,qBAAqB,CAAC,EAAE,CAAC,eAAe,CAAC,CAAC,CAAC;gBAC9D,IAAI,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE;oBACrE,MAAM,IAAI,yBAAyB,CACjC,WAAW,EACX,KAAK,EACL,GAAG,WAAW,CAAC,IAAI,iCAAiC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAC9F,CAAC;iBACH;gBACD,OAAO,eAAe,CAAC,KAAK,EAAE,QAAQ,CAAC,SAAS,CAAC;sBAC7C;wBACE,WAAW,CAAC;4BACV,IAAI,EAAE,QAAQ;4BACd,IAAI,EAAE;gCACJ;oCACE,IAAI,EAAE,MAAM;oCACZ,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;iCACrD;6BACF;yBACF,CAAC;wBACF,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;qBAClB;sBACD;wBACE,WAAW,CAAC;4BACV,IAAI,EAAE,QAAQ;4BACd,IAAI,EAAE;gCACJ;oCACE,IAAI,EAAE,MAAM;oCACZ,IAAI,EAAE;wCACJ,EAAE,IAAI,EAAE,OAAO,EAAE;wCACjB;4CACE,IAAI,EAAE,MAAM;4CACZ,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;yCACrD;qCACF;iCACF;6BACF;yBACF,CAAC;wBACF,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;qBAClB,CAAC;aACP;YAED,KAAK,YAAY;gBACf,IAAI,CAAC,CAAC,EAAE,CAAC,WAAW,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;gBAC3C,OAAO;oBACL,WAAW,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;oBACxE,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;iBAClB,CAAC;YAEJ,KAAK,MAAM,EAAE;gBACX,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;gBACrC,kBAAkB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBACzB,OAAO,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;aAC1F;YAED;gBACE,MAAM,IAAI,cAAc,CACtB,WAA4B,EAC5B,2BAA4B,WAAoB,CAAC,IAAI,EAAE,CACxD,CAAC;SACL;KACF,EAAE,WAAW,CAAC,CAAC;IAEhB,IAAI,CAAA,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,aAAa,MAAK,SAAS,EAAE;QACpC,MAAM,KAAK,GAAqB;YAC9B,EAAE,EAAE,WAAW;YACf,EAAE,EAAE,KAAK;YACT,GAAG,EAAE,QAAQ;SACd,CAAC;QACF,GAAG,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;KAC1B;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC;SAEe,eAAe,CAC7B,QAA2B,EAC3B,OAAU;IAEV,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE;QACxB,IAAI,CAAC,CAAC,IAAI,KAAK,OAAO,EAAE;YACtB,OAAO,CAAgC,CAAC;SACzC;KACF;IACD,MAAM,IAAI,cAAc,CAAC,QAAQ,EAAE,6BAA6B,OAAO,EAAE,CAAC,CAAC;AAC7E,CAAC;SAEe,aAAa,CAAC,QAA2B;IAGvD,MAAM,KAAK,GAA8C,EAAE,CAAC;IAC5D,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE;QACxB,IAAI,CAAC,CAAC,IAAI,KAAK,MAAM,EAAE;YACrB,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;SAC7B;KACF;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,UAAU,CAAC,CAAO;IACzB,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;QACpB,KAAK,MAAM,CAAC,IAAI,CAAC,EAAE;YACjB,IAAI,MAAM,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,WAAW,IAAI,CAAC,CAAC,IAAI,KAAK,SAAS,IAAI,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,EAAE;gBACxF,OAAO,IAAI,CAAC;aACb;SACF;KACF;IACD,OAAO,KAAK,CAAC;AACf,CAAC;SAEe,kBAAkB,CAChC,GAAsC,EACtC,EAAW;IAEX,EAAE,GAAG,EAAE,IAAI,UAAU,CAAC;IACtB,MAAM,UAAU,GAAG,mBAAmB,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;IAErE,IAAI,UAAU,KAAK,SAAS,EAAE;QAC5B,OAAO,UAAU,CAAC,CAAC,CAAC,CAAC;KACtB;SAAM,IAAI,EAAE,KAAK,UAAU,EAAE;QAC5B,OAAO,UAAU,CAAC,GAAG,CAAC,GAAG,eAAe,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;KAC1E;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,QAAQ,CAAC,CAAgB;IAChC,OAAO,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC;AAC7C,CAAC;SAEe,mBAAmB,CACjC,GAAsC;IAEtC,IAAI,UAAU,CAAC,GAAG,CAAC,EAAE;QACnB,MAAM,KAAK,GAAG,eAAe,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;QAChD,MAAM,EAAE,GAAG,mBAAmB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QAC9C,MAAM,CAAC,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAAC;QACnC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC;KACpD;IAED,IAAI,QAAQ,CAAC,GAAG,CAAC,EAAE;QACjB,MAAM,IAAI,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC;QAC3B,MAAM,MAAM,GAAG,CAAC,CAAQ;YACtB,MAAM,CAAC,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;YACrC,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE;gBAC5B,MAAM,EAAE,GAAG,mBAAmB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;gBACxC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC;aAC9C;YACD,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;SACvC,CAAC;QACF,OAAO,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;KACrC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC;AAED;SAEgB,mBAAmB,CACjC,QAA2B,EAC3B,GAAa;IAEb,MAAM,aAAa,GAAG,CACpB,SAAwB,EACxB,OAAsB,EACtB,GAAkB,EAClB,IAAqB;QAErB,0BAA0B,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;QAC5C,0BAA0B,CAAC,OAAO,CAAC,CAAC;QACpC,MAAM,GAAG,GAAkB;YACzB,IAAI,EAAE,MAAM;YACZ,IAAI,EAAE;gDACC,SAAS,GAAK,EAAE,MAAM,EAAE,CAAC,YAAY,CAAC,EAAE;gDACxC,OAAO,GAAK,EAAE,MAAM,EAAE,CAAC,UAAU,CAAC,EAAE;aAC1C;SACF,CAAC;QACF,MAAM,GAAG,GAAG,oBAAoB,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,kCAAO,GAAG,GAAK,EAAE,QAAQ,EAAE,EAAG,CAAC;QAC3E,IAAI,QAAQ,IAAI,GAAG,EAAE;YACnB,OAAO,GAAG,CAAC;SACZ;QAED,IAAI;YACF,iBAAiB,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;SAC/B;QAAC,OAAO,GAAG,EAAE;YACZ,IAAI,GAAG,YAAY,cAAc,EAAE;gBACjC,MAAM,IAAI,yBAAyB,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;aAC7D;iBAAM;gBACL,MAAM,GAAG,CAAC;aACX;SACF;QACD,OAAO,GAAG,CAAC;KACZ,CAAC;IAEF,MAAM,SAAS,GAAG,eAAe,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACjE,MAAM,OAAO,GAAG,eAAe,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC7D,MAAM,IAAI,GAAG,eAAe,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACvD,MAAM,QAAQ,GAAkB;QAC9B,IAAI,EAAE,MAAM;QACZ,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,EAAE,EAAE,OAAO,CAAC;KACjE,CAAC;IACF,MAAM,GAAG,GAAG,aAAa,CAAC,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;IAE9D,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,EAAE;QACzD,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;KAClE;IAED,OAAO,GAAG,CAAC;AACb,CAAC;AAED;SAEgB,eAAe,CAAC,CAAgB,EAAE,CAAgB,EAAE,GAAa;IAC/E,0BAA0B,CAAC,CAAC,CAAC,CAAC;IAC9B,uBAAuB,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,IAAI,IAAI,CAAC,CAAC;AAC7C,CAAC;SAEe,YAAY,CAC1B,IAAmB,EACnB,KAAsB,EACtB,GAAa;IAEb,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE;QACrB,0BAA0B,CAAC,CAAC,CAAC,CAAC;KAC/B;IAED,IAAI,CAAA,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,QAAQ,MAAK,SAAS,EAAE;QAC/B,KAAK,MAAM,OAAO,IAAI,CAAC,WAAW,EAAE,SAAS,CAAU,EAAE;YACvD,MAAM,GAAG,GAAG,eAAe,CAAC,GAAG,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAC3D,0BAA0B,CAAC,GAAG,CAAC,CAAC;SACjC;KACF;IAED,OAAO,oBAAoB,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG,IAAI,IAAI,CAAC,CAAC;AACxD,CAAC;SAEe,gBAAgB,CAC9B,CAAK,EACL,CAAK,EACL,KAAK,GAAG,KAAK;IAEb,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;;QAEpB,KAAK,MAAM,CAAC,IAAI,CAAoB,EAAE;YACpC,0BAA0B,CAAC,CAAC,CAAC,CAAC;SAC/B;QACD,KAAK,MAAM,CAAC,IAAI,CAAoB,EAAE;YACpC,0BAA0B,CAAC,CAAC,CAAC,CAAC;SAC/B;KACF;SAAM;QACL,0BAA0B,CAAC,CAAkB,CAAC,CAAC;QAC/C,0BAA0B,CAAC,CAAkB,CAAC,CAAC;KAChD;IACD,sBAAsB,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC;AACtC,CAAC;SAEe,sBAAsB,CAAC,CAAgB,EAAE,KAAK,GAAG,KAAK;IACpE,IAAI;QACF,0BAA0B,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;QACrC,OAAO,IAAI,CAAC;KACb;IAAC,WAAM;QACN,OAAO,KAAK,CAAC;KACd;AACH,CAAC;SAEe,eAAe,CAC7B,QAA2B,EAC3B,GAAa;IAEb,IAAI;QACF,OAAO,mBAAmB,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;KAC3C;IAAC,WAAM;QACN,OAAO,IAAI,CAAC;KACb;AACH,CAAC;SAEe,WAAW,CAAC,CAAgB,EAAE,CAAgB,EAAE,GAAa;IAC3E,IAAI;QACF,eAAe,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC;QAC3B,OAAO,IAAI,CAAC;KACb;IAAC,WAAM;QACN,OAAO,KAAK,CAAC;KACd;AACH,CAAC;SAEe,WAAW,CACzB,CAAK,EACL,CAAK,EACL,KAAK,GAAG,KAAK;IAEb,IAAI;QACF,gBAAgB,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC;QAC9B,OAAO,IAAI,CAAC;KACb;IAAC,WAAM;QACN,OAAO,KAAK,CAAC;KACd;AACH;;MC/pEa,QAAQ;IAInB,YAA4B,QAA2B,EAAE,GAAqB;QAAlD,aAAQ,GAAR,QAAQ,CAAmB;QACrD,IAAI,CAAC,GAAG,mBAAK,QAAQ,IAAK,GAAG,CAAE,CAAC;QAChC,IAAI,CAAC,MAAM,GAAG,mBAAmB,CAAC,QAAQ,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;KACvD;IAED,OAAO,KAAK,CAAC,GAAoB,EAAE,GAAqB;QACtD,MAAM,CAAC,GAAG,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC;QAC1B,MAAM,IAAI,GAAG,OAAO,GAAG,KAAK,QAAQ,GAAG,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;QAC7E,IAAI,IAAI,KAAK,IAAI,EAAE;YACjB,MAAM,IAAI,oBAAoB,CAAC,gBAAgB,CAAC,CAAC;SAClD;QACD,IAAI,uBAAuB,CAAC,IAAI,CAAC,EAAE;YACjC,OAAO,IAAI,QAAQ,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;SAChC;KAEF;IAED,OAAO,mBAAmB,CAAC,GAAoB,EAAE,GAAmB;QAClE,MAAM,CAAC,GAAG,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC;QAC1B,MAAM,IAAI,GAAG,OAAO,GAAG,KAAK,QAAQ,GAAG,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;QAC7E,IAAI,IAAI,KAAK,IAAI,EAAE;YACjB,MAAM,IAAI,0BAA0B,CAAC,uBAAuB,CAAC,CAAC;SAC/D;QACD,IAAI,mBAAmB,CAAC,IAAI,CAAC,IAAI,0BAA0B,CAAC,IAAI,CAAC,EAAE;YACjE,OAAO,IAAI,CAAC;SACb;QACD,MAAM,SAAS,CAAC;KACjB;IAED,OAAO,mBAAmB,CAAC,GAAoB,EAAE,GAAmB;QAClE,MAAM,CAAC,GAAG,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC;QAC1B,MAAM,IAAI,GAAG,OAAO,GAAG,KAAK,QAAQ,GAAG,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;QAC7E,IAAI,IAAI,KAAK,IAAI,EAAE;YACjB,MAAM,IAAI,0BAA0B,CAAC,uBAAuB,CAAC,CAAC;SAC/D;QACD,IAAI,mBAAmB,CAAC,IAAI,CAAC,EAAE;YAC7B,OAAO,IAAI,CAAC;SACb;QACD,MAAM,SAAS,CAAC;KACjB;IAED,OAAO,CAA6C,OAAU;QAC5D,OAAO,eAAe,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;KAChD;IAED,WAAW;QACT,OAAO,mBAAmB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;KAC3C;IAED,UAAU,CAAC,EAAW;QACpB,OAAO,kBAAkB,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;KAC9C;IAED,eAAe,CAAC,CAAgB,EAAE,CAAgB;QAChD,eAAe,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;KACjC;IAED,WAAW,CAAC,CAAgB,EAAE,CAAgB;QAC5C,OAAO,WAAW,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;KACpC;IAED,oBAAoB,CAAC,EAAiB,EAAE,CAAgB;QACtD,MAAM,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,EAAE,IAAI,SAAS,CAAC,CAAC;QAC3C,IAAI,CAAC,KAAK,IAAI,EAAE;YACd,MAAM,IAAI,sBAAsB,CAAC,EAAE,aAAF,EAAE,uBAAF,EAAE,CAAE,QAAQ,GAAG,CAAC;SAClD;QACD,IAAI,CAAC,eAAe,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;KAC5B;IAED,gBAAgB,CAAC,EAAiB,EAAE,CAAgB;QAClD,IAAI;YACF,IAAI,CAAC,oBAAoB,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;YACjC,OAAO,IAAI,CAAC;SACb;QAAC,WAAM;YACN,OAAO,KAAK,CAAC;SACd;KACF;IAED,YAAY,CAAC,IAAmB,EAAE,KAAsB;QACtD,OAAO,YAAY,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;KAC5C;CACF;MAEY,aAAa,GAAG,IAAI,QAAQ,CAAC;IACxC,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE;IAC/C,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE;IAC7C;QACE,IAAI,EAAE,MAAM;QACZ,IAAI,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;KAC5F;CACF;;SC7He,WAAW,CAAC,CAAsB;IAChD,IAAI,QAAQ,IAAI,CAAC,EAAE;QACjB,OAAO,YAAY,aAAa,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;KAC/C;IAED,OAAO,CAAC;SACL,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;QACR,MAAM,GAAG,GAAG,iBAAiB,CAAC,CAAC,CAAC,CAAC;QACjC,OAAO,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,MAAM,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC;KACpE,CAAC;SACD,IAAI,CAAC,IAAI,CAAC,CAAC;AAChB,CAAC;SAEe,aAAa,CAC3B,MAAe,EACf,EAAuB;IAEvB,OAAO,CAAC,CAAmB;;QACzB,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE;YAC/B,OAAO;SACR;QACD,MAAM,KAAK,SAAG,CAAC,CAAC,EAAE,CAAC,eAAe,CAAC,0CAAE,KAAK,CAAC;QAE3C,MAAM,GAAG,GAAG,GAAG,KAAK,GAAG,OAAO,GAAG,IAAI,KACnC,KAAK,GAAG,aAAa,CAAC,KAAK,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,KAAK,GAAG,EAC1D,GAAG,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC;;EAExB,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC;;EAEjB,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC;CACnB,CAAC;QACE,EAAE,CAAC,GAAG,CAAC,CAAC;KACT,CAAC;AACJ,CAAC;SAEe,WAAW,CAAC,GAAmB;;IAC7C,IAAI,GAAG,YAAY,yBAAyB,EAAE;QAC5C,MAAM,KAAK,SAAG,GAAG,CAAC,GAAG,CAAC,eAAe,CAAC,0CAAE,KAAK,CAAC;QAC9C,OAAO,GAAG,KAAK,GAAG,OAAO,GAAG,IAAI,KAC9B,KAAK,GAAG,aAAa,CAAC,KAAK,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,KAAK,GAAG,EAC1D,GAAG,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC;;EAE3B,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC;CAC5B,CAAC;KACC;SAAM,IAAI,GAAG,YAAY,kBAAkB,EAAE;QAC5C,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC;cAC/B,GAAG,GAAI,GAAG,CAAC,GAAc,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,IAAI,CAAC,MAAM,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,GAAG;cACvF,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAE3B,OAAO,SAAS,IAAI;EAEtB,GAAG,CAAC,IAAI;cACJ,SAAS,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC;CACrC;cACK,EACN;CACC,CAAC;KACC;SAAM;QACL,OAAO,UAAU,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;KAC3C;AACH;;ACjEA;MACa,OAAO,GAAG;IACnB,YAAY,EAAE,0CAA0C;IACxD,SAAS,EAAE,QAAQ;;;;;"}
|
|
1
|
+
{"version":3,"file":"taquito-michel-codec.es6.js","sources":["../src/micheline.ts","../src/scan.ts","../src/michelson-types.ts","../src/macros.ts","../src/global-constants.ts","../src/micheline-parser.ts","../src/micheline-emitter.ts","../src/base58.ts","../src/error.ts","../src/utils.ts","../src/michelson-validator.ts","../src/binary.ts","../src/michelson-typecheck.ts","../src/michelson-contract.ts","../src/formatters.ts","../src/version.ts"],"sourcesContent":["// Michelson abstract syntax tree types https://tezos.gitlab.io/whitedoc/michelson.html#concrete-syntax\n\nexport type SourceReference = {\n first: number;\n last: number;\n macro?: Expr;\n globalConstant?: Expr;\n};\n\nexport const sourceReference: unique symbol = Symbol('source_reference');\n\nexport interface Node {\n [sourceReference]?: SourceReference;\n}\n\n/**\n * An AST node representing Michelson string literal.\n */\nexport interface StringLiteral extends Node {\n string: string;\n}\n\n/**\n * An AST node representing Michelson int literal.\n */\nexport interface IntLiteral<T extends string = string> extends Node {\n int: T;\n}\n\n/**\n * An AST node representing Michelson bytes literal.\n */\nexport interface BytesLiteral extends Node {\n bytes: string;\n}\n\n/**\n * An AST node representing Michelson primitive.\n */\nexport interface Prim<PT extends string = string, AT extends Expr[] = Expr[]> extends Node {\n prim: PT;\n args?: AT;\n annots?: string[];\n}\n\nexport type List<T extends Expr> = T[] & Node;\n\n// eslint-disable-next-line @typescript-eslint/no-empty-interface\ninterface ExprList extends List<Expr> {}\n\n/**\n * An AST node representing valid Michelson expression. Directly corresponds to JSON-encoded Michelson node\n */\n\nexport type Expr = Prim | StringLiteral | IntLiteral | BytesLiteral | ExprList;\n","/**\n * @category Error\n * @description Error that indicates a failure when performing the scan step when parsing Michelson\n */\nexport class ScanError extends Error {\n constructor(public src: string, public idx: number, message?: string) {\n super(message);\n Object.setPrototypeOf(this, ScanError.prototype);\n }\n}\n\nexport enum Literal {\n Comment,\n Number,\n String,\n Bytes,\n Ident,\n}\n\nexport type TokenType = '(' | ')' | '{' | '}' | ';' | Literal;\n\nconst isSpace = new RegExp('\\\\s');\nconst isIdentStart = new RegExp('[:@%_A-Za-z]');\nconst isIdent = new RegExp('[@%_\\\\.A-Za-z0-9]');\nconst isDigit = new RegExp('[0-9]');\nconst isHex = new RegExp('[0-9a-fA-F]');\n\nexport interface Token {\n t: TokenType;\n v: string;\n first: number;\n last: number;\n}\n\nexport function* scan(src: string, scanComments = false): Generator<Token, void> {\n let i = 0;\n while (i < src.length) {\n // Skip space\n while (i < src.length && isSpace.test(src[i])) {\n i++;\n }\n if (i === src.length) {\n return;\n }\n\n const s = src[i];\n const start = i;\n if (isIdentStart.test(s)) {\n // Identifier\n i++;\n while (i < src.length && isIdent.test(src[i])) {\n i++;\n }\n yield { t: Literal.Ident, v: src.slice(start, i), first: start, last: i };\n } else if (src.length - i > 1 && src.substr(i, 2) === '0x') {\n // Bytes\n i += 2;\n while (i < src.length && isHex.test(src[i])) {\n i++;\n }\n if (((i - start) & 1) !== 0) {\n throw new ScanError(src, i, 'Bytes literal length is expected to be power of two');\n }\n yield { t: Literal.Bytes, v: src.slice(start, i), first: start, last: i };\n } else if (isDigit.test(s) || s === '-') {\n // Number\n if (s === '-') {\n i++;\n }\n const ii = i;\n while (i < src.length && isDigit.test(src[i])) {\n i++;\n }\n if (ii === i) {\n throw new ScanError(src, i, 'Number literal is too short');\n }\n yield { t: Literal.Number, v: src.slice(start, i), first: start, last: i };\n } else if (s === '\"') {\n // String\n i++;\n let esc = false;\n for (; i < src.length && (esc || src[i] !== '\"'); i++) {\n if (!esc && src[i] === '\\\\') {\n esc = true;\n } else {\n esc = false;\n }\n }\n if (i === src.length) {\n throw new ScanError(src, i, 'Unterminated string literal');\n }\n i++;\n yield { t: Literal.String, v: src.slice(start, i), first: start, last: i };\n } else if (s === '#') {\n // Comment\n i++;\n while (i < src.length && src[i] !== '\\n') {\n i++;\n }\n if (scanComments) {\n yield { t: Literal.Comment, v: src.slice(start, i), first: start, last: i };\n }\n } else if (src.length - i > 1 && src.substr(i, 2) === '/*') {\n // C style comment\n i += 2;\n while (i < src.length && !(src.length - i > 1 && src.substr(i, 2) === '*/')) {\n i++;\n }\n if (i === src.length) {\n throw new ScanError(src, i, 'Unterminated C style comment');\n }\n i += 2;\n if (scanComments) {\n yield { t: Literal.Comment, v: src.slice(start, i), first: start, last: i };\n }\n } else if (s === '(' || s === ')' || s === '{' || s === '}' || s === ';') {\n i++;\n yield { t: s, v: s, first: start, last: i };\n } else {\n throw new ScanError(src, i, `Invalid character at offset ${i}: \\`${s}'`);\n }\n }\n}\n","/* eslint-disable @typescript-eslint/no-empty-interface */\nimport { Prim, Expr, IntLiteral, StringLiteral, BytesLiteral, List, Node } from './micheline';\n\ninterface Prim0<PT extends string = string> extends Prim<PT> {\n args?: never;\n}\ninterface PrimX<PT extends string = string, AT extends Expr[] = Expr[]> extends Prim<PT, AT> {\n args: AT;\n}\n\n// Instructions\ntype MichelsonNoArgInstructionID =\n | 'ABS'\n | 'ADD'\n | 'ADDRESS'\n | 'AMOUNT'\n | 'AND'\n | 'APPLY'\n | 'BALANCE'\n | 'BLAKE2B'\n | 'CAR'\n | 'CDR'\n | 'CHAIN_ID'\n | 'CHECK_SIGNATURE'\n | 'COMPARE'\n | 'CONCAT'\n | 'CONS'\n | 'EDIV'\n | 'EQ'\n | 'EXEC'\n | 'FAILWITH'\n | 'GE'\n | 'GET_AND_UPDATE'\n | 'GT'\n | 'HASH_KEY'\n | 'IMPLICIT_ACCOUNT'\n | 'INT'\n | 'ISNAT'\n | 'JOIN_TICKETS'\n | 'KECCAK'\n | 'LE'\n | 'LEVEL'\n | 'LSL'\n | 'LSR'\n | 'LT'\n | 'MEM'\n | 'MUL'\n | 'NEG'\n | 'NEQ'\n | 'NEVER'\n | 'NOT'\n | 'NOW'\n | 'OR'\n | 'PACK'\n | 'PAIRING_CHECK'\n | 'READ_TICKET'\n | 'SAPLING_VERIFY_UPDATE'\n | 'SELF'\n | 'SELF_ADDRESS'\n | 'SENDER'\n | 'SET_DELEGATE'\n | 'SHA256'\n | 'SHA3'\n | 'SHA512'\n | 'SIZE'\n | 'SLICE'\n | 'SOME'\n | 'SOURCE'\n | 'SPLIT_TICKET'\n | 'SUB'\n | 'SUB_MUTEZ'\n | 'SWAP'\n | 'TICKET'\n | 'TOTAL_VOTING_POWER'\n | 'TRANSFER_TOKENS'\n | 'UNIT'\n | 'VOTING_POWER'\n | 'XOR'\n | 'RENAME'\n | 'OPEN_CHEST'\n | 'MIN_BLOCK_TIME';\n\ntype MichelsonRegularInstructionID =\n | 'CONTRACT'\n | 'CREATE_CONTRACT'\n | 'DIG'\n | 'DIP'\n | 'DROP'\n | 'DUG'\n | 'DUP'\n | 'EMPTY_BIG_MAP'\n | 'EMPTY_MAP'\n | 'EMPTY_SET'\n | 'GET'\n | 'IF'\n | 'IF_CONS'\n | 'IF_LEFT'\n | 'IF_NONE'\n | 'ITER'\n | 'LAMBDA'\n | 'LEFT'\n | 'LOOP'\n | 'LOOP_LEFT'\n | 'MAP'\n | 'NIL'\n | 'NONE'\n | 'PAIR'\n | 'PUSH'\n | 'RIGHT'\n | 'SAPLING_EMPTY_STATE'\n | 'UNPACK'\n | 'UNPAIR'\n | 'UPDATE'\n | 'CAST'\n | 'VIEW'\n // legacy\n | 'CREATE_ACCOUNT'\n | 'STEPS_TO_QUOTA';\n\nexport type MichelsonInstructionID = MichelsonNoArgInstructionID | MichelsonRegularInstructionID;\ntype InstrPrim<PT extends MichelsonInstructionID, AT extends Expr[]> = Prim<PT, AT>;\ntype Instr0<PT extends MichelsonNoArgInstructionID> = Prim0<PT>;\ntype InstrX<PT extends MichelsonRegularInstructionID, AT extends Expr[]> = PrimX<PT, AT>;\n\nexport type MichelsonCode = InstructionList | MichelsonInstruction;\nexport interface InstructionList extends List<MichelsonCode> {}\n\nexport type MichelsonNoArgInstruction = Instr0<MichelsonNoArgInstructionID>;\nexport type MichelsonInstruction =\n | MichelsonNoArgInstruction\n | InstrX<'DIG' | 'DUG' | 'SAPLING_EMPTY_STATE', [IntLiteral]>\n | InstrX<'NONE' | 'LEFT' | 'RIGHT' | 'NIL' | 'CAST', [MichelsonType]>\n | InstrX<'IF_NONE' | 'IF_LEFT' | 'IF_CONS' | 'IF', [InstructionList, InstructionList]>\n | InstrX<'MAP' | 'ITER' | 'LOOP' | 'LOOP_LEFT' | 'DIP', [InstructionList]>\n | InstrX<'UNPACK', [MichelsonType]>\n | InstrX<'CONTRACT', [MichelsonType]>\n | InstrX<'CREATE_CONTRACT', [MichelsonContract]>\n | InstrX<'PUSH', [MichelsonType, MichelsonData]>\n | InstrX<'EMPTY_SET', [MichelsonType]>\n | InstrX<'EMPTY_MAP', [MichelsonType, MichelsonType]>\n | InstrX<'EMPTY_BIG_MAP', [MichelsonType, MichelsonType]>\n | InstrX<'LAMBDA', [MichelsonType, MichelsonType, InstructionList]>\n | InstrX<'DIP', [IntLiteral, InstructionList] | [InstructionList]>\n | InstrX<'VIEW', [StringLiteral, MichelsonType]>\n | InstrPrim<'DROP' | 'PAIR' | 'UNPAIR' | 'DUP' | 'GET' | 'UPDATE', [IntLiteral]>;\n\n// Types\n\nexport type MichelsonSimpleComparableTypeID =\n | 'string'\n | 'nat'\n | 'int'\n | 'bytes'\n | 'bool'\n | 'mutez'\n | 'key_hash'\n | 'address'\n | 'timestamp'\n | 'never'\n | 'key'\n | 'unit'\n | 'signature'\n | 'chain_id'\n | 'tx_rollup_l2_address';\n\nexport type MichelsonTypeID =\n | MichelsonSimpleComparableTypeID\n | 'option'\n | 'list'\n | 'set'\n | 'contract'\n | 'operation'\n | 'pair'\n | 'or'\n | 'lambda'\n | 'map'\n | 'big_map'\n | 'sapling_transaction'\n | 'sapling_state'\n | 'ticket'\n | 'bls12_381_g1'\n | 'bls12_381_g2'\n | 'bls12_381_fr'\n | 'chest_key'\n | 'chest';\n\ntype Type0<PT extends MichelsonTypeID> = Prim0<PT>;\ntype TypeX<PT extends MichelsonTypeID, AT extends Expr[]> = PrimX<PT, AT>;\n\n// Michelson types\n\nexport const refContract: unique symbol = Symbol('ref_contract');\nexport interface MichelsonTypeAddress extends Type0<'address'> {\n [refContract]?: MichelsonTypeContract<MichelsonType>;\n}\n\nexport type MichelsonTypeInt = Type0<'int'>;\nexport type MichelsonTypeNat = Type0<'nat'>;\nexport type MichelsonTypeString = Type0<'string'>;\nexport type MichelsonTypeBytes = Type0<'bytes'>;\nexport type MichelsonTypeMutez = Type0<'mutez'>;\nexport type MichelsonTypeBool = Type0<'bool'>;\nexport type MichelsonTypeKeyHash = Type0<'key_hash'>;\nexport type MichelsonTypeTimestamp = Type0<'timestamp'>;\nexport type MichelsonTypeKey = Type0<'key'>;\nexport type MichelsonTypeUnit = Type0<'unit'>;\nexport type MichelsonTypeSignature = Type0<'signature'>;\nexport type MichelsonTypeOperation = Type0<'operation'>;\nexport type MichelsonTypeChainID = Type0<'chain_id'>;\nexport type MichelsonTypeNever = Type0<'never'>;\nexport type MichelsonTypeBLS12_381_G1 = Type0<'bls12_381_g1'>;\nexport type MichelsonTypeBLS12_381_G2 = Type0<'bls12_381_g2'>;\nexport type MichelsonTypeBLS12_381_FR = Type0<'bls12_381_fr'>;\nexport type MichelsonTypeChestKey = Type0<'chest_key'>;\nexport type MichelsonTypeChest = Type0<'chest'>;\n\ntype TypeList<T extends MichelsonType[]> = T & Node;\nexport type MichelsonTypePair<T extends MichelsonType[]> = TypeX<'pair', T> | TypeList<T>;\n\nexport interface MichelsonTypeOption<T extends MichelsonType> extends TypeX<'option', [T]> {}\nexport interface MichelsonTypeList<T extends MichelsonType> extends TypeX<'list', [T]> {}\nexport interface MichelsonTypeContract<T extends MichelsonType> extends TypeX<'contract', [T]> {}\nexport interface MichelsonTypeOr<T extends [MichelsonType, MichelsonType]> extends TypeX<'or', T> {}\nexport interface MichelsonTypeLambda<Arg extends MichelsonType, Ret extends MichelsonType>\n extends TypeX<'lambda', [Arg, Ret]> {}\nexport interface MichelsonTypeSet<T extends MichelsonType> extends TypeX<'set', [T]> {}\nexport interface MichelsonTypeMap<K extends MichelsonType, V extends MichelsonType>\n extends TypeX<'map', [K, V]> {}\nexport interface MichelsonTypeBigMap<K extends MichelsonType, V extends MichelsonType>\n extends TypeX<'big_map', [K, V]> {}\nexport interface MichelsonTypeSaplingState<S extends string = string>\n extends TypeX<'sapling_state', [IntLiteral<S>]> {}\nexport interface MichelsonTypeSaplingTransaction<S extends string = string>\n extends TypeX<'sapling_transaction', [IntLiteral<S>]> {}\nexport interface MichelsonTypeTicket<T extends MichelsonType> extends TypeX<'ticket', [T]> {}\n\nexport type MichelsonType<T extends MichelsonTypeID = MichelsonTypeID> = T extends 'int'\n ? MichelsonTypeInt\n : T extends 'nat'\n ? MichelsonTypeNat\n : T extends 'string'\n ? MichelsonTypeString\n : T extends 'bytes'\n ? MichelsonTypeBytes\n : T extends 'mutez'\n ? MichelsonTypeMutez\n : T extends 'bool'\n ? MichelsonTypeBool\n : T extends 'key_hash'\n ? MichelsonTypeKeyHash\n : T extends 'timestamp'\n ? MichelsonTypeTimestamp\n : T extends 'address'\n ? MichelsonTypeAddress\n : T extends 'key'\n ? MichelsonTypeKey\n : T extends 'unit'\n ? MichelsonTypeUnit\n : T extends 'signature'\n ? MichelsonTypeSignature\n : T extends 'operation'\n ? MichelsonTypeOperation\n : T extends 'chain_id'\n ? MichelsonTypeChainID\n : T extends 'option'\n ? MichelsonTypeOption<MichelsonType>\n : T extends 'list'\n ? MichelsonTypeList<MichelsonType>\n : T extends 'contract'\n ? MichelsonTypeContract<MichelsonType>\n : T extends 'ticket'\n ? MichelsonTypeTicket<MichelsonType>\n : T extends 'pair'\n ? MichelsonTypePair<MichelsonType[]>\n : T extends 'or'\n ? MichelsonTypeOr<[MichelsonType, MichelsonType]>\n : T extends 'lambda'\n ? MichelsonTypeLambda<MichelsonType, MichelsonType>\n : T extends 'set'\n ? MichelsonTypeSet<MichelsonType>\n : T extends 'map'\n ? MichelsonTypeMap<MichelsonType, MichelsonType>\n : T extends 'big_map'\n ? MichelsonTypeBigMap<MichelsonType, MichelsonType>\n : T extends 'never'\n ? MichelsonTypeNever\n : T extends 'bls12_381_g1'\n ? MichelsonTypeBLS12_381_G1\n : T extends 'bls12_381_g2'\n ? MichelsonTypeBLS12_381_G2\n : T extends 'bls12_381_fr'\n ? MichelsonTypeBLS12_381_FR\n : T extends 'sapling_transaction'\n ? MichelsonTypeSaplingTransaction\n : T extends 'sapling_state'\n ? MichelsonTypeSaplingState\n : T extends 'chest_key'\n ? MichelsonTypeChestKey\n : MichelsonTypeChest;\n\n// Data\n\nexport type MichelsonDataID =\n | 'Unit'\n | 'True'\n | 'False'\n | 'None'\n | 'Pair'\n | 'Left'\n | 'Right'\n | 'Some';\n\ntype Data0<PT extends MichelsonDataID> = Prim0<PT>;\ntype DataX<PT extends MichelsonDataID, AT extends MichelsonData[]> = PrimX<PT, AT>;\n\nexport type MichelsonDataOption = DataX<'Some', [MichelsonData]> | Data0<'None'>;\nexport type MichelsonDataOr = DataX<'Left' | 'Right', [MichelsonData]>;\ntype DataList<T extends MichelsonData[]> = T & Node;\nexport type MichelsonDataPair<T extends MichelsonData[]> = DataX<'Pair', T> | DataList<T>;\nexport type MichelsonMapElt = PrimX<'Elt', [MichelsonData, MichelsonData]>;\nexport type MichelsonMapEltList = List<MichelsonMapElt>;\n\nexport type MichelsonData =\n | IntLiteral\n | StringLiteral\n | BytesLiteral\n | Data0<'Unit' | 'True' | 'False'>\n | MichelsonDataOption\n | MichelsonDataOr\n | DataList<MichelsonData[]>\n | MichelsonDataPair<MichelsonData[]>\n | InstructionList\n | MichelsonMapEltList;\n\n// Top level script sections\n\nexport type MichelsonSectionID = 'parameter' | 'storage' | 'code' | 'view';\ntype SectionPrim<PT extends MichelsonSectionID, AT extends Expr[]> = PrimX<PT, AT>;\n\nexport type MichelsonContractParameter = SectionPrim<'parameter', [MichelsonType]>;\nexport type MichelsonContractStorage = SectionPrim<'storage', [MichelsonType]>;\nexport type MichelsonContractCode = SectionPrim<'code', [InstructionList]>;\nexport type MichelsonContractView = SectionPrim<\n 'view',\n [StringLiteral, MichelsonType, MichelsonType, InstructionList]\n>;\n\nexport type MichelsonContract = MichelsonContractSection[];\n\nexport type MichelsonContractSection<T extends MichelsonSectionID = MichelsonSectionID> =\n T extends 'parameter'\n ? MichelsonContractParameter\n : T extends 'storage'\n ? MichelsonContractStorage\n : T extends 'view'\n ? MichelsonContractView\n : MichelsonContractCode;\n\n// Code analysis types\nexport interface MichelsonTypeFailed {\n failed: MichelsonType;\n level: number;\n}\n\nexport type MichelsonReturnType = MichelsonType[] | MichelsonTypeFailed;\n\nexport enum Protocol {\n Ps9mPmXa = 'Ps9mPmXaRzmzk35gbAYNCAw6UXdE2qoABTHbN2oEEc1qM7CwT9P',\n PtCJ7pwo = 'PtCJ7pwoxe8JasnHY8YonnLYjcVHmhiARPJvqcC6VfHT5s8k8sY',\n PsYLVpVv = 'PsYLVpVvgbLhAhoqAkMFUo6gudkJ9weNXhUYCiLDzcUpFpkk8Wt',\n PsddFKi3 = 'PsddFKi32cMJ2qPjf43Qv5GDWLDPZb3T3bF6fLKiF5HtvHNU7aP',\n Pt24m4xi = 'Pt24m4xiPbLDhVgVfABUjirbmda3yohdN82Sp9FeuAXJ4eV9otd',\n PsBABY5H = 'PsBABY5HQTSkA4297zNHfsZNKtxULfL18y95qb3m53QJiXGmrbU',\n PsBabyM1 = 'PsBabyM1eUXZseaJdmXFApDSBqj8YBfwELoxZHHW77EMcAbbwAS',\n PsCARTHA = 'PsCARTHAGazKbHtnKfLzQg3kms52kSRpgnDY982a9oYsSXRLQEb',\n PsDELPH1 = 'PsDELPH1Kxsxt8f9eWbxQeRxkjfbxoqM52jvs5Y5fBxWWh4ifpo',\n PtEdoTez = 'PtEdoTezd3RHSC31mpxxo1npxFjoWWcFgQtxapi51Z8TLu6v6Uq',\n PtEdo2Zk = 'PtEdo2ZkT9oKpimTah6x2embF25oss54njMuPzkJTEi5RqfdZFA',\n PsFLoren = 'PsFLorenaUUuikDWvMDr6fGBRG8kt3e3D3fHoXK1j1BFRxeSH4i',\n PsFLorena = 'PsFLorenaUUuikDWvMDr6fGBRG8kt3e3D3fHoXK1j1BFRxeSH4i',\n PtGRANAD = 'PtGRANADsDU8R9daYKAgWnQYAJ64omN1o3KMGVCykShA97vQbvV',\n PtGRANADs = 'PtGRANADsDU8R9daYKAgWnQYAJ64omN1o3KMGVCykShA97vQbvV',\n PtHangzH = 'PtHangzHogokSuiMHemCuowEavgYTP8J5qQ9fQS793MHYFpCY3r',\n PtHangz2 = 'PtHangz2aRngywmSRGGvrcTyMbbdpWdpFKuS4uMWxg2RaH9i1qx',\n PsiThaCa = 'PsiThaCaT47Zboaw71QWScM8sXeMM7bbQFncK9FLqYc6EKdpjVP',\n Psithaca2 = 'Psithaca2MLRFYargivpo7YvUr7wUDqyxrdhC5CQq78mRvimz6A',\n PtJakarta = 'PtJakartaiDz69SfDDLXJSiuZqTSeSKRDbKVZC8MNzJnvRjvnGw',\n PtJakart2 = 'PtJakart2xVj7pYXJBXrqHgd82rdkLey5ZeeGwDgPp9rhQUbSqY',\n ProtoALpha = 'ProtoALphaALphaALphaALphaALphaALphaALphaALphaDdp3zK', // temporary protocol hash\n}\n\nexport const DefaultProtocol = Protocol.Psithaca2;\n\nexport type ProtocolID = `${Protocol}`;\n\nconst protoLevel: Record<ProtocolID, number> = {\n Ps9mPmXaRzmzk35gbAYNCAw6UXdE2qoABTHbN2oEEc1qM7CwT9P: 0,\n PtCJ7pwoxe8JasnHY8YonnLYjcVHmhiARPJvqcC6VfHT5s8k8sY: 1,\n PsYLVpVvgbLhAhoqAkMFUo6gudkJ9weNXhUYCiLDzcUpFpkk8Wt: 2,\n PsddFKi32cMJ2qPjf43Qv5GDWLDPZb3T3bF6fLKiF5HtvHNU7aP: 3,\n Pt24m4xiPbLDhVgVfABUjirbmda3yohdN82Sp9FeuAXJ4eV9otd: 4,\n PsBABY5HQTSkA4297zNHfsZNKtxULfL18y95qb3m53QJiXGmrbU: 5,\n PsBabyM1eUXZseaJdmXFApDSBqj8YBfwELoxZHHW77EMcAbbwAS: 5,\n PsCARTHAGazKbHtnKfLzQg3kms52kSRpgnDY982a9oYsSXRLQEb: 6,\n PsDELPH1Kxsxt8f9eWbxQeRxkjfbxoqM52jvs5Y5fBxWWh4ifpo: 7,\n PtEdoTezd3RHSC31mpxxo1npxFjoWWcFgQtxapi51Z8TLu6v6Uq: 8,\n PtEdo2ZkT9oKpimTah6x2embF25oss54njMuPzkJTEi5RqfdZFA: 8,\n PsFLorenaUUuikDWvMDr6fGBRG8kt3e3D3fHoXK1j1BFRxeSH4i: 9,\n PtGRANADsDU8R9daYKAgWnQYAJ64omN1o3KMGVCykShA97vQbvV: 10,\n PtHangzHogokSuiMHemCuowEavgYTP8J5qQ9fQS793MHYFpCY3r: 11,\n PtHangz2aRngywmSRGGvrcTyMbbdpWdpFKuS4uMWxg2RaH9i1qx: 11,\n PsiThaCaT47Zboaw71QWScM8sXeMM7bbQFncK9FLqYc6EKdpjVP: 12,\n Psithaca2MLRFYargivpo7YvUr7wUDqyxrdhC5CQq78mRvimz6A: 12,\n PtJakartaiDz69SfDDLXJSiuZqTSeSKRDbKVZC8MNzJnvRjvnGw: 13,\n PtJakart2xVj7pYXJBXrqHgd82rdkLey5ZeeGwDgPp9rhQUbSqY: 13,\n ProtoALphaALphaALphaALphaALphaALphaALphaALphaDdp3zK: 14,\n};\n\nexport function ProtoGreaterOfEqual(a: ProtocolID, b: ProtocolID): boolean {\n return protoLevel[a] >= protoLevel[b];\n}\n\nexport function ProtoInferiorTo(a: ProtocolID, b: ProtocolID): boolean {\n return protoLevel[a] < protoLevel[b];\n}\n\nexport interface ProtocolOptions {\n protocol?: ProtocolID;\n}\n","import { Prim, Expr, IntLiteral } from './micheline';\nimport { DefaultProtocol, Protocol, ProtocolOptions, ProtoInferiorTo } from './michelson-types';\nimport { Tuple, NoArgs, ReqArgs, NoAnnots } from './utils';\n\n/**\n * @category Error\n * @description Indicates that an error has occurred preventing macros from being expanded in a plain Michelson input\n */\nexport class MacroError extends Error {\n constructor(public prim: Prim, message?: string) {\n super(message);\n Object.setPrototypeOf(this, MacroError.prototype);\n }\n}\n\nfunction assertArgs<N extends number>(\n ex: Prim,\n n: N\n): ex is N extends 0 ? NoArgs<Prim<string>> : ReqArgs<Prim<string, Tuple<N, Expr>>> {\n if ((n === 0 && ex.args === undefined) || ex.args?.length === n) {\n return true;\n }\n throw new MacroError(ex, `macro ${ex.prim} expects ${n} arguments, was given ${ex.args?.length}`);\n}\n\nfunction assertNoAnnots(ex: Prim): ex is NoAnnots<Prim> {\n if (ex.annots === undefined) {\n return true;\n }\n throw new MacroError(ex, `unexpected annotation on macro ${ex.prim}: ${ex.annots}`);\n}\n\nfunction assertIntArg(ex: Prim, arg: Expr): arg is IntLiteral {\n if ('int' in arg) {\n return true;\n }\n throw new MacroError(ex, `macro ${ex.prim} expects int argument`);\n}\n\ntype PT = [number, [string | null, string | null]];\n\nfunction parsePairUnpairExpr(\n p: Prim,\n expr: string,\n annotations: string[],\n agg: (l: PT[] | undefined, r: PT[] | undefined, top: PT) => PT[]\n): { r: PT[]; n: number; an: number } {\n let i = 0;\n let ai = 0;\n const ann: [string | null, string | null] = [null, null];\n\n // Left expression\n let lexpr: PT[] | undefined;\n if (i === expr.length) {\n throw new MacroError(p, `unexpected end: ${p.prim}`);\n }\n let c = expr[i++];\n switch (c) {\n case 'P': {\n const { r, n, an } = parsePairUnpairExpr(p, expr.slice(i), annotations.slice(ai), agg);\n lexpr = r;\n i += n;\n ai += an;\n break;\n }\n case 'A':\n if (ai !== annotations.length) {\n ann[0] = annotations[ai++];\n }\n break;\n default:\n throw new MacroError(p, `${p.prim}: unexpected character: ${c}`);\n }\n\n // Right expression\n let rexpr: PT[] | undefined;\n if (i === expr.length) {\n throw new MacroError(p, `unexpected end: ${p.prim}`);\n }\n c = expr[i++];\n switch (c) {\n case 'P': {\n const { r, n, an } = parsePairUnpairExpr(p, expr.slice(i), annotations.slice(ai), agg);\n rexpr = r.map<PT>(([v, a]) => [v + 1, a]);\n i += n;\n ai += an;\n break;\n }\n case 'I':\n if (ai !== annotations.length) {\n ann[1] = annotations[ai++];\n }\n break;\n default:\n throw new MacroError(p, `${p.prim}: unexpected character: ${c}`);\n }\n\n return { r: agg(lexpr, rexpr, [0, ann]), n: i, an: ai };\n}\n\nfunction parseSetMapCadr(p: Prim, expr: string, vann: string[], term: { a: Expr; d: Expr }): Expr {\n const c = expr[0];\n switch (c) {\n case 'A':\n return expr.length > 1\n ? [\n { prim: 'DUP' },\n {\n prim: 'DIP',\n args: [\n [{ prim: 'CAR', annots: ['@%%'] }, parseSetMapCadr(p, expr.slice(1), [], term)],\n ],\n },\n { prim: 'CDR', annots: ['@%%'] },\n { prim: 'SWAP' },\n { prim: 'PAIR', annots: ['%@', '%@', ...vann] },\n ]\n : term.a;\n\n case 'D':\n return expr.length > 1\n ? [\n { prim: 'DUP' },\n {\n prim: 'DIP',\n args: [\n [{ prim: 'CDR', annots: ['@%%'] }, parseSetMapCadr(p, expr.slice(1), [], term)],\n ],\n },\n { prim: 'CAR', annots: ['@%%'] },\n { prim: 'PAIR', annots: ['%@', '%@', ...vann] },\n ]\n : term.d;\n\n default:\n throw new MacroError(p, `${p.prim}: unexpected character: ${c}`);\n }\n}\n\nfunction trimLast<T>(a: T[], v: T): T[] {\n let l = a.length;\n while (l > 0 && a[l - 1] === v) {\n l--;\n }\n return a.slice(0, l);\n}\n\nfunction filterAnnotations(a?: string[]): {\n fields: string[];\n rest: string[];\n} {\n const fields: string[] = [];\n const rest: string[] = [];\n if (a !== undefined) {\n for (const v of a) {\n (v.length !== 0 && v[0] === '%' ? fields : rest).push(v);\n }\n }\n return { fields, rest };\n}\n\nfunction mkPrim({ prim, annots, args }: Prim): Prim {\n return {\n prim,\n ...(annots && { annots }),\n ...(args && { args }),\n };\n}\n\nconst pairRe = /^P[PAI]{3,}R$/;\nconst unpairRe = /^UNP[PAI]{2,}R$/;\nconst cadrRe = /^C[AD]{2,}R$/;\nconst setCadrRe = /^SET_C[AD]+R$/;\nconst mapCadrRe = /^MAP_C[AD]+R$/;\nconst diipRe = /^DI{2,}P$/;\nconst duupRe = /^DU+P$/;\n\nexport function expandMacros(ex: Prim, opt?: ProtocolOptions): Expr {\n const proto = opt?.protocol || DefaultProtocol;\n\n function mayRename(annots?: string[]): Prim[] {\n return annots !== undefined ? [{ prim: 'RENAME', annots }] : [];\n }\n\n switch (ex.prim) {\n // Compare\n case 'CMPEQ':\n case 'CMPNEQ':\n case 'CMPLT':\n case 'CMPGT':\n case 'CMPLE':\n case 'CMPGE':\n if (assertArgs(ex, 0)) {\n return [{ prim: 'COMPARE' }, mkPrim({ prim: ex.prim.slice(3), annots: ex.annots })];\n }\n break;\n\n case 'IFEQ':\n case 'IFNEQ':\n case 'IFLT':\n case 'IFGT':\n case 'IFLE':\n case 'IFGE':\n if (assertArgs(ex, 2)) {\n return [\n { prim: ex.prim.slice(2) },\n mkPrim({ prim: 'IF', annots: ex.annots, args: ex.args }),\n ];\n }\n break;\n\n case 'IFCMPEQ':\n case 'IFCMPNEQ':\n case 'IFCMPLT':\n case 'IFCMPGT':\n case 'IFCMPLE':\n case 'IFCMPGE':\n if (assertArgs(ex, 2)) {\n return [\n { prim: 'COMPARE' },\n { prim: ex.prim.slice(5) },\n mkPrim({ prim: 'IF', annots: ex.annots, args: ex.args }),\n ];\n }\n break;\n\n // Fail\n case 'FAIL':\n if (assertArgs(ex, 0) && assertNoAnnots(ex)) {\n return [{ prim: 'UNIT' }, { prim: 'FAILWITH' }];\n }\n break;\n\n // Assertion macros\n case 'ASSERT':\n if (assertArgs(ex, 0) && assertNoAnnots(ex)) {\n return [\n {\n prim: 'IF',\n args: [[], [[{ prim: 'UNIT' }, { prim: 'FAILWITH' }]]],\n },\n ];\n }\n break;\n\n case 'ASSERT_EQ':\n case 'ASSERT_NEQ':\n case 'ASSERT_LT':\n case 'ASSERT_GT':\n case 'ASSERT_LE':\n case 'ASSERT_GE':\n if (assertArgs(ex, 0) && assertNoAnnots(ex)) {\n return [\n { prim: ex.prim.slice(7) },\n {\n prim: 'IF',\n args: [[], [[{ prim: 'UNIT' }, { prim: 'FAILWITH' }]]],\n },\n ];\n }\n break;\n\n case 'ASSERT_CMPEQ':\n case 'ASSERT_CMPNEQ':\n case 'ASSERT_CMPLT':\n case 'ASSERT_CMPGT':\n case 'ASSERT_CMPLE':\n case 'ASSERT_CMPGE':\n if (assertArgs(ex, 0) && assertNoAnnots(ex)) {\n return [\n [{ prim: 'COMPARE' }, { prim: ex.prim.slice(10) }],\n {\n prim: 'IF',\n args: [[], [[{ prim: 'UNIT' }, { prim: 'FAILWITH' }]]],\n },\n ];\n }\n break;\n\n case 'ASSERT_NONE':\n if (assertArgs(ex, 0) && assertNoAnnots(ex)) {\n return [\n {\n prim: 'IF_NONE',\n args: [[], [[{ prim: 'UNIT' }, { prim: 'FAILWITH' }]]],\n },\n ];\n }\n break;\n\n case 'ASSERT_SOME':\n if (assertArgs(ex, 0)) {\n return [\n {\n prim: 'IF_NONE',\n args: [[[{ prim: 'UNIT' }, { prim: 'FAILWITH' }]], mayRename(ex.annots)],\n },\n ];\n }\n break;\n\n case 'ASSERT_LEFT':\n if (assertArgs(ex, 0)) {\n return [\n {\n prim: 'IF_LEFT',\n args: [mayRename(ex.annots), [[{ prim: 'UNIT' }, { prim: 'FAILWITH' }]]],\n },\n ];\n }\n break;\n\n case 'ASSERT_RIGHT':\n if (assertArgs(ex, 0)) {\n return [\n {\n prim: 'IF_LEFT',\n args: [[[{ prim: 'UNIT' }, { prim: 'FAILWITH' }]], mayRename(ex.annots)],\n },\n ];\n }\n break;\n\n // Syntactic conveniences\n\n case 'IF_SOME':\n if (assertArgs(ex, 2)) {\n return [mkPrim({ prim: 'IF_NONE', annots: ex.annots, args: [ex.args[1], ex.args[0]] })];\n }\n break;\n\n case 'IF_RIGHT':\n if (assertArgs(ex, 2)) {\n return [mkPrim({ prim: 'IF_LEFT', annots: ex.annots, args: [ex.args[1], ex.args[0]] })];\n }\n break;\n\n // CAR/CDR n\n case 'CAR':\n case 'CDR':\n if (ex.args !== undefined) {\n if (assertArgs(ex, 1) && assertIntArg(ex, ex.args[0])) {\n const n = parseInt(ex.args[0].int, 10);\n return mkPrim({\n prim: 'GET',\n args: [{ int: ex.prim === 'CAR' ? String(n * 2 + 1) : String(n * 2) }],\n annots: ex.annots,\n });\n }\n } else {\n return ex;\n }\n }\n\n // More syntactic conveniences\n\n // PAPPAIIR macro\n if (pairRe.test(ex.prim)) {\n if (assertArgs(ex, 0)) {\n const { fields, rest } = filterAnnotations(ex.annots);\n const { r } = parsePairUnpairExpr(ex, ex.prim.slice(1), fields, (l, r, top) => [\n ...(l || []),\n ...(r || []),\n top,\n ]);\n\n return r.map(([v, a], i) => {\n const ann = [\n ...trimLast(a, null).map((v) => (v === null ? '%' : v)),\n ...(v === 0 && i === r.length - 1 ? rest : []),\n ];\n\n const leaf = mkPrim({ prim: 'PAIR', annots: ann.length !== 0 ? ann : undefined });\n\n return v === 0\n ? leaf\n : {\n prim: 'DIP',\n args: v === 1 ? [[leaf]] : [{ int: String(v) }, [leaf]],\n };\n });\n }\n }\n\n // UNPAPPAIIR macro\n if (unpairRe.test(ex.prim)) {\n if (ProtoInferiorTo(proto, Protocol.PtEdo2Zk) && assertArgs(ex, 0)) {\n const { r } = parsePairUnpairExpr(ex, ex.prim.slice(3), ex.annots || [], (l, r, top) => [\n top,\n ...(r || []),\n ...(l || []),\n ]);\n return r.map(([v, a]) => {\n const leaf: Prim[] = [\n { prim: 'DUP' },\n mkPrim({ prim: 'CAR', annots: a[0] !== null ? [a[0]] : undefined }),\n {\n prim: 'DIP',\n args: [[mkPrim({ prim: 'CDR', annots: a[1] !== null ? [a[1]] : undefined })]],\n },\n ];\n\n return v === 0\n ? leaf\n : {\n prim: 'DIP',\n args: v === 1 ? [[leaf]] : [{ int: String(v) }, [leaf]],\n };\n });\n } else {\n if (ex.prim === 'UNPAIR') {\n return ex;\n }\n if (assertArgs(ex, 0)) {\n // 008_edo: annotations are deprecated\n const { r } = parsePairUnpairExpr(ex, ex.prim.slice(3), [], (l, r, top) => [\n top,\n ...(r || []),\n ...(l || []),\n ]);\n return r.map(([v]) => {\n const leaf = mkPrim({\n prim: 'UNPAIR',\n });\n\n return v === 0\n ? leaf\n : {\n prim: 'DIP',\n args: v === 1 ? [[leaf]] : [{ int: String(v) }, [leaf]],\n };\n });\n }\n }\n }\n\n // C[AD]+R macro\n if (cadrRe.test(ex.prim)) {\n if (assertArgs(ex, 0)) {\n const ch = [...ex.prim.slice(1, ex.prim.length - 1)];\n\n return ch.map<Prim>((c, i) => {\n const ann = i === ch.length - 1 ? ex.annots : undefined;\n switch (c) {\n case 'A':\n return mkPrim({ prim: 'CAR', annots: ann });\n case 'D':\n return mkPrim({ prim: 'CDR', annots: ann });\n default:\n throw new MacroError(ex, `unexpected character: ${c}`);\n }\n });\n }\n }\n\n // SET_C[AD]+R macro\n if (setCadrRe.test(ex.prim)) {\n if (assertArgs(ex, 0)) {\n const { fields, rest } = filterAnnotations(ex.annots);\n if (fields.length > 1) {\n throw new MacroError(ex, `unexpected annotation on macro ${ex.prim}: ${fields}`);\n }\n\n const term =\n fields.length !== 0\n ? {\n a: [\n { prim: 'DUP' },\n { prim: 'CAR', annots: fields },\n { prim: 'DROP' },\n { prim: 'CDR', annots: ['@%%'] },\n { prim: 'SWAP' },\n { prim: 'PAIR', annots: [fields[0], '%@'] },\n ],\n d: [\n { prim: 'DUP' },\n { prim: 'CDR', annots: fields },\n { prim: 'DROP' },\n { prim: 'CAR', annots: ['@%%'] },\n { prim: 'PAIR', annots: ['%@', fields[0]] },\n ],\n }\n : {\n a: [\n { prim: 'CDR', annots: ['@%%'] },\n { prim: 'SWAP' },\n { prim: 'PAIR', annots: ['%', '%@'] },\n ],\n d: [\n { prim: 'CAR', annots: ['@%%'] },\n { prim: 'PAIR', annots: ['%@', '%'] },\n ],\n };\n\n return parseSetMapCadr(ex, ex.prim.slice(5, ex.prim.length - 1), rest, term);\n }\n }\n\n // MAP_C[AD]+R macro\n if (mapCadrRe.test(ex.prim)) {\n if (assertArgs(ex, 1)) {\n const { fields } = filterAnnotations(ex.annots);\n if (fields.length > 1) {\n throw new MacroError(ex, `unexpected annotation on macro ${ex.prim}: ${fields}`);\n }\n\n const term = {\n a: [\n { prim: 'DUP' },\n { prim: 'CDR', annots: ['@%%'] },\n {\n prim: 'DIP',\n args: [\n [\n mkPrim({\n prim: 'CAR',\n annots: fields.length !== 0 ? ['@' + fields[0].slice(1)] : undefined,\n }),\n ex.args[0],\n ],\n ],\n },\n { prim: 'SWAP' },\n { prim: 'PAIR', annots: [fields.length !== 0 ? fields[0] : '%', '%@'] },\n ],\n d: [\n { prim: 'DUP' },\n mkPrim({\n prim: 'CDR',\n annots: fields.length !== 0 ? ['@' + fields[0].slice(1)] : undefined,\n }),\n ex.args[0],\n { prim: 'SWAP' },\n { prim: 'CAR', annots: ['@%%'] },\n { prim: 'PAIR', annots: ['%@', fields.length !== 0 ? fields[0] : '%'] },\n ],\n };\n\n return parseSetMapCadr(ex, ex.prim.slice(5, ex.prim.length - 1), [], term);\n }\n }\n\n // Expand deprecated DI...IP to [DIP n]\n if (diipRe.test(ex.prim)) {\n if (assertArgs(ex, 1)) {\n let n = 0;\n while (ex.prim[1 + n] === 'I') {\n n++;\n }\n return mkPrim({ prim: 'DIP', args: [{ int: String(n) }, ex.args[0]] });\n }\n }\n\n // Expand DU...UP and DUP n\n if (duupRe.test(ex.prim)) {\n let n = 0;\n while (ex.prim[1 + n] === 'U') {\n n++;\n }\n if (ProtoInferiorTo(proto, Protocol.PtEdo2Zk)) {\n if (n === 1) {\n if (ex.args === undefined) {\n return ex; // skip\n }\n if (assertArgs(ex, 1) && assertIntArg(ex, ex.args[0])) {\n n = parseInt(ex.args[0].int, 10);\n }\n } else {\n assertArgs(ex, 0);\n }\n\n if (n === 1) {\n return [mkPrim({ prim: 'DUP', annots: ex.annots })];\n } else if (n === 2) {\n return [\n {\n prim: 'DIP',\n args: [[mkPrim({ prim: 'DUP', annots: ex.annots })]],\n },\n { prim: 'SWAP' },\n ];\n } else {\n return [\n {\n prim: 'DIP',\n args: [{ int: String(n - 1) }, [mkPrim({ prim: 'DUP', annots: ex.annots })]],\n },\n {\n prim: 'DIG',\n args: [{ int: String(n) }],\n },\n ];\n }\n } else {\n if (n === 1) {\n return ex;\n }\n if (assertArgs(ex, 0)) {\n return mkPrim({ prim: 'DUP', args: [{ int: String(n) }], annots: ex.annots });\n }\n }\n }\n\n return ex;\n}\n","import { Prim, Expr } from './micheline';\nimport { GlobalConstantHashAndValue } from './micheline-parser';\n\nexport function expandGlobalConstants(ex: Prim, hashAndValue: GlobalConstantHashAndValue): Expr {\n if (\n ex.args !== undefined &&\n ex.args.length === 1 &&\n 'string' in ex.args[0] &&\n ex.args[0].string in hashAndValue\n ) {\n return hashAndValue[ex.args[0].string];\n }\n\n return ex;\n}\n","import { scan, Token, Literal } from './scan';\nimport {\n Expr,\n Prim,\n StringLiteral,\n IntLiteral,\n BytesLiteral,\n sourceReference,\n List,\n SourceReference,\n} from './micheline';\nimport { expandMacros } from './macros';\nimport { ProtocolOptions } from './michelson-types';\nimport { expandGlobalConstants } from './global-constants';\n\n/**\n * @category Error\n * @description Error indicating a failure when parsing Micheline expressions\n */\nexport class MichelineParseError extends Error {\n /**\n * @param token A token caused the error\n * @param message An error message\n */\n constructor(public token: Token | null, message?: string) {\n super(message);\n Object.setPrototypeOf(this, MichelineParseError.prototype);\n }\n}\n\n/**\n * @category Error\n * @description Error that inidicates a failure when parsing Micheline JSON\n */\nexport class JSONParseError extends Error {\n /**\n * @param node A node caused the error\n * @param message An error message\n */\n constructor(public node: unknown, message?: string) {\n super(message);\n Object.setPrototypeOf(this, JSONParseError.prototype);\n }\n}\n\nexport interface GlobalConstantHashAndValue {\n [globalConstantHash: string]: Expr;\n}\n\nconst errEOF = new MichelineParseError(null, 'Unexpected EOF');\n\nfunction isAnnotation(tok: Token): boolean {\n return tok.t === Literal.Ident && (tok.v[0] === '@' || tok.v[0] === '%' || tok.v[0] === ':');\n}\n\nconst intRe = new RegExp('^-?[0-9]+$');\nconst bytesRe = new RegExp('^([0-9a-fA-F]{2})*$');\n\nexport interface ParserOptions extends ProtocolOptions {\n /**\n * Expand [Michelson macros](https://tezos.gitlab.io/whitedoc/michelson.html#macros) during parsing.\n */\n expandMacros?: boolean;\n /**\n * Expand global constants during parsing.\n * `expandGlobalConstant` expects an object where the keys are global constant hashes and the values are the corresponding JSON Micheline expressions.\n * @example\n * ```\n * const parserOptions: ParserOptions = {\n * expandGlobalConstant: {\n * 'expr...': { prim: 'DROP', args: [{ int: '2' }] }\n * }\n * }\n *\n * const p = new Parser(parserOptions);\n * ```\n */\n expandGlobalConstant?: GlobalConstantHashAndValue;\n}\n\n/**\n * Converts and validates Michelson expressions between JSON-based Michelson and Micheline\n *\n * Pretty Print a Michelson Smart Contract:\n * ```\n * const contract = await Tezos.contract.at(\"KT1Vsw3kh9638gqWoHTjvHCoHLPKvCbMVbCg\");\n * const p = new Parser();\n *\n * const michelsonCode = p.parseJSON(contract.script.code);\n * const storage = p.parseJSON(contract.script.storage);\n *\n * console.log(\"Pretty print Michelson smart contract:\");\n * console.log(emitMicheline(michelsonCode, {indent:\" \", newline: \"\\n\",}));\n *\n * console.log(\"Pretty print Storage:\");\n * console.log(emitMicheline(storage, {indent:\" \", newline: \"\\n\",}));\n * ```\n *\n * Encode a Michelson expression for inital storage of a smart contract\n * ```\n * const src = `(Pair (Pair { Elt 1\n * (Pair (Pair \"tz1gjaF81ZRRvdzjobyfVNsAeSC6PScjfQwN\" \"tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx\")\n * 0x0501000000026869) }\n * 10000000)\n * (Pair 2 333))`;\n *\n * const p = new Parser();\n *\n * const exp = p.parseMichelineExpression(src);\n * console.log(JSON.stringify(exp));\n * ```\n */\nexport class Parser {\n constructor(private opt?: ParserOptions) {}\n\n private expand(ex: Prim): Expr {\n if (this.opt?.expandGlobalConstant !== undefined && ex.prim === 'constant') {\n const ret = expandGlobalConstants(ex, this.opt.expandGlobalConstant);\n if (ret !== ex) {\n ret[sourceReference] = {\n ...(ex[sourceReference] || { first: 0, last: 0 }),\n globalConstant: ex,\n };\n }\n return ret;\n }\n if (this.opt?.expandMacros !== undefined ? this.opt?.expandMacros : true) {\n const ret = expandMacros(ex, this.opt);\n if (ret !== ex) {\n ret[sourceReference] = { ...(ex[sourceReference] || { first: 0, last: 0 }), macro: ex };\n }\n return ret;\n } else {\n return ex;\n }\n }\n\n private parseListExpr(scanner: Iterator<Token>, start: Token): Expr {\n const ref: SourceReference = {\n first: start.first,\n last: start.last,\n };\n\n const expectBracket = start.t === '(';\n let tok: IteratorResult<Token>;\n if (expectBracket) {\n tok = scanner.next();\n if (tok.done) {\n throw errEOF;\n }\n ref.last = tok.value.last;\n } else {\n tok = { value: start };\n }\n\n if (tok.value.t !== Literal.Ident) {\n throw new MichelineParseError(tok.value, `not an identifier: ${tok.value.v}`);\n }\n\n const ret: Prim = {\n prim: tok.value.v,\n [sourceReference]: ref,\n };\n\n for (;;) {\n const tok = scanner.next();\n if (tok.done) {\n if (expectBracket) {\n throw errEOF;\n }\n break;\n } else if (tok.value.t === ')') {\n if (!expectBracket) {\n throw new MichelineParseError(tok.value, 'unexpected closing bracket');\n }\n ref.last = tok.value.last;\n break;\n } else if (isAnnotation(tok.value)) {\n ret.annots = ret.annots || [];\n ret.annots.push(tok.value.v);\n ref.last = tok.value.last;\n } else {\n ret.args = ret.args || [];\n const arg = this.parseExpr(scanner, tok.value);\n ref.last = arg[sourceReference]?.last || ref.last;\n ret.args.push(arg);\n }\n }\n return this.expand(ret);\n }\n\n private parseArgs(scanner: Iterator<Token>, start: Token): [Prim, IteratorResult<Token>] {\n // Identifier with arguments\n const ref: SourceReference = {\n first: start.first,\n last: start.last,\n };\n const p: Prim = {\n prim: start.v,\n [sourceReference]: ref,\n };\n\n for (;;) {\n const t = scanner.next();\n if (t.done || t.value.t === '}' || t.value.t === ';') {\n return [p, t];\n }\n\n if (isAnnotation(t.value)) {\n ref.last = t.value.last;\n p.annots = p.annots || [];\n p.annots.push(t.value.v);\n } else {\n const arg = this.parseExpr(scanner, t.value);\n ref.last = arg[sourceReference]?.last || ref.last;\n p.args = p.args || [];\n p.args.push(arg);\n }\n }\n }\n\n private parseSequenceExpr(scanner: Iterator<Token>, start: Token): List<Expr> {\n const ref: SourceReference = {\n first: start.first,\n last: start.last,\n };\n const seq: List<Expr> = [];\n seq[sourceReference] = ref;\n\n const expectBracket = start.t === '{';\n let tok: IteratorResult<Token> | null = start.t === '{' ? null : { value: start };\n\n for (;;) {\n if (tok === null) {\n tok = scanner.next();\n if (!tok.done) {\n ref.last = tok.value.last;\n }\n }\n if (tok.done) {\n if (expectBracket) {\n throw errEOF;\n } else {\n return seq;\n }\n }\n\n if (tok.value.t === '}') {\n if (!expectBracket) {\n throw new MichelineParseError(tok.value, 'unexpected closing bracket');\n } else {\n return seq;\n }\n } else if (tok.value.t === Literal.Ident) {\n // Identifier with arguments\n const [itm, n] = this.parseArgs(scanner, tok.value);\n ref.last = itm[sourceReference]?.last || ref.last;\n seq.push(this.expand(itm));\n tok = n;\n } else {\n // Other\n const ex = this.parseExpr(scanner, tok.value);\n ref.last = ex[sourceReference]?.last || ref.last;\n seq.push(ex);\n tok = null;\n }\n\n if (tok === null) {\n tok = scanner.next();\n if (!tok.done) {\n ref.last = tok.value.last;\n }\n }\n if (!tok.done && tok.value.t === ';') {\n tok = null;\n }\n }\n }\n\n private parseExpr(scanner: Iterator<Token>, tok: Token): Expr {\n switch (tok.t) {\n case Literal.Ident:\n return this.expand({\n prim: tok.v,\n [sourceReference]: { first: tok.first, last: tok.last },\n });\n\n case Literal.Number:\n return { int: tok.v, [sourceReference]: { first: tok.first, last: tok.last } };\n\n case Literal.String:\n return {\n string: JSON.parse(tok.v) as string,\n [sourceReference]: { first: tok.first, last: tok.last },\n };\n\n case Literal.Bytes:\n return { bytes: tok.v.slice(2), [sourceReference]: { first: tok.first, last: tok.last } };\n\n case '{':\n return this.parseSequenceExpr(scanner, tok);\n\n default:\n return this.parseListExpr(scanner, tok);\n }\n }\n\n /**\n * Parses a Micheline sequence expression, such as smart contract source. Enclosing curly brackets may be omitted.\n * @param src A Micheline sequence `{parameter ...; storage int; code { DUP ; ...};}` or `parameter ...; storage int; code { DUP ; ...};`\n */\n parseSequence(src: string): Expr[] | null {\n if (typeof src !== 'string') {\n throw new TypeError(`string type was expected, got ${typeof src} instead`);\n }\n\n const scanner = scan(src);\n const tok = scanner.next();\n if (tok.done) {\n return null;\n }\n return this.parseSequenceExpr(scanner, tok.value);\n }\n\n /**\n * Parse a Micheline sequence expression. Enclosing curly brackets may be omitted.\n * @param src A Michelson list expression such as `(Pair {Elt \"0\" 0} 0)` or `Pair {Elt \"0\" 0} 0`\n * @returns An AST node or null for empty document.\n */\n parseList(src: string): Expr | null {\n if (typeof src !== 'string') {\n throw new TypeError(`string type was expected, got ${typeof src} instead`);\n }\n\n const scanner = scan(src);\n const tok = scanner.next();\n if (tok.done) {\n return null;\n }\n return this.parseListExpr(scanner, tok.value);\n }\n\n /**\n * Parse any Michelson expression\n * @param src A Michelson expression such as `(Pair {Elt \"0\" 0} 0)` or `{parameter ...; storage int; code { DUP ; ...};}`\n * @returns An AST node or null for empty document.\n */\n parseMichelineExpression(src: string): Expr | null {\n if (typeof src !== 'string') {\n throw new TypeError(`string type was expected, got ${typeof src} instead`);\n }\n\n const scanner = scan(src);\n const tok = scanner.next();\n if (tok.done) {\n return null;\n }\n return this.parseExpr(scanner, tok.value);\n }\n\n /**\n * Parse a Micheline sequence expression, such as smart contract source. Enclosing curly brackets may be omitted.\n * An alias for `parseSequence`\n * @param src A Micheline sequence `{parameter ...; storage int; code { DUP ; ...};}` or `parameter ...; storage int; code { DUP ; ...};`\n */\n parseScript(src: string): Expr[] | null {\n return this.parseSequence(src);\n }\n\n /**\n * Parse a Micheline sequence expression. Enclosing curly brackets may be omitted.\n * An alias for `parseList`\n * @param src A Michelson list expression such as `(Pair {Elt \"0\" 0} 0)` or `Pair {Elt \"0\" 0} 0`\n * @returns An AST node or null for empty document.\n */\n parseData(src: string): Expr | null {\n return this.parseList(src);\n }\n\n /**\n * Takes a JSON-encoded Michelson, validates it, strips away unneeded properties and optionally expands macros (See {@link ParserOptions}).\n * @param src An object containing JSON-encoded Michelson, usually returned by `JSON.parse()`\n */\n parseJSON(src: object): Expr {\n if (typeof src !== 'object') {\n throw new TypeError(`object type was expected, got ${typeof src} instead`);\n }\n\n if (Array.isArray(src)) {\n const ret: Expr[] = [];\n for (const n of src) {\n if (n === null || typeof n !== 'object') {\n throw new JSONParseError(n, `unexpected sequence element: ${n}`);\n }\n ret.push(this.parseJSON(n));\n }\n return ret;\n } else if ('prim' in src) {\n const p = src as { prim: unknown; annots?: unknown[]; args?: unknown[] };\n if (\n typeof p.prim === 'string' &&\n (p.annots === undefined || Array.isArray(p.annots)) &&\n (p.args === undefined || Array.isArray(p.args))\n ) {\n const ret: Prim = {\n prim: p.prim,\n };\n\n if (p.annots !== undefined) {\n for (const a of p.annots) {\n if (typeof a !== 'string') {\n throw new JSONParseError(a, `string expected: ${a}`);\n }\n }\n ret.annots = p.annots;\n }\n\n if (p.args !== undefined) {\n ret.args = [];\n for (const a of p.args) {\n if (a === null || typeof a !== 'object') {\n throw new JSONParseError(a, `unexpected argument: ${a}`);\n }\n ret.args.push(this.parseJSON(a));\n }\n }\n\n return this.expand(ret);\n }\n\n throw new JSONParseError(src, `malformed prim expression: ${src}`);\n } else if ('string' in src) {\n if (typeof (src as StringLiteral).string === 'string') {\n return { string: (src as StringLiteral).string };\n }\n\n throw new JSONParseError(src, `malformed string literal: ${src}`);\n } else if ('int' in src) {\n if (typeof (src as IntLiteral).int === 'string' && intRe.test((src as IntLiteral).int)) {\n return { int: (src as IntLiteral).int };\n }\n\n throw new JSONParseError(src, `malformed int literal: ${src}`);\n } else if ('bytes' in src) {\n if (\n typeof (src as BytesLiteral).bytes === 'string' &&\n bytesRe.test((src as BytesLiteral).bytes)\n ) {\n return { bytes: (src as BytesLiteral).bytes };\n }\n\n throw new JSONParseError(src, `malformed bytes literal: ${src}`);\n } else {\n throw new JSONParseError(src, `unexpected object: ${src}`);\n }\n }\n}\n","import { Expr, Prim, sourceReference } from './micheline';\n\nexport interface FormatOptions {\n /**\n * A string used for code indentation if desired. Usually a tab character or a number of spaces.\n */\n indent?: string;\n /**\n * A string used for line separation. Usually a newline character (\"\\n\");\n */\n newline?: string;\n}\n\nclass Formatter {\n constructor(private opt?: FormatOptions, private lev: number = 0) {}\n\n indent(n = 0): string {\n let ret = '';\n if (this.opt?.indent !== undefined) {\n for (let i = this.lev + n; i > 0; i--) {\n ret += this.opt.indent;\n }\n }\n return ret;\n }\n\n get lf(): string {\n return this.opt?.newline || '';\n }\n\n get lfsp(): string {\n return this.opt?.newline || ' ';\n }\n\n down(n: number): Formatter {\n return new Formatter(this.opt, this.lev + n);\n }\n}\n\nfunction hasArgs(node: Expr): node is Prim {\n return (\n 'prim' in node &&\n ((node.annots !== undefined && node.annots.length !== 0) ||\n (node.args !== undefined && node.args.length !== 0))\n );\n}\n\nfunction isMultiline(node: Prim): boolean {\n if (node.args !== undefined) {\n for (const a of node.args) {\n if (Array.isArray(a) || hasArgs(a)) {\n return true;\n }\n }\n }\n return false;\n}\n\nfunction emitExpr(node: Expr, f: Formatter, foldMacros: boolean): string {\n const macro = node[sourceReference]?.macro;\n if (foldMacros && macro) {\n return emitExpr(macro, f, foldMacros);\n }\n\n if (Array.isArray(node)) {\n return emitSeq(node, f, foldMacros);\n } else if ('string' in node) {\n return JSON.stringify(node.string);\n } else if ('int' in node) {\n return node.int;\n } else if ('bytes' in node) {\n return '0x' + node.bytes;\n } else {\n if (\n (node.annots === undefined || node.annots.length === 0) &&\n (node.args === undefined || node.args.length === 0)\n ) {\n return node.prim;\n }\n\n let ret = '(' + node.prim;\n if (node.annots !== undefined) {\n for (const a of node.annots) {\n ret += ' ' + a;\n }\n }\n if (node.args !== undefined) {\n const multiline = isMultiline(node);\n for (const a of node.args) {\n if (multiline) {\n ret += f.lfsp + f.indent(1) + emitExpr(a, f.down(1), foldMacros);\n } else {\n ret += ' ' + emitExpr(a, f, foldMacros);\n }\n }\n }\n return ret + ')';\n }\n}\n\nfunction emitSeq(node: Expr[], f: Formatter, foldMacros: boolean): string {\n let ret = '{' + f.lf;\n let i = node.length;\n for (const el of node) {\n ret += f.indent(1);\n\n if ('prim' in el) {\n ret += el.prim;\n\n if (el.annots !== undefined) {\n for (const a of el.annots) {\n ret += ' ' + a;\n }\n }\n if (el.args !== undefined) {\n const multiline = isMultiline(el);\n for (const a of el.args) {\n if (multiline) {\n ret += f.lfsp + f.indent(2) + emitExpr(a, f.down(2), foldMacros);\n } else {\n ret += ' ' + emitExpr(a, f, foldMacros);\n }\n }\n }\n } else {\n ret += emitExpr(el, f.down(1), foldMacros);\n }\n\n ret += i > 1 ? ';' + f.lfsp : f.lf;\n i--;\n }\n return ret + f.indent() + '}';\n}\n\n/**\n * Formats Micheline expression\n * @param expr An AST node\n * @param opt Options\n */\nexport function emitMicheline(expr: Expr, opt?: FormatOptions, foldMacros = false): string {\n if (typeof expr !== 'object') {\n throw new TypeError(`object type was expected, got ${typeof expr} instead`);\n }\n\n return emitExpr(expr, new Formatter(opt), foldMacros);\n}\n","const H = [\n 0x6a09e667 | 0,\n 0xbb67ae85 | 0,\n 0x3c6ef372 | 0,\n 0xa54ff53a | 0,\n 0x510e527f | 0,\n 0x9b05688c | 0,\n 0x1f83d9ab | 0,\n 0x5be0cd19 | 0,\n];\n\nconst K = [\n 0x428a2f98 | 0,\n 0x71374491 | 0,\n 0xb5c0fbcf | 0,\n 0xe9b5dba5 | 0,\n 0x3956c25b | 0,\n 0x59f111f1 | 0,\n 0x923f82a4 | 0,\n 0xab1c5ed5 | 0,\n 0xd807aa98 | 0,\n 0x12835b01 | 0,\n 0x243185be | 0,\n 0x550c7dc3 | 0,\n 0x72be5d74 | 0,\n 0x80deb1fe | 0,\n 0x9bdc06a7 | 0,\n 0xc19bf174 | 0,\n 0xe49b69c1 | 0,\n 0xefbe4786 | 0,\n 0x0fc19dc6 | 0,\n 0x240ca1cc | 0,\n 0x2de92c6f | 0,\n 0x4a7484aa | 0,\n 0x5cb0a9dc | 0,\n 0x76f988da | 0,\n 0x983e5152 | 0,\n 0xa831c66d | 0,\n 0xb00327c8 | 0,\n 0xbf597fc7 | 0,\n 0xc6e00bf3 | 0,\n 0xd5a79147 | 0,\n 0x06ca6351 | 0,\n 0x14292967 | 0,\n 0x27b70a85 | 0,\n 0x2e1b2138 | 0,\n 0x4d2c6dfc | 0,\n 0x53380d13 | 0,\n 0x650a7354 | 0,\n 0x766a0abb | 0,\n 0x81c2c92e | 0,\n 0x92722c85 | 0,\n 0xa2bfe8a1 | 0,\n 0xa81a664b | 0,\n 0xc24b8b70 | 0,\n 0xc76c51a3 | 0,\n 0xd192e819 | 0,\n 0xd6990624 | 0,\n 0xf40e3585 | 0,\n 0x106aa070 | 0,\n 0x19a4c116 | 0,\n 0x1e376c08 | 0,\n 0x2748774c | 0,\n 0x34b0bcb5 | 0,\n 0x391c0cb3 | 0,\n 0x4ed8aa4a | 0,\n 0x5b9cca4f | 0,\n 0x682e6ff3 | 0,\n 0x748f82ee | 0,\n 0x78a5636f | 0,\n 0x84c87814 | 0,\n 0x8cc70208 | 0,\n 0x90befffa | 0,\n 0xa4506ceb | 0,\n 0xbef9a3f7 | 0,\n 0xc67178f2 | 0,\n];\n\n/**\n * @category Error\n * @description Error that indicates a failure when decoding a base58 encoding\n */\nexport class Base58DecodingError extends Error {\n public name = 'Base58DecodingError';\n constructor(public message: string) {\n super(message);\n }\n}\n\n/**\n * @category Error\n * @description\n */\nexport class InvalidMessageError extends Error {\n public name = 'InvalidMessageError';\n constructor(public message: string) {\n super(message);\n }\n}\n\n// https://tools.ietf.org/html/rfc6234\nfunction sha256(msg: number[] | Uint8Array): number[] {\n // pad the message\n const r = (msg.length + 9) % 64;\n const pad = r === 0 ? 0 : 64 - r;\n\n if (msg.length > 268435455) {\n throw new InvalidMessageError(`SHA-256 -- message length is too big: ${msg.length}`);\n }\n\n const l = msg.length << 3;\n const buffer = [\n ...msg,\n 0x80,\n ...new Array<number>(pad).fill(0),\n 0,\n 0,\n 0,\n 0,\n (l >> 24) & 0xff,\n (l >> 16) & 0xff,\n (l >> 8) & 0xff,\n l & 0xff,\n ];\n\n function ror(x: number, n: number): number {\n return (x >>> n) | (x << (32 - n));\n }\n\n const h = [...H];\n const w = new Array<number>(64);\n const v = new Array<number>(8);\n\n for (let offset = 0; offset < buffer.length; offset += 64) {\n let q = offset;\n let i = 0;\n while (i < 16) {\n w[i] = (buffer[q] << 24) | (buffer[q + 1] << 16) | (buffer[q + 2] << 8) | buffer[q + 3];\n q += 4;\n i++;\n }\n while (i < 64) {\n const s0 = ror(w[i - 15], 7) ^ ror(w[i - 15], 18) ^ (w[i - 15] >>> 3);\n const s1 = ror(w[i - 2], 17) ^ ror(w[i - 2], 19) ^ (w[i - 2] >>> 10);\n w[i] = ((s1 | 0) + w[i - 7] + s0 + w[i - 16]) | 0;\n i++;\n }\n\n for (let i = 0; i < 8; i++) {\n v[i] = h[i];\n }\n\n for (let i = 0; i < 64; i++) {\n const b0 = ror(v[0], 2) ^ ror(v[0], 13) ^ ror(v[0], 22);\n const b1 = ror(v[4], 6) ^ ror(v[4], 11) ^ ror(v[4], 25);\n const t1 = (v[7] + b1 + ((v[4] & v[5]) ^ (~v[4] & v[6])) + K[i] + w[i]) | 0;\n const t2 = (b0 + ((v[0] & v[1]) ^ (v[0] & v[2]) ^ (v[1] & v[2]))) | 0;\n\n v[7] = v[6];\n v[6] = v[5];\n v[5] = v[4];\n v[4] = (v[3] + t1) | 0;\n v[3] = v[2];\n v[2] = v[1];\n v[1] = v[0];\n v[0] = (t1 + t2) | 0;\n }\n\n for (let i = 0; i < 8; i++) {\n h[i] = (h[i] + v[i]) | 0;\n }\n }\n\n const digest: number[] = [];\n for (const v of h) {\n digest.push((v >> 24) & 0xff);\n digest.push((v >> 16) & 0xff);\n digest.push((v >> 8) & 0xff);\n digest.push(v & 0xff);\n }\n\n return digest;\n}\n\nconst base58alphabetFwd: number[] = [\n 0, 1, 2, 3, 4, 5, 6, 7, 8, -1, -1, -1, -1, -1, -1, -1, 9, 10, 11, 12, 13, 14, 15, 16, -1, 17, 18,\n 19, 20, 21, -1, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, -1, -1, -1, -1, -1, -1, 33, 34, 35,\n 36, 37, 38, 39, 40, 41, 42, 43, -1, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57,\n];\n\nconst base58alphabetBwd: number[] = [\n 0, 1, 2, 3, 4, 5, 6, 7, 8, 16, 17, 18, 19, 20, 21, 22, 23, 25, 26, 27, 28, 29, 31, 32, 33, 34, 35,\n 36, 37, 38, 39, 40, 41, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 60, 61, 62, 63, 64, 65, 66,\n 67, 68, 69, 70, 71, 72, 73,\n];\n\nfunction byteAt(src: string, i: number): number {\n const c = src.charCodeAt(i) - 49;\n if (c >= base58alphabetFwd.length || base58alphabetFwd[c] === -1) {\n throw new Base58DecodingError(`Unexpected character at position ${i}: ${src[i]}`);\n }\n return base58alphabetFwd[c];\n}\n\nexport function decodeBase58(src: string): number[] {\n const acc: number[] = [];\n let i = 0;\n // count and skip leading zeros\n while (i < src.length && byteAt(src, i) === 0) {\n i++;\n }\n let zeros = i;\n while (i < src.length) {\n let carry = byteAt(src, i++);\n /*\n for every symbol x\n acc = acc * 58 + x\n where acc is a little endian arbitrary length integer\n */\n let ii = 0;\n while (carry !== 0 || ii < acc.length) {\n const m = (acc[ii] || 0) * 58 + carry;\n acc[ii++] = m % 256;\n carry = Math.floor(m / 256);\n }\n }\n while (zeros-- > 0) {\n acc.push(0);\n }\n return acc.reverse();\n}\n\nexport function encodeBase58(src: number[] | Uint8Array): string {\n const acc: number[] = [];\n let i = 0;\n // count and skip leading zeros\n while (i < src.length && src[i] === 0) {\n i++;\n }\n let zeros = i;\n while (i < src.length) {\n let carry = src[i++];\n let ii = 0;\n while (carry !== 0 || ii < acc.length) {\n const m = (acc[ii] || 0) * 256 + carry;\n acc[ii++] = m % 58;\n carry = Math.floor(m / 58);\n }\n }\n while (zeros-- > 0) {\n acc.push(0);\n }\n acc.reverse();\n return String.fromCharCode(...acc.map((v) => base58alphabetBwd[v] + 49));\n}\n\nexport function decodeBase58Check(src: string): number[] {\n const buffer = decodeBase58(src);\n if (buffer.length < 4) {\n throw new Base58DecodingError(`Data is too short ${buffer.length}`);\n }\n\n const data = buffer.slice(0, buffer.length - 4);\n const sum = buffer.slice(buffer.length - 4);\n const computed = sha256(sha256(data));\n if (\n sum[0] !== computed[0] ||\n sum[1] !== computed[1] ||\n sum[2] !== computed[2] ||\n sum[3] !== computed[3]\n ) {\n throw new Base58DecodingError('Invalid checksum');\n }\n\n return data;\n}\n\nexport function encodeBase58Check(src: number[] | Uint8Array): string {\n const sum = sha256(sha256(src));\n return encodeBase58([...src, ...sum.slice(0, 4)]);\n}\n","/**\n * @category Error\n * @description Error that indicates an invalid contract being passed or used\n */\nexport class InvalidContractError extends Error {\n public name = 'InvalidContractError';\n constructor(public message: string) {\n super(message);\n }\n}\n\n/**\n * @category Error\n * @description Error that indicates an invalid type expression being passed or used\n */\nexport class InvalidTypeExpressionError extends Error {\n public name = 'InvalidTypeExpressionError';\n constructor(public message: string) {\n super(message);\n }\n}\n\n/**\n * @category Error\n * @description Error that indicates an invalid data expression being passed or used\n */\nexport class InvalidDataExpressionError extends Error {\n public name = 'InvalidDataExpressionError';\n constructor(public message: string) {\n super(message);\n }\n}\n\n/**\n * @category Error\n * @description Error that indicates an invalid contract entrypoint being referenced or passed\n */\nexport class InvalidEntrypointError extends Error {\n public name = 'InvalidEntrypointError';\n constructor(public entrypoint?: string) {\n super(`Contract has no entrypoint named: '${entrypoint}'`);\n }\n}\n\n/**\n * @category Error\n * @description Error that indicates a failure happening when trying to encode Tezos ID\n */\nexport class TezosIdEncodeError extends Error {\n public name = 'TezosIdEncodeError';\n constructor(public message: string) {\n super(message);\n }\n}\n\n/**\n * @category Error\n * @description Error that indicates a general error happening when trying to create a LongInteger\n */\nexport class LongIntegerError extends Error {\n public name = 'LongIntegerError';\n constructor(public message: string) {\n super(message);\n }\n}\n\n/**\n * @category Error\n * @description Error that indicates a failure occurring when trying to parse a hex byte\n */\nexport class HexParseError extends Error {\n public name = 'HexParseError';\n constructor(public hexByte: string) {\n super(`Unable to parse hex byte: ${hexByte}`);\n }\n}\n","import { Prim, Expr, StringLiteral, IntLiteral } from './micheline';\nimport { decodeBase58Check, encodeBase58Check } from './base58';\nimport {\n MichelsonData,\n MichelsonDataPair,\n MichelsonType,\n MichelsonTypePair,\n} from './michelson-types';\nimport { HexParseError, LongIntegerError, TezosIdEncodeError } from './error';\n\nexport type Tuple<N extends number, T> = N extends 1\n ? [T]\n : N extends 2\n ? [T, T]\n : N extends 3\n ? [T, T, T]\n : N extends 4\n ? [T, T, T, T]\n : N extends 5\n ? [T, T, T, T, T]\n : N extends 6\n ? [T, T, T, T, T, T]\n : N extends 7\n ? [T, T, T, T, T, T, T]\n : N extends 8\n ? [T, T, T, T, T, T, T, T]\n : T[];\n\ntype RequiredProp<T, K extends keyof T> = Omit<T, K> & Required<Pick<T, K>>;\ntype OmitProp<T, K extends keyof T> = Omit<T, K> & { [P in K]?: undefined };\n\nexport type ReqArgs<T extends Prim> = RequiredProp<T, 'args'>;\nexport type NoArgs<T extends Prim> = OmitProp<T, 'args'>;\nexport type NoAnnots<T extends Prim> = OmitProp<T, 'annots'>;\n\nexport type Nullable<T> = { [P in keyof T]: T[P] | null };\n\n/**\n * @category Error\n * @description Error that indicates a Michelson failure occurring\n */\nexport class MichelsonError<T extends Expr = Expr> extends Error {\n /**\n * @param val Value of a AST node caused the error\n * @param path Path to a node caused the error\n * @param message An error message\n */\n constructor(public val: T, message?: string) {\n super(message);\n Object.setPrototypeOf(this, MichelsonError.prototype);\n }\n}\n\nexport function isMichelsonError<T extends Expr = Expr>(err: unknown): err is MichelsonError<T> {\n return err instanceof MichelsonError;\n}\n\nexport class MichelsonTypeError extends MichelsonError<MichelsonType | MichelsonType[]> {\n public data?: Expr;\n\n /**\n * @param val Value of a type node caused the error\n * @param data Value of a data node caused the error\n * @param message An error message\n */\n constructor(val: MichelsonType | MichelsonType[], data?: Expr, message?: string) {\n super(val, message);\n if (data !== undefined) {\n this.data = data;\n }\n Object.setPrototypeOf(this, MichelsonTypeError.prototype);\n }\n}\n\n// Ad hoc big integer parser\nexport class LongInteger {\n private neg = false;\n private buf: number[] = [];\n\n private append(c: number) {\n let i = 0;\n while (c !== 0 || i < this.buf.length) {\n const m = (this.buf[i] || 0) * 10 + c;\n this.buf[i++] = m % 256;\n c = Math.floor(m / 256);\n }\n }\n\n constructor(arg?: string | number) {\n if (arg === undefined) {\n return;\n }\n if (typeof arg === 'string') {\n for (let i = 0; i < arg.length; i++) {\n const c = arg.charCodeAt(i);\n if (i === 0 && c === 0x2d) {\n this.neg = true;\n } else {\n if (c < 0x30 || c > 0x39) {\n throw new LongIntegerError(`unexpected character in integer constant: ${arg[i]}`);\n }\n this.append(c - 0x30);\n }\n }\n } else if (arg < 0) {\n this.neg = true;\n this.append(-arg);\n } else {\n this.append(arg);\n }\n }\n\n cmp(arg: LongInteger): number {\n if (this.neg !== arg.neg) {\n return (arg.neg ? 1 : 0) - (this.neg ? 1 : 0);\n } else {\n let ret = 0;\n if (this.buf.length !== arg.buf.length) {\n ret = this.buf.length < arg.buf.length ? -1 : 1;\n } else if (this.buf.length !== 0) {\n let i = arg.buf.length - 1;\n while (i >= 0 && this.buf[i] === arg.buf[i]) {\n i--;\n }\n ret = i < 0 ? 0 : this.buf[i] < arg.buf[i] ? -1 : 1;\n }\n return !this.neg ? ret : ret === 0 ? 0 : -ret;\n }\n }\n\n get sign(): number {\n return this.buf.length === 0 ? 0 : this.neg ? -1 : 1;\n }\n}\n\nexport function parseBytes(s: string): number[] | null {\n const ret: number[] = [];\n for (let i = 0; i < s.length; i += 2) {\n const x = parseInt(s.slice(i, i + 2), 16);\n if (Number.isNaN(x)) {\n return null;\n }\n ret.push(x);\n }\n return ret;\n}\n\nexport function compareBytes(a: number[] | Uint8Array, b: number[] | Uint8Array): number {\n if (a.length !== b.length) {\n return a.length < b.length ? -1 : 1;\n } else if (a.length !== 0) {\n let i = 0;\n while (i < a.length && a[i] === b[i]) {\n i++;\n }\n return i === a.length ? 0 : a[i] < b[i] ? -1 : 1;\n } else {\n return 0;\n }\n}\n\nexport function isDecimal(x: string): boolean {\n try {\n new LongInteger(x);\n return true;\n } catch {\n return false;\n }\n}\n\nexport function isNatural(x: string): boolean {\n try {\n return new LongInteger(x).sign >= 0;\n } catch {\n return false;\n }\n}\n\nexport interface UnpackedAnnotations {\n f?: string[];\n t?: string[];\n v?: string[];\n}\n\nexport interface UnpackAnnotationsOptions {\n specialVar?: boolean; // CAR, CDR\n emptyVar?: boolean;\n specialFields?: boolean; // PAIR, LEFT, RIGHT\n emptyFields?: boolean;\n}\n\nconst annRe = /^(@%|@%%|%@|[@:%]([_0-9a-zA-Z][_0-9a-zA-Z.%@]*)?)$/;\n\nexport function unpackAnnotations(\n p: Prim | Expr[],\n opt?: UnpackAnnotationsOptions\n): UnpackedAnnotations {\n if (Array.isArray(p)) {\n return {};\n }\n\n let field: string[] | undefined;\n let type: string[] | undefined;\n let vars: string[] | undefined;\n\n if (p.annots !== undefined) {\n for (const v of p.annots) {\n if (v.length !== 0) {\n if (\n !annRe.test(v) ||\n (!opt?.specialVar && (v === '@%' || v === '@%%')) ||\n (!opt?.specialFields && v === '%@')\n ) {\n throw new MichelsonError(p, `${p.prim}: unexpected annotation: ${v}`);\n }\n\n switch (v[0]) {\n case '%':\n if (opt?.emptyFields || v.length > 1) {\n field = field || [];\n field.push(v);\n }\n break;\n case ':':\n if (v.length > 1) {\n type = type || [];\n type.push(v);\n }\n break;\n case '@':\n if (opt?.emptyVar || v.length > 1) {\n vars = vars || [];\n vars.push(v);\n }\n break;\n }\n }\n }\n }\n return { f: field, t: type, v: vars };\n}\n\nexport type TezosIDType =\n | 'BlockHash'\n | 'OperationHash'\n | 'OperationListHash'\n | 'OperationListListHash'\n | 'ProtocolHash'\n | 'ContextHash'\n | 'ED25519PublicKeyHash'\n | 'SECP256K1PublicKeyHash'\n | 'P256PublicKeyHash'\n | 'ContractHash'\n | 'CryptoboxPublicKeyHash'\n | 'ED25519Seed'\n | 'ED25519PublicKey'\n | 'SECP256K1SecretKey'\n | 'P256SecretKey'\n | 'ED25519EncryptedSeed'\n | 'SECP256K1EncryptedSecretKey'\n | 'P256EncryptedSecretKey'\n | 'SECP256K1PublicKey'\n | 'P256PublicKey'\n | 'SECP256K1Scalar'\n | 'SECP256K1Element'\n | 'ED25519SecretKey'\n | 'ED25519Signature'\n | 'SECP256K1Signature'\n | 'P256Signature'\n | 'GenericSignature'\n | 'ChainID'\n | 'RollupAddress'\n | 'TxRollupL2Address';\n\nexport type TezosIDPrefix = [number, number[]]; // payload length, prefix\n\nexport const tezosPrefix: Record<TezosIDType, TezosIDPrefix> = {\n BlockHash: [32, [1, 52]], // B(51)\n OperationHash: [32, [5, 116]], // o(51)\n OperationListHash: [32, [133, 233]], // Lo(52)\n OperationListListHash: [32, [29, 159, 109]], // LLo(53)\n ProtocolHash: [32, [2, 170]], // P(51)\n ContextHash: [32, [79, 199]], // Co(52)\n ED25519PublicKeyHash: [20, [6, 161, 159]], // tz1(36)\n SECP256K1PublicKeyHash: [20, [6, 161, 161]], // tz2(36)\n P256PublicKeyHash: [20, [6, 161, 164]], // tz3(36)\n ContractHash: [20, [2, 90, 121]], // KT1(36)\n CryptoboxPublicKeyHash: [16, [153, 103]], // id(30)\n ED25519Seed: [32, [13, 15, 58, 7]], // edsk(54)\n ED25519PublicKey: [32, [13, 15, 37, 217]], // edpk(54)\n SECP256K1SecretKey: [32, [17, 162, 224, 201]], // spsk(54)\n P256SecretKey: [32, [16, 81, 238, 189]], // p2sk(54)\n ED25519EncryptedSeed: [56, [7, 90, 60, 179, 41]], // edesk(88)\n SECP256K1EncryptedSecretKey: [56, [9, 237, 241, 174, 150]], // spesk(88)\n P256EncryptedSecretKey: [56, [9, 48, 57, 115, 171]], // p2esk(88)\n SECP256K1PublicKey: [33, [3, 254, 226, 86]], // sppk(55)\n P256PublicKey: [33, [3, 178, 139, 127]], // p2pk(55)\n SECP256K1Scalar: [33, [38, 248, 136]], // SSp(53)\n SECP256K1Element: [33, [5, 92, 0]], // GSp(54)\n ED25519SecretKey: [64, [43, 246, 78, 7]], // edsk(98)\n ED25519Signature: [64, [9, 245, 205, 134, 18]], // edsig(99)\n SECP256K1Signature: [64, [13, 115, 101, 19, 63]], // spsig1(99)\n P256Signature: [64, [54, 240, 44, 52]], // p2sig(98)\n GenericSignature: [64, [4, 130, 43]], // sig(96)\n ChainID: [4, [87, 82, 0]],\n RollupAddress: [20, [1, 128, 120, 31]],\n TxRollupL2Address: [20, [6, 161, 166]],\n};\n\nexport function checkDecodeTezosID<T extends TezosIDType[]>(\n id: string,\n ...types: T\n): [T[number], number[]] | null {\n const buf = decodeBase58Check(id);\n for (const t of types) {\n const [plen, p] = tezosPrefix[t];\n if (buf.length === plen + p.length) {\n let i = 0;\n while (i < p.length && buf[i] === p[i]) {\n i++;\n }\n if (i === p.length) {\n return [t, buf.slice(p.length)];\n }\n }\n }\n return null;\n}\n\nexport function encodeTezosID(id: TezosIDType, data: number[] | Uint8Array): string {\n const [plen, p] = tezosPrefix[id];\n if (data.length !== plen) {\n throw new TezosIdEncodeError(`Incorrect data length for ${id}: ${data.length}`);\n }\n return encodeBase58Check([...p, ...data]);\n}\n\n// reassemble comb pair for transparent comparison etc. non-recursive!\ntype PairTypeOrDataPrim<I extends 'pair' | 'Pair'> = I extends 'pair'\n ? Extract<MichelsonTypePair<MichelsonType[]>, Prim>\n : Extract<MichelsonDataPair<MichelsonData[]>, Prim>;\nexport function unpackComb<I extends 'pair' | 'Pair'>(\n id: I,\n v: I extends 'pair' ? MichelsonTypePair<MichelsonType[]> : MichelsonDataPair<MichelsonData[]>\n): PairTypeOrDataPrim<I> {\n const vv: MichelsonTypePair<MichelsonType[]> | MichelsonDataPair<MichelsonData[]> = v;\n const args = Array.isArray(vv) ? vv : vv.args;\n if (args.length === 2) {\n // it's a way to make a union of two interfaces not an interface with two independent properties of union types\n const ret =\n id === 'pair'\n ? {\n prim: 'pair',\n args,\n }\n : {\n prim: 'Pair',\n args,\n };\n return ret as PairTypeOrDataPrim<I>;\n }\n\n return {\n ...(Array.isArray(vv) ? { prim: id } : vv),\n args: [\n args[0],\n {\n prim: id,\n args: args.slice(1),\n },\n ],\n } as PairTypeOrDataPrim<I>;\n}\n\nexport function isPairType(t: MichelsonType): t is MichelsonTypePair<MichelsonType[]> {\n return Array.isArray(t) || t.prim === 'pair';\n}\n\nexport function isPairData(d: Expr): d is MichelsonDataPair<MichelsonData[]> {\n return Array.isArray(d) || ('prim' in d && d.prim === 'Pair');\n}\n\nconst rfc3339Re =\n /^[0-9]{4}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])[T ]([01][0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9]|60)(\\.[0-9]+)?(Z|[+-]([01][0-9]|2[0-3]):([0-5][0-9]))$/;\n\nexport function parseDate(a: StringLiteral | IntLiteral): Date | null {\n if ('string' in a) {\n if (isNatural(a.string)) {\n return new Date(parseInt(a.string, 10));\n } else if (rfc3339Re.test(a.string)) {\n const x = new Date(a.string);\n if (!Number.isNaN(x.valueOf)) {\n return x;\n }\n }\n } else if (isDecimal(a.int)) {\n return new Date(parseInt(a.int, 10));\n }\n return null;\n}\n\nexport function parseHex(s: string): number[] {\n const res: number[] = [];\n for (let i = 0; i < s.length; i += 2) {\n const ss = s.slice(i, i + 2);\n const x = parseInt(ss, 16);\n if (Number.isNaN(x)) {\n throw new HexParseError(ss);\n }\n res.push(x);\n }\n return res;\n}\n\nexport function hexBytes(bytes: number[]): string {\n return bytes.map((x) => ((x >> 4) & 0xf).toString(16) + (x & 0xf).toString(16)).join('');\n}\n","import { Prim, Expr, IntLiteral, StringLiteral } from './micheline';\nimport { Tuple, NoArgs, ReqArgs, MichelsonError } from './utils';\nimport {\n MichelsonCode,\n MichelsonType,\n MichelsonData,\n MichelsonContract,\n MichelsonNoArgInstruction,\n MichelsonInstruction,\n InstructionList,\n MichelsonTypeID,\n MichelsonSimpleComparableTypeID,\n} from './michelson-types';\n\n// Michelson validator\n\nconst maxViewNameLength = 31;\n\nconst noArgInstructionIDs: Record<MichelsonNoArgInstruction['prim'], true> = {\n ABS: true,\n ADD: true,\n ADDRESS: true,\n AMOUNT: true,\n AND: true,\n APPLY: true,\n BALANCE: true,\n BLAKE2B: true,\n CAR: true,\n CDR: true,\n CHAIN_ID: true,\n CHECK_SIGNATURE: true,\n COMPARE: true,\n CONCAT: true,\n CONS: true,\n EDIV: true,\n EQ: true,\n EXEC: true,\n FAILWITH: true,\n GE: true,\n GET_AND_UPDATE: true,\n GT: true,\n HASH_KEY: true,\n IMPLICIT_ACCOUNT: true,\n INT: true,\n ISNAT: true,\n JOIN_TICKETS: true,\n KECCAK: true,\n LE: true,\n LEVEL: true,\n LSL: true,\n LSR: true,\n LT: true,\n MEM: true,\n MUL: true,\n NEG: true,\n NEQ: true,\n NEVER: true,\n NOT: true,\n NOW: true,\n OR: true,\n PACK: true,\n PAIRING_CHECK: true,\n READ_TICKET: true,\n SAPLING_VERIFY_UPDATE: true,\n SELF: true,\n SELF_ADDRESS: true,\n SENDER: true,\n SET_DELEGATE: true,\n SHA256: true,\n SHA3: true,\n SHA512: true,\n SIZE: true,\n SLICE: true,\n SOME: true,\n SOURCE: true,\n SPLIT_TICKET: true,\n SUB: true,\n SWAP: true,\n TICKET: true,\n TOTAL_VOTING_POWER: true,\n TRANSFER_TOKENS: true,\n UNIT: true,\n VOTING_POWER: true,\n XOR: true,\n RENAME: true,\n OPEN_CHEST: true,\n SUB_MUTEZ: true,\n MIN_BLOCK_TIME: true,\n};\n\nexport const instructionIDs: Record<MichelsonInstruction['prim'], true> = Object.assign(\n {},\n noArgInstructionIDs,\n {\n CONTRACT: true,\n CREATE_CONTRACT: true,\n DIG: true,\n DIP: true,\n DROP: true,\n DUG: true,\n DUP: true,\n EMPTY_BIG_MAP: true,\n EMPTY_MAP: true,\n EMPTY_SET: true,\n GET: true,\n IF: true,\n IF_CONS: true,\n IF_LEFT: true,\n IF_NONE: true,\n ITER: true,\n LAMBDA: true,\n LEFT: true,\n LOOP: true,\n LOOP_LEFT: true,\n MAP: true,\n NIL: true,\n NONE: true,\n PAIR: true,\n PUSH: true,\n RIGHT: true,\n SAPLING_EMPTY_STATE: true,\n UNPACK: true,\n UNPAIR: true,\n UPDATE: true,\n CAST: true,\n VIEW: true,\n } as const\n);\n\nconst simpleComparableTypeIDs: Record<MichelsonSimpleComparableTypeID, true> = {\n unit: true,\n never: true,\n bool: true,\n int: true,\n nat: true,\n string: true,\n chain_id: true,\n bytes: true,\n mutez: true,\n key_hash: true,\n key: true,\n signature: true,\n timestamp: true,\n address: true,\n tx_rollup_l2_address: true,\n};\n\nconst typeIDs: Record<MichelsonTypeID, true> = Object.assign({}, simpleComparableTypeIDs, {\n or: true,\n pair: true,\n set: true,\n big_map: true,\n contract: true,\n lambda: true,\n list: true,\n map: true,\n operation: true,\n option: true,\n bls12_381_g1: true,\n bls12_381_g2: true,\n bls12_381_fr: true,\n sapling_transaction: true,\n sapling_state: true,\n ticket: true,\n chest_key: true,\n chest: true,\n} as const);\n\nexport class MichelsonValidationError extends MichelsonError {\n /**\n * @param val Value of a node caused the error\n * @param message An error message\n */\n constructor(public val: Expr, message?: string) {\n super(val, message);\n Object.setPrototypeOf(this, MichelsonValidationError.prototype);\n }\n}\n\nfunction isPrim(ex: Expr): ex is Prim {\n return 'prim' in ex;\n}\n\nfunction isPrimOrSeq(ex: Expr): ex is Prim | Expr[] {\n return Array.isArray(ex) || 'prim' in ex;\n}\n\nfunction assertPrim(ex: Expr): ex is Prim {\n if (isPrim(ex)) {\n return true;\n }\n throw new MichelsonValidationError(ex, 'prim expression expected');\n}\n\nfunction assertSeq(ex: Expr): ex is Expr[] {\n if (Array.isArray(ex)) {\n return true;\n }\n throw new MichelsonValidationError(ex, 'sequence expression expected');\n}\n\nfunction assertPrimOrSeq(ex: Expr): ex is Prim | Expr[] {\n if (isPrimOrSeq(ex)) {\n return true;\n }\n throw new MichelsonValidationError(ex, 'prim or sequence expression expected');\n}\n\nfunction assertNatural(i: IntLiteral) {\n if (i.int[0] === '-') {\n throw new MichelsonValidationError(i, 'natural number expected');\n }\n}\n\nfunction assertIntLiteral(ex: Expr): ex is IntLiteral {\n if ('int' in ex) {\n return true;\n }\n throw new MichelsonValidationError(ex, 'int literal expected');\n}\n\nfunction assertStringLiteral(ex: Expr): ex is StringLiteral {\n if ('string' in ex) {\n return true;\n }\n throw new MichelsonValidationError(ex, 'string literal expected');\n}\n\nfunction assertArgs<N extends number>(\n ex: Prim,\n n: N\n): ex is N extends 0 ? NoArgs<Prim<string>> : ReqArgs<Prim<string, Tuple<N, Expr>>> {\n if ((n === 0 && ex.args === undefined) || ex.args?.length === n) {\n return true;\n }\n throw new MichelsonValidationError(ex, `${n} arguments expected`);\n}\n\n/**\n * Checks if the node is a valid Michelson code (sequence of instructions).\n * This is a type guard function which either returns true of throws an exception.\n * @param ex An AST node\n */\nexport function assertMichelsonInstruction(ex: Expr): ex is MichelsonCode {\n if (Array.isArray(ex)) {\n for (const n of ex) {\n if (!Array.isArray(n) && !isPrim(n)) {\n throw new MichelsonValidationError(ex, 'sequence or prim expected');\n }\n assertMichelsonInstruction(n);\n }\n return true;\n }\n\n if (assertPrim(ex)) {\n if (Object.prototype.hasOwnProperty.call(noArgInstructionIDs, ex.prim)) {\n assertArgs(ex, 0);\n return true;\n }\n\n switch (ex.prim) {\n case 'DROP':\n case 'PAIR':\n case 'UNPAIR':\n case 'DUP':\n case 'UPDATE':\n case 'GET':\n if (ex.args !== undefined && assertArgs(ex, 1)) {\n /* istanbul ignore else */\n if (assertIntLiteral(ex.args[0])) {\n assertNatural(ex.args[0]);\n }\n }\n break;\n\n case 'DIG':\n case 'DUG':\n case 'SAPLING_EMPTY_STATE':\n /* istanbul ignore else */\n if (assertArgs(ex, 1)) {\n /* istanbul ignore else */\n if (assertIntLiteral(ex.args[0])) {\n assertNatural(ex.args[0]);\n }\n }\n break;\n\n case 'NONE':\n case 'LEFT':\n case 'RIGHT':\n case 'NIL':\n case 'CAST':\n /* istanbul ignore else */\n if (assertArgs(ex, 1)) {\n assertMichelsonType(ex.args[0]);\n }\n break;\n\n case 'UNPACK':\n /* istanbul ignore else */\n if (assertArgs(ex, 1)) {\n assertMichelsonPackableType(ex.args[0]);\n }\n break;\n\n case 'CONTRACT':\n /* istanbul ignore else */\n if (assertArgs(ex, 1)) {\n assertMichelsonPassableType(ex.args[0]);\n }\n break;\n\n case 'IF_NONE':\n case 'IF_LEFT':\n case 'IF_CONS':\n case 'IF':\n /* istanbul ignore else */\n if (assertArgs(ex, 2)) {\n /* istanbul ignore else */\n if (assertSeq(ex.args[0])) {\n assertMichelsonInstruction(ex.args[0]);\n }\n /* istanbul ignore else */\n if (assertSeq(ex.args[1])) {\n assertMichelsonInstruction(ex.args[1]);\n }\n }\n break;\n\n case 'MAP':\n case 'ITER':\n case 'LOOP':\n case 'LOOP_LEFT':\n /* istanbul ignore else */\n if (assertArgs(ex, 1)) {\n assertMichelsonInstruction(ex.args[0]);\n }\n break;\n\n case 'CREATE_CONTRACT':\n /* istanbul ignore else */\n if (assertArgs(ex, 1)) {\n assertMichelsonContract(ex.args[0]);\n }\n break;\n\n case 'DIP':\n if (ex.args?.length === 2) {\n /* istanbul ignore else */\n if (assertIntLiteral(ex.args[0])) {\n assertNatural(ex.args[0]);\n }\n /* istanbul ignore else */\n if (assertSeq(ex.args[1])) {\n assertMichelsonInstruction(ex.args[1]);\n }\n } else if (ex.args?.length === 1) {\n /* istanbul ignore else */\n if (assertSeq(ex.args[0])) {\n assertMichelsonInstruction(ex.args[0]);\n }\n } else {\n throw new MichelsonValidationError(ex, '1 or 2 arguments expected');\n }\n break;\n\n case 'PUSH':\n /* istanbul ignore else */\n if (assertArgs(ex, 2)) {\n assertMichelsonPushableType(ex.args[0]);\n assertMichelsonData(ex.args[1]);\n }\n break;\n\n case 'EMPTY_SET':\n /* istanbul ignore else */\n if (assertArgs(ex, 1)) {\n assertMichelsonComparableType(ex.args[0]);\n }\n break;\n\n case 'EMPTY_MAP':\n /* istanbul ignore else */\n if (assertArgs(ex, 2)) {\n assertMichelsonComparableType(ex.args[0]);\n assertMichelsonType(ex.args[1]);\n }\n break;\n\n case 'EMPTY_BIG_MAP':\n /* istanbul ignore else */\n if (assertArgs(ex, 2)) {\n assertMichelsonComparableType(ex.args[0]);\n assertMichelsonBigMapStorableType(ex.args[1]);\n }\n break;\n\n case 'LAMBDA':\n /* istanbul ignore else */\n if (assertArgs(ex, 3)) {\n assertMichelsonType(ex.args[0]);\n assertMichelsonType(ex.args[1]);\n /* istanbul ignore else */\n if (assertSeq(ex.args[2])) {\n assertMichelsonInstruction(ex.args[2]);\n }\n }\n break;\n\n case 'VIEW':\n /* istanbul ignore else */\n if (assertArgs(ex, 2)) {\n if (assertStringLiteral(ex.args[0])) {\n assertViewNameValid(ex.args[0]);\n }\n if (assertMichelsonType(ex.args[1])) {\n assertMichelsonPushableType(ex.args[1]);\n }\n }\n break;\n\n default:\n throw new MichelsonValidationError(ex, 'instruction expected');\n }\n }\n return true;\n}\n\nexport function assertMichelsonComparableType(ex: Expr): ex is MichelsonType {\n /* istanbul ignore else */\n if (assertPrimOrSeq(ex)) {\n if (Array.isArray(ex) || ex.prim === 'pair' || ex.prim === 'or' || ex.prim === 'option') {\n traverseType(ex, (ex) => assertMichelsonComparableType(ex));\n } else if (!Object.prototype.hasOwnProperty.call(simpleComparableTypeIDs, ex.prim)) {\n throw new MichelsonValidationError(ex, `${ex.prim}: type is not comparable`);\n }\n }\n return true;\n}\n\nexport function assertMichelsonPackableType(ex: Expr): ex is MichelsonType {\n /* istanbul ignore else */\n if (assertPrimOrSeq(ex)) {\n if (isPrim(ex)) {\n if (\n !Object.prototype.hasOwnProperty.call(typeIDs, ex.prim) ||\n ex.prim === 'big_map' ||\n ex.prim === 'operation' ||\n ex.prim === 'sapling_state' ||\n ex.prim === 'ticket'\n ) {\n throw new MichelsonValidationError(\n ex,\n `${ex.prim}: type can't be used inside PACK/UNPACK instructions`\n );\n }\n traverseType(ex, (ex) => assertMichelsonPackableType(ex));\n }\n }\n return true;\n}\n\nexport function assertMichelsonPushableType(ex: Expr): ex is MichelsonType {\n /* istanbul ignore else */\n if (assertPrimOrSeq(ex)) {\n if (isPrim(ex)) {\n if (\n !Object.prototype.hasOwnProperty.call(typeIDs, ex.prim) ||\n ex.prim === 'big_map' ||\n ex.prim === 'operation' ||\n ex.prim === 'sapling_state' ||\n ex.prim === 'ticket' ||\n ex.prim === 'contract'\n ) {\n throw new MichelsonValidationError(ex, `${ex.prim}: type can't be pushed`);\n }\n traverseType(ex, (ex) => assertMichelsonPushableType(ex));\n }\n }\n return true;\n}\n\nexport function assertMichelsonStorableType(ex: Expr): ex is MichelsonType {\n /* istanbul ignore else */\n if (assertPrimOrSeq(ex)) {\n if (isPrim(ex)) {\n if (\n !Object.prototype.hasOwnProperty.call(typeIDs, ex.prim) ||\n ex.prim === 'operation' ||\n ex.prim === 'contract'\n ) {\n throw new MichelsonValidationError(\n ex,\n `${ex.prim}: type can't be used as part of a storage`\n );\n }\n traverseType(ex, (ex) => assertMichelsonStorableType(ex));\n }\n }\n return true;\n}\n\nexport function assertMichelsonPassableType(ex: Expr): ex is MichelsonType {\n /* istanbul ignore else */\n if (assertPrimOrSeq(ex)) {\n if (isPrim(ex)) {\n if (!Object.prototype.hasOwnProperty.call(typeIDs, ex.prim) || ex.prim === 'operation') {\n throw new MichelsonValidationError(\n ex,\n `${ex.prim}: type can't be used as part of a parameter`\n );\n }\n traverseType(ex, (ex) => assertMichelsonPassableType(ex));\n }\n }\n return true;\n}\n\nexport function assertMichelsonBigMapStorableType(ex: Expr): ex is MichelsonType {\n /* istanbul ignore else */\n if (assertPrimOrSeq(ex)) {\n if (isPrim(ex)) {\n if (\n !Object.prototype.hasOwnProperty.call(typeIDs, ex.prim) ||\n ex.prim === 'big_map' ||\n ex.prim === 'operation' ||\n ex.prim === 'sapling_state'\n ) {\n throw new MichelsonValidationError(ex, `${ex.prim}: type can't be used inside a big_map`);\n }\n traverseType(ex, (ex) => assertMichelsonBigMapStorableType(ex));\n }\n }\n return true;\n}\n\nconst viewRe = new RegExp('^[a-zA-Z0-9_.%@]*$');\n\nexport function assertViewNameValid(name: StringLiteral): void {\n if (name.string.length > maxViewNameLength) {\n throw new MichelsonValidationError(name, `view name too long: ${name.string}`);\n }\n if (!viewRe.test(name.string)) {\n throw new MichelsonValidationError(name, `invalid character(s) in view name: ${name.string}`);\n }\n}\n\n/**\n * Checks if the node is a valid Michelson type expression.\n * This is a type guard function which either returns true of throws an exception.\n * @param ex An AST node\n */\nexport function assertMichelsonType(ex: Expr): ex is MichelsonType {\n /* istanbul ignore else */\n if (assertPrimOrSeq(ex)) {\n if (isPrim(ex)) {\n if (!Object.prototype.hasOwnProperty.call(typeIDs, ex.prim)) {\n throw new MichelsonValidationError(ex, 'type expected');\n }\n traverseType(ex, (ex) => assertMichelsonType(ex));\n }\n }\n return true;\n}\n\nfunction traverseType(ex: Prim | Expr[], cb: (ex: Prim | Expr[]) => void): ex is MichelsonType {\n if (Array.isArray(ex) || ex.prim === 'pair') {\n const args = Array.isArray(ex) ? ex : ex.args;\n if (args === undefined || args.length < 2) {\n throw new MichelsonValidationError(ex, 'at least 2 arguments expected');\n }\n args.forEach((a) => {\n if (assertPrimOrSeq(a)) {\n cb(a);\n }\n });\n return true;\n }\n\n switch (ex.prim) {\n case 'option':\n case 'list':\n /* istanbul ignore else */\n if (assertArgs(ex, 1) && assertPrimOrSeq(ex.args[0])) {\n cb(ex.args[0]);\n }\n break;\n\n case 'contract':\n /* istanbul ignore else */\n if (assertArgs(ex, 1)) {\n assertMichelsonPassableType(ex.args[0]);\n }\n break;\n\n case 'or':\n /* istanbul ignore else */\n if (assertArgs(ex, 2) && assertPrimOrSeq(ex.args[0]) && assertPrimOrSeq(ex.args[1])) {\n cb(ex.args[0]);\n cb(ex.args[1]);\n }\n break;\n\n case 'lambda':\n /* istanbul ignore else */\n if (assertArgs(ex, 2)) {\n assertMichelsonType(ex.args[0]);\n assertMichelsonType(ex.args[1]);\n }\n break;\n\n case 'set':\n /* istanbul ignore else */\n if (assertArgs(ex, 1)) {\n assertMichelsonComparableType(ex.args[0]);\n }\n break;\n\n case 'map':\n /* istanbul ignore else */\n if (assertArgs(ex, 2) && assertPrimOrSeq(ex.args[0]) && assertPrimOrSeq(ex.args[1])) {\n assertMichelsonComparableType(ex.args[0]);\n cb(ex.args[1]);\n }\n break;\n\n case 'big_map':\n /* istanbul ignore else */\n if (assertArgs(ex, 2) && assertPrimOrSeq(ex.args[0]) && assertPrimOrSeq(ex.args[1])) {\n assertMichelsonComparableType(ex.args[0]);\n assertMichelsonBigMapStorableType(ex.args[1]);\n cb(ex.args[1]);\n }\n break;\n\n case 'ticket':\n /* istanbul ignore else */\n if (assertArgs(ex, 1) && assertPrimOrSeq(ex.args[0])) {\n assertMichelsonComparableType(ex.args[0]);\n }\n break;\n\n case 'sapling_state':\n case 'sapling_transaction':\n if (assertArgs(ex, 1)) {\n assertIntLiteral(ex.args[0]);\n }\n break;\n\n default:\n assertArgs(ex, 0);\n }\n\n return true;\n}\n/**\n * Checks if the node is a valid Michelson data literal such as `(Pair {Elt \"0\" 0} 0)`.\n * This is a type guard function which either returns true of throws an exception.\n * @param ex An AST node\n */\nexport function assertMichelsonData(ex: Expr): ex is MichelsonData {\n if ('int' in ex || 'string' in ex || 'bytes' in ex) {\n return true;\n }\n\n if (Array.isArray(ex)) {\n let mapElts = 0;\n for (const n of ex) {\n if (isPrim(n) && n.prim === 'Elt') {\n /* istanbul ignore else */\n if (assertArgs(n, 2)) {\n assertMichelsonData(n.args[0]);\n assertMichelsonData(n.args[1]);\n }\n mapElts++;\n } else {\n assertMichelsonData(n);\n }\n }\n\n if (mapElts !== 0 && mapElts !== ex.length) {\n throw new MichelsonValidationError(ex, \"data entries and map elements can't be intermixed\");\n }\n return true;\n }\n\n if (isPrim(ex)) {\n switch (ex.prim) {\n case 'Unit':\n case 'True':\n case 'False':\n case 'None':\n assertArgs(ex, 0);\n break;\n\n case 'Pair':\n /* istanbul ignore else */\n if (ex.args === undefined || ex.args.length < 2) {\n throw new MichelsonValidationError(ex, 'at least 2 arguments expected');\n }\n for (const a of ex.args) {\n assertMichelsonData(a);\n }\n break;\n\n case 'Left':\n case 'Right':\n case 'Some':\n /* istanbul ignore else */\n if (assertArgs(ex, 1)) {\n assertMichelsonData(ex.args[0]);\n }\n break;\n\n default:\n if (Object.prototype.hasOwnProperty.call(instructionIDs, ex.prim)) {\n assertMichelsonInstruction(ex);\n } else {\n throw new MichelsonValidationError(ex, 'data entry or instruction expected');\n }\n }\n } else {\n throw new MichelsonValidationError(ex, 'data entry expected');\n }\n\n return true;\n}\n\n/**\n * Checks if the node is a valid Michelson smart contract source containing all required and valid properties such as `parameter`, `storage` and `code`.\n * This is a type guard function which either returns true of throws an exception.\n * @param ex An AST node\n */\nexport function assertMichelsonContract(ex: Expr): ex is MichelsonContract {\n /* istanbul ignore else */\n if (assertSeq(ex)) {\n const toplevelSec: { [sec: string]: boolean } = {};\n const views: { [name: string]: boolean } = {};\n for (const sec of ex) {\n if (assertPrim(sec)) {\n if (sec.prim !== 'view') {\n if (sec.prim in toplevelSec) {\n throw new MichelsonValidationError(ex, `duplicate contract section: ${sec.prim}`);\n }\n toplevelSec[sec.prim] = true;\n }\n\n /* istanbul ignore else */\n switch (sec.prim) {\n case 'code':\n if (assertArgs(sec, 1)) {\n /* istanbul ignore else */\n if (assertSeq(sec.args[0])) {\n assertMichelsonInstruction(sec.args[0]);\n }\n }\n break;\n\n case 'parameter':\n if (assertArgs(sec, 1)) {\n assertMichelsonPassableType(sec.args[0]);\n }\n if (sec.annots) {\n throw new MichelsonValidationError(\n sec,\n 'Annotation must be part of the parameter type'\n );\n }\n break;\n\n case 'storage':\n if (assertArgs(sec, 1)) {\n assertMichelsonStorableType(sec.args[0]);\n }\n break;\n\n case 'view':\n if (assertArgs(sec, 4)) {\n if (assertStringLiteral(sec.args[0])) {\n const name = sec.args[0];\n if (name.string in views) {\n throw new MichelsonValidationError(ex, `duplicate view name: ${name.string}`);\n }\n views[name.string] = true;\n assertViewNameValid(name);\n }\n\n assertMichelsonPushableType(sec.args[1]);\n assertMichelsonPushableType(sec.args[2]);\n if (assertSeq(sec.args[3])) {\n assertMichelsonInstruction(sec.args[3]);\n }\n }\n break;\n\n default:\n throw new MichelsonValidationError(ex, `unexpected contract section: ${sec.prim}`);\n }\n }\n }\n }\n return true;\n}\n\n/**\n * Checks if the node is a valid Michelson smart contract source containing all required and valid properties such as `parameter`, `storage` and `code`.\n * @param ex An AST node\n */\nexport function isMichelsonScript(ex: Expr): ex is MichelsonContract {\n try {\n assertMichelsonContract(ex);\n return true;\n } catch {\n return false;\n }\n}\n\n/**\n * Checks if the node is a valid Michelson data literal such as `(Pair {Elt \"0\" 0} 0)`.\n * @param ex An AST node\n */\nexport function isMichelsonData(ex: Expr): ex is MichelsonData {\n try {\n assertMichelsonData(ex);\n return true;\n } catch {\n return false;\n }\n}\n\n/**\n * Checks if the node is a valid Michelson code (sequence of instructions).\n * @param ex An AST node\n */\nexport function isMichelsonCode(ex: Expr): ex is InstructionList {\n try {\n assertMichelsonInstruction(ex);\n return true;\n } catch {\n return false;\n }\n}\n\n/**\n * Checks if the node is a valid Michelson type expression.\n * @param ex An AST node\n */\nexport function isMichelsonType(ex: Expr): ex is MichelsonType {\n try {\n assertMichelsonType(ex);\n return true;\n } catch {\n return false;\n }\n}\n\nexport function isInstruction(p: Prim): p is MichelsonInstruction {\n return Object.prototype.hasOwnProperty.call(instructionIDs, p.prim);\n}\n\nexport function assertDataListIfAny(d: MichelsonData): d is MichelsonData[] {\n if (!Array.isArray(d)) {\n return false;\n }\n for (const v of d) {\n if ('prim' in v) {\n if (isInstruction(v)) {\n throw new MichelsonError(d, `Instruction outside of a lambda: ${JSON.stringify(d)}`);\n } else if (v.prim === 'Elt') {\n throw new MichelsonError(d, `Elt item outside of a map literal: ${JSON.stringify(d)}`);\n }\n }\n }\n return true;\n}\n","import { BytesLiteral, Expr, IntLiteral, Prim } from './micheline';\nimport {\n MichelsonTypeID,\n MichelsonDataID,\n MichelsonSectionID,\n MichelsonInstructionID,\n MichelsonData,\n MichelsonType,\n MichelsonDataOr,\n MichelsonDataOption,\n MichelsonInstruction,\n} from './michelson-types';\nimport {\n assertDataListIfAny,\n assertMichelsonData,\n assertMichelsonInstruction,\n} from './michelson-validator';\nimport {\n checkDecodeTezosID,\n encodeTezosID,\n hexBytes,\n isPairData,\n isPairType,\n MichelsonTypeError,\n parseBytes,\n parseDate,\n parseHex,\n unpackComb,\n} from './utils';\n\ntype PrimID =\n | MichelsonTypeID\n | MichelsonDataID\n | MichelsonSectionID\n | MichelsonInstructionID\n | 'Elt'\n | 'constant';\n\nconst primitives: PrimID[] = [\n 'parameter',\n 'storage',\n 'code',\n 'False',\n 'Elt',\n 'Left',\n 'None',\n 'Pair',\n 'Right',\n 'Some',\n 'True',\n 'Unit',\n 'PACK',\n 'UNPACK',\n 'BLAKE2B',\n 'SHA256',\n 'SHA512',\n 'ABS',\n 'ADD',\n 'AMOUNT',\n 'AND',\n 'BALANCE',\n 'CAR',\n 'CDR',\n 'CHECK_SIGNATURE',\n 'COMPARE',\n 'CONCAT',\n 'CONS',\n 'CREATE_ACCOUNT',\n 'CREATE_CONTRACT',\n 'IMPLICIT_ACCOUNT',\n 'DIP',\n 'DROP',\n 'DUP',\n 'EDIV',\n 'EMPTY_MAP',\n 'EMPTY_SET',\n 'EQ',\n 'EXEC',\n 'FAILWITH',\n 'GE',\n 'GET',\n 'GT',\n 'HASH_KEY',\n 'IF',\n 'IF_CONS',\n 'IF_LEFT',\n 'IF_NONE',\n 'INT',\n 'LAMBDA',\n 'LE',\n 'LEFT',\n 'LOOP',\n 'LSL',\n 'LSR',\n 'LT',\n 'MAP',\n 'MEM',\n 'MUL',\n 'NEG',\n 'NEQ',\n 'NIL',\n 'NONE',\n 'NOT',\n 'NOW',\n 'OR',\n 'PAIR',\n 'PUSH',\n 'RIGHT',\n 'SIZE',\n 'SOME',\n 'SOURCE',\n 'SENDER',\n 'SELF',\n 'STEPS_TO_QUOTA',\n 'SUB',\n 'SWAP',\n 'TRANSFER_TOKENS',\n 'SET_DELEGATE',\n 'UNIT',\n 'UPDATE',\n 'XOR',\n 'ITER',\n 'LOOP_LEFT',\n 'ADDRESS',\n 'CONTRACT',\n 'ISNAT',\n 'CAST',\n 'RENAME',\n 'bool',\n 'contract',\n 'int',\n 'key',\n 'key_hash',\n 'lambda',\n 'list',\n 'map',\n 'big_map',\n 'nat',\n 'option',\n 'or',\n 'pair',\n 'set',\n 'signature',\n 'string',\n 'bytes',\n 'mutez',\n 'timestamp',\n 'unit',\n 'operation',\n 'address',\n 'SLICE',\n 'DIG',\n 'DUG',\n 'EMPTY_BIG_MAP',\n 'APPLY',\n 'chain_id',\n 'CHAIN_ID',\n 'LEVEL',\n 'SELF_ADDRESS',\n 'never',\n 'NEVER',\n 'UNPAIR',\n 'VOTING_POWER',\n 'TOTAL_VOTING_POWER',\n 'KECCAK',\n 'SHA3',\n 'PAIRING_CHECK',\n 'bls12_381_g1',\n 'bls12_381_g2',\n 'bls12_381_fr',\n 'sapling_state',\n 'sapling_transaction',\n 'SAPLING_EMPTY_STATE',\n 'SAPLING_VERIFY_UPDATE',\n 'ticket',\n 'TICKET',\n 'READ_TICKET',\n 'SPLIT_TICKET',\n 'JOIN_TICKETS',\n 'GET_AND_UPDATE',\n 'chest',\n 'chest_key',\n 'OPEN_CHEST',\n 'VIEW',\n 'view',\n 'constant',\n 'SUB_MUTEZ',\n];\n\nconst primTags: { [key in PrimID]?: number } & { [key: string]: number | undefined } =\n Object.assign({}, ...primitives.map((v, i) => ({ [v]: i })));\n\nenum Tag {\n Int = 0,\n String = 1,\n Sequence = 2,\n Prim0 = 3,\n Prim0Annot = 4,\n Prim1 = 5,\n Prim1Annot = 6,\n Prim2 = 7,\n Prim2Annot = 8,\n Prim = 9,\n Bytes = 10,\n}\nclass Writer {\n public buffer: number[] = [];\n\n get length(): number {\n return this.buffer.length;\n }\n\n writeBytes(val: number[]) {\n this.buffer.push(...val.map((v) => v & 0xff));\n }\n\n writeUint8(val: number) {\n const v = val | 0;\n this.buffer.push(v & 0xff);\n }\n\n writeUint16(val: number) {\n const v = val | 0;\n this.buffer.push((v >> 8) & 0xff);\n this.buffer.push(v & 0xff);\n }\n\n writeUint32(val: number) {\n const v = val | 0;\n this.buffer.push((v >> 24) & 0xff);\n this.buffer.push((v >> 16) & 0xff);\n this.buffer.push((v >> 8) & 0xff);\n this.buffer.push(v & 0xff);\n }\n\n writeInt8(val: number) {\n this.writeUint8(val);\n }\n\n writeInt16(val: number) {\n this.writeUint16(val);\n }\n\n writeInt32(val: number) {\n this.writeUint32(val);\n }\n}\n\nconst boundsErr = new Error('bounds out of range');\nclass Reader {\n constructor(\n private buffer: number[] | Uint8Array,\n private idx: number = 0,\n private cap: number = buffer.length\n ) {}\n\n /** Remaining length */\n get length(): number {\n return this.cap - this.idx;\n }\n\n readBytes(len: number): number[] | Uint8Array {\n if (this.cap - this.idx < len) {\n throw boundsErr;\n }\n const ret = this.buffer.slice(this.idx, this.idx + len);\n this.idx += len;\n return ret;\n }\n\n reader(len: number): Reader {\n if (this.cap - this.idx < len) {\n throw boundsErr;\n }\n const ret = new Reader(this.buffer, this.idx, this.idx + len);\n this.idx += len;\n return ret;\n }\n\n copy(): Reader {\n return new Reader(this.buffer, this.idx, this.cap);\n }\n\n readUint8(): number {\n if (this.cap - this.idx < 1) {\n throw boundsErr;\n }\n return this.buffer[this.idx++] >>> 0;\n }\n\n readUint16(): number {\n if (this.cap - this.idx < 2) {\n throw boundsErr;\n }\n const x0 = this.buffer[this.idx++];\n const x1 = this.buffer[this.idx++];\n return ((x0 << 8) | x1) >>> 0;\n }\n\n readUint32(): number {\n if (this.cap - this.idx < 4) {\n throw boundsErr;\n }\n const x0 = this.buffer[this.idx++];\n const x1 = this.buffer[this.idx++];\n const x2 = this.buffer[this.idx++];\n const x3 = this.buffer[this.idx++];\n return ((x0 << 24) | (x1 << 16) | (x2 << 8) | x3) >>> 0;\n }\n\n readInt8(): number {\n if (this.cap - this.idx < 1) {\n throw boundsErr;\n }\n const x = this.buffer[this.idx++];\n return (x << 24) >> 24;\n }\n\n readInt16(): number {\n if (this.cap - this.idx < 2) {\n throw boundsErr;\n }\n const x0 = this.buffer[this.idx++];\n const x1 = this.buffer[this.idx++];\n return (((x0 << 8) | x1) << 16) >> 16;\n }\n\n readInt32(): number {\n if (this.cap - this.idx < 4) {\n throw boundsErr;\n }\n const x0 = this.buffer[this.idx++];\n const x1 = this.buffer[this.idx++];\n const x2 = this.buffer[this.idx++];\n const x3 = this.buffer[this.idx++];\n return (x0 << 24) | (x1 << 16) | (x2 << 8) | x3;\n }\n}\n\nenum ContractID {\n Implicit = 0,\n Originated = 1,\n}\n\nenum PublicKeyHashID {\n ED25519 = 0,\n SECP256K1 = 1,\n P256 = 2,\n}\n\ntype AddressType =\n | 'ED25519PublicKeyHash'\n | 'SECP256K1PublicKeyHash'\n | 'P256PublicKeyHash'\n | 'ContractHash';\n\nexport interface Address {\n type: AddressType;\n hash: number[] | Uint8Array;\n entryPoint?: string;\n}\n\nfunction readPublicKeyHash(rd: Reader): Address {\n let type: AddressType;\n const tag = rd.readUint8();\n switch (tag) {\n case PublicKeyHashID.ED25519:\n type = 'ED25519PublicKeyHash';\n break;\n case PublicKeyHashID.SECP256K1:\n type = 'SECP256K1PublicKeyHash';\n break;\n case PublicKeyHashID.P256:\n type = 'P256PublicKeyHash';\n break;\n default:\n throw new Error(`unknown public key hash tag: ${tag}`);\n }\n return { type, hash: rd.readBytes(20) };\n}\n\nfunction readAddress(rd: Reader): Address {\n let address: Address;\n const tag = rd.readUint8();\n switch (tag) {\n case ContractID.Implicit:\n address = readPublicKeyHash(rd);\n break;\n\n case ContractID.Originated:\n address = {\n type: 'ContractHash',\n hash: rd.readBytes(20),\n };\n rd.readBytes(1);\n break;\n\n default:\n throw new Error(`unknown address tag: ${tag}`);\n }\n\n if (rd.length !== 0) {\n // entry point\n const dec = new TextDecoder();\n address.entryPoint = dec.decode(new Uint8Array(rd.readBytes(rd.length)));\n }\n return address;\n}\n\nfunction writePublicKeyHash(a: Address, w: Writer): void {\n let tag: PublicKeyHashID;\n switch (a.type) {\n case 'ED25519PublicKeyHash':\n tag = PublicKeyHashID.ED25519;\n break;\n case 'SECP256K1PublicKeyHash':\n tag = PublicKeyHashID.SECP256K1;\n break;\n case 'P256PublicKeyHash':\n tag = PublicKeyHashID.P256;\n break;\n default:\n throw new Error(`unexpected address type: ${a.type}`);\n }\n w.writeUint8(tag);\n w.writeBytes(Array.from(a.hash));\n}\n\nfunction writeAddress(a: Address, w: Writer): void {\n if (a.type === 'ContractHash') {\n w.writeUint8(ContractID.Originated);\n w.writeBytes(Array.from(a.hash));\n w.writeUint8(0);\n } else {\n w.writeUint8(ContractID.Implicit);\n writePublicKeyHash(a, w);\n }\n\n if (a.entryPoint !== undefined && a.entryPoint !== '' && a.entryPoint !== 'default') {\n const enc = new TextEncoder();\n const bytes = enc.encode(a.entryPoint);\n w.writeBytes(Array.from(bytes));\n }\n}\n\nenum PublicKeyID {\n ED25519 = 0,\n SECP256K1 = 1,\n P256 = 2,\n}\n\nexport type PublicKeyType = 'ED25519PublicKey' | 'SECP256K1PublicKey' | 'P256PublicKey';\nexport interface PublicKey {\n type: PublicKeyType;\n publicKey: number[] | Uint8Array;\n}\n\nfunction readPublicKey(rd: Reader): PublicKey {\n let ln: number;\n let type: PublicKeyType;\n const tag = rd.readUint8();\n switch (tag) {\n case PublicKeyID.ED25519:\n type = 'ED25519PublicKey';\n ln = 32;\n break;\n case PublicKeyID.SECP256K1:\n type = 'SECP256K1PublicKey';\n ln = 33;\n break;\n case PublicKeyID.P256:\n type = 'P256PublicKey';\n ln = 33;\n break;\n default:\n throw new Error(`unknown public key tag: ${tag}`);\n }\n return { type, publicKey: rd.readBytes(ln) };\n}\n\nfunction writePublicKey(pk: PublicKey, w: Writer): void {\n let tag: PublicKeyID;\n switch (pk.type) {\n case 'ED25519PublicKey':\n tag = PublicKeyID.ED25519;\n break;\n case 'SECP256K1PublicKey':\n tag = PublicKeyID.SECP256K1;\n break;\n case 'P256PublicKey':\n tag = PublicKeyID.P256;\n break;\n default:\n throw new Error(`unexpected public key type: ${pk.type}`);\n }\n w.writeUint8(tag);\n w.writeBytes(Array.from(pk.publicKey));\n}\n\ntype WriteTransformFunc = (e: Expr) => [Expr, IterableIterator<WriteTransformFunc>];\n\nfunction writeExpr(expr: Expr, wr: Writer, tf: WriteTransformFunc): void {\n const [e, args] = tf(expr);\n\n if (Array.isArray(e)) {\n const w = new Writer();\n for (const v of e) {\n const a = args.next();\n if (a.done) {\n throw new Error('REPORT ME: iterator is done');\n }\n writeExpr(v, w, a.value);\n }\n wr.writeUint8(Tag.Sequence);\n wr.writeUint32(w.length);\n wr.writeBytes(w.buffer);\n return;\n }\n\n if ('string' in e) {\n const enc = new TextEncoder();\n const bytes = enc.encode(e.string);\n wr.writeUint8(Tag.String);\n wr.writeUint32(bytes.length);\n wr.writeBytes(Array.from(bytes));\n return;\n }\n\n if ('int' in e) {\n wr.writeUint8(Tag.Int);\n let val = BigInt(e.int);\n const sign = val < 0;\n if (sign) {\n val = -val;\n }\n let i = 0;\n do {\n const bits = i === 0 ? BigInt(6) : BigInt(7);\n let byte = val & ((BigInt(1) << bits) - BigInt(1));\n val >>= bits;\n if (val) {\n byte |= BigInt(0x80);\n }\n if (i === 0 && sign) {\n byte |= BigInt(0x40);\n }\n wr.writeUint8(Number(byte));\n i++;\n } while (val);\n return;\n }\n\n if ('bytes' in e) {\n const bytes = parseHex(e.bytes);\n wr.writeUint8(Tag.Bytes);\n wr.writeUint32(bytes.length);\n wr.writeBytes(bytes);\n return;\n }\n\n const prim = primTags[e.prim];\n if (prim === undefined) {\n throw new TypeError(`Can't encode primary: ${e.prim}`);\n }\n\n const tag =\n (e.args?.length || 0) < 3\n ? Tag.Prim0 +\n (e.args?.length || 0) * 2 +\n (e.annots === undefined || e.annots.length === 0 ? 0 : 1)\n : Tag.Prim;\n\n wr.writeUint8(tag);\n wr.writeUint8(prim);\n\n if (e.args !== undefined) {\n if (e.args.length < 3) {\n for (const v of e.args) {\n const a = args.next();\n if (a.done) {\n throw new Error('REPORT ME: iterator is done');\n }\n writeExpr(v, wr, a.value);\n }\n } else {\n const w = new Writer();\n for (const v of e.args) {\n const a = args.next();\n if (a.done) {\n throw new Error('REPORT ME: iterator is done');\n }\n writeExpr(v, w, a.value);\n }\n wr.writeUint32(w.length);\n wr.writeBytes(w.buffer);\n }\n }\n\n if (e.annots !== undefined && e.annots.length !== 0) {\n const enc = new TextEncoder();\n const bytes = enc.encode(e.annots.join(' '));\n wr.writeUint32(bytes.length);\n wr.writeBytes(Array.from(bytes));\n } else if (e.args !== undefined && e.args.length >= 3) {\n wr.writeUint32(0);\n }\n}\n\ntype ReadTransformFuncs = [(e: Expr) => IterableIterator<ReadTransformFuncs>, (e: Expr) => Expr];\n\nfunction readExpr(rd: Reader, tf: ReadTransformFuncs): Expr {\n function* passThrough() {\n while (true) {\n yield readPassThrough;\n }\n }\n const [args, tr] = tf;\n const tag = rd.readUint8();\n switch (tag) {\n case Tag.Int: {\n const buf: number[] = [];\n let byte: number;\n do {\n byte = rd.readInt8();\n buf.push(byte);\n } while ((byte & 0x80) !== 0);\n let val = BigInt(0);\n let sign = false;\n for (let i = buf.length - 1; i >= 0; i--) {\n const bits = i === 0 ? BigInt(6) : BigInt(7);\n const byte = BigInt(buf[i]);\n val <<= bits;\n val |= byte & ((BigInt(1) << bits) - BigInt(1));\n if (i === 0) {\n sign = !!(byte & BigInt(0x40));\n }\n }\n if (sign) {\n val = -val;\n }\n return tr({ int: String(val) });\n }\n\n case Tag.String: {\n const length = rd.readUint32();\n const bytes = rd.readBytes(length);\n const dec = new TextDecoder();\n return tr({ string: dec.decode(new Uint8Array(bytes)) });\n }\n\n case Tag.Bytes: {\n const length = rd.readUint32();\n const bytes = rd.readBytes(length);\n const hex = hexBytes(Array.from(bytes));\n return tr({ bytes: hex });\n }\n\n case Tag.Sequence: {\n const length = rd.readUint32();\n let res: Expr[] = [];\n let savedrd = rd.copy();\n // make two passes\n let it: IterableIterator<ReadTransformFuncs> = passThrough();\n for (let n = 0; n < 2; n++) {\n const r = savedrd.reader(length);\n res = [];\n while (r.length > 0) {\n const a = it.next();\n if (a.done) {\n throw new Error('REPORT ME: iterator is done');\n }\n res.push(readExpr(r, a.value));\n }\n // make a second pass with injected side effects\n it = args(res);\n savedrd = rd;\n }\n return tr(res);\n }\n\n default: {\n if (tag > 9) {\n throw new Error(`Unknown tag: ${tag}`);\n }\n const p = rd.readUint8();\n if (p >= primitives.length) {\n throw new Error(`Unknown primitive tag: ${p}`);\n }\n const prim = primitives[p];\n const argn = (tag - 3) >> 1;\n let res: Prim = { prim };\n // make two passes\n let it: IterableIterator<ReadTransformFuncs> = passThrough();\n let savedrd = rd.copy();\n for (let n = 0; n < 2; n++) {\n res = { prim };\n if (argn < 3) {\n for (let i = 0; i < argn; i++) {\n const a = it.next();\n if (a.done) {\n throw new Error('REPORT ME: iterator is done');\n }\n res.args = res.args || [];\n res.args.push(readExpr(savedrd, a.value));\n }\n } else {\n res.args = res.args || [];\n const length = savedrd.readUint32();\n const r = savedrd.reader(length);\n while (r.length > 0) {\n const a = it.next();\n if (a.done) {\n throw new Error('REPORT ME: iterator is done');\n }\n res.args.push(readExpr(r, a.value));\n }\n }\n // make a second pass with injected side effects\n it = args(res);\n savedrd = rd;\n }\n\n if (((tag - 3) & 1) === 1 || argn === 3) {\n // read annotations\n const length = rd.readUint32();\n if (length !== 0) {\n const bytes = rd.readBytes(length);\n const dec = new TextDecoder();\n res.annots = dec.decode(new Uint8Array(bytes)).split(' ');\n }\n }\n return tr(res);\n }\n }\n}\n\nconst isOrData = (e: Expr): e is MichelsonDataOr =>\n 'prim' in e && (e.prim === 'Left' || e.prim === 'Right');\nconst isOptionData = (e: Expr): e is MichelsonDataOption =>\n 'prim' in e && (e.prim === 'Some' || e.prim === 'None');\n\nconst getWriteTransformFunc = (t: MichelsonType): WriteTransformFunc => {\n if (isPairType(t)) {\n return (d: Expr) => {\n if (!isPairData(d)) {\n throw new MichelsonTypeError(t, d, `pair expected: ${JSON.stringify(d)}`);\n }\n assertDataListIfAny(d);\n // combs aren't used in pack format\n const tc = unpackComb('pair', t);\n const dc = unpackComb('Pair', d);\n return [\n dc,\n (function* () {\n for (const a of tc.args) {\n yield getWriteTransformFunc(a);\n }\n })(),\n ];\n };\n }\n\n switch (t.prim) {\n case 'or':\n return (d: Expr) => {\n if (!isOrData(d)) {\n throw new MichelsonTypeError(t, d, `or expected: ${JSON.stringify(d)}`);\n }\n return [\n d,\n (function* () {\n yield getWriteTransformFunc(t.args[d.prim === 'Left' ? 0 : 1]);\n })(),\n ];\n };\n\n case 'option':\n return (d: Expr) => {\n if (!isOptionData(d)) {\n throw new MichelsonTypeError(t, d, `option expected: ${JSON.stringify(d)}`);\n }\n return [\n d,\n (function* () {\n const dd = d;\n if (dd.prim === 'Some') {\n yield getWriteTransformFunc(t.args[0]);\n }\n })(),\n ];\n };\n\n case 'list':\n case 'set':\n return (d: Expr) => {\n if (!Array.isArray(d)) {\n throw new MichelsonTypeError(t, d, `${t.prim} expected: ${JSON.stringify(d)}`);\n }\n return [\n d,\n (function* () {\n for (const _v of d) {\n yield getWriteTransformFunc(t.args[0]);\n }\n })(),\n ];\n };\n\n case 'map':\n return (d: Expr) => {\n if (!Array.isArray(d)) {\n throw new MichelsonTypeError(t, d, `map expected: ${JSON.stringify(d)}`);\n }\n return [\n d,\n (function* (): Generator<WriteTransformFunc> {\n for (const _elt of d) {\n yield (elt: Expr) => {\n if (!('prim' in elt) || elt.prim !== 'Elt') {\n throw new MichelsonTypeError(\n t,\n elt,\n `map element expected: ${JSON.stringify(elt)}`\n );\n }\n return [\n elt,\n (function* () {\n for (const a of t.args) {\n yield getWriteTransformFunc(a);\n }\n })(),\n ];\n };\n }\n })(),\n ];\n };\n\n case 'chain_id':\n return (d: Expr) => {\n if (!('bytes' in d) && !('string' in d)) {\n throw new MichelsonTypeError(t, d, `chain id expected: ${JSON.stringify(d)}`);\n }\n let bytes: BytesLiteral;\n if ('string' in d) {\n const id = checkDecodeTezosID(d.string, 'ChainID');\n if (id === null) {\n throw new MichelsonTypeError(t, d, `chain id base58 expected: ${d.string}`);\n }\n bytes = { bytes: hexBytes(id[1]) };\n } else {\n bytes = d;\n }\n return [bytes, [][Symbol.iterator]()];\n };\n\n case 'signature':\n return (d: Expr) => {\n if (!('bytes' in d) && !('string' in d)) {\n throw new MichelsonTypeError(t, d, `signature expected: ${JSON.stringify(d)}`);\n }\n let bytes: BytesLiteral;\n if ('string' in d) {\n const sig = checkDecodeTezosID(\n d.string,\n 'ED25519Signature',\n 'SECP256K1Signature',\n 'P256Signature',\n 'GenericSignature'\n );\n if (sig === null) {\n throw new MichelsonTypeError(t, d, `signature base58 expected: ${d.string}`);\n }\n bytes = { bytes: hexBytes(sig[1]) };\n } else {\n bytes = d;\n }\n return [bytes, [][Symbol.iterator]()];\n };\n\n case 'key_hash':\n return (d: Expr) => {\n if (!('bytes' in d) && !('string' in d)) {\n throw new MichelsonTypeError(t, d, `key hash expected: ${JSON.stringify(d)}`);\n }\n let bytes: BytesLiteral;\n if ('string' in d) {\n const pkh = checkDecodeTezosID(\n d.string,\n 'ED25519PublicKeyHash',\n 'SECP256K1PublicKeyHash',\n 'P256PublicKeyHash'\n );\n if (pkh === null) {\n throw new MichelsonTypeError(t, d, `key hash base58 expected: ${d.string}`);\n }\n const w = new Writer();\n writePublicKeyHash({ type: pkh[0], hash: pkh[1] }, w);\n bytes = { bytes: hexBytes(w.buffer) };\n } else {\n bytes = d;\n }\n return [bytes, [][Symbol.iterator]()];\n };\n\n case 'key':\n return (d: Expr) => {\n if (!('bytes' in d) && !('string' in d)) {\n throw new MichelsonTypeError(t, d, `public key expected: ${JSON.stringify(d)}`);\n }\n let bytes: BytesLiteral;\n if ('string' in d) {\n const key = checkDecodeTezosID(\n d.string,\n 'ED25519PublicKey',\n 'SECP256K1PublicKey',\n 'P256PublicKey'\n );\n if (key === null) {\n throw new MichelsonTypeError(t, d, `public key base58 expected: ${d.string}`);\n }\n const w = new Writer();\n writePublicKey({ type: key[0], publicKey: key[1] }, w);\n bytes = { bytes: hexBytes(w.buffer) };\n } else {\n bytes = d;\n }\n return [bytes, [][Symbol.iterator]()];\n };\n\n case 'address':\n return (d: Expr) => {\n if (!('bytes' in d) && !('string' in d)) {\n throw new MichelsonTypeError(t, d, `address expected: ${JSON.stringify(d)}`);\n }\n let bytes: BytesLiteral;\n if ('string' in d) {\n const s = d.string.split('%');\n const address = checkDecodeTezosID(\n s[0],\n 'ED25519PublicKeyHash',\n 'SECP256K1PublicKeyHash',\n 'P256PublicKeyHash',\n 'ContractHash'\n );\n if (address === null) {\n throw new MichelsonTypeError(t, d, `address base58 expected: ${d.string}`);\n }\n const w = new Writer();\n writeAddress(\n { type: address[0], hash: address[1], entryPoint: s.length > 1 ? s[1] : undefined },\n w\n );\n bytes = { bytes: hexBytes(w.buffer) };\n } else {\n bytes = d;\n }\n return [bytes, [][Symbol.iterator]()];\n };\n\n case 'timestamp':\n return (d: Expr) => {\n if (!('string' in d) && !('int' in d)) {\n throw new MichelsonTypeError(t, d, `timestamp expected: ${JSON.stringify(d)}`);\n }\n let int: IntLiteral;\n if ('string' in d) {\n const p = parseDate(d);\n if (p === null) {\n throw new MichelsonTypeError(t, d, `can't parse date: ${d.string}`);\n }\n int = { int: String(Math.floor(p.getTime() / 1000)) };\n } else {\n int = d;\n }\n return [int, [][Symbol.iterator]()];\n };\n\n default:\n return writePassThrough;\n }\n};\n\ntype PushInstruction = MichelsonInstruction & Prim<'PUSH'>;\nconst isPushInstruction = (e: Expr): e is PushInstruction => 'prim' in e && e.prim === 'PUSH';\n\nconst writePassThrough: WriteTransformFunc = (e: Expr) => {\n if (isPushInstruction(e)) {\n assertMichelsonInstruction(e);\n // capture inlined type definition\n return [\n e,\n (function* () {\n yield writePassThrough;\n yield getWriteTransformFunc(e.args[0]);\n })(),\n ];\n }\n\n return [\n e,\n (function* () {\n while (true) {\n yield writePassThrough;\n }\n })(),\n ];\n};\n\n/**\n * Serializes any value of packable type to its optimized binary representation\n * identical to the one used by PACK and UNPACK Michelson instructions.\n * Without a type definition (not recommended) the data will be encoded as a binary form of a generic Michelson expression.\n * Type definition allows some types like `timestamp` and `address` and other base58 representable types to be encoded to\n * corresponding optimized binary forms borrowed from the Tezos protocol\n *\n * ```typescript\n * const data: MichelsonData = {\n * string: \"KT1RvkwF4F7pz1gCoxkyZrG1RkrxQy3gmFTv%foo\"\n * };\n *\n * const typ: MichelsonType = {\n * prim: \"address\"\n * };\n *\n * const packed = packData(data, typ);\n *\n * // 050a0000001901be41ee922ddd2cf33201e49d32da0afec571dce300666f6f\n * ```\n *\n * Without a type definition the base58 encoded address will be treated as a string\n * ```typescript\n * const data: MichelsonData = {\n * string: \"KT1RvkwF4F7pz1gCoxkyZrG1RkrxQy3gmFTv%foo\"\n * };\n *\n * const packed = packData(data);\n *\n * // 0501000000284b543152766b7746344637707a3167436f786b795a724731526b7278517933676d46547625666f6f\n * ```\n * @param d Data object\n * @param t Optional type definition\n * @returns Binary representation as numeric array\n */\nexport function packData(d: MichelsonData, t?: MichelsonType): number[] {\n const w = new Writer();\n w.writeUint8(5);\n writeExpr(d, w, t !== undefined ? getWriteTransformFunc(t) : writePassThrough);\n return w.buffer;\n}\n\n/**\n * Serializes any value of packable type to its optimized binary representation\n * identical to the one used by PACK and UNPACK Michelson instructions.\n * Same as {@link packData} but returns a `bytes` Michelson data literal instead of an array\n *\n * ```typescript\n * const data: MichelsonData = {\n * string: \"2019-09-26T10:59:51Z\"\n * };\n *\n * const typ: MichelsonType = {\n * prim: \"timestamp\"\n * };\n *\n * const packed = packDataBytes(data, typ);\n *\n * // { bytes: \"0500a7e8e4d80b\" }\n * ```\n * @param d Data object\n * @param t Optional type definition\n * @returns Binary representation as a bytes literal\n */\nexport function packDataBytes(d: MichelsonData, t?: MichelsonType): BytesLiteral {\n return { bytes: hexBytes(packData(d, t)) };\n}\n\nconst getReadTransformFuncs = (t: MichelsonType): ReadTransformFuncs => {\n if (isPairType(t)) {\n const args = Array.isArray(t) ? t : t.args;\n return [\n (d: Expr) => {\n if (!isPairData(d)) {\n throw new MichelsonTypeError(t, d, `pair expected: ${JSON.stringify(d)}`);\n }\n return (function* () {\n for (const a of args) {\n yield getReadTransformFuncs(a);\n }\n })();\n },\n (d: Expr) => d,\n ];\n }\n\n switch (t.prim) {\n case 'or':\n return [\n (d: Expr) => {\n if (!isOrData(d)) {\n throw new MichelsonTypeError(t, d, `or expected: ${JSON.stringify(d)}`);\n }\n return (function* () {\n yield getReadTransformFuncs(t.args[d.prim === 'Left' ? 0 : 1]);\n })();\n },\n (d: Expr) => d,\n ];\n\n case 'option':\n return [\n (d: Expr) => {\n if (!isOptionData(d)) {\n throw new MichelsonTypeError(t, d, `option expected: ${JSON.stringify(d)}`);\n }\n return (function* () {\n if (d.prim === 'Some') {\n yield getReadTransformFuncs(t.args[0]);\n }\n })();\n },\n (d: Expr) => d,\n ];\n\n case 'list':\n case 'set':\n return [\n (d: Expr) => {\n if (!Array.isArray(d)) {\n throw new MichelsonTypeError(t, d, `${t.prim} expected: ${JSON.stringify(d)}`);\n }\n return (function* () {\n while (true) {\n yield getReadTransformFuncs(t.args[0]);\n }\n })();\n },\n (d: Expr) => d,\n ];\n\n case 'map':\n return [\n (d: Expr): IterableIterator<ReadTransformFuncs> => {\n if (!Array.isArray(d)) {\n throw new MichelsonTypeError(t, d, `map expected: ${JSON.stringify(d)}`);\n }\n return (function* (): Generator<ReadTransformFuncs> {\n while (true) {\n yield [\n (elt: Expr) => {\n if (!('prim' in elt) || elt.prim !== 'Elt') {\n throw new MichelsonTypeError(\n t,\n elt,\n `map element expected: ${JSON.stringify(elt)}`\n );\n }\n return (function* () {\n for (const a of t.args) {\n yield getReadTransformFuncs(a);\n }\n })();\n },\n (elt: Expr) => elt,\n ];\n }\n })();\n },\n (d: Expr) => d,\n ];\n\n case 'chain_id':\n return [\n () => [][Symbol.iterator](),\n (d: Expr) => {\n if (!('bytes' in d) && !('string' in d)) {\n throw new MichelsonTypeError(t, d, `chain id expected: ${JSON.stringify(d)}`);\n }\n if ('string' in d) {\n return d;\n }\n const bytes = parseBytes(d.bytes);\n if (bytes === null) {\n throw new MichelsonTypeError(t, d, `can't parse bytes: ${d.bytes}`);\n }\n return { string: encodeTezosID('ChainID', bytes) };\n },\n ];\n\n case 'signature':\n return [\n () => [][Symbol.iterator](),\n (d: Expr) => {\n if (!('bytes' in d) && !('string' in d)) {\n throw new MichelsonTypeError(t, d, `signature expected: ${JSON.stringify(d)}`);\n }\n if ('string' in d) {\n return d;\n }\n const bytes = parseBytes(d.bytes);\n if (bytes === null) {\n throw new MichelsonTypeError(t, d, `can't parse bytes: ${d.bytes}`);\n }\n return { string: encodeTezosID('GenericSignature', bytes) };\n },\n ];\n\n case 'key_hash':\n return [\n () => [][Symbol.iterator](),\n (d: Expr) => {\n if (!('bytes' in d) && !('string' in d)) {\n throw new MichelsonTypeError(t, d, `key hash expected: ${JSON.stringify(d)}`);\n }\n if ('string' in d) {\n return d;\n }\n const bytes = parseBytes(d.bytes);\n if (bytes === null) {\n throw new MichelsonTypeError(t, d, `can't parse bytes: ${d.bytes}`);\n }\n const rd = new Reader(new Uint8Array(bytes));\n const addr = readPublicKeyHash(rd);\n return {\n string:\n encodeTezosID(addr.type, addr.hash) + (addr.entryPoint ? '%' + addr.entryPoint : ''),\n };\n },\n ];\n\n case 'key':\n return [\n () => [][Symbol.iterator](),\n (d: Expr) => {\n if (!('bytes' in d) && !('string' in d)) {\n throw new MichelsonTypeError(t, d, `public key expected: ${JSON.stringify(d)}`);\n }\n if ('string' in d) {\n return d;\n }\n const bytes = parseBytes(d.bytes);\n if (bytes === null) {\n throw new MichelsonTypeError(t, d, `can't parse bytes: ${d.bytes}`);\n }\n const rd = new Reader(new Uint8Array(bytes));\n const pk = readPublicKey(rd);\n return { string: encodeTezosID(pk.type, pk.publicKey) };\n },\n ];\n\n case 'address':\n return [\n () => [][Symbol.iterator](),\n (d: Expr) => {\n if (!('bytes' in d) && !('string' in d)) {\n throw new MichelsonTypeError(t, d, `address expected: ${JSON.stringify(d)}`);\n }\n if ('string' in d) {\n return d;\n }\n const bytes = parseBytes(d.bytes);\n if (bytes === null) {\n throw new MichelsonTypeError(t, d, `can't parse bytes: ${d.bytes}`);\n }\n const rd = new Reader(new Uint8Array(bytes));\n const addr = readAddress(rd);\n return {\n string:\n encodeTezosID(addr.type, addr.hash) + (addr.entryPoint ? '%' + addr.entryPoint : ''),\n };\n },\n ];\n\n case 'timestamp':\n return [\n () => [][Symbol.iterator](),\n (d: Expr) => {\n if (!('int' in d) && !('string' in d)) {\n throw new MichelsonTypeError(t, d, `address expected: ${JSON.stringify(d)}`);\n }\n if ('string' in d) {\n return d;\n }\n const date = new Date(parseInt(d.int, 10) * 1000);\n return { string: date.toISOString().slice(0, 19) + 'Z' };\n },\n ];\n\n default:\n return readPassThrough;\n }\n};\n\nconst readPassThrough: ReadTransformFuncs = [\n (e: Expr) => {\n if (isPushInstruction(e)) {\n assertMichelsonInstruction(e);\n // capture inlined type definition\n return (function* () {\n yield readPassThrough;\n yield getReadTransformFuncs(e.args[0]);\n })();\n }\n\n return (function* () {\n while (true) {\n yield readPassThrough;\n }\n })();\n },\n (e: Expr) => e,\n];\n\n/**\n * Deserialize a byte array into the corresponding Michelson value.\n * Without a type definition (not recommended) the binary data will be treated as a binary form of a generic Michelson expression and returned as is.\n * Type definition allows some types like `timestamp` and `address` and other types usually encoded in optimized binary forms to be transformed\n * back to their string representations like base58 and ISO timestamps.\n *\n * ```typescript\n * const src = [0x05, 0x00, 0xa7, 0xe8, 0xe4, 0xd8, 0x0b];\n *\n * const typ: MichelsonType = {\n * prim: \"timestamp\"\n * };\n *\n * const data = unpackData(src, typ);\n *\n * // { string: \"2019-09-26T10:59:51Z\" }\n * ```\n *\n * Same binary data without a type definition\n * ```typescript\n * const src = [0x05, 0x00, 0xa7, 0xe8, 0xe4, 0xd8, 0x0b];\n *\n * const data = unpackData(src);\n *\n * // { int: \"1569495591\" }\n * ```\n * @param src Byte array\n * @param t Optional type definition\n * @returns Deserialized data\n */\nexport function unpackData(src: number[] | Uint8Array, t?: MichelsonType): MichelsonData {\n const r = new Reader(src);\n if (r.readUint8() !== 5) {\n throw new Error('incorrect packed data magic number');\n }\n const ex = readExpr(r, t !== undefined ? getReadTransformFuncs(t) : readPassThrough);\n if (assertMichelsonData(ex)) {\n return ex;\n }\n throw new Error(); // never\n}\n\n/**\n * Deserialize a byte array into the corresponding Michelson value.\n * Same as {@link unpackData} but takes a `bytes` Michelson data literal instead of an array\n *\n * ```typescript\n * const src = { bytes: \"0500a7e8e4d80b\" };\n *\n * const typ: MichelsonType = {\n * prim: \"timestamp\"\n * };\n *\n * const data = unpackDataBytes(src, typ);\n *\n * // { string: \"2019-09-26T10:59:51Z\" }\n * ```\n * @param src Bytes object\n * @param t Optional type definition\n * @returns Deserialized data\n */\nexport function unpackDataBytes(src: BytesLiteral, t?: MichelsonType): MichelsonData {\n const bytes = parseBytes(src.bytes);\n if (bytes === null) {\n throw new Error(`can't parse bytes: \"${src.bytes}\"`);\n }\n return unpackData(bytes, t);\n}\n\n// helper functions also used by validator\n\nexport function decodeAddressBytes(b: BytesLiteral): Address {\n const bytes = parseBytes(b.bytes);\n if (bytes === null) {\n throw new Error(`can't parse bytes: \"${b.bytes}\"`);\n }\n const rd = new Reader(new Uint8Array(bytes));\n return readAddress(rd);\n}\n\nexport function decodePublicKeyHashBytes(b: BytesLiteral): Address {\n const bytes = parseBytes(b.bytes);\n if (bytes === null) {\n throw new Error(`can't parse bytes: \"${b.bytes}\"`);\n }\n const rd = new Reader(new Uint8Array(bytes));\n return readPublicKeyHash(rd);\n}\n\nexport function decodePublicKeyBytes(b: BytesLiteral): PublicKey {\n const bytes = parseBytes(b.bytes);\n if (bytes === null) {\n throw new Error(`can't parse bytes: \"${b.bytes}\"`);\n }\n const rd = new Reader(new Uint8Array(bytes));\n return readPublicKey(rd);\n}\n","import { Prim, Expr } from './micheline';\nimport {\n MichelsonType,\n MichelsonData,\n MichelsonCode,\n MichelsonTypeOption,\n MichelsonContract,\n MichelsonContractSection,\n MichelsonReturnType,\n MichelsonTypePair,\n MichelsonInstruction,\n InstructionList,\n MichelsonTypeID,\n MichelsonTypeOr,\n DefaultProtocol,\n Protocol,\n refContract,\n MichelsonTypeAddress,\n MichelsonContractView,\n ProtoInferiorTo,\n} from './michelson-types';\nimport {\n unpackAnnotations,\n MichelsonError,\n isNatural,\n LongInteger,\n parseBytes,\n compareBytes,\n isDecimal,\n checkDecodeTezosID,\n UnpackedAnnotations,\n Nullable,\n UnpackAnnotationsOptions,\n unpackComb,\n MichelsonTypeError,\n isPairType,\n isPairData,\n parseDate,\n} from './utils';\nimport { decodeBase58Check } from './base58';\nimport { decodeAddressBytes, decodePublicKeyBytes, decodePublicKeyHashBytes } from './binary';\nimport {\n assertMichelsonComparableType,\n assertMichelsonPackableType,\n assertMichelsonStorableType,\n assertMichelsonBigMapStorableType,\n assertMichelsonPushableType,\n isInstruction,\n assertDataListIfAny,\n} from './michelson-validator';\nimport { ParserOptions } from './micheline-parser';\n\nexport interface Context extends ParserOptions {\n contract?: MichelsonContract;\n traceCallback?: (t: InstructionTrace) => void;\n}\n\nexport class MichelsonInstructionError extends MichelsonError<MichelsonCode> {\n /**\n * @param val Value of a type node caused the error\n * @param stackState Current stack state\n * @param message An error message\n */\n constructor(val: MichelsonCode, public stackState: MichelsonReturnType, message?: string) {\n super(val, message);\n Object.setPrototypeOf(this, MichelsonInstructionError.prototype);\n }\n}\n\n// 'sequence as a pair' edo syntax helpers\nfunction typeID(t: MichelsonType): MichelsonTypeID {\n return Array.isArray(t) ? 'pair' : t.prim;\n}\n\ntype TypeArgs<T extends MichelsonType> = T extends Prim ? T['args'] : T;\nfunction typeArgs<T extends MichelsonType>(t: T): TypeArgs<T> {\n return ('prim' in t ? (t as Extract<MichelsonType, Prim>).args : t) as TypeArgs<T>;\n}\n\nfunction assertScalarTypesEqual(a: MichelsonType, b: MichelsonType, field = false): void {\n if (typeID(a) !== typeID(b)) {\n throw new MichelsonTypeError(a, undefined, `types mismatch: ${typeID(a)} != ${typeID(b)}`);\n }\n\n const ann = [unpackAnnotations(a), unpackAnnotations(b)];\n if (ann[0].t && ann[1].t && ann[0].t[0] !== ann[1].t[0]) {\n throw new MichelsonTypeError(\n a,\n undefined,\n `${typeID(a)}: type names mismatch: ${ann[0].t[0]} != ${ann[1].t[0]}`\n );\n }\n if (field && ann[0].f && ann[1].f && ann[0].f[0] !== ann[1].f[0]) {\n throw new MichelsonTypeError(\n a,\n undefined,\n `${typeID(a)}: field names mismatch: ${ann[0].f[0]} != ${ann[1].f}`\n );\n }\n\n if (isPairType(a)) {\n const aArgs = unpackComb('pair', a);\n const bArgs = unpackComb('pair', b as typeof a);\n assertScalarTypesEqual(aArgs.args[0], bArgs.args[0], true);\n assertScalarTypesEqual(aArgs.args[1], bArgs.args[1], true);\n return;\n }\n\n switch (a.prim) {\n case 'option':\n case 'list':\n case 'contract':\n case 'set':\n case 'ticket':\n assertScalarTypesEqual(a.args[0], (b as typeof a).args[0]);\n break;\n\n case 'or':\n assertScalarTypesEqual(a.args[0], (b as typeof a).args[0], true);\n assertScalarTypesEqual(a.args[1], (b as typeof a).args[1], true);\n break;\n\n case 'lambda':\n case 'map':\n case 'big_map':\n assertScalarTypesEqual(a.args[0], (b as typeof a).args[0]);\n assertScalarTypesEqual(a.args[1], (b as typeof a).args[1]);\n break;\n\n case 'sapling_state':\n case 'sapling_transaction':\n if (parseInt(a.args[0].int, 10) !== parseInt((b as typeof a).args[0].int, 10)) {\n throw new MichelsonTypeError(\n a,\n undefined,\n `${typeID(a)}: type argument mismatch: ${a.args[0].int} != ${(b as typeof a).args[0].int}`\n );\n }\n }\n}\n\nfunction assertStacksEqual<T1 extends MichelsonType[], T2 extends T1>(a: T1, b: T2): void {\n if (a.length !== b.length) {\n throw new MichelsonTypeError(a, undefined, `stack length mismatch: ${a.length} != ${b.length}`);\n }\n for (let i = 0; i < a.length; i++) {\n assertScalarTypesEqual(a[i], b[i]);\n }\n}\n\nexport function assertTypeAnnotationsValid(t: MichelsonType, field = false): void {\n if (!Array.isArray(t)) {\n const ann = unpackAnnotations(t);\n if ((ann.t?.length || 0) > 1) {\n throw new MichelsonTypeError(\n t,\n undefined,\n `${t.prim}: at most one type annotation allowed: ${t.annots}`\n );\n }\n\n if (field) {\n if ((ann.f?.length || 0) > 1) {\n throw new MichelsonTypeError(\n t,\n undefined,\n `${t.prim}: at most one field annotation allowed: ${t.annots}`\n );\n }\n } else {\n if ((ann.f?.length || 0) > 0) {\n throw new MichelsonTypeError(\n t,\n undefined,\n `${t.prim}: field annotations aren't allowed: ${t.annots}`\n );\n }\n }\n }\n\n if (isPairType(t)) {\n const args = typeArgs(t);\n for (const a of args) {\n assertTypeAnnotationsValid(a, true);\n }\n return;\n }\n\n switch (t.prim) {\n case 'option':\n case 'list':\n case 'contract':\n case 'set':\n assertTypeAnnotationsValid(t.args[0]);\n break;\n\n case 'or':\n for (const a of t.args) {\n assertTypeAnnotationsValid(a, true);\n }\n break;\n\n case 'lambda':\n case 'map':\n case 'big_map':\n assertTypeAnnotationsValid(t.args[0]);\n assertTypeAnnotationsValid(t.args[1]);\n }\n}\n\n// Data integrity check\n\nfunction _compareMichelsonData(t: MichelsonType, a: MichelsonData, b: MichelsonData): number {\n if (isPairType(t)) {\n if (isPairData(a) && isPairData(b)) {\n assertDataListIfAny(a);\n assertDataListIfAny(b);\n const tComb = unpackComb('pair', t);\n const aComb = unpackComb('Pair', a);\n const bComb = unpackComb('Pair', b);\n const x = _compareMichelsonData(tComb.args[0], aComb.args[0], bComb.args[0]);\n if (x !== 0) {\n return x;\n }\n return _compareMichelsonData(tComb.args[0], aComb.args[1], bComb.args[1]);\n }\n } else {\n switch (t.prim) {\n case 'int':\n case 'nat':\n case 'mutez':\n if ('int' in a && 'int' in b) {\n return new LongInteger(a.int).cmp(new LongInteger(b.int));\n }\n break;\n\n case 'string':\n if ('string' in a && 'string' in b) {\n const x = a.string.localeCompare(b.string);\n return x < 0 ? -1 : x > 0 ? 1 : 0;\n }\n break;\n\n case 'bytes':\n if ('bytes' in a && 'bytes' in b) {\n const aa = parseBytes(a.bytes);\n const bb = parseBytes(b.bytes);\n if (aa !== null && bb !== null) {\n return compareBytes(aa, bb);\n }\n }\n break;\n\n case 'bool':\n if (\n 'prim' in a &&\n 'prim' in b &&\n (a.prim === 'True' || a.prim === 'False') &&\n (b.prim === 'True' || b.prim === 'False')\n ) {\n return a.prim === b.prim ? 0 : a.prim === 'False' ? -1 : 1;\n }\n break;\n\n case 'key':\n case 'key_hash':\n case 'address':\n case 'signature':\n case 'chain_id':\n if (('string' in a || 'bytes' in a) && ('string' in b || 'bytes' in b)) {\n return compareBytes(\n 'string' in a ? decodeBase58Check(a.string) : parseBytes(a.bytes) || [],\n 'string' in b ? decodeBase58Check(b.string) : parseBytes(b.bytes) || []\n );\n }\n break;\n\n case 'timestamp':\n if (('string' in a || 'int' in a) && ('string' in b || 'int' in b)) {\n const aa = parseDate(a);\n const bb = parseDate(b);\n if (aa !== null && bb !== null) {\n const x = aa.valueOf() - bb.valueOf();\n return x < 0 ? -1 : x > 0 ? 1 : 0;\n }\n }\n break;\n\n case 'unit':\n if ('prim' in a && 'prim' in b && a.prim === 'Unit' && b.prim === 'Unit') {\n return 0;\n }\n }\n }\n\n // Unlikely, types are expected to be verified before the function call\n throw new MichelsonTypeError(\n t,\n undefined,\n `${typeID(t)}: not comparable values: ${JSON.stringify(a)}, ${JSON.stringify(b)}`\n );\n}\n\n// Simplified version of assertMichelsonInstruction() for previously validated data\nfunction isFunction(d: MichelsonData): d is InstructionList {\n if (!Array.isArray(d)) {\n return false;\n }\n for (const v of d) {\n if (!((Array.isArray(v) && isFunction(v)) || ('prim' in v && isInstruction(v)))) {\n return false;\n }\n }\n return true;\n}\n\nfunction assertDataValidInternal(d: MichelsonData, t: MichelsonType, ctx: Context | null): void {\n if (isPairType(t)) {\n if (isPairData(d)) {\n assertDataListIfAny(d);\n const dc = unpackComb('Pair', d);\n const tc = unpackComb('pair', t);\n assertDataValidInternal(dc.args[0], tc.args[0], ctx);\n assertDataValidInternal(dc.args[1], tc.args[1], ctx);\n return;\n }\n throw new MichelsonTypeError(t, d, `pair expected: ${JSON.stringify(d)}`);\n }\n\n switch (t.prim) {\n // Atomic literals\n case 'int':\n if ('int' in d && isDecimal(d.int)) {\n return;\n }\n throw new MichelsonTypeError(t, d, `integer value expected: ${JSON.stringify(d)}`);\n\n case 'nat':\n case 'mutez':\n if ('int' in d && isNatural(d.int)) {\n return;\n }\n throw new MichelsonTypeError(t, d, `natural value expected: ${JSON.stringify(d)}`);\n\n case 'string':\n if ('string' in d) {\n return;\n }\n throw new MichelsonTypeError(t, d, `string value expected: ${JSON.stringify(d)}`);\n\n case 'bytes':\n case 'bls12_381_g1':\n case 'bls12_381_g2':\n if ('bytes' in d && parseBytes(d.bytes) !== null) {\n return;\n }\n throw new MichelsonTypeError(t, d, `bytes value expected: ${JSON.stringify(d)}`);\n\n case 'bool':\n if ('prim' in d && (d.prim === 'True' || d.prim === 'False')) {\n return;\n }\n throw new MichelsonTypeError(t, d, `boolean value expected: ${JSON.stringify(d)}`);\n\n case 'key_hash':\n if (\n 'string' in d &&\n checkDecodeTezosID(\n d.string,\n 'ED25519PublicKeyHash',\n 'SECP256K1PublicKeyHash',\n 'P256PublicKeyHash'\n ) !== null\n ) {\n return;\n } else if ('bytes' in d) {\n try {\n decodePublicKeyHashBytes(d);\n return;\n } catch (err) {\n // ignore message\n }\n }\n throw new MichelsonTypeError(t, d, `key hash expected: ${JSON.stringify(d)}`);\n\n case 'timestamp':\n if (('string' in d || 'int' in d) && parseDate(d) !== null) {\n return;\n }\n throw new MichelsonTypeError(t, d, `timestamp expected: ${JSON.stringify(d)}`);\n\n case 'address':\n if ('string' in d) {\n let address = d.string;\n const ep = d.string.indexOf('%');\n if (ep >= 0) {\n // trim entry point\n address = d.string.slice(0, ep);\n }\n if (\n checkDecodeTezosID(\n address,\n 'ED25519PublicKeyHash',\n 'SECP256K1PublicKeyHash',\n 'P256PublicKeyHash',\n 'ContractHash',\n 'TxRollupL2Address',\n 'RollupAddress'\n ) !== null\n ) {\n return;\n }\n } else if ('bytes' in d) {\n try {\n decodeAddressBytes(d);\n return;\n } catch (err) {\n // ignore message\n }\n }\n throw new MichelsonTypeError(t, d, `address expected: ${JSON.stringify(d)}`);\n\n case 'key':\n if (\n 'string' in d &&\n checkDecodeTezosID(d.string, 'ED25519PublicKey', 'SECP256K1PublicKey', 'P256PublicKey') !==\n null\n ) {\n return;\n } else if ('bytes' in d) {\n try {\n decodePublicKeyBytes(d);\n return;\n } catch (err) {\n // ignore message\n }\n }\n throw new MichelsonTypeError(t, d, `public key expected: ${JSON.stringify(d)}`);\n\n case 'unit':\n if ('prim' in d && d.prim === 'Unit') {\n return;\n }\n throw new MichelsonTypeError(t, d, `unit value expected: ${JSON.stringify(d)}`);\n\n case 'signature':\n if (\n 'bytes' in d ||\n ('string' in d &&\n checkDecodeTezosID(\n d.string,\n 'ED25519Signature',\n 'SECP256K1Signature',\n 'P256Signature',\n 'GenericSignature'\n ) !== null)\n ) {\n return;\n }\n throw new MichelsonTypeError(t, d, `signature expected: ${JSON.stringify(d)}`);\n\n case 'chain_id':\n if ('bytes' in d || 'string' in d) {\n const x = 'string' in d ? decodeBase58Check(d.string) : parseBytes(d.bytes);\n if (x !== null) {\n return;\n }\n }\n throw new MichelsonTypeError(t, d, `chain id expected: ${JSON.stringify(d)}`);\n\n // Complex types\n case 'option':\n if ('prim' in d) {\n if (d.prim === 'None') {\n return;\n } else if (d.prim === 'Some') {\n assertDataValidInternal(d.args[0], t.args[0], ctx);\n return;\n }\n }\n throw new MichelsonTypeError(t, d, `option expected: ${JSON.stringify(d)}`);\n\n case 'list':\n case 'set':\n if (assertDataListIfAny(d)) {\n //let prev: MichelsonData | undefined;\n for (const v of d) {\n assertDataValidInternal(v, t.args[0], ctx);\n }\n return;\n }\n throw new MichelsonTypeError(t, d, `${t.prim} expected: ${JSON.stringify(d)}`);\n\n case 'or':\n if ('prim' in d) {\n if (d.prim === 'Left') {\n assertDataValidInternal(d.args[0], t.args[0], ctx);\n return;\n } else if (d.prim === 'Right') {\n assertDataValidInternal(d.args[0], t.args[1], ctx);\n return;\n }\n }\n throw new MichelsonTypeError(t, d, `union (or) expected: ${JSON.stringify(d)}`);\n\n case 'lambda':\n if (isFunction(d)) {\n const ret = functionTypeInternal(d, [t.args[0]], ctx);\n if ('failed' in ret) {\n throw new MichelsonTypeError(t, d, `function is failed with error type: ${ret.failed}`);\n }\n if (ret.length !== 1) {\n throw new MichelsonTypeError(t, d, 'function must return a value');\n }\n assertScalarTypesEqual(t.args[1], ret[0]);\n return;\n }\n throw new MichelsonTypeError(t, d, `function expected: ${JSON.stringify(d)}`);\n\n case 'map':\n case 'big_map':\n if (Array.isArray(d)) {\n //let prev: MichelsonMapElt | undefined;\n for (const v of d) {\n if (!('prim' in v) || v.prim !== 'Elt') {\n throw new MichelsonTypeError(t, d, `map elements expected: ${JSON.stringify(d)}`);\n }\n assertDataValidInternal(v.args[0], t.args[0], ctx);\n assertDataValidInternal(v.args[1], t.args[1], ctx);\n }\n return;\n }\n throw new MichelsonTypeError(t, d, `${t.prim} expected: ${JSON.stringify(d)}`);\n\n case 'bls12_381_fr':\n if (('int' in d && isDecimal(d.int)) || ('bytes' in d && parseBytes(d.bytes) !== null)) {\n return;\n }\n throw new MichelsonTypeError(t, d, `BLS12-381 element expected: ${JSON.stringify(d)}`);\n\n case 'sapling_state':\n if (Array.isArray(d)) {\n return;\n }\n throw new MichelsonTypeError(t, d, `sapling state expected: ${JSON.stringify(d)}`);\n\n case 'ticket':\n assertDataValidInternal(\n d,\n {\n prim: 'pair',\n args: [{ prim: 'address' }, t.args[0], { prim: 'nat' }],\n },\n ctx\n );\n return;\n\n default:\n throw new MichelsonTypeError(\n t,\n d,\n `type ${typeID(t)} don't have Michelson literal representation`\n );\n }\n}\n\n// Code validation\n\ntype StackType<T extends (MichelsonTypeID[] | null)[]> = {\n [N in keyof T]: T[N] extends MichelsonTypeID[] ? MichelsonType<T[N][number]> : MichelsonType;\n};\n\nexport interface InstructionTrace {\n op: MichelsonCode;\n in: MichelsonType[];\n out: MichelsonReturnType;\n}\n\nfunction instructionListType(\n inst: InstructionList,\n stack: MichelsonType[],\n ctx: Context | null\n): MichelsonReturnType {\n let ret: MichelsonReturnType = stack;\n let s = stack;\n let i = 0;\n for (const op of inst) {\n const ft = functionTypeInternal(op, s, ctx);\n ret = ft;\n if ('failed' in ft) {\n break;\n }\n s = ft;\n i++;\n }\n\n if (\n 'failed' in ret &&\n ret.level == 0 &&\n (!('prim' in ret.failed) || ret.failed.prim !== 'never') &&\n i !== inst.length - 1\n ) {\n throw new MichelsonInstructionError(inst, ret, 'FAIL must appear in a tail position');\n }\n\n if (ctx?.traceCallback !== undefined) {\n const trace: InstructionTrace = {\n op: inst,\n in: stack,\n out: ret,\n };\n ctx.traceCallback(trace);\n }\n return 'failed' in ret ? { failed: ret.failed, level: ret.level + 1 } : ret;\n}\n\nfunction functionTypeInternal(\n inst: MichelsonCode,\n stack: MichelsonType[],\n ctx: Context | null\n): MichelsonReturnType {\n const proto = ctx?.protocol || DefaultProtocol;\n\n if (Array.isArray(inst)) {\n return instructionListType(inst, stack, ctx);\n }\n const instruction = inst; // Make it const for type guarding\n\n // make sure the stack has enough number of arguments of specific types\n function args<T extends (MichelsonTypeID[] | null)[]>(n: number, ...typeIds: T): StackType<T> {\n if (stack.length < typeIds.length + n) {\n throw new MichelsonInstructionError(\n instruction,\n stack,\n `${instruction.prim}: stack must have at least ${typeIds.length} element(s)`\n );\n }\n\n let i = n;\n for (const ids of typeIds) {\n if (ids !== null && ids.length !== 0) {\n let ii = 0;\n while (ii < ids.length && ids[ii] !== typeID(stack[i])) {\n ii++;\n }\n if (ii === ids.length) {\n throw new MichelsonInstructionError(\n instruction,\n stack,\n `${instruction.prim}: stack type mismatch: [${i}] expected to be ${ids}, got ${typeID(\n stack[i]\n )} instead`\n );\n }\n }\n i++;\n }\n return stack.slice(n, typeIds.length + n) as StackType<T>;\n }\n\n function rethrow<T extends unknown[], U>(fn: (...args: T) => U) {\n return (...args: T): U => {\n try {\n return fn(...args);\n } catch (err) {\n if (err instanceof MichelsonError) {\n throw new MichelsonInstructionError(instruction, stack, err.message);\n } else {\n throw err;\n }\n }\n };\n }\n\n function rethrowTypeGuard<T extends Expr, U extends MichelsonType & T>(fn: (arg: T) => arg is U) {\n return (arg: T): arg is U => {\n try {\n return fn(arg);\n } catch (err) {\n if (err instanceof MichelsonError) {\n throw new MichelsonInstructionError(instruction, stack, err.message);\n } else {\n throw err;\n }\n }\n };\n }\n\n const argAnn = rethrow(unpackAnnotations);\n const ensureStacksEqual = rethrow(assertStacksEqual);\n const ensureTypesEqual = rethrow(assertScalarTypesEqual);\n const ensureComparableType = rethrowTypeGuard(assertMichelsonComparableType);\n const ensurePackableType = rethrowTypeGuard(assertMichelsonPackableType);\n const ensureStorableType = rethrowTypeGuard(assertMichelsonStorableType);\n const ensurePushableType = rethrowTypeGuard(assertMichelsonPushableType);\n const ensureBigMapStorableType = rethrowTypeGuard(assertMichelsonBigMapStorableType);\n\n // unpack instruction annotations and assert their maximum number\n function instructionAnn(\n num: { f?: number; t?: number; v?: number },\n opt?: UnpackAnnotationsOptions\n ) {\n const a = argAnn(instruction, {\n ...opt,\n emptyFields: num.f !== undefined && num.f > 1,\n emptyVar: num.v !== undefined && num.v > 1,\n });\n const assertNum = (a: string[] | undefined, n: number | undefined, type: string) => {\n if (a && a.length > (n || 0)) {\n throw new MichelsonInstructionError(\n instruction,\n stack,\n `${instruction.prim}: at most ${n || 0} ${type} annotations allowed`\n );\n }\n };\n assertNum(a.f, num.f, 'field');\n assertNum(a.t, num.t, 'type');\n assertNum(a.v, num.v, 'variable');\n return a;\n }\n\n // also keeps annotation class if null is provided\n function annotate<T extends MichelsonType>(tt: T, a: Nullable<UnpackedAnnotations>): T {\n const tx: MichelsonType = tt;\n const t: Extract<MichelsonType, Prim> = Array.isArray(tx) ? { prim: 'pair', args: tx } : tx;\n const src = argAnn(t);\n const ann =\n a.v !== undefined || a.t !== undefined || a.f !== undefined\n ? [\n ...((a.v === null ? src.v : a.v) || []),\n ...((a.t === null ? src.t : a.t) || []),\n ...((a.f === null ? src.f : a.f) || []),\n ]\n : undefined;\n\n const { annots: _annots, ...rest } = t;\n return { ...(rest as T), ...(ann && ann.length !== 0 && { annots: ann }) };\n }\n\n // shortcut to copy at most one variable annotation from the instruction to the type\n function annotateVar<T extends MichelsonType>(t: T, def?: string) {\n const ia = instructionAnn({ v: 1 });\n return annotate(t, {\n v: ia.v !== undefined ? ia.v : def !== undefined ? [def] : null,\n t: null,\n });\n }\n\n // annotate CAR/CDR/UNPAIR/GET\n function annotateField(\n arg: MichelsonTypePair<MichelsonType[]>,\n field: MichelsonType,\n insAnn: UnpackedAnnotations,\n n: number,\n defField: string\n ): MichelsonType {\n const fieldAnn = argAnn(field).f?.[0]; // field's field annotation\n const insFieldAnn = insAnn.f?.[n];\n if (\n insFieldAnn !== undefined &&\n insFieldAnn !== '%' &&\n fieldAnn !== undefined &&\n insFieldAnn !== fieldAnn\n ) {\n throw new MichelsonInstructionError(\n instruction,\n stack,\n `${instruction.prim}: field names doesn't match: ${insFieldAnn} !== ${fieldAnn}`\n );\n }\n const insVarAnn = insAnn.v?.[n]; // nth instruction's variable annotation\n const varAnn = argAnn(arg).v?.[0]; // instruction argument's variable annotation\n return annotate(field, {\n t: null,\n v: insVarAnn\n ? insVarAnn === '@%'\n ? fieldAnn\n ? ['@' + fieldAnn.slice(1)]\n : undefined\n : insVarAnn === '@%%'\n ? varAnn\n ? ['@' + varAnn.slice(1) + '.' + (fieldAnn ? fieldAnn.slice(1) : defField)]\n : fieldAnn\n ? ['@' + fieldAnn.slice(1)]\n : undefined\n : [insVarAnn]\n : null,\n });\n }\n\n // comb helper functions\n function getN(\n src: MichelsonTypePair<MichelsonType[]>,\n n: number,\n i: number = n\n ): MichelsonType[] {\n const p = unpackComb('pair', src);\n if (i === 1) {\n return [p.args[0]];\n } else if (i === 2) {\n return p.args;\n }\n const right = p.args[1];\n if (isPairType(right)) {\n return [p.args[0], ...getN(right, n, i - 1)];\n } else {\n throw new MichelsonInstructionError(\n instruction,\n stack,\n `${instruction.prim}: at least ${n} fields are expected`\n );\n }\n }\n\n function getNth(\n src: MichelsonTypePair<MichelsonType[]>,\n n: number,\n i: number = n\n ): MichelsonType {\n if (i === 0) {\n return src;\n }\n const p = unpackComb('pair', src);\n if (i === 1) {\n return p.args[0];\n }\n const right = p.args[1];\n if (isPairType(right)) {\n return getNth(right, n, i - 2);\n } else if (i === 2) {\n return right;\n }\n throw new MichelsonInstructionError(\n instruction,\n stack,\n `${instruction.prim}: at least ${n + 1} fields are expected`\n );\n }\n\n function updateNth(\n src: MichelsonTypePair<MichelsonType[]>,\n x: MichelsonType,\n n: number,\n i: number = n\n ): MichelsonType {\n if (i === 0) {\n return x;\n }\n const p = unpackComb('pair', src);\n if (i === 1) {\n return {\n ...p,\n args: [x, p.args[1]],\n };\n }\n const right = p.args[1];\n if (isPairType(right)) {\n return {\n ...p,\n args: [p.args[0], updateNth(right, x, n, i - 2)],\n };\n } else if (i === 2) {\n return {\n ...p,\n args: [p.args[0], x],\n };\n }\n throw new MichelsonInstructionError(\n instruction,\n stack,\n `${instruction.prim}: at least ${n + 1} fields are expected`\n );\n }\n\n const varSuffix = (a: UnpackedAnnotations, suffix: string) => [\n '@' + (a.v ? a.v[0].slice(1) + '.' : '') + suffix,\n ];\n\n function branchType(br0: MichelsonReturnType, br1: MichelsonReturnType): MichelsonReturnType {\n if ('failed' in br0 || 'failed' in br1) {\n return 'failed' in br0 ? br1 : br0;\n } else {\n ensureStacksEqual(br0, br1);\n return br0;\n }\n }\n\n const retStack = ((instruction: MichelsonInstruction): MichelsonReturnType => {\n switch (instruction.prim) {\n case 'DUP': {\n const n = instruction.args ? parseInt(instruction.args[0].int, 10) : 1;\n if (n === 0) {\n throw new MichelsonInstructionError(instruction, stack, 'DUP 0 is forbidden');\n }\n const s = args(n - 1, null)[0];\n if (typeID(s) === 'ticket') {\n throw new MichelsonInstructionError(instruction, stack, \"ticket can't be DUPed\");\n }\n return [s, ...stack];\n }\n\n case 'SWAP': {\n const s = args(0, null, null);\n instructionAnn({});\n return [s[1], s[0], ...stack.slice(2)];\n }\n\n case 'SOME':\n return [\n annotate({ prim: 'option', args: [args(0, null)[0]] }, instructionAnn({ t: 1, v: 1 })),\n ...stack.slice(1),\n ];\n\n case 'UNIT':\n return [annotate({ prim: 'unit' }, instructionAnn({ v: 1, t: 1 })), ...stack];\n\n case 'PAIR': {\n const n = instruction.args ? parseInt(instruction.args[0].int, 10) : 2;\n if (n < 2) {\n throw new MichelsonInstructionError(instruction, stack, `PAIR ${n} is forbidden`);\n }\n const s = args(0, ...new Array<null>(n).fill(null));\n const ia = instructionAnn({ f: n, t: 1, v: 1 }, { specialFields: true });\n const trim = (s: string) => {\n const i = s.lastIndexOf('.');\n return s.slice(i > 0 ? i + 1 : 1);\n };\n const retArgs = s.map((v, i) => {\n const va = argAnn(v);\n const f =\n ia.f && ia.f.length > i && ia.f[i] !== '%'\n ? ia.f[i] === '%@'\n ? va.v\n ? ['%' + trim(va.v?.[0] || '')]\n : undefined\n : [ia.f[i]]\n : undefined;\n return annotate(v, { v: null, t: null, f });\n });\n return [\n annotate(\n {\n prim: 'pair',\n args: retArgs,\n },\n { t: ia.t, v: ia.v }\n ),\n ...stack.slice(n),\n ];\n }\n\n case 'UNPAIR': {\n const n = instruction.args ? parseInt(instruction.args[0].int, 10) : 2;\n if (n < 2) {\n throw new MichelsonInstructionError(instruction, stack, `UNPAIR ${n} is forbidden`);\n }\n const s = args(0, ['pair'])[0];\n const ia = instructionAnn({ f: 2, v: 2 }, { specialVar: true });\n const fields = getN(s, n);\n return [\n ...fields.map((field, i) => annotateField(s, field, ia, i, i === 0 ? 'car' : 'cdr')),\n ...stack.slice(1),\n ];\n }\n\n case 'CAR':\n case 'CDR': {\n const s = unpackComb('pair', args(0, ['pair'])[0]);\n const field = s.args[instruction.prim === 'CAR' ? 0 : 1];\n const ia = instructionAnn({ f: 1, v: 1 }, { specialVar: true });\n return [\n annotateField(s, field, ia, 0, instruction.prim.toLocaleLowerCase()),\n ...stack.slice(1),\n ];\n }\n\n case 'CONS': {\n const s = args(0, null, ['list']);\n ensureTypesEqual(s[0], s[1].args[0]);\n return [annotateVar({ prim: 'list', args: [s[1].args[0]] }), ...stack.slice(2)];\n }\n\n case 'SIZE':\n args(0, ['string', 'list', 'set', 'map', 'bytes']);\n return [annotateVar({ prim: 'nat' }), ...stack.slice(1)];\n\n case 'MEM': {\n const s = args(0, null, ['set', 'map', 'big_map']);\n ensureComparableType(s[0]);\n ensureTypesEqual(s[0], s[1].args[0]);\n return [annotateVar({ prim: 'bool' }), ...stack.slice(2)];\n }\n\n case 'GET':\n if (instruction.args) {\n // comb operation\n const n = parseInt(instruction.args[0].int, 10);\n const s = args(0, ['pair'])[0];\n return [annotateVar(getNth(s, n)), ...stack.slice(1)];\n } else {\n // map operation\n const s = args(0, null, ['map', 'big_map']);\n ensureComparableType(s[0]);\n ensureTypesEqual(s[0], s[1].args[0]);\n return [annotateVar({ prim: 'option', args: [s[1].args[1]] }), ...stack.slice(2)];\n }\n\n case 'UPDATE':\n if (instruction.args) {\n // comb operation\n const n = parseInt(instruction.args[0].int, 10);\n const s = args(0, null, ['pair']);\n return [annotateVar(updateNth(s[1], s[0], n)), ...stack.slice(2)];\n } else {\n // map operation\n const s0 = args(0, null, ['bool', 'option']);\n ensureComparableType(s0[0]);\n if (s0[1].prim === 'bool') {\n const s1 = args(2, ['set']);\n ensureTypesEqual(s0[0], s1[0].args[0]);\n return [\n annotateVar({\n prim: 'set',\n args: [annotate(s0[0], { t: null })],\n }),\n ...stack.slice(3),\n ];\n }\n\n const s1 = args(2, ['map', 'big_map']);\n ensureTypesEqual(s0[0], s1[0].args[0]);\n if (s1[0].prim === 'map') {\n return [\n annotateVar({\n prim: 'map',\n args: [annotate(s0[0], { t: null }), annotate(s0[1].args[0], { t: null })],\n }),\n ...stack.slice(3),\n ];\n }\n ensureBigMapStorableType(s0[1].args[0]);\n return [\n annotateVar({\n prim: 'big_map',\n args: [annotate(s0[0], { t: null }), annotate(s0[1].args[0], { t: null })],\n }),\n ...stack.slice(3),\n ];\n }\n\n case 'GET_AND_UPDATE': {\n const ia = instructionAnn({ v: 2 });\n const s = args(0, null, ['option'], ['map', 'big_map']);\n ensureComparableType(s[0]);\n ensureTypesEqual(s[0], s[2].args[0]);\n ensureTypesEqual(s[1].args[0], s[2].args[1]);\n const va = ia.v?.map((v) => (v !== '@' ? [v] : undefined));\n if (s[2].prim === 'map') {\n return [\n annotate({ prim: 'option', args: [s[2].args[1]] }, { v: va?.[0] }),\n annotate(\n {\n prim: 'map',\n args: [annotate(s[0], { t: null }), annotate(s[1].args[0], { t: null })],\n },\n { v: va?.[1] }\n ),\n ...stack.slice(3),\n ];\n }\n ensureBigMapStorableType(s[1].args[0]);\n return [\n annotate({ prim: 'option', args: [s[2].args[1]] }, { v: va?.[0] }),\n annotate(\n {\n prim: 'big_map',\n args: [annotate(s[0], { t: null }), annotate(s[1].args[0], { t: null })],\n },\n { v: va?.[1] }\n ),\n ...stack.slice(3),\n ];\n }\n\n case 'EXEC': {\n const s = args(0, null, ['lambda']);\n ensureTypesEqual(s[0], s[1].args[0]);\n return [annotateVar(s[1].args[1]), ...stack.slice(2)];\n }\n\n case 'APPLY': {\n const s = args(0, null, ['lambda']);\n ensureStorableType(s[0]);\n ensurePushableType(s[0]);\n if (!isPairType(s[1].args[0])) {\n throw new MichelsonInstructionError(\n instruction,\n stack,\n `${instruction.prim}: function's argument must be a pair: ${typeID(s[1].args[0])}`\n );\n }\n const pt = s[1].args[0];\n ensureTypesEqual(s[0], typeArgs(pt)[0]);\n return [\n annotateVar({ prim: 'lambda', args: [typeArgs(pt)[1], s[1].args[1]] }),\n ...stack.slice(2),\n ];\n }\n\n case 'FAILWITH': {\n const s = args(0, null)[0];\n if (!ProtoInferiorTo(proto, Protocol.PtEdo2Zk)) {\n ensurePackableType(s);\n }\n return { failed: s, level: 0 };\n }\n\n case 'NEVER':\n args(0, ['never']);\n return { failed: { prim: 'never' }, level: 0 };\n\n case 'RENAME':\n return [annotateVar(args(0, null)[0]), ...stack.slice(1)];\n\n case 'CONCAT': {\n const s0 = args(0, ['string', 'list', 'bytes']);\n if (s0[0].prim === 'list') {\n if (typeID(s0[0].args[0]) !== 'string' && typeID(s0[0].args[0]) !== 'bytes') {\n throw new MichelsonInstructionError(\n instruction,\n stack,\n `${instruction.prim}: can't concatenate list of ${typeID(s0[0].args[0])}'s`\n );\n }\n return [annotateVar(s0[0].args[0]), ...stack.slice(1)];\n }\n const s1 = args(1, ['string', 'bytes']);\n if (s0[0].prim !== s1[0].prim) {\n throw new MichelsonInstructionError(\n instruction,\n stack,\n `${instruction.prim}: can't concatenate ${s0[0].prim} with ${s1[0].prim}`\n );\n }\n return [annotateVar(s1[0]), ...stack.slice(2)];\n }\n\n case 'SLICE':\n return [\n annotateVar(\n { prim: 'option', args: [args(0, ['nat'], ['nat'], ['string', 'bytes'])[2]] },\n '@slice'\n ),\n ...stack.slice(3),\n ];\n\n case 'PACK': {\n const s = args(0, null)[0];\n ensurePackableType(s);\n return [annotateVar({ prim: 'bytes' }, '@packed'), ...stack.slice(1)];\n }\n\n case 'ADD': {\n const s = args(\n 0,\n ['nat', 'int', 'timestamp', 'mutez', 'bls12_381_g1', 'bls12_381_g2', 'bls12_381_fr'],\n ['nat', 'int', 'timestamp', 'mutez', 'bls12_381_g1', 'bls12_381_g2', 'bls12_381_fr']\n );\n if (\n (s[0].prim === 'nat' && s[1].prim === 'int') ||\n (s[0].prim === 'int' && s[1].prim === 'nat')\n ) {\n return [annotateVar({ prim: 'int' }), ...stack.slice(2)];\n } else if (\n (s[0].prim === 'int' && s[1].prim === 'timestamp') ||\n (s[0].prim === 'timestamp' && s[1].prim === 'int')\n ) {\n return [annotateVar({ prim: 'timestamp' }), ...stack.slice(2)];\n } else if (\n (s[0].prim === 'int' ||\n s[0].prim === 'nat' ||\n s[0].prim === 'mutez' ||\n s[0].prim === 'bls12_381_g1' ||\n s[0].prim === 'bls12_381_g2' ||\n s[0].prim === 'bls12_381_fr') &&\n s[0].prim === s[1].prim\n ) {\n return [annotateVar(s[0]), ...stack.slice(2)];\n }\n throw new MichelsonInstructionError(\n instruction,\n stack,\n `${instruction.prim}: can't add ${s[0].prim} to ${s[1].prim}`\n );\n }\n\n case 'SUB': {\n const s = ProtoInferiorTo(proto, Protocol.PsiThaCa)\n ? args(0, ['nat', 'int', 'timestamp', 'mutez'], ['nat', 'int', 'timestamp', 'mutez'])\n : args(0, ['nat', 'int', 'timestamp'], ['nat', 'int', 'timestamp']);\n\n if (\n ((s[0].prim === 'nat' || s[0].prim === 'int') &&\n (s[1].prim === 'nat' || s[1].prim === 'int')) ||\n (s[0].prim === 'timestamp' && s[1].prim === 'timestamp')\n ) {\n return [annotateVar({ prim: 'int' }), ...stack.slice(2)];\n } else if (s[0].prim === 'timestamp' && s[1].prim === 'int') {\n return [annotateVar({ prim: 'timestamp' }), ...stack.slice(2)];\n } else if (s[0].prim === 'mutez' && s[1].prim === 'mutez') {\n return [annotateVar({ prim: 'mutez' }), ...stack.slice(2)];\n }\n throw new MichelsonInstructionError(\n instruction,\n stack,\n `${instruction.prim}: can't subtract ${s[0].prim} from ${s[1].prim}`\n );\n }\n\n case 'SUB_MUTEZ': {\n const _s = args(0, ['mutez'], ['mutez']);\n return [annotateVar({ prim: 'option', args: [{ prim: 'mutez' }] }), ...stack.slice(2)];\n }\n\n case 'MUL': {\n const s = args(\n 0,\n ['nat', 'int', 'mutez', 'bls12_381_g1', 'bls12_381_g2', 'bls12_381_fr'],\n ['nat', 'int', 'mutez', 'bls12_381_g1', 'bls12_381_g2', 'bls12_381_fr']\n );\n if (\n (s[0].prim === 'nat' && s[1].prim === 'int') ||\n (s[0].prim === 'int' && s[1].prim === 'nat')\n ) {\n return [annotateVar({ prim: 'int' }), ...stack.slice(2)];\n } else if (\n (s[0].prim === 'nat' && s[1].prim === 'mutez') ||\n (s[0].prim === 'mutez' && s[1].prim === 'nat')\n ) {\n return [annotateVar({ prim: 'mutez' }), ...stack.slice(2)];\n } else if (\n ((s[0].prim === 'bls12_381_g1' ||\n s[0].prim === 'bls12_381_g2' ||\n s[0].prim === 'bls12_381_fr') &&\n s[1].prim === 'bls12_381_fr') ||\n ((s[0].prim === 'nat' || s[0].prim === 'int') && s[0].prim === s[1].prim)\n ) {\n return [annotateVar(s[0]), ...stack.slice(2)];\n } else if (\n ((s[0].prim === 'nat' || s[0].prim === 'int') && s[1].prim === 'bls12_381_fr') ||\n ((s[1].prim === 'nat' || s[1].prim === 'int') && s[0].prim === 'bls12_381_fr')\n ) {\n return [annotateVar({ prim: 'bls12_381_fr' }), ...stack.slice(2)];\n }\n throw new MichelsonInstructionError(\n instruction,\n stack,\n `${instruction.prim}: can't multiply ${s[0].prim} by ${s[1].prim}`\n );\n }\n\n case 'EDIV': {\n const res = (\n a: 'nat' | 'int' | 'mutez',\n b: 'nat' | 'int' | 'mutez'\n ): MichelsonTypeOption<MichelsonType> => ({\n prim: 'option',\n args: [{ prim: 'pair', args: [{ prim: a }, { prim: b }] }],\n });\n const s = args(0, ['nat', 'int', 'mutez'], ['nat', 'int', 'mutez']);\n if (s[0].prim === 'nat' && s[1].prim === 'nat') {\n return [annotateVar(res('nat', 'nat')), ...stack.slice(2)];\n } else if (\n (s[0].prim === 'nat' || s[0].prim === 'int') &&\n (s[1].prim === 'nat' || s[1].prim === 'int')\n ) {\n return [annotateVar(res('int', 'nat')), ...stack.slice(2)];\n } else if (s[0].prim === 'mutez' && s[1].prim === 'nat') {\n return [annotateVar(res('mutez', 'mutez')), ...stack.slice(2)];\n } else if (s[0].prim === 'mutez' && s[1].prim === 'mutez') {\n return [annotateVar(res('nat', 'mutez')), ...stack.slice(2)];\n }\n throw new MichelsonInstructionError(\n instruction,\n stack,\n `${instruction.prim}: can't euclideally divide ${s[0].prim} by ${s[1].prim}`\n );\n }\n\n case 'ABS':\n args(0, ['int']);\n return [annotateVar({ prim: 'nat' }), ...stack.slice(1)];\n\n case 'ISNAT':\n args(0, ['int']);\n return [annotateVar({ prim: 'option', args: [{ prim: 'nat' }] }), ...stack.slice(1)];\n\n case 'INT':\n args(0, ['nat', 'bls12_381_fr']);\n return [annotateVar({ prim: 'int' }), ...stack.slice(1)];\n\n case 'NEG': {\n const s = args(0, ['nat', 'int', 'bls12_381_g1', 'bls12_381_g2', 'bls12_381_fr'])[0];\n if (s.prim === 'nat' || s.prim === 'int') {\n return [annotateVar({ prim: 'int' }), ...stack.slice(1)];\n }\n return [annotateVar(s), ...stack.slice(1)];\n }\n\n case 'LSL':\n case 'LSR':\n args(0, ['nat'], ['nat']);\n return [annotateVar({ prim: 'nat' }), ...stack.slice(2)];\n\n case 'OR':\n case 'XOR': {\n const s = args(0, ['nat', 'bool'], ['nat', 'bool']);\n if (s[0].prim !== s[1].prim) {\n throw new MichelsonInstructionError(\n instruction,\n stack,\n `${instruction.prim}: both arguments must be of the same type: ${s[0].prim}, ${s[1].prim}`\n );\n }\n return [annotateVar(s[1]), ...stack.slice(2)];\n }\n\n case 'AND': {\n const s = args(0, ['nat', 'bool', 'int'], ['nat', 'bool']);\n if ((s[0].prim !== 'int' || s[1].prim !== 'nat') && s[0].prim !== s[1].prim) {\n throw new MichelsonInstructionError(\n instruction,\n stack,\n `${instruction.prim}: both arguments must be of the same type: ${s[0].prim}, ${s[1].prim}`\n );\n }\n return [annotateVar(s[1]), ...stack.slice(2)];\n }\n\n case 'NOT': {\n const s = args(0, ['nat', 'bool', 'int'])[0];\n if (s.prim === 'bool') {\n return [annotateVar({ prim: 'bool' }), ...stack.slice(1)];\n }\n return [annotateVar({ prim: 'int' }), ...stack.slice(1)];\n }\n\n case 'COMPARE': {\n const s = args(0, null, null);\n ensureComparableType(s[0]);\n ensureComparableType(s[1]);\n return [annotateVar({ prim: 'int' }), ...stack.slice(2)];\n }\n\n case 'EQ':\n case 'NEQ':\n case 'LT':\n case 'GT':\n case 'LE':\n case 'GE':\n args(0, ['int']);\n return [annotateVar({ prim: 'bool' }), ...stack.slice(1)];\n\n case 'SELF': {\n if (ctx?.contract === undefined) {\n throw new MichelsonInstructionError(\n instruction,\n stack,\n `${instruction.prim}: contract required`\n );\n }\n const ia = instructionAnn({ f: 1, v: 1 });\n const ep = contractEntryPoint(ctx.contract, ia.f?.[0]);\n if (ep === null) {\n throw new MichelsonInstructionError(\n instruction,\n stack,\n `${instruction.prim}: contract has no entrypoint ${ep}`\n );\n }\n return [\n annotate({ prim: 'contract', args: [ep] }, { v: ia.v ? ia.v : ['@self'] }),\n ...stack,\n ];\n }\n\n case 'TRANSFER_TOKENS': {\n const s = args(0, null, ['mutez'], ['contract']);\n ensureTypesEqual(s[0], s[2].args[0]);\n return [annotateVar({ prim: 'operation' }), ...stack.slice(3)];\n }\n\n case 'SET_DELEGATE': {\n const s = args(0, ['option'])[0];\n if (typeID(s.args[0]) !== 'key_hash') {\n throw new MichelsonInstructionError(\n instruction,\n stack,\n `${instruction.prim}: key hash expected: ${typeID(s.args[0])}`\n );\n }\n return [annotateVar({ prim: 'operation' }), ...stack.slice(1)];\n }\n\n case 'IMPLICIT_ACCOUNT':\n args(0, ['key_hash']);\n return [annotateVar({ prim: 'contract', args: [{ prim: 'unit' }] }), ...stack.slice(1)];\n\n case 'NOW':\n return [annotateVar({ prim: 'timestamp' }, '@now'), ...stack];\n\n case 'AMOUNT':\n return [annotateVar({ prim: 'mutez' }, '@amount'), ...stack];\n\n case 'BALANCE':\n return [annotateVar({ prim: 'mutez' }, '@balance'), ...stack];\n\n case 'CHECK_SIGNATURE':\n args(0, ['key'], ['signature'], ['bytes']);\n return [annotateVar({ prim: 'bool' }), ...stack.slice(3)];\n\n case 'BLAKE2B':\n case 'SHA256':\n case 'SHA512':\n case 'KECCAK':\n case 'SHA3':\n args(0, ['bytes']);\n return [annotateVar({ prim: 'bytes' }), ...stack.slice(1)];\n\n case 'HASH_KEY':\n args(0, ['key']);\n return [annotateVar({ prim: 'key_hash' }), ...stack.slice(1)];\n\n case 'SOURCE':\n return [annotateVar({ prim: 'address' }, '@source'), ...stack];\n\n case 'SENDER':\n return [annotateVar({ prim: 'address' }, '@sender'), ...stack];\n\n case 'ADDRESS': {\n const s = args(0, ['contract'])[0];\n const ia = instructionAnn({ v: 1 });\n return [\n annotate(\n { prim: 'address', [refContract]: s },\n { v: ia.v ? ia.v : varSuffix(argAnn(s), 'address') }\n ),\n ...stack.slice(1),\n ];\n }\n\n case 'SELF_ADDRESS': {\n const addr: MichelsonTypeAddress = { prim: 'address' };\n if (ctx?.contract !== undefined) {\n addr[refContract] = {\n prim: 'contract',\n args: [contractSection(ctx.contract, 'parameter').args[0]],\n };\n }\n return [annotateVar(addr, '@address'), ...stack];\n }\n\n case 'CHAIN_ID':\n return [annotateVar({ prim: 'chain_id' }), ...stack];\n\n case 'DROP': {\n instructionAnn({});\n const n = instruction.args !== undefined ? parseInt(instruction.args[0].int, 10) : 1;\n args(n - 1, null);\n return stack.slice(n);\n }\n\n case 'DIG': {\n instructionAnn({});\n const n = parseInt(instruction.args[0].int, 10);\n return [args(n, null)[0], ...stack.slice(0, n), ...stack.slice(n + 1)];\n }\n\n case 'DUG': {\n instructionAnn({});\n const n = parseInt(instruction.args[0].int, 10);\n return [...stack.slice(1, n + 1), args(0, null)[0], ...stack.slice(n + 1)];\n }\n\n case 'NONE':\n assertTypeAnnotationsValid(instruction.args[0]);\n return [\n annotate({ prim: 'option', args: [instruction.args[0]] }, instructionAnn({ t: 1, v: 1 })),\n ...stack,\n ];\n\n case 'LEFT':\n case 'RIGHT': {\n const s = args(0, null)[0];\n const ia = instructionAnn({ f: 2, t: 1, v: 1 }, { specialFields: true });\n const va = argAnn(s);\n\n const children: [MichelsonType, MichelsonType] = [\n annotate(s, {\n t: null,\n v: null,\n f:\n ia.f && ia.f.length > 0 && ia.f[0] !== '%'\n ? ia.f[0] === '%@'\n ? va.v\n ? ['%' + va.v[0].slice(1)]\n : undefined\n : ia.f\n : undefined,\n }),\n annotate(instruction.args[0], {\n t: null,\n f: ia.f && ia.f.length > 1 && ia.f[1] !== '%' ? ia.f : undefined,\n }),\n ];\n\n return [\n annotate(\n {\n prim: 'or',\n args: instruction.prim === 'LEFT' ? children : [children[1], children[0]],\n },\n { t: ia.t, v: ia.v }\n ),\n ...stack.slice(1),\n ];\n }\n\n case 'NIL':\n assertTypeAnnotationsValid(instruction.args[0]);\n return [\n annotate({ prim: 'list', args: [instruction.args[0]] }, instructionAnn({ t: 1, v: 1 })),\n ...stack,\n ];\n\n case 'UNPACK':\n args(0, ['bytes']);\n assertTypeAnnotationsValid(instruction.args[0]);\n return [\n annotateVar({ prim: 'option', args: [instruction.args[0]] }, '@unpacked'),\n ...stack.slice(1),\n ];\n\n case 'CONTRACT': {\n const s = args(0, ['address'])[0];\n assertTypeAnnotationsValid(instruction.args[0]);\n const ia = instructionAnn({ v: 1, f: 1 });\n const contract = s[refContract];\n if (contract !== undefined) {\n const ep = contractEntryPoint(contract, ia.f?.[0]);\n if (ep === null) {\n throw new MichelsonInstructionError(\n instruction,\n stack,\n `${instruction.prim}: contract has no entrypoint ${ep}`\n );\n }\n ensureTypesEqual(ep, instruction.args[0]);\n }\n return [\n annotate(\n { prim: 'option', args: [{ prim: 'contract', args: [instruction.args[0]] }] },\n { v: ia.v ? ia.v : varSuffix(argAnn(s), 'contract') }\n ),\n ...stack.slice(1),\n ];\n }\n\n case 'CAST': {\n instructionAnn({});\n const s = args(0, null)[0];\n assertTypeAnnotationsValid(instruction.args[0]);\n ensureTypesEqual(instruction.args[0], s);\n return [instruction.args[0], ...stack.slice(1)];\n }\n\n case 'IF_NONE': {\n instructionAnn({});\n const s = args(0, ['option'])[0];\n const tail = stack.slice(1);\n const br0 = functionTypeInternal(instruction.args[0], tail, ctx);\n const br1 = functionTypeInternal(\n instruction.args[1],\n [annotate(s.args[0], { t: null, v: varSuffix(argAnn(s), 'some') }), ...tail],\n ctx\n );\n return branchType(br0, br1);\n }\n\n case 'IF_LEFT': {\n instructionAnn({});\n const s = args(0, ['or'])[0];\n const va = argAnn(s);\n const lefta = argAnn(s.args[0]);\n const righta = argAnn(s.args[1]);\n const tail = stack.slice(1);\n const br0 = functionTypeInternal(\n instruction.args[0],\n [\n annotate(s.args[0], {\n t: null,\n v: varSuffix(va, lefta.f ? lefta.f[0].slice(1) : 'left'),\n }),\n ...tail,\n ],\n ctx\n );\n const br1 = functionTypeInternal(\n instruction.args[1],\n [\n annotate(s.args[1], {\n t: null,\n v: varSuffix(va, righta.f ? righta.f[0].slice(1) : 'right'),\n }),\n ...tail,\n ],\n ctx\n );\n return branchType(br0, br1);\n }\n\n case 'IF_CONS': {\n instructionAnn({});\n const s = args(0, ['list'])[0];\n const va = argAnn(s);\n const tail = stack.slice(1);\n const br0 = functionTypeInternal(\n instruction.args[0],\n [\n annotate(s.args[0], { t: null, v: varSuffix(va, 'hd') }),\n annotate(s, { t: null, v: varSuffix(va, 'tl') }),\n ...tail,\n ],\n ctx\n );\n const br1 = functionTypeInternal(instruction.args[1], tail, ctx);\n return branchType(br0, br1);\n }\n\n case 'IF': {\n instructionAnn({});\n args(0, ['bool']);\n const tail = stack.slice(1);\n const br0 = functionTypeInternal(instruction.args[0], tail, ctx);\n const br1 = functionTypeInternal(instruction.args[1], tail, ctx);\n return branchType(br0, br1);\n }\n\n case 'MAP': {\n const s = args(0, ['list', 'map', 'option'])[0];\n const tail = stack.slice(1);\n const elt = s.prim === 'map' ? { prim: 'pair' as const, args: s.args } : s.args[0];\n const body = functionTypeInternal(\n instruction.args[0],\n [annotate(elt, { t: null, v: varSuffix(argAnn(s), 'elt') }), ...tail],\n ctx\n );\n if ('failed' in body) {\n if (!('prim' in body.failed) || body.failed.prim !== 'never') {\n throw new MichelsonInstructionError(\n instruction,\n stack,\n `${instruction.prim}: FAIL is not allowed in MAP`\n );\n }\n return { failed: body.failed, level: body.level + 1 };\n }\n if (body.length < 1) {\n throw new MichelsonInstructionError(\n instruction,\n stack,\n `${instruction.prim}: function must return a value`\n );\n }\n ensureStacksEqual(body.slice(1), tail);\n return s.prim === 'list'\n ? [annotateVar({ prim: 'list', args: [body[0]] }), ...tail]\n : s.prim === 'map'\n ? [annotateVar({ prim: 'map', args: [s.args[0], body[0]] }), ...tail]\n : [annotateVar({ prim: 'option', args: [body[0]] }), ...tail];\n }\n\n case 'ITER': {\n instructionAnn({});\n const s = args(0, ['set', 'list', 'map'])[0];\n const tail = stack.slice(1);\n const elt = s.prim === 'map' ? { prim: 'pair' as const, args: s.args } : s.args[0];\n const body = functionTypeInternal(\n instruction.args[0],\n [annotate(elt, { t: null, v: varSuffix(argAnn(s), 'elt') }), ...tail],\n ctx\n );\n if ('failed' in body) {\n return { failed: body.failed, level: body.level + 1 };\n }\n ensureStacksEqual(body, tail);\n return tail;\n }\n\n case 'LOOP': {\n instructionAnn({});\n args(0, ['bool']);\n const tail = stack.slice(1);\n const body = functionTypeInternal(instruction.args[0], tail, ctx);\n if ('failed' in body) {\n return { failed: body.failed, level: body.level + 1 };\n }\n ensureStacksEqual(body, [{ prim: 'bool' }, ...tail]);\n return tail;\n }\n\n case 'LOOP_LEFT': {\n instructionAnn({});\n const s = args(0, ['or'])[0];\n const tail = stack.slice(1);\n const body = functionTypeInternal(\n instruction.args[0],\n [annotate(s.args[0], { t: null, v: varSuffix(argAnn(s), 'left') }), ...tail],\n ctx\n );\n if ('failed' in body) {\n return { failed: body.failed, level: body.level + 1 };\n }\n ensureStacksEqual(body, [s, ...tail]);\n return [annotate(s.args[1], { t: null, v: instructionAnn({ v: 1 }).v }), ...tail];\n }\n\n case 'DIP': {\n instructionAnn({});\n const n = instruction.args.length === 2 ? parseInt(instruction.args[0].int, 10) : 1;\n args(n - 1, null);\n const head = stack.slice(0, n);\n const tail = stack.slice(n);\n // ternary operator is a type guard so use it instead of just `instruction.args.length - 1`\n const body =\n instruction.args.length === 2\n ? functionTypeInternal(instruction.args[1], tail, ctx)\n : functionTypeInternal(instruction.args[0], tail, ctx);\n if ('failed' in body) {\n return { failed: body.failed, level: body.level + 1 };\n }\n return [...head, ...body];\n }\n\n case 'CREATE_CONTRACT': {\n const ia = instructionAnn({ v: 2 });\n const s = args(0, ['option'], ['mutez'], null);\n if (typeID(s[0].args[0]) !== 'key_hash') {\n throw new MichelsonInstructionError(\n instruction,\n stack,\n `${instruction.prim}: key hash expected: ${typeID(s[0].args[0])}`\n );\n }\n if (ensureStorableType(s[2])) {\n assertContractValid(instruction.args[0]);\n assertScalarTypesEqual(contractSection(instruction.args[0], 'storage').args[0], s[2]);\n }\n\n const va = ia.v?.map((v) => (v !== '@' ? [v] : undefined));\n return [\n annotate({ prim: 'operation' }, { v: va?.[0] }),\n annotate(\n {\n prim: 'address',\n [refContract]: {\n prim: 'contract',\n args: [contractSection(instruction.args[0], 'parameter').args[0]],\n },\n },\n { v: va?.[1] }\n ),\n ...stack.slice(3),\n ];\n }\n\n case 'PUSH':\n assertTypeAnnotationsValid(instruction.args[0]);\n assertDataValidInternal(instruction.args[1], instruction.args[0], {\n ...ctx,\n contract: undefined,\n });\n return [annotateVar(instruction.args[0]), ...stack];\n\n case 'EMPTY_SET':\n assertTypeAnnotationsValid(instruction.args[0]);\n ensureComparableType(instruction.args[0]);\n return [\n annotate({ prim: 'set', args: instruction.args }, instructionAnn({ t: 1, v: 1 })),\n ...stack,\n ];\n\n case 'EMPTY_MAP':\n assertTypeAnnotationsValid(instruction.args[0]);\n ensureComparableType(instruction.args[0]);\n assertTypeAnnotationsValid(instruction.args[1]);\n return [\n annotate({ prim: 'map', args: instruction.args }, instructionAnn({ t: 1, v: 1 })),\n ...stack,\n ];\n\n case 'EMPTY_BIG_MAP':\n assertTypeAnnotationsValid(instruction.args[0]);\n ensureComparableType(instruction.args[0]);\n assertTypeAnnotationsValid(instruction.args[1]);\n ensureBigMapStorableType(instruction.args[0]);\n return [\n annotate({ prim: 'big_map', args: instruction.args }, instructionAnn({ t: 1, v: 1 })),\n ...stack,\n ];\n\n case 'LAMBDA': {\n assertTypeAnnotationsValid(instruction.args[0]);\n assertTypeAnnotationsValid(instruction.args[1]);\n const body = functionTypeInternal(instruction.args[2], [instruction.args[0]], {\n ...ctx,\n contract: undefined,\n });\n if ('failed' in body) {\n return { failed: body.failed, level: body.level + 1 };\n }\n if (body.length !== 1) {\n throw new MichelsonInstructionError(\n instruction,\n stack,\n `${instruction.prim}: function must return a value`\n );\n }\n ensureTypesEqual(instruction.args[1], body[0]);\n return [\n annotateVar({ prim: 'lambda', args: [instruction.args[0], instruction.args[1]] }),\n ...stack,\n ];\n }\n\n case 'LEVEL':\n return [annotateVar({ prim: 'nat' }, '@level'), ...stack];\n\n case 'TOTAL_VOTING_POWER':\n return [annotateVar({ prim: 'nat' }), ...stack];\n\n case 'VOTING_POWER':\n args(0, ['key_hash']);\n return [annotateVar({ prim: 'nat' }), ...stack.slice(1)];\n\n case 'TICKET': {\n const s = args(0, null, ['nat'])[0];\n ensureComparableType(s);\n return [\n annotate({ prim: 'ticket', args: [s] }, instructionAnn({ t: 1, v: 1 })),\n ...stack.slice(2),\n ];\n }\n\n case 'JOIN_TICKETS': {\n const s = unpackComb('pair', args(0, ['pair'])[0]);\n if (typeID(s.args[0]) !== 'ticket') {\n throw new MichelsonInstructionError(\n instruction,\n stack,\n `${instruction.prim}: ticket expected: ${typeID(s.args[0])}`\n );\n }\n ensureTypesEqual(s.args[0], s.args[1]);\n return [\n annotateVar({\n prim: 'option',\n args: [annotate(s.args[0], { t: null })],\n }),\n ...stack.slice(1),\n ];\n }\n\n case 'SPLIT_TICKET': {\n const s = args(0, ['ticket'], ['pair']);\n const p = unpackComb('pair', s[1]);\n if (typeID(p.args[0]) !== 'nat') {\n throw new MichelsonInstructionError(\n instruction,\n stack,\n `${instruction.prim}: nat expected: ${typeID(p.args[0])}`\n );\n }\n ensureTypesEqual(p.args[0], p.args[1]);\n return [\n annotateVar({\n prim: 'option',\n args: [\n {\n prim: 'pair',\n args: [annotate(s[0], { t: null }), annotate(s[0], { t: null })],\n },\n ],\n }),\n ...stack.slice(2),\n ];\n }\n\n case 'READ_TICKET': {\n const ia = instructionAnn({ v: 2 });\n const s = args(0, ['ticket'])[0];\n const va = ia.v?.map((v) => (v !== '@' ? [v] : undefined));\n return [\n annotate(\n {\n prim: 'pair',\n args: [{ prim: 'address' }, annotate(s.args[0], { t: null }), { prim: 'nat' }],\n },\n { v: va?.[0] }\n ),\n annotate(s, { v: va?.[1], t: null }),\n ...stack.slice(1),\n ];\n }\n\n case 'PAIRING_CHECK': {\n const p = args(0, ['list'])[0].args[0];\n if (!isPairType(p)) {\n throw new MichelsonInstructionError(\n instruction,\n stack,\n `${instruction.prim}: pair expected: ${typeID(p)}`\n );\n }\n const c = unpackComb('pair', p);\n if (typeID(c.args[0]) !== 'bls12_381_g1') {\n throw new MichelsonInstructionError(\n instruction,\n stack,\n `${instruction.prim}: bls12_381_g1 expected: ${typeID(c.args[0])}`\n );\n }\n if (typeID(c.args[1]) !== 'bls12_381_g2') {\n throw new MichelsonInstructionError(\n instruction,\n stack,\n `${instruction.prim}: bls12_381_g2 expected: ${typeID(c.args[1])}`\n );\n }\n return [annotateVar({ prim: 'bool' }), ...stack.slice(1)];\n }\n\n case 'SAPLING_EMPTY_STATE':\n return [\n annotate(\n { prim: 'sapling_state', args: [instruction.args[0]] },\n instructionAnn({ v: 1, t: 1 })\n ),\n ...stack,\n ];\n\n case 'SAPLING_VERIFY_UPDATE': {\n const s = args(0, ['sapling_transaction'], ['sapling_state']);\n if (parseInt(s[0].args[0].int, 10) !== parseInt(s[1].args[0].int, 10)) {\n throw new MichelsonInstructionError(\n instruction,\n stack,\n `${instruction.prim}: sapling memo size mismatch: ${s[0].args[0].int} != ${s[1].args[0].int}`\n );\n }\n return ProtoInferiorTo(proto, Protocol.PtJakarta)\n ? [\n annotateVar({\n prim: 'option',\n args: [\n {\n prim: 'pair',\n args: [{ prim: 'int' }, annotate(s[1], { t: null })],\n },\n ],\n }),\n ...stack.slice(2),\n ]\n : [\n annotateVar({\n prim: 'option',\n args: [\n {\n prim: 'pair',\n args: [\n { prim: 'bytes' },\n {\n prim: 'pair',\n args: [{ prim: 'int' }, annotate(s[1], { t: null })],\n },\n ],\n },\n ],\n }),\n ...stack.slice(2),\n ];\n }\n\n case 'OPEN_CHEST':\n args(0, ['chest_key'], ['chest'], ['nat']);\n return [\n annotateVar({ prim: 'or', args: [{ prim: 'bytes' }, { prim: 'bool' }] }),\n ...stack.slice(3),\n ];\n\n case 'VIEW': {\n const s = args(0, null, ['address']);\n ensurePushableType(s[0]);\n return [annotateVar({ prim: 'option', args: [instruction.args[1]] }), ...stack.slice(2)];\n }\n case 'MIN_BLOCK_TIME':\n return [annotateVar({ prim: 'nat' }), ...stack];\n\n default:\n throw new MichelsonError(\n instruction as MichelsonCode,\n `unexpected instruction: ${(instruction as Prim).prim}`\n );\n }\n })(instruction);\n\n if (ctx?.traceCallback !== undefined) {\n const trace: InstructionTrace = {\n op: instruction,\n in: stack,\n out: retStack,\n };\n ctx.traceCallback(trace);\n }\n\n return retStack;\n}\n\nexport function contractSection<T extends 'parameter' | 'storage' | 'code'>(\n contract: MichelsonContract,\n section: T\n): MichelsonContractSection<T> {\n for (const s of contract) {\n if (s.prim === section) {\n return s as MichelsonContractSection<T>;\n }\n }\n throw new MichelsonError(contract, `missing contract section: ${section}`);\n}\n\nexport function contractViews(contract: MichelsonContract): {\n [name: string]: MichelsonContractView;\n} {\n const views: { [name: string]: MichelsonContractView } = {};\n for (const s of contract) {\n if (s.prim === 'view') {\n views[s.args[0].string] = s;\n }\n }\n return views;\n}\n\nfunction isContract(v: Expr): v is MichelsonContract {\n if (Array.isArray(v)) {\n for (const s of v) {\n if ('prim' in s && (s.prim === 'parameter' || s.prim === 'storage' || s.prim === 'code')) {\n return true;\n }\n }\n }\n return false;\n}\n\nexport function contractEntryPoint(\n src: MichelsonContract | MichelsonType,\n ep?: string\n): MichelsonType | null {\n ep = ep || '%default';\n const entryPoint = contractEntryPoints(src).find((x) => x[0] === ep);\n\n if (entryPoint !== undefined) {\n return entryPoint[1];\n } else if (ep === '%default') {\n return isContract(src) ? contractSection(src, 'parameter').args[0] : src;\n }\n return null;\n}\n\nfunction isOrType(t: MichelsonType): t is MichelsonTypeOr<[MichelsonType, MichelsonType]> {\n return Array.isArray(t) || t.prim === 'or';\n}\n\nexport function contractEntryPoints(\n src: MichelsonContract | MichelsonType\n): [string, MichelsonType][] {\n if (isContract(src)) {\n const param = contractSection(src, 'parameter');\n const ch = contractEntryPoints(param.args[0]);\n const a = unpackAnnotations(param);\n return a.f ? [[a.f[0], param.args[0]], ...ch] : ch;\n }\n\n if (isOrType(src)) {\n const args = typeArgs(src);\n const getArg = (n: 0 | 1): [string, MichelsonType][] => {\n const a = unpackAnnotations(args[n]);\n if (typeID(args[n]) === 'or') {\n const ch = contractEntryPoints(args[n]);\n return a.f ? [[a.f[0], args[n]], ...ch] : ch;\n }\n return a.f ? [[a.f[0], args[n]]] : [];\n };\n return [...getArg(0), ...getArg(1)];\n }\n return [];\n}\n\n// Contract validation\n\nexport function assertContractValid(\n contract: MichelsonContract,\n ctx?: Context\n): MichelsonReturnType {\n const assertSection = (\n parameter: MichelsonType,\n storage: MichelsonType,\n ret: MichelsonType,\n code: InstructionList\n ): MichelsonReturnType => {\n assertTypeAnnotationsValid(parameter, true);\n assertTypeAnnotationsValid(storage);\n const arg: MichelsonType = {\n prim: 'pair',\n args: [\n { ...parameter, ...{ annots: ['@parameter'] } },\n { ...storage, ...{ annots: ['@storage'] } },\n ],\n };\n const out = functionTypeInternal(code, [arg], { ...ctx, ...{ contract } });\n if ('failed' in out) {\n return out;\n }\n\n try {\n assertStacksEqual(out, [ret]);\n } catch (err) {\n if (err instanceof MichelsonError) {\n throw new MichelsonInstructionError(code, out, err.message);\n } else {\n throw err;\n }\n }\n return out;\n };\n\n const parameter = contractSection(contract, 'parameter').args[0];\n const storage = contractSection(contract, 'storage').args[0];\n const code = contractSection(contract, 'code').args[0];\n const expected: MichelsonType = {\n prim: 'pair',\n args: [{ prim: 'list', args: [{ prim: 'operation' }] }, storage],\n };\n const ret = assertSection(parameter, storage, expected, code);\n\n for (const view of Object.values(contractViews(contract))) {\n assertSection(view.args[1], storage, view.args[2], view.args[3]);\n }\n\n return ret;\n}\n\n// Exported wrapper functions\n\nexport function assertDataValid(d: MichelsonData, t: MichelsonType, ctx?: Context): void {\n assertTypeAnnotationsValid(t);\n assertDataValidInternal(d, t, ctx || null);\n}\n\nexport function functionType(\n inst: MichelsonCode,\n stack: MichelsonType[],\n ctx?: Context\n): MichelsonReturnType {\n for (const t of stack) {\n assertTypeAnnotationsValid(t);\n }\n\n if (ctx?.contract !== undefined) {\n for (const typesec of ['parameter', 'storage'] as const) {\n const sec = contractSection(ctx.contract, typesec).args[0];\n assertTypeAnnotationsValid(sec);\n }\n }\n\n return functionTypeInternal(inst, stack, ctx || null);\n}\n\nexport function assertTypesEqual<T1 extends MichelsonType | MichelsonType[], T2 extends T1>(\n a: T1,\n b: T2,\n field = false\n): void {\n if (Array.isArray(a)) {\n // type guards don't work for parametrized generic types\n for (const v of a as MichelsonType[]) {\n assertTypeAnnotationsValid(v);\n }\n for (const v of b as MichelsonType[]) {\n assertTypeAnnotationsValid(v);\n }\n } else {\n assertTypeAnnotationsValid(a as MichelsonType);\n assertTypeAnnotationsValid(b as MichelsonType);\n }\n assertScalarTypesEqual(a, b, field);\n}\n\nexport function isTypeAnnotationsValid(t: MichelsonType, field = false): boolean {\n try {\n assertTypeAnnotationsValid(t, field);\n return true;\n } catch {\n return false;\n }\n}\n\nexport function isContractValid(\n contract: MichelsonContract,\n ctx?: Context\n): MichelsonReturnType | null {\n try {\n return assertContractValid(contract, ctx);\n } catch {\n return null;\n }\n}\n\nexport function isDataValid(d: MichelsonData, t: MichelsonType, ctx?: Context): boolean {\n try {\n assertDataValid(d, t, ctx);\n return true;\n } catch {\n return false;\n }\n}\n\nexport function isTypeEqual<T1 extends MichelsonType | MichelsonType[], T2 extends T1>(\n a: T1,\n b: T2,\n field = false\n): boolean {\n try {\n assertTypesEqual(a, b, field);\n return true;\n } catch {\n return false;\n }\n}\n","import {\n MichelsonContract,\n MichelsonContractSection,\n MichelsonType,\n MichelsonData,\n MichelsonCode,\n MichelsonReturnType,\n} from './michelson-types';\nimport {\n assertContractValid,\n contractSection,\n contractEntryPoint,\n assertDataValid,\n assertTypeAnnotationsValid,\n InstructionTrace,\n Context,\n functionType,\n isDataValid,\n contractEntryPoints,\n} from './michelson-typecheck';\nimport { Parser, ParserOptions } from './micheline-parser';\nimport {\n assertMichelsonContract,\n assertMichelsonType,\n assertMichelsonData,\n} from './michelson-validator';\nimport {\n InvalidDataExpressionError,\n InvalidEntrypointError,\n InvalidContractError,\n InvalidTypeExpressionError,\n} from './error';\n\nexport interface ContractOptions extends ParserOptions {\n traceCallback?: (t: InstructionTrace) => void;\n}\n\nexport class Contract {\n private ctx: Context;\n public readonly output: MichelsonReturnType;\n\n constructor(public readonly contract: MichelsonContract, opt?: ContractOptions) {\n this.ctx = { contract, ...opt };\n this.output = assertContractValid(contract, this.ctx);\n }\n\n static parse(src: string | object, opt?: ContractOptions): Contract {\n const p = new Parser(opt);\n const expr = typeof src === 'string' ? p.parseScript(src) : p.parseJSON(src);\n if (expr === null) {\n throw new InvalidContractError('empty contract');\n }\n if (assertMichelsonContract(expr)) {\n return new Contract(expr, opt);\n }\n throw undefined;\n }\n\n static parseTypeExpression(src: string | object, opt?: ParserOptions): MichelsonType {\n const p = new Parser(opt);\n const expr = typeof src === 'string' ? p.parseScript(src) : p.parseJSON(src);\n if (expr === null) {\n throw new InvalidTypeExpressionError('empty type expression');\n }\n if (assertMichelsonType(expr) && assertTypeAnnotationsValid(expr)) {\n return expr;\n }\n throw undefined;\n }\n\n static parseDataExpression(src: string | object, opt?: ParserOptions): MichelsonData {\n const p = new Parser(opt);\n const expr = typeof src === 'string' ? p.parseScript(src) : p.parseJSON(src);\n if (expr === null) {\n throw new InvalidDataExpressionError('empty data expression');\n }\n if (assertMichelsonData(expr)) {\n return expr;\n }\n throw undefined;\n }\n\n section<T extends 'parameter' | 'storage' | 'code'>(section: T): MichelsonContractSection<T> {\n return contractSection(this.contract, section);\n }\n\n entryPoints(): [string, MichelsonType][] {\n return contractEntryPoints(this.contract);\n }\n\n entryPoint(ep?: string): MichelsonType | null {\n return contractEntryPoint(this.contract, ep);\n }\n\n assertDataValid(d: MichelsonData, t: MichelsonType): void {\n assertDataValid(d, t, this.ctx);\n }\n\n isDataValid(d: MichelsonData, t: MichelsonType): boolean {\n return isDataValid(d, t, this.ctx);\n }\n\n assertParameterValid(ep: string | null, d: MichelsonData): void {\n const t = this.entryPoint(ep || undefined);\n if (t === null) {\n throw new InvalidEntrypointError(ep?.toString());\n }\n this.assertDataValid(d, t);\n }\n\n isParameterValid(ep: string | null, d: MichelsonData): boolean {\n try {\n this.assertParameterValid(ep, d);\n return true;\n } catch {\n return false;\n }\n }\n\n functionType(inst: MichelsonCode, stack: MichelsonType[]): MichelsonReturnType {\n return functionType(inst, stack, this.ctx);\n }\n}\n\nexport const dummyContract = new Contract([\n { prim: 'parameter', args: [{ prim: 'unit' }] },\n { prim: 'storage', args: [{ prim: 'unit' }] },\n {\n prim: 'code',\n args: [[{ prim: 'CAR' }, { prim: 'NIL', args: [{ prim: 'operation' }] }, { prim: 'PAIR' }]],\n },\n]);\n","import { sourceReference, Expr } from './micheline';\nimport { InstructionTrace, MichelsonInstructionError } from './michelson-typecheck';\nimport { emitMicheline } from './micheline-emitter';\nimport { unpackAnnotations, MichelsonError, MichelsonTypeError } from './utils';\nimport { MichelsonReturnType } from './michelson-types';\n\nexport function formatStack(s: MichelsonReturnType): string {\n if ('failed' in s) {\n return `[FAILED: ${emitMicheline(s.failed)}]`;\n }\n\n return s\n .map((v, i) => {\n const ann = unpackAnnotations(v);\n return `[${i}${ann.v ? '/' + ann.v[0] : ''}]: ${emitMicheline(v)}`;\n })\n .join('\\n');\n}\n\nexport function traceDumpFunc(\n blocks: boolean,\n cb: (s: string) => void\n): (v: InstructionTrace) => void {\n return (v: InstructionTrace) => {\n if (Array.isArray(v) && !blocks) {\n return;\n }\n const macro = v.op[sourceReference]?.macro;\n\n const msg = `${macro ? 'Macro' : 'Op'}: ${\n macro ? emitMicheline(macro, undefined, true) + ' / ' : ''\n }${emitMicheline(v.op)}\nInput:\n${formatStack(v.in)}\nOutput:\n${formatStack(v.out)}\n`;\n cb(msg);\n };\n}\n\nexport function formatError(err: MichelsonError): string {\n if (err instanceof MichelsonInstructionError) {\n const macro = err.val[sourceReference]?.macro;\n return `${macro ? 'Macro' : 'Op'}: ${\n macro ? emitMicheline(macro, undefined, true) + ' / ' : ''\n }${emitMicheline(err.val)}\nStack:\n${formatStack(err.stackState)}\n`;\n } else if (err instanceof MichelsonTypeError) {\n const type = Array.isArray(err.val)\n ? '[' + (err.val as Expr[]).map((v, i) => `[${i}]: ${emitMicheline(v)}`).join('; ') + ']'\n : emitMicheline(err.val);\n\n return `Type: ${type}\n${\n err.data\n ? `Data: ${emitMicheline(err.data)}\n`\n : ''\n}\n`;\n } else {\n return `Value: ${emitMicheline(err.val)}`;\n }\n}\n","\n// IMPORTANT: THIS FILE IS AUTO GENERATED! DO NOT MANUALLY EDIT OR CHECKIN!\nexport const VERSION = {\n \"commitHash\": \"6d90b3d5e616a6e9b9ad9dd8453b5068e7396fff\",\n \"version\": \"13.0.1\"\n};\n"],"names":["assertArgs"],"mappings":"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"}
|