From 3fee0533adf5fc8bcfa0d001b22c6bcb8d10027f Mon Sep 17 00:00:00 2001 From: PhilippeR26 Date: Wed, 3 Sep 2025 11:19:23 +0200 Subject: [PATCH 01/17] feat: add CairoTypeOption class --- src/index.ts | 1 + src/types/cairoEnum.ts | 4 +- src/utils/cairoDataTypes/array.ts | 4 +- .../cairoDataTypes/cairoType.interface.ts | 4 +- src/utils/cairoDataTypes/cairoTypeOption.ts | 396 ++++++++++++++++++ src/utils/calldata/index.ts | 31 +- src/utils/calldata/parser/parsingStrategy.ts | 21 +- src/utils/calldata/propertyOrder.ts | 61 ++- src/utils/calldata/requestParser.ts | 33 +- src/utils/calldata/validate.ts | 9 +- 10 files changed, 517 insertions(+), 47 deletions(-) create mode 100644 src/utils/cairoDataTypes/cairoTypeOption.ts diff --git a/src/index.ts b/src/index.ts index 67f05695f..74952a70d 100644 --- a/src/index.ts +++ b/src/index.ts @@ -57,6 +57,7 @@ export * from './utils/cairoDataTypes/array'; export * from './utils/cairoDataTypes/tuple'; export * from './utils/cairoDataTypes/byteArray'; export * from './utils/cairoDataTypes/secp256k1Point'; +export * from './utils/cairoDataTypes/cairoTypeOption'; export * from './utils/address'; export * from './utils/calldata'; diff --git a/src/types/cairoEnum.ts b/src/types/cairoEnum.ts index 6ddd71cc9..582decf4b 100644 --- a/src/types/cairoEnum.ts +++ b/src/types/cairoEnum.ts @@ -1,3 +1,5 @@ -import { CairoCustomEnum, CairoOption, CairoResult } from '../utils/calldata/enum'; +import type { CairoTypeOption } from '../utils/cairoDataTypes/cairoTypeOption'; +import { CairoCustomEnum, CairoResult, type CairoOption } from '../utils/calldata/enum'; export type CairoEnum = CairoCustomEnum | CairoOption | CairoResult; +export type CairoTypeEnum = CairoCustomEnum | CairoTypeOption | CairoResult; diff --git a/src/utils/cairoDataTypes/array.ts b/src/utils/cairoDataTypes/array.ts index 7b52b60f4..b2a7e8499 100644 --- a/src/utils/cairoDataTypes/array.ts +++ b/src/utils/cairoDataTypes/array.ts @@ -1,6 +1,6 @@ import assert from '../assert'; import { addCompiledFlag } from '../helpers'; -import { getNext } from '../num'; +import { getNext, toHex } from '../num'; import { felt, getArrayType, isTypeArray } from '../calldata/cairo'; import { type ParsingStrategy } from '../calldata/parser/parsingStrategy'; import { CairoType } from './cairoType.interface'; @@ -310,7 +310,7 @@ export class CairoArray extends CairoType { */ public toApiRequest(): string[] { // Start with array length - const result = [felt(this.content.length)]; + const result = [toHex(felt(this.content.length))]; // Then add all elements (flattened) result.push(...this.content.flatMap((element) => element.toApiRequest())); diff --git a/src/utils/cairoDataTypes/cairoType.interface.ts b/src/utils/cairoDataTypes/cairoType.interface.ts index c2df35236..40187f285 100644 --- a/src/utils/cairoDataTypes/cairoType.interface.ts +++ b/src/utils/cairoDataTypes/cairoType.interface.ts @@ -1,3 +1,5 @@ +import type { VariantType } from '../calldata'; + export abstract class CairoType { // Static methods cannot be abstract, but can provide base implementation // TODO: Check when ts resolves this issue @@ -7,7 +9,7 @@ export abstract class CairoType { * @param _data - The data to check * @returns True if the data is a valid CairoType, false otherwise */ - static is(_data: any, _type?: string): boolean { + static is(_data: any, _type?: string, _variant?: VariantType): boolean { throw new Error('Static method must be implemented by derived class'); } diff --git a/src/utils/cairoDataTypes/cairoTypeOption.ts b/src/utils/cairoDataTypes/cairoTypeOption.ts new file mode 100644 index 000000000..92a236ca9 --- /dev/null +++ b/src/utils/cairoDataTypes/cairoTypeOption.ts @@ -0,0 +1,396 @@ +import assert from '../assert'; +import { addCompiledFlag } from '../helpers'; +import { getNext } from '../num'; +import { type ParsingStrategy, type VariantType } from '../calldata/parser/parsingStrategy'; +import { CairoType } from './cairoType.interface'; +import { isTypeOption } from '../calldata/cairo'; +import { isUndefined } from '../typed'; +import { CairoOptionVariant, CairoOption } from '../calldata/enum'; + +/** + * Represents a Cairo Option. + * + * Key Features: + * - Internal usage class (users are using "CairoOption" class). + * - Unified constructor handling user input, API responses, and CairoType instances + * - Automatic type validation and conversion using parsing strategies + * - Bi-directional serialization (to/from Starknet API format) + * - Support for nested types + * - Direct CallData.compile() integration + * - Comprehensive type checking and validation + */ +export class CairoTypeOption extends CairoType { + static dynamicSelector = 'CairoTypeOption' as const; + + /* CairoType instance representing a Cairo option. */ + public readonly content: CairoType | undefined; + + /* Cairo type of the option. */ + public readonly optionCairoType: string; + + /* True if the current variant is 'Some', false if 'None'. */ + public readonly isVariantSome: boolean; + + /* Parsing strategy used for type handling and conversion. */ + public strategy: ParsingStrategy; + + /** + * CairoTypeOption provides a complete implementation for handling Cairo's Option, + * which have the form "core::option::Option::" (e.g., "core::option::Option::"). + * Internal usage class (users are using "CairoOption" class). + * It supports nested types, type validation, encoding, and parsing from various sources. + * @param {unknown} content - Input data (array, object, BigNumberish, + * Iterator, CairoOption, CairoResult, CairoCustomEnum, or CairoType instance). + * "content" parameter has to be defined when Some variant is selected + * @param {string} optionCairoType - Cairo option type string (e.g., "core::option::Option::"). + * @param {ParsingStrategy} strategy - Parsing strategy for element type handling (e.g. hdParsingStrategy). + * @param {CairoOptionVariant | number} [variant] - (optional) variant of the option: CairoOptionVariant.Some (0), or CairoOptionVariant.None (1). If "content" is an iterator, this parameter must be omitted. If "content" is not an iterator, this parameter is mandatory. + * @example + * ```typescript + * import { CairoTypeOption, hdParsingStrategy, CairoOptionVariant } from 'starknet'; + * // Simple Option with Some variant + * const myOption1 = new CairoTypeOption(123, "core::option::Option::", hdParsingStrategy, CairoOptionVariant.Some); + * console.log(myOption1.toApiRequest()); // [ '0x01', [ '0x7b' ] ] + * console.log(myOption1.decompose(hdParsingStrategy)); // CairoOption instance with content 123n and Some variant. + * console.log(myOption1.unwrap()); // 123n + * console.log(myOption1.isSome()); // true + * // Simple Option with None variant + * const myOption2 = new CairoTypeOption(undefined, "core::option::Option::", hdParsingStrategy, CairoOptionVariant.None); + * console.log(myOption2.isNone()); // true + * + * // Nested Cairo types + * const myTuple0 = new CairoTuple([234, [1, 2, 3]], "(core::integer::u8, core::array::Array::)", hdParsingStrategy); + * const myOption3 = new CairoTypeOption(myTuple0, "core::option::Option::<(core::integer::u8, core::array::Array::)>", hdParsingStrategy, CairoOptionVariant.Some); + * console.log(CallData.compile([myOption3])); // [ "0", "234", "3", "1", "2", "3" ] + * + * // From API response + * const apiData = ['0x0', '0x20'][Symbol.iterator](); + * const fromApiOption = new CairoTypeOption(apiData, "core::option::Option::", hdParsingStrategy); + * console.log(fromApiOption.unwrap()); // 32n + * ``` + */ + constructor( + content: unknown, + optionCairoType: string, + strategy: ParsingStrategy, + variant?: CairoOptionVariant | number + ) { + super(); + this.optionCairoType = optionCairoType; + this.strategy = strategy; + if (variant === 0 && isUndefined(content)) { + throw new Error('"content" parameter has to be defined when Some variant is selected'); + } + if (variant === 1 && !isUndefined(content)) { + throw new Error('"content" parameter has to be defined when Some variant is selected'); + } + if (content && typeof content === 'object' && 'next' in content) { + // "content" is an iterator + assert( + isUndefined(variant), + 'when "content" parameter is an iterator, do not define "variant" parameter.' + ); + const variantFromIterator = Number(getNext(content as Iterator)); + switch (variantFromIterator) { + case CairoOptionVariant.Some: { + const parsedContent: CairoType = CairoTypeOption.parser( + content as Iterator, + optionCairoType, + strategy + ); + this.content = parsedContent; + break; + } + case CairoOptionVariant.None: { + this.content = undefined; + break; + } + default: { + throw new Error('Invalid Option variant in iterator.'); + } + } + this.isVariantSome = variantFromIterator === 0; + } else { + assert( + !isUndefined(variant), + '"variant" parameter is mandatory when creating a new Cairo option from a "CairoType" or raw data.' + ); + CairoTypeOption.validate(content, optionCairoType, variant); + if (content && typeof content === 'object' && content !== null && 'toApiRequest' in content) { + // "content" is a CairoType + this.content = content as CairoType; + this.isVariantSome = variant === CairoOptionVariant.Some; + } else if (content instanceof CairoOption) { + // "content" is a CairoOption + switch (content.isSome()) { + case true: { + const elementType = CairoTypeOption.getVariantSomeType(optionCairoType); + const constructor = strategy.constructors[elementType]; + if (constructor) { + this.content = constructor( + content.unwrap(), + elementType, + content.isSome() ? CairoOptionVariant.Some : CairoOptionVariant.None + ); + } else { + const dynamicSelectors = Object.entries(strategy.dynamicSelectors); + const matchingSelector = dynamicSelectors.find(([, selectorFn]) => + selectorFn(elementType) + ); + if (matchingSelector) { + const [selectorName] = matchingSelector; + const dynamicConstructor = strategy.constructors[selectorName]; + if (dynamicConstructor) { + this.content = dynamicConstructor( + content, + elementType, + content.isSome() ? CairoOptionVariant.Some : CairoOptionVariant.None + ); + } + } else { + throw new Error(`"${elementType}" is not a valid Cairo type`); + } + } + this.isVariantSome = true; + break; + } + case false: { + this.content = new CairoTypeOption( + undefined, + optionCairoType, + strategy, + CairoOptionVariant.None + ); + this.isVariantSome = false; + break; + } + default: { + throw new Error('Invalid Option variant.'); + } + } + } else { + // not an iterator, not an CairoType, neither a CairoType -> so is low level data (BigNumberish, array, object) + switch (variant) { + case CairoOptionVariant.Some: { + const elementType = CairoTypeOption.getVariantSomeType(optionCairoType); + const constructor = strategy.constructors[elementType]; + if (constructor) { + this.content = constructor(content, elementType); + } else { + const dynamicSelectors = Object.entries(strategy.dynamicSelectors); + const matchingSelector = dynamicSelectors.find(([, selectorFn]) => + selectorFn(elementType) + ); + if (matchingSelector) { + const [selectorName] = matchingSelector; + const dynamicConstructor = strategy.constructors[selectorName]; + if (dynamicConstructor) { + this.content = dynamicConstructor(content, elementType); + } + } else { + throw new Error(`"${elementType}" is not a valid Cairo type`); + } + } + this.isVariantSome = true; + break; + } + case 1: { + this.isVariantSome = false; + this.content = undefined; + break; + } + default: { + throw new Error('Invalid Option variant.'); + } + } + } + } + } + + /** + * Parse data from iterator into CairoType instances using the provided parsing strategy. + * + * This is the core parsing logic that consumes data sequentially from an iterator and + * converts it into proper CairoType instances. It handles: + * - Direct constructors (primitive types like u8, u256, etc.) + * - Dynamic selectors (complex types like nested fixed arrays) + * - Unknown types (stored as raw strings for later error handling) + * + * @param {Iterator} responseIterator - Iterator over string data to parse + * @param {string} someVariantCairoType - The Cairo option type (e.g., "core::option::Option::") + * @param {ParsingStrategy} strategy - The parsing strategy containing constructors and selectors + * @returns {CairoType} Array of parsed CairoType instances + * @private + */ + private static parser( + responseIterator: Iterator, + someVariantCairoType: string, + strategy: ParsingStrategy + ): CairoType { + const elementType = CairoTypeOption.getVariantSomeType(someVariantCairoType); + const constructor = strategy.constructors[elementType]; + if (constructor) { + return constructor(responseIterator, elementType); + } + const dynamicSelectors = Object.entries(strategy.dynamicSelectors); + const matchingSelector = dynamicSelectors.find(([, selectorFn]) => selectorFn(elementType)); + + if (matchingSelector) { + const [selectorName] = matchingSelector; + const dynamicConstructor = strategy.constructors[selectorName]; + if (dynamicConstructor) { + return dynamicConstructor(responseIterator, elementType); + } + } + // Unknown type - collect raw values, defer error + const rawValues = getNext(responseIterator); + return rawValues as unknown as CairoType; + } + + /** + * Retrieve the Cairo content type from a Cairo option type. + * @param {string} type - The Cairo option type string. + * @returns {string} The Some Cairo type of the Cairo option. + * @example + * ```typescript + * const result = CairoTypeOption.getVariantSomeType("core::option::Option::"); + * // result = "core::integer::u8" + * ``` + */ + static getVariantSomeType = (type: string) => { + const matchArray = type.match(/(?<=<).+(?=>)/); + if (matchArray === null) + throw new Error(`ABI type ${type} do not includes a valid type of data.`); + return matchArray[0]; + }; + + /** + * Validate input data for CairoTypeOption creation. + * @param {unknown} input - Input data to validate + * @param {string} type - The Cairo option type string (e.g., "core::option::Option::") + * @throws Error if input is invalid + * @example + * ```typescript + * CairoTypeOption.validate(200, "core::option::Option::", CairoOptionVariant.Some); // passes + * CairoTypeOption.validate(200, "wrong", 3); // throws + * ``` + */ + static validate(input: unknown, type: string, variant: VariantType): void { + assert( + CairoTypeOption.isAbiType(type), + `The type ${type} is not a Cairo option. Needs core::option::Option::.` + ); + const numberVariant = Number(variant); + assert([0, 1].includes(numberVariant), 'In Cairo option, only 0 or 1 variants are authorized.'); + } + + /** + * Check if input data is valid for CairoTypeOption creation. + * @param input - Input data to check + * @param type - The Cairo option type (e.g., "core::option::Option::") + * @returns true if valid, false otherwise + * @example + * ```typescript + * const isValid1 = CairoTypeOption.is(200, "core::option::Option::", CairoOptionVariant.Some"); // true + * const isValid2 = CairoTypeOption.is(200, "wrong", 3); // false + * ``` + */ + static is(input: unknown, type: string, variant: VariantType): boolean { + try { + CairoTypeOption.validate(input, type, variant); + return true; + } catch { + return false; + } + } + + /** + * Checks if the given string represents a valid Cairo option type format. + * + * A valid Cairo option type must follow the pattern: "core::option::Option::" + * where element_type is any valid Cairo type. + * @param {string} type - The type string to validate + * @returns {boolean} `true` if the type is a valid Cairo option format, `false` otherwise + * @example + * ```typescript + * CairoTypeOption.isAbiType("core::option::Option::"); // true + * ``` + */ + static isAbiType(type: string): boolean { + return isTypeOption(type); + } + + /** + * Serialize the Cairo option into hex strings for Starknet API requests. + * + * Converts all CairoType elements in this Cairo option into their hex string representation + * by calling toApiRequest(). This is used when + * sending data to the Starknet network. + * + * @returns {string[]} Array of hex strings ready for API requests + * @example + * ```typescript + * const myOption = new CairoTypeOption(8, "core::option::Option::", strategy, CairoOptionVariant.Some); + * const result = myOption.toApiRequest(); // ['0x0', '0x8'] + * ``` + */ + public toApiRequest(): string[] { + const result = [this.isVariantSome ? '0x00' : '0x01']; + if (this.isVariantSome) { + result.push(this.content!.toApiRequest()); + } + return addCompiledFlag(result.flat()); + } + + private decomposeSome(strategyDecode?: ParsingStrategy): any { + const strategy = strategyDecode ?? this.strategy; + const someType = CairoTypeOption.getVariantSomeType(this.optionCairoType); + const responseParser = strategy.response[someType]; + if (responseParser) { + if (this.isVariantSome) { + const someContent = responseParser(this.content!); + return someContent; + } + return undefined; + } + const dynamicSelectors = Object.entries(strategy.dynamicSelectors); + const matchingSelector = dynamicSelectors.find(([, selectorFn]) => + selectorFn(this.optionCairoType) + ); + + if (matchingSelector) { + if (this.isVariantSome) { + const [selectorName] = matchingSelector; + const dynamicResponseParser = strategy.response[selectorName]; + if (dynamicResponseParser) { + return dynamicResponseParser(this.content!); + } + } + return undefined; + } + throw new Error(`No response parser found for element type: ${someType} in parsing strategy`); + } + + /** + * Decompose the CairoTypeOption instance into a CairoOption instance. + * + * Transforms CairoType instances into their final parsed values using the strategy's + * response parsers (e.g., CairoUint8 → BigInt). This method is used primarily for + * parsing API responses into user-friendly formats. + * + * @param {ParsingStrategy} strategy - Parsing strategy for response parsing + * @returns {CairoOption} a CairoOptionInstance, with parsed variant (BigInt, numbers, nested arrays, etc.) + * @example + * ```typescript + * const myOption = new CairoTypedOption([0, 3], "core::option::Option::", hdParsingStrategy, CairoOptionVariant.Some); + * const parsed = myOption.decompose(hdParsingStrategy); // CairoOption{ Some: 3n } + * ``` + */ + public decompose(strategy: ParsingStrategy): CairoOption { + const someContent = this.decomposeSome(strategy); + if (this.isVariantSome) { + return new CairoOption(CairoOptionVariant.Some, someContent); + } + return new CairoOption(CairoOptionVariant.None); + } +} diff --git a/src/utils/calldata/index.ts b/src/utils/calldata/index.ts index 5c5ee4e31..40ff61b4f 100644 --- a/src/utils/calldata/index.ts +++ b/src/utils/calldata/index.ts @@ -32,12 +32,18 @@ import { CairoFixedArray } from '../cairoDataTypes/fixedArray'; import { CairoArray } from '../cairoDataTypes/array'; import { CairoTuple } from '../cairoDataTypes/tuple'; import formatter from './formatter'; -import { createAbiParser, isNoConstructorValid, ParsingStrategy } from './parser'; +import { + createAbiParser, + hdParsingStrategy, + isNoConstructorValid, + ParsingStrategy, +} from './parser'; import { AbiParserInterface } from './parser/interface'; import orderPropsByAbi from './propertyOrder'; import { parseCalldataField } from './requestParser'; import responseParser from './responseParser'; import validateFields from './validate'; +import { CairoTypeOption } from '../cairoDataTypes/cairoTypeOption'; export * as cairo from './cairo'; export { parseCalldataField } from './requestParser'; @@ -107,9 +113,10 @@ export class CallData { /** * Compile contract callData with abi * Parse the calldata by using input fields from the abi for that method - * @param method string - method name - * @param argsCalldata RawArgs - arguments passed to the method. Can be an array of arguments (in the order of abi definition), or an object constructed in conformity with abi (in this case, the parameter can be in a wrong order). - * @return Calldata - parsed arguments in format that contract is expecting + * @param {string} method string - method name + * @param {RawArgs} argsCalldata RawArgs - arguments passed to the method. Can be an array of arguments (in the order of abi definition), or an object constructed in conformity with abi (in this case, the parameter can be in a wrong order). + * @param {ParsingStrategy} [parserStrategy = hdParsingStrategy] - optional parsing strategy to override the default one + * @return {Calldata} parsed arguments in format that contract is expecting * @example * ```typescript * const calldata = myCallData.compile("constructor", ["0x34a", [1, 3n]]); @@ -118,7 +125,11 @@ export class CallData { * const calldata2 = myCallData.compile("constructor", {list:[1, 3n], balance:"0x34"}); // wrong order is valid * ``` */ - public compile(method: string, argsCalldata: RawArgs): Calldata { + public compile( + method: string, + argsCalldata: RawArgs, + parserStrategy: ParsingStrategy = hdParsingStrategy + ): Calldata { const abiMethod = this.abi.find((abiFunction) => abiFunction.name === method) as FunctionAbi; if (isNoConstructorValid(method, argsCalldata, abiMethod)) { @@ -134,7 +145,8 @@ export class CallData { argsCalldata, abiMethod.inputs, this.structs, - this.enums + this.enums, + parserStrategy ); args = Object.values(orderedObject); // // validate array elements to abi @@ -242,6 +254,13 @@ export class CallData { ); return getEntries(compiledObj, `${prefix}${kk}.`); } + if (value instanceof CairoTypeOption) { + const apiRequest = value.toApiRequest(); + const compiledObj = Object.fromEntries( + apiRequest.map((item, idx) => [idx.toString(), item]) + ); + return getEntries(compiledObj, `${prefix}${kk}.`); + } // normal object return getEntries(value, `${prefix}${kk}.`); } diff --git a/src/utils/calldata/parser/parsingStrategy.ts b/src/utils/calldata/parser/parsingStrategy.ts index ba7494772..f5d7ef589 100644 --- a/src/utils/calldata/parser/parsingStrategy.ts +++ b/src/utils/calldata/parser/parsingStrategy.ts @@ -21,16 +21,19 @@ import { CairoTuple } from '../../cairoDataTypes/tuple'; import { CairoSecp256k1Point } from '../../cairoDataTypes/secp256k1Point'; import { CairoType } from '../../cairoDataTypes/cairoType.interface'; import assert from '../../assert'; -import { isTypeArray, isTypeTuple } from '../cairo'; +import { isTypeArray, isTypeOption, isTypeTuple } from '../cairo'; +import { CairoTypeOption } from '../../cairoDataTypes/cairoTypeOption'; +import type { CairoOptionVariant, CairoResultVariant } from '../enum'; /** * Parsing map for constructors and response parsers * Configure parsing strategy for each abi type */ +export type VariantType = CairoOptionVariant | CairoResultVariant | string | number; export type ParsingStrategy = { constructors: Record< AbiEntryType, - (input: Iterator | unknown, type?: string) => CairoType + (input: Iterator | unknown, type?: string, variant?: VariantType) => CairoType >; response: Record any>; dynamicSelectors: Record boolean>; @@ -161,6 +164,15 @@ export const hdParsingStrategy: ParsingStrategy = { // Always use constructor - it handles both iterator and user input internally return new CairoTuple(input, type, hdParsingStrategy); }, + CairoTypeOption: (input: Iterator | unknown, type?: string, variant?: VariantType) => { + assert(!!type, 'CairoTypeOption constructor requires "type" parameter.'); + assert( + typeof variant !== 'undefined', + 'CairoTypeOption constructor requires "variant" parameter.' + ); + const variantNumber = Number(variant); + return new CairoTypeOption(input, type, hdParsingStrategy, variantNumber); + }, }, dynamicSelectors: { CairoFixedArray: (type: string) => { @@ -172,6 +184,9 @@ export const hdParsingStrategy: ParsingStrategy = { CairoTuple: (type: string) => { return isTypeTuple(type); }, + CairoTypeOption: (type: string) => { + return isTypeOption(type); + }, // TODO: add more dynamic selectors here }, response: { @@ -198,5 +213,7 @@ export const hdParsingStrategy: ParsingStrategy = { (instance as CairoFixedArray).decompose(hdParsingStrategy), CairoArray: (instance: CairoType) => (instance as CairoArray).decompose(hdParsingStrategy), CairoTuple: (instance: CairoType) => (instance as CairoTuple).decompose(hdParsingStrategy), + CairoTypeOption: (instance: CairoType) => + (instance as CairoTypeOption).decompose(hdParsingStrategy), }, } as const; diff --git a/src/utils/calldata/propertyOrder.ts b/src/utils/calldata/propertyOrder.ts index 668e3e7ac..272d635e7 100644 --- a/src/utils/calldata/propertyOrder.ts +++ b/src/utils/calldata/propertyOrder.ts @@ -1,4 +1,11 @@ -import { AbiEntry, AbiEnums, AbiStructs, CairoEnum, RawArgsObject } from '../../types'; +import { + AbiEntry, + AbiEnums, + AbiStructs, + CairoEnum, + RawArgsObject, + type CairoTypeEnum, +} from '../../types'; import { CairoUint256 } from '../cairoDataTypes/uint256'; import { CairoUint512 } from '../cairoDataTypes/uint512'; import { @@ -28,6 +35,8 @@ import { CairoArray } from '../cairoDataTypes/array'; import { CairoTuple } from '../cairoDataTypes/tuple'; import { CairoByteArray } from '../cairoDataTypes/byteArray'; import { CairoSecp256k1Point } from '../cairoDataTypes/secp256k1Point'; +import { CairoTypeOption } from '../cairoDataTypes/cairoTypeOption'; +import { type ParsingStrategy } from './parser'; function errorU256(key: string) { return Error( @@ -45,7 +54,8 @@ export default function orderPropsByAbi( unorderedObject: RawArgsObject, abiOfObject: AbiEntry[], structs: AbiStructs, - enums: AbiEnums + enums: AbiEnums, + parseStrategy: ParsingStrategy ): object { const orderInput = (unorderedItem: any, abiType: string): any => { if (CairoFixedArray.isAbiType(abiType)) { @@ -192,7 +202,10 @@ export default function orderPropsByAbi( return orderedObject2; } - const orderEnum = (unorderedObject2: CairoEnum, abiObject: AbiEntry): CairoEnum => { + const orderEnum = ( + unorderedObject2: CairoEnum | CairoTypeEnum, + abiObject: AbiEntry + ): CairoTypeEnum => { if (isTypeResult(abiObject.name)) { const unorderedResult = unorderedObject2 as CairoResult; const resultOkType: string = abiObject.name.substring( @@ -206,28 +219,46 @@ export default function orderPropsByAbi( if (unorderedResult.isOk()) { return new CairoResult( CairoResultVariant.Ok, - orderInput(unorderedObject2.unwrap(), resultOkType) + orderInput(unorderedResult.unwrap(), resultOkType) ); } return new CairoResult( CairoResultVariant.Err, - orderInput(unorderedObject2.unwrap(), resultErrType) + orderInput(unorderedResult.unwrap(), resultErrType) ); } if (isTypeOption(abiObject.name)) { - const unorderedOption = unorderedObject2 as CairoOption; - const resultSomeType: string = abiObject.name.substring( - abiObject.name.indexOf('<') + 1, - abiObject.name.lastIndexOf('>') - ); - if (unorderedOption.isSome()) { - return new CairoOption( - CairoOptionVariant.Some, - orderInput(unorderedOption.unwrap(), resultSomeType) + if (unorderedObject2 instanceof CairoOption) { + const unorderedOption = unorderedObject2 as CairoOption; + if (unorderedOption.isSome()) { + const resultSomeType: string = CairoTypeOption.getVariantSomeType(abiObject.name); + return new CairoTypeOption( + orderInput(unorderedOption.unwrap(), resultSomeType), + abiObject.name, + parseStrategy, + CairoOptionVariant.Some + ); + } + // none(()) + return new CairoTypeOption( + undefined, + abiObject.type, + parseStrategy, + CairoOptionVariant.None + ); + } + const unorderedOption = unorderedObject2 as CairoTypeOption; + if (unorderedOption.isVariantSome) { + const resultSomeType: string = CairoTypeOption.getVariantSomeType(abiObject.name); + return new CairoTypeOption( + orderInput(unorderedOption.content, resultSomeType), + abiObject.name, + parseStrategy, + CairoOptionVariant.Some ); } // none(()) - return new CairoOption(CairoOptionVariant.None, {}); + return new CairoTypeOption(undefined, abiObject.type, parseStrategy, CairoOptionVariant.None); } // custom Enum const unorderedCustomEnum = unorderedObject2 as CairoCustomEnum; diff --git a/src/utils/calldata/requestParser.ts b/src/utils/calldata/requestParser.ts index bdd113cfa..d5364ae08 100644 --- a/src/utils/calldata/requestParser.ts +++ b/src/utils/calldata/requestParser.ts @@ -48,6 +48,7 @@ import { CairoResultVariant, } from './enum'; import { AbiParserInterface } from './parser'; +import { CairoTypeOption } from '../cairoDataTypes/cairoTypeOption'; // TODO: cleanup implementations to work with unknown, instead of blind casting with 'as' @@ -201,27 +202,23 @@ function parseCalldataValue({ const { variants } = enums[type]; // Option Enum if (isTypeOption(type)) { - const myOption = element as CairoOption; - if (myOption.isSome()) { + let myOption: CairoTypeOption; + if (element instanceof CairoOption) { + myOption = new CairoTypeOption( + element.unwrap(), + type, + parser.parsingStrategy, + element.isSome() ? CairoOptionVariant.Some : CairoOptionVariant.None + ); + } else { + myOption = element as CairoTypeOption; + } + if (myOption.isVariantSome) { const listTypeVariant = variants.find((variant) => variant.name === 'Some'); if (isUndefined(listTypeVariant)) { throw Error(`Error in abi : Option has no 'Some' variant.`); } - const typeVariantSome = listTypeVariant.type; - if (typeVariantSome === '()') { - return CairoOptionVariant.Some.toString(); - } - const parsedParameter = parseCalldataValue({ - element: myOption.unwrap(), - type: typeVariantSome, - structs, - enums, - parser, - }); - if (Array.isArray(parsedParameter)) { - return [CairoOptionVariant.Some.toString(), ...parsedParameter]; - } - return [CairoOptionVariant.Some.toString(), parsedParameter]; + return myOption.toApiRequest(); } return CairoOptionVariant.None.toString(); } @@ -415,7 +412,7 @@ export function parseCalldataField({ // Enums case isTypeEnum(type, enums): return parseCalldataValue({ - element: value as CairoOption | CairoResult | CairoEnum, + element: value as CairoTypeOption | CairoResult | CairoEnum, type, structs, enums, diff --git a/src/utils/calldata/validate.ts b/src/utils/calldata/validate.ts index 3c6207db1..030923504 100644 --- a/src/utils/calldata/validate.ts +++ b/src/utils/calldata/validate.ts @@ -40,6 +40,8 @@ import { isTypeTuple, isTypeUint, } from './cairo'; +import { CairoTypeOption } from '../cairoDataTypes/cairoTypeOption'; +import { CairoOption } from './enum'; // TODO: separate validate is redundant as CairoTypes are validated during construction. // TODO: This validate should provide added valie method base validate poiniting to incorect value for method, opt. using color coding @@ -220,8 +222,11 @@ const validateEnum = (parameter: any, input: AbiEntry) => { const methodsKeys = Object.getOwnPropertyNames(Object.getPrototypeOf(parameter)); const keys = [...Object.getOwnPropertyNames(parameter), ...methodsKeys]; - if (isTypeOption(input.type) && keys.includes('isSome') && keys.includes('isNone')) { - return; // Option Enum + if (isTypeOption(input.type) && parameter instanceof CairoTypeOption) { + return; // CairoTypeOption Enum + } + if (isTypeOption(input.type) && parameter instanceof CairoOption) { + return; // CairoTypeOption Enum } if (isTypeResult(input.type) && keys.includes('isOk') && keys.includes('isErr')) { return; // Result Enum From ef228c0539aeade43ba31611e8182dd8fe2eddf5 Mon Sep 17 00:00:00 2001 From: PhilippeR26 Date: Thu, 4 Sep 2025 16:06:14 +0200 Subject: [PATCH 02/17] fix: correct decompose of arrays and tuple --- .../calldata/enum/CairoTypeOption.test.ts | 77 +++++++++ src/utils/cairoDataTypes/array.ts | 26 +-- src/utils/cairoDataTypes/cairoTypeOption.ts | 158 ++++++++++-------- src/utils/cairoDataTypes/fixedArray.ts | 21 +-- src/utils/cairoDataTypes/tuple.ts | 64 ++++--- src/utils/calldata/parser/parsingStrategy.ts | 30 ++-- 6 files changed, 246 insertions(+), 130 deletions(-) create mode 100644 __tests__/utils/calldata/enum/CairoTypeOption.test.ts diff --git a/__tests__/utils/calldata/enum/CairoTypeOption.test.ts b/__tests__/utils/calldata/enum/CairoTypeOption.test.ts new file mode 100644 index 000000000..9166e3e7f --- /dev/null +++ b/__tests__/utils/calldata/enum/CairoTypeOption.test.ts @@ -0,0 +1,77 @@ +import { + CairoOptionVariant, + CairoTypeOption, + CairoUint8, + hdParsingStrategy, +} from '../../../../src'; + +describe('CairoTypeOption', () => { + describe('constructor', () => { + test('should set "Some" if variant is 0', () => { + const val = 8; + const typeCairo = 'core::option::Option::'; + const cairoTypeOption0 = new CairoTypeOption( + val, + typeCairo, + hdParsingStrategy, + CairoOptionVariant.Some + ); + expect(cairoTypeOption0.isVariantSome).toBe(true); + expect(cairoTypeOption0.content).toEqual(new CairoUint8(8)); + expect(cairoTypeOption0.optionCairoType).toBe(typeCairo); + expect(cairoTypeOption0.strategy).toEqual(hdParsingStrategy); + }); + + test('should set "None" if variant is 1', () => { + const typeCairo = 'core::option::Option::'; + const cairoTypeOption = new CairoTypeOption( + undefined, + typeCairo, + hdParsingStrategy, + CairoOptionVariant.None + ); + expect(cairoTypeOption.isVariantSome).toBe(false); + expect(cairoTypeOption.content).toBeUndefined(); + expect(cairoTypeOption.optionCairoType).toBe(typeCairo); + expect(cairoTypeOption.strategy).toEqual(hdParsingStrategy); + }); + + // test('should throw an error if wrong variant is provided', () => { + // expect(() => new CairoTypeOption()).toThrow( + // new Error('Wrong variant! It should be CairoOptionVariant.Some or .None.') + // ); + // }); + + // test('should throw an error if content is undefined or not provided', () => { + // expect(() => new CairoOption(0)).toThrow( + // new Error('The creation of a Cairo Option with "Some" variant needs a content as input.') + // ); + // }); + // }); + + // describe('unwrap', () => { + // test('should return undefined if "None" value is set', () => { + // const cairoOption = new CairoOption(1, 'option_content'); + // expect(cairoOption.unwrap()).toBeUndefined(); + // }); + + // test('should return "Some" value if it is set', () => { + // const cairoOption = new CairoOption(0, 'option_content'); + // expect(cairoOption.unwrap()).toEqual('option_content'); + // }); + // }); + + // describe('isSome', () => { + // test('should return true if "Some" value is set', () => { + // const cairoOption = new CairoOption(0, 'option_content'); + // expect(cairoOption.isSome()).toEqual(true); + // }); + // }); + + // describe('isNone', () => { + // test('should return true if "None" value is set', () => { + // const cairoOption = new CairoOption(1, 'option_content'); + // expect(cairoOption.isNone()).toEqual(true); + // }); + }); +}); diff --git a/src/utils/cairoDataTypes/array.ts b/src/utils/cairoDataTypes/array.ts index b2a7e8499..437036cfd 100644 --- a/src/utils/cairoDataTypes/array.ts +++ b/src/utils/cairoDataTypes/array.ts @@ -4,6 +4,8 @@ import { getNext, toHex } from '../num'; import { felt, getArrayType, isTypeArray } from '../calldata/cairo'; import { type ParsingStrategy } from '../calldata/parser/parsingStrategy'; import { CairoType } from './cairoType.interface'; +import { CairoTypeOption } from './cairoTypeOption'; +import { CairoOption } from '../calldata/enum'; /** * Represents a Cairo dynamic array with runtime-determined length. @@ -43,10 +45,12 @@ import { CairoType } from './cairoType.interface'; export class CairoArray extends CairoType { static dynamicSelector = 'CairoArray' as const; + public readonly dynamicSelector = CairoArray.dynamicSelector; + /** * Array of CairoType instances representing a Cairo dynamic array. */ - public readonly content: CairoType[]; + public readonly content: any[]; /** * Cairo dynamic array type. @@ -107,6 +111,9 @@ export class CairoArray extends CairoType { // Create CairoType instances for each element this.content = values.map((value) => { + if (value instanceof CairoOption) { + return CairoTypeOption.fromCairoOption(value, elementType, strategy); + } // First check direct constructors const constructor = strategy.constructors[elementType]; if (constructor) { @@ -336,20 +343,19 @@ export class CairoArray extends CairoType { public decompose(strategy: ParsingStrategy): any[] { // Use response parsers to get final parsed values (for API response parsing) const elementType = getArrayType(this.arrayType); - return this.content.map((element) => { - if (element instanceof CairoArray) { - // For nested arrays, decompose recursively with strategy - return element.decompose(strategy); - } // For raw string values (unsupported types), throw error if (typeof element === 'string') { throw new Error(`No parser found for element type: ${elementType} in parsing strategy`); } - - // For primitive types, use the response parser to get final values - const responseParser = strategy.response[elementType]; - + let parserName: string = elementType; + if (element instanceof CairoType) { + if (Object.hasOwn(element, 'dynamicSelector')) { + // dynamic recursive CairoType + parserName = (element as any).dynamicSelector; + } + } + const responseParser = strategy.response[parserName]; if (responseParser) { return responseParser(element); } diff --git a/src/utils/cairoDataTypes/cairoTypeOption.ts b/src/utils/cairoDataTypes/cairoTypeOption.ts index 92a236ca9..6d24a226b 100644 --- a/src/utils/cairoDataTypes/cairoTypeOption.ts +++ b/src/utils/cairoDataTypes/cairoTypeOption.ts @@ -22,8 +22,10 @@ import { CairoOptionVariant, CairoOption } from '../calldata/enum'; export class CairoTypeOption extends CairoType { static dynamicSelector = 'CairoTypeOption' as const; + public readonly dynamicSelector = CairoTypeOption.dynamicSelector; + /* CairoType instance representing a Cairo option. */ - public readonly content: CairoType | undefined; + public readonly content: any; /* Cairo type of the option. */ public readonly optionCairoType: string; @@ -122,52 +124,9 @@ export class CairoTypeOption extends CairoType { this.isVariantSome = variant === CairoOptionVariant.Some; } else if (content instanceof CairoOption) { // "content" is a CairoOption - switch (content.isSome()) { - case true: { - const elementType = CairoTypeOption.getVariantSomeType(optionCairoType); - const constructor = strategy.constructors[elementType]; - if (constructor) { - this.content = constructor( - content.unwrap(), - elementType, - content.isSome() ? CairoOptionVariant.Some : CairoOptionVariant.None - ); - } else { - const dynamicSelectors = Object.entries(strategy.dynamicSelectors); - const matchingSelector = dynamicSelectors.find(([, selectorFn]) => - selectorFn(elementType) - ); - if (matchingSelector) { - const [selectorName] = matchingSelector; - const dynamicConstructor = strategy.constructors[selectorName]; - if (dynamicConstructor) { - this.content = dynamicConstructor( - content, - elementType, - content.isSome() ? CairoOptionVariant.Some : CairoOptionVariant.None - ); - } - } else { - throw new Error(`"${elementType}" is not a valid Cairo type`); - } - } - this.isVariantSome = true; - break; - } - case false: { - this.content = new CairoTypeOption( - undefined, - optionCairoType, - strategy, - CairoOptionVariant.None - ); - this.isVariantSome = false; - break; - } - default: { - throw new Error('Invalid Option variant.'); - } - } + const elementType = CairoTypeOption.getVariantSomeType(optionCairoType); + this.content = CairoTypeOption.fromCairoOption(content, elementType, strategy); + this.isVariantSome = variant === CairoOptionVariant.Some; } else { // not an iterator, not an CairoType, neither a CairoType -> so is low level data (BigNumberish, array, object) switch (variant) { @@ -286,9 +245,9 @@ export class CairoTypeOption extends CairoType { /** * Check if input data is valid for CairoTypeOption creation. - * @param input - Input data to check - * @param type - The Cairo option type (e.g., "core::option::Option::") - * @returns true if valid, false otherwise + * @param {unknown} input - Input data to check + * @param {string} type - The Cairo option type (e.g., "core::option::Option::") + * @returns {boolean} true if valid, false otherwise * @example * ```typescript * const isValid1 = CairoTypeOption.is(200, "core::option::Option::", CairoOptionVariant.Some"); // true @@ -320,6 +279,35 @@ export class CairoTypeOption extends CairoType { return isTypeOption(type); } + /** + * create a CairoTypeOption instance from a CairoOption instance. + * @param {CairoOption} option - CairoOption instance to convert. + * @param {string} type - The Cairo option type string (e.g., "core::option::Option::"). + * @param {ParsingStrategy} strategy - Parsing strategy for element type handling (e.g. hdParsingStrategy). + * @returns {CairoTypeOption} new CairoTypeOption instance. + * @example + * ```typescript + * const myCairoTypeOption = CairoTypeOption.fromCairoOption( + * myCairoOption, + * "core::option::Option::", + * hdParsingStrategy + * ); + * ``` + */ + static fromCairoOption( + option: CairoOption, + type: string, + strategy: ParsingStrategy + ): CairoTypeOption { + const content = option.unwrap(); + return new CairoTypeOption( + content, + type, + strategy, + option.isSome() ? CairoOptionVariant.Some : CairoOptionVariant.None + ); + } + /** * Serialize the Cairo option into hex strings for Starknet API requests. * @@ -344,31 +332,55 @@ export class CairoTypeOption extends CairoType { private decomposeSome(strategyDecode?: ParsingStrategy): any { const strategy = strategyDecode ?? this.strategy; - const someType = CairoTypeOption.getVariantSomeType(this.optionCairoType); - const responseParser = strategy.response[someType]; - if (responseParser) { - if (this.isVariantSome) { - const someContent = responseParser(this.content!); - return someContent; - } - return undefined; - } - const dynamicSelectors = Object.entries(strategy.dynamicSelectors); - const matchingSelector = dynamicSelectors.find(([, selectorFn]) => - selectorFn(this.optionCairoType) - ); - if (matchingSelector) { - if (this.isVariantSome) { - const [selectorName] = matchingSelector; - const dynamicResponseParser = strategy.response[selectorName]; - if (dynamicResponseParser) { - return dynamicResponseParser(this.content!); - } + const { content } = this; + // const someType = CairoTypeOption.getVariantSomeType(this.optionCairoType); + // const responseParser = strategy.response[someType]; + // if (responseParser) { + // if (this.isVariantSome) { + // const someContent = responseParser(this.content!); + // return someContent; + // } + // return undefined; + // } + // const dynamicSelectors = Object.entries(strategy.dynamicSelectors); + // const matchingSelector = dynamicSelectors.find(([, selectorFn]) => + // selectorFn(this.optionCairoType) + // ); + + // if (matchingSelector) { + // if (this.isVariantSome) { + // const [selectorName] = matchingSelector; + // const dynamicResponseParser = strategy.response[selectorName]; + // if (dynamicResponseParser) { + // return dynamicResponseParser(this.content!); + // } + // } + // return undefined; + // } + // throw new Error(`No response parser found for element type: ${someType} in parsing strategy`); + const elementType = CairoTypeOption.getVariantSomeType(this.optionCairoType); + // return ( + // For raw string values (unsupported types), throw error + if (typeof content === 'string') { + throw new Error(`No parser found for element type: ${elementType} in parsing strategy`); + } + let parserName: string = elementType; + if (content instanceof CairoType) { + if (Object.hasOwn(content, 'dynamicSelector')) { + // dynamic recursive CairoType + parserName = (content as any).dynamicSelector; } - return undefined; } - throw new Error(`No response parser found for element type: ${someType} in parsing strategy`); + const responseParser = strategy.response[parserName]; + if (responseParser) { + return responseParser(content); + } + + // No response parser found - throw error instead of fallback magic + throw new Error( + `No response parser found for element type: ${elementType} in parsing strategy` + ); } /** @@ -387,8 +399,8 @@ export class CairoTypeOption extends CairoType { * ``` */ public decompose(strategy: ParsingStrategy): CairoOption { - const someContent = this.decomposeSome(strategy); if (this.isVariantSome) { + const someContent = this.decomposeSome(strategy); return new CairoOption(CairoOptionVariant.Some, someContent); } return new CairoOption(CairoOptionVariant.None); diff --git a/src/utils/cairoDataTypes/fixedArray.ts b/src/utils/cairoDataTypes/fixedArray.ts index 39f089ab4..3e65ec3b4 100644 --- a/src/utils/cairoDataTypes/fixedArray.ts +++ b/src/utils/cairoDataTypes/fixedArray.ts @@ -40,10 +40,12 @@ import { CairoType } from './cairoType.interface'; export class CairoFixedArray extends CairoType { static dynamicSelector = 'CairoFixedArray' as const; + public readonly dynamicSelector = CairoFixedArray.dynamicSelector; + /** * Array of CairoType instances representing a Cairo fixed array. */ - public readonly content: CairoType[]; + public readonly content: any[]; /** * Cairo fixed array type. @@ -400,20 +402,19 @@ export class CairoFixedArray extends CairoType { public decompose(strategy: ParsingStrategy): any[] { // Use response parsers to get final parsed values (for API response parsing) const elementType = CairoFixedArray.getFixedArrayType(this.arrayType); - return this.content.map((element) => { - if (element instanceof CairoFixedArray) { - // For nested arrays, decompose recursively with strategy - return element.decompose(strategy); - } // For raw string values (unsupported types), throw error if (typeof element === 'string') { throw new Error(`No parser found for element type: ${elementType} in parsing strategy`); } - - // For primitive types, use the response parser to get final values - const responseParser = strategy.response[elementType]; - + let parserName: string = elementType; + if (element instanceof CairoType) { + if (Object.hasOwn(element, 'dynamicSelector')) { + // dynamic recursive CairoType + parserName = (element as any).dynamicSelector; + } + } + const responseParser = strategy.response[parserName]; if (responseParser) { return responseParser(element); } diff --git a/src/utils/cairoDataTypes/tuple.ts b/src/utils/cairoDataTypes/tuple.ts index afdddc7b0..ddd83c412 100644 --- a/src/utils/cairoDataTypes/tuple.ts +++ b/src/utils/cairoDataTypes/tuple.ts @@ -42,10 +42,12 @@ import { CairoFelt252 } from './felt'; export class CairoTuple extends CairoType { static dynamicSelector = 'CairoTuple' as const; + public readonly dynamicSelector = CairoTuple.dynamicSelector; + /** * Array of CairoType instances representing the tuple elements. */ - public readonly content: CairoType[]; + public readonly content: any[]; /** * Cairo tuple type string. @@ -586,10 +588,10 @@ export class CairoTuple extends CairoType { const elementTypes = CairoTuple.getTupleElementTypes(this.tupleType); return this.content.map((element, index) => { - if (element instanceof CairoTuple) { - // For nested tuples, decompose recursively with strategy - return element.decompose(strategy); - } + // if (element instanceof CairoTuple) { + // // For nested tuples, decompose recursively with strategy + // return element.decompose(strategy); + // } // For raw string values (unsupported types), throw error if (typeof element === 'string') { const elementType = @@ -599,32 +601,44 @@ export class CairoTuple extends CairoType { throw new Error(`No parser found for element type: ${elementType} in parsing strategy`); } - // For primitive types, use the response parser to get final values - const elementType = - typeof elementTypes[index] === 'string' - ? (elementTypes[index] as string) - : (elementTypes[index] as any).type; - const responseParser = strategy.response[elementType]; - + // // For primitive types, use the response parser to get final values + // const elementType = + // typeof elementTypes[index] === 'string' + // ? (elementTypes[index] as string) + // : (elementTypes[index] as any).type; + // const responseParser = strategy.response[elementType]; + + // if (responseParser) { + // return responseParser(element); + // } + + // // Check dynamic selectors for response parsing + // const dynamicSelectors = Object.entries(strategy.dynamicSelectors); + // const matchingSelector = dynamicSelectors.find(([, selectorFn]) => selectorFn(elementType)); + + // if (matchingSelector) { + // const [selectorName] = matchingSelector; + // const dynamicResponseParser = strategy.response[selectorName]; + // if (dynamicResponseParser) { + // return dynamicResponseParser(element); + // } + // } + // TODO: "as string" to be removed once extractCairo1Tuple result is only string (no more object as result) + let parserName: string = elementTypes[index] as string; + if (element instanceof CairoType) { + if (Object.hasOwn(element, 'dynamicSelector')) { + // dynamic recursive CairoType + parserName = (element as any).dynamicSelector; + } + } + const responseParser = strategy.response[parserName]; if (responseParser) { return responseParser(element); } - // Check dynamic selectors for response parsing - const dynamicSelectors = Object.entries(strategy.dynamicSelectors); - const matchingSelector = dynamicSelectors.find(([, selectorFn]) => selectorFn(elementType)); - - if (matchingSelector) { - const [selectorName] = matchingSelector; - const dynamicResponseParser = strategy.response[selectorName]; - if (dynamicResponseParser) { - return dynamicResponseParser(element); - } - } - // No response parser found - throw error instead of fallback magic throw new Error( - `No response parser found for element type: ${elementType} in parsing strategy` + `No response parser found for element type: ${elementTypes[index]} in parsing strategy` ); }); } diff --git a/src/utils/calldata/parser/parsingStrategy.ts b/src/utils/calldata/parser/parsingStrategy.ts index f5d7ef589..6140148bb 100644 --- a/src/utils/calldata/parser/parsingStrategy.ts +++ b/src/utils/calldata/parser/parsingStrategy.ts @@ -149,22 +149,26 @@ export const hdParsingStrategy: ParsingStrategy = { } return new CairoSecp256k1Point(input); }, - CairoFixedArray: (input: Iterator | unknown, type?: string) => { + [CairoFixedArray.dynamicSelector]: (input: Iterator | unknown, type?: string) => { assert(!!type, 'CairoFixedArray constructor requires type parameter'); // Always use constructor - it handles both iterator and user input internally return new CairoFixedArray(input, type, hdParsingStrategy); }, - CairoArray: (input: Iterator | unknown, type?: string) => { + [CairoArray.dynamicSelector]: (input: Iterator | unknown, type?: string) => { assert(!!type, 'CairoArray constructor requires type parameter'); // Always use constructor - it handles both iterator and user input internally return new CairoArray(input, type, hdParsingStrategy); }, - CairoTuple: (input: Iterator | unknown, type?: string) => { + [CairoTuple.dynamicSelector]: (input: Iterator | unknown, type?: string) => { assert(!!type, 'CairoTuple constructor requires type parameter'); // Always use constructor - it handles both iterator and user input internally return new CairoTuple(input, type, hdParsingStrategy); }, - CairoTypeOption: (input: Iterator | unknown, type?: string, variant?: VariantType) => { + [CairoTypeOption.dynamicSelector]: ( + input: Iterator | unknown, + type?: string, + variant?: VariantType + ) => { assert(!!type, 'CairoTypeOption constructor requires "type" parameter.'); assert( typeof variant !== 'undefined', @@ -175,16 +179,16 @@ export const hdParsingStrategy: ParsingStrategy = { }, }, dynamicSelectors: { - CairoFixedArray: (type: string) => { + [CairoFixedArray.dynamicSelector]: (type: string) => { return CairoFixedArray.isAbiType(type); }, - CairoArray: (type: string) => { + [CairoArray.dynamicSelector]: (type: string) => { return isTypeArray(type); }, - CairoTuple: (type: string) => { + [CairoTuple.dynamicSelector]: (type: string) => { return isTypeTuple(type); }, - CairoTypeOption: (type: string) => { + [CairoTypeOption.dynamicSelector]: (type: string) => { return isTypeOption(type); }, // TODO: add more dynamic selectors here @@ -209,11 +213,13 @@ export const hdParsingStrategy: ParsingStrategy = { [CairoInt128.abiSelector]: (instance: CairoType) => (instance as CairoInt128).toBigInt(), [CairoSecp256k1Point.abiSelector]: (instance: CairoType) => (instance as CairoSecp256k1Point).toBigInt(), - CairoFixedArray: (instance: CairoType) => + [CairoFixedArray.dynamicSelector]: (instance: CairoType) => (instance as CairoFixedArray).decompose(hdParsingStrategy), - CairoArray: (instance: CairoType) => (instance as CairoArray).decompose(hdParsingStrategy), - CairoTuple: (instance: CairoType) => (instance as CairoTuple).decompose(hdParsingStrategy), - CairoTypeOption: (instance: CairoType) => + [CairoArray.dynamicSelector]: (instance: CairoType) => + (instance as CairoArray).decompose(hdParsingStrategy), + [CairoTuple.dynamicSelector]: (instance: CairoType) => + (instance as CairoTuple).decompose(hdParsingStrategy), + [CairoTypeOption.dynamicSelector]: (instance: CairoType) => (instance as CairoTypeOption).decompose(hdParsingStrategy), }, } as const; From 61cd1cdedeb63a5a9a6a6a9fb4b42bbb8851bfd3 Mon Sep 17 00:00:00 2001 From: PhilippeR26 Date: Fri, 5 Sep 2025 18:28:05 +0200 Subject: [PATCH 03/17] fix: solve problems of recursive encoding --- src/utils/cairoDataTypes/array.ts | 90 +++++----- src/utils/cairoDataTypes/cairoTypeOption.ts | 135 ++++++-------- src/utils/cairoDataTypes/fixedArray.ts | 156 +++++++--------- src/utils/cairoDataTypes/tuple.ts | 178 ++++++++----------- src/utils/calldata/parser/parsingStrategy.ts | 7 +- 5 files changed, 241 insertions(+), 325 deletions(-) diff --git a/src/utils/cairoDataTypes/array.ts b/src/utils/cairoDataTypes/array.ts index 437036cfd..e8b7a48ed 100644 --- a/src/utils/cairoDataTypes/array.ts +++ b/src/utils/cairoDataTypes/array.ts @@ -50,7 +50,7 @@ export class CairoArray extends CairoType { /** * Array of CairoType instances representing a Cairo dynamic array. */ - public readonly content: any[]; + public readonly content: CairoType[]; /** * Cairo dynamic array type. @@ -89,55 +89,53 @@ export class CairoArray extends CairoType { */ constructor(content: unknown, arrayType: string, strategy: ParsingStrategy) { super(); - - // If content is already a CairoArray instance, just copy its properties - if (content instanceof CairoArray) { - this.content = content.content; - this.arrayType = content.arrayType; - return; - } - - // Check if input is an API response iterator + this.arrayType = arrayType; if (content && typeof content === 'object' && 'next' in content) { - // API response path - use parser - const parsedContent = CairoArray.parser(content as Iterator, arrayType, strategy); + // "content" is an iterator + const parsedContent: CairoType[] = CairoArray.parser( + content as Iterator, + arrayType, + strategy + ); this.content = parsedContent; - this.arrayType = arrayType; - } else { - // User input path - process directly - CairoArray.validate(content, arrayType); - const values = CairoArray.extractValuesArray(content); - const elementType = getArrayType(arrayType); - - // Create CairoType instances for each element - this.content = values.map((value) => { - if (value instanceof CairoOption) { - return CairoTypeOption.fromCairoOption(value, elementType, strategy); - } - // First check direct constructors - const constructor = strategy.constructors[elementType]; - if (constructor) { - return constructor(value, elementType); - } - - // Check dynamic selectors - const dynamicSelectors = Object.entries(strategy.dynamicSelectors); - const matchingSelector = dynamicSelectors.find(([, selectorFn]) => selectorFn(elementType)); + return; + } + CairoArray.validate(content, arrayType); + const arrayContentType = CairoArray.getArrayElementType(arrayType); + const resultContent: any[] = CairoArray.extractValuesArray(content).map((contentItem: any) => { + if ( + contentItem && + typeof contentItem === 'object' && + contentItem !== null && + 'toApiRequest' in contentItem + ) { + // "content" is a CairoType + return contentItem as CairoType; + } + if (contentItem instanceof CairoOption) { + // "content" is a CairoOption + return CairoTypeOption.fromCairoOption(contentItem, arrayContentType, strategy); + } + // not an iterator, not an CairoType, neither a CairoType -> so is low level data (BigNumberish, array, object) - if (matchingSelector) { - const [selectorName] = matchingSelector; - const dynamicConstructor = strategy.constructors[selectorName]; - if (dynamicConstructor) { - return dynamicConstructor(value, elementType); - } + const constructor = strategy.constructors[arrayContentType]; + if (constructor) { + return constructor(contentItem, arrayContentType); + } + const dynamicSelectors = Object.entries(strategy.dynamicSelectors); + const matchingSelector = dynamicSelectors.find(([, selectorFn]) => + selectorFn(arrayContentType) + ); + if (matchingSelector) { + const [selectorName] = matchingSelector; + const dynamicConstructor = strategy.constructors[selectorName]; + if (dynamicConstructor) { + return dynamicConstructor(contentItem, arrayContentType); } - - // Unknown type - store as string for later error handling - return String(value) as unknown as CairoType; - }); - - this.arrayType = arrayType; - } + } + throw new Error(`"${arrayContentType}" is not a valid Cairo type`); + }); + this.content = resultContent; } /** diff --git a/src/utils/cairoDataTypes/cairoTypeOption.ts b/src/utils/cairoDataTypes/cairoTypeOption.ts index 6d24a226b..97af53650 100644 --- a/src/utils/cairoDataTypes/cairoTypeOption.ts +++ b/src/utils/cairoDataTypes/cairoTypeOption.ts @@ -25,7 +25,7 @@ export class CairoTypeOption extends CairoType { public readonly dynamicSelector = CairoTypeOption.dynamicSelector; /* CairoType instance representing a Cairo option. */ - public readonly content: any; + public readonly content: CairoType | undefined; /* Cairo type of the option. */ public readonly optionCairoType: string; @@ -112,56 +112,58 @@ export class CairoTypeOption extends CairoType { } } this.isVariantSome = variantFromIterator === 0; - } else { - assert( - !isUndefined(variant), - '"variant" parameter is mandatory when creating a new Cairo option from a "CairoType" or raw data.' - ); - CairoTypeOption.validate(content, optionCairoType, variant); - if (content && typeof content === 'object' && content !== null && 'toApiRequest' in content) { - // "content" is a CairoType - this.content = content as CairoType; - this.isVariantSome = variant === CairoOptionVariant.Some; - } else if (content instanceof CairoOption) { - // "content" is a CairoOption + return; + } + CairoTypeOption.validate(content, optionCairoType, variant); + if (content && typeof content === 'object' && content !== null && 'toApiRequest' in content) { + // "content" is a CairoType + this.content = content as CairoType; + this.isVariantSome = variant === CairoOptionVariant.Some; + return; + } + if (content instanceof CairoOption) { + // "content" is a CairoOption + const elementType = CairoTypeOption.getVariantSomeType(optionCairoType); + this.content = CairoTypeOption.fromCairoOption(content, elementType, strategy); + this.isVariantSome = variant === CairoOptionVariant.Some; + return; + } + // not an iterator, not an CairoType, neither a CairoType -> so is low level data (BigNumberish, array, object) + assert( + !isUndefined(variant), + '"variant" parameter is mandatory when creating a new Cairo option from a "CairoType" or raw data.' + ); + switch (variant) { + case CairoOptionVariant.Some: { const elementType = CairoTypeOption.getVariantSomeType(optionCairoType); - this.content = CairoTypeOption.fromCairoOption(content, elementType, strategy); - this.isVariantSome = variant === CairoOptionVariant.Some; - } else { - // not an iterator, not an CairoType, neither a CairoType -> so is low level data (BigNumberish, array, object) - switch (variant) { - case CairoOptionVariant.Some: { - const elementType = CairoTypeOption.getVariantSomeType(optionCairoType); - const constructor = strategy.constructors[elementType]; - if (constructor) { - this.content = constructor(content, elementType); - } else { - const dynamicSelectors = Object.entries(strategy.dynamicSelectors); - const matchingSelector = dynamicSelectors.find(([, selectorFn]) => - selectorFn(elementType) - ); - if (matchingSelector) { - const [selectorName] = matchingSelector; - const dynamicConstructor = strategy.constructors[selectorName]; - if (dynamicConstructor) { - this.content = dynamicConstructor(content, elementType); - } - } else { - throw new Error(`"${elementType}" is not a valid Cairo type`); - } + const constructor = strategy.constructors[elementType]; + if (constructor) { + this.content = constructor(content, elementType); + } else { + const dynamicSelectors = Object.entries(strategy.dynamicSelectors); + const matchingSelector = dynamicSelectors.find(([, selectorFn]) => + selectorFn(elementType) + ); + if (matchingSelector) { + const [selectorName] = matchingSelector; + const dynamicConstructor = strategy.constructors[selectorName]; + if (dynamicConstructor) { + this.content = dynamicConstructor(content, elementType); } - this.isVariantSome = true; - break; - } - case 1: { - this.isVariantSome = false; - this.content = undefined; - break; - } - default: { - throw new Error('Invalid Option variant.'); + } else { + throw new Error(`"${elementType}" is not a valid Cairo type`); } } + this.isVariantSome = true; + break; + } + case 1: { + this.isVariantSome = false; + this.content = undefined; + break; + } + default: { + throw new Error('Invalid Option variant.'); } } } @@ -234,13 +236,18 @@ export class CairoTypeOption extends CairoType { * CairoTypeOption.validate(200, "wrong", 3); // throws * ``` */ - static validate(input: unknown, type: string, variant: VariantType): void { + static validate(input: unknown, type: string, variant: VariantType | undefined): void { assert( CairoTypeOption.isAbiType(type), `The type ${type} is not a Cairo option. Needs core::option::Option::.` ); - const numberVariant = Number(variant); - assert([0, 1].includes(numberVariant), 'In Cairo option, only 0 or 1 variants are authorized.'); + if (!isUndefined(variant)) { + const numberVariant = Number(variant); + assert( + [0, 1].includes(numberVariant), + 'In Cairo option, only 0 or 1 variants are authorized.' + ); + } } /** @@ -334,33 +341,7 @@ export class CairoTypeOption extends CairoType { const strategy = strategyDecode ?? this.strategy; const { content } = this; - // const someType = CairoTypeOption.getVariantSomeType(this.optionCairoType); - // const responseParser = strategy.response[someType]; - // if (responseParser) { - // if (this.isVariantSome) { - // const someContent = responseParser(this.content!); - // return someContent; - // } - // return undefined; - // } - // const dynamicSelectors = Object.entries(strategy.dynamicSelectors); - // const matchingSelector = dynamicSelectors.find(([, selectorFn]) => - // selectorFn(this.optionCairoType) - // ); - - // if (matchingSelector) { - // if (this.isVariantSome) { - // const [selectorName] = matchingSelector; - // const dynamicResponseParser = strategy.response[selectorName]; - // if (dynamicResponseParser) { - // return dynamicResponseParser(this.content!); - // } - // } - // return undefined; - // } - // throw new Error(`No response parser found for element type: ${someType} in parsing strategy`); const elementType = CairoTypeOption.getVariantSomeType(this.optionCairoType); - // return ( // For raw string values (unsupported types), throw error if (typeof content === 'string') { throw new Error(`No parser found for element type: ${elementType} in parsing strategy`); @@ -374,7 +355,7 @@ export class CairoTypeOption extends CairoType { } const responseParser = strategy.response[parserName]; if (responseParser) { - return responseParser(content); + return responseParser(content as CairoType); } // No response parser found - throw error instead of fallback magic diff --git a/src/utils/cairoDataTypes/fixedArray.ts b/src/utils/cairoDataTypes/fixedArray.ts index 3e65ec3b4..cda4d20fe 100644 --- a/src/utils/cairoDataTypes/fixedArray.ts +++ b/src/utils/cairoDataTypes/fixedArray.ts @@ -3,6 +3,8 @@ import { addCompiledFlag } from '../helpers'; import { getNext } from '../num'; import { type ParsingStrategy } from '../calldata/parser/parsingStrategy'; import { CairoType } from './cairoType.interface'; +import { CairoOption } from '../calldata/enum'; +import { CairoTypeOption } from './cairoTypeOption'; /** * Represents a Cairo fixed-size array with compile-time known length. @@ -45,7 +47,7 @@ export class CairoFixedArray extends CairoType { /** * Array of CairoType instances representing a Cairo fixed array. */ - public readonly content: any[]; + public readonly content: CairoType[]; /** * Cairo fixed array type. @@ -85,19 +87,72 @@ export class CairoFixedArray extends CairoType { constructor(content: unknown, arrayType: string, strategy: ParsingStrategy) { super(); - // If content is already a CairoFixedArray instance, just copy its properties - if (content instanceof CairoFixedArray) { - this.content = content.content; - this.arrayType = content.arrayType; - return; - } + // // If content is already a CairoFixedArray instance, just copy its properties + // if (content instanceof CairoFixedArray) { + // this.content = content.content; + // this.arrayType = content.arrayType; + // return; + // } - // Always use parser for unified processing - const iterator = CairoFixedArray.prepareIterator(content, arrayType); - const parsedContent = CairoFixedArray.parser(iterator, arrayType, strategy); + // // Always use parser for unified processing + // const iterator = CairoFixedArray.prepareIterator(content, arrayType); + // const parsedContent = CairoFixedArray.parser(iterator, arrayType, strategy); + + // this.content = parsedContent; - this.content = parsedContent; this.arrayType = arrayType; + if (content && typeof content === 'object' && 'next' in content) { + // "content" is an iterator + const parsedContent: CairoType[] = CairoFixedArray.parser( + content as Iterator, + arrayType, + strategy + ); + this.content = parsedContent; + return; + } + CairoFixedArray.validate(content, arrayType); + const arrayContentType = CairoFixedArray.getFixedArrayType(arrayType); + const resultContent: any[] = CairoFixedArray.extractValuesArray(content).map( + (contentItem: any) => { + if ( + contentItem && + typeof contentItem === 'object' && + contentItem !== null && + 'toApiRequest' in contentItem + ) { + // "content" is a CairoType + return contentItem as CairoType; + } + if (contentItem instanceof CairoOption) { + // "content" is a CairoOption + return CairoTypeOption.fromCairoOption(contentItem, arrayContentType, strategy); + } + // not an iterator, not an CairoType, neither a CairoType -> so is low level data (BigNumberish, array, object) + + const constructor = strategy.constructors[arrayContentType]; + if (constructor) { + return constructor(contentItem, arrayContentType); + } + const dynamicSelectors = Object.entries(strategy.dynamicSelectors); + const matchingSelector = dynamicSelectors.find(([, selectorFn]) => + selectorFn(arrayContentType) + ); + if (matchingSelector) { + const [selectorName] = matchingSelector; + const dynamicConstructor = strategy.constructors[selectorName]; + if (dynamicConstructor) { + return dynamicConstructor(contentItem, arrayContentType); + } + } + throw new Error(`"${arrayContentType}" is not a valid Cairo type`); + } + ); + assert( + resultContent.length === CairoFixedArray.getFixedArraySize(arrayType), + `ABI type ${arrayType}: expected ${CairoFixedArray.getFixedArraySize(arrayType)} items, got ${resultContent.length} items.` + ); + this.content = resultContent; } /** @@ -149,47 +204,6 @@ export class CairoFixedArray extends CairoType { return rawValues as unknown as CairoType[]; } - /** - * Prepare a string iterator from any input type for unified processing. - * - * This method normalizes all possible input types into a consistent Iterator - * that can be consumed by the parser. It handles three main scenarios: - * 1. Iterator from API responses → pass through unchanged - * 2. CairoType instances → serialize to API strings and create iterator - * 3. User input (arrays/objects) → flatten to strings and create iterator - * - * @param content - Input data (Iterator, array, object, or CairoType instances) - * @param arrayType - Fixed array type for validation and processing - * @returns Iterator over string values ready for parsing - * @private - */ - private static prepareIterator(content: unknown, arrayType: string): Iterator { - // If already an iterator (API response), return as-is - if (content && typeof content === 'object' && 'next' in content) { - return content as Iterator; - } - - // For user input, validate and convert to string iterator - CairoFixedArray.validate(content, arrayType); - const values = CairoFixedArray.extractValuesArray(content); - - // If values are already CairoType instances, serialize them to strings - if ( - values.length > 0 && - typeof values[0] === 'object' && - values[0] !== null && - 'toApiRequest' in values[0] - ) { - // Convert CairoType instances to their API string representation - const stringValues = values.flatMap((cairoType) => (cairoType as any).toApiRequest()); - return stringValues[Symbol.iterator](); - } - - // Convert user input to flattened string array and return iterator - const flatStringValues = CairoFixedArray.flattenUserInput(values, arrayType); - return flatStringValues[Symbol.iterator](); - } - /** * Extract values array from either array or object input. * @@ -211,44 +225,6 @@ export class CairoFixedArray extends CairoType { return Object.values(input as object); } - /** - * Flatten user input into a sequence of strings for parser consumption. - * - * Recursively processes user input to create a flat sequence of strings that matches - * the format expected by API responses. For nested fixed arrays, it recursively - * flattens all nested structures into a single sequential stream of values. - * - * @param values - Array of user input values to flatten - * @param arrayType - Fixed array type to determine element processing - * @returns Flattened array of strings ready for parser consumption - * @private - * @example - * // Simple array: [1, 2, 3] → ['1', '2', '3'] - * // Nested array: [[1, 2], [3, 4]] → ['1', '2', '3', '4'] - */ - private static flattenUserInput(values: any[], arrayType: string): string[] { - const elementType = CairoFixedArray.getFixedArrayType(arrayType); - - // If element type is itself a fixed array, we need to flatten recursively - if (CairoFixedArray.isAbiType(elementType)) { - return values.flatMap((value) => { - if ( - Array.isArray(value) || - (typeof value === 'object' && value !== null && !('toApiRequest' in value)) - ) { - // Recursively flatten nested arrays - const nestedValues = CairoFixedArray.extractValuesArray(value); - return CairoFixedArray.flattenUserInput(nestedValues, elementType); - } - // Single value, convert to string - return String(value); - }); - } - - // For primitive types, just convert all values to strings - return values.map((value) => String(value)); - } - /** * Retrieves the array size from the given type string representing a Cairo fixed array. * @param {string} type - The Cairo fixed array type. diff --git a/src/utils/cairoDataTypes/tuple.ts b/src/utils/cairoDataTypes/tuple.ts index ddd83c412..b1bbadca0 100644 --- a/src/utils/cairoDataTypes/tuple.ts +++ b/src/utils/cairoDataTypes/tuple.ts @@ -5,6 +5,8 @@ import { isTypeTuple, isCairo1Type, isTypeNamedTuple } from '../calldata/cairo'; import { type ParsingStrategy } from '../calldata/parser/parsingStrategy'; import { CairoType } from './cairoType.interface'; import { CairoFelt252 } from './felt'; +import { CairoOption } from '../calldata/enum'; +import { CairoTypeOption } from './cairoTypeOption'; /** * Represents a Cairo tuple with compile-time known structure. @@ -23,7 +25,7 @@ import { CairoFelt252 } from './felt'; * * @example * ```typescript - * import { CairoTuple, hdParsingStrategy } from './path/to/module'; + * import { CairoTuple, hdParsingStrategy } from 'starknet'; * * // Simple tuple * const simple = new CairoTuple([1, 2], '(core::integer::u8, core::integer::u32)', hdParsingStrategy); @@ -47,7 +49,7 @@ export class CairoTuple extends CairoType { /** * Array of CairoType instances representing the tuple elements. */ - public readonly content: any[]; + public readonly content: CairoType[]; /** * Cairo tuple type string. @@ -70,9 +72,6 @@ export class CairoTuple extends CairoType { * @param strategy - Parsing strategy for element type handling * @example * ```typescript - * // From user array - * const tuple1 = new CairoTuple([1, 2], '(core::integer::u8, core::integer::u32)', hdParsingStrategy); - * * // From user object with indices * const tuple2 = new CairoTuple({0: 1, 1: 2}, '(core::integer::u8, core::integer::u32)', hdParsingStrategy); * @@ -89,70 +88,60 @@ export class CairoTuple extends CairoType { */ constructor(content: unknown, tupleType: string, strategy: ParsingStrategy) { super(); - - // If content is already a CairoTuple instance, just copy its properties - if (content instanceof CairoTuple) { - this.content = content.content; - this.tupleType = content.tupleType; - return; - } - - // Check if input is an API response iterator + this.tupleType = tupleType; if (content && typeof content === 'object' && 'next' in content) { - // API response path - use parser - const parsedContent = CairoTuple.parser(content as Iterator, tupleType, strategy); + // "content" is an iterator + const parsedContent: CairoType[] = CairoTuple.parser( + content as Iterator, + tupleType, + strategy + ); this.content = parsedContent; - this.tupleType = tupleType; - } else { - // User input path - process directly - CairoTuple.validate(content, tupleType); - const values = CairoTuple.extractValuesArray(content, tupleType); - const elementTypes = CairoTuple.getTupleElementTypes(tupleType); - - // Validate that the number of values matches the tuple structure - if (values.length !== elementTypes.length) { - throw new Error( - `Tuple size mismatch: expected ${elementTypes.length} elements, got ${values.length}` - ); - } - - // Create CairoType instances for each element - this.content = values.map((value, index) => { - const elementType = - typeof elementTypes[index] === 'string' - ? (elementTypes[index] as string) - : (elementTypes[index] as any).type; + return; + } + CairoTuple.validate(content, tupleType); + // TODO: handle Object[] and remove "as string[]" + const tupleContentType = CairoTuple.getTupleElementTypes(tupleType) as string[]; + const resultContent: any[] = CairoTuple.extractValuesArray(content, tupleType).map( + (contentItem: any, index: number) => { + if ( + contentItem && + typeof contentItem === 'object' && + contentItem !== null && + 'toApiRequest' in contentItem + ) { + // "content" is a CairoType + return contentItem as CairoType; + } + if (contentItem instanceof CairoOption) { + // "content" is a CairoOption + return CairoTypeOption.fromCairoOption(contentItem, tupleContentType[index], strategy); + } + // not an iterator, not an CairoType, neither a CairoType -> so is low level data (BigNumberish, array, object) - // First check direct constructors - const constructor = strategy.constructors[elementType]; + const constructor = strategy.constructors[tupleContentType[index]]; if (constructor) { - return constructor(value, elementType); + return constructor(contentItem, tupleContentType[index]); } - - // Check dynamic selectors const dynamicSelectors = Object.entries(strategy.dynamicSelectors); - const matchingSelector = dynamicSelectors.find(([, selectorFn]) => selectorFn(elementType)); - + const matchingSelector = dynamicSelectors.find(([, selectorFn]) => + selectorFn(tupleContentType[index]) + ); if (matchingSelector) { const [selectorName] = matchingSelector; const dynamicConstructor = strategy.constructors[selectorName]; if (dynamicConstructor) { - return dynamicConstructor(value, elementType); + return dynamicConstructor(contentItem, tupleContentType[index]); } } - - // Unknown type - fallback to felt252 constructor - const feltConstructor = strategy.constructors[CairoFelt252.abiSelector]; - if (feltConstructor) { - return feltConstructor(value, elementType); - } - - // If even felt252 constructor is not available, store as string for error handling - return String(value) as unknown as CairoType; - }); - - this.tupleType = tupleType; - } + throw new Error(`"${tupleContentType}" is not a valid Cairo type`); + } + ); + assert( + resultContent.length === tupleContentType.length, + `ABI type ${tupleType}: expected ${tupleContentType.length} items, got ${resultContent.length} items.` + ); + this.content = resultContent; } /** @@ -319,6 +308,10 @@ export class CairoTuple extends CairoType { /** * Extract tuple member types for Cairo 0 format. + * A cairo 0 tuple can be made in 2 formats: + * - (val1, val2) + * - named tuple (x:val1, y:val2) + * See https://github.com/starknet-io/starknet-docs/blob/f97d02377290df38a2192414f210f75f95684373/archive/cairozero/how-cairozero-works/types.rst#types * @private */ private static extractCairo0Tuple(type: string) { @@ -367,6 +360,9 @@ export class CairoTuple extends CairoType { /** * Extract tuple member types for Cairo 1 format. + * A cairo 1 tuple is made with (val1, val2). + * No named tuples in Cairo 1. + * See https://www.starknet.io/cairo-book/ch02-02-data-types.html?highlight=tuple#the-tuple-type * @private */ private static extractCairo1Tuple(type: string): (string | object)[] { @@ -464,7 +460,7 @@ export class CairoTuple extends CairoType { /** * Get tuple element types from the tuple type string. * Uses the internal extractTupleMemberTypes method to parse tuple structure. - * @param tupleType - The tuple type string + * @param {string} tupleType - The tuple type string * @returns Array of element types (strings or objects with name/type for named tuples) * @example * ```typescript @@ -481,8 +477,8 @@ export class CairoTuple extends CairoType { /** * Validate input data for CairoTuple creation. - * @param input - Input data to validate - * @param tupleType - The tuple type (e.g., "(core::integer::u8, core::integer::u32)") + * @param {unknown} input - Input data to validate + * @param {string} tupleType - The tuple type (e.g. "(core::integer::u8, core::integer::u32)") * @throws Error if input is invalid * @example * ```typescript @@ -506,9 +502,9 @@ export class CairoTuple extends CairoType { /** * Check if input data is valid for CairoTuple creation. - * @param input - Input data to check - * @param tupleType - The tuple type (e.g., "(core::integer::u8, core::integer::u32)") - * @returns true if valid, false otherwise + * @param {unknown} input - Input data to check + * @param {string} tupleType - The tuple type (e.g., "(core::integer::u8, core::integer::u32)") + * @returns {boolean} true if valid, false otherwise * @example * ```typescript * const isValid1 = CairoTuple.is([1, 2], "(core::integer::u8, core::integer::u32)"); // true @@ -528,10 +524,10 @@ export class CairoTuple extends CairoType { * Checks if the given string represents a valid Cairo tuple type format. * * A valid tuple type must follow the pattern: `(type1, type2, ...)` where each type - * is a valid Cairo type. Named tuples like `(x:type1, y:type2)` are also supported. + * is a valid Cairo type. Named tuples (from Cairo 0) like `(x:type1, y:type2)` are also supported. * - * @param type - The type string to validate - * @returns `true` if the type is a valid tuple format, `false` otherwise + * @param {string} type - The type string to validate + * @returns {boolean} `true` if the type is a valid tuple format, `false` otherwise * @example * ```typescript * CairoTuple.isAbiType("(core::integer::u8, core::integer::u32)"); // true @@ -552,15 +548,11 @@ export class CairoTuple extends CairoType { * This follows the Cairo ABI standard for tuples which are serialized as * consecutive elements without length information. * - * @returns Array of hex strings ready for API requests (no length prefix) + * @returns {string[]} Array of hex strings ready for API requests (no length prefix) * @example * ```typescript * const tuple = new CairoTuple([1, 2], "(core::integer::u8, core::integer::u32)", strategy); * const result = tuple.toApiRequest(); // ['0x1', '0x2'] - * - * // Nested tuples are flattened - * const nested = new CairoTuple([[1, 2], 3], "((core::integer::u8, core::integer::u8), core::integer::u32)", strategy); - * const flatResult = nested.toApiRequest(); // ['0x1', '0x2', '0x3'] * ``` */ public toApiRequest(): string[] { @@ -570,28 +562,24 @@ export class CairoTuple extends CairoType { } /** - * Decompose the tuple into final parsed values. + * Decompose the tuple into final parsed values, in an object {0:value0, ...}. * * Transforms CairoType instances into their final parsed values using the strategy's * response parsers (e.g., CairoUint8 → BigInt). This method is used primarily for * parsing API responses into user-friendly formats. * - * @param strategy - Parsing strategy for response parsing - * @returns Array of parsed values (BigInt, numbers, nested tuples, etc.) + * @param {ParsingStrategy} strategy - Parsing strategy for response parsing + * @returns {Object} an object of format {0:value0, 1:value2} * @example * ```typescript - * const tuple = new CairoTuple([1, 2], '(core::integer::u8, core::integer::u32)', hdParsingStrategy); - * const parsed = tuple.decompose(hdParsingStrategy); // [1n, 2n] + * const myTuple = new CairoTuple(cairo.tuple(1, 2), '(core::integer::u8, core::integer::u32)', hdParsingStrategy); + * const parsed = myTuple.decompose(hdParsingStrategy); // {"0": 1n, "1": 2n} * ``` */ - public decompose(strategy: ParsingStrategy): any[] { + public decompose(strategy: ParsingStrategy): Object { const elementTypes = CairoTuple.getTupleElementTypes(this.tupleType); - return this.content.map((element, index) => { - // if (element instanceof CairoTuple) { - // // For nested tuples, decompose recursively with strategy - // return element.decompose(strategy); - // } + const result = this.content.map((element, index) => { // For raw string values (unsupported types), throw error if (typeof element === 'string') { const elementType = @@ -600,30 +588,6 @@ export class CairoTuple extends CairoType { : (elementTypes[index] as any).type; throw new Error(`No parser found for element type: ${elementType} in parsing strategy`); } - - // // For primitive types, use the response parser to get final values - // const elementType = - // typeof elementTypes[index] === 'string' - // ? (elementTypes[index] as string) - // : (elementTypes[index] as any).type; - // const responseParser = strategy.response[elementType]; - - // if (responseParser) { - // return responseParser(element); - // } - - // // Check dynamic selectors for response parsing - // const dynamicSelectors = Object.entries(strategy.dynamicSelectors); - // const matchingSelector = dynamicSelectors.find(([, selectorFn]) => selectorFn(elementType)); - - // if (matchingSelector) { - // const [selectorName] = matchingSelector; - // const dynamicResponseParser = strategy.response[selectorName]; - // if (dynamicResponseParser) { - // return dynamicResponseParser(element); - // } - // } - // TODO: "as string" to be removed once extractCairo1Tuple result is only string (no more object as result) let parserName: string = elementTypes[index] as string; if (element instanceof CairoType) { if (Object.hasOwn(element, 'dynamicSelector')) { @@ -635,11 +599,11 @@ export class CairoTuple extends CairoType { if (responseParser) { return responseParser(element); } - // No response parser found - throw error instead of fallback magic throw new Error( `No response parser found for element type: ${elementTypes[index]} in parsing strategy` ); }); + return { ...result }; } } diff --git a/src/utils/calldata/parser/parsingStrategy.ts b/src/utils/calldata/parser/parsingStrategy.ts index 6140148bb..34fb6fe70 100644 --- a/src/utils/calldata/parser/parsingStrategy.ts +++ b/src/utils/calldata/parser/parsingStrategy.ts @@ -24,6 +24,7 @@ import assert from '../../assert'; import { isTypeArray, isTypeOption, isTypeTuple } from '../cairo'; import { CairoTypeOption } from '../../cairoDataTypes/cairoTypeOption'; import type { CairoOptionVariant, CairoResultVariant } from '../enum'; +import { isUndefined } from '../../typed'; /** * Parsing map for constructors and response parsers @@ -170,11 +171,7 @@ export const hdParsingStrategy: ParsingStrategy = { variant?: VariantType ) => { assert(!!type, 'CairoTypeOption constructor requires "type" parameter.'); - assert( - typeof variant !== 'undefined', - 'CairoTypeOption constructor requires "variant" parameter.' - ); - const variantNumber = Number(variant); + const variantNumber = isUndefined(variant) ? undefined : Number(variant); return new CairoTypeOption(input, type, hdParsingStrategy, variantNumber); }, }, From ec63010481f91fe6fef41f9156a0117a17884be5 Mon Sep 17 00:00:00 2001 From: PhilippeR26 Date: Tue, 9 Sep 2025 14:42:16 +0200 Subject: [PATCH 04/17] fix: recursive encoding of CairoType --- src/utils/cairoDataTypes/array.ts | 6 +- src/utils/cairoDataTypes/cairoTypeOption.ts | 66 ++++++-------------- src/utils/cairoDataTypes/fixedArray.ts | 6 +- src/utils/cairoDataTypes/tuple.ts | 56 ++++++++++++++--- src/utils/calldata/parser/parsingStrategy.ts | 7 +++ src/utils/calldata/requestParser.ts | 2 +- 6 files changed, 84 insertions(+), 59 deletions(-) diff --git a/src/utils/cairoDataTypes/array.ts b/src/utils/cairoDataTypes/array.ts index e8b7a48ed..7d1548107 100644 --- a/src/utils/cairoDataTypes/array.ts +++ b/src/utils/cairoDataTypes/array.ts @@ -100,6 +100,10 @@ export class CairoArray extends CairoType { this.content = parsedContent; return; } + if (content instanceof CairoArray) { + this.content = content.content; + return; + } CairoArray.validate(content, arrayType); const arrayContentType = CairoArray.getArrayElementType(arrayType); const resultContent: any[] = CairoArray.extractValuesArray(content).map((contentItem: any) => { @@ -114,7 +118,7 @@ export class CairoArray extends CairoType { } if (contentItem instanceof CairoOption) { // "content" is a CairoOption - return CairoTypeOption.fromCairoOption(contentItem, arrayContentType, strategy); + return new CairoTypeOption(contentItem, arrayContentType, strategy); } // not an iterator, not an CairoType, neither a CairoType -> so is low level data (BigNumberish, array, object) diff --git a/src/utils/cairoDataTypes/cairoTypeOption.ts b/src/utils/cairoDataTypes/cairoTypeOption.ts index 97af53650..f43ad15ed 100644 --- a/src/utils/cairoDataTypes/cairoTypeOption.ts +++ b/src/utils/cairoDataTypes/cairoTypeOption.ts @@ -33,9 +33,6 @@ export class CairoTypeOption extends CairoType { /* True if the current variant is 'Some', false if 'None'. */ public readonly isVariantSome: boolean; - /* Parsing strategy used for type handling and conversion. */ - public strategy: ParsingStrategy; - /** * CairoTypeOption provides a complete implementation for handling Cairo's Option, * which have the form "core::option::Option::" (e.g., "core::option::Option::"). @@ -47,6 +44,7 @@ export class CairoTypeOption extends CairoType { * @param {string} optionCairoType - Cairo option type string (e.g., "core::option::Option::"). * @param {ParsingStrategy} strategy - Parsing strategy for element type handling (e.g. hdParsingStrategy). * @param {CairoOptionVariant | number} [variant] - (optional) variant of the option: CairoOptionVariant.Some (0), or CairoOptionVariant.None (1). If "content" is an iterator, this parameter must be omitted. If "content" is not an iterator, this parameter is mandatory. + * @param {boolean} [subType=false] - optional. default=false. Use "true" if called in nested CairoOption instances. * @example * ```typescript * import { CairoTypeOption, hdParsingStrategy, CairoOptionVariant } from 'starknet'; @@ -54,11 +52,8 @@ export class CairoTypeOption extends CairoType { * const myOption1 = new CairoTypeOption(123, "core::option::Option::", hdParsingStrategy, CairoOptionVariant.Some); * console.log(myOption1.toApiRequest()); // [ '0x01', [ '0x7b' ] ] * console.log(myOption1.decompose(hdParsingStrategy)); // CairoOption instance with content 123n and Some variant. - * console.log(myOption1.unwrap()); // 123n - * console.log(myOption1.isSome()); // true * // Simple Option with None variant * const myOption2 = new CairoTypeOption(undefined, "core::option::Option::", hdParsingStrategy, CairoOptionVariant.None); - * console.log(myOption2.isNone()); // true * * // Nested Cairo types * const myTuple0 = new CairoTuple([234, [1, 2, 3]], "(core::integer::u8, core::array::Array::)", hdParsingStrategy); @@ -67,19 +62,18 @@ export class CairoTypeOption extends CairoType { * * // From API response * const apiData = ['0x0', '0x20'][Symbol.iterator](); - * const fromApiOption = new CairoTypeOption(apiData, "core::option::Option::", hdParsingStrategy); - * console.log(fromApiOption.unwrap()); // 32n + * const fromApiOption = new CairoTypeOption(apiData, "core::option::Option::", hdParsingStrategy); // CairoOption instance with content 32n and Some variant. * ``` */ constructor( content: unknown, optionCairoType: string, strategy: ParsingStrategy, - variant?: CairoOptionVariant | number + variant?: CairoOptionVariant | number, + subType: boolean = false ) { super(); this.optionCairoType = optionCairoType; - this.strategy = strategy; if (variant === 0 && isUndefined(content)) { throw new Error('"content" parameter has to be defined when Some variant is selected'); } @@ -114,6 +108,11 @@ export class CairoTypeOption extends CairoType { this.isVariantSome = variantFromIterator === 0; return; } + if (content instanceof CairoTypeOption) { + this.content = content.content; + this.isVariantSome = content.isVariantSome; + return; + } CairoTypeOption.validate(content, optionCairoType, variant); if (content && typeof content === 'object' && content !== null && 'toApiRequest' in content) { // "content" is a CairoType @@ -123,12 +122,18 @@ export class CairoTypeOption extends CairoType { } if (content instanceof CairoOption) { // "content" is a CairoOption - const elementType = CairoTypeOption.getVariantSomeType(optionCairoType); - this.content = CairoTypeOption.fromCairoOption(content, elementType, strategy); - this.isVariantSome = variant === CairoOptionVariant.Some; + const option = new CairoTypeOption( + content.unwrap(), + subType ? CairoTypeOption.getVariantSomeType(optionCairoType) : optionCairoType, + strategy, + content.isSome() ? CairoOptionVariant.Some : CairoOptionVariant.None, + true // recursive sub-type + ); + this.content = subType ? option : option.content; + this.isVariantSome = option.isVariantSome; return; } - // not an iterator, not an CairoType, neither a CairoType -> so is low level data (BigNumberish, array, object) + // not an iterator, not an CairoType, neither a CairoOption -> so is low level data (BigNumberish, array, object) assert( !isUndefined(variant), '"variant" parameter is mandatory when creating a new Cairo option from a "CairoType" or raw data.' @@ -286,35 +291,6 @@ export class CairoTypeOption extends CairoType { return isTypeOption(type); } - /** - * create a CairoTypeOption instance from a CairoOption instance. - * @param {CairoOption} option - CairoOption instance to convert. - * @param {string} type - The Cairo option type string (e.g., "core::option::Option::"). - * @param {ParsingStrategy} strategy - Parsing strategy for element type handling (e.g. hdParsingStrategy). - * @returns {CairoTypeOption} new CairoTypeOption instance. - * @example - * ```typescript - * const myCairoTypeOption = CairoTypeOption.fromCairoOption( - * myCairoOption, - * "core::option::Option::", - * hdParsingStrategy - * ); - * ``` - */ - static fromCairoOption( - option: CairoOption, - type: string, - strategy: ParsingStrategy - ): CairoTypeOption { - const content = option.unwrap(); - return new CairoTypeOption( - content, - type, - strategy, - option.isSome() ? CairoOptionVariant.Some : CairoOptionVariant.None - ); - } - /** * Serialize the Cairo option into hex strings for Starknet API requests. * @@ -337,9 +313,7 @@ export class CairoTypeOption extends CairoType { return addCompiledFlag(result.flat()); } - private decomposeSome(strategyDecode?: ParsingStrategy): any { - const strategy = strategyDecode ?? this.strategy; - + private decomposeSome(strategy: ParsingStrategy): any { const { content } = this; const elementType = CairoTypeOption.getVariantSomeType(this.optionCairoType); // For raw string values (unsupported types), throw error diff --git a/src/utils/cairoDataTypes/fixedArray.ts b/src/utils/cairoDataTypes/fixedArray.ts index cda4d20fe..cc4f749ca 100644 --- a/src/utils/cairoDataTypes/fixedArray.ts +++ b/src/utils/cairoDataTypes/fixedArray.ts @@ -111,6 +111,10 @@ export class CairoFixedArray extends CairoType { this.content = parsedContent; return; } + if (content instanceof CairoFixedArray) { + this.content = content.content; + return; + } CairoFixedArray.validate(content, arrayType); const arrayContentType = CairoFixedArray.getFixedArrayType(arrayType); const resultContent: any[] = CairoFixedArray.extractValuesArray(content).map( @@ -126,7 +130,7 @@ export class CairoFixedArray extends CairoType { } if (contentItem instanceof CairoOption) { // "content" is a CairoOption - return CairoTypeOption.fromCairoOption(contentItem, arrayContentType, strategy); + return new CairoTypeOption(contentItem, arrayContentType, strategy); } // not an iterator, not an CairoType, neither a CairoType -> so is low level data (BigNumberish, array, object) diff --git a/src/utils/cairoDataTypes/tuple.ts b/src/utils/cairoDataTypes/tuple.ts index b1bbadca0..101296253 100644 --- a/src/utils/cairoDataTypes/tuple.ts +++ b/src/utils/cairoDataTypes/tuple.ts @@ -99,9 +99,15 @@ export class CairoTuple extends CairoType { this.content = parsedContent; return; } + if (content instanceof CairoTuple) { + this.content = content.content; + return; + } CairoTuple.validate(content, tupleType); - // TODO: handle Object[] and remove "as string[]" - const tupleContentType = CairoTuple.getTupleElementTypes(tupleType) as string[]; + const tupleContentTypeResponse = CairoTuple.getTupleElementTypes(tupleType); + const tupleContentType: string[] = tupleContentTypeResponse.map( + (el: string | { name: string; type: string }) => (typeof el === 'string' ? el : el.type) + ); const resultContent: any[] = CairoTuple.extractValuesArray(content, tupleType).map( (contentItem: any, index: number) => { if ( @@ -115,7 +121,7 @@ export class CairoTuple extends CairoType { } if (contentItem instanceof CairoOption) { // "content" is a CairoOption - return CairoTypeOption.fromCairoOption(contentItem, tupleContentType[index], strategy); + return new CairoTypeOption(contentItem, tupleContentType[index], strategy); } // not an iterator, not an CairoType, neither a CairoType -> so is low level data (BigNumberish, array, object) @@ -365,10 +371,10 @@ export class CairoTuple extends CairoType { * See https://www.starknet.io/cairo-book/ch02-02-data-types.html?highlight=tuple#the-tuple-type * @private */ - private static extractCairo1Tuple(type: string): (string | object)[] { + private static extractCairo1Tuple(type: string): (string | { name: string; type: string })[] { // Support both named and un-named tuples const input = type.slice(1, -1); // remove first lvl () - const result: (string | object)[] = []; + const result: (string | { name: string; type: string })[] = []; // Handle empty tuple if (input.trim() === '') { @@ -451,12 +457,23 @@ export class CairoTuple extends CairoType { * ``` * @private */ - private static extractTupleMemberTypes(type: string): (string | object)[] { + private static extractTupleMemberTypes( + type: string + ): (string | { name: string; type: string })[] { return isCairo1Type(type) ? CairoTuple.extractCairo1Tuple(type) : CairoTuple.extractCairo0Tuple(type); } + public static extractTupleMembersNames(type: string): string[] { + const elementTypes = CairoTuple.getTupleElementTypes(type); + if (typeof elementTypes[0] === 'string') + return elementTypes.map((_, index) => index.toString()); + if ('name' in elementTypes[0] && 'type' in elementTypes[0]) + return elementTypes.map((el) => (el as { name: string; type: string }).name); + return []; + } + /** * Get tuple element types from the tuple type string. * Uses the internal extractTupleMemberTypes method to parse tuple structure. @@ -471,7 +488,9 @@ export class CairoTuple extends CairoType { * // result2 = [{name: "x", type: "core::integer::u8"}, {name: "y", type: "core::integer::u32"}] * ``` */ - static getTupleElementTypes = (tupleType: string): (string | object)[] => { + static getTupleElementTypes = ( + tupleType: string + ): (string | { name: string; type: string })[] => { return CairoTuple.extractTupleMemberTypes(tupleType); }; @@ -574,11 +593,15 @@ export class CairoTuple extends CairoType { * ```typescript * const myTuple = new CairoTuple(cairo.tuple(1, 2), '(core::integer::u8, core::integer::u32)', hdParsingStrategy); * const parsed = myTuple.decompose(hdParsingStrategy); // {"0": 1n, "1": 2n} + * const myTuple1 = new CairoTuple([100, 200], "(x:felt, y:felt)", hdParsingStrategy); // Cairo 0 named tuple + * const parsed1 = myTuple.decompose(hdParsingStrategy); // { x: 100n, y: 200n } * ``` */ public decompose(strategy: ParsingStrategy): Object { - const elementTypes = CairoTuple.getTupleElementTypes(this.tupleType); - + const tupleContentTypeResponse = CairoTuple.getTupleElementTypes(this.tupleType); + const elementTypes: string[] = tupleContentTypeResponse.map( + (el: string | { name: string; type: string }) => (typeof el === 'string' ? el : el.type) + ); const result = this.content.map((element, index) => { // For raw string values (unsupported types), throw error if (typeof element === 'string') { @@ -604,6 +627,19 @@ export class CairoTuple extends CairoType { `No response parser found for element type: ${elementTypes[index]} in parsing strategy` ); }); - return { ...result }; + if (typeof tupleContentTypeResponse[0] === 'string') { + return { ...result }; + } + const namedTuple: Record = {}; + tupleContentTypeResponse.forEach((el, index) => { + const a = ( + tupleContentTypeResponse[index] as { + name: string; + type: string; + } + ).name; + namedTuple[a] = result[index]; + }); + return namedTuple; } } diff --git a/src/utils/calldata/parser/parsingStrategy.ts b/src/utils/calldata/parser/parsingStrategy.ts index 34fb6fe70..c6af6ce0d 100644 --- a/src/utils/calldata/parser/parsingStrategy.ts +++ b/src/utils/calldata/parser/parsingStrategy.ts @@ -66,6 +66,12 @@ export const hdParsingStrategy: ParsingStrategy = { } return new CairoFelt252(input); }, + felt: (input: Iterator | unknown) => { + if (input && typeof input === 'object' && 'next' in input) { + return CairoFelt252.factoryFromApiResponse(input as Iterator); + } + return new CairoFelt252(input); + }, [CairoUint256.abiSelector]: (input: Iterator | unknown) => { if (input && typeof input === 'object' && 'next' in input) { return CairoUint256.factoryFromApiResponse(input as Iterator); @@ -195,6 +201,7 @@ export const hdParsingStrategy: ParsingStrategy = { [CairoByteArray.abiSelector]: (instance: CairoType) => (instance as CairoByteArray).decodeUtf8(), [CairoFelt252.abiSelector]: (instance: CairoType) => (instance as CairoFelt252).toBigInt(), + felt: (instance: CairoType) => (instance as CairoFelt252).toBigInt(), [CairoUint256.abiSelector]: (instance: CairoType) => (instance as CairoUint256).toBigInt(), [CairoUint512.abiSelector]: (instance: CairoType) => (instance as CairoUint512).toBigInt(), [CairoUint8.abiSelector]: (instance: CairoType) => (instance as CairoUint8).toBigInt(), diff --git a/src/utils/calldata/requestParser.ts b/src/utils/calldata/requestParser.ts index d5364ae08..554abb961 100644 --- a/src/utils/calldata/requestParser.ts +++ b/src/utils/calldata/requestParser.ts @@ -205,7 +205,7 @@ function parseCalldataValue({ let myOption: CairoTypeOption; if (element instanceof CairoOption) { myOption = new CairoTypeOption( - element.unwrap(), + element, type, parser.parsingStrategy, element.isSome() ? CairoOptionVariant.Some : CairoOptionVariant.None From 7a4146f022cc9b0cb2cd87fa3621a8dc705f3705 Mon Sep 17 00:00:00 2001 From: PhilippeR26 Date: Wed, 10 Sep 2025 12:03:34 +0200 Subject: [PATCH 05/17] test: add CairoTypeOption tests and correct several problems in other CairoType tests --- .../CairoArray.integration.test.ts | 14 +- .../utils/cairoDataTypes/CairoArray.test.ts | 61 ++- .../cairoDataTypes/CairoFixedArray.test.ts | 3 +- .../CairoTuple.integration.test.ts | 22 +- .../utils/cairoDataTypes/CairoTuple.test.ts | 93 ++--- .../utils/cairoDataTypes/CairoUint32.test.ts | 6 +- .../utils/calldata/enum/CairoOption.test.ts | 18 +- .../calldata/enum/CairoTypeOption.test.ts | 348 +++++++++++++++--- .../utils/calldata/requestParser.test.ts | 42 +-- __tests__/utils/calldata/validate.test.ts | 2 +- src/utils/cairoDataTypes/array.ts | 1 + src/utils/cairoDataTypes/cairoTypeOption.ts | 5 +- src/utils/cairoDataTypes/fixedArray.ts | 1 + src/utils/cairoDataTypes/tuple.ts | 1 + 14 files changed, 432 insertions(+), 185 deletions(-) diff --git a/__tests__/utils/cairoDataTypes/CairoArray.integration.test.ts b/__tests__/utils/cairoDataTypes/CairoArray.integration.test.ts index 535705cfb..c915e7e32 100644 --- a/__tests__/utils/cairoDataTypes/CairoArray.integration.test.ts +++ b/__tests__/utils/cairoDataTypes/CairoArray.integration.test.ts @@ -66,7 +66,7 @@ describe('CairoArray Integration Tests', () => { const requestParser = parser.getRequestParser('core::array::Array::'); const result = requestParser([1, 2, 3], 'core::array::Array::'); - expect(result).toEqual(['3', '0x1', '0x2', '0x3']); + expect(result).toEqual(['0x3', '0x1', '0x2', '0x3']); }); test('should work with AbiParser2 response parsing', () => { @@ -90,7 +90,7 @@ describe('CairoArray Integration Tests', () => { [[1, 2], [3]], 'core::array::Array::>' ); - expect(result).toEqual(['2', '2', '0x1', '0x2', '1', '0x3']); + expect(result).toEqual(['0x2', '0x2', '0x1', '0x2', '0x1', '0x3']); }); test('should handle empty arrays in AbiParser2', () => { @@ -98,7 +98,7 @@ describe('CairoArray Integration Tests', () => { const requestParser = parser.getRequestParser('core::array::Array::'); const result = requestParser([], 'core::array::Array::'); - expect(result).toEqual(['0']); + expect(result).toEqual(['0x0']); }); }); @@ -194,7 +194,7 @@ describe('CairoArray Integration Tests', () => { ); const serialized = array.toApiRequest(); - expect(serialized[0]).toBe('50'); // Length prefix + expect(serialized[0]).toBe('0x32'); // Length prefix expect(serialized.length).toBe(51); // 50 elements + 1 length prefix // Test just the serialization part, not roundtrip since large data has iterator issues @@ -223,7 +223,7 @@ describe('CairoArray Integration Tests', () => { }); test('should handle mixed input types with parsing strategy', () => { - const mixedData = [1, '2', 3n, 0x4]; + const mixedData = [1, '2', 3n, '0x4']; const array = new CairoArray( mixedData, 'core::array::Array::', @@ -231,7 +231,7 @@ describe('CairoArray Integration Tests', () => { ); const serialized = array.toApiRequest(); - expect(serialized[0]).toBe('4'); // Length prefix + expect(serialized[0]).toBe('0x4'); // Length prefix expect(serialized.length).toBe(5); // 4 elements + 1 length prefix }); @@ -254,7 +254,7 @@ describe('CairoArray Integration Tests', () => { // Both should serialize the same way expect(arraySerialized).toEqual(spanSerialized); - expect(arraySerialized).toEqual(['3', '0x1', '0x2', '0x3']); + expect(arraySerialized).toEqual(['0x3', '0x1', '0x2', '0x3']); }); }); diff --git a/__tests__/utils/cairoDataTypes/CairoArray.test.ts b/__tests__/utils/cairoDataTypes/CairoArray.test.ts index 0dc85e4a9..3567c885b 100644 --- a/__tests__/utils/cairoDataTypes/CairoArray.test.ts +++ b/__tests__/utils/cairoDataTypes/CairoArray.test.ts @@ -220,8 +220,8 @@ describe('CairoArray class Unit test', () => { hdParsingStrategy ); const result = array.toApiRequest(); - // Should have length prefix: ['3', '0x1', '0x2', '0x3'] - expect(result).toEqual(['3', '0x1', '0x2', '0x3']); + // Should have length prefix: ['0x3', '0x1', '0x2', '0x3'] + expect(result).toEqual(['0x3', '0x1', '0x2', '0x3']); }); test('should create and serialize from object input', () => { @@ -231,8 +231,8 @@ describe('CairoArray class Unit test', () => { hdParsingStrategy ); const result = array.toApiRequest(); - // Should have length prefix: ['3', '0x1', '0x2', '0x3'] - expect(result).toEqual(['3', '0x1', '0x2', '0x3']); + // Should have length prefix: ['0x3', '0x1', '0x2', '0x3'] + expect(result).toEqual(['0x3', '0x1', '0x2', '0x3']); }); test('should work with parsing strategy', () => { @@ -251,8 +251,8 @@ describe('CairoArray class Unit test', () => { const result2 = array2.toApiRequest(); // Unified parsing strategy approach for API serialization with length prefix - expect(result1).toEqual(['2', '0x1', '0x2']); - expect(result2).toEqual(['2', '0x1', '0x2']); + expect(result1).toEqual(['0x2', '0x1', '0x2']); + expect(result2).toEqual(['0x2', '0x1', '0x2']); }); test('should throw for invalid inputs', () => { @@ -277,7 +277,7 @@ describe('CairoArray class Unit test', () => { ); const result = array.toApiRequest(); // Outer length=2, first inner [length=2, 1, 2], second inner [length=2, 3, 4] - expect(result).toEqual(['2', '2', '0x1', '0x2', '2', '0x3', '0x4']); + expect(result).toEqual(['0x2', '0x2', '0x1', '0x2', '0x2', '0x3', '0x4']); }); test('should handle edge cases', () => { @@ -288,8 +288,8 @@ describe('CairoArray class Unit test', () => { hdParsingStrategy ); const emptyResult = emptyArray.toApiRequest(); - // Just the length prefix: ['0'] - expect(emptyResult).toEqual(['0']); + // Just the length prefix: ['0x0'] + expect(emptyResult).toEqual(['0x0']); // Single element const singleArray = new CairoArray( @@ -298,7 +298,7 @@ describe('CairoArray class Unit test', () => { hdParsingStrategy ); const singleResult = singleArray.toApiRequest(); - expect(singleResult).toEqual(['1', '0x2a']); + expect(singleResult).toEqual(['0x1', '0x2a']); }); }); @@ -311,7 +311,7 @@ describe('CairoArray class Unit test', () => { ); const result = array.toApiRequest(); // Length prefix + elements - expect(result).toEqual(['3', '0x1', '0x2', '0x3']); + expect(result).toEqual(['0x3', '0x1', '0x2', '0x3']); }); test('should work with hdParsingStrategy', () => { @@ -329,8 +329,8 @@ describe('CairoArray class Unit test', () => { const result1 = array1.toApiRequest(); const result2 = array2.toApiRequest(); - expect(result1).toEqual(['2', '0x64', '0xc8']); - expect(result2).toEqual(['2', '0x64', '0xc8']); + expect(result1).toEqual(['0x2', '0x64', '0xc8']); + expect(result2).toEqual(['0x2', '0x64', '0xc8']); }); test('should handle nested arrays with proper length prefixes', () => { @@ -344,17 +344,16 @@ describe('CairoArray class Unit test', () => { ); const result = nestedArray.toApiRequest(); // Outer array: length=2, then two inner arrays each with their own length prefixes - expect(result).toEqual(['2', '2', '0x1', '0x2', '2', '0x3', '0x4']); + expect(result).toEqual(['0x2', '0x2', '0x1', '0x2', '0x2', '0x3', '0x4']); }); test('should throw for unsupported element types', () => { - const array = new CairoArray( - [1, 2], - 'core::array::Array::', - hdParsingStrategy - ); expect(() => { - array.toApiRequest(); + new CairoArray( + [1, 2], + 'core::array::Array::', + hdParsingStrategy + ).toApiRequest(); }).toThrow(); }); }); @@ -374,7 +373,7 @@ describe('CairoArray class Unit test', () => { ); expect(emptyArray.content).toEqual([]); expect(CairoArray.getArrayElementType(emptyArray.arrayType)).toBe('core::integer::u8'); - expect(emptyArray.toApiRequest()).toEqual(['0']); // Just length prefix + expect(emptyArray.toApiRequest()).toEqual(['0x0']); // Just length prefix }); test('should handle large arrays', () => { @@ -387,7 +386,7 @@ describe('CairoArray class Unit test', () => { expect(largeArray.content.length).toBe(100); expect(CairoArray.getArrayElementType(largeArray.arrayType)).toBe('core::integer::u8'); const result = largeArray.toApiRequest(); - expect(result[0]).toBe('100'); // Length prefix should be '100' + expect(result[0]).toBe('0x64'); // Length prefix expect(result.length).toBe(101); // 100 elements + 1 length prefix }); @@ -412,26 +411,26 @@ describe('CairoArray class Unit test', () => { // Expected: outer_len=2, first_mid_len=2, first_inner_len=2, 1, 2, second_inner_len=2, 3, 4, // second_mid_len=2, third_inner_len=2, 5, 6, fourth_inner_len=2, 7, 8 expect(result).toEqual([ - '2', - '2', - '2', + '0x2', + '0x2', + '0x2', '0x1', '0x2', - '2', + '0x2', '0x3', '0x4', - '2', - '2', + '0x2', + '0x2', '0x5', '0x6', - '2', + '0x2', '0x7', '0x8', ]); }); test('should handle mixed data types in content', () => { - const mixedContent = [1, '2', 3n, 4]; + const mixedContent = [1, '2', 3n, '0x04']; const mixedArray = new CairoArray( mixedContent, 'core::array::Array::', @@ -439,7 +438,7 @@ describe('CairoArray class Unit test', () => { ); const result = mixedArray.toApiRequest(); expect(result.length).toBe(5); // 1 length prefix + 4 elements - expect(result[0]).toBe('4'); // Length prefix + expect(result[0]).toBe('0x4'); // Length prefix }); test('should validate type format edge cases', () => { diff --git a/__tests__/utils/cairoDataTypes/CairoFixedArray.test.ts b/__tests__/utils/cairoDataTypes/CairoFixedArray.test.ts index 8d99f057a..88ac9abee 100644 --- a/__tests__/utils/cairoDataTypes/CairoFixedArray.test.ts +++ b/__tests__/utils/cairoDataTypes/CairoFixedArray.test.ts @@ -355,9 +355,8 @@ describe('CairoFixedArray class Unit test', () => { }); test('should throw for unsupported element types', () => { - const fixedArray = new CairoFixedArray([1, 2], '[unsupported::type; 2]', hdParsingStrategy); expect(() => { - fixedArray.toApiRequest(); + new CairoFixedArray([1, 2], '[unsupported::type; 2]', hdParsingStrategy).toApiRequest(); }).toThrow(); }); }); diff --git a/__tests__/utils/cairoDataTypes/CairoTuple.integration.test.ts b/__tests__/utils/cairoDataTypes/CairoTuple.integration.test.ts index cf24e411b..359529824 100644 --- a/__tests__/utils/cairoDataTypes/CairoTuple.integration.test.ts +++ b/__tests__/utils/cairoDataTypes/CairoTuple.integration.test.ts @@ -23,7 +23,7 @@ describe('CairoTuple integration tests', () => { // Decompose to final values const finalValues = responseTuple.decompose(hdParsingStrategy); - expect(finalValues).toEqual([42n, 100n]); + expect(finalValues).toEqual({ '0': 42n, '1': 100n }); }); test('named tuple: user input → API request → response parsing', () => { @@ -47,7 +47,7 @@ describe('CairoTuple integration tests', () => { // Decompose to final values const finalValues = responseTuple.decompose(hdParsingStrategy); - expect(finalValues).toEqual([10n, 20n]); + expect(finalValues).toEqual({ x: 10n, y: 20n }); }); test('nested tuple: user input → API request → response parsing', () => { @@ -71,7 +71,7 @@ describe('CairoTuple integration tests', () => { // Decompose to final values (nested structure preserved) const finalValues = responseTuple.decompose(hdParsingStrategy); - expect(finalValues).toEqual([[1n, 2n], 3n]); + expect(finalValues).toEqual({ '0': { '0': 1n, '1': 2n }, '1': 3n }); }); test('empty tuple: user input → API request → response parsing', () => { @@ -95,7 +95,7 @@ describe('CairoTuple integration tests', () => { // Decompose to final values (empty array) const finalValues = responseTuple.decompose(hdParsingStrategy); - expect(finalValues).toEqual([]); + expect(finalValues).toEqual({}); }); }); @@ -166,7 +166,7 @@ describe('CairoTuple integration tests', () => { const parsedTuple = new CairoTuple(responseIterator, tupleType, hdParsingStrategy); const finalValues = parsedTuple.decompose(hdParsingStrategy); - expect(finalValues).toEqual([10n, 20n]); + expect(finalValues).toEqual({ '0': 10n, '1': 20n }); }); }); @@ -200,9 +200,7 @@ describe('CairoTuple integration tests', () => { // Verify values can be decomposed const finalValues = responseTuple.decompose(hdParsingStrategy); - expect(finalValues).toHaveLength(2); - expect(finalValues[0]).toBe(100n); // felt252 - expect(finalValues[1]).toBe(200n); // u8 + expect(finalValues).toEqual({ '0': 100n, '1': 200n }); }); test('deeply nested tuples with multiple levels', () => { @@ -222,7 +220,7 @@ describe('CairoTuple integration tests', () => { const responseTuple = new CairoTuple(responseIterator, deepType, hdParsingStrategy); const finalValues = responseTuple.decompose(hdParsingStrategy); - expect(finalValues).toEqual([[[1n, 2n], 3n], 4n]); + expect(finalValues).toEqual({ '0': { '0': { '0': 1n, '1': 2n }, '1': 3n }, '1': 4n }); }); test('tuple size validation across different construction paths', () => { @@ -242,10 +240,10 @@ describe('CairoTuple integration tests', () => { // Should fail - incorrect size expect(() => new CairoTuple([1], tupleType, hdParsingStrategy)).toThrow( - 'Tuple size mismatch' + 'ABI type (core::integer::u8, core::integer::u32): expected 2 items, got 1 items.' ); expect(() => new CairoTuple([1, 2, 3], tupleType, hdParsingStrategy)).toThrow( - 'Tuple size mismatch' + `Cannot read properties of undefined (reading 'startsWith')` ); }); }); @@ -279,7 +277,7 @@ describe('CairoTuple integration tests', () => { const responseTuple = new CairoTuple(responseIterator, singleType, hdParsingStrategy); const finalValues = responseTuple.decompose(hdParsingStrategy); - expect(finalValues).toEqual([42n]); + expect(finalValues).toEqual({ '0': 42n }); }); }); }); diff --git a/__tests__/utils/cairoDataTypes/CairoTuple.test.ts b/__tests__/utils/cairoDataTypes/CairoTuple.test.ts index 9a839f438..30b5a50a8 100644 --- a/__tests__/utils/cairoDataTypes/CairoTuple.test.ts +++ b/__tests__/utils/cairoDataTypes/CairoTuple.test.ts @@ -24,7 +24,7 @@ describe('CairoTuple class Unit test', () => { 'core::integer::u32', ]); expect(CairoTuple.isAbiType('(core::integer::u8, core::integer::u32)')).toBe(true); - expect(CairoTuple.isAbiType('(x:core::integer::u8, y:core::integer::u32)')).toBe(true); + expect(CairoTuple.isAbiType('(x:felt, y:felt)')).toBe(true); expect(CairoTuple.isAbiType('[core::integer::u8; 2]')).toBe(false); expect(CairoTuple.isAbiType('core::integer::u8')).toBe(false); }); @@ -49,7 +49,7 @@ describe('CairoTuple class Unit test', () => { '(core::integer::u8, core::integer::u8)', hdParsingStrategy ); - expect(result.decompose(hdParsingStrategy)).toEqual([1n, 2n]); + expect(result.decompose(hdParsingStrategy)).toEqual({ '0': 1n, '1': 2n }); // Test with different types const response2 = ['0x10', '0x20']; // elements=[16, 32] @@ -59,7 +59,7 @@ describe('CairoTuple class Unit test', () => { '(core::integer::u8, core::integer::u32)', hdParsingStrategy ); - expect(result2.decompose(hdParsingStrategy)).toEqual([16n, 32n]); + expect(result2.decompose(hdParsingStrategy)).toEqual({ '0': 16n, '1': 32n }); }); test('constructor with nested tuples API response', () => { @@ -72,7 +72,10 @@ describe('CairoTuple class Unit test', () => { '((core::integer::u8, core::integer::u8), core::integer::u32)', hdParsingStrategy ); - expect(nestedResult.decompose(hdParsingStrategy)).toEqual([[1n, 2n], 3n]); + expect(nestedResult.decompose(hdParsingStrategy)).toEqual({ + '0': { '0': 1n, '1': 2n }, + '1': 3n, + }); }); test('constructor error handling with unsupported types', () => { @@ -80,61 +83,42 @@ describe('CairoTuple class Unit test', () => { const iterator = response[Symbol.iterator](); // Test with unsupported element type - error should occur during decompose() - const tuple = new CairoTuple( - iterator, - '(unsupported::type, core::integer::u8)', - hdParsingStrategy - ); expect(() => { - tuple.decompose(hdParsingStrategy); - }).toThrow('No parser found for element type: unsupported::type in parsing strategy'); + new CairoTuple( + iterator, + '(unsupported::type, core::integer::u8)', + hdParsingStrategy + ).decompose(hdParsingStrategy); + }).toThrow('No response parser found for element type: unsupported::type in parsing strategy'); }); describe('named tuple support', () => { test('should handle named tuple input and type', () => { - const namedTuple = new CairoTuple( - { x: 1, y: 2 }, - '(x:core::integer::u8, y:core::integer::u32)', - hdParsingStrategy - ); + const namedTuple = new CairoTuple({ x: 1, y: 2 }, '(x:felt, y:felt)', hdParsingStrategy); expect(namedTuple.content.length).toBe(2); - expect(namedTuple.decompose(hdParsingStrategy)).toEqual([1n, 2n]); + expect(namedTuple.decompose(hdParsingStrategy)).toEqual({ x: 1n, y: 2n }); }); test('should get named tuple element types', () => { - const elementTypes = CairoTuple.getTupleElementTypes( - '(x:core::integer::u8, y:core::integer::u32)' - ); + const elementTypes = CairoTuple.getTupleElementTypes('(x:felt, y:felt)'); expect(elementTypes).toEqual([ - { name: 'x', type: 'core::integer::u8' }, - { name: 'y', type: 'core::integer::u32' }, + { name: 'x', type: 'felt' }, + { name: 'y', type: 'felt' }, ]); }); test('should handle mixed named and positional access', () => { // Test that positional input works even with named tuple type - const tuple1 = new CairoTuple( - [1, 2], - '(x:core::integer::u8, y:core::integer::u32)', - hdParsingStrategy - ); - expect(tuple1.decompose(hdParsingStrategy)).toEqual([1n, 2n]); + const tuple1 = new CairoTuple([1, 2], '(x:felt, y:felt)', hdParsingStrategy); + expect(tuple1.decompose(hdParsingStrategy)).toEqual({ x: 1n, y: 2n }); // Test that named input works with named tuple type - const tuple2 = new CairoTuple( - { x: 1, y: 2 }, - '(x:core::integer::u8, y:core::integer::u32)', - hdParsingStrategy - ); - expect(tuple2.decompose(hdParsingStrategy)).toEqual([1n, 2n]); + const tuple2 = new CairoTuple({ x: 1, y: 2 }, '(x:felt, y:felt)', hdParsingStrategy); + expect(tuple2.decompose(hdParsingStrategy)).toEqual({ x: 1n, y: 2n }); // Test object with indices on named tuple type - const tuple3 = new CairoTuple( - { 0: 1, 1: 2 }, - '(x:core::integer::u8, y:core::integer::u32)', - hdParsingStrategy - ); - expect(tuple3.decompose(hdParsingStrategy)).toEqual([1n, 2n]); + const tuple3 = new CairoTuple({ 0: 1, 1: 2 }, '(x:felt, y:felt)', hdParsingStrategy); + expect(tuple3.decompose(hdParsingStrategy)).toEqual({ x: 1n, y: 2n }); }); }); @@ -149,7 +133,7 @@ describe('CairoTuple class Unit test', () => { }).not.toThrow(); expect(() => { - CairoTuple.validate({ x: 1, y: 2 }, '(x:core::integer::u8, y:core::integer::u32)'); + CairoTuple.validate({ x: 1, y: 2 }, '(x:felt, y:felt)'); }).not.toThrow(); }); @@ -190,9 +174,7 @@ describe('CairoTuple class Unit test', () => { test('should return true for valid inputs', () => { expect(CairoTuple.is([1, 2], '(core::integer::u8, core::integer::u32)')).toBe(true); expect(CairoTuple.is({ 0: 1, 1: 2 }, '(core::integer::u8, core::integer::u32)')).toBe(true); - expect(CairoTuple.is({ x: 1, y: 2 }, '(x:core::integer::u8, y:core::integer::u32)')).toBe( - true - ); + expect(CairoTuple.is({ x: 1, y: 2 }, '(x:felt, y:felt)')).toBe(true); }); test('should return false for invalid inputs', () => { @@ -231,7 +213,7 @@ describe('CairoTuple class Unit test', () => { test('should create and serialize from named object input', () => { const tuple = new CairoTuple( { x: 1, y: 2, z: 3 }, - '(x:core::integer::u8, y:core::integer::u8, z:core::integer::u8)', + '(x:felt, y:felt, z:felt)', hdParsingStrategy ); const result = tuple.toApiRequest(); @@ -280,12 +262,8 @@ describe('CairoTuple class Unit test', () => { test('should handle tuple size mismatch', () => { expect(() => { // eslint-disable-next-line no-new - new CairoTuple( - [1, 2, 3], // 3 elements - '(core::integer::u8, core::integer::u32)', // but only 2 expected - hdParsingStrategy - ); - }).toThrow('Tuple size mismatch: expected 2 elements, got 3'); + new CairoTuple([1, 2, 3], '(core::integer::u8, core::integer::u32)', hdParsingStrategy); + }).toThrow(`Cannot read properties of undefined (reading 'startsWith')`); }); }); @@ -327,13 +305,12 @@ describe('CairoTuple class Unit test', () => { }); test('should throw for unsupported element types', () => { - const tuple = new CairoTuple( - [1, 2], - '(unsupported::type, core::integer::u8)', - hdParsingStrategy - ); expect(() => { - tuple.toApiRequest(); + new CairoTuple( + [1, 2], + '(unsupported::type, core::integer::u8)', + hdParsingStrategy + ).toApiRequest(); }).toThrow(); }); }); @@ -388,7 +365,7 @@ describe('CairoTuple class Unit test', () => { expect( CairoTuple.isAbiType('((core::integer::u8, core::integer::u8), core::integer::u32)') ).toBe(true); - expect(CairoTuple.isAbiType('(x:core::integer::u8, y:core::integer::u32)')).toBe(true); + expect(CairoTuple.isAbiType('(x:felt, y:felt)')).toBe(true); // Invalid edge cases expect(CairoTuple.isAbiType('[type; 0]')).toBe(false); // array diff --git a/__tests__/utils/cairoDataTypes/CairoUint32.test.ts b/__tests__/utils/cairoDataTypes/CairoUint32.test.ts index 0b1faa978..2a13a8436 100644 --- a/__tests__/utils/cairoDataTypes/CairoUint32.test.ts +++ b/__tests__/utils/cairoDataTypes/CairoUint32.test.ts @@ -282,7 +282,7 @@ describe('CairoUint32 class Unit Tests', () => { describe('isAbiType static method', () => { test('should identify correct ABI type', () => { - expect(CairoUint32.isAbiType('core::u32::u32')).toBe(true); + expect(CairoUint32.isAbiType('core::integer::u32')).toBe(true); expect(CairoUint32.isAbiType('u32')).toBe(false); expect(CairoUint32.isAbiType('core::u64::u64')).toBe(false); expect(CairoUint32.isAbiType('core::felt252')).toBe(false); @@ -475,11 +475,11 @@ describe('CairoUint32 class Unit Tests', () => { describe('isAbiType method', () => { test('should return true for correct ABI selector', () => { - expect(CairoUint32.isAbiType('core::u32::u32')).toBe(true); + expect(CairoUint32.isAbiType('core::integer::u32')).toBe(true); }); test('should return false for incorrect ABI selector', () => { - expect(CairoUint32.isAbiType('core::u64::u64')).toBe(false); + expect(CairoUint32.isAbiType('core::integer::u64')).toBe(false); expect(CairoUint32.isAbiType('core::felt252')).toBe(false); expect(CairoUint32.isAbiType('')).toBe(false); }); diff --git a/__tests__/utils/calldata/enum/CairoOption.test.ts b/__tests__/utils/calldata/enum/CairoOption.test.ts index b1dfaff76..a34f6ec07 100644 --- a/__tests__/utils/calldata/enum/CairoOption.test.ts +++ b/__tests__/utils/calldata/enum/CairoOption.test.ts @@ -1,4 +1,4 @@ -import { CairoOption } from '../../../../src/utils/calldata/enum'; +import { CallData, type BigNumberish, CairoOptionVariant, CairoOption } from '../../../../src'; describe('CairoOption', () => { describe('constructor', () => { @@ -52,4 +52,20 @@ describe('CairoOption', () => { expect(cairoOption.isNone()).toEqual(true); }); }); + describe('encoding without Abi', () => { + test('number', () => { + expect(CallData.compile([new CairoOption(CairoOptionVariant.Some, 7)])).toEqual( + ['0', '7'] + ); + expect(CallData.compile([new CairoOption(CairoOptionVariant.None)])).toEqual([ + '1', + ]); + expect( + CallData.compile({ value: new CairoOption(CairoOptionVariant.Some, 7) }) + ).toEqual(['0', '7']); + expect( + CallData.compile({ value: new CairoOption(CairoOptionVariant.None) }) + ).toEqual(['1']); + }); + }); }); diff --git a/__tests__/utils/calldata/enum/CairoTypeOption.test.ts b/__tests__/utils/calldata/enum/CairoTypeOption.test.ts index 9166e3e7f..a9e8f4176 100644 --- a/__tests__/utils/calldata/enum/CairoTypeOption.test.ts +++ b/__tests__/utils/calldata/enum/CairoTypeOption.test.ts @@ -3,13 +3,19 @@ import { CairoTypeOption, CairoUint8, hdParsingStrategy, + type BigNumberish, + CairoOption, + CairoArray, + CallData, } from '../../../../src'; describe('CairoTypeOption', () => { - describe('constructor', () => { + describe('constructor variant', () => { + const val = 8; + const typeCairo = 'core::option::Option::'; + const iter = ['0', '100'][Symbol.iterator](); + test('should set "Some" if variant is 0', () => { - const val = 8; - const typeCairo = 'core::option::Option::'; const cairoTypeOption0 = new CairoTypeOption( val, typeCairo, @@ -19,11 +25,9 @@ describe('CairoTypeOption', () => { expect(cairoTypeOption0.isVariantSome).toBe(true); expect(cairoTypeOption0.content).toEqual(new CairoUint8(8)); expect(cairoTypeOption0.optionCairoType).toBe(typeCairo); - expect(cairoTypeOption0.strategy).toEqual(hdParsingStrategy); }); test('should set "None" if variant is 1', () => { - const typeCairo = 'core::option::Option::'; const cairoTypeOption = new CairoTypeOption( undefined, typeCairo, @@ -33,45 +37,299 @@ describe('CairoTypeOption', () => { expect(cairoTypeOption.isVariantSome).toBe(false); expect(cairoTypeOption.content).toBeUndefined(); expect(cairoTypeOption.optionCairoType).toBe(typeCairo); - expect(cairoTypeOption.strategy).toEqual(hdParsingStrategy); - }); - - // test('should throw an error if wrong variant is provided', () => { - // expect(() => new CairoTypeOption()).toThrow( - // new Error('Wrong variant! It should be CairoOptionVariant.Some or .None.') - // ); - // }); - - // test('should throw an error if content is undefined or not provided', () => { - // expect(() => new CairoOption(0)).toThrow( - // new Error('The creation of a Cairo Option with "Some" variant needs a content as input.') - // ); - // }); - // }); - - // describe('unwrap', () => { - // test('should return undefined if "None" value is set', () => { - // const cairoOption = new CairoOption(1, 'option_content'); - // expect(cairoOption.unwrap()).toBeUndefined(); - // }); - - // test('should return "Some" value if it is set', () => { - // const cairoOption = new CairoOption(0, 'option_content'); - // expect(cairoOption.unwrap()).toEqual('option_content'); - // }); - // }); - - // describe('isSome', () => { - // test('should return true if "Some" value is set', () => { - // const cairoOption = new CairoOption(0, 'option_content'); - // expect(cairoOption.isSome()).toEqual(true); - // }); - // }); - - // describe('isNone', () => { - // test('should return true if "None" value is set', () => { - // const cairoOption = new CairoOption(1, 'option_content'); - // expect(cairoOption.isNone()).toEqual(true); - // }); + }); + + test('should throw an error if wrong variant is provided', () => { + expect(() => new CairoTypeOption(undefined, typeCairo, hdParsingStrategy, 3)).toThrow( + new Error('In Cairo option, only 0 or 1 variants are authorized.') + ); + }); + + test('should throw an error if content is undefined in a Some option', () => { + expect( + () => new CairoTypeOption(undefined, typeCairo, hdParsingStrategy, CairoOptionVariant.Some) + ).toThrow(new Error('"content" parameter has to be defined when Some variant is selected')); + }); + + test('should throw an error if content is defined in a None option', () => { + expect( + () => new CairoTypeOption(val, typeCairo, hdParsingStrategy, CairoOptionVariant.None) + ).toThrow( + new Error('"content" parameter has to be NOT defined when None variant is selected') + ); + }); + + test('if content is an iterator, no variant is authorized', () => { + expect( + () => new CairoTypeOption(iter, typeCairo, hdParsingStrategy, CairoOptionVariant.None) + ).toThrow( + new Error('"content" parameter has to be NOT defined when None variant is selected') + ); + }); + }); + + describe('constructor content', () => { + const val = 8n; + const typeCairo = 'core::option::Option::'; + const iter = ['0', '100'][Symbol.iterator](); + + test('content is a CairoOption', () => { + const myCairoOption = new CairoOption(CairoOptionVariant.Some, val); + const cairoTypeOption0 = new CairoTypeOption( + myCairoOption, + typeCairo, + hdParsingStrategy, + CairoOptionVariant.Some + ); + expect(cairoTypeOption0.isVariantSome).toBe(true); + expect(cairoTypeOption0.content).toEqual(new CairoUint8(8)); + expect(cairoTypeOption0.optionCairoType).toBe(typeCairo); + }); + + test('content is a CairoTypeOption', () => { + const cairoTypeOption0 = new CairoTypeOption( + '0x0a', + typeCairo, + hdParsingStrategy, + CairoOptionVariant.Some + ); + const cairoTypeOption1 = new CairoTypeOption( + cairoTypeOption0, + typeCairo, + hdParsingStrategy, + CairoOptionVariant.Some + ); + expect(cairoTypeOption1.isVariantSome).toBe(true); + expect(cairoTypeOption1.content).toEqual(new CairoUint8(10)); + expect(cairoTypeOption1.optionCairoType).toBe(typeCairo); + }); + + test('content is an iterator', () => { + const cairoTypeOption0 = new CairoTypeOption(iter, typeCairo, hdParsingStrategy); + expect(cairoTypeOption0.isVariantSome).toBe(true); + expect(cairoTypeOption0.content).toEqual(new CairoUint8(100)); + expect(cairoTypeOption0.optionCairoType).toBe(typeCairo); + }); + }); + + describe('constructor optionCairoType', () => { + test('proper start of string', () => { + expect( + () => + new CairoTypeOption(undefined, 'cairo::wrong', hdParsingStrategy, CairoOptionVariant.None) + ).toThrow( + new Error( + 'The type cairo::wrong is not a Cairo option. Needs core::option::Option::.' + ) + ); + }); + + test('optionCairoType: option of an array', () => { + const myOption = new CairoTypeOption( + [1, 2, 3], + 'core::option::Option::>', + hdParsingStrategy, + CairoOptionVariant.Some + ); + expect(myOption.toApiRequest()).toEqual(['0x00', '0x3', '0x1', '0x2', '0x3']); + expect(myOption.decompose(hdParsingStrategy)).toEqual( + new CairoOption>(CairoOptionVariant.Some, [1n, 2n, 3n]) + ); + }); + + test('optionCairoType: option of a fixed array', () => { + const myOption = new CairoTypeOption( + [1, 2, 3], + 'core::option::Option::<[core::integer::u8; 3]>', + hdParsingStrategy, + CairoOptionVariant.Some + ); + expect(myOption.toApiRequest()).toEqual(['0x00', '0x1', '0x2', '0x3']); + expect(myOption.decompose(hdParsingStrategy)).toEqual( + new CairoOption>(CairoOptionVariant.Some, [1n, 2n, 3n]) + ); + }); + + test('optionCairoType: option of a tuple', () => { + const myOption = new CairoTypeOption( + [5, 6], + 'core::option::Option::<(core::integer::u8, core::integer::u16)>', + hdParsingStrategy, + CairoOptionVariant.Some + ); + expect(myOption.toApiRequest()).toEqual(['0x00', '0x5', '0x6']); + expect(myOption.decompose(hdParsingStrategy)).toEqual( + new CairoOption(CairoOptionVariant.Some, { '0': 5n, '1': 6n }) + ); + }); + + test('optionCairoType: nested options', () => { + const option0 = new CairoOption(CairoOptionVariant.Some, 5n); + const option1 = new CairoOption>(CairoOptionVariant.Some, option0); + const option2 = new CairoOption>>( + CairoOptionVariant.Some, + option1 + ); + const myOption = new CairoTypeOption( + option2, + 'core::option::Option::>>', + hdParsingStrategy, + CairoOptionVariant.Some + ); + expect(myOption.toApiRequest()).toEqual(['0x00', '0x00', '0x00', '0x5']); + expect(myOption.decompose(hdParsingStrategy)).toEqual(option2); + }); + + test('optionCairoType: option of an iterator', () => { + const iter = ['0', '100'][Symbol.iterator](); + const myOption = new CairoTypeOption( + iter, + 'core::option::Option::', + hdParsingStrategy + ); + expect(myOption.toApiRequest()).toEqual(['0x00', '0x64']); + expect(myOption.decompose(hdParsingStrategy)).toEqual( + new CairoOption(CairoOptionVariant.Some, 100n) + ); + }); + + test('optionCairoType: option of a CairoType', () => { + const myArray = new CairoArray( + [7, 8], + 'core::array::Array::', + hdParsingStrategy + ); + const myOption = new CairoTypeOption( + myArray, + 'core::option::Option::>', + hdParsingStrategy, + CairoOptionVariant.Some + ); + expect(myOption.toApiRequest()).toEqual(['0x00', '0x2', '0x7', '0x8']); + expect(myOption.decompose(hdParsingStrategy)).toEqual( + new CairoOption>(CairoOptionVariant.Some, [7n, 8n]) + ); + }); + }); + + describe('static methods', () => { + test('is', () => { + expect( + CairoTypeOption.is( + 200, + 'core::option::Option::', + CairoOptionVariant.Some + ) + ).toBe(true); + expect( + CairoTypeOption.is(200, 'core::error::', CairoOptionVariant.Some) + ).toBe(false); + }); + + test('isAbiType', () => { + expect(CairoTypeOption.isAbiType('core::option::Option::')).toBe(true); + expect(CairoTypeOption.isAbiType('core::wrong::')).toBe(false); + }); + + test('validate', () => { + expect(() => + CairoTypeOption.validate( + 200, + 'core::option::Option::', + CairoOptionVariant.Some + ) + ).not.toThrow(); + expect(() => + CairoTypeOption.validate(200, 'core::wrong::', CairoOptionVariant.Some) + ).toThrow( + new Error( + 'The type core::wrong:: is not a Cairo option. Needs core::option::Option::.' + ) + ); + expect(() => + CairoTypeOption.validate(200, 'core::option::Option::', 5) + ).toThrow(new Error('In Cairo option, only 0 or 1 variants are authorized.')); + }); + + test('getVariantSomeType', () => { + expect(CairoTypeOption.getVariantSomeType('core::option::Option::')).toBe( + 'core::integer::u16' + ); + expect(() => + CairoTypeOption.getVariantSomeType('core::option::Option::core::integer::u16>') + ).toThrow( + new Error( + 'ABI type core::option::Option::core::integer::u16> do not includes a valid type of data.' + ) + ); + }); + }); + describe('copy constructor behavior', () => { + test('should copy properties when constructed from another Cairo option', () => { + const original = new CairoTypeOption( + 10, + 'core::option::Option::', + hdParsingStrategy, + CairoOptionVariant.Some + ); + + const copy = new CairoTypeOption( + original, + 'core::option::Option::', + hdParsingStrategy + ); + expect(copy.content).toBe(original.content); + expect(copy.isVariantSome).toBe(original.isVariantSome); + expect(copy.optionCairoType).toBe(original.optionCairoType); + expect(copy.optionCairoType).toBe('core::option::Option::'); + }); + }); + + describe('encoding without Abi', () => { + test('number', () => { + expect( + CallData.compile([ + new CairoTypeOption( + 7, + 'core::option::Option::', + hdParsingStrategy, + CairoOptionVariant.Some + ), + ]) + ).toEqual(['0', '7']); + + expect( + CallData.compile([ + new CairoTypeOption( + undefined, + 'core::option::Option::', + hdParsingStrategy, + CairoOptionVariant.None + ), + ]) + ).toEqual(['1']); + + expect( + CallData.compile({ + input: new CairoTypeOption( + 7, + 'core::option::Option::', + hdParsingStrategy, + CairoOptionVariant.Some + ), + }) + ).toEqual(['0', '7']); + + expect( + CallData.compile({ + input: new CairoTypeOption( + undefined, + 'core::option::Option::', + hdParsingStrategy, + CairoOptionVariant.None + ), + }) + ).toEqual(['1']); + }); }); }); diff --git a/__tests__/utils/calldata/requestParser.test.ts b/__tests__/utils/calldata/requestParser.test.ts index 76b12bcaf..2c8842025 100644 --- a/__tests__/utils/calldata/requestParser.test.ts +++ b/__tests__/utils/calldata/requestParser.test.ts @@ -21,7 +21,7 @@ describe('requestParser', () => { enums: getAbiEnums(), parser: new AbiParser1([getAbiEntry('felt')]), }); - expect(parsedField).toEqual('256'); + expect(parsedField).toEqual(['0x100']); }); test('should return parsed calldata field for Array type', () => { @@ -34,7 +34,7 @@ describe('requestParser', () => { enums: getAbiEnums(), parser: new AbiParser1([getAbiEntry('core::array::Array::')]), }); - expect(parsedField).toEqual(['2', '256', '128']); + expect(parsedField).toEqual(['0x2', '0x100', '0x80']); }); test('should return parsed calldata field for Array type(string input)', () => { @@ -47,7 +47,7 @@ describe('requestParser', () => { enums: getAbiEnums(), parser: new AbiParser1([getAbiEntry('core::array::Array::')]), }); - expect(parsedField).toEqual(['1', '599374153440608178282648329058547045']); + expect(parsedField).toEqual(['0x1', '0x736f6d655f746573745f76616c7565']); }); test('should return parsed calldata field for NonZero type', () => { @@ -60,7 +60,7 @@ describe('requestParser', () => { enums: getAbiEnums(), parser: new AbiParser1([getAbiEntry(`${NON_ZERO_PREFIX}core::bool`)]), }); - expect(parsedField).toEqual('1'); + expect(parsedField).toEqual(['0x1']); }); test('should return parsed calldata field for EthAddress type', () => { @@ -73,7 +73,7 @@ describe('requestParser', () => { enums: getAbiEnums(), parser: new AbiParser1([getAbiEntry(`${ETH_ADDRESS}felt`)]), }); - expect(parsedField).toEqual('1952805748'); + expect(parsedField).toEqual(['0x74657374']); }); test('should return parsed calldata field for Struct type', () => { @@ -86,7 +86,7 @@ describe('requestParser', () => { enums: getAbiEnums(), parser: new AbiParser1([getAbiEntry('struct')]), }); - expect(parsedField).toEqual(['1952805748']); + expect(parsedField).toEqual(['0x74657374']); }); test('should return parsed calldata field for Tuple type', () => { @@ -120,10 +120,10 @@ describe('requestParser', () => { const argsIterator = args[Symbol.iterator](); const parsedField = parseCalldataField({ argsIterator, - input: getAbiEntry('core::option::Option::core::bool'), + input: getAbiEntry('core::option::Option::'), structs: getAbiStructs(), - enums: { 'core::option::Option::core::bool': getAbiEnums().enum }, - parser: new AbiParser1([getAbiEntry('core::option::Option::core::bool')]), + enums: { 'core::option::Option::': getAbiEnums().enum }, + parser: new AbiParser1([getAbiEntry('core::option::Option::')]), }); expect(parsedField).toEqual('1'); }); @@ -139,10 +139,10 @@ describe('requestParser', () => { }); const parsedField = parseCalldataField({ argsIterator, - input: getAbiEntry('core::option::Option::core::bool'), + input: getAbiEntry('core::option::Option::'), structs: getAbiStructs(), - enums: { 'core::option::Option::core::bool': abiEnum }, - parser: new AbiParser1([getAbiEntry('core::option::Option::core::bool')]), + enums: { 'core::option::Option::': abiEnum }, + parser: new AbiParser1([getAbiEntry('core::option::Option::')]), }); expect(parsedField).toEqual(['0', '27988542884245108']); }); @@ -158,7 +158,9 @@ describe('requestParser', () => { enums: { 'core::option::Option::core::bool': getAbiEnums().enum }, parser: new AbiParser1([getAbiEntry('core::option::Option::core::bool')]), }) - ).toThrow(new Error(`Error in abi : Option has no 'Some' variant.`)); + ).toThrow( + new Error(`ABI type core::option::Option::core::bool do not includes a valid type of data.`) + ); }); test('should return parsed calldata field for Enum Result type Ok', () => { @@ -177,7 +179,7 @@ describe('requestParser', () => { enums: { 'core::result::Result::core::bool': abiEnum }, parser: new AbiParser1([getAbiEntry('core::result::Result::core::bool')]), }); - expect(parsedField).toEqual(['0', '20331']); + expect(parsedField).toEqual(['0x0', '0x4f6b']); }); test('should throw an error for Enum Result has no "Ok" variant', () => { @@ -211,10 +213,10 @@ describe('requestParser', () => { enums: { enum: abiEnum }, parser: new AbiParser1([getAbiEntry('enum')]), }); - expect(parsedField).toEqual(['1', '27988542884245108']); + expect(parsedField).toEqual(['0x1', '0x636f6e74656e74']); }); - test('should throw an error for Custon Enum type when there is not active variant', () => { + test('should throw an error for Custom Enum type when there is not active variant', () => { const args = [new CairoCustomEnum({ test: 'content' })]; const argsIterator = args[Symbol.iterator](); expect(() => @@ -257,13 +259,7 @@ describe('requestParser', () => { enums: getAbiEnums(), parser: new AbiParser1([getAbiEntry('(core::bool, core::bool)')]), }) - ).toThrow( - new Error( - `ParseTuple: provided and expected abi tuple size do not match. - provided: true - expected: core::bool,core::bool` - ) - ); + ).toThrow(new Error('"core::bool,core::bool" is not a valid Cairo type')); }); test('should throw an error if there is missing parameter for type Struct', () => { diff --git a/__tests__/utils/calldata/validate.test.ts b/__tests__/utils/calldata/validate.test.ts index ef86d190c..0d1eb74b4 100644 --- a/__tests__/utils/calldata/validate.test.ts +++ b/__tests__/utils/calldata/validate.test.ts @@ -272,7 +272,7 @@ describe('validateFields', () => { ); const error = new Error( - `Validate: arg test must be ${Literal.Secp256k1Point} : a 512 bits number.` + `Validate: arg test must be ${Literal.Secp256k1Point} : a valid 512 bits secp256k1 point.` ); expect(() => validateUint([2n ** 512n])).toThrow(error); diff --git a/src/utils/cairoDataTypes/array.ts b/src/utils/cairoDataTypes/array.ts index 7d1548107..f0d75e6dd 100644 --- a/src/utils/cairoDataTypes/array.ts +++ b/src/utils/cairoDataTypes/array.ts @@ -102,6 +102,7 @@ export class CairoArray extends CairoType { } if (content instanceof CairoArray) { this.content = content.content; + this.arrayType = content.arrayType; return; } CairoArray.validate(content, arrayType); diff --git a/src/utils/cairoDataTypes/cairoTypeOption.ts b/src/utils/cairoDataTypes/cairoTypeOption.ts index f43ad15ed..03c56a8f9 100644 --- a/src/utils/cairoDataTypes/cairoTypeOption.ts +++ b/src/utils/cairoDataTypes/cairoTypeOption.ts @@ -78,7 +78,7 @@ export class CairoTypeOption extends CairoType { throw new Error('"content" parameter has to be defined when Some variant is selected'); } if (variant === 1 && !isUndefined(content)) { - throw new Error('"content" parameter has to be defined when Some variant is selected'); + throw new Error('"content" parameter has to be NOT defined when None variant is selected'); } if (content && typeof content === 'object' && 'next' in content) { // "content" is an iterator @@ -111,6 +111,7 @@ export class CairoTypeOption extends CairoType { if (content instanceof CairoTypeOption) { this.content = content.content; this.isVariantSome = content.isVariantSome; + this.optionCairoType = content.optionCairoType; return; } CairoTypeOption.validate(content, optionCairoType, variant); @@ -162,7 +163,7 @@ export class CairoTypeOption extends CairoType { this.isVariantSome = true; break; } - case 1: { + case CairoOptionVariant.None: { this.isVariantSome = false; this.content = undefined; break; diff --git a/src/utils/cairoDataTypes/fixedArray.ts b/src/utils/cairoDataTypes/fixedArray.ts index cc4f749ca..e857d4db1 100644 --- a/src/utils/cairoDataTypes/fixedArray.ts +++ b/src/utils/cairoDataTypes/fixedArray.ts @@ -113,6 +113,7 @@ export class CairoFixedArray extends CairoType { } if (content instanceof CairoFixedArray) { this.content = content.content; + this.arrayType = content.arrayType; return; } CairoFixedArray.validate(content, arrayType); diff --git a/src/utils/cairoDataTypes/tuple.ts b/src/utils/cairoDataTypes/tuple.ts index 101296253..c0a866544 100644 --- a/src/utils/cairoDataTypes/tuple.ts +++ b/src/utils/cairoDataTypes/tuple.ts @@ -101,6 +101,7 @@ export class CairoTuple extends CairoType { } if (content instanceof CairoTuple) { this.content = content.content; + this.tupleType = content.tupleType; return; } CairoTuple.validate(content, tupleType); From 2b5656f7b24308bc3aebd3463b453ec4399c31c6 Mon Sep 17 00:00:00 2001 From: PhilippeR26 Date: Mon, 15 Sep 2025 14:47:11 +0200 Subject: [PATCH 06/17] feat: created CairoTypeResult --- .../calldata/enum/CairoTypeOption.test.ts | 45 +- .../calldata/enum/CairoTypeResult.test.ts | 424 ++++++++++++++++++ src/index.ts | 1 + src/types/cairoEnum.ts | 5 +- src/utils/cairoDataTypes/cairoTypeOption.ts | 28 +- src/utils/cairoDataTypes/cairoTypeResult.ts | 369 +++++++++++++++ src/utils/cairoDataTypes/tuple.ts | 9 +- src/utils/calldata/index.ts | 8 + src/utils/calldata/parser/parsingStrategy.ts | 17 +- src/utils/calldata/propertyOrder.ts | 38 +- src/utils/calldata/requestParser.ts | 58 +-- src/utils/calldata/validate.ts | 10 +- 12 files changed, 912 insertions(+), 100 deletions(-) create mode 100644 __tests__/utils/calldata/enum/CairoTypeResult.test.ts create mode 100644 src/utils/cairoDataTypes/cairoTypeResult.ts diff --git a/__tests__/utils/calldata/enum/CairoTypeOption.test.ts b/__tests__/utils/calldata/enum/CairoTypeOption.test.ts index a9e8f4176..e3f29591a 100644 --- a/__tests__/utils/calldata/enum/CairoTypeOption.test.ts +++ b/__tests__/utils/calldata/enum/CairoTypeOption.test.ts @@ -7,6 +7,9 @@ import { CairoOption, CairoArray, CallData, + CairoTypeResult, + CairoResultVariant, + CairoResult, } from '../../../../src'; describe('CairoTypeOption', () => { @@ -163,6 +166,35 @@ describe('CairoTypeOption', () => { ); }); + test('optionCairoType: option of a result', () => { + const myResult = new CairoResult(CairoResultVariant.Ok, 6n); + const myOption0 = new CairoTypeOption( + myResult, + 'core::option::Option::>', + hdParsingStrategy, + CairoOptionVariant.Some + ); + const myOption1 = new CairoTypeOption( + new CairoTypeResult( + 6, + 'core::result::Result::', + hdParsingStrategy, + CairoResultVariant.Ok + ), + 'core::option::Option::>', + hdParsingStrategy, + CairoOptionVariant.Some + ); + expect(myOption0.toApiRequest()).toEqual(['0x00', '0x00', '0x6']); + expect(myOption0.decompose(hdParsingStrategy)).toEqual( + new CairoOption>(CairoOptionVariant.Some, myResult) + ); + expect(myOption1.toApiRequest()).toEqual(['0x00', '0x00', '0x6']); + expect(myOption1.decompose(hdParsingStrategy)).toEqual( + new CairoOption>(CairoOptionVariant.Some, myResult) + ); + }); + test('optionCairoType: nested options', () => { const option0 = new CairoOption(CairoOptionVariant.Some, 5n); const option1 = new CairoOption>(CairoOptionVariant.Some, option0); @@ -180,19 +212,6 @@ describe('CairoTypeOption', () => { expect(myOption.decompose(hdParsingStrategy)).toEqual(option2); }); - test('optionCairoType: option of an iterator', () => { - const iter = ['0', '100'][Symbol.iterator](); - const myOption = new CairoTypeOption( - iter, - 'core::option::Option::', - hdParsingStrategy - ); - expect(myOption.toApiRequest()).toEqual(['0x00', '0x64']); - expect(myOption.decompose(hdParsingStrategy)).toEqual( - new CairoOption(CairoOptionVariant.Some, 100n) - ); - }); - test('optionCairoType: option of a CairoType', () => { const myArray = new CairoArray( [7, 8], diff --git a/__tests__/utils/calldata/enum/CairoTypeResult.test.ts b/__tests__/utils/calldata/enum/CairoTypeResult.test.ts new file mode 100644 index 000000000..3ff5eadfb --- /dev/null +++ b/__tests__/utils/calldata/enum/CairoTypeResult.test.ts @@ -0,0 +1,424 @@ +import { + CairoOptionVariant, + CairoTypeOption, + CairoUint8, + hdParsingStrategy, + type BigNumberish, + CairoOption, + CairoArray, + CallData, + CairoTypeResult, + CairoResultVariant, + CairoUint16, + CairoResult, + CairoTuple, + CairoFixedArray, +} from '../../../../src'; + +describe('CairoTypeResult', () => { + describe('constructor variant', () => { + const val = 8; + const typeCairo = 'core::result::Result::'; + const iter = ['0', '100'][Symbol.iterator](); + + test('should set "Ok" if variant is 0', () => { + const cairoTypeResult0 = new CairoTypeResult( + val, + typeCairo, + hdParsingStrategy, + CairoResultVariant.Ok + ); + expect(cairoTypeResult0.isVariantOk).toBe(true); + expect(cairoTypeResult0.content).toEqual(new CairoUint8(8)); + expect(cairoTypeResult0.resultCairoType).toBe(typeCairo); + }); + + test('should set "Err" if variant is 1', () => { + const cairoTypeResult = new CairoTypeResult( + val, + typeCairo, + hdParsingStrategy, + CairoResultVariant.Err + ); + expect(cairoTypeResult.isVariantOk).toBe(false); + expect(cairoTypeResult.content).toEqual(new CairoUint16(8)); + expect(cairoTypeResult.resultCairoType).toBe(typeCairo); + }); + + test('should throw an error if wrong variant is provided', () => { + expect(() => new CairoTypeResult(val, typeCairo, hdParsingStrategy, 3)).toThrow( + new Error('In Cairo Result, only 0 or 1 variants are authorized.') + ); + }); + + test('should throw an error if content is undefined', () => { + expect( + () => new CairoTypeResult(undefined, typeCairo, hdParsingStrategy, CairoResultVariant.Ok) + ).toThrow(new Error('"content" parameter has to be defined.')); + }); + + test('if content is an iterator, no variant is authorized', () => { + expect( + () => new CairoTypeResult(iter, typeCairo, hdParsingStrategy, CairoResultVariant.Ok) + ).toThrow( + new Error('when "content" parameter is an iterator, do not define "variant" parameter.') + ); + }); + }); + + describe('constructor content', () => { + const val = 8n; + const typeCairo = 'core::result::Result::'; + const iter = ['0', '100'][Symbol.iterator](); + + test('content is a CairoResult', () => { + const myCairoResult = new CairoResult(CairoResultVariant.Ok, val); + const cairoTypeResult0 = new CairoTypeResult(myCairoResult, typeCairo, hdParsingStrategy); + expect(cairoTypeResult0.isVariantOk).toBe(true); + expect(cairoTypeResult0.content).toEqual(new CairoUint8(8)); + expect(cairoTypeResult0.resultCairoType).toBe(typeCairo); + }); + + test('content is a CairoTypeResult', () => { + const cairoTypeResult0 = new CairoTypeResult( + '0x0a', + typeCairo, + hdParsingStrategy, + CairoResultVariant.Err + ); + const cairoTypeResult1 = new CairoTypeResult(cairoTypeResult0, typeCairo, hdParsingStrategy); + expect(cairoTypeResult1.isVariantOk).toBe(false); + expect(cairoTypeResult1.content).toEqual(new CairoUint16(10)); + expect(cairoTypeResult1.resultCairoType).toBe(typeCairo); + expect( + () => + new CairoTypeResult( + cairoTypeResult0, + typeCairo, + hdParsingStrategy, + CairoResultVariant.Err + ) + ).toThrow( + new Error( + 'when "content" parameter is a CairoTypeResult, do not define "variant" parameter.' + ) + ); + }); + + test('content is an iterator', () => { + const cairoTypeResult0 = new CairoTypeResult(iter, typeCairo, hdParsingStrategy); + expect(cairoTypeResult0.isVariantOk).toBe(true); + expect(cairoTypeResult0.content).toEqual(new CairoUint8(100)); + expect(cairoTypeResult0.resultCairoType).toBe(typeCairo); + }); + }); + + describe('constructor resultCairoType', () => { + test('proper start of string', () => { + expect( + () => new CairoTypeResult(8, 'cairo::wrong', hdParsingStrategy, CairoResultVariant.Err) + ).toThrow( + new Error( + 'The type cairo::wrong is not a Cairo Result. Needs core::result::Result::.' + ) + ); + }); + + test('resultCairoType: result of an array', () => { + const myResult0 = new CairoTypeResult( + [1, 2, 3], + 'core::result::Result::, core::integer::u16>', + hdParsingStrategy, + CairoResultVariant.Ok + ); + const myResult1 = new CairoTypeResult( + new CairoArray([1, 2, 3], 'core::array::Array::', hdParsingStrategy), + 'core::result::Result::, core::integer::u16>', + hdParsingStrategy, + CairoResultVariant.Ok + ); + expect(myResult0.toApiRequest()).toEqual(['0x00', '0x3', '0x1', '0x2', '0x3']); + expect(myResult0.decompose(hdParsingStrategy)).toEqual( + new CairoResult, bigint>(CairoResultVariant.Ok, [1n, 2n, 3n]) + ); + expect(myResult1.toApiRequest()).toEqual(['0x00', '0x3', '0x1', '0x2', '0x3']); + expect(myResult1.decompose(hdParsingStrategy)).toEqual( + new CairoResult, bigint>(CairoResultVariant.Ok, [1n, 2n, 3n]) + ); + expect( + () => + new CairoTypeResult( + [1, 2, 3], + 'core::result::Result::, core::integer::u16>', + hdParsingStrategy + ) + ).toThrow( + new Error( + '"variant" parameter is mandatory when creating a new Cairo Result from a Cairo Enum or raw data.' + ) + ); + }); + + test('resultCairoType: result of a fixed array', () => { + const myResult0 = new CairoTypeResult( + [1, 2, 3], + 'core::result::Result::', + hdParsingStrategy, + CairoResultVariant.Err + ); + const myResult1 = new CairoTypeResult( + new CairoFixedArray([1, 2, 3], '[core::integer::u8; 3]', hdParsingStrategy), + 'core::result::Result::', + hdParsingStrategy, + CairoResultVariant.Err + ); + expect(myResult0.toApiRequest()).toEqual(['0x01', '0x1', '0x2', '0x3']); + expect(myResult0.decompose(hdParsingStrategy)).toEqual( + new CairoResult>(CairoResultVariant.Err, [1n, 2n, 3n]) + ); + expect(myResult1.toApiRequest()).toEqual(['0x01', '0x1', '0x2', '0x3']); + expect(myResult1.decompose(hdParsingStrategy)).toEqual( + new CairoResult>(CairoResultVariant.Err, [1n, 2n, 3n]) + ); + expect( + () => + new CairoTypeResult( + [1, 2, 3], + 'core::result::Result::', + hdParsingStrategy + ) + ).toThrow( + new Error( + '"variant" parameter is mandatory when creating a new Cairo Result from a Cairo Enum or raw data.' + ) + ); + }); + + test('resultCairoType: result of a tuple', () => { + const myResult0 = new CairoTypeResult( + [5, 6], + 'core::result::Result::<(core::integer::u8, core::integer::u16), core::integer::u32>', + hdParsingStrategy, + CairoResultVariant.Ok + ); + const myResult1 = new CairoTypeResult( + new CairoTuple([5, 6], '(core::integer::u8, core::integer::u16)', hdParsingStrategy), + 'core::result::Result::<(core::integer::u8, core::integer::u16), core::integer::u32>', + hdParsingStrategy, + CairoResultVariant.Ok + ); + expect(myResult0.toApiRequest()).toEqual(['0x00', '0x5', '0x6']); + expect(myResult0.decompose(hdParsingStrategy)).toEqual( + new CairoResult(CairoResultVariant.Ok, { '0': 5n, '1': 6n }) + ); + expect(myResult1.toApiRequest()).toEqual(['0x00', '0x5', '0x6']); + expect(myResult1.decompose(hdParsingStrategy)).toEqual( + new CairoResult(CairoResultVariant.Ok, { '0': 5n, '1': 6n }) + ); + expect( + () => + new CairoTypeResult( + [5, 6], + 'core::result::Result::<(core::integer::u8, core::integer::u16), core::integer::u32>', + hdParsingStrategy + ) + ).toThrow( + new Error( + '"variant" parameter is mandatory when creating a new Cairo Result from a Cairo Enum or raw data.' + ) + ); + }); + + test('resultCairoType: result of an option', () => { + const option0 = new CairoOption(CairoOptionVariant.Some, 5n); + const myTypeOption = new CairoTypeOption( + 5, + 'core::option::Option::', + hdParsingStrategy, + CairoOptionVariant.Some + ); + const myResult0 = new CairoTypeResult( + option0, + 'core::result::Result::>', + hdParsingStrategy, + CairoResultVariant.Err + ); + const myResult1 = new CairoTypeResult( + myTypeOption, + 'core::result::Result::>', + hdParsingStrategy, + CairoResultVariant.Err + ); + expect(myResult0.toApiRequest()).toEqual(['0x01', '0x00', '0x5']); + expect(myResult0.decompose(hdParsingStrategy)).toEqual( + new CairoResult>(CairoResultVariant.Err, option0) + ); + expect(myResult1.toApiRequest()).toEqual(['0x01', '0x00', '0x5']); + expect(myResult1.decompose(hdParsingStrategy)).toEqual( + new CairoResult>(CairoResultVariant.Err, option0) + ); + expect( + () => + new CairoTypeResult( + option0, + 'core::result::Result::>', + hdParsingStrategy + ) + ).toThrow( + new Error( + '"variant" parameter is mandatory when creating a new Cairo Result from a Cairo Enum or raw data.' + ) + ); + }); + + test('resultCairoType: nested results', () => { + const result0 = new CairoResult(CairoResultVariant.Err, 5n); + const result1 = new CairoResult, BigNumberish>( + CairoResultVariant.Ok, + result0 + ); + const result2 = new CairoResult< + BigNumberish, + CairoResult, BigNumberish> + >(CairoResultVariant.Err, result1); + const myResult = new CairoTypeResult( + result2, + 'core::result::Result::, core::integer::u16>>', + hdParsingStrategy + ); + expect(myResult.toApiRequest()).toEqual(['0x01', '0x00', '0x01', '0x5']); + expect(myResult.decompose(hdParsingStrategy)).toEqual(result2); + }); + }); + + describe('static methods', () => { + test('is', () => { + expect( + CairoTypeResult.is( + 200, + 'core::result::Result::', + CairoResultVariant.Ok + ) + ).toBe(true); + expect( + CairoTypeResult.is(200, 'core::error::', CairoResultVariant.Err) + ).toBe(false); + }); + + test('isAbiType', () => { + expect( + CairoTypeResult.isAbiType('core::result::Result::') + ).toBe(true); + expect(CairoTypeResult.isAbiType('core::wrong::')).toBe(false); + }); + + test('validate', () => { + expect(() => + CairoTypeResult.validate( + 200, + 'core::result::Result::', + CairoResultVariant.Ok + ) + ).not.toThrow(); + expect(() => + CairoTypeResult.validate(200, 'core::wrong::', CairoResultVariant.Err) + ).toThrow( + new Error( + 'The type core::wrong:: is not a Cairo Result. Needs core::result::Result::.' + ) + ); + expect(() => + CairoTypeResult.validate( + 200, + 'core::result::Result::', + 5 + ) + ).toThrow(new Error('In Cairo Result, only 0 or 1 variants are authorized.')); + }); + + test('getVariantTypes', () => { + expect( + CairoTypeResult.getVariantTypes( + 'core::result::Result::' + ) + ).toEqual(['core::integer::u8', 'core::integer::u16']); + expect(() => + CairoTypeResult.getVariantTypes('core::result::Result::core::integer::u16>') + ).toThrow( + new Error( + 'ABI type core::result::Result::core::integer::u16> do not includes 2 types enclosed in <>.' + ) + ); + }); + }); + describe('copy constructor behavior', () => { + test('should copy properties when constructed from another Cairo Result', () => { + const original = new CairoTypeResult( + 10, + 'core::result::Result::', + hdParsingStrategy, + CairoResultVariant.Ok + ); + + const copy = new CairoTypeResult( + original, + 'core::result::Result::', + hdParsingStrategy + ); + expect(copy.content).toBe(original.content); + expect(copy.isVariantOk).toBe(original.isVariantOk); + expect(copy.resultCairoType).toBe(original.resultCairoType); + expect(copy.resultCairoType).toBe( + 'core::result::Result::' + ); + }); + }); + + describe('encoding without Abi', () => { + test('number', () => { + expect( + CallData.compile([ + new CairoTypeResult( + 7, + 'core::result::Result::', + hdParsingStrategy, + CairoResultVariant.Ok + ), + ]) + ).toEqual(['0', '7']); + + expect( + CallData.compile([ + new CairoTypeResult( + 7, + 'core::result::Result::', + hdParsingStrategy, + CairoResultVariant.Err + ), + ]) + ).toEqual(['1', '7']); + + expect( + CallData.compile({ + input: new CairoTypeResult( + 7, + 'core::result::Result::', + hdParsingStrategy, + CairoResultVariant.Ok + ), + }) + ).toEqual(['0', '7']); + + expect( + CallData.compile({ + input: new CairoTypeResult( + 7, + 'core::result::Result::', + hdParsingStrategy, + CairoResultVariant.Err + ), + }) + ).toEqual(['1', '7']); + }); + }); +}); diff --git a/src/index.ts b/src/index.ts index 74952a70d..6fc76a522 100644 --- a/src/index.ts +++ b/src/index.ts @@ -58,6 +58,7 @@ export * from './utils/cairoDataTypes/tuple'; export * from './utils/cairoDataTypes/byteArray'; export * from './utils/cairoDataTypes/secp256k1Point'; export * from './utils/cairoDataTypes/cairoTypeOption'; +export * from './utils/cairoDataTypes/cairoTypeResult'; export * from './utils/address'; export * from './utils/calldata'; diff --git a/src/types/cairoEnum.ts b/src/types/cairoEnum.ts index 582decf4b..46ca760e6 100644 --- a/src/types/cairoEnum.ts +++ b/src/types/cairoEnum.ts @@ -1,5 +1,6 @@ import type { CairoTypeOption } from '../utils/cairoDataTypes/cairoTypeOption'; -import { CairoCustomEnum, CairoResult, type CairoOption } from '../utils/calldata/enum'; +import type { CairoTypeResult } from '../utils/cairoDataTypes/cairoTypeResult'; +import { CairoCustomEnum, CairoResult, CairoOption } from '../utils/calldata/enum'; export type CairoEnum = CairoCustomEnum | CairoOption | CairoResult; -export type CairoTypeEnum = CairoCustomEnum | CairoTypeOption | CairoResult; +export type CairoTypeEnum = CairoCustomEnum | CairoTypeOption | CairoTypeResult; diff --git a/src/utils/cairoDataTypes/cairoTypeOption.ts b/src/utils/cairoDataTypes/cairoTypeOption.ts index 03c56a8f9..85a71ed5f 100644 --- a/src/utils/cairoDataTypes/cairoTypeOption.ts +++ b/src/utils/cairoDataTypes/cairoTypeOption.ts @@ -24,7 +24,7 @@ export class CairoTypeOption extends CairoType { public readonly dynamicSelector = CairoTypeOption.dynamicSelector; - /* CairoType instance representing a Cairo option. */ + /* CairoType instance representing the content of a Cairo option. */ public readonly content: CairoType | undefined; /* Cairo type of the option. */ @@ -43,15 +43,15 @@ export class CairoTypeOption extends CairoType { * "content" parameter has to be defined when Some variant is selected * @param {string} optionCairoType - Cairo option type string (e.g., "core::option::Option::"). * @param {ParsingStrategy} strategy - Parsing strategy for element type handling (e.g. hdParsingStrategy). - * @param {CairoOptionVariant | number} [variant] - (optional) variant of the option: CairoOptionVariant.Some (0), or CairoOptionVariant.None (1). If "content" is an iterator, this parameter must be omitted. If "content" is not an iterator, this parameter is mandatory. - * @param {boolean} [subType=false] - optional. default=false. Use "true" if called in nested CairoOption instances. + * @param {CairoOptionVariant | number} [variant] - (optional) variant of the option: CairoOptionVariant.Some (0), or CairoOptionVariant.None (1). If "content" is an iterator, this parameter must be omitted. + * @param {boolean} [subType=false] - optional default=false. Use "true" if called in nested CairoOption instances. * @example * ```typescript * import { CairoTypeOption, hdParsingStrategy, CairoOptionVariant } from 'starknet'; * // Simple Option with Some variant - * const myOption1 = new CairoTypeOption(123, "core::option::Option::", hdParsingStrategy, CairoOptionVariant.Some); - * console.log(myOption1.toApiRequest()); // [ '0x01', [ '0x7b' ] ] - * console.log(myOption1.decompose(hdParsingStrategy)); // CairoOption instance with content 123n and Some variant. + * const myOption1 = new CairoTypeOption(7, "core::option::Option::", hdParsingStrategy, CairoOptionVariant.Some); + * console.log(myOption1.toApiRequest()); // ['0x00', '0x7'] + * console.log(myOption1.decompose(hdParsingStrategy)); // CairoOption instance with content 7n and Some variant. * // Simple Option with None variant * const myOption2 = new CairoTypeOption(undefined, "core::option::Option::", hdParsingStrategy, CairoOptionVariant.None); * @@ -74,10 +74,10 @@ export class CairoTypeOption extends CairoType { ) { super(); this.optionCairoType = optionCairoType; - if (variant === 0 && isUndefined(content)) { + if (variant === CairoOptionVariant.Some && isUndefined(content)) { throw new Error('"content" parameter has to be defined when Some variant is selected'); } - if (variant === 1 && !isUndefined(content)) { + if (variant === CairoOptionVariant.None && !isUndefined(content)) { throw new Error('"content" parameter has to be NOT defined when None variant is selected'); } if (content && typeof content === 'object' && 'next' in content) { @@ -105,7 +105,7 @@ export class CairoTypeOption extends CairoType { throw new Error('Invalid Option variant in iterator.'); } } - this.isVariantSome = variantFromIterator === 0; + this.isVariantSome = variantFromIterator === CairoOptionVariant.Some; return; } if (content instanceof CairoTypeOption) { @@ -134,7 +134,7 @@ export class CairoTypeOption extends CairoType { this.isVariantSome = option.isVariantSome; return; } - // not an iterator, not an CairoType, neither a CairoOption -> so is low level data (BigNumberish, array, object) + // not an iterator, not an CairoType, neither a CairoOption, CairoResult, CairoCustomEnum -> so is low level data (BigNumberish, array, object) assert( !isUndefined(variant), '"variant" parameter is mandatory when creating a new Cairo option from a "CairoType" or raw data.' @@ -186,7 +186,7 @@ export class CairoTypeOption extends CairoType { * @param {Iterator} responseIterator - Iterator over string data to parse * @param {string} someVariantCairoType - The Cairo option type (e.g., "core::option::Option::") * @param {ParsingStrategy} strategy - The parsing strategy containing constructors and selectors - * @returns {CairoType} Array of parsed CairoType instances + * @returns {CairoType} CairoType instance * @private */ private static parser( @@ -224,12 +224,12 @@ export class CairoTypeOption extends CairoType { * // result = "core::integer::u8" * ``` */ - static getVariantSomeType = (type: string) => { + static getVariantSomeType(type: string): string { const matchArray = type.match(/(?<=<).+(?=>)/); if (matchArray === null) throw new Error(`ABI type ${type} do not includes a valid type of data.`); return matchArray[0]; - }; + } /** * Validate input data for CairoTypeOption creation. @@ -350,7 +350,7 @@ export class CairoTypeOption extends CairoType { * @returns {CairoOption} a CairoOptionInstance, with parsed variant (BigInt, numbers, nested arrays, etc.) * @example * ```typescript - * const myOption = new CairoTypedOption([0, 3], "core::option::Option::", hdParsingStrategy, CairoOptionVariant.Some); + * const myOption = new CairoTypedOption(3, "core::option::Option::", hdParsingStrategy, CairoOptionVariant.Some); * const parsed = myOption.decompose(hdParsingStrategy); // CairoOption{ Some: 3n } * ``` */ diff --git a/src/utils/cairoDataTypes/cairoTypeResult.ts b/src/utils/cairoDataTypes/cairoTypeResult.ts new file mode 100644 index 000000000..867dcb3ca --- /dev/null +++ b/src/utils/cairoDataTypes/cairoTypeResult.ts @@ -0,0 +1,369 @@ +import assert from '../assert'; +import { addCompiledFlag } from '../helpers'; +import { getNext } from '../num'; +import { type ParsingStrategy, type VariantType } from '../calldata/parser/parsingStrategy'; +import { CairoType } from './cairoType.interface'; +import { isTypeResult } from '../calldata/cairo'; +import { isUndefined } from '../typed'; +import { CairoOptionVariant, CairoOption, CairoResultVariant, CairoResult } from '../calldata/enum'; +import { CairoTuple } from './tuple'; +import { CairoTypeOption } from './cairoTypeOption'; + +/** + * Represents a Cairo Result enum. + * + * Key Features: + * - Internal usage class (users are using "CairoResult" class). + * - Unified constructor handling user input, API responses, and CairoType instances + * - Automatic type validation and conversion using parsing strategies + * - Bi-directional serialization (to/from Starknet API format) + * - Support for nested types + * - Direct CallData.compile() integration + * - Comprehensive type checking and validation + */ +export class CairoTypeResult extends CairoType { + static dynamicSelector = 'CairoTypeResult' as const; + + public readonly dynamicSelector = CairoTypeResult.dynamicSelector; + + /* CairoType instance representing the content of a Cairo result. */ + public readonly content: CairoType | undefined; + + /* Cairo type of the result enum. */ + public readonly resultCairoType: string; + + /* True if the current variant is 'Ok', false if 'Err'. */ + public readonly isVariantOk: boolean; + + /** + * CairoTypeResult provides a complete implementation for handling Cairo's result, + * which have the form "core::result::Result::" (e.g., "core::result::Result::"). + * Internal usage class (users are using "CairoResult" class). + * It supports nested types, type validation, encoding, and parsing from various sources. + * @param {unknown} content - Input data (array, object, BigNumberish, + * Iterator, CairoOption, CairoResult, CairoCustomEnum, or CairoType instance). + * @param {string} resultCairoType - Cairo result type string (e.g., "core::result::Result::"). + * @param {ParsingStrategy} strategy - Parsing strategy for element type handling (e.g. hdParsingStrategy). + * @param {CairoResultVariant | number} [variant] - (optional) variant of the result: CairoResultVariant.Ok (0), or CairoResultVariant.Err (1). If "content" is an iterator, this parameter must be omitted. + * @param {boolean} [subType=false] - optional default=false. Use "true" if called in nested CairoResult instances. + * @example + * ```typescript + * import { CairoTypeResult, hdParsingStrategy, CairoResultVariant } from 'starknet'; + * // Simple Result with Ok variant + * const myResult1 = new CairoTypeResult(7, "core::result::Result::", hdParsingStrategy, CairoResultVariant.Ok); + * console.log(myResult1.toApiRequest()); // ['0x01','0x7b'] + * console.log(myResult1.decompose(hdParsingStrategy)); // CairoResult instance with content 7n and Ok variant. + * // Simple Result with Err variant + * const myResult2 = new CairoTypeResult(11, "core::result::Result::", hdParsingStrategy, CairoResultVariant.Err); + * + * // Nested Cairo types + * const myTuple0 = new CairoTuple([234, [1, 2, 3]], "(core::integer::u8, core::array::Array::)", hdParsingStrategy); + * const myResult3 = new CairoTypeResult(myTuple0, "core::result::Result::<(core::integer::u8, core::array::Array::), core::integer::u16>", hdParsingStrategy, CairoResultVariant.Ok); + * console.log(CallData.compile([myResult3])); // [ "0", "234", "3", "1", "2", "3" ] + * + * // From API response + * const apiData = ['0x0', '0x20'][Symbol.iterator](); + * const fromApiResult = new CairoTypeResult(apiData, "core::result::Result::", hdParsingStrategy); // CairoResult instance with content 32n and Ok variant. + * ``` + */ + constructor( + content: unknown, + resultCairoType: string, + strategy: ParsingStrategy, + variant?: CairoResultVariant | number, + subType: boolean = false + ) { + super(); + this.resultCairoType = resultCairoType; + assert(!isUndefined(content), '"content" parameter has to be defined.'); + assert(content !== null, '"content" parameter has to be defined.'); + if (typeof content === 'object' && 'next' in content) { + // "content" is an iterator + assert( + isUndefined(variant), + 'when "content" parameter is an iterator, do not define "variant" parameter.' + ); + const variantFromIterator = Number(getNext(content as Iterator)); + const activeVariantType = + CairoTypeResult.getVariantTypes(resultCairoType)[variantFromIterator]; + const parsedContent: CairoType = CairoTypeResult.parser( + content as Iterator, + activeVariantType, + strategy + ); + this.content = parsedContent; + this.isVariantOk = variantFromIterator === CairoResultVariant.Ok; + return; + } + if (content instanceof CairoTypeResult) { + assert( + isUndefined(variant), + 'when "content" parameter is a CairoTypeResult, do not define "variant" parameter.' + ); + this.content = content.content; + this.isVariantOk = content.isVariantOk; + this.resultCairoType = content.resultCairoType; + return; + } + CairoTypeResult.validate(content, resultCairoType, variant); + if (content && typeof content === 'object' && content !== null && 'toApiRequest' in content) { + // "content" is a CairoType + assert( + !isUndefined(variant), + '"variant" parameter is mandatory when creating a new Cairo Result from a CairoType.' + ); + this.content = content as CairoType; + this.isVariantOk = variant === CairoResultVariant.Ok; + return; + } + if (content instanceof CairoOption) { + // "content" is a CairoOption + assert( + !isUndefined(variant), + '"variant" parameter is mandatory when creating a new Cairo Result from a Cairo Enum or raw data.' + ); + const option = new CairoTypeOption( + content.unwrap(), + CairoTypeResult.getVariantTypes(resultCairoType)[variant], + strategy, + content.isSome() ? CairoOptionVariant.Some : CairoOptionVariant.None + ); + this.content = option; + this.isVariantOk = variant === CairoResultVariant.Ok; + return; + } + if (content instanceof CairoResult) { + // "content" is a CairoResult + if (subType === false && !isUndefined(variant)) { + throw new Error( + 'when "content" parameter is a CairoResult and subType is false, do not define "variant" parameter.' + ); + } + const variantForResult = content.isOk() ? CairoResultVariant.Ok : CairoResultVariant.Err; + const typeForResult = subType + ? CairoTypeResult.getVariantTypes(resultCairoType)[variant as number] + : resultCairoType; + const result = new CairoTypeResult( + content.unwrap(), + typeForResult, + strategy, + variantForResult, + true // recursive sub-type + ); + this.content = subType ? result : result.content; + const isVariantOk = variant === CairoResultVariant.Ok; + this.isVariantOk = subType ? isVariantOk : content.isOk(); + return; + } + // not an iterator, not an CairoType, neither a CairoOption, CairoResult, CairoCustomEnum -> so is low level data (BigNumberish, array, object) + assert( + !isUndefined(variant), + '"variant" parameter is mandatory when creating a new Cairo Result from a Cairo Enum or raw data.' + ); + const elementType = CairoTypeResult.getVariantTypes(resultCairoType)[variant]; + const constructor = strategy.constructors[elementType]; + if (constructor) { + this.content = constructor(content, elementType); + } else { + const dynamicSelectors = Object.entries(strategy.dynamicSelectors); + const matchingSelector = dynamicSelectors.find(([, selectorFn]) => selectorFn(elementType)); + if (matchingSelector) { + const [selectorName] = matchingSelector; + const dynamicConstructor = strategy.constructors[selectorName]; + if (dynamicConstructor) { + this.content = dynamicConstructor(content, elementType); + } + } else { + throw new Error(`"${elementType}" is not a valid Cairo type`); + } + } + this.isVariantOk = variant === CairoResultVariant.Ok; + } + + /** + * Parse data from iterator into CairoType instances using the provided parsing strategy. + * + * This is the core parsing logic that consumes data sequentially from an iterator and + * converts it into proper CairoType instances. It handles: + * - Direct constructors (primitive types like u8, u256, etc.) + * - Dynamic selectors (complex types like nested fixed arrays) + * - Unknown types (stored as raw strings for later error handling) + * + * @param {Iterator} responseIterator - Iterator over string data to parse + * @param {string} elementType - The Cairo result type (e.g., "core::result::Result::") + * @param {ParsingStrategy} strategy - The parsing strategy containing constructors and selectors + * @returns {CairoType} CairoType instance + * @private + */ + private static parser( + responseIterator: Iterator, + elementType: string, + strategy: ParsingStrategy + ): CairoType { + const constructor = strategy.constructors[elementType]; + if (constructor) { + return constructor(responseIterator, elementType); + } + const dynamicSelectors = Object.entries(strategy.dynamicSelectors); + const matchingSelector = dynamicSelectors.find(([, selectorFn]) => selectorFn(elementType)); + + if (matchingSelector) { + const [selectorName] = matchingSelector; + const dynamicConstructor = strategy.constructors[selectorName]; + if (dynamicConstructor) { + return dynamicConstructor(responseIterator, elementType); + } + } + // Unknown type - collect raw values, defer error + const rawValues = getNext(responseIterator); + return rawValues as unknown as CairoType; + } + + /** + * Retrieve the Cairo content type from a Cairo Result type. + * @param {string} type - The Cairo Result type string. + * @returns {string[]} The Cairo types of the possible contents of the Cairo Result. + * @example + * ```typescript + * const result = CairoTypeResult.getVariantSomeType("core::result::Result::"); + * // result = [" core::integer::u8", "core::integer::u16"] + * ``` + */ + static getVariantTypes(type: string): string[] { + const matchArray = type.match(/(?<=<).+(?=>)/); + if (matchArray === null) + throw new Error(`ABI type ${type} do not includes 2 types enclosed in <>.`); + const subTypes = CairoTuple.extractCairo1Tuple(`(${matchArray[0]})`) as string[]; + assert( + subTypes.length === 2, + `ABI type ${type} is not including 2 sub types. Found ${subTypes.length}.` + ); + return subTypes; + } + + /** + * Validate input data for CairoTypeResult creation. + * @param {unknown} input - Input data to validate + * @param {string} type - The Cairo Result type string (e.g., "core::result::Result::") + * @throws Error if input is invalid + * @example + * ```typescript + * CairoTypeResult.validate(200, "core::result::Result::", CairoResultVariant.Err); // passes + * CairoTypeResult.validate(200, "wrong", 3); // throws + * ``` + */ + static validate(input: unknown, type: string, variant: VariantType | undefined): void { + assert( + CairoTypeResult.isAbiType(type), + `The type ${type} is not a Cairo Result. Needs core::result::Result::.` + ); + if (!isUndefined(variant)) { + const numberVariant = Number(variant); + assert( + [0, 1].includes(numberVariant), + 'In Cairo Result, only 0 or 1 variants are authorized.' + ); + } + } + + /** + * Check if input data is valid for CairoTypeResult creation. + * @param {unknown} input - Input data to check + * @param {string} type - The Cairo Result type (e.g., "core::result::Result::") + * @param {VariantType} variant - The variant of the Result: CairoResultVariant.Ok (0), or CairoResultVariant.Err (1) + * @returns {boolean} true if valid, false otherwise + * @example + * ```typescript + * const isValid1 = CairoTypeResult.is(200, "core::result::Result::", CairoResultVariant.Ok"); // true + * const isValid2 = CairoTypeResult.is(200, "wrong", 3); // false + * ``` + */ + static is(input: unknown, type: string, variant: VariantType): boolean { + try { + CairoTypeResult.validate(input, type, variant); + return true; + } catch { + return false; + } + } + + /** + * Checks if the given string represents a valid Cairo Result type format. + * + * A valid Cairo Result type must follow the pattern: "core::result::Result::" + * where type is any valid Cairo type. + * @param {string} type - The type string to validate + * @returns {boolean} `true` if the type is a valid Cairo Result format, `false` otherwise + * @example + * ```typescript + * CairoTypeResult.isAbiType("core::result::Result::"); // true + * ``` + */ + static isAbiType(type: string): boolean { + return isTypeResult(type); + } + + /** + * Serialize the Cairo Result into hex strings for Starknet API requests. + * + * Converts all CairoType elements in this Cairo Result into their hex string representation + * by calling toApiRequest(). This is used when + * sending data to the Starknet network. + * + * @returns {string[]} Array of hex strings ready for API requests + * @example + * ```typescript + * const myResult = new CairoTypeResult(8, "core::result::Result::", strategy, CairoResultVariant.Err); + * const result = myResult.toApiRequest(); // ['0x1', '0x8'] + * ``` + */ + public toApiRequest(): string[] { + const result = [this.isVariantOk ? '0x00' : '0x01']; + result.push(this.content!.toApiRequest()); + return addCompiledFlag(result.flat()); + } + + /** + * Decompose the CairoTypeResult instance into a CairoResult instance. + * + * Transforms CairoType instances into their final parsed values using the strategy's + * response parsers (e.g., CairoUint8 → BigInt). This method is used primarily for + * parsing API responses into user-friendly formats. + * + * @param {ParsingStrategy} strategy - Parsing strategy for response parsing + * @returns {CairoResult} a CairoResultInstance, with parsed variant (BigInt, numbers, nested arrays, etc.) + * @example + * ```typescript + * const myResult = new CairoTypedResult(3, "core::result::Result::", hdParsingStrategy, CairoResultVariant.Some); + * const parsed = myResult.decompose(hdParsingStrategy); // CairoResult{ Some: 3n } + * ``` + */ + public decompose(strategy: ParsingStrategy): CairoResult { + const { content } = this; + // For raw string values (unsupported types), throw error + const elementType = CairoTypeResult.getVariantTypes(this.resultCairoType)[ + this.isVariantOk ? CairoResultVariant.Ok : CairoResultVariant.Err + ]; + if (typeof content === 'string') { + throw new Error(`No parser found for element type: ${elementType} in parsing strategy`); + } + let parserName: string = elementType; + if (content instanceof CairoType) { + if (Object.hasOwn(content, 'dynamicSelector')) { + // dynamic recursive CairoType + parserName = (content as any).dynamicSelector; + } + } + const responseParser = strategy.response[parserName]; + if (responseParser) { + return new CairoResult( + this.isVariantOk ? CairoResultVariant.Ok : CairoResultVariant.Err, + responseParser(content as CairoType) + ); + } + // No response parser found - throw error instead of fallback magic + throw new Error( + `No response parser found for element type: ${elementType} in parsing strategy` + ); + } +} diff --git a/src/utils/cairoDataTypes/tuple.ts b/src/utils/cairoDataTypes/tuple.ts index c0a866544..7b11b2b53 100644 --- a/src/utils/cairoDataTypes/tuple.ts +++ b/src/utils/cairoDataTypes/tuple.ts @@ -274,10 +274,12 @@ export class CairoTuple extends CairoType { /** * Parse sub-tuples by extracting nested parentheses. - * @private */ // eslint-disable-next-line no-plusplus - private static parseSubTuple(s: string) { + static parseSubTuple(s: string): { + subTuple: string[]; + result: string; + } { if (!s.includes('(')) return { subTuple: [], result: s }; const subTuple: string[] = []; let result = ''; @@ -370,9 +372,8 @@ export class CairoTuple extends CairoType { * A cairo 1 tuple is made with (val1, val2). * No named tuples in Cairo 1. * See https://www.starknet.io/cairo-book/ch02-02-data-types.html?highlight=tuple#the-tuple-type - * @private */ - private static extractCairo1Tuple(type: string): (string | { name: string; type: string })[] { + static extractCairo1Tuple(type: string): (string | { name: string; type: string })[] { // Support both named and un-named tuples const input = type.slice(1, -1); // remove first lvl () const result: (string | { name: string; type: string })[] = []; diff --git a/src/utils/calldata/index.ts b/src/utils/calldata/index.ts index 40ff61b4f..70e049ea3 100644 --- a/src/utils/calldata/index.ts +++ b/src/utils/calldata/index.ts @@ -44,6 +44,7 @@ import { parseCalldataField } from './requestParser'; import responseParser from './responseParser'; import validateFields from './validate'; import { CairoTypeOption } from '../cairoDataTypes/cairoTypeOption'; +import { CairoTypeResult } from '../cairoDataTypes/cairoTypeResult'; export * as cairo from './cairo'; export { parseCalldataField } from './requestParser'; @@ -261,6 +262,13 @@ export class CallData { ); return getEntries(compiledObj, `${prefix}${kk}.`); } + if (value instanceof CairoTypeResult) { + const apiRequest = value.toApiRequest(); + const compiledObj = Object.fromEntries( + apiRequest.map((item, idx) => [idx.toString(), item]) + ); + return getEntries(compiledObj, `${prefix}${kk}.`); + } // normal object return getEntries(value, `${prefix}${kk}.`); } diff --git a/src/utils/calldata/parser/parsingStrategy.ts b/src/utils/calldata/parser/parsingStrategy.ts index c6af6ce0d..36cf1ce0a 100644 --- a/src/utils/calldata/parser/parsingStrategy.ts +++ b/src/utils/calldata/parser/parsingStrategy.ts @@ -21,10 +21,11 @@ import { CairoTuple } from '../../cairoDataTypes/tuple'; import { CairoSecp256k1Point } from '../../cairoDataTypes/secp256k1Point'; import { CairoType } from '../../cairoDataTypes/cairoType.interface'; import assert from '../../assert'; -import { isTypeArray, isTypeOption, isTypeTuple } from '../cairo'; +import { isTypeArray, isTypeOption, isTypeResult, isTypeTuple } from '../cairo'; import { CairoTypeOption } from '../../cairoDataTypes/cairoTypeOption'; import type { CairoOptionVariant, CairoResultVariant } from '../enum'; import { isUndefined } from '../../typed'; +import { CairoTypeResult } from '../../cairoDataTypes/cairoTypeResult'; /** * Parsing map for constructors and response parsers @@ -180,6 +181,15 @@ export const hdParsingStrategy: ParsingStrategy = { const variantNumber = isUndefined(variant) ? undefined : Number(variant); return new CairoTypeOption(input, type, hdParsingStrategy, variantNumber); }, + [CairoTypeResult.dynamicSelector]: ( + input: Iterator | unknown, + type?: string, + variant?: VariantType + ) => { + assert(!!type, 'CairoTypeResult constructor requires "type" parameter.'); + const variantNumber = isUndefined(variant) ? undefined : Number(variant); + return new CairoTypeResult(input, type, hdParsingStrategy, variantNumber); + }, }, dynamicSelectors: { [CairoFixedArray.dynamicSelector]: (type: string) => { @@ -194,6 +204,9 @@ export const hdParsingStrategy: ParsingStrategy = { [CairoTypeOption.dynamicSelector]: (type: string) => { return isTypeOption(type); }, + [CairoTypeResult.dynamicSelector]: (type: string) => { + return isTypeResult(type); + }, // TODO: add more dynamic selectors here }, response: { @@ -225,5 +238,7 @@ export const hdParsingStrategy: ParsingStrategy = { (instance as CairoTuple).decompose(hdParsingStrategy), [CairoTypeOption.dynamicSelector]: (instance: CairoType) => (instance as CairoTypeOption).decompose(hdParsingStrategy), + [CairoTypeResult.dynamicSelector]: (instance: CairoType) => + (instance as CairoTypeResult).decompose(hdParsingStrategy), }, } as const; diff --git a/src/utils/calldata/propertyOrder.ts b/src/utils/calldata/propertyOrder.ts index 272d635e7..af50ec727 100644 --- a/src/utils/calldata/propertyOrder.ts +++ b/src/utils/calldata/propertyOrder.ts @@ -37,6 +37,7 @@ import { CairoByteArray } from '../cairoDataTypes/byteArray'; import { CairoSecp256k1Point } from '../cairoDataTypes/secp256k1Point'; import { CairoTypeOption } from '../cairoDataTypes/cairoTypeOption'; import { type ParsingStrategy } from './parser'; +import { CairoTypeResult } from '../cairoDataTypes/cairoTypeResult'; function errorU256(key: string) { return Error( @@ -207,24 +208,29 @@ export default function orderPropsByAbi( abiObject: AbiEntry ): CairoTypeEnum => { if (isTypeResult(abiObject.name)) { - const unorderedResult = unorderedObject2 as CairoResult; - const resultOkType: string = abiObject.name.substring( - abiObject.name.indexOf('<') + 1, - abiObject.name.lastIndexOf(',') - ); - const resultErrType: string = abiObject.name.substring( - abiObject.name.indexOf(',') + 1, - abiObject.name.lastIndexOf('>') - ); - if (unorderedResult.isOk()) { - return new CairoResult( - CairoResultVariant.Ok, - orderInput(unorderedResult.unwrap(), resultOkType) + if (unorderedObject2 instanceof CairoResult) { + const unorderedResult = unorderedObject2 as CairoResult; + const resultType: string = CairoTypeResult.getVariantTypes(abiObject.name)[ + unorderedResult.isOk() ? CairoResultVariant.Ok : CairoResultVariant.Err + ]; + return new CairoTypeResult( + orderInput(unorderedResult.unwrap(), resultType), + abiObject.name, + parseStrategy, + unorderedResult.isOk() ? CairoResultVariant.Ok : CairoResultVariant.Err ); } - return new CairoResult( - CairoResultVariant.Err, - orderInput(unorderedResult.unwrap(), resultErrType) + const unorderedResult = unorderedObject2 as CairoTypeResult; + return new CairoTypeResult( + orderInput( + unorderedResult.content, + CairoTypeResult.getVariantTypes(abiObject.name)[ + unorderedResult.isVariantOk ? CairoResultVariant.Ok : CairoResultVariant.Err + ] + ), + abiObject.name, + parseStrategy, + unorderedResult.isVariantOk ? CairoResultVariant.Ok : CairoResultVariant.Err ); } if (isTypeOption(abiObject.name)) { diff --git a/src/utils/calldata/requestParser.ts b/src/utils/calldata/requestParser.ts index 554abb961..a1a7955eb 100644 --- a/src/utils/calldata/requestParser.ts +++ b/src/utils/calldata/requestParser.ts @@ -40,15 +40,10 @@ import { isTypeStruct, isTypeTuple, } from './cairo'; -import { - CairoCustomEnum, - CairoOption, - CairoOptionVariant, - CairoResult, - CairoResultVariant, -} from './enum'; +import { CairoCustomEnum, CairoOption, CairoOptionVariant, CairoResult } from './enum'; import { AbiParserInterface } from './parser'; import { CairoTypeOption } from '../cairoDataTypes/cairoTypeOption'; +import { CairoTypeResult } from '../cairoDataTypes/cairoTypeResult'; // TODO: cleanup implementations to work with unknown, instead of blind casting with 'as' @@ -224,49 +219,18 @@ function parseCalldataValue({ } // Result Enum if (isTypeResult(type)) { - const myResult = element as CairoResult; - if (myResult.isOk()) { - const listTypeVariant = variants.find((variant) => variant.name === 'Ok'); - if (isUndefined(listTypeVariant)) { - throw Error(`Error in abi : Result has no 'Ok' variant.`); - } - const typeVariantOk = listTypeVariant.type; - if (typeVariantOk === '()') { - return CairoResultVariant.Ok.toString(); - } - const parsedParameter = parseCalldataValue({ - element: myResult.unwrap(), - type: typeVariantOk, - structs, - enums, - parser, - }); - if (Array.isArray(parsedParameter)) { - return [CairoResultVariant.Ok.toString(), ...parsedParameter]; - } - return [CairoResultVariant.Ok.toString(), parsedParameter]; + let myResult: CairoTypeResult; + if (element instanceof CairoResult) { + myResult = new CairoTypeResult(element, type, parser.parsingStrategy); + } else { + myResult = element as CairoTypeResult; } - - // is Result::Err - const listTypeVariant = variants.find((variant) => variant.name === 'Err'); + const variantName = myResult.isVariantOk ? 'Ok' : 'Err'; + const listTypeVariant = variants.find((variant) => variant.name === variantName); if (isUndefined(listTypeVariant)) { - throw Error(`Error in abi : Result has no 'Err' variant.`); - } - const typeVariantErr = listTypeVariant.type; - if (typeVariantErr === '()') { - return CairoResultVariant.Err.toString(); - } - const parsedParameter = parseCalldataValue({ - element: myResult.unwrap(), - type: typeVariantErr, - structs, - enums, - parser, - }); - if (Array.isArray(parsedParameter)) { - return [CairoResultVariant.Err.toString(), ...parsedParameter]; + throw Error(`Error in abi : Result has no '${variantName}' variant.`); } - return [CairoResultVariant.Err.toString(), parsedParameter]; + return myResult.toApiRequest(); } // Custom Enum const myEnum = element as CairoCustomEnum; diff --git a/src/utils/calldata/validate.ts b/src/utils/calldata/validate.ts index 030923504..a6438967c 100644 --- a/src/utils/calldata/validate.ts +++ b/src/utils/calldata/validate.ts @@ -41,7 +41,8 @@ import { isTypeUint, } from './cairo'; import { CairoTypeOption } from '../cairoDataTypes/cairoTypeOption'; -import { CairoOption } from './enum'; +import { CairoOption, CairoResult } from './enum'; +import { CairoTypeResult } from '../cairoDataTypes/cairoTypeResult'; // TODO: separate validate is redundant as CairoTypes are validated during construction. // TODO: This validate should provide added valie method base validate poiniting to incorect value for method, opt. using color coding @@ -226,10 +227,13 @@ const validateEnum = (parameter: any, input: AbiEntry) => { return; // CairoTypeOption Enum } if (isTypeOption(input.type) && parameter instanceof CairoOption) { + return; // CairoOption Enum + } + if (isTypeResult(input.type) && parameter instanceof CairoTypeResult) { return; // CairoTypeOption Enum } - if (isTypeResult(input.type) && keys.includes('isOk') && keys.includes('isErr')) { - return; // Result Enum + if (isTypeResult(input.type) && parameter instanceof CairoResult) { + return; // CairoResult Enum } if (keys.includes('variant') && keys.includes('activeVariant')) { return; // Custom Enum From 551783e876f2c9a81c23bf6bdd4ad7a99ea7ddc5 Mon Sep 17 00:00:00 2001 From: PhilippeR26 Date: Wed, 17 Sep 2025 12:07:22 +0200 Subject: [PATCH 07/17] feat: cairoStruct --- src/contract/default.ts | 2 +- src/index.ts | 3 + src/types/lib/contract/abi.ts | 4 +- src/utils/cairoDataTypes/array.ts | 19 +- src/utils/cairoDataTypes/cairoStruct.ts | 200 ++++++++++ src/utils/cairoDataTypes/cairoTypeEnum.tmp | 369 +++++++++++++++++++ src/utils/cairoDataTypes/cairoTypeOption.ts | 28 +- src/utils/cairoDataTypes/cairoTypeResult.ts | 12 +- src/utils/cairoDataTypes/fixedArray.ts | 20 +- src/utils/cairoDataTypes/tuple.ts | 18 +- src/utils/calldata/parser/parser-0-1.1.0.ts | 24 +- src/utils/calldata/parser/parser-2.0.0.ts | 47 ++- src/utils/calldata/parser/parsingStrategy.ts | 59 ++- src/utils/helpers.ts | 26 ++ 14 files changed, 763 insertions(+), 68 deletions(-) create mode 100644 src/utils/cairoDataTypes/cairoStruct.ts create mode 100644 src/utils/cairoDataTypes/cairoTypeEnum.tmp diff --git a/src/contract/default.ts b/src/contract/default.ts index 2ab67953a..aaa3f278b 100644 --- a/src/contract/default.ts +++ b/src/contract/default.ts @@ -130,7 +130,7 @@ export class Contract implements ContractInterface { readonly [key: string]: AsyncContractFunction | any; - private callData: CallData; + public callData: CallData; public withOptionsProps?: WithOptions; diff --git a/src/index.ts b/src/index.ts index 6fc76a522..70597f749 100644 --- a/src/index.ts +++ b/src/index.ts @@ -59,6 +59,8 @@ export * from './utils/cairoDataTypes/byteArray'; export * from './utils/cairoDataTypes/secp256k1Point'; export * from './utils/cairoDataTypes/cairoTypeOption'; export * from './utils/cairoDataTypes/cairoTypeResult'; +export * from './utils/cairoDataTypes/cairoStruct'; +// export * from './utils/cairoDataTypes/cairoTypeEnum'; export * from './utils/address'; export * from './utils/calldata'; @@ -66,6 +68,7 @@ export * from './utils/calldata/enum'; export * from './utils/contract'; export * from './utils/transactionReceipt/transactionReceipt'; export * from './utils/units'; +export * from './utils/helpers'; export * as wallet from './wallet/connect'; export * from './global/config'; export * from './global/logger'; diff --git a/src/types/lib/contract/abi.ts b/src/types/lib/contract/abi.ts index d03b56058..3466734c9 100644 --- a/src/types/lib/contract/abi.ts +++ b/src/types/lib/contract/abi.ts @@ -25,9 +25,9 @@ export type FunctionAbi = { export type AbiStructs = { [name: string]: AbiStruct }; export type AbiStruct = { - members: (AbiEntry & { offset: number })[]; + members: (AbiEntry & { offset?: number })[]; // "offset" only in Cairo 0 Abi name: string; - size: number; + size?: number; // "size" only in Cairo 0 Abi type: 'struct'; }; diff --git a/src/utils/cairoDataTypes/array.ts b/src/utils/cairoDataTypes/array.ts index f0d75e6dd..651e124fb 100644 --- a/src/utils/cairoDataTypes/array.ts +++ b/src/utils/cairoDataTypes/array.ts @@ -5,7 +5,8 @@ import { felt, getArrayType, isTypeArray } from '../calldata/cairo'; import { type ParsingStrategy } from '../calldata/parser/parsingStrategy'; import { CairoType } from './cairoType.interface'; import { CairoTypeOption } from './cairoTypeOption'; -import { CairoOption } from '../calldata/enum'; +import { CairoOption, CairoResult } from '../calldata/enum'; +import { CairoTypeResult } from './cairoTypeResult'; /** * Represents a Cairo dynamic array with runtime-determined length. @@ -121,11 +122,15 @@ export class CairoArray extends CairoType { // "content" is a CairoOption return new CairoTypeOption(contentItem, arrayContentType, strategy); } + if (contentItem instanceof CairoResult) { + // "content" is a CairoResult + return new CairoTypeResult(contentItem, arrayContentType, strategy); + } // not an iterator, not an CairoType, neither a CairoType -> so is low level data (BigNumberish, array, object) const constructor = strategy.constructors[arrayContentType]; if (constructor) { - return constructor(contentItem, arrayContentType); + return constructor(contentItem, strategy, arrayContentType); } const dynamicSelectors = Object.entries(strategy.dynamicSelectors); const matchingSelector = dynamicSelectors.find(([, selectorFn]) => @@ -135,7 +140,7 @@ export class CairoArray extends CairoType { const [selectorName] = matchingSelector; const dynamicConstructor = strategy.constructors[selectorName]; if (dynamicConstructor) { - return dynamicConstructor(contentItem, arrayContentType); + return dynamicConstructor(contentItem, strategy, arrayContentType); } } throw new Error(`"${arrayContentType}" is not a valid Cairo type`); @@ -174,7 +179,9 @@ export class CairoArray extends CairoType { const constructor = strategy.constructors[elementType]; if (constructor) { - return Array.from({ length: arrayLength }, () => constructor(responseIterator, elementType)); + return Array.from({ length: arrayLength }, () => + constructor(responseIterator, strategy, elementType) + ); } // Check dynamic selectors (includes CairoArray, CairoFixedArray, future: tuples, structs, etc.) @@ -186,7 +193,7 @@ export class CairoArray extends CairoType { const dynamicConstructor = strategy.constructors[selectorName]; if (dynamicConstructor) { return Array.from({ length: arrayLength }, () => - dynamicConstructor(responseIterator, elementType) + dynamicConstructor(responseIterator, strategy, elementType) ); } } @@ -360,7 +367,7 @@ export class CairoArray extends CairoType { } const responseParser = strategy.response[parserName]; if (responseParser) { - return responseParser(element); + return responseParser(element, strategy); } // No response parser found - throw error instead of fallback magic diff --git a/src/utils/cairoDataTypes/cairoStruct.ts b/src/utils/cairoDataTypes/cairoStruct.ts new file mode 100644 index 000000000..eaeb0596e --- /dev/null +++ b/src/utils/cairoDataTypes/cairoStruct.ts @@ -0,0 +1,200 @@ +import type { AbiStruct } from '../../types'; +import assert from '../assert'; +import type { ParsingStrategy, VariantType } from '../calldata'; +import { CairoOption } from '../calldata/enum'; +import { addCompiledFlag } from '../helpers'; +import { getNext } from '../num'; +import { CairoType } from './cairoType.interface'; +import { CairoTypeOption } from './cairoTypeOption'; +import { CairoFelt252 } from './felt'; + +export class CairoStruct extends CairoType { + public readonly dynamicSelector: string; + + public readonly content: CairoType[]; + + public readonly abiStruct: AbiStruct; + + constructor(content: unknown, abiStruct: AbiStruct, strategy: ParsingStrategy) { + super(); + this.dynamicSelector = abiStruct.name; + this.abiStruct = abiStruct; + if (content && typeof content === 'object' && 'next' in content) { + // "content" is an iterator + const parsedContent: CairoType[] = CairoStruct.parser( + content as Iterator, + abiStruct, + strategy + ); + this.content = parsedContent; + return; + } + if (content instanceof CairoStruct) { + this.content = content.content; + this.abiStruct = content.abiStruct; + this.dynamicSelector = content.dynamicSelector; + return; + } + CairoStruct.validate(content, abiStruct); + const structContentType: string[] = CairoStruct.getStructMembersTypes(abiStruct); + const resultContent: any[] = CairoStruct.extractValuesArray(content).map( + (contentItem: any, index: number) => { + if ( + contentItem && + typeof contentItem === 'object' && + contentItem !== null && + 'toApiRequest' in contentItem + ) { + // "content" is a CairoType + return contentItem as CairoType; + } + if (contentItem instanceof CairoOption) { + // "content" is a CairoOption + return new CairoTypeOption(contentItem, structContentType[index], strategy); + } + + // TODO: add CairoResult + + // not an iterator, not an CairoType, neither a CairoType -> so is low level data (BigNumberish, array, object) + + const constructor = strategy.constructors[structContentType[index]]; + if (constructor) { + return constructor(contentItem, strategy, structContentType[index]); + } + const dynamicSelectors = Object.entries(strategy.dynamicSelectors); + const matchingSelector = dynamicSelectors.find(([, selectorFn]) => + selectorFn(structContentType[index]) + ); + if (matchingSelector) { + const [selectorName] = matchingSelector; + const dynamicConstructor = strategy.constructors[selectorName]; + if (dynamicConstructor) { + return dynamicConstructor(contentItem, strategy, structContentType[index]); + } + } + throw new Error(`"${structContentType[index]}" is not a valid Cairo type`); + } + ); + this.content = resultContent; + } + + private static parser( + responseIterator: Iterator, + abiStruct: AbiStruct, + strategy: ParsingStrategy + ): CairoType[] { + const elementTypes: string[] = CairoStruct.getStructMembersTypes(abiStruct); + + return elementTypes.map((elementType: string) => { + const constructor = strategy.constructors[elementType]; + if (constructor) { + return constructor(responseIterator, strategy, elementType); + } + + // Check dynamic selectors (includes CairoArray, CairoFixedArray, CairoTuple, etc.) + const dynamicSelectors = Object.entries(strategy.dynamicSelectors); + const matchingSelector = dynamicSelectors.find(([, selectorFn]) => selectorFn(elementType)); + + if (matchingSelector) { + const [selectorName] = matchingSelector; + const dynamicConstructor = strategy.constructors[selectorName]; + if (dynamicConstructor) { + return dynamicConstructor(responseIterator, strategy, elementType); + } + } + + // Unknown type - fallback to felt252 constructor + const feltConstructor = strategy.constructors[CairoFelt252.abiSelector]; + if (feltConstructor) { + return feltConstructor(responseIterator, strategy, elementType); + } + + // If even felt252 constructor is not available, collect raw value for error handling + const rawValue = getNext(responseIterator); + return rawValue as unknown as CairoType; + }); + } + + static validate(input: unknown, abiStruct?: AbiStruct): void { + assert( + Array.isArray(input) || (typeof input === 'object' && input !== null), + `Invalid input: expected Array or Object, got ${typeof input}` + ); + if (!abiStruct) return; // cannot validate without ABI + assert(abiStruct.type === 'struct', `Invalid ABI: expected struct, got ${abiStruct.type}`); + const lengthInput = Array.isArray(input) ? input.length : Object.keys(input).length; + assert( + abiStruct.members.length === lengthInput, + `Invalid input: expected ${abiStruct.members.length} members, got ${lengthInput}` + ); + } + + static is(data: any, _type?: string, _variant?: VariantType): boolean { + try { + CairoStruct.validate(data); + return true; + } catch { + return false; + } + } + + static isAbiType(_type: string): boolean { + // A Cairo struct type (it's name) do not include any special pattern allowing to identify it directly. + return true; + } + + private static extractValuesArray(input: unknown): any[] { + if (Array.isArray(input)) { + return input; + } + const inputObj = input as Record; + return Object.values(inputObj); + } + + private static getStructMembersTypes(type: AbiStruct): string[] { + return type.members.map((member) => member.type); + } + + public static extractStructMembersNames(type: AbiStruct): string[] { + return type.members.map((member) => member.name); + } + + toApiRequest(): string[] { + const result = this.content.flatMap((element) => element.toApiRequest()); + return addCompiledFlag(result); + } + + public decompose(strategy: ParsingStrategy): Object { + const structContentType = CairoStruct.getStructMembersTypes(this.abiStruct); + const result = this.content.map((element: CairoType, index: number) => { + // For raw string values (unsupported types), throw error + if (typeof element === 'string') { + const elementType = + typeof structContentType[index] === 'string' + ? (structContentType[index] as string) + : (structContentType[index] as any).type; + throw new Error(`No parser found for element type: ${elementType} in parsing strategy`); + } + let parserName: string = structContentType[index] as string; + if (element instanceof CairoType) { + if (Object.hasOwn(element, 'dynamicSelector')) { + // dynamic recursive CairoType + parserName = (element as any).dynamicSelector; + } + } + const responseParser = strategy.response[parserName]; + if (responseParser) { + return responseParser(element, strategy); + } + // No response parser found - throw error instead of fallback magic + throw new Error( + `No response parser found for element type: ${structContentType[index]} in parsing strategy` + ); + }); + const struct: Record = {}; + result.forEach((el, index) => { + struct[this.abiStruct.members[index].name] = el; + }); + return struct; + } +} diff --git a/src/utils/cairoDataTypes/cairoTypeEnum.tmp b/src/utils/cairoDataTypes/cairoTypeEnum.tmp new file mode 100644 index 000000000..b075645c7 --- /dev/null +++ b/src/utils/cairoDataTypes/cairoTypeEnum.tmp @@ -0,0 +1,369 @@ +import assert from '../assert'; +import { addCompiledFlag } from '../helpers'; +import { getNext } from '../num'; +import { type ParsingStrategy, type VariantType } from '../calldata/parser/parsingStrategy'; +import { CairoType } from './cairoType.interface'; +import { isTypeResult } from '../calldata/cairo'; +import { isUndefined } from '../typed'; +import { CairoOptionVariant, CairoOption, CairoResultVariant, CairoResult } from '../calldata/enum'; +import { CairoTuple } from './tuple'; +import { CairoTypeOption } from './cairoTypeOption'; + +/** + * Represents a Cairo custom enum. + * + * Key Features: + * - Internal usage class (users are using "CairoCustomEnum" class). + * - Unified constructor handling user input, API responses, and CairoType instances + * - Automatic type validation and conversion using parsing strategies + * - Bi-directional serialization (to/from Starknet API format) + * - Support for nested types + * - Direct CallData.compile() integration + * - Comprehensive type checking and validation + */ +export class CairoTypeEnum extends CairoType { + static dynamicSelector = 'CairoTypeEnum' as const; + + public readonly dynamicSelector = CairoTypeEnum.dynamicSelector; + + /* CairoType instance representing the content of a Cairo enum. */ + public readonly content: CairoType | undefined; + + /* Cairo type of the result enum. */ + public readonly resultCairoType: string; + + /* True if the current variant is 'Ok', false if 'Err'. */ + public readonly isVariantOk: boolean; + + /** + * CairoTypeResult provides a complete implementation for handling Cairo's result, + * which have the form "core::result::Result::" (e.g., "core::result::Result::"). + * Internal usage class (users are using "CairoResult" class). + * It supports nested types, type validation, encoding, and parsing from various sources. + * @param {unknown} content - Input data (array, object, BigNumberish, + * Iterator, CairoOption, CairoResult, CairoCustomEnum, or CairoType instance). + * @param {string} resultCairoType - Cairo result type string (e.g., "core::result::Result::"). + * @param {ParsingStrategy} strategy - Parsing strategy for element type handling (e.g. hdParsingStrategy). + * @param {CairoResultVariant | number} [variant] - (optional) variant of the result: CairoResultVariant.Ok (0), or CairoResultVariant.Err (1). If "content" is an iterator, this parameter must be omitted. + * @param {boolean} [subType=false] - optional default=false. Use "true" if called in nested CairoResult instances. + * @example + * ```typescript + * import { CairoTypeResult, hdParsingStrategy, CairoResultVariant } from 'starknet'; + * // Simple Result with Ok variant + * const myResult1 = new CairoTypeResult(7, "core::result::Result::", hdParsingStrategy, CairoResultVariant.Ok); + * console.log(myResult1.toApiRequest()); // ['0x01','0x7b'] + * console.log(myResult1.decompose(hdParsingStrategy)); // CairoResult instance with content 7n and Ok variant. + * // Simple Result with Err variant + * const myResult2 = new CairoTypeResult(11, "core::result::Result::", hdParsingStrategy, CairoResultVariant.Err); + * + * // Nested Cairo types + * const myTuple0 = new CairoTuple([234, [1, 2, 3]], "(core::integer::u8, core::array::Array::)", hdParsingStrategy); + * const myResult3 = new CairoTypeResult(myTuple0, "core::result::Result::<(core::integer::u8, core::array::Array::), core::integer::u16>", hdParsingStrategy, CairoResultVariant.Ok); + * console.log(CallData.compile([myResult3])); // [ "0", "234", "3", "1", "2", "3" ] + * + * // From API response + * const apiData = ['0x0', '0x20'][Symbol.iterator](); + * const fromApiResult = new CairoTypeResult(apiData, "core::result::Result::", hdParsingStrategy); // CairoResult instance with content 32n and Ok variant. + * ``` + */ + constructor( + content: unknown, + resultCairoType: string, + strategy: ParsingStrategy, + variant?: CairoResultVariant | number, + subType: boolean = false + ) { + super(); + this.resultCairoType = resultCairoType; + assert(!isUndefined(content), '"content" parameter has to be defined.'); + assert(content !== null, '"content" parameter has to be defined.'); + if (typeof content === 'object' && 'next' in content) { + // "content" is an iterator + assert( + isUndefined(variant), + 'when "content" parameter is an iterator, do not define "variant" parameter.' + ); + const variantFromIterator = Number(getNext(content as Iterator)); + const activeVariantType = + CairoTypeResult.getVariantTypes(resultCairoType)[variantFromIterator]; + const parsedContent: CairoType = CairoTypeResult.parser( + content as Iterator, + activeVariantType, + strategy + ); + this.content = parsedContent; + this.isVariantOk = variantFromIterator === CairoResultVariant.Ok; + return; + } + if (content instanceof CairoTypeResult) { + assert( + isUndefined(variant), + 'when "content" parameter is a CairoTypeResult, do not define "variant" parameter.' + ); + this.content = content.content; + this.isVariantOk = content.isVariantOk; + this.resultCairoType = content.resultCairoType; + return; + } + CairoTypeResult.validate(content, resultCairoType, variant); + if (content && typeof content === 'object' && content !== null && 'toApiRequest' in content) { + // "content" is a CairoType + assert( + !isUndefined(variant), + '"variant" parameter is mandatory when creating a new Cairo Result from a CairoType.' + ); + this.content = content as CairoType; + this.isVariantOk = variant === CairoResultVariant.Ok; + return; + } + if (content instanceof CairoOption) { + // "content" is a CairoOption + assert( + !isUndefined(variant), + '"variant" parameter is mandatory when creating a new Cairo Result from a Cairo Enum or raw data.' + ); + const option = new CairoTypeOption( + content.unwrap(), + CairoTypeResult.getVariantTypes(resultCairoType)[variant], + strategy, + content.isSome() ? CairoOptionVariant.Some : CairoOptionVariant.None + ); + this.content = option; + this.isVariantOk = variant === CairoResultVariant.Ok; + return; + } + if (content instanceof CairoResult) { + // "content" is a CairoResult + if (subType === false && !isUndefined(variant)) { + throw new Error( + 'when "content" parameter is a CairoResult and subType is false, do not define "variant" parameter.' + ); + } + const variantForResult = content.isOk() ? CairoResultVariant.Ok : CairoResultVariant.Err; + const typeForResult = subType + ? CairoTypeResult.getVariantTypes(resultCairoType)[variant as number] + : resultCairoType; + const result = new CairoTypeResult( + content.unwrap(), + typeForResult, + strategy, + variantForResult, + true // recursive sub-type + ); + this.content = subType ? result : result.content; + const isVariantOk = variant === CairoResultVariant.Ok; + this.isVariantOk = subType ? isVariantOk : content.isOk(); + return; + } + // not an iterator, not an CairoType, neither a CairoOption, CairoResult, CairoCustomEnum -> so is low level data (BigNumberish, array, object) + assert( + !isUndefined(variant), + '"variant" parameter is mandatory when creating a new Cairo Result from a Cairo Enum or raw data.' + ); + const elementType = CairoTypeResult.getVariantTypes(resultCairoType)[variant]; + const constructor = strategy.constructors[elementType]; + if (constructor) { + this.content = constructor(content, elementType); + } else { + const dynamicSelectors = Object.entries(strategy.dynamicSelectors); + const matchingSelector = dynamicSelectors.find(([, selectorFn]) => selectorFn(elementType)); + if (matchingSelector) { + const [selectorName] = matchingSelector; + const dynamicConstructor = strategy.constructors[selectorName]; + if (dynamicConstructor) { + this.content = dynamicConstructor(content, elementType); + } + } else { + throw new Error(`"${elementType}" is not a valid Cairo type`); + } + } + this.isVariantOk = variant === CairoResultVariant.Ok; + } + + /** + * Parse data from iterator into CairoType instances using the provided parsing strategy. + * + * This is the core parsing logic that consumes data sequentially from an iterator and + * converts it into proper CairoType instances. It handles: + * - Direct constructors (primitive types like u8, u256, etc.) + * - Dynamic selectors (complex types like nested fixed arrays) + * - Unknown types (stored as raw strings for later error handling) + * + * @param {Iterator} responseIterator - Iterator over string data to parse + * @param {string} elementType - The Cairo result type (e.g., "core::result::Result::") + * @param {ParsingStrategy} strategy - The parsing strategy containing constructors and selectors + * @returns {CairoType} CairoType instance + * @private + */ + private static parser( + responseIterator: Iterator, + elementType: string, + strategy: ParsingStrategy + ): CairoType { + const constructor = strategy.constructors[elementType]; + if (constructor) { + return constructor(responseIterator, elementType); + } + const dynamicSelectors = Object.entries(strategy.dynamicSelectors); + const matchingSelector = dynamicSelectors.find(([, selectorFn]) => selectorFn(elementType)); + + if (matchingSelector) { + const [selectorName] = matchingSelector; + const dynamicConstructor = strategy.constructors[selectorName]; + if (dynamicConstructor) { + return dynamicConstructor(responseIterator, elementType); + } + } + // Unknown type - collect raw values, defer error + const rawValues = getNext(responseIterator); + return rawValues as unknown as CairoType; + } + + /** + * Retrieve the Cairo content type from a Cairo Result type. + * @param {string} type - The Cairo Result type string. + * @returns {string[]} The Cairo types of the possible contents of the Cairo Result. + * @example + * ```typescript + * const result = CairoTypeResult.getVariantSomeType("core::result::Result::"); + * // result = [" core::integer::u8", "core::integer::u16"] + * ``` + */ + static getVariantTypes(type: string): string[] { + const matchArray = type.match(/(?<=<).+(?=>)/); + if (matchArray === null) + throw new Error(`ABI type ${type} do not includes 2 types enclosed in <>.`); + const subTypes = CairoTuple.extractCairo1Tuple(`(${matchArray[0]})`) as string[]; + assert( + subTypes.length === 2, + `ABI type ${type} is not including 2 sub types. Found ${subTypes.length}.` + ); + return subTypes; + } + + /** + * Validate input data for CairoTypeResult creation. + * @param {unknown} input - Input data to validate + * @param {string} type - The Cairo Result type string (e.g., "core::result::Result::") + * @throws Error if input is invalid + * @example + * ```typescript + * CairoTypeResult.validate(200, "core::result::Result::", CairoResultVariant.Err); // passes + * CairoTypeResult.validate(200, "wrong", 3); // throws + * ``` + */ + static validate(input: unknown, type: string, variant: VariantType | undefined): void { + assert( + CairoTypeResult.isAbiType(type), + `The type ${type} is not a Cairo Result. Needs core::result::Result::.` + ); + if (!isUndefined(variant)) { + const numberVariant = Number(variant); + assert( + [0, 1].includes(numberVariant), + 'In Cairo Result, only 0 or 1 variants are authorized.' + ); + } + } + + /** + * Check if input data is valid for CairoTypeResult creation. + * @param {unknown} input - Input data to check + * @param {string} type - The Cairo Result type (e.g., "core::result::Result::") + * @param {VariantType} variant - The variant of the Result: CairoResultVariant.Ok (0), or CairoResultVariant.Err (1) + * @returns {boolean} true if valid, false otherwise + * @example + * ```typescript + * const isValid1 = CairoTypeResult.is(200, "core::result::Result::", CairoResultVariant.Ok"); // true + * const isValid2 = CairoTypeResult.is(200, "wrong", 3); // false + * ``` + */ + static is(input: unknown, type: string, variant: VariantType): boolean { + try { + CairoTypeResult.validate(input, type, variant); + return true; + } catch { + return false; + } + } + + /** + * Checks if the given string represents a valid Cairo Result type format. + * + * A valid Cairo Result type must follow the pattern: "core::result::Result::" + * where type is any valid Cairo type. + * @param {string} type - The type string to validate + * @returns {boolean} `true` if the type is a valid Cairo Result format, `false` otherwise + * @example + * ```typescript + * CairoTypeResult.isAbiType("core::result::Result::"); // true + * ``` + */ + static isAbiType(type: string): boolean { + return isTypeResult(type); + } + + /** + * Serialize the Cairo Result into hex strings for Starknet API requests. + * + * Converts all CairoType elements in this Cairo Result into their hex string representation + * by calling toApiRequest(). This is used when + * sending data to the Starknet network. + * + * @returns {string[]} Array of hex strings ready for API requests + * @example + * ```typescript + * const myResult = new CairoTypeResult(8, "core::result::Result::", strategy, CairoResultVariant.Err); + * const result = myResult.toApiRequest(); // ['0x1', '0x8'] + * ``` + */ + public toApiRequest(): string[] { + const result = [this.isVariantOk ? '0x00' : '0x01']; + result.push(this.content!.toApiRequest()); + return addCompiledFlag(result.flat()); + } + + /** + * Decompose the CairoTypeResult instance into a CairoResult instance. + * + * Transforms CairoType instances into their final parsed values using the strategy's + * response parsers (e.g., CairoUint8 → BigInt). This method is used primarily for + * parsing API responses into user-friendly formats. + * + * @param {ParsingStrategy} strategy - Parsing strategy for response parsing + * @returns {CairoResult} a CairoResultInstance, with parsed variant (BigInt, numbers, nested arrays, etc.) + * @example + * ```typescript + * const myResult = new CairoTypedResult(3, "core::result::Result::", hdParsingStrategy, CairoResultVariant.Some); + * const parsed = myResult.decompose(hdParsingStrategy); // CairoResult{ Some: 3n } + * ``` + */ + public decompose(strategy: ParsingStrategy): CairoResult { + const { content } = this; + // For raw string values (unsupported types), throw error + const elementType = CairoTypeResult.getVariantTypes(this.resultCairoType)[ + this.isVariantOk ? CairoResultVariant.Ok : CairoResultVariant.Err + ]; + if (typeof content === 'string') { + throw new Error(`No parser found for element type: ${elementType} in parsing strategy`); + } + let parserName: string = elementType; + if (content instanceof CairoType) { + if (Object.hasOwn(content, 'dynamicSelector')) { + // dynamic recursive CairoType + parserName = (content as any).dynamicSelector; + } + } + const responseParser = strategy.response[parserName]; + if (responseParser) { + return new CairoResult( + this.isVariantOk ? CairoResultVariant.Ok : CairoResultVariant.Err, + responseParser(content as CairoType) + ); + } + // No response parser found - throw error instead of fallback magic + throw new Error( + `No response parser found for element type: ${elementType} in parsing strategy` + ); + } +} diff --git a/src/utils/cairoDataTypes/cairoTypeOption.ts b/src/utils/cairoDataTypes/cairoTypeOption.ts index 85a71ed5f..77f6c5224 100644 --- a/src/utils/cairoDataTypes/cairoTypeOption.ts +++ b/src/utils/cairoDataTypes/cairoTypeOption.ts @@ -5,7 +5,9 @@ import { type ParsingStrategy, type VariantType } from '../calldata/parser/parsi import { CairoType } from './cairoType.interface'; import { isTypeOption } from '../calldata/cairo'; import { isUndefined } from '../typed'; -import { CairoOptionVariant, CairoOption } from '../calldata/enum'; +import { CairoOptionVariant, CairoOption, CairoResult, CairoResultVariant } from '../calldata/enum'; +// eslint-disable-next-line import/no-cycle +import { CairoTypeResult } from './cairoTypeResult'; /** * Represents a Cairo Option. @@ -134,6 +136,20 @@ export class CairoTypeOption extends CairoType { this.isVariantSome = option.isVariantSome; return; } + if (content instanceof CairoResult) { + // "content" is a CairoResult & CairoOptionVariant is "Some"" + const result = new CairoTypeResult( + content.unwrap(), + CairoTypeOption.getVariantSomeType(optionCairoType), + strategy, + content.isOk() ? CairoResultVariant.Ok : CairoResultVariant.Err, + false + ); + this.content = result; + this.isVariantSome = true; + return; + } + // not an iterator, not an CairoType, neither a CairoOption, CairoResult, CairoCustomEnum -> so is low level data (BigNumberish, array, object) assert( !isUndefined(variant), @@ -144,7 +160,7 @@ export class CairoTypeOption extends CairoType { const elementType = CairoTypeOption.getVariantSomeType(optionCairoType); const constructor = strategy.constructors[elementType]; if (constructor) { - this.content = constructor(content, elementType); + this.content = constructor(content, strategy, elementType); } else { const dynamicSelectors = Object.entries(strategy.dynamicSelectors); const matchingSelector = dynamicSelectors.find(([, selectorFn]) => @@ -154,7 +170,7 @@ export class CairoTypeOption extends CairoType { const [selectorName] = matchingSelector; const dynamicConstructor = strategy.constructors[selectorName]; if (dynamicConstructor) { - this.content = dynamicConstructor(content, elementType); + this.content = dynamicConstructor(content, strategy, elementType); } } else { throw new Error(`"${elementType}" is not a valid Cairo type`); @@ -197,7 +213,7 @@ export class CairoTypeOption extends CairoType { const elementType = CairoTypeOption.getVariantSomeType(someVariantCairoType); const constructor = strategy.constructors[elementType]; if (constructor) { - return constructor(responseIterator, elementType); + return constructor(responseIterator, strategy, elementType); } const dynamicSelectors = Object.entries(strategy.dynamicSelectors); const matchingSelector = dynamicSelectors.find(([, selectorFn]) => selectorFn(elementType)); @@ -206,7 +222,7 @@ export class CairoTypeOption extends CairoType { const [selectorName] = matchingSelector; const dynamicConstructor = strategy.constructors[selectorName]; if (dynamicConstructor) { - return dynamicConstructor(responseIterator, elementType); + return dynamicConstructor(responseIterator, strategy, elementType); } } // Unknown type - collect raw values, defer error @@ -330,7 +346,7 @@ export class CairoTypeOption extends CairoType { } const responseParser = strategy.response[parserName]; if (responseParser) { - return responseParser(content as CairoType); + return responseParser(content as CairoType, strategy); } // No response parser found - throw error instead of fallback magic diff --git a/src/utils/cairoDataTypes/cairoTypeResult.ts b/src/utils/cairoDataTypes/cairoTypeResult.ts index 867dcb3ca..a48a9e21c 100644 --- a/src/utils/cairoDataTypes/cairoTypeResult.ts +++ b/src/utils/cairoDataTypes/cairoTypeResult.ts @@ -6,7 +6,9 @@ import { CairoType } from './cairoType.interface'; import { isTypeResult } from '../calldata/cairo'; import { isUndefined } from '../typed'; import { CairoOptionVariant, CairoOption, CairoResultVariant, CairoResult } from '../calldata/enum'; +// eslint-disable-next-line import/no-cycle import { CairoTuple } from './tuple'; +// eslint-disable-next-line import/no-cycle import { CairoTypeOption } from './cairoTypeOption'; /** @@ -163,7 +165,7 @@ export class CairoTypeResult extends CairoType { const elementType = CairoTypeResult.getVariantTypes(resultCairoType)[variant]; const constructor = strategy.constructors[elementType]; if (constructor) { - this.content = constructor(content, elementType); + this.content = constructor(content, strategy, elementType); } else { const dynamicSelectors = Object.entries(strategy.dynamicSelectors); const matchingSelector = dynamicSelectors.find(([, selectorFn]) => selectorFn(elementType)); @@ -171,7 +173,7 @@ export class CairoTypeResult extends CairoType { const [selectorName] = matchingSelector; const dynamicConstructor = strategy.constructors[selectorName]; if (dynamicConstructor) { - this.content = dynamicConstructor(content, elementType); + this.content = dynamicConstructor(content, strategy, elementType); } } else { throw new Error(`"${elementType}" is not a valid Cairo type`); @@ -202,7 +204,7 @@ export class CairoTypeResult extends CairoType { ): CairoType { const constructor = strategy.constructors[elementType]; if (constructor) { - return constructor(responseIterator, elementType); + return constructor(responseIterator, strategy, elementType); } const dynamicSelectors = Object.entries(strategy.dynamicSelectors); const matchingSelector = dynamicSelectors.find(([, selectorFn]) => selectorFn(elementType)); @@ -211,7 +213,7 @@ export class CairoTypeResult extends CairoType { const [selectorName] = matchingSelector; const dynamicConstructor = strategy.constructors[selectorName]; if (dynamicConstructor) { - return dynamicConstructor(responseIterator, elementType); + return dynamicConstructor(responseIterator, strategy, elementType); } } // Unknown type - collect raw values, defer error @@ -358,7 +360,7 @@ export class CairoTypeResult extends CairoType { if (responseParser) { return new CairoResult( this.isVariantOk ? CairoResultVariant.Ok : CairoResultVariant.Err, - responseParser(content as CairoType) + responseParser(content as CairoType, strategy) ); } // No response parser found - throw error instead of fallback magic diff --git a/src/utils/cairoDataTypes/fixedArray.ts b/src/utils/cairoDataTypes/fixedArray.ts index e857d4db1..35a60ba8b 100644 --- a/src/utils/cairoDataTypes/fixedArray.ts +++ b/src/utils/cairoDataTypes/fixedArray.ts @@ -3,8 +3,9 @@ import { addCompiledFlag } from '../helpers'; import { getNext } from '../num'; import { type ParsingStrategy } from '../calldata/parser/parsingStrategy'; import { CairoType } from './cairoType.interface'; -import { CairoOption } from '../calldata/enum'; +import { CairoOption, CairoResult } from '../calldata/enum'; import { CairoTypeOption } from './cairoTypeOption'; +import { CairoTypeResult } from './cairoTypeResult'; /** * Represents a Cairo fixed-size array with compile-time known length. @@ -133,11 +134,14 @@ export class CairoFixedArray extends CairoType { // "content" is a CairoOption return new CairoTypeOption(contentItem, arrayContentType, strategy); } + if (contentItem instanceof CairoResult) { + // "content" is a CairoResult + return new CairoTypeResult(contentItem, arrayContentType, strategy); + } // not an iterator, not an CairoType, neither a CairoType -> so is low level data (BigNumberish, array, object) - const constructor = strategy.constructors[arrayContentType]; if (constructor) { - return constructor(contentItem, arrayContentType); + return constructor(contentItem, strategy, arrayContentType); } const dynamicSelectors = Object.entries(strategy.dynamicSelectors); const matchingSelector = dynamicSelectors.find(([, selectorFn]) => @@ -147,7 +151,7 @@ export class CairoFixedArray extends CairoType { const [selectorName] = matchingSelector; const dynamicConstructor = strategy.constructors[selectorName]; if (dynamicConstructor) { - return dynamicConstructor(contentItem, arrayContentType); + return dynamicConstructor(contentItem, strategy, arrayContentType); } } throw new Error(`"${arrayContentType}" is not a valid Cairo type`); @@ -187,7 +191,9 @@ export class CairoFixedArray extends CairoType { const constructor = strategy.constructors[elementType]; if (constructor) { - return Array.from({ length: outerSize }, () => constructor(responseIterator, elementType)); + return Array.from({ length: outerSize }, () => + constructor(responseIterator, strategy, elementType) + ); } // Check dynamic selectors (includes CairoFixedArray, future: tuples, structs, etc.) @@ -199,7 +205,7 @@ export class CairoFixedArray extends CairoType { const dynamicConstructor = strategy.constructors[selectorName]; if (dynamicConstructor) { return Array.from({ length: outerSize }, () => - dynamicConstructor(responseIterator, elementType) + dynamicConstructor(responseIterator, strategy, elementType) ); } } @@ -397,7 +403,7 @@ export class CairoFixedArray extends CairoType { } const responseParser = strategy.response[parserName]; if (responseParser) { - return responseParser(element); + return responseParser(element, strategy); } // No response parser found - throw error instead of fallback magic diff --git a/src/utils/cairoDataTypes/tuple.ts b/src/utils/cairoDataTypes/tuple.ts index 7b11b2b53..5b111aa49 100644 --- a/src/utils/cairoDataTypes/tuple.ts +++ b/src/utils/cairoDataTypes/tuple.ts @@ -5,8 +5,10 @@ import { isTypeTuple, isCairo1Type, isTypeNamedTuple } from '../calldata/cairo'; import { type ParsingStrategy } from '../calldata/parser/parsingStrategy'; import { CairoType } from './cairoType.interface'; import { CairoFelt252 } from './felt'; -import { CairoOption } from '../calldata/enum'; +import { CairoOption, CairoResult } from '../calldata/enum'; +// eslint-disable-next-line import/no-cycle import { CairoTypeOption } from './cairoTypeOption'; +import { CairoTypeResult } from './cairoTypeResult'; /** * Represents a Cairo tuple with compile-time known structure. @@ -124,11 +126,15 @@ export class CairoTuple extends CairoType { // "content" is a CairoOption return new CairoTypeOption(contentItem, tupleContentType[index], strategy); } + if (contentItem instanceof CairoResult) { + // "content" is a CairoResult + return new CairoTypeResult(contentItem, tupleContentType[index], strategy); + } // not an iterator, not an CairoType, neither a CairoType -> so is low level data (BigNumberish, array, object) const constructor = strategy.constructors[tupleContentType[index]]; if (constructor) { - return constructor(contentItem, tupleContentType[index]); + return constructor(contentItem, strategy, tupleContentType[index]); } const dynamicSelectors = Object.entries(strategy.dynamicSelectors); const matchingSelector = dynamicSelectors.find(([, selectorFn]) => @@ -138,10 +144,10 @@ export class CairoTuple extends CairoType { const [selectorName] = matchingSelector; const dynamicConstructor = strategy.constructors[selectorName]; if (dynamicConstructor) { - return dynamicConstructor(contentItem, tupleContentType[index]); + return dynamicConstructor(contentItem, strategy, tupleContentType[index]); } } - throw new Error(`"${tupleContentType}" is not a valid Cairo type`); + throw new Error(`"${tupleContentType[index]}" is not a valid Cairo type`); } ); assert( @@ -193,7 +199,7 @@ export class CairoTuple extends CairoType { const [selectorName] = matchingSelector; const dynamicConstructor = strategy.constructors[selectorName]; if (dynamicConstructor) { - return dynamicConstructor(responseIterator, elementType); + return dynamicConstructor(responseIterator, strategy, elementType); } } @@ -622,7 +628,7 @@ export class CairoTuple extends CairoType { } const responseParser = strategy.response[parserName]; if (responseParser) { - return responseParser(element); + return responseParser(element, strategy); } // No response parser found - throw error instead of fallback magic throw new Error( diff --git a/src/utils/calldata/parser/parser-0-1.1.0.ts b/src/utils/calldata/parser/parser-0-1.1.0.ts index b6a719a26..323dca53a 100644 --- a/src/utils/calldata/parser/parser-0-1.1.0.ts +++ b/src/utils/calldata/parser/parser-0-1.1.0.ts @@ -17,7 +17,11 @@ export class AbiParser1 implements AbiParserInterface { // Check direct constructors first if (this.parsingStrategy.constructors[abiType]) { return (val: unknown, type?: string) => { - const instance = this.parsingStrategy.constructors[abiType](val, type); + const instance = this.parsingStrategy.constructors[abiType]( + val, + this.parsingStrategy, + type + ); return instance.toApiRequest(); }; } @@ -31,7 +35,7 @@ export class AbiParser1 implements AbiParserInterface { const dynamicConstructor = this.parsingStrategy.constructors[selectorName]; if (dynamicConstructor) { return (val: unknown, type?: string) => { - const instance = dynamicConstructor(val, type || abiType); + const instance = dynamicConstructor(val, this.parsingStrategy, type || abiType); return instance.toApiRequest(); }; } @@ -46,8 +50,12 @@ export class AbiParser1 implements AbiParserInterface { // Check direct constructors first if (this.parsingStrategy.constructors[abiType] && this.parsingStrategy.response[abiType]) { return (responseIterator: Iterator, type?: string) => { - const instance = this.parsingStrategy.constructors[abiType](responseIterator, type); - return this.parsingStrategy.response[abiType](instance); + const instance = this.parsingStrategy.constructors[abiType]( + responseIterator, + this.parsingStrategy, + type + ); + return this.parsingStrategy.response[abiType](instance, this.parsingStrategy); }; } @@ -61,8 +69,12 @@ export class AbiParser1 implements AbiParserInterface { const responseParser = this.parsingStrategy.response[selectorName]; if (dynamicConstructor && responseParser) { return (responseIterator: Iterator, type?: string) => { - const instance = dynamicConstructor(responseIterator, type || abiType); - return responseParser(instance); + const instance = dynamicConstructor( + responseIterator, + this.parsingStrategy, + type || abiType + ); + return responseParser(instance, this.parsingStrategy); }; } } diff --git a/src/utils/calldata/parser/parser-2.0.0.ts b/src/utils/calldata/parser/parser-2.0.0.ts index 84194897e..acfd05654 100644 --- a/src/utils/calldata/parser/parser-2.0.0.ts +++ b/src/utils/calldata/parser/parser-2.0.0.ts @@ -1,3 +1,5 @@ +// eslint-disable-next-line import/no-cycle +import { CallData, hdParsingStrategy } from '..'; import { Abi, FunctionAbi, @@ -7,24 +9,43 @@ import { type LegacyEvent, AbiEntryType, } from '../../../types'; +import { CairoStruct } from '../../cairoDataTypes/cairoStruct'; +import type { CairoType } from '../../cairoDataTypes/cairoType.interface'; +import { deepCopy } from '../../helpers'; import { AbiParserInterface } from './interface'; -import { hdParsingStrategy, ParsingStrategy } from './parsingStrategy'; +import { ParsingStrategy } from './parsingStrategy'; export class AbiParser2 implements AbiParserInterface { abi: Abi; parsingStrategy: ParsingStrategy; - constructor(abi: Abi, parsingStrategy?: ParsingStrategy) { + constructor(abi: Abi, parsingStrategy: ParsingStrategy = hdParsingStrategy) { this.abi = abi; - this.parsingStrategy = parsingStrategy || hdParsingStrategy; + // add structs & enums in strategy + this.parsingStrategy = deepCopy(parsingStrategy); + const structs: AbiStruct[] = Object.values(CallData.getAbiStruct(abi)); + structs.forEach((struct: AbiStruct) => { + this.parsingStrategy.constructors[struct.name] = (input: Iterator | unknown) => { + return new CairoStruct(input, struct, this.parsingStrategy); + }; + this.parsingStrategy.response[struct.name] = ( + instance: CairoType, + strategy: ParsingStrategy + ) => (instance as CairoStruct).decompose(strategy); + this.parsingStrategy.dynamicSelectors[struct.name] = (_type: string) => true; + }); } public getRequestParser(abiType: AbiEntryType): (val: unknown, type?: string) => any { // Check direct constructors first if (this.parsingStrategy.constructors[abiType]) { return (val: unknown, type?: string) => { - const instance = this.parsingStrategy.constructors[abiType](val, type); + const instance = this.parsingStrategy.constructors[abiType]( + val, + this.parsingStrategy, + type + ); return instance.toApiRequest(); }; } @@ -38,7 +59,7 @@ export class AbiParser2 implements AbiParserInterface { const dynamicConstructor = this.parsingStrategy.constructors[selectorName]; if (dynamicConstructor) { return (val: unknown, type?: string) => { - const instance = dynamicConstructor(val, type || abiType); + const instance = dynamicConstructor(val, this.parsingStrategy, type || abiType); return instance.toApiRequest(); }; } @@ -53,8 +74,12 @@ export class AbiParser2 implements AbiParserInterface { // Check direct constructors first if (this.parsingStrategy.constructors[abiType] && this.parsingStrategy.response[abiType]) { return (responseIterator: Iterator, type?: string) => { - const instance = this.parsingStrategy.constructors[abiType](responseIterator, type); - return this.parsingStrategy.response[abiType](instance); + const instance = this.parsingStrategy.constructors[abiType]( + responseIterator, + this.parsingStrategy, + type + ); + return this.parsingStrategy.response[abiType](instance, this.parsingStrategy); }; } @@ -68,8 +93,12 @@ export class AbiParser2 implements AbiParserInterface { const responseParser = this.parsingStrategy.response[selectorName]; if (dynamicConstructor && responseParser) { return (responseIterator: Iterator, type?: string) => { - const instance = dynamicConstructor(responseIterator, type || abiType); - return responseParser(instance); + const instance = dynamicConstructor( + responseIterator, + this.parsingStrategy, + type || abiType + ); + return responseParser(instance, this.parsingStrategy); }; } } diff --git a/src/utils/calldata/parser/parsingStrategy.ts b/src/utils/calldata/parser/parsingStrategy.ts index 36cf1ce0a..ab1731f3a 100644 --- a/src/utils/calldata/parser/parsingStrategy.ts +++ b/src/utils/calldata/parser/parsingStrategy.ts @@ -35,9 +35,14 @@ export type VariantType = CairoOptionVariant | CairoResultVariant | string | num export type ParsingStrategy = { constructors: Record< AbiEntryType, - (input: Iterator | unknown, type?: string, variant?: VariantType) => CairoType + ( + input: Iterator | unknown, + strategy: ParsingStrategy, + type?: string, + variant?: VariantType + ) => CairoType >; - response: Record any>; + response: Record any>; dynamicSelectors: Record boolean>; }; @@ -157,38 +162,52 @@ export const hdParsingStrategy: ParsingStrategy = { } return new CairoSecp256k1Point(input); }, - [CairoFixedArray.dynamicSelector]: (input: Iterator | unknown, type?: string) => { + [CairoFixedArray.dynamicSelector]: ( + input: Iterator | unknown, + strategy: ParsingStrategy, + type?: string + ) => { assert(!!type, 'CairoFixedArray constructor requires type parameter'); // Always use constructor - it handles both iterator and user input internally - return new CairoFixedArray(input, type, hdParsingStrategy); + return new CairoFixedArray(input, type, strategy); }, - [CairoArray.dynamicSelector]: (input: Iterator | unknown, type?: string) => { + [CairoArray.dynamicSelector]: ( + input: Iterator | unknown, + strategy: ParsingStrategy, + type?: string + ) => { assert(!!type, 'CairoArray constructor requires type parameter'); // Always use constructor - it handles both iterator and user input internally - return new CairoArray(input, type, hdParsingStrategy); + return new CairoArray(input, type, strategy); }, - [CairoTuple.dynamicSelector]: (input: Iterator | unknown, type?: string) => { + [CairoTuple.dynamicSelector]: ( + input: Iterator | unknown, + strategy: ParsingStrategy, + type?: string + ) => { assert(!!type, 'CairoTuple constructor requires type parameter'); // Always use constructor - it handles both iterator and user input internally - return new CairoTuple(input, type, hdParsingStrategy); + return new CairoTuple(input, type, strategy); }, [CairoTypeOption.dynamicSelector]: ( input: Iterator | unknown, + strategy: ParsingStrategy, type?: string, variant?: VariantType ) => { assert(!!type, 'CairoTypeOption constructor requires "type" parameter.'); const variantNumber = isUndefined(variant) ? undefined : Number(variant); - return new CairoTypeOption(input, type, hdParsingStrategy, variantNumber); + return new CairoTypeOption(input, type, strategy, variantNumber); }, [CairoTypeResult.dynamicSelector]: ( input: Iterator | unknown, + strategy: ParsingStrategy, type?: string, variant?: VariantType ) => { assert(!!type, 'CairoTypeResult constructor requires "type" parameter.'); const variantNumber = isUndefined(variant) ? undefined : Number(variant); - return new CairoTypeResult(input, type, hdParsingStrategy, variantNumber); + return new CairoTypeResult(input, type, strategy, variantNumber); }, }, dynamicSelectors: { @@ -230,15 +249,15 @@ export const hdParsingStrategy: ParsingStrategy = { [CairoInt128.abiSelector]: (instance: CairoType) => (instance as CairoInt128).toBigInt(), [CairoSecp256k1Point.abiSelector]: (instance: CairoType) => (instance as CairoSecp256k1Point).toBigInt(), - [CairoFixedArray.dynamicSelector]: (instance: CairoType) => - (instance as CairoFixedArray).decompose(hdParsingStrategy), - [CairoArray.dynamicSelector]: (instance: CairoType) => - (instance as CairoArray).decompose(hdParsingStrategy), - [CairoTuple.dynamicSelector]: (instance: CairoType) => - (instance as CairoTuple).decompose(hdParsingStrategy), - [CairoTypeOption.dynamicSelector]: (instance: CairoType) => - (instance as CairoTypeOption).decompose(hdParsingStrategy), - [CairoTypeResult.dynamicSelector]: (instance: CairoType) => - (instance as CairoTypeResult).decompose(hdParsingStrategy), + [CairoFixedArray.dynamicSelector]: (instance: CairoType, strategy: ParsingStrategy) => + (instance as CairoFixedArray).decompose(strategy), + [CairoArray.dynamicSelector]: (instance: CairoType, strategy: ParsingStrategy) => + (instance as CairoArray).decompose(strategy), + [CairoTuple.dynamicSelector]: (instance: CairoType, strategy: ParsingStrategy) => + (instance as CairoTuple).decompose(strategy), + [CairoTypeOption.dynamicSelector]: (instance: CairoType, strategy: ParsingStrategy) => + (instance as CairoTypeOption).decompose(strategy), + [CairoTypeResult.dynamicSelector]: (instance: CairoType, strategy: ParsingStrategy) => + (instance as CairoTypeResult).decompose(strategy), }, } as const; diff --git a/src/utils/helpers.ts b/src/utils/helpers.ts index 187493e65..cf2951af7 100644 --- a/src/utils/helpers.ts +++ b/src/utils/helpers.ts @@ -11,3 +11,29 @@ export function addCompiledFlag(compiled: T): T { }); return compiled; } + +export function deepCopy(obj: T): T { + if (typeof obj !== 'object' || obj === null) { + return obj; + } + + // Handle Date objects + if (obj instanceof Date) { + return new Date(obj.getTime()) as any; + } + + // Handle arrays + if (Array.isArray(obj)) { + const copyArr = [] as any[]; + obj.forEach((value) => copyArr.push(deepCopy(value))); + return copyArr as any; + } + + // Handle plain objects + const copyObj = { ...obj } as { [key: string]: any }; + Object.keys(copyObj).forEach((key) => { + copyObj[key] = deepCopy(copyObj[key]); + }); + + return copyObj as T; +} From 4b562f549392f82c2029570aeceb8857faa111d5 Mon Sep 17 00:00:00 2001 From: PhilippeR26 Date: Tue, 23 Sep 2025 10:36:35 +0200 Subject: [PATCH 08/17] test: tests for CairoFix. strategy is splitted in 2 objects (standard and custom). Solve cyclings --- ...s_test_option.compiled_contract_class.json | 11333 ++++++++++++++++ .../enums_test_option.contract_class.json | 4894 +++++++ __tests__/config/fixtures.ts | 1 + .../utils/cairoDataTypes/CairoStruct.test.ts | 278 + .../calldata/enum/CairoTypeResult.test.ts | 37 +- .../calldata/parser/parser-0-1.1.0.test.ts | 19 +- .../calldata/parser/parser-2.0.0.test.ts | 19 +- .../utils/calldata/requestParser.test.ts | 54 +- src/contract/default.ts | 10 +- src/utils/cairoDataTypes/array.ts | 100 +- src/utils/cairoDataTypes/cairoStruct.ts | 191 +- src/utils/cairoDataTypes/cairoTypeOption.ts | 98 +- src/utils/cairoDataTypes/cairoTypeResult.ts | 87 +- src/utils/cairoDataTypes/fixedArray.ts | 122 +- src/utils/cairoDataTypes/tuple.ts | 95 +- src/utils/calldata/getAbiStruct.ts | 18 + src/utils/calldata/index.ts | 29 +- src/utils/calldata/parser/index.ts | 12 +- src/utils/calldata/parser/interface.ts | 6 +- src/utils/calldata/parser/parser-0-1.1.0.ts | 38 +- src/utils/calldata/parser/parser-2.0.0.ts | 109 +- src/utils/calldata/parser/parsingStrategy.ts | 59 +- .../calldata/parser/parsingStrategy.type.ts | 25 + src/utils/calldata/propertyOrder.ts | 4 + src/utils/calldata/requestParser.ts | 19 +- src/utils/calldata/responseParser.ts | 34 +- src/utils/calldata/validate.ts | 7 +- src/utils/helpers.ts | 41 +- 28 files changed, 17312 insertions(+), 427 deletions(-) create mode 100644 __mocks__/cairo/cairo2120/enums_test_option.compiled_contract_class.json create mode 100644 __mocks__/cairo/cairo2120/enums_test_option.contract_class.json create mode 100644 __tests__/utils/cairoDataTypes/CairoStruct.test.ts create mode 100644 src/utils/calldata/getAbiStruct.ts create mode 100644 src/utils/calldata/parser/parsingStrategy.type.ts diff --git a/__mocks__/cairo/cairo2120/enums_test_option.compiled_contract_class.json b/__mocks__/cairo/cairo2120/enums_test_option.compiled_contract_class.json new file mode 100644 index 000000000..45b27186a --- /dev/null +++ b/__mocks__/cairo/cairo2120/enums_test_option.compiled_contract_class.json @@ -0,0 +1,11333 @@ +{ + "prime": "0x800000000000011000000000000000000000000000000000000000000000001", + "compiler_version": "2.12.0", + "bytecode": [ + "0xa0680017fff8000", + "0x7", + "0x482680017ffa8000", + "0x100000000000000000000000000000000", + "0x400280007ff97fff", + "0x10780017fff7fff", + "0xac", + "0x4825800180007ffa", + "0x0", + "0x400280007ff97fff", + "0x48297ffc80007ffd", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0x96", + "0x480280007ffc8000", + "0x20680017fff7fff", + "0x39", + "0x482680017ffc8000", + "0x1", + "0x480a7ffd7fff8000", + "0x48307ffe80007fff", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0x2b", + "0x480080007ffd8000", + "0xa0680017fff8000", + "0x12", + "0x4824800180007ffe", + "0x10000", + "0x4844800180008002", + "0x8000000000000110000000000000000", + "0x4830800080017ffe", + "0x480280017ff97fff", + "0x482480017ffe8000", + "0xefffffffffffffde000000000000ffff", + "0x480280027ff97fff", + "0x400280037ff97ffb", + "0x402480017fff7ffb", + "0xffffffffffffffffffffffffffffffff", + "0x20680017fff7fff", + "0x14", + "0x402780017fff7fff", + "0x1", + "0x400280017ff97ffe", + "0x482480017ffe8000", + "0xffffffffffffffffffffffffffff0000", + "0x400280027ff97fff", + "0x482680017ff98000", + "0x3", + "0x482480017ff68000", + "0x1144", + "0x480680017fff8000", + "0x0", + "0x48127ffa7fff8000", + "0x482480017ff68000", + "0x1", + "0x48127ff67fff8000", + "0x10780017fff7fff", + "0x1d", + "0x482680017ff98000", + "0x4", + "0x482480017ff18000", + "0x1658", + "0x10780017fff7fff", + "0x66", + "0x482680017ff98000", + "0x1", + "0x482480017ff98000", + "0x1b12", + "0x10780017fff7fff", + "0x60", + "0x4824800180007fff", + "0x1", + "0x20680017fff7fff", + "0x52", + "0x482680017ff98000", + "0x1", + "0x482480017ffb8000", + "0x14f0", + "0x480680017fff8000", + "0x1", + "0x480680017fff8000", + "0x0", + "0x482680017ffc8000", + "0x1", + "0x480a7ffd7fff8000", + "0x48307ffe80007fff", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0xc", + "0x1104800180018000", + "0xc1b", + "0x48127ff17fff8000", + "0x48127ff17fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0x1104800180018000", + "0x1b92", + "0x482480017fff8000", + "0x1b91", + "0x480080007fff8000", + "0xa0680017fff8000", + "0x9", + "0x4824800180007ff5", + "0x0", + "0x482480017fff8000", + "0x100000000000000000000000000000000", + "0x400080007ff27fff", + "0x10780017fff7fff", + "0x25", + "0x4824800180007ff5", + "0x0", + "0x400080007ff37fff", + "0x40780017fff7fff", + "0x1", + "0x20680017fff7ff4", + "0xd", + "0x480680017fff8000", + "0x0", + "0x400080007ffe7fff", + "0x400080017ffe7ff4", + "0x482480017ffd8000", + "0x1f4", + "0x48127ffd7fff8000", + "0x482480017ffc8000", + "0x2", + "0x10780017fff7fff", + "0xa", + "0x480680017fff8000", + "0x1", + "0x400080007ffe7fff", + "0x482480017ffd8000", + "0x2bc", + "0x48127ffd7fff8000", + "0x482480017ffc8000", + "0x1", + "0x482480017fee8000", + "0x1", + "0x48127ffc7fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x0", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0x482480017ff28000", + "0x1", + "0x48127ff27fff8000", + "0x10780017fff7fff", + "0x1a", + "0x482680017ff98000", + "0x1", + "0x482480017ffb8000", + "0x1c3e", + "0x10780017fff7fff", + "0x6", + "0x482680017ff98000", + "0x1", + "0x482480017ffd8000", + "0x1dce", + "0x1104800180018000", + "0xbd6", + "0x48127ff67fff8000", + "0x48127ff67fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0x482680017ff98000", + "0x1", + "0x482680017ffa8000", + "0x1e96", + "0x1104800180018000", + "0xbcd", + "0x48127ff67fff8000", + "0x48127ff67fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0xa0680017fff8000", + "0x7", + "0x482680017ffa8000", + "0x100000000000000000000000000000000", + "0x400280007ff97fff", + "0x10780017fff7fff", + "0x7d", + "0x4825800180007ffa", + "0x0", + "0x400280007ff97fff", + "0x482680017ff98000", + "0x1", + "0x48127ffe7fff8000", + "0x480a7ffc7fff8000", + "0x480a7ffd7fff8000", + "0x1104800180018000", + "0xbb9", + "0x20680017fff7ff9", + "0x69", + "0x20680017fff7ffc", + "0x5d", + "0x48307ffa80007ffb", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0xc", + "0x1104800180018000", + "0xb9f", + "0x48127fee7fff8000", + "0x48127fee7fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0x1104800180018000", + "0x1b16", + "0x482480017fff8000", + "0x1b15", + "0x480080007fff8000", + "0xa0680017fff8000", + "0x9", + "0x4824800180007ff2", + "0x8e8", + "0x482480017fff8000", + "0x100000000000000000000000000000000", + "0x400080007fef7fff", + "0x10780017fff7fff", + "0x3a", + "0x4824800180007ff2", + "0x8e8", + "0x400080007ff07fff", + "0x40780017fff7fff", + "0x1", + "0x20680017fff7ff5", + "0x21", + "0x480680017fff8000", + "0x0", + "0x400080007ffe7fff", + "0x48307ff580007ff6", + "0x400080017ffd7fff", + "0x482480017fed8000", + "0x1", + "0x48127ffb7fff8000", + "0x48127ff27fff8000", + "0x48127ff27fff8000", + "0x48127ff97fff8000", + "0x482480017ff88000", + "0x2", + "0x1104800180018000", + "0xc0f", + "0x20680017fff7ffd", + "0x8", + "0x48127ffb7fff8000", + "0x48127ffb7fff8000", + "0x48127ffc7fff8000", + "0x48127ffc7fff8000", + "0x10780017fff7fff", + "0x14", + "0x48127ffb7fff8000", + "0x48127ffb7fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0x480680017fff8000", + "0x1", + "0x400080007ffe7fff", + "0x482480017fee8000", + "0x1", + "0x482480017ffc8000", + "0xbfe", + "0x48127ffc7fff8000", + "0x482480017ffb8000", + "0x1", + "0x48127ffc7fff8000", + "0x48127ffc7fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x0", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0x482480017fef8000", + "0x1", + "0x482480017fef8000", + "0xbe", + "0x10780017fff7fff", + "0x18", + "0x1104800180018000", + "0xb4e", + "0x48127fef7fff8000", + "0x48127fef7fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0x48127ff77fff8000", + "0x48127ff77fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0x482680017ff98000", + "0x1", + "0x482680017ffa8000", + "0x1e96", + "0x1104800180018000", + "0xb3d", + "0x48127ff67fff8000", + "0x48127ff67fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0xa0680017fff8000", + "0x7", + "0x482680017ffa8000", + "0x100000000000000000000000000000000", + "0x400280007ff97fff", + "0x10780017fff7fff", + "0x95", + "0x4825800180007ffa", + "0x0", + "0x400280007ff97fff", + "0x48297ffc80007ffd", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0x7f", + "0x480280007ffc8000", + "0x20680017fff7fff", + "0x1c", + "0x482680017ff98000", + "0x1", + "0x482680017ffc8000", + "0x1", + "0x480a7ffd7fff8000", + "0x1104800180018000", + "0xbde", + "0x20680017fff7ffc", + "0xe", + "0x48127ff97fff8000", + "0x482480017fdb8000", + "0x10e", + "0x480680017fff8000", + "0x0", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x48127ff47fff8000", + "0x48127ff47fff8000", + "0x10780017fff7fff", + "0x1a", + "0x48127ff97fff8000", + "0x482480017fdb8000", + "0x988", + "0x10780017fff7fff", + "0x66", + "0x4824800180007fff", + "0x1", + "0x20680017fff7fff", + "0x58", + "0x482680017ff98000", + "0x1", + "0x482480017ffb8000", + "0x1428", + "0x480680017fff8000", + "0x1", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x482680017ffc8000", + "0x1", + "0x480a7ffd7fff8000", + "0x48307ffe80007fff", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0xc", + "0x1104800180018000", + "0xae5", + "0x48127fef7fff8000", + "0x48127fef7fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0x1104800180018000", + "0x1a5c", + "0x482480017fff8000", + "0x1a5b", + "0x480080007fff8000", + "0xa0680017fff8000", + "0x9", + "0x4824800180007ff3", + "0x0", + "0x482480017fff8000", + "0x100000000000000000000000000000000", + "0x400080007ff07fff", + "0x10780017fff7fff", + "0x27", + "0x4824800180007ff3", + "0x0", + "0x400080007ff17fff", + "0x40780017fff7fff", + "0x1", + "0x20680017fff7ff2", + "0xf", + "0x480680017fff8000", + "0x0", + "0x400080007ffe7fff", + "0x400080017ffe7ff2", + "0x400080027ffe7ff3", + "0x400080037ffe7ff4", + "0x482480017ffd8000", + "0x12c", + "0x48127ffd7fff8000", + "0x482480017ffc8000", + "0x4", + "0x10780017fff7fff", + "0xa", + "0x480680017fff8000", + "0x1", + "0x400080007ffe7fff", + "0x482480017ffd8000", + "0x2bc", + "0x48127ffd7fff8000", + "0x482480017ffc8000", + "0x1", + "0x482480017fec8000", + "0x1", + "0x48127ffc7fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x0", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0x482480017ff08000", + "0x1", + "0x48127ff07fff8000", + "0x10780017fff7fff", + "0x1a", + "0x482680017ff98000", + "0x1", + "0x482480017ffb8000", + "0x1c3e", + "0x10780017fff7fff", + "0x6", + "0x482680017ff98000", + "0x1", + "0x482480017ffd8000", + "0x1dce", + "0x1104800180018000", + "0xa9e", + "0x48127ff67fff8000", + "0x48127ff67fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0x482680017ff98000", + "0x1", + "0x482680017ffa8000", + "0x1e96", + "0x1104800180018000", + "0xa95", + "0x48127ff67fff8000", + "0x48127ff67fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0xa0680017fff8000", + "0x7", + "0x482680017ffa8000", + "0xfffffffffffffffffffffffffffff60a", + "0x400280007ff97fff", + "0x10780017fff7fff", + "0x7d", + "0x4825800180007ffa", + "0x9f6", + "0x400280007ff97fff", + "0x482680017ff98000", + "0x1", + "0x48127ffe7fff8000", + "0x480a7ffc7fff8000", + "0x480a7ffd7fff8000", + "0x1104800180018000", + "0xbdc", + "0x20680017fff7ff8", + "0x69", + "0x20680017fff7ffb", + "0x5d", + "0x48307ff980007ffa", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0xc", + "0x1104800180018000", + "0xa67", + "0x48127fed7fff8000", + "0x48127fed7fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0x1104800180018000", + "0x19de", + "0x482480017fff8000", + "0x19dd", + "0x480080007fff8000", + "0xa0680017fff8000", + "0x9", + "0x4824800180007ff1", + "0xa0a", + "0x482480017fff8000", + "0x100000000000000000000000000000000", + "0x400080007fee7fff", + "0x10780017fff7fff", + "0x3b", + "0x4824800180007ff1", + "0xa0a", + "0x400080007fef7fff", + "0x40780017fff7fff", + "0x1", + "0x20680017fff7ff4", + "0x22", + "0x480680017fff8000", + "0x0", + "0x400080007ffe7fff", + "0x400080017ffe7ff4", + "0x48307ff580007ff6", + "0x400080027ffd7fff", + "0x482480017fec8000", + "0x1", + "0x48127ffb7fff8000", + "0x48127ff27fff8000", + "0x48127ff27fff8000", + "0x48127ff97fff8000", + "0x482480017ff88000", + "0x3", + "0x1104800180018000", + "0xc23", + "0x20680017fff7ffd", + "0x8", + "0x48127ffb7fff8000", + "0x48127ffb7fff8000", + "0x48127ffc7fff8000", + "0x48127ffc7fff8000", + "0x10780017fff7fff", + "0x14", + "0x48127ffb7fff8000", + "0x48127ffb7fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0x480680017fff8000", + "0x1", + "0x400080007ffe7fff", + "0x482480017fed8000", + "0x1", + "0x482480017ffc8000", + "0xc62", + "0x48127ffc7fff8000", + "0x482480017ffb8000", + "0x1", + "0x48127ffc7fff8000", + "0x48127ffc7fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x0", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0x482480017fee8000", + "0x1", + "0x48127fee7fff8000", + "0x10780017fff7fff", + "0x18", + "0x1104800180018000", + "0xa16", + "0x48127fee7fff8000", + "0x48127fee7fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0x48127ff67fff8000", + "0x48127ff67fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0x482680017ff98000", + "0x1", + "0x482680017ffa8000", + "0x1e96", + "0x1104800180018000", + "0xa05", + "0x48127ff67fff8000", + "0x48127ff67fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0xa0680017fff8000", + "0x7", + "0x482680017ffa8000", + "0x100000000000000000000000000000000", + "0x400280007ff97fff", + "0x10780017fff7fff", + "0x70", + "0x4825800180007ffa", + "0x0", + "0x400280007ff97fff", + "0x482680017ff98000", + "0x1", + "0x480a7ffc7fff8000", + "0x480a7ffd7fff8000", + "0x1104800180018000", + "0xbfc", + "0x20680017fff7ffc", + "0x5b", + "0x48307ffa80007ffb", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0xc", + "0x1104800180018000", + "0x9da", + "0x48127ff07fff8000", + "0x48127fd87fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0x1104800180018000", + "0x1951", + "0x482480017fff8000", + "0x1950", + "0x480080007fff8000", + "0xa0680017fff8000", + "0x9", + "0x4824800180007fdc", + "0x0", + "0x482480017fff8000", + "0x100000000000000000000000000000000", + "0x400080007ff17fff", + "0x10780017fff7fff", + "0x38", + "0x4824800180007fdc", + "0x0", + "0x400080007ff27fff", + "0x40780017fff7fff", + "0x1", + "0x20680017fff7ff5", + "0x1b", + "0x480680017fff8000", + "0x0", + "0x400080007ffe7fff", + "0x20680017fff7ff5", + "0xf", + "0x40780017fff7fff", + "0x3", + "0x480680017fff8000", + "0x0", + "0x400080017ffa7fff", + "0x400080027ffa7ff2", + "0x482480017ff98000", + "0x974", + "0x48127ff97fff8000", + "0x482480017ff88000", + "0x3", + "0x10780017fff7fff", + "0x16", + "0x482480017ffd8000", + "0x92e", + "0x48127ffd7fff8000", + "0x482480017ffc8000", + "0x1", + "0x10780017fff7fff", + "0x8", + "0x40780017fff7fff", + "0x1", + "0x482480017ffd8000", + "0xa50", + "0x48127ffd7fff8000", + "0x48127ffc7fff8000", + "0x480680017fff8000", + "0x1", + "0x400080007ffe7fff", + "0x48127ffc7fff8000", + "0x48127ffc7fff8000", + "0x482480017ffc8000", + "0x1", + "0x482480017fe98000", + "0x1", + "0x48127ffc7fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x0", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0x482480017ff18000", + "0x1", + "0x482480017fd98000", + "0x92e", + "0x10780017fff7fff", + "0x10", + "0x1104800180018000", + "0x98b", + "0x48127ff17fff8000", + "0x48127fd97fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0x482680017ff98000", + "0x1", + "0x482680017ffa8000", + "0x1e96", + "0x1104800180018000", + "0x982", + "0x48127ff67fff8000", + "0x48127ff67fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0xa0680017fff8000", + "0x7", + "0x482680017ffa8000", + "0x100000000000000000000000000000000", + "0x400280007ff97fff", + "0x10780017fff7fff", + "0xa2", + "0x4825800180007ffa", + "0x0", + "0x400280007ff97fff", + "0x48297ffc80007ffd", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0x8c", + "0x480280007ffc8000", + "0x20680017fff7fff", + "0x1b", + "0x482680017ff98000", + "0x1", + "0x482680017ffc8000", + "0x1", + "0x480a7ffd7fff8000", + "0x1104800180018000", + "0xc0d", + "0x20680017fff7ffd", + "0xd", + "0x48127ffa7fff8000", + "0x482480017fe38000", + "0x6d6", + "0x480680017fff8000", + "0x0", + "0x48127ffb7fff8000", + "0x48127ffb7fff8000", + "0x48127ff67fff8000", + "0x48127ff67fff8000", + "0x10780017fff7fff", + "0x18", + "0x48127ffa7fff8000", + "0x482480017fe38000", + "0xeec", + "0x10780017fff7fff", + "0x74", + "0x4824800180007fff", + "0x1", + "0x20680017fff7fff", + "0x66", + "0x482680017ff98000", + "0x1", + "0x482480017ffb8000", + "0x148c", + "0x480680017fff8000", + "0x1", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x482680017ffc8000", + "0x1", + "0x480a7ffd7fff8000", + "0x48307ffe80007fff", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0xc", + "0x1104800180018000", + "0x92d", + "0x48127ff07fff8000", + "0x48127ff07fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0x1104800180018000", + "0x18a4", + "0x482480017fff8000", + "0x18a3", + "0x480080007fff8000", + "0xa0680017fff8000", + "0x9", + "0x4824800180007ff4", + "0x0", + "0x482480017fff8000", + "0x100000000000000000000000000000000", + "0x400080007ff17fff", + "0x10780017fff7fff", + "0x37", + "0x4824800180007ff4", + "0x0", + "0x400080007ff27fff", + "0x40780017fff7fff", + "0x1", + "0x20680017fff7ff3", + "0x1d", + "0x480680017fff8000", + "0x0", + "0x400080007ffe7fff", + "0x20680017fff7ff3", + "0xd", + "0x480680017fff8000", + "0x0", + "0x400080017ffd7fff", + "0x400080027ffd7ff3", + "0x482480017ffc8000", + "0xc8", + "0x48127ffc7fff8000", + "0x482480017ffb8000", + "0x3", + "0x10780017fff7fff", + "0x17", + "0x480680017fff8000", + "0x1", + "0x400080017ffd7fff", + "0x400080027ffd7ff3", + "0x482480017ffc8000", + "0xc8", + "0x48127ffc7fff8000", + "0x482480017ffb8000", + "0x3", + "0x10780017fff7fff", + "0xc", + "0x40780017fff7fff", + "0x1", + "0x480680017fff8000", + "0x1", + "0x400080007ffd7fff", + "0x482480017ffc8000", + "0x24e", + "0x48127ffc7fff8000", + "0x482480017ffb8000", + "0x1", + "0x482480017fec8000", + "0x1", + "0x48127ffc7fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x0", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0x482480017ff18000", + "0x1", + "0x48127ff17fff8000", + "0x10780017fff7fff", + "0x1a", + "0x482680017ff98000", + "0x1", + "0x482480017ffb8000", + "0x1c3e", + "0x10780017fff7fff", + "0x6", + "0x482680017ff98000", + "0x1", + "0x482480017ffd8000", + "0x1dce", + "0x1104800180018000", + "0x8d6", + "0x48127ff67fff8000", + "0x48127ff67fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0x482680017ff98000", + "0x1", + "0x482680017ffa8000", + "0x1e96", + "0x1104800180018000", + "0x8cd", + "0x48127ff67fff8000", + "0x48127ff67fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0xa0680017fff8000", + "0x7", + "0x482680017ffa8000", + "0x100000000000000000000000000000000", + "0x400280007ff97fff", + "0x10780017fff7fff", + "0x7f", + "0x4825800180007ffa", + "0x0", + "0x400280007ff97fff", + "0x48297ffc80007ffd", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0x69", + "0x40780017fff7fff", + "0x1", + "0x482680017ff98000", + "0x1", + "0x48127ffc7fff8000", + "0x482680017ffc8000", + "0x1", + "0x480a7ffd7fff8000", + "0x48127ffb7fff8000", + "0x48127ffa7fff8000", + "0x480280007ffc8000", + "0x1104800180018000", + "0xbf0", + "0x20680017fff7ffa", + "0x52", + "0x20680017fff7ffd", + "0x4b", + "0x48307ffb80007ffc", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0xc", + "0x1104800180018000", + "0x894", + "0x48127fef7fff8000", + "0x48127fef7fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0x1104800180018000", + "0x180b", + "0x482480017fff8000", + "0x180a", + "0x480080007fff8000", + "0xa0680017fff8000", + "0x9", + "0x4824800180007ff3", + "0x0", + "0x482480017fff8000", + "0x100000000000000000000000000000000", + "0x400080007ff07fff", + "0x10780017fff7fff", + "0x28", + "0x4824800180007ff3", + "0x0", + "0x400080007ff17fff", + "0x48307ff780007ff8", + "0x40780017fff7fff", + "0x1", + "0x4844800180007ffe", + "0x2", + "0x400080007ffe7fff", + "0x482480017fee8000", + "0x1", + "0x48127ffb7fff8000", + "0x48127ff27fff8000", + "0x48127ff27fff8000", + "0x48127ffa7fff8000", + "0x482480017ff98000", + "0x1", + "0x1104800180018000", + "0xc61", + "0x20680017fff7ffd", + "0xb", + "0x48127ffb7fff8000", + "0x482480017ffb8000", + "0x4c4", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x0", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0x48127ffb7fff8000", + "0x48127ffb7fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0x482480017ff08000", + "0x1", + "0x482480017ff08000", + "0xbae", + "0x10780017fff7fff", + "0x21", + "0x48127ff87fff8000", + "0x482480017ff88000", + "0x10a4", + "0x10780017fff7fff", + "0xe", + "0x48127ff87fff8000", + "0x48127ff87fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0x482680017ff98000", + "0x1", + "0x482480017ffd8000", + "0x1dce", + "0x1104800180018000", + "0x844", + "0x48127ff67fff8000", + "0x48127ff67fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0x482680017ff98000", + "0x1", + "0x482680017ffa8000", + "0x1e96", + "0x1104800180018000", + "0x83b", + "0x48127ff67fff8000", + "0x48127ff67fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0xa0680017fff8000", + "0x7", + "0x482680017ffa8000", + "0x100000000000000000000000000000000", + "0x400280007ff97fff", + "0x10780017fff7fff", + "0x91", + "0x4825800180007ffa", + "0x0", + "0x400280007ff97fff", + "0x48297ffc80007ffd", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0x7b", + "0x480280007ffc8000", + "0x20680017fff7fff", + "0x36", + "0x482680017ffc8000", + "0x1", + "0x480a7ffd7fff8000", + "0x48307ffe80007fff", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0x28", + "0x480080007ffd8000", + "0xa0680017fff8000", + "0x12", + "0x4824800180007ffe", + "0x10000", + "0x4844800180008002", + "0x8000000000000110000000000000000", + "0x4830800080017ffe", + "0x480280017ff97fff", + "0x482480017ffe8000", + "0xefffffffffffffde000000000000ffff", + "0x480280027ff97fff", + "0x400280037ff97ffb", + "0x402480017fff7ffb", + "0xffffffffffffffffffffffffffffffff", + "0x20680017fff7fff", + "0x11", + "0x402780017fff7fff", + "0x1", + "0x400280017ff97ffe", + "0x482480017ffe8000", + "0xffffffffffffffffffffffffffff0000", + "0x400280027ff97fff", + "0x482680017ff98000", + "0x3", + "0x482480017ff68000", + "0x120c", + "0x482480017ff88000", + "0x1", + "0x48127ff87fff8000", + "0x10780017fff7fff", + "0x19", + "0x482680017ff98000", + "0x4", + "0x482480017ff18000", + "0x1658", + "0x10780017fff7fff", + "0x4e", + "0x482680017ff98000", + "0x1", + "0x482480017ff98000", + "0x1b12", + "0x10780017fff7fff", + "0x48", + "0x4824800180007fff", + "0x1", + "0x20680017fff7fff", + "0x3a", + "0x482680017ff98000", + "0x1", + "0x482480017ffb8000", + "0x15b8", + "0x482680017ffc8000", + "0x1", + "0x480a7ffd7fff8000", + "0x48307ffe80007fff", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0xc", + "0x1104800180018000", + "0x7d1", + "0x48127ff37fff8000", + "0x48127ff37fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0x1104800180018000", + "0x1748", + "0x482480017fff8000", + "0x1747", + "0x480080007fff8000", + "0xa0680017fff8000", + "0x9", + "0x4824800180007ff7", + "0x0", + "0x482480017fff8000", + "0x100000000000000000000000000000000", + "0x400080007ff47fff", + "0x10780017fff7fff", + "0x11", + "0x4824800180007ff7", + "0x0", + "0x400080007ff57fff", + "0x40780017fff7fff", + "0x1", + "0x482480017ff48000", + "0x1", + "0x482480017ffd8000", + "0x514", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x0", + "0x48127ffb7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0x482480017ff48000", + "0x1", + "0x48127ff47fff8000", + "0x10780017fff7fff", + "0x1a", + "0x482680017ff98000", + "0x1", + "0x482480017ffb8000", + "0x1c3e", + "0x10780017fff7fff", + "0x6", + "0x482680017ff98000", + "0x1", + "0x482480017ffd8000", + "0x1dce", + "0x1104800180018000", + "0x7a0", + "0x48127ff67fff8000", + "0x48127ff67fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0x482680017ff98000", + "0x1", + "0x482680017ffa8000", + "0x1e96", + "0x1104800180018000", + "0x797", + "0x48127ff67fff8000", + "0x48127ff67fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0xa0680017fff8000", + "0x7", + "0x482680017ffa8000", + "0x100000000000000000000000000000000", + "0x400280007ff97fff", + "0x10780017fff7fff", + "0x5e", + "0x4825800180007ffa", + "0x0", + "0x400280007ff97fff", + "0x482680017ff98000", + "0x1", + "0x480a7ffc7fff8000", + "0x480a7ffd7fff8000", + "0x1104800180018000", + "0xbae", + "0x20680017fff7ffc", + "0x49", + "0x48307ffa80007ffb", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0xc", + "0x1104800180018000", + "0x76c", + "0x48127ff07fff8000", + "0x48127fd67fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0x1104800180018000", + "0x16e3", + "0x482480017fff8000", + "0x16e2", + "0x480080007fff8000", + "0xa0680017fff8000", + "0x9", + "0x4824800180007fda", + "0x0", + "0x482480017fff8000", + "0x100000000000000000000000000000000", + "0x400080007ff17fff", + "0x10780017fff7fff", + "0x26", + "0x4824800180007fda", + "0x0", + "0x400080007ff27fff", + "0x40780017fff7fff", + "0x1", + "0x20680017fff7ff5", + "0xe", + "0x480680017fff8000", + "0x0", + "0x400080007ffe7fff", + "0x400080017ffe7ff5", + "0x400080027ffe7ff6", + "0x482480017ffd8000", + "0x96a", + "0x48127ffd7fff8000", + "0x482480017ffc8000", + "0x3", + "0x10780017fff7fff", + "0xa", + "0x480680017fff8000", + "0x1", + "0x400080007ffe7fff", + "0x482480017ffd8000", + "0xa96", + "0x48127ffd7fff8000", + "0x482480017ffc8000", + "0x1", + "0x482480017fed8000", + "0x1", + "0x48127ffc7fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x0", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0x482480017ff18000", + "0x1", + "0x482480017fd78000", + "0x7da", + "0x10780017fff7fff", + "0x10", + "0x1104800180018000", + "0x72f", + "0x48127ff17fff8000", + "0x48127fd77fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0x482680017ff98000", + "0x1", + "0x482680017ffa8000", + "0x1e96", + "0x1104800180018000", + "0x726", + "0x48127ff67fff8000", + "0x48127ff67fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0xa0680017fff8000", + "0x7", + "0x482680017ffa8000", + "0x100000000000000000000000000000000", + "0x400280007ff97fff", + "0x10780017fff7fff", + "0x5e", + "0x4825800180007ffa", + "0x0", + "0x400280007ff97fff", + "0x482680017ff98000", + "0x1", + "0x480a7ffc7fff8000", + "0x480a7ffd7fff8000", + "0x1104800180018000", + "0x9ba", + "0x20680017fff7ffd", + "0x49", + "0x48307ffb80007ffc", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0xc", + "0x1104800180018000", + "0x6fb", + "0x48127ff17fff8000", + "0x48127fdc7fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0x1104800180018000", + "0x1672", + "0x482480017fff8000", + "0x1671", + "0x480080007fff8000", + "0xa0680017fff8000", + "0x9", + "0x4824800180007fe0", + "0x0", + "0x482480017fff8000", + "0x100000000000000000000000000000000", + "0x400080007ff27fff", + "0x10780017fff7fff", + "0x26", + "0x4824800180007fe0", + "0x0", + "0x400080007ff37fff", + "0x40780017fff7fff", + "0x1", + "0x20680017fff7ff6", + "0xd", + "0x480680017fff8000", + "0x0", + "0x400080007ffe7fff", + "0x400080017ffe7ff6", + "0x482480017ffd8000", + "0xd7a", + "0x48127ffd7fff8000", + "0x482480017ffc8000", + "0x2", + "0x10780017fff7fff", + "0xb", + "0x480680017fff8000", + "0x1", + "0x400080007ffe7fff", + "0x400080017ffe7ff6", + "0x482480017ffd8000", + "0xdde", + "0x48127ffd7fff8000", + "0x482480017ffc8000", + "0x2", + "0x482480017fee8000", + "0x1", + "0x48127ffc7fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x0", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0x482480017ff28000", + "0x1", + "0x482480017fdd8000", + "0xb86", + "0x10780017fff7fff", + "0x10", + "0x1104800180018000", + "0x6be", + "0x48127ff27fff8000", + "0x48127fdd7fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0x482680017ff98000", + "0x1", + "0x482680017ffa8000", + "0x1e96", + "0x1104800180018000", + "0x6b5", + "0x48127ff67fff8000", + "0x48127ff67fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0xa0680017fff8000", + "0x7", + "0x482680017ffa8000", + "0xfffffffffffffffffffffffffffffff6", + "0x400280007ff97fff", + "0x10780017fff7fff", + "0x7e", + "0x4825800180007ffa", + "0xa", + "0x400280007ff97fff", + "0x482680017ff98000", + "0x1", + "0x48127ffe7fff8000", + "0x480a7ffc7fff8000", + "0x480a7ffd7fff8000", + "0x1104800180018000", + "0xb6c", + "0x20680017fff7ff9", + "0x6a", + "0x20680017fff7ffc", + "0x5e", + "0x48307ffa80007ffb", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0xc", + "0x1104800180018000", + "0x687", + "0x48127fee7fff8000", + "0x48127fee7fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0x1104800180018000", + "0x15fe", + "0x482480017fff8000", + "0x15fd", + "0x480080007fff8000", + "0xa0680017fff8000", + "0x9", + "0x4824800180007ff2", + "0x816", + "0x482480017fff8000", + "0x100000000000000000000000000000000", + "0x400080007fef7fff", + "0x10780017fff7fff", + "0x3c", + "0x4824800180007ff2", + "0x816", + "0x400080007ff07fff", + "0x40780017fff7fff", + "0x1", + "0x20680017fff7ff5", + "0x13", + "0x480680017fff8000", + "0x0", + "0x400080007ffe7fff", + "0x48307ff580007ff6", + "0x400080017ffd7fff", + "0x482480017fed8000", + "0x1", + "0x48127ffb7fff8000", + "0x48127ff27fff8000", + "0x48127ff27fff8000", + "0x48127ff97fff8000", + "0x482480017ff88000", + "0x2", + "0x1104800180018000", + "0x6f7", + "0x10780017fff7fff", + "0x12", + "0x480680017fff8000", + "0x1", + "0x400080007ffe7fff", + "0x48307ff580007ff6", + "0x400080017ffd7fff", + "0x482480017fed8000", + "0x1", + "0x482480017ffb8000", + "0x64", + "0x48127ff27fff8000", + "0x48127ff27fff8000", + "0x48127ff97fff8000", + "0x482480017ff88000", + "0x2", + "0x1104800180018000", + "0xbe2", + "0x20680017fff7ffd", + "0xa", + "0x48127ffb7fff8000", + "0x48127ffb7fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x0", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0x48127ffb7fff8000", + "0x48127ffb7fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0x482480017fef8000", + "0x1", + "0x48127fef7fff8000", + "0x10780017fff7fff", + "0x18", + "0x1104800180018000", + "0x635", + "0x48127fef7fff8000", + "0x48127fef7fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0x48127ff77fff8000", + "0x48127ff77fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0x482680017ff98000", + "0x1", + "0x482680017ffa8000", + "0x1e96", + "0x1104800180018000", + "0x624", + "0x48127ff67fff8000", + "0x48127ff67fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0xa0680017fff8000", + "0x7", + "0x482680017ffa8000", + "0xfffffffffffffffffffffffffffffe52", + "0x400280007ff97fff", + "0x10780017fff7fff", + "0x60", + "0x4825800180007ffa", + "0x1ae", + "0x400280007ff97fff", + "0x482680017ff98000", + "0x1", + "0x480a7ffc7fff8000", + "0x480a7ffd7fff8000", + "0x1104800180018000", + "0xbcb", + "0x20680017fff7ffb", + "0x4b", + "0x48307ff980007ffa", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0xc", + "0x1104800180018000", + "0x5f9", + "0x48127fef7fff8000", + "0x48127fc37fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0x1104800180018000", + "0x1570", + "0x482480017fff8000", + "0x156f", + "0x480080007fff8000", + "0xa0680017fff8000", + "0x9", + "0x4824800180007fc7", + "0x0", + "0x482480017fff8000", + "0x100000000000000000000000000000000", + "0x400080007ff07fff", + "0x10780017fff7fff", + "0x29", + "0x4824800180007fc7", + "0x0", + "0x400080007ff17fff", + "0x40780017fff7fff", + "0x1", + "0x20680017fff7ff4", + "0xf", + "0x480680017fff8000", + "0x0", + "0x400080007ffe7fff", + "0x400080017ffe7ff4", + "0x400080027ffe7ff5", + "0x400080037ffe7ff6", + "0x482480017ffd8000", + "0x12c", + "0x48127ffd7fff8000", + "0x482480017ffc8000", + "0x4", + "0x10780017fff7fff", + "0xc", + "0x480680017fff8000", + "0x1", + "0x400080007ffe7fff", + "0x400080017ffe7ff5", + "0x400080027ffe7ff6", + "0x482480017ffd8000", + "0x1f4", + "0x48127ffd7fff8000", + "0x482480017ffc8000", + "0x3", + "0x482480017fec8000", + "0x1", + "0x48127ffc7fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x0", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0x482480017ff08000", + "0x1", + "0x48127fc47fff8000", + "0x10780017fff7fff", + "0x10", + "0x1104800180018000", + "0x5ba", + "0x48127ff07fff8000", + "0x48127fc47fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0x482680017ff98000", + "0x1", + "0x482680017ffa8000", + "0x1e96", + "0x1104800180018000", + "0x5b1", + "0x48127ff67fff8000", + "0x48127ff67fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0xa0680017fff8000", + "0x7", + "0x482680017ffa8000", + "0xfffffffffffffffffffffffffffff3b2", + "0x400280007ff97fff", + "0x10780017fff7fff", + "0x80", + "0x4825800180007ffa", + "0xc4e", + "0x400280007ff97fff", + "0x482680017ff98000", + "0x1", + "0x48127ffe7fff8000", + "0x480a7ffc7fff8000", + "0x480a7ffd7fff8000", + "0x1104800180018000", + "0xc12", + "0x20680017fff7ff8", + "0x6c", + "0x20680017fff7ffb", + "0x60", + "0x48307ff980007ffa", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0xc", + "0x1104800180018000", + "0x583", + "0x48127fed7fff8000", + "0x48127fed7fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0x1104800180018000", + "0x14fa", + "0x482480017fff8000", + "0x14f9", + "0x480080007fff8000", + "0xa0680017fff8000", + "0x9", + "0x4824800180007ff1", + "0x87a", + "0x482480017fff8000", + "0x100000000000000000000000000000000", + "0x400080007fee7fff", + "0x10780017fff7fff", + "0x3e", + "0x4824800180007ff1", + "0x87a", + "0x400080007fef7fff", + "0x40780017fff7fff", + "0x1", + "0x20680017fff7ff4", + "0x14", + "0x480680017fff8000", + "0x0", + "0x400080007ffe7fff", + "0x400080017ffe7ff4", + "0x48307ff580007ff6", + "0x400080027ffd7fff", + "0x482480017fec8000", + "0x1", + "0x48127ffb7fff8000", + "0x48127ff27fff8000", + "0x48127ff27fff8000", + "0x48127ff97fff8000", + "0x482480017ff88000", + "0x3", + "0x1104800180018000", + "0x73f", + "0x10780017fff7fff", + "0x13", + "0x480680017fff8000", + "0x1", + "0x400080007ffe7fff", + "0x400080017ffe7ff4", + "0x48307ff580007ff6", + "0x400080027ffd7fff", + "0x482480017fec8000", + "0x1", + "0x482480017ffb8000", + "0x64", + "0x48127ff27fff8000", + "0x48127ff27fff8000", + "0x48127ff97fff8000", + "0x482480017ff88000", + "0x3", + "0x1104800180018000", + "0xadc", + "0x20680017fff7ffd", + "0xa", + "0x48127ffb7fff8000", + "0x48127ffb7fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x0", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0x48127ffb7fff8000", + "0x48127ffb7fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0x482480017fee8000", + "0x1", + "0x48127fee7fff8000", + "0x10780017fff7fff", + "0x18", + "0x1104800180018000", + "0x52f", + "0x48127fee7fff8000", + "0x48127fee7fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0x48127ff67fff8000", + "0x48127ff67fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0x482680017ff98000", + "0x1", + "0x482680017ffa8000", + "0x1e96", + "0x1104800180018000", + "0x51e", + "0x48127ff67fff8000", + "0x48127ff67fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0xa0680017fff8000", + "0x7", + "0x482680017ffa8000", + "0x100000000000000000000000000000000", + "0x400280007ff97fff", + "0x10780017fff7fff", + "0x70", + "0x4825800180007ffa", + "0x0", + "0x400280007ff97fff", + "0x482680017ff98000", + "0x1", + "0x480a7ffc7fff8000", + "0x480a7ffd7fff8000", + "0x1104800180018000", + "0xc23", + "0x20680017fff7ffc", + "0x5b", + "0x48307ffa80007ffb", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0xc", + "0x1104800180018000", + "0x4f3", + "0x48127ff07fff8000", + "0x48127fcc7fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0x1104800180018000", + "0x146a", + "0x482480017fff8000", + "0x1469", + "0x480080007fff8000", + "0xa0680017fff8000", + "0x9", + "0x4824800180007fd0", + "0x0", + "0x482480017fff8000", + "0x100000000000000000000000000000000", + "0x400080007ff17fff", + "0x10780017fff7fff", + "0x38", + "0x4824800180007fd0", + "0x0", + "0x400080007ff27fff", + "0x40780017fff7fff", + "0x1", + "0x20680017fff7ff5", + "0x1d", + "0x480680017fff8000", + "0x0", + "0x400080007ffe7fff", + "0x20680017fff7ff5", + "0xd", + "0x480680017fff8000", + "0x0", + "0x400080017ffd7fff", + "0x400080027ffd7ff5", + "0x482480017ffc8000", + "0x4e2", + "0x48127ffc7fff8000", + "0x482480017ffb8000", + "0x3", + "0x10780017fff7fff", + "0x18", + "0x480680017fff8000", + "0x1", + "0x400080017ffd7fff", + "0x400080027ffd7ff5", + "0x482480017ffc8000", + "0x4e2", + "0x48127ffc7fff8000", + "0x482480017ffb8000", + "0x3", + "0x10780017fff7fff", + "0xd", + "0x40780017fff7fff", + "0x1", + "0x480680017fff8000", + "0x1", + "0x400080007ffd7fff", + "0x400080017ffd7ff5", + "0x482480017ffc8000", + "0x604", + "0x48127ffc7fff8000", + "0x482480017ffb8000", + "0x2", + "0x482480017fec8000", + "0x1", + "0x48127ffc7fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x0", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0x482480017ff18000", + "0x1", + "0x482480017fcd8000", + "0x41a", + "0x10780017fff7fff", + "0x10", + "0x1104800180018000", + "0x4a4", + "0x48127ff17fff8000", + "0x48127fcd7fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0x482680017ff98000", + "0x1", + "0x482680017ffa8000", + "0x1e96", + "0x1104800180018000", + "0x49b", + "0x48127ff67fff8000", + "0x48127ff67fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0xa0680017fff8000", + "0x7", + "0x482680017ffa8000", + "0x100000000000000000000000000000000", + "0x400280007ff97fff", + "0x10780017fff7fff", + "0x6f", + "0x4825800180007ffa", + "0x0", + "0x400280007ff97fff", + "0x482680017ff98000", + "0x1", + "0x480a7ffc7fff8000", + "0x480a7ffd7fff8000", + "0x1104800180018000", + "0xc23", + "0x20680017fff7ffc", + "0x5a", + "0x48307ffa80007ffb", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0xc", + "0x1104800180018000", + "0x470", + "0x48127ff07fff8000", + "0x48127fd77fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0x1104800180018000", + "0x13e7", + "0x482480017fff8000", + "0x13e6", + "0x480080007fff8000", + "0xa0680017fff8000", + "0x9", + "0x4824800180007fdb", + "0x0", + "0x482480017fff8000", + "0x100000000000000000000000000000000", + "0x400080007ff17fff", + "0x10780017fff7fff", + "0x37", + "0x4824800180007fdb", + "0x0", + "0x400080007ff27fff", + "0x40780017fff7fff", + "0x1", + "0x20680017fff7ff5", + "0xf", + "0x40780017fff7fff", + "0x1", + "0x480680017fff8000", + "0x0", + "0x400080007ffd7fff", + "0x400080017ffd7ff5", + "0x482480017ffc8000", + "0x9ec", + "0x48127ffc7fff8000", + "0x482480017ffb8000", + "0x2", + "0x10780017fff7fff", + "0x1a", + "0x480680017fff8000", + "0x1", + "0x400080007ffe7fff", + "0x20680017fff7ff5", + "0xd", + "0x480680017fff8000", + "0x0", + "0x400080017ffd7fff", + "0x400080027ffd7ff5", + "0x482480017ffc8000", + "0x92e", + "0x48127ffc7fff8000", + "0x482480017ffb8000", + "0x3", + "0x10780017fff7fff", + "0xa", + "0x480680017fff8000", + "0x1", + "0x400080017ffd7fff", + "0x482480017ffc8000", + "0x9f6", + "0x48127ffc7fff8000", + "0x482480017ffb8000", + "0x2", + "0x482480017fec8000", + "0x1", + "0x48127ffc7fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x0", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0x482480017ff18000", + "0x1", + "0x482480017fd88000", + "0x866", + "0x10780017fff7fff", + "0x10", + "0x1104800180018000", + "0x422", + "0x48127ff17fff8000", + "0x48127fd87fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0x482680017ff98000", + "0x1", + "0x482680017ffa8000", + "0x1e96", + "0x1104800180018000", + "0x419", + "0x48127ff67fff8000", + "0x48127ff67fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0xa0680017fff8000", + "0x7", + "0x482680017ffa8000", + "0x100000000000000000000000000000000", + "0x400280007ff97fff", + "0x10780017fff7fff", + "0x49", + "0x4825800180007ffa", + "0x0", + "0x400280007ff97fff", + "0x482680017ff98000", + "0x1", + "0x480a7ffc7fff8000", + "0x480a7ffd7fff8000", + "0x1104800180018000", + "0x6ad", + "0x20680017fff7ffd", + "0x34", + "0x48307ffb80007ffc", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0xc", + "0x1104800180018000", + "0x3ee", + "0x48127ff17fff8000", + "0x48127fdc7fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0x1104800180018000", + "0x1365", + "0x482480017fff8000", + "0x1364", + "0x480080007fff8000", + "0xa0680017fff8000", + "0x9", + "0x4824800180007fe0", + "0x0", + "0x482480017fff8000", + "0x100000000000000000000000000000000", + "0x400080007ff27fff", + "0x10780017fff7fff", + "0x11", + "0x4824800180007fe0", + "0x0", + "0x400080007ff37fff", + "0x40780017fff7fff", + "0x1", + "0x482480017ff28000", + "0x1", + "0x482480017ffd8000", + "0x109a", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x0", + "0x48127ffb7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0x482480017ff28000", + "0x1", + "0x482480017fdd8000", + "0xb86", + "0x10780017fff7fff", + "0x10", + "0x1104800180018000", + "0x3c6", + "0x48127ff27fff8000", + "0x48127fdd7fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0x482680017ff98000", + "0x1", + "0x482680017ffa8000", + "0x1e96", + "0x1104800180018000", + "0x3bd", + "0x48127ff67fff8000", + "0x48127ff67fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0xa0680017fff8000", + "0x7", + "0x482680017ffa8000", + "0x100000000000000000000000000000000", + "0x400280007ff97fff", + "0x10780017fff7fff", + "0x9b", + "0x4825800180007ffa", + "0x0", + "0x400280007ff97fff", + "0x48297ffc80007ffd", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0x85", + "0x480280007ffc8000", + "0xa0680017fff8000", + "0x12", + "0x4824800180007ffe", + "0x10000000000000000", + "0x4844800180008002", + "0x8000000000000110000000000000000", + "0x4830800080017ffe", + "0x480280017ff97fff", + "0x482480017ffe8000", + "0xefffffffffffffdeffffffffffffffff", + "0x480280027ff97fff", + "0x400280037ff97ffb", + "0x402480017fff7ffb", + "0xffffffffffffffffffffffffffffffff", + "0x20680017fff7fff", + "0x6e", + "0x402780017fff7fff", + "0x1", + "0x400280017ff97ffe", + "0x482480017ffe8000", + "0xffffffffffffffff0000000000000000", + "0x400280027ff97fff", + "0x482680017ffc8000", + "0x1", + "0x480a7ffd7fff8000", + "0x48307ffe80007fff", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0x5a", + "0x480080007ffd8000", + "0xa0680017fff8000", + "0x12", + "0x4824800180007ffe", + "0x100000000", + "0x4844800180008002", + "0x8000000000000110000000000000000", + "0x4830800080017ffe", + "0x480280037ff97fff", + "0x482480017ffe8000", + "0xefffffffffffffde00000000ffffffff", + "0x480280047ff97fff", + "0x400280057ff97ffb", + "0x402480017fff7ffb", + "0xffffffffffffffffffffffffffffffff", + "0x20680017fff7fff", + "0x43", + "0x402780017fff7fff", + "0x1", + "0x400280037ff97ffe", + "0x482480017ffe8000", + "0xffffffffffffffffffffffff00000000", + "0x400280047ff97fff", + "0x482480017ffa8000", + "0x1", + "0x48127ffa7fff8000", + "0x48307ffe80007fff", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0xd", + "0x1104800180018000", + "0x35c", + "0x482680017ff98000", + "0x5", + "0x48127fe97fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0x1104800180018000", + "0x12d2", + "0x482480017fff8000", + "0x12d1", + "0x480080007fff8000", + "0xa0680017fff8000", + "0x9", + "0x4824800180007fed", + "0x0", + "0x482480017fff8000", + "0x100000000000000000000000000000000", + "0x400280057ff97fff", + "0x10780017fff7fff", + "0x16", + "0x4824800180007fed", + "0x0", + "0x400280057ff97fff", + "0x48127fee7fff8000", + "0x48127ff37fff8000", + "0x40780017fff7fff", + "0x1", + "0x400080007fff7ffd", + "0x400080017fff7ffe", + "0x482680017ff98000", + "0x6", + "0x482480017ffb8000", + "0x1504", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x0", + "0x48127ffb7fff8000", + "0x482480017ffa8000", + "0x2", + "0x208b7fff7fff7ffe", + "0x482680017ff98000", + "0x6", + "0x482480017fea8000", + "0x1180", + "0x10780017fff7fff", + "0x26", + "0x482680017ff98000", + "0x6", + "0x482480017fef8000", + "0x14a0", + "0x10780017fff7fff", + "0x12", + "0x482680017ff98000", + "0x3", + "0x482480017ff78000", + "0x195a", + "0x10780017fff7fff", + "0xc", + "0x482680017ff98000", + "0x4", + "0x482480017ff58000", + "0x18b0", + "0x10780017fff7fff", + "0x6", + "0x482680017ff98000", + "0x1", + "0x482480017ffd8000", + "0x1dce", + "0x1104800180018000", + "0x318", + "0x48127ff67fff8000", + "0x48127ff67fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0x482680017ff98000", + "0x1", + "0x482680017ffa8000", + "0x1e96", + "0x1104800180018000", + "0x30f", + "0x48127ff67fff8000", + "0x48127ff67fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0xa0680017fff8000", + "0x7", + "0x482680017ffa8000", + "0x100000000000000000000000000000000", + "0x400280007ff97fff", + "0x10780017fff7fff", + "0x4d", + "0x4825800180007ffa", + "0x0", + "0x400280007ff97fff", + "0x482680017ff98000", + "0x1", + "0x480a7ffc7fff8000", + "0x480a7ffd7fff8000", + "0x1104800180018000", + "0xb65", + "0x20680017fff7ffc", + "0x38", + "0x48307ffa80007ffb", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0xc", + "0x1104800180018000", + "0x2e4", + "0x48127ff07fff8000", + "0x48127fd47fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0x1104800180018000", + "0x125b", + "0x482480017fff8000", + "0x125a", + "0x480080007fff8000", + "0xa0680017fff8000", + "0x9", + "0x4824800180007fd8", + "0x0", + "0x482480017fff8000", + "0x100000000000000000000000000000000", + "0x400080007ff17fff", + "0x10780017fff7fff", + "0x15", + "0x4824800180007fd8", + "0x0", + "0x400080007ff27fff", + "0x40780017fff7fff", + "0x1", + "0x400080007fff7ff5", + "0x400080017fff7ff6", + "0x400080027fff7ff7", + "0x482480017ff18000", + "0x1", + "0x482480017ffd8000", + "0xa0a", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x0", + "0x48127ffb7fff8000", + "0x482480017ffa8000", + "0x3", + "0x208b7fff7fff7ffe", + "0x482480017ff18000", + "0x1", + "0x482480017fd58000", + "0x622", + "0x10780017fff7fff", + "0x10", + "0x1104800180018000", + "0x2b8", + "0x48127ff17fff8000", + "0x48127fd57fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0x482680017ff98000", + "0x1", + "0x482680017ffa8000", + "0x1e96", + "0x1104800180018000", + "0x2af", + "0x48127ff67fff8000", + "0x48127ff67fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0xa0680017fff8000", + "0x7", + "0x482680017ffa8000", + "0x100000000000000000000000000000000", + "0x400280007ff97fff", + "0x10780017fff7fff", + "0x38", + "0x4825800180007ffa", + "0x0", + "0x400280007ff97fff", + "0x48297ffc80007ffd", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0xd", + "0x1104800180018000", + "0x28c", + "0x482680017ff98000", + "0x1", + "0x48127ff57fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0x1104800180018000", + "0x1202", + "0x482480017fff8000", + "0x1201", + "0x480080007fff8000", + "0xa0680017fff8000", + "0x9", + "0x4824800180007ff9", + "0x0", + "0x482480017fff8000", + "0x100000000000000000000000000000000", + "0x400280017ff97fff", + "0x10780017fff7fff", + "0x11", + "0x4824800180007ff9", + "0x0", + "0x400280017ff97fff", + "0x40780017fff7fff", + "0x1", + "0x482680017ff98000", + "0x2", + "0x482480017ffd8000", + "0x1eb4", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x0", + "0x48127ffb7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0x482680017ff98000", + "0x2", + "0x482480017ff68000", + "0x19a0", + "0x10780017fff7fff", + "0x6", + "0x482680017ff98000", + "0x1", + "0x482680017ffa8000", + "0x1e96", + "0x1104800180018000", + "0x264", + "0x48127ff67fff8000", + "0x48127ff67fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0xa0680017fff8000", + "0x7", + "0x482680017ffa8000", + "0xfffffffffffffffffffffffffffff88a", + "0x400280007ff97fff", + "0x10780017fff7fff", + "0x4e", + "0x4825800180007ffa", + "0x776", + "0x400280007ff97fff", + "0x482680017ff98000", + "0x1", + "0x480a7ffc7fff8000", + "0x480a7ffd7fff8000", + "0x1104800180018000", + "0xb58", + "0x20680017fff7ffa", + "0x39", + "0x48307ff880007ff9", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0xc", + "0x1104800180018000", + "0x239", + "0x48127fee7fff8000", + "0x48127fbc7fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0x1104800180018000", + "0x11b0", + "0x482480017fff8000", + "0x11af", + "0x480080007fff8000", + "0xa0680017fff8000", + "0x9", + "0x4824800180007fc0", + "0x0", + "0x482480017fff8000", + "0x100000000000000000000000000000000", + "0x400080007fef7fff", + "0x10780017fff7fff", + "0x17", + "0x4824800180007fc0", + "0x0", + "0x400080007ff07fff", + "0x40780017fff7fff", + "0x1", + "0x400080007fff7ff3", + "0x400080017fff7ff4", + "0x400080027fff7ff5", + "0x400080037fff7ff6", + "0x400080047fff7ff7", + "0x482480017fef8000", + "0x1", + "0x482480017ffd8000", + "0x320", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x0", + "0x48127ffb7fff8000", + "0x482480017ffa8000", + "0x5", + "0x208b7fff7fff7ffe", + "0x482480017fef8000", + "0x1", + "0x48127fbd7fff8000", + "0x10780017fff7fff", + "0x10", + "0x1104800180018000", + "0x20c", + "0x48127fef7fff8000", + "0x48127fbd7fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0x482680017ff98000", + "0x1", + "0x482680017ffa8000", + "0x1e96", + "0x1104800180018000", + "0x203", + "0x48127ff67fff8000", + "0x48127ff67fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0xa0680017fff8000", + "0x7", + "0x482680017ffa8000", + "0xfffffffffffffffffffffffffffffea2", + "0x400280007ff97fff", + "0x10780017fff7fff", + "0x68", + "0x4825800180007ffa", + "0x15e", + "0x400280007ff97fff", + "0x482680017ff98000", + "0x1", + "0x48127ffe7fff8000", + "0x480a7ffc7fff8000", + "0x480a7ffd7fff8000", + "0x1104800180018000", + "0xb76", + "0x20680017fff7ff9", + "0x54", + "0x20680017fff7ffc", + "0x48", + "0x48307ffa80007ffb", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0xc", + "0x1104800180018000", + "0x1d5", + "0x48127fee7fff8000", + "0x48127fee7fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0x1104800180018000", + "0x114c", + "0x482480017fff8000", + "0x114b", + "0x480080007fff8000", + "0xa0680017fff8000", + "0x9", + "0x4824800180007ff2", + "0x6ea", + "0x482480017fff8000", + "0x100000000000000000000000000000000", + "0x400080007fef7fff", + "0x10780017fff7fff", + "0x26", + "0x4824800180007ff2", + "0x6ea", + "0x400080007ff07fff", + "0x40780017fff7fff", + "0x1", + "0x400080007fff7ff5", + "0x48307ff680007ff7", + "0x400080017ffe7fff", + "0x482480017fee8000", + "0x1", + "0x48127ffc7fff8000", + "0x48127ff37fff8000", + "0x48127ff37fff8000", + "0x48127ffa7fff8000", + "0x482480017ff98000", + "0x2", + "0x1104800180018000", + "0x396", + "0x20680017fff7ffd", + "0xa", + "0x48127ffb7fff8000", + "0x48127ffb7fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x0", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0x48127ffb7fff8000", + "0x48127ffb7fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0x482480017fef8000", + "0x1", + "0x48127fef7fff8000", + "0x10780017fff7fff", + "0x18", + "0x1104800180018000", + "0x199", + "0x48127fef7fff8000", + "0x48127fef7fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0x48127ff77fff8000", + "0x48127ff77fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0x482680017ff98000", + "0x1", + "0x482680017ffa8000", + "0x1e96", + "0x1104800180018000", + "0x188", + "0x48127ff67fff8000", + "0x48127ff67fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0xa0680017fff8000", + "0x7", + "0x482680017ffa8000", + "0xfffffffffffffffffffffffffffff88a", + "0x400280007ff97fff", + "0x10780017fff7fff", + "0x4e", + "0x4825800180007ffa", + "0x776", + "0x400280007ff97fff", + "0x482680017ff98000", + "0x1", + "0x480a7ffc7fff8000", + "0x480a7ffd7fff8000", + "0x1104800180018000", + "0xb87", + "0x20680017fff7ffa", + "0x39", + "0x48307ff880007ff9", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0xc", + "0x1104800180018000", + "0x15d", + "0x48127fee7fff8000", + "0x48127fbc7fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0x1104800180018000", + "0x10d4", + "0x482480017fff8000", + "0x10d3", + "0x480080007fff8000", + "0xa0680017fff8000", + "0x9", + "0x4824800180007fc0", + "0x0", + "0x482480017fff8000", + "0x100000000000000000000000000000000", + "0x400080007fef7fff", + "0x10780017fff7fff", + "0x17", + "0x4824800180007fc0", + "0x0", + "0x400080007ff07fff", + "0x40780017fff7fff", + "0x1", + "0x400080007fff7ff3", + "0x400080017fff7ff4", + "0x400080027fff7ff5", + "0x400080037fff7ff6", + "0x400080047fff7ff7", + "0x482480017fef8000", + "0x1", + "0x482480017ffd8000", + "0x320", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x0", + "0x48127ffb7fff8000", + "0x482480017ffa8000", + "0x5", + "0x208b7fff7fff7ffe", + "0x482480017fef8000", + "0x1", + "0x48127fbd7fff8000", + "0x10780017fff7fff", + "0x10", + "0x1104800180018000", + "0x130", + "0x48127fef7fff8000", + "0x48127fbd7fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0x482680017ff98000", + "0x1", + "0x482680017ffa8000", + "0x1e96", + "0x1104800180018000", + "0x127", + "0x48127ff67fff8000", + "0x48127ff67fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0xa0680017fff8000", + "0x7", + "0x482680017ffa8000", + "0x100000000000000000000000000000000", + "0x400280007ff97fff", + "0x10780017fff7fff", + "0x5e", + "0x4825800180007ffa", + "0x0", + "0x400280007ff97fff", + "0x482680017ff98000", + "0x1", + "0x480a7ffc7fff8000", + "0x480a7ffd7fff8000", + "0x1104800180018000", + "0xba6", + "0x20680017fff7ffc", + "0x49", + "0x48307ffa80007ffb", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0xc", + "0x1104800180018000", + "0xfc", + "0x48127ff07fff8000", + "0x48127fd67fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0x1104800180018000", + "0x1073", + "0x482480017fff8000", + "0x1072", + "0x480080007fff8000", + "0xa0680017fff8000", + "0x9", + "0x4824800180007fda", + "0x0", + "0x482480017fff8000", + "0x100000000000000000000000000000000", + "0x400080007ff17fff", + "0x10780017fff7fff", + "0x26", + "0x4824800180007fda", + "0x0", + "0x400080007ff27fff", + "0x40780017fff7fff", + "0x1", + "0x400080007fff7ff5", + "0x20680017fff7ff6", + "0xd", + "0x480680017fff8000", + "0x0", + "0x400080017ffe7fff", + "0x400080027ffe7ff6", + "0x482480017ffd8000", + "0x906", + "0x48127ffd7fff8000", + "0x482480017ffc8000", + "0x3", + "0x10780017fff7fff", + "0xa", + "0x480680017fff8000", + "0x1", + "0x400080017ffe7fff", + "0x482480017ffd8000", + "0x9ce", + "0x48127ffd7fff8000", + "0x482480017ffc8000", + "0x2", + "0x482480017fed8000", + "0x1", + "0x48127ffc7fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x0", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0x482480017ff18000", + "0x1", + "0x482480017fd78000", + "0x776", + "0x10780017fff7fff", + "0x10", + "0x1104800180018000", + "0xbf", + "0x48127ff17fff8000", + "0x48127fd77fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0x482680017ff98000", + "0x1", + "0x482680017ffa8000", + "0x1e96", + "0x1104800180018000", + "0xb6", + "0x48127ff67fff8000", + "0x48127ff67fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0xa0680017fff8000", + "0x7", + "0x482680017ffa8000", + "0x100000000000000000000000000000000", + "0x400280007ff97fff", + "0x10780017fff7fff", + "0x8f", + "0x4825800180007ffa", + "0x0", + "0x400280007ff97fff", + "0x48297ffc80007ffd", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0x79", + "0x480280007ffc8000", + "0xa0680017fff8000", + "0x16", + "0x480280017ff98003", + "0x480280027ff98003", + "0x4844800180017ffe", + "0x100000000000000000000000000000000", + "0x483080017ffd7ffb", + "0x482480017fff7ffd", + "0x800000000000010fffffffffffffffff7ffffffffffffef0000000000000001", + "0x20680017fff7ffc", + "0x6", + "0x402480017fff7ffd", + "0xffffffffffffffffffffffffffffffff", + "0x10780017fff7fff", + "0x4", + "0x402480017ffe7ffd", + "0xf7ffffffffffffef0000000000000000", + "0x400280037ff97ffd", + "0x20680017fff7ffe", + "0x5e", + "0x402780017fff7fff", + "0x1", + "0x400280017ff97ffe", + "0x482680017ff98000", + "0x2", + "0x482680017ffc8000", + "0x1", + "0x480a7ffd7fff8000", + "0x1104800180018000", + "0xbb3", + "0x20680017fff7ffd", + "0x4d", + "0x48307ffb80007ffc", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0xc", + "0x1104800180018000", + "0x6d", + "0x48127ff17fff8000", + "0x48127fd97fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0x1104800180018000", + "0xfe4", + "0x482480017fff8000", + "0xfe3", + "0x480080007fff8000", + "0xa0680017fff8000", + "0x9", + "0x4824800180007fdd", + "0x0", + "0x482480017fff8000", + "0x100000000000000000000000000000000", + "0x400080007ff27fff", + "0x10780017fff7fff", + "0x2a", + "0x4824800180007fdd", + "0x0", + "0x400080007ff37fff", + "0x48127fde7fff8000", + "0x48127ff67fff8000", + "0x48127ff67fff8000", + "0x40780017fff7fff", + "0x1", + "0x400080007fff7ffc", + "0x20680017fff7ffd", + "0xd", + "0x480680017fff8000", + "0x0", + "0x400080017ffe7fff", + "0x400080027ffe7ffd", + "0x482480017ffa8000", + "0x9b0", + "0x48127ffd7fff8000", + "0x482480017ffc8000", + "0x3", + "0x10780017fff7fff", + "0xb", + "0x480680017fff8000", + "0x1", + "0x400080017ffe7fff", + "0x400080027ffe7ffd", + "0x482480017ffa8000", + "0xa14", + "0x48127ffd7fff8000", + "0x482480017ffc8000", + "0x3", + "0x482480017feb8000", + "0x1", + "0x48127ffc7fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x0", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0x482480017ff28000", + "0x1", + "0x482480017fda8000", + "0x94c", + "0x10780017fff7fff", + "0x1f", + "0x48127ffa7fff8000", + "0x482480017fe28000", + "0xe42", + "0x10780017fff7fff", + "0xc", + "0x482680017ff98000", + "0x4", + "0x482480017ff68000", + "0x184c", + "0x10780017fff7fff", + "0x6", + "0x482680017ff98000", + "0x1", + "0x482480017ffd8000", + "0x1dce", + "0x1104800180018000", + "0x1d", + "0x48127ff67fff8000", + "0x48127ff67fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0x482680017ff98000", + "0x1", + "0x482680017ffa8000", + "0x1e96", + "0x1104800180018000", + "0x14", + "0x48127ff67fff8000", + "0x48127ff67fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0x480680017fff8000", + "0x496e70757420746f6f206c6f6e6720666f7220617267756d656e7473", + "0x1104800180018000", + "0xbd6", + "0x208b7fff7fff7ffe", + "0x480680017fff8000", + "0x4661696c656420746f20646573657269616c697a6520706172616d202331", + "0x1104800180018000", + "0xbd1", + "0x208b7fff7fff7ffe", + "0x480680017fff8000", + "0x4f7574206f6620676173", + "0x1104800180018000", + "0xbcc", + "0x208b7fff7fff7ffe", + "0x48297ffc80007ffd", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0x7a", + "0x480280007ffc8000", + "0x20680017fff7fff", + "0x51", + "0x482680017ffc8000", + "0x1", + "0x480a7ffd7fff8000", + "0x48307ffe80007fff", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0x35", + "0x40780017fff7fff", + "0x1", + "0x480a7ffa7fff8000", + "0x480a7ffb7fff8000", + "0x482480017ffa8000", + "0x1", + "0x48127ffa7fff8000", + "0x48127ffb7fff8000", + "0x48127ffa7fff8000", + "0x480080007ff68000", + "0x1104800180018000", + "0xbb6", + "0x20680017fff7ffa", + "0x18", + "0x20680017fff7ffd", + "0x10", + "0x48127ff87fff8000", + "0x482480017ff88000", + "0x1f4", + "0x480680017fff8000", + "0x0", + "0x48127ff87fff8000", + "0x48127ff87fff8000", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x48127ff77fff8000", + "0x48127ff77fff8000", + "0x208b7fff7fff7ffe", + "0x48127ff87fff8000", + "0x48127ff87fff8000", + "0x48127ff97fff8000", + "0x48127ff97fff8000", + "0x10780017fff7fff", + "0x16", + "0x48127ff87fff8000", + "0x48127ff87fff8000", + "0x480680017fff8000", + "0x1", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x48127ff77fff8000", + "0x48127ff77fff8000", + "0x208b7fff7fff7ffe", + "0x480a7ffa7fff8000", + "0x482680017ffb8000", + "0xd2a", + "0x48127ffb7fff8000", + "0x48127ffb7fff8000", + "0x48127ffc7fff8000", + "0x48127ffc7fff8000", + "0x480680017fff8000", + "0x0", + "0x48127ffb7fff8000", + "0x48127ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x208b7fff7fff7ffe", + "0x4824800180007fff", + "0x1", + "0x20680017fff7fff", + "0x13", + "0x480a7ffa7fff8000", + "0x482680017ffb8000", + "0xfe6", + "0x480680017fff8000", + "0x0", + "0x482680017ffc8000", + "0x1", + "0x480a7ffd7fff8000", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x1", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x208b7fff7fff7ffe", + "0x480a7ffa7fff8000", + "0x482680017ffb8000", + "0xfe6", + "0x480680017fff8000", + "0x0", + "0x482680017ffc8000", + "0x1", + "0x480a7ffd7fff8000", + "0x480680017fff8000", + "0x1", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x208b7fff7fff7ffe", + "0x480a7ffa7fff8000", + "0x482680017ffb8000", + "0x1112", + "0x480680017fff8000", + "0x0", + "0x480a7ffc7fff8000", + "0x480a7ffd7fff8000", + "0x480680017fff8000", + "0x1", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x208b7fff7fff7ffe", + "0xa0680017fff8000", + "0x7", + "0x482680017ff98000", + "0xfffffffffffffffffffffffffffff9de", + "0x400280007ff87fff", + "0x10780017fff7fff", + "0x21", + "0x4825800180007ff9", + "0x622", + "0x400280007ff87fff", + "0x48297ffa80007ffb", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0x10", + "0x480280007ffa8000", + "0x400280007ffd7fff", + "0x482680017ff88000", + "0x1", + "0x48127ffc7fff8000", + "0x482680017ffa8000", + "0x1", + "0x480a7ffb7fff8000", + "0x480a7ffc7fff8000", + "0x482680017ffd8000", + "0x1", + "0x1104800180018000", + "0x800000000000010ffffffffffffffffffffffffffffffffffffffffffffffe7", + "0x208b7fff7fff7ffe", + "0x482680017ff88000", + "0x1", + "0x482480017ffd8000", + "0x8de", + "0x480680017fff8000", + "0x0", + "0x480a7ffc7fff8000", + "0x480a7ffd7fff8000", + "0x208b7fff7fff7ffe", + "0x1104800180018000", + "0x800000000000010ffffffffffffffffffffffffffffffffffffffffffffff49", + "0x482680017ff88000", + "0x1", + "0x480a7ff97fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffb7fff8000", + "0x48127ffb7fff8000", + "0x208b7fff7fff7ffe", + "0x48297ffc80007ffd", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0x8d", + "0x480280007ffc8000", + "0xa0680017fff8000", + "0x12", + "0x4824800180007ffe", + "0x100000000", + "0x4844800180008002", + "0x8000000000000110000000000000000", + "0x4830800080017ffe", + "0x480280007ffb7fff", + "0x482480017ffe8000", + "0xefffffffffffffde00000000ffffffff", + "0x480280017ffb7fff", + "0x400280027ffb7ffb", + "0x402480017fff7ffb", + "0xffffffffffffffffffffffffffffffff", + "0x20680017fff7fff", + "0x73", + "0x402780017fff7fff", + "0x1", + "0x400280007ffb7ffe", + "0x482480017ffe8000", + "0xffffffffffffffffffffffff00000000", + "0x400280017ffb7fff", + "0x482680017ffc8000", + "0x1", + "0x480a7ffd7fff8000", + "0x48307ffe80007fff", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0x5d", + "0x480080007ffd8000", + "0xa0680017fff8000", + "0x12", + "0x4824800180007ffe", + "0x100000000", + "0x4844800180008002", + "0x8000000000000110000000000000000", + "0x4830800080017ffe", + "0x480280027ffb7fff", + "0x482480017ffe8000", + "0xefffffffffffffde00000000ffffffff", + "0x480280037ffb7fff", + "0x400280047ffb7ffb", + "0x402480017fff7ffb", + "0xffffffffffffffffffffffffffffffff", + "0x20680017fff7fff", + "0x43", + "0x402780017fff7fff", + "0x1", + "0x400280027ffb7ffe", + "0x482480017ffe8000", + "0xffffffffffffffffffffffff00000000", + "0x400280037ffb7fff", + "0x482480017ffa8000", + "0x1", + "0x48127ffa7fff8000", + "0x48307ffe80007fff", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0x2d", + "0x480080007ffd8000", + "0xa0680017fff8000", + "0x12", + "0x4824800180007ffe", + "0x100000000", + "0x4844800180008002", + "0x8000000000000110000000000000000", + "0x4830800080017ffe", + "0x480280047ffb7fff", + "0x482480017ffe8000", + "0xefffffffffffffde00000000ffffffff", + "0x480280057ffb7fff", + "0x400280067ffb7ffb", + "0x402480017fff7ffb", + "0xffffffffffffffffffffffffffffffff", + "0x20680017fff7fff", + "0x15", + "0x402780017fff7fff", + "0x1", + "0x400280047ffb7ffe", + "0x482480017ffe8000", + "0xffffffffffffffffffffffff00000000", + "0x400280057ffb7fff", + "0x40780017fff7fff", + "0x5", + "0x482680017ffb8000", + "0x6", + "0x482480017ff48000", + "0x1", + "0x48127ff47fff8000", + "0x480680017fff8000", + "0x0", + "0x48127fe87fff8000", + "0x48127fed7fff8000", + "0x48127ff27fff8000", + "0x208b7fff7fff7ffe", + "0x482680017ffb8000", + "0x7", + "0x482480017ff48000", + "0x1", + "0x48127ff47fff8000", + "0x10780017fff7fff", + "0x29", + "0x40780017fff7fff", + "0x8", + "0x482680017ffb8000", + "0x4", + "0x48127ff47fff8000", + "0x48127ff47fff8000", + "0x10780017fff7fff", + "0x21", + "0x40780017fff7fff", + "0x6", + "0x482680017ffb8000", + "0x5", + "0x482480017fee8000", + "0x1", + "0x48127fee7fff8000", + "0x10780017fff7fff", + "0x18", + "0x40780017fff7fff", + "0xe", + "0x482680017ffb8000", + "0x2", + "0x48127fee7fff8000", + "0x48127fee7fff8000", + "0x10780017fff7fff", + "0x10", + "0x40780017fff7fff", + "0xc", + "0x482680017ffb8000", + "0x3", + "0x482680017ffc8000", + "0x1", + "0x480a7ffd7fff8000", + "0x10780017fff7fff", + "0x7", + "0x40780017fff7fff", + "0x14", + "0x480a7ffb7fff8000", + "0x480a7ffc7fff8000", + "0x480a7ffd7fff8000", + "0x480680017fff8000", + "0x1", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x208b7fff7fff7ffe", + "0x48297ffc80007ffd", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0x6a", + "0x480280007ffc8000", + "0x20680017fff7fff", + "0x3d", + "0x480a7ffa7fff8000", + "0x480a7ffb7fff8000", + "0x482680017ffc8000", + "0x1", + "0x480a7ffd7fff8000", + "0x1104800180018000", + "0xad8", + "0x20680017fff7ff9", + "0x23", + "0x20680017fff7ffc", + "0x10", + "0x48127ff77fff8000", + "0x48127ff77fff8000", + "0x480680017fff8000", + "0x0", + "0x48127ff77fff8000", + "0x48127ff77fff8000", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x48127ff67fff8000", + "0x48127ff67fff8000", + "0x48127ff67fff8000", + "0x208b7fff7fff7ffe", + "0x48127ff77fff8000", + "0x48127ff77fff8000", + "0x480680017fff8000", + "0x0", + "0x48127ff77fff8000", + "0x48127ff77fff8000", + "0x480680017fff8000", + "0x1", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x208b7fff7fff7ffe", + "0x48127ff77fff8000", + "0x48127ff77fff8000", + "0x480680017fff8000", + "0x1", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x48127ff67fff8000", + "0x48127ff67fff8000", + "0x208b7fff7fff7ffe", + "0x4824800180007fff", + "0x1", + "0x20680017fff7fff", + "0x15", + "0x480a7ffa7fff8000", + "0x482680017ffb8000", + "0x1a36", + "0x480680017fff8000", + "0x0", + "0x482680017ffc8000", + "0x1", + "0x480a7ffd7fff8000", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x1", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x208b7fff7fff7ffe", + "0x480a7ffa7fff8000", + "0x482680017ffb8000", + "0x1a36", + "0x480680017fff8000", + "0x0", + "0x482680017ffc8000", + "0x1", + "0x480a7ffd7fff8000", + "0x480680017fff8000", + "0x1", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x208b7fff7fff7ffe", + "0x480a7ffa7fff8000", + "0x482680017ffb8000", + "0x1b62", + "0x480680017fff8000", + "0x0", + "0x480a7ffc7fff8000", + "0x480a7ffd7fff8000", + "0x480680017fff8000", + "0x1", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x208b7fff7fff7ffe", + "0xa0680017fff8000", + "0x7", + "0x482680017ff98000", + "0xfffffffffffffffffffffffffffff9de", + "0x400280007ff87fff", + "0x10780017fff7fff", + "0x21", + "0x4825800180007ff9", + "0x622", + "0x400280007ff87fff", + "0x48297ffa80007ffb", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0x10", + "0x480280007ffa8000", + "0x400280007ffd7fff", + "0x482680017ff88000", + "0x1", + "0x48127ffc7fff8000", + "0x482680017ffa8000", + "0x1", + "0x480a7ffb7fff8000", + "0x480a7ffc7fff8000", + "0x482680017ffd8000", + "0x1", + "0x1104800180018000", + "0x800000000000010ffffffffffffffffffffffffffffffffffffffffffffffe7", + "0x208b7fff7fff7ffe", + "0x482680017ff88000", + "0x1", + "0x482480017ffd8000", + "0x8de", + "0x480680017fff8000", + "0x0", + "0x480a7ffc7fff8000", + "0x480a7ffd7fff8000", + "0x208b7fff7fff7ffe", + "0x1104800180018000", + "0x800000000000010fffffffffffffffffffffffffffffffffffffffffffffdfc", + "0x482680017ff88000", + "0x1", + "0x480a7ff97fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffb7fff8000", + "0x48127ffb7fff8000", + "0x208b7fff7fff7ffe", + "0x48297ffc80007ffd", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0x8c", + "0x480280007ffc8000", + "0x20680017fff7fff", + "0x69", + "0x482680017ffc8000", + "0x1", + "0x480a7ffd7fff8000", + "0x48307ffe80007fff", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0x5a", + "0x480080007ffd8000", + "0x20680017fff7fff", + "0x3e", + "0x482480017ffc8000", + "0x1", + "0x48127ffc7fff8000", + "0x48307ffe80007fff", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0x2f", + "0x480080007ffd8000", + "0xa0680017fff8000", + "0x12", + "0x4824800180007ffe", + "0x10000", + "0x4844800180008002", + "0x8000000000000110000000000000000", + "0x4830800080017ffe", + "0x480280007ffb7fff", + "0x482480017ffe8000", + "0xefffffffffffffde000000000000ffff", + "0x480280017ffb7fff", + "0x400280027ffb7ffb", + "0x402480017fff7ffb", + "0xffffffffffffffffffffffffffffffff", + "0x20680017fff7fff", + "0x17", + "0x402780017fff7fff", + "0x1", + "0x400280007ffb7ffe", + "0x482480017ffe8000", + "0xffffffffffffffffffffffffffff0000", + "0x400280017ffb7fff", + "0x40780017fff7fff", + "0x5", + "0x482680017ffb8000", + "0x2", + "0x482480017ff48000", + "0x1", + "0x48127ff47fff8000", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x48127ff27fff8000", + "0x208b7fff7fff7ffe", + "0x482680017ffb8000", + "0x3", + "0x482480017ff48000", + "0x1", + "0x48127ff47fff8000", + "0x10780017fff7fff", + "0x27", + "0x40780017fff7fff", + "0x8", + "0x480a7ffb7fff8000", + "0x48127ff47fff8000", + "0x48127ff47fff8000", + "0x10780017fff7fff", + "0x20", + "0x40780017fff7fff", + "0xa", + "0x4824800180007ff5", + "0x1", + "0x20680017fff7fff", + "0xf", + "0x480a7ffb7fff8000", + "0x482480017ff08000", + "0x1", + "0x48127ff07fff8000", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x1", + "0x480680017fff8000", + "0x0", + "0x208b7fff7fff7ffe", + "0x480a7ffb7fff8000", + "0x482480017ff08000", + "0x1", + "0x48127ff07fff8000", + "0x10780017fff7fff", + "0x2e", + "0x40780017fff7fff", + "0xc", + "0x480a7ffb7fff8000", + "0x48127ff07fff8000", + "0x48127ff07fff8000", + "0x10780017fff7fff", + "0x27", + "0x40780017fff7fff", + "0xe", + "0x4824800180007ff1", + "0x1", + "0x20680017fff7fff", + "0xf", + "0x480a7ffb7fff8000", + "0x482680017ffc8000", + "0x1", + "0x480a7ffd7fff8000", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x1", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x208b7fff7fff7ffe", + "0x480a7ffb7fff8000", + "0x482680017ffc8000", + "0x1", + "0x480a7ffd7fff8000", + "0x480680017fff8000", + "0x1", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x208b7fff7fff7ffe", + "0x40780017fff7fff", + "0x10", + "0x480a7ffb7fff8000", + "0x480a7ffc7fff8000", + "0x480a7ffd7fff8000", + "0x480680017fff8000", + "0x1", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x208b7fff7fff7ffe", + "0x48297ffc80007ffd", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0x8c", + "0x480280007ffc8000", + "0x20680017fff7fff", + "0x3e", + "0x40780017fff7fff", + "0x1", + "0x482680017ffc8000", + "0x1", + "0x480a7ffd7fff8000", + "0x48307ffe80007fff", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0x2d", + "0x480080007ffd8000", + "0xa0680017fff8000", + "0x12", + "0x4824800180007ffe", + "0x100", + "0x4844800180008002", + "0x8000000000000110000000000000000", + "0x4830800080017ffe", + "0x480280007ffb7fff", + "0x482480017ffe8000", + "0xefffffffffffffde00000000000000ff", + "0x480280017ffb7fff", + "0x400280027ffb7ffb", + "0x402480017fff7ffb", + "0xffffffffffffffffffffffffffffffff", + "0x20680017fff7fff", + "0x15", + "0x402780017fff7fff", + "0x1", + "0x400280007ffb7ffe", + "0x482480017ffe8000", + "0xffffffffffffffffffffffffffffff00", + "0x400280017ffb7fff", + "0x40780017fff7fff", + "0x5", + "0x482680017ffb8000", + "0x2", + "0x482480017ff48000", + "0x1", + "0x48127ff47fff8000", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x48127ff37fff8000", + "0x208b7fff7fff7ffe", + "0x482680017ffb8000", + "0x3", + "0x482480017ff48000", + "0x1", + "0x48127ff47fff8000", + "0x10780017fff7fff", + "0x59", + "0x40780017fff7fff", + "0x8", + "0x480a7ffb7fff8000", + "0x48127ff47fff8000", + "0x48127ff47fff8000", + "0x10780017fff7fff", + "0x52", + "0x4824800180007fff", + "0x1", + "0x20680017fff7fff", + "0x3c", + "0x482680017ffc8000", + "0x1", + "0x480a7ffd7fff8000", + "0x48307ffe80007fff", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0x2d", + "0x480080007ffd8000", + "0xa0680017fff8000", + "0x12", + "0x4824800180007ffe", + "0x10000", + "0x4844800180008002", + "0x8000000000000110000000000000000", + "0x4830800080017ffe", + "0x480280007ffb7fff", + "0x482480017ffe8000", + "0xefffffffffffffde000000000000ffff", + "0x480280017ffb7fff", + "0x400280027ffb7ffb", + "0x402480017fff7ffb", + "0xffffffffffffffffffffffffffffffff", + "0x20680017fff7fff", + "0x15", + "0x402780017fff7fff", + "0x1", + "0x400280007ffb7ffe", + "0x482480017ffe8000", + "0xffffffffffffffffffffffffffff0000", + "0x400280017ffb7fff", + "0x40780017fff7fff", + "0x5", + "0x482680017ffb8000", + "0x2", + "0x482480017ff48000", + "0x1", + "0x48127ff47fff8000", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x1", + "0x48127ff37fff8000", + "0x208b7fff7fff7ffe", + "0x482680017ffb8000", + "0x3", + "0x482480017ff48000", + "0x1", + "0x48127ff47fff8000", + "0x10780017fff7fff", + "0x1b", + "0x40780017fff7fff", + "0x8", + "0x480a7ffb7fff8000", + "0x48127ff47fff8000", + "0x48127ff47fff8000", + "0x10780017fff7fff", + "0x14", + "0x40780017fff7fff", + "0xb", + "0x480a7ffb7fff8000", + "0x482680017ffc8000", + "0x1", + "0x480a7ffd7fff8000", + "0x480680017fff8000", + "0x1", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x208b7fff7fff7ffe", + "0x40780017fff7fff", + "0xd", + "0x480a7ffb7fff8000", + "0x480a7ffc7fff8000", + "0x480a7ffd7fff8000", + "0x480680017fff8000", + "0x1", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x208b7fff7fff7ffe", + "0xa0680017fff8000", + "0x7", + "0x482680017ff88000", + "0xfffffffffffffffffffffffffffff182", + "0x400280007ff77fff", + "0x10780017fff7fff", + "0x90", + "0x4825800180007ff8", + "0xe7e", + "0x400280007ff77fff", + "0x20780017fff7ffd", + "0xf", + "0x482680017ff78000", + "0x1", + "0x482480017ffe8000", + "0x1202", + "0x480680017fff8000", + "0x0", + "0x480a7ff97fff8000", + "0x480a7ffa7fff8000", + "0x480680017fff8000", + "0x0", + "0x480a7ffb7fff8000", + "0x480a7ffc7fff8000", + "0x208b7fff7fff7ffe", + "0x48297ff980007ffa", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0x66", + "0x480280007ff98000", + "0x20680017fff7fff", + "0x3d", + "0x482680017ff98000", + "0x1", + "0x480a7ffa7fff8000", + "0x48307ffe80007fff", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0x2d", + "0x480080007ffd8000", + "0xa0680017fff8000", + "0x12", + "0x4824800180007ffe", + "0x10000", + "0x4844800180008002", + "0x8000000000000110000000000000000", + "0x4830800080017ffe", + "0x480280017ff77fff", + "0x482480017ffe8000", + "0xefffffffffffffde000000000000ffff", + "0x480280027ff77fff", + "0x400280037ff77ffb", + "0x402480017fff7ffb", + "0xffffffffffffffffffffffffffffffff", + "0x20680017fff7fff", + "0x13", + "0x402780017fff7fff", + "0x1", + "0x400280017ff77ffe", + "0x482480017ffe8000", + "0xffffffffffffffffffffffffffff0000", + "0x400280027ff77fff", + "0x482680017ff78000", + "0x3", + "0x48127ff67fff8000", + "0x480680017fff8000", + "0x0", + "0x48127ffa7fff8000", + "0x482480017ff68000", + "0x1", + "0x48127ff67fff8000", + "0x10780017fff7fff", + "0x22", + "0x482680017ff78000", + "0x4", + "0x482480017ff18000", + "0x7d0", + "0x482480017ff38000", + "0x1", + "0x48127ff37fff8000", + "0x10780017fff7fff", + "0x36", + "0x482680017ff78000", + "0x1", + "0x482480017ff98000", + "0xc8a", + "0x48127ffb7fff8000", + "0x48127ffb7fff8000", + "0x10780017fff7fff", + "0x2e", + "0x4824800180007fff", + "0x1", + "0x20680017fff7fff", + "0x1b", + "0x482680017ff78000", + "0x1", + "0x482480017ffb8000", + "0x3ac", + "0x480680017fff8000", + "0x1", + "0x480680017fff8000", + "0x0", + "0x482680017ff98000", + "0x1", + "0x480a7ffa7fff8000", + "0x400280007ffc7ffc", + "0x400280017ffc7ffd", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x48127ffc7fff8000", + "0x48127ffc7fff8000", + "0x480a7ffb7fff8000", + "0x482680017ffc8000", + "0x2", + "0x4825800180007ffd", + "0x1", + "0x1104800180018000", + "0x800000000000010ffffffffffffffffffffffffffffffffffffffffffffff8b", + "0x208b7fff7fff7ffe", + "0x482680017ff78000", + "0x1", + "0x482480017ffb8000", + "0xdb6", + "0x482680017ff98000", + "0x1", + "0x480a7ffa7fff8000", + "0x10780017fff7fff", + "0x8", + "0x482680017ff78000", + "0x1", + "0x482480017ffd8000", + "0xf46", + "0x480a7ff97fff8000", + "0x480a7ffa7fff8000", + "0x48127ffc7fff8000", + "0x48127ffc7fff8000", + "0x480680017fff8000", + "0x0", + "0x48127ffb7fff8000", + "0x48127ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x208b7fff7fff7ffe", + "0x1104800180018000", + "0x800000000000010fffffffffffffffffffffffffffffffffffffffffffffc25", + "0x482680017ff78000", + "0x1", + "0x480a7ff87fff8000", + "0x480680017fff8000", + "0x1", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x48127ff87fff8000", + "0x48127ff87fff8000", + "0x208b7fff7fff7ffe", + "0xa0680017fff8000", + "0x7", + "0x482680017ff98000", + "0xfffffffffffffffffffffffffffff6be", + "0x400280007ff87fff", + "0x10780017fff7fff", + "0x34", + "0x4825800180007ff9", + "0x942", + "0x400280007ff87fff", + "0x48297ffa80007ffb", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0x23", + "0x480280007ffa8000", + "0x480280017ffa8000", + "0x20680017fff7ffe", + "0xc", + "0x480680017fff8000", + "0x0", + "0x400280007ffd7fff", + "0x400280017ffd7ffe", + "0x48127ffb7fff8000", + "0x480a7ffc7fff8000", + "0x482680017ffd8000", + "0x2", + "0x10780017fff7fff", + "0xa", + "0x480680017fff8000", + "0x1", + "0x400280007ffd7fff", + "0x482480017ffb8000", + "0xc8", + "0x480a7ffc7fff8000", + "0x482680017ffd8000", + "0x1", + "0x482680017ff88000", + "0x1", + "0x48127ffc7fff8000", + "0x482680017ffa8000", + "0x2", + "0x480a7ffb7fff8000", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x1104800180018000", + "0x800000000000010ffffffffffffffffffffffffffffffffffffffffffffffd4", + "0x208b7fff7fff7ffe", + "0x482680017ff88000", + "0x1", + "0x482480017ffd8000", + "0xbfe", + "0x480680017fff8000", + "0x0", + "0x480a7ffc7fff8000", + "0x480a7ffd7fff8000", + "0x208b7fff7fff7ffe", + "0x1104800180018000", + "0x800000000000010fffffffffffffffffffffffffffffffffffffffffffffbdc", + "0x482680017ff88000", + "0x1", + "0x480a7ff97fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffb7fff8000", + "0x48127ffb7fff8000", + "0x208b7fff7fff7ffe", + "0x48297ffc80007ffd", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0x90", + "0x480280007ffc8000", + "0x20680017fff7fff", + "0x6d", + "0x482680017ffc8000", + "0x1", + "0x480a7ffd7fff8000", + "0x48307ffe80007fff", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0x5e", + "0x480080007ffd8000", + "0xa0680017fff8000", + "0x12", + "0x4824800180007ffe", + "0x10000000000000000", + "0x4844800180008002", + "0x8000000000000110000000000000000", + "0x4830800080017ffe", + "0x480280007ffb7fff", + "0x482480017ffe8000", + "0xefffffffffffffdeffffffffffffffff", + "0x480280017ffb7fff", + "0x400280027ffb7ffb", + "0x402480017fff7ffb", + "0xffffffffffffffffffffffffffffffff", + "0x20680017fff7fff", + "0x44", + "0x402780017fff7fff", + "0x1", + "0x400280007ffb7ffe", + "0x482480017ffe8000", + "0xffffffffffffffff0000000000000000", + "0x400280017ffb7fff", + "0x482480017ffa8000", + "0x1", + "0x48127ffa7fff8000", + "0x48307ffe80007fff", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0x2e", + "0x480080007ffd8000", + "0xa0680017fff8000", + "0x12", + "0x4824800180007ffe", + "0x100000000", + "0x4844800180008002", + "0x8000000000000110000000000000000", + "0x4830800080017ffe", + "0x480280027ffb7fff", + "0x482480017ffe8000", + "0xefffffffffffffde00000000ffffffff", + "0x480280037ffb7fff", + "0x400280047ffb7ffb", + "0x402480017fff7ffb", + "0xffffffffffffffffffffffffffffffff", + "0x20680017fff7fff", + "0x16", + "0x402780017fff7fff", + "0x1", + "0x400280027ffb7ffe", + "0x482480017ffe8000", + "0xffffffffffffffffffffffff00000000", + "0x400280037ffb7fff", + "0x40780017fff7fff", + "0x5", + "0x482680017ffb8000", + "0x4", + "0x482480017ff48000", + "0x1", + "0x48127ff47fff8000", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x48127fed7fff8000", + "0x48127ff27fff8000", + "0x208b7fff7fff7ffe", + "0x482680017ffb8000", + "0x5", + "0x482480017ff48000", + "0x1", + "0x48127ff47fff8000", + "0x10780017fff7fff", + "0x3f", + "0x40780017fff7fff", + "0x8", + "0x482680017ffb8000", + "0x2", + "0x48127ff47fff8000", + "0x48127ff47fff8000", + "0x10780017fff7fff", + "0x37", + "0x40780017fff7fff", + "0x6", + "0x482680017ffb8000", + "0x3", + "0x482480017fee8000", + "0x1", + "0x48127fee7fff8000", + "0x10780017fff7fff", + "0x2e", + "0x40780017fff7fff", + "0xe", + "0x480a7ffb7fff8000", + "0x48127fee7fff8000", + "0x48127fee7fff8000", + "0x10780017fff7fff", + "0x27", + "0x40780017fff7fff", + "0x10", + "0x4824800180007fef", + "0x1", + "0x20680017fff7fff", + "0xf", + "0x480a7ffb7fff8000", + "0x482680017ffc8000", + "0x1", + "0x480a7ffd7fff8000", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x1", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x208b7fff7fff7ffe", + "0x480a7ffb7fff8000", + "0x482680017ffc8000", + "0x1", + "0x480a7ffd7fff8000", + "0x480680017fff8000", + "0x1", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x208b7fff7fff7ffe", + "0x40780017fff7fff", + "0x12", + "0x480a7ffb7fff8000", + "0x480a7ffc7fff8000", + "0x480a7ffd7fff8000", + "0x480680017fff8000", + "0x1", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x208b7fff7fff7ffe", + "0x48297ffc80007ffd", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0xac", + "0x480280007ffc8000", + "0x20680017fff7fff", + "0x45", + "0x482680017ffc8000", + "0x1", + "0x480a7ffd7fff8000", + "0x48307ffe80007fff", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0x36", + "0x40780017fff7fff", + "0x1", + "0x480a7ffa7fff8000", + "0x480a7ffb7fff8000", + "0x482480017ffa8000", + "0x1", + "0x48127ffa7fff8000", + "0x48127ffb7fff8000", + "0x48127ffa7fff8000", + "0x480080007ff68000", + "0x1104800180018000", + "0x6eb", + "0x20680017fff7ffa", + "0x19", + "0x20680017fff7ffd", + "0x10", + "0x48127ff87fff8000", + "0x482480017ff88000", + "0x2bc", + "0x480680017fff8000", + "0x0", + "0x48127ff87fff8000", + "0x48127ff87fff8000", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x48127ff77fff8000", + "0x48127ff77fff8000", + "0x208b7fff7fff7ffe", + "0x48127ff87fff8000", + "0x482480017ff88000", + "0xc8", + "0x48127ff97fff8000", + "0x48127ff97fff8000", + "0x10780017fff7fff", + "0x5c", + "0x48127ff87fff8000", + "0x48127ff87fff8000", + "0x480680017fff8000", + "0x1", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x48127ff77fff8000", + "0x48127ff77fff8000", + "0x208b7fff7fff7ffe", + "0x480a7ffa7fff8000", + "0x482680017ffb8000", + "0xd8e", + "0x48127ffb7fff8000", + "0x48127ffb7fff8000", + "0x10780017fff7fff", + "0x46", + "0x4824800180007fff", + "0x1", + "0x20680017fff7fff", + "0x51", + "0x482680017ffc8000", + "0x1", + "0x480a7ffd7fff8000", + "0x48307ffe80007fff", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0x35", + "0x40780017fff7fff", + "0x1", + "0x480a7ffa7fff8000", + "0x480a7ffb7fff8000", + "0x482480017ffa8000", + "0x1", + "0x48127ffa7fff8000", + "0x48127ffb7fff8000", + "0x48127ffa7fff8000", + "0x480080007ff68000", + "0x1104800180018000", + "0x79f", + "0x20680017fff7ffa", + "0x18", + "0x20680017fff7ffd", + "0x10", + "0x48127ff87fff8000", + "0x482480017ff88000", + "0x1f4", + "0x480680017fff8000", + "0x0", + "0x48127ff87fff8000", + "0x48127ff87fff8000", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x1", + "0x48127ff77fff8000", + "0x48127ff77fff8000", + "0x208b7fff7fff7ffe", + "0x48127ff87fff8000", + "0x48127ff87fff8000", + "0x48127ff97fff8000", + "0x48127ff97fff8000", + "0x10780017fff7fff", + "0x16", + "0x48127ff87fff8000", + "0x48127ff87fff8000", + "0x480680017fff8000", + "0x1", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x48127ff77fff8000", + "0x48127ff77fff8000", + "0x208b7fff7fff7ffe", + "0x480a7ffa7fff8000", + "0x482680017ffb8000", + "0xd2a", + "0x48127ffb7fff8000", + "0x48127ffb7fff8000", + "0x48127ffc7fff8000", + "0x48127ffc7fff8000", + "0x480680017fff8000", + "0x0", + "0x48127ffb7fff8000", + "0x48127ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x208b7fff7fff7ffe", + "0x480a7ffa7fff8000", + "0x482680017ffb8000", + "0x10ae", + "0x480680017fff8000", + "0x0", + "0x482680017ffc8000", + "0x1", + "0x480a7ffd7fff8000", + "0x480680017fff8000", + "0x1", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x208b7fff7fff7ffe", + "0x480a7ffa7fff8000", + "0x482680017ffb8000", + "0x11da", + "0x480680017fff8000", + "0x0", + "0x480a7ffc7fff8000", + "0x480a7ffd7fff8000", + "0x480680017fff8000", + "0x1", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x208b7fff7fff7ffe", + "0xa0680017fff8000", + "0x7", + "0x482680017ff98000", + "0xfffffffffffffffffffffffffffff9de", + "0x400280007ff87fff", + "0x10780017fff7fff", + "0x21", + "0x4825800180007ff9", + "0x622", + "0x400280007ff87fff", + "0x48297ffa80007ffb", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0x10", + "0x480280007ffa8000", + "0x400280007ffd7fff", + "0x482680017ff88000", + "0x1", + "0x48127ffc7fff8000", + "0x482680017ffa8000", + "0x1", + "0x480a7ffb7fff8000", + "0x480a7ffc7fff8000", + "0x482680017ffd8000", + "0x1", + "0x1104800180018000", + "0x800000000000010ffffffffffffffffffffffffffffffffffffffffffffffe7", + "0x208b7fff7fff7ffe", + "0x482680017ff88000", + "0x1", + "0x482480017ffd8000", + "0x8de", + "0x480680017fff8000", + "0x0", + "0x480a7ffc7fff8000", + "0x480a7ffd7fff8000", + "0x208b7fff7fff7ffe", + "0x1104800180018000", + "0x800000000000010fffffffffffffffffffffffffffffffffffffffffffffa4c", + "0x482680017ff88000", + "0x1", + "0x480a7ff97fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffb7fff8000", + "0x48127ffb7fff8000", + "0x208b7fff7fff7ffe", + "0x48297ffc80007ffd", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0xa8", + "0x482680017ffc8000", + "0x1", + "0x480a7ffd7fff8000", + "0x480280007ffc8000", + "0x20680017fff7fff", + "0x22", + "0x480a7ffb7fff8000", + "0x48127ffc7fff8000", + "0x48127ffc7fff8000", + "0x1104800180018000", + "0x800000000000010fffffffffffffffffffffffffffffffffffffffffffffaf6", + "0x20680017fff7ffc", + "0xd", + "0x48127ff97fff8000", + "0x48127ff97fff8000", + "0x48127ff97fff8000", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x48127ff87fff8000", + "0x48127ff87fff8000", + "0x48127ff87fff8000", + "0x208b7fff7fff7ffe", + "0x48127ff97fff8000", + "0x48127ff97fff8000", + "0x48127ff97fff8000", + "0x480680017fff8000", + "0x1", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x208b7fff7fff7ffe", + "0x40780017fff7fff", + "0x11", + "0x4824800180007fee", + "0x1", + "0x20680017fff7fff", + "0x6c", + "0x48307feb80007fec", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0x60", + "0x480080007fea8000", + "0xa0680017fff8000", + "0x12", + "0x4824800180007ffe", + "0x10000", + "0x4844800180008002", + "0x8000000000000110000000000000000", + "0x4830800080017ffe", + "0x480280007ffb7fff", + "0x482480017ffe8000", + "0xefffffffffffffde000000000000ffff", + "0x480280017ffb7fff", + "0x400280027ffb7ffb", + "0x402480017fff7ffb", + "0xffffffffffffffffffffffffffffffff", + "0x20680017fff7fff", + "0x46", + "0x402780017fff7fff", + "0x1", + "0x400280007ffb7ffe", + "0x482480017ffe8000", + "0xffffffffffffffffffffffffffff0000", + "0x400280017ffb7fff", + "0x482480017fe78000", + "0x1", + "0x48127fe77fff8000", + "0x48307ffe80007fff", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0x30", + "0x480080007ffd8000", + "0xa0680017fff8000", + "0x12", + "0x4824800180007ffe", + "0x10000", + "0x4844800180008002", + "0x8000000000000110000000000000000", + "0x4830800080017ffe", + "0x480280027ffb7fff", + "0x482480017ffe8000", + "0xefffffffffffffde000000000000ffff", + "0x480280037ffb7fff", + "0x400280047ffb7ffb", + "0x402480017fff7ffb", + "0xffffffffffffffffffffffffffffffff", + "0x20680017fff7fff", + "0x18", + "0x402780017fff7fff", + "0x1", + "0x400280027ffb7ffe", + "0x482480017ffe8000", + "0xffffffffffffffffffffffffffff0000", + "0x400280037ffb7fff", + "0x40780017fff7fff", + "0x5", + "0x482680017ffb8000", + "0x4", + "0x482480017ff48000", + "0x1", + "0x48127ff47fff8000", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x1", + "0x480680017fff8000", + "0x0", + "0x48127fec7fff8000", + "0x48127ff17fff8000", + "0x208b7fff7fff7ffe", + "0x482680017ffb8000", + "0x5", + "0x482480017ff48000", + "0x1", + "0x48127ff47fff8000", + "0x10780017fff7fff", + "0x2f", + "0x40780017fff7fff", + "0x8", + "0x482680017ffb8000", + "0x2", + "0x48127ff47fff8000", + "0x48127ff47fff8000", + "0x10780017fff7fff", + "0x27", + "0x40780017fff7fff", + "0x6", + "0x482680017ffb8000", + "0x3", + "0x482480017fdb8000", + "0x1", + "0x48127fdb7fff8000", + "0x10780017fff7fff", + "0x1e", + "0x40780017fff7fff", + "0xe", + "0x480a7ffb7fff8000", + "0x48127fdb7fff8000", + "0x48127fdb7fff8000", + "0x10780017fff7fff", + "0x17", + "0x40780017fff7fff", + "0xf", + "0x480a7ffb7fff8000", + "0x48127fdb7fff8000", + "0x48127fdb7fff8000", + "0x480680017fff8000", + "0x1", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x208b7fff7fff7ffe", + "0x40780017fff7fff", + "0x24", + "0x480a7ffb7fff8000", + "0x480a7ffc7fff8000", + "0x480a7ffd7fff8000", + "0x480680017fff8000", + "0x1", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x208b7fff7fff7ffe", + "0x48297ffc80007ffd", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0x8e", + "0x480280007ffc8000", + "0x20680017fff7fff", + "0x34", + "0x480a7ffa7fff8000", + "0x480a7ffb7fff8000", + "0x482680017ffc8000", + "0x1", + "0x480a7ffd7fff8000", + "0x1104800180018000", + "0x5be", + "0x20680017fff7ff9", + "0x1a", + "0x20680017fff7ffc", + "0x11", + "0x48127ff77fff8000", + "0x482480017ff78000", + "0x258", + "0x480680017fff8000", + "0x0", + "0x48127ff77fff8000", + "0x48127ff77fff8000", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x48127ff67fff8000", + "0x48127ff67fff8000", + "0x48127ff67fff8000", + "0x208b7fff7fff7ffe", + "0x48127ff77fff8000", + "0x482480017ff78000", + "0x64", + "0x48127ff87fff8000", + "0x48127ff87fff8000", + "0x10780017fff7fff", + "0x35", + "0x48127ff77fff8000", + "0x48127ff77fff8000", + "0x480680017fff8000", + "0x1", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x48127ff67fff8000", + "0x48127ff67fff8000", + "0x208b7fff7fff7ffe", + "0x4824800180007fff", + "0x1", + "0x20680017fff7fff", + "0x42", + "0x480a7ffa7fff8000", + "0x480a7ffb7fff8000", + "0x482680017ffc8000", + "0x1", + "0x480a7ffd7fff8000", + "0x1104800180018000", + "0x683", + "0x20680017fff7ff9", + "0x28", + "0x20680017fff7ffc", + "0x11", + "0x48127ff77fff8000", + "0x482480017ff78000", + "0x190", + "0x480680017fff8000", + "0x0", + "0x48127ff77fff8000", + "0x48127ff77fff8000", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x1", + "0x48127ff67fff8000", + "0x48127ff67fff8000", + "0x48127ff67fff8000", + "0x208b7fff7fff7ffe", + "0x48127ff77fff8000", + "0x48127ff77fff8000", + "0x48127ff87fff8000", + "0x48127ff87fff8000", + "0x48127ffc7fff8000", + "0x48127ffc7fff8000", + "0x480680017fff8000", + "0x0", + "0x48127ffb7fff8000", + "0x48127ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x208b7fff7fff7ffe", + "0x48127ff77fff8000", + "0x48127ff77fff8000", + "0x480680017fff8000", + "0x1", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x48127ff67fff8000", + "0x48127ff67fff8000", + "0x208b7fff7fff7ffe", + "0x480a7ffa7fff8000", + "0x482680017ffb8000", + "0x1c8e", + "0x480680017fff8000", + "0x0", + "0x482680017ffc8000", + "0x1", + "0x480a7ffd7fff8000", + "0x480680017fff8000", + "0x1", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x208b7fff7fff7ffe", + "0x480a7ffa7fff8000", + "0x482680017ffb8000", + "0x1dba", + "0x480680017fff8000", + "0x0", + "0x480a7ffc7fff8000", + "0x480a7ffd7fff8000", + "0x480680017fff8000", + "0x1", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x208b7fff7fff7ffe", + "0x48297ffc80007ffd", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0x72", + "0x482680017ffc8000", + "0x1", + "0x480a7ffd7fff8000", + "0x480280007ffc8000", + "0x20680017fff7fff", + "0x1f", + "0x480a7ffb7fff8000", + "0x48127ffc7fff8000", + "0x48127ffc7fff8000", + "0x1104800180018000", + "0x800000000000010fffffffffffffffffffffffffffffffffffffffffffffb82", + "0x20680017fff7ffd", + "0xc", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x48127ff97fff8000", + "0x48127ff97fff8000", + "0x208b7fff7fff7ffe", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x480680017fff8000", + "0x1", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x208b7fff7fff7ffe", + "0x40780017fff7fff", + "0xf", + "0x4824800180007ff0", + "0x1", + "0x20680017fff7fff", + "0x3b", + "0x48307fed80007fee", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0x2f", + "0x480080007fec8000", + "0xa0680017fff8000", + "0x12", + "0x4824800180007ffe", + "0x100000000", + "0x4844800180008002", + "0x8000000000000110000000000000000", + "0x4830800080017ffe", + "0x480280007ffb7fff", + "0x482480017ffe8000", + "0xefffffffffffffde00000000ffffffff", + "0x480280017ffb7fff", + "0x400280027ffb7ffb", + "0x402480017fff7ffb", + "0xffffffffffffffffffffffffffffffff", + "0x20680017fff7fff", + "0x17", + "0x402780017fff7fff", + "0x1", + "0x400280007ffb7ffe", + "0x482480017ffe8000", + "0xffffffffffffffffffffffff00000000", + "0x400280017ffb7fff", + "0x40780017fff7fff", + "0x5", + "0x482680017ffb8000", + "0x2", + "0x482480017fe38000", + "0x1", + "0x48127fe37fff8000", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x1", + "0x480680017fff8000", + "0x0", + "0x48127ff27fff8000", + "0x208b7fff7fff7ffe", + "0x482680017ffb8000", + "0x3", + "0x482480017fe38000", + "0x1", + "0x48127fe37fff8000", + "0x10780017fff7fff", + "0x1c", + "0x40780017fff7fff", + "0x8", + "0x480a7ffb7fff8000", + "0x48127fe37fff8000", + "0x48127fe37fff8000", + "0x10780017fff7fff", + "0x15", + "0x40780017fff7fff", + "0x9", + "0x480a7ffb7fff8000", + "0x48127fe37fff8000", + "0x48127fe37fff8000", + "0x480680017fff8000", + "0x1", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x208b7fff7fff7ffe", + "0x40780017fff7fff", + "0x1c", + "0x480a7ffb7fff8000", + "0x480a7ffc7fff8000", + "0x480a7ffd7fff8000", + "0x480680017fff8000", + "0x1", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x208b7fff7fff7ffe", + "0x48297ffc80007ffd", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0xbd", + "0x480280007ffc8000", + "0x20680017fff7fff", + "0x40", + "0x40780017fff7fff", + "0x5", + "0x482680017ffc8000", + "0x1", + "0x480a7ffd7fff8000", + "0x48307ffe80007fff", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0x2f", + "0x480080007ffd8000", + "0xa0680017fff8000", + "0x12", + "0x4824800180007ffe", + "0x100", + "0x4844800180008002", + "0x8000000000000110000000000000000", + "0x4830800080017ffe", + "0x480280007ffb7fff", + "0x482480017ffe8000", + "0xefffffffffffffde00000000000000ff", + "0x480280017ffb7fff", + "0x400280027ffb7ffb", + "0x402480017fff7ffb", + "0xffffffffffffffffffffffffffffffff", + "0x20680017fff7fff", + "0x17", + "0x402780017fff7fff", + "0x1", + "0x400280007ffb7ffe", + "0x482480017ffe8000", + "0xffffffffffffffffffffffffffffff00", + "0x400280017ffb7fff", + "0x40780017fff7fff", + "0x5", + "0x482680017ffb8000", + "0x2", + "0x482480017ff48000", + "0x1", + "0x48127ff47fff8000", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x48127ff27fff8000", + "0x208b7fff7fff7ffe", + "0x482680017ffb8000", + "0x3", + "0x482480017ff48000", + "0x1", + "0x48127ff47fff8000", + "0x10780017fff7fff", + "0x88", + "0x40780017fff7fff", + "0x8", + "0x480a7ffb7fff8000", + "0x48127ff47fff8000", + "0x48127ff47fff8000", + "0x10780017fff7fff", + "0x81", + "0x4824800180007fff", + "0x1", + "0x20680017fff7fff", + "0x69", + "0x482680017ffc8000", + "0x1", + "0x480a7ffd7fff8000", + "0x48307ffe80007fff", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0x5a", + "0x480080007ffd8000", + "0x20680017fff7fff", + "0x3e", + "0x482480017ffc8000", + "0x1", + "0x48127ffc7fff8000", + "0x48307ffe80007fff", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0x2f", + "0x480080007ffd8000", + "0xa0680017fff8000", + "0x12", + "0x4824800180007ffe", + "0x100000000", + "0x4844800180008002", + "0x8000000000000110000000000000000", + "0x4830800080017ffe", + "0x480280007ffb7fff", + "0x482480017ffe8000", + "0xefffffffffffffde00000000ffffffff", + "0x480280017ffb7fff", + "0x400280027ffb7ffb", + "0x402480017fff7ffb", + "0xffffffffffffffffffffffffffffffff", + "0x20680017fff7fff", + "0x17", + "0x402780017fff7fff", + "0x1", + "0x400280007ffb7ffe", + "0x482480017ffe8000", + "0xffffffffffffffffffffffff00000000", + "0x400280017ffb7fff", + "0x40780017fff7fff", + "0x5", + "0x482680017ffb8000", + "0x2", + "0x482480017ff48000", + "0x1", + "0x48127ff47fff8000", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x1", + "0x480680017fff8000", + "0x0", + "0x48127ff27fff8000", + "0x208b7fff7fff7ffe", + "0x482680017ffb8000", + "0x3", + "0x482480017ff48000", + "0x1", + "0x48127ff47fff8000", + "0x10780017fff7fff", + "0x27", + "0x40780017fff7fff", + "0x8", + "0x480a7ffb7fff8000", + "0x48127ff47fff8000", + "0x48127ff47fff8000", + "0x10780017fff7fff", + "0x20", + "0x40780017fff7fff", + "0xa", + "0x4824800180007ff5", + "0x1", + "0x20680017fff7fff", + "0xf", + "0x480a7ffb7fff8000", + "0x482480017ff08000", + "0x1", + "0x48127ff07fff8000", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x1", + "0x480680017fff8000", + "0x1", + "0x480680017fff8000", + "0x0", + "0x208b7fff7fff7ffe", + "0x480a7ffb7fff8000", + "0x482480017ff08000", + "0x1", + "0x48127ff07fff8000", + "0x10780017fff7fff", + "0x1d", + "0x40780017fff7fff", + "0xc", + "0x480a7ffb7fff8000", + "0x48127ff07fff8000", + "0x48127ff07fff8000", + "0x10780017fff7fff", + "0x16", + "0x40780017fff7fff", + "0xf", + "0x480a7ffb7fff8000", + "0x482680017ffc8000", + "0x1", + "0x480a7ffd7fff8000", + "0x480680017fff8000", + "0x1", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x208b7fff7fff7ffe", + "0x40780017fff7fff", + "0x11", + "0x480a7ffb7fff8000", + "0x480a7ffc7fff8000", + "0x480a7ffd7fff8000", + "0x480680017fff8000", + "0x1", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x208b7fff7fff7ffe", + "0x48297ffc80007ffd", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0x8d", + "0x480280007ffc8000", + "0xa0680017fff8000", + "0x12", + "0x4824800180007ffe", + "0x10000000000000000", + "0x4844800180008002", + "0x8000000000000110000000000000000", + "0x4830800080017ffe", + "0x480280007ffb7fff", + "0x482480017ffe8000", + "0xefffffffffffffdeffffffffffffffff", + "0x480280017ffb7fff", + "0x400280027ffb7ffb", + "0x402480017fff7ffb", + "0xffffffffffffffffffffffffffffffff", + "0x20680017fff7fff", + "0x73", + "0x402780017fff7fff", + "0x1", + "0x400280007ffb7ffe", + "0x482480017ffe8000", + "0xffffffffffffffff0000000000000000", + "0x400280017ffb7fff", + "0x482680017ffc8000", + "0x1", + "0x480a7ffd7fff8000", + "0x48307ffe80007fff", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0x5d", + "0x480080007ffd8000", + "0xa0680017fff8000", + "0x12", + "0x4824800180007ffe", + "0x10000000000000000", + "0x4844800180008002", + "0x8000000000000110000000000000000", + "0x4830800080017ffe", + "0x480280027ffb7fff", + "0x482480017ffe8000", + "0xefffffffffffffdeffffffffffffffff", + "0x480280037ffb7fff", + "0x400280047ffb7ffb", + "0x402480017fff7ffb", + "0xffffffffffffffffffffffffffffffff", + "0x20680017fff7fff", + "0x43", + "0x402780017fff7fff", + "0x1", + "0x400280027ffb7ffe", + "0x482480017ffe8000", + "0xffffffffffffffff0000000000000000", + "0x400280037ffb7fff", + "0x482480017ffa8000", + "0x1", + "0x48127ffa7fff8000", + "0x48307ffe80007fff", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0x2d", + "0x480080007ffd8000", + "0xa0680017fff8000", + "0x12", + "0x4824800180007ffe", + "0x100000000", + "0x4844800180008002", + "0x8000000000000110000000000000000", + "0x4830800080017ffe", + "0x480280047ffb7fff", + "0x482480017ffe8000", + "0xefffffffffffffde00000000ffffffff", + "0x480280057ffb7fff", + "0x400280067ffb7ffb", + "0x402480017fff7ffb", + "0xffffffffffffffffffffffffffffffff", + "0x20680017fff7fff", + "0x15", + "0x402780017fff7fff", + "0x1", + "0x400280047ffb7ffe", + "0x482480017ffe8000", + "0xffffffffffffffffffffffff00000000", + "0x400280057ffb7fff", + "0x40780017fff7fff", + "0x5", + "0x482680017ffb8000", + "0x6", + "0x482480017ff48000", + "0x1", + "0x48127ff47fff8000", + "0x480680017fff8000", + "0x0", + "0x48127fe87fff8000", + "0x48127fed7fff8000", + "0x48127ff27fff8000", + "0x208b7fff7fff7ffe", + "0x482680017ffb8000", + "0x7", + "0x482480017ff48000", + "0x1", + "0x48127ff47fff8000", + "0x10780017fff7fff", + "0x29", + "0x40780017fff7fff", + "0x8", + "0x482680017ffb8000", + "0x4", + "0x48127ff47fff8000", + "0x48127ff47fff8000", + "0x10780017fff7fff", + "0x21", + "0x40780017fff7fff", + "0x6", + "0x482680017ffb8000", + "0x5", + "0x482480017fee8000", + "0x1", + "0x48127fee7fff8000", + "0x10780017fff7fff", + "0x18", + "0x40780017fff7fff", + "0xe", + "0x482680017ffb8000", + "0x2", + "0x48127fee7fff8000", + "0x48127fee7fff8000", + "0x10780017fff7fff", + "0x10", + "0x40780017fff7fff", + "0xc", + "0x482680017ffb8000", + "0x3", + "0x482680017ffc8000", + "0x1", + "0x480a7ffd7fff8000", + "0x10780017fff7fff", + "0x7", + "0x40780017fff7fff", + "0x14", + "0x480a7ffb7fff8000", + "0x480a7ffc7fff8000", + "0x480a7ffd7fff8000", + "0x480680017fff8000", + "0x1", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x208b7fff7fff7ffe", + "0x48297ffc80007ffd", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0x6b", + "0x480280007ffc8000", + "0xa0680017fff8000", + "0x12", + "0x4824800180007ffe", + "0x10000", + "0x4844800180008002", + "0x8000000000000110000000000000000", + "0x4830800080017ffe", + "0x480280007ffb7fff", + "0x482480017ffe8000", + "0xefffffffffffffde000000000000ffff", + "0x480280017ffb7fff", + "0x400280027ffb7ffb", + "0x402480017fff7ffb", + "0xffffffffffffffffffffffffffffffff", + "0x20680017fff7fff", + "0x51", + "0x402780017fff7fff", + "0x1", + "0x400280007ffb7ffe", + "0x482480017ffe8000", + "0xffffffffffffffffffffffffffff0000", + "0x400280017ffb7fff", + "0x482680017ffc8000", + "0x1", + "0x480a7ffd7fff8000", + "0x48307ffe80007fff", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0x3b", + "0x480080007ffd8000", + "0xa0680017fff8000", + "0x12", + "0x4824800180007ffe", + "0x100", + "0x4844800180008002", + "0x8000000000000110000000000000000", + "0x4830800080017ffe", + "0x480280027ffb7fff", + "0x482480017ffe8000", + "0xefffffffffffffde00000000000000ff", + "0x480280037ffb7fff", + "0x400280047ffb7ffb", + "0x402480017fff7ffb", + "0xffffffffffffffffffffffffffffffff", + "0x20680017fff7fff", + "0x21", + "0x402780017fff7fff", + "0x1", + "0x400280027ffb7ffe", + "0x482480017ffe8000", + "0xffffffffffffffffffffffffffffff00", + "0x400280037ffb7fff", + "0x482680017ffb8000", + "0x4", + "0x482480017ff98000", + "0x1", + "0x48127ff97fff8000", + "0x1104800180018000", + "0x47f", + "0x20680017fff7ffc", + "0xd", + "0x48127ff97fff8000", + "0x48127ff97fff8000", + "0x48127ff97fff8000", + "0x480680017fff8000", + "0x0", + "0x48127fd27fff8000", + "0x48127fd77fff8000", + "0x48127ff77fff8000", + "0x48127ff77fff8000", + "0x48127ff77fff8000", + "0x208b7fff7fff7ffe", + "0x48127ff97fff8000", + "0x48127ff97fff8000", + "0x48127ff97fff8000", + "0x10780017fff7fff", + "0x21", + "0x40780017fff7fff", + "0x1c", + "0x482680017ffb8000", + "0x5", + "0x482480017fd88000", + "0x1", + "0x48127fd87fff8000", + "0x10780017fff7fff", + "0x8", + "0x40780017fff7fff", + "0x24", + "0x482680017ffb8000", + "0x2", + "0x48127fd87fff8000", + "0x48127fd87fff8000", + "0x10780017fff7fff", + "0x10", + "0x40780017fff7fff", + "0x22", + "0x482680017ffb8000", + "0x3", + "0x482680017ffc8000", + "0x1", + "0x480a7ffd7fff8000", + "0x10780017fff7fff", + "0x7", + "0x40780017fff7fff", + "0x2a", + "0x480a7ffb7fff8000", + "0x480a7ffc7fff8000", + "0x480a7ffd7fff8000", + "0x480680017fff8000", + "0x1", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x208b7fff7fff7ffe", + "0x40780017fff7fff", + "0x1", + "0x48297ffc80007ffd", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0x72", + "0x400380007ffc8000", + "0xa0680017fff8000", + "0x12", + "0x4825800180008000", + "0x10000", + "0x4844800180008002", + "0x8000000000000110000000000000000", + "0x4830800080017ffe", + "0x480280007ffa7fff", + "0x482480017ffe8000", + "0xefffffffffffffde000000000000ffff", + "0x480280017ffa7fff", + "0x400280027ffa7ffb", + "0x402480017fff7ffb", + "0xffffffffffffffffffffffffffffffff", + "0x20680017fff7fff", + "0x58", + "0x402780017fff7fff", + "0x1", + "0x400380007ffa8000", + "0x4826800180008000", + "0xffffffffffffffffffffffffffff0000", + "0x400280017ffa7fff", + "0x482680017ffc8000", + "0x1", + "0x480a7ffd7fff8000", + "0x48307ffe80007fff", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0x35", + "0x40780017fff7fff", + "0x1", + "0x482680017ffa8000", + "0x2", + "0x480a7ffb7fff8000", + "0x482480017ffa8000", + "0x1", + "0x48127ffa7fff8000", + "0x48127ffb7fff8000", + "0x48127ffa7fff8000", + "0x480080007ff68000", + "0x1104800180018000", + "0x4ac", + "0x20680017fff7ffa", + "0x17", + "0x20680017fff7ffd", + "0xf", + "0x48127ff87fff8000", + "0x482480017ff88000", + "0x1f4", + "0x480680017fff8000", + "0x0", + "0x48127ff87fff8000", + "0x48127ff87fff8000", + "0x480680017fff8000", + "0x0", + "0x480a80007fff8000", + "0x48127ff77fff8000", + "0x48127ff77fff8000", + "0x208b7fff7fff7ffe", + "0x48127ff87fff8000", + "0x48127ff87fff8000", + "0x48127ff97fff8000", + "0x48127ff97fff8000", + "0x10780017fff7fff", + "0x17", + "0x48127ff87fff8000", + "0x48127ff87fff8000", + "0x480680017fff8000", + "0x1", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x48127ff77fff8000", + "0x48127ff77fff8000", + "0x208b7fff7fff7ffe", + "0x482680017ffa8000", + "0x2", + "0x482680017ffb8000", + "0xd2a", + "0x48127ffb7fff8000", + "0x48127ffb7fff8000", + "0x48127ffc7fff8000", + "0x48127ffc7fff8000", + "0x480680017fff8000", + "0x0", + "0x48127ffb7fff8000", + "0x48127ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x208b7fff7fff7ffe", + "0x482680017ffa8000", + "0x3", + "0x482680017ffb8000", + "0xc1c", + "0x482680017ffc8000", + "0x1", + "0x480a7ffd7fff8000", + "0x10780017fff7fff", + "0x7", + "0x480a7ffa7fff8000", + "0x482680017ffb8000", + "0x1130", + "0x480a7ffc7fff8000", + "0x480a7ffd7fff8000", + "0x48127ffc7fff8000", + "0x48127ffc7fff8000", + "0x480680017fff8000", + "0x0", + "0x48127ffb7fff8000", + "0x48127ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x208b7fff7fff7ffe", + "0x48297ffc80007ffd", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0x6b", + "0x480280007ffc8000", + "0xa0680017fff8000", + "0x12", + "0x4824800180007ffe", + "0x10000", + "0x4844800180008002", + "0x8000000000000110000000000000000", + "0x4830800080017ffe", + "0x480280007ffb7fff", + "0x482480017ffe8000", + "0xefffffffffffffde000000000000ffff", + "0x480280017ffb7fff", + "0x400280027ffb7ffb", + "0x402480017fff7ffb", + "0xffffffffffffffffffffffffffffffff", + "0x20680017fff7fff", + "0x51", + "0x402780017fff7fff", + "0x1", + "0x400280007ffb7ffe", + "0x482480017ffe8000", + "0xffffffffffffffffffffffffffff0000", + "0x400280017ffb7fff", + "0x482680017ffc8000", + "0x1", + "0x480a7ffd7fff8000", + "0x48307ffe80007fff", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0x3b", + "0x480080007ffd8000", + "0xa0680017fff8000", + "0x12", + "0x4824800180007ffe", + "0x10000", + "0x4844800180008002", + "0x8000000000000110000000000000000", + "0x4830800080017ffe", + "0x480280027ffb7fff", + "0x482480017ffe8000", + "0xefffffffffffffde000000000000ffff", + "0x480280037ffb7fff", + "0x400280047ffb7ffb", + "0x402480017fff7ffb", + "0xffffffffffffffffffffffffffffffff", + "0x20680017fff7fff", + "0x21", + "0x402780017fff7fff", + "0x1", + "0x400280027ffb7ffe", + "0x482480017ffe8000", + "0xffffffffffffffffffffffffffff0000", + "0x400280037ffb7fff", + "0x482680017ffb8000", + "0x4", + "0x482480017ff98000", + "0x1", + "0x48127ff97fff8000", + "0x1104800180018000", + "0x482", + "0x20680017fff7ffc", + "0xd", + "0x48127ff97fff8000", + "0x48127ff97fff8000", + "0x48127ff97fff8000", + "0x480680017fff8000", + "0x0", + "0x48127fd27fff8000", + "0x48127fd77fff8000", + "0x48127ff77fff8000", + "0x48127ff77fff8000", + "0x48127ff77fff8000", + "0x208b7fff7fff7ffe", + "0x48127ff97fff8000", + "0x48127ff97fff8000", + "0x48127ff97fff8000", + "0x10780017fff7fff", + "0x21", + "0x40780017fff7fff", + "0x1c", + "0x482680017ffb8000", + "0x5", + "0x482480017fd88000", + "0x1", + "0x48127fd87fff8000", + "0x10780017fff7fff", + "0x8", + "0x40780017fff7fff", + "0x24", + "0x482680017ffb8000", + "0x2", + "0x48127fd87fff8000", + "0x48127fd87fff8000", + "0x10780017fff7fff", + "0x10", + "0x40780017fff7fff", + "0x22", + "0x482680017ffb8000", + "0x3", + "0x482680017ffc8000", + "0x1", + "0x480a7ffd7fff8000", + "0x10780017fff7fff", + "0x7", + "0x40780017fff7fff", + "0x2a", + "0x480a7ffb7fff8000", + "0x480a7ffc7fff8000", + "0x480a7ffd7fff8000", + "0x480680017fff8000", + "0x1", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x208b7fff7fff7ffe", + "0x48297ffc80007ffd", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0x8b", + "0x480280007ffc8000", + "0xa0680017fff8000", + "0x12", + "0x4824800180007ffe", + "0x100000000", + "0x4844800180008002", + "0x8000000000000110000000000000000", + "0x4830800080017ffe", + "0x480280007ffb7fff", + "0x482480017ffe8000", + "0xefffffffffffffde00000000ffffffff", + "0x480280017ffb7fff", + "0x400280027ffb7ffb", + "0x402480017fff7ffb", + "0xffffffffffffffffffffffffffffffff", + "0x20680017fff7fff", + "0x71", + "0x402780017fff7fff", + "0x1", + "0x400280007ffb7ffe", + "0x482480017ffe8000", + "0xffffffffffffffffffffffff00000000", + "0x400280017ffb7fff", + "0x482680017ffc8000", + "0x1", + "0x480a7ffd7fff8000", + "0x48307ffe80007fff", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0x5b", + "0x480080007ffd8000", + "0x20680017fff7fff", + "0x3e", + "0x482480017ffc8000", + "0x1", + "0x48127ffc7fff8000", + "0x48307ffe80007fff", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0x2e", + "0x480080007ffd8000", + "0xa0680017fff8000", + "0x12", + "0x4824800180007ffe", + "0x100", + "0x4844800180008002", + "0x8000000000000110000000000000000", + "0x4830800080017ffe", + "0x480280027ffb7fff", + "0x482480017ffe8000", + "0xefffffffffffffde00000000000000ff", + "0x480280037ffb7fff", + "0x400280047ffb7ffb", + "0x402480017fff7ffb", + "0xffffffffffffffffffffffffffffffff", + "0x20680017fff7fff", + "0x16", + "0x402780017fff7fff", + "0x1", + "0x400280027ffb7ffe", + "0x482480017ffe8000", + "0xffffffffffffffffffffffffffffff00", + "0x400280037ffb7fff", + "0x40780017fff7fff", + "0x5", + "0x482680017ffb8000", + "0x4", + "0x482480017ff48000", + "0x1", + "0x48127ff47fff8000", + "0x480680017fff8000", + "0x0", + "0x48127fea7fff8000", + "0x480680017fff8000", + "0x0", + "0x48127ff27fff8000", + "0x208b7fff7fff7ffe", + "0x482680017ffb8000", + "0x5", + "0x482480017ff48000", + "0x1", + "0x48127ff47fff8000", + "0x10780017fff7fff", + "0x2a", + "0x40780017fff7fff", + "0x8", + "0x482680017ffb8000", + "0x2", + "0x48127ff47fff8000", + "0x48127ff47fff8000", + "0x10780017fff7fff", + "0x22", + "0x40780017fff7fff", + "0xa", + "0x4824800180007ff5", + "0x1", + "0x20680017fff7fff", + "0xf", + "0x482680017ffb8000", + "0x2", + "0x482480017ff08000", + "0x1", + "0x48127ff07fff8000", + "0x480680017fff8000", + "0x0", + "0x48127fea7fff8000", + "0x480680017fff8000", + "0x1", + "0x480680017fff8000", + "0x0", + "0x208b7fff7fff7ffe", + "0x482680017ffb8000", + "0x2", + "0x482480017ff08000", + "0x1", + "0x48127ff07fff8000", + "0x10780017fff7fff", + "0x18", + "0x40780017fff7fff", + "0xc", + "0x482680017ffb8000", + "0x2", + "0x48127ff07fff8000", + "0x48127ff07fff8000", + "0x10780017fff7fff", + "0x10", + "0x40780017fff7fff", + "0xa", + "0x482680017ffb8000", + "0x3", + "0x482680017ffc8000", + "0x1", + "0x480a7ffd7fff8000", + "0x10780017fff7fff", + "0x7", + "0x40780017fff7fff", + "0x12", + "0x480a7ffb7fff8000", + "0x480a7ffc7fff8000", + "0x480a7ffd7fff8000", + "0x480680017fff8000", + "0x1", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x208b7fff7fff7ffe", + "0x48297ffc80007ffd", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0x8c", + "0x480280007ffc8000", + "0x20680017fff7fff", + "0x3e", + "0x40780017fff7fff", + "0x1", + "0x482680017ffc8000", + "0x1", + "0x480a7ffd7fff8000", + "0x48307ffe80007fff", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0x2d", + "0x480080007ffd8000", + "0xa0680017fff8000", + "0x12", + "0x4824800180007ffe", + "0x100", + "0x4844800180008002", + "0x8000000000000110000000000000000", + "0x4830800080017ffe", + "0x480280007ffb7fff", + "0x482480017ffe8000", + "0xefffffffffffffde00000000000000ff", + "0x480280017ffb7fff", + "0x400280027ffb7ffb", + "0x402480017fff7ffb", + "0xffffffffffffffffffffffffffffffff", + "0x20680017fff7fff", + "0x15", + "0x402780017fff7fff", + "0x1", + "0x400280007ffb7ffe", + "0x482480017ffe8000", + "0xffffffffffffffffffffffffffffff00", + "0x400280017ffb7fff", + "0x40780017fff7fff", + "0x5", + "0x482680017ffb8000", + "0x2", + "0x482480017ff48000", + "0x1", + "0x48127ff47fff8000", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x48127ff37fff8000", + "0x208b7fff7fff7ffe", + "0x482680017ffb8000", + "0x3", + "0x482480017ff48000", + "0x1", + "0x48127ff47fff8000", + "0x10780017fff7fff", + "0x59", + "0x40780017fff7fff", + "0x8", + "0x480a7ffb7fff8000", + "0x48127ff47fff8000", + "0x48127ff47fff8000", + "0x10780017fff7fff", + "0x52", + "0x4824800180007fff", + "0x1", + "0x20680017fff7fff", + "0x3c", + "0x482680017ffc8000", + "0x1", + "0x480a7ffd7fff8000", + "0x48307ffe80007fff", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0x2d", + "0x480080007ffd8000", + "0xa0680017fff8000", + "0x12", + "0x4824800180007ffe", + "0x10000000000000000", + "0x4844800180008002", + "0x8000000000000110000000000000000", + "0x4830800080017ffe", + "0x480280007ffb7fff", + "0x482480017ffe8000", + "0xefffffffffffffdeffffffffffffffff", + "0x480280017ffb7fff", + "0x400280027ffb7ffb", + "0x402480017fff7ffb", + "0xffffffffffffffffffffffffffffffff", + "0x20680017fff7fff", + "0x15", + "0x402780017fff7fff", + "0x1", + "0x400280007ffb7ffe", + "0x482480017ffe8000", + "0xffffffffffffffff0000000000000000", + "0x400280017ffb7fff", + "0x40780017fff7fff", + "0x5", + "0x482680017ffb8000", + "0x2", + "0x482480017ff48000", + "0x1", + "0x48127ff47fff8000", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x1", + "0x48127ff37fff8000", + "0x208b7fff7fff7ffe", + "0x482680017ffb8000", + "0x3", + "0x482480017ff48000", + "0x1", + "0x48127ff47fff8000", + "0x10780017fff7fff", + "0x1b", + "0x40780017fff7fff", + "0x8", + "0x480a7ffb7fff8000", + "0x48127ff47fff8000", + "0x48127ff47fff8000", + "0x10780017fff7fff", + "0x14", + "0x40780017fff7fff", + "0xb", + "0x480a7ffb7fff8000", + "0x482680017ffc8000", + "0x1", + "0x480a7ffd7fff8000", + "0x480680017fff8000", + "0x1", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x208b7fff7fff7ffe", + "0x40780017fff7fff", + "0xd", + "0x480a7ffb7fff8000", + "0x480a7ffc7fff8000", + "0x480a7ffd7fff8000", + "0x480680017fff8000", + "0x1", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x208b7fff7fff7ffe", + "0x40780017fff7fff", + "0x1", + "0x400180007fff7ffd", + "0x48127fff7fff8000", + "0x482480017ffe8000", + "0x1", + "0x208b7fff7fff7ffe", + "0xa0680017fff8000", + "0x7", + "0x482680017ff88000", + "0xfffffffffffffffffffffffffffff6fa", + "0x400280007ff77fff", + "0x10780017fff7fff", + "0x5b", + "0x4825800180007ff8", + "0x906", + "0x400280007ff77fff", + "0x20780017fff7ffd", + "0xf", + "0x482680017ff78000", + "0x1", + "0x482480017ffe8000", + "0xc8a", + "0x480680017fff8000", + "0x0", + "0x480a7ff97fff8000", + "0x480a7ffa7fff8000", + "0x480680017fff8000", + "0x0", + "0x480a7ffb7fff8000", + "0x480a7ffc7fff8000", + "0x208b7fff7fff7ffe", + "0x48297ff980007ffa", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0x31", + "0x480280007ff98000", + "0xa0680017fff8000", + "0x12", + "0x4824800180007ffe", + "0x100", + "0x4844800180008002", + "0x8000000000000110000000000000000", + "0x4830800080017ffe", + "0x480280017ff77fff", + "0x482480017ffe8000", + "0xefffffffffffffde00000000000000ff", + "0x480280027ff77fff", + "0x400280037ff77ffb", + "0x402480017fff7ffb", + "0xffffffffffffffffffffffffffffffff", + "0x20680017fff7fff", + "0x17", + "0x402780017fff7fff", + "0x1", + "0x400280017ff77ffe", + "0x482480017ffe8000", + "0xffffffffffffffffffffffffffffff00", + "0x400280027ff77fff", + "0x400280007ffc7ffd", + "0x482680017ff78000", + "0x3", + "0x48127ffa7fff8000", + "0x482680017ff98000", + "0x1", + "0x480a7ffa7fff8000", + "0x480a7ffb7fff8000", + "0x482680017ffc8000", + "0x1", + "0x4825800180007ffd", + "0x1", + "0x1104800180018000", + "0x800000000000010ffffffffffffffffffffffffffffffffffffffffffffffc0", + "0x208b7fff7fff7ffe", + "0x482680017ff78000", + "0x4", + "0x482480017ff58000", + "0x4b0", + "0x482680017ff98000", + "0x1", + "0x480a7ffa7fff8000", + "0x10780017fff7fff", + "0x8", + "0x482680017ff78000", + "0x1", + "0x482480017ffd8000", + "0x9ce", + "0x480a7ff97fff8000", + "0x480a7ffa7fff8000", + "0x48127ffc7fff8000", + "0x48127ffc7fff8000", + "0x480680017fff8000", + "0x0", + "0x48127ffb7fff8000", + "0x48127ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x208b7fff7fff7ffe", + "0x1104800180018000", + "0x800000000000010fffffffffffffffffffffffffffffffffffffffffffff3cc", + "0x482680017ff78000", + "0x1", + "0x480a7ff87fff8000", + "0x480680017fff8000", + "0x1", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x48127ff87fff8000", + "0x48127ff87fff8000", + "0x208b7fff7fff7ffe", + "0x40780017fff7fff", + "0x1", + "0x48297ffc80007ffd", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0x72", + "0x400380007ffc8000", + "0xa0680017fff8000", + "0x12", + "0x4825800180008000", + "0x100000000", + "0x4844800180008002", + "0x8000000000000110000000000000000", + "0x4830800080017ffe", + "0x480280007ffa7fff", + "0x482480017ffe8000", + "0xefffffffffffffde00000000ffffffff", + "0x480280017ffa7fff", + "0x400280027ffa7ffb", + "0x402480017fff7ffb", + "0xffffffffffffffffffffffffffffffff", + "0x20680017fff7fff", + "0x58", + "0x402780017fff7fff", + "0x1", + "0x400380007ffa8000", + "0x4826800180008000", + "0xffffffffffffffffffffffff00000000", + "0x400280017ffa7fff", + "0x482680017ffc8000", + "0x1", + "0x480a7ffd7fff8000", + "0x48307ffe80007fff", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0x35", + "0x40780017fff7fff", + "0x1", + "0x482680017ffa8000", + "0x2", + "0x480a7ffb7fff8000", + "0x482480017ffa8000", + "0x1", + "0x48127ffa7fff8000", + "0x48127ffb7fff8000", + "0x48127ffa7fff8000", + "0x480080007ff68000", + "0x1104800180018000", + "0x1f3", + "0x20680017fff7ffa", + "0x17", + "0x20680017fff7ffd", + "0xf", + "0x48127ff87fff8000", + "0x482480017ff88000", + "0x1f4", + "0x480680017fff8000", + "0x0", + "0x48127ff87fff8000", + "0x48127ff87fff8000", + "0x480680017fff8000", + "0x0", + "0x480a80007fff8000", + "0x48127ff77fff8000", + "0x48127ff77fff8000", + "0x208b7fff7fff7ffe", + "0x48127ff87fff8000", + "0x48127ff87fff8000", + "0x48127ff97fff8000", + "0x48127ff97fff8000", + "0x10780017fff7fff", + "0x17", + "0x48127ff87fff8000", + "0x48127ff87fff8000", + "0x480680017fff8000", + "0x1", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x48127ff77fff8000", + "0x48127ff77fff8000", + "0x208b7fff7fff7ffe", + "0x482680017ffa8000", + "0x2", + "0x482680017ffb8000", + "0xd2a", + "0x48127ffb7fff8000", + "0x48127ffb7fff8000", + "0x48127ffc7fff8000", + "0x48127ffc7fff8000", + "0x480680017fff8000", + "0x0", + "0x48127ffb7fff8000", + "0x48127ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x208b7fff7fff7ffe", + "0x482680017ffa8000", + "0x3", + "0x482680017ffb8000", + "0xc1c", + "0x482680017ffc8000", + "0x1", + "0x480a7ffd7fff8000", + "0x10780017fff7fff", + "0x7", + "0x480a7ffa7fff8000", + "0x482680017ffb8000", + "0x1130", + "0x480a7ffc7fff8000", + "0x480a7ffd7fff8000", + "0x48127ffc7fff8000", + "0x48127ffc7fff8000", + "0x480680017fff8000", + "0x0", + "0x48127ffb7fff8000", + "0x48127ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x208b7fff7fff7ffe", + "0xa0680017fff8000", + "0x7", + "0x482680017ff88000", + "0xfffffffffffffffffffffffffffff6fa", + "0x400280007ff77fff", + "0x10780017fff7fff", + "0x5b", + "0x4825800180007ff8", + "0x906", + "0x400280007ff77fff", + "0x20780017fff7ffd", + "0xf", + "0x482680017ff78000", + "0x1", + "0x482480017ffe8000", + "0xc8a", + "0x480680017fff8000", + "0x0", + "0x480a7ff97fff8000", + "0x480a7ffa7fff8000", + "0x480680017fff8000", + "0x0", + "0x480a7ffb7fff8000", + "0x480a7ffc7fff8000", + "0x208b7fff7fff7ffe", + "0x48297ff980007ffa", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0x31", + "0x480280007ff98000", + "0xa0680017fff8000", + "0x12", + "0x4824800180007ffe", + "0x10000", + "0x4844800180008002", + "0x8000000000000110000000000000000", + "0x4830800080017ffe", + "0x480280017ff77fff", + "0x482480017ffe8000", + "0xefffffffffffffde000000000000ffff", + "0x480280027ff77fff", + "0x400280037ff77ffb", + "0x402480017fff7ffb", + "0xffffffffffffffffffffffffffffffff", + "0x20680017fff7fff", + "0x17", + "0x402780017fff7fff", + "0x1", + "0x400280017ff77ffe", + "0x482480017ffe8000", + "0xffffffffffffffffffffffffffff0000", + "0x400280027ff77fff", + "0x400280007ffc7ffd", + "0x482680017ff78000", + "0x3", + "0x48127ffa7fff8000", + "0x482680017ff98000", + "0x1", + "0x480a7ffa7fff8000", + "0x480a7ffb7fff8000", + "0x482680017ffc8000", + "0x1", + "0x4825800180007ffd", + "0x1", + "0x1104800180018000", + "0x800000000000010ffffffffffffffffffffffffffffffffffffffffffffffc0", + "0x208b7fff7fff7ffe", + "0x482680017ff78000", + "0x4", + "0x482480017ff58000", + "0x4b0", + "0x482680017ff98000", + "0x1", + "0x480a7ffa7fff8000", + "0x10780017fff7fff", + "0x8", + "0x482680017ff78000", + "0x1", + "0x482480017ffd8000", + "0x9ce", + "0x480a7ff97fff8000", + "0x480a7ffa7fff8000", + "0x48127ffc7fff8000", + "0x48127ffc7fff8000", + "0x480680017fff8000", + "0x0", + "0x48127ffb7fff8000", + "0x48127ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x208b7fff7fff7ffe", + "0x1104800180018000", + "0x800000000000010fffffffffffffffffffffffffffffffffffffffffffff2d1", + "0x482680017ff78000", + "0x1", + "0x480a7ff87fff8000", + "0x480680017fff8000", + "0x1", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x48127ff87fff8000", + "0x48127ff87fff8000", + "0x208b7fff7fff7ffe", + "0x40780017fff7fff", + "0x1", + "0x48297ffc80007ffd", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0x72", + "0x400380007ffc8000", + "0xa0680017fff8000", + "0x12", + "0x4825800180008000", + "0x10000", + "0x4844800180008002", + "0x8000000000000110000000000000000", + "0x4830800080017ffe", + "0x480280007ffa7fff", + "0x482480017ffe8000", + "0xefffffffffffffde000000000000ffff", + "0x480280017ffa7fff", + "0x400280027ffa7ffb", + "0x402480017fff7ffb", + "0xffffffffffffffffffffffffffffffff", + "0x20680017fff7fff", + "0x58", + "0x402780017fff7fff", + "0x1", + "0x400380007ffa8000", + "0x4826800180008000", + "0xffffffffffffffffffffffffffff0000", + "0x400280017ffa7fff", + "0x482680017ffc8000", + "0x1", + "0x480a7ffd7fff8000", + "0x48307ffe80007fff", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0x35", + "0x40780017fff7fff", + "0x1", + "0x482680017ffa8000", + "0x2", + "0x480a7ffb7fff8000", + "0x482480017ffa8000", + "0x1", + "0x48127ffa7fff8000", + "0x48127ffb7fff8000", + "0x48127ffa7fff8000", + "0x480080007ff68000", + "0x1104800180018000", + "0x800000000000010ffffffffffffffffffffffffffffffffffffffffffffff60", + "0x20680017fff7ffa", + "0x17", + "0x20680017fff7ffd", + "0xf", + "0x48127ff87fff8000", + "0x482480017ff88000", + "0x1f4", + "0x480680017fff8000", + "0x0", + "0x48127ff87fff8000", + "0x48127ff87fff8000", + "0x480680017fff8000", + "0x0", + "0x480a80007fff8000", + "0x48127ff77fff8000", + "0x48127ff77fff8000", + "0x208b7fff7fff7ffe", + "0x48127ff87fff8000", + "0x48127ff87fff8000", + "0x48127ff97fff8000", + "0x48127ff97fff8000", + "0x10780017fff7fff", + "0x17", + "0x48127ff87fff8000", + "0x48127ff87fff8000", + "0x480680017fff8000", + "0x1", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x48127ff77fff8000", + "0x48127ff77fff8000", + "0x208b7fff7fff7ffe", + "0x482680017ffa8000", + "0x2", + "0x482680017ffb8000", + "0xd2a", + "0x48127ffb7fff8000", + "0x48127ffb7fff8000", + "0x48127ffc7fff8000", + "0x48127ffc7fff8000", + "0x480680017fff8000", + "0x0", + "0x48127ffb7fff8000", + "0x48127ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x208b7fff7fff7ffe", + "0x482680017ffa8000", + "0x3", + "0x482680017ffb8000", + "0xc1c", + "0x482680017ffc8000", + "0x1", + "0x480a7ffd7fff8000", + "0x10780017fff7fff", + "0x7", + "0x480a7ffa7fff8000", + "0x482680017ffb8000", + "0x1130", + "0x480a7ffc7fff8000", + "0x480a7ffd7fff8000", + "0x48127ffc7fff8000", + "0x48127ffc7fff8000", + "0x480680017fff8000", + "0x0", + "0x48127ffb7fff8000", + "0x48127ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x208b7fff7fff7ffe", + "0x48297ffc80007ffd", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0x8d", + "0x480280007ffc8000", + "0xa0680017fff8000", + "0x12", + "0x4824800180007ffe", + "0x10000", + "0x4844800180008002", + "0x8000000000000110000000000000000", + "0x4830800080017ffe", + "0x480280007ffb7fff", + "0x482480017ffe8000", + "0xefffffffffffffde000000000000ffff", + "0x480280017ffb7fff", + "0x400280027ffb7ffb", + "0x402480017fff7ffb", + "0xffffffffffffffffffffffffffffffff", + "0x20680017fff7fff", + "0x73", + "0x402780017fff7fff", + "0x1", + "0x400280007ffb7ffe", + "0x482480017ffe8000", + "0xffffffffffffffffffffffffffff0000", + "0x400280017ffb7fff", + "0x482680017ffc8000", + "0x1", + "0x480a7ffd7fff8000", + "0x48307ffe80007fff", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0x5d", + "0x480080007ffd8000", + "0xa0680017fff8000", + "0x12", + "0x4824800180007ffe", + "0x100000000", + "0x4844800180008002", + "0x8000000000000110000000000000000", + "0x4830800080017ffe", + "0x480280027ffb7fff", + "0x482480017ffe8000", + "0xefffffffffffffde00000000ffffffff", + "0x480280037ffb7fff", + "0x400280047ffb7ffb", + "0x402480017fff7ffb", + "0xffffffffffffffffffffffffffffffff", + "0x20680017fff7fff", + "0x43", + "0x402780017fff7fff", + "0x1", + "0x400280027ffb7ffe", + "0x482480017ffe8000", + "0xffffffffffffffffffffffff00000000", + "0x400280037ffb7fff", + "0x482480017ffa8000", + "0x1", + "0x48127ffa7fff8000", + "0x48307ffe80007fff", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0x2d", + "0x480080007ffd8000", + "0xa0680017fff8000", + "0x12", + "0x4824800180007ffe", + "0x10000000000000000", + "0x4844800180008002", + "0x8000000000000110000000000000000", + "0x4830800080017ffe", + "0x480280047ffb7fff", + "0x482480017ffe8000", + "0xefffffffffffffdeffffffffffffffff", + "0x480280057ffb7fff", + "0x400280067ffb7ffb", + "0x402480017fff7ffb", + "0xffffffffffffffffffffffffffffffff", + "0x20680017fff7fff", + "0x15", + "0x402780017fff7fff", + "0x1", + "0x400280047ffb7ffe", + "0x482480017ffe8000", + "0xffffffffffffffff0000000000000000", + "0x400280057ffb7fff", + "0x40780017fff7fff", + "0x5", + "0x482680017ffb8000", + "0x6", + "0x482480017ff48000", + "0x1", + "0x48127ff47fff8000", + "0x480680017fff8000", + "0x0", + "0x48127fe87fff8000", + "0x48127fed7fff8000", + "0x48127ff27fff8000", + "0x208b7fff7fff7ffe", + "0x482680017ffb8000", + "0x7", + "0x482480017ff48000", + "0x1", + "0x48127ff47fff8000", + "0x10780017fff7fff", + "0x29", + "0x40780017fff7fff", + "0x8", + "0x482680017ffb8000", + "0x4", + "0x48127ff47fff8000", + "0x48127ff47fff8000", + "0x10780017fff7fff", + "0x21", + "0x40780017fff7fff", + "0x6", + "0x482680017ffb8000", + "0x5", + "0x482480017fee8000", + "0x1", + "0x48127fee7fff8000", + "0x10780017fff7fff", + "0x18", + "0x40780017fff7fff", + "0xe", + "0x482680017ffb8000", + "0x2", + "0x48127fee7fff8000", + "0x48127fee7fff8000", + "0x10780017fff7fff", + "0x10", + "0x40780017fff7fff", + "0xc", + "0x482680017ffb8000", + "0x3", + "0x482680017ffc8000", + "0x1", + "0x480a7ffd7fff8000", + "0x10780017fff7fff", + "0x7", + "0x40780017fff7fff", + "0x14", + "0x480a7ffb7fff8000", + "0x480a7ffc7fff8000", + "0x480a7ffd7fff8000", + "0x480680017fff8000", + "0x1", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x208b7fff7fff7ffe", + "0xa0680017fff8000", + "0x7", + "0x482680017ff88000", + "0xfffffffffffffffffffffffffffff6fa", + "0x400280007ff77fff", + "0x10780017fff7fff", + "0x5b", + "0x4825800180007ff8", + "0x906", + "0x400280007ff77fff", + "0x20780017fff7ffd", + "0xf", + "0x482680017ff78000", + "0x1", + "0x482480017ffe8000", + "0xc8a", + "0x480680017fff8000", + "0x0", + "0x480a7ff97fff8000", + "0x480a7ffa7fff8000", + "0x480680017fff8000", + "0x0", + "0x480a7ffb7fff8000", + "0x480a7ffc7fff8000", + "0x208b7fff7fff7ffe", + "0x48297ff980007ffa", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0x31", + "0x480280007ff98000", + "0xa0680017fff8000", + "0x12", + "0x4824800180007ffe", + "0x100000000", + "0x4844800180008002", + "0x8000000000000110000000000000000", + "0x4830800080017ffe", + "0x480280017ff77fff", + "0x482480017ffe8000", + "0xefffffffffffffde00000000ffffffff", + "0x480280027ff77fff", + "0x400280037ff77ffb", + "0x402480017fff7ffb", + "0xffffffffffffffffffffffffffffffff", + "0x20680017fff7fff", + "0x17", + "0x402780017fff7fff", + "0x1", + "0x400280017ff77ffe", + "0x482480017ffe8000", + "0xffffffffffffffffffffffff00000000", + "0x400280027ff77fff", + "0x400280007ffc7ffd", + "0x482680017ff78000", + "0x3", + "0x48127ffa7fff8000", + "0x482680017ff98000", + "0x1", + "0x480a7ffa7fff8000", + "0x480a7ffb7fff8000", + "0x482680017ffc8000", + "0x1", + "0x4825800180007ffd", + "0x1", + "0x1104800180018000", + "0x800000000000010ffffffffffffffffffffffffffffffffffffffffffffffc0", + "0x208b7fff7fff7ffe", + "0x482680017ff78000", + "0x4", + "0x482480017ff58000", + "0x4b0", + "0x482680017ff98000", + "0x1", + "0x480a7ffa7fff8000", + "0x10780017fff7fff", + "0x8", + "0x482680017ff78000", + "0x1", + "0x482480017ffd8000", + "0x9ce", + "0x480a7ff97fff8000", + "0x480a7ffa7fff8000", + "0x48127ffc7fff8000", + "0x48127ffc7fff8000", + "0x480680017fff8000", + "0x0", + "0x48127ffb7fff8000", + "0x48127ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x208b7fff7fff7ffe", + "0x1104800180018000", + "0x800000000000010fffffffffffffffffffffffffffffffffffffffffffff138", + "0x482680017ff78000", + "0x1", + "0x480a7ff87fff8000", + "0x480680017fff8000", + "0x1", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x48127ff87fff8000", + "0x48127ff87fff8000", + "0x208b7fff7fff7ffe", + "0x48297ffc80007ffd", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0x8d", + "0x480280007ffc8000", + "0xa0680017fff8000", + "0x12", + "0x4824800180007ffe", + "0x10000", + "0x4844800180008002", + "0x8000000000000110000000000000000", + "0x4830800080017ffe", + "0x480280007ffb7fff", + "0x482480017ffe8000", + "0xefffffffffffffde000000000000ffff", + "0x480280017ffb7fff", + "0x400280027ffb7ffb", + "0x402480017fff7ffb", + "0xffffffffffffffffffffffffffffffff", + "0x20680017fff7fff", + "0x73", + "0x402780017fff7fff", + "0x1", + "0x400280007ffb7ffe", + "0x482480017ffe8000", + "0xffffffffffffffffffffffffffff0000", + "0x400280017ffb7fff", + "0x482680017ffc8000", + "0x1", + "0x480a7ffd7fff8000", + "0x48307ffe80007fff", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0x5d", + "0x480080007ffd8000", + "0xa0680017fff8000", + "0x12", + "0x4824800180007ffe", + "0x10000", + "0x4844800180008002", + "0x8000000000000110000000000000000", + "0x4830800080017ffe", + "0x480280027ffb7fff", + "0x482480017ffe8000", + "0xefffffffffffffde000000000000ffff", + "0x480280037ffb7fff", + "0x400280047ffb7ffb", + "0x402480017fff7ffb", + "0xffffffffffffffffffffffffffffffff", + "0x20680017fff7fff", + "0x43", + "0x402780017fff7fff", + "0x1", + "0x400280027ffb7ffe", + "0x482480017ffe8000", + "0xffffffffffffffffffffffffffff0000", + "0x400280037ffb7fff", + "0x482480017ffa8000", + "0x1", + "0x48127ffa7fff8000", + "0x48307ffe80007fff", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0x2d", + "0x480080007ffd8000", + "0xa0680017fff8000", + "0x12", + "0x4824800180007ffe", + "0x10000", + "0x4844800180008002", + "0x8000000000000110000000000000000", + "0x4830800080017ffe", + "0x480280047ffb7fff", + "0x482480017ffe8000", + "0xefffffffffffffde000000000000ffff", + "0x480280057ffb7fff", + "0x400280067ffb7ffb", + "0x402480017fff7ffb", + "0xffffffffffffffffffffffffffffffff", + "0x20680017fff7fff", + "0x15", + "0x402780017fff7fff", + "0x1", + "0x400280047ffb7ffe", + "0x482480017ffe8000", + "0xffffffffffffffffffffffffffff0000", + "0x400280057ffb7fff", + "0x40780017fff7fff", + "0x5", + "0x482680017ffb8000", + "0x6", + "0x482480017ff48000", + "0x1", + "0x48127ff47fff8000", + "0x480680017fff8000", + "0x0", + "0x48127fe87fff8000", + "0x48127fed7fff8000", + "0x48127ff27fff8000", + "0x208b7fff7fff7ffe", + "0x482680017ffb8000", + "0x7", + "0x482480017ff48000", + "0x1", + "0x48127ff47fff8000", + "0x10780017fff7fff", + "0x29", + "0x40780017fff7fff", + "0x8", + "0x482680017ffb8000", + "0x4", + "0x48127ff47fff8000", + "0x48127ff47fff8000", + "0x10780017fff7fff", + "0x21", + "0x40780017fff7fff", + "0x6", + "0x482680017ffb8000", + "0x5", + "0x482480017fee8000", + "0x1", + "0x48127fee7fff8000", + "0x10780017fff7fff", + "0x18", + "0x40780017fff7fff", + "0xe", + "0x482680017ffb8000", + "0x2", + "0x48127fee7fff8000", + "0x48127fee7fff8000", + "0x10780017fff7fff", + "0x10", + "0x40780017fff7fff", + "0xc", + "0x482680017ffb8000", + "0x3", + "0x482680017ffc8000", + "0x1", + "0x480a7ffd7fff8000", + "0x10780017fff7fff", + "0x7", + "0x40780017fff7fff", + "0x14", + "0x480a7ffb7fff8000", + "0x480a7ffc7fff8000", + "0x480a7ffd7fff8000", + "0x480680017fff8000", + "0x1", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x208b7fff7fff7ffe" + ], + "bytecode_segment_lengths": [ + 191, 144, 168, 144, 131, 181, 146, 164, 113, 113, 145, 115, 147, 131, 130, 92, 174, 96, 75, 97, + 123, 97, 113, 162, 5, 5, 5, 141, 48, 158, 127, 48, 157, 155, 165, 67, 161, 191, 48, 187, 163, + 131, 206, 158, 128, 139, 128, 156, 155, 7, 112, 139, 112, 139, 158, 112, 158 + ], + "hints": [ + [ + 0, + [ + { + "TestLessThanOrEqual": { + "lhs": { + "Immediate": "0x0" + }, + "rhs": { + "Deref": { + "register": "FP", + "offset": -6 + } + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 27, + [ + { + "TestLessThan": { + "lhs": { + "BinOp": { + "op": "Add", + "a": { + "register": "AP", + "offset": -1 + }, + "b": { + "Immediate": "0x0" + } + } + }, + "rhs": { + "Immediate": "0x10000" + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 31, + [ + { + "LinearSplit": { + "value": { + "Deref": { + "register": "AP", + "offset": -1 + } + }, + "scalar": { + "Immediate": "0x8000000000000110000000000000000" + }, + "max_x": { + "Immediate": "0xfffffffffffffffffffffffffffffffe" + }, + "x": { + "register": "AP", + "offset": 0 + }, + "y": { + "register": "AP", + "offset": 1 + } + } + } + ] + ], + [ + 108, + [ + { + "TestLessThanOrEqual": { + "lhs": { + "Immediate": "0x0" + }, + "rhs": { + "Deref": { + "register": "AP", + "offset": -10 + } + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 120, + [ + { + "AllocSegment": { + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 191, + [ + { + "TestLessThanOrEqual": { + "lhs": { + "Immediate": "0x0" + }, + "rhs": { + "Deref": { + "register": "FP", + "offset": -6 + } + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 232, + [ + { + "TestLessThanOrEqual": { + "lhs": { + "Immediate": "0x8e8" + }, + "rhs": { + "Deref": { + "register": "AP", + "offset": -13 + } + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 244, + [ + { + "AllocSegment": { + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 335, + [ + { + "TestLessThanOrEqual": { + "lhs": { + "Immediate": "0x0" + }, + "rhs": { + "Deref": { + "register": "FP", + "offset": -6 + } + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 418, + [ + { + "TestLessThanOrEqual": { + "lhs": { + "Immediate": "0x0" + }, + "rhs": { + "Deref": { + "register": "AP", + "offset": -12 + } + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 430, + [ + { + "AllocSegment": { + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 503, + [ + { + "TestLessThanOrEqual": { + "lhs": { + "Immediate": "0x9f6" + }, + "rhs": { + "Deref": { + "register": "FP", + "offset": -6 + } + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 544, + [ + { + "TestLessThanOrEqual": { + "lhs": { + "Immediate": "0xa0a" + }, + "rhs": { + "Deref": { + "register": "AP", + "offset": -14 + } + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 556, + [ + { + "AllocSegment": { + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 647, + [ + { + "TestLessThanOrEqual": { + "lhs": { + "Immediate": "0x0" + }, + "rhs": { + "Deref": { + "register": "FP", + "offset": -6 + } + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 685, + [ + { + "TestLessThanOrEqual": { + "lhs": { + "Immediate": "0x0" + }, + "rhs": { + "Deref": { + "register": "AP", + "offset": -35 + } + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 697, + [ + { + "AllocSegment": { + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 778, + [ + { + "TestLessThanOrEqual": { + "lhs": { + "Immediate": "0x0" + }, + "rhs": { + "Deref": { + "register": "FP", + "offset": -6 + } + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 858, + [ + { + "TestLessThanOrEqual": { + "lhs": { + "Immediate": "0x0" + }, + "rhs": { + "Deref": { + "register": "AP", + "offset": -11 + } + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 870, + [ + { + "AllocSegment": { + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 959, + [ + { + "TestLessThanOrEqual": { + "lhs": { + "Immediate": "0x0" + }, + "rhs": { + "Deref": { + "register": "FP", + "offset": -6 + } + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 974, + [ + { + "AllocSegment": { + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 1011, + [ + { + "TestLessThanOrEqual": { + "lhs": { + "Immediate": "0x0" + }, + "rhs": { + "Deref": { + "register": "AP", + "offset": -12 + } + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 1024, + [ + { + "AllocSegment": { + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 1105, + [ + { + "TestLessThanOrEqual": { + "lhs": { + "Immediate": "0x0" + }, + "rhs": { + "Deref": { + "register": "FP", + "offset": -6 + } + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 1132, + [ + { + "TestLessThan": { + "lhs": { + "BinOp": { + "op": "Add", + "a": { + "register": "AP", + "offset": -1 + }, + "b": { + "Immediate": "0x0" + } + } + }, + "rhs": { + "Immediate": "0x10000" + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 1136, + [ + { + "LinearSplit": { + "value": { + "Deref": { + "register": "AP", + "offset": -1 + } + }, + "scalar": { + "Immediate": "0x8000000000000110000000000000000" + }, + "max_x": { + "Immediate": "0xfffffffffffffffffffffffffffffffe" + }, + "x": { + "register": "AP", + "offset": 0 + }, + "y": { + "register": "AP", + "offset": 1 + } + } + } + ] + ], + [ + 1206, + [ + { + "TestLessThanOrEqual": { + "lhs": { + "Immediate": "0x0" + }, + "rhs": { + "Deref": { + "register": "AP", + "offset": -8 + } + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 1218, + [ + { + "AllocSegment": { + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 1269, + [ + { + "TestLessThanOrEqual": { + "lhs": { + "Immediate": "0x0" + }, + "rhs": { + "Deref": { + "register": "FP", + "offset": -6 + } + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 1307, + [ + { + "TestLessThanOrEqual": { + "lhs": { + "Immediate": "0x0" + }, + "rhs": { + "Deref": { + "register": "AP", + "offset": -37 + } + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 1319, + [ + { + "AllocSegment": { + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 1382, + [ + { + "TestLessThanOrEqual": { + "lhs": { + "Immediate": "0x0" + }, + "rhs": { + "Deref": { + "register": "FP", + "offset": -6 + } + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 1420, + [ + { + "TestLessThanOrEqual": { + "lhs": { + "Immediate": "0x0" + }, + "rhs": { + "Deref": { + "register": "AP", + "offset": -31 + } + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 1432, + [ + { + "AllocSegment": { + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 1495, + [ + { + "TestLessThanOrEqual": { + "lhs": { + "Immediate": "0xa" + }, + "rhs": { + "Deref": { + "register": "FP", + "offset": -6 + } + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 1536, + [ + { + "TestLessThanOrEqual": { + "lhs": { + "Immediate": "0x816" + }, + "rhs": { + "Deref": { + "register": "AP", + "offset": -13 + } + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 1548, + [ + { + "AllocSegment": { + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 1640, + [ + { + "TestLessThanOrEqual": { + "lhs": { + "Immediate": "0x1ae" + }, + "rhs": { + "Deref": { + "register": "FP", + "offset": -6 + } + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 1678, + [ + { + "TestLessThanOrEqual": { + "lhs": { + "Immediate": "0x0" + }, + "rhs": { + "Deref": { + "register": "AP", + "offset": -56 + } + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 1690, + [ + { + "AllocSegment": { + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 1755, + [ + { + "TestLessThanOrEqual": { + "lhs": { + "Immediate": "0xc4e" + }, + "rhs": { + "Deref": { + "register": "FP", + "offset": -6 + } + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 1796, + [ + { + "TestLessThanOrEqual": { + "lhs": { + "Immediate": "0x87a" + }, + "rhs": { + "Deref": { + "register": "AP", + "offset": -14 + } + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 1808, + [ + { + "AllocSegment": { + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 1902, + [ + { + "TestLessThanOrEqual": { + "lhs": { + "Immediate": "0x0" + }, + "rhs": { + "Deref": { + "register": "FP", + "offset": -6 + } + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 1940, + [ + { + "TestLessThanOrEqual": { + "lhs": { + "Immediate": "0x0" + }, + "rhs": { + "Deref": { + "register": "AP", + "offset": -47 + } + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 1952, + [ + { + "AllocSegment": { + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 2033, + [ + { + "TestLessThanOrEqual": { + "lhs": { + "Immediate": "0x0" + }, + "rhs": { + "Deref": { + "register": "FP", + "offset": -6 + } + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 2071, + [ + { + "TestLessThanOrEqual": { + "lhs": { + "Immediate": "0x0" + }, + "rhs": { + "Deref": { + "register": "AP", + "offset": -36 + } + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 2083, + [ + { + "AllocSegment": { + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 2163, + [ + { + "TestLessThanOrEqual": { + "lhs": { + "Immediate": "0x0" + }, + "rhs": { + "Deref": { + "register": "FP", + "offset": -6 + } + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 2201, + [ + { + "TestLessThanOrEqual": { + "lhs": { + "Immediate": "0x0" + }, + "rhs": { + "Deref": { + "register": "AP", + "offset": -31 + } + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 2213, + [ + { + "AllocSegment": { + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 2255, + [ + { + "TestLessThanOrEqual": { + "lhs": { + "Immediate": "0x0" + }, + "rhs": { + "Deref": { + "register": "FP", + "offset": -6 + } + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 2271, + [ + { + "TestLessThan": { + "lhs": { + "BinOp": { + "op": "Add", + "a": { + "register": "AP", + "offset": -1 + }, + "b": { + "Immediate": "0x0" + } + } + }, + "rhs": { + "Immediate": "0x10000000000000000" + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 2275, + [ + { + "LinearSplit": { + "value": { + "Deref": { + "register": "AP", + "offset": -1 + } + }, + "scalar": { + "Immediate": "0x8000000000000110000000000000000" + }, + "max_x": { + "Immediate": "0xfffffffffffffffffffffffffffffffe" + }, + "x": { + "register": "AP", + "offset": 0 + }, + "y": { + "register": "AP", + "offset": 1 + } + } + } + ] + ], + [ + 2302, + [ + { + "TestLessThan": { + "lhs": { + "BinOp": { + "op": "Add", + "a": { + "register": "AP", + "offset": -1 + }, + "b": { + "Immediate": "0x0" + } + } + }, + "rhs": { + "Immediate": "0x100000000" + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 2306, + [ + { + "LinearSplit": { + "value": { + "Deref": { + "register": "AP", + "offset": -1 + } + }, + "scalar": { + "Immediate": "0x8000000000000110000000000000000" + }, + "max_x": { + "Immediate": "0xfffffffffffffffffffffffffffffffe" + }, + "x": { + "register": "AP", + "offset": 0 + }, + "y": { + "register": "AP", + "offset": 1 + } + } + } + ] + ], + [ + 2348, + [ + { + "TestLessThanOrEqual": { + "lhs": { + "Immediate": "0x0" + }, + "rhs": { + "Deref": { + "register": "AP", + "offset": -18 + } + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 2362, + [ + { + "AllocSegment": { + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 2429, + [ + { + "TestLessThanOrEqual": { + "lhs": { + "Immediate": "0x0" + }, + "rhs": { + "Deref": { + "register": "FP", + "offset": -6 + } + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 2467, + [ + { + "TestLessThanOrEqual": { + "lhs": { + "Immediate": "0x0" + }, + "rhs": { + "Deref": { + "register": "AP", + "offset": -39 + } + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 2479, + [ + { + "AllocSegment": { + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 2525, + [ + { + "TestLessThanOrEqual": { + "lhs": { + "Immediate": "0x0" + }, + "rhs": { + "Deref": { + "register": "FP", + "offset": -6 + } + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 2556, + [ + { + "TestLessThanOrEqual": { + "lhs": { + "Immediate": "0x0" + }, + "rhs": { + "Deref": { + "register": "AP", + "offset": -6 + } + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 2568, + [ + { + "AllocSegment": { + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 2600, + [ + { + "TestLessThanOrEqual": { + "lhs": { + "Immediate": "0x776" + }, + "rhs": { + "Deref": { + "register": "FP", + "offset": -6 + } + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 2638, + [ + { + "TestLessThanOrEqual": { + "lhs": { + "Immediate": "0x0" + }, + "rhs": { + "Deref": { + "register": "AP", + "offset": -63 + } + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 2650, + [ + { + "AllocSegment": { + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 2697, + [ + { + "TestLessThanOrEqual": { + "lhs": { + "Immediate": "0x15e" + }, + "rhs": { + "Deref": { + "register": "FP", + "offset": -6 + } + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 2738, + [ + { + "TestLessThanOrEqual": { + "lhs": { + "Immediate": "0x6ea" + }, + "rhs": { + "Deref": { + "register": "AP", + "offset": -13 + } + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 2750, + [ + { + "AllocSegment": { + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 2820, + [ + { + "TestLessThanOrEqual": { + "lhs": { + "Immediate": "0x776" + }, + "rhs": { + "Deref": { + "register": "FP", + "offset": -6 + } + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 2858, + [ + { + "TestLessThanOrEqual": { + "lhs": { + "Immediate": "0x0" + }, + "rhs": { + "Deref": { + "register": "AP", + "offset": -63 + } + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 2870, + [ + { + "AllocSegment": { + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 2917, + [ + { + "TestLessThanOrEqual": { + "lhs": { + "Immediate": "0x0" + }, + "rhs": { + "Deref": { + "register": "FP", + "offset": -6 + } + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 2955, + [ + { + "TestLessThanOrEqual": { + "lhs": { + "Immediate": "0x0" + }, + "rhs": { + "Deref": { + "register": "AP", + "offset": -37 + } + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 2967, + [ + { + "AllocSegment": { + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 3030, + [ + { + "TestLessThanOrEqual": { + "lhs": { + "Immediate": "0x0" + }, + "rhs": { + "Deref": { + "register": "FP", + "offset": -6 + } + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 3046, + [ + { + "TestLessThan": { + "lhs": { + "Deref": { + "register": "AP", + "offset": -1 + } + }, + "rhs": { + "Immediate": "0x100000000000000000000000000000000" + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 3048, + [ + { + "DivMod": { + "lhs": { + "Deref": { + "register": "AP", + "offset": -2 + } + }, + "rhs": { + "Immediate": "0x100000000000000000000000000000000" + }, + "quotient": { + "register": "AP", + "offset": 3 + }, + "remainder": { + "register": "AP", + "offset": 4 + } + } + } + ] + ], + [ + 3098, + [ + { + "TestLessThanOrEqual": { + "lhs": { + "Immediate": "0x0" + }, + "rhs": { + "Deref": { + "register": "AP", + "offset": -34 + } + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 3113, + [ + { + "AllocSegment": { + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 3223, + [ + { + "AllocSegment": { + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 3348, + [ + { + "TestLessThanOrEqual": { + "lhs": { + "Immediate": "0x622" + }, + "rhs": { + "Deref": { + "register": "FP", + "offset": -7 + } + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 3402, + [ + { + "TestLessThan": { + "lhs": { + "BinOp": { + "op": "Add", + "a": { + "register": "AP", + "offset": -1 + }, + "b": { + "Immediate": "0x0" + } + } + }, + "rhs": { + "Immediate": "0x100000000" + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 3406, + [ + { + "LinearSplit": { + "value": { + "Deref": { + "register": "AP", + "offset": -1 + } + }, + "scalar": { + "Immediate": "0x8000000000000110000000000000000" + }, + "max_x": { + "Immediate": "0xfffffffffffffffffffffffffffffffe" + }, + "x": { + "register": "AP", + "offset": 0 + }, + "y": { + "register": "AP", + "offset": 1 + } + } + } + ] + ], + [ + 3433, + [ + { + "TestLessThan": { + "lhs": { + "BinOp": { + "op": "Add", + "a": { + "register": "AP", + "offset": -1 + }, + "b": { + "Immediate": "0x0" + } + } + }, + "rhs": { + "Immediate": "0x100000000" + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 3437, + [ + { + "LinearSplit": { + "value": { + "Deref": { + "register": "AP", + "offset": -1 + } + }, + "scalar": { + "Immediate": "0x8000000000000110000000000000000" + }, + "max_x": { + "Immediate": "0xfffffffffffffffffffffffffffffffe" + }, + "x": { + "register": "AP", + "offset": 0 + }, + "y": { + "register": "AP", + "offset": 1 + } + } + } + ] + ], + [ + 3464, + [ + { + "TestLessThan": { + "lhs": { + "BinOp": { + "op": "Add", + "a": { + "register": "AP", + "offset": -1 + }, + "b": { + "Immediate": "0x0" + } + } + }, + "rhs": { + "Immediate": "0x100000000" + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 3468, + [ + { + "LinearSplit": { + "value": { + "Deref": { + "register": "AP", + "offset": -1 + } + }, + "scalar": { + "Immediate": "0x8000000000000110000000000000000" + }, + "max_x": { + "Immediate": "0xfffffffffffffffffffffffffffffffe" + }, + "x": { + "register": "AP", + "offset": 0 + }, + "y": { + "register": "AP", + "offset": 1 + } + } + } + ] + ], + [ + 3681, + [ + { + "TestLessThanOrEqual": { + "lhs": { + "Immediate": "0x622" + }, + "rhs": { + "Deref": { + "register": "FP", + "offset": -7 + } + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 3757, + [ + { + "TestLessThan": { + "lhs": { + "BinOp": { + "op": "Add", + "a": { + "register": "AP", + "offset": -1 + }, + "b": { + "Immediate": "0x0" + } + } + }, + "rhs": { + "Immediate": "0x10000" + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 3761, + [ + { + "LinearSplit": { + "value": { + "Deref": { + "register": "AP", + "offset": -1 + } + }, + "scalar": { + "Immediate": "0x8000000000000110000000000000000" + }, + "max_x": { + "Immediate": "0xfffffffffffffffffffffffffffffffe" + }, + "x": { + "register": "AP", + "offset": 0 + }, + "y": { + "register": "AP", + "offset": 1 + } + } + } + ] + ], + [ + 3905, + [ + { + "TestLessThan": { + "lhs": { + "BinOp": { + "op": "Add", + "a": { + "register": "AP", + "offset": -1 + }, + "b": { + "Immediate": "0x0" + } + } + }, + "rhs": { + "Immediate": "0x100" + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 3909, + [ + { + "LinearSplit": { + "value": { + "Deref": { + "register": "AP", + "offset": -1 + } + }, + "scalar": { + "Immediate": "0x8000000000000110000000000000000" + }, + "max_x": { + "Immediate": "0xfffffffffffffffffffffffffffffffe" + }, + "x": { + "register": "AP", + "offset": 0 + }, + "y": { + "register": "AP", + "offset": 1 + } + } + } + ] + ], + [ + 3967, + [ + { + "TestLessThan": { + "lhs": { + "BinOp": { + "op": "Add", + "a": { + "register": "AP", + "offset": -1 + }, + "b": { + "Immediate": "0x0" + } + } + }, + "rhs": { + "Immediate": "0x10000" + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 3971, + [ + { + "LinearSplit": { + "value": { + "Deref": { + "register": "AP", + "offset": -1 + } + }, + "scalar": { + "Immediate": "0x8000000000000110000000000000000" + }, + "max_x": { + "Immediate": "0xfffffffffffffffffffffffffffffffe" + }, + "x": { + "register": "AP", + "offset": 0 + }, + "y": { + "register": "AP", + "offset": 1 + } + } + } + ] + ], + [ + 4041, + [ + { + "TestLessThanOrEqual": { + "lhs": { + "Immediate": "0xe7e" + }, + "rhs": { + "Deref": { + "register": "FP", + "offset": -8 + } + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 4083, + [ + { + "TestLessThan": { + "lhs": { + "BinOp": { + "op": "Add", + "a": { + "register": "AP", + "offset": -1 + }, + "b": { + "Immediate": "0x0" + } + } + }, + "rhs": { + "Immediate": "0x10000" + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 4087, + [ + { + "LinearSplit": { + "value": { + "Deref": { + "register": "AP", + "offset": -1 + } + }, + "scalar": { + "Immediate": "0x8000000000000110000000000000000" + }, + "max_x": { + "Immediate": "0xfffffffffffffffffffffffffffffffe" + }, + "x": { + "register": "AP", + "offset": 0 + }, + "y": { + "register": "AP", + "offset": 1 + } + } + } + ] + ], + [ + 4206, + [ + { + "TestLessThanOrEqual": { + "lhs": { + "Immediate": "0x942" + }, + "rhs": { + "Deref": { + "register": "FP", + "offset": -7 + } + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 4290, + [ + { + "TestLessThan": { + "lhs": { + "BinOp": { + "op": "Add", + "a": { + "register": "AP", + "offset": -1 + }, + "b": { + "Immediate": "0x0" + } + } + }, + "rhs": { + "Immediate": "0x10000000000000000" + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 4294, + [ + { + "LinearSplit": { + "value": { + "Deref": { + "register": "AP", + "offset": -1 + } + }, + "scalar": { + "Immediate": "0x8000000000000110000000000000000" + }, + "max_x": { + "Immediate": "0xfffffffffffffffffffffffffffffffe" + }, + "x": { + "register": "AP", + "offset": 0 + }, + "y": { + "register": "AP", + "offset": 1 + } + } + } + ] + ], + [ + 4321, + [ + { + "TestLessThan": { + "lhs": { + "BinOp": { + "op": "Add", + "a": { + "register": "AP", + "offset": -1 + }, + "b": { + "Immediate": "0x0" + } + } + }, + "rhs": { + "Immediate": "0x100000000" + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 4325, + [ + { + "LinearSplit": { + "value": { + "Deref": { + "register": "AP", + "offset": -1 + } + }, + "scalar": { + "Immediate": "0x8000000000000110000000000000000" + }, + "max_x": { + "Immediate": "0xfffffffffffffffffffffffffffffffe" + }, + "x": { + "register": "AP", + "offset": 0 + }, + "y": { + "register": "AP", + "offset": 1 + } + } + } + ] + ], + [ + 4450, + [ + { + "AllocSegment": { + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 4521, + [ + { + "AllocSegment": { + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 4625, + [ + { + "TestLessThanOrEqual": { + "lhs": { + "Immediate": "0x622" + }, + "rhs": { + "Deref": { + "register": "FP", + "offset": -7 + } + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 4728, + [ + { + "TestLessThan": { + "lhs": { + "BinOp": { + "op": "Add", + "a": { + "register": "AP", + "offset": -1 + }, + "b": { + "Immediate": "0x0" + } + } + }, + "rhs": { + "Immediate": "0x10000" + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 4732, + [ + { + "LinearSplit": { + "value": { + "Deref": { + "register": "AP", + "offset": -1 + } + }, + "scalar": { + "Immediate": "0x8000000000000110000000000000000" + }, + "max_x": { + "Immediate": "0xfffffffffffffffffffffffffffffffe" + }, + "x": { + "register": "AP", + "offset": 0 + }, + "y": { + "register": "AP", + "offset": 1 + } + } + } + ] + ], + [ + 4759, + [ + { + "TestLessThan": { + "lhs": { + "BinOp": { + "op": "Add", + "a": { + "register": "AP", + "offset": -1 + }, + "b": { + "Immediate": "0x0" + } + } + }, + "rhs": { + "Immediate": "0x10000" + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 4763, + [ + { + "LinearSplit": { + "value": { + "Deref": { + "register": "AP", + "offset": -1 + } + }, + "scalar": { + "Immediate": "0x8000000000000110000000000000000" + }, + "max_x": { + "Immediate": "0xfffffffffffffffffffffffffffffffe" + }, + "x": { + "register": "AP", + "offset": 0 + }, + "y": { + "register": "AP", + "offset": 1 + } + } + } + ] + ], + [ + 5075, + [ + { + "TestLessThan": { + "lhs": { + "BinOp": { + "op": "Add", + "a": { + "register": "AP", + "offset": -1 + }, + "b": { + "Immediate": "0x0" + } + } + }, + "rhs": { + "Immediate": "0x100000000" + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 5079, + [ + { + "LinearSplit": { + "value": { + "Deref": { + "register": "AP", + "offset": -1 + } + }, + "scalar": { + "Immediate": "0x8000000000000110000000000000000" + }, + "max_x": { + "Immediate": "0xfffffffffffffffffffffffffffffffe" + }, + "x": { + "register": "AP", + "offset": 0 + }, + "y": { + "register": "AP", + "offset": 1 + } + } + } + ] + ], + [ + 5173, + [ + { + "TestLessThan": { + "lhs": { + "BinOp": { + "op": "Add", + "a": { + "register": "AP", + "offset": -1 + }, + "b": { + "Immediate": "0x0" + } + } + }, + "rhs": { + "Immediate": "0x100" + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 5177, + [ + { + "LinearSplit": { + "value": { + "Deref": { + "register": "AP", + "offset": -1 + } + }, + "scalar": { + "Immediate": "0x8000000000000110000000000000000" + }, + "max_x": { + "Immediate": "0xfffffffffffffffffffffffffffffffe" + }, + "x": { + "register": "AP", + "offset": 0 + }, + "y": { + "register": "AP", + "offset": 1 + } + } + } + ] + ], + [ + 5248, + [ + { + "TestLessThan": { + "lhs": { + "BinOp": { + "op": "Add", + "a": { + "register": "AP", + "offset": -1 + }, + "b": { + "Immediate": "0x0" + } + } + }, + "rhs": { + "Immediate": "0x100000000" + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 5252, + [ + { + "LinearSplit": { + "value": { + "Deref": { + "register": "AP", + "offset": -1 + } + }, + "scalar": { + "Immediate": "0x8000000000000110000000000000000" + }, + "max_x": { + "Immediate": "0xfffffffffffffffffffffffffffffffe" + }, + "x": { + "register": "AP", + "offset": 0 + }, + "y": { + "register": "AP", + "offset": 1 + } + } + } + ] + ], + [ + 5366, + [ + { + "TestLessThan": { + "lhs": { + "BinOp": { + "op": "Add", + "a": { + "register": "AP", + "offset": -1 + }, + "b": { + "Immediate": "0x0" + } + } + }, + "rhs": { + "Immediate": "0x10000000000000000" + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 5370, + [ + { + "LinearSplit": { + "value": { + "Deref": { + "register": "AP", + "offset": -1 + } + }, + "scalar": { + "Immediate": "0x8000000000000110000000000000000" + }, + "max_x": { + "Immediate": "0xfffffffffffffffffffffffffffffffe" + }, + "x": { + "register": "AP", + "offset": 0 + }, + "y": { + "register": "AP", + "offset": 1 + } + } + } + ] + ], + [ + 5397, + [ + { + "TestLessThan": { + "lhs": { + "BinOp": { + "op": "Add", + "a": { + "register": "AP", + "offset": -1 + }, + "b": { + "Immediate": "0x0" + } + } + }, + "rhs": { + "Immediate": "0x10000000000000000" + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 5401, + [ + { + "LinearSplit": { + "value": { + "Deref": { + "register": "AP", + "offset": -1 + } + }, + "scalar": { + "Immediate": "0x8000000000000110000000000000000" + }, + "max_x": { + "Immediate": "0xfffffffffffffffffffffffffffffffe" + }, + "x": { + "register": "AP", + "offset": 0 + }, + "y": { + "register": "AP", + "offset": 1 + } + } + } + ] + ], + [ + 5428, + [ + { + "TestLessThan": { + "lhs": { + "BinOp": { + "op": "Add", + "a": { + "register": "AP", + "offset": -1 + }, + "b": { + "Immediate": "0x0" + } + } + }, + "rhs": { + "Immediate": "0x100000000" + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 5432, + [ + { + "LinearSplit": { + "value": { + "Deref": { + "register": "AP", + "offset": -1 + } + }, + "scalar": { + "Immediate": "0x8000000000000110000000000000000" + }, + "max_x": { + "Immediate": "0xfffffffffffffffffffffffffffffffe" + }, + "x": { + "register": "AP", + "offset": 0 + }, + "y": { + "register": "AP", + "offset": 1 + } + } + } + ] + ], + [ + 5524, + [ + { + "TestLessThan": { + "lhs": { + "BinOp": { + "op": "Add", + "a": { + "register": "AP", + "offset": -1 + }, + "b": { + "Immediate": "0x0" + } + } + }, + "rhs": { + "Immediate": "0x10000" + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 5528, + [ + { + "LinearSplit": { + "value": { + "Deref": { + "register": "AP", + "offset": -1 + } + }, + "scalar": { + "Immediate": "0x8000000000000110000000000000000" + }, + "max_x": { + "Immediate": "0xfffffffffffffffffffffffffffffffe" + }, + "x": { + "register": "AP", + "offset": 0 + }, + "y": { + "register": "AP", + "offset": 1 + } + } + } + ] + ], + [ + 5555, + [ + { + "TestLessThan": { + "lhs": { + "BinOp": { + "op": "Add", + "a": { + "register": "AP", + "offset": -1 + }, + "b": { + "Immediate": "0x0" + } + } + }, + "rhs": { + "Immediate": "0x100" + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 5559, + [ + { + "LinearSplit": { + "value": { + "Deref": { + "register": "AP", + "offset": -1 + } + }, + "scalar": { + "Immediate": "0x8000000000000110000000000000000" + }, + "max_x": { + "Immediate": "0xfffffffffffffffffffffffffffffffe" + }, + "x": { + "register": "AP", + "offset": 0 + }, + "y": { + "register": "AP", + "offset": 1 + } + } + } + ] + ], + [ + 5654, + [ + { + "TestLessThan": { + "lhs": { + "BinOp": { + "op": "Add", + "a": { + "register": "FP", + "offset": 0 + }, + "b": { + "Immediate": "0x0" + } + } + }, + "rhs": { + "Immediate": "0x10000" + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 5658, + [ + { + "LinearSplit": { + "value": { + "Deref": { + "register": "AP", + "offset": -1 + } + }, + "scalar": { + "Immediate": "0x8000000000000110000000000000000" + }, + "max_x": { + "Immediate": "0xfffffffffffffffffffffffffffffffe" + }, + "x": { + "register": "AP", + "offset": 0 + }, + "y": { + "register": "AP", + "offset": 1 + } + } + } + ] + ], + [ + 5684, + [ + { + "AllocSegment": { + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 5791, + [ + { + "TestLessThan": { + "lhs": { + "BinOp": { + "op": "Add", + "a": { + "register": "AP", + "offset": -1 + }, + "b": { + "Immediate": "0x0" + } + } + }, + "rhs": { + "Immediate": "0x10000" + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 5795, + [ + { + "LinearSplit": { + "value": { + "Deref": { + "register": "AP", + "offset": -1 + } + }, + "scalar": { + "Immediate": "0x8000000000000110000000000000000" + }, + "max_x": { + "Immediate": "0xfffffffffffffffffffffffffffffffe" + }, + "x": { + "register": "AP", + "offset": 0 + }, + "y": { + "register": "AP", + "offset": 1 + } + } + } + ] + ], + [ + 5822, + [ + { + "TestLessThan": { + "lhs": { + "BinOp": { + "op": "Add", + "a": { + "register": "AP", + "offset": -1 + }, + "b": { + "Immediate": "0x0" + } + } + }, + "rhs": { + "Immediate": "0x10000" + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 5826, + [ + { + "LinearSplit": { + "value": { + "Deref": { + "register": "AP", + "offset": -1 + } + }, + "scalar": { + "Immediate": "0x8000000000000110000000000000000" + }, + "max_x": { + "Immediate": "0xfffffffffffffffffffffffffffffffe" + }, + "x": { + "register": "AP", + "offset": 0 + }, + "y": { + "register": "AP", + "offset": 1 + } + } + } + ] + ], + [ + 5919, + [ + { + "TestLessThan": { + "lhs": { + "BinOp": { + "op": "Add", + "a": { + "register": "AP", + "offset": -1 + }, + "b": { + "Immediate": "0x0" + } + } + }, + "rhs": { + "Immediate": "0x100000000" + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 5923, + [ + { + "LinearSplit": { + "value": { + "Deref": { + "register": "AP", + "offset": -1 + } + }, + "scalar": { + "Immediate": "0x8000000000000110000000000000000" + }, + "max_x": { + "Immediate": "0xfffffffffffffffffffffffffffffffe" + }, + "x": { + "register": "AP", + "offset": 0 + }, + "y": { + "register": "AP", + "offset": 1 + } + } + } + ] + ], + [ + 5961, + [ + { + "TestLessThan": { + "lhs": { + "BinOp": { + "op": "Add", + "a": { + "register": "AP", + "offset": -1 + }, + "b": { + "Immediate": "0x0" + } + } + }, + "rhs": { + "Immediate": "0x100" + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 5965, + [ + { + "LinearSplit": { + "value": { + "Deref": { + "register": "AP", + "offset": -1 + } + }, + "scalar": { + "Immediate": "0x8000000000000110000000000000000" + }, + "max_x": { + "Immediate": "0xfffffffffffffffffffffffffffffffe" + }, + "x": { + "register": "AP", + "offset": 0 + }, + "y": { + "register": "AP", + "offset": 1 + } + } + } + ] + ], + [ + 6088, + [ + { + "TestLessThan": { + "lhs": { + "BinOp": { + "op": "Add", + "a": { + "register": "AP", + "offset": -1 + }, + "b": { + "Immediate": "0x0" + } + } + }, + "rhs": { + "Immediate": "0x100" + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 6092, + [ + { + "LinearSplit": { + "value": { + "Deref": { + "register": "AP", + "offset": -1 + } + }, + "scalar": { + "Immediate": "0x8000000000000110000000000000000" + }, + "max_x": { + "Immediate": "0xfffffffffffffffffffffffffffffffe" + }, + "x": { + "register": "AP", + "offset": 0 + }, + "y": { + "register": "AP", + "offset": 1 + } + } + } + ] + ], + [ + 6150, + [ + { + "TestLessThan": { + "lhs": { + "BinOp": { + "op": "Add", + "a": { + "register": "AP", + "offset": -1 + }, + "b": { + "Immediate": "0x0" + } + } + }, + "rhs": { + "Immediate": "0x10000000000000000" + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 6154, + [ + { + "LinearSplit": { + "value": { + "Deref": { + "register": "AP", + "offset": -1 + } + }, + "scalar": { + "Immediate": "0x8000000000000110000000000000000" + }, + "max_x": { + "Immediate": "0xfffffffffffffffffffffffffffffffe" + }, + "x": { + "register": "AP", + "offset": 0 + }, + "y": { + "register": "AP", + "offset": 1 + } + } + } + ] + ], + [ + 6224, + [ + { + "AllocSegment": { + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 6231, + [ + { + "TestLessThanOrEqual": { + "lhs": { + "Immediate": "0x906" + }, + "rhs": { + "Deref": { + "register": "FP", + "offset": -8 + } + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 6262, + [ + { + "TestLessThan": { + "lhs": { + "BinOp": { + "op": "Add", + "a": { + "register": "AP", + "offset": -1 + }, + "b": { + "Immediate": "0x0" + } + } + }, + "rhs": { + "Immediate": "0x100" + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 6266, + [ + { + "LinearSplit": { + "value": { + "Deref": { + "register": "AP", + "offset": -1 + } + }, + "scalar": { + "Immediate": "0x8000000000000110000000000000000" + }, + "max_x": { + "Immediate": "0xfffffffffffffffffffffffffffffffe" + }, + "x": { + "register": "AP", + "offset": 0 + }, + "y": { + "register": "AP", + "offset": 1 + } + } + } + ] + ], + [ + 6351, + [ + { + "TestLessThan": { + "lhs": { + "BinOp": { + "op": "Add", + "a": { + "register": "FP", + "offset": 0 + }, + "b": { + "Immediate": "0x0" + } + } + }, + "rhs": { + "Immediate": "0x100000000" + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 6355, + [ + { + "LinearSplit": { + "value": { + "Deref": { + "register": "AP", + "offset": -1 + } + }, + "scalar": { + "Immediate": "0x8000000000000110000000000000000" + }, + "max_x": { + "Immediate": "0xfffffffffffffffffffffffffffffffe" + }, + "x": { + "register": "AP", + "offset": 0 + }, + "y": { + "register": "AP", + "offset": 1 + } + } + } + ] + ], + [ + 6381, + [ + { + "AllocSegment": { + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 6482, + [ + { + "TestLessThanOrEqual": { + "lhs": { + "Immediate": "0x906" + }, + "rhs": { + "Deref": { + "register": "FP", + "offset": -8 + } + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 6513, + [ + { + "TestLessThan": { + "lhs": { + "BinOp": { + "op": "Add", + "a": { + "register": "AP", + "offset": -1 + }, + "b": { + "Immediate": "0x0" + } + } + }, + "rhs": { + "Immediate": "0x10000" + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 6517, + [ + { + "LinearSplit": { + "value": { + "Deref": { + "register": "AP", + "offset": -1 + } + }, + "scalar": { + "Immediate": "0x8000000000000110000000000000000" + }, + "max_x": { + "Immediate": "0xfffffffffffffffffffffffffffffffe" + }, + "x": { + "register": "AP", + "offset": 0 + }, + "y": { + "register": "AP", + "offset": 1 + } + } + } + ] + ], + [ + 6602, + [ + { + "TestLessThan": { + "lhs": { + "BinOp": { + "op": "Add", + "a": { + "register": "FP", + "offset": 0 + }, + "b": { + "Immediate": "0x0" + } + } + }, + "rhs": { + "Immediate": "0x10000" + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 6606, + [ + { + "LinearSplit": { + "value": { + "Deref": { + "register": "AP", + "offset": -1 + } + }, + "scalar": { + "Immediate": "0x8000000000000110000000000000000" + }, + "max_x": { + "Immediate": "0xfffffffffffffffffffffffffffffffe" + }, + "x": { + "register": "AP", + "offset": 0 + }, + "y": { + "register": "AP", + "offset": 1 + } + } + } + ] + ], + [ + 6632, + [ + { + "AllocSegment": { + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 6739, + [ + { + "TestLessThan": { + "lhs": { + "BinOp": { + "op": "Add", + "a": { + "register": "AP", + "offset": -1 + }, + "b": { + "Immediate": "0x0" + } + } + }, + "rhs": { + "Immediate": "0x10000" + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 6743, + [ + { + "LinearSplit": { + "value": { + "Deref": { + "register": "AP", + "offset": -1 + } + }, + "scalar": { + "Immediate": "0x8000000000000110000000000000000" + }, + "max_x": { + "Immediate": "0xfffffffffffffffffffffffffffffffe" + }, + "x": { + "register": "AP", + "offset": 0 + }, + "y": { + "register": "AP", + "offset": 1 + } + } + } + ] + ], + [ + 6770, + [ + { + "TestLessThan": { + "lhs": { + "BinOp": { + "op": "Add", + "a": { + "register": "AP", + "offset": -1 + }, + "b": { + "Immediate": "0x0" + } + } + }, + "rhs": { + "Immediate": "0x100000000" + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 6774, + [ + { + "LinearSplit": { + "value": { + "Deref": { + "register": "AP", + "offset": -1 + } + }, + "scalar": { + "Immediate": "0x8000000000000110000000000000000" + }, + "max_x": { + "Immediate": "0xfffffffffffffffffffffffffffffffe" + }, + "x": { + "register": "AP", + "offset": 0 + }, + "y": { + "register": "AP", + "offset": 1 + } + } + } + ] + ], + [ + 6801, + [ + { + "TestLessThan": { + "lhs": { + "BinOp": { + "op": "Add", + "a": { + "register": "AP", + "offset": -1 + }, + "b": { + "Immediate": "0x0" + } + } + }, + "rhs": { + "Immediate": "0x10000000000000000" + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 6805, + [ + { + "LinearSplit": { + "value": { + "Deref": { + "register": "AP", + "offset": -1 + } + }, + "scalar": { + "Immediate": "0x8000000000000110000000000000000" + }, + "max_x": { + "Immediate": "0xfffffffffffffffffffffffffffffffe" + }, + "x": { + "register": "AP", + "offset": 0 + }, + "y": { + "register": "AP", + "offset": 1 + } + } + } + ] + ], + [ + 6891, + [ + { + "TestLessThanOrEqual": { + "lhs": { + "Immediate": "0x906" + }, + "rhs": { + "Deref": { + "register": "FP", + "offset": -8 + } + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 6922, + [ + { + "TestLessThan": { + "lhs": { + "BinOp": { + "op": "Add", + "a": { + "register": "AP", + "offset": -1 + }, + "b": { + "Immediate": "0x0" + } + } + }, + "rhs": { + "Immediate": "0x100000000" + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 6926, + [ + { + "LinearSplit": { + "value": { + "Deref": { + "register": "AP", + "offset": -1 + } + }, + "scalar": { + "Immediate": "0x8000000000000110000000000000000" + }, + "max_x": { + "Immediate": "0xfffffffffffffffffffffffffffffffe" + }, + "x": { + "register": "AP", + "offset": 0 + }, + "y": { + "register": "AP", + "offset": 1 + } + } + } + ] + ], + [ + 7009, + [ + { + "TestLessThan": { + "lhs": { + "BinOp": { + "op": "Add", + "a": { + "register": "AP", + "offset": -1 + }, + "b": { + "Immediate": "0x0" + } + } + }, + "rhs": { + "Immediate": "0x10000" + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 7013, + [ + { + "LinearSplit": { + "value": { + "Deref": { + "register": "AP", + "offset": -1 + } + }, + "scalar": { + "Immediate": "0x8000000000000110000000000000000" + }, + "max_x": { + "Immediate": "0xfffffffffffffffffffffffffffffffe" + }, + "x": { + "register": "AP", + "offset": 0 + }, + "y": { + "register": "AP", + "offset": 1 + } + } + } + ] + ], + [ + 7040, + [ + { + "TestLessThan": { + "lhs": { + "BinOp": { + "op": "Add", + "a": { + "register": "AP", + "offset": -1 + }, + "b": { + "Immediate": "0x0" + } + } + }, + "rhs": { + "Immediate": "0x10000" + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 7044, + [ + { + "LinearSplit": { + "value": { + "Deref": { + "register": "AP", + "offset": -1 + } + }, + "scalar": { + "Immediate": "0x8000000000000110000000000000000" + }, + "max_x": { + "Immediate": "0xfffffffffffffffffffffffffffffffe" + }, + "x": { + "register": "AP", + "offset": 0 + }, + "y": { + "register": "AP", + "offset": 1 + } + } + } + ] + ], + [ + 7071, + [ + { + "TestLessThan": { + "lhs": { + "BinOp": { + "op": "Add", + "a": { + "register": "AP", + "offset": -1 + }, + "b": { + "Immediate": "0x0" + } + } + }, + "rhs": { + "Immediate": "0x10000" + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 7075, + [ + { + "LinearSplit": { + "value": { + "Deref": { + "register": "AP", + "offset": -1 + } + }, + "scalar": { + "Immediate": "0x8000000000000110000000000000000" + }, + "max_x": { + "Immediate": "0xfffffffffffffffffffffffffffffffe" + }, + "x": { + "register": "AP", + "offset": 0 + }, + "y": { + "register": "AP", + "offset": 1 + } + } + } + ] + ] + ], + "entry_points_by_type": { + "EXTERNAL": [ + { + "selector": "0x462b1b2d0b30d80be98c4aec16f07b72212bbef41ac45680ed94e954a6aa9", + "offset": 503, + "builtins": ["range_check"] + }, + { + "selector": "0x1feb29d0d6e8c4ba7a71db4cdaa24898ddd8bb350e724f844145997afee9c9", + "offset": 2600, + "builtins": ["range_check"] + }, + { + "selector": "0x78664aa9f94155a6e6acf3aa0add2ce6fcf36349488671af774d676363e0c7", + "offset": 191, + "builtins": ["range_check"] + }, + { + "selector": "0xe1eafdb08801cfc555a49e25dabfd7aa4ed7b2dd5c7e2c5a6930eac6d1b54c", + "offset": 2429, + "builtins": ["range_check"] + }, + { + "selector": "0x106f418ef7e2ea39027bcde47d5f0a54ed68fe34aa69b24c3a162def52a841b", + "offset": 1902, + "builtins": ["range_check"] + }, + { + "selector": "0x11fdea672ded06956bdd64d89fd111661735e88595f88c1199f648fe3c2dd15", + "offset": 2697, + "builtins": ["range_check"] + }, + { + "selector": "0x126587e6b203b756642ff0bd9f92e84ef609cf2a02b516fbf2d94f36a73b83e", + "offset": 959, + "builtins": ["range_check"] + }, + { + "selector": "0x1303ef00936936490ad20afec7fbe2bf74669665b2a2249945ff561debad733", + "offset": 1105, + "builtins": ["range_check"] + }, + { + "selector": "0x13d3b1aae5fa65a483db7c67c98dca6aac27353970caa114d112c4b6de8ec73", + "offset": 1640, + "builtins": ["range_check"] + }, + { + "selector": "0x145f0cd3e37db4233ce4d6b84935d9b32387d72eb53713e78e2ec56cc6fdf5d", + "offset": 2255, + "builtins": ["range_check"] + }, + { + "selector": "0x147c0b24e5bfb625956c5a44d3fc84d509b789bf2e5335365c03b9be2d757d3", + "offset": 2163, + "builtins": ["range_check"] + }, + { + "selector": "0x1785e0d94a5ba07a47865d69afdf914dad65466b25d38cb78cb741fac447ba8", + "offset": 2917, + "builtins": ["range_check"] + }, + { + "selector": "0x1c7564da2ac3c0ee05570d52004d51604c5315131cafd67610b2e629bf4fd7c", + "offset": 2033, + "builtins": ["range_check"] + }, + { + "selector": "0x1d39fadfe7e2621092d7d0a467672f0eb0ad03c5926829d40ceefa7bcd10b80", + "offset": 3030, + "builtins": ["range_check"] + }, + { + "selector": "0x1ff9f9a5d04b7955383039cae30cd6c0d1cb3c0e04a579f393a7ac9cf39c7b3", + "offset": 778, + "builtins": ["range_check"] + }, + { + "selector": "0x208b88c80fabc1b03f3c78a09aaa1a693a5bb1366271a1c6b9e7971aa325116", + "offset": 2525, + "builtins": ["range_check"] + }, + { + "selector": "0x21b020335325fcef65a03b765adaefcc9fb4eccceb8e0293516736095e8cceb", + "offset": 335, + "builtins": ["range_check"] + }, + { + "selector": "0x242ba12536f9ac18cffcedd5588e2922a17c0f453a064a64e62df6d3f6f8dce", + "offset": 647, + "builtins": ["range_check"] + }, + { + "selector": "0x265cf503e1b425e68026a65eb872306eb863eb6ba526cddc50fd44d00d8e180", + "offset": 0, + "builtins": ["range_check"] + }, + { + "selector": "0x29a68d48876fa0d864a616e212175e42824be1cdcb35bcd2e05b302042e491f", + "offset": 1269, + "builtins": ["range_check"] + }, + { + "selector": "0x31c18e21d8e75a5f2f6f1330c56da1f8b2fd93568002ef0d15bcce9c5644c2b", + "offset": 1495, + "builtins": ["range_check"] + }, + { + "selector": "0x36e432757f2854d382b66d849ed9a3edf35fdbf55a7c83296142cf7b89b0573", + "offset": 1755, + "builtins": ["range_check"] + }, + { + "selector": "0x3bb1cf9f6b291f5c63c8ecbfcf8cd522642fdc7ec277c2fddb7dc069cd05ced", + "offset": 2820, + "builtins": ["range_check"] + }, + { + "selector": "0x3c694eba4d500b140694d8f7da3f85031f4d4827b57da58cb5f2bd1ab74e5ab", + "offset": 1382, + "builtins": ["range_check"] + } + ], + "L1_HANDLER": [], + "CONSTRUCTOR": [] + } +} diff --git a/__mocks__/cairo/cairo2120/enums_test_option.contract_class.json b/__mocks__/cairo/cairo2120/enums_test_option.contract_class.json new file mode 100644 index 000000000..6043d6882 --- /dev/null +++ b/__mocks__/cairo/cairo2120/enums_test_option.contract_class.json @@ -0,0 +1,4894 @@ +{ + "sierra_program": [ + "0x1", + "0x7", + "0x0", + "0x2", + "0xc", + "0x0", + "0x3f0", + "0x10", + "0x7c", + "0x52616e6765436865636b", + "0x800000000000000100000000000000000000000000000000", + "0x537472756374", + "0x800000000000000f00000000000000000000000000000001", + "0x0", + "0x16a4c8d7c05909052238a862d8cc3e7975bf05a07b3a69c6b28951083a6d672", + "0x753136", + "0x800000000000000700000000000000000000000000000000", + "0x800000000000000700000000000000000000000000000004", + "0x2ee1e2b1b89f8c495f200e4956278a4d47395fe262f27b52e5865c9524c08c3", + "0x1", + "0x2", + "0x456e756d", + "0x800000000000000700000000000000000000000000000003", + "0x34ba6bae0cf8d1255e30a917ff6107d46826b40196a72d0e7e40774c78e1308", + "0x3", + "0x4", + "0x4172726179", + "0x800000000000000300000000000000000000000000000001", + "0x10", + "0x800000000000000300000000000000000000000000000003", + "0xea899504b4052c27cccf9971daead33001122c7badf30382a469a86d9f8143", + "0x6", + "0xe", + "0x536e617073686f74", + "0x800000000000000700000000000000000000000000000001", + "0x8", + "0x800000000000000700000000000000000000000000000002", + "0x1baeba72e79e9db2587cf44fedb2f3700b2075a5e8e39a562584862c4b71f62", + "0x9", + "0xa", + "0x7", + "0x38bd985835a9a53895c52b1878f7fea1ea86c6c36372a6554306b7deed44be6", + "0xb", + "0xc", + "0x66656c74323532", + "0x556e696e697469616c697a6564", + "0x800000000000000200000000000000000000000000000001", + "0x753332", + "0x753634", + "0x11", + "0x2daa4fab7cd27a2ed3cc28ccfb3cfca70ad3c000028aa10db2f4783fcefd345", + "0x12", + "0x14", + "0x120fbeae2508a96307cd9d3cd58ad37fd8f6a1ee44e75a9df62b5b86ba2ee2a", + "0x15", + "0x16", + "0x3590158452123707463380113690aa6c9c45f48ef55005fd27b035b47348988", + "0x17", + "0x426f78", + "0x370026b31ac236e06160ec5dd0d3f03ae6a16e3a80a7672d579c97014775824", + "0x1a", + "0x32d2062143aba742e856373db8854bb12033d85fbe03e144a91067f9e4d52f3", + "0x1b", + "0x62", + "0x2f99b21e21b1ea68f77345d47bde74e1e6c34d34cf69c71cbefd71b887b142f", + "0x1f", + "0x20", + "0x762af7d47e06fd1456367bdd600ec298e8ca9b72ada03929e234ae0a6974fa", + "0x21", + "0x2c", + "0x172b2d029d59f97d93dd24b7cc98c01ca8efd7bf422afd18e9041d6a1a5c170", + "0x24", + "0x25", + "0x30f87c80a9ff91f3ba0997da70c24279680d81f2429f998f2964b1a555ebb1a", + "0x26", + "0x436f6e7374", + "0x800000000000000000000000000000000000000000000002", + "0x4f7574206f6620676173", + "0x4661696c656420746f20646573657269616c697a6520706172616d202331", + "0x496e70757420746f6f206c6f6e6720666f7220617267756d656e7473", + "0x75313238", + "0x7538", + "0x3be6f13b1eeea8f6d4a3f8f94ff73e9fcdb11e0fc6bbda219a39d7ee87174b2", + "0x39f4bddbd30d58053c5c0e4cf215fd40c2ff6254027e1ca82d99dfb9352890f", + "0x2b", + "0x2d", + "0xee6bdef6928642145ee888437aa85c8de49c7818f4182a14a2a976e754de1", + "0x3b9ddf97bd58cc7301a2107c3eabad82196f38221c880cd3645d07c3aac1422", + "0x29f6621519cd76912cfece1d674f3b588713e5ed5f584eaae76037bcf225363", + "0x30", + "0x2b87e8e624ece2f0cf85d181387988b18f6983045a9920dc64764db7b704649", + "0x31", + "0x800000000000000700000000000000000000000000000005", + "0x1ca0859cc72336b50627b89194f06980da93ce94909d112cdc3a765a051f732", + "0x33", + "0x25f9ad655d525bf79405d9b98957b3aa16d86a2669a7252030de6dd582fce7a", + "0x34", + "0x336711c2797eda3aaf8c07c5cf7b92162501924a7090b25482d45dd3a24ddce", + "0x36", + "0x2299982bf733771210a7b4e01be8e699d9c778cc43743de9c81adc233d0c388", + "0x37", + "0x511591274d8813cc87dcfdf4098a0f02d4d964e5252715695c7682ef8ed20c", + "0x38", + "0x39", + "0x1363576206b17df7adacad7f47f20a0558a0e854432cf721f96cbbba837bf12", + "0x3a", + "0x33cff8ca50b98f40b2384a9deb3aa0ab15aaf36318ded0ef9476dabf49bcf59", + "0x3c", + "0x3f17eacf0c93d1c0968ec9606d65005de0d0f783350ed6e8fb034f4e616c4ac", + "0x3d", + "0x2311b30ff91641e03086db219fbd3a339d658feb37d0c9ae93c065185b98998", + "0x3f88fb1329d0c686ba50f926ff79af1c2a252a3594ae051c810b5f9492092f5", + "0x3f", + "0xc3ca175aa1161f5f8990fd287efc42d31a161e1c88dd5023cc11411ad9900e", + "0x40", + "0x19b9ae4ba181a54f9e7af894a81b44a60aea4c9803939708d6cc212759ee94c", + "0x3bc34212d2c42e27596fdda5c1c673422d928dc4f40e1de8c35217d1981d935", + "0x42", + "0x351e72f2e3f133f52891974fa3d211b3e579625b5b15c8d1d0c9db2a1a7d407", + "0x43", + "0x35b26fd36f40720f06990724c28a5d888642e82c23b388420091777a9116b14", + "0xb421937e7950e3d75405b25a18ee821a663b39dd8b4d0e442095780f90f986", + "0x45", + "0x178d6d12f3b1afb72a326e7a35eaad41bcdbd002be501b5e1e9b1b79a05dbf3", + "0x46", + "0x3d020cc8ad67767402690d2175f46e5a6c4bdfeffd34713354e19f97b494da0", + "0x49", + "0x88925dd451d220784df2998389085d5ae6b56c2d22d1d8e151ec9c2e0cd25", + "0x4b", + "0xb72e72e5a63caf9f10f3902eec9557b15660c00d245f7c5ae7157423fff53c", + "0x4c", + "0x325d56ed86ca2c3a275a749ddb80c013c5d9851885ab349d2ad8510170b42d9", + "0x4f", + "0x4e", + "0x185d9b297d752b92e36e7514f2af6ce91e23bd34be2b075b970d46b0f9a3d23", + "0x50", + "0x18c63d3eac6cdb8f2492ed432412542dce6b4ae731500e7570a41938aa68948", + "0x52", + "0x18881bb414cda2bb967493bb34bf6902e0f92d7dcdc5ed5c30dc67c9a90fcff", + "0x54", + "0x19f021de67a29d8733a584446c0a0c78f9c6bce2583e229f9a4bccd8d724d72", + "0x56", + "0x22493ed12362cd6b4b118733fccc20ee3faf6d6546367fcd35d931dc90833e3", + "0x57", + "0x3a6cffe2561983a3685045e4600085227508651a8efcafe6a1bc1f70802e054", + "0x2ae68393e5819b8dee9845b8c1ec8dbedfba9bbd68e7253e8f59d867460c0dc", + "0x59", + "0x5b", + "0x3fe244a46c1456c4718ef097f5cdd18149ca294c5bdffdd22b7e6f9540cf113", + "0x5c", + "0x3e914fa4847734da785313048196c36310337c36df9be4ce4ff971d838f07c1", + "0x5e", + "0x3850676e95044bcafdab66d09d52fbdc6c05024f661372f2c15e33951a241de", + "0x5f", + "0x141d61b4bf9a6647000e805a7f949d847cbe9ca009321b7a63424d9742a8912", + "0x1df5abf484ff46fcefc4c239b5c351ce9c47777b7e1f26b505f9e9bc5823115", + "0x154df121ec994a15880fd221c3fbaacd125f6c4807302f13f9a52cf62f5ce4e", + "0x33c2f5a7e0fffa93f1a29733d5927eb7ad69162f4de1c4fa05018aba200144e", + "0x63", + "0x183950d5e3273ec891c75fa886c8de01eadccb5ff4ca417397ccb80471b8bea", + "0x67", + "0x15c0a3cc422e9cead14b117474a7e040bc249953f092f790d2238c03d2d4a0b", + "0x68", + "0x107c4c114adf6d3b44474301d2cdc063e750f40c4d85ae2bcb9d2c5609cf970", + "0x74584e9f10ffb1a40aa5a3582e203f6758defc4a497d1a2d5a89f274a320e9", + "0x6b", + "0x34c1a4ee6ef3ec231b7e21635f0ab0f5e73f747e42beb02d65fc54c8e0e0575", + "0x6d", + "0x7613c7135b064a210243c4d523d64a3e8bb1803abc97c950d43a9c0340ac10", + "0x70", + "0x47d50ab84c14028e58f88d9f15b2547ac4d9e3ddb79a76ff9dbd8f98b6374", + "0x71", + "0x4275696c74696e436f737473", + "0x53797374656d", + "0x9931c641b913035ae674b400b61a51476d506bbe8bba2ff8a6272790aba9e6", + "0x73", + "0x4e6f6e5a65726f", + "0x4761734275696c74696e", + "0x1c2", + "0x7265766f6b655f61705f747261636b696e67", + "0x77697468647261775f676173", + "0x6272616e63685f616c69676e", + "0x7374727563745f6465636f6e737472756374", + "0x61727261795f736e617073686f745f706f705f66726f6e74", + "0x756e626f78", + "0x72656e616d65", + "0x73746f72655f74656d70", + "0x647570", + "0x66656c743235325f69735f7a65726f", + "0x64726f70", + "0x7531365f7472795f66726f6d5f66656c74323532", + "0x72656465706f7369745f676173", + "0x656e756d5f696e6974", + "0x7b", + "0x6a756d70", + "0x79", + "0x636f6e73745f61735f696d6d656469617465", + "0x78", + "0x66656c743235325f737562", + "0x7374727563745f636f6e737472756374", + "0x7a", + "0x66756e6374696f6e5f63616c6c", + "0x18", + "0x77", + "0x76", + "0x6765745f6275696c74696e5f636f737473", + "0x75", + "0x77697468647261775f6761735f616c6c", + "0x61727261795f6e6577", + "0x736e617073686f745f74616b65", + "0x656e61626c655f61705f747261636b696e67", + "0x656e756d5f6d61746368", + "0x7531365f746f5f66656c74323532", + "0x74", + "0x61727261795f617070656e64", + "0x64697361626c655f61705f747261636b696e67", + "0x19", + "0x72", + "0x656e756d5f736e617073686f745f6d61746368", + "0x61727261795f6c656e", + "0x7533325f746f5f66656c74323532", + "0x6e", + "0x1c", + "0x6c", + "0x1d", + "0x6a", + "0x1e", + "0x69", + "0x7374727563745f736e617073686f745f6465636f6e737472756374", + "0x64", + "0x61", + "0x75385f746f5f66656c74323532", + "0x22", + "0x60", + "0x5d", + "0x23", + "0x5a", + "0x7536345f746f5f66656c74323532", + "0x58", + "0x53", + "0x27", + "0x51", + "0x28", + "0x4d", + "0x29", + "0x47", + "0x2a", + "0x44", + "0x7536345f7472795f66726f6d5f66656c74323532", + "0x7533325f7472795f66726f6d5f66656c74323532", + "0x41", + "0x3e", + "0x3b", + "0x2e", + "0x35", + "0x2f", + "0x32", + "0x75313238735f66726f6d5f66656c74323532", + "0x753132385f746f5f66656c74323532", + "0x75385f7472795f66726f6d5f66656c74323532", + "0x13", + "0x616c6c6f635f6c6f63616c", + "0x66696e616c697a655f6c6f63616c73", + "0x73746f72655f6c6f63616c", + "0xd", + "0xf", + "0x5", + "0x1385", + "0xffffffffffffffff", + "0x86", + "0x7d", + "0x48", + "0x8b", + "0x4a", + "0x7f", + "0xfe", + "0xf7", + "0xed", + "0xab", + "0xe7", + "0xd4", + "0xcd", + "0xdd", + "0x103", + "0x18f", + "0x183", + "0x12c", + "0x125", + "0x13a", + "0x188", + "0x17c", + "0x146", + "0x176", + "0x163", + "0x16b", + "0x194", + "0x55", + "0x20b", + "0x204", + "0x1fa", + "0x1b4", + "0x1f4", + "0x1e1", + "0x1da", + "0x1ea", + "0x210", + "0x272", + "0x268", + "0x22c", + "0x262", + "0x24d", + "0x247", + "0x257", + "0x252", + "0x277", + "0x30c", + "0x300", + "0x2a0", + "0x299", + "0x65", + "0x2ae", + "0x305", + "0x2f9", + "0x66", + "0x2ba", + "0x2f3", + "0x2e0", + "0x2d5", + "0x2e8", + "0x311", + "0x384", + "0x378", + "0x6f", + "0x371", + "0x36a", + "0x33a", + "0x364", + "0x35d", + "0x389", + "0x37d", + "0x3f9", + "0x3eb", + "0x3b7", + "0x3b1", + "0x3ab", + "0x3c2", + "0x3f0", + "0x3e4", + "0x3cd", + "0x3df", + "0x3fe", + "0x3f2", + "0x45b", + "0x451", + "0x41a", + "0x44b", + "0x7e", + "0x438", + "0x80", + "0x81", + "0x82", + "0x83", + "0x84", + "0x440", + "0x460", + "0x4b7", + "0x4ad", + "0x47c", + "0x85", + "0x4a7", + "0x492", + "0x49c", + "0x4bc", + "0x53a", + "0x87", + "0x88", + "0x533", + "0x89", + "0x8a", + "0x529", + "0x4dc", + "0x523", + "0x8c", + "0x8d", + "0x4fa", + "0x8e", + "0x50d", + "0x8f", + "0x90", + "0x91", + "0x92", + "0x93", + "0x51c", + "0x53f", + "0x5a1", + "0x94", + "0x95", + "0x597", + "0x55b", + "0x96", + "0x591", + "0x97", + "0x98", + "0x578", + "0x586", + "0x99", + "0x5a6", + "0x62c", + "0x9a", + "0x9b", + "0x625", + "0x9c", + "0x9d", + "0x61b", + "0x5c6", + "0x9e", + "0x615", + "0x9f", + "0xa0", + "0x5e8", + "0x5ff", + "0xa1", + "0x60e", + "0x631", + "0x698", + "0xa2", + "0xa3", + "0x68e", + "0x64d", + "0xa4", + "0x688", + "0xa5", + "0xa6", + "0x673", + "0x668", + "0x67d", + "0x69d", + "0x702", + "0xa7", + "0xa8", + "0x6f8", + "0x6b9", + "0xa9", + "0x6f2", + "0xaa", + "0x6cf", + "0x6e7", + "0xac", + "0x6df", + "0x707", + "0x744", + "0x73a", + "0x723", + "0x735", + "0x749", + "0x7b9", + "0x7ad", + "0xad", + "0x7a7", + "0x7a0", + "0xae", + "0x799", + "0x771", + "0x792", + "0xaf", + "0xb0", + "0xb1", + "0xb2", + "0x7be", + "0x7b2", + "0x811", + "0xb3", + "0xb4", + "0x807", + "0x7da", + "0xb5", + "0x801", + "0xb6", + "0xb7", + "0xb8", + "0x816", + "0x843", + "0x82c", + "0x83e", + "0x848", + "0x89d", + "0xb9", + "0xba", + "0x893", + "0x864", + "0xbb", + "0x88d", + "0xbc", + "0xbd", + "0xbe", + "0xbf", + "0xc0", + "0x8a2", + "0x90d", + "0xc1", + "0xc2", + "0x906", + "0xc3", + "0xc4", + "0x8fc", + "0x8c2", + "0xc5", + "0x8f6", + "0xc6", + "0xc7", + "0xc8", + "0xc9", + "0xca", + "0xcb", + "0xcc", + "0x8ef", + "0x912", + "0x967", + "0xce", + "0x95d", + "0x92e", + "0xcf", + "0x957", + "0xd0", + "0xd1", + "0xd2", + "0xd3", + "0x96c", + "0x9c9", + "0xd5", + "0xd6", + "0x9bf", + "0x988", + "0xd7", + "0x9b9", + "0xd8", + "0xd9", + "0xda", + "0xdb", + "0xdc", + "0x9a6", + "0x9ae", + "0x9ce", + "0xa4e", + "0xa40", + "0xa38", + "0xde", + "0xdf", + "0xa30", + "0x9f4", + "0xe0", + "0xe1", + "0xa29", + "0xe2", + "0xe3", + "0xe4", + "0xe5", + "0xe6", + "0xe8", + "0xe9", + "0xea", + "0xa14", + "0xa1e", + "0xa53", + "0xa47", + "0xa45", + "0xeb", + "0xec", + "0xee", + "0xac5", + "0xaa8", + "0xa99", + "0xef", + "0xf0", + "0xf1", + "0xf2", + "0xa93", + "0xf3", + "0xf4", + "0xa8c", + "0xf5", + "0xf6", + "0xf8", + "0xf9", + "0xfa", + "0xaa1", + "0xfb", + "0xfc", + "0xaba", + "0xfd", + "0xaed", + "0xff", + "0xae3", + "0x100", + "0x101", + "0x102", + "0x104", + "0x105", + "0x106", + "0xb2f", + "0xb2b", + "0xb26", + "0xb21", + "0xb1b", + "0xb15", + "0x107", + "0xb32", + "0xb80", + "0xb64", + "0x108", + "0x109", + "0xb5e", + "0x10a", + "0x10b", + "0xb55", + "0x10c", + "0x10d", + "0x10e", + "0x10f", + "0x110", + "0x111", + "0x112", + "0xb75", + "0x113", + "0xba8", + "0x114", + "0xb9e", + "0x115", + "0x116", + "0xc0f", + "0xbf8", + "0xbf2", + "0xbdd", + "0xbd9", + "0xbd5", + "0x117", + "0x118", + "0x119", + "0xbf5", + "0xbed", + "0xc12", + "0x11a", + "0xc07", + "0x11b", + "0x11c", + "0xc5f", + "0xc38", + "0xc34", + "0x11d", + "0xc30", + "0x11e", + "0xc62", + "0xc56", + "0xc52", + "0xc4e", + "0x11f", + "0xcd6", + "0xc76", + "0x120", + "0x121", + "0x122", + "0x123", + "0xcc3", + "0xca1", + "0xc99", + "0xc91", + "0xcaf", + "0xcca", + "0xcba", + "0x124", + "0xccd", + "0x126", + "0xd0f", + "0x127", + "0x128", + "0xd05", + "0x129", + "0xcf6", + "0xcfe", + "0x12a", + "0x12b", + "0xd63", + "0xd4c", + "0xd48", + "0xd44", + "0xd3f", + "0xd3a", + "0x12d", + "0x12e", + "0xd66", + "0xd5b", + "0x12f", + "0x130", + "0xdf1", + "0xda7", + "0xd9e", + "0xd98", + "0xd91", + "0x131", + "0x132", + "0x133", + "0x134", + "0x135", + "0xdde", + "0x136", + "0xde5", + "0xdd6", + "0x137", + "0x138", + "0x139", + "0xdd0", + "0x13b", + "0x13c", + "0xdc9", + "0x13d", + "0x13e", + "0xe19", + "0x13f", + "0x140", + "0xe0f", + "0x141", + "0x142", + "0x143", + "0xe7b", + "0x144", + "0xe41", + "0xe3b", + "0x145", + "0x147", + "0x148", + "0xe72", + "0xe6e", + "0xe6a", + "0xe65", + "0xe60", + "0x149", + "0x14a", + "0xe7e", + "0xee5", + "0xeae", + "0xea8", + "0xea1", + "0x14b", + "0x14c", + "0x14d", + "0x14e", + "0x14f", + "0xecd", + "0x150", + "0xeda", + "0x151", + "0x152", + "0xed4", + "0x153", + "0x154", + "0xec7", + "0x155", + "0x156", + "0xf36", + "0xf0f", + "0xf09", + "0x157", + "0x158", + "0x159", + "0x15a", + "0xf2d", + "0xf29", + "0xf25", + "0x15b", + "0xf39", + "0xfac", + "0xf5f", + "0xf5b", + "0xf57", + "0x15c", + "0x15d", + "0x15e", + "0xfaf", + "0xfa3", + "0xf9d", + "0xf88", + "0xf84", + "0xf80", + "0x15f", + "0x160", + "0xfa0", + "0xf98", + "0x161", + "0x162", + "0xfee", + "0xfea", + "0xfe5", + "0xfe0", + "0xfda", + "0xfd4", + "0x164", + "0x165", + "0xff1", + "0x166", + "0x102c", + "0x1028", + "0x1021", + "0x101c", + "0x167", + "0x168", + "0x1014", + "0x169", + "0x16a", + "0x16c", + "0x16d", + "0x16e", + "0x102f", + "0x1025", + "0x16f", + "0x170", + "0x171", + "0x1082", + "0x172", + "0x107c", + "0x106c", + "0x173", + "0x174", + "0x175", + "0x1065", + "0x177", + "0x178", + "0x105d", + "0x179", + "0x17a", + "0x17b", + "0x17d", + "0x17e", + "0x17f", + "0x1075", + "0x180", + "0x181", + "0x1088", + "0x182", + "0x10c7", + "0x10c3", + "0x10bc", + "0x10b7", + "0x184", + "0x10af", + "0x185", + "0x186", + "0x187", + "0x189", + "0x10ca", + "0x10c0", + "0x18a", + "0x111c", + "0x1118", + "0x1111", + "0x10fb", + "0x10f6", + "0x10f1", + "0x18b", + "0x18c", + "0x18d", + "0x18e", + "0x1115", + "0x110b", + "0x111f", + "0x190", + "0x116c", + "0x1145", + "0x1141", + "0x113d", + "0x191", + "0x192", + "0x193", + "0x116f", + "0x1163", + "0x115f", + "0x115b", + "0x195", + "0x196", + "0x197", + "0x198", + "0x11b7", + "0x1189", + "0x199", + "0x19a", + "0x19b", + "0x11a7", + "0x119f", + "0x19c", + "0x19d", + "0x11ae", + "0x19e", + "0x120c", + "0x1206", + "0x11f7", + "0x11f0", + "0x11e7", + "0x19f", + "0x1a0", + "0x1a1", + "0x1a2", + "0x11fd", + "0x1a3", + "0x1212", + "0x1258", + "0x122a", + "0x1a4", + "0x1a5", + "0x1a6", + "0x1a7", + "0x1248", + "0x1240", + "0x1a8", + "0x1a9", + "0x124f", + "0x1aa", + "0x1ab", + "0x12ad", + "0x12a7", + "0x1298", + "0x1291", + "0x1288", + "0x1ac", + "0x1ad", + "0x1ae", + "0x1af", + "0x1b0", + "0x129e", + "0x1b1", + "0x1b2", + "0x12b3", + "0x12f5", + "0x12f1", + "0x12ec", + "0x12e7", + "0x12e1", + "0x12db", + "0x1b3", + "0x1b5", + "0x12f8", + "0x1b6", + "0x133a", + "0x130c", + "0x1b7", + "0x1b8", + "0x1b9", + "0x1ba", + "0x132a", + "0x1322", + "0x1bb", + "0x1331", + "0x1bc", + "0x1bd", + "0x137d", + "0x1379", + "0x1374", + "0x136f", + "0x1369", + "0x1363", + "0x1be", + "0x1bf", + "0x1c0", + "0x1380", + "0x1c1", + "0x217", + "0x27e", + "0x318", + "0x390", + "0x405", + "0x467", + "0x4c3", + "0x546", + "0x5ad", + "0x638", + "0x6a4", + "0x70e", + "0x750", + "0x7c5", + "0x81d", + "0x84f", + "0x8a9", + "0x919", + "0x973", + "0x9d5", + "0xa5a", + "0xa5e", + "0xa62", + "0xa66", + "0xad0", + "0xaf6", + "0xb37", + "0xb8b", + "0xbb1", + "0xc17", + "0xc67", + "0xce0", + "0xd18", + "0xd6b", + "0xdfc", + "0xe22", + "0xe83", + "0xef0", + "0xf3e", + "0xfb4", + "0xff6", + "0x1034", + "0x1091", + "0x10cf", + "0x1124", + "0x1174", + "0x117a", + "0x11c1", + "0x121b", + "0x1262", + "0x12bc", + "0x12fd", + "0x1344", + "0xa567", + "0xe0340a0140400c0c02c0c02c0c02c0a0140900c0801c060140400c0200400", + "0xb068190600b04c120440b05c0b058050540d0500b04c120440b0400b03c05", + "0x150341b02c0b02c0a0141500c2002c1f02c0a0141500c1e02c1d0141c00c1b", + "0xb0500b0300b028050240302028020270600b098250202408c0b0880b08405", + "0x2d014150342c02c0c02c0a0141500c0c02c130481102c2b02c2a0140e03429", + "0xd0300b0683208c0b0c40b0c0050540d0bc0b07c0b02805054030440b0b80b", + "0x1a0c82302c3602c35014150343402c1f02c0a0141500c1102c2c02c3301415", + "0x5054030440b0e40b0e0050540d05c0b0500b02805054030500b068320dc0b", + "0x3e014150343d02c130483d02c1a0c82302c3c02c3b014150343a02c1f02c0a", + "0xc0600b1104308c0b1080b104050540d1000b07c0b02805054030440b0fc0b", + "0x2902c3d02c4a0140e0340812408120470301802c4410c460301802c4410c45", + "0x30440b0f40b13c050380d0440b1340b138050380d1340b1300b12c0503803", + "0xc02c0c02c0c02c0a0145400c1102c5302c520140e0345102c1402c500140e", + "0x50700305c0b068190440b1600b15c050380d1580b0300b15405038030300b", + "0x1f02c0a0140e00c1102c5e02c5d0140e0345c02c0c02c5b0140e00c5a02c59", + "0x5038030a40b0500b0300b0f40b028051500308c0b1840b180050540d17c0b", + "0x670140e00c1402c2902c660140e00c1102c6502c640140e0346302c0c02c62", + "0xb1b0050380d0440b0500b1ac050380d0440b1a80b1a4050380d1a00b0a40b", + "0x7202c710140e0340c02c3d02c700140e0341102c6f02c6e0140e0346d02c3d", + "0xb068190b80b0e40b1d4050540d0b80b068190440b1d00b1cc050380d0500b", + "0x2302c7a02c79014150347802c1f02c0a0141500c1102c7602c770141503476", + "0xb1f00b1ec050380d0500b0500b0500b02805024030300b0300b0280503803", + "0x3f02c82014150348102c800141c00c2c02c1a0641102c7f02c7e0140e0347d", + "0x50540d2140b07c0b02805054030440b20c0b210050540d20c0b068190b00b", + "0x3702c130481102c8a02c890140e0341102c6802c880140e0342302c8702c86", + "0xb07c0b02805054030440b22c0b238050540d2340b230050700322c0b06819", + "0x1102c0c02c930140e0341102c7202c920140e0342302c9102c90014150348f", + "0xd0e80b068190e40b068190440b2580b254050380d0440b0dc0b250050380d", + "0xe0342302c9a02c99014150349802c1f02c0a0141500c1102c3a02c9701415", + "0xb0681908c0b2740b270050540d0440b06c0b02805054030440b1f00b26c05", + "0x1f02c0a0141500c1102c4002ca0014150344002c1a0649f02c9e0141c00c3f", + "0xa5020a40140c0600b1104307c0b028050700308c0b28c0b288050540d2840b", + "0x22a41802c1a0c81802c1a2a00b0301802c4410c2302ca702ca60141503402", + "0xb2c81802c0b2c41802c0b2c01802c0b2bc1f02c0b2b8052b4052b0052acaa", + "0xc0dc0b030b8014b7014b60780b02cb20600b02cb5014b40600b02cb30600b", + "0xb2f0bb02c0b2d41e02c0b2d4052e83702c0b2c8b902c0b2c80502c0b2c805", + "0x1002cc10dc0b02cb53000b02cb502c0c0dc0b030b80440b02cbf014be2f40b", + "0xb3200531cc602c0b2c805314c302c0b2c8c402c0b2c80b030c302c0c2e0c2", + "0xb02cce3340b02cbc014cc0300b02cb10dc0b02ccb014ca0dc0b02cc90600b", + "0xb2fc1f02c0b2fc1b02c0b2d41b02c0b3240533c1102c0b2d41b02c0b2c818", + "0xc107c0b02cb53401002cc12e40b02cb10140b02cb10140c30c0b030b829c0b", + "0xb2d4a102c0b32ca302c0b2b8d102c0b32c360400b3041f02c0b2c8340400b", + "0xb23540b02cbf014d40f40b02cd327c0b02cb31000b02cd21000b02cc91000b", + "0xc2e0d902c0b32cd80400b3049d02c0b2b8d702c0b32cd60400b304d502c0b", + "0xb02cae3640b02cc93640b02cb502c0c3640b030b83640b02cb20140c3640b", + "0x3a02c0b2d49802c0b32c9a02c0b2b8db02c0b32cda0400b3041402c0b2c47c", + "0xb21700b02cbf0500b02cd31680b02cb30e40b02cdc0e80b02cd20e80b02cc9", + "0xb32c9602c0b3249602c0b2d4dd02c0b32c3a0400b304390400b3045c02c0b", + "0xc3780b030b83780b02cb20140c3780b030b83780b02ccb0f01002cc12580b", + "0xb2c83702c0b3200537c3d02c0b2c47202c0b32cde02c0b324de02c0b2d40b", + "0xb02cc922c0b02cb523c0b02ccb2440b02cae3840b02ccb3801002cc122c0b", + "0xc02c0b2d4e30400b304e202c0b2c8e202c0b2fc3702c0b34c8d02c0b2cc8b", + "0xae1a00b02cb32280b02ccb2280b02cc92280b02cb53900b02ccb0fc1002cc1", + "0x7202c0b3247202c0b2d42902c0b2d4053942902c0b2c41402c0b2d46802c0b", + "0xd220c0b02cc920c0b02cb52140b02ccb21c0b02cae3980b02ccb1001002cc1", + "0xb304e702c0b2c8e702c0b2fc0c02c0b34c8102c0b2ccd702c0b2c48302c0b", + "0xb02cae1fc0b02ccb1fc0b02cc91fc0b02cb53a40b02ccb3a01002cc110810", + "0x7602c0b3247602c0b2d47802c0b32c7a02c0b2b8eb02c0b32cea0400b3047d", + "0xcb1d00b02cc91d00b02cb53b40b02ccb3b01002cc10b80b02cdc1d80b02cd2", + "0xb32c6f02c0b32c6f02c0b3246f02c0b2d4ef02c0b32cee0400b3047402c0b", + "0x1002cc11a00b02cb21a00b02cb51a00b02cc91a00b02cbf014f1014f01b40b", + "0x3d0400b3046a02c0b2b86a02c0b2cc6a02c0b3246a02c0b2d4f202c0b32c4c", + "0xae18c0b02cb51940b02cae1940b02cb31940b02cc91940b02cb53cc0b02ccb", + "0xb3245e02c0b2d45f02c0b32c6102c0b2b8f402c0b32c4d0400b3046302c0b", + "0xb02cae1700b02cb11700b02cb31700b02cb51780b02cae1780b02cb31780b", + "0x5802c0b2b85802c0b2cc5802c0b3245802c0b2d4f602c0b32cf50400b3045c", + "0xb314c0b02cc914c0b02cb53e00b02ccb3dc1002cc11580b02cae1580b02cb5", + "0xf702c0b32c510400b304053e45102c0b32c5102c0b2d45302c0b2b85302c0b", + "0xb33d40b02cb23d40b02cb53d40b02cc93d40b02cbf1340b02cb51300b02cb5", + "0x530400b304ee02c0b2f04d02c0b32c053e84c02c0b2c4f502c0b2b8f502c0b", + "0xae3a00b02ccb3e01002cc10fc0b02cb20f40b02cc83a80b02cbc3b00b02cbc", + "0xc2e0a302c0b2fc05030a102c0c2e0050304002c0c2e04002c0b32c4202c0b", + "0xb802c0c2840b030b802c0c3440b030b80440b02cb13440b02cb20140c3440b", + "0x9d02c0b2fc9f02c0b2d43d02c0b2c03d02c0b2bcd502c0b2b80b0304002c0c", + "0xc11f00b02cbf02c0c35c0b030b83540b02cb535c0b02cb20140c35c0b030b8", + "0x9802c0c2e0050303a02c0c2e03a02c0b32c3c02c0b2b8e002c0b32c560400b", + "0xb030b802c0c2600b030b836c0b02cb20140c36c0b030b82680b02cbf0140c", + "0x9602c0c2e05a02c0b2d41402c0b2c01402c0b2bc0b0303a02c0c2e00b030db", + "0xb030b802c0c2580b030b80780b02cb13740b02cb20140c3740b030b80140c", + "0xb2fc050308f02c0c2e00b0307202c0c2e0050307202c0c2e0053ec0b030dd", + "0xb030b802c0c23c0b030b80dc0b02cce3840b02cb20140c3840b030b82440b", + "0xc2e0e202c0b2d48d02c0b2d43702c0b2c03702c0b2bce202c0b2b80b030e1", + "0xc3900b030b802c0c2280b030b83900b02cb20140c3900b030b80140c2280b", + "0xb2c805030e602c0c2e08702c0b2fc050308502c0c2e0050308302c0c2e00b", + "0xae3580b02ccb1601002cc10b00b02cb20300b02cc802c0c3980b030b83980b", + "0xb2bce702c0b2b80b0308502c0c2e00b0308302c0c2e03402c0b32c3602c0b", + "0xb80140c1fc0b030b80780b02cb339c0b02cb52040b02cb50300b02cb00300b", + "0xb0307f02c0c2e07d02c0b2fc0b030e902c0c2e0e902c0b2c805030e902c0c", + "0xb02cb20140c3ac0b030b81e80b02cbf0140c1e00b030b80140c1d80b030b8", + "0xc2e02f02c0b32c3102c0b2b8c202c0b32cf60400b3040b030eb02c0c2e0eb", + "0xb02cb20140c3b40b030b80140c1d00b030b802c0c1e00b030b802c0c1d80b", + "0x5030ef02c0c2e0050306f02c0c2e00b0307402c0c2e00b030ed02c0c2e0ed", + "0xb030b802c0c1b40b030b802c0c1bc0b030b80140c1b40b030b83bc0b02cb2", + "0xb3040b030f202c0c2e0f202c0b2c805030f202c0c2e06a02c0b2fc0b030ef", + "0xb20140c3cc0b030b81940b02cbf18c0b02cbf0ac0b02cae3f00b02ccb16810", + "0xb3201802c0b3fc053f81802c0b3f40b030f302c0c2e03d02c0b2d4f302c0b", + "0xb02cc90800b02ccb0880b02cae4000b02ccb1701002cc105c0b02cb20500b", + "0x5030f402c0c2e06102c0b2fc050305f02c0c2e05e02c0b2fc1702c0b2d417", + "0xcb1781002cc14040b02cb502c0c17c0b030b802c0c3d00b030b83d00b02cb2", + "0xf602c0b2c805030f602c0c2e05802c0b2fc5602c0b2fc1002c0b2b90202c0b", + "0xb02cb20140c3e00b030b814c0b02cbf0140c1440b030b802c0c3d80b030b8", + "0x5030f702c0c2e0050304d02c0c2e00b030f802c0c2e00b0305102c0c2e0f8", + "0xb208c0b02cbf02c0b02cbf02c0c3dc0b030b802c0c1340b030b83dc0b02cb2", + "0x3f02c0b2d43d02c0b338e802c0b2c805030e802c0c2e04202c0b2fc2302c0b", + "0xb83800b02cb20140c3800b030b80f00b02cbf0e40b02cbf02c0c3a00b030b8", + "0xd602c0b2c805030d602c0c2e03602c0b2fc050303402c0c2e00b030e002c0c", + "0xb80b80b02cbf02c0c3580b030b802c0c0d00b030b80b00b02cb50300b02cce", + "0xb030c202c0c2e0c202c0b2c805030c202c0c2e03102c0b2fc050302f02c0c", + "0xc3f00b030b83f00b02cb20140c3f00b030b80ac0b02cbf02c0c0bc0b030b8", + "0x1402c0b3390002c0b2c8050310002c0c2e02202c0b2fc050302002c0c2e00b", + "0xb02cb20140c4080b030b80400b02cbf02c0c4000b030b802c0c0800b030b8", + "0x10540811031040300b0140c02c050150402c050140540c0b0310202c0c2e102", + "0x1e031040301b02c110141b02d0402c1002c10014054100b0140c0142005c0c", + "0xb4100b08c0b05c0508c0b4100b07c0b408050150402c05030050880b2f41f", + "0x54100c0600b07805061000310402d0002c1b0150002d0402d0002c2001500", + "0x50780b4100b0780b088050150402d0002c1f014054100b0140c0150102cea", + "0xfc02d0402c2902d02014054100b0140c0142b02ce00a414031040301e02c11", + "0x2e031040302c0440c08c050b00b4100b0b00b080050b00b4100b3f00b05c05", + "0xb4100b0bc0b060053080b4100b4080b400050150402c05030050c40b3582f", + "0xd602d0402cd002c290143602d0402cc202c140143402d0402c2e02d01014d0", + "0xb0500b3f0050150402c05030050145a02c050ac053600b4100b0500b08805", + "0xb4100b3680b050050e40b4100b0c40b404053680b4100b4080b4000501504", + "0xb4080b400050150402c2b02cfc014054100b0140c014054180b0142b0143a", + "0x54180b0142b0143a02d0402c3c02c140143902d0402c1102d010143c02d04", + "0xe04000c0bc053800b4100b0142e014054100b4040b0b0050150402c0503005", + "0x5030050fc0b28c054100c38c0b0780538c0b4100b38c0b0800538c0b4100b", + "0xb4100b1080b308051080b4100b014310144002d0402d0202d00014054100b", + "0xd602d0402ce802c290143602d0402c4002c140143402d0402c1102d01014e8", + "0x10402c05030053b80b1b4ec3a80c4100c3600b044053600b4100b0780b08805", + "0x50d8050150402cd602c34014054100b3b00b340050150402cea02cfc01405", + "0xb0d80b050050d00b4100b0d00b404050f40b4100b1300b358051300b4100b", + "0x3d030360d01102c3d02d0402c3d02cda0140c02d0402c0c02cd80143602d04", + "0xb1340b0e8051340b4100b01439014054100b3b80b3f0050150402c0503005", + "0x50150402c050300514c510309d3dcf5031040304d0d8340403c0144d02d04", + "0x50fc050150402c5602c34014581580c4100b3580b38c053e00b4100b014e0", + "0xb3dc0b400050150402c05030051680b398f602d040305802c40014054100b", + "0xb4100b014ea0145f02d0402c5e02ce80145e02d0402cf602c420145c02d04", + "0x10402c5f3d00c3b0053d00b4100b184f8030ec0146102d0402c6102c2001461", + "0x5014e102c050ac053cc0b4100b18c0b3b8051940b4100b1700b0500518c0b", + "0x10402c050b8051a00b4100b3dc0b400050150402c5a02c4c014054100b0140c", + "0x10402c6802c14014f202d0402c6a3e00c3b0051a80b4100b1a80b080051a80b", + "0x6f1b40c4100b3cc0b134050150402c050f4053cc0b4100b3c80b3b8051940b", + "0x530147202d0402cef02c51014ef02d0402c6f02cf7014054100b1b40b3d405", + "0xb360051940b4100b1940b050053d40b4100b3d40b404051d00b4100b1c80b", + "0x54100b0140c01474030653d41102c7402d0402c7402cda0140c02d0402c0c", + "0x140150702d0402c5102d01014ed02d0402c5302d00014054100b3580b0d005", + "0x54100b0fc0b0b0050150402c05030050150802c050ac051d80b4100b3b40b", + "0x140147802d0402c1102d010150902d0402d0202d00014054100b0780b3f005", + "0x54100b0880b3f0050150402c05030050150a02c050ac051e80b4100b4240b", + "0x50e80b4100b3ac0b050050e40b4100b0440b404053ac0b4100b4080b40005", + "0xb358051f40b4100b014580147a02d0402c3a02c560147802d0402c3902cf8", + "0xc02cd80147a02d0402c7a02c140147802d0402c7802d010147c02d0402c7d", + "0x50150402c05030051f00c1e8780440b1f00b4100b1f00b368050300b4100b", + "0xb0500541c0b4100b05c0b404051fc0b4100b0800b400050150402c1002cf6", + "0xb41c0b404052040b4100b3a40b358053a40b4100b0145a0147602d0402c7f", + "0x10402c8102cda0140c02d0402c0c02cd80147602d0402c7602c140150702d04", + "0x10b40811031040300b0140c02c050150402c05014052040c1d9070440b2040b", + "0x10202d0402d0202c140141102d0402c1102d01014054100b0140c0142005c0c", + "0xc07c0b17c0507c1e06c104100b0410204410178050400b4100b0400b17005", + "0x1802cf4014184000c4100b0880b184050150402c050300508c0b4302202d04", + "0x2902c110142902d0402d0002c10014054100b0140c0141402d0d4040b4100c", + "0xfc02cd0014054100b0ac0b3f0050150402c05030050b00b438fc0ac0c4100c", + "0x2f02d0402c2e02cd60142e02d0402c050d8050150402d0102c63014054100b", + "0x50300b4100b0300b360050780b4100b0780b0500506c0b4100b06c0b40405", + "0x10402c2c02cfc014054100b0140c0142f0301e06c1102c2f02d0402c2f02cda", + "0xc4100c0c41e06c100f0050c40b4100b0c40b0e8050c40b4100b0143901405", + "0x10402d0102c65014d602d0402c05380050150402c05030050d8340310f340c2", + "0xb0140c0143a02d100e40b4100c3680b3cc050150402cd802c63014da3600c", + "0x10402ce002cf2014e002d0402c3c02c6a0143c0e40c4100b0e40b1a00501504", + "0xb4100b0fcd6030ec0143f02d0402c3f02c200143f02d0402c053a80538c0b", + "0xb4100b0e40b1b4051080b4100b38c40030ec014e302d0402ce302c2001440", + "0xe802d0402ce802c6f014d002d0402cd002c14014c202d0402cc202d01014e8", + "0xee02c72014ee3b0ea0410402c423a0d0308113bc051080b4100b1080b3b805", + "0x4c02c740144d02d0402cec02d00014054100b0140c0143d02d111300b4100c", + "0xb1340b050051440b4100b3a80b404050150402cf702c4c014f73d40c4100b", + "0xd6014054100b0140c014054480b0142b014f802d0402cf502cee0145302d04", + "0xb360053b00b4100b3b00b050053a80b4100b3a80b404051580b4100b0f40b", + "0x54100b0140c01456030ec3a81102c5602d0402c5602cda0140c02d0402c0c", + "0xb080053d80b4100b0142e0145802d0402cd002d00014054100b0e80b13005", + "0xb050051440b4100b3080b404051680b4100b3d8d6030ec014f602d0402cf6", + "0xb3d4051785c0310402cf802c4d014f802d0402c5a02cee0145302d0402c58", + "0xb1840b14c051840b4100b17c0b1440517c0b4100b1780b3dc050150402c5c", + "0x10402c0c02cd80145302d0402c5302c140145102d0402c5102d01014f402d04", + "0xb18c050150402c05030053d00c14c510440b3d00b4100b3d00b368050300b", + "0xb18c0b050051940b4100b0d00b4040518c0b4100b0d80b400050150402d01", + "0xb3d8050150402c1402c4c014054100b0140c0140544c0b0142b014f302d04", + "0x10402c1b02d010146a02d0402c6802cd60146802d0402c05160050150402d00", + "0xb4100b1a80b368050300b4100b0300b360050780b4100b0780b0500506c0b", + "0x1b02d01014f202d0402c2302cd6014054100b0140c0146a0301e06c1102c6a", + "0xb3c80b368050300b4100b0300b360050780b4100b0780b0500506c0b4100b", + "0xb400050150402c1002cf6014054100b0140c014f20301e06c1102cf202d04", + "0xb0145a014f302d0402c6d02c140146502d0402c1702d010146d02d0402c20", + "0x10402cf302c140146502d0402c6502d01014ef02d0402c6f02cd60146f02d04", + "0x53bc0c3cc650440b3bc0b4100b3bc0b368050300b4100b0300b360053cc0b", + "0x54100b0140c0142005c0c451020440c4100c02c050300b014054100b01405", + "0x10402c05030050880b4541f0780c4100c06c0b0440506c0b4100b0400b04005", + "0x10002d0402d0002c200150002d0402c2302c170142302d0402c1f02d0201405", + "0x54100b0140c0150102d16015040301802c1e014184000c4100b4000b06c05", + "0x5c0141102d0402c1102d010141402d0402c1e02cf7014054100b4000b07c05", + "0x2c02d04030fc02d07014fc0ac290410402c140440c3b4050500b4100b0500b", + "0x3102d0402c2c02c760142f02d0402d0202d00014054100b0140c0142e02d17", + "0x50d00b4100b0bc0b050053400b4100b0a40b404053080b4100b0ac0b04005", + "0xb0140c014054600b0142b014d602d0402cc202c220143602d0402c3102d09", + "0x53600b4100b4080b400050150402c2b02cf6014054100b0b80b1300501504", + "0xb0140c014054640b0142b0143902d0402cd802c14014da02d0402c2902d01", + "0x3c02d0402c3a4000c0bc050e80b4100b0142e014054100b4040b0b00501504", + "0x50150402c05030053800b468054100c0f00b078050f00b4100b0f00b08005", + "0xb404051000b4100b0fc0b1e0050fc0b4100b01431014e302d0402d0202d00", + "0x1e02c220143602d0402c4002d090143402d0402ce302c14014d002d0402c11", + "0xb3f0050150402c05030053a80b46ce81080c4100c3580b044053580b4100b", + "0xec02d0402c050d8050150402c3602c7a014054100b3a00b340050150402c42", + "0x50d00b4100b0d00b050053400b4100b3400b404053b80b4100b3b00b35805", + "0xb0140c014ee030343401102cee02d0402cee02cda0140c02d0402c0c02cd8", + "0x51300b4100b1300b0e8051300b4100b01439014054100b3a80b3f00501504", + "0x10402c05380050150402c05030053dcf50311c1343d031040304c0d0d00403c", + "0x50150402c050fc050150402c5302c7a014f814c0c4100b0d80b3ac051440b", + "0x53d80b4100b1340b400050150402c05030051600b4745602d04030f802d07", + "0x6102d0402c5f02cf20145f02d0402c5a02c7c0145e1705a0410402c5602c7d", + "0x51940b4100b1780b1f00518c0b4100b3d00b3c8053d00b4100b1700b1f005", + "0xc3b0051a00b4100b1a00b080051a00b4100b014ea014f302d0402c6502cf2", + "0x51b40b4100b18cf2030ec014f202d0402c611a80c3b0051a80b4100b1a051", + "0x51c80b4100b1bc0b3b8053bc0b4100b3d80b050051bc0b4100b3cc6d030ec", + "0xb4100b1340b400050150402c5802c4c014054100b0140c014054780b0142b", + "0x10702d0402ced1440c3b0053b40b4100b3b40b080053b40b4100b0142e01474", + "0xb134050150402c050f4051c80b4100b41c0b3b8053bc0b4100b1d00b05005", + "0x7802c510147802d0402d0902cf7014054100b1d80b3d405424760310402c72", + "0xb3bc0b050050f40b4100b0f40b404053ac0b4100b1e80b14c051e80b4100b", + "0xeb030ef0f41102ceb02d0402ceb02cda0140c02d0402c0c02cd8014ef02d04", + "0xf502d010147d02d0402cf702d00014054100b0d80b1e8050150402c0503005", + "0x50150402c05030050151f02c050ac051fc0b4100b1f40b050051f00b4100b", + "0x1102d01014e902d0402d0202d00014054100b0780b3f0050150402ce002c2c", + "0x50150402c05030050151902c050ac050e40b4100b3a40b050053680b4100b", + "0xb050053680b4100b0440b404052040b4100b4080b400050150402c2202cfc", + "0xb3680b4040520c0b4100b39c0b3580539c0b4100b014580143902d0402c81", + "0x10402c8302cda0140c02d0402c0c02cd80143902d0402c3902c14014da02d04", + "0x2002d00014054100b0400b3d8050150402c050300520c0c0e4da0440b20c0b", + "0x10402c05168051fc0b4100b4800b050051f00b4100b05c0b404054800b4100b", + "0xb4100b1fc0b050051f00b4100b1f00b4040521c0b4100b2140b358052140b", + "0x5014870307f1f01102c8702d0402c8702cda0140c02d0402c0c02cd80147f", + "0x50150402c0503005080170312140811031040300b0140c02c050150402c05", + "0x7f0141002d0402c1002c5c0150202d0402d0202c140141102d0402c1102d01", + "0xb0140c0142302d220880b4100c07c0b3a40507c1e06c104100b0410204410", + "0x5030050500b48d0102d040301802ce7014184000c4100b0880b2040501504", + "0xc0142c02d243f02b031040302902c110142902d0402d0002c10014054100b", + "0x54100b4040b20c050150402cfc02cd0014054100b0ac0b3f0050150402c05", + "0x140141b02d0402c1b02d010142f02d0402c2e02cd60142e02d0402c050d805", + "0x1b0440b0bc0b4100b0bc0b368050300b4100b0300b360050780b4100b0780b", + "0x3a0143102d0402c050e4050150402c2c02cfc014054100b0140c0142f0301e", + "0xb0140c014360d00c494d03080c4100c0c41e06c100f0050c40b4100b0c40b", + "0x54100b3600b20c05368d80310402d0102d20014d602d0402c053800501504", + "0x3c0310402c3902c87014054100b0140c0143a02d260e40b4100c3680b21405", + "0xe00310402ce002ce60143f02d0402ce302cf2014e302d0402c3c02c7c014e0", + "0x53a80b4100b014ea014e802d0402c4202cf20144202d0402c4002c8a01440", + "0xee02d0402c3f3b00c3b0053b00b4100b3a8d6030ec014ea02d0402cea02c20", + "0x3d02d0402ce002ce40144c02d0402ce83b80c3b0053a00b4100b3a00b08005", + "0x50f40b4100b0f40b22c053400b4100b3400b050053080b4100b3080b40405", + "0xc3dc0b1c8053dcf5134104100b1303d340c20448d0144c02d0402c4c02cee", + "0xb1440b1d0053e00b4100b3d40b400050150402c050300514c0b49c5102d04", + "0x10402cf802c14014f602d0402c4d02d01014054100b1600b130051605603104", + "0xb358050150402c05030050152802c050ac051700b4100b1580b3b8051680b", + "0xc02cd8014f502d0402cf502c140144d02d0402c4d02d010145e02d0402c53", + "0x50150402c05030051780c3d44d0440b1780b4100b1780b368050300b4100b", + "0x6102c200146102d0402c050b80517c0b4100b3400b400050150402c3a02c4c", + "0x5f02c14014f602d0402cc202d01014f402d0402c613580c3b0051840b4100b", + "0x6302cf50146518c0c4100b1700b134051700b4100b3d00b3b8051680b4100b", + "0x10402c6802c530146802d0402cf302c51014f302d0402c6502cf7014054100b", + "0xb4100b0300b360051680b4100b1680b050053d80b4100b3d80b404051a80b", + "0x10102c83014054100b0140c0146a0305a3d81102c6a02d0402c6a02cda0140c", + "0x10402cf202c140146d02d0402c3402d01014f202d0402c3602d00014054100b", + "0x10002cf6014054100b0500b130050150402c05030050152902c050ac051bc0b", + "0xb4100b06c0b404051c80b4100b3bc0b358053bc0b4100b01458014054100b", + "0x7202d0402c7202cda0140c02d0402c0c02cd80141e02d0402c1e02c140141b", + "0xb06c0b404051d00b4100b08c0b358050150402c05030051c80c0781b0440b", + "0x10402c7402cda0140c02d0402c0c02cd80141e02d0402c1e02c140141b02d04", + "0x2002d00014054100b0400b3d8050150402c05030051d00c0781b0440b1d00b", + "0x10402c05168051bc0b4100b3b40b050051b40b4100b05c0b404053b40b4100b", + "0xb4100b1bc0b050051b40b4100b1b40b404051d80b4100b41c0b3580541c0b", + "0x5014760306f1b41102c7602d0402c7602cda0140c02d0402c0c02cd80146f", + "0x50150402c0503005080170312a40811031040300b0140c02c050150402c05", + "0x1e06c104100b04011030e20141002d0402c1002c5c0141102d0402c1102d01", + "0xb4100b0780b040050150402c050300508c0b4ac2202d040301f02c8f0141f", + "0x10402c1802cfc014054100b0140c0141402d2c40418031040310002c1101500", + "0xb358050a40b4100b01436014054100b0880b244050150402d0102cd001405", + "0xc02cd80150202d0402d0202c140141b02d0402c1b02d010142b02d0402c29", + "0x50150402c05030050ac0c4081b0440b0ac0b4100b0ac0b368050300b4100b", + "0x1b0403c014fc02d0402cfc02c3a014fc02d0402c050e4050150402c1402cfc", + "0x53080b4100b014e0014054100b0140c014310bc0c4b42e0b00c4100c3f102", + "0x3402cde014054100b0143f014054100b3400b244050d0d00310402c2202ce1", + "0xb3600b080053600b4100b014ea014054100b0140c014d602d2e0d80b4100c", + "0xc0143a02d2f0e40b4100c0d80b100053680b4100b360c2030ec014d802d04", + "0xb3800b3a0053800b4100b0e40b108050f00b4100b0b80b400050150402c05", + "0x10402c3f3680c3b0050fc0b4100b0fc0b080050fc0b4100b014ea014e302d04", + "0x10402c4202cee014e802d0402c3c02c140144202d0402ce31000c3b0051000b", + "0x2e02d00014054100b0e80b130050150402c05030050153002c050ac053a80b", + "0x13102c050ac051300b4100b3680b3b8053b80b4100b3b00b050053b00b4100b", + "0xb050050f40b4100b0b80b400050150402cd602c4c014054100b0140c01405", + "0xb1340b080051340b4100b0142e0144c02d0402cc202cee014ee02d0402c3d", + "0xb3d40b3b8053a00b4100b3b80b050053d40b4100b1344c030ec0144d02d04", + "0x54100b3dc0b3d405144f70310402cea02c4d014054100b0143d014ea02d04", + "0x51580b4100b3e00b14c053e00b4100b14c0b1440514c0b4100b1440b3dc05", + "0xda0140c02d0402c0c02cd8014e802d0402ce802c140142c02d0402c2c02d01", + "0x54100b0880b244050150402c05030051580c3a02c0440b1580b4100b1580b", + "0x51680b4100b1600b050053d80b4100b0bc0b404051600b4100b0c40b40005", + "0x54100b0780b3d8050150402c2302c4c014054100b0140c014054c80b0142b", + "0x140141b02d0402c1b02d010145e02d0402c5c02cd60145c02d0402c0516005", + "0x1b0440b1780b4100b1780b368050300b4100b0300b360054080b4100b4080b", + "0x517c0b4100b0800b400050150402c1002cf6014054100b0140c0145e03102", + "0xb358051840b4100b0145a0145a02d0402c5f02c14014f602d0402c1702d01", + "0xc02cd80145a02d0402c5a02c14014f602d0402cf602d01014f402d0402c61", + "0x50150402c05014053d00c168f60440b3d00b4100b3d00b368050300b4100b", + "0x10402c1002c10014054100b0140c0142005c0c4cd020440c4100c02c050300b", + "0xb07c0b408050150402c05030050880b4d01f0780c4100c06c0b0440506c0b", + "0x10402d0002c1b0150002d0402d0002c200150002d0402c2302c170142302d04", + "0x10402d0002c1f014054100b0140c0150102d35015040301802c1e014184000c", + "0x1402d0402c1402c5c0141102d0402c1102d010141402d0402c1e02cf701405", + "0x5030050b80b4d82c02d04030fc02c96014fc0ac290410402c140440c0dc05", + "0x10402c2b02c100143102d0402c2c02cdd0142f02d0402d0202d00014054100b", + "0xb4100b0c40b4dc050d00b4100b0bc0b050053400b4100b0a40b404053080b", + "0x2e02c4c014054100b0140c014054e00b0142b014d602d0402cc202c2201436", + "0xb4100b0a40b404053600b4100b4080b400050150402c2b02cf6014054100b", + "0x10102c2c014054100b0140c014054e40b0142b0143902d0402cd802c14014da", + "0x10402c3c02c200143c02d0402c3a4000c0bc050e80b4100b0142e014054100b", + "0xb4100b4080b400050150402c05030053800b4e8054100c0f00b078050f00b", + "0x53400b4100b0440b404051000b4100b0fc0b4ec050fc0b4100b01431014e3", + "0x11014d602d0402c1e02c220143602d0402c4002d370143402d0402ce302c14", + "0xd0014054100b1080b3f0050150402c05030053a80b4f0e81080c4100c3580b", + "0x10402cec02cd6014ec02d0402c050d8050150402c3602c98014054100b3a00b", + "0xb4100b0300b360050d00b4100b0d00b050053400b4100b3400b404053b80b", + "0xea02cfc014054100b0140c014ee030343401102cee02d0402cee02cda0140c", + "0xc13034340100f0051300b4100b1300b0e8051300b4100b01439014054100b", + "0x3602c9a0145102d0402c05380050150402c05030053dcf50313d1343d03104", + "0xb4100c3e00b258050150402c050fc050150402c5302c98014f814c0c4100b", + "0xf602d0402cf602c20014f602d0402c053a8050150402c05030051600b4f856", + "0x10402c05030051780b4fc5c02d040305602cdb0145a02d0402cf61440c3b005", + "0xf402d0402c6102c9d0146102d0402c5c02cd90145f02d0402c4d02d0001405", + "0x51940b4100b18c5a030ec0146302d0402c6302c200146302d0402c053a805", + "0x51a80b4100b3cc0b3b8051a00b4100b17c0b050053cc0b4100b3d065030ec", + "0x10402c5e02c42014f202d0402c4d02d00014054100b0140c014055000b0142b", + "0xef02d0402cef02c20014ef02d0402c050b8051bc0b4100b1b40b3a0051b40b", + "0xb4100b3c80b050051d00b4100b1bc72030ec0147202d0402cef1680c3b005", + "0x5802c4c014054100b0140c014055000b0142b0146a02d0402c7402cee01468", + "0xb4100b41c0b0800541c0b4100b0142e014ed02d0402c4d02d00014054100b", + "0xb4100b1d80b3b8051a00b4100b3b40b050051d80b4100b41c51030ec01507", + "0xf7014054100b4240b3d4051e1090310402c6a02c4d014054100b0143d0146a", + "0xb404051f40b4100b3ac0b14c053ac0b4100b1e80b144051e80b4100b1e00b", + "0x7d02cda0140c02d0402c0c02cd80146802d0402c6802c140143d02d0402c3d", + "0x100014054100b0d80b260050150402c05030051f40c1a03d0440b1f40b4100b", + "0x50ac053a40b4100b1f00b050051fc0b4100b3d40b404051f00b4100b3dc0b", + "0x100014054100b0780b3f0050150402ce002c2c014054100b0140c014055040b", + "0x50ac050e40b4100b2040b050053680b4100b0440b404052040b4100b4080b", + "0x539c0b4100b4080b400050150402c2202cfc014054100b0140c014054e40b", + "0xb3580520c0b4100b014580143902d0402ce702c14014da02d0402c1102d01", + "0xc02cd80143902d0402c3902c14014da02d0402cda02d010152002d0402c83", + "0x50150402c05030054800c0e4da0440b4800b4100b4800b368050300b4100b", + "0xb050051fc0b4100b05c0b404052140b4100b0800b400050150402c1002cf6", + "0xb1fc0b404053980b4100b21c0b3580521c0b4100b0145a014e902d0402c85", + "0x10402ce602cda0140c02d0402c0c02cd8014e902d0402ce902c140147f02d04", + "0x14240811031040300b0140c02c050150402c05014053980c3a47f0440b3980b", + "0x1e031040301b02c110141b02d0402c1002c10014054100b0140c0142005c0c", + "0xb4100b08c0b05c0508c0b4100b07c0b408050150402c05030050880b50c1f", + "0x50440b4100b0440b404054040b4100b0780b3dc050600b4100b014d701500", + "0x200141802d0402c1802c9f0150102d0402d0102c5c0150202d0402d0202c14", + "0xc0ac0b510050ac29050104100b400184050204502354054000b4100b4000b", + "0x2f02ca30142f0b80c4100b3f00b284050150402c05030050b00b514fc02d04", + "0xd002c11014d002d0402c2e02c10014054100b0140c014c202d460c40b4100c", + "0x3602cd0014054100b0d00b3f0050150402c05030053580b51c360d00c4100c", + "0xda02d0402cd802cd6014d802d0402c050d8050150402c3102cd1014054100b", + "0x50300b4100b0300b360050a40b4100b0a40b050050500b4100b0500b40405", + "0x10402cd602cfc014054100b0140c014da030290501102cda02d0402cda02cda", + "0xc4100c0e429050100f0050e40b4100b0e40b0e8050e40b4100b0143901405", + "0x3f02cd1014400fc0c4100b0c40b29c050150402c050300538ce0031480f03a", + "0xb3a00b3c8053a00b4100b1080b31805108400310402c4002ccd014054100b", + "0x10402cea3b00c3b0053a80b4100b3a80b080053b00b4100b014e0014ea02d04", + "0xb4100b0f00b050050e80b4100b0e80b404051300b4100b1000b310053b80b", + "0xb3b84c0f03a044bd014ee02d0402cee02cee0144c02d0402c4c02cc30143c", + "0xb400050150402c05030051440b524f702d04030f502c72014f51343d04104", + "0xf802c4d014054100b1580b13005158f80310402cf702c740145302d0402c4d", + "0xb1680b144051680b4100b3d80b3dc050150402c5802cf5014f61600c4100b", + "0x10402c5302c140143d02d0402c3d02d010145e02d0402c5c02c530145c02d04", + "0x51780c14c3d0440b1780b4100b1780b368050300b4100b0300b3600514c0b", + "0x4d02c140143d02d0402c3d02d010145f02d0402c5102cd6014054100b0140c", + "0xc1343d0440b17c0b4100b17c0b368050300b4100b0300b360051340b4100b", + "0xb404051840b4100b38c0b400050150402c3102cd1014054100b0140c0145f", + "0x54100b0140c014055280b0142b0146302d0402c6102c14014f402d0402ce0", + "0xb404051940b4100b0a40b400050150402c2e02cf6014054100b3080b13005", + "0x54100b0140c0140552c0b0142b0146802d0402c6502c14014f302d0402c14", + "0x50a40b4100b0a40b050050500b4100b0500b404051a80b4100b0b00b35805", + "0xb0140c0146a030290501102c6a02d0402c6a02cda0140c02d0402c0c02cd8", + "0xf302d0402c1102d01014f202d0402d0202d00014054100b0880b3f00501504", + "0x1010146f02d0402c6d02cd60146d02d0402c05160051a00b4100b3c80b05005", + "0xb368050300b4100b0300b360051a00b4100b1a00b050053cc0b4100b3cc0b", + "0x50150402c1002cf6014054100b0140c0146f030683cc1102c6f02d0402c6f", + "0x5a0146302d0402cef02c14014f402d0402c1702d01014ef02d0402c2002d00", + "0x6302c14014f402d0402cf402d010147402d0402c7202cd60147202d0402c05", + "0xc18cf40440b1d00b4100b1d00b368050300b4100b0300b3600518c0b4100b", + "0xb0140c0142005c0c531020440c4100c02c050300b014054100b0140501474", + "0x5030050880b5341f0780c4100c06c0b0440506c0b4100b0400b0400501504", + "0x10402d0002c200150002d0402c2302c170142302d0402c1f02d02014054100b", + "0xb0140c0150102d4e015040301802c1e014184000c4100b4000b06c054000b", + "0x14031040301e02c110141e02d0402c1e02c22014054100b4000b07c0501504", + "0xb4100b3f00b05c053f00b4100b0a40b408050150402c05030050ac0b53c29", + "0x5030050c40b5402f0b80c4100c0b011030230142c02d0402c2c02c200142c", + "0xb4100b0b80b404053080b4100b4080b400050150402c2f02cbb014054100b", + "0xc014055440b0142b0143602d0402c1402c220143402d0402cc202c14014d0", + "0x10402c3102d01014d602d0402d0202d00014054100b0500b3f0050150402c05", + "0xb3f0050150402c05030050155202c050ac053680b4100b3580b050053600b", + "0xb0e40b050053600b4100b0440b404050e40b4100b4080b400050150402c2b", + "0x50b8050150402d0102c2c014054100b0140c014055480b0142b014da02d04", + "0x3c02c1e0143c02d0402c3c02c200143c02d0402c3a4000c0bc050e80b4100b", + "0xb0440b4040538c0b4100b4080b400050150402c05030053800b54c054100c", + "0x1040303602c110143602d0402c1e02c220143402d0402ce302c14014d002d04", + "0x10402c4002cd0014054100b0fc0b3f0050150402c05030051080b550400fc0c", + "0x53400b4100b3400b404053a80b4100b3a00b358053a00b4100b0143601405", + "0x1102cea02d0402cea02cda0140c02d0402c0c02cd80143402d0402c3402c14", + "0x53b00b4100b01439014054100b1080b3f0050150402c05030053a80c0d0d0", + "0x5030051343d03155130ee03104030ec0d0d00403c014ec02d0402cec02c3a", + "0xc4100b3dc0b134053dc0b4100b014e0014f502d0402c4c02d00014054100b", + "0x5602d0402cf802c51014f802d0402c5302cf7014054100b1440b3d40514c51", + "0x53d40b4100b3d40b050053b80b4100b3b80b404051600b4100b1580b14c05", + "0xb0140c01458030f53b81102c5802d0402c5802cda0140c02d0402c0c02cd8", + "0xb4100b3d80b050051680b4100b0f40b404053d80b4100b1340b4000501504", + "0xb0780b3f0050150402ce002c2c014054100b0140c014055580b0142b0145c", + "0xb4100b1780b0500517c0b4100b0440b404051780b4100b4080b4000501504", + "0xb4080b400050150402c2202cfc014054100b0140c0140555c0b0142b01461", + "0x10402cd802cf8014da02d0402cf402c14014d802d0402c1102d01014f402d04", + "0x6502d0402c6302cd60146302d0402c05160051840b4100b3680b1580517c0b", + "0x50300b4100b0300b360051840b4100b1840b0500517c0b4100b17c0b40405", + "0x10402c1002cf6014054100b0140c014650306117c1102c6502d0402c6502cda", + "0x5c02d0402cf302c140145a02d0402c1702d01014f302d0402c2002d0001405", + "0x140145a02d0402c5a02d010146a02d0402c6802cd60146802d0402c0516805", + "0x5a0440b1a80b4100b1a80b368050300b4100b0300b360051700b4100b1700b", + "0xc0142005c0c561020440c4100c02c050300b014054100b014050146a0305c", + "0x100440c300050400b4100b0400b170050440b4100b0440b404050150402c05", + "0x10014054100b0140c0142302d590880b4100c07c0b2e40507c1e06c104100b", + "0x50150402c05030050500b569010600c4100c4000b044054000b4100b0780b", + "0x10402c050d8050150402c2202c00014054100b4040b340050150402c1802cfc", + "0xb4100b4080b0500506c0b4100b06c0b404050ac0b4100b0a40b358050a40b", + "0xc0142b0310206c1102c2b02d0402c2b02cda0140c02d0402c0c02cd801502", + "0xb4100b3f00b0e8053f00b4100b01439014054100b0500b3f0050150402c05", + "0x5380050150402c05030050c42f0315b0b82c03104030fc4081b0403c014fc", + "0x10402c050fc050150402cd002c00014343400c4100b0880b418053080b4100b", + "0xb4100b0b80b400050150402c05030053580b5743602d040303402d5c01405", + "0x10402c3a02d5f0143a0e40c4100b3680b57805368360310402c3602d0a014d8", + "0xe30310402c3602d5e014e002d0402c3c02d610143c02d0402c3902d6001405", + "0x51080b4100b1000b3c8051000b4100b0fc0b1f0050150402ce302d620143f", + "0xec014ea02d0402ce83080c3b0053a00b4100b3a00b080053a00b4100b014ea", + "0x51300b4100b3600b050053b80b4100b108ec030ec014ec02d0402ce03a80c", + "0x10402cd602c4c014054100b0140c0140558c0b0142b0143d02d0402cee02cee", + "0x53d40b4100b3d40b080053d40b4100b0142e0144d02d0402c2e02d0001405", + "0x50f40b4100b3dc0b3b8051300b4100b1340b050053dc0b4100b3d4c2030ec", + "0x5302cf7014054100b1440b3d40514c510310402c3d02c4d014054100b0143d", + "0xb0b00b404051600b4100b1580b14c051580b4100b3e00b144053e00b4100b", + "0x10402c5802cda0140c02d0402c0c02cd80144c02d0402c4c02c140142c02d04", + "0x3102d00014054100b0880b000050150402c05030051600c1302c0440b1600b", + "0x16402c050ac051700b4100b3d80b050051680b4100b0bc0b404053d80b4100b", + "0xb01458014054100b0780b3d8050150402c2302c4c014054100b0140c01405", + "0x10402d0202c140141b02d0402c1b02d010145f02d0402c5e02cd60145e02d04", + "0x517c0c4081b0440b17c0b4100b17c0b368050300b4100b0300b360054080b", + "0xb05c0b404051840b4100b0800b400050150402c1002cf6014054100b0140c", + "0xb4100b3d00b358053d00b4100b0145a0145c02d0402c6102c140145a02d04", + "0xc02d0402c0c02cd80145c02d0402c5c02c140145a02d0402c5a02d0101463", + "0xb0140c02c050150402c050140518c0c1705a0440b18c0b4100b18c0b36805", + "0x5c0141102d0402c1102d01014054100b0140c0142005c0c595020440c4100c", + "0x2202d040301f02c960141f0781b0410402c100440c0dc050400b4100b0400b", + "0x18031040310002c110150002d0402c1e02c10014054100b0140c0142302d66", + "0x50150402d0102cd0014054100b0600b3f0050150402c05030050500b59d01", + "0x1b02d010142b02d0402c2902cd60142902d0402c050d8050150402c2202d68", + "0xb0ac0b368050300b4100b0300b360054080b4100b4080b0500506c0b4100b", + "0x50e4050150402c1402cfc014054100b0140c0142b0310206c1102c2b02d04", + "0xc5a42e0b00c4100c3f10206c100f0053f00b4100b3f00b0e8053f00b4100b", + "0x50d0d00310402c2202d05014c202d0402c05380050150402c05030050c42f", + "0xc014d602d6a0d80b4100c0d00b36c050150402c050fc050150402cd002d68", + "0xb3680b274053680b4100b0d80b364053600b4100b0b80b400050150402c05", + "0x10402c3a3080c3b0050e80b4100b0e80b080050e80b4100b014ea0143902d04", + "0x10402ce002cee014e302d0402cd802c14014e002d0402c390f00c3b0050f00b", + "0xb108051000b4100b0b80b400050150402c05030050156b02c050ac050fc0b", + "0xb3a80b080053a80b4100b0142e014e802d0402c4202ce80144202d0402cd6", + "0x4002c14014ee02d0402ce83b00c3b0053b00b4100b3a8c2030ec014ea02d04", + "0xc4100b0fc0b134050150402c050f4050fc0b4100b3b80b3b80538c0b4100b", + "0xf502d0402c4d02c510144d02d0402c3d02cf7014054100b1300b3d4050f44c", + "0x538c0b4100b38c0b050050b00b4100b0b00b404053dc0b4100b3d40b14c05", + "0xb0140c014f7030e30b01102cf702d0402cf702cda0140c02d0402c0c02cd8", + "0x5302d0402c2f02d010145102d0402c3102d00014054100b0880b5a00501504", + "0xb08c0b130050150402c05030050156c02c050ac053e00b4100b1440b05005", + "0x51600b4100b1580b358051580b4100b01458014054100b0780b3d80501504", + "0xda0140c02d0402c0c02cd80150202d0402d0202c140141b02d0402c1b02d01", + "0x54100b0400b3d8050150402c05030051600c4081b0440b1600b4100b1600b", + "0x53e00b4100b3d80b0500514c0b4100b05c0b404053d80b4100b0800b40005", + "0xb0500514c0b4100b14c0b404051700b4100b1680b358051680b4100b0145a", + "0xf814c1102c5c02d0402c5c02cda0140c02d0402c0c02cd8014f802d0402cf8", + "0x503005080170316d40811031040300b0140c02c050150402c05014051700c", + "0x10402c1002c5c0150202d0402d0202c140141102d0402c1102d01014054100b", + "0x2302d700880b4100c07c0b5bc0507c1e06c104100b04102044105b8050400b", + "0xb5cd0102d040301802d72014184000c4100b0880b5c4050150402c0503005", + "0x1743f02b031040302902c110142902d0402d0002c10014054100b0140c01414", + "0xb420050150402cfc02cd0014054100b0ac0b3f0050150402c05030050b00b", + "0x10402c1b02d010142f02d0402c2e02cd60142e02d0402c050d8050150402d01", + "0xb4100b0bc0b368050300b4100b0300b360050780b4100b0780b0500506c0b", + "0x10402c050e4050150402c2c02cfc014054100b0140c0142f0301e06c1102c2f", + "0x360d00c5d4d03080c4100c0c41e06c100f0050c40b4100b0c40b0e8050c40b", + "0xb42005368d80310402d0102d76014d602d0402c05380050150402c0503005", + "0xd002d00014054100b0140c0143a02d780e40b4100c3680b5dc050150402cd8", + "0xe302cf2014e302d0402ce002c6a014e00e40c4100b0e40b1a0050f00b4100b", + "0xb100d6030ec0144002d0402c4002c200144002d0402c053a8050fc0b4100b", + "0xb0e40b1b4053a00b4100b0fc42030ec0143f02d0402c3f02c200144202d04", + "0x10402cea02c6f0143c02d0402c3c02c14014c202d0402cc202d01014ea02d04", + "0xf80144c3b8ec0410402ce83a83c308113bc053a00b4100b3a00b3b8053a80b", + "0x50ac053d40b4100b1300b5e4051340b4100b3b80b158050f40b4100b3b00b", + "0x3a0310402c3a02d7b014f702d0402cd002d00014054100b0140c014055e80b", + "0x51580b4100b0142e014f802d0402c5302cf20145302d0402c5102d7c01451", + "0x53e00b4100b3e00b080051600b4100b158d6030ec0145602d0402c5602c20", + "0x53080b4100b3080b404051680b4100b0e80b5f4053d80b4100b3e058030ec", + "0x17f014f602d0402cf602cee0145a02d0402c5a02d7e014f702d0402cf702c14", + "0x10402c5e02c560143d02d0402c5c02cf80145f1785c0410402cf6168f730811", + "0xb0140c014f402d801840b4100c3d40b1c8053d40b4100b17c0b5e4051340b", + "0x10402cf302c4c014f31940c4100b1840b1d00518c0b4100b1340b4000501504", + "0xf202d0402c6a02cf7014054100b1a00b3d4051a8680310402c6502c4d01405", + "0x50f40b4100b0f40b404051bc0b4100b1b40b14c051b40b4100b3c80b14405", + "0x1102c6f02d0402c6f02cda0140c02d0402c0c02cd80146302d0402c6302c14", + "0xb4100b0f40b404053bc0b4100b3d00b358050150402c05030051bc0c18c3d", + "0xef02d0402cef02cda0140c02d0402c0c02cd80144d02d0402c4d02c140143d", + "0x10402c3602d00014054100b4040b420050150402c05030053bc0c1343d0440b", + "0x50158102c050ac053b40b4100b1c80b050051d00b4100b0d00b404051c80b", + "0xb4100b01458014054100b4000b3d8050150402c1402c4c014054100b0140c", + "0x1e02d0402c1e02c140141b02d0402c1b02d010147602d0402d0702cd601507", + "0x5030051d80c0781b0440b1d80b4100b1d80b368050300b4100b0300b36005", + "0x10402c1e02c140141b02d0402c1b02d010150902d0402c2302cd6014054100b", + "0x54240c0781b0440b4240b4100b4240b368050300b4100b0300b360050780b", + "0xb05c0b404051e00b4100b0800b400050150402c1002cf6014054100b0140c", + "0xb4100b1e80b358051e80b4100b0145a014ed02d0402c7802c140147402d04", + "0xc02d0402c0c02cd8014ed02d0402ced02c140147402d0402c7402d01014eb", + "0xb0140c02c050150402c05014053ac0c3b4740440b3ac0b4100b3ac0b36805", + "0x5c0141102d0402c1102d01014054100b0140c0142005c0c609020440c4100c", + "0x2202d040301f02d840141f0781b0410402c100440c60c050400b4100b0400b", + "0x18031040310002c110150002d0402c1e02c10014054100b0140c0142302d85", + "0x50150402d0102cd0014054100b0600b3f0050150402c05030050500b61901", + "0x1b02d010142b02d0402c2902cd60142902d0402c050d8050150402c2202d87", + "0xb0ac0b368050300b4100b0300b360054080b4100b4080b0500506c0b4100b", + "0x50e4050150402c1402cfc014054100b0140c0142b0310206c1102c2b02d04", + "0xc6202e0b00c4100c3f10206c100f0053f00b4100b3f00b0e8053f00b4100b", + "0x50d0d00310402c2202d89014c202d0402c05380050150402c05030050c42f", + "0xc014d602d8b0d80b4100c0d00b628050150402c050fc050150402cd002d87", + "0xb1f0050e839368104100b0d80b1f4053600b4100b0b80b400050150402c05", + "0xe302cf2014e302d0402c3902c7c014e002d0402c3c02cf20143c02d0402cda", + "0x10402c053a8051080b4100b1000b3c8051000b4100b0e80b1f0050fc0b4100b", + "0xb380ea030ec014ea02d0402ce83080c3b0053a00b4100b3a00b080053a00b", + "0xd802c140144c02d0402c423b80c3b0053b80b4100b0fcec030ec014ec02d04", + "0x50150402c05030050158c02c050ac051340b4100b1300b3b8050f40b4100b", + "0x514c0b4100b3dc0b10805144f70310402cd602d8d014f502d0402c2e02d00", + "0x2e0145802d0402c5602ce80145602d0402c5102c42014f802d0402c5302ce8", + "0xc3b0051680b4100b3d8c2030ec014f602d0402cf602c20014f602d0402c05", + "0xee0143d02d0402cf502c140145e02d0402c581700c3b0051700b4100b3e05a", + "0x5f02cf50146117c0c4100b1340b134050150402c050f4051340b4100b1780b", + "0x10402c6302c530146302d0402cf402c51014f402d0402c6102cf7014054100b", + "0xb4100b0300b360050f40b4100b0f40b050050b00b4100b0b00b404051940b", + "0x2202d87014054100b0140c014650303d0b01102c6502d0402c6502cda0140c", + "0x10402cf302c140146802d0402c2f02d01014f302d0402c3102d00014054100b", + "0x1e02cf6014054100b08c0b130050150402c05030050158e02c050ac051a80b", + "0xb4100b06c0b404051b40b4100b3c80b358053c80b4100b01458014054100b", + "0x6d02d0402c6d02cda0140c02d0402c0c02cd80150202d0402d0202c140141b", + "0x10402c2002d00014054100b0400b3d8050150402c05030051b40c4081b0440b", + "0xef02d0402c05168051a80b4100b1bc0b050051a00b4100b05c0b404051bc0b", + "0x51a80b4100b1a80b050051a00b4100b1a00b404051c80b4100b3bc0b35805", + "0xb01405014720306a1a01102c7202d0402c7202cda0140c02d0402c0c02cd8", + "0xb404050150402c0503005080170318f40811031040300b0140c02c0501504", + "0x11041900141002d0402c1002c5c0150202d0402d0202c140141102d0402c11", + "0x54100b0140c0142302d920880b4100c07c0b6440507c1e06c104100b04102", + "0x10402c05030050500b6550102d040301802d94014184000c4100b0880b64c05", + "0xb0140c0142c02d963f02b031040302902c110142902d0402d0002c1001405", + "0x36014054100b4040b65c050150402cfc02cd0014054100b0ac0b3f00501504", + "0x1e02c140141b02d0402c1b02d010142f02d0402c2e02cd60142e02d0402c05", + "0xc0781b0440b0bc0b4100b0bc0b368050300b4100b0300b360050780b4100b", + "0x3102c3a0143102d0402c050e4050150402c2c02cfc014054100b0140c0142f", + "0x54100b0140c014360d00c660d03080c4100c0c41e06c100f0050c40b4100b", + "0x19a014054100b3600b65c05368d80310402d0102d99014d602d0402c0538005", + "0x870143c02d0402cd002d00014054100b0140c0143a02d9b0e40b4100c3680b", + "0xe60144002d0402c3f02cf20143f02d0402ce002c7c014e33800c4100b0e40b", + "0xea014ea02d0402ce802cf2014e802d0402c4202c8a0144238c0c4100b38c0b", + "0xc3b0053b80b4100b3b0d6030ec014ec02d0402cec02c20014ec02d0402c05", + "0xe40143d02d0402cea1300c3b0053a80b4100b3a80b080051300b4100b100ee", + "0xb22c050f00b4100b0f00b050053080b4100b3080b404051340b4100b38c0b", + "0xf73d4104100b0f44d0f0c20448d0143d02d0402c3d02cee0144d02d0402c4d", + "0x5602d0402c5102d79014f802d0402cf702c560145302d0402cf502cf801451", + "0xb0e80b674051600b4100b3400b400050150402c05030050159c02c050ac05", + "0xb1680b5ec051780b4100b1700b3a0051700b4100b3d80b10805168f603104", + "0x10402c050b8053d00b4100b1840b3c8051840b4100b17c0b5f00517c5a03104", + "0xb17865030ec0146502d0402c633580c3b00518c0b4100b18c0b0800518c0b", + "0xb1680b5f4051a00b4100b3d0f3030ec014f402d0402cf402c20014f302d04", + "0x10402c6a02d7e0145802d0402c5802c14014c202d0402cc202d010146a02d04", + "0xf80146f1b4f20410402c681a858308115fc051a00b4100b1a00b3b8051a80b", + "0xb1c8051580b4100b1bc0b5e4053e00b4100b1b40b1580514c0b4100b3c80b", + "0xb1d0051d00b4100b3e00b400050150402c05030051c80b678ef02d0403056", + "0xb3d405424760310402ced02c4d014054100b41c0b1300541ced0310402cef", + "0xb1e80b14c051e80b4100b1e00b144051e00b4100b4240b3dc050150402c76", + "0x10402c0c02cd80147402d0402c7402c140145302d0402c5302d01014eb02d04", + "0xb358050150402c05030053ac0c1d0530440b3ac0b4100b3ac0b368050300b", + "0xc02cd8014f802d0402cf802c140145302d0402c5302d010147d02d0402c72", + "0x50150402c05030051f40c3e0530440b1f40b4100b1f40b368050300b4100b", + "0xb050051fc0b4100b0d00b404051f00b4100b0d80b400050150402d0102d97", + "0x50150402c1402c4c014054100b0140c0140567c0b0142b014e902d0402c7c", + "0x1b02d01014e702d0402c8102cd60148102d0402c05160050150402d0002cf6", + "0xb39c0b368050300b4100b0300b360050780b4100b0780b0500506c0b4100b", + "0x1010148302d0402c2302cd6014054100b0140c014e70301e06c1102ce702d04", + "0xb368050300b4100b0300b360050780b4100b0780b0500506c0b4100b06c0b", + "0x50150402c1002cf6014054100b0140c014830301e06c1102c8302d0402c83", + "0x5a014e902d0402d2002c140147f02d0402c1702d010152002d0402c2002d00", + "0xe902c140147f02d0402c7f02d010148702d0402c8502cd60148502d0402c05", + "0xc3a47f0440b21c0b4100b21c0b368050300b4100b0300b360053a40b4100b", + "0xb0140c0142005c0c681020440c4100c02c050300b014054100b0140501487", + "0x10402c100440c684050400b4100b0400b170050440b4100b0440b4040501504", + "0x1e02c10014054100b0140c0142302da30880b4100c07c0b6880507c1e06c10", + "0xb3f0050150402c05030050500b691010600c4100c4000b044054000b4100b", + "0x2902d0402c050d8050150402c2202da5014054100b4040b340050150402c18", + "0x54080b4100b4080b0500506c0b4100b06c0b404050ac0b4100b0a40b35805", + "0xb0140c0142b0310206c1102c2b02d0402c2b02cda0140c02d0402c0c02cd8", + "0x53f00b4100b3f00b0e8053f00b4100b01439014054100b0500b3f00501504", + "0x10402c05380050150402c05030050c42f031a60b82c03104030fc4081b0403c", + "0x50150402c050fc050150402cd002da5014343400c4100b0880b69c053080b", + "0x20014d802d0402c053a8050150402c05030053580b6a43602d040303402da8", + "0xb6a83902d040303602cdb014da02d0402cd83080c3b0053600b4100b3600b", + "0x9d014e002d0402c3902cd90143c02d0402c2e02d00014054100b0140c0143a", + "0xda030ec0143f02d0402c3f02c200143f02d0402c053a80538c0b4100b3800b", + "0xb3b8053a00b4100b0f00b050051080b4100b38c40030ec0144002d0402c3f", + "0xec02d0402c2e02d00014054100b0140c014056ac0b0142b014ea02d0402c42", + "0x200143d02d0402c050b8051300b4100b3b80b3a0053b80b4100b0e80b10805", + "0x53d40b4100b1304d030ec0144d02d0402c3d3680c3b0050f40b4100b0f40b", + "0xb0140c014056ac0b0142b014ea02d0402cf502cee014e802d0402cec02c14", + "0xb4100b1440b3c8051440b4100b3580b1f0053dc0b4100b0b80b4000501504", + "0x5602d0402cf83080c3b0053e00b4100b3e00b080053e00b4100b0142e01453", + "0xea02d0402c5802cee014e802d0402cf702c140145802d0402c531580c3b005", + "0xb3dc050150402cf602cf50145a3d80c4100b3a80b134050150402c050f405", + "0x2c02d010145f02d0402c5e02c530145e02d0402c5c02c510145c02d0402c5a", + "0xb17c0b368050300b4100b0300b360053a00b4100b3a00b050050b00b4100b", + "0xb400050150402c2202da5014054100b0140c0145f030e80b01102c5f02d04", + "0xb0142b0146302d0402c6102c14014f402d0402c2f02d010146102d0402c31", + "0x5160050150402c1e02cf6014054100b08c0b130050150402c0503005015ac", + "0xb4080b0500506c0b4100b06c0b404053cc0b4100b1940b358051940b4100b", + "0xf30310206c1102cf302d0402cf302cda0140c02d0402c0c02cd80150202d04", + "0x1702d010146802d0402c2002d00014054100b0400b3d8050150402c0503005", + "0x10402c6a02cd60146a02d0402c051680518c0b4100b1a00b050053d00b4100b", + "0xb4100b0300b3600518c0b4100b18c0b050053d00b4100b3d00b404053c80b", + "0x50300b014054100b01405014f2030633d01102cf202d0402cf202cda0140c", + "0x50440b4100b0440b404050150402c050300508017031ad40811031040300b", + "0xb4100c07c0b6bc0507c1e06c104100b04011031ae0141002d0402c1002c5c", + "0xc4100c4000b044054000b4100b0780b040050150402c050300508c0b6c022", + "0x54100b4040b340050150402c1802cfc014054100b0140c0141402db140418", + "0xb404050ac0b4100b0a40b358050a40b4100b01436014054100b0880b6c805", + "0x2b02cda0140c02d0402c0c02cd80150202d0402d0202c140141b02d0402c1b", + "0x39014054100b0500b3f0050150402c05030050ac0c4081b0440b0ac0b4100b", + "0x1b30b82c03104030fc4081b0403c014fc02d0402cfc02c3a014fc02d0402c05", + "0x343400c4100b0880b6d0053080b4100b014e0014054100b0140c014310bc0c", + "0x53580b6d43602d040303402d0e014054100b0143f014054100b3400b6c805", + "0xda02c9d014da02d0402c3602cd9014d802d0402c2e02d00014054100b0140c", + "0xb0e8c2030ec0143a02d0402c3a02c200143a02d0402c053a8050e40b4100b", + "0xb3800b3b80538c0b4100b3600b050053800b4100b0e43c030ec0143c02d04", + "0xb080051000b4100b0142e014054100b0140c014056d80b0142b0143f02d04", + "0xea02db83a00b4100c3580b6dc051080b4100b100c2030ec0144002d0402c40", + "0xb3c8053b80b4100b3a00b1f0053b00b4100b0b80b400050150402c0503005", + "0x3d1080c3b0050f40b4100b0f40b080050f40b4100b014ea0144c02d0402cee", + "0xf502cee014e302d0402cec02c14014f502d0402c4c1340c3b0051340b4100b", + "0x100014054100b3a80b130050150402c0503005015b602c050ac050fc0b4100b", + "0x42030ec0145102d0402c5102c200145102d0402c050b8053dc0b4100b0b80b", + "0xb0143d0143f02d0402c5302cee014e302d0402cf702c140145302d0402c51", + "0xb4100b1580b3dc050150402cf802cf5014563e00c4100b0fc0b1340501504", + "0x2c02d0402c2c02d010145a02d0402cf602c53014f602d0402c5802c5101458", + "0xb1680b4100b1680b368050300b4100b0300b3600538c0b4100b38c0b05005", + "0xb4100b0c40b400050150402c2202db2014054100b0140c0145a030e30b011", + "0xc014056e40b0142b0145f02d0402c5c02c140145e02d0402c2f02d010145c", + "0x6102d0402c05160050150402c1e02cf6014054100b08c0b130050150402c05", + "0x54080b4100b4080b0500506c0b4100b06c0b404053d00b4100b1840b35805", + "0xb0140c014f40310206c1102cf402d0402cf402cda0140c02d0402c0c02cd8", + "0x5e02d0402c1702d010146302d0402c2002d00014054100b0400b3d80501504", + "0x101014f302d0402c6502cd60146502d0402c051680517c0b4100b18c0b05005", + "0xb368050300b4100b0300b3600517c0b4100b17c0b050051780b4100b1780b", + "0xc4100c02c050300b014054100b01405014f30305f1781102cf302d0402cf3", + "0xb0400b170050440b4100b0440b404050150402c050300508017031ba40811", + "0x2302dbb0880b4100c07c0b2580507c1e06c104100b04011030370141002d04", + "0x10002c110150002d0402c1e02c10014054100b0880b5a0050150402c0503005", + "0x10102cd0014054100b0600b3f0050150402c05030050500b6f1010600c4100c", + "0xb4100b06c0b404050ac0b4100b0a40b358050a40b4100b01436014054100b", + "0x2b02d0402c2b02cda0140c02d0402c0c02cd80150202d0402d0202c140141b", + "0xb4100b01439014054100b0500b3f0050150402c05030050ac0c4081b0440b", + "0x50c42f031bd0b82c03104030fc4081b0403c014fc02d0402cfc02c3a014fc", + "0xb3400b134053400b4100b014e0014c202d0402c2e02d00014054100b0140c", + "0x10402cd602c51014d602d0402c3602cf7014054100b0d00b3d4050d83403104", + "0xb4100b3080b050050b00b4100b0b00b404053680b4100b3600b14c053600b", + "0xc014da030c20b01102cda02d0402cda02cda0140c02d0402c0c02cd8014c2", + "0xb0e40b050050e80b4100b0bc0b404050e40b4100b0c40b400050150402c05", + "0xb3d8050150402c2302c4c014054100b0140c014056f80b0142b0143c02d04", + "0x10402c1b02d01014e302d0402ce002cd6014e002d0402c05160050150402c1e", + "0xb4100b38c0b368050300b4100b0300b360054080b4100b4080b0500506c0b", + "0xb0800b400050150402c1002cf6014054100b0140c014e30310206c1102ce3", + "0xb4100b0145a0143c02d0402c3f02c140143a02d0402c1702d010143f02d04", + "0x3c02d0402c3c02c140143a02d0402c3a02d010144202d0402c4002cd601440", + "0x5014051080c0f03a0440b1080b4100b1080b368050300b4100b0300b36005", + "0x10014054100b0140c0142005c0c6fd020440c4100c02c050300b014054100b", + "0x50150402c05030050880b7001f0780c4100c06c0b0440506c0b4100b0400b", + "0x1c10150002d0402d0002c200150002d0402c2302c170142302d0402c1f02d02", + "0x1e02d0402c1e02c22014054100b0140c0141402dc24041803104031000440c", + "0xb4100b0ac0b408050150402c05030053f00b70c2b0a40c4100c0780b04405", + "0xc4100c0b818031c40142e02d0402c2e02c200142e02d0402c2c02c170142c", + "0x1040302902c110142902d0402c2902c22014054100b0140c014c202dc50c42f", + "0x10402c3402cd0014054100b3400b3f0050150402c05030050d80b718343400c", + "0xb358053580b4100b01436014054100b4040b588050150402c3102d5f01405", + "0xc02cd80150202d0402d0202c140142f02d0402c2f02d01014d802d0402cd6", + "0x50150402c05030053600c4082f0440b3600b4100b3600b368050300b4100b", + "0x2f0403c014da02d0402cda02c3a014da02d0402c050e4050150402c3602cfc", + "0xe302d0402c3a02d00014054100b0140c014e00f00c71c3a0e40c4100c36902", + "0x54100b1000b72805108400310402c3f02dc90143f02d0402c314040c72005", + "0xea0310402ce802d5e014e81080c4100b1080b428051080b4100b1080b72c05", + "0x51300b4100b3b80b584053b80b4100b3a80b580050150402cec02d5f014ec", + "0xf2014f502d0402c4d02c7c014054100b0f40b588051343d0310402c4202d5e", + "0xc3b00514c0b4100b13051030ec0145102d0402c05380053dc0b4100b3d40b", + "0xb3dc050150402c5602cf5014581580c4100b3e00b134053e00b4100b3dc53", + "0x3902d010145c02d0402c5a02c530145a02d0402cf602c51014f602d0402c58", + "0xb1700b368050300b4100b0300b3600538c0b4100b38c0b050050e40b4100b", + "0xb588050150402c3102d5f014054100b0140c0145c030e30e41102c5c02d04", + "0xb1780b0500517c0b4100b0f00b404051780b4100b3800b400050150402d01", + "0xb588050150402c2902cfc014054100b0140c014057300b0142b0146102d04", + "0xb3d00b0500518c0b4100b3080b404053d00b4100b4080b400050150402d01", + "0xb588050150402cfc02cfc014054100b0140c014057340b0142b0146502d04", + "0xb3cc0b0500518c0b4100b0600b404053cc0b4100b4080b400050150402d01", + "0xb400050150402c1e02cfc014054100b0140c014057340b0142b0146502d04", + "0xb0142b0146502d0402c6802c140146302d0402c1402d010146802d0402d02", + "0x1010146a02d0402d0202d00014054100b0880b3f0050150402c0503005015cd", + "0xf202cd6014f202d0402c05160051940b4100b1a80b0500518c0b4100b0440b", + "0xb0300b360051940b4100b1940b0500518c0b4100b18c0b404051b40b4100b", + "0xf6014054100b0140c0146d0306518c1102c6d02d0402c6d02cda0140c02d04", + "0x6f02c140145f02d0402c1702d010146f02d0402c2002d00014054100b0400b", + "0x10402c5f02d010147202d0402cef02cd6014ef02d0402c05168051840b4100b", + "0xb4100b1c80b368050300b4100b0300b360051840b4100b1840b0500517c0b", + "0xc739020440c4100c02c050300b014054100b01405014720306117c1102c72", + "0x50400b4100b0400b170050440b4100b0440b404050150402c050300508017", + "0xb0140c0142302dd10880b4100c07c0b7400507c1e06c104100b04011031cf", + "0x5030050500b749010600c4100c4000b044054000b4100b0780b0400501504", + "0x50150402c2202dd3014054100b4040b340050150402c1802cfc014054100b", + "0xb0500506c0b4100b06c0b404050ac0b4100b0a40b358050a40b4100b01436", + "0x10206c1102c2b02d0402c2b02cda0140c02d0402c0c02cd80150202d0402d02", + "0xb0e8053f00b4100b01439014054100b0500b3f0050150402c05030050ac0c", + "0x10402c05030050c42f031d40b82c03104030fc4081b0403c014fc02d0402cfc", + "0x54100b3400b74c050d0d00310402c2202dd5014c202d0402c2e02d0001405", + "0x54100b3600b72805360d60310402c3602dd7014360d00c4100b0d00b75805", + "0x3c0e80c4100b0d00b75c050e40b4100b3680b584053680b4100b3580b58005", + "0x3f38c0c4100b3800b578053803c0310402c3c02d0a014054100b0e80b58805", + "0x15e0144202d0402c4002d610144002d0402ce302d60014054100b0fc0b57c05", + "0xb3c8053b00b4100b3a80b1f0050150402ce802d62014ea3a00c4100b0f00b", + "0x3d030ec0143d02d0402c391300c3b0051300b4100b014e0014ee02d0402cec", + "0xf5014513dc0c4100b3d40b134053d40b4100b3b84d030ec0144d02d0402c42", + "0xf802c53014f802d0402c5302c510145302d0402c5102cf7014054100b3dc0b", + "0xb0300b360053080b4100b3080b050050b00b4100b0b00b404051580b4100b", + "0x1d3014054100b0140c01456030c20b01102c5602d0402c5602cda0140c02d04", + "0x5802c14014f602d0402c2f02d010145802d0402c3102d00014054100b0880b", + "0xf6014054100b08c0b130050150402c0503005015d802c050ac051680b4100b", + "0xb06c0b404051780b4100b1700b358051700b4100b01458014054100b0780b", + "0x10402c5e02cda0140c02d0402c0c02cd80150202d0402d0202c140141b02d04", + "0x2002d00014054100b0400b3d8050150402c05030051780c4081b0440b1780b", + "0x10402c05168051680b4100b17c0b050053d80b4100b05c0b4040517c0b4100b", + "0xb4100b1680b050053d80b4100b3d80b404053d00b4100b1840b358051840b", + "0x5014f40305a3d81102cf402d0402cf402cda0140c02d0402c0c02cd80145a", + "0x50150402c050300508017031d940811031040300b0140c02c050150402c05", + "0x54100b0140c0142202dda07c1e031040301b02c110141b02d0402c1002c10", + "0x2302cd60142302d0402c050d8050150402c1f02cd0014054100b0780b3f005", + "0xb0300b360054080b4100b4080b050050440b4100b0440b404054000b4100b", + "0xfc014054100b0140c01500031020441102d0002d0402d0002cda0140c02d04", + "0x102044100f0050600b4100b0600b0e8050600b4100b01439014054100b0880b", + "0x53f00b4100b0500b400050150402c05030050ac29031db051010310403018", + "0xb3dc050150402c2e02cf50142f0b80c4100b0b00b134050b00b4100b014e0", + "0x10102d01014d002d0402cc202c53014c202d0402c3102c510143102d0402c2f", + "0xb3400b368050300b4100b0300b360053f00b4100b3f00b050054040b4100b", + "0x1010143402d0402c2b02d00014054100b0140c014d0030fc4041102cd002d04", + "0x10402c0503005015dc02c050ac053580b4100b0d00b050050d80b4100b0a40b", + "0x50d80b4100b05c0b404053600b4100b0800b400050150402c1002cf601405", + "0xb404050e40b4100b3680b358053680b4100b0145a014d602d0402cd802c14", + "0x3902cda0140c02d0402c0c02cd8014d602d0402cd602c140143602d0402c36", + "0x11031040300b0140c02c050150402c05014050e40c358360440b0e40b4100b", + "0x10402c1002c5c0141102d0402c1102d01014054100b0140c0142005c0c77502", + "0x508c0b7802202d040301f02ddf0141f0781b0410402c100440c778050400b", + "0x1402de140418031040310002c110150002d0402c1e02c10014054100b0140c", + "0xb0880b788050150402d0102cd0014054100b0600b3f0050150402c0503005", + "0x1b02d0402c1b02d010142b02d0402c2902cd60142902d0402c050d80501504", + "0xb0ac0b4100b0ac0b368050300b4100b0300b360054080b4100b4080b05005", + "0xfc02d0402c050e4050150402c1402cfc014054100b0140c0142b0310206c11", + "0xc014310bc0c78c2e0b00c4100c3f10206c100f0053f00b4100b3f00b0e805", + "0xd002de2014343400c4100b0880b790053080b4100b0b80b400050150402c05", + "0xd802de7014d83580c4100b0d80b798050d8340310402c3402de5014054100b", + "0x10402c3402de60143902d0402cda02ce8014da02d0402cd602c42014054100b", + "0xe002cd9014400fce3380114100b0f00b7a0050150402c3a02cbb0143c0e80c", + "0xb3a80b3a0053a80b4100b38c0b108053a00b4100b1080b274051080b4100b", + "0x10402c4002d600144c02d0402cee02cf2014ee02d0402c3f02c7c014ec02d04", + "0xb4100b0e4f5030ec014f502d0402c05380051340b4100b0f40b584050f40b", + "0xb13053030ec0145302d0402cec1440c3b0051440b4100b3a0f7030ec014f7", + "0x5802cf5014f61600c4100b1580b134051580b4100b134f8030ec014f802d04", + "0x10402c5c02c530145c02d0402c5a02c510145a02d0402cf602cf7014054100b", + "0xb4100b0300b360053080b4100b3080b050050b00b4100b0b00b404051780b", + "0x2202de2014054100b0140c0145e030c20b01102c5e02d0402c5e02cda0140c", + "0x10402c5f02c140146102d0402c2f02d010145f02d0402c3102d00014054100b", + "0x1e02cf6014054100b08c0b130050150402c0503005015e902c050ac053d00b", + "0xb4100b06c0b404051940b4100b18c0b3580518c0b4100b01458014054100b", + "0x6502d0402c6502cda0140c02d0402c0c02cd80150202d0402d0202c140141b", + "0x10402c2002d00014054100b0400b3d8050150402c05030051940c4081b0440b", + "0x6802d0402c05168053d00b4100b3cc0b050051840b4100b05c0b404053cc0b", + "0x53d00b4100b3d00b050051840b4100b1840b404051a80b4100b1a00b35805", + "0xb014050146a030f41841102c6a02d0402c6a02cda0140c02d0402c0c02cd8", + "0xb404050150402c050300508017031ea40811031040300b0140c02c0501504", + "0x11041eb0141002d0402c1002c5c0150202d0402d0202c140141102d0402c11", + "0x54100b0140c0142302ded0880b4100c07c0b7b00507c1e06c104100b04102", + "0x10402c05030050500b7c10102d040301802def014184000c4100b0880b7b805", + "0xb0140c0142c02df13f02b031040302902c110142902d0402d0002c1001405", + "0x36014054100b4040b7c8050150402cfc02cd0014054100b0ac0b3f00501504", + "0x1e02c140141b02d0402c1b02d010142f02d0402c2e02cd60142e02d0402c05", + "0xc0781b0440b0bc0b4100b0bc0b368050300b4100b0300b360050780b4100b", + "0x3102c3a0143102d0402c050e4050150402c2c02cfc014054100b0140c0142f", + "0x54100b0140c014360d00c7ccd03080c4100c0c41e06c100f0050c40b4100b", + "0xda3600c4100b3600b7d4050150402cd602df2014d83580c4100b4040b7d005", + "0x50f00b4100b0e40b108050150402c3a02df70143a0e40c4100b3680b7d805", + "0x1f8014054100b38c0b2ec050fce30310402cd802df6014e002d0402c3c02ce8", + "0x8a014e802d0402c4202dfa0144202d0402c4002df9014400fc0c4100b0fc0b", + "0xee030ec014ee02d0402c05380053b00b4100b3a80b3c8053a80b4100b3a00b", + "0xb7e4050f40b4100b3b04c030ec014ec02d0402cec02c200144c02d0402ce0", + "0x4d02c8b014d002d0402cd002c14014c202d0402cc202d010144d02d0402c3f", + "0x513dcf50410402c3d134d030811234050f40b4100b0f40b3b8051340b4100b", + "0x5602d0402cf702d00014054100b0140c014f802dfb14c0b4100c1440b1c805", + "0x5c1680c4100b1600b134050150402cf602c4c014f61600c4100b14c0b1d005", + "0x530145f02d0402c5e02c510145e02d0402c5c02cf7014054100b1680b3d405", + "0xb360051580b4100b1580b050053d40b4100b3d40b404051840b4100b17c0b", + "0x54100b0140c01461030563d41102c6102d0402c6102cda0140c02d0402c0c", + "0x53dc0b4100b3dc0b050053d40b4100b3d40b404053d00b4100b3e00b35805", + "0xb0140c014f4030f73d41102cf402d0402cf402cda0140c02d0402c0c02cd8", + "0x6502d0402c3402d010146302d0402c3602d00014054100b4040b7c80501504", + "0xb0500b130050150402c0503005015fc02c050ac053cc0b4100b18c0b05005", + "0x51a80b4100b1a00b358051a00b4100b01458014054100b4000b3d80501504", + "0xda0140c02d0402c0c02cd80141e02d0402c1e02c140141b02d0402c1b02d01", + "0xb4100b08c0b358050150402c05030051a80c0781b0440b1a80b4100b1a80b", + "0xc02d0402c0c02cd80141e02d0402c1e02c140141b02d0402c1b02d01014f2", + "0xb0400b3d8050150402c05030053c80c0781b0440b3c80b4100b3c80b36805", + "0xb4100b1b40b050051940b4100b05c0b404051b40b4100b0800b4000501504", + "0x51940b4100b1940b404053bc0b4100b1bc0b358051bc0b4100b0145a014f3", + "0x1102cef02d0402cef02cda0140c02d0402c0c02cd8014f302d0402cf302c14", + "0x508017031fd40811031040300b0140c02c050150402c05014053bc0c3cc65", + "0x11031110141002d0402c1002c5c0141102d0402c1102d01014054100b0140c", + "0x50150402c050300508c0b7fc2202d040301f02dfe0141f0781b0410402c10", + "0x54100b0140c0141402e0040418031040310002c110150002d0402c1e02c10", + "0xb01436014054100b0880b804050150402d0102cd0014054100b0600b3f005", + "0x10402d0202c140141b02d0402c1b02d010142b02d0402c2902cd60142902d04", + "0x50ac0c4081b0440b0ac0b4100b0ac0b368050300b4100b0300b360054080b", + "0x10402cfc02c3a014fc02d0402c050e4050150402c1402cfc014054100b0140c", + "0x100014054100b0140c014310bc0c8082e0b00c4100c3f10206c100f0053f00b", + "0xb810050150402cd002e01014343400c4100b0880b80c053080b4100b0b80b", + "0xb108050150402cd802e06014d83580c4100b0d80b814050d8340310402c34", + "0xb2ec050f03a0310402c3402e050143902d0402cda02ce8014da02d0402cd6", + "0xe80144202d0402ce002c42014400fce3380114100b0f00b440050150402c3a", + "0xb108053b00b4100b3a80b3a0053a80b4100b38c0b108053a00b4100b1080b", + "0x3d02ce80143d02d0402c4002c420144c02d0402cee02ce8014ee02d0402c3f", + "0xe83dc0c3b0053dc0b4100b0e4f5030ec014f502d0402c05380051340b4100b", + "0xc3b0053e00b4100b13053030ec0145302d0402cec1440c3b0051440b4100b", + "0xb3dc050150402c5802cf5014f61600c4100b1580b134051580b4100b134f8", + "0x2c02d010145e02d0402c5c02c530145c02d0402c5a02c510145a02d0402cf6", + "0xb1780b368050300b4100b0300b360053080b4100b3080b050050b00b4100b", + "0xb400050150402c2202e01014054100b0140c0145e030c20b01102c5e02d04", + "0xb0142b014f402d0402c5f02c140146102d0402c2f02d010145f02d0402c31", + "0x5160050150402c1e02cf6014054100b08c0b130050150402c050300501607", + "0xb4080b0500506c0b4100b06c0b404051940b4100b18c0b3580518c0b4100b", + "0x650310206c1102c6502d0402c6502cda0140c02d0402c0c02cd80150202d04", + "0x1702d01014f302d0402c2002d00014054100b0400b3d8050150402c0503005", + "0x10402c6802cd60146802d0402c05168053d00b4100b3cc0b050051840b4100b", + "0xb4100b0300b360053d00b4100b3d00b050051840b4100b1840b404051a80b", + "0x50300b014054100b014050146a030f41841102c6a02d0402c6a02cda0140c", + "0x50440b4100b0440b404050150402c0503005080170320840811031040300b", + "0xb4100c07c0b8280507c1e06c104100b04011032090141002d0402c1002c5c", + "0xc4100c4000b044054000b4100b0780b040050150402c050300508c0b82c22", + "0x54100b4040b340050150402c1802cfc014054100b0140c0141402e0c40418", + "0xb404050ac0b4100b0a40b358050a40b4100b01436014054100b0880b83405", + "0x2b02cda0140c02d0402c0c02cd80150202d0402d0202c140141b02d0402c1b", + "0x39014054100b0500b3f0050150402c05030050ac0c4081b0440b0ac0b4100b", + "0x20e0b82c03104030fc4081b0403c014fc02d0402cfc02c3a014fc02d0402c05", + "0x54100b3080b83405340c20310402c2202e0f014054100b0140c014310bc0c", + "0x54100b3580b84805358360310402c3402e11014343400c4100b3400b84005", + "0xec0143902d0402c05380053680b4100b3600b3c8053600b4100b0d80b1f005", + "0x3f014054100b0f00b57c053803c0310402cd002e110143a02d0402cda0e40c", + "0x2e02d00014054100b0140c0143f02e1438c0b4100c3800b84c050150402c05", + "0x10402c053a8053a00b4100b1080b274051080b4100b38c0b364051000b4100b", + "0xb3a0ec030ec014ec02d0402cea0e80c3b0053a80b4100b3a80b080053a80b", + "0x58540b0142b0143d02d0402cee02cee0144c02d0402c4002c14014ee02d04", + "0xb0142e0144d02d0402c2e02d00014054100b0fc0b130050150402c0503005", + "0xb1340b050053dc0b4100b3d43a030ec014f502d0402cf502c20014f502d04", + "0x510310402c3d02c4d014054100b0143d0143d02d0402cf702cee0144c02d04", + "0x51580b4100b3e00b144053e00b4100b14c0b3dc050150402c5102cf501453", + "0xd80144c02d0402c4c02c140142c02d0402c2c02d010145802d0402c5602c53", + "0x10402c05030051600c1302c0440b1600b4100b1600b368050300b4100b0300b", + "0x51680b4100b0bc0b404053d80b4100b0c40b400050150402c2202e0d01405", + "0x10402c2302c4c014054100b0140c014058580b0142b0145c02d0402cf602c14", + "0x1010145f02d0402c5e02cd60145e02d0402c05160050150402c1e02cf601405", + "0xb368050300b4100b0300b360054080b4100b4080b0500506c0b4100b06c0b", + "0x50150402c1002cf6014054100b0140c0145f0310206c1102c5f02d0402c5f", + "0x5a0145c02d0402c6102c140145a02d0402c1702d010146102d0402c2002d00", + "0x5c02c140145a02d0402c5a02d010146302d0402cf402cd6014f402d0402c05", + "0xc1705a0440b18c0b4100b18c0b368050300b4100b0300b360051700b4100b", + "0xb0140c0142005c0c85d020440c4100c02c050300b014054100b0140501463", + "0x5030050880b8601f0780c4100c06c0b0440506c0b4100b0400b0400501504", + "0x10402d0002c200150002d0402c2302c170142302d0402c1f02d02014054100b", + "0xf7014054100b0140c0142b0a414042194041803104031000440c448054000b", + "0xc868053f00b4100b3f00b170050600b4100b0600b404053f00b4100b0780b", + "0x54100b0140c014c202e1c0c40b4100c0bc0b86c050bc2e0b0104100b3f018", + "0x10402c05030053580b874360d00c4100c3400b044053400b4100b0b80b04005", + "0xb87c050150402d0102e1e014054100b0d80b340050150402c3402cfc01405", + "0x10402c2c02d01014da02d0402cd802cd6014d802d0402c050d8050150402c31", + "0xb4100b3680b368050300b4100b0300b360054080b4100b4080b050050b00b", + "0x10402c050e4050150402cd602cfc014054100b0140c014da031020b01102cda", + "0xe33800c8803c0e80c4100c0e5020b0100f0050e40b4100b0e40b0e8050e40b", + "0x5108400310402c3f02e220143f02d0402c314040c884050150402c0503005", + "0x10f014e81080c4100b1080b894051080b4100b1080b890050150402c4002e23", + "0xb89c053b80b4100b3a80b898050150402cec02e1f014ec3a80c4100b3a00b", + "0x4202d0f0144d02d0402c4c0f40c3b0050f40b4100b014e00144c02d0402cee", + "0xb4100c3dc0b8a0050150402c050fc050150402cf502e1e014f73d40c4100b", + "0xb4100b1440b364053e00b4100b0f00b400050150402c050300514c0b8a451", + "0x53d80b4100b3d80b080053d80b4100b014ea0145802d0402c5602c9d01456", + "0x5e02d0402cf802c140145c02d0402c581680c3b0051680b4100b3d84d030ec", + "0xb0f00b400050150402c05030050162a02c050ac0517c0b4100b1700b3b805", + "0xb4100b0142e0146302d0402cf402d61014f402d0402c5302d600146102d04", + "0x10402c633cc0c3b0053cc0b4100b1944d030ec0146502d0402c6502c2001465", + "0x50150402c050f40517c0b4100b1a00b3b8051780b4100b1840b050051a00b", + "0x510146d02d0402cf202cf7014054100b1a80b3d4053c86a0310402c5f02c4d", + "0xb050050e80b4100b0e80b404053bc0b4100b1bc0b14c051bc0b4100b1b40b", + "0x5e0e81102cef02d0402cef02cda0140c02d0402c0c02cd80145e02d0402c5e", + "0xb400050150402c3102e1f014054100b4040b878050150402c05030053bc0c", + "0xb0142b014ed02d0402c7202c140147402d0402ce002d010147202d0402ce3", + "0xb3d8050150402d0102e1e014054100b3080b130050150402c05030050162b", + "0xb41c0b050051d80b4100b0b00b4040541c0b4100b4080b400050150402c2e", + "0xb878050150402c2902e1e014054100b0140c014058b00b0142b0150902d04", + "0x10402c1402d010147802d0402d0202d00014054100b0780b3f0050150402c2b", + "0xb3f0050150402c05030050162d02c050ac053ac0b4100b1e00b050051e80b", + "0xb1f40b050051e80b4100b0440b404051f40b4100b4080b400050150402c22", + "0xb4100b014580150902d0402ceb02c560147602d0402c7a02cf8014eb02d04", + "0x10902d0402d0902c140147602d0402c7602d010147f02d0402c7c02cd60147c", + "0x5030051fc0c424760440b1fc0b4100b1fc0b368050300b4100b0300b36005", + "0xb4100b05c0b404053a40b4100b0800b400050150402c1002cf6014054100b", + "0x539c0b4100b2040b358052040b4100b0145a014ed02d0402ce902c1401474", + "0xda0140c02d0402c0c02cd8014ed02d0402ced02c140147402d0402c7402d01", + "0x10402c0502c200140502d0402c058b80539c0c3b4740440b39c0b4100b39c0b", + "0xb0140b080050140b4100b0150d0140b02c0b02c0b4100b0140b8bc050140b", + "0x502c200140502d0402c058c00502c0b02c0b02d0402c0502e2f0140502d04", + "0xc02c10014054100b0143d0140b02c0b02c0b4100b0140b8bc050140b4100b", + "0xb408050150402c050300505c0b8c5020440c4100c0400b044050400b4100b", + "0x1b02c1b0141b02d0402c1b02c200141b02d0402c2002c170142002d0402d02", + "0x1b02c1f014054100b0140c0141f02e32015040301e02c1e0141e06c0c4100b", + "0xc0150002e3308c22031040301102c110141102d0402c1102c22014054100b", + "0x10402c058d0054040b4100b0600b05c050600b4100b08c0b408050150402c05", + "0xb4100b02c0b050050140b4100b0140b404050a40b4100b0880b3dc050500b", + "0x10102d0402d0102c200141402d0402c1402e350142902d0402c2902c5c0140b", + "0x2f02e380b80b4100c0b00b8dc050b0fc0ac104100b404140a40b015028d805", + "0xb8ecd002d04030c202e3a014c20c40c4100b0b80b8e4050150402c0503005", + "0x23d014d602d0402cd002e3c0143602d0402cfc02d00014054100b0140c01434", + "0x1010143902d0402cda02e3e014da02d0402cd80c40c430053600b4100b3580b", + "0x2b0400b0e40b4100b0e40b8fc050d80b4100b0d80b050050ac0b4100b0ac0b", + "0x50f00b4100b0ac0b404050e80b4100b3f00b400050150402c05030050e436", + "0x2b0143f02d0402c3102c5c014e302d0402c3402e40014e002d0402c3a02c14", + "0xb4100b0ac0b404051000b4100b0bc0b908050150402c05030050164102c05", + "0x503005100fc0ac1002c4002d0402c4002e3f014fc02d0402cfc02c140142b", + "0xb4100b4000b3dc053a00b4100b014310144202d0402c0b02d00014054100b", + "0xe302d0402ce802e40014e002d0402c4202c140143c02d0402c0502d01014ea", + "0xee02d0402cec0fc0c430053b00b4100b38c0b90c050fc0b4100b3a80b17005", + "0x53800b4100b3800b050050f00b4100b0f00b404051300b4100b3b80b8f805", + "0x54100b07c0b0b0050150402c0503005130e00f01002c4c02d0402c4c02e3f", + "0x53d40b4100b1341b0302f0144d02d0402c050b8050f40b4100b0440b3dc05", + "0x100014054100b0140c014f702e4401504030f502c1e014f502d0402cf502c20", + "0xf802e3d014f802d0402c5302e450145302d0402c050c4051440b4100b02c0b", + "0x502d01014f602d0402c5802e3e0145802d0402c560f40c430051580b4100b", + "0xf6144050400b3d80b4100b3d80b8fc051440b4100b1440b050050140b4100b", + "0xb014310145a02d0402c0b02d00014054100b3dc0b0b0050150402c0503005", + "0xb17c0b8f80517c0b4100b1783d0310c0145e02d0402c5c02e430145c02d04", + "0x10402c6102e3f0145a02d0402c5a02c140140502d0402c0502d010146102d04", + "0xb01431014f402d0402c0b02d00014054100b0140c01461168050400b1840b", + "0xb194f30310c014f302d0402c1702cf70146502d0402c6302e430146302d04", + "0x10402cf402c140140502d0402c0502d010146a02d0402c6802e3e0146802d04", + "0x50300b014054100b0143d0146a3d0050400b1a80b4100b1a80b8fc053d00b", + "0x506c0b4100b0300b42c050150402c0503005080170324640811031040300b", + "0x2302d0402d0202d00014054100b0140c0142202e4807c1e031040301b02e47", + "0x54040b4100b0600b274050600b4100b4000b364054000b4100b07c0b92405", + "0x50a40b4100b0780b1b4050500b4100b40410030ec0150102d0402d0102c20", + "0xee0142902d0402c2902c6f0142302d0402c2302c140141102d0402c1102d01", + "0x50b0fc0ac1002c2c3f02b0410402c140a423044113bc050500b4100b0500b", + "0x10402c050c4050b80b4100b4080b400050150402c2202e4a014054100b0140c", + "0x10402c1102d01014c202d0402c3102d130143102d0402c2f0400c92c050bc0b", + "0xc014c20b8110400b3080b4100b3080b930050b80b4100b0b80b050050440b", + "0xd002d0402c05168050150402c0c02e4d014054100b0400b3d4050150402c05", + "0x50800b4100b0800b0500505c0b4100b05c0b404050d00b4100b3400b93805", + "0xc0300b044050300b4100b02c0b040050d02005c1002c3402d0402c3402e4c", + "0x1702c170141702d0402c1102d02014054100b0140c0150202e4f0441003104", + "0x1f02e500781b03104030200140c710050800b4100b0800b080050800b4100b", + "0xb944230880c4100c0400b044050400b4100b0400b088050150402c0503005", + "0x200150102d0402c1802c170141802d0402c2302d02014054100b0140c01500", + "0x54100b0140c0142b02e520a414031040310106c0c710054040b4100b4040b", + "0x10402c05030050b80b94c2c3f00c4100c0880b044050880b4100b0880b08805", + "0x3102d0402c3102c200143102d0402c2f02c170142f02d0402c2c02d0201405", + "0x10402cfc02cf7014054100b0140c0143402e54340c203104030310500c71005", + "0xb3080b404053600b4100b3580b1d8053580b4100b3402907810954050d80b", + "0x5360363081002cd802d0402cd802d090143602d0402c3602c5c014c202d04", + "0x10402c3402d01014054100b0a40b57c050150402c1e02d5f014054100b0140c", + "0xb57c050150402c05030050165602c050ac050e40b4100b3f00b088053680b", + "0x10402c2e02c22014da02d0402c1402d01014054100b0a40b57c050150402c1e", + "0x2b02d01014054100b0780b57c050150402c05030050165602c050ac050e40b", + "0x50150402c05030050165602c050ac050e40b4100b0880b088053680b4100b", + "0x50ac050e40b4100b4000b088053680b4100b06c0b404050150402c1e02d5f", + "0x3902d0402c1002c22014da02d0402c1f02d01014054100b0140c014059580b", + "0xb4080b088053680b4100b0140b404050150402c05030050165602c050ac05", + "0xb4100b0e40b3dc050f00b4100b0e80b1e0050e80b4100b014310143902d04", + "0xb0300b040050150402c050f4050f0e03681002c3c02d0402c3c02d09014e0", + "0x10202d02014054100b0140c0141702e5740811031040301002c110141002d04", + "0xb06c0b080050780b4100b0440b3dc0506c0b4100b0800b05c050800b4100b", + "0x5030050880b960054100c07c0b0780507c1b0310402c1b02c1b0141b02d04", + "0xb4100b02c0b050050140b4100b0140b404050150402c1b02c1f014054100b", + "0x1802e5a01418400230410402c1e02c05042590141e02d0402c1e02c5c0140b", + "0xb974050ac290310402d0102e5c014054100b0140c0141402e5b4040b4100c", + "0xb97c050b80b4100b4000b400050150402c05030050b00b978fc02d040302b", + "0xb988053080b4100b0c429032610143102d0402c2f02e600142f02d0402cfc", + "0xd002e630142e02d0402c2e02c140142302d0402c2302d01014d002d0402cc2", + "0x2640143402d0402d0002d00014054100b0140c014d00b8230400b3400b4100b", + "0x101014d802d0402cd602e62014d602d0402c360a40c984050d80b4100b0b00b", + "0x230400b3600b4100b3600b98c050d00b4100b0d00b0500508c0b4100b08c0b", + "0x508c0b4100b08c0b404053680b4100b0500b994050150402c050300536034", + "0x10402c05030053690008c1002cda02d0402cda02e630150002d0402d0002c14", + "0x50e80b4100b0e41b0302f0143902d0402c050b8050150402c2202c2c01405", + "0x100014054100b0140c0143c02e66015040303a02c1e0143a02d0402c3a02c20", + "0x3f02e600143f02d0402ce302e67014e302d0402c050c4053800b4100b02c0b", + "0x502d01014e802d0402c4202e620144202d0402c400780c984051000b4100b", + "0xe8380050400b3a00b4100b3a00b98c053800b4100b3800b050050140b4100b", + "0xb01431014ea02d0402c0b02d00014054100b0f00b0b0050150402c0503005", + "0xb1300b988051300b4100b3b81e03261014ee02d0402cec02e64014ec02d04", + "0x10402c3d02e63014ea02d0402cea02c140140502d0402c0502d010143d02d04", + "0xb014310144d02d0402c0b02d00014054100b0140c0143d3a8050400b0f40b", + "0xb3dc51032610145102d0402c1702cf7014f702d0402cf502e64014f502d04", + "0x10402c4d02c140140502d0402c0502d01014f802d0402c5302e620145302d04", + "0x50300b014054100b0143d014f8134050400b3e00b4100b3e00b98c051340b", + "0x506c0b4100b0300b7e8050150402c0503005080170326840811031040300b", + "0x2302d0402d0202d00014054100b0140c0142202e6a07c1e031040301b02e69", + "0x54040b4100b0600b3c8050600b4100b4000b1f0054000b4100b07c0b9ac05", + "0x50a40b4100b0780b390050500b4100b40410030ec0150102d0402d0102c20", + "0xee0142902d0402c2902c8b0142302d0402c2302c140141102d0402c1102d01", + "0x50b0fc0ac1002c2c3f02b0410402c140a42304411234050500b4100b0500b", + "0x10402c050c4050b80b4100b4080b400050150402c2202e6c014054100b0140c", + "0x10402c1102d01014c202d0402c3102d130143102d0402c2f0400c92c050bc0b", + "0xc014c20b8110400b3080b4100b3080b930050b80b4100b0b80b050050440b", + "0xd002d0402c05168050150402c0c02df7014054100b0400b3d4050150402c05", + "0x50800b4100b0800b0500505c0b4100b05c0b404050d00b4100b3400b93805", + "0xc0300b044050300b4100b02c0b040050d02005c1002c3402d0402c3402e4c", + "0x1702c170141702d0402c1102d02014054100b0140c0150202e6d0441003104", + "0x1b02c1e0141b0800c4100b0800b06c050800b4100b0800b080050800b4100b", + "0x10402c1002c22014054100b0800b07c050150402c05030050780b9b8054100c", + "0xb0880b408050150402c050300508c0b9bc2207c0c4100c0400b044050400b", + "0x10402c1802c1b0141802d0402c1802c200141802d0402d0002c170150002d04", + "0x10402c1802c1f014054100b0140c0141402e70015040310102c1e015010600c", + "0xb0140c014fc02e710ac29031040301f02c110141f02d0402c1f02c2201405", + "0xb4100b0b80b080050b80b4100b0b00b05c050b00b4100b0ac0b4080501504", + "0xb0a40b3dc050150402c05030053080b9c8310bc0c4100c0b805030230142e", + "0x10402c3602e740143602d0402c3402e730143402d0402c3102c18014d002d04", + "0xb4100b3580b9d4053400b4100b3400b170050bc0b4100b0bc0b404053580b", + "0xb0a40b088053600b4100b3080b404050150402c0503005358d00bc1002cd6", + "0x22014d802d0402c0502d01014054100b0140c014059d80b0142b014da02d04", + "0x54100b0500b0b0050150402c05030050167602c050ac053680b4100b3f00b", + "0x50e80b4100b0e80b080050e80b4100b0e4180302f0143902d0402c050b805", + "0xb308053800b4100b01431014054100b0140c0143c02e77015040303a02c1e", + "0x4002e740144002d0402ce302e730143f02d0402c1f02cf7014e302d0402ce0", + "0xb1080b9d4050fc0b4100b0fc0b170050140b4100b0140b404051080b4100b", + "0x502d01014054100b0f00b0b0050150402c05030051083f0141002c4202d04", + "0x50150402c05030050167802c050ac053a80b4100b07c0b088053a00b4100b", + "0x279014e802d0402cd802cf8014da02d0402c2302c22014d802d0402c0502d01", + "0x54100b0780b0b0050150402c05030050167802c050ac053a80b4100b3680b", + "0x51300b4100b3b8200302f014ee02d0402c050b8053b00b4100b0400b3dc05", + "0x31014054100b0140c0143d02e7a015040304c02c1e0144c02d0402c4c02c20", + "0x502d01014f702d0402cf502e74014f502d0402c4d02e7b0144d02d0402c05", + "0xf73b0050400b3dc0b4100b3dc0b9d4053b00b4100b3b00b170050140b4100b", + "0xb1440b9f0051440b4100b01431014054100b0f40b0b0050150402c0503005", + "0x10402c5302e75014ec02d0402cec02c5c0140502d0402c0502d010145302d04", + "0x10202c22014e802d0402c0502d01014054100b0140c014533b0050400b14c0b", + "0x10402cea02cf70145602d0402cf802e7c014f802d0402c050c4053a80b4100b", + "0x110140c02d0402c0b02c1001456160e80400b1580b4100b1580b9d4051600b", + "0x505c0b4100b0440b408050150402c05030054080b9f4110400c4100c0300b", + "0x506c200310402c2002c1b0142002d0402c2002c200142002d0402c1702c17", + "0xb088050150402c2002c1f014054100b0140c0141e02e7e015040301b02c1e", + "0x102014054100b0140c0142302e7f0881f031040301002c110141002d0402c10", + "0xca00050600b4100b0600b080050600b4100b4000b05c054000b4100b0880b", + "0x50ac0b4100b07c0b3dc050150402c05030050a40ba04144040c4100c06005", + "0x5c0150102d0402d0102d010142c02d0402cfc02cdd014fc02d0402c1402e82", + "0x54100b0140c0142c0ad010400b0b00b4100b0b00b4dc050ac0b4100b0ac0b", + "0x5030050168302c050ac050bc0b4100b07c0b088050b80b4100b0a40b40405", + "0x5a0c0b0142b0142f02d0402c2302c220142e02d0402c0502d01014054100b", + "0x310800c0bc050c40b4100b0142e014054100b0780b0b0050150402c0503005", + "0x5030053400ba10054100c3080b078053080b4100b3080b080053080b4100b", + "0xc014d602e850d834031040301002c110141002d0402c1002c22014054100b", + "0xb3680b080053680b4100b3600b05c053600b4100b0d80b408050150402c05", + "0xb3dc050150402c05030050f00ba183a0e40c4100c3680503023014da02d04", + "0x3902d010143f02d0402ce302cdd014e302d0402c3a02e87014e002d0402c34", + "0x3f380390400b0fc0b4100b0fc0b4dc053800b4100b3800b170050e40b4100b", + "0x50ac050bc0b4100b0d00b088050b80b4100b0f00b404050150402c0503005", + "0x2f02d0402cd602c220142e02d0402c0502d01014054100b0140c01405a0c0b", + "0x10402c1002cf7014054100b3400b0b0050150402c05030050168302c050ac05", + "0x502d0402c0502d01014e802d0402c4202d3b0144202d0402c050c4051000b", + "0xb0140c014e8100050400b3a00b4100b3a00b4dc051000b4100b1000b17005", + "0xea02d0402c050c4050bc0b4100b4080b088050b80b4100b0140b4040501504", + "0xb3b00b4100b3b00b4dc053b80b4100b0bc0b3dc053b00b4100b3a80b4ec05", + "0x506c200328805d02031040300b0140c02c050150402c050f4053b0ee0b810", + "0x507c0ba24054100c0780b07805078110310402c1102c1b014054100b0140c", + "0xb0400ba28050880b4100b05c0b400050150402c1102c1f014054100b0140c", + "0xb4080b404050600b4100b4000ba30054000b4100b08c0c0328b0142302d04", + "0x5060224081002c1802d0402c1802e8d0142202d0402c2202c140150202d04", + "0xc4040b044054040b4100b0300b040050150402c1f02c2c014054100b0140c", + "0xfc02c17014fc02d0402c2902d02014054100b0140c0142b02e8e0a41403104", + "0x2e02c1e0142e0b00c4100b0b00b06c050b00b4100b0b00b080050b00b4100b", + "0x10402c1402c22014054100b0b00b07c050150402c05030050bc0ba3c054100c", + "0xb3080b408050150402c05030053400ba40c20c40c4100c0500b044050500b", + "0xc0d902030230143602d0402c3602c200143602d0402c3402c170143402d04", + "0xd802c180143902d0402c1702d00014054100b0140c014da02e91360d603104", + "0xb0e80b0a4053800b4100b0e40b050050f00b4100b3580b404050e80b4100b", + "0xd1014054100b0140c01405a480b0142b0143f02d0402c3102c22014e302d04", + "0xb3680b404051000b4100b05c0b400050150402c1102c1f014054100b0400b", + "0x5a4c0b0142b014ea02d0402c3102c22014e802d0402c4002c140144202d04", + "0xb05c0b400050150402c1102c1f014054100b0400b344050150402c0503005", + "0x10402cd002c22014e802d0402cec02c140144202d0402d0202d01014ec02d04", + "0xb0142e014054100b0bc0b0b0050150402c05030050169302c050ac053a80b", + "0xc1300b078051300b4100b1300b080051300b4100b3b82c0302f014ee02d04", + "0xb4100b014310144d02d0402c1702d00014054100b0140c0143d02e9401504", + "0xe002d0402c4d02c140143c02d0402d0202d01014f702d0402cf502cc2014f5", + "0x5102d0402ce30400ca54050fc0b4100b0500b0880538c0b4100b3dc0b0a405", + "0x51580b4100b0fc0b3dc053e00b4100b14c110302f0145302d0402c050b805", + "0x9f0145602d0402c5602c5c014e002d0402ce002c140143c02d0402c3c02d01", + "0x104100b3e051158e00f102354053e00b4100b3e00b080051440b4100b1440b", + "0x1002cd1014054100b0f40b0b0050150402c0503005168f61601002c5a3d858", + "0xb4100b4080b404051700b4100b05c0b400050150402c1102c1f014054100b", + "0xc01405a580b0142b0146102d0402c1402c220145f02d0402c5c02c140145e", + "0xb4100b05c0b400050150402c1102c1f014054100b0400b344050150402c05", + "0xea02d0402c2b02c22014e802d0402cf402c140144202d0402d0202d01014f4", + "0x51840b4100b3a80b9e40517c0b4100b3a00b158051780b4100b1080b3e005", + "0xca2c053cc0b4100b1840b3dc051940b4100b18c0b45c0518c0b4100b01431", + "0xb050051780b4100b1780b404051a80b4100b1a00ba30051a00b4100b194f3", + "0x50150402c05030051a85f1781002c6a02d0402c6a02e8d0145f02d0402c5f", + "0x10402c05168050150402c0c02cf6014054100b0400b344050150402c1102c1f", + "0xb4100b06c0b050050800b4100b0800b404051b40b4100b3c80ba5c053c80b", + "0xb0140c02c050150402c050f4051b41b0801002c6d02d0402c6d02e8d0141b", + "0x29a0141b02d0402c0c02e99014054100b0140c0142005c0ca61020440c4100c", + "0x508c0b4100b07c0ba70050150402c05030050880ba6c1f0780c4100c06c0b", + "0x2302c400142302d0402c2302c29014054100b0143f0150002d0402c1e02cc4", + "0x1802c420141402d0402d0202d00014054100b0140c0150102e9d0600b4100c", + "0x10402cfc02c20014fc02d0402c053a8050ac0b4100b0a40b3a0050a40b4100b", + "0xb0500b050050b80b4100b0ac2c030ec0142c02d0402cfc0400c3b0053f00b", + "0x4c014054100b0140c01405a780b0142b0143102d0402c2e02cee0142f02d04", + "0xb3400b080053400b4100b0142e014c202d0402d0202d00014054100b4040b", + "0xb0d00b3b8050bc0b4100b3080b050050d00b4100b34010030ec014d002d04", + "0x2f02d0402c2f02c140141102d0402c1102d01014054100b0143d0143102d04", + "0x10402c314002f044112f4050c40b4100b0c40b3b8054000b4100b4000b30c05", + "0xb400050150402c2202e9f014054100b0140c014d8358360400b360d60d810", + "0x3a02d130143a02d0402c390400c92c050e40b4100b01431014da02d0402d02", + "0xb0f00b930053680b4100b3680b050050440b4100b0440b404050f00b4100b", + "0x1002cf5014054100b0300ba80050150402c05030050f0da0441002c3c02d04", + "0xb4100b05c0b4040538c0b4100b3800b938053800b4100b0145a014054100b", + "0xb0400538c2005c1002ce302d0402ce302e4c0142002d0402c2002c1401417", + "0x102014054100b0140c0150202ea104410031040300c02c110140c02d0402c0b", + "0xb06c050800b4100b0800b080050800b4100b05c0b05c0505c0b4100b0440b", + "0xb07c050150402c05030050780ba88054100c06c0b0780506c200310402c20", + "0x508c0ba8c2207c0c4100c0400b044050400b4100b0400b088050150402c20", + "0x1802c200141802d0402d0002c170150002d0402c2202d02014054100b0140c", + "0x22014054100b0140c0142902ea40510103104030180140c704050600b4100b", + "0x50150402c05030050b00ba94fc0ac0c4100c07c0b0440507c0b4100b07c0b", + "0x1c40142f02d0402c2f02c200142f02d0402c2e02c170142e02d0402cfc02d02", + "0x3402d0402c2b02cf7014054100b0140c014d002ea630831031040302f4040c", + "0xd802d0402cd602ea7014d602d0402c3602d160143602d0402cc20500c72005", + "0xb3600b4100b3600baa0050d00b4100b0d00b170050c40b4100b0c40b40405", + "0xda02d0402cd002d01014054100b0500b588050150402c0503005360340c410", + "0xb0500b588050150402c0503005016a902c050ac050e40b4100b0ac0b08805", + "0x5016a902c050ac050e40b4100b0b00b088053680b4100b4040b4040501504", + "0xb0142b0143902d0402c1f02c22014da02d0402c2902d01014054100b0140c", + "0x50e40b4100b08c0b088053680b4100b0140b404050150402c0503005016a9", + "0xb4100b0400b3dc050150402c1e02c2c014054100b0140c01405aa40b0142b", + "0xe002d0402ce002c20014e002d0402c3c0800c0bc050f00b4100b0142e0143a", + "0x2ab0143f02d0402c050c4050150402c050300538c0baa8054100c3800b07805", + "0xb170050140b4100b0140b404051080b4100b1000ba9c051000b4100b0fc0b", + "0x50150402c05030051083a0141002c4202d0402c4202ea80143a02d0402c3a", + "0x502d01014ea02d0402ce802eac014e802d0402c050c4050150402ce302c2c", + "0xea0e8050400b3a80b4100b3a80baa0050e80b4100b0e80b170050140b4100b", + "0x50c4050e40b4100b4080b088053680b4100b0140b404050150402c0503005", + "0xb3b80baa0051300b4100b0e40b3dc053b80b4100b3b00bab0053b00b4100b", + "0xb044050400b4100b0300b040050150402c050f4053b84c3681002cee02d04", + "0x170142002d0402d0202d02014054100b0140c0141702ead408110310403010", + "0x1e0141e06c0c4100b06c0b06c0506c0b4100b06c0b0800506c0b4100b0800b", + "0x1102c22014054100b06c0b07c050150402c050300507c0bab8054100c0780b", + "0xb408050150402c05030054000babc230880c4100c0440b044050440b4100b", + "0xb0880b3dc050500b4100b016340150102d0402c1802c170141802d0402c23", + "0x10402c2902c5c0140b02d0402c0b02c140140502d0402c0502d010142902d04", + "0x140a40b015028d8054040b4100b4040b080050500b4100b0500b8d4050a40b", + "0x50150402c05030050bc0bac02e02d040302c02e370142c3f02b0410402d01", + "0x54100b0140c0143402eb13400b4100c3080b8e805308310310402c2e02e39", + "0x53600b4100b3580bacc053580b4100b3400bac8050d80b4100b3f00b40005", + "0x50ac0b4100b0ac0b404050e40b4100b3680bad4053680b4100b36031032b4", + "0x10402c05030050e4360ac1002c3902d0402c3902eb60143602d0402c3602c14", + "0xe002d0402c3a02c140143c02d0402c2b02d010143a02d0402cfc02d0001405", + "0x503005016b702c050ac050fc0b4100b0c40b1700538c0b4100b0d00b90005", + "0x10402cfc02c140142b02d0402c2b02d010144002d0402c2f02eb8014054100b", + "0xb02d00014054100b0140c014403f02b0400b1000b4100b1000bad8053f00b", + "0x10402c0502d01014ea02d0402d0002cf7014e802d0402c050c4051080b4100b", + "0xb4100b3a80b1700538c0b4100b3a00b900053800b4100b1080b050050f00b", + "0x10402c050b8050150402c1f02c2c014054100b0140c01405adc0b0142b0143f", + "0x104030ee02c1e014ee02d0402cee02c20014ee02d0402cec06c0c0bc053b00b", + "0xc4100c0440b044050440b4100b0440b088050150402c05030051300bae405", + "0x10402cf702c17014f702d0402c4d02d02014054100b0140c014f502eba1343d", + "0x502d0402c0502d01014f802d0402c3d02cf70145302d0402c05aec051440b", + "0x514c0b4100b14c0baf0053e00b4100b3e00b1700502c0b4100b02c0b05005", + "0xf602d18014f6160560410402c5114cf802c0540abd0145102d0402c5102c20", + "0xbb000517c5e0310402c5a02ebf014054100b0140c0145c02ebe1680b4100c", + "0xbb080518c0b4100b1600b400050150402c05030053d00bb046102d040305f", + "0xbad4051a00b4100b3cc5e032b4014f302d0402c6502eb30146502d0402c61", + "0x6a02eb60146302d0402c6302c140145602d0402c5602d010146a02d0402c68", + "0x101014f202d0402c5802d00014054100b0140c0146a18c560400b1a80b4100b", + "0xb1700538c0b4100b3d00b900053800b4100b3c80b050050f00b4100b1580b", + "0x6d02d0402c5c02eb8014054100b0140c01405adc0b0142b0143f02d0402c5e", + "0xb1b40b4100b1b40bad8051600b4100b1600b050051580b4100b1580b40405", + "0xef02d0402c050c4051bc0b4100b02c0b400050150402c05030051b45815810", + "0x53800b4100b1bc0b050050f00b4100b0140b404051c80b4100b3d40b3dc05", + "0x2b40147402d0402ce302ec30143f02d0402c7202c5c014e302d0402cef02e40", + "0x140143c02d0402c3c02d010150702d0402ced02eb5014ed02d0402c740fc0c", + "0x54100b0140c015073803c0400b41c0b4100b41c0bad8053800b4100b3800b", + "0x310150902d0402c1102cf70147602d0402c0b02d00014054100b1300b0b005", + "0xbad4053ac0b4100b1e909032b40147a02d0402c7802ec30147802d0402c05", + "0x7d02eb60147602d0402c7602c140140502d0402c0502d010147d02d0402ceb", + "0x310147c02d0402c0b02d00014054100b0140c0147d1d8050400b1f40b4100b", + "0x81032b40148102d0402c1702cf7014e902d0402c7f02ec30147f02d0402c05", + "0x7c02c140140502d0402c0502d010148302d0402ce702eb5014e702d0402ce9", + "0xb014054100b0143d014831f0050400b20c0b4100b20c0bad8051f00b4100b", + "0xb4100b0300bb14050150402c050300508017032c440811031040300b0140c", + "0x10402d0202d00014054100b0140c0142202ec707c1e031040301b02ec60141b", + "0xb4100b0600b3a0050600b4100b4000b108054000b4100b07c0bb200508c0b", + "0xb4100b0780b5f4050500b4100b40410030ec0150102d0402d0102c2001501", + "0x2902d0402c2902d7e0142302d0402c2302c140141102d0402c1102d0101429", + "0xfc0ac1002c2c3f02b0410402c140a423044115fc050500b4100b0500b3b805", + "0x50c4050b80b4100b4080b400050150402c2202ec9014054100b0140c0142c", + "0x1102d01014c202d0402c3102d130143102d0402c2f0400c92c050bc0b4100b", + "0xc20b8110400b3080b4100b3080b930050b80b4100b0b80b050050440b4100b", + "0x10402c05168050150402c0c02eca014054100b0400b3d4050150402c0503005", + "0xb4100b0800b0500505c0b4100b05c0b404050d00b4100b3400b938053400b", + "0xb044050300b4100b02c0b040050d02005c1002c3402d0402c3402e4c01420", + "0x170141702d0402c1102d02014054100b0140c0150202ecb04410031040300c", + "0xf70141b0400c4100b0400bb30050400b4100b0400b088050800b4100b05c0b", + "0x1e0141f0800c4100b0800b06c050800b4100b0800b080050780b4100b06c0b", + "0x2002c1f014054100b0400b3f0050150402c05030050880bb34054100c07c0b", + "0xb07805030ed0141e02d0402c1e02c5c0140502d0402c0502d01014054100b", + "0xbb3c050150402c05030050500bb390102d040301802d07014184002304104", + "0x10002c5c0142302d0402c2302d010142b02d0402c2902d1b0142902d0402d01", + "0x2d1014054100b0140c0142b400230400b0ac0b4100b0ac0bb40054000b4100b", + "0xbb40054000b4100b4000b1700508c0b4100b08c0b404053f00b4100b0500b", + "0x2e014054100b0880b0b0050150402c05030053f10008c1002cfc02d0402cfc", + "0xb078050b80b4100b0b80b080050b80b4100b0b0200302f0142c02d0402c05", + "0xc0400b044050150402c1e02cf6014054100b0140c0142f02ed2015040302e", + "0x3402c170143402d0402cc202d02014054100b0140c014d002ed33083103104", + "0xda02ed4360d603104030360140c08c050d80b4100b0d80b080050d80b4100b", + "0xbb543a0e40c4100c0c40b044050c40b4100b0c40b088050150402c0503005", + "0x20014e302d0402ce002c17014e002d0402c3a02d02014054100b0140c0143c", + "0x54100b0140c0144202ed61003f03104030e33580c08c0538c0b4100b38c0b", + "0xec02d0402cea02ed8014ea02d0402c403600cb5c053a00b4100b0e40b3dc05", + "0x53a00b4100b3a00b170050fc0b4100b0fc0b404053b80b4100b3b00b46c05", + "0x54100b3600b2ec050150402c05030053b8e80fc1002cee02d0402cee02ed0", + "0x503005016d902c050ac050f40b4100b0e40b088051300b4100b1080b40405", + "0xb4100b0f00b088051300b4100b3580b404050150402cd802cbb014054100b", + "0x3102c220144c02d0402cda02d01014054100b0140c01405b640b0142b0143d", + "0x51300b4100b0140b404050150402c0503005016d902c050ac050f40b4100b", + "0x10402c2f02c2c014054100b0140c01405b640b0142b0143d02d0402cd002c22", + "0x101014f502d0402c4d02ed10144d02d0402c050c4050150402c1002cfc01405", + "0x50400b3d40b4100b3d40bb40050780b4100b0780b170050140b4100b0140b", + "0x50f40b4100b4080b088051300b4100b0140b404050150402c05030053d41e", + "0xbb400514c0b4100b0f40b3dc051440b4100b3dc0bb44053dc0b4100b01431", + "0x50400b4100b0300b040050150402c050f405144531301002c5102d0402c51", + "0x2002d0402d0202d02014054100b0140c0141702eda40811031040301002c11", + "0x506c0b4100b06c0b080050780b4100b0440b3dc0506c0b4100b0800b05c05", + "0x50150402c05030050880bb6c054100c07c0b0780507c1b0310402c1b02c1b", + "0xb1700502c0b4100b02c0b050050140b4100b0140b404050150402c1b02c1f", + "0x10102d040301802e5a01418400230410402c1e02c05042590141e02d0402c1e", + "0xb4100c0ac0b974050ac290310402d0102e5c014054100b0140c0141402edc", + "0xb4100b3f00bb78050b80b4100b4000b400050150402c05030050b00bb74fc", + "0xb4100b3080bb84053080b4100b0c429032e00143102d0402c2f02edf0142f", + "0xd002d0402cd002ee20142e02d0402c2e02c140142302d0402c2302d01014d0", + "0x10402c2302d010143402d0402d0002d00014054100b0140c014d00b8230400b", + "0xb4100b0a40b170053600b4100b0b00b900053580b4100b0d00b050050d80b", + "0x2302d010143902d0402c1402ee4014054100b0140c01405b8c0b0142b014da", + "0x39400230400b0e40b4100b0e40bb88054000b4100b4000b0500508c0b4100b", + "0x3a06c0c0bc050e80b4100b0142e014054100b0880b0b0050150402c0503005", + "0x5030053800bb94054100c0f00b078050f00b4100b0f00b080050f00b4100b", + "0x10402c1e02c5c0140b02d0402c0b02c140140502d0402c0502d01014054100b", + "0xe802ee81080b4100c1000bb9c051003f38c104100b0780b01410b98050780b", + "0xbbacee02d04030ec02eea014ec3a80c4100b1080bba4050150402c0503005", + "0x2df0144d02d0402cee02eec0143d02d0402c3f02d00014054100b0140c0144c", + "0x1010145102d0402cf702ee1014f702d0402cf53a80cb80053d40b4100b1340b", + "0xe30400b1440b4100b1440bb88050f40b4100b0f40b0500538c0b4100b38c0b", + "0x50d80b4100b38c0b4040514c0b4100b0fc0b400050150402c05030051443d", + "0x2ed014da02d0402cea02c5c014d802d0402c4c02e40014d602d0402c5302c14", + "0x1010145802d0402c5602ee10145602d0402cf83680cb80053e00b4100b3600b", + "0x360400b1600b4100b1600bb88053580b4100b3580b050050d80b4100b0d80b", + "0x538c0b4100b38c0b404053d80b4100b3a00bb90050150402c0503005160d6", + "0x10402c05030053d83f38c1002cf602d0402cf602ee20143f02d0402c3f02c14", + "0x2ed0145c02d0402c050c4051680b4100b02c0b400050150402ce002c2c01405", + "0x1010146102d0402c5f02ee10145f02d0402c5e0780cb80051780b4100b1700b", + "0x50400b1840b4100b1840bb88051680b4100b1680b050050140b4100b0140b", + "0x2ed0146302d0402c050c4053d00b4100b02c0b400050150402c05030051845a", + "0x2e10146802d0402c653cc0cb80053cc0b4100b05c0b3dc051940b4100b18c0b", + "0xbb88053d00b4100b3d00b050050140b4100b0140b404051a80b4100b1a00b", + "0xc4100c0300b044050300b4100b02c0b040051a8f40141002c6a02d0402c6a", + "0x10402c1702c170141702d0402c1102d02014054100b0140c0150202eee04410", + "0x10402c1b02cf70141b0400c4100b0400bb30050400b4100b0400b088050800b", + "0x1040301f02c1e0141f0800c4100b0800b06c050800b4100b0800b080050780b", + "0x50150402c2002c1f014054100b0400b3f0050150402c05030050880bbbc05", + "0x10008c104100b07805030370141e02d0402c1e02c5c0140502d0402c0502d01", + "0xb4100b4040bbc4050150402c05030050500bbc10102d040301802c9601418", + "0x10002d0402d0002c5c0142302d0402c2302d010142b02d0402c2902ef201429", + "0x10402c1402ef4014054100b0140c0142b400230400b0ac0b4100b0ac0bbcc05", + "0xb4100b3f00bbcc054000b4100b4000b1700508c0b4100b08c0b404053f00b", + "0xb4100b0142e014054100b0880b0b0050150402c05030053f10008c1002cfc", + "0x54100c0b80b078050b80b4100b0b80b080050b80b4100b0b0200302f0142c", + "0xc20c40c4100c0400b044050150402c1e02cf6014054100b0140c0142f02ef5", + "0x3602d0402c3402c170143402d0402cc202d02014054100b0140c014d002ef6", + "0xb0140c014da02ef7360d603104030360140c710050d80b4100b0d80b08005", + "0xb4100b0e80bbc8050e80b4100b3600bbe0050e40b4100b0c40b3dc0501504", + "0x3c02d0402c3c02ef30143902d0402c3902c5c014d602d0402cd602d010143c", + "0x10402c3102c22014e002d0402cda02d01014054100b0140c0143c0e4d60400b", + "0xb088053800b4100b0140b404050150402c0503005016f902c050ac0538c0b", + "0x50150402c2f02c2c014054100b0140c01405be40b0142b014e302d0402cd0", + "0x502d010144002d0402c3f02ef40143f02d0402c050c4050150402c1002cfc", + "0x40078050400b1000b4100b1000bbcc050780b4100b0780b170050140b4100b", + "0x50c40538c0b4100b4080b088053800b4100b0140b404050150402c0503005", + "0xb3a00bbcc053a80b4100b38c0b3dc053a00b4100b1080bbd0051080b4100b", + "0x110400c4100c0300b044050300b4100b02c0b040053a0ea3801002ce802d04", + "0x2002d0402c1702c170141702d0402c1102d02014054100b0140c0150202efa", + "0x2fb015040301b02c1e0141b0800c4100b0800b06c050800b4100b0800b08005", + "0x110141002d0402c1002c22014054100b0800b07c050150402c05030050780b", + "0x54000b4100b0880b408050150402c050300508c0bbf02207c0c4100c0400b", + "0x144040c4100c06005032800141802d0402c1802c200141802d0402d0002c17", + "0xfc02d0402c1402efe0142b02d0402c1f02cf7014054100b0140c0142902efd", + "0x50ac0b4100b0ac0b170054040b4100b4040b404050b00b4100b3f00bbfc05", + "0xb4100b0a40b404050150402c05030050b02b4041002c2c02d0402c2c02f00", + "0x502d01014054100b0140c01405c040b0142b0142f02d0402c1f02c220142e", + "0x50150402c05030050170102c050ac050bc0b4100b08c0b088050b80b4100b", + "0xb080053080b4100b0c4200302f0143102d0402c050b8050150402c1e02c2c", + "0x1002c22014054100b0140c014d002f0201504030c202c1e014c202d0402cc2", + "0xb408050150402c05030053580bc0c360d00c4100c0400b044050400b4100b", + "0xda02c1b014da02d0402cda02c20014da02d0402cd802c17014d802d0402c36", + "0xda02c1f014054100b0140c0143a02f04015040303902c1e014393680c4100b", + "0xc014e302f053803c031040303402c110143402d0402c3402c22014054100b", + "0xb1000b080051000b4100b0fc0b05c050fc0b4100b3800b408050150402c05", + "0xb3dc050150402c05030053a80bc18e81080c4100c10005031c40144002d04", + "0x4c02eff0144c02d0402cee02f08014ee02d0402ce802f07014ec02d0402c3c", + "0xb0f40bc00053b00b4100b3b00b170051080b4100b1080b404050f40b4100b", + "0xb088051340b4100b3a80b404050150402c05030050f4ec1081002c3d02d04", + "0x4d02d0402c0502d01014054100b0140c01405c240b0142b014f502d0402c3c", + "0xb0e80b0b0050150402c05030050170902c050ac053d40b4100b38c0b08805", + "0xb4100b1440b080051440b4100b3dcda0302f014f702d0402c050b80501504", + "0x53e00b4100b01431014054100b0140c0145302f0a015040305102c1e01451", + "0x2ff014f602d0402c5602f080145802d0402c3402cf70145602d0402cf802f0b", + "0xbc00051600b4100b1600b170050140b4100b0140b404051680b4100b3d80b", + "0x101014054100b14c0b0b0050150402c0503005168580141002c5a02d0402c5a", + "0x10402c05030050170102c050ac050bc0b4100b0d00b088050b80b4100b0140b", + "0x2e02d0402c4d02cf8014f502d0402cd602c220144d02d0402c0502d0101405", + "0xb3400b0b0050150402c05030050170102c050ac050bc0b4100b3d40b9e405", + "0x5f02d0402c5e02f0c0145e02d0402c050c4051700b4100b0400b3dc0501504", + "0xb17c0b4100b17c0bc00051700b4100b1700b170050140b4100b0140b40405", + "0xb4100b4080b088050b80b4100b0140b404050150402c050300517c5c01410", + "0x518c0b4100b0bc0b3dc053d00b4100b1840bc30051840b4100b014310142f", + "0xc0300b044050300b4100b02c0b040053d0630b81002cf402d0402cf402f00", + "0x1702c170141702d0402c1102d02014054100b0140c0150202f0d0441003104", + "0x1f02f0e0781b03104030200140c704050800b4100b0800b080050800b4100b", + "0xbc3c230880c4100c0400b044050400b4100b0400b088050150402c0503005", + "0x200150102d0402c1802c170141802d0402c2302d02014054100b0140c01500", + "0x54100b0140c0142b02f100a414031040310106c0c704054040b4100b4040b", + "0x10402c05030050b80bc442c3f00c4100c0880b044050880b4100b0880b08805", + "0x3102d0402c3102c200143102d0402c2f02c170142f02d0402c2c02d0201405", + "0x10402cfc02cf7014054100b0140c0143402f12340c203104030310500c71005", + "0xb3600bc4c053600b4100b3581e0311d014d602d0402cd00a40c720050d80b", + "0x10402cda02f140143602d0402c3602c5c014c202d0402cc202d01014da02d04", + "0xb0780b588050150402c2902d62014054100b0140c014da0d8c20400b3680b", + "0x50171502c050ac050e80b4100b3f00b088050e40b4100b0d00b4040501504", + "0x10402c1402d01014054100b0780b588050150402c2902d62014054100b0140c", + "0xb588050150402c05030050171502c050ac050e80b4100b0b80b088050e40b", + "0x31502c050ac050e80b4100b0880b088050e40b4100b0ac0b404050150402c1e", + "0xb088050e40b4100b06c0b404050150402c1e02d62014054100b0140c01405", + "0x3902d0402c1f02d01014054100b0140c01405c540b0142b0143a02d0402d00", + "0xb0140b404050150402c05030050171502c050ac050e80b4100b0400b08805", + "0xb4100b0f00bc58050f00b4100b014310143a02d0402d0202c220143902d04", + "0xb04005380e30e41002ce002d0402ce002f14014e302d0402c3a02cf7014e0", + "0x102014054100b0140c0150202f1704410031040300c02c110140c02d0402c0b", + "0xc08c050800b4100b0800b080050800b4100b05c0b05c0505c0b4100b0440b", + "0x50400b4100b0400b088050150402c050300507c0bc601e06c0c4100c08005", + "0x1802d0402c2302d02014054100b0140c0150002f1908c22031040301002c11", + "0x14031040310106c0ca00054040b4100b4040b080054040b4100b0600b05c05", + "0xb4100b0500b404053f00b4100b0880b3dc050150402c05030050ac0bc6829", + "0xc0bc0bc70050bc2e0b0104100b3f0140331b014fc02d0402cfc02c5c01414", + "0x11c7c050d834340104100b0c40bc78050150402c05030053080bc743102d04", + "0xda02d0402cd802f20014d802d0402cd60780c478053580b4100b0d83434029", + "0xb3680b4100b3680bc84050b80b4100b0b80b170050b00b4100b0b00b40405", + "0x50150402c1e02cbb014054100b3080b130050150402c05030053682e0b010", + "0xb088050e80b4100b0b00b404050e40b4100b0b80b040050150402c2902f22", + "0x50150402c1e02cbb014054100b0140c01405c8c0b0142b0143c02d0402c39", + "0xb0140c01405c900b0142b014e302d0402c2202c22014e002d0402c2b02d01", + "0xe302d0402d0002c22014e002d0402c1b02d01014054100b0780b2ec0501504", + "0x5030050172302c050ac050f00b4100b38c0b9e4050e80b4100b3800b3e005", + "0x5c8c0b0142b0143c02d0402c1002c220143a02d0402c1f02d01014054100b", + "0x50c4050f00b4100b4080b088050e80b4100b0140b404050150402c0503005", + "0xb1000bc84051080b4100b0f00b3dc051000b4100b0fc0bc94050fc0b4100b", + "0xb0143d014054100b017270141102d0402c05c9805100420e81002c4002d04", + "0x50300506c0bca02005c0c4100c4080b044054080b4100b0300b0400501504", + "0xb0400b05c050400b4100b04011033290141002d0402c2002d02014054100b", + "0xb088050150402c050300508c0bca82207c0c4100c07805030230141e02d04", + "0x102014054100b0140c0150102f2b06100031040301702c110141702d0402c17", + "0x10002cf70142b02d0402c05cb0050a40b4100b0500b05c050500b4100b0600b", + "0xb3f00b1700502c0b4100b02c0b0500507c0b4100b07c0b404053f00b4100b", + "0xfc02c1f40b2e0142902d0402c2902c200142b02d0402c2b02f2d014fc02d04", + "0x54100b0140c014c202f2f0c40b4100c0bc0b470050bc2e0b0104100b0a42b", + "0x10402c05030053580bcc83602d040303402f31014343400c4100b0c40bcc005", + "0x54100b3680bcd0050e4da0310402c3602f33014d802d0402c2e02d0001405", + "0xe002d0402c3c02d1a0143c02d0402c3a0880ccd4050e80b4100b0e40b39005", + "0x2c02d0402c2c02d010143f02d0402ce302f37014e302d0402ce03400ccd805", + "0xb0140c0143f3602c0400b0fc0b4100b0fc0bce0053600b4100b3600b05005", + "0x4202d0402c2c02d010144002d0402c2e02d00014054100b0880b2ec0501504", + "0x53b00b4100b3400b170053a80b4100b3580b900053a00b4100b1000b05005", + "0xb4100b3080bce8050150402c2202cbb014054100b0140c01405ce40b0142b", + "0xee02d0402cee02f380142e02d0402c2e02c140142c02d0402c2c02d01014ee", + "0xb4100b02c0b400050150402c2202cbb014054100b0140c014ee0b82c0400b", + "0x51080b4100b07c0b404051340b4100b4040b3dc050f40b4100b014310144c", + "0x33b014ec02d0402c4d02c5c014ea02d0402c3d02e40014e802d0402c4c02c14", + "0x1010145102d0402cf702f37014f702d0402cf53b00ccd8053d40b4100b3a80b", + "0x420400b1440b4100b1440bce0053a00b4100b3a00b050051080b4100b1080b", + "0x53e00b4100b08c0b4040514c0b4100b02c0b400050150402c0503005144e8", + "0xb0140c01405cf00b0142b0145802d0402c1702c220145602d0402c5302c14", + "0xf802d0402c0502d01014f602d0402c0b02d00014054100b0440bcf40501504", + "0x33b0145a02d0402c050c4051600b4100b06c0b088051580b4100b3d80b05005", + "0x3370145f02d0402c5c1780ccd8051780b4100b1600b3dc051700b4100b1680b", + "0xbce0051580b4100b1580b050053e00b4100b3e00b404051840b4100b17c0b", + "0xc4100c0300b044050300b4100b02c0b04005184563e01002c6102d0402c61", + "0x10402c1702c170141702d0402c1102d02014054100b0140c0150202f3e04410", + "0xc0141f02f3f0781b03104030200140c08c050800b4100b0800b080050800b", + "0x54000bd00230880c4100c0400b044050400b4100b0400b088050150402c05", + "0x10102c200150102d0402c1802c170141802d0402c2302d02014054100b0140c", + "0xf7014054100b0140c0142b02f410a414031040310106c0c08c054040b4100b", + "0xc454053f00b4100b3f00b170050500b4100b0500b404053f00b4100b0880b", + "0x54100b0140c014c202f430c40b4100c0bc0bd08050bc2e0b0104100b3f014", + "0x1e03346014d602d0402c360d0d00a411d14050d834340104100b0c40bd1005", + "0x2e02c5c0142c02d0402c2c02d01014da02d0402cd802d19014d802d0402cd6", + "0x4c014054100b0140c014da0b82c0400b3680b4100b3680bd1c050b80b4100b", + "0x10402c2e02c10014054100b0a40b2ec050150402c1e02cbb014054100b3080b", + "0x50174802c050ac050f00b4100b0e40b088050e80b4100b0b00b404050e40b", + "0xb0880b088053800b4100b0ac0b404050150402c1e02cbb014054100b0140c", + "0xb404050150402c1e02cbb014054100b0140c01405d240b0142b014e302d04", + "0xe302e790143a02d0402ce002cf8014e302d0402d0002c22014e002d0402c1b", + "0x50e80b4100b07c0b404050150402c05030050174802c050ac050f00b4100b", + "0x10402c0502d01014054100b0140c01405d200b0142b0143c02d0402c1002c22", + "0x4002d0402c3f02f4a0143f02d0402c050c4050f00b4100b4080b088050e80b", + "0xb02c10014401083a0400b1000b4100b1000bd1c051080b4100b0f00b3dc05", + "0xb408050150402c05030054080bd2c110400c4100c0300b044050300b4100b", + "0x5031c40142002d0402c2002c200142002d0402c1702c170141702d0402c11", + "0x110141002d0402c1002c22014054100b0140c0141f02f4c0781b0310403020", + "0x50600b4100b08c0b408050150402c05030054000bd34230880c4100c0400b", + "0x5051010310402d0102c1b0150102d0402d0102c200150102d0402c1802c17", + "0xb088050150402d0102c1f014054100b0140c0142902f4e015040301402c1e", + "0x102014054100b0140c0142c02f4f3f02b031040302202c110142202d0402c22", + "0xca00050bc0b4100b0bc0b080050bc0b4100b0b80b05c050b80b4100b3f00b", + "0x50d00b4100b0ac0b3dc050150402c05030053400bd40c20c40c4100c0bc1b", + "0x53600b4100b3580bd4c053580b4100b0d81e033520143602d0402cc202f51", + "0x1002cd802d0402cd802f540143402d0402c3402c5c0143102d0402c3102d01", + "0x53680b4100b3400b404050150402c1e02d5f014054100b0140c014d80d031", + "0x10402c1e02d5f014054100b0140c01405d540b0142b0143902d0402c2b02c22", + "0xc01405d540b0142b0143902d0402c2c02c22014da02d0402c1b02d0101405", + "0x10402c3a4040c0bc050e80b4100b0142e014054100b0a40b0b0050150402c05", + "0x10402c05030053800bd58054100c0f00b078050f00b4100b0f00b080050f00b", + "0x51000b4100b0880b3dc050fc0b4100b38c0b4500538c0b4100b0143101405", + "0x506c0b4100b06c0b404053a00b4100b1080bd4c051080b4100b0fc1e03352", + "0x10402c05030053a04006c1002ce802d0402ce802f540144002d0402c4002c5c", + "0x22014ea02d0402c1b02d01014054100b0780b57c050150402ce002c2c01405", + "0x54100b0780b57c050150402c05030050175702c050ac053b00b4100b0880b", + "0x53a80b4100b3680b3e0050e40b4100b4000b088053680b4100b06c0b40405", + "0x10402c1f02d01014054100b0140c01405d5c0b0142b014ec02d0402c3902e79", + "0xb404050150402c05030050175702c050ac053b00b4100b0400b088053a80b", + "0xb3b80bd60053b80b4100b01431014ec02d0402d0202c22014ea02d0402c05", + "0x51303d3a81002c4c02d0402c4c02f540143d02d0402cec02cf70144c02d04", + "0x54100b0140c0150202f5904410031040300c02c110140c02d0402c0b02c10", + "0x50800b4100b0800b080050800b4100b05c0b05c0505c0b4100b0440b40805", + "0x50150402c05030050780bd68054100c06c0b0780506c200310402c2002c1b", + "0xbd6c2207c0c4100c0400b044050400b4100b0400b088050150402c2002c1f", + "0x200141802d0402d0002c170150002d0402c2202d02014054100b0140c01423", + "0x54100b0140c0142902f5c0510103104030180140ca00050600b4100b0600b", + "0x50b00b4100b3f00bd78053f00b4100b0500bd74050ac0b4100b07c0b3dc05", + "0x1002c2c02d0402c2c02f5f0142b02d0402c2b02c5c0150102d0402d0102d01", + "0x2f02d0402c1f02c220142e02d0402c2902d01014054100b0140c0142c0ad01", + "0xb08c0b088050b80b4100b0140b404050150402c05030050176002c050ac05", + "0x50b8050150402c1e02c2c014054100b0140c01405d800b0142b0142f02d04", + "0xc202c1e014c202d0402cc202c20014c202d0402c310800c0bc050c40b4100b", + "0xc0400b044050400b4100b0400b088050150402c05030053400bd84054100c", + "0xd802c17014d802d0402c3602d02014054100b0140c014d602f620d83403104", + "0x3c02f630e83903104030da0140c704053680b4100b3680b080053680b4100b", + "0xbd780538c0b4100b0e80b47c053800b4100b0d00b3dc050150402c0503005", + "0x3f02f5f014e002d0402ce002c5c0143902d0402c3902d010143f02d0402ce3", + "0x220142e02d0402c3c02d01014054100b0140c0143f380390400b0fc0b4100b", + "0xb4100b0140b404050150402c05030050176002c050ac050bc0b4100b0d00b", + "0xd002c2c014054100b0140c01405d800b0142b0142f02d0402cd602c220142e", + "0xb4100b1080bd90051080b4100b014310144002d0402c1002cf7014054100b", + "0xe802d0402ce802f5f0144002d0402c4002c5c0140502d0402c0502d01014e8", + "0x10402d0202c220142e02d0402c0502d01014054100b0140c014e8100050400b", + "0xee02d0402c2f02cf7014ec02d0402cea02f64014ea02d0402c050c4050bc0b", + "0x502c0c3b00502c0b4100b014e0014ec3b82e0400b3b00b4100b3b00bd7c05", + "0xb0440bd9c050440b4100b03010033660141002d0402c05d94050300b4100b", + "0x200336805d02031040300b0140c02c050150402c050f4050440b02c1102d04", + "0xbda4054100c0780b07805078110310402c1102c1b014054100b0140c0141b", + "0xb8f0050880b4100b05c0b400050150402c1102c1f014054100b0140c0141f", + "0xb404050600b4100b4000bdac054000b4100b08c0c0336a0142302d0402c10", + "0x224081002c1802d0402c1802f6c0142202d0402c2202c140150202d0402d02", + "0xb044054040b4100b0300b040050150402c1f02c2c014054100b0140c01418", + "0x17014fc02d0402c2902d02014054100b0140c0142b02f6d0a4140310403101", + "0x36e0bc2e031040302c4080ca00050b00b4100b0b00b080050b00b4100b3f00b", + "0xd002d0402c2f0400cdbc053080b4100b05c0b400050150402c05030050c40b", + "0x53580b4100b0500b3dc050d80b4100b0d0110302f0143402d0402c050b805", + "0x235014d602d0402cd602c5c014c202d0402cc202c140142e02d0402c2e02d01", + "0x104100b0d8d0358c20b9028d8050d80b4100b0d80b080053400b4100b3400b", + "0x1002f70014054100b0440b07c050150402c05030050e4da3601002c39368d8", + "0x10402c3a02c140143c02d0402c3102d010143a02d0402c1702d00014054100b", + "0xb07c050150402c05030050177102c050ac0538c0b4100b0500b088053800b", + "0x10402d0202d010143f02d0402c1702d00014054100b0400bdc0050150402c11", + "0x4002d0402c050c40538c0b4100b0ac0b088053800b4100b0fc0b050050f00b", + "0xea02d0402c423a00cda8053a00b4100b38c0b3dc051080b4100b1000b91405", + "0x53800b4100b3800b050050f00b4100b0f00b404053b00b4100b3a80bdac05", + "0x54100b0440b07c050150402c05030053b0e00f01002cec02d0402cec02f6c", + "0xee02f72014ee02d0402c05168050150402c0c02cf6014054100b0400bdc005", + "0xb1300bdb00506c0b4100b06c0b050050800b4100b0800b404051300b4100b", + "0xb0143d014054100b017270141102d0402c05c98051301b0801002c4c02d04", + "0x50300506c0bdcc2005c0c4100c4080b044054080b4100b0300b0400501504", + "0xb0400b05c050400b4100b04011033290141002d0402c2002d02014054100b", + "0xb088050150402c050300508c0bdd02207c0c4100c07805031c40141e02d04", + "0x102014054100b0140c0150102f7506100031040301702c110141702d0402c17", + "0x10002cf70142b02d0402c05cb0050a40b4100b0500b05c050500b4100b0600b", + "0xb3f00b1700502c0b4100b02c0b0500507c0b4100b07c0b404053f00b4100b", + "0xfc02c1f40b2e0142902d0402c2902c200142b02d0402c2b02f2d014fc02d04", + "0x54100b0140c014c202f760c40b4100c0bc0b470050bc2e0b0104100b0a42b", + "0x10402c05030053580bddc3602d040303402f31014343400c4100b0c40bcc005", + "0xb4100b3680b97c053680b4100b0d82203378014d802d0402c2e02d0001405", + "0xb4100b0b00b404050f00b4100b0e80bde8050e80b4100b0e4d00337901439", + "0x5030050f0d80b01002c3c02d0402c3c02f7b014d802d0402cd802c140142c", + "0xe002d0402c2e02d00014054100b0880b57c050150402cd602c4c014054100b", + "0x51000b4100b3800b050050fc0b4100b0b00b4040538c0b4100b3400b04005", + "0x10402c2202d5f014054100b0140c01405df00b0142b0144202d0402ce302c22", + "0x2e02d0402c2e02c140142c02d0402c2c02d01014e802d0402cc202f7d01405", + "0x10402c2202d5f014054100b0140c014e80b82c0400b3a00b4100b3a00bdec05", + "0x4002d0402cea02c140143f02d0402c1f02d01014ea02d0402c0b02d0001405", + "0x267014ee02d0402c4202cf7014ec02d0402c050c4051080b4100b4040b08805", + "0x1010144d02d0402c3d02f7a0143d02d0402c4c3b80cde4051300b4100b3b00b", + "0x3f0400b1340b4100b1340bdec051000b4100b1000b050050fc0b4100b0fc0b", + "0x53dc0b4100b08c0b404053d40b4100b02c0b400050150402c050300513440", + "0xb0140c01405df80b0142b0145302d0402c1702c220145102d0402cf502c14", + "0xf702d0402c0502d01014f802d0402c0b02d00014054100b0440bcf40501504", + "0x2670145602d0402c050c40514c0b4100b06c0b088051440b4100b3e00b05005", + "0x37a0145a02d0402c583d80cde4053d80b4100b14c0b3dc051600b4100b1580b", + "0xbdec051440b4100b1440b050053dc0b4100b3dc0b404051700b4100b1680b", + "0x102031040300b0140c02c050150402c050f405170513dc1002c5c02d0402c5c", + "0xc0780b07805078110310402c1102c1b014054100b0140c0141b0800cdfc17", + "0xb4100b05c0b400050150402c1102c1f014054100b0140c0141f02f8001504", + "0xb4100b4000be0c054000b4100b08c0c033820142302d0402c1002f8101422", + "0x1802d0402c1802f840142202d0402c2202c140150202d0402d0202d0101418", + "0xb4100b0300b040050150402c1f02c2c014054100b0140c01418089020400b", + "0x10402c2902d02014054100b0140c0142b02f850a414031040310102c1101501", + "0x1040302c4080c08c050b00b4100b0b00b080050b00b4100b3f00b05c053f00b", + "0x2f0400ce1c053080b4100b05c0b400050150402c05030050c40be182f0b80c", + "0xb0500b3dc050d80b4100b0d0110302f0143402d0402c050b8053400b4100b", + "0x10402cd602c5c014c202d0402cc202c140142e02d0402c2e02d01014d602d04", + "0xd0358c20b902af4050d80b4100b0d80b080053400b4100b3400baf0053580b", + "0x54100b0440b07c050150402c05030050e4da3601002c39368d80410402c36", + "0x140143c02d0402c3102d010143a02d0402c1702d00014054100b0400be2005", + "0x10402c05030050178902c050ac0538c0b4100b0500b088053800b4100b0e80b", + "0x1010143f02d0402c1702d00014054100b0400be20050150402c1102c1f01405", + "0x50c40538c0b4100b0ac0b088053800b4100b0fc0b050050f00b4100b4080b", + "0x423a00ce08053a00b4100b38c0b3dc051080b4100b1000be28051000b4100b", + "0xb3800b050050f00b4100b0f00b404053b00b4100b3a80be0c053a80b4100b", + "0xb07c050150402c05030053b0e00f01002cec02d0402cec02f84014e002d04", + "0xee02d0402c05168050150402c0c02cf6014054100b0400be20050150402c11", + "0x506c0b4100b06c0b050050800b4100b0800b404051300b4100b3b80be2c05", + "0x54100b017270141102d0402c05c98051301b0801002c4c02d0402c4c02f84", + "0xbe302005c0c4100c4080b044054080b4100b0300b040050150402c050f405", + "0x50400b4100b04011033290141002d0402c2002d02014054100b0140c0141b", + "0x10402c050300508c0be342207c0c4100c07805030230141e02d0402c1002c17", + "0xb0140c0150102f8e06100031040301702c110141702d0402c1702c2201405", + "0x2b02d0402c05aec050a40b4100b0500b05c050500b4100b0600b4080501504", + "0x502c0b4100b02c0b0500507c0b4100b07c0b404053f00b4100b4000b3dc05", + "0x2bd0142902d0402c2902c200142b02d0402c2b02ebc014fc02d0402cfc02c5c", + "0xc014c202f8f0c40b4100c0bc0b460050bc2e0b0104100b0a42b3f00b07d02", + "0x53580be403602d040303402ec0014343400c4100b0c40bafc050150402c05", + "0xbe48053680b4100b0d82203391014d802d0402c2e02d00014054100b0140c", + "0xb404050f00b4100b0e80be50050e80b4100b0e4d0033930143902d0402cda", + "0xd80b01002c3c02d0402c3c02f95014d802d0402cd802c140142c02d0402c2c", + "0x2e02d00014054100b0880b2ec050150402cd602c4c014054100b0140c0143c", + "0xb3800b050050fc0b4100b0b00b4040538c0b4100b3400b040053800b4100b", + "0xbb014054100b0140c01405e580b0142b0144202d0402ce302c220144002d04", + "0x2e02c140142c02d0402c2c02d01014e802d0402cc202f97014054100b0880b", + "0xbb014054100b0140c014e80b82c0400b3a00b4100b3a00be54050b80b4100b", + "0xea02c140143f02d0402c1f02d01014ea02d0402c0b02d00014054100b0880b", + "0x10402c4202cf7014ec02d0402c050c4051080b4100b4040b088051000b4100b", + "0x10402c3d02f940143d02d0402c4c3b80ce4c051300b4100b3b00be60053b80b", + "0xb4100b1340be54051000b4100b1000b050050fc0b4100b0fc0b404051340b", + "0xb08c0b404053d40b4100b02c0b400050150402c0503005134400fc1002c4d", + "0x5e640b0142b0145302d0402c1702c220145102d0402cf502c14014f702d04", + "0x502d01014f802d0402c0b02d00014054100b0440bcf4050150402c0503005", + "0x10402c050c40514c0b4100b06c0b088051440b4100b3e00b050053dc0b4100b", + "0x10402c583d80ce4c053d80b4100b14c0b3dc051600b4100b1580be60051580b", + "0xb4100b1440b050053dc0b4100b3dc0b404051700b4100b1680be50051680b", + "0xb044050300b4100b02c0b04005170513dc1002c5c02d0402c5c02f9501451", + "0x170141702d0402c1102d02014054100b0140c0150202f9a04410031040300c", + "0x39b0781b03104030200140c08c050800b4100b0800b080050800b4100b05c0b", + "0x230880c4100c0400b044050400b4100b0400b088050150402c050300507c0b", + "0x10102d0402c1802c170141802d0402c2302d02014054100b0140c0150002f9c", + "0xb0140c0142b02f9d0a414031040310106c0c710054040b4100b4040b08005", + "0x5030050b80be782c3f00c4100c0880b044050880b4100b0880b0880501504", + "0x10402c3102c200143102d0402c2f02c170142f02d0402c2c02d02014054100b", + "0xfc02cf7014054100b0140c0143402f9f340c203104030310500c704050c40b", + "0xb404053600b4100b3580b490053580b4100b3402907810e80050d80b4100b", + "0x363081002cd802d0402cd802fa10143602d0402c3602c5c014c202d0402cc2", + "0x3402d01014054100b0a40b57c050150402c1e02cbb014054100b0140c014d8", + "0x50150402c0503005017a202c050ac050e40b4100b3f00b088053680b4100b", + "0x2e02c22014da02d0402c1402d01014054100b0a40b57c050150402c1e02cbb", + "0x101014054100b0780b2ec050150402c0503005017a202c050ac050e40b4100b", + "0x10402c0503005017a202c050ac050e40b4100b0880b088053680b4100b0ac0b", + "0x50e40b4100b4000b088053680b4100b06c0b404050150402c1e02cbb01405", + "0x10402c1002c22014da02d0402c1f02d01014054100b0140c01405e880b0142b", + "0xb088053680b4100b0140b404050150402c0503005017a202c050ac050e40b", + "0xb0e40b3dc050f00b4100b0e80be8c050e80b4100b014310143902d0402d02", + "0xc02c050150402c050f4050f0e03681002c3c02d0402c3c02fa1014e002d04", + "0x110310402c1102c1b014054100b0140c0141b0800ce90174080c4100c02c05", + "0x50150402c1102c1f014054100b0140c0141f02fa5015040301e02c1e0141e", + "0x54000b4100b08c0c033a70142302d0402c1002fa60142202d0402c1702d00", + "0x3a90142202d0402c2202c140150202d0402d0202d010141802d0402d0002fa8", + "0x50150402c1f02c2c014054100b0140c01418089020400b0600b4100b0600b", + "0x54100b0140c0142b02faa0a414031040310102c110150102d0402c0c02c10", + "0x50b00b4100b0b00b080050b00b4100b3f00b05c053f00b4100b0a40b40805", + "0xb4100b05c0b400050150402c05030050c40beac2f0b80c4100c0b102031c4", + "0xb4100b0d0110302f0143402d0402c050b8053400b4100b0bc10033ac014c2", + "0xc202d0402cc202c140142e02d0402c2e02d01014d602d0402c1402cf701436", + "0x50d80b4100b0d80b080053400b4100b3400bcb4053580b4100b3580b17005", + "0x50150402c05030050e4da3601002c39368d80410402c36340d63082e40b2e", + "0x3102d010143a02d0402c1702d00014054100b0400bcd0050150402c1102c1f", + "0x3ad02c050ac0538c0b4100b0500b088053800b4100b0e80b050050f00b4100b", + "0x1702d00014054100b0400bcd0050150402c1102c1f014054100b0140c01405", + "0xb0ac0b088053800b4100b0fc0b050050f00b4100b4080b404050fc0b4100b", + "0xb4100b38c0b3dc051080b4100b1000beb8051000b4100b01431014e302d04", + "0xb4100b0f00b404053b00b4100b3a80bea0053a80b4100b108e8033a7014e8", + "0x5030053b0e00f01002cec02d0402cec02fa9014e002d0402ce002c140143c", + "0x50150402c0c02cf6014054100b0400bcd0050150402c1102c1f014054100b", + "0xb050050800b4100b0800b404051300b4100b3b80bebc053b80b4100b0145a", + "0xb4100b02c0b040051301b0801002c4c02d0402c4c02fa90141b02d0402c1b", + "0x10402c1102d02014054100b0140c0150202fb004410031040300c02c110140c", + "0x104030200140c08c050800b4100b0800b080050800b4100b05c0b05c0505c0b", + "0xc0400b044050400b4100b0400b088050150402c050300507c0bec41e06c0c", + "0x1802c170141802d0402c2302d02014054100b0140c0150002fb208c2203104", + "0x2b02fb30a414031040310106c0c08c054040b4100b4040b080054040b4100b", + "0xbed02c3f00c4100c0880b044050880b4100b0880b088050150402c0503005", + "0x200143102d0402c2f02c170142f02d0402c2c02d02014054100b0140c0142e", + "0x54100b0140c0143402fb5340c203104030310500c08c050c40b4100b0c40b", + "0xb4100b3580bedc053580b4100b3402907810ed8050d80b4100b3f00b3dc05", + "0xd802d0402cd802fb80143602d0402c3602c5c014c202d0402cc202d01014d8", + "0x54100b0a40b2ec050150402c1e02cbb014054100b0140c014d80d8c20400b", + "0x503005017b902c050ac050e40b4100b3f00b088053680b4100b0d00b40405", + "0xda02d0402c1402d01014054100b0a40b2ec050150402c1e02cbb014054100b", + "0xb0780b2ec050150402c0503005017b902c050ac050e40b4100b0b80b08805", + "0x5017b902c050ac050e40b4100b0880b088053680b4100b0ac0b4040501504", + "0xb4000b088053680b4100b06c0b404050150402c1e02cbb014054100b0140c", + "0x22014da02d0402c1f02d01014054100b0140c01405ee40b0142b0143902d04", + "0xb4100b0140b404050150402c0503005017b902c050ac050e40b4100b0400b", + "0x50f00b4100b0e80bee8050e80b4100b014310143902d0402d0202c22014da", + "0xc42e4050445f0f0e03681002c3c02d0402c3c02fb8014e002d0402c3902cf7", + "0x100300b014c3310b90141107cc42e405044050400c02c0530cc42e4050441f", + "0xc42e4050441f310b901411970100300b014c3310b90141107cc42e4050457e", + "0xc42e405047bb0400c02c0530cc42e4050441f310b901411db0100300b014c3", + "0x100300b014c3310b90141107cc42e405047bc0400c02c0530cc42e4050441f", + "0xc42e4050441f310b901411ef8100300b014c3310b90141107cc42e405047bd", + "0xc42e405047c00400c02c0530cc42e4050441f310b901411efc100300b014c3", + "0x100300b014c3310b90141107cc42e405047c10400c02c0530cc42e4050441f", + "0xc42e4050441f310b901411f0c100300b014c3310b90141107cc42e405047c2", + "0xc42e405047c50400c02c0530cc42e4050441f310b901411f10100300b014c3", + "0x100300b014c3310b90141107cc42e405047c60400c02c0530cc42e4050441f", + "0xc42e4050441f310b901411f20100300b014c3310b90141107cc42e405047c7", + "0xc42e405047ca0400c02c0530cc42e4050441f310b901411f24100300b014c3", + "0x100300b014c3310b90141107cc42e405047cb0400c02c0530cc42e4050441f", + "0xc42e4050441f310b901411f34100300b014c3310b90141107cc42e405047cc", + "0xb90141007cb901410f442302c05f402302c05f3c2302c05f38100300b014c3", + "0x1f0141007c05033d30400c02c0535cb90141006cd52e405047d20300b014d1", + "0xd72e4050401b170b901411f540c02c0536cb90141007cb901410f500b014d9", + "0x3d802c053781f0141007c05033d702c053741f0141007c05033d60400c02c05", + "0xd72e4050401b388b901411f64110400c02c05384b9014100608b07cb901502", + "0xb014e62e4050401f2e405043db02c053901f0141007c05033da0400c02c05", + "0xb014e907c050401f0140cf74100300b014d72e4050401b39cb901411f700c", + "0x5033e002c053b41f0141007c05033df0300b014eb2e4050401f2e405043de", + "0xf307c050401f0140cf880b014f207c050401f0140cf840b014ef07c050401f", + "0x3e502c053d81f0141007c05033e40300b014f42e4050401f2e405043e302c05", + "0x508c0b0600bf9c0b014f707c050401f0140cf980b014f807c050401f0140c", + "0xe02e4050401f2e405043e9044100300b014e82e405040180fc1f2e40540be8", + "0x1007cb901410fac110400c02c05358b9014100602c07cb901502fa80c02c05", + "0x50401805c1f2e40540bed02c053f01f0141007c05033ec0300b014c22e405", + "0xfbc0b0150207c050401f0140cfb8110400c02c05400b9" + ], + "sierra_program_debug_info": { + "type_names": [ + [0, "RangeCheck"], + [1, "core::panics::Panic"], + [2, "u16"], + [3, "Tuple"], + [4, "Unit"], + [5, "core::option::Option::<[core::integer::u16; 3]>"], + [6, "Array"], + [7, "core::option::Option::>"], + [8, "Array"], + [9, "Snapshot>"], + [10, "core::array::Span::"], + [ + 11, + "Tuple, core::option::Option::>>" + ], + [12, "Tuple>"], + [ + 13, + "core::panics::PanicResult::<(core::array::Span::, core::option::Option::>)>" + ], + [14, "felt252"], + [15, "Uninitialized"], + [16, "u32"], + [17, "u64"], + [18, "Tuple"], + [19, "core::option::Option::<(core::integer::u16, core::integer::u32, core::integer::u64)>"], + [20, "Array"], + [21, "Tuple>"], + [ + 22, + "core::option::Option::<(core::integer::u16, core::array::Array::)>" + ], + [ + 23, + "Tuple, core::option::Option::<(core::integer::u16, core::array::Array::)>>" + ], + [ + 24, + "core::panics::PanicResult::<(core::array::Span::, core::option::Option::<(core::integer::u16, core::array::Array::)>)>" + ], + [25, "Box"], + [26, "core::option::Option::>"], + [ + 27, + "Tuple, core::option::Option::>>" + ], + [ + 28, + "core::panics::PanicResult::<(core::array::Span::, core::option::Option::>)>" + ], + [29, "Box>"], + [30, "Box"], + [31, "Tuple>"], + [ + 32, + "core::option::Option::<(core::integer::u32, core::array::Array::)>" + ], + [ + 33, + "Tuple, core::option::Option::<(core::integer::u32, core::array::Array::)>>" + ], + [ + 34, + "core::panics::PanicResult::<(core::array::Span::, core::option::Option::<(core::integer::u32, core::array::Array::)>)>" + ], + [35, "Box"], + [36, "Array"], + [37, "core::option::Option::>"], + [ + 38, + "Tuple, core::option::Option::>>" + ], + [ + 39, + "core::panics::PanicResult::<(core::array::Span::, core::option::Option::>)>" + ], + [40, "Const"], + [ + 41, + "Const" + ], + [42, "Const"], + [43, "u128"], + [44, "u8"], + [45, "core::result::Result::"], + [46, "enums::Destruction"], + [47, "core::option::Option::>"], + [48, "core::option::Option::"], + [49, "enums::Truck"], + [50, "core::option::Option::"], + [51, "Tuple"], + [52, "enums::Horse"], + [53, "core::option::Option::"], + [54, "Snapshot>"], + [55, "core::array::Span::"], + [56, "enums::Dog"], + [57, "core::option::Option::"], + [58, "Tuple, core::option::Option::>"], + [ + 59, + "core::panics::PanicResult::<(core::array::Span::, core::option::Option::)>" + ], + [60, "Tuple"], + [61, "enums::Cat"], + [62, "core::option::Option::"], + [63, "enums::Point"], + [64, "enums::Point2"], + [65, "core::option::Option::"], + [66, "core::option::Option::"], + [67, "core::result::Result::>"], + [ + 68, + "core::option::Option::>>" + ], + [69, "core::result::Result::"], + [ + 70, + "core::result::Result::, core::integer::u32>" + ], + [ + 71, + "core::option::Option::, core::integer::u32>>" + ], + [72, "Snapshot>>"], + [ + 73, + "core::result::Result::<(core::integer::u32, core::array::Array::), (core::integer::u16, core::array::Array::)>" + ], + [ + 74, + "Snapshot), (core::integer::u16, core::array::Array::)>>" + ], + [ + 75, + "core::option::Option::), (core::integer::u16, core::array::Array::)>>" + ], + [ + 76, + "Tuple, core::option::Option::), (core::integer::u16, core::array::Array::)>>>" + ], + [ + 77, + "core::panics::PanicResult::<(core::array::Span::, core::option::Option::), (core::integer::u16, core::array::Array::)>>)>" + ], + [78, "Tuple"], + [79, "Tuple"], + [80, "core::result::Result::<[core::integer::u32; 3], [core::integer::u16; 2]>"], + [ + 81, + "core::option::Option::>" + ], + [82, "Snapshot>"], + [83, "core::array::Span::"], + [ + 84, + "core::result::Result::, core::array::Array::>" + ], + [ + 85, + "Snapshot, core::array::Array::>>" + ], + [ + 86, + "core::option::Option::, core::array::Array::>>" + ], + [ + 87, + "Tuple, core::option::Option::, core::array::Array::>>>" + ], + [ + 88, + "core::panics::PanicResult::<(core::array::Span::, core::option::Option::, core::array::Array::>>)>" + ], + [89, "core::option::Option::"], + [90, "core::option::Option::>"], + [91, "Array>"], + [92, "Snapshot>>"], + [93, "core::array::Span::>"], + [ + 94, + "core::option::Option::>>" + ], + [ + 95, + "Tuple, core::option::Option::>>>" + ], + [ + 96, + "core::panics::PanicResult::<(core::array::Span::, core::option::Option::>>)>" + ], + [97, "core::option::Option::>"], + [98, "core::option::Option::"], + [99, "core::option::Option::>"], + [ + 100, + "core::option::Option::>>" + ], + [101, "Snapshot>>"], + [ + 102, + "Snapshot)>>" + ], + [ + 103, + "core::option::Option::)>>" + ], + [ + 104, + "Tuple, core::option::Option::)>>>" + ], + [ + 105, + "core::panics::PanicResult::<(core::array::Span::, core::option::Option::)>>)>" + ], + [106, "core::option::Option::<[core::integer::u32; 3]>"], + [107, "Tuple, Unit>"], + [108, "core::panics::PanicResult::<(core::array::Array::, ())>"], + [109, "Snapshot>"], + [110, "core::array::Span::"], + [111, "Snapshot>>"], + [ + 112, + "core::option::Option::>>" + ], + [ + 113, + "Tuple, core::option::Option::>>>" + ], + [ + 114, + "core::panics::PanicResult::<(core::array::Span::, core::option::Option::>>)>" + ], + [115, "Tuple>"], + [116, "Const"], + [117, "BuiltinCosts"], + [118, "System"], + [119, "core::panics::PanicResult::<(core::array::Span::,)>"], + [120, "Const"], + [121, "NonZero"], + [122, "Box"], + [123, "GasBuiltin"] + ], + "libfunc_names": [ + [0, "revoke_ap_tracking"], + [1, "withdraw_gas"], + [2, "branch_align"], + [3, "struct_deconstruct>"], + [4, "array_snapshot_pop_front"], + [5, "unbox"], + [6, "rename"], + [7, "store_temp"], + [8, "dup"], + [9, "felt252_is_zero"], + [10, "drop"], + [11, "store_temp>>"], + [12, "u16_try_from_felt252"], + [13, "redeposit_gas"], + [14, "enum_init, 0>"], + [15, "store_temp"], + [16, "store_temp"], + [17, "store_temp>"], + [18, "jump"], + [19, "drop>>"], + [20, "drop>"], + [21, "const_as_immediate>"], + [22, "felt252_sub"], + [23, "struct_construct"], + [24, "enum_init, 1>"], + [25, "drop>"], + [26, "drop>"], + [ + 27, + "function_call>" + ], + [28, "enum_init,)>, 1>"], + [29, "store_temp"], + [30, "store_temp,)>>"], + [31, "get_builtin_costs"], + [32, "store_temp"], + [33, "withdraw_gas_all"], + [34, "array_new"], + [35, "snapshot_take>"], + [36, "enable_ap_tracking"], + [37, "enum_match>"], + [38, "rename"], + [39, "u16_to_felt252"], + [40, "const_as_immediate>"], + [41, "array_append"], + [42, "store_temp>"], + [43, "drop"], + [44, "disable_ap_tracking"], + [45, "snapshot_take>"], + [46, "drop>"], + [47, "struct_construct>"], + [48, "struct_construct>>"], + [49, "enum_init,)>, 0>"], + [50, "rename"], + [51, "rename"], + [ + 52, + "function_call>" + ], + [53, "drop>"], + [54, "function_call>"], + [55, "store_temp>"], + [ + 56, + "function_call, core::array::ArraySerde::, core::integer::u8Drop>>::deserialize>" + ], + [ + 57, + "enum_match, core::option::Option::>>)>>" + ], + [ + 58, + "struct_deconstruct, core::option::Option::>>>>" + ], + [ + 59, + "enum_match>>>" + ], + [60, "drop>>"], + [61, "snapshot_take>>"], + [62, "enum_snapshot_match>>"], + [63, "dup>>"], + [64, "array_len"], + [65, "u32_to_felt252"], + [66, "struct_construct>"], + [67, "store_temp>"], + [ + 68, + "function_call, core::integer::u8Drop>>" + ], + [69, "enum_match, ())>>"], + [70, "struct_deconstruct, Unit>>"], + [ + 71, + "function_call, core::serde::into_felt252_based::SerdeImpl::, core::tuple::DeserializeTupleNext::<[core::integer::u32; 2], core::fixed_size_array::TupleSplitFixedSizedArraySized2::, core::serde::into_felt252_based::SerdeImpl::, core::tuple::DeserializeTupleNext::<[core::integer::u32; 1], core::fixed_size_array::TupleSplitFixedSizedArraySized1::, core::serde::into_felt252_based::SerdeImpl::, core::tuple::DeserializeTupleBaseFixedSizedArray::, core::integer::u32Drop>, core::integer::u32Drop>, core::integer::u32Drop>::deserialize>" + ], + [72, "enum_match>"], + [73, "enum_init, 0>"], + [74, "store_temp>"], + [75, "enum_init, 1>"], + [76, "drop>"], + [77, "snapshot_take>"], + [78, "struct_deconstruct>"], + [79, "rename"], + [ + 80, + "function_call), core::tuple::SerdeTuple::<(core::integer::u32, core::array::Array::), core::tuple::TupleSnapForwardTupleSize2::>, core::tuple::SerializeTupleNext::<(@core::integer::u32, @core::array::Array::), core::tuple::TupleSplitTupleSize2::<@core::integer::u32, @core::array::Array::>, core::tuple::SerdeBasedSerializeTuple::>, core::tuple::SerializeTupleNext::<(@core::array::Array::,), core::tuple::TupleSplitTupleSize1::<@core::array::Array::>, core::tuple::SerdeBasedSerializeTuple::, core::array::ArraySerde::, core::integer::u32Drop>>, core::tuple::SerializeTupleBaseTuple, core::tuple::TupleSize0Drop>, core::tuple::TupleNextDrop::<(@core::array::Array::,), core::tuple::TupleSplitTupleSize1::<@core::array::Array::>, core::tuple::IsTupleTupleSize1::<@core::array::Array::>, core::traits::SnapshotDrop::>, core::tuple::TupleSize0Drop>>, core::tuple::DeserializeTupleNext::<(core::integer::u32, core::array::Array::), core::tuple::TupleSplitTupleSize2::>, core::serde::into_felt252_based::SerdeImpl::, core::tuple::DeserializeTupleNext::<(core::array::Array::,), core::tuple::TupleSplitTupleSize1::>, core::array::ArraySerde::, core::integer::u32Drop>, core::tuple::DeserializeTupleBaseTuple, core::array::ArrayDrop::>, core::integer::u32Drop>>>::deserialize>" + ], + [ + 81, + "enum_match, core::option::Option::)>>)>>" + ], + [ + 82, + "struct_deconstruct, core::option::Option::)>>>>" + ], + [ + 83, + "enum_match)>>>" + ], + [ + 84, + "drop)>>" + ], + [ + 85, + "snapshot_take)>>" + ], + [ + 86, + "enum_snapshot_match)>>" + ], + [87, "struct_snapshot_deconstruct>>"], + [88, "dup>>"], + [89, "array_len"], + [90, "struct_construct>"], + [91, "store_temp>"], + [ + 92, + "function_call, core::integer::u32Drop>>" + ], + [ + 93, + "function_call, core::option::OptionSerde::>>::deserialize>" + ], + [ + 94, + "enum_match>>>" + ], + [95, "drop>>"], + [96, "snapshot_take>>"], + [97, "enum_match>>"], + [ + 98, + "function_call, core::serde::into_felt252_based::SerdeImpl::>::deserialize>" + ], + [ + 99, + "enum_match>>" + ], + [ + 100, + "enum_init>, 0>" + ], + [ + 101, + "store_temp>>" + ], + [ + 102, + "enum_init>, 1>" + ], + [ + 103, + "drop>>" + ], + [ + 104, + "snapshot_take>>" + ], + [105, "enum_match>"], + [106, "rename"], + [107, "u8_to_felt252"], + [108, "array_new>"], + [109, "store_temp>>"], + [ + 110, + "function_call, core::option::OptionSerde::>, core::option::OptionDrop::>>" + ], + [ + 111, + "enum_match, core::option::Option::>>)>>" + ], + [ + 112, + "struct_deconstruct, core::option::Option::>>>>" + ], + [ + 113, + "enum_match>>>" + ], + [114, "drop>>"], + [115, "snapshot_take>>"], + [116, "dup>>>"], + [117, "array_len>"], + [118, "struct_construct>>"], + [119, "store_temp>>"], + [ + 120, + "function_call, core::option::OptionSerde::>, core::option::OptionDrop::>>" + ], + [121, "drop"], + [ + 122, + "function_call::deserialize>" + ], + [123, "enum_match>>"], + [124, "drop>"], + [125, "snapshot_take>"], + [126, "enum_match>"], + [127, "dup"], + [128, "struct_deconstruct"], + [129, "drop"], + [130, "rename"], + [131, "u64_to_felt252"], + [132, "drop"], + [133, "drop>"], + [134, "snapshot_take>"], + [ + 135, + "function_call, core::array::Array::, core::array::ArraySerde::, core::integer::u8Drop>, core::array::ArraySerde::, core::integer::u16Drop>>::deserialize>" + ], + [ + 136, + "enum_match, core::option::Option::, core::array::Array::>>)>>" + ], + [ + 137, + "struct_deconstruct, core::option::Option::, core::array::Array::>>>>" + ], + [ + 138, + "enum_match, core::array::Array::>>>" + ], + [ + 139, + "drop, core::array::Array::>>" + ], + [ + 140, + "snapshot_take, core::array::Array::>>" + ], + [ + 141, + "enum_snapshot_match, core::array::Array::>>" + ], + [142, "rename, ())>>"], + [143, "dup>>"], + [144, "array_len"], + [145, "struct_construct>"], + [146, "store_temp>"], + [ + 147, + "function_call, core::integer::u16Drop>>" + ], + [ + 148, + "function_call, core::tuple::SerializeTupleNext::<[@core::integer::u32; 3], core::fixed_size_array::TupleSplitFixedSizedArraySized3::<@core::integer::u32>, core::tuple::SerdeBasedSerializeTuple::>, core::tuple::SerializeTupleNext::<[@core::integer::u32; 2], core::fixed_size_array::TupleSplitFixedSizedArraySized2::<@core::integer::u32>, core::tuple::SerdeBasedSerializeTuple::>, core::tuple::SerializeTupleNext::<[@core::integer::u32; 1], core::fixed_size_array::TupleSplitFixedSizedArraySized1::<@core::integer::u32>, core::tuple::SerdeBasedSerializeTuple::>, core::tuple::SerializeTupleBaseFixedSizedArray::, core::fixed_size_array::FixedSizedArrayDrop::<@core::integer::u32, core::traits::SnapshotDrop::, 0>>, core::fixed_size_array::FixedSizedArrayDrop::<@core::integer::u32, core::traits::SnapshotDrop::, 1>>, core::fixed_size_array::FixedSizedArrayDrop::<@core::integer::u32, core::traits::SnapshotDrop::, 2>>, core::tuple::DeserializeTupleNext::<[core::integer::u32; 3], core::fixed_size_array::TupleSplitFixedSizedArraySized3::, core::serde::into_felt252_based::SerdeImpl::, core::tuple::DeserializeTupleNext::<[core::integer::u32; 2], core::fixed_size_array::TupleSplitFixedSizedArraySized2::, core::serde::into_felt252_based::SerdeImpl::, core::tuple::DeserializeTupleNext::<[core::integer::u32; 1], core::fixed_size_array::TupleSplitFixedSizedArraySized1::, core::serde::into_felt252_based::SerdeImpl::, core::tuple::DeserializeTupleBaseFixedSizedArray::, core::integer::u32Drop>, core::integer::u32Drop>, core::integer::u32Drop>>, core::tuple::SerdeTuple::<[core::integer::u16; 2], core::fixed_size_array::TupleSnapForwardFixedSizedArraySized2::, core::tuple::SerializeTupleNext::<[@core::integer::u16; 2], core::fixed_size_array::TupleSplitFixedSizedArraySized2::<@core::integer::u16>, core::tuple::SerdeBasedSerializeTuple::>, core::tuple::SerializeTupleNext::<[@core::integer::u16; 1], core::fixed_size_array::TupleSplitFixedSizedArraySized1::<@core::integer::u16>, core::tuple::SerdeBasedSerializeTuple::>, core::tuple::SerializeTupleBaseFixedSizedArray::, core::fixed_size_array::FixedSizedArrayDrop::<@core::integer::u16, core::traits::SnapshotDrop::, 0>>, core::fixed_size_array::FixedSizedArrayDrop::<@core::integer::u16, core::traits::SnapshotDrop::, 1>>, core::tuple::DeserializeTupleNext::<[core::integer::u16; 2], core::fixed_size_array::TupleSplitFixedSizedArraySized2::, core::serde::into_felt252_based::SerdeImpl::, core::tuple::DeserializeTupleNext::<[core::integer::u16; 1], core::fixed_size_array::TupleSplitFixedSizedArraySized1::, core::serde::into_felt252_based::SerdeImpl::, core::tuple::DeserializeTupleBaseFixedSizedArray::, core::integer::u16Drop>, core::integer::u16Drop>>>::deserialize>" + ], + [ + 149, + "enum_match>>" + ], + [150, "drop>"], + [ + 151, + "snapshot_take>" + ], + [152, "enum_match>"], + [153, "struct_deconstruct>"], + [ + 154, + "function_call), (core::integer::u16, core::array::Array::), core::tuple::SerdeTuple::<(core::integer::u32, core::array::Array::), core::tuple::TupleSnapForwardTupleSize2::>, core::tuple::SerializeTupleNext::<(@core::integer::u32, @core::array::Array::), core::tuple::TupleSplitTupleSize2::<@core::integer::u32, @core::array::Array::>, core::tuple::SerdeBasedSerializeTuple::>, core::tuple::SerializeTupleNext::<(@core::array::Array::,), core::tuple::TupleSplitTupleSize1::<@core::array::Array::>, core::tuple::SerdeBasedSerializeTuple::, core::array::ArraySerde::, core::integer::u32Drop>>, core::tuple::SerializeTupleBaseTuple, core::tuple::TupleSize0Drop>, core::tuple::TupleNextDrop::<(@core::array::Array::,), core::tuple::TupleSplitTupleSize1::<@core::array::Array::>, core::tuple::IsTupleTupleSize1::<@core::array::Array::>, core::traits::SnapshotDrop::>, core::tuple::TupleSize0Drop>>, core::tuple::DeserializeTupleNext::<(core::integer::u32, core::array::Array::), core::tuple::TupleSplitTupleSize2::>, core::serde::into_felt252_based::SerdeImpl::, core::tuple::DeserializeTupleNext::<(core::array::Array::,), core::tuple::TupleSplitTupleSize1::>, core::array::ArraySerde::, core::integer::u32Drop>, core::tuple::DeserializeTupleBaseTuple, core::array::ArrayDrop::>, core::integer::u32Drop>>, core::tuple::SerdeTuple::<(core::integer::u16, core::array::Array::), core::tuple::TupleSnapForwardTupleSize2::>, core::tuple::SerializeTupleNext::<(@core::integer::u16, @core::array::Array::), core::tuple::TupleSplitTupleSize2::<@core::integer::u16, @core::array::Array::>, core::tuple::SerdeBasedSerializeTuple::>, core::tuple::SerializeTupleNext::<(@core::array::Array::,), core::tuple::TupleSplitTupleSize1::<@core::array::Array::>, core::tuple::SerdeBasedSerializeTuple::, core::array::ArraySerde::, core::integer::u16Drop>>, core::tuple::SerializeTupleBaseTuple, core::tuple::TupleSize0Drop>, core::tuple::TupleNextDrop::<(@core::array::Array::,), core::tuple::TupleSplitTupleSize1::<@core::array::Array::>, core::tuple::IsTupleTupleSize1::<@core::array::Array::>, core::traits::SnapshotDrop::>, core::tuple::TupleSize0Drop>>, core::tuple::DeserializeTupleNext::<(core::integer::u16, core::array::Array::), core::tuple::TupleSplitTupleSize2::>, core::serde::into_felt252_based::SerdeImpl::, core::tuple::DeserializeTupleNext::<(core::array::Array::,), core::tuple::TupleSplitTupleSize1::>, core::array::ArraySerde::, core::integer::u16Drop>, core::tuple::DeserializeTupleBaseTuple, core::array::ArrayDrop::>, core::integer::u16Drop>>>::deserialize>" + ], + [ + 155, + "enum_match, core::option::Option::), (core::integer::u16, core::array::Array::)>>)>>" + ], + [ + 156, + "struct_deconstruct, core::option::Option::), (core::integer::u16, core::array::Array::)>>>>" + ], + [ + 157, + "enum_match), (core::integer::u16, core::array::Array::)>>>" + ], + [ + 158, + "drop), (core::integer::u16, core::array::Array::)>>" + ], + [ + 159, + "snapshot_take), (core::integer::u16, core::array::Array::)>>" + ], + [ + 160, + "enum_snapshot_match), (core::integer::u16, core::array::Array::)>>" + ], + [161, "struct_snapshot_deconstruct>>"], + [ + 162, + "function_call, core::integer::u32, core::result::ResultSerde::, core::serde::into_felt252_based::SerdeImpl::>, core::serde::into_felt252_based::SerdeImpl::>::deserialize>" + ], + [ + 163, + "enum_match, core::integer::u32>>>" + ], + [ + 164, + "drop, core::integer::u32>>" + ], + [ + 165, + "snapshot_take, core::integer::u32>>" + ], + [ + 166, + "enum_match, core::integer::u32>>" + ], + [ + 167, + "function_call, core::serde::into_felt252_based::SerdeImpl::, core::option::OptionSerde::>>::deserialize>" + ], + [ + 168, + "enum_match>>>" + ], + [ + 169, + "drop>>" + ], + [ + 170, + "snapshot_take>>" + ], + [ + 171, + "enum_match>>" + ], + [172, "enum_match>"], + [173, "u64_try_from_felt252"], + [174, "u32_try_from_felt252"], + [175, "struct_construct"], + [176, "snapshot_take"], + [177, "drop"], + [178, "store_temp"], + [179, "function_call"], + [180, "enum_match>"], + [181, "drop"], + [182, "snapshot_take"], + [183, "dup"], + [184, "struct_deconstruct"], + [185, "function_call"], + [186, "enum_match>"], + [187, "drop"], + [188, "snapshot_take"], + [189, "dup"], + [190, "struct_deconstruct"], + [191, "drop>"], + [192, "struct_deconstruct>"], + [193, "function_call"], + [ + 194, + "enum_match, core::option::Option::)>>" + ], + [ + 195, + "struct_deconstruct, core::option::Option::>>" + ], + [196, "enum_match>"], + [197, "drop"], + [198, "snapshot_take"], + [199, "dup"], + [200, "struct_deconstruct"], + [201, "drop>"], + [202, "dup>"], + [203, "rename>"], + [204, "struct_deconstruct>"], + [205, "function_call"], + [206, "enum_match>"], + [207, "drop"], + [208, "snapshot_take"], + [209, "dup"], + [210, "struct_deconstruct"], + [211, "drop>"], + [212, "struct_deconstruct>"], + [213, "function_call"], + [214, "enum_match>"], + [215, "drop"], + [216, "snapshot_take"], + [217, "dup"], + [218, "struct_deconstruct"], + [219, "drop>"], + [220, "enum_match>"], + [221, "u128s_from_felt252"], + [ + 222, + "function_call, core::serde::into_felt252_based::SerdeImpl::>::deserialize>" + ], + [ + 223, + "enum_match>>" + ], + [224, "drop"], + [225, "drop>"], + [226, "struct_construct"], + [227, "snapshot_take"], + [228, "drop"], + [229, "store_temp"], + [230, "dup"], + [231, "struct_deconstruct"], + [232, "rename"], + [233, "u128_to_felt252"], + [234, "enum_match>"], + [ + 235, + "const_as_immediate>" + ], + [236, "function_call"], + [ + 237, + "const_as_immediate>" + ], + [238, "const_as_immediate>"], + [239, "array_new"], + [240, "store_temp>"], + [ + 241, + "function_call, core::integer::u8Drop>>" + ], + [ + 242, + "enum_match, core::option::Option::>)>>" + ], + [ + 243, + "struct_deconstruct, core::option::Option::>>>" + ], + [244, "enum_match>>"], + [245, "enum_init>, 0>"], + [ + 246, + "enum_init>>, 0>" + ], + [ + 247, + "struct_construct, core::option::Option::>>>>" + ], + [ + 248, + "enum_init, core::option::Option::>>)>, 0>" + ], + [ + 249, + "store_temp, core::option::Option::>>)>>" + ], + [250, "rename"], + [ + 251, + "enum_init, core::option::Option::>>)>, 1>" + ], + [ + 252, + "enum_init>>, 1>" + ], + [253, "enum_init>, 1>"], + [254, "struct_deconstruct>"], + [255, "array_snapshot_pop_front"], + [256, "unbox"], + [257, "drop>>"], + [258, "struct_construct, Unit>>"], + [259, "enum_init, ())>, 0>"], + [260, "store_temp, ())>>"], + [261, "drop>"], + [262, "enum_init, ())>, 1>"], + [263, "struct_construct>"], + [ + 264, + "function_call), core::tuple::TupleSplitTupleSize2::>, core::serde::into_felt252_based::SerdeImpl::, core::tuple::DeserializeTupleNext::<(core::array::Array::,), core::tuple::TupleSplitTupleSize1::>, core::array::ArraySerde::, core::integer::u32Drop>, core::tuple::DeserializeTupleBaseTuple, core::array::ArrayDrop::>, core::integer::u32Drop>::deserialize>" + ], + [ + 265, + "enum_match, core::option::Option::<(core::integer::u32, core::array::Array::)>)>>" + ], + [ + 266, + "struct_deconstruct, core::option::Option::<(core::integer::u32, core::array::Array::)>>>" + ], + [ + 267, + "enum_match)>>" + ], + [ + 268, + "enum_init)>, 0>" + ], + [ + 269, + "enum_init)>>, 0>" + ], + [ + 270, + "struct_construct, core::option::Option::)>>>>" + ], + [ + 271, + "enum_init, core::option::Option::)>>)>, 0>" + ], + [ + 272, + "store_temp, core::option::Option::)>>)>>" + ], + [ + 273, + "enum_init)>>, 1>" + ], + [ + 274, + "enum_init, core::option::Option::)>>)>, 1>" + ], + [ + 275, + "enum_init)>, 1>" + ], + [276, "array_snapshot_pop_front"], + [277, "unbox"], + [278, "drop>>"], + [279, "enum_init>, 0>"], + [ + 280, + "enum_init>>, 0>" + ], + [ + 281, + "store_temp>>>" + ], + [282, "rename>>"], + [283, "enum_init>, 1>"], + [ + 284, + "enum_init>>, 1>" + ], + [285, "u8_try_from_felt252"], + [286, "enum_init, 0>"], + [287, "enum_init, 1>"], + [ + 288, + "enum_init>>, 0>" + ], + [ + 289, + "struct_construct, core::option::Option::>>>>" + ], + [ + 290, + "enum_init, core::option::Option::>>)>, 0>" + ], + [ + 291, + "store_temp, core::option::Option::>>)>>" + ], + [292, "array_append>"], + [ + 293, + "enum_init>>, 1>" + ], + [ + 294, + "enum_init, core::option::Option::>>)>, 1>" + ], + [295, "struct_deconstruct>>"], + [296, "array_snapshot_pop_front>"], + [297, "unbox>"], + [298, "drop>>>"], + [299, "drop>>"], + [300, "enum_init, 0>"], + [301, "enum_init>, 0>"], + [302, "store_temp>>"], + [303, "enum_init, 1>"], + [304, "enum_init>, 1>"], + [ + 305, + "enum_init, core::array::Array::>, 0>" + ], + [ + 306, + "enum_init, core::array::Array::>>, 0>" + ], + [ + 307, + "struct_construct, core::option::Option::, core::array::Array::>>>>" + ], + [ + 308, + "enum_init, core::option::Option::, core::array::Array::>>)>, 0>" + ], + [ + 309, + "store_temp, core::option::Option::, core::array::Array::>>)>>" + ], + [ + 310, + "enum_init, core::option::Option::, core::array::Array::>>)>, 1>" + ], + [311, "array_new"], + [312, "store_temp>"], + [ + 313, + "function_call, core::integer::u16Drop>>" + ], + [ + 314, + "enum_match, core::option::Option::>)>>" + ], + [ + 315, + "struct_deconstruct, core::option::Option::>>>" + ], + [316, "enum_match>>"], + [ + 317, + "enum_init, core::array::Array::>, 1>" + ], + [ + 318, + "enum_init, core::array::Array::>>, 1>" + ], + [319, "struct_deconstruct>"], + [320, "array_snapshot_pop_front"], + [321, "unbox"], + [322, "drop>>"], + [323, "drop>"], + [324, "dup>>"], + [ + 325, + "enum_init, 0>" + ], + [ + 326, + "enum_init>, 0>" + ], + [ + 327, + "store_temp>>" + ], + [ + 328, + "enum_init>, 1>" + ], + [329, "struct_construct>"], + [ + 330, + "enum_init, 1>" + ], + [ + 331, + "enum_init), (core::integer::u16, core::array::Array::)>, 0>" + ], + [ + 332, + "enum_init), (core::integer::u16, core::array::Array::)>>, 0>" + ], + [ + 333, + "struct_construct, core::option::Option::), (core::integer::u16, core::array::Array::)>>>>" + ], + [ + 334, + "enum_init, core::option::Option::), (core::integer::u16, core::array::Array::)>>)>, 0>" + ], + [ + 335, + "store_temp, core::option::Option::), (core::integer::u16, core::array::Array::)>>)>>" + ], + [ + 336, + "enum_init, core::option::Option::), (core::integer::u16, core::array::Array::)>>)>, 1>" + ], + [ + 337, + "function_call), core::tuple::TupleSplitTupleSize2::>, core::serde::into_felt252_based::SerdeImpl::, core::tuple::DeserializeTupleNext::<(core::array::Array::,), core::tuple::TupleSplitTupleSize1::>, core::array::ArraySerde::, core::integer::u16Drop>, core::tuple::DeserializeTupleBaseTuple, core::array::ArrayDrop::>, core::integer::u16Drop>::deserialize>" + ], + [ + 338, + "enum_match, core::option::Option::<(core::integer::u16, core::array::Array::)>)>>" + ], + [ + 339, + "struct_deconstruct, core::option::Option::<(core::integer::u16, core::array::Array::)>>>" + ], + [ + 340, + "enum_match)>>" + ], + [ + 341, + "enum_init), (core::integer::u16, core::array::Array::)>, 1>" + ], + [ + 342, + "enum_init), (core::integer::u16, core::array::Array::)>>, 1>" + ], + [ + 343, + "enum_init, core::integer::u32>, 0>" + ], + [ + 344, + "enum_init, core::integer::u32>>, 0>" + ], + [ + 345, + "store_temp, core::integer::u32>>>" + ], + [ + 346, + "enum_init, core::integer::u32>>, 1>" + ], + [ + 347, + "enum_init, core::integer::u32>, 1>" + ], + [ + 348, + "enum_init>, 0>" + ], + [ + 349, + "enum_init>>, 0>" + ], + [ + 350, + "store_temp>>>" + ], + [351, "enum_init, 0>"], + [ + 352, + "enum_init>, 1>" + ], + [353, "enum_init, 1>"], + [ + 354, + "enum_init>>, 1>" + ], + [355, "struct_construct"], + [356, "enum_init, 0>"], + [357, "store_temp>"], + [358, "enum_init, 1>"], + [ + 359, + "function_call, core::serde::into_felt252_based::SerdeImpl::, core::tuple::DeserializeTupleNext::<(core::integer::u32, core::integer::u64), core::tuple::TupleSplitTupleSize2::, core::serde::into_felt252_based::SerdeImpl::, core::tuple::DeserializeTupleNext::<(core::integer::u64,), core::tuple::TupleSplitTupleSize1::, core::serde::into_felt252_based::SerdeImpl::, core::tuple::DeserializeTupleBaseTuple, core::integer::u64Drop>, core::integer::u32Drop>, core::integer::u16Drop>::deserialize>" + ], + [ + 360, + "enum_match>" + ], + [361, "struct_deconstruct>"], + [362, "struct_construct>"], + [363, "struct_construct"], + [364, "enum_init, 0>"], + [365, "store_temp>"], + [366, "drop"], + [367, "enum_init, 1>"], + [368, "alloc_local"], + [369, "finalize_locals"], + [370, "store_local"], + [371, "array_new"], + [372, "store_temp>"], + [ + 373, + "function_call, core::integer::u32Drop>>" + ], + [ + 374, + "enum_match, core::option::Option::>)>>" + ], + [ + 375, + "struct_deconstruct, core::option::Option::>>>" + ], + [376, "enum_match>>"], + [377, "snapshot_take>"], + [378, "drop>"], + [379, "struct_construct"], + [380, "enum_init, 0>"], + [ + 381, + "struct_construct, core::option::Option::>>" + ], + [ + 382, + "enum_init, core::option::Option::)>, 0>" + ], + [ + 383, + "store_temp, core::option::Option::)>>" + ], + [ + 384, + "enum_init, core::option::Option::)>, 1>" + ], + [385, "enum_init, 1>"], + [386, "drop>"], + [ + 387, + "function_call, core::serde::into_felt252_based::SerdeImpl::, core::tuple::DeserializeTupleNext::<[core::integer::u16; 2], core::fixed_size_array::TupleSplitFixedSizedArraySized2::, core::serde::into_felt252_based::SerdeImpl::, core::tuple::DeserializeTupleNext::<[core::integer::u16; 1], core::fixed_size_array::TupleSplitFixedSizedArraySized1::, core::serde::into_felt252_based::SerdeImpl::, core::tuple::DeserializeTupleBaseFixedSizedArray::, core::integer::u16Drop>, core::integer::u16Drop>, core::integer::u16Drop>::deserialize>" + ], + [388, "enum_match>"], + [389, "struct_deconstruct>"], + [390, "struct_construct>"], + [391, "struct_construct"], + [392, "enum_init, 0>"], + [393, "store_temp>"], + [394, "enum_init, 1>"], + [395, "enum_init, 0>"], + [396, "struct_construct"], + [397, "enum_init, 0>"], + [398, "store_temp>"], + [399, "enum_init, 1>"], + [400, "enum_init, 1>"], + [401, "enum_init, 0>"], + [ + 402, + "enum_init>, 0>" + ], + [ + 403, + "store_temp>>" + ], + [404, "enum_init, 1>"], + [ + 405, + "enum_init>, 1>" + ], + [406, "struct_construct"], + [407, "struct_construct>>"], + [408, "store_temp>>"], + [ + 409, + "struct_construct, core::option::Option::>>>" + ], + [ + 410, + "enum_init, core::option::Option::>)>, 0>" + ], + [ + 411, + "store_temp, core::option::Option::>)>>" + ], + [412, "array_append"], + [413, "drop>"], + [ + 414, + "enum_init, core::option::Option::>)>, 1>" + ], + [415, "struct_construct>>"], + [ + 416, + "struct_construct, core::option::Option::<(core::integer::u32, core::array::Array::)>>>" + ], + [ + 417, + "enum_init, core::option::Option::<(core::integer::u32, core::array::Array::)>)>, 0>" + ], + [ + 418, + "store_temp, core::option::Option::<(core::integer::u32, core::array::Array::)>)>>" + ], + [ + 419, + "enum_init, core::option::Option::<(core::integer::u32, core::array::Array::)>)>, 1>" + ], + [420, "enum_init>, 0>"], + [ + 421, + "struct_construct, core::option::Option::>>>" + ], + [ + 422, + "enum_init, core::option::Option::>)>, 0>" + ], + [ + 423, + "store_temp, core::option::Option::>)>>" + ], + [424, "array_append"], + [425, "drop>"], + [426, "enum_init>, 1>"], + [ + 427, + "enum_init, core::option::Option::>)>, 1>" + ], + [428, "struct_construct>>"], + [ + 429, + "enum_init)>, 0>" + ], + [ + 430, + "struct_construct, core::option::Option::<(core::integer::u16, core::array::Array::)>>>" + ], + [ + 431, + "enum_init, core::option::Option::<(core::integer::u16, core::array::Array::)>)>, 0>" + ], + [ + 432, + "store_temp, core::option::Option::<(core::integer::u16, core::array::Array::)>)>>" + ], + [ + 433, + "enum_init, core::option::Option::<(core::integer::u16, core::array::Array::)>)>, 1>" + ], + [ + 434, + "enum_init)>, 1>" + ], + [435, "struct_construct>"], + [ + 436, + "enum_init, 0>" + ], + [ + 437, + "store_temp>" + ], + [ + 438, + "enum_init, 1>" + ], + [439, "enum_init>, 0>"], + [ + 440, + "struct_construct, core::option::Option::>>>" + ], + [ + 441, + "enum_init, core::option::Option::>)>, 0>" + ], + [ + 442, + "store_temp, core::option::Option::>)>>" + ], + [443, "array_append"], + [444, "enum_init>, 1>"], + [ + 445, + "enum_init, core::option::Option::>)>, 1>" + ], + [446, "struct_construct>"], + [447, "enum_init, 0>"], + [448, "store_temp>"], + [449, "enum_init, 1>"] + ], + "user_func_names": [ + [0, "enums::test_option::__wrapper__TestOption__option_bn"], + [1, "enums::test_option::__wrapper__TestOption__option_array"], + [2, "enums::test_option::__wrapper__TestOption__option_fixed_array"], + [3, "enums::test_option::__wrapper__TestOption__option_tuple"], + [4, "enums::test_option::__wrapper__TestOption__option_option_bn"], + [5, "enums::test_option::__wrapper__TestOption__option_result"], + [6, "enums::test_option::__wrapper__TestOption__array_option_bn"], + [7, "enums::test_option::__wrapper__TestOption__write_option_bn"], + [8, "enums::test_option::__wrapper__TestOption__option_point"], + [9, "enums::test_option::__wrapper__TestOption__result_bn"], + [10, "enums::test_option::__wrapper__TestOption__result_array"], + [11, "enums::test_option::__wrapper__TestOption__result_fixed_array"], + [12, "enums::test_option::__wrapper__TestOption__result_tuple"], + [13, "enums::test_option::__wrapper__TestOption__result_result_bn"], + [14, "enums::test_option::__wrapper__TestOption__result_option"], + [15, "enums::test_option::__wrapper__TestOption__write_result_bn"], + [16, "enums::test_option::__wrapper__TestOption__struct_point"], + [17, "enums::test_option::__wrapper__TestOption__struct_point2"], + [18, "enums::test_option::__wrapper__TestOption__struct_Empty"], + [19, "enums::test_option::__wrapper__TestOption__struct_Cat"], + [20, "enums::test_option::__wrapper__TestOption__struct_Dog"], + [21, "enums::test_option::__wrapper__TestOption__struct_Horse"], + [22, "enums::test_option::__wrapper__TestOption__struct_Truck"], + [23, "enums::test_option::__wrapper__TestOption__struct_Destruction"], + [ + 24, + "core::panic_with_const_felt252::<7733229381460288120802334208475838166080759535023995805565484692595>" + ], + [ + 25, + "core::panic_with_const_felt252::<485748461484230571791265682659113160264223489397539653310998840191492913>" + ], + [26, "core::panic_with_const_felt252::<375233589013918064796019>"], + [ + 27, + "core::option::OptionSerde::, core::array::ArraySerde::, core::integer::u8Drop>>::deserialize" + ], + [ + 28, + "core::array::serialize_array_helper::, core::integer::u8Drop>" + ], + [ + 29, + "core::tuple::DeserializeTupleNext::<[core::integer::u32; 3], core::fixed_size_array::TupleSplitFixedSizedArraySized3::, core::serde::into_felt252_based::SerdeImpl::, core::tuple::DeserializeTupleNext::<[core::integer::u32; 2], core::fixed_size_array::TupleSplitFixedSizedArraySized2::, core::serde::into_felt252_based::SerdeImpl::, core::tuple::DeserializeTupleNext::<[core::integer::u32; 1], core::fixed_size_array::TupleSplitFixedSizedArraySized1::, core::serde::into_felt252_based::SerdeImpl::, core::tuple::DeserializeTupleBaseFixedSizedArray::, core::integer::u32Drop>, core::integer::u32Drop>, core::integer::u32Drop>::deserialize" + ], + [ + 30, + "core::option::OptionSerde::<(core::integer::u32, core::array::Array::), core::tuple::SerdeTuple::<(core::integer::u32, core::array::Array::), core::tuple::TupleSnapForwardTupleSize2::>, core::tuple::SerializeTupleNext::<(@core::integer::u32, @core::array::Array::), core::tuple::TupleSplitTupleSize2::<@core::integer::u32, @core::array::Array::>, core::tuple::SerdeBasedSerializeTuple::>, core::tuple::SerializeTupleNext::<(@core::array::Array::,), core::tuple::TupleSplitTupleSize1::<@core::array::Array::>, core::tuple::SerdeBasedSerializeTuple::, core::array::ArraySerde::, core::integer::u32Drop>>, core::tuple::SerializeTupleBaseTuple, core::tuple::TupleSize0Drop>, core::tuple::TupleNextDrop::<(@core::array::Array::,), core::tuple::TupleSplitTupleSize1::<@core::array::Array::>, core::tuple::IsTupleTupleSize1::<@core::array::Array::>, core::traits::SnapshotDrop::>, core::tuple::TupleSize0Drop>>, core::tuple::DeserializeTupleNext::<(core::integer::u32, core::array::Array::), core::tuple::TupleSplitTupleSize2::>, core::serde::into_felt252_based::SerdeImpl::, core::tuple::DeserializeTupleNext::<(core::array::Array::,), core::tuple::TupleSplitTupleSize1::>, core::array::ArraySerde::, core::integer::u32Drop>, core::tuple::DeserializeTupleBaseTuple, core::array::ArrayDrop::>, core::integer::u32Drop>>>::deserialize" + ], + [ + 31, + "core::array::serialize_array_helper::, core::integer::u32Drop>" + ], + [ + 32, + "core::option::OptionSerde::, core::option::OptionSerde::>>::deserialize" + ], + [ + 33, + "core::result::ResultSerde::, core::serde::into_felt252_based::SerdeImpl::>::deserialize" + ], + [ + 34, + "core::array::deserialize_array_helper::, core::option::OptionSerde::>, core::option::OptionDrop::>" + ], + [ + 35, + "core::array::serialize_array_helper::, core::option::OptionSerde::>, core::option::OptionDrop::>" + ], + [36, "core::option::OptionSerde::::deserialize"], + [ + 37, + "core::result::ResultSerde::, core::array::Array::, core::array::ArraySerde::, core::integer::u8Drop>, core::array::ArraySerde::, core::integer::u16Drop>>::deserialize" + ], + [ + 38, + "core::array::serialize_array_helper::, core::integer::u16Drop>" + ], + [ + 39, + "core::result::ResultSerde::<[core::integer::u32; 3], [core::integer::u16; 2], core::tuple::SerdeTuple::<[core::integer::u32; 3], core::fixed_size_array::TupleSnapForwardFixedSizedArraySized3::, core::tuple::SerializeTupleNext::<[@core::integer::u32; 3], core::fixed_size_array::TupleSplitFixedSizedArraySized3::<@core::integer::u32>, core::tuple::SerdeBasedSerializeTuple::>, core::tuple::SerializeTupleNext::<[@core::integer::u32; 2], core::fixed_size_array::TupleSplitFixedSizedArraySized2::<@core::integer::u32>, core::tuple::SerdeBasedSerializeTuple::>, core::tuple::SerializeTupleNext::<[@core::integer::u32; 1], core::fixed_size_array::TupleSplitFixedSizedArraySized1::<@core::integer::u32>, core::tuple::SerdeBasedSerializeTuple::>, core::tuple::SerializeTupleBaseFixedSizedArray::, core::fixed_size_array::FixedSizedArrayDrop::<@core::integer::u32, core::traits::SnapshotDrop::, 0>>, core::fixed_size_array::FixedSizedArrayDrop::<@core::integer::u32, core::traits::SnapshotDrop::, 1>>, core::fixed_size_array::FixedSizedArrayDrop::<@core::integer::u32, core::traits::SnapshotDrop::, 2>>, core::tuple::DeserializeTupleNext::<[core::integer::u32; 3], core::fixed_size_array::TupleSplitFixedSizedArraySized3::, core::serde::into_felt252_based::SerdeImpl::, core::tuple::DeserializeTupleNext::<[core::integer::u32; 2], core::fixed_size_array::TupleSplitFixedSizedArraySized2::, core::serde::into_felt252_based::SerdeImpl::, core::tuple::DeserializeTupleNext::<[core::integer::u32; 1], core::fixed_size_array::TupleSplitFixedSizedArraySized1::, core::serde::into_felt252_based::SerdeImpl::, core::tuple::DeserializeTupleBaseFixedSizedArray::, core::integer::u32Drop>, core::integer::u32Drop>, core::integer::u32Drop>>, core::tuple::SerdeTuple::<[core::integer::u16; 2], core::fixed_size_array::TupleSnapForwardFixedSizedArraySized2::, core::tuple::SerializeTupleNext::<[@core::integer::u16; 2], core::fixed_size_array::TupleSplitFixedSizedArraySized2::<@core::integer::u16>, core::tuple::SerdeBasedSerializeTuple::>, core::tuple::SerializeTupleNext::<[@core::integer::u16; 1], core::fixed_size_array::TupleSplitFixedSizedArraySized1::<@core::integer::u16>, core::tuple::SerdeBasedSerializeTuple::>, core::tuple::SerializeTupleBaseFixedSizedArray::, core::fixed_size_array::FixedSizedArrayDrop::<@core::integer::u16, core::traits::SnapshotDrop::, 0>>, core::fixed_size_array::FixedSizedArrayDrop::<@core::integer::u16, core::traits::SnapshotDrop::, 1>>, core::tuple::DeserializeTupleNext::<[core::integer::u16; 2], core::fixed_size_array::TupleSplitFixedSizedArraySized2::, core::serde::into_felt252_based::SerdeImpl::, core::tuple::DeserializeTupleNext::<[core::integer::u16; 1], core::fixed_size_array::TupleSplitFixedSizedArraySized1::, core::serde::into_felt252_based::SerdeImpl::, core::tuple::DeserializeTupleBaseFixedSizedArray::, core::integer::u16Drop>, core::integer::u16Drop>>>::deserialize" + ], + [ + 40, + "core::result::ResultSerde::<(core::integer::u32, core::array::Array::), (core::integer::u16, core::array::Array::), core::tuple::SerdeTuple::<(core::integer::u32, core::array::Array::), core::tuple::TupleSnapForwardTupleSize2::>, core::tuple::SerializeTupleNext::<(@core::integer::u32, @core::array::Array::), core::tuple::TupleSplitTupleSize2::<@core::integer::u32, @core::array::Array::>, core::tuple::SerdeBasedSerializeTuple::>, core::tuple::SerializeTupleNext::<(@core::array::Array::,), core::tuple::TupleSplitTupleSize1::<@core::array::Array::>, core::tuple::SerdeBasedSerializeTuple::, core::array::ArraySerde::, core::integer::u32Drop>>, core::tuple::SerializeTupleBaseTuple, core::tuple::TupleSize0Drop>, core::tuple::TupleNextDrop::<(@core::array::Array::,), core::tuple::TupleSplitTupleSize1::<@core::array::Array::>, core::tuple::IsTupleTupleSize1::<@core::array::Array::>, core::traits::SnapshotDrop::>, core::tuple::TupleSize0Drop>>, core::tuple::DeserializeTupleNext::<(core::integer::u32, core::array::Array::), core::tuple::TupleSplitTupleSize2::>, core::serde::into_felt252_based::SerdeImpl::, core::tuple::DeserializeTupleNext::<(core::array::Array::,), core::tuple::TupleSplitTupleSize1::>, core::array::ArraySerde::, core::integer::u32Drop>, core::tuple::DeserializeTupleBaseTuple, core::array::ArrayDrop::>, core::integer::u32Drop>>, core::tuple::SerdeTuple::<(core::integer::u16, core::array::Array::), core::tuple::TupleSnapForwardTupleSize2::>, core::tuple::SerializeTupleNext::<(@core::integer::u16, @core::array::Array::), core::tuple::TupleSplitTupleSize2::<@core::integer::u16, @core::array::Array::>, core::tuple::SerdeBasedSerializeTuple::>, core::tuple::SerializeTupleNext::<(@core::array::Array::,), core::tuple::TupleSplitTupleSize1::<@core::array::Array::>, core::tuple::SerdeBasedSerializeTuple::, core::array::ArraySerde::, core::integer::u16Drop>>, core::tuple::SerializeTupleBaseTuple, core::tuple::TupleSize0Drop>, core::tuple::TupleNextDrop::<(@core::array::Array::,), core::tuple::TupleSplitTupleSize1::<@core::array::Array::>, core::tuple::IsTupleTupleSize1::<@core::array::Array::>, core::traits::SnapshotDrop::>, core::tuple::TupleSize0Drop>>, core::tuple::DeserializeTupleNext::<(core::integer::u16, core::array::Array::), core::tuple::TupleSplitTupleSize2::>, core::serde::into_felt252_based::SerdeImpl::, core::tuple::DeserializeTupleNext::<(core::array::Array::,), core::tuple::TupleSplitTupleSize1::>, core::array::ArraySerde::, core::integer::u16Drop>, core::tuple::DeserializeTupleBaseTuple, core::array::ArrayDrop::>, core::integer::u16Drop>>>::deserialize" + ], + [ + 41, + "core::result::ResultSerde::, core::integer::u32, core::result::ResultSerde::, core::serde::into_felt252_based::SerdeImpl::>, core::serde::into_felt252_based::SerdeImpl::>::deserialize" + ], + [ + 42, + "core::result::ResultSerde::, core::serde::into_felt252_based::SerdeImpl::, core::option::OptionSerde::>>::deserialize" + ], + [43, "enums::Point2Serde::deserialize"], + [44, "enums::CatSerde::deserialize"], + [45, "enums::DogSerde::deserialize"], + [46, "enums::HorseSerde::deserialize"], + [47, "enums::TruckSerde::deserialize"], + [ + 48, + "core::result::ResultSerde::, core::serde::into_felt252_based::SerdeImpl::>::deserialize" + ], + [49, "core::panic_with_felt252"], + [ + 50, + "core::array::deserialize_array_helper::, core::integer::u8Drop>" + ], + [ + 51, + "core::tuple::DeserializeTupleNext::<(core::integer::u32, core::array::Array::), core::tuple::TupleSplitTupleSize2::>, core::serde::into_felt252_based::SerdeImpl::, core::tuple::DeserializeTupleNext::<(core::array::Array::,), core::tuple::TupleSplitTupleSize1::>, core::array::ArraySerde::, core::integer::u32Drop>, core::tuple::DeserializeTupleBaseTuple, core::array::ArrayDrop::>, core::integer::u32Drop>::deserialize" + ], + [ + 52, + "core::array::deserialize_array_helper::, core::integer::u16Drop>" + ], + [ + 53, + "core::tuple::DeserializeTupleNext::<(core::integer::u16, core::array::Array::), core::tuple::TupleSplitTupleSize2::>, core::serde::into_felt252_based::SerdeImpl::, core::tuple::DeserializeTupleNext::<(core::array::Array::,), core::tuple::TupleSplitTupleSize1::>, core::array::ArraySerde::, core::integer::u16Drop>, core::tuple::DeserializeTupleBaseTuple, core::array::ArrayDrop::>, core::integer::u16Drop>::deserialize" + ], + [ + 54, + "core::tuple::DeserializeTupleNext::<(core::integer::u16, core::integer::u32, core::integer::u64), core::tuple::TupleSplitTupleSize3::, core::serde::into_felt252_based::SerdeImpl::, core::tuple::DeserializeTupleNext::<(core::integer::u32, core::integer::u64), core::tuple::TupleSplitTupleSize2::, core::serde::into_felt252_based::SerdeImpl::, core::tuple::DeserializeTupleNext::<(core::integer::u64,), core::tuple::TupleSplitTupleSize1::, core::serde::into_felt252_based::SerdeImpl::, core::tuple::DeserializeTupleBaseTuple, core::integer::u64Drop>, core::integer::u32Drop>, core::integer::u16Drop>::deserialize" + ], + [ + 55, + "core::array::deserialize_array_helper::, core::integer::u32Drop>" + ], + [ + 56, + "core::tuple::DeserializeTupleNext::<[core::integer::u16; 3], core::fixed_size_array::TupleSplitFixedSizedArraySized3::, core::serde::into_felt252_based::SerdeImpl::, core::tuple::DeserializeTupleNext::<[core::integer::u16; 2], core::fixed_size_array::TupleSplitFixedSizedArraySized2::, core::serde::into_felt252_based::SerdeImpl::, core::tuple::DeserializeTupleNext::<[core::integer::u16; 1], core::fixed_size_array::TupleSplitFixedSizedArraySized1::, core::serde::into_felt252_based::SerdeImpl::, core::tuple::DeserializeTupleBaseFixedSizedArray::, core::integer::u16Drop>, core::integer::u16Drop>, core::integer::u16Drop>::deserialize" + ] + ] + }, + "contract_class_version": "0.1.0", + "entry_points_by_type": { + "EXTERNAL": [ + { + "selector": "0x462b1b2d0b30d80be98c4aec16f07b72212bbef41ac45680ed94e954a6aa9", + "function_idx": 3 + }, + { + "selector": "0x1feb29d0d6e8c4ba7a71db4cdaa24898ddd8bb350e724f844145997afee9c9", + "function_idx": 19 + }, + { + "selector": "0x78664aa9f94155a6e6acf3aa0add2ce6fcf36349488671af774d676363e0c7", + "function_idx": 1 + }, + { + "selector": "0xe1eafdb08801cfc555a49e25dabfd7aa4ed7b2dd5c7e2c5a6930eac6d1b54c", + "function_idx": 17 + }, + { + "selector": "0x106f418ef7e2ea39027bcde47d5f0a54ed68fe34aa69b24c3a162def52a841b", + "function_idx": 13 + }, + { + "selector": "0x11fdea672ded06956bdd64d89fd111661735e88595f88c1199f648fe3c2dd15", + "function_idx": 20 + }, + { + "selector": "0x126587e6b203b756642ff0bd9f92e84ef609cf2a02b516fbf2d94f36a73b83e", + "function_idx": 6 + }, + { + "selector": "0x1303ef00936936490ad20afec7fbe2bf74669665b2a2249945ff561debad733", + "function_idx": 7 + }, + { + "selector": "0x13d3b1aae5fa65a483db7c67c98dca6aac27353970caa114d112c4b6de8ec73", + "function_idx": 11 + }, + { + "selector": "0x145f0cd3e37db4233ce4d6b84935d9b32387d72eb53713e78e2ec56cc6fdf5d", + "function_idx": 16 + }, + { + "selector": "0x147c0b24e5bfb625956c5a44d3fc84d509b789bf2e5335365c03b9be2d757d3", + "function_idx": 15 + }, + { + "selector": "0x1785e0d94a5ba07a47865d69afdf914dad65466b25d38cb78cb741fac447ba8", + "function_idx": 22 + }, + { + "selector": "0x1c7564da2ac3c0ee05570d52004d51604c5315131cafd67610b2e629bf4fd7c", + "function_idx": 14 + }, + { + "selector": "0x1d39fadfe7e2621092d7d0a467672f0eb0ad03c5926829d40ceefa7bcd10b80", + "function_idx": 23 + }, + { + "selector": "0x1ff9f9a5d04b7955383039cae30cd6c0d1cb3c0e04a579f393a7ac9cf39c7b3", + "function_idx": 5 + }, + { + "selector": "0x208b88c80fabc1b03f3c78a09aaa1a693a5bb1366271a1c6b9e7971aa325116", + "function_idx": 18 + }, + { + "selector": "0x21b020335325fcef65a03b765adaefcc9fb4eccceb8e0293516736095e8cceb", + "function_idx": 2 + }, + { + "selector": "0x242ba12536f9ac18cffcedd5588e2922a17c0f453a064a64e62df6d3f6f8dce", + "function_idx": 4 + }, + { + "selector": "0x265cf503e1b425e68026a65eb872306eb863eb6ba526cddc50fd44d00d8e180", + "function_idx": 0 + }, + { + "selector": "0x29a68d48876fa0d864a616e212175e42824be1cdcb35bcd2e05b302042e491f", + "function_idx": 8 + }, + { + "selector": "0x31c18e21d8e75a5f2f6f1330c56da1f8b2fd93568002ef0d15bcce9c5644c2b", + "function_idx": 10 + }, + { + "selector": "0x36e432757f2854d382b66d849ed9a3edf35fdbf55a7c83296142cf7b89b0573", + "function_idx": 12 + }, + { + "selector": "0x3bb1cf9f6b291f5c63c8ecbfcf8cd522642fdc7ec277c2fddb7dc069cd05ced", + "function_idx": 21 + }, + { + "selector": "0x3c694eba4d500b140694d8f7da3f85031f4d4827b57da58cb5f2bd1ab74e5ab", + "function_idx": 9 + } + ], + "L1_HANDLER": [], + "CONSTRUCTOR": [] + }, + "abi": [ + { + "type": "impl", + "name": "TestOption", + "interface_name": "enums::ITestOption" + }, + { + "type": "enum", + "name": "core::option::Option::", + "variants": [ + { + "name": "Some", + "type": "core::integer::u16" + }, + { + "name": "None", + "type": "()" + } + ] + }, + { + "type": "enum", + "name": "core::option::Option::>", + "variants": [ + { + "name": "Some", + "type": "core::array::Array::" + }, + { + "name": "None", + "type": "()" + } + ] + }, + { + "type": "enum", + "name": "core::option::Option::<[core::integer::u32; 3]>", + "variants": [ + { + "name": "Some", + "type": "[core::integer::u32; 3]" + }, + { + "name": "None", + "type": "()" + } + ] + }, + { + "type": "enum", + "name": "core::option::Option::<(core::integer::u32, core::array::Array::)>", + "variants": [ + { + "name": "Some", + "type": "(core::integer::u32, core::array::Array::)" + }, + { + "name": "None", + "type": "()" + } + ] + }, + { + "type": "enum", + "name": "core::option::Option::>", + "variants": [ + { + "name": "Some", + "type": "core::option::Option::" + }, + { + "name": "None", + "type": "()" + } + ] + }, + { + "type": "enum", + "name": "core::result::Result::", + "variants": [ + { + "name": "Ok", + "type": "core::integer::u8" + }, + { + "name": "Err", + "type": "core::integer::u16" + } + ] + }, + { + "type": "enum", + "name": "core::option::Option::>", + "variants": [ + { + "name": "Some", + "type": "core::result::Result::" + }, + { + "name": "None", + "type": "()" + } + ] + }, + { + "type": "struct", + "name": "enums::Point", + "members": [ + { + "name": "x", + "type": "core::integer::u64" + }, + { + "name": "y", + "type": "core::integer::u32" + } + ] + }, + { + "type": "enum", + "name": "core::option::Option::", + "variants": [ + { + "name": "Some", + "type": "enums::Point" + }, + { + "name": "None", + "type": "()" + } + ] + }, + { + "type": "enum", + "name": "core::result::Result::, core::array::Array::>", + "variants": [ + { + "name": "Ok", + "type": "core::array::Array::" + }, + { + "name": "Err", + "type": "core::array::Array::" + } + ] + }, + { + "type": "enum", + "name": "core::result::Result::<[core::integer::u32; 3], [core::integer::u16; 2]>", + "variants": [ + { + "name": "Ok", + "type": "[core::integer::u32; 3]" + }, + { + "name": "Err", + "type": "[core::integer::u16; 2]" + } + ] + }, + { + "type": "enum", + "name": "core::result::Result::<(core::integer::u32, core::array::Array::), (core::integer::u16, core::array::Array::)>", + "variants": [ + { + "name": "Ok", + "type": "(core::integer::u32, core::array::Array::)" + }, + { + "name": "Err", + "type": "(core::integer::u16, core::array::Array::)" + } + ] + }, + { + "type": "enum", + "name": "core::result::Result::, core::integer::u32>", + "variants": [ + { + "name": "Ok", + "type": "core::result::Result::" + }, + { + "name": "Err", + "type": "core::integer::u32" + } + ] + }, + { + "type": "enum", + "name": "core::option::Option::", + "variants": [ + { + "name": "Some", + "type": "core::integer::u32" + }, + { + "name": "None", + "type": "()" + } + ] + }, + { + "type": "enum", + "name": "core::result::Result::>", + "variants": [ + { + "name": "Ok", + "type": "core::integer::u8" + }, + { + "name": "Err", + "type": "core::option::Option::" + } + ] + }, + { + "type": "struct", + "name": "enums::Point2", + "members": [ + { + "name": "thickness", + "type": "core::integer::u64" + }, + { + "name": "location", + "type": "enums::Point" + } + ] + }, + { + "type": "struct", + "name": "enums::Empty", + "members": [] + }, + { + "type": "struct", + "name": "enums::Cat", + "members": [ + { + "name": "age", + "type": "core::integer::u16" + }, + { + "name": "legs", + "type": "(core::integer::u8, core::integer::u16, core::integer::u32, core::integer::u64)" + } + ] + }, + { + "type": "struct", + "name": "core::array::Span::", + "members": [ + { + "name": "snapshot", + "type": "@core::array::Array::" + } + ] + }, + { + "type": "struct", + "name": "enums::Dog", + "members": [ + { + "name": "age", + "type": "core::integer::u16" + }, + { + "name": "colors", + "type": "core::array::Span::" + } + ] + }, + { + "type": "struct", + "name": "enums::Horse", + "members": [ + { + "name": "age", + "type": "core::integer::u16" + }, + { + "name": "legs_color", + "type": "[core::integer::u16; 4]" + } + ] + }, + { + "type": "enum", + "name": "core::option::Option::", + "variants": [ + { + "name": "Some", + "type": "core::integer::u8" + }, + { + "name": "None", + "type": "()" + } + ] + }, + { + "type": "struct", + "name": "enums::Truck", + "members": [ + { + "name": "power", + "type": "core::integer::u32" + }, + { + "name": "turbo", + "type": "core::option::Option::" + } + ] + }, + { + "type": "enum", + "name": "core::result::Result::", + "variants": [ + { + "name": "Ok", + "type": "core::integer::u8" + }, + { + "name": "Err", + "type": "core::integer::u64" + } + ] + }, + { + "type": "struct", + "name": "enums::Destruction", + "members": [ + { + "name": "area", + "type": "core::integer::u128" + }, + { + "name": "res", + "type": "core::result::Result::" + } + ] + }, + { + "type": "interface", + "name": "enums::ITestOption", + "items": [ + { + "type": "function", + "name": "option_bn", + "inputs": [ + { + "name": "x", + "type": "core::option::Option::" + } + ], + "outputs": [ + { + "type": "core::option::Option::" + } + ], + "state_mutability": "view" + }, + { + "type": "function", + "name": "option_array", + "inputs": [ + { + "name": "x", + "type": "core::option::Option::>" + } + ], + "outputs": [ + { + "type": "core::option::Option::>" + } + ], + "state_mutability": "view" + }, + { + "type": "function", + "name": "option_fixed_array", + "inputs": [ + { + "name": "x", + "type": "core::option::Option::<[core::integer::u32; 3]>" + } + ], + "outputs": [ + { + "type": "core::option::Option::<[core::integer::u32; 3]>" + } + ], + "state_mutability": "view" + }, + { + "type": "function", + "name": "option_tuple", + "inputs": [ + { + "name": "x", + "type": "core::option::Option::<(core::integer::u32, core::array::Array::)>" + } + ], + "outputs": [ + { + "type": "core::option::Option::<(core::integer::u32, core::array::Array::)>" + } + ], + "state_mutability": "view" + }, + { + "type": "function", + "name": "option_option_bn", + "inputs": [ + { + "name": "x", + "type": "core::option::Option::>" + } + ], + "outputs": [ + { + "type": "core::option::Option::>" + } + ], + "state_mutability": "view" + }, + { + "type": "function", + "name": "option_result", + "inputs": [ + { + "name": "x", + "type": "core::option::Option::>" + } + ], + "outputs": [ + { + "type": "core::option::Option::>" + } + ], + "state_mutability": "view" + }, + { + "type": "function", + "name": "array_option_bn", + "inputs": [ + { + "name": "x", + "type": "core::array::Array::>" + } + ], + "outputs": [ + { + "type": "core::array::Array::>" + } + ], + "state_mutability": "view" + }, + { + "type": "function", + "name": "write_option_bn", + "inputs": [ + { + "name": "x", + "type": "core::option::Option::" + } + ], + "outputs": [], + "state_mutability": "external" + }, + { + "type": "function", + "name": "option_point", + "inputs": [ + { + "name": "x", + "type": "core::option::Option::" + } + ], + "outputs": [ + { + "type": "core::option::Option::" + } + ], + "state_mutability": "view" + }, + { + "type": "function", + "name": "result_bn", + "inputs": [ + { + "name": "x", + "type": "core::result::Result::" + } + ], + "outputs": [ + { + "type": "core::result::Result::" + } + ], + "state_mutability": "view" + }, + { + "type": "function", + "name": "result_array", + "inputs": [ + { + "name": "x", + "type": "core::result::Result::, core::array::Array::>" + } + ], + "outputs": [ + { + "type": "core::result::Result::, core::array::Array::>" + } + ], + "state_mutability": "view" + }, + { + "type": "function", + "name": "result_fixed_array", + "inputs": [ + { + "name": "x", + "type": "core::result::Result::<[core::integer::u32; 3], [core::integer::u16; 2]>" + } + ], + "outputs": [ + { + "type": "core::result::Result::<[core::integer::u32; 3], [core::integer::u16; 2]>" + } + ], + "state_mutability": "view" + }, + { + "type": "function", + "name": "result_tuple", + "inputs": [ + { + "name": "x", + "type": "core::result::Result::<(core::integer::u32, core::array::Array::), (core::integer::u16, core::array::Array::)>" + } + ], + "outputs": [ + { + "type": "core::result::Result::<(core::integer::u32, core::array::Array::), (core::integer::u16, core::array::Array::)>" + } + ], + "state_mutability": "view" + }, + { + "type": "function", + "name": "result_result_bn", + "inputs": [ + { + "name": "x", + "type": "core::result::Result::, core::integer::u32>" + } + ], + "outputs": [ + { + "type": "core::result::Result::, core::integer::u32>" + } + ], + "state_mutability": "view" + }, + { + "type": "function", + "name": "result_option", + "inputs": [ + { + "name": "x", + "type": "core::result::Result::>" + } + ], + "outputs": [ + { + "type": "core::result::Result::>" + } + ], + "state_mutability": "view" + }, + { + "type": "function", + "name": "write_result_bn", + "inputs": [ + { + "name": "x", + "type": "core::result::Result::" + } + ], + "outputs": [], + "state_mutability": "external" + }, + { + "type": "function", + "name": "struct_point", + "inputs": [ + { + "name": "x", + "type": "enums::Point" + } + ], + "outputs": [ + { + "type": "enums::Point" + } + ], + "state_mutability": "view" + }, + { + "type": "function", + "name": "struct_point2", + "inputs": [ + { + "name": "x", + "type": "enums::Point2" + } + ], + "outputs": [ + { + "type": "enums::Point2" + } + ], + "state_mutability": "view" + }, + { + "type": "function", + "name": "struct_Empty", + "inputs": [ + { + "name": "x", + "type": "enums::Empty" + } + ], + "outputs": [ + { + "type": "enums::Empty" + } + ], + "state_mutability": "view" + }, + { + "type": "function", + "name": "struct_Cat", + "inputs": [ + { + "name": "x", + "type": "enums::Cat" + } + ], + "outputs": [ + { + "type": "enums::Cat" + } + ], + "state_mutability": "view" + }, + { + "type": "function", + "name": "struct_Dog", + "inputs": [ + { + "name": "x", + "type": "enums::Dog" + } + ], + "outputs": [ + { + "type": "enums::Dog" + } + ], + "state_mutability": "view" + }, + { + "type": "function", + "name": "struct_Horse", + "inputs": [ + { + "name": "x", + "type": "enums::Horse" + } + ], + "outputs": [ + { + "type": "enums::Horse" + } + ], + "state_mutability": "view" + }, + { + "type": "function", + "name": "struct_Truck", + "inputs": [ + { + "name": "x", + "type": "enums::Truck" + } + ], + "outputs": [ + { + "type": "enums::Truck" + } + ], + "state_mutability": "view" + }, + { + "type": "function", + "name": "struct_Destruction", + "inputs": [ + { + "name": "x", + "type": "enums::Destruction" + } + ], + "outputs": [ + { + "type": "enums::Destruction" + } + ], + "state_mutability": "view" + } + ] + }, + { + "type": "event", + "name": "enums::test_option::Event", + "kind": "enum", + "variants": [] + } + ] +} diff --git a/__tests__/config/fixtures.ts b/__tests__/config/fixtures.ts index 410adab84..0702548da 100644 --- a/__tests__/config/fixtures.ts +++ b/__tests__/config/fixtures.ts @@ -74,6 +74,7 @@ const compiledContracts = { deployer: 'cairo2100/deployer', CairoByteArray: 'byteArray/target/dev/test_ByteArrayStorage', IntegerTypes: 'integerTypes/target/dev/test_IntegerTypesStorage', + TestCairoType: 'cairo2120/enums_test_enums', }; export const contracts = mapContractSets(compiledContracts); diff --git a/__tests__/utils/cairoDataTypes/CairoStruct.test.ts b/__tests__/utils/cairoDataTypes/CairoStruct.test.ts new file mode 100644 index 000000000..5ef4b3b4e --- /dev/null +++ b/__tests__/utils/cairoDataTypes/CairoStruct.test.ts @@ -0,0 +1,278 @@ +import { + CairoOptionVariant, + CairoTypeOption, + hdParsingStrategy, + type BigNumberish, + CairoOption, + CairoArray, + CallData, + CairoTypeResult, + CairoResultVariant, + CairoResult, + CairoTuple, + CairoFixedArray, + type ParsingStrategy, + type AbiStruct, + CairoStruct, +} from '../../../src'; +import { contracts } from '../../config/fixtures'; + +describe('CairoStruct', () => { + const myCallData = new CallData(contracts.TestCairoType.sierra.abi); + const strategies = myCallData.parser.parsingStrategies as ParsingStrategy[]; + const abiPoint: AbiStruct = contracts.TestCairoType.sierra.abi.find( + (item) => item.name === 'test_enums::Point' + ); + const abiCat: AbiStruct = contracts.TestCairoType.sierra.abi.find( + (item) => item.name === 'test_enums::Cat' + ); + describe('constructor variant', () => { + test('content is an object', () => { + const myCairoStruct = new CairoStruct({ x: 1, y: 2 }, abiPoint, strategies); + expect(myCairoStruct.toApiRequest()).toEqual(['0x1', '0x2']); + expect(myCairoStruct.decompose(strategies)).toEqual({ x: 1n, y: 2n }); + }); + + test('content is an array', () => { + const myCairoStruct = new CairoStruct([1, 2], abiPoint, strategies); + expect(myCairoStruct.toApiRequest()).toEqual(['0x1', '0x2']); + expect(myCairoStruct.decompose(strategies)).toEqual({ x: 1n, y: 2n }); + }); + + test('content is an iterator', () => { + const iter = ['0', '100'][Symbol.iterator](); + const myCairoStruct = new CairoStruct(iter, abiPoint, strategies); + expect(myCairoStruct.toApiRequest()).toEqual(['0x0', '0x64']); + expect(myCairoStruct.decompose(strategies)).toEqual({ x: 0n, y: 100n }); + const iter2 = ['2', '11', '12', '13', '14'][Symbol.iterator](); + const myCairoStruct2 = new CairoStruct(iter2, abiCat, strategies); + expect(myCairoStruct2.toApiRequest()).toEqual(['0x2', '0xb', '0xc', '0xd', '0xe']); + expect(myCairoStruct2.decompose(strategies)).toEqual({ + age: 2n, + legs: { '0': 11n, '1': 12n, '2': 13n, '3': 14n }, + }); + }); + + test('accept single strategy', () => { + const customStrategy: ParsingStrategy = { + constructors: { + ...strategies[0].constructors, + ...strategies[1].constructors, + }, + dynamicSelectors: { + ...strategies[0].dynamicSelectors, + ...strategies[1].dynamicSelectors, + }, + response: { + ...strategies[0].response, + ...strategies[1].response, + }, + }; + const myCairoStruct = new CairoStruct({ x: 1, y: 2 }, abiPoint, customStrategy); + expect(myCairoStruct.toApiRequest()).toEqual(['0x1', '0x2']); + expect(myCairoStruct.decompose(customStrategy)).toEqual({ x: 1n, y: 2n }); + }); + }); + + describe('constructor CairoType', () => { + test('proper abi definition', () => { + expect( + () => + new CairoStruct( + { x: 2, y: 3 }, + { name: 'error', type: 'struct', members: [] }, + strategies + ) + ).toThrow(new Error('Invalid input: expected 0 members, got 2')); + }); + + test('CairoType: result of an array', () => { + const abiDog: AbiStruct = contracts.TestCairoType.sierra.abi.find( + (item) => item.name === 'test_enums::Dog' + ); + const myStruct0 = new CairoStruct({ age: 2, colors: [1, 2, 3] }, abiDog, strategies); + const myStruct1 = new CairoStruct( + { + age: 2, + colors: new CairoArray( + [1, 2, 3], + 'core::array::Array::', + hdParsingStrategy + ), + }, + abiDog, + strategies + ); + expect(myStruct0.toApiRequest()).toEqual(['0x2', '0x3', '0x1', '0x2', '0x3']); + expect(myStruct0.decompose(hdParsingStrategy)).toEqual({ age: 2n, colors: [1n, 2n, 3n] }); + expect(myStruct1.toApiRequest()).toEqual(['0x2', '0x3', '0x1', '0x2', '0x3']); + expect(myStruct1.decompose(hdParsingStrategy)).toEqual({ age: 2n, colors: [1n, 2n, 3n] }); + }); + + test('CairoType: result of a fixed array', () => { + const abiHorse: AbiStruct = contracts.TestCairoType.sierra.abi.find( + (item) => item.name === 'test_enums::Horse' + ); + const myResult0 = new CairoStruct({ age: 2, legs_color: [1, 2, 3, 4] }, abiHorse, strategies); + const myResult1 = new CairoStruct( + { + age: 2, + legs_color: new CairoFixedArray([1, 2, 3, 4], '[core::integer::u16; 4]', strategies), + }, + abiHorse, + strategies + ); + expect(myResult0.toApiRequest()).toEqual(['0x2', '0x1', '0x2', '0x3', '0x4']); + expect(myResult0.decompose(hdParsingStrategy)).toEqual({ + age: 2n, + legs_color: [1n, 2n, 3n, 4n], + }); + expect(myResult1.toApiRequest()).toEqual(['0x2', '0x1', '0x2', '0x3', '0x4']); + expect(myResult1.decompose(hdParsingStrategy)).toEqual({ + age: 2n, + legs_color: [1n, 2n, 3n, 4n], + }); + }); + + test('CairoType: result of a tuple', () => { + const myStruct0 = new CairoStruct({ age: 2, legs: [5, 6, 7, 8] }, abiCat, strategies); + const myStruct1 = new CairoStruct( + { + age: 2, + legs: new CairoTuple( + [5, 6, 7, 8], + '(core::integer::u8, core::integer::u16, core::integer::u32, core::integer::u64)', + strategies + ), + }, + abiCat, + strategies + ); + expect(myStruct0.toApiRequest()).toEqual(['0x2', '0x5', '0x6', '0x7', '0x8']); + expect(myStruct0.decompose(strategies)).toEqual({ + age: 2n, + legs: { '0': 5n, '1': 6n, '2': 7n, '3': 8n }, + }); + expect(myStruct1.toApiRequest()).toEqual(['0x2', '0x5', '0x6', '0x7', '0x8']); + expect(myStruct1.decompose(strategies)).toEqual({ + age: 2n, + legs: { '0': 5n, '1': 6n, '2': 7n, '3': 8n }, + }); + }); + + test('CairoType: result of an option', () => { + const abiTruck: AbiStruct = contracts.TestCairoType.sierra.abi.find( + (item) => item.name === 'test_enums::Truck' + ); + const option0 = new CairoOption(CairoOptionVariant.Some, 2n); + const myTypeOption = new CairoTypeOption( + 2, + 'core::option::Option::', + hdParsingStrategy, + CairoOptionVariant.Some + ); + const myStruct0 = new CairoStruct({ power: 512, turbo: option0 }, abiTruck, strategies); + const myStruct1 = new CairoStruct({ power: 512, turbo: myTypeOption }, abiTruck, strategies); + expect(myStruct0.toApiRequest()).toEqual(['0x200', '0x00', '0x2']); + expect(myStruct0.decompose(hdParsingStrategy)).toEqual({ power: 512n, turbo: option0 }); + expect(myStruct1.toApiRequest()).toEqual(['0x200', '0x00', '0x2']); + expect(myStruct1.decompose(hdParsingStrategy)).toEqual({ power: 512n, turbo: option0 }); + }); + + test('CairoType: result from a result', () => { + const abiDestruction: AbiStruct = contracts.TestCairoType.sierra.abi.find( + (item) => item.name === 'test_enums::Destruction' + ); + const result = new CairoResult(CairoResultVariant.Err, 5n); + const typeResult = new CairoTypeResult( + result, + 'core::result::Result::', + strategies + ); + const myStruct0 = new CairoStruct({ area: 512, res: result }, abiDestruction, strategies); + const myStruct1 = new CairoStruct({ area: 512, res: typeResult }, abiDestruction, strategies); + expect(myStruct0.toApiRequest()).toEqual(['0x200', '0x01', '0x5']); + expect(myStruct0.decompose(strategies)).toEqual({ area: 512n, res: result }); + expect(myStruct1.toApiRequest()).toEqual(['0x200', '0x01', '0x5']); + expect(myStruct1.decompose(strategies)).toEqual({ area: 512n, res: result }); + }); + + test('CairoType: nested structs', () => { + const abiPoint2: AbiStruct = contracts.TestCairoType.sierra.abi.find( + (item) => item.name === 'test_enums::Point2' + ); + const point1 = { x: 1, y: 2 }; + const structPoint1 = new CairoStruct(point1, abiPoint, strategies); + const point2 = { thickness: 3, location: point1 }; + const structPoint2 = new CairoStruct( + { thickness: 3, location: structPoint1 }, + abiPoint2, + strategies + ); + const struct0 = new CairoStruct(point2, abiPoint2, strategies); + const struct2 = new CairoStruct(structPoint2, abiPoint2, strategies); + expect(struct0.toApiRequest()).toEqual(['0x3', '0x1', '0x2']); + expect(struct0.decompose(strategies)).toEqual({ + thickness: 3n, + location: { x: 1n, y: 2n }, + }); + expect(struct2.toApiRequest()).toEqual(['0x3', '0x1', '0x2']); + expect(struct2.decompose(strategies)).toEqual({ + thickness: 3n, + location: { x: 1n, y: 2n }, + }); + }); + }); + + describe('static methods', () => { + test('is', () => { + expect(CairoStruct.is([200, 201])).toBe(true); + expect(CairoStruct.is(200)).toBe(false); + }); + + test('validate', () => { + expect(() => CairoStruct.validate([200, 300], abiPoint)).not.toThrow(); + expect(() => CairoStruct.validate({ x: 200, y: 300 }, abiPoint)).not.toThrow(); + expect(() => CairoStruct.validate({ x: 200, y: 300 })).not.toThrow(); + expect(() => CairoStruct.validate([200, 300], 'core::wrong' as unknown as AbiStruct)).toThrow( + new Error('Invalid ABI: expected struct, got undefined') + ); + expect(() => + CairoStruct.validate([200, 300], { + name: 'test', + type: 'struct', + members: [{ name: 'x', type: 'core::integer::u16' }], + }) + ).toThrow(new Error('Invalid input: expected 1 members, got 2')); + }); + + test('extractStructMembersNames', () => { + expect(CairoStruct.extractStructMembersNames(abiPoint)).toEqual(['x', 'y']); + }); + }); + describe('copy constructor behavior', () => { + test('should copy properties when constructed from another CairoStruct', () => { + const original = new CairoStruct({ x: 1, y: 2 }, abiPoint, strategies); + const abiPoint2: AbiStruct = contracts.TestCairoType.sierra.abi.find( + (item) => item.name === 'test_enums::Point2' + ); + const copy = new CairoStruct(original, abiPoint2, strategies); + expect(copy.content).toEqual(original.content); + expect(copy.abiStruct).toEqual(original.abiStruct); + expect(copy.dynamicSelector).toEqual(original.dynamicSelector); + }); + }); + + describe('encoding without Abi', () => { + test('number', () => { + expect(CallData.compile([new CairoStruct({ x: 4, y: 5 }, abiPoint, strategies)])).toEqual([ + '4', + '5', + ]); + + expect( + CallData.compile({ x: new CairoStruct({ x: 4, y: 5 }, abiPoint, strategies) }) + ).toEqual(['4', '5']); + }); + }); +}); diff --git a/__tests__/utils/calldata/enum/CairoTypeResult.test.ts b/__tests__/utils/calldata/enum/CairoTypeResult.test.ts index 3ff5eadfb..a57cd985f 100644 --- a/__tests__/utils/calldata/enum/CairoTypeResult.test.ts +++ b/__tests__/utils/calldata/enum/CairoTypeResult.test.ts @@ -13,6 +13,7 @@ import { CairoResult, CairoTuple, CairoFixedArray, + type ParsingStrategy, } from '../../../../src'; describe('CairoTypeResult', () => { @@ -55,6 +56,26 @@ describe('CairoTypeResult', () => { expect( () => new CairoTypeResult(undefined, typeCairo, hdParsingStrategy, CairoResultVariant.Ok) ).toThrow(new Error('"content" parameter has to be defined.')); + expect( + () => new CairoTypeResult(null, typeCairo, hdParsingStrategy, CairoResultVariant.Ok) + ).toThrow(new Error('"content" parameter has to be defined.')); + }); + + test('accept array of parsing strategies', () => { + const customStrategy: ParsingStrategy = { + constructors: {}, + dynamicSelectors: {}, + response: {}, + }; + expect( + () => + new CairoTypeResult( + val, + typeCairo, + [hdParsingStrategy, customStrategy], + CairoResultVariant.Ok + ) + ).not.toThrow(); }); test('if content is an iterator, no variant is authorized', () => { @@ -69,7 +90,6 @@ describe('CairoTypeResult', () => { describe('constructor content', () => { const val = 8n; const typeCairo = 'core::result::Result::'; - const iter = ['0', '100'][Symbol.iterator](); test('content is a CairoResult', () => { const myCairoResult = new CairoResult(CairoResultVariant.Ok, val); @@ -77,6 +97,14 @@ describe('CairoTypeResult', () => { expect(cairoTypeResult0.isVariantOk).toBe(true); expect(cairoTypeResult0.content).toEqual(new CairoUint8(8)); expect(cairoTypeResult0.resultCairoType).toBe(typeCairo); + expect( + () => + new CairoTypeResult(myCairoResult, typeCairo, hdParsingStrategy, CairoResultVariant.Ok) + ).toThrow( + new Error( + 'when "content" parameter is a CairoResult and subType is false, do not define "variant" parameter.' + ) + ); }); test('content is a CairoTypeResult', () => { @@ -106,10 +134,15 @@ describe('CairoTypeResult', () => { }); test('content is an iterator', () => { - const cairoTypeResult0 = new CairoTypeResult(iter, typeCairo, hdParsingStrategy); + const iter0 = ['0', '100'][Symbol.iterator](); + const cairoTypeResult0 = new CairoTypeResult(iter0, typeCairo, hdParsingStrategy); expect(cairoTypeResult0.isVariantOk).toBe(true); expect(cairoTypeResult0.content).toEqual(new CairoUint8(100)); expect(cairoTypeResult0.resultCairoType).toBe(typeCairo); + const iter1 = ['1', '100', '2'][Symbol.iterator](); + const typeCairo1 = 'core::result::Result::'; + const cairoTypeResult1 = new CairoTypeResult(iter1, typeCairo1, hdParsingStrategy); + expect(cairoTypeResult1.toApiRequest()).toEqual(['0x01', '0x64', '0x2']); }); }); diff --git a/__tests__/utils/calldata/parser/parser-0-1.1.0.test.ts b/__tests__/utils/calldata/parser/parser-0-1.1.0.test.ts index 5a33dfd8f..4a0bcd725 100644 --- a/__tests__/utils/calldata/parser/parser-0-1.1.0.test.ts +++ b/__tests__/utils/calldata/parser/parser-0-1.1.0.test.ts @@ -1,21 +1,22 @@ +import { hdParsingStrategy } from '../../../../src'; import { AbiParser1 } from '../../../../src/utils/calldata/parser/parser-0-1.1.0'; import { getFunctionAbi, getInterfaceAbi } from '../../../factories/abi'; describe('AbiParser1', () => { test('should create an instance', () => { - const abiParser = new AbiParser1([getFunctionAbi('struct')]); + const abiParser = new AbiParser1([getFunctionAbi('struct')], hdParsingStrategy); expect(abiParser instanceof AbiParser1).toEqual(true); expect(abiParser.abi).toStrictEqual([getFunctionAbi('struct')]); }); describe('methodInputsLength', () => { test('should return inputs length', () => { - const abiParser = new AbiParser1([getFunctionAbi('struct')]); + const abiParser = new AbiParser1([getFunctionAbi('struct')], hdParsingStrategy); expect(abiParser.methodInputsLength(getFunctionAbi('felt'))).toEqual(1); }); test('should return 0 if inputs are empty', () => { - const abiParser = new AbiParser1([getFunctionAbi('felt')]); + const abiParser = new AbiParser1([getFunctionAbi('felt')], hdParsingStrategy); const functionAbi = getFunctionAbi('felt'); functionAbi.inputs[0].name = 'test_len'; expect(abiParser.methodInputsLength(functionAbi)).toEqual(0); @@ -24,19 +25,25 @@ describe('AbiParser1', () => { describe('getMethod', () => { test('should return method definition from ABI', () => { - const abiParser = new AbiParser1([getFunctionAbi('struct'), getInterfaceAbi()]); + const abiParser = new AbiParser1( + [getFunctionAbi('struct'), getInterfaceAbi()], + hdParsingStrategy + ); expect(abiParser.getMethod('test')).toEqual(getFunctionAbi('struct')); }); test('should return undefined if method is not found', () => { - const abiParser = new AbiParser1([getFunctionAbi('struct')]); + const abiParser = new AbiParser1([getFunctionAbi('struct')], hdParsingStrategy); expect(abiParser.getMethod('struct')).toBeUndefined(); }); }); describe('getLegacyFormat', () => { test('should return method definition from ABI', () => { - const abiParser = new AbiParser1([getFunctionAbi('struct'), getInterfaceAbi()]); + const abiParser = new AbiParser1( + [getFunctionAbi('struct'), getInterfaceAbi()], + hdParsingStrategy + ); const legacyFormat = abiParser.getLegacyFormat(); expect(legacyFormat).toStrictEqual(abiParser.abi); }); diff --git a/__tests__/utils/calldata/parser/parser-2.0.0.test.ts b/__tests__/utils/calldata/parser/parser-2.0.0.test.ts index d49f0f5c8..64919d2fa 100644 --- a/__tests__/utils/calldata/parser/parser-2.0.0.test.ts +++ b/__tests__/utils/calldata/parser/parser-2.0.0.test.ts @@ -1,21 +1,22 @@ +import { hdParsingStrategy } from '../../../../src/utils/calldata'; import { AbiParser2 } from '../../../../src/utils/calldata/parser/parser-2.0.0'; import { getFunctionAbi, getInterfaceAbi } from '../../../factories/abi'; describe('AbiParser2', () => { test('should create an instance', () => { - const abiParser = new AbiParser2([getFunctionAbi('struct')]); + const abiParser = new AbiParser2([getFunctionAbi('struct')], hdParsingStrategy); expect(abiParser instanceof AbiParser2).toEqual(true); expect(abiParser.abi).toStrictEqual([getFunctionAbi('struct')]); }); describe('methodInputsLength', () => { test('should return inputs length', () => { - const abiParser = new AbiParser2([getFunctionAbi('struct')]); + const abiParser = new AbiParser2([getFunctionAbi('struct')], hdParsingStrategy); expect(abiParser.methodInputsLength(getFunctionAbi('test'))).toEqual(1); }); test('should return 0 if inputs are empty', () => { - const abiParser = new AbiParser2([getFunctionAbi('struct')]); + const abiParser = new AbiParser2([getFunctionAbi('struct')], hdParsingStrategy); const functionAbi = getFunctionAbi('test'); functionAbi.inputs = []; expect(abiParser.methodInputsLength(functionAbi)).toEqual(0); @@ -24,19 +25,25 @@ describe('AbiParser2', () => { describe('getMethod', () => { test('should return method definition from ABI', () => { - const abiParser = new AbiParser2([getFunctionAbi('struct'), getInterfaceAbi()]); + const abiParser = new AbiParser2( + [getFunctionAbi('struct'), getInterfaceAbi()], + hdParsingStrategy + ); expect(abiParser.getMethod('test')).toEqual(getFunctionAbi('struct')); }); test('should return undefined if method is not found', () => { - const abiParser = new AbiParser2([getFunctionAbi('struct')]); + const abiParser = new AbiParser2([getFunctionAbi('struct')], hdParsingStrategy); expect(abiParser.getMethod('test')).toBeUndefined(); }); }); describe('getLegacyFormat', () => { test('should return method definition from ABI', () => { - const abiParser = new AbiParser2([getFunctionAbi('struct'), getInterfaceAbi()]); + const abiParser = new AbiParser2( + [getFunctionAbi('struct'), getInterfaceAbi()], + hdParsingStrategy + ); const legacyFormat = abiParser.getLegacyFormat(); const result = [getFunctionAbi('struct'), getFunctionAbi('struct')]; expect(legacyFormat).toEqual(result); diff --git a/__tests__/utils/calldata/requestParser.test.ts b/__tests__/utils/calldata/requestParser.test.ts index 2c8842025..4c006d0c6 100644 --- a/__tests__/utils/calldata/requestParser.test.ts +++ b/__tests__/utils/calldata/requestParser.test.ts @@ -6,6 +6,7 @@ import { CairoOption, CairoResult, ETH_ADDRESS, + hdParsingStrategy, NON_ZERO_PREFIX, } from '../../../src'; @@ -19,7 +20,7 @@ describe('requestParser', () => { input: getAbiEntry('felt'), structs: getAbiStructs(), enums: getAbiEnums(), - parser: new AbiParser1([getAbiEntry('felt')]), + parser: new AbiParser1([getAbiEntry('felt')], hdParsingStrategy), }); expect(parsedField).toEqual(['0x100']); }); @@ -32,7 +33,7 @@ describe('requestParser', () => { input: getAbiEntry('core::array::Array::'), structs: getAbiStructs(), enums: getAbiEnums(), - parser: new AbiParser1([getAbiEntry('core::array::Array::')]), + parser: new AbiParser1([getAbiEntry('core::array::Array::')], hdParsingStrategy), }); expect(parsedField).toEqual(['0x2', '0x100', '0x80']); }); @@ -45,7 +46,7 @@ describe('requestParser', () => { input: getAbiEntry('core::array::Array::'), structs: getAbiStructs(), enums: getAbiEnums(), - parser: new AbiParser1([getAbiEntry('core::array::Array::')]), + parser: new AbiParser1([getAbiEntry('core::array::Array::')], hdParsingStrategy), }); expect(parsedField).toEqual(['0x1', '0x736f6d655f746573745f76616c7565']); }); @@ -58,7 +59,7 @@ describe('requestParser', () => { input: getAbiEntry(`${NON_ZERO_PREFIX}core::bool`), structs: getAbiStructs(), enums: getAbiEnums(), - parser: new AbiParser1([getAbiEntry(`${NON_ZERO_PREFIX}core::bool`)]), + parser: new AbiParser1([getAbiEntry(`${NON_ZERO_PREFIX}core::bool`)], hdParsingStrategy), }); expect(parsedField).toEqual(['0x1']); }); @@ -71,7 +72,7 @@ describe('requestParser', () => { input: getAbiEntry(`${ETH_ADDRESS}felt`), structs: getAbiStructs(), enums: getAbiEnums(), - parser: new AbiParser1([getAbiEntry(`${ETH_ADDRESS}felt`)]), + parser: new AbiParser1([getAbiEntry(`${ETH_ADDRESS}felt`)], hdParsingStrategy), }); expect(parsedField).toEqual(['0x74657374']); }); @@ -84,7 +85,7 @@ describe('requestParser', () => { input: getAbiEntry('struct'), structs: getAbiStructs(), enums: getAbiEnums(), - parser: new AbiParser1([getAbiEntry('struct')]), + parser: new AbiParser1([getAbiEntry('struct')], hdParsingStrategy), }); expect(parsedField).toEqual(['0x74657374']); }); @@ -97,7 +98,7 @@ describe('requestParser', () => { input: getAbiEntry('(core::bool, core::bool)'), structs: getAbiStructs(), enums: getAbiEnums(), - parser: new AbiParser1([getAbiEntry('(core::bool, core::bool)')]), + parser: new AbiParser1([getAbiEntry('(core::bool, core::bool)')], hdParsingStrategy), }); expect(parsedField).toEqual(['1', '1']); }); @@ -110,7 +111,7 @@ describe('requestParser', () => { input: getAbiEntry('core::integer::u256'), structs: getAbiStructs(), enums: getAbiEnums(), - parser: new AbiParser1([getAbiEntry('core::integer::u256')]), + parser: new AbiParser1([getAbiEntry('core::integer::u256')], hdParsingStrategy), }); expect(parsedField).toEqual(['252', '0']); }); @@ -123,7 +124,10 @@ describe('requestParser', () => { input: getAbiEntry('core::option::Option::'), structs: getAbiStructs(), enums: { 'core::option::Option::': getAbiEnums().enum }, - parser: new AbiParser1([getAbiEntry('core::option::Option::')]), + parser: new AbiParser1( + [getAbiEntry('core::option::Option::')], + hdParsingStrategy + ), }); expect(parsedField).toEqual('1'); }); @@ -142,7 +146,10 @@ describe('requestParser', () => { input: getAbiEntry('core::option::Option::'), structs: getAbiStructs(), enums: { 'core::option::Option::': abiEnum }, - parser: new AbiParser1([getAbiEntry('core::option::Option::')]), + parser: new AbiParser1( + [getAbiEntry('core::option::Option::')], + hdParsingStrategy + ), }); expect(parsedField).toEqual(['0', '27988542884245108']); }); @@ -156,7 +163,10 @@ describe('requestParser', () => { input: getAbiEntry('core::option::Option::core::bool'), structs: getAbiStructs(), enums: { 'core::option::Option::core::bool': getAbiEnums().enum }, - parser: new AbiParser1([getAbiEntry('core::option::Option::core::bool')]), + parser: new AbiParser1( + [getAbiEntry('core::option::Option::core::bool')], + hdParsingStrategy + ), }) ).toThrow( new Error(`ABI type core::option::Option::core::bool do not includes a valid type of data.`) @@ -177,7 +187,10 @@ describe('requestParser', () => { input: getAbiEntry('core::result::Result::core::bool'), structs: getAbiStructs(), enums: { 'core::result::Result::core::bool': abiEnum }, - parser: new AbiParser1([getAbiEntry('core::result::Result::core::bool')]), + parser: new AbiParser1( + [getAbiEntry('core::result::Result::core::bool')], + hdParsingStrategy + ), }); expect(parsedField).toEqual(['0x0', '0x4f6b']); }); @@ -191,7 +204,10 @@ describe('requestParser', () => { input: getAbiEntry('core::result::Result::core::bool'), structs: getAbiStructs(), enums: { 'core::result::Result::core::bool': getAbiEnums().enum }, - parser: new AbiParser1([getAbiEntry('core::result::Result::core::bool')]), + parser: new AbiParser1( + [getAbiEntry('core::result::Result::core::bool')], + hdParsingStrategy + ), }) ).toThrow(new Error(`Error in abi : Result has no 'Ok' variant.`)); }); @@ -211,7 +227,7 @@ describe('requestParser', () => { input: getAbiEntry('enum'), structs: getAbiStructs(), enums: { enum: abiEnum }, - parser: new AbiParser1([getAbiEntry('enum')]), + parser: new AbiParser1([getAbiEntry('enum')], hdParsingStrategy), }); expect(parsedField).toEqual(['0x1', '0x636f6e74656e74']); }); @@ -225,7 +241,7 @@ describe('requestParser', () => { input: getAbiEntry('enum'), structs: getAbiStructs(), enums: getAbiEnums(), - parser: new AbiParser1([getAbiEntry('enum')]), + parser: new AbiParser1([getAbiEntry('enum')], hdParsingStrategy), }) ).toThrow(new Error(`Not find in abi : Enum has no 'test' variant.`)); }); @@ -239,7 +255,7 @@ describe('requestParser', () => { input: getAbiEntry('core::integer::u256'), structs: getAbiStructs(), enums: getAbiEnums(), - parser: new AbiParser1([getAbiEntry('core::integer::u256')]), + parser: new AbiParser1([getAbiEntry('core::integer::u256')], hdParsingStrategy), }) ).toThrow( new Error( @@ -257,7 +273,7 @@ describe('requestParser', () => { input: getAbiEntry('(core::bool, core::bool)'), structs: getAbiStructs(), enums: getAbiEnums(), - parser: new AbiParser1([getAbiEntry('(core::bool, core::bool)')]), + parser: new AbiParser1([getAbiEntry('(core::bool, core::bool)')], hdParsingStrategy), }) ).toThrow(new Error('"core::bool,core::bool" is not a valid Cairo type')); }); @@ -271,7 +287,7 @@ describe('requestParser', () => { input: getAbiEntry('struct'), structs: getAbiStructs(), enums: getAbiEnums(), - parser: new AbiParser1([getAbiEntry('struct')]), + parser: new AbiParser1([getAbiEntry('struct')], hdParsingStrategy), }) ).toThrow(new Error('Missing parameter for type test_type')); }); @@ -285,7 +301,7 @@ describe('requestParser', () => { input: getAbiEntry('core::array::Array::'), structs: getAbiStructs(), enums: getAbiEnums(), - parser: new AbiParser1([getAbiEntry('core::array::Array::')]), + parser: new AbiParser1([getAbiEntry('core::array::Array::')], hdParsingStrategy), }) ).toThrow(new Error('ABI expected parameter test to be array or long string, got 256')); }); diff --git a/src/contract/default.ts b/src/contract/default.ts index aaa3f278b..84f506063 100644 --- a/src/contract/default.ts +++ b/src/contract/default.ts @@ -31,7 +31,7 @@ import { import type { AccountInterface } from '../account/interface'; import assert from '../utils/assert'; import { cairo, CallData } from '../utils/calldata'; -import { createAbiParser, ParsingStrategy } from '../utils/calldata/parser'; +import { createAbiParser, hdParsingStrategy, ParsingStrategy } from '../utils/calldata/parser'; import { getAbiEvents, parseEvents as parseRawEvents } from '../utils/events/index'; import { cleanHex } from '../utils/num'; import { ContractInterface } from './interface'; @@ -149,7 +149,7 @@ export class Contract implements ContractInterface { // TODO: REFACTOR: move from legacy format and add support for legacy format // Must have params this.parsingStrategy = options.parsingStrategy; - const parser = createAbiParser(options.abi, options.parsingStrategy); + const parser = createAbiParser(options.abi, options.parsingStrategy || hdParsingStrategy); this.abi = parser.getLegacyFormat(); this.address = options.address && options.address.toLowerCase(); this.providerOrAccount = options.providerOrAccount ?? defaultProvider; @@ -160,7 +160,7 @@ export class Contract implements ContractInterface { this.classHash = options.classHash; // Init - this.callData = new CallData(options.abi, options.parsingStrategy); + this.callData = new CallData(options.abi, options.parsingStrategy || hdParsingStrategy); this.structs = CallData.getAbiStruct(options.abi); this.events = getAbiEvents(options.abi); @@ -219,9 +219,9 @@ export class Contract implements ContractInterface { // TODO: if changing address, probably changing abi also !? Also nonsense method as if you change abi and address, you need to create a new contract instance. this.address = address; if (abi) { - const parser = createAbiParser(abi, this.parsingStrategy); + const parser = createAbiParser(abi, this.parsingStrategy || hdParsingStrategy); this.abi = parser.getLegacyFormat(); - this.callData = new CallData(abi, this.parsingStrategy); + this.callData = new CallData(abi, this.parsingStrategy || hdParsingStrategy); this.structs = CallData.getAbiStruct(abi); this.events = getAbiEvents(abi); } diff --git a/src/utils/cairoDataTypes/array.ts b/src/utils/cairoDataTypes/array.ts index 651e124fb..13199de44 100644 --- a/src/utils/cairoDataTypes/array.ts +++ b/src/utils/cairoDataTypes/array.ts @@ -2,11 +2,12 @@ import assert from '../assert'; import { addCompiledFlag } from '../helpers'; import { getNext, toHex } from '../num'; import { felt, getArrayType, isTypeArray } from '../calldata/cairo'; -import { type ParsingStrategy } from '../calldata/parser/parsingStrategy'; +import { type ParsingStrategy } from '../calldata/parser/parsingStrategy.type'; import { CairoType } from './cairoType.interface'; import { CairoTypeOption } from './cairoTypeOption'; import { CairoOption, CairoResult } from '../calldata/enum'; import { CairoTypeResult } from './cairoTypeResult'; +import type { AllowArray } from '../../types'; /** * Represents a Cairo dynamic array with runtime-determined length. @@ -69,9 +70,9 @@ export class CairoArray extends CairoType { * The constructor automatically detects input type and processes it appropriately, * converting all elements to proper CairoType instances based on the array type. * - * @param content - Input data (array, object, Iterator, or CairoType instances) - * @param arrayType - Dynamic array type string (e.g., "core::array::Array::") - * @param strategy - Parsing strategy for element type handling + * @param {unknown} content - Input data (array, object, Iterator, or CairoType instances) + * @param {string} arrayType - Dynamic array type string (e.g., "core::array::Array::") + * @param {AllowArray} parsingStrategy - Parsing strategy for element type handling * @example * ```typescript * // From user array @@ -88,15 +89,16 @@ export class CairoArray extends CairoType { * const nested = new CairoArray([[1, 2], [3, 4]], 'core::array::Array::>', hdParsingStrategy); * ``` */ - constructor(content: unknown, arrayType: string, strategy: ParsingStrategy) { + constructor(content: unknown, arrayType: string, parsingStrategy: AllowArray) { super(); this.arrayType = arrayType; + const strategies = Array.isArray(parsingStrategy) ? parsingStrategy : [parsingStrategy]; if (content && typeof content === 'object' && 'next' in content) { // "content" is an iterator const parsedContent: CairoType[] = CairoArray.parser( content as Iterator, arrayType, - strategy + strategies ); this.content = parsedContent; return; @@ -120,27 +122,34 @@ export class CairoArray extends CairoType { } if (contentItem instanceof CairoOption) { // "content" is a CairoOption - return new CairoTypeOption(contentItem, arrayContentType, strategy); + return new CairoTypeOption(contentItem, arrayContentType, strategies); } if (contentItem instanceof CairoResult) { // "content" is a CairoResult - return new CairoTypeResult(contentItem, arrayContentType, strategy); + return new CairoTypeResult(contentItem, arrayContentType, strategies); } // not an iterator, not an CairoType, neither a CairoType -> so is low level data (BigNumberish, array, object) - const constructor = strategy.constructors[arrayContentType]; - if (constructor) { - return constructor(contentItem, strategy, arrayContentType); - } - const dynamicSelectors = Object.entries(strategy.dynamicSelectors); - const matchingSelector = dynamicSelectors.find(([, selectorFn]) => - selectorFn(arrayContentType) + const strategyConstructorNum = strategies.findIndex( + (strategy: ParsingStrategy) => strategy.constructors[arrayContentType] ); - if (matchingSelector) { - const [selectorName] = matchingSelector; - const dynamicConstructor = strategy.constructors[selectorName]; + if (strategyConstructorNum >= 0) { + const constructor = strategies[strategyConstructorNum].constructors[arrayContentType]; + return constructor(contentItem, strategies, arrayContentType); + } + const strategyDynamicNum = strategies.findIndex((strategy: ParsingStrategy) => { + const dynamicSelectors = Object.entries(strategy.dynamicSelectors); + return dynamicSelectors.find(([, selectorFn]) => selectorFn(arrayContentType)); + }); + if (strategyDynamicNum >= 0) { + const dynamicSelectors = Object.entries(strategies[strategyDynamicNum].dynamicSelectors); + const matchingSelector = dynamicSelectors.find(([, selectorFn]) => + selectorFn(arrayContentType) + ); + const [selectorName] = matchingSelector as [string, (type: string) => boolean]; + const dynamicConstructor = strategies[strategyDynamicNum].constructors[selectorName]; if (dynamicConstructor) { - return dynamicConstructor(contentItem, strategy, arrayContentType); + return dynamicConstructor(contentItem, strategies, arrayContentType); } } throw new Error(`"${arrayContentType}" is not a valid Cairo type`); @@ -158,46 +167,51 @@ export class CairoArray extends CairoType { * - Dynamic selectors (complex types like nested dynamic arrays) * - Unknown types (stored as raw strings for later error handling) * - * @param responseIterator - Iterator over string data to parse - * @param arrayType - The dynamic array type (e.g., "core::array::Array::") - * @param strategy - The parsing strategy containing constructors and selectors + * @param {Iterator} responseIterator - Iterator over string data to parse + * @param {string} arrayType - The dynamic array type (e.g., "core::array::Array::") + * @param {ParsingStrategy[]} strategy - The parsing strategy containing constructors and selectors * @returns Array of parsed CairoType instances * @private */ private static parser( responseIterator: Iterator, arrayType: string, - strategy: ParsingStrategy + parsingStrategies: ParsingStrategy[] ): CairoType[] { const elementType = getArrayType(arrayType); // Extract T from core::array::Array:: // For API responses, first element is the array length const lengthStr = getNext(responseIterator); const arrayLength = parseInt(lengthStr, 16); - // First check direct constructors - const constructor = strategy.constructors[elementType]; - - if (constructor) { + const strategyConstructorNum = parsingStrategies.findIndex( + (strategy: ParsingStrategy) => strategy.constructors[elementType] + ); + if (strategyConstructorNum >= 0) { + const constructor = parsingStrategies[strategyConstructorNum].constructors[elementType]; return Array.from({ length: arrayLength }, () => - constructor(responseIterator, strategy, elementType) + constructor(responseIterator, parsingStrategies, elementType) ); } - // Check dynamic selectors (includes CairoArray, CairoFixedArray, future: tuples, structs, etc.) - const dynamicSelectors = Object.entries(strategy.dynamicSelectors); - const matchingSelector = dynamicSelectors.find(([, selectorFn]) => selectorFn(elementType)); - - if (matchingSelector) { - const [selectorName] = matchingSelector; - const dynamicConstructor = strategy.constructors[selectorName]; + // Check dynamic selectors (includes CairoFixedArray, future: tuples, structs, etc.) + const strategyDynamicNum = parsingStrategies.findIndex((strategy: ParsingStrategy) => { + const dynamicSelectors = Object.entries(strategy.dynamicSelectors); + return dynamicSelectors.find(([, selectorFn]) => selectorFn(elementType)); + }); + if (strategyDynamicNum >= 0) { + const dynamicSelectors = Object.entries( + parsingStrategies[strategyDynamicNum].dynamicSelectors + ); + const matchingSelector = dynamicSelectors.find(([, selectorFn]) => selectorFn(elementType)); + const [selectorName] = matchingSelector as [string, (type: string) => boolean]; + const dynamicConstructor = parsingStrategies[strategyDynamicNum].constructors[selectorName]; if (dynamicConstructor) { return Array.from({ length: arrayLength }, () => - dynamicConstructor(responseIterator, strategy, elementType) + dynamicConstructor(responseIterator, parsingStrategies, elementType) ); } } - // Unknown type - collect raw values, defer error const rawValues = Array.from({ length: arrayLength }, () => getNext(responseIterator)); return rawValues as unknown as CairoType[]; @@ -342,7 +356,7 @@ export class CairoArray extends CairoType { * response parsers (e.g., CairoUint8 → BigInt). This method is used primarily for * parsing API responses into user-friendly formats. * - * @param strategy - Parsing strategy for response parsing + * @param strategyDecompose - Parsing strategy for response parsing * @returns Array of parsed values (BigInt, numbers, nested arrays, etc.) * @example * ```typescript @@ -350,8 +364,9 @@ export class CairoArray extends CairoType { * const parsed = dynArray.decompose(hdParsingStrategy); // [1n, 2n, 3n] * ``` */ - public decompose(strategy: ParsingStrategy): any[] { + public decompose(strategyDecompose: AllowArray): any[] { // Use response parsers to get final parsed values (for API response parsing) + const strategies = Array.isArray(strategyDecompose) ? strategyDecompose : [strategyDecompose]; const elementType = getArrayType(this.arrayType); return this.content.map((element) => { // For raw string values (unsupported types), throw error @@ -365,9 +380,12 @@ export class CairoArray extends CairoType { parserName = (element as any).dynamicSelector; } } - const responseParser = strategy.response[parserName]; + const strategyDecomposeNum = strategies.findIndex( + (strategy: ParsingStrategy) => strategy.response[parserName] + ); + const responseParser = strategies[strategyDecomposeNum].response[parserName]; if (responseParser) { - return responseParser(element, strategy); + return responseParser(element, strategies); } // No response parser found - throw error instead of fallback magic diff --git a/src/utils/cairoDataTypes/cairoStruct.ts b/src/utils/cairoDataTypes/cairoStruct.ts index eaeb0596e..fbdddf319 100644 --- a/src/utils/cairoDataTypes/cairoStruct.ts +++ b/src/utils/cairoDataTypes/cairoStruct.ts @@ -1,30 +1,60 @@ -import type { AbiStruct } from '../../types'; +import type { AbiStruct, AllowArray } from '../../types'; import assert from '../assert'; import type { ParsingStrategy, VariantType } from '../calldata'; -import { CairoOption } from '../calldata/enum'; import { addCompiledFlag } from '../helpers'; import { getNext } from '../num'; import { CairoType } from './cairoType.interface'; -import { CairoTypeOption } from './cairoTypeOption'; import { CairoFelt252 } from './felt'; +/** + * Represents a Cairo named struct. + */ export class CairoStruct extends CairoType { public readonly dynamicSelector: string; + /** Array of CairoType instances representing the struct elements. */ public readonly content: CairoType[]; + /** Cairo named struct type definition */ public readonly abiStruct: AbiStruct; - constructor(content: unknown, abiStruct: AbiStruct, strategy: ParsingStrategy) { + /** + * Represents a Cairo named struct. + * @param {unknown} content - Input data. (Iterator, object, array) + * @param {AbiStruct} abiStruct - Abi definition of the struct + * @param {AllowArray} parsingStrategy - parsing strategy or array of strategies, + * that includes the handling of the named struct defined in `abiStruct` (created automatically by `createAbiParser().parsingStrategies`) + * @example + * ```typescript + * const abiPoint: AbiStruct = { + * type: 'struct', + * name: 'cairo_test::Point', + * members: [{ name: 'x', type: 'core::integer::u64' }, { name: 'y', type: 'core::integer::u32' }] + * } + * // From user object + * const struct0 = new CairoStruct({x: 1, y: 2}, 'cairo_test::Point', parsingStrategies); + * // From an array + * const struct1 = new CairoStruct([1, 2], 'cairo_test::Point', parsingStrategies); + * // From an iterator + * const iterator = ['0x1', '0x2'][Symbol.iterator](); + * const struct2 = new CairoStruct(iterator, 'cairo_test::Point', parsingStrategies); + * ``` + */ + constructor( + content: unknown, + abiStruct: AbiStruct, + parsingStrategy: AllowArray + ) { super(); this.dynamicSelector = abiStruct.name; this.abiStruct = abiStruct; + const strategies = Array.isArray(parsingStrategy) ? parsingStrategy : [parsingStrategy]; if (content && typeof content === 'object' && 'next' in content) { // "content" is an iterator const parsedContent: CairoType[] = CairoStruct.parser( content as Iterator, abiStruct, - strategy + strategies ); this.content = parsedContent; return; @@ -39,37 +69,39 @@ export class CairoStruct extends CairoType { const structContentType: string[] = CairoStruct.getStructMembersTypes(abiStruct); const resultContent: any[] = CairoStruct.extractValuesArray(content).map( (contentItem: any, index: number) => { + // "content" is a CairoType if ( contentItem && typeof contentItem === 'object' && contentItem !== null && 'toApiRequest' in contentItem ) { - // "content" is a CairoType return contentItem as CairoType; } - if (contentItem instanceof CairoOption) { - // "content" is a CairoOption - return new CairoTypeOption(contentItem, structContentType[index], strategy); - } - - // TODO: add CairoResult // not an iterator, not an CairoType, neither a CairoType -> so is low level data (BigNumberish, array, object) - - const constructor = strategy.constructors[structContentType[index]]; - if (constructor) { - return constructor(contentItem, strategy, structContentType[index]); - } - const dynamicSelectors = Object.entries(strategy.dynamicSelectors); - const matchingSelector = dynamicSelectors.find(([, selectorFn]) => - selectorFn(structContentType[index]) + const strategyConstructorNum = strategies.findIndex( + (strategy: ParsingStrategy) => strategy.constructors[structContentType[index]] ); - if (matchingSelector) { - const [selectorName] = matchingSelector; - const dynamicConstructor = strategy.constructors[selectorName]; + if (strategyConstructorNum >= 0) { + const constructor = + strategies[strategyConstructorNum].constructors[structContentType[index]]; + return constructor(contentItem, strategies, structContentType[index]); + } + + const strategyDynamicNum = strategies.findIndex((strategy: ParsingStrategy) => { + const dynamicSelectors = Object.entries(strategy.dynamicSelectors); + return dynamicSelectors.find(([, selectorFn]) => selectorFn(structContentType[index])); + }); + if (strategyDynamicNum >= 0) { + const dynamicSelectors = Object.entries(strategies[strategyDynamicNum].dynamicSelectors); + const matchingSelector = dynamicSelectors.find(([, selectorFn]) => + selectorFn(structContentType[index]) + ); + const [selectorName] = matchingSelector as [string, (type: string) => boolean]; + const dynamicConstructor = strategies[strategyDynamicNum].constructors[selectorName]; if (dynamicConstructor) { - return dynamicConstructor(contentItem, strategy, structContentType[index]); + return dynamicConstructor(contentItem, strategies, structContentType[index]); } } throw new Error(`"${structContentType[index]}" is not a valid Cairo type`); @@ -78,35 +110,60 @@ export class CairoStruct extends CairoType { this.content = resultContent; } + /** + * Parse data from iterator into CairoType instances using the provided parsing strategy. + * + * This is the core parsing logic that consumes data sequentially from an iterator and + * converts it into proper CairoType instances. It handles: + * - Direct constructors (primitive types like u8, u256, etc.) + * - Dynamic selectors (complex types like nested tuples, arrays) + * - Unknown types (stored as raw strings for later error handling) + * @param {Iterator} responseIterator - Iterator over string data to parse + * @param {AbiStruct} abiStruct - The Abi description of the struct + * @param {ParsingStrategy[]} parsingStrategies - The parsing strategies containing constructors and selectors + * @returns Array of parsed CairoType instances + */ private static parser( responseIterator: Iterator, abiStruct: AbiStruct, - strategy: ParsingStrategy + parsingStrategies: ParsingStrategy[] ): CairoType[] { const elementTypes: string[] = CairoStruct.getStructMembersTypes(abiStruct); return elementTypes.map((elementType: string) => { - const constructor = strategy.constructors[elementType]; - if (constructor) { - return constructor(responseIterator, strategy, elementType); + const strategyConstructorNum = parsingStrategies.findIndex( + (strategy: ParsingStrategy) => strategy.constructors[elementType] + ); + if (strategyConstructorNum >= 0) { + const constructor = parsingStrategies[strategyConstructorNum].constructors[elementType]; + return constructor(responseIterator, parsingStrategies, elementType); } // Check dynamic selectors (includes CairoArray, CairoFixedArray, CairoTuple, etc.) - const dynamicSelectors = Object.entries(strategy.dynamicSelectors); - const matchingSelector = dynamicSelectors.find(([, selectorFn]) => selectorFn(elementType)); - - if (matchingSelector) { - const [selectorName] = matchingSelector; - const dynamicConstructor = strategy.constructors[selectorName]; + const strategyDynamicNum = parsingStrategies.findIndex((strategy: ParsingStrategy) => { + const dynamicSelectors = Object.entries(strategy.dynamicSelectors); + return dynamicSelectors.find(([, selectorFn]) => selectorFn(elementType)); + }); + if (strategyDynamicNum >= 0) { + const dynamicSelectors = Object.entries( + parsingStrategies[strategyDynamicNum].dynamicSelectors + ); + const matchingSelector = dynamicSelectors.find(([, selectorFn]) => selectorFn(elementType)); + const [selectorName] = matchingSelector as [string, (type: string) => boolean]; + const dynamicConstructor = parsingStrategies[strategyDynamicNum].constructors[selectorName]; if (dynamicConstructor) { - return dynamicConstructor(responseIterator, strategy, elementType); + return dynamicConstructor(responseIterator, parsingStrategies, elementType); } } // Unknown type - fallback to felt252 constructor - const feltConstructor = strategy.constructors[CairoFelt252.abiSelector]; - if (feltConstructor) { - return feltConstructor(responseIterator, strategy, elementType); + const feltConstructorNum = parsingStrategies.findIndex( + (strategy: ParsingStrategy) => strategy.constructors[CairoFelt252.abiSelector] + ); + if (feltConstructorNum >= 0) { + const feltConstructor = + parsingStrategies[feltConstructorNum].constructors[CairoFelt252.abiSelector]; + return feltConstructor(responseIterator, parsingStrategies, elementType); } // If even felt252 constructor is not available, collect raw value for error handling @@ -115,6 +172,12 @@ export class CairoStruct extends CairoType { }); } + /** + * Validate input data for CairoStruct creation. + * @param {unknown} input - Input data to validate + * @param {AbiStruct} abiStruct - optional - Abi definition of the struct + * @throws Error if input is invalid + */ static validate(input: unknown, abiStruct?: AbiStruct): void { assert( Array.isArray(input) || (typeof input === 'object' && input !== null), @@ -129,6 +192,13 @@ export class CairoStruct extends CairoType { ); } + /** + * Check if input data is valid for CairoStruct creation. + * @param {any} data - Input data to check + * @param {string} _type - not used + * @param {VariantType} _variant - not used + * @returns true if valid, false otherwise + */ static is(data: any, _type?: string, _variant?: VariantType): boolean { try { CairoStruct.validate(data); @@ -138,11 +208,17 @@ export class CairoStruct extends CairoType { } } + /** Not applicable for CairoStruct */ static isAbiType(_type: string): boolean { // A Cairo struct type (it's name) do not include any special pattern allowing to identify it directly. return true; } + /** + * Extract an array from data representing a Cairo Struct + * @param {unknown} input - Input data (array or object) + * @returns {any[]} Array of values extracted from the input + */ private static extractValuesArray(input: unknown): any[] { if (Array.isArray(input)) { return input; @@ -151,20 +227,50 @@ export class CairoStruct extends CairoType { return Object.values(inputObj); } + /** + * Extract the Cairo type of each property of a named Cairo Struct + * @param {AbiStruct} type - Abi definition of the struct + * @returns {string[]} an array of Cairo types + */ private static getStructMembersTypes(type: AbiStruct): string[] { return type.members.map((member) => member.type); } + /** + *Extract the Cairo names of each property of a named Cairo Struct + * @param {AbiStruct} type - Abi definition of the struct + * @returns {string[]} an array of Cairo struct properties + */ public static extractStructMembersNames(type: AbiStruct): string[] { return type.members.map((member) => member.name); } + /** + * Serialize the CairoStruct into hex strings for Starknet API requests. + * @returns {string[]} Array of hex strings ready for API requests + * ```typescript + * // for a struct {x:1, y:2} + * const result = myStruct.toApiRequest(); + * // result = ['0x1', '0x2'] + * ``` + */ toApiRequest(): string[] { const result = this.content.flatMap((element) => element.toApiRequest()); return addCompiledFlag(result); } - public decompose(strategy: ParsingStrategy): Object { + /** + * Decompose the struct into final parsed values, in an object {x:value0, ...}. + * @param {AllowArray} strategyDecompose + * @returns {Object} an object of format {a:value0, b:value1, ...} + * ```typescript + * // for a struct {x:1, y:2} + * const result = myStruct.decompose(strategies); + * // result = {x:1, y:2} + * ``` + */ + public decompose(strategyDecompose: AllowArray): Object { + const strategies = Array.isArray(strategyDecompose) ? strategyDecompose : [strategyDecompose]; const structContentType = CairoStruct.getStructMembersTypes(this.abiStruct); const result = this.content.map((element: CairoType, index: number) => { // For raw string values (unsupported types), throw error @@ -182,9 +288,12 @@ export class CairoStruct extends CairoType { parserName = (element as any).dynamicSelector; } } - const responseParser = strategy.response[parserName]; + const strategyDecomposeNum = strategies.findIndex( + (strategy: ParsingStrategy) => strategy.response[parserName] + ); + const responseParser = strategies[strategyDecomposeNum].response[parserName]; if (responseParser) { - return responseParser(element, strategy); + return responseParser(element, strategies); } // No response parser found - throw error instead of fallback magic throw new Error( diff --git a/src/utils/cairoDataTypes/cairoTypeOption.ts b/src/utils/cairoDataTypes/cairoTypeOption.ts index 77f6c5224..6901cc31e 100644 --- a/src/utils/cairoDataTypes/cairoTypeOption.ts +++ b/src/utils/cairoDataTypes/cairoTypeOption.ts @@ -1,13 +1,14 @@ import assert from '../assert'; import { addCompiledFlag } from '../helpers'; import { getNext } from '../num'; -import { type ParsingStrategy, type VariantType } from '../calldata/parser/parsingStrategy'; +import { type ParsingStrategy, type VariantType } from '../calldata/parser/parsingStrategy.type'; import { CairoType } from './cairoType.interface'; import { isTypeOption } from '../calldata/cairo'; import { isUndefined } from '../typed'; import { CairoOptionVariant, CairoOption, CairoResult, CairoResultVariant } from '../calldata/enum'; // eslint-disable-next-line import/no-cycle import { CairoTypeResult } from './cairoTypeResult'; +import type { AllowArray } from '../../types'; /** * Represents a Cairo Option. @@ -44,7 +45,7 @@ export class CairoTypeOption extends CairoType { * Iterator, CairoOption, CairoResult, CairoCustomEnum, or CairoType instance). * "content" parameter has to be defined when Some variant is selected * @param {string} optionCairoType - Cairo option type string (e.g., "core::option::Option::"). - * @param {ParsingStrategy} strategy - Parsing strategy for element type handling (e.g. hdParsingStrategy). + * @param {AllowArray} parsingStrategy - Parsing strategy for element type handling (e.g. hdParsingStrategy). * @param {CairoOptionVariant | number} [variant] - (optional) variant of the option: CairoOptionVariant.Some (0), or CairoOptionVariant.None (1). If "content" is an iterator, this parameter must be omitted. * @param {boolean} [subType=false] - optional default=false. Use "true" if called in nested CairoOption instances. * @example @@ -70,12 +71,13 @@ export class CairoTypeOption extends CairoType { constructor( content: unknown, optionCairoType: string, - strategy: ParsingStrategy, + parsingStrategy: AllowArray, variant?: CairoOptionVariant | number, subType: boolean = false ) { super(); this.optionCairoType = optionCairoType; + const strategies = Array.isArray(parsingStrategy) ? parsingStrategy : [parsingStrategy]; if (variant === CairoOptionVariant.Some && isUndefined(content)) { throw new Error('"content" parameter has to be defined when Some variant is selected'); } @@ -94,7 +96,7 @@ export class CairoTypeOption extends CairoType { const parsedContent: CairoType = CairoTypeOption.parser( content as Iterator, optionCairoType, - strategy + strategies ); this.content = parsedContent; break; @@ -128,7 +130,7 @@ export class CairoTypeOption extends CairoType { const option = new CairoTypeOption( content.unwrap(), subType ? CairoTypeOption.getVariantSomeType(optionCairoType) : optionCairoType, - strategy, + strategies, content.isSome() ? CairoOptionVariant.Some : CairoOptionVariant.None, true // recursive sub-type ); @@ -141,7 +143,7 @@ export class CairoTypeOption extends CairoType { const result = new CairoTypeResult( content.unwrap(), CairoTypeOption.getVariantSomeType(optionCairoType), - strategy, + strategies, content.isOk() ? CairoResultVariant.Ok : CairoResultVariant.Err, false ); @@ -158,19 +160,28 @@ export class CairoTypeOption extends CairoType { switch (variant) { case CairoOptionVariant.Some: { const elementType = CairoTypeOption.getVariantSomeType(optionCairoType); - const constructor = strategy.constructors[elementType]; - if (constructor) { - this.content = constructor(content, strategy, elementType); + const strategyConstructorNum = strategies.findIndex( + (strategy: ParsingStrategy) => strategy.constructors[elementType] + ); + if (strategyConstructorNum >= 0) { + const constructor = strategies[strategyConstructorNum].constructors[elementType]; + this.content = constructor(content, strategies, elementType); } else { - const dynamicSelectors = Object.entries(strategy.dynamicSelectors); - const matchingSelector = dynamicSelectors.find(([, selectorFn]) => - selectorFn(elementType) - ); - if (matchingSelector) { - const [selectorName] = matchingSelector; - const dynamicConstructor = strategy.constructors[selectorName]; + const strategyDynamicNum = strategies.findIndex((strategy: ParsingStrategy) => { + const dynamicSelectors = Object.entries(strategy.dynamicSelectors); + return dynamicSelectors.find(([, selectorFn]) => selectorFn(elementType)); + }); + if (strategyDynamicNum >= 0) { + const dynamicSelectors = Object.entries( + strategies[strategyDynamicNum].dynamicSelectors + ); + const matchingSelector = dynamicSelectors.find(([, selectorFn]) => + selectorFn(elementType) + ); + const [selectorName] = matchingSelector as [string, (type: string) => boolean]; + const dynamicConstructor = strategies[strategyDynamicNum].constructors[selectorName]; if (dynamicConstructor) { - this.content = dynamicConstructor(content, strategy, elementType); + this.content = dynamicConstructor(content, strategies, elementType); } } else { throw new Error(`"${elementType}" is not a valid Cairo type`); @@ -201,28 +212,36 @@ export class CairoTypeOption extends CairoType { * * @param {Iterator} responseIterator - Iterator over string data to parse * @param {string} someVariantCairoType - The Cairo option type (e.g., "core::option::Option::") - * @param {ParsingStrategy} strategy - The parsing strategy containing constructors and selectors + * @param {ParsingStrategy[]} parsingStrategies - The parsing strategy containing constructors and selectors * @returns {CairoType} CairoType instance * @private */ private static parser( responseIterator: Iterator, someVariantCairoType: string, - strategy: ParsingStrategy + parsingStrategies: ParsingStrategy[] ): CairoType { const elementType = CairoTypeOption.getVariantSomeType(someVariantCairoType); - const constructor = strategy.constructors[elementType]; - if (constructor) { - return constructor(responseIterator, strategy, elementType); + const strategyConstructorNum = parsingStrategies.findIndex( + (strategy: ParsingStrategy) => strategy.constructors[elementType] + ); + if (strategyConstructorNum >= 0) { + const constructor = parsingStrategies[strategyConstructorNum].constructors[elementType]; + return constructor(responseIterator, parsingStrategies, elementType); } - const dynamicSelectors = Object.entries(strategy.dynamicSelectors); - const matchingSelector = dynamicSelectors.find(([, selectorFn]) => selectorFn(elementType)); - - if (matchingSelector) { - const [selectorName] = matchingSelector; - const dynamicConstructor = strategy.constructors[selectorName]; + const strategyDynamicNum = parsingStrategies.findIndex((strategy: ParsingStrategy) => { + const dynamicSelectors = Object.entries(strategy.dynamicSelectors); + return dynamicSelectors.find(([, selectorFn]) => selectorFn(elementType)); + }); + if (strategyDynamicNum >= 0) { + const dynamicSelectors = Object.entries( + parsingStrategies[strategyDynamicNum].dynamicSelectors + ); + const matchingSelector = dynamicSelectors.find(([, selectorFn]) => selectorFn(elementType)); + const [selectorName] = matchingSelector as [string, (type: string) => boolean]; + const dynamicConstructor = parsingStrategies[strategyDynamicNum].constructors[selectorName]; if (dynamicConstructor) { - return dynamicConstructor(responseIterator, strategy, elementType); + return dynamicConstructor(responseIterator, parsingStrategies, elementType); } } // Unknown type - collect raw values, defer error @@ -249,7 +268,7 @@ export class CairoTypeOption extends CairoType { /** * Validate input data for CairoTypeOption creation. - * @param {unknown} input - Input data to validate + * @param {unknown} _input - Input data to validate * @param {string} type - The Cairo option type string (e.g., "core::option::Option::") * @throws Error if input is invalid * @example @@ -258,7 +277,7 @@ export class CairoTypeOption extends CairoType { * CairoTypeOption.validate(200, "wrong", 3); // throws * ``` */ - static validate(input: unknown, type: string, variant: VariantType | undefined): void { + static validate(_input: unknown, type: string, variant: VariantType | undefined): void { assert( CairoTypeOption.isAbiType(type), `The type ${type} is not a Cairo option. Needs core::option::Option::.` @@ -276,6 +295,7 @@ export class CairoTypeOption extends CairoType { * Check if input data is valid for CairoTypeOption creation. * @param {unknown} input - Input data to check * @param {string} type - The Cairo option type (e.g., "core::option::Option::") + * @param {VariantType} variant - The variant of the option (Some or None) * @returns {boolean} true if valid, false otherwise * @example * ```typescript @@ -330,8 +350,9 @@ export class CairoTypeOption extends CairoType { return addCompiledFlag(result.flat()); } - private decomposeSome(strategy: ParsingStrategy): any { + private decomposeSome(strategyDecompose: AllowArray): any { const { content } = this; + const strategies = Array.isArray(strategyDecompose) ? strategyDecompose : [strategyDecompose]; const elementType = CairoTypeOption.getVariantSomeType(this.optionCairoType); // For raw string values (unsupported types), throw error if (typeof content === 'string') { @@ -344,9 +365,12 @@ export class CairoTypeOption extends CairoType { parserName = (content as any).dynamicSelector; } } - const responseParser = strategy.response[parserName]; + const strategyDecomposeNum = strategies.findIndex( + (strategy: ParsingStrategy) => strategy.response[parserName] + ); + const responseParser = strategies[strategyDecomposeNum].response[parserName]; if (responseParser) { - return responseParser(content as CairoType, strategy); + return responseParser(content as CairoType, strategies[strategyDecomposeNum]); } // No response parser found - throw error instead of fallback magic @@ -362,7 +386,7 @@ export class CairoTypeOption extends CairoType { * response parsers (e.g., CairoUint8 → BigInt). This method is used primarily for * parsing API responses into user-friendly formats. * - * @param {ParsingStrategy} strategy - Parsing strategy for response parsing + * @param {AllowArray} strategyDecompose - Parsing strategy for response parsing * @returns {CairoOption} a CairoOptionInstance, with parsed variant (BigInt, numbers, nested arrays, etc.) * @example * ```typescript @@ -370,9 +394,9 @@ export class CairoTypeOption extends CairoType { * const parsed = myOption.decompose(hdParsingStrategy); // CairoOption{ Some: 3n } * ``` */ - public decompose(strategy: ParsingStrategy): CairoOption { + public decompose(strategyDecompose: AllowArray): CairoOption { if (this.isVariantSome) { - const someContent = this.decomposeSome(strategy); + const someContent = this.decomposeSome(strategyDecompose); return new CairoOption(CairoOptionVariant.Some, someContent); } return new CairoOption(CairoOptionVariant.None); diff --git a/src/utils/cairoDataTypes/cairoTypeResult.ts b/src/utils/cairoDataTypes/cairoTypeResult.ts index a48a9e21c..a93fc070e 100644 --- a/src/utils/cairoDataTypes/cairoTypeResult.ts +++ b/src/utils/cairoDataTypes/cairoTypeResult.ts @@ -1,7 +1,7 @@ import assert from '../assert'; import { addCompiledFlag } from '../helpers'; import { getNext } from '../num'; -import { type ParsingStrategy, type VariantType } from '../calldata/parser/parsingStrategy'; +import { type ParsingStrategy, type VariantType } from '../calldata/parser/parsingStrategy.type'; import { CairoType } from './cairoType.interface'; import { isTypeResult } from '../calldata/cairo'; import { isUndefined } from '../typed'; @@ -10,6 +10,7 @@ import { CairoOptionVariant, CairoOption, CairoResultVariant, CairoResult } from import { CairoTuple } from './tuple'; // eslint-disable-next-line import/no-cycle import { CairoTypeOption } from './cairoTypeOption'; +import type { AllowArray } from '../../types'; /** * Represents a Cairo Result enum. @@ -45,7 +46,7 @@ export class CairoTypeResult extends CairoType { * @param {unknown} content - Input data (array, object, BigNumberish, * Iterator, CairoOption, CairoResult, CairoCustomEnum, or CairoType instance). * @param {string} resultCairoType - Cairo result type string (e.g., "core::result::Result::"). - * @param {ParsingStrategy} strategy - Parsing strategy for element type handling (e.g. hdParsingStrategy). + * @param {AllowArray} parsingStrategy - Parsing strategy for element type handling (e.g. hdParsingStrategy). * @param {CairoResultVariant | number} [variant] - (optional) variant of the result: CairoResultVariant.Ok (0), or CairoResultVariant.Err (1). If "content" is an iterator, this parameter must be omitted. * @param {boolean} [subType=false] - optional default=false. Use "true" if called in nested CairoResult instances. * @example @@ -71,12 +72,13 @@ export class CairoTypeResult extends CairoType { constructor( content: unknown, resultCairoType: string, - strategy: ParsingStrategy, + parsingStrategy: AllowArray, variant?: CairoResultVariant | number, subType: boolean = false ) { super(); this.resultCairoType = resultCairoType; + const strategies = Array.isArray(parsingStrategy) ? parsingStrategy : [parsingStrategy]; assert(!isUndefined(content), '"content" parameter has to be defined.'); assert(content !== null, '"content" parameter has to be defined.'); if (typeof content === 'object' && 'next' in content) { @@ -91,7 +93,7 @@ export class CairoTypeResult extends CairoType { const parsedContent: CairoType = CairoTypeResult.parser( content as Iterator, activeVariantType, - strategy + strategies ); this.content = parsedContent; this.isVariantOk = variantFromIterator === CairoResultVariant.Ok; @@ -127,7 +129,7 @@ export class CairoTypeResult extends CairoType { const option = new CairoTypeOption( content.unwrap(), CairoTypeResult.getVariantTypes(resultCairoType)[variant], - strategy, + strategies, content.isSome() ? CairoOptionVariant.Some : CairoOptionVariant.None ); this.content = option; @@ -148,7 +150,7 @@ export class CairoTypeResult extends CairoType { const result = new CairoTypeResult( content.unwrap(), typeForResult, - strategy, + strategies, variantForResult, true // recursive sub-type ); @@ -163,17 +165,24 @@ export class CairoTypeResult extends CairoType { '"variant" parameter is mandatory when creating a new Cairo Result from a Cairo Enum or raw data.' ); const elementType = CairoTypeResult.getVariantTypes(resultCairoType)[variant]; - const constructor = strategy.constructors[elementType]; - if (constructor) { - this.content = constructor(content, strategy, elementType); + const strategyConstructorNum = strategies.findIndex( + (strategy: ParsingStrategy) => strategy.constructors[elementType] + ); + if (strategyConstructorNum >= 0) { + const constructor = strategies[strategyConstructorNum].constructors[elementType]; + this.content = constructor(content, strategies, elementType); } else { - const dynamicSelectors = Object.entries(strategy.dynamicSelectors); - const matchingSelector = dynamicSelectors.find(([, selectorFn]) => selectorFn(elementType)); - if (matchingSelector) { - const [selectorName] = matchingSelector; - const dynamicConstructor = strategy.constructors[selectorName]; + const strategyDynamicNum = strategies.findIndex((strategy: ParsingStrategy) => { + const dynamicSelectors = Object.entries(strategy.dynamicSelectors); + return dynamicSelectors.find(([, selectorFn]) => selectorFn(elementType)); + }); + if (strategyDynamicNum >= 0) { + const dynamicSelectors = Object.entries(strategies[strategyDynamicNum].dynamicSelectors); + const matchingSelector = dynamicSelectors.find(([, selectorFn]) => selectorFn(elementType)); + const [selectorName] = matchingSelector as [string, (type: string) => boolean]; + const dynamicConstructor = strategies[strategyDynamicNum].constructors[selectorName]; if (dynamicConstructor) { - this.content = dynamicConstructor(content, strategy, elementType); + this.content = dynamicConstructor(content, strategies, elementType); } } else { throw new Error(`"${elementType}" is not a valid Cairo type`); @@ -193,27 +202,35 @@ export class CairoTypeResult extends CairoType { * * @param {Iterator} responseIterator - Iterator over string data to parse * @param {string} elementType - The Cairo result type (e.g., "core::result::Result::") - * @param {ParsingStrategy} strategy - The parsing strategy containing constructors and selectors + * @param {ParsingStrategy[]} parsingStrategies - The parsing strategy containing constructors and selectors * @returns {CairoType} CairoType instance * @private */ private static parser( responseIterator: Iterator, elementType: string, - strategy: ParsingStrategy + parsingStrategies: ParsingStrategy[] ): CairoType { - const constructor = strategy.constructors[elementType]; - if (constructor) { - return constructor(responseIterator, strategy, elementType); + const strategyConstructorNum = parsingStrategies.findIndex( + (strategy: ParsingStrategy) => strategy.constructors[elementType] + ); + if (strategyConstructorNum >= 0) { + const constructor = parsingStrategies[strategyConstructorNum].constructors[elementType]; + return constructor(responseIterator, parsingStrategies, elementType); } - const dynamicSelectors = Object.entries(strategy.dynamicSelectors); - const matchingSelector = dynamicSelectors.find(([, selectorFn]) => selectorFn(elementType)); - - if (matchingSelector) { - const [selectorName] = matchingSelector; - const dynamicConstructor = strategy.constructors[selectorName]; + const strategyDynamicNum = parsingStrategies.findIndex((strategy: ParsingStrategy) => { + const dynamicSelectors = Object.entries(strategy.dynamicSelectors); + return dynamicSelectors.find(([, selectorFn]) => selectorFn(elementType)); + }); + if (strategyDynamicNum >= 0) { + const dynamicSelectors = Object.entries( + parsingStrategies[strategyDynamicNum].dynamicSelectors + ); + const matchingSelector = dynamicSelectors.find(([, selectorFn]) => selectorFn(elementType)); + const [selectorName] = matchingSelector as [string, (type: string) => boolean]; + const dynamicConstructor = parsingStrategies[strategyDynamicNum].constructors[selectorName]; if (dynamicConstructor) { - return dynamicConstructor(responseIterator, strategy, elementType); + return dynamicConstructor(responseIterator, parsingStrategies, elementType); } } // Unknown type - collect raw values, defer error @@ -245,7 +262,7 @@ export class CairoTypeResult extends CairoType { /** * Validate input data for CairoTypeResult creation. - * @param {unknown} input - Input data to validate + * @param {unknown} _input - Input data to validate * @param {string} type - The Cairo Result type string (e.g., "core::result::Result::") * @throws Error if input is invalid * @example @@ -254,7 +271,7 @@ export class CairoTypeResult extends CairoType { * CairoTypeResult.validate(200, "wrong", 3); // throws * ``` */ - static validate(input: unknown, type: string, variant: VariantType | undefined): void { + static validate(_input: unknown, type: string, variant: VariantType | undefined): void { assert( CairoTypeResult.isAbiType(type), `The type ${type} is not a Cairo Result. Needs core::result::Result::.` @@ -332,7 +349,7 @@ export class CairoTypeResult extends CairoType { * response parsers (e.g., CairoUint8 → BigInt). This method is used primarily for * parsing API responses into user-friendly formats. * - * @param {ParsingStrategy} strategy - Parsing strategy for response parsing + * @param {AllowArray} strategyDecompose - Parsing strategy for response parsing * @returns {CairoResult} a CairoResultInstance, with parsed variant (BigInt, numbers, nested arrays, etc.) * @example * ```typescript @@ -340,8 +357,9 @@ export class CairoTypeResult extends CairoType { * const parsed = myResult.decompose(hdParsingStrategy); // CairoResult{ Some: 3n } * ``` */ - public decompose(strategy: ParsingStrategy): CairoResult { + public decompose(strategyDecompose: AllowArray): CairoResult { const { content } = this; + const strategies = Array.isArray(strategyDecompose) ? strategyDecompose : [strategyDecompose]; // For raw string values (unsupported types), throw error const elementType = CairoTypeResult.getVariantTypes(this.resultCairoType)[ this.isVariantOk ? CairoResultVariant.Ok : CairoResultVariant.Err @@ -356,11 +374,14 @@ export class CairoTypeResult extends CairoType { parserName = (content as any).dynamicSelector; } } - const responseParser = strategy.response[parserName]; + const strategyDecomposeNum = strategies.findIndex( + (strategy: ParsingStrategy) => strategy.response[parserName] + ); + const responseParser = strategies[strategyDecomposeNum].response[parserName]; if (responseParser) { return new CairoResult( this.isVariantOk ? CairoResultVariant.Ok : CairoResultVariant.Err, - responseParser(content as CairoType, strategy) + responseParser(content as CairoType, strategies) ); } // No response parser found - throw error instead of fallback magic diff --git a/src/utils/cairoDataTypes/fixedArray.ts b/src/utils/cairoDataTypes/fixedArray.ts index 35a60ba8b..26a0a5b19 100644 --- a/src/utils/cairoDataTypes/fixedArray.ts +++ b/src/utils/cairoDataTypes/fixedArray.ts @@ -1,11 +1,12 @@ import assert from '../assert'; import { addCompiledFlag } from '../helpers'; import { getNext } from '../num'; -import { type ParsingStrategy } from '../calldata/parser/parsingStrategy'; +import { type ParsingStrategy } from '../calldata/parser/parsingStrategy.type'; import { CairoType } from './cairoType.interface'; import { CairoOption, CairoResult } from '../calldata/enum'; import { CairoTypeOption } from './cairoTypeOption'; import { CairoTypeResult } from './cairoTypeResult'; +import type { AllowArray } from '../../types'; /** * Represents a Cairo fixed-size array with compile-time known length. @@ -68,7 +69,7 @@ export class CairoFixedArray extends CairoType { * * @param content - Input data (array, object, Iterator, or CairoType instances) * @param arrayType - Fixed array type string (e.g., "[core::integer::u8; 3]") - * @param strategy - Parsing strategy for element type handling + * @param parsingStrategy - Parsing strategy for element type handling * @example * ```typescript * // From user array @@ -85,29 +86,16 @@ export class CairoFixedArray extends CairoType { * const nested = new CairoFixedArray([[1, 2], [3, 4]], '[[core::integer::u8; 2]; 2]', hdParsingStrategy); * ``` */ - constructor(content: unknown, arrayType: string, strategy: ParsingStrategy) { + constructor(content: unknown, arrayType: string, parsingStrategy: AllowArray) { super(); - - // // If content is already a CairoFixedArray instance, just copy its properties - // if (content instanceof CairoFixedArray) { - // this.content = content.content; - // this.arrayType = content.arrayType; - // return; - // } - - // // Always use parser for unified processing - // const iterator = CairoFixedArray.prepareIterator(content, arrayType); - // const parsedContent = CairoFixedArray.parser(iterator, arrayType, strategy); - - // this.content = parsedContent; - this.arrayType = arrayType; + const strategies = Array.isArray(parsingStrategy) ? parsingStrategy : [parsingStrategy]; if (content && typeof content === 'object' && 'next' in content) { // "content" is an iterator const parsedContent: CairoType[] = CairoFixedArray.parser( content as Iterator, arrayType, - strategy + strategies ); this.content = parsedContent; return; @@ -132,26 +120,33 @@ export class CairoFixedArray extends CairoType { } if (contentItem instanceof CairoOption) { // "content" is a CairoOption - return new CairoTypeOption(contentItem, arrayContentType, strategy); + return new CairoTypeOption(contentItem, arrayContentType, strategies); } if (contentItem instanceof CairoResult) { // "content" is a CairoResult - return new CairoTypeResult(contentItem, arrayContentType, strategy); + return new CairoTypeResult(contentItem, arrayContentType, strategies); } // not an iterator, not an CairoType, neither a CairoType -> so is low level data (BigNumberish, array, object) - const constructor = strategy.constructors[arrayContentType]; - if (constructor) { - return constructor(contentItem, strategy, arrayContentType); - } - const dynamicSelectors = Object.entries(strategy.dynamicSelectors); - const matchingSelector = dynamicSelectors.find(([, selectorFn]) => - selectorFn(arrayContentType) + const strategyConstructorNum = strategies.findIndex( + (strategy: ParsingStrategy) => strategy.constructors[arrayContentType] ); - if (matchingSelector) { - const [selectorName] = matchingSelector; - const dynamicConstructor = strategy.constructors[selectorName]; + if (strategyConstructorNum >= 0) { + const constructor = strategies[strategyConstructorNum].constructors[arrayContentType]; + return constructor(contentItem, strategies, arrayContentType); + } + const strategyDynamicNum = strategies.findIndex((strategy: ParsingStrategy) => { + const dynamicSelectors = Object.entries(strategy.dynamicSelectors); + return dynamicSelectors.find(([, selectorFn]) => selectorFn(arrayContentType)); + }); + if (strategyDynamicNum >= 0) { + const dynamicSelectors = Object.entries(strategies[strategyDynamicNum].dynamicSelectors); + const matchingSelector = dynamicSelectors.find(([, selectorFn]) => + selectorFn(arrayContentType) + ); + const [selectorName] = matchingSelector as [string, (type: string) => boolean]; + const dynamicConstructor = strategies[strategyDynamicNum].constructors[selectorName]; if (dynamicConstructor) { - return dynamicConstructor(contentItem, strategy, arrayContentType); + return dynamicConstructor(contentItem, strategies, arrayContentType); } } throw new Error(`"${arrayContentType}" is not a valid Cairo type`); @@ -175,37 +170,44 @@ export class CairoFixedArray extends CairoType { * * @param responseIterator - Iterator over string data to parse * @param arrayType - The fixed array type (e.g., "[core::integer::u32; 4]") - * @param strategy - The parsing strategy containing constructors and selectors + * @param parsingStrategies - The parsing strategy containing constructors and selectors * @returns Array of parsed CairoType instances * @private */ private static parser( responseIterator: Iterator, arrayType: string, - strategy: ParsingStrategy + parsingStrategies: ParsingStrategy[] ): CairoType[] { const elementType = CairoFixedArray.getFixedArrayType(arrayType); const outerSize = CairoFixedArray.getFixedArraySize(arrayType); // First check direct constructors - const constructor = strategy.constructors[elementType]; - - if (constructor) { + const strategyConstructorNum = parsingStrategies.findIndex( + (strategy: ParsingStrategy) => strategy.constructors[elementType] + ); + if (strategyConstructorNum >= 0) { + const constructor = parsingStrategies[strategyConstructorNum].constructors[elementType]; return Array.from({ length: outerSize }, () => - constructor(responseIterator, strategy, elementType) + constructor(responseIterator, parsingStrategies, elementType) ); } // Check dynamic selectors (includes CairoFixedArray, future: tuples, structs, etc.) - const dynamicSelectors = Object.entries(strategy.dynamicSelectors); - const matchingSelector = dynamicSelectors.find(([, selectorFn]) => selectorFn(elementType)); - - if (matchingSelector) { - const [selectorName] = matchingSelector; - const dynamicConstructor = strategy.constructors[selectorName]; + const strategyDynamicNum = parsingStrategies.findIndex((strategy: ParsingStrategy) => { + const dynamicSelectors = Object.entries(strategy.dynamicSelectors); + return dynamicSelectors.find(([, selectorFn]) => selectorFn(elementType)); + }); + if (strategyDynamicNum >= 0) { + const dynamicSelectors = Object.entries( + parsingStrategies[strategyDynamicNum].dynamicSelectors + ); + const matchingSelector = dynamicSelectors.find(([, selectorFn]) => selectorFn(elementType)); + const [selectorName] = matchingSelector as [string, (type: string) => boolean]; + const dynamicConstructor = parsingStrategies[strategyDynamicNum].constructors[selectorName]; if (dynamicConstructor) { return Array.from({ length: outerSize }, () => - dynamicConstructor(responseIterator, strategy, elementType) + dynamicConstructor(responseIterator, parsingStrategies, elementType) ); } } @@ -378,7 +380,7 @@ export class CairoFixedArray extends CairoType { * response parsers (e.g., CairoUint8 → BigInt). This method is used primarily for * parsing API responses into user-friendly formats. * - * @param strategy - Parsing strategy for response parsing + * @param strategyDecompose - Parsing strategy for response parsing * @returns Array of parsed values (BigInt, numbers, nested arrays, etc.) * @example * ```typescript @@ -386,8 +388,29 @@ export class CairoFixedArray extends CairoType { * const parsed = fixedArray.decompose(hdParsingStrategy); // [1n, 2n, 3n] * ``` */ - public decompose(strategy: ParsingStrategy): any[] { + + /** + * Create an object from a Cairo fixed array. + * Be sure to have an array length conform to the ABI. + * To be used with CallData.compile(). + * @param {Array} input JS array representing a Cairo fixed array. + * @returns {Object} a specific struct representing a fixed Array. + * @example + * ```typescript + * const result = CairoFixedArray.compile([10,20,30]); + * // result = { '0': 10, '1': 20, '2': 30 } + * ``` + */ + static compile(input: Array): Object { + return input.reduce((acc: any, item: any, idx: number) => { + acc[idx] = item; + return acc; + }, {}); + } + + public decompose(strategyDecompose: AllowArray): any[] { // Use response parsers to get final parsed values (for API response parsing) + const strategies = Array.isArray(strategyDecompose) ? strategyDecompose : [strategyDecompose]; const elementType = CairoFixedArray.getFixedArrayType(this.arrayType); return this.content.map((element) => { // For raw string values (unsupported types), throw error @@ -401,9 +424,12 @@ export class CairoFixedArray extends CairoType { parserName = (element as any).dynamicSelector; } } - const responseParser = strategy.response[parserName]; + const strategyDecomposeNum = strategies.findIndex( + (strategy: ParsingStrategy) => strategy.response[parserName] + ); + const responseParser = strategies[strategyDecomposeNum].response[parserName]; if (responseParser) { - return responseParser(element, strategy); + return responseParser(element, strategies); } // No response parser found - throw error instead of fallback magic diff --git a/src/utils/cairoDataTypes/tuple.ts b/src/utils/cairoDataTypes/tuple.ts index 5b111aa49..3cb6ed681 100644 --- a/src/utils/cairoDataTypes/tuple.ts +++ b/src/utils/cairoDataTypes/tuple.ts @@ -2,13 +2,14 @@ import assert from '../assert'; import { addCompiledFlag } from '../helpers'; import { getNext } from '../num'; import { isTypeTuple, isCairo1Type, isTypeNamedTuple } from '../calldata/cairo'; -import { type ParsingStrategy } from '../calldata/parser/parsingStrategy'; +import { type ParsingStrategy } from '../calldata/parser/parsingStrategy.type'; import { CairoType } from './cairoType.interface'; import { CairoFelt252 } from './felt'; import { CairoOption, CairoResult } from '../calldata/enum'; // eslint-disable-next-line import/no-cycle import { CairoTypeOption } from './cairoTypeOption'; import { CairoTypeResult } from './cairoTypeResult'; +import type { AllowArray } from '../../types'; /** * Represents a Cairo tuple with compile-time known structure. @@ -88,15 +89,16 @@ export class CairoTuple extends CairoType { * const nested = new CairoTuple([[1, 2], 3], '((core::integer::u8, core::integer::u8), core::integer::u32)', hdParsingStrategy); * ``` */ - constructor(content: unknown, tupleType: string, strategy: ParsingStrategy) { + constructor(content: unknown, tupleType: string, parsingStrategy: AllowArray) { super(); this.tupleType = tupleType; + const strategies = Array.isArray(parsingStrategy) ? parsingStrategy : [parsingStrategy]; if (content && typeof content === 'object' && 'next' in content) { // "content" is an iterator const parsedContent: CairoType[] = CairoTuple.parser( content as Iterator, tupleType, - strategy + strategies ); this.content = parsedContent; return; @@ -124,27 +126,38 @@ export class CairoTuple extends CairoType { } if (contentItem instanceof CairoOption) { // "content" is a CairoOption - return new CairoTypeOption(contentItem, tupleContentType[index], strategy); + return new CairoTypeOption(contentItem, tupleContentType[index], strategies); } if (contentItem instanceof CairoResult) { // "content" is a CairoResult - return new CairoTypeResult(contentItem, tupleContentType[index], strategy); + return new CairoTypeResult(contentItem, tupleContentType[index], strategies); } // not an iterator, not an CairoType, neither a CairoType -> so is low level data (BigNumberish, array, object) - - const constructor = strategy.constructors[tupleContentType[index]]; - if (constructor) { - return constructor(contentItem, strategy, tupleContentType[index]); - } - const dynamicSelectors = Object.entries(strategy.dynamicSelectors); - const matchingSelector = dynamicSelectors.find(([, selectorFn]) => - selectorFn(tupleContentType[index]) + const strategyConstructorNum = strategies.findIndex( + (strategy: ParsingStrategy) => strategy.constructors[tupleContentType[index]] ); - if (matchingSelector) { - const [selectorName] = matchingSelector; - const dynamicConstructor = strategy.constructors[selectorName]; + if (strategyConstructorNum >= 0) { + const constructor = + strategies[strategyConstructorNum].constructors[tupleContentType[index]]; + return constructor(contentItem, strategies, tupleContentType[index]); + } + const strategyDynamicNum = strategies.findIndex((strategy: ParsingStrategy) => { + const dynamicSelectors = Object.entries(strategy.dynamicSelectors); + return dynamicSelectors.find(([, selectorFn]) => selectorFn(tupleType)); + }); + if (strategyDynamicNum >= 0) { + const dynamicSelectors = Object.entries(strategies[strategyDynamicNum].dynamicSelectors); + const matchingSelector = dynamicSelectors.find(([, selectorFn]) => + selectorFn(tupleContentType[index]) + ); + const [selectorName] = matchingSelector as [string, (type: string) => boolean]; + const dynamicConstructor = strategies[strategyDynamicNum].constructors[selectorName]; if (dynamicConstructor) { - return dynamicConstructor(contentItem, strategy, tupleContentType[index]); + return dynamicConstructor( + contentItem, + strategies[strategyDynamicNum], + tupleContentType[index] + ); } } throw new Error(`"${tupleContentType[index]}" is not a valid Cairo type`); @@ -170,14 +183,14 @@ export class CairoTuple extends CairoType { * * @param responseIterator - Iterator over string data to parse * @param tupleType - The tuple type (e.g., "(core::integer::u8, core::integer::u32)") - * @param strategy - The parsing strategy containing constructors and selectors + * @param parsingStrategies - The parsing strategies containing constructors and selectors * @returns Array of parsed CairoType instances * @private */ private static parser( responseIterator: Iterator, tupleType: string, - strategy: ParsingStrategy + parsingStrategies: ParsingStrategy[] ): CairoType[] { const elementTypes = CairoTuple.getTupleElementTypes(tupleType); @@ -186,25 +199,37 @@ export class CairoTuple extends CairoType { typeof elementTypeInfo === 'string' ? elementTypeInfo : (elementTypeInfo as any).type; // First check direct constructors - const constructor = strategy.constructors[elementType]; - if (constructor) { + const strategyConstructorNum = parsingStrategies.findIndex( + (strategy: ParsingStrategy) => strategy.constructors[elementType] + ); + if (strategyConstructorNum >= 0) { + const constructor = parsingStrategies[strategyConstructorNum].constructors[elementType]; return constructor(responseIterator, elementType); } // Check dynamic selectors (includes CairoArray, CairoFixedArray, CairoTuple, etc.) - const dynamicSelectors = Object.entries(strategy.dynamicSelectors); - const matchingSelector = dynamicSelectors.find(([, selectorFn]) => selectorFn(elementType)); - - if (matchingSelector) { - const [selectorName] = matchingSelector; - const dynamicConstructor = strategy.constructors[selectorName]; + const strategyDynamicNum = parsingStrategies.findIndex((strategy: ParsingStrategy) => { + const dynamicSelectors = Object.entries(strategy.dynamicSelectors); + return dynamicSelectors.find(([, selectorFn]) => selectorFn(elementType)); + }); + if (strategyDynamicNum >= 0) { + const dynamicSelectors = Object.entries( + parsingStrategies[strategyDynamicNum].dynamicSelectors + ); + const matchingSelector = dynamicSelectors.find(([, selectorFn]) => selectorFn(elementType)); + const [selectorName] = matchingSelector as [string, (type: string) => boolean]; + const dynamicConstructor = parsingStrategies[strategyDynamicNum].constructors[selectorName]; if (dynamicConstructor) { - return dynamicConstructor(responseIterator, strategy, elementType); + return dynamicConstructor(responseIterator, parsingStrategies, elementType); } } // Unknown type - fallback to felt252 constructor - const feltConstructor = strategy.constructors[CairoFelt252.abiSelector]; + const felt252ConstructorNum = parsingStrategies.findIndex( + (strategy: ParsingStrategy) => strategy.constructors[CairoFelt252.abiSelector] + ); + const feltConstructor = + parsingStrategies[felt252ConstructorNum].constructors[CairoFelt252.abiSelector]; if (feltConstructor) { return feltConstructor(responseIterator, elementType); } @@ -595,7 +620,7 @@ export class CairoTuple extends CairoType { * response parsers (e.g., CairoUint8 → BigInt). This method is used primarily for * parsing API responses into user-friendly formats. * - * @param {ParsingStrategy} strategy - Parsing strategy for response parsing + * @param {AllowArray} strategyDecompose - Parsing strategies for response parsing * @returns {Object} an object of format {0:value0, 1:value2} * @example * ```typescript @@ -605,7 +630,8 @@ export class CairoTuple extends CairoType { * const parsed1 = myTuple.decompose(hdParsingStrategy); // { x: 100n, y: 200n } * ``` */ - public decompose(strategy: ParsingStrategy): Object { + public decompose(strategyDecompose: AllowArray): Object { + const strategies = Array.isArray(strategyDecompose) ? strategyDecompose : [strategyDecompose]; const tupleContentTypeResponse = CairoTuple.getTupleElementTypes(this.tupleType); const elementTypes: string[] = tupleContentTypeResponse.map( (el: string | { name: string; type: string }) => (typeof el === 'string' ? el : el.type) @@ -626,9 +652,12 @@ export class CairoTuple extends CairoType { parserName = (element as any).dynamicSelector; } } - const responseParser = strategy.response[parserName]; + const strategyDecomposeNum = strategies.findIndex( + (strategy: ParsingStrategy) => strategy.response[parserName] + ); + const responseParser = strategies[strategyDecomposeNum].response[parserName]; if (responseParser) { - return responseParser(element, strategy); + return responseParser(element, strategies); } // No response parser found - throw error instead of fallback magic throw new Error( diff --git a/src/utils/calldata/getAbiStruct.ts b/src/utils/calldata/getAbiStruct.ts new file mode 100644 index 000000000..7d4b2862f --- /dev/null +++ b/src/utils/calldata/getAbiStruct.ts @@ -0,0 +1,18 @@ +import { Abi, AbiStructs } from '../../types'; + +/** + * Helper to extract structs from abi + * @param abi Abi + * @returns AbiStructs - structs from abi + */ +export function getAbiStruct(abi: Abi): AbiStructs { + return abi + .filter((abiEntry) => abiEntry.type === 'struct') + .reduce( + (acc, abiEntry) => ({ + ...acc, + [abiEntry.name]: abiEntry, + }), + {} + ); +} diff --git a/src/utils/calldata/index.ts b/src/utils/calldata/index.ts index 70e049ea3..02bc70a5c 100644 --- a/src/utils/calldata/index.ts +++ b/src/utils/calldata/index.ts @@ -32,12 +32,8 @@ import { CairoFixedArray } from '../cairoDataTypes/fixedArray'; import { CairoArray } from '../cairoDataTypes/array'; import { CairoTuple } from '../cairoDataTypes/tuple'; import formatter from './formatter'; -import { - createAbiParser, - hdParsingStrategy, - isNoConstructorValid, - ParsingStrategy, -} from './parser'; +import { createAbiParser, isNoConstructorValid, ParsingStrategy } from './parser'; +import { hdParsingStrategy } from './parser/parsingStrategy'; import { AbiParserInterface } from './parser/interface'; import orderPropsByAbi from './propertyOrder'; import { parseCalldataField } from './requestParser'; @@ -45,6 +41,8 @@ import responseParser from './responseParser'; import validateFields from './validate'; import { CairoTypeOption } from '../cairoDataTypes/cairoTypeOption'; import { CairoTypeResult } from '../cairoDataTypes/cairoTypeResult'; +import { getAbiStruct } from './getAbiStruct'; +import { CairoStruct } from '../cairoDataTypes/cairoStruct'; export * as cairo from './cairo'; export { parseCalldataField } from './requestParser'; @@ -59,7 +57,7 @@ export class CallData { protected readonly enums: AbiEnums; - constructor(abi: Abi, parsingStrategy?: ParsingStrategy) { + constructor(abi: Abi, parsingStrategy: ParsingStrategy = hdParsingStrategy) { this.structs = CallData.getAbiStruct(abi); this.enums = CallData.getAbiEnum(abi); this.parser = createAbiParser(abi, parsingStrategy); @@ -269,6 +267,13 @@ export class CallData { ); return getEntries(compiledObj, `${prefix}${kk}.`); } + if (value instanceof CairoStruct) { + const apiRequest = value.toApiRequest(); + const compiledObj = Object.fromEntries( + apiRequest.map((item, idx) => [idx.toString(), item]) + ); + return getEntries(compiledObj, `${prefix}${kk}.`); + } // normal object return getEntries(value, `${prefix}${kk}.`); } @@ -350,15 +355,7 @@ export class CallData { * @returns AbiStructs - structs from abi */ static getAbiStruct(abi: Abi): AbiStructs { - return abi - .filter((abiEntry) => abiEntry.type === 'struct') - .reduce( - (acc, abiEntry) => ({ - ...acc, - [abiEntry.name]: abiEntry, - }), - {} - ); + return getAbiStruct(abi); } /** diff --git a/src/utils/calldata/parser/index.ts b/src/utils/calldata/parser/index.ts index 7c23d7fee..68415656a 100644 --- a/src/utils/calldata/parser/index.ts +++ b/src/utils/calldata/parser/index.ts @@ -3,17 +3,20 @@ import { isCairo1Abi } from '../cairo'; import { AbiParserInterface } from './interface'; import { AbiParser1 } from './parser-0-1.1.0'; import { AbiParser2 } from './parser-2.0.0'; -import { ParsingStrategy } from './parsingStrategy'; +import { hdParsingStrategy } from './parsingStrategy'; +import { ParsingStrategy } from './parsingStrategy.type'; export { AbiParser2 }; export { AbiParser1 }; export { AbiParserInterface }; export * from './parsingStrategy'; +export * from './parsingStrategy.type'; /** * Creates ABI parser * * @param {Abi} abi + * @param {ParsingStrategy} parsingStrategy - optional - parsing strategy * @returns {AbiParserInterface} abi parser interface * * @example @@ -23,7 +26,10 @@ export * from './parsingStrategy'; * const abiParser1 = createAbiParser([getFunctionAbi('struct')]); * // abiParser1 instanceof AbiParser1 === true */ -export function createAbiParser(abi: Abi, parsingStrategy?: ParsingStrategy): AbiParserInterface { +export function createAbiParser( + abi: Abi, + parsingStrategy: ParsingStrategy = hdParsingStrategy +): AbiParserInterface { const version = getAbiVersion(abi); if (version === 0 || version === 1) { return new AbiParser1(abi, parsingStrategy); @@ -64,7 +70,7 @@ export function getAbiVersion(abi: Abi): 1 | 2 | 0 { * * @param {string} method * @param {RawArgs} argsCalldata - * @param {FunctionAbi} abiMethod + * @param {FunctionAbi} abiMethod - optional * @returns boolean * * @example diff --git a/src/utils/calldata/parser/interface.ts b/src/utils/calldata/parser/interface.ts index 76b758c7d..429ebadd4 100644 --- a/src/utils/calldata/parser/interface.ts +++ b/src/utils/calldata/parser/interface.ts @@ -1,11 +1,11 @@ -import { Abi, AbiEntryType, FunctionAbi } from '../../../types'; -import { ParsingStrategy } from './parsingStrategy'; +import { Abi, AbiEntryType, FunctionAbi, type AllowArray } from '../../../types'; +import { ParsingStrategy } from './parsingStrategy.type'; /** * Abi parser interface */ export abstract class AbiParserInterface { - abstract parsingStrategy: ParsingStrategy; + abstract parsingStrategies: AllowArray; /** * Helper to calculate inputs length from abi diff --git a/src/utils/calldata/parser/parser-0-1.1.0.ts b/src/utils/calldata/parser/parser-0-1.1.0.ts index 323dca53a..f52a001a1 100644 --- a/src/utils/calldata/parser/parser-0-1.1.0.ts +++ b/src/utils/calldata/parser/parser-0-1.1.0.ts @@ -1,25 +1,25 @@ import { Abi, AbiEntryType, FunctionAbi } from '../../../types'; import { isLen } from '../cairo'; import { AbiParserInterface } from './interface'; -import { hdParsingStrategy, ParsingStrategy } from './parsingStrategy'; +import { ParsingStrategy } from './parsingStrategy.type'; export class AbiParser1 implements AbiParserInterface { abi: Abi; - parsingStrategy: ParsingStrategy; + parsingStrategies: ParsingStrategy; - constructor(abi: Abi, parsingStrategy?: ParsingStrategy) { + constructor(abi: Abi, parsingStrategy: ParsingStrategy) { this.abi = abi; - this.parsingStrategy = parsingStrategy || hdParsingStrategy; + this.parsingStrategies = parsingStrategy; } public getRequestParser(abiType: AbiEntryType): (val: unknown, type?: string) => any { // Check direct constructors first - if (this.parsingStrategy.constructors[abiType]) { + if (this.parsingStrategies.constructors[abiType]) { return (val: unknown, type?: string) => { - const instance = this.parsingStrategy.constructors[abiType]( + const instance = this.parsingStrategies.constructors[abiType]( val, - this.parsingStrategy, + this.parsingStrategies, type ); return instance.toApiRequest(); @@ -27,15 +27,15 @@ export class AbiParser1 implements AbiParserInterface { } // Check dynamic selectors - const dynamicSelectors = Object.entries(this.parsingStrategy.dynamicSelectors); + const dynamicSelectors = Object.entries(this.parsingStrategies.dynamicSelectors); const matchingSelector = dynamicSelectors.find(([, selectorFn]) => selectorFn(abiType)); if (matchingSelector) { const [selectorName] = matchingSelector; - const dynamicConstructor = this.parsingStrategy.constructors[selectorName]; + const dynamicConstructor = this.parsingStrategies.constructors[selectorName]; if (dynamicConstructor) { return (val: unknown, type?: string) => { - const instance = dynamicConstructor(val, this.parsingStrategy, type || abiType); + const instance = dynamicConstructor(val, this.parsingStrategies, type || abiType); return instance.toApiRequest(); }; } @@ -48,33 +48,33 @@ export class AbiParser1 implements AbiParserInterface { abiType: AbiEntryType ): (responseIterator: Iterator, type?: string) => any { // Check direct constructors first - if (this.parsingStrategy.constructors[abiType] && this.parsingStrategy.response[abiType]) { + if (this.parsingStrategies.constructors[abiType] && this.parsingStrategies.response[abiType]) { return (responseIterator: Iterator, type?: string) => { - const instance = this.parsingStrategy.constructors[abiType]( + const instance = this.parsingStrategies.constructors[abiType]( responseIterator, - this.parsingStrategy, + this.parsingStrategies, type ); - return this.parsingStrategy.response[abiType](instance, this.parsingStrategy); + return this.parsingStrategies.response[abiType](instance, this.parsingStrategies); }; } // Check dynamic selectors - const dynamicSelectors = Object.entries(this.parsingStrategy.dynamicSelectors); + const dynamicSelectors = Object.entries(this.parsingStrategies.dynamicSelectors); const matchingSelector = dynamicSelectors.find(([, selectorFn]) => selectorFn(abiType)); if (matchingSelector) { const [selectorName] = matchingSelector; - const dynamicConstructor = this.parsingStrategy.constructors[selectorName]; - const responseParser = this.parsingStrategy.response[selectorName]; + const dynamicConstructor = this.parsingStrategies.constructors[selectorName]; + const responseParser = this.parsingStrategies.response[selectorName]; if (dynamicConstructor && responseParser) { return (responseIterator: Iterator, type?: string) => { const instance = dynamicConstructor( responseIterator, - this.parsingStrategy, + this.parsingStrategies, type || abiType ); - return responseParser(instance, this.parsingStrategy); + return responseParser(instance, this.parsingStrategies); }; } } diff --git a/src/utils/calldata/parser/parser-2.0.0.ts b/src/utils/calldata/parser/parser-2.0.0.ts index acfd05654..da1f574ac 100644 --- a/src/utils/calldata/parser/parser-2.0.0.ts +++ b/src/utils/calldata/parser/parser-2.0.0.ts @@ -1,5 +1,3 @@ -// eslint-disable-next-line import/no-cycle -import { CallData, hdParsingStrategy } from '..'; import { Abi, FunctionAbi, @@ -8,58 +6,78 @@ import { InterfaceAbi, type LegacyEvent, AbiEntryType, + type AllowArray, } from '../../../types'; import { CairoStruct } from '../../cairoDataTypes/cairoStruct'; import type { CairoType } from '../../cairoDataTypes/cairoType.interface'; -import { deepCopy } from '../../helpers'; +import { isTypeArray } from '../cairo'; import { AbiParserInterface } from './interface'; -import { ParsingStrategy } from './parsingStrategy'; +import { ParsingStrategy } from './parsingStrategy.type'; +import { getAbiStruct } from '../getAbiStruct'; export class AbiParser2 implements AbiParserInterface { abi: Abi; - parsingStrategy: ParsingStrategy; + parsingStrategies: ParsingStrategy[]; - constructor(abi: Abi, parsingStrategy: ParsingStrategy = hdParsingStrategy) { + constructor(abi: Abi, parsingStrategy: ParsingStrategy) { this.abi = abi; // add structs & enums in strategy - this.parsingStrategy = deepCopy(parsingStrategy); - const structs: AbiStruct[] = Object.values(CallData.getAbiStruct(abi)); + const structs: AbiStruct[] = Object.values(getAbiStruct(abi)); + const structAndEnumStrategy: ParsingStrategy = { + constructors: {}, + response: {}, + dynamicSelectors: {}, + }; structs.forEach((struct: AbiStruct) => { - this.parsingStrategy.constructors[struct.name] = (input: Iterator | unknown) => { - return new CairoStruct(input, struct, this.parsingStrategy); - }; - this.parsingStrategy.response[struct.name] = ( - instance: CairoType, - strategy: ParsingStrategy - ) => (instance as CairoStruct).decompose(strategy); - this.parsingStrategy.dynamicSelectors[struct.name] = (_type: string) => true; + // Span are defined as Struct in Abi, but are useless here + if (!isTypeArray(struct.name)) { + structAndEnumStrategy.constructors[struct.name] = (input: Iterator | unknown) => { + return new CairoStruct(input, struct, [parsingStrategy, structAndEnumStrategy]); + }; + structAndEnumStrategy.response[struct.name] = ( + instance: CairoType, + strategy: AllowArray + ) => (instance as CairoStruct).decompose(strategy); + structAndEnumStrategy.dynamicSelectors[struct.name] = (_type: string) => true; + } }); + this.parsingStrategies = [parsingStrategy, structAndEnumStrategy]; } public getRequestParser(abiType: AbiEntryType): (val: unknown, type?: string) => any { // Check direct constructors first - if (this.parsingStrategy.constructors[abiType]) { + const strategyConstructorNum = this.parsingStrategies.findIndex( + (strategy: ParsingStrategy) => strategy.constructors[abiType] + ); + if (strategyConstructorNum >= 0) { return (val: unknown, type?: string) => { - const instance = this.parsingStrategy.constructors[abiType]( + const instance = this.parsingStrategies[strategyConstructorNum].constructors[abiType]( val, - this.parsingStrategy, + this.parsingStrategies, type ); return instance.toApiRequest(); }; } - // Check dynamic selectors - const dynamicSelectors = Object.entries(this.parsingStrategy.dynamicSelectors); - const matchingSelector = dynamicSelectors.find(([, selectorFn]) => selectorFn(abiType)); + const strategyDynamicNum = this.parsingStrategies.findIndex((strategy: ParsingStrategy) => { + const dynamicSelectors = Object.entries(strategy.dynamicSelectors); + return dynamicSelectors.find(([, selectorFn]) => selectorFn(abiType)); + }); - if (matchingSelector) { - const [selectorName] = matchingSelector; - const dynamicConstructor = this.parsingStrategy.constructors[selectorName]; + if (strategyDynamicNum >= 0) { + const dynamicSelectors = Object.entries( + this.parsingStrategies[strategyDynamicNum].dynamicSelectors + ); + const matchingSelector = dynamicSelectors.find(([, selectorFn]) => selectorFn(abiType)); + + const [selectorName] = matchingSelector as [string, (type: string) => boolean]; + const dynamicConstructor = + this.parsingStrategies[strategyDynamicNum].constructors[selectorName]; if (dynamicConstructor) { return (val: unknown, type?: string) => { - const instance = dynamicConstructor(val, this.parsingStrategy, type || abiType); + const instance = dynamicConstructor(val, this.parsingStrategies, type || abiType); return instance.toApiRequest(); }; } @@ -72,33 +90,44 @@ export class AbiParser2 implements AbiParserInterface { abiType: AbiEntryType ): (responseIterator: Iterator, type?: string) => any { // Check direct constructors first - if (this.parsingStrategy.constructors[abiType] && this.parsingStrategy.response[abiType]) { + const strategyConstructorNum = this.parsingStrategies.findIndex( + (strategy: ParsingStrategy) => strategy.constructors[abiType] && strategy.response[abiType] + ); + if (strategyConstructorNum >= 0) { return (responseIterator: Iterator, type?: string) => { - const instance = this.parsingStrategy.constructors[abiType]( + const instance = this.parsingStrategies[strategyConstructorNum].constructors[abiType]( responseIterator, - this.parsingStrategy, + this.parsingStrategies, type ); - return this.parsingStrategy.response[abiType](instance, this.parsingStrategy); + return this.parsingStrategies[strategyConstructorNum].response[abiType]( + instance, + this.parsingStrategies + ); }; } - // Check dynamic selectors - const dynamicSelectors = Object.entries(this.parsingStrategy.dynamicSelectors); - const matchingSelector = dynamicSelectors.find(([, selectorFn]) => selectorFn(abiType)); - - if (matchingSelector) { - const [selectorName] = matchingSelector; - const dynamicConstructor = this.parsingStrategy.constructors[selectorName]; - const responseParser = this.parsingStrategy.response[selectorName]; + const strategyDynamicNum = this.parsingStrategies.findIndex((strategy: ParsingStrategy) => { + const dynamicSelectors = Object.entries(strategy.dynamicSelectors); + return dynamicSelectors.find(([, selectorFn]) => selectorFn(abiType)); + }); + if (strategyDynamicNum >= 0) { + const dynamicSelectors = Object.entries( + this.parsingStrategies[strategyDynamicNum].dynamicSelectors + ); + const matchingSelector = dynamicSelectors.find(([, selectorFn]) => selectorFn(abiType)); + const [selectorName] = matchingSelector as [string, (type: string) => boolean]; + const dynamicConstructor = + this.parsingStrategies[strategyDynamicNum].constructors[selectorName]; + const responseParser = this.parsingStrategies[strategyDynamicNum].response[selectorName]; if (dynamicConstructor && responseParser) { return (responseIterator: Iterator, type?: string) => { const instance = dynamicConstructor( responseIterator, - this.parsingStrategy, + this.parsingStrategies, type || abiType ); - return responseParser(instance, this.parsingStrategy); + return responseParser(instance, this.parsingStrategies); }; } } diff --git a/src/utils/calldata/parser/parsingStrategy.ts b/src/utils/calldata/parser/parsingStrategy.ts index ab1731f3a..df8078c21 100644 --- a/src/utils/calldata/parser/parsingStrategy.ts +++ b/src/utils/calldata/parser/parsingStrategy.ts @@ -1,6 +1,6 @@ import { CairoBytes31 } from '../../cairoDataTypes/bytes31'; import { CairoByteArray } from '../../cairoDataTypes/byteArray'; -import { AbiEntryType } from '../../../types'; +import { type AllowArray } from '../../../types'; import { CairoFelt252 } from '../../cairoDataTypes/felt'; import { CairoUint256 } from '../../cairoDataTypes/uint256'; import { CairoUint512 } from '../../cairoDataTypes/uint512'; @@ -23,28 +23,9 @@ import { CairoType } from '../../cairoDataTypes/cairoType.interface'; import assert from '../../assert'; import { isTypeArray, isTypeOption, isTypeResult, isTypeTuple } from '../cairo'; import { CairoTypeOption } from '../../cairoDataTypes/cairoTypeOption'; -import type { CairoOptionVariant, CairoResultVariant } from '../enum'; import { isUndefined } from '../../typed'; import { CairoTypeResult } from '../../cairoDataTypes/cairoTypeResult'; - -/** - * Parsing map for constructors and response parsers - * Configure parsing strategy for each abi type - */ -export type VariantType = CairoOptionVariant | CairoResultVariant | string | number; -export type ParsingStrategy = { - constructors: Record< - AbiEntryType, - ( - input: Iterator | unknown, - strategy: ParsingStrategy, - type?: string, - variant?: VariantType - ) => CairoType - >; - response: Record any>; - dynamicSelectors: Record boolean>; -}; +import type { ParsingStrategy, VariantType } from './parsingStrategy.type'; /** * More robust parsing strategy @@ -162,9 +143,9 @@ export const hdParsingStrategy: ParsingStrategy = { } return new CairoSecp256k1Point(input); }, - [CairoFixedArray.dynamicSelector]: ( + CairoFixedArray: ( input: Iterator | unknown, - strategy: ParsingStrategy, + strategy: AllowArray, type?: string ) => { assert(!!type, 'CairoFixedArray constructor requires type parameter'); @@ -173,25 +154,25 @@ export const hdParsingStrategy: ParsingStrategy = { }, [CairoArray.dynamicSelector]: ( input: Iterator | unknown, - strategy: ParsingStrategy, + strategy: AllowArray, type?: string ) => { assert(!!type, 'CairoArray constructor requires type parameter'); // Always use constructor - it handles both iterator and user input internally return new CairoArray(input, type, strategy); }, - [CairoTuple.dynamicSelector]: ( + CairoTuple: ( input: Iterator | unknown, - strategy: ParsingStrategy, + strategy: AllowArray, type?: string ) => { assert(!!type, 'CairoTuple constructor requires type parameter'); // Always use constructor - it handles both iterator and user input internally return new CairoTuple(input, type, strategy); }, - [CairoTypeOption.dynamicSelector]: ( + CairoTypeOption: ( input: Iterator | unknown, - strategy: ParsingStrategy, + strategy: AllowArray, type?: string, variant?: VariantType ) => { @@ -199,9 +180,9 @@ export const hdParsingStrategy: ParsingStrategy = { const variantNumber = isUndefined(variant) ? undefined : Number(variant); return new CairoTypeOption(input, type, strategy, variantNumber); }, - [CairoTypeResult.dynamicSelector]: ( + CairoTypeResult: ( input: Iterator | unknown, - strategy: ParsingStrategy, + strategy: AllowArray, type?: string, variant?: VariantType ) => { @@ -211,19 +192,19 @@ export const hdParsingStrategy: ParsingStrategy = { }, }, dynamicSelectors: { - [CairoFixedArray.dynamicSelector]: (type: string) => { + CairoFixedArray: (type: string) => { return CairoFixedArray.isAbiType(type); }, [CairoArray.dynamicSelector]: (type: string) => { return isTypeArray(type); }, - [CairoTuple.dynamicSelector]: (type: string) => { + CairoTuple: (type: string) => { return isTypeTuple(type); }, - [CairoTypeOption.dynamicSelector]: (type: string) => { + CairoTypeOption: (type: string) => { return isTypeOption(type); }, - [CairoTypeResult.dynamicSelector]: (type: string) => { + CairoTypeResult: (type: string) => { return isTypeResult(type); }, // TODO: add more dynamic selectors here @@ -249,15 +230,15 @@ export const hdParsingStrategy: ParsingStrategy = { [CairoInt128.abiSelector]: (instance: CairoType) => (instance as CairoInt128).toBigInt(), [CairoSecp256k1Point.abiSelector]: (instance: CairoType) => (instance as CairoSecp256k1Point).toBigInt(), - [CairoFixedArray.dynamicSelector]: (instance: CairoType, strategy: ParsingStrategy) => + CairoFixedArray: (instance: CairoType, strategy: AllowArray) => (instance as CairoFixedArray).decompose(strategy), - [CairoArray.dynamicSelector]: (instance: CairoType, strategy: ParsingStrategy) => + [CairoArray.dynamicSelector]: (instance: CairoType, strategy: AllowArray) => (instance as CairoArray).decompose(strategy), - [CairoTuple.dynamicSelector]: (instance: CairoType, strategy: ParsingStrategy) => + CairoTuple: (instance: CairoType, strategy: AllowArray) => (instance as CairoTuple).decompose(strategy), - [CairoTypeOption.dynamicSelector]: (instance: CairoType, strategy: ParsingStrategy) => + CairoTypeOption: (instance: CairoType, strategy: AllowArray) => (instance as CairoTypeOption).decompose(strategy), - [CairoTypeResult.dynamicSelector]: (instance: CairoType, strategy: ParsingStrategy) => + CairoTypeResult: (instance: CairoType, strategy: AllowArray) => (instance as CairoTypeResult).decompose(strategy), }, } as const; diff --git a/src/utils/calldata/parser/parsingStrategy.type.ts b/src/utils/calldata/parser/parsingStrategy.type.ts new file mode 100644 index 000000000..8c6db3669 --- /dev/null +++ b/src/utils/calldata/parser/parsingStrategy.type.ts @@ -0,0 +1,25 @@ +import type { AbiEntryType, AllowArray } from '../../../types'; +import type { CairoType } from '../../cairoDataTypes/cairoType.interface'; +import type { CairoOptionVariant, CairoResultVariant } from '../enum'; + +/** + * Parsing map for constructors and response parsers + * Configure parsing strategy for each abi type + */ +export type VariantType = CairoOptionVariant | CairoResultVariant | string | number; +export type ParsingStrategy = { + constructors: Record< + AbiEntryType, + ( + input: Iterator | unknown, + strategy: AllowArray, + type?: string, + variant?: VariantType + ) => CairoType + >; + response: Record< + AbiEntryType, + (instance: CairoType, strategy: AllowArray) => any + >; + dynamicSelectors: Record boolean>; +}; diff --git a/src/utils/calldata/propertyOrder.ts b/src/utils/calldata/propertyOrder.ts index af50ec727..ba1410a19 100644 --- a/src/utils/calldata/propertyOrder.ts +++ b/src/utils/calldata/propertyOrder.ts @@ -38,6 +38,7 @@ import { CairoSecp256k1Point } from '../cairoDataTypes/secp256k1Point'; import { CairoTypeOption } from '../cairoDataTypes/cairoTypeOption'; import { type ParsingStrategy } from './parser'; import { CairoTypeResult } from '../cairoDataTypes/cairoTypeResult'; +import { CairoStruct } from '../cairoDataTypes/cairoStruct'; function errorU256(key: string) { return Error( @@ -113,6 +114,9 @@ export default function orderPropsByAbi( } return { limb0: u512.limb0, limb1: u512.limb1, limb2: u512.limb2, limb3: u512.limb3 }; } + if (CairoStruct.isAbiType(abiType)) { + return unorderedItem; + } if (isTypeStruct(abiType, structs)) { const abiOfStruct = structs[abiType].members; // eslint-disable-next-line @typescript-eslint/no-use-before-define diff --git a/src/utils/calldata/requestParser.ts b/src/utils/calldata/requestParser.ts index a1a7955eb..115975e22 100644 --- a/src/utils/calldata/requestParser.ts +++ b/src/utils/calldata/requestParser.ts @@ -44,6 +44,7 @@ import { CairoCustomEnum, CairoOption, CairoOptionVariant, CairoResult } from '. import { AbiParserInterface } from './parser'; import { CairoTypeOption } from '../cairoDataTypes/cairoTypeOption'; import { CairoTypeResult } from '../cairoDataTypes/cairoTypeResult'; +import { CairoStruct } from '../cairoDataTypes/cairoStruct'; // TODO: cleanup implementations to work with unknown, instead of blind casting with 'as' @@ -161,7 +162,7 @@ function parseCalldataValue({ } // checking if the passed element is struct - if (structs[type] && structs[type].members.length) { + if (structs[type]) { if (isTypeEthAddress(type)) { return parseBaseTypes({ type, val: element as BigNumberish, parser }); } @@ -170,6 +171,11 @@ function parseCalldataValue({ return parser.getRequestParser(type)(element); } + // value is CairoStruct instance + if (element instanceof CairoStruct) { + return element.toApiRequest(); + } + const { members } = structs[type]; const subElement = element as any; @@ -185,10 +191,11 @@ function parseCalldataValue({ ); }, [] as string[]); } + // check if abi element is tuple if (isTypeTuple(type)) { // Create CairoTuple instance and use its toApiRequest method - const tuple = new CairoTuple(element, type, parser.parsingStrategy); + const tuple = new CairoTuple(element, type, parser.parsingStrategies); return tuple.toApiRequest(); } @@ -202,7 +209,7 @@ function parseCalldataValue({ myOption = new CairoTypeOption( element, type, - parser.parsingStrategy, + parser.parsingStrategies, element.isSome() ? CairoOptionVariant.Some : CairoOptionVariant.None ); } else { @@ -221,7 +228,7 @@ function parseCalldataValue({ if (isTypeResult(type)) { let myResult: CairoTypeResult; if (element instanceof CairoResult) { - myResult = new CairoTypeResult(element, type, parser.parsingStrategy); + myResult = new CairoTypeResult(element, type, parser.parsingStrategies); } else { myResult = element as CairoTypeResult; } @@ -360,13 +367,13 @@ export function parseCalldataField({ return value.toApiRequest(); // Tuple type - create CairoTuple from raw input case isTypeTuple(type): { - const tuple = new CairoTuple(value, type, parser.parsingStrategy); + const tuple = new CairoTuple(value, type, parser.parsingStrategies); return tuple.toApiRequest(); } // Struct case isTypeStruct(type, structs) || CairoUint256.isAbiType(type): return parseCalldataValue({ - element: value as ParsedStruct | BigNumberish[], + element: value as ParsedStruct | BigNumberish[] | CairoStruct, type, structs, enums, diff --git a/src/utils/calldata/responseParser.ts b/src/utils/calldata/responseParser.ts index 01d3f4598..ca12eca1a 100644 --- a/src/utils/calldata/responseParser.ts +++ b/src/utils/calldata/responseParser.ts @@ -47,6 +47,7 @@ import { CairoResultVariant, } from './enum'; import { AbiParserInterface } from './parser/interface'; +import type { CairoStruct } from '../cairoDataTypes/cairoStruct'; /** * Parse base types @@ -112,7 +113,7 @@ function parseResponseValue( parser: AbiParserInterface, structs?: AbiStructs, enums?: AbiEnums -): BigNumberish | ParsedStruct | boolean | any[] | CairoEnum { +): BigNumberish | ParsedStruct | boolean | any[] | CairoEnum | CairoStruct { if (element.type === '()') { return {}; } @@ -140,7 +141,14 @@ function parseResponseValue( // type c1 array if (isTypeArray(element.type)) { // eslint-disable-next-line no-case-declarations - const parsedDataArr: (BigNumberish | ParsedStruct | boolean | any[] | CairoEnum)[] = []; + const parsedDataArr: ( + | BigNumberish + | ParsedStruct + | boolean + | any[] + | CairoEnum + | CairoStruct + )[] = []; const el: AbiEntry = { name: '', type: getArrayType(element.type) }; const len = BigInt(responseIterator.next().value); // get length while (parsedDataArr.length < len) { @@ -208,15 +216,22 @@ function parseResponseValue( // type tuple if (isTypeTuple(element.type)) { - const tuple = new CairoTuple(responseIterator, element.type, parser.parsingStrategy); - return tuple.decompose(parser.parsingStrategy); + const tuple = new CairoTuple(responseIterator, element.type, parser.parsingStrategies); + return tuple.decompose(parser.parsingStrategies) as ParsedStruct; } // TODO: duplicated, investigate why and what was an issue then de-duplicate // type c1 array if (isTypeArray(element.type)) { // eslint-disable-next-line no-case-declarations - const parsedDataArr: (BigNumberish | ParsedStruct | boolean | any[] | CairoEnum)[] = []; + const parsedDataArr: ( + | BigNumberish + | ParsedStruct + | boolean + | any[] + | CairoEnum + | CairoStruct + )[] = []; const el = { name: '', type: getArrayType(element.type) }; const len = BigInt(responseIterator.next().value); // get length while (parsedDataArr.length < len) { @@ -277,7 +292,14 @@ export default function responseParser({ } // C0 Array // eslint-disable-next-line no-case-declarations - const parsedDataArr: (BigNumberish | ParsedStruct | boolean | any[] | CairoEnum)[] = []; + const parsedDataArr: ( + | BigNumberish + | ParsedStruct + | boolean + | any[] + | CairoEnum + | CairoStruct + )[] = []; if (parsedResult && parsedResult[`${name}_len`]) { const arrLen = parsedResult[`${name}_len`] as number; while (parsedDataArr.length < arrLen) { diff --git a/src/utils/calldata/validate.ts b/src/utils/calldata/validate.ts index a6438967c..d8fa4709e 100644 --- a/src/utils/calldata/validate.ts +++ b/src/utils/calldata/validate.ts @@ -43,6 +43,7 @@ import { import { CairoTypeOption } from '../cairoDataTypes/cairoTypeOption'; import { CairoOption, CairoResult } from './enum'; import { CairoTypeResult } from '../cairoDataTypes/cairoTypeResult'; +import { CairoStruct } from '../cairoDataTypes/cairoStruct'; // TODO: separate validate is redundant as CairoTypes are validated during construction. // TODO: This validate should provide added valie method base validate poiniting to incorect value for method, opt. using color coding @@ -201,6 +202,10 @@ const validateStruct = (parameter: any, input: AbiEntry, structs: AbiStructs) => return; } + if (isTypeStruct(input.type, structs) && parameter instanceof CairoStruct) { + return; // CairoStruct + } + assert( isObject(parameter), `Validate: arg ${input.name} is cairo type struct (${input.type}), and should be defined as a js object (not array)` @@ -428,7 +433,7 @@ const validateNonZero = (parameter: any, input: AbiEntry) => { * }; * * validateFields(functionAbi, [1n], abiStructs, abiEnums); // Returns void since validation passes - * validateFields(functionAbi, [{}], abiStructs, abiEnums); // Throw an error because paramters are not valid + * validateFields(functionAbi, [{}], abiStructs, abiEnums); // Throw an error because parameters are not valid */ export default function validateFields( abiMethod: FunctionAbi, diff --git a/src/utils/helpers.ts b/src/utils/helpers.ts index cf2951af7..a5c5a89c8 100644 --- a/src/utils/helpers.ts +++ b/src/utils/helpers.ts @@ -12,28 +12,23 @@ export function addCompiledFlag(compiled: T): T { return compiled; } -export function deepCopy(obj: T): T { - if (typeof obj !== 'object' || obj === null) { - return obj; - } - - // Handle Date objects - if (obj instanceof Date) { - return new Date(obj.getTime()) as any; - } - - // Handle arrays - if (Array.isArray(obj)) { - const copyArr = [] as any[]; - obj.forEach((value) => copyArr.push(deepCopy(value))); - return copyArr as any; +/** + * Copy by value of a complex object (including Date, Array, functions or classes) + * @param {any} obj - object to copy by value + * @returns {any} copied object. + */ +export function deepCopyWithMethods(obj: any): any { + if (obj === null || typeof obj !== 'object') return obj; + if (obj instanceof Date) return new Date(obj); + if (obj instanceof Array) return obj.map((item) => deepCopyWithMethods(item)); + if (obj instanceof Function) return obj; + const cloned = Object.create(Object.getPrototypeOf(obj)); + // eslint-disable-next-line no-restricted-syntax + for (const key in obj as Object) { + // eslint-disable-next-line no-prototype-builtins + if (obj.hasOwnProperty(key)) { + cloned[key] = deepCopyWithMethods(obj[key]); + } } - - // Handle plain objects - const copyObj = { ...obj } as { [key: string]: any }; - Object.keys(copyObj).forEach((key) => { - copyObj[key] = deepCopy(copyObj[key]); - }); - - return copyObj as T; + return cloned; } From 3e9a1f264c7eec2d3ab8a8504b4dfa515f20cd3d Mon Sep 17 00:00:00 2001 From: PhilippeR26 Date: Tue, 23 Sep 2025 10:36:35 +0200 Subject: [PATCH 09/17] test: tests for CairoStruct. strategy is splitted in 2 objects (standard and custom). Solve cyclings --- ...s_test_option.compiled_contract_class.json | 11333 ++++++++++++++++ .../enums_test_option.contract_class.json | 4894 +++++++ __tests__/config/fixtures.ts | 1 + .../utils/cairoDataTypes/CairoStruct.test.ts | 278 + .../calldata/enum/CairoTypeResult.test.ts | 37 +- .../calldata/parser/parser-0-1.1.0.test.ts | 19 +- .../calldata/parser/parser-2.0.0.test.ts | 19 +- .../utils/calldata/requestParser.test.ts | 54 +- src/contract/default.ts | 10 +- src/utils/cairoDataTypes/array.ts | 100 +- src/utils/cairoDataTypes/cairoStruct.ts | 191 +- src/utils/cairoDataTypes/cairoTypeOption.ts | 98 +- src/utils/cairoDataTypes/cairoTypeResult.ts | 87 +- src/utils/cairoDataTypes/fixedArray.ts | 122 +- src/utils/cairoDataTypes/tuple.ts | 95 +- src/utils/calldata/getAbiStruct.ts | 18 + src/utils/calldata/index.ts | 29 +- src/utils/calldata/parser/index.ts | 12 +- src/utils/calldata/parser/interface.ts | 6 +- src/utils/calldata/parser/parser-0-1.1.0.ts | 38 +- src/utils/calldata/parser/parser-2.0.0.ts | 109 +- src/utils/calldata/parser/parsingStrategy.ts | 59 +- .../calldata/parser/parsingStrategy.type.ts | 25 + src/utils/calldata/propertyOrder.ts | 4 + src/utils/calldata/requestParser.ts | 19 +- src/utils/calldata/responseParser.ts | 34 +- src/utils/calldata/validate.ts | 7 +- src/utils/helpers.ts | 41 +- 28 files changed, 17312 insertions(+), 427 deletions(-) create mode 100644 __mocks__/cairo/cairo2120/enums_test_option.compiled_contract_class.json create mode 100644 __mocks__/cairo/cairo2120/enums_test_option.contract_class.json create mode 100644 __tests__/utils/cairoDataTypes/CairoStruct.test.ts create mode 100644 src/utils/calldata/getAbiStruct.ts create mode 100644 src/utils/calldata/parser/parsingStrategy.type.ts diff --git a/__mocks__/cairo/cairo2120/enums_test_option.compiled_contract_class.json b/__mocks__/cairo/cairo2120/enums_test_option.compiled_contract_class.json new file mode 100644 index 000000000..45b27186a --- /dev/null +++ b/__mocks__/cairo/cairo2120/enums_test_option.compiled_contract_class.json @@ -0,0 +1,11333 @@ +{ + "prime": "0x800000000000011000000000000000000000000000000000000000000000001", + "compiler_version": "2.12.0", + "bytecode": [ + "0xa0680017fff8000", + "0x7", + "0x482680017ffa8000", + "0x100000000000000000000000000000000", + "0x400280007ff97fff", + "0x10780017fff7fff", + "0xac", + "0x4825800180007ffa", + "0x0", + "0x400280007ff97fff", + "0x48297ffc80007ffd", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0x96", + "0x480280007ffc8000", + "0x20680017fff7fff", + "0x39", + "0x482680017ffc8000", + "0x1", + "0x480a7ffd7fff8000", + "0x48307ffe80007fff", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0x2b", + "0x480080007ffd8000", + "0xa0680017fff8000", + "0x12", + "0x4824800180007ffe", + "0x10000", + "0x4844800180008002", + "0x8000000000000110000000000000000", + "0x4830800080017ffe", + "0x480280017ff97fff", + "0x482480017ffe8000", + "0xefffffffffffffde000000000000ffff", + "0x480280027ff97fff", + "0x400280037ff97ffb", + "0x402480017fff7ffb", + "0xffffffffffffffffffffffffffffffff", + "0x20680017fff7fff", + "0x14", + "0x402780017fff7fff", + "0x1", + "0x400280017ff97ffe", + "0x482480017ffe8000", + "0xffffffffffffffffffffffffffff0000", + "0x400280027ff97fff", + "0x482680017ff98000", + "0x3", + "0x482480017ff68000", + "0x1144", + "0x480680017fff8000", + "0x0", + "0x48127ffa7fff8000", + "0x482480017ff68000", + "0x1", + "0x48127ff67fff8000", + "0x10780017fff7fff", + "0x1d", + "0x482680017ff98000", + "0x4", + "0x482480017ff18000", + "0x1658", + "0x10780017fff7fff", + "0x66", + "0x482680017ff98000", + "0x1", + "0x482480017ff98000", + "0x1b12", + "0x10780017fff7fff", + "0x60", + "0x4824800180007fff", + "0x1", + "0x20680017fff7fff", + "0x52", + "0x482680017ff98000", + "0x1", + "0x482480017ffb8000", + "0x14f0", + "0x480680017fff8000", + "0x1", + "0x480680017fff8000", + "0x0", + "0x482680017ffc8000", + "0x1", + "0x480a7ffd7fff8000", + "0x48307ffe80007fff", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0xc", + "0x1104800180018000", + "0xc1b", + "0x48127ff17fff8000", + "0x48127ff17fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0x1104800180018000", + "0x1b92", + "0x482480017fff8000", + "0x1b91", + "0x480080007fff8000", + "0xa0680017fff8000", + "0x9", + "0x4824800180007ff5", + "0x0", + "0x482480017fff8000", + "0x100000000000000000000000000000000", + "0x400080007ff27fff", + "0x10780017fff7fff", + "0x25", + "0x4824800180007ff5", + "0x0", + "0x400080007ff37fff", + "0x40780017fff7fff", + "0x1", + "0x20680017fff7ff4", + "0xd", + "0x480680017fff8000", + "0x0", + "0x400080007ffe7fff", + "0x400080017ffe7ff4", + "0x482480017ffd8000", + "0x1f4", + "0x48127ffd7fff8000", + "0x482480017ffc8000", + "0x2", + "0x10780017fff7fff", + "0xa", + "0x480680017fff8000", + "0x1", + "0x400080007ffe7fff", + "0x482480017ffd8000", + "0x2bc", + "0x48127ffd7fff8000", + "0x482480017ffc8000", + "0x1", + "0x482480017fee8000", + "0x1", + "0x48127ffc7fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x0", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0x482480017ff28000", + "0x1", + "0x48127ff27fff8000", + "0x10780017fff7fff", + "0x1a", + "0x482680017ff98000", + "0x1", + "0x482480017ffb8000", + "0x1c3e", + "0x10780017fff7fff", + "0x6", + "0x482680017ff98000", + "0x1", + "0x482480017ffd8000", + "0x1dce", + "0x1104800180018000", + "0xbd6", + "0x48127ff67fff8000", + "0x48127ff67fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0x482680017ff98000", + "0x1", + "0x482680017ffa8000", + "0x1e96", + "0x1104800180018000", + "0xbcd", + "0x48127ff67fff8000", + "0x48127ff67fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0xa0680017fff8000", + "0x7", + "0x482680017ffa8000", + "0x100000000000000000000000000000000", + "0x400280007ff97fff", + "0x10780017fff7fff", + "0x7d", + "0x4825800180007ffa", + "0x0", + "0x400280007ff97fff", + "0x482680017ff98000", + "0x1", + "0x48127ffe7fff8000", + "0x480a7ffc7fff8000", + "0x480a7ffd7fff8000", + "0x1104800180018000", + "0xbb9", + "0x20680017fff7ff9", + "0x69", + "0x20680017fff7ffc", + "0x5d", + "0x48307ffa80007ffb", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0xc", + "0x1104800180018000", + "0xb9f", + "0x48127fee7fff8000", + "0x48127fee7fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0x1104800180018000", + "0x1b16", + "0x482480017fff8000", + "0x1b15", + "0x480080007fff8000", + "0xa0680017fff8000", + "0x9", + "0x4824800180007ff2", + "0x8e8", + "0x482480017fff8000", + "0x100000000000000000000000000000000", + "0x400080007fef7fff", + "0x10780017fff7fff", + "0x3a", + "0x4824800180007ff2", + "0x8e8", + "0x400080007ff07fff", + "0x40780017fff7fff", + "0x1", + "0x20680017fff7ff5", + "0x21", + "0x480680017fff8000", + "0x0", + "0x400080007ffe7fff", + "0x48307ff580007ff6", + "0x400080017ffd7fff", + "0x482480017fed8000", + "0x1", + "0x48127ffb7fff8000", + "0x48127ff27fff8000", + "0x48127ff27fff8000", + "0x48127ff97fff8000", + "0x482480017ff88000", + "0x2", + "0x1104800180018000", + "0xc0f", + "0x20680017fff7ffd", + "0x8", + "0x48127ffb7fff8000", + "0x48127ffb7fff8000", + "0x48127ffc7fff8000", + "0x48127ffc7fff8000", + "0x10780017fff7fff", + "0x14", + "0x48127ffb7fff8000", + "0x48127ffb7fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0x480680017fff8000", + "0x1", + "0x400080007ffe7fff", + "0x482480017fee8000", + "0x1", + "0x482480017ffc8000", + "0xbfe", + "0x48127ffc7fff8000", + "0x482480017ffb8000", + "0x1", + "0x48127ffc7fff8000", + "0x48127ffc7fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x0", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0x482480017fef8000", + "0x1", + "0x482480017fef8000", + "0xbe", + "0x10780017fff7fff", + "0x18", + "0x1104800180018000", + "0xb4e", + "0x48127fef7fff8000", + "0x48127fef7fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0x48127ff77fff8000", + "0x48127ff77fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0x482680017ff98000", + "0x1", + "0x482680017ffa8000", + "0x1e96", + "0x1104800180018000", + "0xb3d", + "0x48127ff67fff8000", + "0x48127ff67fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0xa0680017fff8000", + "0x7", + "0x482680017ffa8000", + "0x100000000000000000000000000000000", + "0x400280007ff97fff", + "0x10780017fff7fff", + "0x95", + "0x4825800180007ffa", + "0x0", + "0x400280007ff97fff", + "0x48297ffc80007ffd", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0x7f", + "0x480280007ffc8000", + "0x20680017fff7fff", + "0x1c", + "0x482680017ff98000", + "0x1", + "0x482680017ffc8000", + "0x1", + "0x480a7ffd7fff8000", + "0x1104800180018000", + "0xbde", + "0x20680017fff7ffc", + "0xe", + "0x48127ff97fff8000", + "0x482480017fdb8000", + "0x10e", + "0x480680017fff8000", + "0x0", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x48127ff47fff8000", + "0x48127ff47fff8000", + "0x10780017fff7fff", + "0x1a", + "0x48127ff97fff8000", + "0x482480017fdb8000", + "0x988", + "0x10780017fff7fff", + "0x66", + "0x4824800180007fff", + "0x1", + "0x20680017fff7fff", + "0x58", + "0x482680017ff98000", + "0x1", + "0x482480017ffb8000", + "0x1428", + "0x480680017fff8000", + "0x1", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x482680017ffc8000", + "0x1", + "0x480a7ffd7fff8000", + "0x48307ffe80007fff", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0xc", + "0x1104800180018000", + "0xae5", + "0x48127fef7fff8000", + "0x48127fef7fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0x1104800180018000", + "0x1a5c", + "0x482480017fff8000", + "0x1a5b", + "0x480080007fff8000", + "0xa0680017fff8000", + "0x9", + "0x4824800180007ff3", + "0x0", + "0x482480017fff8000", + "0x100000000000000000000000000000000", + "0x400080007ff07fff", + "0x10780017fff7fff", + "0x27", + "0x4824800180007ff3", + "0x0", + "0x400080007ff17fff", + "0x40780017fff7fff", + "0x1", + "0x20680017fff7ff2", + "0xf", + "0x480680017fff8000", + "0x0", + "0x400080007ffe7fff", + "0x400080017ffe7ff2", + "0x400080027ffe7ff3", + "0x400080037ffe7ff4", + "0x482480017ffd8000", + "0x12c", + "0x48127ffd7fff8000", + "0x482480017ffc8000", + "0x4", + "0x10780017fff7fff", + "0xa", + "0x480680017fff8000", + "0x1", + "0x400080007ffe7fff", + "0x482480017ffd8000", + "0x2bc", + "0x48127ffd7fff8000", + "0x482480017ffc8000", + "0x1", + "0x482480017fec8000", + "0x1", + "0x48127ffc7fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x0", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0x482480017ff08000", + "0x1", + "0x48127ff07fff8000", + "0x10780017fff7fff", + "0x1a", + "0x482680017ff98000", + "0x1", + "0x482480017ffb8000", + "0x1c3e", + "0x10780017fff7fff", + "0x6", + "0x482680017ff98000", + "0x1", + "0x482480017ffd8000", + "0x1dce", + "0x1104800180018000", + "0xa9e", + "0x48127ff67fff8000", + "0x48127ff67fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0x482680017ff98000", + "0x1", + "0x482680017ffa8000", + "0x1e96", + "0x1104800180018000", + "0xa95", + "0x48127ff67fff8000", + "0x48127ff67fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0xa0680017fff8000", + "0x7", + "0x482680017ffa8000", + "0xfffffffffffffffffffffffffffff60a", + "0x400280007ff97fff", + "0x10780017fff7fff", + "0x7d", + "0x4825800180007ffa", + "0x9f6", + "0x400280007ff97fff", + "0x482680017ff98000", + "0x1", + "0x48127ffe7fff8000", + "0x480a7ffc7fff8000", + "0x480a7ffd7fff8000", + "0x1104800180018000", + "0xbdc", + "0x20680017fff7ff8", + "0x69", + "0x20680017fff7ffb", + "0x5d", + "0x48307ff980007ffa", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0xc", + "0x1104800180018000", + "0xa67", + "0x48127fed7fff8000", + "0x48127fed7fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0x1104800180018000", + "0x19de", + "0x482480017fff8000", + "0x19dd", + "0x480080007fff8000", + "0xa0680017fff8000", + "0x9", + "0x4824800180007ff1", + "0xa0a", + "0x482480017fff8000", + "0x100000000000000000000000000000000", + "0x400080007fee7fff", + "0x10780017fff7fff", + "0x3b", + "0x4824800180007ff1", + "0xa0a", + "0x400080007fef7fff", + "0x40780017fff7fff", + "0x1", + "0x20680017fff7ff4", + "0x22", + "0x480680017fff8000", + "0x0", + "0x400080007ffe7fff", + "0x400080017ffe7ff4", + "0x48307ff580007ff6", + "0x400080027ffd7fff", + "0x482480017fec8000", + "0x1", + "0x48127ffb7fff8000", + "0x48127ff27fff8000", + "0x48127ff27fff8000", + "0x48127ff97fff8000", + "0x482480017ff88000", + "0x3", + "0x1104800180018000", + "0xc23", + "0x20680017fff7ffd", + "0x8", + "0x48127ffb7fff8000", + "0x48127ffb7fff8000", + "0x48127ffc7fff8000", + "0x48127ffc7fff8000", + "0x10780017fff7fff", + "0x14", + "0x48127ffb7fff8000", + "0x48127ffb7fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0x480680017fff8000", + "0x1", + "0x400080007ffe7fff", + "0x482480017fed8000", + "0x1", + "0x482480017ffc8000", + "0xc62", + "0x48127ffc7fff8000", + "0x482480017ffb8000", + "0x1", + "0x48127ffc7fff8000", + "0x48127ffc7fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x0", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0x482480017fee8000", + "0x1", + "0x48127fee7fff8000", + "0x10780017fff7fff", + "0x18", + "0x1104800180018000", + "0xa16", + "0x48127fee7fff8000", + "0x48127fee7fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0x48127ff67fff8000", + "0x48127ff67fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0x482680017ff98000", + "0x1", + "0x482680017ffa8000", + "0x1e96", + "0x1104800180018000", + "0xa05", + "0x48127ff67fff8000", + "0x48127ff67fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0xa0680017fff8000", + "0x7", + "0x482680017ffa8000", + "0x100000000000000000000000000000000", + "0x400280007ff97fff", + "0x10780017fff7fff", + "0x70", + "0x4825800180007ffa", + "0x0", + "0x400280007ff97fff", + "0x482680017ff98000", + "0x1", + "0x480a7ffc7fff8000", + "0x480a7ffd7fff8000", + "0x1104800180018000", + "0xbfc", + "0x20680017fff7ffc", + "0x5b", + "0x48307ffa80007ffb", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0xc", + "0x1104800180018000", + "0x9da", + "0x48127ff07fff8000", + "0x48127fd87fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0x1104800180018000", + "0x1951", + "0x482480017fff8000", + "0x1950", + "0x480080007fff8000", + "0xa0680017fff8000", + "0x9", + "0x4824800180007fdc", + "0x0", + "0x482480017fff8000", + "0x100000000000000000000000000000000", + "0x400080007ff17fff", + "0x10780017fff7fff", + "0x38", + "0x4824800180007fdc", + "0x0", + "0x400080007ff27fff", + "0x40780017fff7fff", + "0x1", + "0x20680017fff7ff5", + "0x1b", + "0x480680017fff8000", + "0x0", + "0x400080007ffe7fff", + "0x20680017fff7ff5", + "0xf", + "0x40780017fff7fff", + "0x3", + "0x480680017fff8000", + "0x0", + "0x400080017ffa7fff", + "0x400080027ffa7ff2", + "0x482480017ff98000", + "0x974", + "0x48127ff97fff8000", + "0x482480017ff88000", + "0x3", + "0x10780017fff7fff", + "0x16", + "0x482480017ffd8000", + "0x92e", + "0x48127ffd7fff8000", + "0x482480017ffc8000", + "0x1", + "0x10780017fff7fff", + "0x8", + "0x40780017fff7fff", + "0x1", + "0x482480017ffd8000", + "0xa50", + "0x48127ffd7fff8000", + "0x48127ffc7fff8000", + "0x480680017fff8000", + "0x1", + "0x400080007ffe7fff", + "0x48127ffc7fff8000", + "0x48127ffc7fff8000", + "0x482480017ffc8000", + "0x1", + "0x482480017fe98000", + "0x1", + "0x48127ffc7fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x0", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0x482480017ff18000", + "0x1", + "0x482480017fd98000", + "0x92e", + "0x10780017fff7fff", + "0x10", + "0x1104800180018000", + "0x98b", + "0x48127ff17fff8000", + "0x48127fd97fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0x482680017ff98000", + "0x1", + "0x482680017ffa8000", + "0x1e96", + "0x1104800180018000", + "0x982", + "0x48127ff67fff8000", + "0x48127ff67fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0xa0680017fff8000", + "0x7", + "0x482680017ffa8000", + "0x100000000000000000000000000000000", + "0x400280007ff97fff", + "0x10780017fff7fff", + "0xa2", + "0x4825800180007ffa", + "0x0", + "0x400280007ff97fff", + "0x48297ffc80007ffd", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0x8c", + "0x480280007ffc8000", + "0x20680017fff7fff", + "0x1b", + "0x482680017ff98000", + "0x1", + "0x482680017ffc8000", + "0x1", + "0x480a7ffd7fff8000", + "0x1104800180018000", + "0xc0d", + "0x20680017fff7ffd", + "0xd", + "0x48127ffa7fff8000", + "0x482480017fe38000", + "0x6d6", + "0x480680017fff8000", + "0x0", + "0x48127ffb7fff8000", + "0x48127ffb7fff8000", + "0x48127ff67fff8000", + "0x48127ff67fff8000", + "0x10780017fff7fff", + "0x18", + "0x48127ffa7fff8000", + "0x482480017fe38000", + "0xeec", + "0x10780017fff7fff", + "0x74", + "0x4824800180007fff", + "0x1", + "0x20680017fff7fff", + "0x66", + "0x482680017ff98000", + "0x1", + "0x482480017ffb8000", + "0x148c", + "0x480680017fff8000", + "0x1", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x482680017ffc8000", + "0x1", + "0x480a7ffd7fff8000", + "0x48307ffe80007fff", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0xc", + "0x1104800180018000", + "0x92d", + "0x48127ff07fff8000", + "0x48127ff07fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0x1104800180018000", + "0x18a4", + "0x482480017fff8000", + "0x18a3", + "0x480080007fff8000", + "0xa0680017fff8000", + "0x9", + "0x4824800180007ff4", + "0x0", + "0x482480017fff8000", + "0x100000000000000000000000000000000", + "0x400080007ff17fff", + "0x10780017fff7fff", + "0x37", + "0x4824800180007ff4", + "0x0", + "0x400080007ff27fff", + "0x40780017fff7fff", + "0x1", + "0x20680017fff7ff3", + "0x1d", + "0x480680017fff8000", + "0x0", + "0x400080007ffe7fff", + "0x20680017fff7ff3", + "0xd", + "0x480680017fff8000", + "0x0", + "0x400080017ffd7fff", + "0x400080027ffd7ff3", + "0x482480017ffc8000", + "0xc8", + "0x48127ffc7fff8000", + "0x482480017ffb8000", + "0x3", + "0x10780017fff7fff", + "0x17", + "0x480680017fff8000", + "0x1", + "0x400080017ffd7fff", + "0x400080027ffd7ff3", + "0x482480017ffc8000", + "0xc8", + "0x48127ffc7fff8000", + "0x482480017ffb8000", + "0x3", + "0x10780017fff7fff", + "0xc", + "0x40780017fff7fff", + "0x1", + "0x480680017fff8000", + "0x1", + "0x400080007ffd7fff", + "0x482480017ffc8000", + "0x24e", + "0x48127ffc7fff8000", + "0x482480017ffb8000", + "0x1", + "0x482480017fec8000", + "0x1", + "0x48127ffc7fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x0", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0x482480017ff18000", + "0x1", + "0x48127ff17fff8000", + "0x10780017fff7fff", + "0x1a", + "0x482680017ff98000", + "0x1", + "0x482480017ffb8000", + "0x1c3e", + "0x10780017fff7fff", + "0x6", + "0x482680017ff98000", + "0x1", + "0x482480017ffd8000", + "0x1dce", + "0x1104800180018000", + "0x8d6", + "0x48127ff67fff8000", + "0x48127ff67fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0x482680017ff98000", + "0x1", + "0x482680017ffa8000", + "0x1e96", + "0x1104800180018000", + "0x8cd", + "0x48127ff67fff8000", + "0x48127ff67fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0xa0680017fff8000", + "0x7", + "0x482680017ffa8000", + "0x100000000000000000000000000000000", + "0x400280007ff97fff", + "0x10780017fff7fff", + "0x7f", + "0x4825800180007ffa", + "0x0", + "0x400280007ff97fff", + "0x48297ffc80007ffd", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0x69", + "0x40780017fff7fff", + "0x1", + "0x482680017ff98000", + "0x1", + "0x48127ffc7fff8000", + "0x482680017ffc8000", + "0x1", + "0x480a7ffd7fff8000", + "0x48127ffb7fff8000", + "0x48127ffa7fff8000", + "0x480280007ffc8000", + "0x1104800180018000", + "0xbf0", + "0x20680017fff7ffa", + "0x52", + "0x20680017fff7ffd", + "0x4b", + "0x48307ffb80007ffc", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0xc", + "0x1104800180018000", + "0x894", + "0x48127fef7fff8000", + "0x48127fef7fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0x1104800180018000", + "0x180b", + "0x482480017fff8000", + "0x180a", + "0x480080007fff8000", + "0xa0680017fff8000", + "0x9", + "0x4824800180007ff3", + "0x0", + "0x482480017fff8000", + "0x100000000000000000000000000000000", + "0x400080007ff07fff", + "0x10780017fff7fff", + "0x28", + "0x4824800180007ff3", + "0x0", + "0x400080007ff17fff", + "0x48307ff780007ff8", + "0x40780017fff7fff", + "0x1", + "0x4844800180007ffe", + "0x2", + "0x400080007ffe7fff", + "0x482480017fee8000", + "0x1", + "0x48127ffb7fff8000", + "0x48127ff27fff8000", + "0x48127ff27fff8000", + "0x48127ffa7fff8000", + "0x482480017ff98000", + "0x1", + "0x1104800180018000", + "0xc61", + "0x20680017fff7ffd", + "0xb", + "0x48127ffb7fff8000", + "0x482480017ffb8000", + "0x4c4", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x0", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0x48127ffb7fff8000", + "0x48127ffb7fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0x482480017ff08000", + "0x1", + "0x482480017ff08000", + "0xbae", + "0x10780017fff7fff", + "0x21", + "0x48127ff87fff8000", + "0x482480017ff88000", + "0x10a4", + "0x10780017fff7fff", + "0xe", + "0x48127ff87fff8000", + "0x48127ff87fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0x482680017ff98000", + "0x1", + "0x482480017ffd8000", + "0x1dce", + "0x1104800180018000", + "0x844", + "0x48127ff67fff8000", + "0x48127ff67fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0x482680017ff98000", + "0x1", + "0x482680017ffa8000", + "0x1e96", + "0x1104800180018000", + "0x83b", + "0x48127ff67fff8000", + "0x48127ff67fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0xa0680017fff8000", + "0x7", + "0x482680017ffa8000", + "0x100000000000000000000000000000000", + "0x400280007ff97fff", + "0x10780017fff7fff", + "0x91", + "0x4825800180007ffa", + "0x0", + "0x400280007ff97fff", + "0x48297ffc80007ffd", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0x7b", + "0x480280007ffc8000", + "0x20680017fff7fff", + "0x36", + "0x482680017ffc8000", + "0x1", + "0x480a7ffd7fff8000", + "0x48307ffe80007fff", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0x28", + "0x480080007ffd8000", + "0xa0680017fff8000", + "0x12", + "0x4824800180007ffe", + "0x10000", + "0x4844800180008002", + "0x8000000000000110000000000000000", + "0x4830800080017ffe", + "0x480280017ff97fff", + "0x482480017ffe8000", + "0xefffffffffffffde000000000000ffff", + "0x480280027ff97fff", + "0x400280037ff97ffb", + "0x402480017fff7ffb", + "0xffffffffffffffffffffffffffffffff", + "0x20680017fff7fff", + "0x11", + "0x402780017fff7fff", + "0x1", + "0x400280017ff97ffe", + "0x482480017ffe8000", + "0xffffffffffffffffffffffffffff0000", + "0x400280027ff97fff", + "0x482680017ff98000", + "0x3", + "0x482480017ff68000", + "0x120c", + "0x482480017ff88000", + "0x1", + "0x48127ff87fff8000", + "0x10780017fff7fff", + "0x19", + "0x482680017ff98000", + "0x4", + "0x482480017ff18000", + "0x1658", + "0x10780017fff7fff", + "0x4e", + "0x482680017ff98000", + "0x1", + "0x482480017ff98000", + "0x1b12", + "0x10780017fff7fff", + "0x48", + "0x4824800180007fff", + "0x1", + "0x20680017fff7fff", + "0x3a", + "0x482680017ff98000", + "0x1", + "0x482480017ffb8000", + "0x15b8", + "0x482680017ffc8000", + "0x1", + "0x480a7ffd7fff8000", + "0x48307ffe80007fff", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0xc", + "0x1104800180018000", + "0x7d1", + "0x48127ff37fff8000", + "0x48127ff37fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0x1104800180018000", + "0x1748", + "0x482480017fff8000", + "0x1747", + "0x480080007fff8000", + "0xa0680017fff8000", + "0x9", + "0x4824800180007ff7", + "0x0", + "0x482480017fff8000", + "0x100000000000000000000000000000000", + "0x400080007ff47fff", + "0x10780017fff7fff", + "0x11", + "0x4824800180007ff7", + "0x0", + "0x400080007ff57fff", + "0x40780017fff7fff", + "0x1", + "0x482480017ff48000", + "0x1", + "0x482480017ffd8000", + "0x514", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x0", + "0x48127ffb7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0x482480017ff48000", + "0x1", + "0x48127ff47fff8000", + "0x10780017fff7fff", + "0x1a", + "0x482680017ff98000", + "0x1", + "0x482480017ffb8000", + "0x1c3e", + "0x10780017fff7fff", + "0x6", + "0x482680017ff98000", + "0x1", + "0x482480017ffd8000", + "0x1dce", + "0x1104800180018000", + "0x7a0", + "0x48127ff67fff8000", + "0x48127ff67fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0x482680017ff98000", + "0x1", + "0x482680017ffa8000", + "0x1e96", + "0x1104800180018000", + "0x797", + "0x48127ff67fff8000", + "0x48127ff67fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0xa0680017fff8000", + "0x7", + "0x482680017ffa8000", + "0x100000000000000000000000000000000", + "0x400280007ff97fff", + "0x10780017fff7fff", + "0x5e", + "0x4825800180007ffa", + "0x0", + "0x400280007ff97fff", + "0x482680017ff98000", + "0x1", + "0x480a7ffc7fff8000", + "0x480a7ffd7fff8000", + "0x1104800180018000", + "0xbae", + "0x20680017fff7ffc", + "0x49", + "0x48307ffa80007ffb", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0xc", + "0x1104800180018000", + "0x76c", + "0x48127ff07fff8000", + "0x48127fd67fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0x1104800180018000", + "0x16e3", + "0x482480017fff8000", + "0x16e2", + "0x480080007fff8000", + "0xa0680017fff8000", + "0x9", + "0x4824800180007fda", + "0x0", + "0x482480017fff8000", + "0x100000000000000000000000000000000", + "0x400080007ff17fff", + "0x10780017fff7fff", + "0x26", + "0x4824800180007fda", + "0x0", + "0x400080007ff27fff", + "0x40780017fff7fff", + "0x1", + "0x20680017fff7ff5", + "0xe", + "0x480680017fff8000", + "0x0", + "0x400080007ffe7fff", + "0x400080017ffe7ff5", + "0x400080027ffe7ff6", + "0x482480017ffd8000", + "0x96a", + "0x48127ffd7fff8000", + "0x482480017ffc8000", + "0x3", + "0x10780017fff7fff", + "0xa", + "0x480680017fff8000", + "0x1", + "0x400080007ffe7fff", + "0x482480017ffd8000", + "0xa96", + "0x48127ffd7fff8000", + "0x482480017ffc8000", + "0x1", + "0x482480017fed8000", + "0x1", + "0x48127ffc7fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x0", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0x482480017ff18000", + "0x1", + "0x482480017fd78000", + "0x7da", + "0x10780017fff7fff", + "0x10", + "0x1104800180018000", + "0x72f", + "0x48127ff17fff8000", + "0x48127fd77fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0x482680017ff98000", + "0x1", + "0x482680017ffa8000", + "0x1e96", + "0x1104800180018000", + "0x726", + "0x48127ff67fff8000", + "0x48127ff67fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0xa0680017fff8000", + "0x7", + "0x482680017ffa8000", + "0x100000000000000000000000000000000", + "0x400280007ff97fff", + "0x10780017fff7fff", + "0x5e", + "0x4825800180007ffa", + "0x0", + "0x400280007ff97fff", + "0x482680017ff98000", + "0x1", + "0x480a7ffc7fff8000", + "0x480a7ffd7fff8000", + "0x1104800180018000", + "0x9ba", + "0x20680017fff7ffd", + "0x49", + "0x48307ffb80007ffc", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0xc", + "0x1104800180018000", + "0x6fb", + "0x48127ff17fff8000", + "0x48127fdc7fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0x1104800180018000", + "0x1672", + "0x482480017fff8000", + "0x1671", + "0x480080007fff8000", + "0xa0680017fff8000", + "0x9", + "0x4824800180007fe0", + "0x0", + "0x482480017fff8000", + "0x100000000000000000000000000000000", + "0x400080007ff27fff", + "0x10780017fff7fff", + "0x26", + "0x4824800180007fe0", + "0x0", + "0x400080007ff37fff", + "0x40780017fff7fff", + "0x1", + "0x20680017fff7ff6", + "0xd", + "0x480680017fff8000", + "0x0", + "0x400080007ffe7fff", + "0x400080017ffe7ff6", + "0x482480017ffd8000", + "0xd7a", + "0x48127ffd7fff8000", + "0x482480017ffc8000", + "0x2", + "0x10780017fff7fff", + "0xb", + "0x480680017fff8000", + "0x1", + "0x400080007ffe7fff", + "0x400080017ffe7ff6", + "0x482480017ffd8000", + "0xdde", + "0x48127ffd7fff8000", + "0x482480017ffc8000", + "0x2", + "0x482480017fee8000", + "0x1", + "0x48127ffc7fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x0", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0x482480017ff28000", + "0x1", + "0x482480017fdd8000", + "0xb86", + "0x10780017fff7fff", + "0x10", + "0x1104800180018000", + "0x6be", + "0x48127ff27fff8000", + "0x48127fdd7fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0x482680017ff98000", + "0x1", + "0x482680017ffa8000", + "0x1e96", + "0x1104800180018000", + "0x6b5", + "0x48127ff67fff8000", + "0x48127ff67fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0xa0680017fff8000", + "0x7", + "0x482680017ffa8000", + "0xfffffffffffffffffffffffffffffff6", + "0x400280007ff97fff", + "0x10780017fff7fff", + "0x7e", + "0x4825800180007ffa", + "0xa", + "0x400280007ff97fff", + "0x482680017ff98000", + "0x1", + "0x48127ffe7fff8000", + "0x480a7ffc7fff8000", + "0x480a7ffd7fff8000", + "0x1104800180018000", + "0xb6c", + "0x20680017fff7ff9", + "0x6a", + "0x20680017fff7ffc", + "0x5e", + "0x48307ffa80007ffb", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0xc", + "0x1104800180018000", + "0x687", + "0x48127fee7fff8000", + "0x48127fee7fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0x1104800180018000", + "0x15fe", + "0x482480017fff8000", + "0x15fd", + "0x480080007fff8000", + "0xa0680017fff8000", + "0x9", + "0x4824800180007ff2", + "0x816", + "0x482480017fff8000", + "0x100000000000000000000000000000000", + "0x400080007fef7fff", + "0x10780017fff7fff", + "0x3c", + "0x4824800180007ff2", + "0x816", + "0x400080007ff07fff", + "0x40780017fff7fff", + "0x1", + "0x20680017fff7ff5", + "0x13", + "0x480680017fff8000", + "0x0", + "0x400080007ffe7fff", + "0x48307ff580007ff6", + "0x400080017ffd7fff", + "0x482480017fed8000", + "0x1", + "0x48127ffb7fff8000", + "0x48127ff27fff8000", + "0x48127ff27fff8000", + "0x48127ff97fff8000", + "0x482480017ff88000", + "0x2", + "0x1104800180018000", + "0x6f7", + "0x10780017fff7fff", + "0x12", + "0x480680017fff8000", + "0x1", + "0x400080007ffe7fff", + "0x48307ff580007ff6", + "0x400080017ffd7fff", + "0x482480017fed8000", + "0x1", + "0x482480017ffb8000", + "0x64", + "0x48127ff27fff8000", + "0x48127ff27fff8000", + "0x48127ff97fff8000", + "0x482480017ff88000", + "0x2", + "0x1104800180018000", + "0xbe2", + "0x20680017fff7ffd", + "0xa", + "0x48127ffb7fff8000", + "0x48127ffb7fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x0", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0x48127ffb7fff8000", + "0x48127ffb7fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0x482480017fef8000", + "0x1", + "0x48127fef7fff8000", + "0x10780017fff7fff", + "0x18", + "0x1104800180018000", + "0x635", + "0x48127fef7fff8000", + "0x48127fef7fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0x48127ff77fff8000", + "0x48127ff77fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0x482680017ff98000", + "0x1", + "0x482680017ffa8000", + "0x1e96", + "0x1104800180018000", + "0x624", + "0x48127ff67fff8000", + "0x48127ff67fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0xa0680017fff8000", + "0x7", + "0x482680017ffa8000", + "0xfffffffffffffffffffffffffffffe52", + "0x400280007ff97fff", + "0x10780017fff7fff", + "0x60", + "0x4825800180007ffa", + "0x1ae", + "0x400280007ff97fff", + "0x482680017ff98000", + "0x1", + "0x480a7ffc7fff8000", + "0x480a7ffd7fff8000", + "0x1104800180018000", + "0xbcb", + "0x20680017fff7ffb", + "0x4b", + "0x48307ff980007ffa", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0xc", + "0x1104800180018000", + "0x5f9", + "0x48127fef7fff8000", + "0x48127fc37fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0x1104800180018000", + "0x1570", + "0x482480017fff8000", + "0x156f", + "0x480080007fff8000", + "0xa0680017fff8000", + "0x9", + "0x4824800180007fc7", + "0x0", + "0x482480017fff8000", + "0x100000000000000000000000000000000", + "0x400080007ff07fff", + "0x10780017fff7fff", + "0x29", + "0x4824800180007fc7", + "0x0", + "0x400080007ff17fff", + "0x40780017fff7fff", + "0x1", + "0x20680017fff7ff4", + "0xf", + "0x480680017fff8000", + "0x0", + "0x400080007ffe7fff", + "0x400080017ffe7ff4", + "0x400080027ffe7ff5", + "0x400080037ffe7ff6", + "0x482480017ffd8000", + "0x12c", + "0x48127ffd7fff8000", + "0x482480017ffc8000", + "0x4", + "0x10780017fff7fff", + "0xc", + "0x480680017fff8000", + "0x1", + "0x400080007ffe7fff", + "0x400080017ffe7ff5", + "0x400080027ffe7ff6", + "0x482480017ffd8000", + "0x1f4", + "0x48127ffd7fff8000", + "0x482480017ffc8000", + "0x3", + "0x482480017fec8000", + "0x1", + "0x48127ffc7fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x0", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0x482480017ff08000", + "0x1", + "0x48127fc47fff8000", + "0x10780017fff7fff", + "0x10", + "0x1104800180018000", + "0x5ba", + "0x48127ff07fff8000", + "0x48127fc47fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0x482680017ff98000", + "0x1", + "0x482680017ffa8000", + "0x1e96", + "0x1104800180018000", + "0x5b1", + "0x48127ff67fff8000", + "0x48127ff67fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0xa0680017fff8000", + "0x7", + "0x482680017ffa8000", + "0xfffffffffffffffffffffffffffff3b2", + "0x400280007ff97fff", + "0x10780017fff7fff", + "0x80", + "0x4825800180007ffa", + "0xc4e", + "0x400280007ff97fff", + "0x482680017ff98000", + "0x1", + "0x48127ffe7fff8000", + "0x480a7ffc7fff8000", + "0x480a7ffd7fff8000", + "0x1104800180018000", + "0xc12", + "0x20680017fff7ff8", + "0x6c", + "0x20680017fff7ffb", + "0x60", + "0x48307ff980007ffa", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0xc", + "0x1104800180018000", + "0x583", + "0x48127fed7fff8000", + "0x48127fed7fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0x1104800180018000", + "0x14fa", + "0x482480017fff8000", + "0x14f9", + "0x480080007fff8000", + "0xa0680017fff8000", + "0x9", + "0x4824800180007ff1", + "0x87a", + "0x482480017fff8000", + "0x100000000000000000000000000000000", + "0x400080007fee7fff", + "0x10780017fff7fff", + "0x3e", + "0x4824800180007ff1", + "0x87a", + "0x400080007fef7fff", + "0x40780017fff7fff", + "0x1", + "0x20680017fff7ff4", + "0x14", + "0x480680017fff8000", + "0x0", + "0x400080007ffe7fff", + "0x400080017ffe7ff4", + "0x48307ff580007ff6", + "0x400080027ffd7fff", + "0x482480017fec8000", + "0x1", + "0x48127ffb7fff8000", + "0x48127ff27fff8000", + "0x48127ff27fff8000", + "0x48127ff97fff8000", + "0x482480017ff88000", + "0x3", + "0x1104800180018000", + "0x73f", + "0x10780017fff7fff", + "0x13", + "0x480680017fff8000", + "0x1", + "0x400080007ffe7fff", + "0x400080017ffe7ff4", + "0x48307ff580007ff6", + "0x400080027ffd7fff", + "0x482480017fec8000", + "0x1", + "0x482480017ffb8000", + "0x64", + "0x48127ff27fff8000", + "0x48127ff27fff8000", + "0x48127ff97fff8000", + "0x482480017ff88000", + "0x3", + "0x1104800180018000", + "0xadc", + "0x20680017fff7ffd", + "0xa", + "0x48127ffb7fff8000", + "0x48127ffb7fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x0", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0x48127ffb7fff8000", + "0x48127ffb7fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0x482480017fee8000", + "0x1", + "0x48127fee7fff8000", + "0x10780017fff7fff", + "0x18", + "0x1104800180018000", + "0x52f", + "0x48127fee7fff8000", + "0x48127fee7fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0x48127ff67fff8000", + "0x48127ff67fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0x482680017ff98000", + "0x1", + "0x482680017ffa8000", + "0x1e96", + "0x1104800180018000", + "0x51e", + "0x48127ff67fff8000", + "0x48127ff67fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0xa0680017fff8000", + "0x7", + "0x482680017ffa8000", + "0x100000000000000000000000000000000", + "0x400280007ff97fff", + "0x10780017fff7fff", + "0x70", + "0x4825800180007ffa", + "0x0", + "0x400280007ff97fff", + "0x482680017ff98000", + "0x1", + "0x480a7ffc7fff8000", + "0x480a7ffd7fff8000", + "0x1104800180018000", + "0xc23", + "0x20680017fff7ffc", + "0x5b", + "0x48307ffa80007ffb", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0xc", + "0x1104800180018000", + "0x4f3", + "0x48127ff07fff8000", + "0x48127fcc7fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0x1104800180018000", + "0x146a", + "0x482480017fff8000", + "0x1469", + "0x480080007fff8000", + "0xa0680017fff8000", + "0x9", + "0x4824800180007fd0", + "0x0", + "0x482480017fff8000", + "0x100000000000000000000000000000000", + "0x400080007ff17fff", + "0x10780017fff7fff", + "0x38", + "0x4824800180007fd0", + "0x0", + "0x400080007ff27fff", + "0x40780017fff7fff", + "0x1", + "0x20680017fff7ff5", + "0x1d", + "0x480680017fff8000", + "0x0", + "0x400080007ffe7fff", + "0x20680017fff7ff5", + "0xd", + "0x480680017fff8000", + "0x0", + "0x400080017ffd7fff", + "0x400080027ffd7ff5", + "0x482480017ffc8000", + "0x4e2", + "0x48127ffc7fff8000", + "0x482480017ffb8000", + "0x3", + "0x10780017fff7fff", + "0x18", + "0x480680017fff8000", + "0x1", + "0x400080017ffd7fff", + "0x400080027ffd7ff5", + "0x482480017ffc8000", + "0x4e2", + "0x48127ffc7fff8000", + "0x482480017ffb8000", + "0x3", + "0x10780017fff7fff", + "0xd", + "0x40780017fff7fff", + "0x1", + "0x480680017fff8000", + "0x1", + "0x400080007ffd7fff", + "0x400080017ffd7ff5", + "0x482480017ffc8000", + "0x604", + "0x48127ffc7fff8000", + "0x482480017ffb8000", + "0x2", + "0x482480017fec8000", + "0x1", + "0x48127ffc7fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x0", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0x482480017ff18000", + "0x1", + "0x482480017fcd8000", + "0x41a", + "0x10780017fff7fff", + "0x10", + "0x1104800180018000", + "0x4a4", + "0x48127ff17fff8000", + "0x48127fcd7fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0x482680017ff98000", + "0x1", + "0x482680017ffa8000", + "0x1e96", + "0x1104800180018000", + "0x49b", + "0x48127ff67fff8000", + "0x48127ff67fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0xa0680017fff8000", + "0x7", + "0x482680017ffa8000", + "0x100000000000000000000000000000000", + "0x400280007ff97fff", + "0x10780017fff7fff", + "0x6f", + "0x4825800180007ffa", + "0x0", + "0x400280007ff97fff", + "0x482680017ff98000", + "0x1", + "0x480a7ffc7fff8000", + "0x480a7ffd7fff8000", + "0x1104800180018000", + "0xc23", + "0x20680017fff7ffc", + "0x5a", + "0x48307ffa80007ffb", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0xc", + "0x1104800180018000", + "0x470", + "0x48127ff07fff8000", + "0x48127fd77fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0x1104800180018000", + "0x13e7", + "0x482480017fff8000", + "0x13e6", + "0x480080007fff8000", + "0xa0680017fff8000", + "0x9", + "0x4824800180007fdb", + "0x0", + "0x482480017fff8000", + "0x100000000000000000000000000000000", + "0x400080007ff17fff", + "0x10780017fff7fff", + "0x37", + "0x4824800180007fdb", + "0x0", + "0x400080007ff27fff", + "0x40780017fff7fff", + "0x1", + "0x20680017fff7ff5", + "0xf", + "0x40780017fff7fff", + "0x1", + "0x480680017fff8000", + "0x0", + "0x400080007ffd7fff", + "0x400080017ffd7ff5", + "0x482480017ffc8000", + "0x9ec", + "0x48127ffc7fff8000", + "0x482480017ffb8000", + "0x2", + "0x10780017fff7fff", + "0x1a", + "0x480680017fff8000", + "0x1", + "0x400080007ffe7fff", + "0x20680017fff7ff5", + "0xd", + "0x480680017fff8000", + "0x0", + "0x400080017ffd7fff", + "0x400080027ffd7ff5", + "0x482480017ffc8000", + "0x92e", + "0x48127ffc7fff8000", + "0x482480017ffb8000", + "0x3", + "0x10780017fff7fff", + "0xa", + "0x480680017fff8000", + "0x1", + "0x400080017ffd7fff", + "0x482480017ffc8000", + "0x9f6", + "0x48127ffc7fff8000", + "0x482480017ffb8000", + "0x2", + "0x482480017fec8000", + "0x1", + "0x48127ffc7fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x0", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0x482480017ff18000", + "0x1", + "0x482480017fd88000", + "0x866", + "0x10780017fff7fff", + "0x10", + "0x1104800180018000", + "0x422", + "0x48127ff17fff8000", + "0x48127fd87fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0x482680017ff98000", + "0x1", + "0x482680017ffa8000", + "0x1e96", + "0x1104800180018000", + "0x419", + "0x48127ff67fff8000", + "0x48127ff67fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0xa0680017fff8000", + "0x7", + "0x482680017ffa8000", + "0x100000000000000000000000000000000", + "0x400280007ff97fff", + "0x10780017fff7fff", + "0x49", + "0x4825800180007ffa", + "0x0", + "0x400280007ff97fff", + "0x482680017ff98000", + "0x1", + "0x480a7ffc7fff8000", + "0x480a7ffd7fff8000", + "0x1104800180018000", + "0x6ad", + "0x20680017fff7ffd", + "0x34", + "0x48307ffb80007ffc", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0xc", + "0x1104800180018000", + "0x3ee", + "0x48127ff17fff8000", + "0x48127fdc7fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0x1104800180018000", + "0x1365", + "0x482480017fff8000", + "0x1364", + "0x480080007fff8000", + "0xa0680017fff8000", + "0x9", + "0x4824800180007fe0", + "0x0", + "0x482480017fff8000", + "0x100000000000000000000000000000000", + "0x400080007ff27fff", + "0x10780017fff7fff", + "0x11", + "0x4824800180007fe0", + "0x0", + "0x400080007ff37fff", + "0x40780017fff7fff", + "0x1", + "0x482480017ff28000", + "0x1", + "0x482480017ffd8000", + "0x109a", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x0", + "0x48127ffb7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0x482480017ff28000", + "0x1", + "0x482480017fdd8000", + "0xb86", + "0x10780017fff7fff", + "0x10", + "0x1104800180018000", + "0x3c6", + "0x48127ff27fff8000", + "0x48127fdd7fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0x482680017ff98000", + "0x1", + "0x482680017ffa8000", + "0x1e96", + "0x1104800180018000", + "0x3bd", + "0x48127ff67fff8000", + "0x48127ff67fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0xa0680017fff8000", + "0x7", + "0x482680017ffa8000", + "0x100000000000000000000000000000000", + "0x400280007ff97fff", + "0x10780017fff7fff", + "0x9b", + "0x4825800180007ffa", + "0x0", + "0x400280007ff97fff", + "0x48297ffc80007ffd", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0x85", + "0x480280007ffc8000", + "0xa0680017fff8000", + "0x12", + "0x4824800180007ffe", + "0x10000000000000000", + "0x4844800180008002", + "0x8000000000000110000000000000000", + "0x4830800080017ffe", + "0x480280017ff97fff", + "0x482480017ffe8000", + "0xefffffffffffffdeffffffffffffffff", + "0x480280027ff97fff", + "0x400280037ff97ffb", + "0x402480017fff7ffb", + "0xffffffffffffffffffffffffffffffff", + "0x20680017fff7fff", + "0x6e", + "0x402780017fff7fff", + "0x1", + "0x400280017ff97ffe", + "0x482480017ffe8000", + "0xffffffffffffffff0000000000000000", + "0x400280027ff97fff", + "0x482680017ffc8000", + "0x1", + "0x480a7ffd7fff8000", + "0x48307ffe80007fff", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0x5a", + "0x480080007ffd8000", + "0xa0680017fff8000", + "0x12", + "0x4824800180007ffe", + "0x100000000", + "0x4844800180008002", + "0x8000000000000110000000000000000", + "0x4830800080017ffe", + "0x480280037ff97fff", + "0x482480017ffe8000", + "0xefffffffffffffde00000000ffffffff", + "0x480280047ff97fff", + "0x400280057ff97ffb", + "0x402480017fff7ffb", + "0xffffffffffffffffffffffffffffffff", + "0x20680017fff7fff", + "0x43", + "0x402780017fff7fff", + "0x1", + "0x400280037ff97ffe", + "0x482480017ffe8000", + "0xffffffffffffffffffffffff00000000", + "0x400280047ff97fff", + "0x482480017ffa8000", + "0x1", + "0x48127ffa7fff8000", + "0x48307ffe80007fff", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0xd", + "0x1104800180018000", + "0x35c", + "0x482680017ff98000", + "0x5", + "0x48127fe97fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0x1104800180018000", + "0x12d2", + "0x482480017fff8000", + "0x12d1", + "0x480080007fff8000", + "0xa0680017fff8000", + "0x9", + "0x4824800180007fed", + "0x0", + "0x482480017fff8000", + "0x100000000000000000000000000000000", + "0x400280057ff97fff", + "0x10780017fff7fff", + "0x16", + "0x4824800180007fed", + "0x0", + "0x400280057ff97fff", + "0x48127fee7fff8000", + "0x48127ff37fff8000", + "0x40780017fff7fff", + "0x1", + "0x400080007fff7ffd", + "0x400080017fff7ffe", + "0x482680017ff98000", + "0x6", + "0x482480017ffb8000", + "0x1504", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x0", + "0x48127ffb7fff8000", + "0x482480017ffa8000", + "0x2", + "0x208b7fff7fff7ffe", + "0x482680017ff98000", + "0x6", + "0x482480017fea8000", + "0x1180", + "0x10780017fff7fff", + "0x26", + "0x482680017ff98000", + "0x6", + "0x482480017fef8000", + "0x14a0", + "0x10780017fff7fff", + "0x12", + "0x482680017ff98000", + "0x3", + "0x482480017ff78000", + "0x195a", + "0x10780017fff7fff", + "0xc", + "0x482680017ff98000", + "0x4", + "0x482480017ff58000", + "0x18b0", + "0x10780017fff7fff", + "0x6", + "0x482680017ff98000", + "0x1", + "0x482480017ffd8000", + "0x1dce", + "0x1104800180018000", + "0x318", + "0x48127ff67fff8000", + "0x48127ff67fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0x482680017ff98000", + "0x1", + "0x482680017ffa8000", + "0x1e96", + "0x1104800180018000", + "0x30f", + "0x48127ff67fff8000", + "0x48127ff67fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0xa0680017fff8000", + "0x7", + "0x482680017ffa8000", + "0x100000000000000000000000000000000", + "0x400280007ff97fff", + "0x10780017fff7fff", + "0x4d", + "0x4825800180007ffa", + "0x0", + "0x400280007ff97fff", + "0x482680017ff98000", + "0x1", + "0x480a7ffc7fff8000", + "0x480a7ffd7fff8000", + "0x1104800180018000", + "0xb65", + "0x20680017fff7ffc", + "0x38", + "0x48307ffa80007ffb", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0xc", + "0x1104800180018000", + "0x2e4", + "0x48127ff07fff8000", + "0x48127fd47fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0x1104800180018000", + "0x125b", + "0x482480017fff8000", + "0x125a", + "0x480080007fff8000", + "0xa0680017fff8000", + "0x9", + "0x4824800180007fd8", + "0x0", + "0x482480017fff8000", + "0x100000000000000000000000000000000", + "0x400080007ff17fff", + "0x10780017fff7fff", + "0x15", + "0x4824800180007fd8", + "0x0", + "0x400080007ff27fff", + "0x40780017fff7fff", + "0x1", + "0x400080007fff7ff5", + "0x400080017fff7ff6", + "0x400080027fff7ff7", + "0x482480017ff18000", + "0x1", + "0x482480017ffd8000", + "0xa0a", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x0", + "0x48127ffb7fff8000", + "0x482480017ffa8000", + "0x3", + "0x208b7fff7fff7ffe", + "0x482480017ff18000", + "0x1", + "0x482480017fd58000", + "0x622", + "0x10780017fff7fff", + "0x10", + "0x1104800180018000", + "0x2b8", + "0x48127ff17fff8000", + "0x48127fd57fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0x482680017ff98000", + "0x1", + "0x482680017ffa8000", + "0x1e96", + "0x1104800180018000", + "0x2af", + "0x48127ff67fff8000", + "0x48127ff67fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0xa0680017fff8000", + "0x7", + "0x482680017ffa8000", + "0x100000000000000000000000000000000", + "0x400280007ff97fff", + "0x10780017fff7fff", + "0x38", + "0x4825800180007ffa", + "0x0", + "0x400280007ff97fff", + "0x48297ffc80007ffd", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0xd", + "0x1104800180018000", + "0x28c", + "0x482680017ff98000", + "0x1", + "0x48127ff57fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0x1104800180018000", + "0x1202", + "0x482480017fff8000", + "0x1201", + "0x480080007fff8000", + "0xa0680017fff8000", + "0x9", + "0x4824800180007ff9", + "0x0", + "0x482480017fff8000", + "0x100000000000000000000000000000000", + "0x400280017ff97fff", + "0x10780017fff7fff", + "0x11", + "0x4824800180007ff9", + "0x0", + "0x400280017ff97fff", + "0x40780017fff7fff", + "0x1", + "0x482680017ff98000", + "0x2", + "0x482480017ffd8000", + "0x1eb4", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x0", + "0x48127ffb7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0x482680017ff98000", + "0x2", + "0x482480017ff68000", + "0x19a0", + "0x10780017fff7fff", + "0x6", + "0x482680017ff98000", + "0x1", + "0x482680017ffa8000", + "0x1e96", + "0x1104800180018000", + "0x264", + "0x48127ff67fff8000", + "0x48127ff67fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0xa0680017fff8000", + "0x7", + "0x482680017ffa8000", + "0xfffffffffffffffffffffffffffff88a", + "0x400280007ff97fff", + "0x10780017fff7fff", + "0x4e", + "0x4825800180007ffa", + "0x776", + "0x400280007ff97fff", + "0x482680017ff98000", + "0x1", + "0x480a7ffc7fff8000", + "0x480a7ffd7fff8000", + "0x1104800180018000", + "0xb58", + "0x20680017fff7ffa", + "0x39", + "0x48307ff880007ff9", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0xc", + "0x1104800180018000", + "0x239", + "0x48127fee7fff8000", + "0x48127fbc7fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0x1104800180018000", + "0x11b0", + "0x482480017fff8000", + "0x11af", + "0x480080007fff8000", + "0xa0680017fff8000", + "0x9", + "0x4824800180007fc0", + "0x0", + "0x482480017fff8000", + "0x100000000000000000000000000000000", + "0x400080007fef7fff", + "0x10780017fff7fff", + "0x17", + "0x4824800180007fc0", + "0x0", + "0x400080007ff07fff", + "0x40780017fff7fff", + "0x1", + "0x400080007fff7ff3", + "0x400080017fff7ff4", + "0x400080027fff7ff5", + "0x400080037fff7ff6", + "0x400080047fff7ff7", + "0x482480017fef8000", + "0x1", + "0x482480017ffd8000", + "0x320", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x0", + "0x48127ffb7fff8000", + "0x482480017ffa8000", + "0x5", + "0x208b7fff7fff7ffe", + "0x482480017fef8000", + "0x1", + "0x48127fbd7fff8000", + "0x10780017fff7fff", + "0x10", + "0x1104800180018000", + "0x20c", + "0x48127fef7fff8000", + "0x48127fbd7fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0x482680017ff98000", + "0x1", + "0x482680017ffa8000", + "0x1e96", + "0x1104800180018000", + "0x203", + "0x48127ff67fff8000", + "0x48127ff67fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0xa0680017fff8000", + "0x7", + "0x482680017ffa8000", + "0xfffffffffffffffffffffffffffffea2", + "0x400280007ff97fff", + "0x10780017fff7fff", + "0x68", + "0x4825800180007ffa", + "0x15e", + "0x400280007ff97fff", + "0x482680017ff98000", + "0x1", + "0x48127ffe7fff8000", + "0x480a7ffc7fff8000", + "0x480a7ffd7fff8000", + "0x1104800180018000", + "0xb76", + "0x20680017fff7ff9", + "0x54", + "0x20680017fff7ffc", + "0x48", + "0x48307ffa80007ffb", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0xc", + "0x1104800180018000", + "0x1d5", + "0x48127fee7fff8000", + "0x48127fee7fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0x1104800180018000", + "0x114c", + "0x482480017fff8000", + "0x114b", + "0x480080007fff8000", + "0xa0680017fff8000", + "0x9", + "0x4824800180007ff2", + "0x6ea", + "0x482480017fff8000", + "0x100000000000000000000000000000000", + "0x400080007fef7fff", + "0x10780017fff7fff", + "0x26", + "0x4824800180007ff2", + "0x6ea", + "0x400080007ff07fff", + "0x40780017fff7fff", + "0x1", + "0x400080007fff7ff5", + "0x48307ff680007ff7", + "0x400080017ffe7fff", + "0x482480017fee8000", + "0x1", + "0x48127ffc7fff8000", + "0x48127ff37fff8000", + "0x48127ff37fff8000", + "0x48127ffa7fff8000", + "0x482480017ff98000", + "0x2", + "0x1104800180018000", + "0x396", + "0x20680017fff7ffd", + "0xa", + "0x48127ffb7fff8000", + "0x48127ffb7fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x0", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0x48127ffb7fff8000", + "0x48127ffb7fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0x482480017fef8000", + "0x1", + "0x48127fef7fff8000", + "0x10780017fff7fff", + "0x18", + "0x1104800180018000", + "0x199", + "0x48127fef7fff8000", + "0x48127fef7fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0x48127ff77fff8000", + "0x48127ff77fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0x482680017ff98000", + "0x1", + "0x482680017ffa8000", + "0x1e96", + "0x1104800180018000", + "0x188", + "0x48127ff67fff8000", + "0x48127ff67fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0xa0680017fff8000", + "0x7", + "0x482680017ffa8000", + "0xfffffffffffffffffffffffffffff88a", + "0x400280007ff97fff", + "0x10780017fff7fff", + "0x4e", + "0x4825800180007ffa", + "0x776", + "0x400280007ff97fff", + "0x482680017ff98000", + "0x1", + "0x480a7ffc7fff8000", + "0x480a7ffd7fff8000", + "0x1104800180018000", + "0xb87", + "0x20680017fff7ffa", + "0x39", + "0x48307ff880007ff9", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0xc", + "0x1104800180018000", + "0x15d", + "0x48127fee7fff8000", + "0x48127fbc7fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0x1104800180018000", + "0x10d4", + "0x482480017fff8000", + "0x10d3", + "0x480080007fff8000", + "0xa0680017fff8000", + "0x9", + "0x4824800180007fc0", + "0x0", + "0x482480017fff8000", + "0x100000000000000000000000000000000", + "0x400080007fef7fff", + "0x10780017fff7fff", + "0x17", + "0x4824800180007fc0", + "0x0", + "0x400080007ff07fff", + "0x40780017fff7fff", + "0x1", + "0x400080007fff7ff3", + "0x400080017fff7ff4", + "0x400080027fff7ff5", + "0x400080037fff7ff6", + "0x400080047fff7ff7", + "0x482480017fef8000", + "0x1", + "0x482480017ffd8000", + "0x320", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x0", + "0x48127ffb7fff8000", + "0x482480017ffa8000", + "0x5", + "0x208b7fff7fff7ffe", + "0x482480017fef8000", + "0x1", + "0x48127fbd7fff8000", + "0x10780017fff7fff", + "0x10", + "0x1104800180018000", + "0x130", + "0x48127fef7fff8000", + "0x48127fbd7fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0x482680017ff98000", + "0x1", + "0x482680017ffa8000", + "0x1e96", + "0x1104800180018000", + "0x127", + "0x48127ff67fff8000", + "0x48127ff67fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0xa0680017fff8000", + "0x7", + "0x482680017ffa8000", + "0x100000000000000000000000000000000", + "0x400280007ff97fff", + "0x10780017fff7fff", + "0x5e", + "0x4825800180007ffa", + "0x0", + "0x400280007ff97fff", + "0x482680017ff98000", + "0x1", + "0x480a7ffc7fff8000", + "0x480a7ffd7fff8000", + "0x1104800180018000", + "0xba6", + "0x20680017fff7ffc", + "0x49", + "0x48307ffa80007ffb", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0xc", + "0x1104800180018000", + "0xfc", + "0x48127ff07fff8000", + "0x48127fd67fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0x1104800180018000", + "0x1073", + "0x482480017fff8000", + "0x1072", + "0x480080007fff8000", + "0xa0680017fff8000", + "0x9", + "0x4824800180007fda", + "0x0", + "0x482480017fff8000", + "0x100000000000000000000000000000000", + "0x400080007ff17fff", + "0x10780017fff7fff", + "0x26", + "0x4824800180007fda", + "0x0", + "0x400080007ff27fff", + "0x40780017fff7fff", + "0x1", + "0x400080007fff7ff5", + "0x20680017fff7ff6", + "0xd", + "0x480680017fff8000", + "0x0", + "0x400080017ffe7fff", + "0x400080027ffe7ff6", + "0x482480017ffd8000", + "0x906", + "0x48127ffd7fff8000", + "0x482480017ffc8000", + "0x3", + "0x10780017fff7fff", + "0xa", + "0x480680017fff8000", + "0x1", + "0x400080017ffe7fff", + "0x482480017ffd8000", + "0x9ce", + "0x48127ffd7fff8000", + "0x482480017ffc8000", + "0x2", + "0x482480017fed8000", + "0x1", + "0x48127ffc7fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x0", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0x482480017ff18000", + "0x1", + "0x482480017fd78000", + "0x776", + "0x10780017fff7fff", + "0x10", + "0x1104800180018000", + "0xbf", + "0x48127ff17fff8000", + "0x48127fd77fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0x482680017ff98000", + "0x1", + "0x482680017ffa8000", + "0x1e96", + "0x1104800180018000", + "0xb6", + "0x48127ff67fff8000", + "0x48127ff67fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0xa0680017fff8000", + "0x7", + "0x482680017ffa8000", + "0x100000000000000000000000000000000", + "0x400280007ff97fff", + "0x10780017fff7fff", + "0x8f", + "0x4825800180007ffa", + "0x0", + "0x400280007ff97fff", + "0x48297ffc80007ffd", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0x79", + "0x480280007ffc8000", + "0xa0680017fff8000", + "0x16", + "0x480280017ff98003", + "0x480280027ff98003", + "0x4844800180017ffe", + "0x100000000000000000000000000000000", + "0x483080017ffd7ffb", + "0x482480017fff7ffd", + "0x800000000000010fffffffffffffffff7ffffffffffffef0000000000000001", + "0x20680017fff7ffc", + "0x6", + "0x402480017fff7ffd", + "0xffffffffffffffffffffffffffffffff", + "0x10780017fff7fff", + "0x4", + "0x402480017ffe7ffd", + "0xf7ffffffffffffef0000000000000000", + "0x400280037ff97ffd", + "0x20680017fff7ffe", + "0x5e", + "0x402780017fff7fff", + "0x1", + "0x400280017ff97ffe", + "0x482680017ff98000", + "0x2", + "0x482680017ffc8000", + "0x1", + "0x480a7ffd7fff8000", + "0x1104800180018000", + "0xbb3", + "0x20680017fff7ffd", + "0x4d", + "0x48307ffb80007ffc", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0xc", + "0x1104800180018000", + "0x6d", + "0x48127ff17fff8000", + "0x48127fd97fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0x1104800180018000", + "0xfe4", + "0x482480017fff8000", + "0xfe3", + "0x480080007fff8000", + "0xa0680017fff8000", + "0x9", + "0x4824800180007fdd", + "0x0", + "0x482480017fff8000", + "0x100000000000000000000000000000000", + "0x400080007ff27fff", + "0x10780017fff7fff", + "0x2a", + "0x4824800180007fdd", + "0x0", + "0x400080007ff37fff", + "0x48127fde7fff8000", + "0x48127ff67fff8000", + "0x48127ff67fff8000", + "0x40780017fff7fff", + "0x1", + "0x400080007fff7ffc", + "0x20680017fff7ffd", + "0xd", + "0x480680017fff8000", + "0x0", + "0x400080017ffe7fff", + "0x400080027ffe7ffd", + "0x482480017ffa8000", + "0x9b0", + "0x48127ffd7fff8000", + "0x482480017ffc8000", + "0x3", + "0x10780017fff7fff", + "0xb", + "0x480680017fff8000", + "0x1", + "0x400080017ffe7fff", + "0x400080027ffe7ffd", + "0x482480017ffa8000", + "0xa14", + "0x48127ffd7fff8000", + "0x482480017ffc8000", + "0x3", + "0x482480017feb8000", + "0x1", + "0x48127ffc7fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x0", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0x482480017ff28000", + "0x1", + "0x482480017fda8000", + "0x94c", + "0x10780017fff7fff", + "0x1f", + "0x48127ffa7fff8000", + "0x482480017fe28000", + "0xe42", + "0x10780017fff7fff", + "0xc", + "0x482680017ff98000", + "0x4", + "0x482480017ff68000", + "0x184c", + "0x10780017fff7fff", + "0x6", + "0x482680017ff98000", + "0x1", + "0x482480017ffd8000", + "0x1dce", + "0x1104800180018000", + "0x1d", + "0x48127ff67fff8000", + "0x48127ff67fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0x482680017ff98000", + "0x1", + "0x482680017ffa8000", + "0x1e96", + "0x1104800180018000", + "0x14", + "0x48127ff67fff8000", + "0x48127ff67fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0x480680017fff8000", + "0x496e70757420746f6f206c6f6e6720666f7220617267756d656e7473", + "0x1104800180018000", + "0xbd6", + "0x208b7fff7fff7ffe", + "0x480680017fff8000", + "0x4661696c656420746f20646573657269616c697a6520706172616d202331", + "0x1104800180018000", + "0xbd1", + "0x208b7fff7fff7ffe", + "0x480680017fff8000", + "0x4f7574206f6620676173", + "0x1104800180018000", + "0xbcc", + "0x208b7fff7fff7ffe", + "0x48297ffc80007ffd", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0x7a", + "0x480280007ffc8000", + "0x20680017fff7fff", + "0x51", + "0x482680017ffc8000", + "0x1", + "0x480a7ffd7fff8000", + "0x48307ffe80007fff", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0x35", + "0x40780017fff7fff", + "0x1", + "0x480a7ffa7fff8000", + "0x480a7ffb7fff8000", + "0x482480017ffa8000", + "0x1", + "0x48127ffa7fff8000", + "0x48127ffb7fff8000", + "0x48127ffa7fff8000", + "0x480080007ff68000", + "0x1104800180018000", + "0xbb6", + "0x20680017fff7ffa", + "0x18", + "0x20680017fff7ffd", + "0x10", + "0x48127ff87fff8000", + "0x482480017ff88000", + "0x1f4", + "0x480680017fff8000", + "0x0", + "0x48127ff87fff8000", + "0x48127ff87fff8000", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x48127ff77fff8000", + "0x48127ff77fff8000", + "0x208b7fff7fff7ffe", + "0x48127ff87fff8000", + "0x48127ff87fff8000", + "0x48127ff97fff8000", + "0x48127ff97fff8000", + "0x10780017fff7fff", + "0x16", + "0x48127ff87fff8000", + "0x48127ff87fff8000", + "0x480680017fff8000", + "0x1", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x48127ff77fff8000", + "0x48127ff77fff8000", + "0x208b7fff7fff7ffe", + "0x480a7ffa7fff8000", + "0x482680017ffb8000", + "0xd2a", + "0x48127ffb7fff8000", + "0x48127ffb7fff8000", + "0x48127ffc7fff8000", + "0x48127ffc7fff8000", + "0x480680017fff8000", + "0x0", + "0x48127ffb7fff8000", + "0x48127ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x208b7fff7fff7ffe", + "0x4824800180007fff", + "0x1", + "0x20680017fff7fff", + "0x13", + "0x480a7ffa7fff8000", + "0x482680017ffb8000", + "0xfe6", + "0x480680017fff8000", + "0x0", + "0x482680017ffc8000", + "0x1", + "0x480a7ffd7fff8000", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x1", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x208b7fff7fff7ffe", + "0x480a7ffa7fff8000", + "0x482680017ffb8000", + "0xfe6", + "0x480680017fff8000", + "0x0", + "0x482680017ffc8000", + "0x1", + "0x480a7ffd7fff8000", + "0x480680017fff8000", + "0x1", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x208b7fff7fff7ffe", + "0x480a7ffa7fff8000", + "0x482680017ffb8000", + "0x1112", + "0x480680017fff8000", + "0x0", + "0x480a7ffc7fff8000", + "0x480a7ffd7fff8000", + "0x480680017fff8000", + "0x1", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x208b7fff7fff7ffe", + "0xa0680017fff8000", + "0x7", + "0x482680017ff98000", + "0xfffffffffffffffffffffffffffff9de", + "0x400280007ff87fff", + "0x10780017fff7fff", + "0x21", + "0x4825800180007ff9", + "0x622", + "0x400280007ff87fff", + "0x48297ffa80007ffb", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0x10", + "0x480280007ffa8000", + "0x400280007ffd7fff", + "0x482680017ff88000", + "0x1", + "0x48127ffc7fff8000", + "0x482680017ffa8000", + "0x1", + "0x480a7ffb7fff8000", + "0x480a7ffc7fff8000", + "0x482680017ffd8000", + "0x1", + "0x1104800180018000", + "0x800000000000010ffffffffffffffffffffffffffffffffffffffffffffffe7", + "0x208b7fff7fff7ffe", + "0x482680017ff88000", + "0x1", + "0x482480017ffd8000", + "0x8de", + "0x480680017fff8000", + "0x0", + "0x480a7ffc7fff8000", + "0x480a7ffd7fff8000", + "0x208b7fff7fff7ffe", + "0x1104800180018000", + "0x800000000000010ffffffffffffffffffffffffffffffffffffffffffffff49", + "0x482680017ff88000", + "0x1", + "0x480a7ff97fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffb7fff8000", + "0x48127ffb7fff8000", + "0x208b7fff7fff7ffe", + "0x48297ffc80007ffd", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0x8d", + "0x480280007ffc8000", + "0xa0680017fff8000", + "0x12", + "0x4824800180007ffe", + "0x100000000", + "0x4844800180008002", + "0x8000000000000110000000000000000", + "0x4830800080017ffe", + "0x480280007ffb7fff", + "0x482480017ffe8000", + "0xefffffffffffffde00000000ffffffff", + "0x480280017ffb7fff", + "0x400280027ffb7ffb", + "0x402480017fff7ffb", + "0xffffffffffffffffffffffffffffffff", + "0x20680017fff7fff", + "0x73", + "0x402780017fff7fff", + "0x1", + "0x400280007ffb7ffe", + "0x482480017ffe8000", + "0xffffffffffffffffffffffff00000000", + "0x400280017ffb7fff", + "0x482680017ffc8000", + "0x1", + "0x480a7ffd7fff8000", + "0x48307ffe80007fff", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0x5d", + "0x480080007ffd8000", + "0xa0680017fff8000", + "0x12", + "0x4824800180007ffe", + "0x100000000", + "0x4844800180008002", + "0x8000000000000110000000000000000", + "0x4830800080017ffe", + "0x480280027ffb7fff", + "0x482480017ffe8000", + "0xefffffffffffffde00000000ffffffff", + "0x480280037ffb7fff", + "0x400280047ffb7ffb", + "0x402480017fff7ffb", + "0xffffffffffffffffffffffffffffffff", + "0x20680017fff7fff", + "0x43", + "0x402780017fff7fff", + "0x1", + "0x400280027ffb7ffe", + "0x482480017ffe8000", + "0xffffffffffffffffffffffff00000000", + "0x400280037ffb7fff", + "0x482480017ffa8000", + "0x1", + "0x48127ffa7fff8000", + "0x48307ffe80007fff", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0x2d", + "0x480080007ffd8000", + "0xa0680017fff8000", + "0x12", + "0x4824800180007ffe", + "0x100000000", + "0x4844800180008002", + "0x8000000000000110000000000000000", + "0x4830800080017ffe", + "0x480280047ffb7fff", + "0x482480017ffe8000", + "0xefffffffffffffde00000000ffffffff", + "0x480280057ffb7fff", + "0x400280067ffb7ffb", + "0x402480017fff7ffb", + "0xffffffffffffffffffffffffffffffff", + "0x20680017fff7fff", + "0x15", + "0x402780017fff7fff", + "0x1", + "0x400280047ffb7ffe", + "0x482480017ffe8000", + "0xffffffffffffffffffffffff00000000", + "0x400280057ffb7fff", + "0x40780017fff7fff", + "0x5", + "0x482680017ffb8000", + "0x6", + "0x482480017ff48000", + "0x1", + "0x48127ff47fff8000", + "0x480680017fff8000", + "0x0", + "0x48127fe87fff8000", + "0x48127fed7fff8000", + "0x48127ff27fff8000", + "0x208b7fff7fff7ffe", + "0x482680017ffb8000", + "0x7", + "0x482480017ff48000", + "0x1", + "0x48127ff47fff8000", + "0x10780017fff7fff", + "0x29", + "0x40780017fff7fff", + "0x8", + "0x482680017ffb8000", + "0x4", + "0x48127ff47fff8000", + "0x48127ff47fff8000", + "0x10780017fff7fff", + "0x21", + "0x40780017fff7fff", + "0x6", + "0x482680017ffb8000", + "0x5", + "0x482480017fee8000", + "0x1", + "0x48127fee7fff8000", + "0x10780017fff7fff", + "0x18", + "0x40780017fff7fff", + "0xe", + "0x482680017ffb8000", + "0x2", + "0x48127fee7fff8000", + "0x48127fee7fff8000", + "0x10780017fff7fff", + "0x10", + "0x40780017fff7fff", + "0xc", + "0x482680017ffb8000", + "0x3", + "0x482680017ffc8000", + "0x1", + "0x480a7ffd7fff8000", + "0x10780017fff7fff", + "0x7", + "0x40780017fff7fff", + "0x14", + "0x480a7ffb7fff8000", + "0x480a7ffc7fff8000", + "0x480a7ffd7fff8000", + "0x480680017fff8000", + "0x1", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x208b7fff7fff7ffe", + "0x48297ffc80007ffd", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0x6a", + "0x480280007ffc8000", + "0x20680017fff7fff", + "0x3d", + "0x480a7ffa7fff8000", + "0x480a7ffb7fff8000", + "0x482680017ffc8000", + "0x1", + "0x480a7ffd7fff8000", + "0x1104800180018000", + "0xad8", + "0x20680017fff7ff9", + "0x23", + "0x20680017fff7ffc", + "0x10", + "0x48127ff77fff8000", + "0x48127ff77fff8000", + "0x480680017fff8000", + "0x0", + "0x48127ff77fff8000", + "0x48127ff77fff8000", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x48127ff67fff8000", + "0x48127ff67fff8000", + "0x48127ff67fff8000", + "0x208b7fff7fff7ffe", + "0x48127ff77fff8000", + "0x48127ff77fff8000", + "0x480680017fff8000", + "0x0", + "0x48127ff77fff8000", + "0x48127ff77fff8000", + "0x480680017fff8000", + "0x1", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x208b7fff7fff7ffe", + "0x48127ff77fff8000", + "0x48127ff77fff8000", + "0x480680017fff8000", + "0x1", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x48127ff67fff8000", + "0x48127ff67fff8000", + "0x208b7fff7fff7ffe", + "0x4824800180007fff", + "0x1", + "0x20680017fff7fff", + "0x15", + "0x480a7ffa7fff8000", + "0x482680017ffb8000", + "0x1a36", + "0x480680017fff8000", + "0x0", + "0x482680017ffc8000", + "0x1", + "0x480a7ffd7fff8000", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x1", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x208b7fff7fff7ffe", + "0x480a7ffa7fff8000", + "0x482680017ffb8000", + "0x1a36", + "0x480680017fff8000", + "0x0", + "0x482680017ffc8000", + "0x1", + "0x480a7ffd7fff8000", + "0x480680017fff8000", + "0x1", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x208b7fff7fff7ffe", + "0x480a7ffa7fff8000", + "0x482680017ffb8000", + "0x1b62", + "0x480680017fff8000", + "0x0", + "0x480a7ffc7fff8000", + "0x480a7ffd7fff8000", + "0x480680017fff8000", + "0x1", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x208b7fff7fff7ffe", + "0xa0680017fff8000", + "0x7", + "0x482680017ff98000", + "0xfffffffffffffffffffffffffffff9de", + "0x400280007ff87fff", + "0x10780017fff7fff", + "0x21", + "0x4825800180007ff9", + "0x622", + "0x400280007ff87fff", + "0x48297ffa80007ffb", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0x10", + "0x480280007ffa8000", + "0x400280007ffd7fff", + "0x482680017ff88000", + "0x1", + "0x48127ffc7fff8000", + "0x482680017ffa8000", + "0x1", + "0x480a7ffb7fff8000", + "0x480a7ffc7fff8000", + "0x482680017ffd8000", + "0x1", + "0x1104800180018000", + "0x800000000000010ffffffffffffffffffffffffffffffffffffffffffffffe7", + "0x208b7fff7fff7ffe", + "0x482680017ff88000", + "0x1", + "0x482480017ffd8000", + "0x8de", + "0x480680017fff8000", + "0x0", + "0x480a7ffc7fff8000", + "0x480a7ffd7fff8000", + "0x208b7fff7fff7ffe", + "0x1104800180018000", + "0x800000000000010fffffffffffffffffffffffffffffffffffffffffffffdfc", + "0x482680017ff88000", + "0x1", + "0x480a7ff97fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffb7fff8000", + "0x48127ffb7fff8000", + "0x208b7fff7fff7ffe", + "0x48297ffc80007ffd", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0x8c", + "0x480280007ffc8000", + "0x20680017fff7fff", + "0x69", + "0x482680017ffc8000", + "0x1", + "0x480a7ffd7fff8000", + "0x48307ffe80007fff", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0x5a", + "0x480080007ffd8000", + "0x20680017fff7fff", + "0x3e", + "0x482480017ffc8000", + "0x1", + "0x48127ffc7fff8000", + "0x48307ffe80007fff", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0x2f", + "0x480080007ffd8000", + "0xa0680017fff8000", + "0x12", + "0x4824800180007ffe", + "0x10000", + "0x4844800180008002", + "0x8000000000000110000000000000000", + "0x4830800080017ffe", + "0x480280007ffb7fff", + "0x482480017ffe8000", + "0xefffffffffffffde000000000000ffff", + "0x480280017ffb7fff", + "0x400280027ffb7ffb", + "0x402480017fff7ffb", + "0xffffffffffffffffffffffffffffffff", + "0x20680017fff7fff", + "0x17", + "0x402780017fff7fff", + "0x1", + "0x400280007ffb7ffe", + "0x482480017ffe8000", + "0xffffffffffffffffffffffffffff0000", + "0x400280017ffb7fff", + "0x40780017fff7fff", + "0x5", + "0x482680017ffb8000", + "0x2", + "0x482480017ff48000", + "0x1", + "0x48127ff47fff8000", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x48127ff27fff8000", + "0x208b7fff7fff7ffe", + "0x482680017ffb8000", + "0x3", + "0x482480017ff48000", + "0x1", + "0x48127ff47fff8000", + "0x10780017fff7fff", + "0x27", + "0x40780017fff7fff", + "0x8", + "0x480a7ffb7fff8000", + "0x48127ff47fff8000", + "0x48127ff47fff8000", + "0x10780017fff7fff", + "0x20", + "0x40780017fff7fff", + "0xa", + "0x4824800180007ff5", + "0x1", + "0x20680017fff7fff", + "0xf", + "0x480a7ffb7fff8000", + "0x482480017ff08000", + "0x1", + "0x48127ff07fff8000", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x1", + "0x480680017fff8000", + "0x0", + "0x208b7fff7fff7ffe", + "0x480a7ffb7fff8000", + "0x482480017ff08000", + "0x1", + "0x48127ff07fff8000", + "0x10780017fff7fff", + "0x2e", + "0x40780017fff7fff", + "0xc", + "0x480a7ffb7fff8000", + "0x48127ff07fff8000", + "0x48127ff07fff8000", + "0x10780017fff7fff", + "0x27", + "0x40780017fff7fff", + "0xe", + "0x4824800180007ff1", + "0x1", + "0x20680017fff7fff", + "0xf", + "0x480a7ffb7fff8000", + "0x482680017ffc8000", + "0x1", + "0x480a7ffd7fff8000", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x1", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x208b7fff7fff7ffe", + "0x480a7ffb7fff8000", + "0x482680017ffc8000", + "0x1", + "0x480a7ffd7fff8000", + "0x480680017fff8000", + "0x1", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x208b7fff7fff7ffe", + "0x40780017fff7fff", + "0x10", + "0x480a7ffb7fff8000", + "0x480a7ffc7fff8000", + "0x480a7ffd7fff8000", + "0x480680017fff8000", + "0x1", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x208b7fff7fff7ffe", + "0x48297ffc80007ffd", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0x8c", + "0x480280007ffc8000", + "0x20680017fff7fff", + "0x3e", + "0x40780017fff7fff", + "0x1", + "0x482680017ffc8000", + "0x1", + "0x480a7ffd7fff8000", + "0x48307ffe80007fff", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0x2d", + "0x480080007ffd8000", + "0xa0680017fff8000", + "0x12", + "0x4824800180007ffe", + "0x100", + "0x4844800180008002", + "0x8000000000000110000000000000000", + "0x4830800080017ffe", + "0x480280007ffb7fff", + "0x482480017ffe8000", + "0xefffffffffffffde00000000000000ff", + "0x480280017ffb7fff", + "0x400280027ffb7ffb", + "0x402480017fff7ffb", + "0xffffffffffffffffffffffffffffffff", + "0x20680017fff7fff", + "0x15", + "0x402780017fff7fff", + "0x1", + "0x400280007ffb7ffe", + "0x482480017ffe8000", + "0xffffffffffffffffffffffffffffff00", + "0x400280017ffb7fff", + "0x40780017fff7fff", + "0x5", + "0x482680017ffb8000", + "0x2", + "0x482480017ff48000", + "0x1", + "0x48127ff47fff8000", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x48127ff37fff8000", + "0x208b7fff7fff7ffe", + "0x482680017ffb8000", + "0x3", + "0x482480017ff48000", + "0x1", + "0x48127ff47fff8000", + "0x10780017fff7fff", + "0x59", + "0x40780017fff7fff", + "0x8", + "0x480a7ffb7fff8000", + "0x48127ff47fff8000", + "0x48127ff47fff8000", + "0x10780017fff7fff", + "0x52", + "0x4824800180007fff", + "0x1", + "0x20680017fff7fff", + "0x3c", + "0x482680017ffc8000", + "0x1", + "0x480a7ffd7fff8000", + "0x48307ffe80007fff", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0x2d", + "0x480080007ffd8000", + "0xa0680017fff8000", + "0x12", + "0x4824800180007ffe", + "0x10000", + "0x4844800180008002", + "0x8000000000000110000000000000000", + "0x4830800080017ffe", + "0x480280007ffb7fff", + "0x482480017ffe8000", + "0xefffffffffffffde000000000000ffff", + "0x480280017ffb7fff", + "0x400280027ffb7ffb", + "0x402480017fff7ffb", + "0xffffffffffffffffffffffffffffffff", + "0x20680017fff7fff", + "0x15", + "0x402780017fff7fff", + "0x1", + "0x400280007ffb7ffe", + "0x482480017ffe8000", + "0xffffffffffffffffffffffffffff0000", + "0x400280017ffb7fff", + "0x40780017fff7fff", + "0x5", + "0x482680017ffb8000", + "0x2", + "0x482480017ff48000", + "0x1", + "0x48127ff47fff8000", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x1", + "0x48127ff37fff8000", + "0x208b7fff7fff7ffe", + "0x482680017ffb8000", + "0x3", + "0x482480017ff48000", + "0x1", + "0x48127ff47fff8000", + "0x10780017fff7fff", + "0x1b", + "0x40780017fff7fff", + "0x8", + "0x480a7ffb7fff8000", + "0x48127ff47fff8000", + "0x48127ff47fff8000", + "0x10780017fff7fff", + "0x14", + "0x40780017fff7fff", + "0xb", + "0x480a7ffb7fff8000", + "0x482680017ffc8000", + "0x1", + "0x480a7ffd7fff8000", + "0x480680017fff8000", + "0x1", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x208b7fff7fff7ffe", + "0x40780017fff7fff", + "0xd", + "0x480a7ffb7fff8000", + "0x480a7ffc7fff8000", + "0x480a7ffd7fff8000", + "0x480680017fff8000", + "0x1", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x208b7fff7fff7ffe", + "0xa0680017fff8000", + "0x7", + "0x482680017ff88000", + "0xfffffffffffffffffffffffffffff182", + "0x400280007ff77fff", + "0x10780017fff7fff", + "0x90", + "0x4825800180007ff8", + "0xe7e", + "0x400280007ff77fff", + "0x20780017fff7ffd", + "0xf", + "0x482680017ff78000", + "0x1", + "0x482480017ffe8000", + "0x1202", + "0x480680017fff8000", + "0x0", + "0x480a7ff97fff8000", + "0x480a7ffa7fff8000", + "0x480680017fff8000", + "0x0", + "0x480a7ffb7fff8000", + "0x480a7ffc7fff8000", + "0x208b7fff7fff7ffe", + "0x48297ff980007ffa", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0x66", + "0x480280007ff98000", + "0x20680017fff7fff", + "0x3d", + "0x482680017ff98000", + "0x1", + "0x480a7ffa7fff8000", + "0x48307ffe80007fff", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0x2d", + "0x480080007ffd8000", + "0xa0680017fff8000", + "0x12", + "0x4824800180007ffe", + "0x10000", + "0x4844800180008002", + "0x8000000000000110000000000000000", + "0x4830800080017ffe", + "0x480280017ff77fff", + "0x482480017ffe8000", + "0xefffffffffffffde000000000000ffff", + "0x480280027ff77fff", + "0x400280037ff77ffb", + "0x402480017fff7ffb", + "0xffffffffffffffffffffffffffffffff", + "0x20680017fff7fff", + "0x13", + "0x402780017fff7fff", + "0x1", + "0x400280017ff77ffe", + "0x482480017ffe8000", + "0xffffffffffffffffffffffffffff0000", + "0x400280027ff77fff", + "0x482680017ff78000", + "0x3", + "0x48127ff67fff8000", + "0x480680017fff8000", + "0x0", + "0x48127ffa7fff8000", + "0x482480017ff68000", + "0x1", + "0x48127ff67fff8000", + "0x10780017fff7fff", + "0x22", + "0x482680017ff78000", + "0x4", + "0x482480017ff18000", + "0x7d0", + "0x482480017ff38000", + "0x1", + "0x48127ff37fff8000", + "0x10780017fff7fff", + "0x36", + "0x482680017ff78000", + "0x1", + "0x482480017ff98000", + "0xc8a", + "0x48127ffb7fff8000", + "0x48127ffb7fff8000", + "0x10780017fff7fff", + "0x2e", + "0x4824800180007fff", + "0x1", + "0x20680017fff7fff", + "0x1b", + "0x482680017ff78000", + "0x1", + "0x482480017ffb8000", + "0x3ac", + "0x480680017fff8000", + "0x1", + "0x480680017fff8000", + "0x0", + "0x482680017ff98000", + "0x1", + "0x480a7ffa7fff8000", + "0x400280007ffc7ffc", + "0x400280017ffc7ffd", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x48127ffc7fff8000", + "0x48127ffc7fff8000", + "0x480a7ffb7fff8000", + "0x482680017ffc8000", + "0x2", + "0x4825800180007ffd", + "0x1", + "0x1104800180018000", + "0x800000000000010ffffffffffffffffffffffffffffffffffffffffffffff8b", + "0x208b7fff7fff7ffe", + "0x482680017ff78000", + "0x1", + "0x482480017ffb8000", + "0xdb6", + "0x482680017ff98000", + "0x1", + "0x480a7ffa7fff8000", + "0x10780017fff7fff", + "0x8", + "0x482680017ff78000", + "0x1", + "0x482480017ffd8000", + "0xf46", + "0x480a7ff97fff8000", + "0x480a7ffa7fff8000", + "0x48127ffc7fff8000", + "0x48127ffc7fff8000", + "0x480680017fff8000", + "0x0", + "0x48127ffb7fff8000", + "0x48127ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x208b7fff7fff7ffe", + "0x1104800180018000", + "0x800000000000010fffffffffffffffffffffffffffffffffffffffffffffc25", + "0x482680017ff78000", + "0x1", + "0x480a7ff87fff8000", + "0x480680017fff8000", + "0x1", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x48127ff87fff8000", + "0x48127ff87fff8000", + "0x208b7fff7fff7ffe", + "0xa0680017fff8000", + "0x7", + "0x482680017ff98000", + "0xfffffffffffffffffffffffffffff6be", + "0x400280007ff87fff", + "0x10780017fff7fff", + "0x34", + "0x4825800180007ff9", + "0x942", + "0x400280007ff87fff", + "0x48297ffa80007ffb", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0x23", + "0x480280007ffa8000", + "0x480280017ffa8000", + "0x20680017fff7ffe", + "0xc", + "0x480680017fff8000", + "0x0", + "0x400280007ffd7fff", + "0x400280017ffd7ffe", + "0x48127ffb7fff8000", + "0x480a7ffc7fff8000", + "0x482680017ffd8000", + "0x2", + "0x10780017fff7fff", + "0xa", + "0x480680017fff8000", + "0x1", + "0x400280007ffd7fff", + "0x482480017ffb8000", + "0xc8", + "0x480a7ffc7fff8000", + "0x482680017ffd8000", + "0x1", + "0x482680017ff88000", + "0x1", + "0x48127ffc7fff8000", + "0x482680017ffa8000", + "0x2", + "0x480a7ffb7fff8000", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x1104800180018000", + "0x800000000000010ffffffffffffffffffffffffffffffffffffffffffffffd4", + "0x208b7fff7fff7ffe", + "0x482680017ff88000", + "0x1", + "0x482480017ffd8000", + "0xbfe", + "0x480680017fff8000", + "0x0", + "0x480a7ffc7fff8000", + "0x480a7ffd7fff8000", + "0x208b7fff7fff7ffe", + "0x1104800180018000", + "0x800000000000010fffffffffffffffffffffffffffffffffffffffffffffbdc", + "0x482680017ff88000", + "0x1", + "0x480a7ff97fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffb7fff8000", + "0x48127ffb7fff8000", + "0x208b7fff7fff7ffe", + "0x48297ffc80007ffd", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0x90", + "0x480280007ffc8000", + "0x20680017fff7fff", + "0x6d", + "0x482680017ffc8000", + "0x1", + "0x480a7ffd7fff8000", + "0x48307ffe80007fff", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0x5e", + "0x480080007ffd8000", + "0xa0680017fff8000", + "0x12", + "0x4824800180007ffe", + "0x10000000000000000", + "0x4844800180008002", + "0x8000000000000110000000000000000", + "0x4830800080017ffe", + "0x480280007ffb7fff", + "0x482480017ffe8000", + "0xefffffffffffffdeffffffffffffffff", + "0x480280017ffb7fff", + "0x400280027ffb7ffb", + "0x402480017fff7ffb", + "0xffffffffffffffffffffffffffffffff", + "0x20680017fff7fff", + "0x44", + "0x402780017fff7fff", + "0x1", + "0x400280007ffb7ffe", + "0x482480017ffe8000", + "0xffffffffffffffff0000000000000000", + "0x400280017ffb7fff", + "0x482480017ffa8000", + "0x1", + "0x48127ffa7fff8000", + "0x48307ffe80007fff", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0x2e", + "0x480080007ffd8000", + "0xa0680017fff8000", + "0x12", + "0x4824800180007ffe", + "0x100000000", + "0x4844800180008002", + "0x8000000000000110000000000000000", + "0x4830800080017ffe", + "0x480280027ffb7fff", + "0x482480017ffe8000", + "0xefffffffffffffde00000000ffffffff", + "0x480280037ffb7fff", + "0x400280047ffb7ffb", + "0x402480017fff7ffb", + "0xffffffffffffffffffffffffffffffff", + "0x20680017fff7fff", + "0x16", + "0x402780017fff7fff", + "0x1", + "0x400280027ffb7ffe", + "0x482480017ffe8000", + "0xffffffffffffffffffffffff00000000", + "0x400280037ffb7fff", + "0x40780017fff7fff", + "0x5", + "0x482680017ffb8000", + "0x4", + "0x482480017ff48000", + "0x1", + "0x48127ff47fff8000", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x48127fed7fff8000", + "0x48127ff27fff8000", + "0x208b7fff7fff7ffe", + "0x482680017ffb8000", + "0x5", + "0x482480017ff48000", + "0x1", + "0x48127ff47fff8000", + "0x10780017fff7fff", + "0x3f", + "0x40780017fff7fff", + "0x8", + "0x482680017ffb8000", + "0x2", + "0x48127ff47fff8000", + "0x48127ff47fff8000", + "0x10780017fff7fff", + "0x37", + "0x40780017fff7fff", + "0x6", + "0x482680017ffb8000", + "0x3", + "0x482480017fee8000", + "0x1", + "0x48127fee7fff8000", + "0x10780017fff7fff", + "0x2e", + "0x40780017fff7fff", + "0xe", + "0x480a7ffb7fff8000", + "0x48127fee7fff8000", + "0x48127fee7fff8000", + "0x10780017fff7fff", + "0x27", + "0x40780017fff7fff", + "0x10", + "0x4824800180007fef", + "0x1", + "0x20680017fff7fff", + "0xf", + "0x480a7ffb7fff8000", + "0x482680017ffc8000", + "0x1", + "0x480a7ffd7fff8000", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x1", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x208b7fff7fff7ffe", + "0x480a7ffb7fff8000", + "0x482680017ffc8000", + "0x1", + "0x480a7ffd7fff8000", + "0x480680017fff8000", + "0x1", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x208b7fff7fff7ffe", + "0x40780017fff7fff", + "0x12", + "0x480a7ffb7fff8000", + "0x480a7ffc7fff8000", + "0x480a7ffd7fff8000", + "0x480680017fff8000", + "0x1", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x208b7fff7fff7ffe", + "0x48297ffc80007ffd", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0xac", + "0x480280007ffc8000", + "0x20680017fff7fff", + "0x45", + "0x482680017ffc8000", + "0x1", + "0x480a7ffd7fff8000", + "0x48307ffe80007fff", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0x36", + "0x40780017fff7fff", + "0x1", + "0x480a7ffa7fff8000", + "0x480a7ffb7fff8000", + "0x482480017ffa8000", + "0x1", + "0x48127ffa7fff8000", + "0x48127ffb7fff8000", + "0x48127ffa7fff8000", + "0x480080007ff68000", + "0x1104800180018000", + "0x6eb", + "0x20680017fff7ffa", + "0x19", + "0x20680017fff7ffd", + "0x10", + "0x48127ff87fff8000", + "0x482480017ff88000", + "0x2bc", + "0x480680017fff8000", + "0x0", + "0x48127ff87fff8000", + "0x48127ff87fff8000", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x48127ff77fff8000", + "0x48127ff77fff8000", + "0x208b7fff7fff7ffe", + "0x48127ff87fff8000", + "0x482480017ff88000", + "0xc8", + "0x48127ff97fff8000", + "0x48127ff97fff8000", + "0x10780017fff7fff", + "0x5c", + "0x48127ff87fff8000", + "0x48127ff87fff8000", + "0x480680017fff8000", + "0x1", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x48127ff77fff8000", + "0x48127ff77fff8000", + "0x208b7fff7fff7ffe", + "0x480a7ffa7fff8000", + "0x482680017ffb8000", + "0xd8e", + "0x48127ffb7fff8000", + "0x48127ffb7fff8000", + "0x10780017fff7fff", + "0x46", + "0x4824800180007fff", + "0x1", + "0x20680017fff7fff", + "0x51", + "0x482680017ffc8000", + "0x1", + "0x480a7ffd7fff8000", + "0x48307ffe80007fff", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0x35", + "0x40780017fff7fff", + "0x1", + "0x480a7ffa7fff8000", + "0x480a7ffb7fff8000", + "0x482480017ffa8000", + "0x1", + "0x48127ffa7fff8000", + "0x48127ffb7fff8000", + "0x48127ffa7fff8000", + "0x480080007ff68000", + "0x1104800180018000", + "0x79f", + "0x20680017fff7ffa", + "0x18", + "0x20680017fff7ffd", + "0x10", + "0x48127ff87fff8000", + "0x482480017ff88000", + "0x1f4", + "0x480680017fff8000", + "0x0", + "0x48127ff87fff8000", + "0x48127ff87fff8000", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x1", + "0x48127ff77fff8000", + "0x48127ff77fff8000", + "0x208b7fff7fff7ffe", + "0x48127ff87fff8000", + "0x48127ff87fff8000", + "0x48127ff97fff8000", + "0x48127ff97fff8000", + "0x10780017fff7fff", + "0x16", + "0x48127ff87fff8000", + "0x48127ff87fff8000", + "0x480680017fff8000", + "0x1", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x48127ff77fff8000", + "0x48127ff77fff8000", + "0x208b7fff7fff7ffe", + "0x480a7ffa7fff8000", + "0x482680017ffb8000", + "0xd2a", + "0x48127ffb7fff8000", + "0x48127ffb7fff8000", + "0x48127ffc7fff8000", + "0x48127ffc7fff8000", + "0x480680017fff8000", + "0x0", + "0x48127ffb7fff8000", + "0x48127ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x208b7fff7fff7ffe", + "0x480a7ffa7fff8000", + "0x482680017ffb8000", + "0x10ae", + "0x480680017fff8000", + "0x0", + "0x482680017ffc8000", + "0x1", + "0x480a7ffd7fff8000", + "0x480680017fff8000", + "0x1", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x208b7fff7fff7ffe", + "0x480a7ffa7fff8000", + "0x482680017ffb8000", + "0x11da", + "0x480680017fff8000", + "0x0", + "0x480a7ffc7fff8000", + "0x480a7ffd7fff8000", + "0x480680017fff8000", + "0x1", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x208b7fff7fff7ffe", + "0xa0680017fff8000", + "0x7", + "0x482680017ff98000", + "0xfffffffffffffffffffffffffffff9de", + "0x400280007ff87fff", + "0x10780017fff7fff", + "0x21", + "0x4825800180007ff9", + "0x622", + "0x400280007ff87fff", + "0x48297ffa80007ffb", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0x10", + "0x480280007ffa8000", + "0x400280007ffd7fff", + "0x482680017ff88000", + "0x1", + "0x48127ffc7fff8000", + "0x482680017ffa8000", + "0x1", + "0x480a7ffb7fff8000", + "0x480a7ffc7fff8000", + "0x482680017ffd8000", + "0x1", + "0x1104800180018000", + "0x800000000000010ffffffffffffffffffffffffffffffffffffffffffffffe7", + "0x208b7fff7fff7ffe", + "0x482680017ff88000", + "0x1", + "0x482480017ffd8000", + "0x8de", + "0x480680017fff8000", + "0x0", + "0x480a7ffc7fff8000", + "0x480a7ffd7fff8000", + "0x208b7fff7fff7ffe", + "0x1104800180018000", + "0x800000000000010fffffffffffffffffffffffffffffffffffffffffffffa4c", + "0x482680017ff88000", + "0x1", + "0x480a7ff97fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffb7fff8000", + "0x48127ffb7fff8000", + "0x208b7fff7fff7ffe", + "0x48297ffc80007ffd", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0xa8", + "0x482680017ffc8000", + "0x1", + "0x480a7ffd7fff8000", + "0x480280007ffc8000", + "0x20680017fff7fff", + "0x22", + "0x480a7ffb7fff8000", + "0x48127ffc7fff8000", + "0x48127ffc7fff8000", + "0x1104800180018000", + "0x800000000000010fffffffffffffffffffffffffffffffffffffffffffffaf6", + "0x20680017fff7ffc", + "0xd", + "0x48127ff97fff8000", + "0x48127ff97fff8000", + "0x48127ff97fff8000", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x48127ff87fff8000", + "0x48127ff87fff8000", + "0x48127ff87fff8000", + "0x208b7fff7fff7ffe", + "0x48127ff97fff8000", + "0x48127ff97fff8000", + "0x48127ff97fff8000", + "0x480680017fff8000", + "0x1", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x208b7fff7fff7ffe", + "0x40780017fff7fff", + "0x11", + "0x4824800180007fee", + "0x1", + "0x20680017fff7fff", + "0x6c", + "0x48307feb80007fec", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0x60", + "0x480080007fea8000", + "0xa0680017fff8000", + "0x12", + "0x4824800180007ffe", + "0x10000", + "0x4844800180008002", + "0x8000000000000110000000000000000", + "0x4830800080017ffe", + "0x480280007ffb7fff", + "0x482480017ffe8000", + "0xefffffffffffffde000000000000ffff", + "0x480280017ffb7fff", + "0x400280027ffb7ffb", + "0x402480017fff7ffb", + "0xffffffffffffffffffffffffffffffff", + "0x20680017fff7fff", + "0x46", + "0x402780017fff7fff", + "0x1", + "0x400280007ffb7ffe", + "0x482480017ffe8000", + "0xffffffffffffffffffffffffffff0000", + "0x400280017ffb7fff", + "0x482480017fe78000", + "0x1", + "0x48127fe77fff8000", + "0x48307ffe80007fff", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0x30", + "0x480080007ffd8000", + "0xa0680017fff8000", + "0x12", + "0x4824800180007ffe", + "0x10000", + "0x4844800180008002", + "0x8000000000000110000000000000000", + "0x4830800080017ffe", + "0x480280027ffb7fff", + "0x482480017ffe8000", + "0xefffffffffffffde000000000000ffff", + "0x480280037ffb7fff", + "0x400280047ffb7ffb", + "0x402480017fff7ffb", + "0xffffffffffffffffffffffffffffffff", + "0x20680017fff7fff", + "0x18", + "0x402780017fff7fff", + "0x1", + "0x400280027ffb7ffe", + "0x482480017ffe8000", + "0xffffffffffffffffffffffffffff0000", + "0x400280037ffb7fff", + "0x40780017fff7fff", + "0x5", + "0x482680017ffb8000", + "0x4", + "0x482480017ff48000", + "0x1", + "0x48127ff47fff8000", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x1", + "0x480680017fff8000", + "0x0", + "0x48127fec7fff8000", + "0x48127ff17fff8000", + "0x208b7fff7fff7ffe", + "0x482680017ffb8000", + "0x5", + "0x482480017ff48000", + "0x1", + "0x48127ff47fff8000", + "0x10780017fff7fff", + "0x2f", + "0x40780017fff7fff", + "0x8", + "0x482680017ffb8000", + "0x2", + "0x48127ff47fff8000", + "0x48127ff47fff8000", + "0x10780017fff7fff", + "0x27", + "0x40780017fff7fff", + "0x6", + "0x482680017ffb8000", + "0x3", + "0x482480017fdb8000", + "0x1", + "0x48127fdb7fff8000", + "0x10780017fff7fff", + "0x1e", + "0x40780017fff7fff", + "0xe", + "0x480a7ffb7fff8000", + "0x48127fdb7fff8000", + "0x48127fdb7fff8000", + "0x10780017fff7fff", + "0x17", + "0x40780017fff7fff", + "0xf", + "0x480a7ffb7fff8000", + "0x48127fdb7fff8000", + "0x48127fdb7fff8000", + "0x480680017fff8000", + "0x1", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x208b7fff7fff7ffe", + "0x40780017fff7fff", + "0x24", + "0x480a7ffb7fff8000", + "0x480a7ffc7fff8000", + "0x480a7ffd7fff8000", + "0x480680017fff8000", + "0x1", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x208b7fff7fff7ffe", + "0x48297ffc80007ffd", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0x8e", + "0x480280007ffc8000", + "0x20680017fff7fff", + "0x34", + "0x480a7ffa7fff8000", + "0x480a7ffb7fff8000", + "0x482680017ffc8000", + "0x1", + "0x480a7ffd7fff8000", + "0x1104800180018000", + "0x5be", + "0x20680017fff7ff9", + "0x1a", + "0x20680017fff7ffc", + "0x11", + "0x48127ff77fff8000", + "0x482480017ff78000", + "0x258", + "0x480680017fff8000", + "0x0", + "0x48127ff77fff8000", + "0x48127ff77fff8000", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x48127ff67fff8000", + "0x48127ff67fff8000", + "0x48127ff67fff8000", + "0x208b7fff7fff7ffe", + "0x48127ff77fff8000", + "0x482480017ff78000", + "0x64", + "0x48127ff87fff8000", + "0x48127ff87fff8000", + "0x10780017fff7fff", + "0x35", + "0x48127ff77fff8000", + "0x48127ff77fff8000", + "0x480680017fff8000", + "0x1", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x48127ff67fff8000", + "0x48127ff67fff8000", + "0x208b7fff7fff7ffe", + "0x4824800180007fff", + "0x1", + "0x20680017fff7fff", + "0x42", + "0x480a7ffa7fff8000", + "0x480a7ffb7fff8000", + "0x482680017ffc8000", + "0x1", + "0x480a7ffd7fff8000", + "0x1104800180018000", + "0x683", + "0x20680017fff7ff9", + "0x28", + "0x20680017fff7ffc", + "0x11", + "0x48127ff77fff8000", + "0x482480017ff78000", + "0x190", + "0x480680017fff8000", + "0x0", + "0x48127ff77fff8000", + "0x48127ff77fff8000", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x1", + "0x48127ff67fff8000", + "0x48127ff67fff8000", + "0x48127ff67fff8000", + "0x208b7fff7fff7ffe", + "0x48127ff77fff8000", + "0x48127ff77fff8000", + "0x48127ff87fff8000", + "0x48127ff87fff8000", + "0x48127ffc7fff8000", + "0x48127ffc7fff8000", + "0x480680017fff8000", + "0x0", + "0x48127ffb7fff8000", + "0x48127ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x208b7fff7fff7ffe", + "0x48127ff77fff8000", + "0x48127ff77fff8000", + "0x480680017fff8000", + "0x1", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x48127ff67fff8000", + "0x48127ff67fff8000", + "0x208b7fff7fff7ffe", + "0x480a7ffa7fff8000", + "0x482680017ffb8000", + "0x1c8e", + "0x480680017fff8000", + "0x0", + "0x482680017ffc8000", + "0x1", + "0x480a7ffd7fff8000", + "0x480680017fff8000", + "0x1", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x208b7fff7fff7ffe", + "0x480a7ffa7fff8000", + "0x482680017ffb8000", + "0x1dba", + "0x480680017fff8000", + "0x0", + "0x480a7ffc7fff8000", + "0x480a7ffd7fff8000", + "0x480680017fff8000", + "0x1", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x208b7fff7fff7ffe", + "0x48297ffc80007ffd", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0x72", + "0x482680017ffc8000", + "0x1", + "0x480a7ffd7fff8000", + "0x480280007ffc8000", + "0x20680017fff7fff", + "0x1f", + "0x480a7ffb7fff8000", + "0x48127ffc7fff8000", + "0x48127ffc7fff8000", + "0x1104800180018000", + "0x800000000000010fffffffffffffffffffffffffffffffffffffffffffffb82", + "0x20680017fff7ffd", + "0xc", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x48127ff97fff8000", + "0x48127ff97fff8000", + "0x208b7fff7fff7ffe", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x480680017fff8000", + "0x1", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x208b7fff7fff7ffe", + "0x40780017fff7fff", + "0xf", + "0x4824800180007ff0", + "0x1", + "0x20680017fff7fff", + "0x3b", + "0x48307fed80007fee", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0x2f", + "0x480080007fec8000", + "0xa0680017fff8000", + "0x12", + "0x4824800180007ffe", + "0x100000000", + "0x4844800180008002", + "0x8000000000000110000000000000000", + "0x4830800080017ffe", + "0x480280007ffb7fff", + "0x482480017ffe8000", + "0xefffffffffffffde00000000ffffffff", + "0x480280017ffb7fff", + "0x400280027ffb7ffb", + "0x402480017fff7ffb", + "0xffffffffffffffffffffffffffffffff", + "0x20680017fff7fff", + "0x17", + "0x402780017fff7fff", + "0x1", + "0x400280007ffb7ffe", + "0x482480017ffe8000", + "0xffffffffffffffffffffffff00000000", + "0x400280017ffb7fff", + "0x40780017fff7fff", + "0x5", + "0x482680017ffb8000", + "0x2", + "0x482480017fe38000", + "0x1", + "0x48127fe37fff8000", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x1", + "0x480680017fff8000", + "0x0", + "0x48127ff27fff8000", + "0x208b7fff7fff7ffe", + "0x482680017ffb8000", + "0x3", + "0x482480017fe38000", + "0x1", + "0x48127fe37fff8000", + "0x10780017fff7fff", + "0x1c", + "0x40780017fff7fff", + "0x8", + "0x480a7ffb7fff8000", + "0x48127fe37fff8000", + "0x48127fe37fff8000", + "0x10780017fff7fff", + "0x15", + "0x40780017fff7fff", + "0x9", + "0x480a7ffb7fff8000", + "0x48127fe37fff8000", + "0x48127fe37fff8000", + "0x480680017fff8000", + "0x1", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x208b7fff7fff7ffe", + "0x40780017fff7fff", + "0x1c", + "0x480a7ffb7fff8000", + "0x480a7ffc7fff8000", + "0x480a7ffd7fff8000", + "0x480680017fff8000", + "0x1", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x208b7fff7fff7ffe", + "0x48297ffc80007ffd", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0xbd", + "0x480280007ffc8000", + "0x20680017fff7fff", + "0x40", + "0x40780017fff7fff", + "0x5", + "0x482680017ffc8000", + "0x1", + "0x480a7ffd7fff8000", + "0x48307ffe80007fff", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0x2f", + "0x480080007ffd8000", + "0xa0680017fff8000", + "0x12", + "0x4824800180007ffe", + "0x100", + "0x4844800180008002", + "0x8000000000000110000000000000000", + "0x4830800080017ffe", + "0x480280007ffb7fff", + "0x482480017ffe8000", + "0xefffffffffffffde00000000000000ff", + "0x480280017ffb7fff", + "0x400280027ffb7ffb", + "0x402480017fff7ffb", + "0xffffffffffffffffffffffffffffffff", + "0x20680017fff7fff", + "0x17", + "0x402780017fff7fff", + "0x1", + "0x400280007ffb7ffe", + "0x482480017ffe8000", + "0xffffffffffffffffffffffffffffff00", + "0x400280017ffb7fff", + "0x40780017fff7fff", + "0x5", + "0x482680017ffb8000", + "0x2", + "0x482480017ff48000", + "0x1", + "0x48127ff47fff8000", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x48127ff27fff8000", + "0x208b7fff7fff7ffe", + "0x482680017ffb8000", + "0x3", + "0x482480017ff48000", + "0x1", + "0x48127ff47fff8000", + "0x10780017fff7fff", + "0x88", + "0x40780017fff7fff", + "0x8", + "0x480a7ffb7fff8000", + "0x48127ff47fff8000", + "0x48127ff47fff8000", + "0x10780017fff7fff", + "0x81", + "0x4824800180007fff", + "0x1", + "0x20680017fff7fff", + "0x69", + "0x482680017ffc8000", + "0x1", + "0x480a7ffd7fff8000", + "0x48307ffe80007fff", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0x5a", + "0x480080007ffd8000", + "0x20680017fff7fff", + "0x3e", + "0x482480017ffc8000", + "0x1", + "0x48127ffc7fff8000", + "0x48307ffe80007fff", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0x2f", + "0x480080007ffd8000", + "0xa0680017fff8000", + "0x12", + "0x4824800180007ffe", + "0x100000000", + "0x4844800180008002", + "0x8000000000000110000000000000000", + "0x4830800080017ffe", + "0x480280007ffb7fff", + "0x482480017ffe8000", + "0xefffffffffffffde00000000ffffffff", + "0x480280017ffb7fff", + "0x400280027ffb7ffb", + "0x402480017fff7ffb", + "0xffffffffffffffffffffffffffffffff", + "0x20680017fff7fff", + "0x17", + "0x402780017fff7fff", + "0x1", + "0x400280007ffb7ffe", + "0x482480017ffe8000", + "0xffffffffffffffffffffffff00000000", + "0x400280017ffb7fff", + "0x40780017fff7fff", + "0x5", + "0x482680017ffb8000", + "0x2", + "0x482480017ff48000", + "0x1", + "0x48127ff47fff8000", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x1", + "0x480680017fff8000", + "0x0", + "0x48127ff27fff8000", + "0x208b7fff7fff7ffe", + "0x482680017ffb8000", + "0x3", + "0x482480017ff48000", + "0x1", + "0x48127ff47fff8000", + "0x10780017fff7fff", + "0x27", + "0x40780017fff7fff", + "0x8", + "0x480a7ffb7fff8000", + "0x48127ff47fff8000", + "0x48127ff47fff8000", + "0x10780017fff7fff", + "0x20", + "0x40780017fff7fff", + "0xa", + "0x4824800180007ff5", + "0x1", + "0x20680017fff7fff", + "0xf", + "0x480a7ffb7fff8000", + "0x482480017ff08000", + "0x1", + "0x48127ff07fff8000", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x1", + "0x480680017fff8000", + "0x1", + "0x480680017fff8000", + "0x0", + "0x208b7fff7fff7ffe", + "0x480a7ffb7fff8000", + "0x482480017ff08000", + "0x1", + "0x48127ff07fff8000", + "0x10780017fff7fff", + "0x1d", + "0x40780017fff7fff", + "0xc", + "0x480a7ffb7fff8000", + "0x48127ff07fff8000", + "0x48127ff07fff8000", + "0x10780017fff7fff", + "0x16", + "0x40780017fff7fff", + "0xf", + "0x480a7ffb7fff8000", + "0x482680017ffc8000", + "0x1", + "0x480a7ffd7fff8000", + "0x480680017fff8000", + "0x1", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x208b7fff7fff7ffe", + "0x40780017fff7fff", + "0x11", + "0x480a7ffb7fff8000", + "0x480a7ffc7fff8000", + "0x480a7ffd7fff8000", + "0x480680017fff8000", + "0x1", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x208b7fff7fff7ffe", + "0x48297ffc80007ffd", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0x8d", + "0x480280007ffc8000", + "0xa0680017fff8000", + "0x12", + "0x4824800180007ffe", + "0x10000000000000000", + "0x4844800180008002", + "0x8000000000000110000000000000000", + "0x4830800080017ffe", + "0x480280007ffb7fff", + "0x482480017ffe8000", + "0xefffffffffffffdeffffffffffffffff", + "0x480280017ffb7fff", + "0x400280027ffb7ffb", + "0x402480017fff7ffb", + "0xffffffffffffffffffffffffffffffff", + "0x20680017fff7fff", + "0x73", + "0x402780017fff7fff", + "0x1", + "0x400280007ffb7ffe", + "0x482480017ffe8000", + "0xffffffffffffffff0000000000000000", + "0x400280017ffb7fff", + "0x482680017ffc8000", + "0x1", + "0x480a7ffd7fff8000", + "0x48307ffe80007fff", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0x5d", + "0x480080007ffd8000", + "0xa0680017fff8000", + "0x12", + "0x4824800180007ffe", + "0x10000000000000000", + "0x4844800180008002", + "0x8000000000000110000000000000000", + "0x4830800080017ffe", + "0x480280027ffb7fff", + "0x482480017ffe8000", + "0xefffffffffffffdeffffffffffffffff", + "0x480280037ffb7fff", + "0x400280047ffb7ffb", + "0x402480017fff7ffb", + "0xffffffffffffffffffffffffffffffff", + "0x20680017fff7fff", + "0x43", + "0x402780017fff7fff", + "0x1", + "0x400280027ffb7ffe", + "0x482480017ffe8000", + "0xffffffffffffffff0000000000000000", + "0x400280037ffb7fff", + "0x482480017ffa8000", + "0x1", + "0x48127ffa7fff8000", + "0x48307ffe80007fff", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0x2d", + "0x480080007ffd8000", + "0xa0680017fff8000", + "0x12", + "0x4824800180007ffe", + "0x100000000", + "0x4844800180008002", + "0x8000000000000110000000000000000", + "0x4830800080017ffe", + "0x480280047ffb7fff", + "0x482480017ffe8000", + "0xefffffffffffffde00000000ffffffff", + "0x480280057ffb7fff", + "0x400280067ffb7ffb", + "0x402480017fff7ffb", + "0xffffffffffffffffffffffffffffffff", + "0x20680017fff7fff", + "0x15", + "0x402780017fff7fff", + "0x1", + "0x400280047ffb7ffe", + "0x482480017ffe8000", + "0xffffffffffffffffffffffff00000000", + "0x400280057ffb7fff", + "0x40780017fff7fff", + "0x5", + "0x482680017ffb8000", + "0x6", + "0x482480017ff48000", + "0x1", + "0x48127ff47fff8000", + "0x480680017fff8000", + "0x0", + "0x48127fe87fff8000", + "0x48127fed7fff8000", + "0x48127ff27fff8000", + "0x208b7fff7fff7ffe", + "0x482680017ffb8000", + "0x7", + "0x482480017ff48000", + "0x1", + "0x48127ff47fff8000", + "0x10780017fff7fff", + "0x29", + "0x40780017fff7fff", + "0x8", + "0x482680017ffb8000", + "0x4", + "0x48127ff47fff8000", + "0x48127ff47fff8000", + "0x10780017fff7fff", + "0x21", + "0x40780017fff7fff", + "0x6", + "0x482680017ffb8000", + "0x5", + "0x482480017fee8000", + "0x1", + "0x48127fee7fff8000", + "0x10780017fff7fff", + "0x18", + "0x40780017fff7fff", + "0xe", + "0x482680017ffb8000", + "0x2", + "0x48127fee7fff8000", + "0x48127fee7fff8000", + "0x10780017fff7fff", + "0x10", + "0x40780017fff7fff", + "0xc", + "0x482680017ffb8000", + "0x3", + "0x482680017ffc8000", + "0x1", + "0x480a7ffd7fff8000", + "0x10780017fff7fff", + "0x7", + "0x40780017fff7fff", + "0x14", + "0x480a7ffb7fff8000", + "0x480a7ffc7fff8000", + "0x480a7ffd7fff8000", + "0x480680017fff8000", + "0x1", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x208b7fff7fff7ffe", + "0x48297ffc80007ffd", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0x6b", + "0x480280007ffc8000", + "0xa0680017fff8000", + "0x12", + "0x4824800180007ffe", + "0x10000", + "0x4844800180008002", + "0x8000000000000110000000000000000", + "0x4830800080017ffe", + "0x480280007ffb7fff", + "0x482480017ffe8000", + "0xefffffffffffffde000000000000ffff", + "0x480280017ffb7fff", + "0x400280027ffb7ffb", + "0x402480017fff7ffb", + "0xffffffffffffffffffffffffffffffff", + "0x20680017fff7fff", + "0x51", + "0x402780017fff7fff", + "0x1", + "0x400280007ffb7ffe", + "0x482480017ffe8000", + "0xffffffffffffffffffffffffffff0000", + "0x400280017ffb7fff", + "0x482680017ffc8000", + "0x1", + "0x480a7ffd7fff8000", + "0x48307ffe80007fff", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0x3b", + "0x480080007ffd8000", + "0xa0680017fff8000", + "0x12", + "0x4824800180007ffe", + "0x100", + "0x4844800180008002", + "0x8000000000000110000000000000000", + "0x4830800080017ffe", + "0x480280027ffb7fff", + "0x482480017ffe8000", + "0xefffffffffffffde00000000000000ff", + "0x480280037ffb7fff", + "0x400280047ffb7ffb", + "0x402480017fff7ffb", + "0xffffffffffffffffffffffffffffffff", + "0x20680017fff7fff", + "0x21", + "0x402780017fff7fff", + "0x1", + "0x400280027ffb7ffe", + "0x482480017ffe8000", + "0xffffffffffffffffffffffffffffff00", + "0x400280037ffb7fff", + "0x482680017ffb8000", + "0x4", + "0x482480017ff98000", + "0x1", + "0x48127ff97fff8000", + "0x1104800180018000", + "0x47f", + "0x20680017fff7ffc", + "0xd", + "0x48127ff97fff8000", + "0x48127ff97fff8000", + "0x48127ff97fff8000", + "0x480680017fff8000", + "0x0", + "0x48127fd27fff8000", + "0x48127fd77fff8000", + "0x48127ff77fff8000", + "0x48127ff77fff8000", + "0x48127ff77fff8000", + "0x208b7fff7fff7ffe", + "0x48127ff97fff8000", + "0x48127ff97fff8000", + "0x48127ff97fff8000", + "0x10780017fff7fff", + "0x21", + "0x40780017fff7fff", + "0x1c", + "0x482680017ffb8000", + "0x5", + "0x482480017fd88000", + "0x1", + "0x48127fd87fff8000", + "0x10780017fff7fff", + "0x8", + "0x40780017fff7fff", + "0x24", + "0x482680017ffb8000", + "0x2", + "0x48127fd87fff8000", + "0x48127fd87fff8000", + "0x10780017fff7fff", + "0x10", + "0x40780017fff7fff", + "0x22", + "0x482680017ffb8000", + "0x3", + "0x482680017ffc8000", + "0x1", + "0x480a7ffd7fff8000", + "0x10780017fff7fff", + "0x7", + "0x40780017fff7fff", + "0x2a", + "0x480a7ffb7fff8000", + "0x480a7ffc7fff8000", + "0x480a7ffd7fff8000", + "0x480680017fff8000", + "0x1", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x208b7fff7fff7ffe", + "0x40780017fff7fff", + "0x1", + "0x48297ffc80007ffd", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0x72", + "0x400380007ffc8000", + "0xa0680017fff8000", + "0x12", + "0x4825800180008000", + "0x10000", + "0x4844800180008002", + "0x8000000000000110000000000000000", + "0x4830800080017ffe", + "0x480280007ffa7fff", + "0x482480017ffe8000", + "0xefffffffffffffde000000000000ffff", + "0x480280017ffa7fff", + "0x400280027ffa7ffb", + "0x402480017fff7ffb", + "0xffffffffffffffffffffffffffffffff", + "0x20680017fff7fff", + "0x58", + "0x402780017fff7fff", + "0x1", + "0x400380007ffa8000", + "0x4826800180008000", + "0xffffffffffffffffffffffffffff0000", + "0x400280017ffa7fff", + "0x482680017ffc8000", + "0x1", + "0x480a7ffd7fff8000", + "0x48307ffe80007fff", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0x35", + "0x40780017fff7fff", + "0x1", + "0x482680017ffa8000", + "0x2", + "0x480a7ffb7fff8000", + "0x482480017ffa8000", + "0x1", + "0x48127ffa7fff8000", + "0x48127ffb7fff8000", + "0x48127ffa7fff8000", + "0x480080007ff68000", + "0x1104800180018000", + "0x4ac", + "0x20680017fff7ffa", + "0x17", + "0x20680017fff7ffd", + "0xf", + "0x48127ff87fff8000", + "0x482480017ff88000", + "0x1f4", + "0x480680017fff8000", + "0x0", + "0x48127ff87fff8000", + "0x48127ff87fff8000", + "0x480680017fff8000", + "0x0", + "0x480a80007fff8000", + "0x48127ff77fff8000", + "0x48127ff77fff8000", + "0x208b7fff7fff7ffe", + "0x48127ff87fff8000", + "0x48127ff87fff8000", + "0x48127ff97fff8000", + "0x48127ff97fff8000", + "0x10780017fff7fff", + "0x17", + "0x48127ff87fff8000", + "0x48127ff87fff8000", + "0x480680017fff8000", + "0x1", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x48127ff77fff8000", + "0x48127ff77fff8000", + "0x208b7fff7fff7ffe", + "0x482680017ffa8000", + "0x2", + "0x482680017ffb8000", + "0xd2a", + "0x48127ffb7fff8000", + "0x48127ffb7fff8000", + "0x48127ffc7fff8000", + "0x48127ffc7fff8000", + "0x480680017fff8000", + "0x0", + "0x48127ffb7fff8000", + "0x48127ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x208b7fff7fff7ffe", + "0x482680017ffa8000", + "0x3", + "0x482680017ffb8000", + "0xc1c", + "0x482680017ffc8000", + "0x1", + "0x480a7ffd7fff8000", + "0x10780017fff7fff", + "0x7", + "0x480a7ffa7fff8000", + "0x482680017ffb8000", + "0x1130", + "0x480a7ffc7fff8000", + "0x480a7ffd7fff8000", + "0x48127ffc7fff8000", + "0x48127ffc7fff8000", + "0x480680017fff8000", + "0x0", + "0x48127ffb7fff8000", + "0x48127ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x208b7fff7fff7ffe", + "0x48297ffc80007ffd", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0x6b", + "0x480280007ffc8000", + "0xa0680017fff8000", + "0x12", + "0x4824800180007ffe", + "0x10000", + "0x4844800180008002", + "0x8000000000000110000000000000000", + "0x4830800080017ffe", + "0x480280007ffb7fff", + "0x482480017ffe8000", + "0xefffffffffffffde000000000000ffff", + "0x480280017ffb7fff", + "0x400280027ffb7ffb", + "0x402480017fff7ffb", + "0xffffffffffffffffffffffffffffffff", + "0x20680017fff7fff", + "0x51", + "0x402780017fff7fff", + "0x1", + "0x400280007ffb7ffe", + "0x482480017ffe8000", + "0xffffffffffffffffffffffffffff0000", + "0x400280017ffb7fff", + "0x482680017ffc8000", + "0x1", + "0x480a7ffd7fff8000", + "0x48307ffe80007fff", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0x3b", + "0x480080007ffd8000", + "0xa0680017fff8000", + "0x12", + "0x4824800180007ffe", + "0x10000", + "0x4844800180008002", + "0x8000000000000110000000000000000", + "0x4830800080017ffe", + "0x480280027ffb7fff", + "0x482480017ffe8000", + "0xefffffffffffffde000000000000ffff", + "0x480280037ffb7fff", + "0x400280047ffb7ffb", + "0x402480017fff7ffb", + "0xffffffffffffffffffffffffffffffff", + "0x20680017fff7fff", + "0x21", + "0x402780017fff7fff", + "0x1", + "0x400280027ffb7ffe", + "0x482480017ffe8000", + "0xffffffffffffffffffffffffffff0000", + "0x400280037ffb7fff", + "0x482680017ffb8000", + "0x4", + "0x482480017ff98000", + "0x1", + "0x48127ff97fff8000", + "0x1104800180018000", + "0x482", + "0x20680017fff7ffc", + "0xd", + "0x48127ff97fff8000", + "0x48127ff97fff8000", + "0x48127ff97fff8000", + "0x480680017fff8000", + "0x0", + "0x48127fd27fff8000", + "0x48127fd77fff8000", + "0x48127ff77fff8000", + "0x48127ff77fff8000", + "0x48127ff77fff8000", + "0x208b7fff7fff7ffe", + "0x48127ff97fff8000", + "0x48127ff97fff8000", + "0x48127ff97fff8000", + "0x10780017fff7fff", + "0x21", + "0x40780017fff7fff", + "0x1c", + "0x482680017ffb8000", + "0x5", + "0x482480017fd88000", + "0x1", + "0x48127fd87fff8000", + "0x10780017fff7fff", + "0x8", + "0x40780017fff7fff", + "0x24", + "0x482680017ffb8000", + "0x2", + "0x48127fd87fff8000", + "0x48127fd87fff8000", + "0x10780017fff7fff", + "0x10", + "0x40780017fff7fff", + "0x22", + "0x482680017ffb8000", + "0x3", + "0x482680017ffc8000", + "0x1", + "0x480a7ffd7fff8000", + "0x10780017fff7fff", + "0x7", + "0x40780017fff7fff", + "0x2a", + "0x480a7ffb7fff8000", + "0x480a7ffc7fff8000", + "0x480a7ffd7fff8000", + "0x480680017fff8000", + "0x1", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x208b7fff7fff7ffe", + "0x48297ffc80007ffd", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0x8b", + "0x480280007ffc8000", + "0xa0680017fff8000", + "0x12", + "0x4824800180007ffe", + "0x100000000", + "0x4844800180008002", + "0x8000000000000110000000000000000", + "0x4830800080017ffe", + "0x480280007ffb7fff", + "0x482480017ffe8000", + "0xefffffffffffffde00000000ffffffff", + "0x480280017ffb7fff", + "0x400280027ffb7ffb", + "0x402480017fff7ffb", + "0xffffffffffffffffffffffffffffffff", + "0x20680017fff7fff", + "0x71", + "0x402780017fff7fff", + "0x1", + "0x400280007ffb7ffe", + "0x482480017ffe8000", + "0xffffffffffffffffffffffff00000000", + "0x400280017ffb7fff", + "0x482680017ffc8000", + "0x1", + "0x480a7ffd7fff8000", + "0x48307ffe80007fff", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0x5b", + "0x480080007ffd8000", + "0x20680017fff7fff", + "0x3e", + "0x482480017ffc8000", + "0x1", + "0x48127ffc7fff8000", + "0x48307ffe80007fff", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0x2e", + "0x480080007ffd8000", + "0xa0680017fff8000", + "0x12", + "0x4824800180007ffe", + "0x100", + "0x4844800180008002", + "0x8000000000000110000000000000000", + "0x4830800080017ffe", + "0x480280027ffb7fff", + "0x482480017ffe8000", + "0xefffffffffffffde00000000000000ff", + "0x480280037ffb7fff", + "0x400280047ffb7ffb", + "0x402480017fff7ffb", + "0xffffffffffffffffffffffffffffffff", + "0x20680017fff7fff", + "0x16", + "0x402780017fff7fff", + "0x1", + "0x400280027ffb7ffe", + "0x482480017ffe8000", + "0xffffffffffffffffffffffffffffff00", + "0x400280037ffb7fff", + "0x40780017fff7fff", + "0x5", + "0x482680017ffb8000", + "0x4", + "0x482480017ff48000", + "0x1", + "0x48127ff47fff8000", + "0x480680017fff8000", + "0x0", + "0x48127fea7fff8000", + "0x480680017fff8000", + "0x0", + "0x48127ff27fff8000", + "0x208b7fff7fff7ffe", + "0x482680017ffb8000", + "0x5", + "0x482480017ff48000", + "0x1", + "0x48127ff47fff8000", + "0x10780017fff7fff", + "0x2a", + "0x40780017fff7fff", + "0x8", + "0x482680017ffb8000", + "0x2", + "0x48127ff47fff8000", + "0x48127ff47fff8000", + "0x10780017fff7fff", + "0x22", + "0x40780017fff7fff", + "0xa", + "0x4824800180007ff5", + "0x1", + "0x20680017fff7fff", + "0xf", + "0x482680017ffb8000", + "0x2", + "0x482480017ff08000", + "0x1", + "0x48127ff07fff8000", + "0x480680017fff8000", + "0x0", + "0x48127fea7fff8000", + "0x480680017fff8000", + "0x1", + "0x480680017fff8000", + "0x0", + "0x208b7fff7fff7ffe", + "0x482680017ffb8000", + "0x2", + "0x482480017ff08000", + "0x1", + "0x48127ff07fff8000", + "0x10780017fff7fff", + "0x18", + "0x40780017fff7fff", + "0xc", + "0x482680017ffb8000", + "0x2", + "0x48127ff07fff8000", + "0x48127ff07fff8000", + "0x10780017fff7fff", + "0x10", + "0x40780017fff7fff", + "0xa", + "0x482680017ffb8000", + "0x3", + "0x482680017ffc8000", + "0x1", + "0x480a7ffd7fff8000", + "0x10780017fff7fff", + "0x7", + "0x40780017fff7fff", + "0x12", + "0x480a7ffb7fff8000", + "0x480a7ffc7fff8000", + "0x480a7ffd7fff8000", + "0x480680017fff8000", + "0x1", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x208b7fff7fff7ffe", + "0x48297ffc80007ffd", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0x8c", + "0x480280007ffc8000", + "0x20680017fff7fff", + "0x3e", + "0x40780017fff7fff", + "0x1", + "0x482680017ffc8000", + "0x1", + "0x480a7ffd7fff8000", + "0x48307ffe80007fff", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0x2d", + "0x480080007ffd8000", + "0xa0680017fff8000", + "0x12", + "0x4824800180007ffe", + "0x100", + "0x4844800180008002", + "0x8000000000000110000000000000000", + "0x4830800080017ffe", + "0x480280007ffb7fff", + "0x482480017ffe8000", + "0xefffffffffffffde00000000000000ff", + "0x480280017ffb7fff", + "0x400280027ffb7ffb", + "0x402480017fff7ffb", + "0xffffffffffffffffffffffffffffffff", + "0x20680017fff7fff", + "0x15", + "0x402780017fff7fff", + "0x1", + "0x400280007ffb7ffe", + "0x482480017ffe8000", + "0xffffffffffffffffffffffffffffff00", + "0x400280017ffb7fff", + "0x40780017fff7fff", + "0x5", + "0x482680017ffb8000", + "0x2", + "0x482480017ff48000", + "0x1", + "0x48127ff47fff8000", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x48127ff37fff8000", + "0x208b7fff7fff7ffe", + "0x482680017ffb8000", + "0x3", + "0x482480017ff48000", + "0x1", + "0x48127ff47fff8000", + "0x10780017fff7fff", + "0x59", + "0x40780017fff7fff", + "0x8", + "0x480a7ffb7fff8000", + "0x48127ff47fff8000", + "0x48127ff47fff8000", + "0x10780017fff7fff", + "0x52", + "0x4824800180007fff", + "0x1", + "0x20680017fff7fff", + "0x3c", + "0x482680017ffc8000", + "0x1", + "0x480a7ffd7fff8000", + "0x48307ffe80007fff", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0x2d", + "0x480080007ffd8000", + "0xa0680017fff8000", + "0x12", + "0x4824800180007ffe", + "0x10000000000000000", + "0x4844800180008002", + "0x8000000000000110000000000000000", + "0x4830800080017ffe", + "0x480280007ffb7fff", + "0x482480017ffe8000", + "0xefffffffffffffdeffffffffffffffff", + "0x480280017ffb7fff", + "0x400280027ffb7ffb", + "0x402480017fff7ffb", + "0xffffffffffffffffffffffffffffffff", + "0x20680017fff7fff", + "0x15", + "0x402780017fff7fff", + "0x1", + "0x400280007ffb7ffe", + "0x482480017ffe8000", + "0xffffffffffffffff0000000000000000", + "0x400280017ffb7fff", + "0x40780017fff7fff", + "0x5", + "0x482680017ffb8000", + "0x2", + "0x482480017ff48000", + "0x1", + "0x48127ff47fff8000", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x1", + "0x48127ff37fff8000", + "0x208b7fff7fff7ffe", + "0x482680017ffb8000", + "0x3", + "0x482480017ff48000", + "0x1", + "0x48127ff47fff8000", + "0x10780017fff7fff", + "0x1b", + "0x40780017fff7fff", + "0x8", + "0x480a7ffb7fff8000", + "0x48127ff47fff8000", + "0x48127ff47fff8000", + "0x10780017fff7fff", + "0x14", + "0x40780017fff7fff", + "0xb", + "0x480a7ffb7fff8000", + "0x482680017ffc8000", + "0x1", + "0x480a7ffd7fff8000", + "0x480680017fff8000", + "0x1", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x208b7fff7fff7ffe", + "0x40780017fff7fff", + "0xd", + "0x480a7ffb7fff8000", + "0x480a7ffc7fff8000", + "0x480a7ffd7fff8000", + "0x480680017fff8000", + "0x1", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x208b7fff7fff7ffe", + "0x40780017fff7fff", + "0x1", + "0x400180007fff7ffd", + "0x48127fff7fff8000", + "0x482480017ffe8000", + "0x1", + "0x208b7fff7fff7ffe", + "0xa0680017fff8000", + "0x7", + "0x482680017ff88000", + "0xfffffffffffffffffffffffffffff6fa", + "0x400280007ff77fff", + "0x10780017fff7fff", + "0x5b", + "0x4825800180007ff8", + "0x906", + "0x400280007ff77fff", + "0x20780017fff7ffd", + "0xf", + "0x482680017ff78000", + "0x1", + "0x482480017ffe8000", + "0xc8a", + "0x480680017fff8000", + "0x0", + "0x480a7ff97fff8000", + "0x480a7ffa7fff8000", + "0x480680017fff8000", + "0x0", + "0x480a7ffb7fff8000", + "0x480a7ffc7fff8000", + "0x208b7fff7fff7ffe", + "0x48297ff980007ffa", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0x31", + "0x480280007ff98000", + "0xa0680017fff8000", + "0x12", + "0x4824800180007ffe", + "0x100", + "0x4844800180008002", + "0x8000000000000110000000000000000", + "0x4830800080017ffe", + "0x480280017ff77fff", + "0x482480017ffe8000", + "0xefffffffffffffde00000000000000ff", + "0x480280027ff77fff", + "0x400280037ff77ffb", + "0x402480017fff7ffb", + "0xffffffffffffffffffffffffffffffff", + "0x20680017fff7fff", + "0x17", + "0x402780017fff7fff", + "0x1", + "0x400280017ff77ffe", + "0x482480017ffe8000", + "0xffffffffffffffffffffffffffffff00", + "0x400280027ff77fff", + "0x400280007ffc7ffd", + "0x482680017ff78000", + "0x3", + "0x48127ffa7fff8000", + "0x482680017ff98000", + "0x1", + "0x480a7ffa7fff8000", + "0x480a7ffb7fff8000", + "0x482680017ffc8000", + "0x1", + "0x4825800180007ffd", + "0x1", + "0x1104800180018000", + "0x800000000000010ffffffffffffffffffffffffffffffffffffffffffffffc0", + "0x208b7fff7fff7ffe", + "0x482680017ff78000", + "0x4", + "0x482480017ff58000", + "0x4b0", + "0x482680017ff98000", + "0x1", + "0x480a7ffa7fff8000", + "0x10780017fff7fff", + "0x8", + "0x482680017ff78000", + "0x1", + "0x482480017ffd8000", + "0x9ce", + "0x480a7ff97fff8000", + "0x480a7ffa7fff8000", + "0x48127ffc7fff8000", + "0x48127ffc7fff8000", + "0x480680017fff8000", + "0x0", + "0x48127ffb7fff8000", + "0x48127ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x208b7fff7fff7ffe", + "0x1104800180018000", + "0x800000000000010fffffffffffffffffffffffffffffffffffffffffffff3cc", + "0x482680017ff78000", + "0x1", + "0x480a7ff87fff8000", + "0x480680017fff8000", + "0x1", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x48127ff87fff8000", + "0x48127ff87fff8000", + "0x208b7fff7fff7ffe", + "0x40780017fff7fff", + "0x1", + "0x48297ffc80007ffd", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0x72", + "0x400380007ffc8000", + "0xa0680017fff8000", + "0x12", + "0x4825800180008000", + "0x100000000", + "0x4844800180008002", + "0x8000000000000110000000000000000", + "0x4830800080017ffe", + "0x480280007ffa7fff", + "0x482480017ffe8000", + "0xefffffffffffffde00000000ffffffff", + "0x480280017ffa7fff", + "0x400280027ffa7ffb", + "0x402480017fff7ffb", + "0xffffffffffffffffffffffffffffffff", + "0x20680017fff7fff", + "0x58", + "0x402780017fff7fff", + "0x1", + "0x400380007ffa8000", + "0x4826800180008000", + "0xffffffffffffffffffffffff00000000", + "0x400280017ffa7fff", + "0x482680017ffc8000", + "0x1", + "0x480a7ffd7fff8000", + "0x48307ffe80007fff", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0x35", + "0x40780017fff7fff", + "0x1", + "0x482680017ffa8000", + "0x2", + "0x480a7ffb7fff8000", + "0x482480017ffa8000", + "0x1", + "0x48127ffa7fff8000", + "0x48127ffb7fff8000", + "0x48127ffa7fff8000", + "0x480080007ff68000", + "0x1104800180018000", + "0x1f3", + "0x20680017fff7ffa", + "0x17", + "0x20680017fff7ffd", + "0xf", + "0x48127ff87fff8000", + "0x482480017ff88000", + "0x1f4", + "0x480680017fff8000", + "0x0", + "0x48127ff87fff8000", + "0x48127ff87fff8000", + "0x480680017fff8000", + "0x0", + "0x480a80007fff8000", + "0x48127ff77fff8000", + "0x48127ff77fff8000", + "0x208b7fff7fff7ffe", + "0x48127ff87fff8000", + "0x48127ff87fff8000", + "0x48127ff97fff8000", + "0x48127ff97fff8000", + "0x10780017fff7fff", + "0x17", + "0x48127ff87fff8000", + "0x48127ff87fff8000", + "0x480680017fff8000", + "0x1", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x48127ff77fff8000", + "0x48127ff77fff8000", + "0x208b7fff7fff7ffe", + "0x482680017ffa8000", + "0x2", + "0x482680017ffb8000", + "0xd2a", + "0x48127ffb7fff8000", + "0x48127ffb7fff8000", + "0x48127ffc7fff8000", + "0x48127ffc7fff8000", + "0x480680017fff8000", + "0x0", + "0x48127ffb7fff8000", + "0x48127ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x208b7fff7fff7ffe", + "0x482680017ffa8000", + "0x3", + "0x482680017ffb8000", + "0xc1c", + "0x482680017ffc8000", + "0x1", + "0x480a7ffd7fff8000", + "0x10780017fff7fff", + "0x7", + "0x480a7ffa7fff8000", + "0x482680017ffb8000", + "0x1130", + "0x480a7ffc7fff8000", + "0x480a7ffd7fff8000", + "0x48127ffc7fff8000", + "0x48127ffc7fff8000", + "0x480680017fff8000", + "0x0", + "0x48127ffb7fff8000", + "0x48127ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x208b7fff7fff7ffe", + "0xa0680017fff8000", + "0x7", + "0x482680017ff88000", + "0xfffffffffffffffffffffffffffff6fa", + "0x400280007ff77fff", + "0x10780017fff7fff", + "0x5b", + "0x4825800180007ff8", + "0x906", + "0x400280007ff77fff", + "0x20780017fff7ffd", + "0xf", + "0x482680017ff78000", + "0x1", + "0x482480017ffe8000", + "0xc8a", + "0x480680017fff8000", + "0x0", + "0x480a7ff97fff8000", + "0x480a7ffa7fff8000", + "0x480680017fff8000", + "0x0", + "0x480a7ffb7fff8000", + "0x480a7ffc7fff8000", + "0x208b7fff7fff7ffe", + "0x48297ff980007ffa", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0x31", + "0x480280007ff98000", + "0xa0680017fff8000", + "0x12", + "0x4824800180007ffe", + "0x10000", + "0x4844800180008002", + "0x8000000000000110000000000000000", + "0x4830800080017ffe", + "0x480280017ff77fff", + "0x482480017ffe8000", + "0xefffffffffffffde000000000000ffff", + "0x480280027ff77fff", + "0x400280037ff77ffb", + "0x402480017fff7ffb", + "0xffffffffffffffffffffffffffffffff", + "0x20680017fff7fff", + "0x17", + "0x402780017fff7fff", + "0x1", + "0x400280017ff77ffe", + "0x482480017ffe8000", + "0xffffffffffffffffffffffffffff0000", + "0x400280027ff77fff", + "0x400280007ffc7ffd", + "0x482680017ff78000", + "0x3", + "0x48127ffa7fff8000", + "0x482680017ff98000", + "0x1", + "0x480a7ffa7fff8000", + "0x480a7ffb7fff8000", + "0x482680017ffc8000", + "0x1", + "0x4825800180007ffd", + "0x1", + "0x1104800180018000", + "0x800000000000010ffffffffffffffffffffffffffffffffffffffffffffffc0", + "0x208b7fff7fff7ffe", + "0x482680017ff78000", + "0x4", + "0x482480017ff58000", + "0x4b0", + "0x482680017ff98000", + "0x1", + "0x480a7ffa7fff8000", + "0x10780017fff7fff", + "0x8", + "0x482680017ff78000", + "0x1", + "0x482480017ffd8000", + "0x9ce", + "0x480a7ff97fff8000", + "0x480a7ffa7fff8000", + "0x48127ffc7fff8000", + "0x48127ffc7fff8000", + "0x480680017fff8000", + "0x0", + "0x48127ffb7fff8000", + "0x48127ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x208b7fff7fff7ffe", + "0x1104800180018000", + "0x800000000000010fffffffffffffffffffffffffffffffffffffffffffff2d1", + "0x482680017ff78000", + "0x1", + "0x480a7ff87fff8000", + "0x480680017fff8000", + "0x1", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x48127ff87fff8000", + "0x48127ff87fff8000", + "0x208b7fff7fff7ffe", + "0x40780017fff7fff", + "0x1", + "0x48297ffc80007ffd", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0x72", + "0x400380007ffc8000", + "0xa0680017fff8000", + "0x12", + "0x4825800180008000", + "0x10000", + "0x4844800180008002", + "0x8000000000000110000000000000000", + "0x4830800080017ffe", + "0x480280007ffa7fff", + "0x482480017ffe8000", + "0xefffffffffffffde000000000000ffff", + "0x480280017ffa7fff", + "0x400280027ffa7ffb", + "0x402480017fff7ffb", + "0xffffffffffffffffffffffffffffffff", + "0x20680017fff7fff", + "0x58", + "0x402780017fff7fff", + "0x1", + "0x400380007ffa8000", + "0x4826800180008000", + "0xffffffffffffffffffffffffffff0000", + "0x400280017ffa7fff", + "0x482680017ffc8000", + "0x1", + "0x480a7ffd7fff8000", + "0x48307ffe80007fff", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0x35", + "0x40780017fff7fff", + "0x1", + "0x482680017ffa8000", + "0x2", + "0x480a7ffb7fff8000", + "0x482480017ffa8000", + "0x1", + "0x48127ffa7fff8000", + "0x48127ffb7fff8000", + "0x48127ffa7fff8000", + "0x480080007ff68000", + "0x1104800180018000", + "0x800000000000010ffffffffffffffffffffffffffffffffffffffffffffff60", + "0x20680017fff7ffa", + "0x17", + "0x20680017fff7ffd", + "0xf", + "0x48127ff87fff8000", + "0x482480017ff88000", + "0x1f4", + "0x480680017fff8000", + "0x0", + "0x48127ff87fff8000", + "0x48127ff87fff8000", + "0x480680017fff8000", + "0x0", + "0x480a80007fff8000", + "0x48127ff77fff8000", + "0x48127ff77fff8000", + "0x208b7fff7fff7ffe", + "0x48127ff87fff8000", + "0x48127ff87fff8000", + "0x48127ff97fff8000", + "0x48127ff97fff8000", + "0x10780017fff7fff", + "0x17", + "0x48127ff87fff8000", + "0x48127ff87fff8000", + "0x480680017fff8000", + "0x1", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x48127ff77fff8000", + "0x48127ff77fff8000", + "0x208b7fff7fff7ffe", + "0x482680017ffa8000", + "0x2", + "0x482680017ffb8000", + "0xd2a", + "0x48127ffb7fff8000", + "0x48127ffb7fff8000", + "0x48127ffc7fff8000", + "0x48127ffc7fff8000", + "0x480680017fff8000", + "0x0", + "0x48127ffb7fff8000", + "0x48127ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x208b7fff7fff7ffe", + "0x482680017ffa8000", + "0x3", + "0x482680017ffb8000", + "0xc1c", + "0x482680017ffc8000", + "0x1", + "0x480a7ffd7fff8000", + "0x10780017fff7fff", + "0x7", + "0x480a7ffa7fff8000", + "0x482680017ffb8000", + "0x1130", + "0x480a7ffc7fff8000", + "0x480a7ffd7fff8000", + "0x48127ffc7fff8000", + "0x48127ffc7fff8000", + "0x480680017fff8000", + "0x0", + "0x48127ffb7fff8000", + "0x48127ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x208b7fff7fff7ffe", + "0x48297ffc80007ffd", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0x8d", + "0x480280007ffc8000", + "0xa0680017fff8000", + "0x12", + "0x4824800180007ffe", + "0x10000", + "0x4844800180008002", + "0x8000000000000110000000000000000", + "0x4830800080017ffe", + "0x480280007ffb7fff", + "0x482480017ffe8000", + "0xefffffffffffffde000000000000ffff", + "0x480280017ffb7fff", + "0x400280027ffb7ffb", + "0x402480017fff7ffb", + "0xffffffffffffffffffffffffffffffff", + "0x20680017fff7fff", + "0x73", + "0x402780017fff7fff", + "0x1", + "0x400280007ffb7ffe", + "0x482480017ffe8000", + "0xffffffffffffffffffffffffffff0000", + "0x400280017ffb7fff", + "0x482680017ffc8000", + "0x1", + "0x480a7ffd7fff8000", + "0x48307ffe80007fff", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0x5d", + "0x480080007ffd8000", + "0xa0680017fff8000", + "0x12", + "0x4824800180007ffe", + "0x100000000", + "0x4844800180008002", + "0x8000000000000110000000000000000", + "0x4830800080017ffe", + "0x480280027ffb7fff", + "0x482480017ffe8000", + "0xefffffffffffffde00000000ffffffff", + "0x480280037ffb7fff", + "0x400280047ffb7ffb", + "0x402480017fff7ffb", + "0xffffffffffffffffffffffffffffffff", + "0x20680017fff7fff", + "0x43", + "0x402780017fff7fff", + "0x1", + "0x400280027ffb7ffe", + "0x482480017ffe8000", + "0xffffffffffffffffffffffff00000000", + "0x400280037ffb7fff", + "0x482480017ffa8000", + "0x1", + "0x48127ffa7fff8000", + "0x48307ffe80007fff", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0x2d", + "0x480080007ffd8000", + "0xa0680017fff8000", + "0x12", + "0x4824800180007ffe", + "0x10000000000000000", + "0x4844800180008002", + "0x8000000000000110000000000000000", + "0x4830800080017ffe", + "0x480280047ffb7fff", + "0x482480017ffe8000", + "0xefffffffffffffdeffffffffffffffff", + "0x480280057ffb7fff", + "0x400280067ffb7ffb", + "0x402480017fff7ffb", + "0xffffffffffffffffffffffffffffffff", + "0x20680017fff7fff", + "0x15", + "0x402780017fff7fff", + "0x1", + "0x400280047ffb7ffe", + "0x482480017ffe8000", + "0xffffffffffffffff0000000000000000", + "0x400280057ffb7fff", + "0x40780017fff7fff", + "0x5", + "0x482680017ffb8000", + "0x6", + "0x482480017ff48000", + "0x1", + "0x48127ff47fff8000", + "0x480680017fff8000", + "0x0", + "0x48127fe87fff8000", + "0x48127fed7fff8000", + "0x48127ff27fff8000", + "0x208b7fff7fff7ffe", + "0x482680017ffb8000", + "0x7", + "0x482480017ff48000", + "0x1", + "0x48127ff47fff8000", + "0x10780017fff7fff", + "0x29", + "0x40780017fff7fff", + "0x8", + "0x482680017ffb8000", + "0x4", + "0x48127ff47fff8000", + "0x48127ff47fff8000", + "0x10780017fff7fff", + "0x21", + "0x40780017fff7fff", + "0x6", + "0x482680017ffb8000", + "0x5", + "0x482480017fee8000", + "0x1", + "0x48127fee7fff8000", + "0x10780017fff7fff", + "0x18", + "0x40780017fff7fff", + "0xe", + "0x482680017ffb8000", + "0x2", + "0x48127fee7fff8000", + "0x48127fee7fff8000", + "0x10780017fff7fff", + "0x10", + "0x40780017fff7fff", + "0xc", + "0x482680017ffb8000", + "0x3", + "0x482680017ffc8000", + "0x1", + "0x480a7ffd7fff8000", + "0x10780017fff7fff", + "0x7", + "0x40780017fff7fff", + "0x14", + "0x480a7ffb7fff8000", + "0x480a7ffc7fff8000", + "0x480a7ffd7fff8000", + "0x480680017fff8000", + "0x1", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x208b7fff7fff7ffe", + "0xa0680017fff8000", + "0x7", + "0x482680017ff88000", + "0xfffffffffffffffffffffffffffff6fa", + "0x400280007ff77fff", + "0x10780017fff7fff", + "0x5b", + "0x4825800180007ff8", + "0x906", + "0x400280007ff77fff", + "0x20780017fff7ffd", + "0xf", + "0x482680017ff78000", + "0x1", + "0x482480017ffe8000", + "0xc8a", + "0x480680017fff8000", + "0x0", + "0x480a7ff97fff8000", + "0x480a7ffa7fff8000", + "0x480680017fff8000", + "0x0", + "0x480a7ffb7fff8000", + "0x480a7ffc7fff8000", + "0x208b7fff7fff7ffe", + "0x48297ff980007ffa", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0x31", + "0x480280007ff98000", + "0xa0680017fff8000", + "0x12", + "0x4824800180007ffe", + "0x100000000", + "0x4844800180008002", + "0x8000000000000110000000000000000", + "0x4830800080017ffe", + "0x480280017ff77fff", + "0x482480017ffe8000", + "0xefffffffffffffde00000000ffffffff", + "0x480280027ff77fff", + "0x400280037ff77ffb", + "0x402480017fff7ffb", + "0xffffffffffffffffffffffffffffffff", + "0x20680017fff7fff", + "0x17", + "0x402780017fff7fff", + "0x1", + "0x400280017ff77ffe", + "0x482480017ffe8000", + "0xffffffffffffffffffffffff00000000", + "0x400280027ff77fff", + "0x400280007ffc7ffd", + "0x482680017ff78000", + "0x3", + "0x48127ffa7fff8000", + "0x482680017ff98000", + "0x1", + "0x480a7ffa7fff8000", + "0x480a7ffb7fff8000", + "0x482680017ffc8000", + "0x1", + "0x4825800180007ffd", + "0x1", + "0x1104800180018000", + "0x800000000000010ffffffffffffffffffffffffffffffffffffffffffffffc0", + "0x208b7fff7fff7ffe", + "0x482680017ff78000", + "0x4", + "0x482480017ff58000", + "0x4b0", + "0x482680017ff98000", + "0x1", + "0x480a7ffa7fff8000", + "0x10780017fff7fff", + "0x8", + "0x482680017ff78000", + "0x1", + "0x482480017ffd8000", + "0x9ce", + "0x480a7ff97fff8000", + "0x480a7ffa7fff8000", + "0x48127ffc7fff8000", + "0x48127ffc7fff8000", + "0x480680017fff8000", + "0x0", + "0x48127ffb7fff8000", + "0x48127ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x208b7fff7fff7ffe", + "0x1104800180018000", + "0x800000000000010fffffffffffffffffffffffffffffffffffffffffffff138", + "0x482680017ff78000", + "0x1", + "0x480a7ff87fff8000", + "0x480680017fff8000", + "0x1", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x48127ff87fff8000", + "0x48127ff87fff8000", + "0x208b7fff7fff7ffe", + "0x48297ffc80007ffd", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0x8d", + "0x480280007ffc8000", + "0xa0680017fff8000", + "0x12", + "0x4824800180007ffe", + "0x10000", + "0x4844800180008002", + "0x8000000000000110000000000000000", + "0x4830800080017ffe", + "0x480280007ffb7fff", + "0x482480017ffe8000", + "0xefffffffffffffde000000000000ffff", + "0x480280017ffb7fff", + "0x400280027ffb7ffb", + "0x402480017fff7ffb", + "0xffffffffffffffffffffffffffffffff", + "0x20680017fff7fff", + "0x73", + "0x402780017fff7fff", + "0x1", + "0x400280007ffb7ffe", + "0x482480017ffe8000", + "0xffffffffffffffffffffffffffff0000", + "0x400280017ffb7fff", + "0x482680017ffc8000", + "0x1", + "0x480a7ffd7fff8000", + "0x48307ffe80007fff", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0x5d", + "0x480080007ffd8000", + "0xa0680017fff8000", + "0x12", + "0x4824800180007ffe", + "0x10000", + "0x4844800180008002", + "0x8000000000000110000000000000000", + "0x4830800080017ffe", + "0x480280027ffb7fff", + "0x482480017ffe8000", + "0xefffffffffffffde000000000000ffff", + "0x480280037ffb7fff", + "0x400280047ffb7ffb", + "0x402480017fff7ffb", + "0xffffffffffffffffffffffffffffffff", + "0x20680017fff7fff", + "0x43", + "0x402780017fff7fff", + "0x1", + "0x400280027ffb7ffe", + "0x482480017ffe8000", + "0xffffffffffffffffffffffffffff0000", + "0x400280037ffb7fff", + "0x482480017ffa8000", + "0x1", + "0x48127ffa7fff8000", + "0x48307ffe80007fff", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0x2d", + "0x480080007ffd8000", + "0xa0680017fff8000", + "0x12", + "0x4824800180007ffe", + "0x10000", + "0x4844800180008002", + "0x8000000000000110000000000000000", + "0x4830800080017ffe", + "0x480280047ffb7fff", + "0x482480017ffe8000", + "0xefffffffffffffde000000000000ffff", + "0x480280057ffb7fff", + "0x400280067ffb7ffb", + "0x402480017fff7ffb", + "0xffffffffffffffffffffffffffffffff", + "0x20680017fff7fff", + "0x15", + "0x402780017fff7fff", + "0x1", + "0x400280047ffb7ffe", + "0x482480017ffe8000", + "0xffffffffffffffffffffffffffff0000", + "0x400280057ffb7fff", + "0x40780017fff7fff", + "0x5", + "0x482680017ffb8000", + "0x6", + "0x482480017ff48000", + "0x1", + "0x48127ff47fff8000", + "0x480680017fff8000", + "0x0", + "0x48127fe87fff8000", + "0x48127fed7fff8000", + "0x48127ff27fff8000", + "0x208b7fff7fff7ffe", + "0x482680017ffb8000", + "0x7", + "0x482480017ff48000", + "0x1", + "0x48127ff47fff8000", + "0x10780017fff7fff", + "0x29", + "0x40780017fff7fff", + "0x8", + "0x482680017ffb8000", + "0x4", + "0x48127ff47fff8000", + "0x48127ff47fff8000", + "0x10780017fff7fff", + "0x21", + "0x40780017fff7fff", + "0x6", + "0x482680017ffb8000", + "0x5", + "0x482480017fee8000", + "0x1", + "0x48127fee7fff8000", + "0x10780017fff7fff", + "0x18", + "0x40780017fff7fff", + "0xe", + "0x482680017ffb8000", + "0x2", + "0x48127fee7fff8000", + "0x48127fee7fff8000", + "0x10780017fff7fff", + "0x10", + "0x40780017fff7fff", + "0xc", + "0x482680017ffb8000", + "0x3", + "0x482680017ffc8000", + "0x1", + "0x480a7ffd7fff8000", + "0x10780017fff7fff", + "0x7", + "0x40780017fff7fff", + "0x14", + "0x480a7ffb7fff8000", + "0x480a7ffc7fff8000", + "0x480a7ffd7fff8000", + "0x480680017fff8000", + "0x1", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x208b7fff7fff7ffe" + ], + "bytecode_segment_lengths": [ + 191, 144, 168, 144, 131, 181, 146, 164, 113, 113, 145, 115, 147, 131, 130, 92, 174, 96, 75, 97, + 123, 97, 113, 162, 5, 5, 5, 141, 48, 158, 127, 48, 157, 155, 165, 67, 161, 191, 48, 187, 163, + 131, 206, 158, 128, 139, 128, 156, 155, 7, 112, 139, 112, 139, 158, 112, 158 + ], + "hints": [ + [ + 0, + [ + { + "TestLessThanOrEqual": { + "lhs": { + "Immediate": "0x0" + }, + "rhs": { + "Deref": { + "register": "FP", + "offset": -6 + } + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 27, + [ + { + "TestLessThan": { + "lhs": { + "BinOp": { + "op": "Add", + "a": { + "register": "AP", + "offset": -1 + }, + "b": { + "Immediate": "0x0" + } + } + }, + "rhs": { + "Immediate": "0x10000" + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 31, + [ + { + "LinearSplit": { + "value": { + "Deref": { + "register": "AP", + "offset": -1 + } + }, + "scalar": { + "Immediate": "0x8000000000000110000000000000000" + }, + "max_x": { + "Immediate": "0xfffffffffffffffffffffffffffffffe" + }, + "x": { + "register": "AP", + "offset": 0 + }, + "y": { + "register": "AP", + "offset": 1 + } + } + } + ] + ], + [ + 108, + [ + { + "TestLessThanOrEqual": { + "lhs": { + "Immediate": "0x0" + }, + "rhs": { + "Deref": { + "register": "AP", + "offset": -10 + } + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 120, + [ + { + "AllocSegment": { + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 191, + [ + { + "TestLessThanOrEqual": { + "lhs": { + "Immediate": "0x0" + }, + "rhs": { + "Deref": { + "register": "FP", + "offset": -6 + } + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 232, + [ + { + "TestLessThanOrEqual": { + "lhs": { + "Immediate": "0x8e8" + }, + "rhs": { + "Deref": { + "register": "AP", + "offset": -13 + } + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 244, + [ + { + "AllocSegment": { + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 335, + [ + { + "TestLessThanOrEqual": { + "lhs": { + "Immediate": "0x0" + }, + "rhs": { + "Deref": { + "register": "FP", + "offset": -6 + } + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 418, + [ + { + "TestLessThanOrEqual": { + "lhs": { + "Immediate": "0x0" + }, + "rhs": { + "Deref": { + "register": "AP", + "offset": -12 + } + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 430, + [ + { + "AllocSegment": { + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 503, + [ + { + "TestLessThanOrEqual": { + "lhs": { + "Immediate": "0x9f6" + }, + "rhs": { + "Deref": { + "register": "FP", + "offset": -6 + } + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 544, + [ + { + "TestLessThanOrEqual": { + "lhs": { + "Immediate": "0xa0a" + }, + "rhs": { + "Deref": { + "register": "AP", + "offset": -14 + } + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 556, + [ + { + "AllocSegment": { + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 647, + [ + { + "TestLessThanOrEqual": { + "lhs": { + "Immediate": "0x0" + }, + "rhs": { + "Deref": { + "register": "FP", + "offset": -6 + } + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 685, + [ + { + "TestLessThanOrEqual": { + "lhs": { + "Immediate": "0x0" + }, + "rhs": { + "Deref": { + "register": "AP", + "offset": -35 + } + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 697, + [ + { + "AllocSegment": { + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 778, + [ + { + "TestLessThanOrEqual": { + "lhs": { + "Immediate": "0x0" + }, + "rhs": { + "Deref": { + "register": "FP", + "offset": -6 + } + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 858, + [ + { + "TestLessThanOrEqual": { + "lhs": { + "Immediate": "0x0" + }, + "rhs": { + "Deref": { + "register": "AP", + "offset": -11 + } + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 870, + [ + { + "AllocSegment": { + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 959, + [ + { + "TestLessThanOrEqual": { + "lhs": { + "Immediate": "0x0" + }, + "rhs": { + "Deref": { + "register": "FP", + "offset": -6 + } + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 974, + [ + { + "AllocSegment": { + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 1011, + [ + { + "TestLessThanOrEqual": { + "lhs": { + "Immediate": "0x0" + }, + "rhs": { + "Deref": { + "register": "AP", + "offset": -12 + } + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 1024, + [ + { + "AllocSegment": { + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 1105, + [ + { + "TestLessThanOrEqual": { + "lhs": { + "Immediate": "0x0" + }, + "rhs": { + "Deref": { + "register": "FP", + "offset": -6 + } + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 1132, + [ + { + "TestLessThan": { + "lhs": { + "BinOp": { + "op": "Add", + "a": { + "register": "AP", + "offset": -1 + }, + "b": { + "Immediate": "0x0" + } + } + }, + "rhs": { + "Immediate": "0x10000" + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 1136, + [ + { + "LinearSplit": { + "value": { + "Deref": { + "register": "AP", + "offset": -1 + } + }, + "scalar": { + "Immediate": "0x8000000000000110000000000000000" + }, + "max_x": { + "Immediate": "0xfffffffffffffffffffffffffffffffe" + }, + "x": { + "register": "AP", + "offset": 0 + }, + "y": { + "register": "AP", + "offset": 1 + } + } + } + ] + ], + [ + 1206, + [ + { + "TestLessThanOrEqual": { + "lhs": { + "Immediate": "0x0" + }, + "rhs": { + "Deref": { + "register": "AP", + "offset": -8 + } + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 1218, + [ + { + "AllocSegment": { + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 1269, + [ + { + "TestLessThanOrEqual": { + "lhs": { + "Immediate": "0x0" + }, + "rhs": { + "Deref": { + "register": "FP", + "offset": -6 + } + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 1307, + [ + { + "TestLessThanOrEqual": { + "lhs": { + "Immediate": "0x0" + }, + "rhs": { + "Deref": { + "register": "AP", + "offset": -37 + } + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 1319, + [ + { + "AllocSegment": { + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 1382, + [ + { + "TestLessThanOrEqual": { + "lhs": { + "Immediate": "0x0" + }, + "rhs": { + "Deref": { + "register": "FP", + "offset": -6 + } + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 1420, + [ + { + "TestLessThanOrEqual": { + "lhs": { + "Immediate": "0x0" + }, + "rhs": { + "Deref": { + "register": "AP", + "offset": -31 + } + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 1432, + [ + { + "AllocSegment": { + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 1495, + [ + { + "TestLessThanOrEqual": { + "lhs": { + "Immediate": "0xa" + }, + "rhs": { + "Deref": { + "register": "FP", + "offset": -6 + } + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 1536, + [ + { + "TestLessThanOrEqual": { + "lhs": { + "Immediate": "0x816" + }, + "rhs": { + "Deref": { + "register": "AP", + "offset": -13 + } + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 1548, + [ + { + "AllocSegment": { + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 1640, + [ + { + "TestLessThanOrEqual": { + "lhs": { + "Immediate": "0x1ae" + }, + "rhs": { + "Deref": { + "register": "FP", + "offset": -6 + } + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 1678, + [ + { + "TestLessThanOrEqual": { + "lhs": { + "Immediate": "0x0" + }, + "rhs": { + "Deref": { + "register": "AP", + "offset": -56 + } + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 1690, + [ + { + "AllocSegment": { + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 1755, + [ + { + "TestLessThanOrEqual": { + "lhs": { + "Immediate": "0xc4e" + }, + "rhs": { + "Deref": { + "register": "FP", + "offset": -6 + } + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 1796, + [ + { + "TestLessThanOrEqual": { + "lhs": { + "Immediate": "0x87a" + }, + "rhs": { + "Deref": { + "register": "AP", + "offset": -14 + } + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 1808, + [ + { + "AllocSegment": { + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 1902, + [ + { + "TestLessThanOrEqual": { + "lhs": { + "Immediate": "0x0" + }, + "rhs": { + "Deref": { + "register": "FP", + "offset": -6 + } + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 1940, + [ + { + "TestLessThanOrEqual": { + "lhs": { + "Immediate": "0x0" + }, + "rhs": { + "Deref": { + "register": "AP", + "offset": -47 + } + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 1952, + [ + { + "AllocSegment": { + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 2033, + [ + { + "TestLessThanOrEqual": { + "lhs": { + "Immediate": "0x0" + }, + "rhs": { + "Deref": { + "register": "FP", + "offset": -6 + } + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 2071, + [ + { + "TestLessThanOrEqual": { + "lhs": { + "Immediate": "0x0" + }, + "rhs": { + "Deref": { + "register": "AP", + "offset": -36 + } + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 2083, + [ + { + "AllocSegment": { + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 2163, + [ + { + "TestLessThanOrEqual": { + "lhs": { + "Immediate": "0x0" + }, + "rhs": { + "Deref": { + "register": "FP", + "offset": -6 + } + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 2201, + [ + { + "TestLessThanOrEqual": { + "lhs": { + "Immediate": "0x0" + }, + "rhs": { + "Deref": { + "register": "AP", + "offset": -31 + } + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 2213, + [ + { + "AllocSegment": { + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 2255, + [ + { + "TestLessThanOrEqual": { + "lhs": { + "Immediate": "0x0" + }, + "rhs": { + "Deref": { + "register": "FP", + "offset": -6 + } + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 2271, + [ + { + "TestLessThan": { + "lhs": { + "BinOp": { + "op": "Add", + "a": { + "register": "AP", + "offset": -1 + }, + "b": { + "Immediate": "0x0" + } + } + }, + "rhs": { + "Immediate": "0x10000000000000000" + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 2275, + [ + { + "LinearSplit": { + "value": { + "Deref": { + "register": "AP", + "offset": -1 + } + }, + "scalar": { + "Immediate": "0x8000000000000110000000000000000" + }, + "max_x": { + "Immediate": "0xfffffffffffffffffffffffffffffffe" + }, + "x": { + "register": "AP", + "offset": 0 + }, + "y": { + "register": "AP", + "offset": 1 + } + } + } + ] + ], + [ + 2302, + [ + { + "TestLessThan": { + "lhs": { + "BinOp": { + "op": "Add", + "a": { + "register": "AP", + "offset": -1 + }, + "b": { + "Immediate": "0x0" + } + } + }, + "rhs": { + "Immediate": "0x100000000" + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 2306, + [ + { + "LinearSplit": { + "value": { + "Deref": { + "register": "AP", + "offset": -1 + } + }, + "scalar": { + "Immediate": "0x8000000000000110000000000000000" + }, + "max_x": { + "Immediate": "0xfffffffffffffffffffffffffffffffe" + }, + "x": { + "register": "AP", + "offset": 0 + }, + "y": { + "register": "AP", + "offset": 1 + } + } + } + ] + ], + [ + 2348, + [ + { + "TestLessThanOrEqual": { + "lhs": { + "Immediate": "0x0" + }, + "rhs": { + "Deref": { + "register": "AP", + "offset": -18 + } + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 2362, + [ + { + "AllocSegment": { + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 2429, + [ + { + "TestLessThanOrEqual": { + "lhs": { + "Immediate": "0x0" + }, + "rhs": { + "Deref": { + "register": "FP", + "offset": -6 + } + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 2467, + [ + { + "TestLessThanOrEqual": { + "lhs": { + "Immediate": "0x0" + }, + "rhs": { + "Deref": { + "register": "AP", + "offset": -39 + } + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 2479, + [ + { + "AllocSegment": { + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 2525, + [ + { + "TestLessThanOrEqual": { + "lhs": { + "Immediate": "0x0" + }, + "rhs": { + "Deref": { + "register": "FP", + "offset": -6 + } + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 2556, + [ + { + "TestLessThanOrEqual": { + "lhs": { + "Immediate": "0x0" + }, + "rhs": { + "Deref": { + "register": "AP", + "offset": -6 + } + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 2568, + [ + { + "AllocSegment": { + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 2600, + [ + { + "TestLessThanOrEqual": { + "lhs": { + "Immediate": "0x776" + }, + "rhs": { + "Deref": { + "register": "FP", + "offset": -6 + } + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 2638, + [ + { + "TestLessThanOrEqual": { + "lhs": { + "Immediate": "0x0" + }, + "rhs": { + "Deref": { + "register": "AP", + "offset": -63 + } + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 2650, + [ + { + "AllocSegment": { + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 2697, + [ + { + "TestLessThanOrEqual": { + "lhs": { + "Immediate": "0x15e" + }, + "rhs": { + "Deref": { + "register": "FP", + "offset": -6 + } + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 2738, + [ + { + "TestLessThanOrEqual": { + "lhs": { + "Immediate": "0x6ea" + }, + "rhs": { + "Deref": { + "register": "AP", + "offset": -13 + } + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 2750, + [ + { + "AllocSegment": { + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 2820, + [ + { + "TestLessThanOrEqual": { + "lhs": { + "Immediate": "0x776" + }, + "rhs": { + "Deref": { + "register": "FP", + "offset": -6 + } + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 2858, + [ + { + "TestLessThanOrEqual": { + "lhs": { + "Immediate": "0x0" + }, + "rhs": { + "Deref": { + "register": "AP", + "offset": -63 + } + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 2870, + [ + { + "AllocSegment": { + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 2917, + [ + { + "TestLessThanOrEqual": { + "lhs": { + "Immediate": "0x0" + }, + "rhs": { + "Deref": { + "register": "FP", + "offset": -6 + } + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 2955, + [ + { + "TestLessThanOrEqual": { + "lhs": { + "Immediate": "0x0" + }, + "rhs": { + "Deref": { + "register": "AP", + "offset": -37 + } + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 2967, + [ + { + "AllocSegment": { + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 3030, + [ + { + "TestLessThanOrEqual": { + "lhs": { + "Immediate": "0x0" + }, + "rhs": { + "Deref": { + "register": "FP", + "offset": -6 + } + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 3046, + [ + { + "TestLessThan": { + "lhs": { + "Deref": { + "register": "AP", + "offset": -1 + } + }, + "rhs": { + "Immediate": "0x100000000000000000000000000000000" + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 3048, + [ + { + "DivMod": { + "lhs": { + "Deref": { + "register": "AP", + "offset": -2 + } + }, + "rhs": { + "Immediate": "0x100000000000000000000000000000000" + }, + "quotient": { + "register": "AP", + "offset": 3 + }, + "remainder": { + "register": "AP", + "offset": 4 + } + } + } + ] + ], + [ + 3098, + [ + { + "TestLessThanOrEqual": { + "lhs": { + "Immediate": "0x0" + }, + "rhs": { + "Deref": { + "register": "AP", + "offset": -34 + } + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 3113, + [ + { + "AllocSegment": { + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 3223, + [ + { + "AllocSegment": { + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 3348, + [ + { + "TestLessThanOrEqual": { + "lhs": { + "Immediate": "0x622" + }, + "rhs": { + "Deref": { + "register": "FP", + "offset": -7 + } + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 3402, + [ + { + "TestLessThan": { + "lhs": { + "BinOp": { + "op": "Add", + "a": { + "register": "AP", + "offset": -1 + }, + "b": { + "Immediate": "0x0" + } + } + }, + "rhs": { + "Immediate": "0x100000000" + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 3406, + [ + { + "LinearSplit": { + "value": { + "Deref": { + "register": "AP", + "offset": -1 + } + }, + "scalar": { + "Immediate": "0x8000000000000110000000000000000" + }, + "max_x": { + "Immediate": "0xfffffffffffffffffffffffffffffffe" + }, + "x": { + "register": "AP", + "offset": 0 + }, + "y": { + "register": "AP", + "offset": 1 + } + } + } + ] + ], + [ + 3433, + [ + { + "TestLessThan": { + "lhs": { + "BinOp": { + "op": "Add", + "a": { + "register": "AP", + "offset": -1 + }, + "b": { + "Immediate": "0x0" + } + } + }, + "rhs": { + "Immediate": "0x100000000" + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 3437, + [ + { + "LinearSplit": { + "value": { + "Deref": { + "register": "AP", + "offset": -1 + } + }, + "scalar": { + "Immediate": "0x8000000000000110000000000000000" + }, + "max_x": { + "Immediate": "0xfffffffffffffffffffffffffffffffe" + }, + "x": { + "register": "AP", + "offset": 0 + }, + "y": { + "register": "AP", + "offset": 1 + } + } + } + ] + ], + [ + 3464, + [ + { + "TestLessThan": { + "lhs": { + "BinOp": { + "op": "Add", + "a": { + "register": "AP", + "offset": -1 + }, + "b": { + "Immediate": "0x0" + } + } + }, + "rhs": { + "Immediate": "0x100000000" + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 3468, + [ + { + "LinearSplit": { + "value": { + "Deref": { + "register": "AP", + "offset": -1 + } + }, + "scalar": { + "Immediate": "0x8000000000000110000000000000000" + }, + "max_x": { + "Immediate": "0xfffffffffffffffffffffffffffffffe" + }, + "x": { + "register": "AP", + "offset": 0 + }, + "y": { + "register": "AP", + "offset": 1 + } + } + } + ] + ], + [ + 3681, + [ + { + "TestLessThanOrEqual": { + "lhs": { + "Immediate": "0x622" + }, + "rhs": { + "Deref": { + "register": "FP", + "offset": -7 + } + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 3757, + [ + { + "TestLessThan": { + "lhs": { + "BinOp": { + "op": "Add", + "a": { + "register": "AP", + "offset": -1 + }, + "b": { + "Immediate": "0x0" + } + } + }, + "rhs": { + "Immediate": "0x10000" + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 3761, + [ + { + "LinearSplit": { + "value": { + "Deref": { + "register": "AP", + "offset": -1 + } + }, + "scalar": { + "Immediate": "0x8000000000000110000000000000000" + }, + "max_x": { + "Immediate": "0xfffffffffffffffffffffffffffffffe" + }, + "x": { + "register": "AP", + "offset": 0 + }, + "y": { + "register": "AP", + "offset": 1 + } + } + } + ] + ], + [ + 3905, + [ + { + "TestLessThan": { + "lhs": { + "BinOp": { + "op": "Add", + "a": { + "register": "AP", + "offset": -1 + }, + "b": { + "Immediate": "0x0" + } + } + }, + "rhs": { + "Immediate": "0x100" + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 3909, + [ + { + "LinearSplit": { + "value": { + "Deref": { + "register": "AP", + "offset": -1 + } + }, + "scalar": { + "Immediate": "0x8000000000000110000000000000000" + }, + "max_x": { + "Immediate": "0xfffffffffffffffffffffffffffffffe" + }, + "x": { + "register": "AP", + "offset": 0 + }, + "y": { + "register": "AP", + "offset": 1 + } + } + } + ] + ], + [ + 3967, + [ + { + "TestLessThan": { + "lhs": { + "BinOp": { + "op": "Add", + "a": { + "register": "AP", + "offset": -1 + }, + "b": { + "Immediate": "0x0" + } + } + }, + "rhs": { + "Immediate": "0x10000" + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 3971, + [ + { + "LinearSplit": { + "value": { + "Deref": { + "register": "AP", + "offset": -1 + } + }, + "scalar": { + "Immediate": "0x8000000000000110000000000000000" + }, + "max_x": { + "Immediate": "0xfffffffffffffffffffffffffffffffe" + }, + "x": { + "register": "AP", + "offset": 0 + }, + "y": { + "register": "AP", + "offset": 1 + } + } + } + ] + ], + [ + 4041, + [ + { + "TestLessThanOrEqual": { + "lhs": { + "Immediate": "0xe7e" + }, + "rhs": { + "Deref": { + "register": "FP", + "offset": -8 + } + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 4083, + [ + { + "TestLessThan": { + "lhs": { + "BinOp": { + "op": "Add", + "a": { + "register": "AP", + "offset": -1 + }, + "b": { + "Immediate": "0x0" + } + } + }, + "rhs": { + "Immediate": "0x10000" + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 4087, + [ + { + "LinearSplit": { + "value": { + "Deref": { + "register": "AP", + "offset": -1 + } + }, + "scalar": { + "Immediate": "0x8000000000000110000000000000000" + }, + "max_x": { + "Immediate": "0xfffffffffffffffffffffffffffffffe" + }, + "x": { + "register": "AP", + "offset": 0 + }, + "y": { + "register": "AP", + "offset": 1 + } + } + } + ] + ], + [ + 4206, + [ + { + "TestLessThanOrEqual": { + "lhs": { + "Immediate": "0x942" + }, + "rhs": { + "Deref": { + "register": "FP", + "offset": -7 + } + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 4290, + [ + { + "TestLessThan": { + "lhs": { + "BinOp": { + "op": "Add", + "a": { + "register": "AP", + "offset": -1 + }, + "b": { + "Immediate": "0x0" + } + } + }, + "rhs": { + "Immediate": "0x10000000000000000" + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 4294, + [ + { + "LinearSplit": { + "value": { + "Deref": { + "register": "AP", + "offset": -1 + } + }, + "scalar": { + "Immediate": "0x8000000000000110000000000000000" + }, + "max_x": { + "Immediate": "0xfffffffffffffffffffffffffffffffe" + }, + "x": { + "register": "AP", + "offset": 0 + }, + "y": { + "register": "AP", + "offset": 1 + } + } + } + ] + ], + [ + 4321, + [ + { + "TestLessThan": { + "lhs": { + "BinOp": { + "op": "Add", + "a": { + "register": "AP", + "offset": -1 + }, + "b": { + "Immediate": "0x0" + } + } + }, + "rhs": { + "Immediate": "0x100000000" + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 4325, + [ + { + "LinearSplit": { + "value": { + "Deref": { + "register": "AP", + "offset": -1 + } + }, + "scalar": { + "Immediate": "0x8000000000000110000000000000000" + }, + "max_x": { + "Immediate": "0xfffffffffffffffffffffffffffffffe" + }, + "x": { + "register": "AP", + "offset": 0 + }, + "y": { + "register": "AP", + "offset": 1 + } + } + } + ] + ], + [ + 4450, + [ + { + "AllocSegment": { + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 4521, + [ + { + "AllocSegment": { + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 4625, + [ + { + "TestLessThanOrEqual": { + "lhs": { + "Immediate": "0x622" + }, + "rhs": { + "Deref": { + "register": "FP", + "offset": -7 + } + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 4728, + [ + { + "TestLessThan": { + "lhs": { + "BinOp": { + "op": "Add", + "a": { + "register": "AP", + "offset": -1 + }, + "b": { + "Immediate": "0x0" + } + } + }, + "rhs": { + "Immediate": "0x10000" + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 4732, + [ + { + "LinearSplit": { + "value": { + "Deref": { + "register": "AP", + "offset": -1 + } + }, + "scalar": { + "Immediate": "0x8000000000000110000000000000000" + }, + "max_x": { + "Immediate": "0xfffffffffffffffffffffffffffffffe" + }, + "x": { + "register": "AP", + "offset": 0 + }, + "y": { + "register": "AP", + "offset": 1 + } + } + } + ] + ], + [ + 4759, + [ + { + "TestLessThan": { + "lhs": { + "BinOp": { + "op": "Add", + "a": { + "register": "AP", + "offset": -1 + }, + "b": { + "Immediate": "0x0" + } + } + }, + "rhs": { + "Immediate": "0x10000" + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 4763, + [ + { + "LinearSplit": { + "value": { + "Deref": { + "register": "AP", + "offset": -1 + } + }, + "scalar": { + "Immediate": "0x8000000000000110000000000000000" + }, + "max_x": { + "Immediate": "0xfffffffffffffffffffffffffffffffe" + }, + "x": { + "register": "AP", + "offset": 0 + }, + "y": { + "register": "AP", + "offset": 1 + } + } + } + ] + ], + [ + 5075, + [ + { + "TestLessThan": { + "lhs": { + "BinOp": { + "op": "Add", + "a": { + "register": "AP", + "offset": -1 + }, + "b": { + "Immediate": "0x0" + } + } + }, + "rhs": { + "Immediate": "0x100000000" + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 5079, + [ + { + "LinearSplit": { + "value": { + "Deref": { + "register": "AP", + "offset": -1 + } + }, + "scalar": { + "Immediate": "0x8000000000000110000000000000000" + }, + "max_x": { + "Immediate": "0xfffffffffffffffffffffffffffffffe" + }, + "x": { + "register": "AP", + "offset": 0 + }, + "y": { + "register": "AP", + "offset": 1 + } + } + } + ] + ], + [ + 5173, + [ + { + "TestLessThan": { + "lhs": { + "BinOp": { + "op": "Add", + "a": { + "register": "AP", + "offset": -1 + }, + "b": { + "Immediate": "0x0" + } + } + }, + "rhs": { + "Immediate": "0x100" + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 5177, + [ + { + "LinearSplit": { + "value": { + "Deref": { + "register": "AP", + "offset": -1 + } + }, + "scalar": { + "Immediate": "0x8000000000000110000000000000000" + }, + "max_x": { + "Immediate": "0xfffffffffffffffffffffffffffffffe" + }, + "x": { + "register": "AP", + "offset": 0 + }, + "y": { + "register": "AP", + "offset": 1 + } + } + } + ] + ], + [ + 5248, + [ + { + "TestLessThan": { + "lhs": { + "BinOp": { + "op": "Add", + "a": { + "register": "AP", + "offset": -1 + }, + "b": { + "Immediate": "0x0" + } + } + }, + "rhs": { + "Immediate": "0x100000000" + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 5252, + [ + { + "LinearSplit": { + "value": { + "Deref": { + "register": "AP", + "offset": -1 + } + }, + "scalar": { + "Immediate": "0x8000000000000110000000000000000" + }, + "max_x": { + "Immediate": "0xfffffffffffffffffffffffffffffffe" + }, + "x": { + "register": "AP", + "offset": 0 + }, + "y": { + "register": "AP", + "offset": 1 + } + } + } + ] + ], + [ + 5366, + [ + { + "TestLessThan": { + "lhs": { + "BinOp": { + "op": "Add", + "a": { + "register": "AP", + "offset": -1 + }, + "b": { + "Immediate": "0x0" + } + } + }, + "rhs": { + "Immediate": "0x10000000000000000" + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 5370, + [ + { + "LinearSplit": { + "value": { + "Deref": { + "register": "AP", + "offset": -1 + } + }, + "scalar": { + "Immediate": "0x8000000000000110000000000000000" + }, + "max_x": { + "Immediate": "0xfffffffffffffffffffffffffffffffe" + }, + "x": { + "register": "AP", + "offset": 0 + }, + "y": { + "register": "AP", + "offset": 1 + } + } + } + ] + ], + [ + 5397, + [ + { + "TestLessThan": { + "lhs": { + "BinOp": { + "op": "Add", + "a": { + "register": "AP", + "offset": -1 + }, + "b": { + "Immediate": "0x0" + } + } + }, + "rhs": { + "Immediate": "0x10000000000000000" + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 5401, + [ + { + "LinearSplit": { + "value": { + "Deref": { + "register": "AP", + "offset": -1 + } + }, + "scalar": { + "Immediate": "0x8000000000000110000000000000000" + }, + "max_x": { + "Immediate": "0xfffffffffffffffffffffffffffffffe" + }, + "x": { + "register": "AP", + "offset": 0 + }, + "y": { + "register": "AP", + "offset": 1 + } + } + } + ] + ], + [ + 5428, + [ + { + "TestLessThan": { + "lhs": { + "BinOp": { + "op": "Add", + "a": { + "register": "AP", + "offset": -1 + }, + "b": { + "Immediate": "0x0" + } + } + }, + "rhs": { + "Immediate": "0x100000000" + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 5432, + [ + { + "LinearSplit": { + "value": { + "Deref": { + "register": "AP", + "offset": -1 + } + }, + "scalar": { + "Immediate": "0x8000000000000110000000000000000" + }, + "max_x": { + "Immediate": "0xfffffffffffffffffffffffffffffffe" + }, + "x": { + "register": "AP", + "offset": 0 + }, + "y": { + "register": "AP", + "offset": 1 + } + } + } + ] + ], + [ + 5524, + [ + { + "TestLessThan": { + "lhs": { + "BinOp": { + "op": "Add", + "a": { + "register": "AP", + "offset": -1 + }, + "b": { + "Immediate": "0x0" + } + } + }, + "rhs": { + "Immediate": "0x10000" + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 5528, + [ + { + "LinearSplit": { + "value": { + "Deref": { + "register": "AP", + "offset": -1 + } + }, + "scalar": { + "Immediate": "0x8000000000000110000000000000000" + }, + "max_x": { + "Immediate": "0xfffffffffffffffffffffffffffffffe" + }, + "x": { + "register": "AP", + "offset": 0 + }, + "y": { + "register": "AP", + "offset": 1 + } + } + } + ] + ], + [ + 5555, + [ + { + "TestLessThan": { + "lhs": { + "BinOp": { + "op": "Add", + "a": { + "register": "AP", + "offset": -1 + }, + "b": { + "Immediate": "0x0" + } + } + }, + "rhs": { + "Immediate": "0x100" + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 5559, + [ + { + "LinearSplit": { + "value": { + "Deref": { + "register": "AP", + "offset": -1 + } + }, + "scalar": { + "Immediate": "0x8000000000000110000000000000000" + }, + "max_x": { + "Immediate": "0xfffffffffffffffffffffffffffffffe" + }, + "x": { + "register": "AP", + "offset": 0 + }, + "y": { + "register": "AP", + "offset": 1 + } + } + } + ] + ], + [ + 5654, + [ + { + "TestLessThan": { + "lhs": { + "BinOp": { + "op": "Add", + "a": { + "register": "FP", + "offset": 0 + }, + "b": { + "Immediate": "0x0" + } + } + }, + "rhs": { + "Immediate": "0x10000" + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 5658, + [ + { + "LinearSplit": { + "value": { + "Deref": { + "register": "AP", + "offset": -1 + } + }, + "scalar": { + "Immediate": "0x8000000000000110000000000000000" + }, + "max_x": { + "Immediate": "0xfffffffffffffffffffffffffffffffe" + }, + "x": { + "register": "AP", + "offset": 0 + }, + "y": { + "register": "AP", + "offset": 1 + } + } + } + ] + ], + [ + 5684, + [ + { + "AllocSegment": { + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 5791, + [ + { + "TestLessThan": { + "lhs": { + "BinOp": { + "op": "Add", + "a": { + "register": "AP", + "offset": -1 + }, + "b": { + "Immediate": "0x0" + } + } + }, + "rhs": { + "Immediate": "0x10000" + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 5795, + [ + { + "LinearSplit": { + "value": { + "Deref": { + "register": "AP", + "offset": -1 + } + }, + "scalar": { + "Immediate": "0x8000000000000110000000000000000" + }, + "max_x": { + "Immediate": "0xfffffffffffffffffffffffffffffffe" + }, + "x": { + "register": "AP", + "offset": 0 + }, + "y": { + "register": "AP", + "offset": 1 + } + } + } + ] + ], + [ + 5822, + [ + { + "TestLessThan": { + "lhs": { + "BinOp": { + "op": "Add", + "a": { + "register": "AP", + "offset": -1 + }, + "b": { + "Immediate": "0x0" + } + } + }, + "rhs": { + "Immediate": "0x10000" + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 5826, + [ + { + "LinearSplit": { + "value": { + "Deref": { + "register": "AP", + "offset": -1 + } + }, + "scalar": { + "Immediate": "0x8000000000000110000000000000000" + }, + "max_x": { + "Immediate": "0xfffffffffffffffffffffffffffffffe" + }, + "x": { + "register": "AP", + "offset": 0 + }, + "y": { + "register": "AP", + "offset": 1 + } + } + } + ] + ], + [ + 5919, + [ + { + "TestLessThan": { + "lhs": { + "BinOp": { + "op": "Add", + "a": { + "register": "AP", + "offset": -1 + }, + "b": { + "Immediate": "0x0" + } + } + }, + "rhs": { + "Immediate": "0x100000000" + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 5923, + [ + { + "LinearSplit": { + "value": { + "Deref": { + "register": "AP", + "offset": -1 + } + }, + "scalar": { + "Immediate": "0x8000000000000110000000000000000" + }, + "max_x": { + "Immediate": "0xfffffffffffffffffffffffffffffffe" + }, + "x": { + "register": "AP", + "offset": 0 + }, + "y": { + "register": "AP", + "offset": 1 + } + } + } + ] + ], + [ + 5961, + [ + { + "TestLessThan": { + "lhs": { + "BinOp": { + "op": "Add", + "a": { + "register": "AP", + "offset": -1 + }, + "b": { + "Immediate": "0x0" + } + } + }, + "rhs": { + "Immediate": "0x100" + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 5965, + [ + { + "LinearSplit": { + "value": { + "Deref": { + "register": "AP", + "offset": -1 + } + }, + "scalar": { + "Immediate": "0x8000000000000110000000000000000" + }, + "max_x": { + "Immediate": "0xfffffffffffffffffffffffffffffffe" + }, + "x": { + "register": "AP", + "offset": 0 + }, + "y": { + "register": "AP", + "offset": 1 + } + } + } + ] + ], + [ + 6088, + [ + { + "TestLessThan": { + "lhs": { + "BinOp": { + "op": "Add", + "a": { + "register": "AP", + "offset": -1 + }, + "b": { + "Immediate": "0x0" + } + } + }, + "rhs": { + "Immediate": "0x100" + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 6092, + [ + { + "LinearSplit": { + "value": { + "Deref": { + "register": "AP", + "offset": -1 + } + }, + "scalar": { + "Immediate": "0x8000000000000110000000000000000" + }, + "max_x": { + "Immediate": "0xfffffffffffffffffffffffffffffffe" + }, + "x": { + "register": "AP", + "offset": 0 + }, + "y": { + "register": "AP", + "offset": 1 + } + } + } + ] + ], + [ + 6150, + [ + { + "TestLessThan": { + "lhs": { + "BinOp": { + "op": "Add", + "a": { + "register": "AP", + "offset": -1 + }, + "b": { + "Immediate": "0x0" + } + } + }, + "rhs": { + "Immediate": "0x10000000000000000" + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 6154, + [ + { + "LinearSplit": { + "value": { + "Deref": { + "register": "AP", + "offset": -1 + } + }, + "scalar": { + "Immediate": "0x8000000000000110000000000000000" + }, + "max_x": { + "Immediate": "0xfffffffffffffffffffffffffffffffe" + }, + "x": { + "register": "AP", + "offset": 0 + }, + "y": { + "register": "AP", + "offset": 1 + } + } + } + ] + ], + [ + 6224, + [ + { + "AllocSegment": { + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 6231, + [ + { + "TestLessThanOrEqual": { + "lhs": { + "Immediate": "0x906" + }, + "rhs": { + "Deref": { + "register": "FP", + "offset": -8 + } + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 6262, + [ + { + "TestLessThan": { + "lhs": { + "BinOp": { + "op": "Add", + "a": { + "register": "AP", + "offset": -1 + }, + "b": { + "Immediate": "0x0" + } + } + }, + "rhs": { + "Immediate": "0x100" + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 6266, + [ + { + "LinearSplit": { + "value": { + "Deref": { + "register": "AP", + "offset": -1 + } + }, + "scalar": { + "Immediate": "0x8000000000000110000000000000000" + }, + "max_x": { + "Immediate": "0xfffffffffffffffffffffffffffffffe" + }, + "x": { + "register": "AP", + "offset": 0 + }, + "y": { + "register": "AP", + "offset": 1 + } + } + } + ] + ], + [ + 6351, + [ + { + "TestLessThan": { + "lhs": { + "BinOp": { + "op": "Add", + "a": { + "register": "FP", + "offset": 0 + }, + "b": { + "Immediate": "0x0" + } + } + }, + "rhs": { + "Immediate": "0x100000000" + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 6355, + [ + { + "LinearSplit": { + "value": { + "Deref": { + "register": "AP", + "offset": -1 + } + }, + "scalar": { + "Immediate": "0x8000000000000110000000000000000" + }, + "max_x": { + "Immediate": "0xfffffffffffffffffffffffffffffffe" + }, + "x": { + "register": "AP", + "offset": 0 + }, + "y": { + "register": "AP", + "offset": 1 + } + } + } + ] + ], + [ + 6381, + [ + { + "AllocSegment": { + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 6482, + [ + { + "TestLessThanOrEqual": { + "lhs": { + "Immediate": "0x906" + }, + "rhs": { + "Deref": { + "register": "FP", + "offset": -8 + } + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 6513, + [ + { + "TestLessThan": { + "lhs": { + "BinOp": { + "op": "Add", + "a": { + "register": "AP", + "offset": -1 + }, + "b": { + "Immediate": "0x0" + } + } + }, + "rhs": { + "Immediate": "0x10000" + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 6517, + [ + { + "LinearSplit": { + "value": { + "Deref": { + "register": "AP", + "offset": -1 + } + }, + "scalar": { + "Immediate": "0x8000000000000110000000000000000" + }, + "max_x": { + "Immediate": "0xfffffffffffffffffffffffffffffffe" + }, + "x": { + "register": "AP", + "offset": 0 + }, + "y": { + "register": "AP", + "offset": 1 + } + } + } + ] + ], + [ + 6602, + [ + { + "TestLessThan": { + "lhs": { + "BinOp": { + "op": "Add", + "a": { + "register": "FP", + "offset": 0 + }, + "b": { + "Immediate": "0x0" + } + } + }, + "rhs": { + "Immediate": "0x10000" + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 6606, + [ + { + "LinearSplit": { + "value": { + "Deref": { + "register": "AP", + "offset": -1 + } + }, + "scalar": { + "Immediate": "0x8000000000000110000000000000000" + }, + "max_x": { + "Immediate": "0xfffffffffffffffffffffffffffffffe" + }, + "x": { + "register": "AP", + "offset": 0 + }, + "y": { + "register": "AP", + "offset": 1 + } + } + } + ] + ], + [ + 6632, + [ + { + "AllocSegment": { + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 6739, + [ + { + "TestLessThan": { + "lhs": { + "BinOp": { + "op": "Add", + "a": { + "register": "AP", + "offset": -1 + }, + "b": { + "Immediate": "0x0" + } + } + }, + "rhs": { + "Immediate": "0x10000" + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 6743, + [ + { + "LinearSplit": { + "value": { + "Deref": { + "register": "AP", + "offset": -1 + } + }, + "scalar": { + "Immediate": "0x8000000000000110000000000000000" + }, + "max_x": { + "Immediate": "0xfffffffffffffffffffffffffffffffe" + }, + "x": { + "register": "AP", + "offset": 0 + }, + "y": { + "register": "AP", + "offset": 1 + } + } + } + ] + ], + [ + 6770, + [ + { + "TestLessThan": { + "lhs": { + "BinOp": { + "op": "Add", + "a": { + "register": "AP", + "offset": -1 + }, + "b": { + "Immediate": "0x0" + } + } + }, + "rhs": { + "Immediate": "0x100000000" + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 6774, + [ + { + "LinearSplit": { + "value": { + "Deref": { + "register": "AP", + "offset": -1 + } + }, + "scalar": { + "Immediate": "0x8000000000000110000000000000000" + }, + "max_x": { + "Immediate": "0xfffffffffffffffffffffffffffffffe" + }, + "x": { + "register": "AP", + "offset": 0 + }, + "y": { + "register": "AP", + "offset": 1 + } + } + } + ] + ], + [ + 6801, + [ + { + "TestLessThan": { + "lhs": { + "BinOp": { + "op": "Add", + "a": { + "register": "AP", + "offset": -1 + }, + "b": { + "Immediate": "0x0" + } + } + }, + "rhs": { + "Immediate": "0x10000000000000000" + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 6805, + [ + { + "LinearSplit": { + "value": { + "Deref": { + "register": "AP", + "offset": -1 + } + }, + "scalar": { + "Immediate": "0x8000000000000110000000000000000" + }, + "max_x": { + "Immediate": "0xfffffffffffffffffffffffffffffffe" + }, + "x": { + "register": "AP", + "offset": 0 + }, + "y": { + "register": "AP", + "offset": 1 + } + } + } + ] + ], + [ + 6891, + [ + { + "TestLessThanOrEqual": { + "lhs": { + "Immediate": "0x906" + }, + "rhs": { + "Deref": { + "register": "FP", + "offset": -8 + } + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 6922, + [ + { + "TestLessThan": { + "lhs": { + "BinOp": { + "op": "Add", + "a": { + "register": "AP", + "offset": -1 + }, + "b": { + "Immediate": "0x0" + } + } + }, + "rhs": { + "Immediate": "0x100000000" + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 6926, + [ + { + "LinearSplit": { + "value": { + "Deref": { + "register": "AP", + "offset": -1 + } + }, + "scalar": { + "Immediate": "0x8000000000000110000000000000000" + }, + "max_x": { + "Immediate": "0xfffffffffffffffffffffffffffffffe" + }, + "x": { + "register": "AP", + "offset": 0 + }, + "y": { + "register": "AP", + "offset": 1 + } + } + } + ] + ], + [ + 7009, + [ + { + "TestLessThan": { + "lhs": { + "BinOp": { + "op": "Add", + "a": { + "register": "AP", + "offset": -1 + }, + "b": { + "Immediate": "0x0" + } + } + }, + "rhs": { + "Immediate": "0x10000" + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 7013, + [ + { + "LinearSplit": { + "value": { + "Deref": { + "register": "AP", + "offset": -1 + } + }, + "scalar": { + "Immediate": "0x8000000000000110000000000000000" + }, + "max_x": { + "Immediate": "0xfffffffffffffffffffffffffffffffe" + }, + "x": { + "register": "AP", + "offset": 0 + }, + "y": { + "register": "AP", + "offset": 1 + } + } + } + ] + ], + [ + 7040, + [ + { + "TestLessThan": { + "lhs": { + "BinOp": { + "op": "Add", + "a": { + "register": "AP", + "offset": -1 + }, + "b": { + "Immediate": "0x0" + } + } + }, + "rhs": { + "Immediate": "0x10000" + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 7044, + [ + { + "LinearSplit": { + "value": { + "Deref": { + "register": "AP", + "offset": -1 + } + }, + "scalar": { + "Immediate": "0x8000000000000110000000000000000" + }, + "max_x": { + "Immediate": "0xfffffffffffffffffffffffffffffffe" + }, + "x": { + "register": "AP", + "offset": 0 + }, + "y": { + "register": "AP", + "offset": 1 + } + } + } + ] + ], + [ + 7071, + [ + { + "TestLessThan": { + "lhs": { + "BinOp": { + "op": "Add", + "a": { + "register": "AP", + "offset": -1 + }, + "b": { + "Immediate": "0x0" + } + } + }, + "rhs": { + "Immediate": "0x10000" + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 7075, + [ + { + "LinearSplit": { + "value": { + "Deref": { + "register": "AP", + "offset": -1 + } + }, + "scalar": { + "Immediate": "0x8000000000000110000000000000000" + }, + "max_x": { + "Immediate": "0xfffffffffffffffffffffffffffffffe" + }, + "x": { + "register": "AP", + "offset": 0 + }, + "y": { + "register": "AP", + "offset": 1 + } + } + } + ] + ] + ], + "entry_points_by_type": { + "EXTERNAL": [ + { + "selector": "0x462b1b2d0b30d80be98c4aec16f07b72212bbef41ac45680ed94e954a6aa9", + "offset": 503, + "builtins": ["range_check"] + }, + { + "selector": "0x1feb29d0d6e8c4ba7a71db4cdaa24898ddd8bb350e724f844145997afee9c9", + "offset": 2600, + "builtins": ["range_check"] + }, + { + "selector": "0x78664aa9f94155a6e6acf3aa0add2ce6fcf36349488671af774d676363e0c7", + "offset": 191, + "builtins": ["range_check"] + }, + { + "selector": "0xe1eafdb08801cfc555a49e25dabfd7aa4ed7b2dd5c7e2c5a6930eac6d1b54c", + "offset": 2429, + "builtins": ["range_check"] + }, + { + "selector": "0x106f418ef7e2ea39027bcde47d5f0a54ed68fe34aa69b24c3a162def52a841b", + "offset": 1902, + "builtins": ["range_check"] + }, + { + "selector": "0x11fdea672ded06956bdd64d89fd111661735e88595f88c1199f648fe3c2dd15", + "offset": 2697, + "builtins": ["range_check"] + }, + { + "selector": "0x126587e6b203b756642ff0bd9f92e84ef609cf2a02b516fbf2d94f36a73b83e", + "offset": 959, + "builtins": ["range_check"] + }, + { + "selector": "0x1303ef00936936490ad20afec7fbe2bf74669665b2a2249945ff561debad733", + "offset": 1105, + "builtins": ["range_check"] + }, + { + "selector": "0x13d3b1aae5fa65a483db7c67c98dca6aac27353970caa114d112c4b6de8ec73", + "offset": 1640, + "builtins": ["range_check"] + }, + { + "selector": "0x145f0cd3e37db4233ce4d6b84935d9b32387d72eb53713e78e2ec56cc6fdf5d", + "offset": 2255, + "builtins": ["range_check"] + }, + { + "selector": "0x147c0b24e5bfb625956c5a44d3fc84d509b789bf2e5335365c03b9be2d757d3", + "offset": 2163, + "builtins": ["range_check"] + }, + { + "selector": "0x1785e0d94a5ba07a47865d69afdf914dad65466b25d38cb78cb741fac447ba8", + "offset": 2917, + "builtins": ["range_check"] + }, + { + "selector": "0x1c7564da2ac3c0ee05570d52004d51604c5315131cafd67610b2e629bf4fd7c", + "offset": 2033, + "builtins": ["range_check"] + }, + { + "selector": "0x1d39fadfe7e2621092d7d0a467672f0eb0ad03c5926829d40ceefa7bcd10b80", + "offset": 3030, + "builtins": ["range_check"] + }, + { + "selector": "0x1ff9f9a5d04b7955383039cae30cd6c0d1cb3c0e04a579f393a7ac9cf39c7b3", + "offset": 778, + "builtins": ["range_check"] + }, + { + "selector": "0x208b88c80fabc1b03f3c78a09aaa1a693a5bb1366271a1c6b9e7971aa325116", + "offset": 2525, + "builtins": ["range_check"] + }, + { + "selector": "0x21b020335325fcef65a03b765adaefcc9fb4eccceb8e0293516736095e8cceb", + "offset": 335, + "builtins": ["range_check"] + }, + { + "selector": "0x242ba12536f9ac18cffcedd5588e2922a17c0f453a064a64e62df6d3f6f8dce", + "offset": 647, + "builtins": ["range_check"] + }, + { + "selector": "0x265cf503e1b425e68026a65eb872306eb863eb6ba526cddc50fd44d00d8e180", + "offset": 0, + "builtins": ["range_check"] + }, + { + "selector": "0x29a68d48876fa0d864a616e212175e42824be1cdcb35bcd2e05b302042e491f", + "offset": 1269, + "builtins": ["range_check"] + }, + { + "selector": "0x31c18e21d8e75a5f2f6f1330c56da1f8b2fd93568002ef0d15bcce9c5644c2b", + "offset": 1495, + "builtins": ["range_check"] + }, + { + "selector": "0x36e432757f2854d382b66d849ed9a3edf35fdbf55a7c83296142cf7b89b0573", + "offset": 1755, + "builtins": ["range_check"] + }, + { + "selector": "0x3bb1cf9f6b291f5c63c8ecbfcf8cd522642fdc7ec277c2fddb7dc069cd05ced", + "offset": 2820, + "builtins": ["range_check"] + }, + { + "selector": "0x3c694eba4d500b140694d8f7da3f85031f4d4827b57da58cb5f2bd1ab74e5ab", + "offset": 1382, + "builtins": ["range_check"] + } + ], + "L1_HANDLER": [], + "CONSTRUCTOR": [] + } +} diff --git a/__mocks__/cairo/cairo2120/enums_test_option.contract_class.json b/__mocks__/cairo/cairo2120/enums_test_option.contract_class.json new file mode 100644 index 000000000..6043d6882 --- /dev/null +++ b/__mocks__/cairo/cairo2120/enums_test_option.contract_class.json @@ -0,0 +1,4894 @@ +{ + "sierra_program": [ + "0x1", + "0x7", + "0x0", + "0x2", + "0xc", + "0x0", + "0x3f0", + "0x10", + "0x7c", + "0x52616e6765436865636b", + "0x800000000000000100000000000000000000000000000000", + "0x537472756374", + "0x800000000000000f00000000000000000000000000000001", + "0x0", + "0x16a4c8d7c05909052238a862d8cc3e7975bf05a07b3a69c6b28951083a6d672", + "0x753136", + "0x800000000000000700000000000000000000000000000000", + "0x800000000000000700000000000000000000000000000004", + "0x2ee1e2b1b89f8c495f200e4956278a4d47395fe262f27b52e5865c9524c08c3", + "0x1", + "0x2", + "0x456e756d", + "0x800000000000000700000000000000000000000000000003", + "0x34ba6bae0cf8d1255e30a917ff6107d46826b40196a72d0e7e40774c78e1308", + "0x3", + "0x4", + "0x4172726179", + "0x800000000000000300000000000000000000000000000001", + "0x10", + "0x800000000000000300000000000000000000000000000003", + "0xea899504b4052c27cccf9971daead33001122c7badf30382a469a86d9f8143", + "0x6", + "0xe", + "0x536e617073686f74", + "0x800000000000000700000000000000000000000000000001", + "0x8", + "0x800000000000000700000000000000000000000000000002", + "0x1baeba72e79e9db2587cf44fedb2f3700b2075a5e8e39a562584862c4b71f62", + "0x9", + "0xa", + "0x7", + "0x38bd985835a9a53895c52b1878f7fea1ea86c6c36372a6554306b7deed44be6", + "0xb", + "0xc", + "0x66656c74323532", + "0x556e696e697469616c697a6564", + "0x800000000000000200000000000000000000000000000001", + "0x753332", + "0x753634", + "0x11", + "0x2daa4fab7cd27a2ed3cc28ccfb3cfca70ad3c000028aa10db2f4783fcefd345", + "0x12", + "0x14", + "0x120fbeae2508a96307cd9d3cd58ad37fd8f6a1ee44e75a9df62b5b86ba2ee2a", + "0x15", + "0x16", + "0x3590158452123707463380113690aa6c9c45f48ef55005fd27b035b47348988", + "0x17", + "0x426f78", + "0x370026b31ac236e06160ec5dd0d3f03ae6a16e3a80a7672d579c97014775824", + "0x1a", + "0x32d2062143aba742e856373db8854bb12033d85fbe03e144a91067f9e4d52f3", + "0x1b", + "0x62", + "0x2f99b21e21b1ea68f77345d47bde74e1e6c34d34cf69c71cbefd71b887b142f", + "0x1f", + "0x20", + "0x762af7d47e06fd1456367bdd600ec298e8ca9b72ada03929e234ae0a6974fa", + "0x21", + "0x2c", + "0x172b2d029d59f97d93dd24b7cc98c01ca8efd7bf422afd18e9041d6a1a5c170", + "0x24", + "0x25", + "0x30f87c80a9ff91f3ba0997da70c24279680d81f2429f998f2964b1a555ebb1a", + "0x26", + "0x436f6e7374", + "0x800000000000000000000000000000000000000000000002", + "0x4f7574206f6620676173", + "0x4661696c656420746f20646573657269616c697a6520706172616d202331", + "0x496e70757420746f6f206c6f6e6720666f7220617267756d656e7473", + "0x75313238", + "0x7538", + "0x3be6f13b1eeea8f6d4a3f8f94ff73e9fcdb11e0fc6bbda219a39d7ee87174b2", + "0x39f4bddbd30d58053c5c0e4cf215fd40c2ff6254027e1ca82d99dfb9352890f", + "0x2b", + "0x2d", + "0xee6bdef6928642145ee888437aa85c8de49c7818f4182a14a2a976e754de1", + "0x3b9ddf97bd58cc7301a2107c3eabad82196f38221c880cd3645d07c3aac1422", + "0x29f6621519cd76912cfece1d674f3b588713e5ed5f584eaae76037bcf225363", + "0x30", + "0x2b87e8e624ece2f0cf85d181387988b18f6983045a9920dc64764db7b704649", + "0x31", + "0x800000000000000700000000000000000000000000000005", + "0x1ca0859cc72336b50627b89194f06980da93ce94909d112cdc3a765a051f732", + "0x33", + "0x25f9ad655d525bf79405d9b98957b3aa16d86a2669a7252030de6dd582fce7a", + "0x34", + "0x336711c2797eda3aaf8c07c5cf7b92162501924a7090b25482d45dd3a24ddce", + "0x36", + "0x2299982bf733771210a7b4e01be8e699d9c778cc43743de9c81adc233d0c388", + "0x37", + "0x511591274d8813cc87dcfdf4098a0f02d4d964e5252715695c7682ef8ed20c", + "0x38", + "0x39", + "0x1363576206b17df7adacad7f47f20a0558a0e854432cf721f96cbbba837bf12", + "0x3a", + "0x33cff8ca50b98f40b2384a9deb3aa0ab15aaf36318ded0ef9476dabf49bcf59", + "0x3c", + "0x3f17eacf0c93d1c0968ec9606d65005de0d0f783350ed6e8fb034f4e616c4ac", + "0x3d", + "0x2311b30ff91641e03086db219fbd3a339d658feb37d0c9ae93c065185b98998", + "0x3f88fb1329d0c686ba50f926ff79af1c2a252a3594ae051c810b5f9492092f5", + "0x3f", + "0xc3ca175aa1161f5f8990fd287efc42d31a161e1c88dd5023cc11411ad9900e", + "0x40", + "0x19b9ae4ba181a54f9e7af894a81b44a60aea4c9803939708d6cc212759ee94c", + "0x3bc34212d2c42e27596fdda5c1c673422d928dc4f40e1de8c35217d1981d935", + "0x42", + "0x351e72f2e3f133f52891974fa3d211b3e579625b5b15c8d1d0c9db2a1a7d407", + "0x43", + "0x35b26fd36f40720f06990724c28a5d888642e82c23b388420091777a9116b14", + "0xb421937e7950e3d75405b25a18ee821a663b39dd8b4d0e442095780f90f986", + "0x45", + "0x178d6d12f3b1afb72a326e7a35eaad41bcdbd002be501b5e1e9b1b79a05dbf3", + "0x46", + "0x3d020cc8ad67767402690d2175f46e5a6c4bdfeffd34713354e19f97b494da0", + "0x49", + "0x88925dd451d220784df2998389085d5ae6b56c2d22d1d8e151ec9c2e0cd25", + "0x4b", + "0xb72e72e5a63caf9f10f3902eec9557b15660c00d245f7c5ae7157423fff53c", + "0x4c", + "0x325d56ed86ca2c3a275a749ddb80c013c5d9851885ab349d2ad8510170b42d9", + "0x4f", + "0x4e", + "0x185d9b297d752b92e36e7514f2af6ce91e23bd34be2b075b970d46b0f9a3d23", + "0x50", + "0x18c63d3eac6cdb8f2492ed432412542dce6b4ae731500e7570a41938aa68948", + "0x52", + "0x18881bb414cda2bb967493bb34bf6902e0f92d7dcdc5ed5c30dc67c9a90fcff", + "0x54", + "0x19f021de67a29d8733a584446c0a0c78f9c6bce2583e229f9a4bccd8d724d72", + "0x56", + "0x22493ed12362cd6b4b118733fccc20ee3faf6d6546367fcd35d931dc90833e3", + "0x57", + "0x3a6cffe2561983a3685045e4600085227508651a8efcafe6a1bc1f70802e054", + "0x2ae68393e5819b8dee9845b8c1ec8dbedfba9bbd68e7253e8f59d867460c0dc", + "0x59", + "0x5b", + "0x3fe244a46c1456c4718ef097f5cdd18149ca294c5bdffdd22b7e6f9540cf113", + "0x5c", + "0x3e914fa4847734da785313048196c36310337c36df9be4ce4ff971d838f07c1", + "0x5e", + "0x3850676e95044bcafdab66d09d52fbdc6c05024f661372f2c15e33951a241de", + "0x5f", + "0x141d61b4bf9a6647000e805a7f949d847cbe9ca009321b7a63424d9742a8912", + "0x1df5abf484ff46fcefc4c239b5c351ce9c47777b7e1f26b505f9e9bc5823115", + "0x154df121ec994a15880fd221c3fbaacd125f6c4807302f13f9a52cf62f5ce4e", + "0x33c2f5a7e0fffa93f1a29733d5927eb7ad69162f4de1c4fa05018aba200144e", + "0x63", + "0x183950d5e3273ec891c75fa886c8de01eadccb5ff4ca417397ccb80471b8bea", + "0x67", + "0x15c0a3cc422e9cead14b117474a7e040bc249953f092f790d2238c03d2d4a0b", + "0x68", + "0x107c4c114adf6d3b44474301d2cdc063e750f40c4d85ae2bcb9d2c5609cf970", + "0x74584e9f10ffb1a40aa5a3582e203f6758defc4a497d1a2d5a89f274a320e9", + "0x6b", + "0x34c1a4ee6ef3ec231b7e21635f0ab0f5e73f747e42beb02d65fc54c8e0e0575", + "0x6d", + "0x7613c7135b064a210243c4d523d64a3e8bb1803abc97c950d43a9c0340ac10", + "0x70", + "0x47d50ab84c14028e58f88d9f15b2547ac4d9e3ddb79a76ff9dbd8f98b6374", + "0x71", + "0x4275696c74696e436f737473", + "0x53797374656d", + "0x9931c641b913035ae674b400b61a51476d506bbe8bba2ff8a6272790aba9e6", + "0x73", + "0x4e6f6e5a65726f", + "0x4761734275696c74696e", + "0x1c2", + "0x7265766f6b655f61705f747261636b696e67", + "0x77697468647261775f676173", + "0x6272616e63685f616c69676e", + "0x7374727563745f6465636f6e737472756374", + "0x61727261795f736e617073686f745f706f705f66726f6e74", + "0x756e626f78", + "0x72656e616d65", + "0x73746f72655f74656d70", + "0x647570", + "0x66656c743235325f69735f7a65726f", + "0x64726f70", + "0x7531365f7472795f66726f6d5f66656c74323532", + "0x72656465706f7369745f676173", + "0x656e756d5f696e6974", + "0x7b", + "0x6a756d70", + "0x79", + "0x636f6e73745f61735f696d6d656469617465", + "0x78", + "0x66656c743235325f737562", + "0x7374727563745f636f6e737472756374", + "0x7a", + "0x66756e6374696f6e5f63616c6c", + "0x18", + "0x77", + "0x76", + "0x6765745f6275696c74696e5f636f737473", + "0x75", + "0x77697468647261775f6761735f616c6c", + "0x61727261795f6e6577", + "0x736e617073686f745f74616b65", + "0x656e61626c655f61705f747261636b696e67", + "0x656e756d5f6d61746368", + "0x7531365f746f5f66656c74323532", + "0x74", + "0x61727261795f617070656e64", + "0x64697361626c655f61705f747261636b696e67", + "0x19", + "0x72", + "0x656e756d5f736e617073686f745f6d61746368", + "0x61727261795f6c656e", + "0x7533325f746f5f66656c74323532", + "0x6e", + "0x1c", + "0x6c", + "0x1d", + "0x6a", + "0x1e", + "0x69", + "0x7374727563745f736e617073686f745f6465636f6e737472756374", + "0x64", + "0x61", + "0x75385f746f5f66656c74323532", + "0x22", + "0x60", + "0x5d", + "0x23", + "0x5a", + "0x7536345f746f5f66656c74323532", + "0x58", + "0x53", + "0x27", + "0x51", + "0x28", + "0x4d", + "0x29", + "0x47", + "0x2a", + "0x44", + "0x7536345f7472795f66726f6d5f66656c74323532", + "0x7533325f7472795f66726f6d5f66656c74323532", + "0x41", + "0x3e", + "0x3b", + "0x2e", + "0x35", + "0x2f", + "0x32", + "0x75313238735f66726f6d5f66656c74323532", + "0x753132385f746f5f66656c74323532", + "0x75385f7472795f66726f6d5f66656c74323532", + "0x13", + "0x616c6c6f635f6c6f63616c", + "0x66696e616c697a655f6c6f63616c73", + "0x73746f72655f6c6f63616c", + "0xd", + "0xf", + "0x5", + "0x1385", + "0xffffffffffffffff", + "0x86", + "0x7d", + "0x48", + "0x8b", + "0x4a", + "0x7f", + "0xfe", + "0xf7", + "0xed", + "0xab", + "0xe7", + "0xd4", + "0xcd", + "0xdd", + "0x103", + "0x18f", + "0x183", + "0x12c", + "0x125", + "0x13a", + "0x188", + "0x17c", + "0x146", + "0x176", + "0x163", + "0x16b", + "0x194", + "0x55", + "0x20b", + "0x204", + "0x1fa", + "0x1b4", + "0x1f4", + "0x1e1", + "0x1da", + "0x1ea", + "0x210", + "0x272", + "0x268", + "0x22c", + "0x262", + "0x24d", + "0x247", + "0x257", + "0x252", + "0x277", + "0x30c", + "0x300", + "0x2a0", + "0x299", + "0x65", + "0x2ae", + "0x305", + "0x2f9", + "0x66", + "0x2ba", + "0x2f3", + "0x2e0", + "0x2d5", + "0x2e8", + "0x311", + "0x384", + "0x378", + "0x6f", + "0x371", + "0x36a", + "0x33a", + "0x364", + "0x35d", + "0x389", + "0x37d", + "0x3f9", + "0x3eb", + "0x3b7", + "0x3b1", + "0x3ab", + "0x3c2", + "0x3f0", + "0x3e4", + "0x3cd", + "0x3df", + "0x3fe", + "0x3f2", + "0x45b", + "0x451", + "0x41a", + "0x44b", + "0x7e", + "0x438", + "0x80", + "0x81", + "0x82", + "0x83", + "0x84", + "0x440", + "0x460", + "0x4b7", + "0x4ad", + "0x47c", + "0x85", + "0x4a7", + "0x492", + "0x49c", + "0x4bc", + "0x53a", + "0x87", + "0x88", + "0x533", + "0x89", + "0x8a", + "0x529", + "0x4dc", + "0x523", + "0x8c", + "0x8d", + "0x4fa", + "0x8e", + "0x50d", + "0x8f", + "0x90", + "0x91", + "0x92", + "0x93", + "0x51c", + "0x53f", + "0x5a1", + "0x94", + "0x95", + "0x597", + "0x55b", + "0x96", + "0x591", + "0x97", + "0x98", + "0x578", + "0x586", + "0x99", + "0x5a6", + "0x62c", + "0x9a", + "0x9b", + "0x625", + "0x9c", + "0x9d", + "0x61b", + "0x5c6", + "0x9e", + "0x615", + "0x9f", + "0xa0", + "0x5e8", + "0x5ff", + "0xa1", + "0x60e", + "0x631", + "0x698", + "0xa2", + "0xa3", + "0x68e", + "0x64d", + "0xa4", + "0x688", + "0xa5", + "0xa6", + "0x673", + "0x668", + "0x67d", + "0x69d", + "0x702", + "0xa7", + "0xa8", + "0x6f8", + "0x6b9", + "0xa9", + "0x6f2", + "0xaa", + "0x6cf", + "0x6e7", + "0xac", + "0x6df", + "0x707", + "0x744", + "0x73a", + "0x723", + "0x735", + "0x749", + "0x7b9", + "0x7ad", + "0xad", + "0x7a7", + "0x7a0", + "0xae", + "0x799", + "0x771", + "0x792", + "0xaf", + "0xb0", + "0xb1", + "0xb2", + "0x7be", + "0x7b2", + "0x811", + "0xb3", + "0xb4", + "0x807", + "0x7da", + "0xb5", + "0x801", + "0xb6", + "0xb7", + "0xb8", + "0x816", + "0x843", + "0x82c", + "0x83e", + "0x848", + "0x89d", + "0xb9", + "0xba", + "0x893", + "0x864", + "0xbb", + "0x88d", + "0xbc", + "0xbd", + "0xbe", + "0xbf", + "0xc0", + "0x8a2", + "0x90d", + "0xc1", + "0xc2", + "0x906", + "0xc3", + "0xc4", + "0x8fc", + "0x8c2", + "0xc5", + "0x8f6", + "0xc6", + "0xc7", + "0xc8", + "0xc9", + "0xca", + "0xcb", + "0xcc", + "0x8ef", + "0x912", + "0x967", + "0xce", + "0x95d", + "0x92e", + "0xcf", + "0x957", + "0xd0", + "0xd1", + "0xd2", + "0xd3", + "0x96c", + "0x9c9", + "0xd5", + "0xd6", + "0x9bf", + "0x988", + "0xd7", + "0x9b9", + "0xd8", + "0xd9", + "0xda", + "0xdb", + "0xdc", + "0x9a6", + "0x9ae", + "0x9ce", + "0xa4e", + "0xa40", + "0xa38", + "0xde", + "0xdf", + "0xa30", + "0x9f4", + "0xe0", + "0xe1", + "0xa29", + "0xe2", + "0xe3", + "0xe4", + "0xe5", + "0xe6", + "0xe8", + "0xe9", + "0xea", + "0xa14", + "0xa1e", + "0xa53", + "0xa47", + "0xa45", + "0xeb", + "0xec", + "0xee", + "0xac5", + "0xaa8", + "0xa99", + "0xef", + "0xf0", + "0xf1", + "0xf2", + "0xa93", + "0xf3", + "0xf4", + "0xa8c", + "0xf5", + "0xf6", + "0xf8", + "0xf9", + "0xfa", + "0xaa1", + "0xfb", + "0xfc", + "0xaba", + "0xfd", + "0xaed", + "0xff", + "0xae3", + "0x100", + "0x101", + "0x102", + "0x104", + "0x105", + "0x106", + "0xb2f", + "0xb2b", + "0xb26", + "0xb21", + "0xb1b", + "0xb15", + "0x107", + "0xb32", + "0xb80", + "0xb64", + "0x108", + "0x109", + "0xb5e", + "0x10a", + "0x10b", + "0xb55", + "0x10c", + "0x10d", + "0x10e", + "0x10f", + "0x110", + "0x111", + "0x112", + "0xb75", + "0x113", + "0xba8", + "0x114", + "0xb9e", + "0x115", + "0x116", + "0xc0f", + "0xbf8", + "0xbf2", + "0xbdd", + "0xbd9", + "0xbd5", + "0x117", + "0x118", + "0x119", + "0xbf5", + "0xbed", + "0xc12", + "0x11a", + "0xc07", + "0x11b", + "0x11c", + "0xc5f", + "0xc38", + "0xc34", + "0x11d", + "0xc30", + "0x11e", + "0xc62", + "0xc56", + "0xc52", + "0xc4e", + "0x11f", + "0xcd6", + "0xc76", + "0x120", + "0x121", + "0x122", + "0x123", + "0xcc3", + "0xca1", + "0xc99", + "0xc91", + "0xcaf", + "0xcca", + "0xcba", + "0x124", + "0xccd", + "0x126", + "0xd0f", + "0x127", + "0x128", + "0xd05", + "0x129", + "0xcf6", + "0xcfe", + "0x12a", + "0x12b", + "0xd63", + "0xd4c", + "0xd48", + "0xd44", + "0xd3f", + "0xd3a", + "0x12d", + "0x12e", + "0xd66", + "0xd5b", + "0x12f", + "0x130", + "0xdf1", + "0xda7", + "0xd9e", + "0xd98", + "0xd91", + "0x131", + "0x132", + "0x133", + "0x134", + "0x135", + "0xdde", + "0x136", + "0xde5", + "0xdd6", + "0x137", + "0x138", + "0x139", + "0xdd0", + "0x13b", + "0x13c", + "0xdc9", + "0x13d", + "0x13e", + "0xe19", + "0x13f", + "0x140", + "0xe0f", + "0x141", + "0x142", + "0x143", + "0xe7b", + "0x144", + "0xe41", + "0xe3b", + "0x145", + "0x147", + "0x148", + "0xe72", + "0xe6e", + "0xe6a", + "0xe65", + "0xe60", + "0x149", + "0x14a", + "0xe7e", + "0xee5", + "0xeae", + "0xea8", + "0xea1", + "0x14b", + "0x14c", + "0x14d", + "0x14e", + "0x14f", + "0xecd", + "0x150", + "0xeda", + "0x151", + "0x152", + "0xed4", + "0x153", + "0x154", + "0xec7", + "0x155", + "0x156", + "0xf36", + "0xf0f", + "0xf09", + "0x157", + "0x158", + "0x159", + "0x15a", + "0xf2d", + "0xf29", + "0xf25", + "0x15b", + "0xf39", + "0xfac", + "0xf5f", + "0xf5b", + "0xf57", + "0x15c", + "0x15d", + "0x15e", + "0xfaf", + "0xfa3", + "0xf9d", + "0xf88", + "0xf84", + "0xf80", + "0x15f", + "0x160", + "0xfa0", + "0xf98", + "0x161", + "0x162", + "0xfee", + "0xfea", + "0xfe5", + "0xfe0", + "0xfda", + "0xfd4", + "0x164", + "0x165", + "0xff1", + "0x166", + "0x102c", + "0x1028", + "0x1021", + "0x101c", + "0x167", + "0x168", + "0x1014", + "0x169", + "0x16a", + "0x16c", + "0x16d", + "0x16e", + "0x102f", + "0x1025", + "0x16f", + "0x170", + "0x171", + "0x1082", + "0x172", + "0x107c", + "0x106c", + "0x173", + "0x174", + "0x175", + "0x1065", + "0x177", + "0x178", + "0x105d", + "0x179", + "0x17a", + "0x17b", + "0x17d", + "0x17e", + "0x17f", + "0x1075", + "0x180", + "0x181", + "0x1088", + "0x182", + "0x10c7", + "0x10c3", + "0x10bc", + "0x10b7", + "0x184", + "0x10af", + "0x185", + "0x186", + "0x187", + "0x189", + "0x10ca", + "0x10c0", + "0x18a", + "0x111c", + "0x1118", + "0x1111", + "0x10fb", + "0x10f6", + "0x10f1", + "0x18b", + "0x18c", + "0x18d", + "0x18e", + "0x1115", + "0x110b", + "0x111f", + "0x190", + "0x116c", + "0x1145", + "0x1141", + "0x113d", + "0x191", + "0x192", + "0x193", + "0x116f", + "0x1163", + "0x115f", + "0x115b", + "0x195", + "0x196", + "0x197", + "0x198", + "0x11b7", + "0x1189", + "0x199", + "0x19a", + "0x19b", + "0x11a7", + "0x119f", + "0x19c", + "0x19d", + "0x11ae", + "0x19e", + "0x120c", + "0x1206", + "0x11f7", + "0x11f0", + "0x11e7", + "0x19f", + "0x1a0", + "0x1a1", + "0x1a2", + "0x11fd", + "0x1a3", + "0x1212", + "0x1258", + "0x122a", + "0x1a4", + "0x1a5", + "0x1a6", + "0x1a7", + "0x1248", + "0x1240", + "0x1a8", + "0x1a9", + "0x124f", + "0x1aa", + "0x1ab", + "0x12ad", + "0x12a7", + "0x1298", + "0x1291", + "0x1288", + "0x1ac", + "0x1ad", + "0x1ae", + "0x1af", + "0x1b0", + "0x129e", + "0x1b1", + "0x1b2", + "0x12b3", + "0x12f5", + "0x12f1", + "0x12ec", + "0x12e7", + "0x12e1", + "0x12db", + "0x1b3", + "0x1b5", + "0x12f8", + "0x1b6", + "0x133a", + "0x130c", + "0x1b7", + "0x1b8", + "0x1b9", + "0x1ba", + "0x132a", + "0x1322", + "0x1bb", + "0x1331", + "0x1bc", + "0x1bd", + "0x137d", + "0x1379", + "0x1374", + "0x136f", + "0x1369", + "0x1363", + "0x1be", + "0x1bf", + "0x1c0", + "0x1380", + "0x1c1", + "0x217", + "0x27e", + "0x318", + "0x390", + "0x405", + "0x467", + "0x4c3", + "0x546", + "0x5ad", + "0x638", + "0x6a4", + "0x70e", + "0x750", + "0x7c5", + "0x81d", + "0x84f", + "0x8a9", + "0x919", + "0x973", + "0x9d5", + "0xa5a", + "0xa5e", + "0xa62", + "0xa66", + "0xad0", + "0xaf6", + "0xb37", + "0xb8b", + "0xbb1", + "0xc17", + "0xc67", + "0xce0", + "0xd18", + "0xd6b", + "0xdfc", + "0xe22", + "0xe83", + "0xef0", + "0xf3e", + "0xfb4", + "0xff6", + "0x1034", + "0x1091", + "0x10cf", + "0x1124", + "0x1174", + "0x117a", + "0x11c1", + "0x121b", + "0x1262", + "0x12bc", + "0x12fd", + "0x1344", + "0xa567", + "0xe0340a0140400c0c02c0c02c0c02c0a0140900c0801c060140400c0200400", + "0xb068190600b04c120440b05c0b058050540d0500b04c120440b0400b03c05", + "0x150341b02c0b02c0a0141500c2002c1f02c0a0141500c1e02c1d0141c00c1b", + "0xb0500b0300b028050240302028020270600b098250202408c0b0880b08405", + "0x2d014150342c02c0c02c0a0141500c0c02c130481102c2b02c2a0140e03429", + "0xd0300b0683208c0b0c40b0c0050540d0bc0b07c0b02805054030440b0b80b", + "0x1a0c82302c3602c35014150343402c1f02c0a0141500c1102c2c02c3301415", + "0x5054030440b0e40b0e0050540d05c0b0500b02805054030500b068320dc0b", + "0x3e014150343d02c130483d02c1a0c82302c3c02c3b014150343a02c1f02c0a", + "0xc0600b1104308c0b1080b104050540d1000b07c0b02805054030440b0fc0b", + "0x2902c3d02c4a0140e0340812408120470301802c4410c460301802c4410c45", + "0x30440b0f40b13c050380d0440b1340b138050380d1340b1300b12c0503803", + "0xc02c0c02c0c02c0a0145400c1102c5302c520140e0345102c1402c500140e", + "0x50700305c0b068190440b1600b15c050380d1580b0300b15405038030300b", + "0x1f02c0a0140e00c1102c5e02c5d0140e0345c02c0c02c5b0140e00c5a02c59", + "0x5038030a40b0500b0300b0f40b028051500308c0b1840b180050540d17c0b", + "0x670140e00c1402c2902c660140e00c1102c6502c640140e0346302c0c02c62", + "0xb1b0050380d0440b0500b1ac050380d0440b1a80b1a4050380d1a00b0a40b", + "0x7202c710140e0340c02c3d02c700140e0341102c6f02c6e0140e0346d02c3d", + "0xb068190b80b0e40b1d4050540d0b80b068190440b1d00b1cc050380d0500b", + "0x2302c7a02c79014150347802c1f02c0a0141500c1102c7602c770141503476", + "0xb1f00b1ec050380d0500b0500b0500b02805024030300b0300b0280503803", + "0x3f02c82014150348102c800141c00c2c02c1a0641102c7f02c7e0140e0347d", + "0x50540d2140b07c0b02805054030440b20c0b210050540d20c0b068190b00b", + "0x3702c130481102c8a02c890140e0341102c6802c880140e0342302c8702c86", + "0xb07c0b02805054030440b22c0b238050540d2340b230050700322c0b06819", + "0x1102c0c02c930140e0341102c7202c920140e0342302c9102c90014150348f", + "0xd0e80b068190e40b068190440b2580b254050380d0440b0dc0b250050380d", + "0xe0342302c9a02c99014150349802c1f02c0a0141500c1102c3a02c9701415", + "0xb0681908c0b2740b270050540d0440b06c0b02805054030440b1f00b26c05", + "0x1f02c0a0141500c1102c4002ca0014150344002c1a0649f02c9e0141c00c3f", + "0xa5020a40140c0600b1104307c0b028050700308c0b28c0b288050540d2840b", + "0x22a41802c1a0c81802c1a2a00b0301802c4410c2302ca702ca60141503402", + "0xb2c81802c0b2c41802c0b2c01802c0b2bc1f02c0b2b8052b4052b0052acaa", + "0xc0dc0b030b8014b7014b60780b02cb20600b02cb5014b40600b02cb30600b", + "0xb2f0bb02c0b2d41e02c0b2d4052e83702c0b2c8b902c0b2c80502c0b2c805", + "0x1002cc10dc0b02cb53000b02cb502c0c0dc0b030b80440b02cbf014be2f40b", + "0xb3200531cc602c0b2c805314c302c0b2c8c402c0b2c80b030c302c0c2e0c2", + "0xb02cce3340b02cbc014cc0300b02cb10dc0b02ccb014ca0dc0b02cc90600b", + "0xb2fc1f02c0b2fc1b02c0b2d41b02c0b3240533c1102c0b2d41b02c0b2c818", + "0xc107c0b02cb53401002cc12e40b02cb10140b02cb10140c30c0b030b829c0b", + "0xb2d4a102c0b32ca302c0b2b8d102c0b32c360400b3041f02c0b2c8340400b", + "0xb23540b02cbf014d40f40b02cd327c0b02cb31000b02cd21000b02cc91000b", + "0xc2e0d902c0b32cd80400b3049d02c0b2b8d702c0b32cd60400b304d502c0b", + "0xb02cae3640b02cc93640b02cb502c0c3640b030b83640b02cb20140c3640b", + "0x3a02c0b2d49802c0b32c9a02c0b2b8db02c0b32cda0400b3041402c0b2c47c", + "0xb21700b02cbf0500b02cd31680b02cb30e40b02cdc0e80b02cd20e80b02cc9", + "0xb32c9602c0b3249602c0b2d4dd02c0b32c3a0400b304390400b3045c02c0b", + "0xc3780b030b83780b02cb20140c3780b030b83780b02ccb0f01002cc12580b", + "0xb2c83702c0b3200537c3d02c0b2c47202c0b32cde02c0b324de02c0b2d40b", + "0xb02cc922c0b02cb523c0b02ccb2440b02cae3840b02ccb3801002cc122c0b", + "0xc02c0b2d4e30400b304e202c0b2c8e202c0b2fc3702c0b34c8d02c0b2cc8b", + "0xae1a00b02cb32280b02ccb2280b02cc92280b02cb53900b02ccb0fc1002cc1", + "0x7202c0b3247202c0b2d42902c0b2d4053942902c0b2c41402c0b2d46802c0b", + "0xd220c0b02cc920c0b02cb52140b02ccb21c0b02cae3980b02ccb1001002cc1", + "0xb304e702c0b2c8e702c0b2fc0c02c0b34c8102c0b2ccd702c0b2c48302c0b", + "0xb02cae1fc0b02ccb1fc0b02cc91fc0b02cb53a40b02ccb3a01002cc110810", + "0x7602c0b3247602c0b2d47802c0b32c7a02c0b2b8eb02c0b32cea0400b3047d", + "0xcb1d00b02cc91d00b02cb53b40b02ccb3b01002cc10b80b02cdc1d80b02cd2", + "0xb32c6f02c0b32c6f02c0b3246f02c0b2d4ef02c0b32cee0400b3047402c0b", + "0x1002cc11a00b02cb21a00b02cb51a00b02cc91a00b02cbf014f1014f01b40b", + "0x3d0400b3046a02c0b2b86a02c0b2cc6a02c0b3246a02c0b2d4f202c0b32c4c", + "0xae18c0b02cb51940b02cae1940b02cb31940b02cc91940b02cb53cc0b02ccb", + "0xb3245e02c0b2d45f02c0b32c6102c0b2b8f402c0b32c4d0400b3046302c0b", + "0xb02cae1700b02cb11700b02cb31700b02cb51780b02cae1780b02cb31780b", + "0x5802c0b2b85802c0b2cc5802c0b3245802c0b2d4f602c0b32cf50400b3045c", + "0xb314c0b02cc914c0b02cb53e00b02ccb3dc1002cc11580b02cae1580b02cb5", + "0xf702c0b32c510400b304053e45102c0b32c5102c0b2d45302c0b2b85302c0b", + "0xb33d40b02cb23d40b02cb53d40b02cc93d40b02cbf1340b02cb51300b02cb5", + "0x530400b304ee02c0b2f04d02c0b32c053e84c02c0b2c4f502c0b2b8f502c0b", + "0xae3a00b02ccb3e01002cc10fc0b02cb20f40b02cc83a80b02cbc3b00b02cbc", + "0xc2e0a302c0b2fc05030a102c0c2e0050304002c0c2e04002c0b32c4202c0b", + "0xb802c0c2840b030b802c0c3440b030b80440b02cb13440b02cb20140c3440b", + "0x9d02c0b2fc9f02c0b2d43d02c0b2c03d02c0b2bcd502c0b2b80b0304002c0c", + "0xc11f00b02cbf02c0c35c0b030b83540b02cb535c0b02cb20140c35c0b030b8", + "0x9802c0c2e0050303a02c0c2e03a02c0b32c3c02c0b2b8e002c0b32c560400b", + "0xb030b802c0c2600b030b836c0b02cb20140c36c0b030b82680b02cbf0140c", + "0x9602c0c2e05a02c0b2d41402c0b2c01402c0b2bc0b0303a02c0c2e00b030db", + "0xb030b802c0c2580b030b80780b02cb13740b02cb20140c3740b030b80140c", + "0xb2fc050308f02c0c2e00b0307202c0c2e0050307202c0c2e0053ec0b030dd", + "0xb030b802c0c23c0b030b80dc0b02cce3840b02cb20140c3840b030b82440b", + "0xc2e0e202c0b2d48d02c0b2d43702c0b2c03702c0b2bce202c0b2b80b030e1", + "0xc3900b030b802c0c2280b030b83900b02cb20140c3900b030b80140c2280b", + "0xb2c805030e602c0c2e08702c0b2fc050308502c0c2e0050308302c0c2e00b", + "0xae3580b02ccb1601002cc10b00b02cb20300b02cc802c0c3980b030b83980b", + "0xb2bce702c0b2b80b0308502c0c2e00b0308302c0c2e03402c0b32c3602c0b", + "0xb80140c1fc0b030b80780b02cb339c0b02cb52040b02cb50300b02cb00300b", + "0xb0307f02c0c2e07d02c0b2fc0b030e902c0c2e0e902c0b2c805030e902c0c", + "0xb02cb20140c3ac0b030b81e80b02cbf0140c1e00b030b80140c1d80b030b8", + "0xc2e02f02c0b32c3102c0b2b8c202c0b32cf60400b3040b030eb02c0c2e0eb", + "0xb02cb20140c3b40b030b80140c1d00b030b802c0c1e00b030b802c0c1d80b", + "0x5030ef02c0c2e0050306f02c0c2e00b0307402c0c2e00b030ed02c0c2e0ed", + "0xb030b802c0c1b40b030b802c0c1bc0b030b80140c1b40b030b83bc0b02cb2", + "0xb3040b030f202c0c2e0f202c0b2c805030f202c0c2e06a02c0b2fc0b030ef", + "0xb20140c3cc0b030b81940b02cbf18c0b02cbf0ac0b02cae3f00b02ccb16810", + "0xb3201802c0b3fc053f81802c0b3f40b030f302c0c2e03d02c0b2d4f302c0b", + "0xb02cc90800b02ccb0880b02cae4000b02ccb1701002cc105c0b02cb20500b", + "0x5030f402c0c2e06102c0b2fc050305f02c0c2e05e02c0b2fc1702c0b2d417", + "0xcb1781002cc14040b02cb502c0c17c0b030b802c0c3d00b030b83d00b02cb2", + "0xf602c0b2c805030f602c0c2e05802c0b2fc5602c0b2fc1002c0b2b90202c0b", + "0xb02cb20140c3e00b030b814c0b02cbf0140c1440b030b802c0c3d80b030b8", + "0x5030f702c0c2e0050304d02c0c2e00b030f802c0c2e00b0305102c0c2e0f8", + "0xb208c0b02cbf02c0b02cbf02c0c3dc0b030b802c0c1340b030b83dc0b02cb2", + "0x3f02c0b2d43d02c0b338e802c0b2c805030e802c0c2e04202c0b2fc2302c0b", + "0xb83800b02cb20140c3800b030b80f00b02cbf0e40b02cbf02c0c3a00b030b8", + "0xd602c0b2c805030d602c0c2e03602c0b2fc050303402c0c2e00b030e002c0c", + "0xb80b80b02cbf02c0c3580b030b802c0c0d00b030b80b00b02cb50300b02cce", + "0xb030c202c0c2e0c202c0b2c805030c202c0c2e03102c0b2fc050302f02c0c", + "0xc3f00b030b83f00b02cb20140c3f00b030b80ac0b02cbf02c0c0bc0b030b8", + "0x1402c0b3390002c0b2c8050310002c0c2e02202c0b2fc050302002c0c2e00b", + "0xb02cb20140c4080b030b80400b02cbf02c0c4000b030b802c0c0800b030b8", + "0x10540811031040300b0140c02c050150402c050140540c0b0310202c0c2e102", + "0x1e031040301b02c110141b02d0402c1002c10014054100b0140c0142005c0c", + "0xb4100b08c0b05c0508c0b4100b07c0b408050150402c05030050880b2f41f", + "0x54100c0600b07805061000310402d0002c1b0150002d0402d0002c2001500", + "0x50780b4100b0780b088050150402d0002c1f014054100b0140c0150102cea", + "0xfc02d0402c2902d02014054100b0140c0142b02ce00a414031040301e02c11", + "0x2e031040302c0440c08c050b00b4100b0b00b080050b00b4100b3f00b05c05", + "0xb4100b0bc0b060053080b4100b4080b400050150402c05030050c40b3582f", + "0xd602d0402cd002c290143602d0402cc202c140143402d0402c2e02d01014d0", + "0xb0500b3f0050150402c05030050145a02c050ac053600b4100b0500b08805", + "0xb4100b3680b050050e40b4100b0c40b404053680b4100b4080b4000501504", + "0xb4080b400050150402c2b02cfc014054100b0140c014054180b0142b0143a", + "0x54180b0142b0143a02d0402c3c02c140143902d0402c1102d010143c02d04", + "0xe04000c0bc053800b4100b0142e014054100b4040b0b0050150402c0503005", + "0x5030050fc0b28c054100c38c0b0780538c0b4100b38c0b0800538c0b4100b", + "0xb4100b1080b308051080b4100b014310144002d0402d0202d00014054100b", + "0xd602d0402ce802c290143602d0402c4002c140143402d0402c1102d01014e8", + "0x10402c05030053b80b1b4ec3a80c4100c3600b044053600b4100b0780b08805", + "0x50d8050150402cd602c34014054100b3b00b340050150402cea02cfc01405", + "0xb0d80b050050d00b4100b0d00b404050f40b4100b1300b358051300b4100b", + "0x3d030360d01102c3d02d0402c3d02cda0140c02d0402c0c02cd80143602d04", + "0xb1340b0e8051340b4100b01439014054100b3b80b3f0050150402c0503005", + "0x50150402c050300514c510309d3dcf5031040304d0d8340403c0144d02d04", + "0x50fc050150402c5602c34014581580c4100b3580b38c053e00b4100b014e0", + "0xb3dc0b400050150402c05030051680b398f602d040305802c40014054100b", + "0xb4100b014ea0145f02d0402c5e02ce80145e02d0402cf602c420145c02d04", + "0x10402c5f3d00c3b0053d00b4100b184f8030ec0146102d0402c6102c2001461", + "0x5014e102c050ac053cc0b4100b18c0b3b8051940b4100b1700b0500518c0b", + "0x10402c050b8051a00b4100b3dc0b400050150402c5a02c4c014054100b0140c", + "0x10402c6802c14014f202d0402c6a3e00c3b0051a80b4100b1a80b080051a80b", + "0x6f1b40c4100b3cc0b134050150402c050f4053cc0b4100b3c80b3b8051940b", + "0x530147202d0402cef02c51014ef02d0402c6f02cf7014054100b1b40b3d405", + "0xb360051940b4100b1940b050053d40b4100b3d40b404051d00b4100b1c80b", + "0x54100b0140c01474030653d41102c7402d0402c7402cda0140c02d0402c0c", + "0x140150702d0402c5102d01014ed02d0402c5302d00014054100b3580b0d005", + "0x54100b0fc0b0b0050150402c05030050150802c050ac051d80b4100b3b40b", + "0x140147802d0402c1102d010150902d0402d0202d00014054100b0780b3f005", + "0x54100b0880b3f0050150402c05030050150a02c050ac051e80b4100b4240b", + "0x50e80b4100b3ac0b050050e40b4100b0440b404053ac0b4100b4080b40005", + "0xb358051f40b4100b014580147a02d0402c3a02c560147802d0402c3902cf8", + "0xc02cd80147a02d0402c7a02c140147802d0402c7802d010147c02d0402c7d", + "0x50150402c05030051f00c1e8780440b1f00b4100b1f00b368050300b4100b", + "0xb0500541c0b4100b05c0b404051fc0b4100b0800b400050150402c1002cf6", + "0xb41c0b404052040b4100b3a40b358053a40b4100b0145a0147602d0402c7f", + "0x10402c8102cda0140c02d0402c0c02cd80147602d0402c7602c140150702d04", + "0x10b40811031040300b0140c02c050150402c05014052040c1d9070440b2040b", + "0x10202d0402d0202c140141102d0402c1102d01014054100b0140c0142005c0c", + "0xc07c0b17c0507c1e06c104100b0410204410178050400b4100b0400b17005", + "0x1802cf4014184000c4100b0880b184050150402c050300508c0b4302202d04", + "0x2902c110142902d0402d0002c10014054100b0140c0141402d0d4040b4100c", + "0xfc02cd0014054100b0ac0b3f0050150402c05030050b00b438fc0ac0c4100c", + "0x2f02d0402c2e02cd60142e02d0402c050d8050150402d0102c63014054100b", + "0x50300b4100b0300b360050780b4100b0780b0500506c0b4100b06c0b40405", + "0x10402c2c02cfc014054100b0140c0142f0301e06c1102c2f02d0402c2f02cda", + "0xc4100c0c41e06c100f0050c40b4100b0c40b0e8050c40b4100b0143901405", + "0x10402d0102c65014d602d0402c05380050150402c05030050d8340310f340c2", + "0xb0140c0143a02d100e40b4100c3680b3cc050150402cd802c63014da3600c", + "0x10402ce002cf2014e002d0402c3c02c6a0143c0e40c4100b0e40b1a00501504", + "0xb4100b0fcd6030ec0143f02d0402c3f02c200143f02d0402c053a80538c0b", + "0xb4100b0e40b1b4051080b4100b38c40030ec014e302d0402ce302c2001440", + "0xe802d0402ce802c6f014d002d0402cd002c14014c202d0402cc202d01014e8", + "0xee02c72014ee3b0ea0410402c423a0d0308113bc051080b4100b1080b3b805", + "0x4c02c740144d02d0402cec02d00014054100b0140c0143d02d111300b4100c", + "0xb1340b050051440b4100b3a80b404050150402cf702c4c014f73d40c4100b", + "0xd6014054100b0140c014054480b0142b014f802d0402cf502cee0145302d04", + "0xb360053b00b4100b3b00b050053a80b4100b3a80b404051580b4100b0f40b", + "0x54100b0140c01456030ec3a81102c5602d0402c5602cda0140c02d0402c0c", + "0xb080053d80b4100b0142e0145802d0402cd002d00014054100b0e80b13005", + "0xb050051440b4100b3080b404051680b4100b3d8d6030ec014f602d0402cf6", + "0xb3d4051785c0310402cf802c4d014f802d0402c5a02cee0145302d0402c58", + "0xb1840b14c051840b4100b17c0b1440517c0b4100b1780b3dc050150402c5c", + "0x10402c0c02cd80145302d0402c5302c140145102d0402c5102d01014f402d04", + "0xb18c050150402c05030053d00c14c510440b3d00b4100b3d00b368050300b", + "0xb18c0b050051940b4100b0d00b4040518c0b4100b0d80b400050150402d01", + "0xb3d8050150402c1402c4c014054100b0140c0140544c0b0142b014f302d04", + "0x10402c1b02d010146a02d0402c6802cd60146802d0402c05160050150402d00", + "0xb4100b1a80b368050300b4100b0300b360050780b4100b0780b0500506c0b", + "0x1b02d01014f202d0402c2302cd6014054100b0140c0146a0301e06c1102c6a", + "0xb3c80b368050300b4100b0300b360050780b4100b0780b0500506c0b4100b", + "0xb400050150402c1002cf6014054100b0140c014f20301e06c1102cf202d04", + "0xb0145a014f302d0402c6d02c140146502d0402c1702d010146d02d0402c20", + "0x10402cf302c140146502d0402c6502d01014ef02d0402c6f02cd60146f02d04", + "0x53bc0c3cc650440b3bc0b4100b3bc0b368050300b4100b0300b360053cc0b", + "0x54100b0140c0142005c0c451020440c4100c02c050300b014054100b01405", + "0x10402c05030050880b4541f0780c4100c06c0b0440506c0b4100b0400b04005", + "0x10002d0402d0002c200150002d0402c2302c170142302d0402c1f02d0201405", + "0x54100b0140c0150102d16015040301802c1e014184000c4100b4000b06c05", + "0x5c0141102d0402c1102d010141402d0402c1e02cf7014054100b4000b07c05", + "0x2c02d04030fc02d07014fc0ac290410402c140440c3b4050500b4100b0500b", + "0x3102d0402c2c02c760142f02d0402d0202d00014054100b0140c0142e02d17", + "0x50d00b4100b0bc0b050053400b4100b0a40b404053080b4100b0ac0b04005", + "0xb0140c014054600b0142b014d602d0402cc202c220143602d0402c3102d09", + "0x53600b4100b4080b400050150402c2b02cf6014054100b0b80b1300501504", + "0xb0140c014054640b0142b0143902d0402cd802c14014da02d0402c2902d01", + "0x3c02d0402c3a4000c0bc050e80b4100b0142e014054100b4040b0b00501504", + "0x50150402c05030053800b468054100c0f00b078050f00b4100b0f00b08005", + "0xb404051000b4100b0fc0b1e0050fc0b4100b01431014e302d0402d0202d00", + "0x1e02c220143602d0402c4002d090143402d0402ce302c14014d002d0402c11", + "0xb3f0050150402c05030053a80b46ce81080c4100c3580b044053580b4100b", + "0xec02d0402c050d8050150402c3602c7a014054100b3a00b340050150402c42", + "0x50d00b4100b0d00b050053400b4100b3400b404053b80b4100b3b00b35805", + "0xb0140c014ee030343401102cee02d0402cee02cda0140c02d0402c0c02cd8", + "0x51300b4100b1300b0e8051300b4100b01439014054100b3a80b3f00501504", + "0x10402c05380050150402c05030053dcf50311c1343d031040304c0d0d00403c", + "0x50150402c050fc050150402c5302c7a014f814c0c4100b0d80b3ac051440b", + "0x53d80b4100b1340b400050150402c05030051600b4745602d04030f802d07", + "0x6102d0402c5f02cf20145f02d0402c5a02c7c0145e1705a0410402c5602c7d", + "0x51940b4100b1780b1f00518c0b4100b3d00b3c8053d00b4100b1700b1f005", + "0xc3b0051a00b4100b1a00b080051a00b4100b014ea014f302d0402c6502cf2", + "0x51b40b4100b18cf2030ec014f202d0402c611a80c3b0051a80b4100b1a051", + "0x51c80b4100b1bc0b3b8053bc0b4100b3d80b050051bc0b4100b3cc6d030ec", + "0xb4100b1340b400050150402c5802c4c014054100b0140c014054780b0142b", + "0x10702d0402ced1440c3b0053b40b4100b3b40b080053b40b4100b0142e01474", + "0xb134050150402c050f4051c80b4100b41c0b3b8053bc0b4100b1d00b05005", + "0x7802c510147802d0402d0902cf7014054100b1d80b3d405424760310402c72", + "0xb3bc0b050050f40b4100b0f40b404053ac0b4100b1e80b14c051e80b4100b", + "0xeb030ef0f41102ceb02d0402ceb02cda0140c02d0402c0c02cd8014ef02d04", + "0xf502d010147d02d0402cf702d00014054100b0d80b1e8050150402c0503005", + "0x50150402c05030050151f02c050ac051fc0b4100b1f40b050051f00b4100b", + "0x1102d01014e902d0402d0202d00014054100b0780b3f0050150402ce002c2c", + "0x50150402c05030050151902c050ac050e40b4100b3a40b050053680b4100b", + "0xb050053680b4100b0440b404052040b4100b4080b400050150402c2202cfc", + "0xb3680b4040520c0b4100b39c0b3580539c0b4100b014580143902d0402c81", + "0x10402c8302cda0140c02d0402c0c02cd80143902d0402c3902c14014da02d04", + "0x2002d00014054100b0400b3d8050150402c050300520c0c0e4da0440b20c0b", + "0x10402c05168051fc0b4100b4800b050051f00b4100b05c0b404054800b4100b", + "0xb4100b1fc0b050051f00b4100b1f00b4040521c0b4100b2140b358052140b", + "0x5014870307f1f01102c8702d0402c8702cda0140c02d0402c0c02cd80147f", + "0x50150402c0503005080170312140811031040300b0140c02c050150402c05", + "0x7f0141002d0402c1002c5c0150202d0402d0202c140141102d0402c1102d01", + "0xb0140c0142302d220880b4100c07c0b3a40507c1e06c104100b0410204410", + "0x5030050500b48d0102d040301802ce7014184000c4100b0880b2040501504", + "0xc0142c02d243f02b031040302902c110142902d0402d0002c10014054100b", + "0x54100b4040b20c050150402cfc02cd0014054100b0ac0b3f0050150402c05", + "0x140141b02d0402c1b02d010142f02d0402c2e02cd60142e02d0402c050d805", + "0x1b0440b0bc0b4100b0bc0b368050300b4100b0300b360050780b4100b0780b", + "0x3a0143102d0402c050e4050150402c2c02cfc014054100b0140c0142f0301e", + "0xb0140c014360d00c494d03080c4100c0c41e06c100f0050c40b4100b0c40b", + "0x54100b3600b20c05368d80310402d0102d20014d602d0402c053800501504", + "0x3c0310402c3902c87014054100b0140c0143a02d260e40b4100c3680b21405", + "0xe00310402ce002ce60143f02d0402ce302cf2014e302d0402c3c02c7c014e0", + "0x53a80b4100b014ea014e802d0402c4202cf20144202d0402c4002c8a01440", + "0xee02d0402c3f3b00c3b0053b00b4100b3a8d6030ec014ea02d0402cea02c20", + "0x3d02d0402ce002ce40144c02d0402ce83b80c3b0053a00b4100b3a00b08005", + "0x50f40b4100b0f40b22c053400b4100b3400b050053080b4100b3080b40405", + "0xc3dc0b1c8053dcf5134104100b1303d340c20448d0144c02d0402c4c02cee", + "0xb1440b1d0053e00b4100b3d40b400050150402c050300514c0b49c5102d04", + "0x10402cf802c14014f602d0402c4d02d01014054100b1600b130051605603104", + "0xb358050150402c05030050152802c050ac051700b4100b1580b3b8051680b", + "0xc02cd8014f502d0402cf502c140144d02d0402c4d02d010145e02d0402c53", + "0x50150402c05030051780c3d44d0440b1780b4100b1780b368050300b4100b", + "0x6102c200146102d0402c050b80517c0b4100b3400b400050150402c3a02c4c", + "0x5f02c14014f602d0402cc202d01014f402d0402c613580c3b0051840b4100b", + "0x6302cf50146518c0c4100b1700b134051700b4100b3d00b3b8051680b4100b", + "0x10402c6802c530146802d0402cf302c51014f302d0402c6502cf7014054100b", + "0xb4100b0300b360051680b4100b1680b050053d80b4100b3d80b404051a80b", + "0x10102c83014054100b0140c0146a0305a3d81102c6a02d0402c6a02cda0140c", + "0x10402cf202c140146d02d0402c3402d01014f202d0402c3602d00014054100b", + "0x10002cf6014054100b0500b130050150402c05030050152902c050ac051bc0b", + "0xb4100b06c0b404051c80b4100b3bc0b358053bc0b4100b01458014054100b", + "0x7202d0402c7202cda0140c02d0402c0c02cd80141e02d0402c1e02c140141b", + "0xb06c0b404051d00b4100b08c0b358050150402c05030051c80c0781b0440b", + "0x10402c7402cda0140c02d0402c0c02cd80141e02d0402c1e02c140141b02d04", + "0x2002d00014054100b0400b3d8050150402c05030051d00c0781b0440b1d00b", + "0x10402c05168051bc0b4100b3b40b050051b40b4100b05c0b404053b40b4100b", + "0xb4100b1bc0b050051b40b4100b1b40b404051d80b4100b41c0b3580541c0b", + "0x5014760306f1b41102c7602d0402c7602cda0140c02d0402c0c02cd80146f", + "0x50150402c0503005080170312a40811031040300b0140c02c050150402c05", + "0x1e06c104100b04011030e20141002d0402c1002c5c0141102d0402c1102d01", + "0xb4100b0780b040050150402c050300508c0b4ac2202d040301f02c8f0141f", + "0x10402c1802cfc014054100b0140c0141402d2c40418031040310002c1101500", + "0xb358050a40b4100b01436014054100b0880b244050150402d0102cd001405", + "0xc02cd80150202d0402d0202c140141b02d0402c1b02d010142b02d0402c29", + "0x50150402c05030050ac0c4081b0440b0ac0b4100b0ac0b368050300b4100b", + "0x1b0403c014fc02d0402cfc02c3a014fc02d0402c050e4050150402c1402cfc", + "0x53080b4100b014e0014054100b0140c014310bc0c4b42e0b00c4100c3f102", + "0x3402cde014054100b0143f014054100b3400b244050d0d00310402c2202ce1", + "0xb3600b080053600b4100b014ea014054100b0140c014d602d2e0d80b4100c", + "0xc0143a02d2f0e40b4100c0d80b100053680b4100b360c2030ec014d802d04", + "0xb3800b3a0053800b4100b0e40b108050f00b4100b0b80b400050150402c05", + "0x10402c3f3680c3b0050fc0b4100b0fc0b080050fc0b4100b014ea014e302d04", + "0x10402c4202cee014e802d0402c3c02c140144202d0402ce31000c3b0051000b", + "0x2e02d00014054100b0e80b130050150402c05030050153002c050ac053a80b", + "0x13102c050ac051300b4100b3680b3b8053b80b4100b3b00b050053b00b4100b", + "0xb050050f40b4100b0b80b400050150402cd602c4c014054100b0140c01405", + "0xb1340b080051340b4100b0142e0144c02d0402cc202cee014ee02d0402c3d", + "0xb3d40b3b8053a00b4100b3b80b050053d40b4100b1344c030ec0144d02d04", + "0x54100b3dc0b3d405144f70310402cea02c4d014054100b0143d014ea02d04", + "0x51580b4100b3e00b14c053e00b4100b14c0b1440514c0b4100b1440b3dc05", + "0xda0140c02d0402c0c02cd8014e802d0402ce802c140142c02d0402c2c02d01", + "0x54100b0880b244050150402c05030051580c3a02c0440b1580b4100b1580b", + "0x51680b4100b1600b050053d80b4100b0bc0b404051600b4100b0c40b40005", + "0x54100b0780b3d8050150402c2302c4c014054100b0140c014054c80b0142b", + "0x140141b02d0402c1b02d010145e02d0402c5c02cd60145c02d0402c0516005", + "0x1b0440b1780b4100b1780b368050300b4100b0300b360054080b4100b4080b", + "0x517c0b4100b0800b400050150402c1002cf6014054100b0140c0145e03102", + "0xb358051840b4100b0145a0145a02d0402c5f02c14014f602d0402c1702d01", + "0xc02cd80145a02d0402c5a02c14014f602d0402cf602d01014f402d0402c61", + "0x50150402c05014053d00c168f60440b3d00b4100b3d00b368050300b4100b", + "0x10402c1002c10014054100b0140c0142005c0c4cd020440c4100c02c050300b", + "0xb07c0b408050150402c05030050880b4d01f0780c4100c06c0b0440506c0b", + "0x10402d0002c1b0150002d0402d0002c200150002d0402c2302c170142302d04", + "0x10402d0002c1f014054100b0140c0150102d35015040301802c1e014184000c", + "0x1402d0402c1402c5c0141102d0402c1102d010141402d0402c1e02cf701405", + "0x5030050b80b4d82c02d04030fc02c96014fc0ac290410402c140440c0dc05", + "0x10402c2b02c100143102d0402c2c02cdd0142f02d0402d0202d00014054100b", + "0xb4100b0c40b4dc050d00b4100b0bc0b050053400b4100b0a40b404053080b", + "0x2e02c4c014054100b0140c014054e00b0142b014d602d0402cc202c2201436", + "0xb4100b0a40b404053600b4100b4080b400050150402c2b02cf6014054100b", + "0x10102c2c014054100b0140c014054e40b0142b0143902d0402cd802c14014da", + "0x10402c3c02c200143c02d0402c3a4000c0bc050e80b4100b0142e014054100b", + "0xb4100b4080b400050150402c05030053800b4e8054100c0f00b078050f00b", + "0x53400b4100b0440b404051000b4100b0fc0b4ec050fc0b4100b01431014e3", + "0x11014d602d0402c1e02c220143602d0402c4002d370143402d0402ce302c14", + "0xd0014054100b1080b3f0050150402c05030053a80b4f0e81080c4100c3580b", + "0x10402cec02cd6014ec02d0402c050d8050150402c3602c98014054100b3a00b", + "0xb4100b0300b360050d00b4100b0d00b050053400b4100b3400b404053b80b", + "0xea02cfc014054100b0140c014ee030343401102cee02d0402cee02cda0140c", + "0xc13034340100f0051300b4100b1300b0e8051300b4100b01439014054100b", + "0x3602c9a0145102d0402c05380050150402c05030053dcf50313d1343d03104", + "0xb4100c3e00b258050150402c050fc050150402c5302c98014f814c0c4100b", + "0xf602d0402cf602c20014f602d0402c053a8050150402c05030051600b4f856", + "0x10402c05030051780b4fc5c02d040305602cdb0145a02d0402cf61440c3b005", + "0xf402d0402c6102c9d0146102d0402c5c02cd90145f02d0402c4d02d0001405", + "0x51940b4100b18c5a030ec0146302d0402c6302c200146302d0402c053a805", + "0x51a80b4100b3cc0b3b8051a00b4100b17c0b050053cc0b4100b3d065030ec", + "0x10402c5e02c42014f202d0402c4d02d00014054100b0140c014055000b0142b", + "0xef02d0402cef02c20014ef02d0402c050b8051bc0b4100b1b40b3a0051b40b", + "0xb4100b3c80b050051d00b4100b1bc72030ec0147202d0402cef1680c3b005", + "0x5802c4c014054100b0140c014055000b0142b0146a02d0402c7402cee01468", + "0xb4100b41c0b0800541c0b4100b0142e014ed02d0402c4d02d00014054100b", + "0xb4100b1d80b3b8051a00b4100b3b40b050051d80b4100b41c51030ec01507", + "0xf7014054100b4240b3d4051e1090310402c6a02c4d014054100b0143d0146a", + "0xb404051f40b4100b3ac0b14c053ac0b4100b1e80b144051e80b4100b1e00b", + "0x7d02cda0140c02d0402c0c02cd80146802d0402c6802c140143d02d0402c3d", + "0x100014054100b0d80b260050150402c05030051f40c1a03d0440b1f40b4100b", + "0x50ac053a40b4100b1f00b050051fc0b4100b3d40b404051f00b4100b3dc0b", + "0x100014054100b0780b3f0050150402ce002c2c014054100b0140c014055040b", + "0x50ac050e40b4100b2040b050053680b4100b0440b404052040b4100b4080b", + "0x539c0b4100b4080b400050150402c2202cfc014054100b0140c014054e40b", + "0xb3580520c0b4100b014580143902d0402ce702c14014da02d0402c1102d01", + "0xc02cd80143902d0402c3902c14014da02d0402cda02d010152002d0402c83", + "0x50150402c05030054800c0e4da0440b4800b4100b4800b368050300b4100b", + "0xb050051fc0b4100b05c0b404052140b4100b0800b400050150402c1002cf6", + "0xb1fc0b404053980b4100b21c0b3580521c0b4100b0145a014e902d0402c85", + "0x10402ce602cda0140c02d0402c0c02cd8014e902d0402ce902c140147f02d04", + "0x14240811031040300b0140c02c050150402c05014053980c3a47f0440b3980b", + "0x1e031040301b02c110141b02d0402c1002c10014054100b0140c0142005c0c", + "0xb4100b08c0b05c0508c0b4100b07c0b408050150402c05030050880b50c1f", + "0x50440b4100b0440b404054040b4100b0780b3dc050600b4100b014d701500", + "0x200141802d0402c1802c9f0150102d0402d0102c5c0150202d0402d0202c14", + "0xc0ac0b510050ac29050104100b400184050204502354054000b4100b4000b", + "0x2f02ca30142f0b80c4100b3f00b284050150402c05030050b00b514fc02d04", + "0xd002c11014d002d0402c2e02c10014054100b0140c014c202d460c40b4100c", + "0x3602cd0014054100b0d00b3f0050150402c05030053580b51c360d00c4100c", + "0xda02d0402cd802cd6014d802d0402c050d8050150402c3102cd1014054100b", + "0x50300b4100b0300b360050a40b4100b0a40b050050500b4100b0500b40405", + "0x10402cd602cfc014054100b0140c014da030290501102cda02d0402cda02cda", + "0xc4100c0e429050100f0050e40b4100b0e40b0e8050e40b4100b0143901405", + "0x3f02cd1014400fc0c4100b0c40b29c050150402c050300538ce0031480f03a", + "0xb3a00b3c8053a00b4100b1080b31805108400310402c4002ccd014054100b", + "0x10402cea3b00c3b0053a80b4100b3a80b080053b00b4100b014e0014ea02d04", + "0xb4100b0f00b050050e80b4100b0e80b404051300b4100b1000b310053b80b", + "0xb3b84c0f03a044bd014ee02d0402cee02cee0144c02d0402c4c02cc30143c", + "0xb400050150402c05030051440b524f702d04030f502c72014f51343d04104", + "0xf802c4d014054100b1580b13005158f80310402cf702c740145302d0402c4d", + "0xb1680b144051680b4100b3d80b3dc050150402c5802cf5014f61600c4100b", + "0x10402c5302c140143d02d0402c3d02d010145e02d0402c5c02c530145c02d04", + "0x51780c14c3d0440b1780b4100b1780b368050300b4100b0300b3600514c0b", + "0x4d02c140143d02d0402c3d02d010145f02d0402c5102cd6014054100b0140c", + "0xc1343d0440b17c0b4100b17c0b368050300b4100b0300b360051340b4100b", + "0xb404051840b4100b38c0b400050150402c3102cd1014054100b0140c0145f", + "0x54100b0140c014055280b0142b0146302d0402c6102c14014f402d0402ce0", + "0xb404051940b4100b0a40b400050150402c2e02cf6014054100b3080b13005", + "0x54100b0140c0140552c0b0142b0146802d0402c6502c14014f302d0402c14", + "0x50a40b4100b0a40b050050500b4100b0500b404051a80b4100b0b00b35805", + "0xb0140c0146a030290501102c6a02d0402c6a02cda0140c02d0402c0c02cd8", + "0xf302d0402c1102d01014f202d0402d0202d00014054100b0880b3f00501504", + "0x1010146f02d0402c6d02cd60146d02d0402c05160051a00b4100b3c80b05005", + "0xb368050300b4100b0300b360051a00b4100b1a00b050053cc0b4100b3cc0b", + "0x50150402c1002cf6014054100b0140c0146f030683cc1102c6f02d0402c6f", + "0x5a0146302d0402cef02c14014f402d0402c1702d01014ef02d0402c2002d00", + "0x6302c14014f402d0402cf402d010147402d0402c7202cd60147202d0402c05", + "0xc18cf40440b1d00b4100b1d00b368050300b4100b0300b3600518c0b4100b", + "0xb0140c0142005c0c531020440c4100c02c050300b014054100b0140501474", + "0x5030050880b5341f0780c4100c06c0b0440506c0b4100b0400b0400501504", + "0x10402d0002c200150002d0402c2302c170142302d0402c1f02d02014054100b", + "0xb0140c0150102d4e015040301802c1e014184000c4100b4000b06c054000b", + "0x14031040301e02c110141e02d0402c1e02c22014054100b4000b07c0501504", + "0xb4100b3f00b05c053f00b4100b0a40b408050150402c05030050ac0b53c29", + "0x5030050c40b5402f0b80c4100c0b011030230142c02d0402c2c02c200142c", + "0xb4100b0b80b404053080b4100b4080b400050150402c2f02cbb014054100b", + "0xc014055440b0142b0143602d0402c1402c220143402d0402cc202c14014d0", + "0x10402c3102d01014d602d0402d0202d00014054100b0500b3f0050150402c05", + "0xb3f0050150402c05030050155202c050ac053680b4100b3580b050053600b", + "0xb0e40b050053600b4100b0440b404050e40b4100b4080b400050150402c2b", + "0x50b8050150402d0102c2c014054100b0140c014055480b0142b014da02d04", + "0x3c02c1e0143c02d0402c3c02c200143c02d0402c3a4000c0bc050e80b4100b", + "0xb0440b4040538c0b4100b4080b400050150402c05030053800b54c054100c", + "0x1040303602c110143602d0402c1e02c220143402d0402ce302c14014d002d04", + "0x10402c4002cd0014054100b0fc0b3f0050150402c05030051080b550400fc0c", + "0x53400b4100b3400b404053a80b4100b3a00b358053a00b4100b0143601405", + "0x1102cea02d0402cea02cda0140c02d0402c0c02cd80143402d0402c3402c14", + "0x53b00b4100b01439014054100b1080b3f0050150402c05030053a80c0d0d0", + "0x5030051343d03155130ee03104030ec0d0d00403c014ec02d0402cec02c3a", + "0xc4100b3dc0b134053dc0b4100b014e0014f502d0402c4c02d00014054100b", + "0x5602d0402cf802c51014f802d0402c5302cf7014054100b1440b3d40514c51", + "0x53d40b4100b3d40b050053b80b4100b3b80b404051600b4100b1580b14c05", + "0xb0140c01458030f53b81102c5802d0402c5802cda0140c02d0402c0c02cd8", + "0xb4100b3d80b050051680b4100b0f40b404053d80b4100b1340b4000501504", + "0xb0780b3f0050150402ce002c2c014054100b0140c014055580b0142b0145c", + "0xb4100b1780b0500517c0b4100b0440b404051780b4100b4080b4000501504", + "0xb4080b400050150402c2202cfc014054100b0140c0140555c0b0142b01461", + "0x10402cd802cf8014da02d0402cf402c14014d802d0402c1102d01014f402d04", + "0x6502d0402c6302cd60146302d0402c05160051840b4100b3680b1580517c0b", + "0x50300b4100b0300b360051840b4100b1840b0500517c0b4100b17c0b40405", + "0x10402c1002cf6014054100b0140c014650306117c1102c6502d0402c6502cda", + "0x5c02d0402cf302c140145a02d0402c1702d01014f302d0402c2002d0001405", + "0x140145a02d0402c5a02d010146a02d0402c6802cd60146802d0402c0516805", + "0x5a0440b1a80b4100b1a80b368050300b4100b0300b360051700b4100b1700b", + "0xc0142005c0c561020440c4100c02c050300b014054100b014050146a0305c", + "0x100440c300050400b4100b0400b170050440b4100b0440b404050150402c05", + "0x10014054100b0140c0142302d590880b4100c07c0b2e40507c1e06c104100b", + "0x50150402c05030050500b569010600c4100c4000b044054000b4100b0780b", + "0x10402c050d8050150402c2202c00014054100b4040b340050150402c1802cfc", + "0xb4100b4080b0500506c0b4100b06c0b404050ac0b4100b0a40b358050a40b", + "0xc0142b0310206c1102c2b02d0402c2b02cda0140c02d0402c0c02cd801502", + "0xb4100b3f00b0e8053f00b4100b01439014054100b0500b3f0050150402c05", + "0x5380050150402c05030050c42f0315b0b82c03104030fc4081b0403c014fc", + "0x10402c050fc050150402cd002c00014343400c4100b0880b418053080b4100b", + "0xb4100b0b80b400050150402c05030053580b5743602d040303402d5c01405", + "0x10402c3a02d5f0143a0e40c4100b3680b57805368360310402c3602d0a014d8", + "0xe30310402c3602d5e014e002d0402c3c02d610143c02d0402c3902d6001405", + "0x51080b4100b1000b3c8051000b4100b0fc0b1f0050150402ce302d620143f", + "0xec014ea02d0402ce83080c3b0053a00b4100b3a00b080053a00b4100b014ea", + "0x51300b4100b3600b050053b80b4100b108ec030ec014ec02d0402ce03a80c", + "0x10402cd602c4c014054100b0140c0140558c0b0142b0143d02d0402cee02cee", + "0x53d40b4100b3d40b080053d40b4100b0142e0144d02d0402c2e02d0001405", + "0x50f40b4100b3dc0b3b8051300b4100b1340b050053dc0b4100b3d4c2030ec", + "0x5302cf7014054100b1440b3d40514c510310402c3d02c4d014054100b0143d", + "0xb0b00b404051600b4100b1580b14c051580b4100b3e00b144053e00b4100b", + "0x10402c5802cda0140c02d0402c0c02cd80144c02d0402c4c02c140142c02d04", + "0x3102d00014054100b0880b000050150402c05030051600c1302c0440b1600b", + "0x16402c050ac051700b4100b3d80b050051680b4100b0bc0b404053d80b4100b", + "0xb01458014054100b0780b3d8050150402c2302c4c014054100b0140c01405", + "0x10402d0202c140141b02d0402c1b02d010145f02d0402c5e02cd60145e02d04", + "0x517c0c4081b0440b17c0b4100b17c0b368050300b4100b0300b360054080b", + "0xb05c0b404051840b4100b0800b400050150402c1002cf6014054100b0140c", + "0xb4100b3d00b358053d00b4100b0145a0145c02d0402c6102c140145a02d04", + "0xc02d0402c0c02cd80145c02d0402c5c02c140145a02d0402c5a02d0101463", + "0xb0140c02c050150402c050140518c0c1705a0440b18c0b4100b18c0b36805", + "0x5c0141102d0402c1102d01014054100b0140c0142005c0c595020440c4100c", + "0x2202d040301f02c960141f0781b0410402c100440c0dc050400b4100b0400b", + "0x18031040310002c110150002d0402c1e02c10014054100b0140c0142302d66", + "0x50150402d0102cd0014054100b0600b3f0050150402c05030050500b59d01", + "0x1b02d010142b02d0402c2902cd60142902d0402c050d8050150402c2202d68", + "0xb0ac0b368050300b4100b0300b360054080b4100b4080b0500506c0b4100b", + "0x50e4050150402c1402cfc014054100b0140c0142b0310206c1102c2b02d04", + "0xc5a42e0b00c4100c3f10206c100f0053f00b4100b3f00b0e8053f00b4100b", + "0x50d0d00310402c2202d05014c202d0402c05380050150402c05030050c42f", + "0xc014d602d6a0d80b4100c0d00b36c050150402c050fc050150402cd002d68", + "0xb3680b274053680b4100b0d80b364053600b4100b0b80b400050150402c05", + "0x10402c3a3080c3b0050e80b4100b0e80b080050e80b4100b014ea0143902d04", + "0x10402ce002cee014e302d0402cd802c14014e002d0402c390f00c3b0050f00b", + "0xb108051000b4100b0b80b400050150402c05030050156b02c050ac050fc0b", + "0xb3a80b080053a80b4100b0142e014e802d0402c4202ce80144202d0402cd6", + "0x4002c14014ee02d0402ce83b00c3b0053b00b4100b3a8c2030ec014ea02d04", + "0xc4100b0fc0b134050150402c050f4050fc0b4100b3b80b3b80538c0b4100b", + "0xf502d0402c4d02c510144d02d0402c3d02cf7014054100b1300b3d4050f44c", + "0x538c0b4100b38c0b050050b00b4100b0b00b404053dc0b4100b3d40b14c05", + "0xb0140c014f7030e30b01102cf702d0402cf702cda0140c02d0402c0c02cd8", + "0x5302d0402c2f02d010145102d0402c3102d00014054100b0880b5a00501504", + "0xb08c0b130050150402c05030050156c02c050ac053e00b4100b1440b05005", + "0x51600b4100b1580b358051580b4100b01458014054100b0780b3d80501504", + "0xda0140c02d0402c0c02cd80150202d0402d0202c140141b02d0402c1b02d01", + "0x54100b0400b3d8050150402c05030051600c4081b0440b1600b4100b1600b", + "0x53e00b4100b3d80b0500514c0b4100b05c0b404053d80b4100b0800b40005", + "0xb0500514c0b4100b14c0b404051700b4100b1680b358051680b4100b0145a", + "0xf814c1102c5c02d0402c5c02cda0140c02d0402c0c02cd8014f802d0402cf8", + "0x503005080170316d40811031040300b0140c02c050150402c05014051700c", + "0x10402c1002c5c0150202d0402d0202c140141102d0402c1102d01014054100b", + "0x2302d700880b4100c07c0b5bc0507c1e06c104100b04102044105b8050400b", + "0xb5cd0102d040301802d72014184000c4100b0880b5c4050150402c0503005", + "0x1743f02b031040302902c110142902d0402d0002c10014054100b0140c01414", + "0xb420050150402cfc02cd0014054100b0ac0b3f0050150402c05030050b00b", + "0x10402c1b02d010142f02d0402c2e02cd60142e02d0402c050d8050150402d01", + "0xb4100b0bc0b368050300b4100b0300b360050780b4100b0780b0500506c0b", + "0x10402c050e4050150402c2c02cfc014054100b0140c0142f0301e06c1102c2f", + "0x360d00c5d4d03080c4100c0c41e06c100f0050c40b4100b0c40b0e8050c40b", + "0xb42005368d80310402d0102d76014d602d0402c05380050150402c0503005", + "0xd002d00014054100b0140c0143a02d780e40b4100c3680b5dc050150402cd8", + "0xe302cf2014e302d0402ce002c6a014e00e40c4100b0e40b1a0050f00b4100b", + "0xb100d6030ec0144002d0402c4002c200144002d0402c053a8050fc0b4100b", + "0xb0e40b1b4053a00b4100b0fc42030ec0143f02d0402c3f02c200144202d04", + "0x10402cea02c6f0143c02d0402c3c02c14014c202d0402cc202d01014ea02d04", + "0xf80144c3b8ec0410402ce83a83c308113bc053a00b4100b3a00b3b8053a80b", + "0x50ac053d40b4100b1300b5e4051340b4100b3b80b158050f40b4100b3b00b", + "0x3a0310402c3a02d7b014f702d0402cd002d00014054100b0140c014055e80b", + "0x51580b4100b0142e014f802d0402c5302cf20145302d0402c5102d7c01451", + "0x53e00b4100b3e00b080051600b4100b158d6030ec0145602d0402c5602c20", + "0x53080b4100b3080b404051680b4100b0e80b5f4053d80b4100b3e058030ec", + "0x17f014f602d0402cf602cee0145a02d0402c5a02d7e014f702d0402cf702c14", + "0x10402c5e02c560143d02d0402c5c02cf80145f1785c0410402cf6168f730811", + "0xb0140c014f402d801840b4100c3d40b1c8053d40b4100b17c0b5e4051340b", + "0x10402cf302c4c014f31940c4100b1840b1d00518c0b4100b1340b4000501504", + "0xf202d0402c6a02cf7014054100b1a00b3d4051a8680310402c6502c4d01405", + "0x50f40b4100b0f40b404051bc0b4100b1b40b14c051b40b4100b3c80b14405", + "0x1102c6f02d0402c6f02cda0140c02d0402c0c02cd80146302d0402c6302c14", + "0xb4100b0f40b404053bc0b4100b3d00b358050150402c05030051bc0c18c3d", + "0xef02d0402cef02cda0140c02d0402c0c02cd80144d02d0402c4d02c140143d", + "0x10402c3602d00014054100b4040b420050150402c05030053bc0c1343d0440b", + "0x50158102c050ac053b40b4100b1c80b050051d00b4100b0d00b404051c80b", + "0xb4100b01458014054100b4000b3d8050150402c1402c4c014054100b0140c", + "0x1e02d0402c1e02c140141b02d0402c1b02d010147602d0402d0702cd601507", + "0x5030051d80c0781b0440b1d80b4100b1d80b368050300b4100b0300b36005", + "0x10402c1e02c140141b02d0402c1b02d010150902d0402c2302cd6014054100b", + "0x54240c0781b0440b4240b4100b4240b368050300b4100b0300b360050780b", + "0xb05c0b404051e00b4100b0800b400050150402c1002cf6014054100b0140c", + "0xb4100b1e80b358051e80b4100b0145a014ed02d0402c7802c140147402d04", + "0xc02d0402c0c02cd8014ed02d0402ced02c140147402d0402c7402d01014eb", + "0xb0140c02c050150402c05014053ac0c3b4740440b3ac0b4100b3ac0b36805", + "0x5c0141102d0402c1102d01014054100b0140c0142005c0c609020440c4100c", + "0x2202d040301f02d840141f0781b0410402c100440c60c050400b4100b0400b", + "0x18031040310002c110150002d0402c1e02c10014054100b0140c0142302d85", + "0x50150402d0102cd0014054100b0600b3f0050150402c05030050500b61901", + "0x1b02d010142b02d0402c2902cd60142902d0402c050d8050150402c2202d87", + "0xb0ac0b368050300b4100b0300b360054080b4100b4080b0500506c0b4100b", + "0x50e4050150402c1402cfc014054100b0140c0142b0310206c1102c2b02d04", + "0xc6202e0b00c4100c3f10206c100f0053f00b4100b3f00b0e8053f00b4100b", + "0x50d0d00310402c2202d89014c202d0402c05380050150402c05030050c42f", + "0xc014d602d8b0d80b4100c0d00b628050150402c050fc050150402cd002d87", + "0xb1f0050e839368104100b0d80b1f4053600b4100b0b80b400050150402c05", + "0xe302cf2014e302d0402c3902c7c014e002d0402c3c02cf20143c02d0402cda", + "0x10402c053a8051080b4100b1000b3c8051000b4100b0e80b1f0050fc0b4100b", + "0xb380ea030ec014ea02d0402ce83080c3b0053a00b4100b3a00b080053a00b", + "0xd802c140144c02d0402c423b80c3b0053b80b4100b0fcec030ec014ec02d04", + "0x50150402c05030050158c02c050ac051340b4100b1300b3b8050f40b4100b", + "0x514c0b4100b3dc0b10805144f70310402cd602d8d014f502d0402c2e02d00", + "0x2e0145802d0402c5602ce80145602d0402c5102c42014f802d0402c5302ce8", + "0xc3b0051680b4100b3d8c2030ec014f602d0402cf602c20014f602d0402c05", + "0xee0143d02d0402cf502c140145e02d0402c581700c3b0051700b4100b3e05a", + "0x5f02cf50146117c0c4100b1340b134050150402c050f4051340b4100b1780b", + "0x10402c6302c530146302d0402cf402c51014f402d0402c6102cf7014054100b", + "0xb4100b0300b360050f40b4100b0f40b050050b00b4100b0b00b404051940b", + "0x2202d87014054100b0140c014650303d0b01102c6502d0402c6502cda0140c", + "0x10402cf302c140146802d0402c2f02d01014f302d0402c3102d00014054100b", + "0x1e02cf6014054100b08c0b130050150402c05030050158e02c050ac051a80b", + "0xb4100b06c0b404051b40b4100b3c80b358053c80b4100b01458014054100b", + "0x6d02d0402c6d02cda0140c02d0402c0c02cd80150202d0402d0202c140141b", + "0x10402c2002d00014054100b0400b3d8050150402c05030051b40c4081b0440b", + "0xef02d0402c05168051a80b4100b1bc0b050051a00b4100b05c0b404051bc0b", + "0x51a80b4100b1a80b050051a00b4100b1a00b404051c80b4100b3bc0b35805", + "0xb01405014720306a1a01102c7202d0402c7202cda0140c02d0402c0c02cd8", + "0xb404050150402c0503005080170318f40811031040300b0140c02c0501504", + "0x11041900141002d0402c1002c5c0150202d0402d0202c140141102d0402c11", + "0x54100b0140c0142302d920880b4100c07c0b6440507c1e06c104100b04102", + "0x10402c05030050500b6550102d040301802d94014184000c4100b0880b64c05", + "0xb0140c0142c02d963f02b031040302902c110142902d0402d0002c1001405", + "0x36014054100b4040b65c050150402cfc02cd0014054100b0ac0b3f00501504", + "0x1e02c140141b02d0402c1b02d010142f02d0402c2e02cd60142e02d0402c05", + "0xc0781b0440b0bc0b4100b0bc0b368050300b4100b0300b360050780b4100b", + "0x3102c3a0143102d0402c050e4050150402c2c02cfc014054100b0140c0142f", + "0x54100b0140c014360d00c660d03080c4100c0c41e06c100f0050c40b4100b", + "0x19a014054100b3600b65c05368d80310402d0102d99014d602d0402c0538005", + "0x870143c02d0402cd002d00014054100b0140c0143a02d9b0e40b4100c3680b", + "0xe60144002d0402c3f02cf20143f02d0402ce002c7c014e33800c4100b0e40b", + "0xea014ea02d0402ce802cf2014e802d0402c4202c8a0144238c0c4100b38c0b", + "0xc3b0053b80b4100b3b0d6030ec014ec02d0402cec02c20014ec02d0402c05", + "0xe40143d02d0402cea1300c3b0053a80b4100b3a80b080051300b4100b100ee", + "0xb22c050f00b4100b0f00b050053080b4100b3080b404051340b4100b38c0b", + "0xf73d4104100b0f44d0f0c20448d0143d02d0402c3d02cee0144d02d0402c4d", + "0x5602d0402c5102d79014f802d0402cf702c560145302d0402cf502cf801451", + "0xb0e80b674051600b4100b3400b400050150402c05030050159c02c050ac05", + "0xb1680b5ec051780b4100b1700b3a0051700b4100b3d80b10805168f603104", + "0x10402c050b8053d00b4100b1840b3c8051840b4100b17c0b5f00517c5a03104", + "0xb17865030ec0146502d0402c633580c3b00518c0b4100b18c0b0800518c0b", + "0xb1680b5f4051a00b4100b3d0f3030ec014f402d0402cf402c20014f302d04", + "0x10402c6a02d7e0145802d0402c5802c14014c202d0402cc202d010146a02d04", + "0xf80146f1b4f20410402c681a858308115fc051a00b4100b1a00b3b8051a80b", + "0xb1c8051580b4100b1bc0b5e4053e00b4100b1b40b1580514c0b4100b3c80b", + "0xb1d0051d00b4100b3e00b400050150402c05030051c80b678ef02d0403056", + "0xb3d405424760310402ced02c4d014054100b41c0b1300541ced0310402cef", + "0xb1e80b14c051e80b4100b1e00b144051e00b4100b4240b3dc050150402c76", + "0x10402c0c02cd80147402d0402c7402c140145302d0402c5302d01014eb02d04", + "0xb358050150402c05030053ac0c1d0530440b3ac0b4100b3ac0b368050300b", + "0xc02cd8014f802d0402cf802c140145302d0402c5302d010147d02d0402c72", + "0x50150402c05030051f40c3e0530440b1f40b4100b1f40b368050300b4100b", + "0xb050051fc0b4100b0d00b404051f00b4100b0d80b400050150402d0102d97", + "0x50150402c1402c4c014054100b0140c0140567c0b0142b014e902d0402c7c", + "0x1b02d01014e702d0402c8102cd60148102d0402c05160050150402d0002cf6", + "0xb39c0b368050300b4100b0300b360050780b4100b0780b0500506c0b4100b", + "0x1010148302d0402c2302cd6014054100b0140c014e70301e06c1102ce702d04", + "0xb368050300b4100b0300b360050780b4100b0780b0500506c0b4100b06c0b", + "0x50150402c1002cf6014054100b0140c014830301e06c1102c8302d0402c83", + "0x5a014e902d0402d2002c140147f02d0402c1702d010152002d0402c2002d00", + "0xe902c140147f02d0402c7f02d010148702d0402c8502cd60148502d0402c05", + "0xc3a47f0440b21c0b4100b21c0b368050300b4100b0300b360053a40b4100b", + "0xb0140c0142005c0c681020440c4100c02c050300b014054100b0140501487", + "0x10402c100440c684050400b4100b0400b170050440b4100b0440b4040501504", + "0x1e02c10014054100b0140c0142302da30880b4100c07c0b6880507c1e06c10", + "0xb3f0050150402c05030050500b691010600c4100c4000b044054000b4100b", + "0x2902d0402c050d8050150402c2202da5014054100b4040b340050150402c18", + "0x54080b4100b4080b0500506c0b4100b06c0b404050ac0b4100b0a40b35805", + "0xb0140c0142b0310206c1102c2b02d0402c2b02cda0140c02d0402c0c02cd8", + "0x53f00b4100b3f00b0e8053f00b4100b01439014054100b0500b3f00501504", + "0x10402c05380050150402c05030050c42f031a60b82c03104030fc4081b0403c", + "0x50150402c050fc050150402cd002da5014343400c4100b0880b69c053080b", + "0x20014d802d0402c053a8050150402c05030053580b6a43602d040303402da8", + "0xb6a83902d040303602cdb014da02d0402cd83080c3b0053600b4100b3600b", + "0x9d014e002d0402c3902cd90143c02d0402c2e02d00014054100b0140c0143a", + "0xda030ec0143f02d0402c3f02c200143f02d0402c053a80538c0b4100b3800b", + "0xb3b8053a00b4100b0f00b050051080b4100b38c40030ec0144002d0402c3f", + "0xec02d0402c2e02d00014054100b0140c014056ac0b0142b014ea02d0402c42", + "0x200143d02d0402c050b8051300b4100b3b80b3a0053b80b4100b0e80b10805", + "0x53d40b4100b1304d030ec0144d02d0402c3d3680c3b0050f40b4100b0f40b", + "0xb0140c014056ac0b0142b014ea02d0402cf502cee014e802d0402cec02c14", + "0xb4100b1440b3c8051440b4100b3580b1f0053dc0b4100b0b80b4000501504", + "0x5602d0402cf83080c3b0053e00b4100b3e00b080053e00b4100b0142e01453", + "0xea02d0402c5802cee014e802d0402cf702c140145802d0402c531580c3b005", + "0xb3dc050150402cf602cf50145a3d80c4100b3a80b134050150402c050f405", + "0x2c02d010145f02d0402c5e02c530145e02d0402c5c02c510145c02d0402c5a", + "0xb17c0b368050300b4100b0300b360053a00b4100b3a00b050050b00b4100b", + "0xb400050150402c2202da5014054100b0140c0145f030e80b01102c5f02d04", + "0xb0142b0146302d0402c6102c14014f402d0402c2f02d010146102d0402c31", + "0x5160050150402c1e02cf6014054100b08c0b130050150402c0503005015ac", + "0xb4080b0500506c0b4100b06c0b404053cc0b4100b1940b358051940b4100b", + "0xf30310206c1102cf302d0402cf302cda0140c02d0402c0c02cd80150202d04", + "0x1702d010146802d0402c2002d00014054100b0400b3d8050150402c0503005", + "0x10402c6a02cd60146a02d0402c051680518c0b4100b1a00b050053d00b4100b", + "0xb4100b0300b3600518c0b4100b18c0b050053d00b4100b3d00b404053c80b", + "0x50300b014054100b01405014f2030633d01102cf202d0402cf202cda0140c", + "0x50440b4100b0440b404050150402c050300508017031ad40811031040300b", + "0xb4100c07c0b6bc0507c1e06c104100b04011031ae0141002d0402c1002c5c", + "0xc4100c4000b044054000b4100b0780b040050150402c050300508c0b6c022", + "0x54100b4040b340050150402c1802cfc014054100b0140c0141402db140418", + "0xb404050ac0b4100b0a40b358050a40b4100b01436014054100b0880b6c805", + "0x2b02cda0140c02d0402c0c02cd80150202d0402d0202c140141b02d0402c1b", + "0x39014054100b0500b3f0050150402c05030050ac0c4081b0440b0ac0b4100b", + "0x1b30b82c03104030fc4081b0403c014fc02d0402cfc02c3a014fc02d0402c05", + "0x343400c4100b0880b6d0053080b4100b014e0014054100b0140c014310bc0c", + "0x53580b6d43602d040303402d0e014054100b0143f014054100b3400b6c805", + "0xda02c9d014da02d0402c3602cd9014d802d0402c2e02d00014054100b0140c", + "0xb0e8c2030ec0143a02d0402c3a02c200143a02d0402c053a8050e40b4100b", + "0xb3800b3b80538c0b4100b3600b050053800b4100b0e43c030ec0143c02d04", + "0xb080051000b4100b0142e014054100b0140c014056d80b0142b0143f02d04", + "0xea02db83a00b4100c3580b6dc051080b4100b100c2030ec0144002d0402c40", + "0xb3c8053b80b4100b3a00b1f0053b00b4100b0b80b400050150402c0503005", + "0x3d1080c3b0050f40b4100b0f40b080050f40b4100b014ea0144c02d0402cee", + "0xf502cee014e302d0402cec02c14014f502d0402c4c1340c3b0051340b4100b", + "0x100014054100b3a80b130050150402c0503005015b602c050ac050fc0b4100b", + "0x42030ec0145102d0402c5102c200145102d0402c050b8053dc0b4100b0b80b", + "0xb0143d0143f02d0402c5302cee014e302d0402cf702c140145302d0402c51", + "0xb4100b1580b3dc050150402cf802cf5014563e00c4100b0fc0b1340501504", + "0x2c02d0402c2c02d010145a02d0402cf602c53014f602d0402c5802c5101458", + "0xb1680b4100b1680b368050300b4100b0300b3600538c0b4100b38c0b05005", + "0xb4100b0c40b400050150402c2202db2014054100b0140c0145a030e30b011", + "0xc014056e40b0142b0145f02d0402c5c02c140145e02d0402c2f02d010145c", + "0x6102d0402c05160050150402c1e02cf6014054100b08c0b130050150402c05", + "0x54080b4100b4080b0500506c0b4100b06c0b404053d00b4100b1840b35805", + "0xb0140c014f40310206c1102cf402d0402cf402cda0140c02d0402c0c02cd8", + "0x5e02d0402c1702d010146302d0402c2002d00014054100b0400b3d80501504", + "0x101014f302d0402c6502cd60146502d0402c051680517c0b4100b18c0b05005", + "0xb368050300b4100b0300b3600517c0b4100b17c0b050051780b4100b1780b", + "0xc4100c02c050300b014054100b01405014f30305f1781102cf302d0402cf3", + "0xb0400b170050440b4100b0440b404050150402c050300508017031ba40811", + "0x2302dbb0880b4100c07c0b2580507c1e06c104100b04011030370141002d04", + "0x10002c110150002d0402c1e02c10014054100b0880b5a0050150402c0503005", + "0x10102cd0014054100b0600b3f0050150402c05030050500b6f1010600c4100c", + "0xb4100b06c0b404050ac0b4100b0a40b358050a40b4100b01436014054100b", + "0x2b02d0402c2b02cda0140c02d0402c0c02cd80150202d0402d0202c140141b", + "0xb4100b01439014054100b0500b3f0050150402c05030050ac0c4081b0440b", + "0x50c42f031bd0b82c03104030fc4081b0403c014fc02d0402cfc02c3a014fc", + "0xb3400b134053400b4100b014e0014c202d0402c2e02d00014054100b0140c", + "0x10402cd602c51014d602d0402c3602cf7014054100b0d00b3d4050d83403104", + "0xb4100b3080b050050b00b4100b0b00b404053680b4100b3600b14c053600b", + "0xc014da030c20b01102cda02d0402cda02cda0140c02d0402c0c02cd8014c2", + "0xb0e40b050050e80b4100b0bc0b404050e40b4100b0c40b400050150402c05", + "0xb3d8050150402c2302c4c014054100b0140c014056f80b0142b0143c02d04", + "0x10402c1b02d01014e302d0402ce002cd6014e002d0402c05160050150402c1e", + "0xb4100b38c0b368050300b4100b0300b360054080b4100b4080b0500506c0b", + "0xb0800b400050150402c1002cf6014054100b0140c014e30310206c1102ce3", + "0xb4100b0145a0143c02d0402c3f02c140143a02d0402c1702d010143f02d04", + "0x3c02d0402c3c02c140143a02d0402c3a02d010144202d0402c4002cd601440", + "0x5014051080c0f03a0440b1080b4100b1080b368050300b4100b0300b36005", + "0x10014054100b0140c0142005c0c6fd020440c4100c02c050300b014054100b", + "0x50150402c05030050880b7001f0780c4100c06c0b0440506c0b4100b0400b", + "0x1c10150002d0402d0002c200150002d0402c2302c170142302d0402c1f02d02", + "0x1e02d0402c1e02c22014054100b0140c0141402dc24041803104031000440c", + "0xb4100b0ac0b408050150402c05030053f00b70c2b0a40c4100c0780b04405", + "0xc4100c0b818031c40142e02d0402c2e02c200142e02d0402c2c02c170142c", + "0x1040302902c110142902d0402c2902c22014054100b0140c014c202dc50c42f", + "0x10402c3402cd0014054100b3400b3f0050150402c05030050d80b718343400c", + "0xb358053580b4100b01436014054100b4040b588050150402c3102d5f01405", + "0xc02cd80150202d0402d0202c140142f02d0402c2f02d01014d802d0402cd6", + "0x50150402c05030053600c4082f0440b3600b4100b3600b368050300b4100b", + "0x2f0403c014da02d0402cda02c3a014da02d0402c050e4050150402c3602cfc", + "0xe302d0402c3a02d00014054100b0140c014e00f00c71c3a0e40c4100c36902", + "0x54100b1000b72805108400310402c3f02dc90143f02d0402c314040c72005", + "0xea0310402ce802d5e014e81080c4100b1080b428051080b4100b1080b72c05", + "0x51300b4100b3b80b584053b80b4100b3a80b580050150402cec02d5f014ec", + "0xf2014f502d0402c4d02c7c014054100b0f40b588051343d0310402c4202d5e", + "0xc3b00514c0b4100b13051030ec0145102d0402c05380053dc0b4100b3d40b", + "0xb3dc050150402c5602cf5014581580c4100b3e00b134053e00b4100b3dc53", + "0x3902d010145c02d0402c5a02c530145a02d0402cf602c51014f602d0402c58", + "0xb1700b368050300b4100b0300b3600538c0b4100b38c0b050050e40b4100b", + "0xb588050150402c3102d5f014054100b0140c0145c030e30e41102c5c02d04", + "0xb1780b0500517c0b4100b0f00b404051780b4100b3800b400050150402d01", + "0xb588050150402c2902cfc014054100b0140c014057300b0142b0146102d04", + "0xb3d00b0500518c0b4100b3080b404053d00b4100b4080b400050150402d01", + "0xb588050150402cfc02cfc014054100b0140c014057340b0142b0146502d04", + "0xb3cc0b0500518c0b4100b0600b404053cc0b4100b4080b400050150402d01", + "0xb400050150402c1e02cfc014054100b0140c014057340b0142b0146502d04", + "0xb0142b0146502d0402c6802c140146302d0402c1402d010146802d0402d02", + "0x1010146a02d0402d0202d00014054100b0880b3f0050150402c0503005015cd", + "0xf202cd6014f202d0402c05160051940b4100b1a80b0500518c0b4100b0440b", + "0xb0300b360051940b4100b1940b0500518c0b4100b18c0b404051b40b4100b", + "0xf6014054100b0140c0146d0306518c1102c6d02d0402c6d02cda0140c02d04", + "0x6f02c140145f02d0402c1702d010146f02d0402c2002d00014054100b0400b", + "0x10402c5f02d010147202d0402cef02cd6014ef02d0402c05168051840b4100b", + "0xb4100b1c80b368050300b4100b0300b360051840b4100b1840b0500517c0b", + "0xc739020440c4100c02c050300b014054100b01405014720306117c1102c72", + "0x50400b4100b0400b170050440b4100b0440b404050150402c050300508017", + "0xb0140c0142302dd10880b4100c07c0b7400507c1e06c104100b04011031cf", + "0x5030050500b749010600c4100c4000b044054000b4100b0780b0400501504", + "0x50150402c2202dd3014054100b4040b340050150402c1802cfc014054100b", + "0xb0500506c0b4100b06c0b404050ac0b4100b0a40b358050a40b4100b01436", + "0x10206c1102c2b02d0402c2b02cda0140c02d0402c0c02cd80150202d0402d02", + "0xb0e8053f00b4100b01439014054100b0500b3f0050150402c05030050ac0c", + "0x10402c05030050c42f031d40b82c03104030fc4081b0403c014fc02d0402cfc", + "0x54100b3400b74c050d0d00310402c2202dd5014c202d0402c2e02d0001405", + "0x54100b3600b72805360d60310402c3602dd7014360d00c4100b0d00b75805", + "0x3c0e80c4100b0d00b75c050e40b4100b3680b584053680b4100b3580b58005", + "0x3f38c0c4100b3800b578053803c0310402c3c02d0a014054100b0e80b58805", + "0x15e0144202d0402c4002d610144002d0402ce302d60014054100b0fc0b57c05", + "0xb3c8053b00b4100b3a80b1f0050150402ce802d62014ea3a00c4100b0f00b", + "0x3d030ec0143d02d0402c391300c3b0051300b4100b014e0014ee02d0402cec", + "0xf5014513dc0c4100b3d40b134053d40b4100b3b84d030ec0144d02d0402c42", + "0xf802c53014f802d0402c5302c510145302d0402c5102cf7014054100b3dc0b", + "0xb0300b360053080b4100b3080b050050b00b4100b0b00b404051580b4100b", + "0x1d3014054100b0140c01456030c20b01102c5602d0402c5602cda0140c02d04", + "0x5802c14014f602d0402c2f02d010145802d0402c3102d00014054100b0880b", + "0xf6014054100b08c0b130050150402c0503005015d802c050ac051680b4100b", + "0xb06c0b404051780b4100b1700b358051700b4100b01458014054100b0780b", + "0x10402c5e02cda0140c02d0402c0c02cd80150202d0402d0202c140141b02d04", + "0x2002d00014054100b0400b3d8050150402c05030051780c4081b0440b1780b", + "0x10402c05168051680b4100b17c0b050053d80b4100b05c0b4040517c0b4100b", + "0xb4100b1680b050053d80b4100b3d80b404053d00b4100b1840b358051840b", + "0x5014f40305a3d81102cf402d0402cf402cda0140c02d0402c0c02cd80145a", + "0x50150402c050300508017031d940811031040300b0140c02c050150402c05", + "0x54100b0140c0142202dda07c1e031040301b02c110141b02d0402c1002c10", + "0x2302cd60142302d0402c050d8050150402c1f02cd0014054100b0780b3f005", + "0xb0300b360054080b4100b4080b050050440b4100b0440b404054000b4100b", + "0xfc014054100b0140c01500031020441102d0002d0402d0002cda0140c02d04", + "0x102044100f0050600b4100b0600b0e8050600b4100b01439014054100b0880b", + "0x53f00b4100b0500b400050150402c05030050ac29031db051010310403018", + "0xb3dc050150402c2e02cf50142f0b80c4100b0b00b134050b00b4100b014e0", + "0x10102d01014d002d0402cc202c53014c202d0402c3102c510143102d0402c2f", + "0xb3400b368050300b4100b0300b360053f00b4100b3f00b050054040b4100b", + "0x1010143402d0402c2b02d00014054100b0140c014d0030fc4041102cd002d04", + "0x10402c0503005015dc02c050ac053580b4100b0d00b050050d80b4100b0a40b", + "0x50d80b4100b05c0b404053600b4100b0800b400050150402c1002cf601405", + "0xb404050e40b4100b3680b358053680b4100b0145a014d602d0402cd802c14", + "0x3902cda0140c02d0402c0c02cd8014d602d0402cd602c140143602d0402c36", + "0x11031040300b0140c02c050150402c05014050e40c358360440b0e40b4100b", + "0x10402c1002c5c0141102d0402c1102d01014054100b0140c0142005c0c77502", + "0x508c0b7802202d040301f02ddf0141f0781b0410402c100440c778050400b", + "0x1402de140418031040310002c110150002d0402c1e02c10014054100b0140c", + "0xb0880b788050150402d0102cd0014054100b0600b3f0050150402c0503005", + "0x1b02d0402c1b02d010142b02d0402c2902cd60142902d0402c050d80501504", + "0xb0ac0b4100b0ac0b368050300b4100b0300b360054080b4100b4080b05005", + "0xfc02d0402c050e4050150402c1402cfc014054100b0140c0142b0310206c11", + "0xc014310bc0c78c2e0b00c4100c3f10206c100f0053f00b4100b3f00b0e805", + "0xd002de2014343400c4100b0880b790053080b4100b0b80b400050150402c05", + "0xd802de7014d83580c4100b0d80b798050d8340310402c3402de5014054100b", + "0x10402c3402de60143902d0402cda02ce8014da02d0402cd602c42014054100b", + "0xe002cd9014400fce3380114100b0f00b7a0050150402c3a02cbb0143c0e80c", + "0xb3a80b3a0053a80b4100b38c0b108053a00b4100b1080b274051080b4100b", + "0x10402c4002d600144c02d0402cee02cf2014ee02d0402c3f02c7c014ec02d04", + "0xb4100b0e4f5030ec014f502d0402c05380051340b4100b0f40b584050f40b", + "0xb13053030ec0145302d0402cec1440c3b0051440b4100b3a0f7030ec014f7", + "0x5802cf5014f61600c4100b1580b134051580b4100b134f8030ec014f802d04", + "0x10402c5c02c530145c02d0402c5a02c510145a02d0402cf602cf7014054100b", + "0xb4100b0300b360053080b4100b3080b050050b00b4100b0b00b404051780b", + "0x2202de2014054100b0140c0145e030c20b01102c5e02d0402c5e02cda0140c", + "0x10402c5f02c140146102d0402c2f02d010145f02d0402c3102d00014054100b", + "0x1e02cf6014054100b08c0b130050150402c0503005015e902c050ac053d00b", + "0xb4100b06c0b404051940b4100b18c0b3580518c0b4100b01458014054100b", + "0x6502d0402c6502cda0140c02d0402c0c02cd80150202d0402d0202c140141b", + "0x10402c2002d00014054100b0400b3d8050150402c05030051940c4081b0440b", + "0x6802d0402c05168053d00b4100b3cc0b050051840b4100b05c0b404053cc0b", + "0x53d00b4100b3d00b050051840b4100b1840b404051a80b4100b1a00b35805", + "0xb014050146a030f41841102c6a02d0402c6a02cda0140c02d0402c0c02cd8", + "0xb404050150402c050300508017031ea40811031040300b0140c02c0501504", + "0x11041eb0141002d0402c1002c5c0150202d0402d0202c140141102d0402c11", + "0x54100b0140c0142302ded0880b4100c07c0b7b00507c1e06c104100b04102", + "0x10402c05030050500b7c10102d040301802def014184000c4100b0880b7b805", + "0xb0140c0142c02df13f02b031040302902c110142902d0402d0002c1001405", + "0x36014054100b4040b7c8050150402cfc02cd0014054100b0ac0b3f00501504", + "0x1e02c140141b02d0402c1b02d010142f02d0402c2e02cd60142e02d0402c05", + "0xc0781b0440b0bc0b4100b0bc0b368050300b4100b0300b360050780b4100b", + "0x3102c3a0143102d0402c050e4050150402c2c02cfc014054100b0140c0142f", + "0x54100b0140c014360d00c7ccd03080c4100c0c41e06c100f0050c40b4100b", + "0xda3600c4100b3600b7d4050150402cd602df2014d83580c4100b4040b7d005", + "0x50f00b4100b0e40b108050150402c3a02df70143a0e40c4100b3680b7d805", + "0x1f8014054100b38c0b2ec050fce30310402cd802df6014e002d0402c3c02ce8", + "0x8a014e802d0402c4202dfa0144202d0402c4002df9014400fc0c4100b0fc0b", + "0xee030ec014ee02d0402c05380053b00b4100b3a80b3c8053a80b4100b3a00b", + "0xb7e4050f40b4100b3b04c030ec014ec02d0402cec02c200144c02d0402ce0", + "0x4d02c8b014d002d0402cd002c14014c202d0402cc202d010144d02d0402c3f", + "0x513dcf50410402c3d134d030811234050f40b4100b0f40b3b8051340b4100b", + "0x5602d0402cf702d00014054100b0140c014f802dfb14c0b4100c1440b1c805", + "0x5c1680c4100b1600b134050150402cf602c4c014f61600c4100b14c0b1d005", + "0x530145f02d0402c5e02c510145e02d0402c5c02cf7014054100b1680b3d405", + "0xb360051580b4100b1580b050053d40b4100b3d40b404051840b4100b17c0b", + "0x54100b0140c01461030563d41102c6102d0402c6102cda0140c02d0402c0c", + "0x53dc0b4100b3dc0b050053d40b4100b3d40b404053d00b4100b3e00b35805", + "0xb0140c014f4030f73d41102cf402d0402cf402cda0140c02d0402c0c02cd8", + "0x6502d0402c3402d010146302d0402c3602d00014054100b4040b7c80501504", + "0xb0500b130050150402c0503005015fc02c050ac053cc0b4100b18c0b05005", + "0x51a80b4100b1a00b358051a00b4100b01458014054100b4000b3d80501504", + "0xda0140c02d0402c0c02cd80141e02d0402c1e02c140141b02d0402c1b02d01", + "0xb4100b08c0b358050150402c05030051a80c0781b0440b1a80b4100b1a80b", + "0xc02d0402c0c02cd80141e02d0402c1e02c140141b02d0402c1b02d01014f2", + "0xb0400b3d8050150402c05030053c80c0781b0440b3c80b4100b3c80b36805", + "0xb4100b1b40b050051940b4100b05c0b404051b40b4100b0800b4000501504", + "0x51940b4100b1940b404053bc0b4100b1bc0b358051bc0b4100b0145a014f3", + "0x1102cef02d0402cef02cda0140c02d0402c0c02cd8014f302d0402cf302c14", + "0x508017031fd40811031040300b0140c02c050150402c05014053bc0c3cc65", + "0x11031110141002d0402c1002c5c0141102d0402c1102d01014054100b0140c", + "0x50150402c050300508c0b7fc2202d040301f02dfe0141f0781b0410402c10", + "0x54100b0140c0141402e0040418031040310002c110150002d0402c1e02c10", + "0xb01436014054100b0880b804050150402d0102cd0014054100b0600b3f005", + "0x10402d0202c140141b02d0402c1b02d010142b02d0402c2902cd60142902d04", + "0x50ac0c4081b0440b0ac0b4100b0ac0b368050300b4100b0300b360054080b", + "0x10402cfc02c3a014fc02d0402c050e4050150402c1402cfc014054100b0140c", + "0x100014054100b0140c014310bc0c8082e0b00c4100c3f10206c100f0053f00b", + "0xb810050150402cd002e01014343400c4100b0880b80c053080b4100b0b80b", + "0xb108050150402cd802e06014d83580c4100b0d80b814050d8340310402c34", + "0xb2ec050f03a0310402c3402e050143902d0402cda02ce8014da02d0402cd6", + "0xe80144202d0402ce002c42014400fce3380114100b0f00b440050150402c3a", + "0xb108053b00b4100b3a80b3a0053a80b4100b38c0b108053a00b4100b1080b", + "0x3d02ce80143d02d0402c4002c420144c02d0402cee02ce8014ee02d0402c3f", + "0xe83dc0c3b0053dc0b4100b0e4f5030ec014f502d0402c05380051340b4100b", + "0xc3b0053e00b4100b13053030ec0145302d0402cec1440c3b0051440b4100b", + "0xb3dc050150402c5802cf5014f61600c4100b1580b134051580b4100b134f8", + "0x2c02d010145e02d0402c5c02c530145c02d0402c5a02c510145a02d0402cf6", + "0xb1780b368050300b4100b0300b360053080b4100b3080b050050b00b4100b", + "0xb400050150402c2202e01014054100b0140c0145e030c20b01102c5e02d04", + "0xb0142b014f402d0402c5f02c140146102d0402c2f02d010145f02d0402c31", + "0x5160050150402c1e02cf6014054100b08c0b130050150402c050300501607", + "0xb4080b0500506c0b4100b06c0b404051940b4100b18c0b3580518c0b4100b", + "0x650310206c1102c6502d0402c6502cda0140c02d0402c0c02cd80150202d04", + "0x1702d01014f302d0402c2002d00014054100b0400b3d8050150402c0503005", + "0x10402c6802cd60146802d0402c05168053d00b4100b3cc0b050051840b4100b", + "0xb4100b0300b360053d00b4100b3d00b050051840b4100b1840b404051a80b", + "0x50300b014054100b014050146a030f41841102c6a02d0402c6a02cda0140c", + "0x50440b4100b0440b404050150402c0503005080170320840811031040300b", + "0xb4100c07c0b8280507c1e06c104100b04011032090141002d0402c1002c5c", + "0xc4100c4000b044054000b4100b0780b040050150402c050300508c0b82c22", + "0x54100b4040b340050150402c1802cfc014054100b0140c0141402e0c40418", + "0xb404050ac0b4100b0a40b358050a40b4100b01436014054100b0880b83405", + "0x2b02cda0140c02d0402c0c02cd80150202d0402d0202c140141b02d0402c1b", + "0x39014054100b0500b3f0050150402c05030050ac0c4081b0440b0ac0b4100b", + "0x20e0b82c03104030fc4081b0403c014fc02d0402cfc02c3a014fc02d0402c05", + "0x54100b3080b83405340c20310402c2202e0f014054100b0140c014310bc0c", + "0x54100b3580b84805358360310402c3402e11014343400c4100b3400b84005", + "0xec0143902d0402c05380053680b4100b3600b3c8053600b4100b0d80b1f005", + "0x3f014054100b0f00b57c053803c0310402cd002e110143a02d0402cda0e40c", + "0x2e02d00014054100b0140c0143f02e1438c0b4100c3800b84c050150402c05", + "0x10402c053a8053a00b4100b1080b274051080b4100b38c0b364051000b4100b", + "0xb3a0ec030ec014ec02d0402cea0e80c3b0053a80b4100b3a80b080053a80b", + "0x58540b0142b0143d02d0402cee02cee0144c02d0402c4002c14014ee02d04", + "0xb0142e0144d02d0402c2e02d00014054100b0fc0b130050150402c0503005", + "0xb1340b050053dc0b4100b3d43a030ec014f502d0402cf502c20014f502d04", + "0x510310402c3d02c4d014054100b0143d0143d02d0402cf702cee0144c02d04", + "0x51580b4100b3e00b144053e00b4100b14c0b3dc050150402c5102cf501453", + "0xd80144c02d0402c4c02c140142c02d0402c2c02d010145802d0402c5602c53", + "0x10402c05030051600c1302c0440b1600b4100b1600b368050300b4100b0300b", + "0x51680b4100b0bc0b404053d80b4100b0c40b400050150402c2202e0d01405", + "0x10402c2302c4c014054100b0140c014058580b0142b0145c02d0402cf602c14", + "0x1010145f02d0402c5e02cd60145e02d0402c05160050150402c1e02cf601405", + "0xb368050300b4100b0300b360054080b4100b4080b0500506c0b4100b06c0b", + "0x50150402c1002cf6014054100b0140c0145f0310206c1102c5f02d0402c5f", + "0x5a0145c02d0402c6102c140145a02d0402c1702d010146102d0402c2002d00", + "0x5c02c140145a02d0402c5a02d010146302d0402cf402cd6014f402d0402c05", + "0xc1705a0440b18c0b4100b18c0b368050300b4100b0300b360051700b4100b", + "0xb0140c0142005c0c85d020440c4100c02c050300b014054100b0140501463", + "0x5030050880b8601f0780c4100c06c0b0440506c0b4100b0400b0400501504", + "0x10402d0002c200150002d0402c2302c170142302d0402c1f02d02014054100b", + "0xf7014054100b0140c0142b0a414042194041803104031000440c448054000b", + "0xc868053f00b4100b3f00b170050600b4100b0600b404053f00b4100b0780b", + "0x54100b0140c014c202e1c0c40b4100c0bc0b86c050bc2e0b0104100b3f018", + "0x10402c05030053580b874360d00c4100c3400b044053400b4100b0b80b04005", + "0xb87c050150402d0102e1e014054100b0d80b340050150402c3402cfc01405", + "0x10402c2c02d01014da02d0402cd802cd6014d802d0402c050d8050150402c31", + "0xb4100b3680b368050300b4100b0300b360054080b4100b4080b050050b00b", + "0x10402c050e4050150402cd602cfc014054100b0140c014da031020b01102cda", + "0xe33800c8803c0e80c4100c0e5020b0100f0050e40b4100b0e40b0e8050e40b", + "0x5108400310402c3f02e220143f02d0402c314040c884050150402c0503005", + "0x10f014e81080c4100b1080b894051080b4100b1080b890050150402c4002e23", + "0xb89c053b80b4100b3a80b898050150402cec02e1f014ec3a80c4100b3a00b", + "0x4202d0f0144d02d0402c4c0f40c3b0050f40b4100b014e00144c02d0402cee", + "0xb4100c3dc0b8a0050150402c050fc050150402cf502e1e014f73d40c4100b", + "0xb4100b1440b364053e00b4100b0f00b400050150402c050300514c0b8a451", + "0x53d80b4100b3d80b080053d80b4100b014ea0145802d0402c5602c9d01456", + "0x5e02d0402cf802c140145c02d0402c581680c3b0051680b4100b3d84d030ec", + "0xb0f00b400050150402c05030050162a02c050ac0517c0b4100b1700b3b805", + "0xb4100b0142e0146302d0402cf402d61014f402d0402c5302d600146102d04", + "0x10402c633cc0c3b0053cc0b4100b1944d030ec0146502d0402c6502c2001465", + "0x50150402c050f40517c0b4100b1a00b3b8051780b4100b1840b050051a00b", + "0x510146d02d0402cf202cf7014054100b1a80b3d4053c86a0310402c5f02c4d", + "0xb050050e80b4100b0e80b404053bc0b4100b1bc0b14c051bc0b4100b1b40b", + "0x5e0e81102cef02d0402cef02cda0140c02d0402c0c02cd80145e02d0402c5e", + "0xb400050150402c3102e1f014054100b4040b878050150402c05030053bc0c", + "0xb0142b014ed02d0402c7202c140147402d0402ce002d010147202d0402ce3", + "0xb3d8050150402d0102e1e014054100b3080b130050150402c05030050162b", + "0xb41c0b050051d80b4100b0b00b4040541c0b4100b4080b400050150402c2e", + "0xb878050150402c2902e1e014054100b0140c014058b00b0142b0150902d04", + "0x10402c1402d010147802d0402d0202d00014054100b0780b3f0050150402c2b", + "0xb3f0050150402c05030050162d02c050ac053ac0b4100b1e00b050051e80b", + "0xb1f40b050051e80b4100b0440b404051f40b4100b4080b400050150402c22", + "0xb4100b014580150902d0402ceb02c560147602d0402c7a02cf8014eb02d04", + "0x10902d0402d0902c140147602d0402c7602d010147f02d0402c7c02cd60147c", + "0x5030051fc0c424760440b1fc0b4100b1fc0b368050300b4100b0300b36005", + "0xb4100b05c0b404053a40b4100b0800b400050150402c1002cf6014054100b", + "0x539c0b4100b2040b358052040b4100b0145a014ed02d0402ce902c1401474", + "0xda0140c02d0402c0c02cd8014ed02d0402ced02c140147402d0402c7402d01", + "0x10402c0502c200140502d0402c058b80539c0c3b4740440b39c0b4100b39c0b", + "0xb0140b080050140b4100b0150d0140b02c0b02c0b4100b0140b8bc050140b", + "0x502c200140502d0402c058c00502c0b02c0b02d0402c0502e2f0140502d04", + "0xc02c10014054100b0143d0140b02c0b02c0b4100b0140b8bc050140b4100b", + "0xb408050150402c050300505c0b8c5020440c4100c0400b044050400b4100b", + "0x1b02c1b0141b02d0402c1b02c200141b02d0402c2002c170142002d0402d02", + "0x1b02c1f014054100b0140c0141f02e32015040301e02c1e0141e06c0c4100b", + "0xc0150002e3308c22031040301102c110141102d0402c1102c22014054100b", + "0x10402c058d0054040b4100b0600b05c050600b4100b08c0b408050150402c05", + "0xb4100b02c0b050050140b4100b0140b404050a40b4100b0880b3dc050500b", + "0x10102d0402d0102c200141402d0402c1402e350142902d0402c2902c5c0140b", + "0x2f02e380b80b4100c0b00b8dc050b0fc0ac104100b404140a40b015028d805", + "0xb8ecd002d04030c202e3a014c20c40c4100b0b80b8e4050150402c0503005", + "0x23d014d602d0402cd002e3c0143602d0402cfc02d00014054100b0140c01434", + "0x1010143902d0402cda02e3e014da02d0402cd80c40c430053600b4100b3580b", + "0x2b0400b0e40b4100b0e40b8fc050d80b4100b0d80b050050ac0b4100b0ac0b", + "0x50f00b4100b0ac0b404050e80b4100b3f00b400050150402c05030050e436", + "0x2b0143f02d0402c3102c5c014e302d0402c3402e40014e002d0402c3a02c14", + "0xb4100b0ac0b404051000b4100b0bc0b908050150402c05030050164102c05", + "0x503005100fc0ac1002c4002d0402c4002e3f014fc02d0402cfc02c140142b", + "0xb4100b4000b3dc053a00b4100b014310144202d0402c0b02d00014054100b", + "0xe302d0402ce802e40014e002d0402c4202c140143c02d0402c0502d01014ea", + "0xee02d0402cec0fc0c430053b00b4100b38c0b90c050fc0b4100b3a80b17005", + "0x53800b4100b3800b050050f00b4100b0f00b404051300b4100b3b80b8f805", + "0x54100b07c0b0b0050150402c0503005130e00f01002c4c02d0402c4c02e3f", + "0x53d40b4100b1341b0302f0144d02d0402c050b8050f40b4100b0440b3dc05", + "0x100014054100b0140c014f702e4401504030f502c1e014f502d0402cf502c20", + "0xf802e3d014f802d0402c5302e450145302d0402c050c4051440b4100b02c0b", + "0x502d01014f602d0402c5802e3e0145802d0402c560f40c430051580b4100b", + "0xf6144050400b3d80b4100b3d80b8fc051440b4100b1440b050050140b4100b", + "0xb014310145a02d0402c0b02d00014054100b3dc0b0b0050150402c0503005", + "0xb17c0b8f80517c0b4100b1783d0310c0145e02d0402c5c02e430145c02d04", + "0x10402c6102e3f0145a02d0402c5a02c140140502d0402c0502d010146102d04", + "0xb01431014f402d0402c0b02d00014054100b0140c01461168050400b1840b", + "0xb194f30310c014f302d0402c1702cf70146502d0402c6302e430146302d04", + "0x10402cf402c140140502d0402c0502d010146a02d0402c6802e3e0146802d04", + "0x50300b014054100b0143d0146a3d0050400b1a80b4100b1a80b8fc053d00b", + "0x506c0b4100b0300b42c050150402c0503005080170324640811031040300b", + "0x2302d0402d0202d00014054100b0140c0142202e4807c1e031040301b02e47", + "0x54040b4100b0600b274050600b4100b4000b364054000b4100b07c0b92405", + "0x50a40b4100b0780b1b4050500b4100b40410030ec0150102d0402d0102c20", + "0xee0142902d0402c2902c6f0142302d0402c2302c140141102d0402c1102d01", + "0x50b0fc0ac1002c2c3f02b0410402c140a423044113bc050500b4100b0500b", + "0x10402c050c4050b80b4100b4080b400050150402c2202e4a014054100b0140c", + "0x10402c1102d01014c202d0402c3102d130143102d0402c2f0400c92c050bc0b", + "0xc014c20b8110400b3080b4100b3080b930050b80b4100b0b80b050050440b", + "0xd002d0402c05168050150402c0c02e4d014054100b0400b3d4050150402c05", + "0x50800b4100b0800b0500505c0b4100b05c0b404050d00b4100b3400b93805", + "0xc0300b044050300b4100b02c0b040050d02005c1002c3402d0402c3402e4c", + "0x1702c170141702d0402c1102d02014054100b0140c0150202e4f0441003104", + "0x1f02e500781b03104030200140c710050800b4100b0800b080050800b4100b", + "0xb944230880c4100c0400b044050400b4100b0400b088050150402c0503005", + "0x200150102d0402c1802c170141802d0402c2302d02014054100b0140c01500", + "0x54100b0140c0142b02e520a414031040310106c0c710054040b4100b4040b", + "0x10402c05030050b80b94c2c3f00c4100c0880b044050880b4100b0880b08805", + "0x3102d0402c3102c200143102d0402c2f02c170142f02d0402c2c02d0201405", + "0x10402cfc02cf7014054100b0140c0143402e54340c203104030310500c71005", + "0xb3080b404053600b4100b3580b1d8053580b4100b3402907810954050d80b", + "0x5360363081002cd802d0402cd802d090143602d0402c3602c5c014c202d04", + "0x10402c3402d01014054100b0a40b57c050150402c1e02d5f014054100b0140c", + "0xb57c050150402c05030050165602c050ac050e40b4100b3f00b088053680b", + "0x10402c2e02c22014da02d0402c1402d01014054100b0a40b57c050150402c1e", + "0x2b02d01014054100b0780b57c050150402c05030050165602c050ac050e40b", + "0x50150402c05030050165602c050ac050e40b4100b0880b088053680b4100b", + "0x50ac050e40b4100b4000b088053680b4100b06c0b404050150402c1e02d5f", + "0x3902d0402c1002c22014da02d0402c1f02d01014054100b0140c014059580b", + "0xb4080b088053680b4100b0140b404050150402c05030050165602c050ac05", + "0xb4100b0e40b3dc050f00b4100b0e80b1e0050e80b4100b014310143902d04", + "0xb0300b040050150402c050f4050f0e03681002c3c02d0402c3c02d09014e0", + "0x10202d02014054100b0140c0141702e5740811031040301002c110141002d04", + "0xb06c0b080050780b4100b0440b3dc0506c0b4100b0800b05c050800b4100b", + "0x5030050880b960054100c07c0b0780507c1b0310402c1b02c1b0141b02d04", + "0xb4100b02c0b050050140b4100b0140b404050150402c1b02c1f014054100b", + "0x1802e5a01418400230410402c1e02c05042590141e02d0402c1e02c5c0140b", + "0xb974050ac290310402d0102e5c014054100b0140c0141402e5b4040b4100c", + "0xb97c050b80b4100b4000b400050150402c05030050b00b978fc02d040302b", + "0xb988053080b4100b0c429032610143102d0402c2f02e600142f02d0402cfc", + "0xd002e630142e02d0402c2e02c140142302d0402c2302d01014d002d0402cc2", + "0x2640143402d0402d0002d00014054100b0140c014d00b8230400b3400b4100b", + "0x101014d802d0402cd602e62014d602d0402c360a40c984050d80b4100b0b00b", + "0x230400b3600b4100b3600b98c050d00b4100b0d00b0500508c0b4100b08c0b", + "0x508c0b4100b08c0b404053680b4100b0500b994050150402c050300536034", + "0x10402c05030053690008c1002cda02d0402cda02e630150002d0402d0002c14", + "0x50e80b4100b0e41b0302f0143902d0402c050b8050150402c2202c2c01405", + "0x100014054100b0140c0143c02e66015040303a02c1e0143a02d0402c3a02c20", + "0x3f02e600143f02d0402ce302e67014e302d0402c050c4053800b4100b02c0b", + "0x502d01014e802d0402c4202e620144202d0402c400780c984051000b4100b", + "0xe8380050400b3a00b4100b3a00b98c053800b4100b3800b050050140b4100b", + "0xb01431014ea02d0402c0b02d00014054100b0f00b0b0050150402c0503005", + "0xb1300b988051300b4100b3b81e03261014ee02d0402cec02e64014ec02d04", + "0x10402c3d02e63014ea02d0402cea02c140140502d0402c0502d010143d02d04", + "0xb014310144d02d0402c0b02d00014054100b0140c0143d3a8050400b0f40b", + "0xb3dc51032610145102d0402c1702cf7014f702d0402cf502e64014f502d04", + "0x10402c4d02c140140502d0402c0502d01014f802d0402c5302e620145302d04", + "0x50300b014054100b0143d014f8134050400b3e00b4100b3e00b98c051340b", + "0x506c0b4100b0300b7e8050150402c0503005080170326840811031040300b", + "0x2302d0402d0202d00014054100b0140c0142202e6a07c1e031040301b02e69", + "0x54040b4100b0600b3c8050600b4100b4000b1f0054000b4100b07c0b9ac05", + "0x50a40b4100b0780b390050500b4100b40410030ec0150102d0402d0102c20", + "0xee0142902d0402c2902c8b0142302d0402c2302c140141102d0402c1102d01", + "0x50b0fc0ac1002c2c3f02b0410402c140a42304411234050500b4100b0500b", + "0x10402c050c4050b80b4100b4080b400050150402c2202e6c014054100b0140c", + "0x10402c1102d01014c202d0402c3102d130143102d0402c2f0400c92c050bc0b", + "0xc014c20b8110400b3080b4100b3080b930050b80b4100b0b80b050050440b", + "0xd002d0402c05168050150402c0c02df7014054100b0400b3d4050150402c05", + "0x50800b4100b0800b0500505c0b4100b05c0b404050d00b4100b3400b93805", + "0xc0300b044050300b4100b02c0b040050d02005c1002c3402d0402c3402e4c", + "0x1702c170141702d0402c1102d02014054100b0140c0150202e6d0441003104", + "0x1b02c1e0141b0800c4100b0800b06c050800b4100b0800b080050800b4100b", + "0x10402c1002c22014054100b0800b07c050150402c05030050780b9b8054100c", + "0xb0880b408050150402c050300508c0b9bc2207c0c4100c0400b044050400b", + "0x10402c1802c1b0141802d0402c1802c200141802d0402d0002c170150002d04", + "0x10402c1802c1f014054100b0140c0141402e70015040310102c1e015010600c", + "0xb0140c014fc02e710ac29031040301f02c110141f02d0402c1f02c2201405", + "0xb4100b0b80b080050b80b4100b0b00b05c050b00b4100b0ac0b4080501504", + "0xb0a40b3dc050150402c05030053080b9c8310bc0c4100c0b805030230142e", + "0x10402c3602e740143602d0402c3402e730143402d0402c3102c18014d002d04", + "0xb4100b3580b9d4053400b4100b3400b170050bc0b4100b0bc0b404053580b", + "0xb0a40b088053600b4100b3080b404050150402c0503005358d00bc1002cd6", + "0x22014d802d0402c0502d01014054100b0140c014059d80b0142b014da02d04", + "0x54100b0500b0b0050150402c05030050167602c050ac053680b4100b3f00b", + "0x50e80b4100b0e80b080050e80b4100b0e4180302f0143902d0402c050b805", + "0xb308053800b4100b01431014054100b0140c0143c02e77015040303a02c1e", + "0x4002e740144002d0402ce302e730143f02d0402c1f02cf7014e302d0402ce0", + "0xb1080b9d4050fc0b4100b0fc0b170050140b4100b0140b404051080b4100b", + "0x502d01014054100b0f00b0b0050150402c05030051083f0141002c4202d04", + "0x50150402c05030050167802c050ac053a80b4100b07c0b088053a00b4100b", + "0x279014e802d0402cd802cf8014da02d0402c2302c22014d802d0402c0502d01", + "0x54100b0780b0b0050150402c05030050167802c050ac053a80b4100b3680b", + "0x51300b4100b3b8200302f014ee02d0402c050b8053b00b4100b0400b3dc05", + "0x31014054100b0140c0143d02e7a015040304c02c1e0144c02d0402c4c02c20", + "0x502d01014f702d0402cf502e74014f502d0402c4d02e7b0144d02d0402c05", + "0xf73b0050400b3dc0b4100b3dc0b9d4053b00b4100b3b00b170050140b4100b", + "0xb1440b9f0051440b4100b01431014054100b0f40b0b0050150402c0503005", + "0x10402c5302e75014ec02d0402cec02c5c0140502d0402c0502d010145302d04", + "0x10202c22014e802d0402c0502d01014054100b0140c014533b0050400b14c0b", + "0x10402cea02cf70145602d0402cf802e7c014f802d0402c050c4053a80b4100b", + "0x110140c02d0402c0b02c1001456160e80400b1580b4100b1580b9d4051600b", + "0x505c0b4100b0440b408050150402c05030054080b9f4110400c4100c0300b", + "0x506c200310402c2002c1b0142002d0402c2002c200142002d0402c1702c17", + "0xb088050150402c2002c1f014054100b0140c0141e02e7e015040301b02c1e", + "0x102014054100b0140c0142302e7f0881f031040301002c110141002d0402c10", + "0xca00050600b4100b0600b080050600b4100b4000b05c054000b4100b0880b", + "0x50ac0b4100b07c0b3dc050150402c05030050a40ba04144040c4100c06005", + "0x5c0150102d0402d0102d010142c02d0402cfc02cdd014fc02d0402c1402e82", + "0x54100b0140c0142c0ad010400b0b00b4100b0b00b4dc050ac0b4100b0ac0b", + "0x5030050168302c050ac050bc0b4100b07c0b088050b80b4100b0a40b40405", + "0x5a0c0b0142b0142f02d0402c2302c220142e02d0402c0502d01014054100b", + "0x310800c0bc050c40b4100b0142e014054100b0780b0b0050150402c0503005", + "0x5030053400ba10054100c3080b078053080b4100b3080b080053080b4100b", + "0xc014d602e850d834031040301002c110141002d0402c1002c22014054100b", + "0xb3680b080053680b4100b3600b05c053600b4100b0d80b408050150402c05", + "0xb3dc050150402c05030050f00ba183a0e40c4100c3680503023014da02d04", + "0x3902d010143f02d0402ce302cdd014e302d0402c3a02e87014e002d0402c34", + "0x3f380390400b0fc0b4100b0fc0b4dc053800b4100b3800b170050e40b4100b", + "0x50ac050bc0b4100b0d00b088050b80b4100b0f00b404050150402c0503005", + "0x2f02d0402cd602c220142e02d0402c0502d01014054100b0140c01405a0c0b", + "0x10402c1002cf7014054100b3400b0b0050150402c05030050168302c050ac05", + "0x502d0402c0502d01014e802d0402c4202d3b0144202d0402c050c4051000b", + "0xb0140c014e8100050400b3a00b4100b3a00b4dc051000b4100b1000b17005", + "0xea02d0402c050c4050bc0b4100b4080b088050b80b4100b0140b4040501504", + "0xb3b00b4100b3b00b4dc053b80b4100b0bc0b3dc053b00b4100b3a80b4ec05", + "0x506c200328805d02031040300b0140c02c050150402c050f4053b0ee0b810", + "0x507c0ba24054100c0780b07805078110310402c1102c1b014054100b0140c", + "0xb0400ba28050880b4100b05c0b400050150402c1102c1f014054100b0140c", + "0xb4080b404050600b4100b4000ba30054000b4100b08c0c0328b0142302d04", + "0x5060224081002c1802d0402c1802e8d0142202d0402c2202c140150202d04", + "0xc4040b044054040b4100b0300b040050150402c1f02c2c014054100b0140c", + "0xfc02c17014fc02d0402c2902d02014054100b0140c0142b02e8e0a41403104", + "0x2e02c1e0142e0b00c4100b0b00b06c050b00b4100b0b00b080050b00b4100b", + "0x10402c1402c22014054100b0b00b07c050150402c05030050bc0ba3c054100c", + "0xb3080b408050150402c05030053400ba40c20c40c4100c0500b044050500b", + "0xc0d902030230143602d0402c3602c200143602d0402c3402c170143402d04", + "0xd802c180143902d0402c1702d00014054100b0140c014da02e91360d603104", + "0xb0e80b0a4053800b4100b0e40b050050f00b4100b3580b404050e80b4100b", + "0xd1014054100b0140c01405a480b0142b0143f02d0402c3102c22014e302d04", + "0xb3680b404051000b4100b05c0b400050150402c1102c1f014054100b0400b", + "0x5a4c0b0142b014ea02d0402c3102c22014e802d0402c4002c140144202d04", + "0xb05c0b400050150402c1102c1f014054100b0400b344050150402c0503005", + "0x10402cd002c22014e802d0402cec02c140144202d0402d0202d01014ec02d04", + "0xb0142e014054100b0bc0b0b0050150402c05030050169302c050ac053a80b", + "0xc1300b078051300b4100b1300b080051300b4100b3b82c0302f014ee02d04", + "0xb4100b014310144d02d0402c1702d00014054100b0140c0143d02e9401504", + "0xe002d0402c4d02c140143c02d0402d0202d01014f702d0402cf502cc2014f5", + "0x5102d0402ce30400ca54050fc0b4100b0500b0880538c0b4100b3dc0b0a405", + "0x51580b4100b0fc0b3dc053e00b4100b14c110302f0145302d0402c050b805", + "0x9f0145602d0402c5602c5c014e002d0402ce002c140143c02d0402c3c02d01", + "0x104100b3e051158e00f102354053e00b4100b3e00b080051440b4100b1440b", + "0x1002cd1014054100b0f40b0b0050150402c0503005168f61601002c5a3d858", + "0xb4100b4080b404051700b4100b05c0b400050150402c1102c1f014054100b", + "0xc01405a580b0142b0146102d0402c1402c220145f02d0402c5c02c140145e", + "0xb4100b05c0b400050150402c1102c1f014054100b0400b344050150402c05", + "0xea02d0402c2b02c22014e802d0402cf402c140144202d0402d0202d01014f4", + "0x51840b4100b3a80b9e40517c0b4100b3a00b158051780b4100b1080b3e005", + "0xca2c053cc0b4100b1840b3dc051940b4100b18c0b45c0518c0b4100b01431", + "0xb050051780b4100b1780b404051a80b4100b1a00ba30051a00b4100b194f3", + "0x50150402c05030051a85f1781002c6a02d0402c6a02e8d0145f02d0402c5f", + "0x10402c05168050150402c0c02cf6014054100b0400b344050150402c1102c1f", + "0xb4100b06c0b050050800b4100b0800b404051b40b4100b3c80ba5c053c80b", + "0xb0140c02c050150402c050f4051b41b0801002c6d02d0402c6d02e8d0141b", + "0x29a0141b02d0402c0c02e99014054100b0140c0142005c0ca61020440c4100c", + "0x508c0b4100b07c0ba70050150402c05030050880ba6c1f0780c4100c06c0b", + "0x2302c400142302d0402c2302c29014054100b0143f0150002d0402c1e02cc4", + "0x1802c420141402d0402d0202d00014054100b0140c0150102e9d0600b4100c", + "0x10402cfc02c20014fc02d0402c053a8050ac0b4100b0a40b3a0050a40b4100b", + "0xb0500b050050b80b4100b0ac2c030ec0142c02d0402cfc0400c3b0053f00b", + "0x4c014054100b0140c01405a780b0142b0143102d0402c2e02cee0142f02d04", + "0xb3400b080053400b4100b0142e014c202d0402d0202d00014054100b4040b", + "0xb0d00b3b8050bc0b4100b3080b050050d00b4100b34010030ec014d002d04", + "0x2f02d0402c2f02c140141102d0402c1102d01014054100b0143d0143102d04", + "0x10402c314002f044112f4050c40b4100b0c40b3b8054000b4100b4000b30c05", + "0xb400050150402c2202e9f014054100b0140c014d8358360400b360d60d810", + "0x3a02d130143a02d0402c390400c92c050e40b4100b01431014da02d0402d02", + "0xb0f00b930053680b4100b3680b050050440b4100b0440b404050f00b4100b", + "0x1002cf5014054100b0300ba80050150402c05030050f0da0441002c3c02d04", + "0xb4100b05c0b4040538c0b4100b3800b938053800b4100b0145a014054100b", + "0xb0400538c2005c1002ce302d0402ce302e4c0142002d0402c2002c1401417", + "0x102014054100b0140c0150202ea104410031040300c02c110140c02d0402c0b", + "0xb06c050800b4100b0800b080050800b4100b05c0b05c0505c0b4100b0440b", + "0xb07c050150402c05030050780ba88054100c06c0b0780506c200310402c20", + "0x508c0ba8c2207c0c4100c0400b044050400b4100b0400b088050150402c20", + "0x1802c200141802d0402d0002c170150002d0402c2202d02014054100b0140c", + "0x22014054100b0140c0142902ea40510103104030180140c704050600b4100b", + "0x50150402c05030050b00ba94fc0ac0c4100c07c0b0440507c0b4100b07c0b", + "0x1c40142f02d0402c2f02c200142f02d0402c2e02c170142e02d0402cfc02d02", + "0x3402d0402c2b02cf7014054100b0140c014d002ea630831031040302f4040c", + "0xd802d0402cd602ea7014d602d0402c3602d160143602d0402cc20500c72005", + "0xb3600b4100b3600baa0050d00b4100b0d00b170050c40b4100b0c40b40405", + "0xda02d0402cd002d01014054100b0500b588050150402c0503005360340c410", + "0xb0500b588050150402c0503005016a902c050ac050e40b4100b0ac0b08805", + "0x5016a902c050ac050e40b4100b0b00b088053680b4100b4040b4040501504", + "0xb0142b0143902d0402c1f02c22014da02d0402c2902d01014054100b0140c", + "0x50e40b4100b08c0b088053680b4100b0140b404050150402c0503005016a9", + "0xb4100b0400b3dc050150402c1e02c2c014054100b0140c01405aa40b0142b", + "0xe002d0402ce002c20014e002d0402c3c0800c0bc050f00b4100b0142e0143a", + "0x2ab0143f02d0402c050c4050150402c050300538c0baa8054100c3800b07805", + "0xb170050140b4100b0140b404051080b4100b1000ba9c051000b4100b0fc0b", + "0x50150402c05030051083a0141002c4202d0402c4202ea80143a02d0402c3a", + "0x502d01014ea02d0402ce802eac014e802d0402c050c4050150402ce302c2c", + "0xea0e8050400b3a80b4100b3a80baa0050e80b4100b0e80b170050140b4100b", + "0x50c4050e40b4100b4080b088053680b4100b0140b404050150402c0503005", + "0xb3b80baa0051300b4100b0e40b3dc053b80b4100b3b00bab0053b00b4100b", + "0xb044050400b4100b0300b040050150402c050f4053b84c3681002cee02d04", + "0x170142002d0402d0202d02014054100b0140c0141702ead408110310403010", + "0x1e0141e06c0c4100b06c0b06c0506c0b4100b06c0b0800506c0b4100b0800b", + "0x1102c22014054100b06c0b07c050150402c050300507c0bab8054100c0780b", + "0xb408050150402c05030054000babc230880c4100c0440b044050440b4100b", + "0xb0880b3dc050500b4100b016340150102d0402c1802c170141802d0402c23", + "0x10402c2902c5c0140b02d0402c0b02c140140502d0402c0502d010142902d04", + "0x140a40b015028d8054040b4100b4040b080050500b4100b0500b8d4050a40b", + "0x50150402c05030050bc0bac02e02d040302c02e370142c3f02b0410402d01", + "0x54100b0140c0143402eb13400b4100c3080b8e805308310310402c2e02e39", + "0x53600b4100b3580bacc053580b4100b3400bac8050d80b4100b3f00b40005", + "0x50ac0b4100b0ac0b404050e40b4100b3680bad4053680b4100b36031032b4", + "0x10402c05030050e4360ac1002c3902d0402c3902eb60143602d0402c3602c14", + "0xe002d0402c3a02c140143c02d0402c2b02d010143a02d0402cfc02d0001405", + "0x503005016b702c050ac050fc0b4100b0c40b1700538c0b4100b0d00b90005", + "0x10402cfc02c140142b02d0402c2b02d010144002d0402c2f02eb8014054100b", + "0xb02d00014054100b0140c014403f02b0400b1000b4100b1000bad8053f00b", + "0x10402c0502d01014ea02d0402d0002cf7014e802d0402c050c4051080b4100b", + "0xb4100b3a80b1700538c0b4100b3a00b900053800b4100b1080b050050f00b", + "0x10402c050b8050150402c1f02c2c014054100b0140c01405adc0b0142b0143f", + "0x104030ee02c1e014ee02d0402cee02c20014ee02d0402cec06c0c0bc053b00b", + "0xc4100c0440b044050440b4100b0440b088050150402c05030051300bae405", + "0x10402cf702c17014f702d0402c4d02d02014054100b0140c014f502eba1343d", + "0x502d0402c0502d01014f802d0402c3d02cf70145302d0402c05aec051440b", + "0x514c0b4100b14c0baf0053e00b4100b3e00b1700502c0b4100b02c0b05005", + "0xf602d18014f6160560410402c5114cf802c0540abd0145102d0402c5102c20", + "0xbb000517c5e0310402c5a02ebf014054100b0140c0145c02ebe1680b4100c", + "0xbb080518c0b4100b1600b400050150402c05030053d00bb046102d040305f", + "0xbad4051a00b4100b3cc5e032b4014f302d0402c6502eb30146502d0402c61", + "0x6a02eb60146302d0402c6302c140145602d0402c5602d010146a02d0402c68", + "0x101014f202d0402c5802d00014054100b0140c0146a18c560400b1a80b4100b", + "0xb1700538c0b4100b3d00b900053800b4100b3c80b050050f00b4100b1580b", + "0x6d02d0402c5c02eb8014054100b0140c01405adc0b0142b0143f02d0402c5e", + "0xb1b40b4100b1b40bad8051600b4100b1600b050051580b4100b1580b40405", + "0xef02d0402c050c4051bc0b4100b02c0b400050150402c05030051b45815810", + "0x53800b4100b1bc0b050050f00b4100b0140b404051c80b4100b3d40b3dc05", + "0x2b40147402d0402ce302ec30143f02d0402c7202c5c014e302d0402cef02e40", + "0x140143c02d0402c3c02d010150702d0402ced02eb5014ed02d0402c740fc0c", + "0x54100b0140c015073803c0400b41c0b4100b41c0bad8053800b4100b3800b", + "0x310150902d0402c1102cf70147602d0402c0b02d00014054100b1300b0b005", + "0xbad4053ac0b4100b1e909032b40147a02d0402c7802ec30147802d0402c05", + "0x7d02eb60147602d0402c7602c140140502d0402c0502d010147d02d0402ceb", + "0x310147c02d0402c0b02d00014054100b0140c0147d1d8050400b1f40b4100b", + "0x81032b40148102d0402c1702cf7014e902d0402c7f02ec30147f02d0402c05", + "0x7c02c140140502d0402c0502d010148302d0402ce702eb5014e702d0402ce9", + "0xb014054100b0143d014831f0050400b20c0b4100b20c0bad8051f00b4100b", + "0xb4100b0300bb14050150402c050300508017032c440811031040300b0140c", + "0x10402d0202d00014054100b0140c0142202ec707c1e031040301b02ec60141b", + "0xb4100b0600b3a0050600b4100b4000b108054000b4100b07c0bb200508c0b", + "0xb4100b0780b5f4050500b4100b40410030ec0150102d0402d0102c2001501", + "0x2902d0402c2902d7e0142302d0402c2302c140141102d0402c1102d0101429", + "0xfc0ac1002c2c3f02b0410402c140a423044115fc050500b4100b0500b3b805", + "0x50c4050b80b4100b4080b400050150402c2202ec9014054100b0140c0142c", + "0x1102d01014c202d0402c3102d130143102d0402c2f0400c92c050bc0b4100b", + "0xc20b8110400b3080b4100b3080b930050b80b4100b0b80b050050440b4100b", + "0x10402c05168050150402c0c02eca014054100b0400b3d4050150402c0503005", + "0xb4100b0800b0500505c0b4100b05c0b404050d00b4100b3400b938053400b", + "0xb044050300b4100b02c0b040050d02005c1002c3402d0402c3402e4c01420", + "0x170141702d0402c1102d02014054100b0140c0150202ecb04410031040300c", + "0xf70141b0400c4100b0400bb30050400b4100b0400b088050800b4100b05c0b", + "0x1e0141f0800c4100b0800b06c050800b4100b0800b080050780b4100b06c0b", + "0x2002c1f014054100b0400b3f0050150402c05030050880bb34054100c07c0b", + "0xb07805030ed0141e02d0402c1e02c5c0140502d0402c0502d01014054100b", + "0xbb3c050150402c05030050500bb390102d040301802d07014184002304104", + "0x10002c5c0142302d0402c2302d010142b02d0402c2902d1b0142902d0402d01", + "0x2d1014054100b0140c0142b400230400b0ac0b4100b0ac0bb40054000b4100b", + "0xbb40054000b4100b4000b1700508c0b4100b08c0b404053f00b4100b0500b", + "0x2e014054100b0880b0b0050150402c05030053f10008c1002cfc02d0402cfc", + "0xb078050b80b4100b0b80b080050b80b4100b0b0200302f0142c02d0402c05", + "0xc0400b044050150402c1e02cf6014054100b0140c0142f02ed2015040302e", + "0x3402c170143402d0402cc202d02014054100b0140c014d002ed33083103104", + "0xda02ed4360d603104030360140c08c050d80b4100b0d80b080050d80b4100b", + "0xbb543a0e40c4100c0c40b044050c40b4100b0c40b088050150402c0503005", + "0x20014e302d0402ce002c17014e002d0402c3a02d02014054100b0140c0143c", + "0x54100b0140c0144202ed61003f03104030e33580c08c0538c0b4100b38c0b", + "0xec02d0402cea02ed8014ea02d0402c403600cb5c053a00b4100b0e40b3dc05", + "0x53a00b4100b3a00b170050fc0b4100b0fc0b404053b80b4100b3b00b46c05", + "0x54100b3600b2ec050150402c05030053b8e80fc1002cee02d0402cee02ed0", + "0x503005016d902c050ac050f40b4100b0e40b088051300b4100b1080b40405", + "0xb4100b0f00b088051300b4100b3580b404050150402cd802cbb014054100b", + "0x3102c220144c02d0402cda02d01014054100b0140c01405b640b0142b0143d", + "0x51300b4100b0140b404050150402c0503005016d902c050ac050f40b4100b", + "0x10402c2f02c2c014054100b0140c01405b640b0142b0143d02d0402cd002c22", + "0x101014f502d0402c4d02ed10144d02d0402c050c4050150402c1002cfc01405", + "0x50400b3d40b4100b3d40bb40050780b4100b0780b170050140b4100b0140b", + "0x50f40b4100b4080b088051300b4100b0140b404050150402c05030053d41e", + "0xbb400514c0b4100b0f40b3dc051440b4100b3dc0bb44053dc0b4100b01431", + "0x50400b4100b0300b040050150402c050f405144531301002c5102d0402c51", + "0x2002d0402d0202d02014054100b0140c0141702eda40811031040301002c11", + "0x506c0b4100b06c0b080050780b4100b0440b3dc0506c0b4100b0800b05c05", + "0x50150402c05030050880bb6c054100c07c0b0780507c1b0310402c1b02c1b", + "0xb1700502c0b4100b02c0b050050140b4100b0140b404050150402c1b02c1f", + "0x10102d040301802e5a01418400230410402c1e02c05042590141e02d0402c1e", + "0xb4100c0ac0b974050ac290310402d0102e5c014054100b0140c0141402edc", + "0xb4100b3f00bb78050b80b4100b4000b400050150402c05030050b00bb74fc", + "0xb4100b3080bb84053080b4100b0c429032e00143102d0402c2f02edf0142f", + "0xd002d0402cd002ee20142e02d0402c2e02c140142302d0402c2302d01014d0", + "0x10402c2302d010143402d0402d0002d00014054100b0140c014d00b8230400b", + "0xb4100b0a40b170053600b4100b0b00b900053580b4100b0d00b050050d80b", + "0x2302d010143902d0402c1402ee4014054100b0140c01405b8c0b0142b014da", + "0x39400230400b0e40b4100b0e40bb88054000b4100b4000b0500508c0b4100b", + "0x3a06c0c0bc050e80b4100b0142e014054100b0880b0b0050150402c0503005", + "0x5030053800bb94054100c0f00b078050f00b4100b0f00b080050f00b4100b", + "0x10402c1e02c5c0140b02d0402c0b02c140140502d0402c0502d01014054100b", + "0xe802ee81080b4100c1000bb9c051003f38c104100b0780b01410b98050780b", + "0xbbacee02d04030ec02eea014ec3a80c4100b1080bba4050150402c0503005", + "0x2df0144d02d0402cee02eec0143d02d0402c3f02d00014054100b0140c0144c", + "0x1010145102d0402cf702ee1014f702d0402cf53a80cb80053d40b4100b1340b", + "0xe30400b1440b4100b1440bb88050f40b4100b0f40b0500538c0b4100b38c0b", + "0x50d80b4100b38c0b4040514c0b4100b0fc0b400050150402c05030051443d", + "0x2ed014da02d0402cea02c5c014d802d0402c4c02e40014d602d0402c5302c14", + "0x1010145802d0402c5602ee10145602d0402cf83680cb80053e00b4100b3600b", + "0x360400b1600b4100b1600bb88053580b4100b3580b050050d80b4100b0d80b", + "0x538c0b4100b38c0b404053d80b4100b3a00bb90050150402c0503005160d6", + "0x10402c05030053d83f38c1002cf602d0402cf602ee20143f02d0402c3f02c14", + "0x2ed0145c02d0402c050c4051680b4100b02c0b400050150402ce002c2c01405", + "0x1010146102d0402c5f02ee10145f02d0402c5e0780cb80051780b4100b1700b", + "0x50400b1840b4100b1840bb88051680b4100b1680b050050140b4100b0140b", + "0x2ed0146302d0402c050c4053d00b4100b02c0b400050150402c05030051845a", + "0x2e10146802d0402c653cc0cb80053cc0b4100b05c0b3dc051940b4100b18c0b", + "0xbb88053d00b4100b3d00b050050140b4100b0140b404051a80b4100b1a00b", + "0xc4100c0300b044050300b4100b02c0b040051a8f40141002c6a02d0402c6a", + "0x10402c1702c170141702d0402c1102d02014054100b0140c0150202eee04410", + "0x10402c1b02cf70141b0400c4100b0400bb30050400b4100b0400b088050800b", + "0x1040301f02c1e0141f0800c4100b0800b06c050800b4100b0800b080050780b", + "0x50150402c2002c1f014054100b0400b3f0050150402c05030050880bbbc05", + "0x10008c104100b07805030370141e02d0402c1e02c5c0140502d0402c0502d01", + "0xb4100b4040bbc4050150402c05030050500bbc10102d040301802c9601418", + "0x10002d0402d0002c5c0142302d0402c2302d010142b02d0402c2902ef201429", + "0x10402c1402ef4014054100b0140c0142b400230400b0ac0b4100b0ac0bbcc05", + "0xb4100b3f00bbcc054000b4100b4000b1700508c0b4100b08c0b404053f00b", + "0xb4100b0142e014054100b0880b0b0050150402c05030053f10008c1002cfc", + "0x54100c0b80b078050b80b4100b0b80b080050b80b4100b0b0200302f0142c", + "0xc20c40c4100c0400b044050150402c1e02cf6014054100b0140c0142f02ef5", + "0x3602d0402c3402c170143402d0402cc202d02014054100b0140c014d002ef6", + "0xb0140c014da02ef7360d603104030360140c710050d80b4100b0d80b08005", + "0xb4100b0e80bbc8050e80b4100b3600bbe0050e40b4100b0c40b3dc0501504", + "0x3c02d0402c3c02ef30143902d0402c3902c5c014d602d0402cd602d010143c", + "0x10402c3102c22014e002d0402cda02d01014054100b0140c0143c0e4d60400b", + "0xb088053800b4100b0140b404050150402c0503005016f902c050ac0538c0b", + "0x50150402c2f02c2c014054100b0140c01405be40b0142b014e302d0402cd0", + "0x502d010144002d0402c3f02ef40143f02d0402c050c4050150402c1002cfc", + "0x40078050400b1000b4100b1000bbcc050780b4100b0780b170050140b4100b", + "0x50c40538c0b4100b4080b088053800b4100b0140b404050150402c0503005", + "0xb3a00bbcc053a80b4100b38c0b3dc053a00b4100b1080bbd0051080b4100b", + "0x110400c4100c0300b044050300b4100b02c0b040053a0ea3801002ce802d04", + "0x2002d0402c1702c170141702d0402c1102d02014054100b0140c0150202efa", + "0x2fb015040301b02c1e0141b0800c4100b0800b06c050800b4100b0800b08005", + "0x110141002d0402c1002c22014054100b0800b07c050150402c05030050780b", + "0x54000b4100b0880b408050150402c050300508c0bbf02207c0c4100c0400b", + "0x144040c4100c06005032800141802d0402c1802c200141802d0402d0002c17", + "0xfc02d0402c1402efe0142b02d0402c1f02cf7014054100b0140c0142902efd", + "0x50ac0b4100b0ac0b170054040b4100b4040b404050b00b4100b3f00bbfc05", + "0xb4100b0a40b404050150402c05030050b02b4041002c2c02d0402c2c02f00", + "0x502d01014054100b0140c01405c040b0142b0142f02d0402c1f02c220142e", + "0x50150402c05030050170102c050ac050bc0b4100b08c0b088050b80b4100b", + "0xb080053080b4100b0c4200302f0143102d0402c050b8050150402c1e02c2c", + "0x1002c22014054100b0140c014d002f0201504030c202c1e014c202d0402cc2", + "0xb408050150402c05030053580bc0c360d00c4100c0400b044050400b4100b", + "0xda02c1b014da02d0402cda02c20014da02d0402cd802c17014d802d0402c36", + "0xda02c1f014054100b0140c0143a02f04015040303902c1e014393680c4100b", + "0xc014e302f053803c031040303402c110143402d0402c3402c22014054100b", + "0xb1000b080051000b4100b0fc0b05c050fc0b4100b3800b408050150402c05", + "0xb3dc050150402c05030053a80bc18e81080c4100c10005031c40144002d04", + "0x4c02eff0144c02d0402cee02f08014ee02d0402ce802f07014ec02d0402c3c", + "0xb0f40bc00053b00b4100b3b00b170051080b4100b1080b404050f40b4100b", + "0xb088051340b4100b3a80b404050150402c05030050f4ec1081002c3d02d04", + "0x4d02d0402c0502d01014054100b0140c01405c240b0142b014f502d0402c3c", + "0xb0e80b0b0050150402c05030050170902c050ac053d40b4100b38c0b08805", + "0xb4100b1440b080051440b4100b3dcda0302f014f702d0402c050b80501504", + "0x53e00b4100b01431014054100b0140c0145302f0a015040305102c1e01451", + "0x2ff014f602d0402c5602f080145802d0402c3402cf70145602d0402cf802f0b", + "0xbc00051600b4100b1600b170050140b4100b0140b404051680b4100b3d80b", + "0x101014054100b14c0b0b0050150402c0503005168580141002c5a02d0402c5a", + "0x10402c05030050170102c050ac050bc0b4100b0d00b088050b80b4100b0140b", + "0x2e02d0402c4d02cf8014f502d0402cd602c220144d02d0402c0502d0101405", + "0xb3400b0b0050150402c05030050170102c050ac050bc0b4100b3d40b9e405", + "0x5f02d0402c5e02f0c0145e02d0402c050c4051700b4100b0400b3dc0501504", + "0xb17c0b4100b17c0bc00051700b4100b1700b170050140b4100b0140b40405", + "0xb4100b4080b088050b80b4100b0140b404050150402c050300517c5c01410", + "0x518c0b4100b0bc0b3dc053d00b4100b1840bc30051840b4100b014310142f", + "0xc0300b044050300b4100b02c0b040053d0630b81002cf402d0402cf402f00", + "0x1702c170141702d0402c1102d02014054100b0140c0150202f0d0441003104", + "0x1f02f0e0781b03104030200140c704050800b4100b0800b080050800b4100b", + "0xbc3c230880c4100c0400b044050400b4100b0400b088050150402c0503005", + "0x200150102d0402c1802c170141802d0402c2302d02014054100b0140c01500", + "0x54100b0140c0142b02f100a414031040310106c0c704054040b4100b4040b", + "0x10402c05030050b80bc442c3f00c4100c0880b044050880b4100b0880b08805", + "0x3102d0402c3102c200143102d0402c2f02c170142f02d0402c2c02d0201405", + "0x10402cfc02cf7014054100b0140c0143402f12340c203104030310500c71005", + "0xb3600bc4c053600b4100b3581e0311d014d602d0402cd00a40c720050d80b", + "0x10402cda02f140143602d0402c3602c5c014c202d0402cc202d01014da02d04", + "0xb0780b588050150402c2902d62014054100b0140c014da0d8c20400b3680b", + "0x50171502c050ac050e80b4100b3f00b088050e40b4100b0d00b4040501504", + "0x10402c1402d01014054100b0780b588050150402c2902d62014054100b0140c", + "0xb588050150402c05030050171502c050ac050e80b4100b0b80b088050e40b", + "0x31502c050ac050e80b4100b0880b088050e40b4100b0ac0b404050150402c1e", + "0xb088050e40b4100b06c0b404050150402c1e02d62014054100b0140c01405", + "0x3902d0402c1f02d01014054100b0140c01405c540b0142b0143a02d0402d00", + "0xb0140b404050150402c05030050171502c050ac050e80b4100b0400b08805", + "0xb4100b0f00bc58050f00b4100b014310143a02d0402d0202c220143902d04", + "0xb04005380e30e41002ce002d0402ce002f14014e302d0402c3a02cf7014e0", + "0x102014054100b0140c0150202f1704410031040300c02c110140c02d0402c0b", + "0xc08c050800b4100b0800b080050800b4100b05c0b05c0505c0b4100b0440b", + "0x50400b4100b0400b088050150402c050300507c0bc601e06c0c4100c08005", + "0x1802d0402c2302d02014054100b0140c0150002f1908c22031040301002c11", + "0x14031040310106c0ca00054040b4100b4040b080054040b4100b0600b05c05", + "0xb4100b0500b404053f00b4100b0880b3dc050150402c05030050ac0bc6829", + "0xc0bc0bc70050bc2e0b0104100b3f0140331b014fc02d0402cfc02c5c01414", + "0x11c7c050d834340104100b0c40bc78050150402c05030053080bc743102d04", + "0xda02d0402cd802f20014d802d0402cd60780c478053580b4100b0d83434029", + "0xb3680b4100b3680bc84050b80b4100b0b80b170050b00b4100b0b00b40405", + "0x50150402c1e02cbb014054100b3080b130050150402c05030053682e0b010", + "0xb088050e80b4100b0b00b404050e40b4100b0b80b040050150402c2902f22", + "0x50150402c1e02cbb014054100b0140c01405c8c0b0142b0143c02d0402c39", + "0xb0140c01405c900b0142b014e302d0402c2202c22014e002d0402c2b02d01", + "0xe302d0402d0002c22014e002d0402c1b02d01014054100b0780b2ec0501504", + "0x5030050172302c050ac050f00b4100b38c0b9e4050e80b4100b3800b3e005", + "0x5c8c0b0142b0143c02d0402c1002c220143a02d0402c1f02d01014054100b", + "0x50c4050f00b4100b4080b088050e80b4100b0140b404050150402c0503005", + "0xb1000bc84051080b4100b0f00b3dc051000b4100b0fc0bc94050fc0b4100b", + "0xb0143d014054100b017270141102d0402c05c9805100420e81002c4002d04", + "0x50300506c0bca02005c0c4100c4080b044054080b4100b0300b0400501504", + "0xb0400b05c050400b4100b04011033290141002d0402c2002d02014054100b", + "0xb088050150402c050300508c0bca82207c0c4100c07805030230141e02d04", + "0x102014054100b0140c0150102f2b06100031040301702c110141702d0402c17", + "0x10002cf70142b02d0402c05cb0050a40b4100b0500b05c050500b4100b0600b", + "0xb3f00b1700502c0b4100b02c0b0500507c0b4100b07c0b404053f00b4100b", + "0xfc02c1f40b2e0142902d0402c2902c200142b02d0402c2b02f2d014fc02d04", + "0x54100b0140c014c202f2f0c40b4100c0bc0b470050bc2e0b0104100b0a42b", + "0x10402c05030053580bcc83602d040303402f31014343400c4100b0c40bcc005", + "0x54100b3680bcd0050e4da0310402c3602f33014d802d0402c2e02d0001405", + "0xe002d0402c3c02d1a0143c02d0402c3a0880ccd4050e80b4100b0e40b39005", + "0x2c02d0402c2c02d010143f02d0402ce302f37014e302d0402ce03400ccd805", + "0xb0140c0143f3602c0400b0fc0b4100b0fc0bce0053600b4100b3600b05005", + "0x4202d0402c2c02d010144002d0402c2e02d00014054100b0880b2ec0501504", + "0x53b00b4100b3400b170053a80b4100b3580b900053a00b4100b1000b05005", + "0xb4100b3080bce8050150402c2202cbb014054100b0140c01405ce40b0142b", + "0xee02d0402cee02f380142e02d0402c2e02c140142c02d0402c2c02d01014ee", + "0xb4100b02c0b400050150402c2202cbb014054100b0140c014ee0b82c0400b", + "0x51080b4100b07c0b404051340b4100b4040b3dc050f40b4100b014310144c", + "0x33b014ec02d0402c4d02c5c014ea02d0402c3d02e40014e802d0402c4c02c14", + "0x1010145102d0402cf702f37014f702d0402cf53b00ccd8053d40b4100b3a80b", + "0x420400b1440b4100b1440bce0053a00b4100b3a00b050051080b4100b1080b", + "0x53e00b4100b08c0b4040514c0b4100b02c0b400050150402c0503005144e8", + "0xb0140c01405cf00b0142b0145802d0402c1702c220145602d0402c5302c14", + "0xf802d0402c0502d01014f602d0402c0b02d00014054100b0440bcf40501504", + "0x33b0145a02d0402c050c4051600b4100b06c0b088051580b4100b3d80b05005", + "0x3370145f02d0402c5c1780ccd8051780b4100b1600b3dc051700b4100b1680b", + "0xbce0051580b4100b1580b050053e00b4100b3e00b404051840b4100b17c0b", + "0xc4100c0300b044050300b4100b02c0b04005184563e01002c6102d0402c61", + "0x10402c1702c170141702d0402c1102d02014054100b0140c0150202f3e04410", + "0xc0141f02f3f0781b03104030200140c08c050800b4100b0800b080050800b", + "0x54000bd00230880c4100c0400b044050400b4100b0400b088050150402c05", + "0x10102c200150102d0402c1802c170141802d0402c2302d02014054100b0140c", + "0xf7014054100b0140c0142b02f410a414031040310106c0c08c054040b4100b", + "0xc454053f00b4100b3f00b170050500b4100b0500b404053f00b4100b0880b", + "0x54100b0140c014c202f430c40b4100c0bc0bd08050bc2e0b0104100b3f014", + "0x1e03346014d602d0402c360d0d00a411d14050d834340104100b0c40bd1005", + "0x2e02c5c0142c02d0402c2c02d01014da02d0402cd802d19014d802d0402cd6", + "0x4c014054100b0140c014da0b82c0400b3680b4100b3680bd1c050b80b4100b", + "0x10402c2e02c10014054100b0a40b2ec050150402c1e02cbb014054100b3080b", + "0x50174802c050ac050f00b4100b0e40b088050e80b4100b0b00b404050e40b", + "0xb0880b088053800b4100b0ac0b404050150402c1e02cbb014054100b0140c", + "0xb404050150402c1e02cbb014054100b0140c01405d240b0142b014e302d04", + "0xe302e790143a02d0402ce002cf8014e302d0402d0002c22014e002d0402c1b", + "0x50e80b4100b07c0b404050150402c05030050174802c050ac050f00b4100b", + "0x10402c0502d01014054100b0140c01405d200b0142b0143c02d0402c1002c22", + "0x4002d0402c3f02f4a0143f02d0402c050c4050f00b4100b4080b088050e80b", + "0xb02c10014401083a0400b1000b4100b1000bd1c051080b4100b0f00b3dc05", + "0xb408050150402c05030054080bd2c110400c4100c0300b044050300b4100b", + "0x5031c40142002d0402c2002c200142002d0402c1702c170141702d0402c11", + "0x110141002d0402c1002c22014054100b0140c0141f02f4c0781b0310403020", + "0x50600b4100b08c0b408050150402c05030054000bd34230880c4100c0400b", + "0x5051010310402d0102c1b0150102d0402d0102c200150102d0402c1802c17", + "0xb088050150402d0102c1f014054100b0140c0142902f4e015040301402c1e", + "0x102014054100b0140c0142c02f4f3f02b031040302202c110142202d0402c22", + "0xca00050bc0b4100b0bc0b080050bc0b4100b0b80b05c050b80b4100b3f00b", + "0x50d00b4100b0ac0b3dc050150402c05030053400bd40c20c40c4100c0bc1b", + "0x53600b4100b3580bd4c053580b4100b0d81e033520143602d0402cc202f51", + "0x1002cd802d0402cd802f540143402d0402c3402c5c0143102d0402c3102d01", + "0x53680b4100b3400b404050150402c1e02d5f014054100b0140c014d80d031", + "0x10402c1e02d5f014054100b0140c01405d540b0142b0143902d0402c2b02c22", + "0xc01405d540b0142b0143902d0402c2c02c22014da02d0402c1b02d0101405", + "0x10402c3a4040c0bc050e80b4100b0142e014054100b0a40b0b0050150402c05", + "0x10402c05030053800bd58054100c0f00b078050f00b4100b0f00b080050f00b", + "0x51000b4100b0880b3dc050fc0b4100b38c0b4500538c0b4100b0143101405", + "0x506c0b4100b06c0b404053a00b4100b1080bd4c051080b4100b0fc1e03352", + "0x10402c05030053a04006c1002ce802d0402ce802f540144002d0402c4002c5c", + "0x22014ea02d0402c1b02d01014054100b0780b57c050150402ce002c2c01405", + "0x54100b0780b57c050150402c05030050175702c050ac053b00b4100b0880b", + "0x53a80b4100b3680b3e0050e40b4100b4000b088053680b4100b06c0b40405", + "0x10402c1f02d01014054100b0140c01405d5c0b0142b014ec02d0402c3902e79", + "0xb404050150402c05030050175702c050ac053b00b4100b0400b088053a80b", + "0xb3b80bd60053b80b4100b01431014ec02d0402d0202c22014ea02d0402c05", + "0x51303d3a81002c4c02d0402c4c02f540143d02d0402cec02cf70144c02d04", + "0x54100b0140c0150202f5904410031040300c02c110140c02d0402c0b02c10", + "0x50800b4100b0800b080050800b4100b05c0b05c0505c0b4100b0440b40805", + "0x50150402c05030050780bd68054100c06c0b0780506c200310402c2002c1b", + "0xbd6c2207c0c4100c0400b044050400b4100b0400b088050150402c2002c1f", + "0x200141802d0402d0002c170150002d0402c2202d02014054100b0140c01423", + "0x54100b0140c0142902f5c0510103104030180140ca00050600b4100b0600b", + "0x50b00b4100b3f00bd78053f00b4100b0500bd74050ac0b4100b07c0b3dc05", + "0x1002c2c02d0402c2c02f5f0142b02d0402c2b02c5c0150102d0402d0102d01", + "0x2f02d0402c1f02c220142e02d0402c2902d01014054100b0140c0142c0ad01", + "0xb08c0b088050b80b4100b0140b404050150402c05030050176002c050ac05", + "0x50b8050150402c1e02c2c014054100b0140c01405d800b0142b0142f02d04", + "0xc202c1e014c202d0402cc202c20014c202d0402c310800c0bc050c40b4100b", + "0xc0400b044050400b4100b0400b088050150402c05030053400bd84054100c", + "0xd802c17014d802d0402c3602d02014054100b0140c014d602f620d83403104", + "0x3c02f630e83903104030da0140c704053680b4100b3680b080053680b4100b", + "0xbd780538c0b4100b0e80b47c053800b4100b0d00b3dc050150402c0503005", + "0x3f02f5f014e002d0402ce002c5c0143902d0402c3902d010143f02d0402ce3", + "0x220142e02d0402c3c02d01014054100b0140c0143f380390400b0fc0b4100b", + "0xb4100b0140b404050150402c05030050176002c050ac050bc0b4100b0d00b", + "0xd002c2c014054100b0140c01405d800b0142b0142f02d0402cd602c220142e", + "0xb4100b1080bd90051080b4100b014310144002d0402c1002cf7014054100b", + "0xe802d0402ce802f5f0144002d0402c4002c5c0140502d0402c0502d01014e8", + "0x10402d0202c220142e02d0402c0502d01014054100b0140c014e8100050400b", + "0xee02d0402c2f02cf7014ec02d0402cea02f64014ea02d0402c050c4050bc0b", + "0x502c0c3b00502c0b4100b014e0014ec3b82e0400b3b00b4100b3b00bd7c05", + "0xb0440bd9c050440b4100b03010033660141002d0402c05d94050300b4100b", + "0x200336805d02031040300b0140c02c050150402c050f4050440b02c1102d04", + "0xbda4054100c0780b07805078110310402c1102c1b014054100b0140c0141b", + "0xb8f0050880b4100b05c0b400050150402c1102c1f014054100b0140c0141f", + "0xb404050600b4100b4000bdac054000b4100b08c0c0336a0142302d0402c10", + "0x224081002c1802d0402c1802f6c0142202d0402c2202c140150202d0402d02", + "0xb044054040b4100b0300b040050150402c1f02c2c014054100b0140c01418", + "0x17014fc02d0402c2902d02014054100b0140c0142b02f6d0a4140310403101", + "0x36e0bc2e031040302c4080ca00050b00b4100b0b00b080050b00b4100b3f00b", + "0xd002d0402c2f0400cdbc053080b4100b05c0b400050150402c05030050c40b", + "0x53580b4100b0500b3dc050d80b4100b0d0110302f0143402d0402c050b805", + "0x235014d602d0402cd602c5c014c202d0402cc202c140142e02d0402c2e02d01", + "0x104100b0d8d0358c20b9028d8050d80b4100b0d80b080053400b4100b3400b", + "0x1002f70014054100b0440b07c050150402c05030050e4da3601002c39368d8", + "0x10402c3a02c140143c02d0402c3102d010143a02d0402c1702d00014054100b", + "0xb07c050150402c05030050177102c050ac0538c0b4100b0500b088053800b", + "0x10402d0202d010143f02d0402c1702d00014054100b0400bdc0050150402c11", + "0x4002d0402c050c40538c0b4100b0ac0b088053800b4100b0fc0b050050f00b", + "0xea02d0402c423a00cda8053a00b4100b38c0b3dc051080b4100b1000b91405", + "0x53800b4100b3800b050050f00b4100b0f00b404053b00b4100b3a80bdac05", + "0x54100b0440b07c050150402c05030053b0e00f01002cec02d0402cec02f6c", + "0xee02f72014ee02d0402c05168050150402c0c02cf6014054100b0400bdc005", + "0xb1300bdb00506c0b4100b06c0b050050800b4100b0800b404051300b4100b", + "0xb0143d014054100b017270141102d0402c05c98051301b0801002c4c02d04", + "0x50300506c0bdcc2005c0c4100c4080b044054080b4100b0300b0400501504", + "0xb0400b05c050400b4100b04011033290141002d0402c2002d02014054100b", + "0xb088050150402c050300508c0bdd02207c0c4100c07805031c40141e02d04", + "0x102014054100b0140c0150102f7506100031040301702c110141702d0402c17", + "0x10002cf70142b02d0402c05cb0050a40b4100b0500b05c050500b4100b0600b", + "0xb3f00b1700502c0b4100b02c0b0500507c0b4100b07c0b404053f00b4100b", + "0xfc02c1f40b2e0142902d0402c2902c200142b02d0402c2b02f2d014fc02d04", + "0x54100b0140c014c202f760c40b4100c0bc0b470050bc2e0b0104100b0a42b", + "0x10402c05030053580bddc3602d040303402f31014343400c4100b0c40bcc005", + "0xb4100b3680b97c053680b4100b0d82203378014d802d0402c2e02d0001405", + "0xb4100b0b00b404050f00b4100b0e80bde8050e80b4100b0e4d00337901439", + "0x5030050f0d80b01002c3c02d0402c3c02f7b014d802d0402cd802c140142c", + "0xe002d0402c2e02d00014054100b0880b57c050150402cd602c4c014054100b", + "0x51000b4100b3800b050050fc0b4100b0b00b4040538c0b4100b3400b04005", + "0x10402c2202d5f014054100b0140c01405df00b0142b0144202d0402ce302c22", + "0x2e02d0402c2e02c140142c02d0402c2c02d01014e802d0402cc202f7d01405", + "0x10402c2202d5f014054100b0140c014e80b82c0400b3a00b4100b3a00bdec05", + "0x4002d0402cea02c140143f02d0402c1f02d01014ea02d0402c0b02d0001405", + "0x267014ee02d0402c4202cf7014ec02d0402c050c4051080b4100b4040b08805", + "0x1010144d02d0402c3d02f7a0143d02d0402c4c3b80cde4051300b4100b3b00b", + "0x3f0400b1340b4100b1340bdec051000b4100b1000b050050fc0b4100b0fc0b", + "0x53dc0b4100b08c0b404053d40b4100b02c0b400050150402c050300513440", + "0xb0140c01405df80b0142b0145302d0402c1702c220145102d0402cf502c14", + "0xf702d0402c0502d01014f802d0402c0b02d00014054100b0440bcf40501504", + "0x2670145602d0402c050c40514c0b4100b06c0b088051440b4100b3e00b05005", + "0x37a0145a02d0402c583d80cde4053d80b4100b14c0b3dc051600b4100b1580b", + "0xbdec051440b4100b1440b050053dc0b4100b3dc0b404051700b4100b1680b", + "0x102031040300b0140c02c050150402c050f405170513dc1002c5c02d0402c5c", + "0xc0780b07805078110310402c1102c1b014054100b0140c0141b0800cdfc17", + "0xb4100b05c0b400050150402c1102c1f014054100b0140c0141f02f8001504", + "0xb4100b4000be0c054000b4100b08c0c033820142302d0402c1002f8101422", + "0x1802d0402c1802f840142202d0402c2202c140150202d0402d0202d0101418", + "0xb4100b0300b040050150402c1f02c2c014054100b0140c01418089020400b", + "0x10402c2902d02014054100b0140c0142b02f850a414031040310102c1101501", + "0x1040302c4080c08c050b00b4100b0b00b080050b00b4100b3f00b05c053f00b", + "0x2f0400ce1c053080b4100b05c0b400050150402c05030050c40be182f0b80c", + "0xb0500b3dc050d80b4100b0d0110302f0143402d0402c050b8053400b4100b", + "0x10402cd602c5c014c202d0402cc202c140142e02d0402c2e02d01014d602d04", + "0xd0358c20b902af4050d80b4100b0d80b080053400b4100b3400baf0053580b", + "0x54100b0440b07c050150402c05030050e4da3601002c39368d80410402c36", + "0x140143c02d0402c3102d010143a02d0402c1702d00014054100b0400be2005", + "0x10402c05030050178902c050ac0538c0b4100b0500b088053800b4100b0e80b", + "0x1010143f02d0402c1702d00014054100b0400be20050150402c1102c1f01405", + "0x50c40538c0b4100b0ac0b088053800b4100b0fc0b050050f00b4100b4080b", + "0x423a00ce08053a00b4100b38c0b3dc051080b4100b1000be28051000b4100b", + "0xb3800b050050f00b4100b0f00b404053b00b4100b3a80be0c053a80b4100b", + "0xb07c050150402c05030053b0e00f01002cec02d0402cec02f84014e002d04", + "0xee02d0402c05168050150402c0c02cf6014054100b0400be20050150402c11", + "0x506c0b4100b06c0b050050800b4100b0800b404051300b4100b3b80be2c05", + "0x54100b017270141102d0402c05c98051301b0801002c4c02d0402c4c02f84", + "0xbe302005c0c4100c4080b044054080b4100b0300b040050150402c050f405", + "0x50400b4100b04011033290141002d0402c2002d02014054100b0140c0141b", + "0x10402c050300508c0be342207c0c4100c07805030230141e02d0402c1002c17", + "0xb0140c0150102f8e06100031040301702c110141702d0402c1702c2201405", + "0x2b02d0402c05aec050a40b4100b0500b05c050500b4100b0600b4080501504", + "0x502c0b4100b02c0b0500507c0b4100b07c0b404053f00b4100b4000b3dc05", + "0x2bd0142902d0402c2902c200142b02d0402c2b02ebc014fc02d0402cfc02c5c", + "0xc014c202f8f0c40b4100c0bc0b460050bc2e0b0104100b0a42b3f00b07d02", + "0x53580be403602d040303402ec0014343400c4100b0c40bafc050150402c05", + "0xbe48053680b4100b0d82203391014d802d0402c2e02d00014054100b0140c", + "0xb404050f00b4100b0e80be50050e80b4100b0e4d0033930143902d0402cda", + "0xd80b01002c3c02d0402c3c02f95014d802d0402cd802c140142c02d0402c2c", + "0x2e02d00014054100b0880b2ec050150402cd602c4c014054100b0140c0143c", + "0xb3800b050050fc0b4100b0b00b4040538c0b4100b3400b040053800b4100b", + "0xbb014054100b0140c01405e580b0142b0144202d0402ce302c220144002d04", + "0x2e02c140142c02d0402c2c02d01014e802d0402cc202f97014054100b0880b", + "0xbb014054100b0140c014e80b82c0400b3a00b4100b3a00be54050b80b4100b", + "0xea02c140143f02d0402c1f02d01014ea02d0402c0b02d00014054100b0880b", + "0x10402c4202cf7014ec02d0402c050c4051080b4100b4040b088051000b4100b", + "0x10402c3d02f940143d02d0402c4c3b80ce4c051300b4100b3b00be60053b80b", + "0xb4100b1340be54051000b4100b1000b050050fc0b4100b0fc0b404051340b", + "0xb08c0b404053d40b4100b02c0b400050150402c0503005134400fc1002c4d", + "0x5e640b0142b0145302d0402c1702c220145102d0402cf502c14014f702d04", + "0x502d01014f802d0402c0b02d00014054100b0440bcf4050150402c0503005", + "0x10402c050c40514c0b4100b06c0b088051440b4100b3e00b050053dc0b4100b", + "0x10402c583d80ce4c053d80b4100b14c0b3dc051600b4100b1580be60051580b", + "0xb4100b1440b050053dc0b4100b3dc0b404051700b4100b1680be50051680b", + "0xb044050300b4100b02c0b04005170513dc1002c5c02d0402c5c02f9501451", + "0x170141702d0402c1102d02014054100b0140c0150202f9a04410031040300c", + "0x39b0781b03104030200140c08c050800b4100b0800b080050800b4100b05c0b", + "0x230880c4100c0400b044050400b4100b0400b088050150402c050300507c0b", + "0x10102d0402c1802c170141802d0402c2302d02014054100b0140c0150002f9c", + "0xb0140c0142b02f9d0a414031040310106c0c710054040b4100b4040b08005", + "0x5030050b80be782c3f00c4100c0880b044050880b4100b0880b0880501504", + "0x10402c3102c200143102d0402c2f02c170142f02d0402c2c02d02014054100b", + "0xfc02cf7014054100b0140c0143402f9f340c203104030310500c704050c40b", + "0xb404053600b4100b3580b490053580b4100b3402907810e80050d80b4100b", + "0x363081002cd802d0402cd802fa10143602d0402c3602c5c014c202d0402cc2", + "0x3402d01014054100b0a40b57c050150402c1e02cbb014054100b0140c014d8", + "0x50150402c0503005017a202c050ac050e40b4100b3f00b088053680b4100b", + "0x2e02c22014da02d0402c1402d01014054100b0a40b57c050150402c1e02cbb", + "0x101014054100b0780b2ec050150402c0503005017a202c050ac050e40b4100b", + "0x10402c0503005017a202c050ac050e40b4100b0880b088053680b4100b0ac0b", + "0x50e40b4100b4000b088053680b4100b06c0b404050150402c1e02cbb01405", + "0x10402c1002c22014da02d0402c1f02d01014054100b0140c01405e880b0142b", + "0xb088053680b4100b0140b404050150402c0503005017a202c050ac050e40b", + "0xb0e40b3dc050f00b4100b0e80be8c050e80b4100b014310143902d0402d02", + "0xc02c050150402c050f4050f0e03681002c3c02d0402c3c02fa1014e002d04", + "0x110310402c1102c1b014054100b0140c0141b0800ce90174080c4100c02c05", + "0x50150402c1102c1f014054100b0140c0141f02fa5015040301e02c1e0141e", + "0x54000b4100b08c0c033a70142302d0402c1002fa60142202d0402c1702d00", + "0x3a90142202d0402c2202c140150202d0402d0202d010141802d0402d0002fa8", + "0x50150402c1f02c2c014054100b0140c01418089020400b0600b4100b0600b", + "0x54100b0140c0142b02faa0a414031040310102c110150102d0402c0c02c10", + "0x50b00b4100b0b00b080050b00b4100b3f00b05c053f00b4100b0a40b40805", + "0xb4100b05c0b400050150402c05030050c40beac2f0b80c4100c0b102031c4", + "0xb4100b0d0110302f0143402d0402c050b8053400b4100b0bc10033ac014c2", + "0xc202d0402cc202c140142e02d0402c2e02d01014d602d0402c1402cf701436", + "0x50d80b4100b0d80b080053400b4100b3400bcb4053580b4100b3580b17005", + "0x50150402c05030050e4da3601002c39368d80410402c36340d63082e40b2e", + "0x3102d010143a02d0402c1702d00014054100b0400bcd0050150402c1102c1f", + "0x3ad02c050ac0538c0b4100b0500b088053800b4100b0e80b050050f00b4100b", + "0x1702d00014054100b0400bcd0050150402c1102c1f014054100b0140c01405", + "0xb0ac0b088053800b4100b0fc0b050050f00b4100b4080b404050fc0b4100b", + "0xb4100b38c0b3dc051080b4100b1000beb8051000b4100b01431014e302d04", + "0xb4100b0f00b404053b00b4100b3a80bea0053a80b4100b108e8033a7014e8", + "0x5030053b0e00f01002cec02d0402cec02fa9014e002d0402ce002c140143c", + "0x50150402c0c02cf6014054100b0400bcd0050150402c1102c1f014054100b", + "0xb050050800b4100b0800b404051300b4100b3b80bebc053b80b4100b0145a", + "0xb4100b02c0b040051301b0801002c4c02d0402c4c02fa90141b02d0402c1b", + "0x10402c1102d02014054100b0140c0150202fb004410031040300c02c110140c", + "0x104030200140c08c050800b4100b0800b080050800b4100b05c0b05c0505c0b", + "0xc0400b044050400b4100b0400b088050150402c050300507c0bec41e06c0c", + "0x1802c170141802d0402c2302d02014054100b0140c0150002fb208c2203104", + "0x2b02fb30a414031040310106c0c08c054040b4100b4040b080054040b4100b", + "0xbed02c3f00c4100c0880b044050880b4100b0880b088050150402c0503005", + "0x200143102d0402c2f02c170142f02d0402c2c02d02014054100b0140c0142e", + "0x54100b0140c0143402fb5340c203104030310500c08c050c40b4100b0c40b", + "0xb4100b3580bedc053580b4100b3402907810ed8050d80b4100b3f00b3dc05", + "0xd802d0402cd802fb80143602d0402c3602c5c014c202d0402cc202d01014d8", + "0x54100b0a40b2ec050150402c1e02cbb014054100b0140c014d80d8c20400b", + "0x503005017b902c050ac050e40b4100b3f00b088053680b4100b0d00b40405", + "0xda02d0402c1402d01014054100b0a40b2ec050150402c1e02cbb014054100b", + "0xb0780b2ec050150402c0503005017b902c050ac050e40b4100b0b80b08805", + "0x5017b902c050ac050e40b4100b0880b088053680b4100b0ac0b4040501504", + "0xb4000b088053680b4100b06c0b404050150402c1e02cbb014054100b0140c", + "0x22014da02d0402c1f02d01014054100b0140c01405ee40b0142b0143902d04", + "0xb4100b0140b404050150402c0503005017b902c050ac050e40b4100b0400b", + "0x50f00b4100b0e80bee8050e80b4100b014310143902d0402d0202c22014da", + "0xc42e4050445f0f0e03681002c3c02d0402c3c02fb8014e002d0402c3902cf7", + "0x100300b014c3310b90141107cc42e405044050400c02c0530cc42e4050441f", + "0xc42e4050441f310b901411970100300b014c3310b90141107cc42e4050457e", + "0xc42e405047bb0400c02c0530cc42e4050441f310b901411db0100300b014c3", + "0x100300b014c3310b90141107cc42e405047bc0400c02c0530cc42e4050441f", + "0xc42e4050441f310b901411ef8100300b014c3310b90141107cc42e405047bd", + "0xc42e405047c00400c02c0530cc42e4050441f310b901411efc100300b014c3", + "0x100300b014c3310b90141107cc42e405047c10400c02c0530cc42e4050441f", + "0xc42e4050441f310b901411f0c100300b014c3310b90141107cc42e405047c2", + "0xc42e405047c50400c02c0530cc42e4050441f310b901411f10100300b014c3", + "0x100300b014c3310b90141107cc42e405047c60400c02c0530cc42e4050441f", + "0xc42e4050441f310b901411f20100300b014c3310b90141107cc42e405047c7", + "0xc42e405047ca0400c02c0530cc42e4050441f310b901411f24100300b014c3", + "0x100300b014c3310b90141107cc42e405047cb0400c02c0530cc42e4050441f", + "0xc42e4050441f310b901411f34100300b014c3310b90141107cc42e405047cc", + "0xb90141007cb901410f442302c05f402302c05f3c2302c05f38100300b014c3", + "0x1f0141007c05033d30400c02c0535cb90141006cd52e405047d20300b014d1", + "0xd72e4050401b170b901411f540c02c0536cb90141007cb901410f500b014d9", + "0x3d802c053781f0141007c05033d702c053741f0141007c05033d60400c02c05", + "0xd72e4050401b388b901411f64110400c02c05384b9014100608b07cb901502", + "0xb014e62e4050401f2e405043db02c053901f0141007c05033da0400c02c05", + "0xb014e907c050401f0140cf74100300b014d72e4050401b39cb901411f700c", + "0x5033e002c053b41f0141007c05033df0300b014eb2e4050401f2e405043de", + "0xf307c050401f0140cf880b014f207c050401f0140cf840b014ef07c050401f", + "0x3e502c053d81f0141007c05033e40300b014f42e4050401f2e405043e302c05", + "0x508c0b0600bf9c0b014f707c050401f0140cf980b014f807c050401f0140c", + "0xe02e4050401f2e405043e9044100300b014e82e405040180fc1f2e40540be8", + "0x1007cb901410fac110400c02c05358b9014100602c07cb901502fa80c02c05", + "0x50401805c1f2e40540bed02c053f01f0141007c05033ec0300b014c22e405", + "0xfbc0b0150207c050401f0140cfb8110400c02c05400b9" + ], + "sierra_program_debug_info": { + "type_names": [ + [0, "RangeCheck"], + [1, "core::panics::Panic"], + [2, "u16"], + [3, "Tuple"], + [4, "Unit"], + [5, "core::option::Option::<[core::integer::u16; 3]>"], + [6, "Array"], + [7, "core::option::Option::>"], + [8, "Array"], + [9, "Snapshot>"], + [10, "core::array::Span::"], + [ + 11, + "Tuple, core::option::Option::>>" + ], + [12, "Tuple>"], + [ + 13, + "core::panics::PanicResult::<(core::array::Span::, core::option::Option::>)>" + ], + [14, "felt252"], + [15, "Uninitialized"], + [16, "u32"], + [17, "u64"], + [18, "Tuple"], + [19, "core::option::Option::<(core::integer::u16, core::integer::u32, core::integer::u64)>"], + [20, "Array"], + [21, "Tuple>"], + [ + 22, + "core::option::Option::<(core::integer::u16, core::array::Array::)>" + ], + [ + 23, + "Tuple, core::option::Option::<(core::integer::u16, core::array::Array::)>>" + ], + [ + 24, + "core::panics::PanicResult::<(core::array::Span::, core::option::Option::<(core::integer::u16, core::array::Array::)>)>" + ], + [25, "Box"], + [26, "core::option::Option::>"], + [ + 27, + "Tuple, core::option::Option::>>" + ], + [ + 28, + "core::panics::PanicResult::<(core::array::Span::, core::option::Option::>)>" + ], + [29, "Box>"], + [30, "Box"], + [31, "Tuple>"], + [ + 32, + "core::option::Option::<(core::integer::u32, core::array::Array::)>" + ], + [ + 33, + "Tuple, core::option::Option::<(core::integer::u32, core::array::Array::)>>" + ], + [ + 34, + "core::panics::PanicResult::<(core::array::Span::, core::option::Option::<(core::integer::u32, core::array::Array::)>)>" + ], + [35, "Box"], + [36, "Array"], + [37, "core::option::Option::>"], + [ + 38, + "Tuple, core::option::Option::>>" + ], + [ + 39, + "core::panics::PanicResult::<(core::array::Span::, core::option::Option::>)>" + ], + [40, "Const"], + [ + 41, + "Const" + ], + [42, "Const"], + [43, "u128"], + [44, "u8"], + [45, "core::result::Result::"], + [46, "enums::Destruction"], + [47, "core::option::Option::>"], + [48, "core::option::Option::"], + [49, "enums::Truck"], + [50, "core::option::Option::"], + [51, "Tuple"], + [52, "enums::Horse"], + [53, "core::option::Option::"], + [54, "Snapshot>"], + [55, "core::array::Span::"], + [56, "enums::Dog"], + [57, "core::option::Option::"], + [58, "Tuple, core::option::Option::>"], + [ + 59, + "core::panics::PanicResult::<(core::array::Span::, core::option::Option::)>" + ], + [60, "Tuple"], + [61, "enums::Cat"], + [62, "core::option::Option::"], + [63, "enums::Point"], + [64, "enums::Point2"], + [65, "core::option::Option::"], + [66, "core::option::Option::"], + [67, "core::result::Result::>"], + [ + 68, + "core::option::Option::>>" + ], + [69, "core::result::Result::"], + [ + 70, + "core::result::Result::, core::integer::u32>" + ], + [ + 71, + "core::option::Option::, core::integer::u32>>" + ], + [72, "Snapshot>>"], + [ + 73, + "core::result::Result::<(core::integer::u32, core::array::Array::), (core::integer::u16, core::array::Array::)>" + ], + [ + 74, + "Snapshot), (core::integer::u16, core::array::Array::)>>" + ], + [ + 75, + "core::option::Option::), (core::integer::u16, core::array::Array::)>>" + ], + [ + 76, + "Tuple, core::option::Option::), (core::integer::u16, core::array::Array::)>>>" + ], + [ + 77, + "core::panics::PanicResult::<(core::array::Span::, core::option::Option::), (core::integer::u16, core::array::Array::)>>)>" + ], + [78, "Tuple"], + [79, "Tuple"], + [80, "core::result::Result::<[core::integer::u32; 3], [core::integer::u16; 2]>"], + [ + 81, + "core::option::Option::>" + ], + [82, "Snapshot>"], + [83, "core::array::Span::"], + [ + 84, + "core::result::Result::, core::array::Array::>" + ], + [ + 85, + "Snapshot, core::array::Array::>>" + ], + [ + 86, + "core::option::Option::, core::array::Array::>>" + ], + [ + 87, + "Tuple, core::option::Option::, core::array::Array::>>>" + ], + [ + 88, + "core::panics::PanicResult::<(core::array::Span::, core::option::Option::, core::array::Array::>>)>" + ], + [89, "core::option::Option::"], + [90, "core::option::Option::>"], + [91, "Array>"], + [92, "Snapshot>>"], + [93, "core::array::Span::>"], + [ + 94, + "core::option::Option::>>" + ], + [ + 95, + "Tuple, core::option::Option::>>>" + ], + [ + 96, + "core::panics::PanicResult::<(core::array::Span::, core::option::Option::>>)>" + ], + [97, "core::option::Option::>"], + [98, "core::option::Option::"], + [99, "core::option::Option::>"], + [ + 100, + "core::option::Option::>>" + ], + [101, "Snapshot>>"], + [ + 102, + "Snapshot)>>" + ], + [ + 103, + "core::option::Option::)>>" + ], + [ + 104, + "Tuple, core::option::Option::)>>>" + ], + [ + 105, + "core::panics::PanicResult::<(core::array::Span::, core::option::Option::)>>)>" + ], + [106, "core::option::Option::<[core::integer::u32; 3]>"], + [107, "Tuple, Unit>"], + [108, "core::panics::PanicResult::<(core::array::Array::, ())>"], + [109, "Snapshot>"], + [110, "core::array::Span::"], + [111, "Snapshot>>"], + [ + 112, + "core::option::Option::>>" + ], + [ + 113, + "Tuple, core::option::Option::>>>" + ], + [ + 114, + "core::panics::PanicResult::<(core::array::Span::, core::option::Option::>>)>" + ], + [115, "Tuple>"], + [116, "Const"], + [117, "BuiltinCosts"], + [118, "System"], + [119, "core::panics::PanicResult::<(core::array::Span::,)>"], + [120, "Const"], + [121, "NonZero"], + [122, "Box"], + [123, "GasBuiltin"] + ], + "libfunc_names": [ + [0, "revoke_ap_tracking"], + [1, "withdraw_gas"], + [2, "branch_align"], + [3, "struct_deconstruct>"], + [4, "array_snapshot_pop_front"], + [5, "unbox"], + [6, "rename"], + [7, "store_temp"], + [8, "dup"], + [9, "felt252_is_zero"], + [10, "drop"], + [11, "store_temp>>"], + [12, "u16_try_from_felt252"], + [13, "redeposit_gas"], + [14, "enum_init, 0>"], + [15, "store_temp"], + [16, "store_temp"], + [17, "store_temp>"], + [18, "jump"], + [19, "drop>>"], + [20, "drop>"], + [21, "const_as_immediate>"], + [22, "felt252_sub"], + [23, "struct_construct"], + [24, "enum_init, 1>"], + [25, "drop>"], + [26, "drop>"], + [ + 27, + "function_call>" + ], + [28, "enum_init,)>, 1>"], + [29, "store_temp"], + [30, "store_temp,)>>"], + [31, "get_builtin_costs"], + [32, "store_temp"], + [33, "withdraw_gas_all"], + [34, "array_new"], + [35, "snapshot_take>"], + [36, "enable_ap_tracking"], + [37, "enum_match>"], + [38, "rename"], + [39, "u16_to_felt252"], + [40, "const_as_immediate>"], + [41, "array_append"], + [42, "store_temp>"], + [43, "drop"], + [44, "disable_ap_tracking"], + [45, "snapshot_take>"], + [46, "drop>"], + [47, "struct_construct>"], + [48, "struct_construct>>"], + [49, "enum_init,)>, 0>"], + [50, "rename"], + [51, "rename"], + [ + 52, + "function_call>" + ], + [53, "drop>"], + [54, "function_call>"], + [55, "store_temp>"], + [ + 56, + "function_call, core::array::ArraySerde::, core::integer::u8Drop>>::deserialize>" + ], + [ + 57, + "enum_match, core::option::Option::>>)>>" + ], + [ + 58, + "struct_deconstruct, core::option::Option::>>>>" + ], + [ + 59, + "enum_match>>>" + ], + [60, "drop>>"], + [61, "snapshot_take>>"], + [62, "enum_snapshot_match>>"], + [63, "dup>>"], + [64, "array_len"], + [65, "u32_to_felt252"], + [66, "struct_construct>"], + [67, "store_temp>"], + [ + 68, + "function_call, core::integer::u8Drop>>" + ], + [69, "enum_match, ())>>"], + [70, "struct_deconstruct, Unit>>"], + [ + 71, + "function_call, core::serde::into_felt252_based::SerdeImpl::, core::tuple::DeserializeTupleNext::<[core::integer::u32; 2], core::fixed_size_array::TupleSplitFixedSizedArraySized2::, core::serde::into_felt252_based::SerdeImpl::, core::tuple::DeserializeTupleNext::<[core::integer::u32; 1], core::fixed_size_array::TupleSplitFixedSizedArraySized1::, core::serde::into_felt252_based::SerdeImpl::, core::tuple::DeserializeTupleBaseFixedSizedArray::, core::integer::u32Drop>, core::integer::u32Drop>, core::integer::u32Drop>::deserialize>" + ], + [72, "enum_match>"], + [73, "enum_init, 0>"], + [74, "store_temp>"], + [75, "enum_init, 1>"], + [76, "drop>"], + [77, "snapshot_take>"], + [78, "struct_deconstruct>"], + [79, "rename"], + [ + 80, + "function_call), core::tuple::SerdeTuple::<(core::integer::u32, core::array::Array::), core::tuple::TupleSnapForwardTupleSize2::>, core::tuple::SerializeTupleNext::<(@core::integer::u32, @core::array::Array::), core::tuple::TupleSplitTupleSize2::<@core::integer::u32, @core::array::Array::>, core::tuple::SerdeBasedSerializeTuple::>, core::tuple::SerializeTupleNext::<(@core::array::Array::,), core::tuple::TupleSplitTupleSize1::<@core::array::Array::>, core::tuple::SerdeBasedSerializeTuple::, core::array::ArraySerde::, core::integer::u32Drop>>, core::tuple::SerializeTupleBaseTuple, core::tuple::TupleSize0Drop>, core::tuple::TupleNextDrop::<(@core::array::Array::,), core::tuple::TupleSplitTupleSize1::<@core::array::Array::>, core::tuple::IsTupleTupleSize1::<@core::array::Array::>, core::traits::SnapshotDrop::>, core::tuple::TupleSize0Drop>>, core::tuple::DeserializeTupleNext::<(core::integer::u32, core::array::Array::), core::tuple::TupleSplitTupleSize2::>, core::serde::into_felt252_based::SerdeImpl::, core::tuple::DeserializeTupleNext::<(core::array::Array::,), core::tuple::TupleSplitTupleSize1::>, core::array::ArraySerde::, core::integer::u32Drop>, core::tuple::DeserializeTupleBaseTuple, core::array::ArrayDrop::>, core::integer::u32Drop>>>::deserialize>" + ], + [ + 81, + "enum_match, core::option::Option::)>>)>>" + ], + [ + 82, + "struct_deconstruct, core::option::Option::)>>>>" + ], + [ + 83, + "enum_match)>>>" + ], + [ + 84, + "drop)>>" + ], + [ + 85, + "snapshot_take)>>" + ], + [ + 86, + "enum_snapshot_match)>>" + ], + [87, "struct_snapshot_deconstruct>>"], + [88, "dup>>"], + [89, "array_len"], + [90, "struct_construct>"], + [91, "store_temp>"], + [ + 92, + "function_call, core::integer::u32Drop>>" + ], + [ + 93, + "function_call, core::option::OptionSerde::>>::deserialize>" + ], + [ + 94, + "enum_match>>>" + ], + [95, "drop>>"], + [96, "snapshot_take>>"], + [97, "enum_match>>"], + [ + 98, + "function_call, core::serde::into_felt252_based::SerdeImpl::>::deserialize>" + ], + [ + 99, + "enum_match>>" + ], + [ + 100, + "enum_init>, 0>" + ], + [ + 101, + "store_temp>>" + ], + [ + 102, + "enum_init>, 1>" + ], + [ + 103, + "drop>>" + ], + [ + 104, + "snapshot_take>>" + ], + [105, "enum_match>"], + [106, "rename"], + [107, "u8_to_felt252"], + [108, "array_new>"], + [109, "store_temp>>"], + [ + 110, + "function_call, core::option::OptionSerde::>, core::option::OptionDrop::>>" + ], + [ + 111, + "enum_match, core::option::Option::>>)>>" + ], + [ + 112, + "struct_deconstruct, core::option::Option::>>>>" + ], + [ + 113, + "enum_match>>>" + ], + [114, "drop>>"], + [115, "snapshot_take>>"], + [116, "dup>>>"], + [117, "array_len>"], + [118, "struct_construct>>"], + [119, "store_temp>>"], + [ + 120, + "function_call, core::option::OptionSerde::>, core::option::OptionDrop::>>" + ], + [121, "drop"], + [ + 122, + "function_call::deserialize>" + ], + [123, "enum_match>>"], + [124, "drop>"], + [125, "snapshot_take>"], + [126, "enum_match>"], + [127, "dup"], + [128, "struct_deconstruct"], + [129, "drop"], + [130, "rename"], + [131, "u64_to_felt252"], + [132, "drop"], + [133, "drop>"], + [134, "snapshot_take>"], + [ + 135, + "function_call, core::array::Array::, core::array::ArraySerde::, core::integer::u8Drop>, core::array::ArraySerde::, core::integer::u16Drop>>::deserialize>" + ], + [ + 136, + "enum_match, core::option::Option::, core::array::Array::>>)>>" + ], + [ + 137, + "struct_deconstruct, core::option::Option::, core::array::Array::>>>>" + ], + [ + 138, + "enum_match, core::array::Array::>>>" + ], + [ + 139, + "drop, core::array::Array::>>" + ], + [ + 140, + "snapshot_take, core::array::Array::>>" + ], + [ + 141, + "enum_snapshot_match, core::array::Array::>>" + ], + [142, "rename, ())>>"], + [143, "dup>>"], + [144, "array_len"], + [145, "struct_construct>"], + [146, "store_temp>"], + [ + 147, + "function_call, core::integer::u16Drop>>" + ], + [ + 148, + "function_call, core::tuple::SerializeTupleNext::<[@core::integer::u32; 3], core::fixed_size_array::TupleSplitFixedSizedArraySized3::<@core::integer::u32>, core::tuple::SerdeBasedSerializeTuple::>, core::tuple::SerializeTupleNext::<[@core::integer::u32; 2], core::fixed_size_array::TupleSplitFixedSizedArraySized2::<@core::integer::u32>, core::tuple::SerdeBasedSerializeTuple::>, core::tuple::SerializeTupleNext::<[@core::integer::u32; 1], core::fixed_size_array::TupleSplitFixedSizedArraySized1::<@core::integer::u32>, core::tuple::SerdeBasedSerializeTuple::>, core::tuple::SerializeTupleBaseFixedSizedArray::, core::fixed_size_array::FixedSizedArrayDrop::<@core::integer::u32, core::traits::SnapshotDrop::, 0>>, core::fixed_size_array::FixedSizedArrayDrop::<@core::integer::u32, core::traits::SnapshotDrop::, 1>>, core::fixed_size_array::FixedSizedArrayDrop::<@core::integer::u32, core::traits::SnapshotDrop::, 2>>, core::tuple::DeserializeTupleNext::<[core::integer::u32; 3], core::fixed_size_array::TupleSplitFixedSizedArraySized3::, core::serde::into_felt252_based::SerdeImpl::, core::tuple::DeserializeTupleNext::<[core::integer::u32; 2], core::fixed_size_array::TupleSplitFixedSizedArraySized2::, core::serde::into_felt252_based::SerdeImpl::, core::tuple::DeserializeTupleNext::<[core::integer::u32; 1], core::fixed_size_array::TupleSplitFixedSizedArraySized1::, core::serde::into_felt252_based::SerdeImpl::, core::tuple::DeserializeTupleBaseFixedSizedArray::, core::integer::u32Drop>, core::integer::u32Drop>, core::integer::u32Drop>>, core::tuple::SerdeTuple::<[core::integer::u16; 2], core::fixed_size_array::TupleSnapForwardFixedSizedArraySized2::, core::tuple::SerializeTupleNext::<[@core::integer::u16; 2], core::fixed_size_array::TupleSplitFixedSizedArraySized2::<@core::integer::u16>, core::tuple::SerdeBasedSerializeTuple::>, core::tuple::SerializeTupleNext::<[@core::integer::u16; 1], core::fixed_size_array::TupleSplitFixedSizedArraySized1::<@core::integer::u16>, core::tuple::SerdeBasedSerializeTuple::>, core::tuple::SerializeTupleBaseFixedSizedArray::, core::fixed_size_array::FixedSizedArrayDrop::<@core::integer::u16, core::traits::SnapshotDrop::, 0>>, core::fixed_size_array::FixedSizedArrayDrop::<@core::integer::u16, core::traits::SnapshotDrop::, 1>>, core::tuple::DeserializeTupleNext::<[core::integer::u16; 2], core::fixed_size_array::TupleSplitFixedSizedArraySized2::, core::serde::into_felt252_based::SerdeImpl::, core::tuple::DeserializeTupleNext::<[core::integer::u16; 1], core::fixed_size_array::TupleSplitFixedSizedArraySized1::, core::serde::into_felt252_based::SerdeImpl::, core::tuple::DeserializeTupleBaseFixedSizedArray::, core::integer::u16Drop>, core::integer::u16Drop>>>::deserialize>" + ], + [ + 149, + "enum_match>>" + ], + [150, "drop>"], + [ + 151, + "snapshot_take>" + ], + [152, "enum_match>"], + [153, "struct_deconstruct>"], + [ + 154, + "function_call), (core::integer::u16, core::array::Array::), core::tuple::SerdeTuple::<(core::integer::u32, core::array::Array::), core::tuple::TupleSnapForwardTupleSize2::>, core::tuple::SerializeTupleNext::<(@core::integer::u32, @core::array::Array::), core::tuple::TupleSplitTupleSize2::<@core::integer::u32, @core::array::Array::>, core::tuple::SerdeBasedSerializeTuple::>, core::tuple::SerializeTupleNext::<(@core::array::Array::,), core::tuple::TupleSplitTupleSize1::<@core::array::Array::>, core::tuple::SerdeBasedSerializeTuple::, core::array::ArraySerde::, core::integer::u32Drop>>, core::tuple::SerializeTupleBaseTuple, core::tuple::TupleSize0Drop>, core::tuple::TupleNextDrop::<(@core::array::Array::,), core::tuple::TupleSplitTupleSize1::<@core::array::Array::>, core::tuple::IsTupleTupleSize1::<@core::array::Array::>, core::traits::SnapshotDrop::>, core::tuple::TupleSize0Drop>>, core::tuple::DeserializeTupleNext::<(core::integer::u32, core::array::Array::), core::tuple::TupleSplitTupleSize2::>, core::serde::into_felt252_based::SerdeImpl::, core::tuple::DeserializeTupleNext::<(core::array::Array::,), core::tuple::TupleSplitTupleSize1::>, core::array::ArraySerde::, core::integer::u32Drop>, core::tuple::DeserializeTupleBaseTuple, core::array::ArrayDrop::>, core::integer::u32Drop>>, core::tuple::SerdeTuple::<(core::integer::u16, core::array::Array::), core::tuple::TupleSnapForwardTupleSize2::>, core::tuple::SerializeTupleNext::<(@core::integer::u16, @core::array::Array::), core::tuple::TupleSplitTupleSize2::<@core::integer::u16, @core::array::Array::>, core::tuple::SerdeBasedSerializeTuple::>, core::tuple::SerializeTupleNext::<(@core::array::Array::,), core::tuple::TupleSplitTupleSize1::<@core::array::Array::>, core::tuple::SerdeBasedSerializeTuple::, core::array::ArraySerde::, core::integer::u16Drop>>, core::tuple::SerializeTupleBaseTuple, core::tuple::TupleSize0Drop>, core::tuple::TupleNextDrop::<(@core::array::Array::,), core::tuple::TupleSplitTupleSize1::<@core::array::Array::>, core::tuple::IsTupleTupleSize1::<@core::array::Array::>, core::traits::SnapshotDrop::>, core::tuple::TupleSize0Drop>>, core::tuple::DeserializeTupleNext::<(core::integer::u16, core::array::Array::), core::tuple::TupleSplitTupleSize2::>, core::serde::into_felt252_based::SerdeImpl::, core::tuple::DeserializeTupleNext::<(core::array::Array::,), core::tuple::TupleSplitTupleSize1::>, core::array::ArraySerde::, core::integer::u16Drop>, core::tuple::DeserializeTupleBaseTuple, core::array::ArrayDrop::>, core::integer::u16Drop>>>::deserialize>" + ], + [ + 155, + "enum_match, core::option::Option::), (core::integer::u16, core::array::Array::)>>)>>" + ], + [ + 156, + "struct_deconstruct, core::option::Option::), (core::integer::u16, core::array::Array::)>>>>" + ], + [ + 157, + "enum_match), (core::integer::u16, core::array::Array::)>>>" + ], + [ + 158, + "drop), (core::integer::u16, core::array::Array::)>>" + ], + [ + 159, + "snapshot_take), (core::integer::u16, core::array::Array::)>>" + ], + [ + 160, + "enum_snapshot_match), (core::integer::u16, core::array::Array::)>>" + ], + [161, "struct_snapshot_deconstruct>>"], + [ + 162, + "function_call, core::integer::u32, core::result::ResultSerde::, core::serde::into_felt252_based::SerdeImpl::>, core::serde::into_felt252_based::SerdeImpl::>::deserialize>" + ], + [ + 163, + "enum_match, core::integer::u32>>>" + ], + [ + 164, + "drop, core::integer::u32>>" + ], + [ + 165, + "snapshot_take, core::integer::u32>>" + ], + [ + 166, + "enum_match, core::integer::u32>>" + ], + [ + 167, + "function_call, core::serde::into_felt252_based::SerdeImpl::, core::option::OptionSerde::>>::deserialize>" + ], + [ + 168, + "enum_match>>>" + ], + [ + 169, + "drop>>" + ], + [ + 170, + "snapshot_take>>" + ], + [ + 171, + "enum_match>>" + ], + [172, "enum_match>"], + [173, "u64_try_from_felt252"], + [174, "u32_try_from_felt252"], + [175, "struct_construct"], + [176, "snapshot_take"], + [177, "drop"], + [178, "store_temp"], + [179, "function_call"], + [180, "enum_match>"], + [181, "drop"], + [182, "snapshot_take"], + [183, "dup"], + [184, "struct_deconstruct"], + [185, "function_call"], + [186, "enum_match>"], + [187, "drop"], + [188, "snapshot_take"], + [189, "dup"], + [190, "struct_deconstruct"], + [191, "drop>"], + [192, "struct_deconstruct>"], + [193, "function_call"], + [ + 194, + "enum_match, core::option::Option::)>>" + ], + [ + 195, + "struct_deconstruct, core::option::Option::>>" + ], + [196, "enum_match>"], + [197, "drop"], + [198, "snapshot_take"], + [199, "dup"], + [200, "struct_deconstruct"], + [201, "drop>"], + [202, "dup>"], + [203, "rename>"], + [204, "struct_deconstruct>"], + [205, "function_call"], + [206, "enum_match>"], + [207, "drop"], + [208, "snapshot_take"], + [209, "dup"], + [210, "struct_deconstruct"], + [211, "drop>"], + [212, "struct_deconstruct>"], + [213, "function_call"], + [214, "enum_match>"], + [215, "drop"], + [216, "snapshot_take"], + [217, "dup"], + [218, "struct_deconstruct"], + [219, "drop>"], + [220, "enum_match>"], + [221, "u128s_from_felt252"], + [ + 222, + "function_call, core::serde::into_felt252_based::SerdeImpl::>::deserialize>" + ], + [ + 223, + "enum_match>>" + ], + [224, "drop"], + [225, "drop>"], + [226, "struct_construct"], + [227, "snapshot_take"], + [228, "drop"], + [229, "store_temp"], + [230, "dup"], + [231, "struct_deconstruct"], + [232, "rename"], + [233, "u128_to_felt252"], + [234, "enum_match>"], + [ + 235, + "const_as_immediate>" + ], + [236, "function_call"], + [ + 237, + "const_as_immediate>" + ], + [238, "const_as_immediate>"], + [239, "array_new"], + [240, "store_temp>"], + [ + 241, + "function_call, core::integer::u8Drop>>" + ], + [ + 242, + "enum_match, core::option::Option::>)>>" + ], + [ + 243, + "struct_deconstruct, core::option::Option::>>>" + ], + [244, "enum_match>>"], + [245, "enum_init>, 0>"], + [ + 246, + "enum_init>>, 0>" + ], + [ + 247, + "struct_construct, core::option::Option::>>>>" + ], + [ + 248, + "enum_init, core::option::Option::>>)>, 0>" + ], + [ + 249, + "store_temp, core::option::Option::>>)>>" + ], + [250, "rename"], + [ + 251, + "enum_init, core::option::Option::>>)>, 1>" + ], + [ + 252, + "enum_init>>, 1>" + ], + [253, "enum_init>, 1>"], + [254, "struct_deconstruct>"], + [255, "array_snapshot_pop_front"], + [256, "unbox"], + [257, "drop>>"], + [258, "struct_construct, Unit>>"], + [259, "enum_init, ())>, 0>"], + [260, "store_temp, ())>>"], + [261, "drop>"], + [262, "enum_init, ())>, 1>"], + [263, "struct_construct>"], + [ + 264, + "function_call), core::tuple::TupleSplitTupleSize2::>, core::serde::into_felt252_based::SerdeImpl::, core::tuple::DeserializeTupleNext::<(core::array::Array::,), core::tuple::TupleSplitTupleSize1::>, core::array::ArraySerde::, core::integer::u32Drop>, core::tuple::DeserializeTupleBaseTuple, core::array::ArrayDrop::>, core::integer::u32Drop>::deserialize>" + ], + [ + 265, + "enum_match, core::option::Option::<(core::integer::u32, core::array::Array::)>)>>" + ], + [ + 266, + "struct_deconstruct, core::option::Option::<(core::integer::u32, core::array::Array::)>>>" + ], + [ + 267, + "enum_match)>>" + ], + [ + 268, + "enum_init)>, 0>" + ], + [ + 269, + "enum_init)>>, 0>" + ], + [ + 270, + "struct_construct, core::option::Option::)>>>>" + ], + [ + 271, + "enum_init, core::option::Option::)>>)>, 0>" + ], + [ + 272, + "store_temp, core::option::Option::)>>)>>" + ], + [ + 273, + "enum_init)>>, 1>" + ], + [ + 274, + "enum_init, core::option::Option::)>>)>, 1>" + ], + [ + 275, + "enum_init)>, 1>" + ], + [276, "array_snapshot_pop_front"], + [277, "unbox"], + [278, "drop>>"], + [279, "enum_init>, 0>"], + [ + 280, + "enum_init>>, 0>" + ], + [ + 281, + "store_temp>>>" + ], + [282, "rename>>"], + [283, "enum_init>, 1>"], + [ + 284, + "enum_init>>, 1>" + ], + [285, "u8_try_from_felt252"], + [286, "enum_init, 0>"], + [287, "enum_init, 1>"], + [ + 288, + "enum_init>>, 0>" + ], + [ + 289, + "struct_construct, core::option::Option::>>>>" + ], + [ + 290, + "enum_init, core::option::Option::>>)>, 0>" + ], + [ + 291, + "store_temp, core::option::Option::>>)>>" + ], + [292, "array_append>"], + [ + 293, + "enum_init>>, 1>" + ], + [ + 294, + "enum_init, core::option::Option::>>)>, 1>" + ], + [295, "struct_deconstruct>>"], + [296, "array_snapshot_pop_front>"], + [297, "unbox>"], + [298, "drop>>>"], + [299, "drop>>"], + [300, "enum_init, 0>"], + [301, "enum_init>, 0>"], + [302, "store_temp>>"], + [303, "enum_init, 1>"], + [304, "enum_init>, 1>"], + [ + 305, + "enum_init, core::array::Array::>, 0>" + ], + [ + 306, + "enum_init, core::array::Array::>>, 0>" + ], + [ + 307, + "struct_construct, core::option::Option::, core::array::Array::>>>>" + ], + [ + 308, + "enum_init, core::option::Option::, core::array::Array::>>)>, 0>" + ], + [ + 309, + "store_temp, core::option::Option::, core::array::Array::>>)>>" + ], + [ + 310, + "enum_init, core::option::Option::, core::array::Array::>>)>, 1>" + ], + [311, "array_new"], + [312, "store_temp>"], + [ + 313, + "function_call, core::integer::u16Drop>>" + ], + [ + 314, + "enum_match, core::option::Option::>)>>" + ], + [ + 315, + "struct_deconstruct, core::option::Option::>>>" + ], + [316, "enum_match>>"], + [ + 317, + "enum_init, core::array::Array::>, 1>" + ], + [ + 318, + "enum_init, core::array::Array::>>, 1>" + ], + [319, "struct_deconstruct>"], + [320, "array_snapshot_pop_front"], + [321, "unbox"], + [322, "drop>>"], + [323, "drop>"], + [324, "dup>>"], + [ + 325, + "enum_init, 0>" + ], + [ + 326, + "enum_init>, 0>" + ], + [ + 327, + "store_temp>>" + ], + [ + 328, + "enum_init>, 1>" + ], + [329, "struct_construct>"], + [ + 330, + "enum_init, 1>" + ], + [ + 331, + "enum_init), (core::integer::u16, core::array::Array::)>, 0>" + ], + [ + 332, + "enum_init), (core::integer::u16, core::array::Array::)>>, 0>" + ], + [ + 333, + "struct_construct, core::option::Option::), (core::integer::u16, core::array::Array::)>>>>" + ], + [ + 334, + "enum_init, core::option::Option::), (core::integer::u16, core::array::Array::)>>)>, 0>" + ], + [ + 335, + "store_temp, core::option::Option::), (core::integer::u16, core::array::Array::)>>)>>" + ], + [ + 336, + "enum_init, core::option::Option::), (core::integer::u16, core::array::Array::)>>)>, 1>" + ], + [ + 337, + "function_call), core::tuple::TupleSplitTupleSize2::>, core::serde::into_felt252_based::SerdeImpl::, core::tuple::DeserializeTupleNext::<(core::array::Array::,), core::tuple::TupleSplitTupleSize1::>, core::array::ArraySerde::, core::integer::u16Drop>, core::tuple::DeserializeTupleBaseTuple, core::array::ArrayDrop::>, core::integer::u16Drop>::deserialize>" + ], + [ + 338, + "enum_match, core::option::Option::<(core::integer::u16, core::array::Array::)>)>>" + ], + [ + 339, + "struct_deconstruct, core::option::Option::<(core::integer::u16, core::array::Array::)>>>" + ], + [ + 340, + "enum_match)>>" + ], + [ + 341, + "enum_init), (core::integer::u16, core::array::Array::)>, 1>" + ], + [ + 342, + "enum_init), (core::integer::u16, core::array::Array::)>>, 1>" + ], + [ + 343, + "enum_init, core::integer::u32>, 0>" + ], + [ + 344, + "enum_init, core::integer::u32>>, 0>" + ], + [ + 345, + "store_temp, core::integer::u32>>>" + ], + [ + 346, + "enum_init, core::integer::u32>>, 1>" + ], + [ + 347, + "enum_init, core::integer::u32>, 1>" + ], + [ + 348, + "enum_init>, 0>" + ], + [ + 349, + "enum_init>>, 0>" + ], + [ + 350, + "store_temp>>>" + ], + [351, "enum_init, 0>"], + [ + 352, + "enum_init>, 1>" + ], + [353, "enum_init, 1>"], + [ + 354, + "enum_init>>, 1>" + ], + [355, "struct_construct"], + [356, "enum_init, 0>"], + [357, "store_temp>"], + [358, "enum_init, 1>"], + [ + 359, + "function_call, core::serde::into_felt252_based::SerdeImpl::, core::tuple::DeserializeTupleNext::<(core::integer::u32, core::integer::u64), core::tuple::TupleSplitTupleSize2::, core::serde::into_felt252_based::SerdeImpl::, core::tuple::DeserializeTupleNext::<(core::integer::u64,), core::tuple::TupleSplitTupleSize1::, core::serde::into_felt252_based::SerdeImpl::, core::tuple::DeserializeTupleBaseTuple, core::integer::u64Drop>, core::integer::u32Drop>, core::integer::u16Drop>::deserialize>" + ], + [ + 360, + "enum_match>" + ], + [361, "struct_deconstruct>"], + [362, "struct_construct>"], + [363, "struct_construct"], + [364, "enum_init, 0>"], + [365, "store_temp>"], + [366, "drop"], + [367, "enum_init, 1>"], + [368, "alloc_local"], + [369, "finalize_locals"], + [370, "store_local"], + [371, "array_new"], + [372, "store_temp>"], + [ + 373, + "function_call, core::integer::u32Drop>>" + ], + [ + 374, + "enum_match, core::option::Option::>)>>" + ], + [ + 375, + "struct_deconstruct, core::option::Option::>>>" + ], + [376, "enum_match>>"], + [377, "snapshot_take>"], + [378, "drop>"], + [379, "struct_construct"], + [380, "enum_init, 0>"], + [ + 381, + "struct_construct, core::option::Option::>>" + ], + [ + 382, + "enum_init, core::option::Option::)>, 0>" + ], + [ + 383, + "store_temp, core::option::Option::)>>" + ], + [ + 384, + "enum_init, core::option::Option::)>, 1>" + ], + [385, "enum_init, 1>"], + [386, "drop>"], + [ + 387, + "function_call, core::serde::into_felt252_based::SerdeImpl::, core::tuple::DeserializeTupleNext::<[core::integer::u16; 2], core::fixed_size_array::TupleSplitFixedSizedArraySized2::, core::serde::into_felt252_based::SerdeImpl::, core::tuple::DeserializeTupleNext::<[core::integer::u16; 1], core::fixed_size_array::TupleSplitFixedSizedArraySized1::, core::serde::into_felt252_based::SerdeImpl::, core::tuple::DeserializeTupleBaseFixedSizedArray::, core::integer::u16Drop>, core::integer::u16Drop>, core::integer::u16Drop>::deserialize>" + ], + [388, "enum_match>"], + [389, "struct_deconstruct>"], + [390, "struct_construct>"], + [391, "struct_construct"], + [392, "enum_init, 0>"], + [393, "store_temp>"], + [394, "enum_init, 1>"], + [395, "enum_init, 0>"], + [396, "struct_construct"], + [397, "enum_init, 0>"], + [398, "store_temp>"], + [399, "enum_init, 1>"], + [400, "enum_init, 1>"], + [401, "enum_init, 0>"], + [ + 402, + "enum_init>, 0>" + ], + [ + 403, + "store_temp>>" + ], + [404, "enum_init, 1>"], + [ + 405, + "enum_init>, 1>" + ], + [406, "struct_construct"], + [407, "struct_construct>>"], + [408, "store_temp>>"], + [ + 409, + "struct_construct, core::option::Option::>>>" + ], + [ + 410, + "enum_init, core::option::Option::>)>, 0>" + ], + [ + 411, + "store_temp, core::option::Option::>)>>" + ], + [412, "array_append"], + [413, "drop>"], + [ + 414, + "enum_init, core::option::Option::>)>, 1>" + ], + [415, "struct_construct>>"], + [ + 416, + "struct_construct, core::option::Option::<(core::integer::u32, core::array::Array::)>>>" + ], + [ + 417, + "enum_init, core::option::Option::<(core::integer::u32, core::array::Array::)>)>, 0>" + ], + [ + 418, + "store_temp, core::option::Option::<(core::integer::u32, core::array::Array::)>)>>" + ], + [ + 419, + "enum_init, core::option::Option::<(core::integer::u32, core::array::Array::)>)>, 1>" + ], + [420, "enum_init>, 0>"], + [ + 421, + "struct_construct, core::option::Option::>>>" + ], + [ + 422, + "enum_init, core::option::Option::>)>, 0>" + ], + [ + 423, + "store_temp, core::option::Option::>)>>" + ], + [424, "array_append"], + [425, "drop>"], + [426, "enum_init>, 1>"], + [ + 427, + "enum_init, core::option::Option::>)>, 1>" + ], + [428, "struct_construct>>"], + [ + 429, + "enum_init)>, 0>" + ], + [ + 430, + "struct_construct, core::option::Option::<(core::integer::u16, core::array::Array::)>>>" + ], + [ + 431, + "enum_init, core::option::Option::<(core::integer::u16, core::array::Array::)>)>, 0>" + ], + [ + 432, + "store_temp, core::option::Option::<(core::integer::u16, core::array::Array::)>)>>" + ], + [ + 433, + "enum_init, core::option::Option::<(core::integer::u16, core::array::Array::)>)>, 1>" + ], + [ + 434, + "enum_init)>, 1>" + ], + [435, "struct_construct>"], + [ + 436, + "enum_init, 0>" + ], + [ + 437, + "store_temp>" + ], + [ + 438, + "enum_init, 1>" + ], + [439, "enum_init>, 0>"], + [ + 440, + "struct_construct, core::option::Option::>>>" + ], + [ + 441, + "enum_init, core::option::Option::>)>, 0>" + ], + [ + 442, + "store_temp, core::option::Option::>)>>" + ], + [443, "array_append"], + [444, "enum_init>, 1>"], + [ + 445, + "enum_init, core::option::Option::>)>, 1>" + ], + [446, "struct_construct>"], + [447, "enum_init, 0>"], + [448, "store_temp>"], + [449, "enum_init, 1>"] + ], + "user_func_names": [ + [0, "enums::test_option::__wrapper__TestOption__option_bn"], + [1, "enums::test_option::__wrapper__TestOption__option_array"], + [2, "enums::test_option::__wrapper__TestOption__option_fixed_array"], + [3, "enums::test_option::__wrapper__TestOption__option_tuple"], + [4, "enums::test_option::__wrapper__TestOption__option_option_bn"], + [5, "enums::test_option::__wrapper__TestOption__option_result"], + [6, "enums::test_option::__wrapper__TestOption__array_option_bn"], + [7, "enums::test_option::__wrapper__TestOption__write_option_bn"], + [8, "enums::test_option::__wrapper__TestOption__option_point"], + [9, "enums::test_option::__wrapper__TestOption__result_bn"], + [10, "enums::test_option::__wrapper__TestOption__result_array"], + [11, "enums::test_option::__wrapper__TestOption__result_fixed_array"], + [12, "enums::test_option::__wrapper__TestOption__result_tuple"], + [13, "enums::test_option::__wrapper__TestOption__result_result_bn"], + [14, "enums::test_option::__wrapper__TestOption__result_option"], + [15, "enums::test_option::__wrapper__TestOption__write_result_bn"], + [16, "enums::test_option::__wrapper__TestOption__struct_point"], + [17, "enums::test_option::__wrapper__TestOption__struct_point2"], + [18, "enums::test_option::__wrapper__TestOption__struct_Empty"], + [19, "enums::test_option::__wrapper__TestOption__struct_Cat"], + [20, "enums::test_option::__wrapper__TestOption__struct_Dog"], + [21, "enums::test_option::__wrapper__TestOption__struct_Horse"], + [22, "enums::test_option::__wrapper__TestOption__struct_Truck"], + [23, "enums::test_option::__wrapper__TestOption__struct_Destruction"], + [ + 24, + "core::panic_with_const_felt252::<7733229381460288120802334208475838166080759535023995805565484692595>" + ], + [ + 25, + "core::panic_with_const_felt252::<485748461484230571791265682659113160264223489397539653310998840191492913>" + ], + [26, "core::panic_with_const_felt252::<375233589013918064796019>"], + [ + 27, + "core::option::OptionSerde::, core::array::ArraySerde::, core::integer::u8Drop>>::deserialize" + ], + [ + 28, + "core::array::serialize_array_helper::, core::integer::u8Drop>" + ], + [ + 29, + "core::tuple::DeserializeTupleNext::<[core::integer::u32; 3], core::fixed_size_array::TupleSplitFixedSizedArraySized3::, core::serde::into_felt252_based::SerdeImpl::, core::tuple::DeserializeTupleNext::<[core::integer::u32; 2], core::fixed_size_array::TupleSplitFixedSizedArraySized2::, core::serde::into_felt252_based::SerdeImpl::, core::tuple::DeserializeTupleNext::<[core::integer::u32; 1], core::fixed_size_array::TupleSplitFixedSizedArraySized1::, core::serde::into_felt252_based::SerdeImpl::, core::tuple::DeserializeTupleBaseFixedSizedArray::, core::integer::u32Drop>, core::integer::u32Drop>, core::integer::u32Drop>::deserialize" + ], + [ + 30, + "core::option::OptionSerde::<(core::integer::u32, core::array::Array::), core::tuple::SerdeTuple::<(core::integer::u32, core::array::Array::), core::tuple::TupleSnapForwardTupleSize2::>, core::tuple::SerializeTupleNext::<(@core::integer::u32, @core::array::Array::), core::tuple::TupleSplitTupleSize2::<@core::integer::u32, @core::array::Array::>, core::tuple::SerdeBasedSerializeTuple::>, core::tuple::SerializeTupleNext::<(@core::array::Array::,), core::tuple::TupleSplitTupleSize1::<@core::array::Array::>, core::tuple::SerdeBasedSerializeTuple::, core::array::ArraySerde::, core::integer::u32Drop>>, core::tuple::SerializeTupleBaseTuple, core::tuple::TupleSize0Drop>, core::tuple::TupleNextDrop::<(@core::array::Array::,), core::tuple::TupleSplitTupleSize1::<@core::array::Array::>, core::tuple::IsTupleTupleSize1::<@core::array::Array::>, core::traits::SnapshotDrop::>, core::tuple::TupleSize0Drop>>, core::tuple::DeserializeTupleNext::<(core::integer::u32, core::array::Array::), core::tuple::TupleSplitTupleSize2::>, core::serde::into_felt252_based::SerdeImpl::, core::tuple::DeserializeTupleNext::<(core::array::Array::,), core::tuple::TupleSplitTupleSize1::>, core::array::ArraySerde::, core::integer::u32Drop>, core::tuple::DeserializeTupleBaseTuple, core::array::ArrayDrop::>, core::integer::u32Drop>>>::deserialize" + ], + [ + 31, + "core::array::serialize_array_helper::, core::integer::u32Drop>" + ], + [ + 32, + "core::option::OptionSerde::, core::option::OptionSerde::>>::deserialize" + ], + [ + 33, + "core::result::ResultSerde::, core::serde::into_felt252_based::SerdeImpl::>::deserialize" + ], + [ + 34, + "core::array::deserialize_array_helper::, core::option::OptionSerde::>, core::option::OptionDrop::>" + ], + [ + 35, + "core::array::serialize_array_helper::, core::option::OptionSerde::>, core::option::OptionDrop::>" + ], + [36, "core::option::OptionSerde::::deserialize"], + [ + 37, + "core::result::ResultSerde::, core::array::Array::, core::array::ArraySerde::, core::integer::u8Drop>, core::array::ArraySerde::, core::integer::u16Drop>>::deserialize" + ], + [ + 38, + "core::array::serialize_array_helper::, core::integer::u16Drop>" + ], + [ + 39, + "core::result::ResultSerde::<[core::integer::u32; 3], [core::integer::u16; 2], core::tuple::SerdeTuple::<[core::integer::u32; 3], core::fixed_size_array::TupleSnapForwardFixedSizedArraySized3::, core::tuple::SerializeTupleNext::<[@core::integer::u32; 3], core::fixed_size_array::TupleSplitFixedSizedArraySized3::<@core::integer::u32>, core::tuple::SerdeBasedSerializeTuple::>, core::tuple::SerializeTupleNext::<[@core::integer::u32; 2], core::fixed_size_array::TupleSplitFixedSizedArraySized2::<@core::integer::u32>, core::tuple::SerdeBasedSerializeTuple::>, core::tuple::SerializeTupleNext::<[@core::integer::u32; 1], core::fixed_size_array::TupleSplitFixedSizedArraySized1::<@core::integer::u32>, core::tuple::SerdeBasedSerializeTuple::>, core::tuple::SerializeTupleBaseFixedSizedArray::, core::fixed_size_array::FixedSizedArrayDrop::<@core::integer::u32, core::traits::SnapshotDrop::, 0>>, core::fixed_size_array::FixedSizedArrayDrop::<@core::integer::u32, core::traits::SnapshotDrop::, 1>>, core::fixed_size_array::FixedSizedArrayDrop::<@core::integer::u32, core::traits::SnapshotDrop::, 2>>, core::tuple::DeserializeTupleNext::<[core::integer::u32; 3], core::fixed_size_array::TupleSplitFixedSizedArraySized3::, core::serde::into_felt252_based::SerdeImpl::, core::tuple::DeserializeTupleNext::<[core::integer::u32; 2], core::fixed_size_array::TupleSplitFixedSizedArraySized2::, core::serde::into_felt252_based::SerdeImpl::, core::tuple::DeserializeTupleNext::<[core::integer::u32; 1], core::fixed_size_array::TupleSplitFixedSizedArraySized1::, core::serde::into_felt252_based::SerdeImpl::, core::tuple::DeserializeTupleBaseFixedSizedArray::, core::integer::u32Drop>, core::integer::u32Drop>, core::integer::u32Drop>>, core::tuple::SerdeTuple::<[core::integer::u16; 2], core::fixed_size_array::TupleSnapForwardFixedSizedArraySized2::, core::tuple::SerializeTupleNext::<[@core::integer::u16; 2], core::fixed_size_array::TupleSplitFixedSizedArraySized2::<@core::integer::u16>, core::tuple::SerdeBasedSerializeTuple::>, core::tuple::SerializeTupleNext::<[@core::integer::u16; 1], core::fixed_size_array::TupleSplitFixedSizedArraySized1::<@core::integer::u16>, core::tuple::SerdeBasedSerializeTuple::>, core::tuple::SerializeTupleBaseFixedSizedArray::, core::fixed_size_array::FixedSizedArrayDrop::<@core::integer::u16, core::traits::SnapshotDrop::, 0>>, core::fixed_size_array::FixedSizedArrayDrop::<@core::integer::u16, core::traits::SnapshotDrop::, 1>>, core::tuple::DeserializeTupleNext::<[core::integer::u16; 2], core::fixed_size_array::TupleSplitFixedSizedArraySized2::, core::serde::into_felt252_based::SerdeImpl::, core::tuple::DeserializeTupleNext::<[core::integer::u16; 1], core::fixed_size_array::TupleSplitFixedSizedArraySized1::, core::serde::into_felt252_based::SerdeImpl::, core::tuple::DeserializeTupleBaseFixedSizedArray::, core::integer::u16Drop>, core::integer::u16Drop>>>::deserialize" + ], + [ + 40, + "core::result::ResultSerde::<(core::integer::u32, core::array::Array::), (core::integer::u16, core::array::Array::), core::tuple::SerdeTuple::<(core::integer::u32, core::array::Array::), core::tuple::TupleSnapForwardTupleSize2::>, core::tuple::SerializeTupleNext::<(@core::integer::u32, @core::array::Array::), core::tuple::TupleSplitTupleSize2::<@core::integer::u32, @core::array::Array::>, core::tuple::SerdeBasedSerializeTuple::>, core::tuple::SerializeTupleNext::<(@core::array::Array::,), core::tuple::TupleSplitTupleSize1::<@core::array::Array::>, core::tuple::SerdeBasedSerializeTuple::, core::array::ArraySerde::, core::integer::u32Drop>>, core::tuple::SerializeTupleBaseTuple, core::tuple::TupleSize0Drop>, core::tuple::TupleNextDrop::<(@core::array::Array::,), core::tuple::TupleSplitTupleSize1::<@core::array::Array::>, core::tuple::IsTupleTupleSize1::<@core::array::Array::>, core::traits::SnapshotDrop::>, core::tuple::TupleSize0Drop>>, core::tuple::DeserializeTupleNext::<(core::integer::u32, core::array::Array::), core::tuple::TupleSplitTupleSize2::>, core::serde::into_felt252_based::SerdeImpl::, core::tuple::DeserializeTupleNext::<(core::array::Array::,), core::tuple::TupleSplitTupleSize1::>, core::array::ArraySerde::, core::integer::u32Drop>, core::tuple::DeserializeTupleBaseTuple, core::array::ArrayDrop::>, core::integer::u32Drop>>, core::tuple::SerdeTuple::<(core::integer::u16, core::array::Array::), core::tuple::TupleSnapForwardTupleSize2::>, core::tuple::SerializeTupleNext::<(@core::integer::u16, @core::array::Array::), core::tuple::TupleSplitTupleSize2::<@core::integer::u16, @core::array::Array::>, core::tuple::SerdeBasedSerializeTuple::>, core::tuple::SerializeTupleNext::<(@core::array::Array::,), core::tuple::TupleSplitTupleSize1::<@core::array::Array::>, core::tuple::SerdeBasedSerializeTuple::, core::array::ArraySerde::, core::integer::u16Drop>>, core::tuple::SerializeTupleBaseTuple, core::tuple::TupleSize0Drop>, core::tuple::TupleNextDrop::<(@core::array::Array::,), core::tuple::TupleSplitTupleSize1::<@core::array::Array::>, core::tuple::IsTupleTupleSize1::<@core::array::Array::>, core::traits::SnapshotDrop::>, core::tuple::TupleSize0Drop>>, core::tuple::DeserializeTupleNext::<(core::integer::u16, core::array::Array::), core::tuple::TupleSplitTupleSize2::>, core::serde::into_felt252_based::SerdeImpl::, core::tuple::DeserializeTupleNext::<(core::array::Array::,), core::tuple::TupleSplitTupleSize1::>, core::array::ArraySerde::, core::integer::u16Drop>, core::tuple::DeserializeTupleBaseTuple, core::array::ArrayDrop::>, core::integer::u16Drop>>>::deserialize" + ], + [ + 41, + "core::result::ResultSerde::, core::integer::u32, core::result::ResultSerde::, core::serde::into_felt252_based::SerdeImpl::>, core::serde::into_felt252_based::SerdeImpl::>::deserialize" + ], + [ + 42, + "core::result::ResultSerde::, core::serde::into_felt252_based::SerdeImpl::, core::option::OptionSerde::>>::deserialize" + ], + [43, "enums::Point2Serde::deserialize"], + [44, "enums::CatSerde::deserialize"], + [45, "enums::DogSerde::deserialize"], + [46, "enums::HorseSerde::deserialize"], + [47, "enums::TruckSerde::deserialize"], + [ + 48, + "core::result::ResultSerde::, core::serde::into_felt252_based::SerdeImpl::>::deserialize" + ], + [49, "core::panic_with_felt252"], + [ + 50, + "core::array::deserialize_array_helper::, core::integer::u8Drop>" + ], + [ + 51, + "core::tuple::DeserializeTupleNext::<(core::integer::u32, core::array::Array::), core::tuple::TupleSplitTupleSize2::>, core::serde::into_felt252_based::SerdeImpl::, core::tuple::DeserializeTupleNext::<(core::array::Array::,), core::tuple::TupleSplitTupleSize1::>, core::array::ArraySerde::, core::integer::u32Drop>, core::tuple::DeserializeTupleBaseTuple, core::array::ArrayDrop::>, core::integer::u32Drop>::deserialize" + ], + [ + 52, + "core::array::deserialize_array_helper::, core::integer::u16Drop>" + ], + [ + 53, + "core::tuple::DeserializeTupleNext::<(core::integer::u16, core::array::Array::), core::tuple::TupleSplitTupleSize2::>, core::serde::into_felt252_based::SerdeImpl::, core::tuple::DeserializeTupleNext::<(core::array::Array::,), core::tuple::TupleSplitTupleSize1::>, core::array::ArraySerde::, core::integer::u16Drop>, core::tuple::DeserializeTupleBaseTuple, core::array::ArrayDrop::>, core::integer::u16Drop>::deserialize" + ], + [ + 54, + "core::tuple::DeserializeTupleNext::<(core::integer::u16, core::integer::u32, core::integer::u64), core::tuple::TupleSplitTupleSize3::, core::serde::into_felt252_based::SerdeImpl::, core::tuple::DeserializeTupleNext::<(core::integer::u32, core::integer::u64), core::tuple::TupleSplitTupleSize2::, core::serde::into_felt252_based::SerdeImpl::, core::tuple::DeserializeTupleNext::<(core::integer::u64,), core::tuple::TupleSplitTupleSize1::, core::serde::into_felt252_based::SerdeImpl::, core::tuple::DeserializeTupleBaseTuple, core::integer::u64Drop>, core::integer::u32Drop>, core::integer::u16Drop>::deserialize" + ], + [ + 55, + "core::array::deserialize_array_helper::, core::integer::u32Drop>" + ], + [ + 56, + "core::tuple::DeserializeTupleNext::<[core::integer::u16; 3], core::fixed_size_array::TupleSplitFixedSizedArraySized3::, core::serde::into_felt252_based::SerdeImpl::, core::tuple::DeserializeTupleNext::<[core::integer::u16; 2], core::fixed_size_array::TupleSplitFixedSizedArraySized2::, core::serde::into_felt252_based::SerdeImpl::, core::tuple::DeserializeTupleNext::<[core::integer::u16; 1], core::fixed_size_array::TupleSplitFixedSizedArraySized1::, core::serde::into_felt252_based::SerdeImpl::, core::tuple::DeserializeTupleBaseFixedSizedArray::, core::integer::u16Drop>, core::integer::u16Drop>, core::integer::u16Drop>::deserialize" + ] + ] + }, + "contract_class_version": "0.1.0", + "entry_points_by_type": { + "EXTERNAL": [ + { + "selector": "0x462b1b2d0b30d80be98c4aec16f07b72212bbef41ac45680ed94e954a6aa9", + "function_idx": 3 + }, + { + "selector": "0x1feb29d0d6e8c4ba7a71db4cdaa24898ddd8bb350e724f844145997afee9c9", + "function_idx": 19 + }, + { + "selector": "0x78664aa9f94155a6e6acf3aa0add2ce6fcf36349488671af774d676363e0c7", + "function_idx": 1 + }, + { + "selector": "0xe1eafdb08801cfc555a49e25dabfd7aa4ed7b2dd5c7e2c5a6930eac6d1b54c", + "function_idx": 17 + }, + { + "selector": "0x106f418ef7e2ea39027bcde47d5f0a54ed68fe34aa69b24c3a162def52a841b", + "function_idx": 13 + }, + { + "selector": "0x11fdea672ded06956bdd64d89fd111661735e88595f88c1199f648fe3c2dd15", + "function_idx": 20 + }, + { + "selector": "0x126587e6b203b756642ff0bd9f92e84ef609cf2a02b516fbf2d94f36a73b83e", + "function_idx": 6 + }, + { + "selector": "0x1303ef00936936490ad20afec7fbe2bf74669665b2a2249945ff561debad733", + "function_idx": 7 + }, + { + "selector": "0x13d3b1aae5fa65a483db7c67c98dca6aac27353970caa114d112c4b6de8ec73", + "function_idx": 11 + }, + { + "selector": "0x145f0cd3e37db4233ce4d6b84935d9b32387d72eb53713e78e2ec56cc6fdf5d", + "function_idx": 16 + }, + { + "selector": "0x147c0b24e5bfb625956c5a44d3fc84d509b789bf2e5335365c03b9be2d757d3", + "function_idx": 15 + }, + { + "selector": "0x1785e0d94a5ba07a47865d69afdf914dad65466b25d38cb78cb741fac447ba8", + "function_idx": 22 + }, + { + "selector": "0x1c7564da2ac3c0ee05570d52004d51604c5315131cafd67610b2e629bf4fd7c", + "function_idx": 14 + }, + { + "selector": "0x1d39fadfe7e2621092d7d0a467672f0eb0ad03c5926829d40ceefa7bcd10b80", + "function_idx": 23 + }, + { + "selector": "0x1ff9f9a5d04b7955383039cae30cd6c0d1cb3c0e04a579f393a7ac9cf39c7b3", + "function_idx": 5 + }, + { + "selector": "0x208b88c80fabc1b03f3c78a09aaa1a693a5bb1366271a1c6b9e7971aa325116", + "function_idx": 18 + }, + { + "selector": "0x21b020335325fcef65a03b765adaefcc9fb4eccceb8e0293516736095e8cceb", + "function_idx": 2 + }, + { + "selector": "0x242ba12536f9ac18cffcedd5588e2922a17c0f453a064a64e62df6d3f6f8dce", + "function_idx": 4 + }, + { + "selector": "0x265cf503e1b425e68026a65eb872306eb863eb6ba526cddc50fd44d00d8e180", + "function_idx": 0 + }, + { + "selector": "0x29a68d48876fa0d864a616e212175e42824be1cdcb35bcd2e05b302042e491f", + "function_idx": 8 + }, + { + "selector": "0x31c18e21d8e75a5f2f6f1330c56da1f8b2fd93568002ef0d15bcce9c5644c2b", + "function_idx": 10 + }, + { + "selector": "0x36e432757f2854d382b66d849ed9a3edf35fdbf55a7c83296142cf7b89b0573", + "function_idx": 12 + }, + { + "selector": "0x3bb1cf9f6b291f5c63c8ecbfcf8cd522642fdc7ec277c2fddb7dc069cd05ced", + "function_idx": 21 + }, + { + "selector": "0x3c694eba4d500b140694d8f7da3f85031f4d4827b57da58cb5f2bd1ab74e5ab", + "function_idx": 9 + } + ], + "L1_HANDLER": [], + "CONSTRUCTOR": [] + }, + "abi": [ + { + "type": "impl", + "name": "TestOption", + "interface_name": "enums::ITestOption" + }, + { + "type": "enum", + "name": "core::option::Option::", + "variants": [ + { + "name": "Some", + "type": "core::integer::u16" + }, + { + "name": "None", + "type": "()" + } + ] + }, + { + "type": "enum", + "name": "core::option::Option::>", + "variants": [ + { + "name": "Some", + "type": "core::array::Array::" + }, + { + "name": "None", + "type": "()" + } + ] + }, + { + "type": "enum", + "name": "core::option::Option::<[core::integer::u32; 3]>", + "variants": [ + { + "name": "Some", + "type": "[core::integer::u32; 3]" + }, + { + "name": "None", + "type": "()" + } + ] + }, + { + "type": "enum", + "name": "core::option::Option::<(core::integer::u32, core::array::Array::)>", + "variants": [ + { + "name": "Some", + "type": "(core::integer::u32, core::array::Array::)" + }, + { + "name": "None", + "type": "()" + } + ] + }, + { + "type": "enum", + "name": "core::option::Option::>", + "variants": [ + { + "name": "Some", + "type": "core::option::Option::" + }, + { + "name": "None", + "type": "()" + } + ] + }, + { + "type": "enum", + "name": "core::result::Result::", + "variants": [ + { + "name": "Ok", + "type": "core::integer::u8" + }, + { + "name": "Err", + "type": "core::integer::u16" + } + ] + }, + { + "type": "enum", + "name": "core::option::Option::>", + "variants": [ + { + "name": "Some", + "type": "core::result::Result::" + }, + { + "name": "None", + "type": "()" + } + ] + }, + { + "type": "struct", + "name": "enums::Point", + "members": [ + { + "name": "x", + "type": "core::integer::u64" + }, + { + "name": "y", + "type": "core::integer::u32" + } + ] + }, + { + "type": "enum", + "name": "core::option::Option::", + "variants": [ + { + "name": "Some", + "type": "enums::Point" + }, + { + "name": "None", + "type": "()" + } + ] + }, + { + "type": "enum", + "name": "core::result::Result::, core::array::Array::>", + "variants": [ + { + "name": "Ok", + "type": "core::array::Array::" + }, + { + "name": "Err", + "type": "core::array::Array::" + } + ] + }, + { + "type": "enum", + "name": "core::result::Result::<[core::integer::u32; 3], [core::integer::u16; 2]>", + "variants": [ + { + "name": "Ok", + "type": "[core::integer::u32; 3]" + }, + { + "name": "Err", + "type": "[core::integer::u16; 2]" + } + ] + }, + { + "type": "enum", + "name": "core::result::Result::<(core::integer::u32, core::array::Array::), (core::integer::u16, core::array::Array::)>", + "variants": [ + { + "name": "Ok", + "type": "(core::integer::u32, core::array::Array::)" + }, + { + "name": "Err", + "type": "(core::integer::u16, core::array::Array::)" + } + ] + }, + { + "type": "enum", + "name": "core::result::Result::, core::integer::u32>", + "variants": [ + { + "name": "Ok", + "type": "core::result::Result::" + }, + { + "name": "Err", + "type": "core::integer::u32" + } + ] + }, + { + "type": "enum", + "name": "core::option::Option::", + "variants": [ + { + "name": "Some", + "type": "core::integer::u32" + }, + { + "name": "None", + "type": "()" + } + ] + }, + { + "type": "enum", + "name": "core::result::Result::>", + "variants": [ + { + "name": "Ok", + "type": "core::integer::u8" + }, + { + "name": "Err", + "type": "core::option::Option::" + } + ] + }, + { + "type": "struct", + "name": "enums::Point2", + "members": [ + { + "name": "thickness", + "type": "core::integer::u64" + }, + { + "name": "location", + "type": "enums::Point" + } + ] + }, + { + "type": "struct", + "name": "enums::Empty", + "members": [] + }, + { + "type": "struct", + "name": "enums::Cat", + "members": [ + { + "name": "age", + "type": "core::integer::u16" + }, + { + "name": "legs", + "type": "(core::integer::u8, core::integer::u16, core::integer::u32, core::integer::u64)" + } + ] + }, + { + "type": "struct", + "name": "core::array::Span::", + "members": [ + { + "name": "snapshot", + "type": "@core::array::Array::" + } + ] + }, + { + "type": "struct", + "name": "enums::Dog", + "members": [ + { + "name": "age", + "type": "core::integer::u16" + }, + { + "name": "colors", + "type": "core::array::Span::" + } + ] + }, + { + "type": "struct", + "name": "enums::Horse", + "members": [ + { + "name": "age", + "type": "core::integer::u16" + }, + { + "name": "legs_color", + "type": "[core::integer::u16; 4]" + } + ] + }, + { + "type": "enum", + "name": "core::option::Option::", + "variants": [ + { + "name": "Some", + "type": "core::integer::u8" + }, + { + "name": "None", + "type": "()" + } + ] + }, + { + "type": "struct", + "name": "enums::Truck", + "members": [ + { + "name": "power", + "type": "core::integer::u32" + }, + { + "name": "turbo", + "type": "core::option::Option::" + } + ] + }, + { + "type": "enum", + "name": "core::result::Result::", + "variants": [ + { + "name": "Ok", + "type": "core::integer::u8" + }, + { + "name": "Err", + "type": "core::integer::u64" + } + ] + }, + { + "type": "struct", + "name": "enums::Destruction", + "members": [ + { + "name": "area", + "type": "core::integer::u128" + }, + { + "name": "res", + "type": "core::result::Result::" + } + ] + }, + { + "type": "interface", + "name": "enums::ITestOption", + "items": [ + { + "type": "function", + "name": "option_bn", + "inputs": [ + { + "name": "x", + "type": "core::option::Option::" + } + ], + "outputs": [ + { + "type": "core::option::Option::" + } + ], + "state_mutability": "view" + }, + { + "type": "function", + "name": "option_array", + "inputs": [ + { + "name": "x", + "type": "core::option::Option::>" + } + ], + "outputs": [ + { + "type": "core::option::Option::>" + } + ], + "state_mutability": "view" + }, + { + "type": "function", + "name": "option_fixed_array", + "inputs": [ + { + "name": "x", + "type": "core::option::Option::<[core::integer::u32; 3]>" + } + ], + "outputs": [ + { + "type": "core::option::Option::<[core::integer::u32; 3]>" + } + ], + "state_mutability": "view" + }, + { + "type": "function", + "name": "option_tuple", + "inputs": [ + { + "name": "x", + "type": "core::option::Option::<(core::integer::u32, core::array::Array::)>" + } + ], + "outputs": [ + { + "type": "core::option::Option::<(core::integer::u32, core::array::Array::)>" + } + ], + "state_mutability": "view" + }, + { + "type": "function", + "name": "option_option_bn", + "inputs": [ + { + "name": "x", + "type": "core::option::Option::>" + } + ], + "outputs": [ + { + "type": "core::option::Option::>" + } + ], + "state_mutability": "view" + }, + { + "type": "function", + "name": "option_result", + "inputs": [ + { + "name": "x", + "type": "core::option::Option::>" + } + ], + "outputs": [ + { + "type": "core::option::Option::>" + } + ], + "state_mutability": "view" + }, + { + "type": "function", + "name": "array_option_bn", + "inputs": [ + { + "name": "x", + "type": "core::array::Array::>" + } + ], + "outputs": [ + { + "type": "core::array::Array::>" + } + ], + "state_mutability": "view" + }, + { + "type": "function", + "name": "write_option_bn", + "inputs": [ + { + "name": "x", + "type": "core::option::Option::" + } + ], + "outputs": [], + "state_mutability": "external" + }, + { + "type": "function", + "name": "option_point", + "inputs": [ + { + "name": "x", + "type": "core::option::Option::" + } + ], + "outputs": [ + { + "type": "core::option::Option::" + } + ], + "state_mutability": "view" + }, + { + "type": "function", + "name": "result_bn", + "inputs": [ + { + "name": "x", + "type": "core::result::Result::" + } + ], + "outputs": [ + { + "type": "core::result::Result::" + } + ], + "state_mutability": "view" + }, + { + "type": "function", + "name": "result_array", + "inputs": [ + { + "name": "x", + "type": "core::result::Result::, core::array::Array::>" + } + ], + "outputs": [ + { + "type": "core::result::Result::, core::array::Array::>" + } + ], + "state_mutability": "view" + }, + { + "type": "function", + "name": "result_fixed_array", + "inputs": [ + { + "name": "x", + "type": "core::result::Result::<[core::integer::u32; 3], [core::integer::u16; 2]>" + } + ], + "outputs": [ + { + "type": "core::result::Result::<[core::integer::u32; 3], [core::integer::u16; 2]>" + } + ], + "state_mutability": "view" + }, + { + "type": "function", + "name": "result_tuple", + "inputs": [ + { + "name": "x", + "type": "core::result::Result::<(core::integer::u32, core::array::Array::), (core::integer::u16, core::array::Array::)>" + } + ], + "outputs": [ + { + "type": "core::result::Result::<(core::integer::u32, core::array::Array::), (core::integer::u16, core::array::Array::)>" + } + ], + "state_mutability": "view" + }, + { + "type": "function", + "name": "result_result_bn", + "inputs": [ + { + "name": "x", + "type": "core::result::Result::, core::integer::u32>" + } + ], + "outputs": [ + { + "type": "core::result::Result::, core::integer::u32>" + } + ], + "state_mutability": "view" + }, + { + "type": "function", + "name": "result_option", + "inputs": [ + { + "name": "x", + "type": "core::result::Result::>" + } + ], + "outputs": [ + { + "type": "core::result::Result::>" + } + ], + "state_mutability": "view" + }, + { + "type": "function", + "name": "write_result_bn", + "inputs": [ + { + "name": "x", + "type": "core::result::Result::" + } + ], + "outputs": [], + "state_mutability": "external" + }, + { + "type": "function", + "name": "struct_point", + "inputs": [ + { + "name": "x", + "type": "enums::Point" + } + ], + "outputs": [ + { + "type": "enums::Point" + } + ], + "state_mutability": "view" + }, + { + "type": "function", + "name": "struct_point2", + "inputs": [ + { + "name": "x", + "type": "enums::Point2" + } + ], + "outputs": [ + { + "type": "enums::Point2" + } + ], + "state_mutability": "view" + }, + { + "type": "function", + "name": "struct_Empty", + "inputs": [ + { + "name": "x", + "type": "enums::Empty" + } + ], + "outputs": [ + { + "type": "enums::Empty" + } + ], + "state_mutability": "view" + }, + { + "type": "function", + "name": "struct_Cat", + "inputs": [ + { + "name": "x", + "type": "enums::Cat" + } + ], + "outputs": [ + { + "type": "enums::Cat" + } + ], + "state_mutability": "view" + }, + { + "type": "function", + "name": "struct_Dog", + "inputs": [ + { + "name": "x", + "type": "enums::Dog" + } + ], + "outputs": [ + { + "type": "enums::Dog" + } + ], + "state_mutability": "view" + }, + { + "type": "function", + "name": "struct_Horse", + "inputs": [ + { + "name": "x", + "type": "enums::Horse" + } + ], + "outputs": [ + { + "type": "enums::Horse" + } + ], + "state_mutability": "view" + }, + { + "type": "function", + "name": "struct_Truck", + "inputs": [ + { + "name": "x", + "type": "enums::Truck" + } + ], + "outputs": [ + { + "type": "enums::Truck" + } + ], + "state_mutability": "view" + }, + { + "type": "function", + "name": "struct_Destruction", + "inputs": [ + { + "name": "x", + "type": "enums::Destruction" + } + ], + "outputs": [ + { + "type": "enums::Destruction" + } + ], + "state_mutability": "view" + } + ] + }, + { + "type": "event", + "name": "enums::test_option::Event", + "kind": "enum", + "variants": [] + } + ] +} diff --git a/__tests__/config/fixtures.ts b/__tests__/config/fixtures.ts index 410adab84..0702548da 100644 --- a/__tests__/config/fixtures.ts +++ b/__tests__/config/fixtures.ts @@ -74,6 +74,7 @@ const compiledContracts = { deployer: 'cairo2100/deployer', CairoByteArray: 'byteArray/target/dev/test_ByteArrayStorage', IntegerTypes: 'integerTypes/target/dev/test_IntegerTypesStorage', + TestCairoType: 'cairo2120/enums_test_enums', }; export const contracts = mapContractSets(compiledContracts); diff --git a/__tests__/utils/cairoDataTypes/CairoStruct.test.ts b/__tests__/utils/cairoDataTypes/CairoStruct.test.ts new file mode 100644 index 000000000..5ef4b3b4e --- /dev/null +++ b/__tests__/utils/cairoDataTypes/CairoStruct.test.ts @@ -0,0 +1,278 @@ +import { + CairoOptionVariant, + CairoTypeOption, + hdParsingStrategy, + type BigNumberish, + CairoOption, + CairoArray, + CallData, + CairoTypeResult, + CairoResultVariant, + CairoResult, + CairoTuple, + CairoFixedArray, + type ParsingStrategy, + type AbiStruct, + CairoStruct, +} from '../../../src'; +import { contracts } from '../../config/fixtures'; + +describe('CairoStruct', () => { + const myCallData = new CallData(contracts.TestCairoType.sierra.abi); + const strategies = myCallData.parser.parsingStrategies as ParsingStrategy[]; + const abiPoint: AbiStruct = contracts.TestCairoType.sierra.abi.find( + (item) => item.name === 'test_enums::Point' + ); + const abiCat: AbiStruct = contracts.TestCairoType.sierra.abi.find( + (item) => item.name === 'test_enums::Cat' + ); + describe('constructor variant', () => { + test('content is an object', () => { + const myCairoStruct = new CairoStruct({ x: 1, y: 2 }, abiPoint, strategies); + expect(myCairoStruct.toApiRequest()).toEqual(['0x1', '0x2']); + expect(myCairoStruct.decompose(strategies)).toEqual({ x: 1n, y: 2n }); + }); + + test('content is an array', () => { + const myCairoStruct = new CairoStruct([1, 2], abiPoint, strategies); + expect(myCairoStruct.toApiRequest()).toEqual(['0x1', '0x2']); + expect(myCairoStruct.decompose(strategies)).toEqual({ x: 1n, y: 2n }); + }); + + test('content is an iterator', () => { + const iter = ['0', '100'][Symbol.iterator](); + const myCairoStruct = new CairoStruct(iter, abiPoint, strategies); + expect(myCairoStruct.toApiRequest()).toEqual(['0x0', '0x64']); + expect(myCairoStruct.decompose(strategies)).toEqual({ x: 0n, y: 100n }); + const iter2 = ['2', '11', '12', '13', '14'][Symbol.iterator](); + const myCairoStruct2 = new CairoStruct(iter2, abiCat, strategies); + expect(myCairoStruct2.toApiRequest()).toEqual(['0x2', '0xb', '0xc', '0xd', '0xe']); + expect(myCairoStruct2.decompose(strategies)).toEqual({ + age: 2n, + legs: { '0': 11n, '1': 12n, '2': 13n, '3': 14n }, + }); + }); + + test('accept single strategy', () => { + const customStrategy: ParsingStrategy = { + constructors: { + ...strategies[0].constructors, + ...strategies[1].constructors, + }, + dynamicSelectors: { + ...strategies[0].dynamicSelectors, + ...strategies[1].dynamicSelectors, + }, + response: { + ...strategies[0].response, + ...strategies[1].response, + }, + }; + const myCairoStruct = new CairoStruct({ x: 1, y: 2 }, abiPoint, customStrategy); + expect(myCairoStruct.toApiRequest()).toEqual(['0x1', '0x2']); + expect(myCairoStruct.decompose(customStrategy)).toEqual({ x: 1n, y: 2n }); + }); + }); + + describe('constructor CairoType', () => { + test('proper abi definition', () => { + expect( + () => + new CairoStruct( + { x: 2, y: 3 }, + { name: 'error', type: 'struct', members: [] }, + strategies + ) + ).toThrow(new Error('Invalid input: expected 0 members, got 2')); + }); + + test('CairoType: result of an array', () => { + const abiDog: AbiStruct = contracts.TestCairoType.sierra.abi.find( + (item) => item.name === 'test_enums::Dog' + ); + const myStruct0 = new CairoStruct({ age: 2, colors: [1, 2, 3] }, abiDog, strategies); + const myStruct1 = new CairoStruct( + { + age: 2, + colors: new CairoArray( + [1, 2, 3], + 'core::array::Array::', + hdParsingStrategy + ), + }, + abiDog, + strategies + ); + expect(myStruct0.toApiRequest()).toEqual(['0x2', '0x3', '0x1', '0x2', '0x3']); + expect(myStruct0.decompose(hdParsingStrategy)).toEqual({ age: 2n, colors: [1n, 2n, 3n] }); + expect(myStruct1.toApiRequest()).toEqual(['0x2', '0x3', '0x1', '0x2', '0x3']); + expect(myStruct1.decompose(hdParsingStrategy)).toEqual({ age: 2n, colors: [1n, 2n, 3n] }); + }); + + test('CairoType: result of a fixed array', () => { + const abiHorse: AbiStruct = contracts.TestCairoType.sierra.abi.find( + (item) => item.name === 'test_enums::Horse' + ); + const myResult0 = new CairoStruct({ age: 2, legs_color: [1, 2, 3, 4] }, abiHorse, strategies); + const myResult1 = new CairoStruct( + { + age: 2, + legs_color: new CairoFixedArray([1, 2, 3, 4], '[core::integer::u16; 4]', strategies), + }, + abiHorse, + strategies + ); + expect(myResult0.toApiRequest()).toEqual(['0x2', '0x1', '0x2', '0x3', '0x4']); + expect(myResult0.decompose(hdParsingStrategy)).toEqual({ + age: 2n, + legs_color: [1n, 2n, 3n, 4n], + }); + expect(myResult1.toApiRequest()).toEqual(['0x2', '0x1', '0x2', '0x3', '0x4']); + expect(myResult1.decompose(hdParsingStrategy)).toEqual({ + age: 2n, + legs_color: [1n, 2n, 3n, 4n], + }); + }); + + test('CairoType: result of a tuple', () => { + const myStruct0 = new CairoStruct({ age: 2, legs: [5, 6, 7, 8] }, abiCat, strategies); + const myStruct1 = new CairoStruct( + { + age: 2, + legs: new CairoTuple( + [5, 6, 7, 8], + '(core::integer::u8, core::integer::u16, core::integer::u32, core::integer::u64)', + strategies + ), + }, + abiCat, + strategies + ); + expect(myStruct0.toApiRequest()).toEqual(['0x2', '0x5', '0x6', '0x7', '0x8']); + expect(myStruct0.decompose(strategies)).toEqual({ + age: 2n, + legs: { '0': 5n, '1': 6n, '2': 7n, '3': 8n }, + }); + expect(myStruct1.toApiRequest()).toEqual(['0x2', '0x5', '0x6', '0x7', '0x8']); + expect(myStruct1.decompose(strategies)).toEqual({ + age: 2n, + legs: { '0': 5n, '1': 6n, '2': 7n, '3': 8n }, + }); + }); + + test('CairoType: result of an option', () => { + const abiTruck: AbiStruct = contracts.TestCairoType.sierra.abi.find( + (item) => item.name === 'test_enums::Truck' + ); + const option0 = new CairoOption(CairoOptionVariant.Some, 2n); + const myTypeOption = new CairoTypeOption( + 2, + 'core::option::Option::', + hdParsingStrategy, + CairoOptionVariant.Some + ); + const myStruct0 = new CairoStruct({ power: 512, turbo: option0 }, abiTruck, strategies); + const myStruct1 = new CairoStruct({ power: 512, turbo: myTypeOption }, abiTruck, strategies); + expect(myStruct0.toApiRequest()).toEqual(['0x200', '0x00', '0x2']); + expect(myStruct0.decompose(hdParsingStrategy)).toEqual({ power: 512n, turbo: option0 }); + expect(myStruct1.toApiRequest()).toEqual(['0x200', '0x00', '0x2']); + expect(myStruct1.decompose(hdParsingStrategy)).toEqual({ power: 512n, turbo: option0 }); + }); + + test('CairoType: result from a result', () => { + const abiDestruction: AbiStruct = contracts.TestCairoType.sierra.abi.find( + (item) => item.name === 'test_enums::Destruction' + ); + const result = new CairoResult(CairoResultVariant.Err, 5n); + const typeResult = new CairoTypeResult( + result, + 'core::result::Result::', + strategies + ); + const myStruct0 = new CairoStruct({ area: 512, res: result }, abiDestruction, strategies); + const myStruct1 = new CairoStruct({ area: 512, res: typeResult }, abiDestruction, strategies); + expect(myStruct0.toApiRequest()).toEqual(['0x200', '0x01', '0x5']); + expect(myStruct0.decompose(strategies)).toEqual({ area: 512n, res: result }); + expect(myStruct1.toApiRequest()).toEqual(['0x200', '0x01', '0x5']); + expect(myStruct1.decompose(strategies)).toEqual({ area: 512n, res: result }); + }); + + test('CairoType: nested structs', () => { + const abiPoint2: AbiStruct = contracts.TestCairoType.sierra.abi.find( + (item) => item.name === 'test_enums::Point2' + ); + const point1 = { x: 1, y: 2 }; + const structPoint1 = new CairoStruct(point1, abiPoint, strategies); + const point2 = { thickness: 3, location: point1 }; + const structPoint2 = new CairoStruct( + { thickness: 3, location: structPoint1 }, + abiPoint2, + strategies + ); + const struct0 = new CairoStruct(point2, abiPoint2, strategies); + const struct2 = new CairoStruct(structPoint2, abiPoint2, strategies); + expect(struct0.toApiRequest()).toEqual(['0x3', '0x1', '0x2']); + expect(struct0.decompose(strategies)).toEqual({ + thickness: 3n, + location: { x: 1n, y: 2n }, + }); + expect(struct2.toApiRequest()).toEqual(['0x3', '0x1', '0x2']); + expect(struct2.decompose(strategies)).toEqual({ + thickness: 3n, + location: { x: 1n, y: 2n }, + }); + }); + }); + + describe('static methods', () => { + test('is', () => { + expect(CairoStruct.is([200, 201])).toBe(true); + expect(CairoStruct.is(200)).toBe(false); + }); + + test('validate', () => { + expect(() => CairoStruct.validate([200, 300], abiPoint)).not.toThrow(); + expect(() => CairoStruct.validate({ x: 200, y: 300 }, abiPoint)).not.toThrow(); + expect(() => CairoStruct.validate({ x: 200, y: 300 })).not.toThrow(); + expect(() => CairoStruct.validate([200, 300], 'core::wrong' as unknown as AbiStruct)).toThrow( + new Error('Invalid ABI: expected struct, got undefined') + ); + expect(() => + CairoStruct.validate([200, 300], { + name: 'test', + type: 'struct', + members: [{ name: 'x', type: 'core::integer::u16' }], + }) + ).toThrow(new Error('Invalid input: expected 1 members, got 2')); + }); + + test('extractStructMembersNames', () => { + expect(CairoStruct.extractStructMembersNames(abiPoint)).toEqual(['x', 'y']); + }); + }); + describe('copy constructor behavior', () => { + test('should copy properties when constructed from another CairoStruct', () => { + const original = new CairoStruct({ x: 1, y: 2 }, abiPoint, strategies); + const abiPoint2: AbiStruct = contracts.TestCairoType.sierra.abi.find( + (item) => item.name === 'test_enums::Point2' + ); + const copy = new CairoStruct(original, abiPoint2, strategies); + expect(copy.content).toEqual(original.content); + expect(copy.abiStruct).toEqual(original.abiStruct); + expect(copy.dynamicSelector).toEqual(original.dynamicSelector); + }); + }); + + describe('encoding without Abi', () => { + test('number', () => { + expect(CallData.compile([new CairoStruct({ x: 4, y: 5 }, abiPoint, strategies)])).toEqual([ + '4', + '5', + ]); + + expect( + CallData.compile({ x: new CairoStruct({ x: 4, y: 5 }, abiPoint, strategies) }) + ).toEqual(['4', '5']); + }); + }); +}); diff --git a/__tests__/utils/calldata/enum/CairoTypeResult.test.ts b/__tests__/utils/calldata/enum/CairoTypeResult.test.ts index 3ff5eadfb..a57cd985f 100644 --- a/__tests__/utils/calldata/enum/CairoTypeResult.test.ts +++ b/__tests__/utils/calldata/enum/CairoTypeResult.test.ts @@ -13,6 +13,7 @@ import { CairoResult, CairoTuple, CairoFixedArray, + type ParsingStrategy, } from '../../../../src'; describe('CairoTypeResult', () => { @@ -55,6 +56,26 @@ describe('CairoTypeResult', () => { expect( () => new CairoTypeResult(undefined, typeCairo, hdParsingStrategy, CairoResultVariant.Ok) ).toThrow(new Error('"content" parameter has to be defined.')); + expect( + () => new CairoTypeResult(null, typeCairo, hdParsingStrategy, CairoResultVariant.Ok) + ).toThrow(new Error('"content" parameter has to be defined.')); + }); + + test('accept array of parsing strategies', () => { + const customStrategy: ParsingStrategy = { + constructors: {}, + dynamicSelectors: {}, + response: {}, + }; + expect( + () => + new CairoTypeResult( + val, + typeCairo, + [hdParsingStrategy, customStrategy], + CairoResultVariant.Ok + ) + ).not.toThrow(); }); test('if content is an iterator, no variant is authorized', () => { @@ -69,7 +90,6 @@ describe('CairoTypeResult', () => { describe('constructor content', () => { const val = 8n; const typeCairo = 'core::result::Result::'; - const iter = ['0', '100'][Symbol.iterator](); test('content is a CairoResult', () => { const myCairoResult = new CairoResult(CairoResultVariant.Ok, val); @@ -77,6 +97,14 @@ describe('CairoTypeResult', () => { expect(cairoTypeResult0.isVariantOk).toBe(true); expect(cairoTypeResult0.content).toEqual(new CairoUint8(8)); expect(cairoTypeResult0.resultCairoType).toBe(typeCairo); + expect( + () => + new CairoTypeResult(myCairoResult, typeCairo, hdParsingStrategy, CairoResultVariant.Ok) + ).toThrow( + new Error( + 'when "content" parameter is a CairoResult and subType is false, do not define "variant" parameter.' + ) + ); }); test('content is a CairoTypeResult', () => { @@ -106,10 +134,15 @@ describe('CairoTypeResult', () => { }); test('content is an iterator', () => { - const cairoTypeResult0 = new CairoTypeResult(iter, typeCairo, hdParsingStrategy); + const iter0 = ['0', '100'][Symbol.iterator](); + const cairoTypeResult0 = new CairoTypeResult(iter0, typeCairo, hdParsingStrategy); expect(cairoTypeResult0.isVariantOk).toBe(true); expect(cairoTypeResult0.content).toEqual(new CairoUint8(100)); expect(cairoTypeResult0.resultCairoType).toBe(typeCairo); + const iter1 = ['1', '100', '2'][Symbol.iterator](); + const typeCairo1 = 'core::result::Result::'; + const cairoTypeResult1 = new CairoTypeResult(iter1, typeCairo1, hdParsingStrategy); + expect(cairoTypeResult1.toApiRequest()).toEqual(['0x01', '0x64', '0x2']); }); }); diff --git a/__tests__/utils/calldata/parser/parser-0-1.1.0.test.ts b/__tests__/utils/calldata/parser/parser-0-1.1.0.test.ts index 5a33dfd8f..4a0bcd725 100644 --- a/__tests__/utils/calldata/parser/parser-0-1.1.0.test.ts +++ b/__tests__/utils/calldata/parser/parser-0-1.1.0.test.ts @@ -1,21 +1,22 @@ +import { hdParsingStrategy } from '../../../../src'; import { AbiParser1 } from '../../../../src/utils/calldata/parser/parser-0-1.1.0'; import { getFunctionAbi, getInterfaceAbi } from '../../../factories/abi'; describe('AbiParser1', () => { test('should create an instance', () => { - const abiParser = new AbiParser1([getFunctionAbi('struct')]); + const abiParser = new AbiParser1([getFunctionAbi('struct')], hdParsingStrategy); expect(abiParser instanceof AbiParser1).toEqual(true); expect(abiParser.abi).toStrictEqual([getFunctionAbi('struct')]); }); describe('methodInputsLength', () => { test('should return inputs length', () => { - const abiParser = new AbiParser1([getFunctionAbi('struct')]); + const abiParser = new AbiParser1([getFunctionAbi('struct')], hdParsingStrategy); expect(abiParser.methodInputsLength(getFunctionAbi('felt'))).toEqual(1); }); test('should return 0 if inputs are empty', () => { - const abiParser = new AbiParser1([getFunctionAbi('felt')]); + const abiParser = new AbiParser1([getFunctionAbi('felt')], hdParsingStrategy); const functionAbi = getFunctionAbi('felt'); functionAbi.inputs[0].name = 'test_len'; expect(abiParser.methodInputsLength(functionAbi)).toEqual(0); @@ -24,19 +25,25 @@ describe('AbiParser1', () => { describe('getMethod', () => { test('should return method definition from ABI', () => { - const abiParser = new AbiParser1([getFunctionAbi('struct'), getInterfaceAbi()]); + const abiParser = new AbiParser1( + [getFunctionAbi('struct'), getInterfaceAbi()], + hdParsingStrategy + ); expect(abiParser.getMethod('test')).toEqual(getFunctionAbi('struct')); }); test('should return undefined if method is not found', () => { - const abiParser = new AbiParser1([getFunctionAbi('struct')]); + const abiParser = new AbiParser1([getFunctionAbi('struct')], hdParsingStrategy); expect(abiParser.getMethod('struct')).toBeUndefined(); }); }); describe('getLegacyFormat', () => { test('should return method definition from ABI', () => { - const abiParser = new AbiParser1([getFunctionAbi('struct'), getInterfaceAbi()]); + const abiParser = new AbiParser1( + [getFunctionAbi('struct'), getInterfaceAbi()], + hdParsingStrategy + ); const legacyFormat = abiParser.getLegacyFormat(); expect(legacyFormat).toStrictEqual(abiParser.abi); }); diff --git a/__tests__/utils/calldata/parser/parser-2.0.0.test.ts b/__tests__/utils/calldata/parser/parser-2.0.0.test.ts index d49f0f5c8..64919d2fa 100644 --- a/__tests__/utils/calldata/parser/parser-2.0.0.test.ts +++ b/__tests__/utils/calldata/parser/parser-2.0.0.test.ts @@ -1,21 +1,22 @@ +import { hdParsingStrategy } from '../../../../src/utils/calldata'; import { AbiParser2 } from '../../../../src/utils/calldata/parser/parser-2.0.0'; import { getFunctionAbi, getInterfaceAbi } from '../../../factories/abi'; describe('AbiParser2', () => { test('should create an instance', () => { - const abiParser = new AbiParser2([getFunctionAbi('struct')]); + const abiParser = new AbiParser2([getFunctionAbi('struct')], hdParsingStrategy); expect(abiParser instanceof AbiParser2).toEqual(true); expect(abiParser.abi).toStrictEqual([getFunctionAbi('struct')]); }); describe('methodInputsLength', () => { test('should return inputs length', () => { - const abiParser = new AbiParser2([getFunctionAbi('struct')]); + const abiParser = new AbiParser2([getFunctionAbi('struct')], hdParsingStrategy); expect(abiParser.methodInputsLength(getFunctionAbi('test'))).toEqual(1); }); test('should return 0 if inputs are empty', () => { - const abiParser = new AbiParser2([getFunctionAbi('struct')]); + const abiParser = new AbiParser2([getFunctionAbi('struct')], hdParsingStrategy); const functionAbi = getFunctionAbi('test'); functionAbi.inputs = []; expect(abiParser.methodInputsLength(functionAbi)).toEqual(0); @@ -24,19 +25,25 @@ describe('AbiParser2', () => { describe('getMethod', () => { test('should return method definition from ABI', () => { - const abiParser = new AbiParser2([getFunctionAbi('struct'), getInterfaceAbi()]); + const abiParser = new AbiParser2( + [getFunctionAbi('struct'), getInterfaceAbi()], + hdParsingStrategy + ); expect(abiParser.getMethod('test')).toEqual(getFunctionAbi('struct')); }); test('should return undefined if method is not found', () => { - const abiParser = new AbiParser2([getFunctionAbi('struct')]); + const abiParser = new AbiParser2([getFunctionAbi('struct')], hdParsingStrategy); expect(abiParser.getMethod('test')).toBeUndefined(); }); }); describe('getLegacyFormat', () => { test('should return method definition from ABI', () => { - const abiParser = new AbiParser2([getFunctionAbi('struct'), getInterfaceAbi()]); + const abiParser = new AbiParser2( + [getFunctionAbi('struct'), getInterfaceAbi()], + hdParsingStrategy + ); const legacyFormat = abiParser.getLegacyFormat(); const result = [getFunctionAbi('struct'), getFunctionAbi('struct')]; expect(legacyFormat).toEqual(result); diff --git a/__tests__/utils/calldata/requestParser.test.ts b/__tests__/utils/calldata/requestParser.test.ts index 2c8842025..4c006d0c6 100644 --- a/__tests__/utils/calldata/requestParser.test.ts +++ b/__tests__/utils/calldata/requestParser.test.ts @@ -6,6 +6,7 @@ import { CairoOption, CairoResult, ETH_ADDRESS, + hdParsingStrategy, NON_ZERO_PREFIX, } from '../../../src'; @@ -19,7 +20,7 @@ describe('requestParser', () => { input: getAbiEntry('felt'), structs: getAbiStructs(), enums: getAbiEnums(), - parser: new AbiParser1([getAbiEntry('felt')]), + parser: new AbiParser1([getAbiEntry('felt')], hdParsingStrategy), }); expect(parsedField).toEqual(['0x100']); }); @@ -32,7 +33,7 @@ describe('requestParser', () => { input: getAbiEntry('core::array::Array::'), structs: getAbiStructs(), enums: getAbiEnums(), - parser: new AbiParser1([getAbiEntry('core::array::Array::')]), + parser: new AbiParser1([getAbiEntry('core::array::Array::')], hdParsingStrategy), }); expect(parsedField).toEqual(['0x2', '0x100', '0x80']); }); @@ -45,7 +46,7 @@ describe('requestParser', () => { input: getAbiEntry('core::array::Array::'), structs: getAbiStructs(), enums: getAbiEnums(), - parser: new AbiParser1([getAbiEntry('core::array::Array::')]), + parser: new AbiParser1([getAbiEntry('core::array::Array::')], hdParsingStrategy), }); expect(parsedField).toEqual(['0x1', '0x736f6d655f746573745f76616c7565']); }); @@ -58,7 +59,7 @@ describe('requestParser', () => { input: getAbiEntry(`${NON_ZERO_PREFIX}core::bool`), structs: getAbiStructs(), enums: getAbiEnums(), - parser: new AbiParser1([getAbiEntry(`${NON_ZERO_PREFIX}core::bool`)]), + parser: new AbiParser1([getAbiEntry(`${NON_ZERO_PREFIX}core::bool`)], hdParsingStrategy), }); expect(parsedField).toEqual(['0x1']); }); @@ -71,7 +72,7 @@ describe('requestParser', () => { input: getAbiEntry(`${ETH_ADDRESS}felt`), structs: getAbiStructs(), enums: getAbiEnums(), - parser: new AbiParser1([getAbiEntry(`${ETH_ADDRESS}felt`)]), + parser: new AbiParser1([getAbiEntry(`${ETH_ADDRESS}felt`)], hdParsingStrategy), }); expect(parsedField).toEqual(['0x74657374']); }); @@ -84,7 +85,7 @@ describe('requestParser', () => { input: getAbiEntry('struct'), structs: getAbiStructs(), enums: getAbiEnums(), - parser: new AbiParser1([getAbiEntry('struct')]), + parser: new AbiParser1([getAbiEntry('struct')], hdParsingStrategy), }); expect(parsedField).toEqual(['0x74657374']); }); @@ -97,7 +98,7 @@ describe('requestParser', () => { input: getAbiEntry('(core::bool, core::bool)'), structs: getAbiStructs(), enums: getAbiEnums(), - parser: new AbiParser1([getAbiEntry('(core::bool, core::bool)')]), + parser: new AbiParser1([getAbiEntry('(core::bool, core::bool)')], hdParsingStrategy), }); expect(parsedField).toEqual(['1', '1']); }); @@ -110,7 +111,7 @@ describe('requestParser', () => { input: getAbiEntry('core::integer::u256'), structs: getAbiStructs(), enums: getAbiEnums(), - parser: new AbiParser1([getAbiEntry('core::integer::u256')]), + parser: new AbiParser1([getAbiEntry('core::integer::u256')], hdParsingStrategy), }); expect(parsedField).toEqual(['252', '0']); }); @@ -123,7 +124,10 @@ describe('requestParser', () => { input: getAbiEntry('core::option::Option::'), structs: getAbiStructs(), enums: { 'core::option::Option::': getAbiEnums().enum }, - parser: new AbiParser1([getAbiEntry('core::option::Option::')]), + parser: new AbiParser1( + [getAbiEntry('core::option::Option::')], + hdParsingStrategy + ), }); expect(parsedField).toEqual('1'); }); @@ -142,7 +146,10 @@ describe('requestParser', () => { input: getAbiEntry('core::option::Option::'), structs: getAbiStructs(), enums: { 'core::option::Option::': abiEnum }, - parser: new AbiParser1([getAbiEntry('core::option::Option::')]), + parser: new AbiParser1( + [getAbiEntry('core::option::Option::')], + hdParsingStrategy + ), }); expect(parsedField).toEqual(['0', '27988542884245108']); }); @@ -156,7 +163,10 @@ describe('requestParser', () => { input: getAbiEntry('core::option::Option::core::bool'), structs: getAbiStructs(), enums: { 'core::option::Option::core::bool': getAbiEnums().enum }, - parser: new AbiParser1([getAbiEntry('core::option::Option::core::bool')]), + parser: new AbiParser1( + [getAbiEntry('core::option::Option::core::bool')], + hdParsingStrategy + ), }) ).toThrow( new Error(`ABI type core::option::Option::core::bool do not includes a valid type of data.`) @@ -177,7 +187,10 @@ describe('requestParser', () => { input: getAbiEntry('core::result::Result::core::bool'), structs: getAbiStructs(), enums: { 'core::result::Result::core::bool': abiEnum }, - parser: new AbiParser1([getAbiEntry('core::result::Result::core::bool')]), + parser: new AbiParser1( + [getAbiEntry('core::result::Result::core::bool')], + hdParsingStrategy + ), }); expect(parsedField).toEqual(['0x0', '0x4f6b']); }); @@ -191,7 +204,10 @@ describe('requestParser', () => { input: getAbiEntry('core::result::Result::core::bool'), structs: getAbiStructs(), enums: { 'core::result::Result::core::bool': getAbiEnums().enum }, - parser: new AbiParser1([getAbiEntry('core::result::Result::core::bool')]), + parser: new AbiParser1( + [getAbiEntry('core::result::Result::core::bool')], + hdParsingStrategy + ), }) ).toThrow(new Error(`Error in abi : Result has no 'Ok' variant.`)); }); @@ -211,7 +227,7 @@ describe('requestParser', () => { input: getAbiEntry('enum'), structs: getAbiStructs(), enums: { enum: abiEnum }, - parser: new AbiParser1([getAbiEntry('enum')]), + parser: new AbiParser1([getAbiEntry('enum')], hdParsingStrategy), }); expect(parsedField).toEqual(['0x1', '0x636f6e74656e74']); }); @@ -225,7 +241,7 @@ describe('requestParser', () => { input: getAbiEntry('enum'), structs: getAbiStructs(), enums: getAbiEnums(), - parser: new AbiParser1([getAbiEntry('enum')]), + parser: new AbiParser1([getAbiEntry('enum')], hdParsingStrategy), }) ).toThrow(new Error(`Not find in abi : Enum has no 'test' variant.`)); }); @@ -239,7 +255,7 @@ describe('requestParser', () => { input: getAbiEntry('core::integer::u256'), structs: getAbiStructs(), enums: getAbiEnums(), - parser: new AbiParser1([getAbiEntry('core::integer::u256')]), + parser: new AbiParser1([getAbiEntry('core::integer::u256')], hdParsingStrategy), }) ).toThrow( new Error( @@ -257,7 +273,7 @@ describe('requestParser', () => { input: getAbiEntry('(core::bool, core::bool)'), structs: getAbiStructs(), enums: getAbiEnums(), - parser: new AbiParser1([getAbiEntry('(core::bool, core::bool)')]), + parser: new AbiParser1([getAbiEntry('(core::bool, core::bool)')], hdParsingStrategy), }) ).toThrow(new Error('"core::bool,core::bool" is not a valid Cairo type')); }); @@ -271,7 +287,7 @@ describe('requestParser', () => { input: getAbiEntry('struct'), structs: getAbiStructs(), enums: getAbiEnums(), - parser: new AbiParser1([getAbiEntry('struct')]), + parser: new AbiParser1([getAbiEntry('struct')], hdParsingStrategy), }) ).toThrow(new Error('Missing parameter for type test_type')); }); @@ -285,7 +301,7 @@ describe('requestParser', () => { input: getAbiEntry('core::array::Array::'), structs: getAbiStructs(), enums: getAbiEnums(), - parser: new AbiParser1([getAbiEntry('core::array::Array::')]), + parser: new AbiParser1([getAbiEntry('core::array::Array::')], hdParsingStrategy), }) ).toThrow(new Error('ABI expected parameter test to be array or long string, got 256')); }); diff --git a/src/contract/default.ts b/src/contract/default.ts index aaa3f278b..84f506063 100644 --- a/src/contract/default.ts +++ b/src/contract/default.ts @@ -31,7 +31,7 @@ import { import type { AccountInterface } from '../account/interface'; import assert from '../utils/assert'; import { cairo, CallData } from '../utils/calldata'; -import { createAbiParser, ParsingStrategy } from '../utils/calldata/parser'; +import { createAbiParser, hdParsingStrategy, ParsingStrategy } from '../utils/calldata/parser'; import { getAbiEvents, parseEvents as parseRawEvents } from '../utils/events/index'; import { cleanHex } from '../utils/num'; import { ContractInterface } from './interface'; @@ -149,7 +149,7 @@ export class Contract implements ContractInterface { // TODO: REFACTOR: move from legacy format and add support for legacy format // Must have params this.parsingStrategy = options.parsingStrategy; - const parser = createAbiParser(options.abi, options.parsingStrategy); + const parser = createAbiParser(options.abi, options.parsingStrategy || hdParsingStrategy); this.abi = parser.getLegacyFormat(); this.address = options.address && options.address.toLowerCase(); this.providerOrAccount = options.providerOrAccount ?? defaultProvider; @@ -160,7 +160,7 @@ export class Contract implements ContractInterface { this.classHash = options.classHash; // Init - this.callData = new CallData(options.abi, options.parsingStrategy); + this.callData = new CallData(options.abi, options.parsingStrategy || hdParsingStrategy); this.structs = CallData.getAbiStruct(options.abi); this.events = getAbiEvents(options.abi); @@ -219,9 +219,9 @@ export class Contract implements ContractInterface { // TODO: if changing address, probably changing abi also !? Also nonsense method as if you change abi and address, you need to create a new contract instance. this.address = address; if (abi) { - const parser = createAbiParser(abi, this.parsingStrategy); + const parser = createAbiParser(abi, this.parsingStrategy || hdParsingStrategy); this.abi = parser.getLegacyFormat(); - this.callData = new CallData(abi, this.parsingStrategy); + this.callData = new CallData(abi, this.parsingStrategy || hdParsingStrategy); this.structs = CallData.getAbiStruct(abi); this.events = getAbiEvents(abi); } diff --git a/src/utils/cairoDataTypes/array.ts b/src/utils/cairoDataTypes/array.ts index 651e124fb..13199de44 100644 --- a/src/utils/cairoDataTypes/array.ts +++ b/src/utils/cairoDataTypes/array.ts @@ -2,11 +2,12 @@ import assert from '../assert'; import { addCompiledFlag } from '../helpers'; import { getNext, toHex } from '../num'; import { felt, getArrayType, isTypeArray } from '../calldata/cairo'; -import { type ParsingStrategy } from '../calldata/parser/parsingStrategy'; +import { type ParsingStrategy } from '../calldata/parser/parsingStrategy.type'; import { CairoType } from './cairoType.interface'; import { CairoTypeOption } from './cairoTypeOption'; import { CairoOption, CairoResult } from '../calldata/enum'; import { CairoTypeResult } from './cairoTypeResult'; +import type { AllowArray } from '../../types'; /** * Represents a Cairo dynamic array with runtime-determined length. @@ -69,9 +70,9 @@ export class CairoArray extends CairoType { * The constructor automatically detects input type and processes it appropriately, * converting all elements to proper CairoType instances based on the array type. * - * @param content - Input data (array, object, Iterator, or CairoType instances) - * @param arrayType - Dynamic array type string (e.g., "core::array::Array::") - * @param strategy - Parsing strategy for element type handling + * @param {unknown} content - Input data (array, object, Iterator, or CairoType instances) + * @param {string} arrayType - Dynamic array type string (e.g., "core::array::Array::") + * @param {AllowArray} parsingStrategy - Parsing strategy for element type handling * @example * ```typescript * // From user array @@ -88,15 +89,16 @@ export class CairoArray extends CairoType { * const nested = new CairoArray([[1, 2], [3, 4]], 'core::array::Array::>', hdParsingStrategy); * ``` */ - constructor(content: unknown, arrayType: string, strategy: ParsingStrategy) { + constructor(content: unknown, arrayType: string, parsingStrategy: AllowArray) { super(); this.arrayType = arrayType; + const strategies = Array.isArray(parsingStrategy) ? parsingStrategy : [parsingStrategy]; if (content && typeof content === 'object' && 'next' in content) { // "content" is an iterator const parsedContent: CairoType[] = CairoArray.parser( content as Iterator, arrayType, - strategy + strategies ); this.content = parsedContent; return; @@ -120,27 +122,34 @@ export class CairoArray extends CairoType { } if (contentItem instanceof CairoOption) { // "content" is a CairoOption - return new CairoTypeOption(contentItem, arrayContentType, strategy); + return new CairoTypeOption(contentItem, arrayContentType, strategies); } if (contentItem instanceof CairoResult) { // "content" is a CairoResult - return new CairoTypeResult(contentItem, arrayContentType, strategy); + return new CairoTypeResult(contentItem, arrayContentType, strategies); } // not an iterator, not an CairoType, neither a CairoType -> so is low level data (BigNumberish, array, object) - const constructor = strategy.constructors[arrayContentType]; - if (constructor) { - return constructor(contentItem, strategy, arrayContentType); - } - const dynamicSelectors = Object.entries(strategy.dynamicSelectors); - const matchingSelector = dynamicSelectors.find(([, selectorFn]) => - selectorFn(arrayContentType) + const strategyConstructorNum = strategies.findIndex( + (strategy: ParsingStrategy) => strategy.constructors[arrayContentType] ); - if (matchingSelector) { - const [selectorName] = matchingSelector; - const dynamicConstructor = strategy.constructors[selectorName]; + if (strategyConstructorNum >= 0) { + const constructor = strategies[strategyConstructorNum].constructors[arrayContentType]; + return constructor(contentItem, strategies, arrayContentType); + } + const strategyDynamicNum = strategies.findIndex((strategy: ParsingStrategy) => { + const dynamicSelectors = Object.entries(strategy.dynamicSelectors); + return dynamicSelectors.find(([, selectorFn]) => selectorFn(arrayContentType)); + }); + if (strategyDynamicNum >= 0) { + const dynamicSelectors = Object.entries(strategies[strategyDynamicNum].dynamicSelectors); + const matchingSelector = dynamicSelectors.find(([, selectorFn]) => + selectorFn(arrayContentType) + ); + const [selectorName] = matchingSelector as [string, (type: string) => boolean]; + const dynamicConstructor = strategies[strategyDynamicNum].constructors[selectorName]; if (dynamicConstructor) { - return dynamicConstructor(contentItem, strategy, arrayContentType); + return dynamicConstructor(contentItem, strategies, arrayContentType); } } throw new Error(`"${arrayContentType}" is not a valid Cairo type`); @@ -158,46 +167,51 @@ export class CairoArray extends CairoType { * - Dynamic selectors (complex types like nested dynamic arrays) * - Unknown types (stored as raw strings for later error handling) * - * @param responseIterator - Iterator over string data to parse - * @param arrayType - The dynamic array type (e.g., "core::array::Array::") - * @param strategy - The parsing strategy containing constructors and selectors + * @param {Iterator} responseIterator - Iterator over string data to parse + * @param {string} arrayType - The dynamic array type (e.g., "core::array::Array::") + * @param {ParsingStrategy[]} strategy - The parsing strategy containing constructors and selectors * @returns Array of parsed CairoType instances * @private */ private static parser( responseIterator: Iterator, arrayType: string, - strategy: ParsingStrategy + parsingStrategies: ParsingStrategy[] ): CairoType[] { const elementType = getArrayType(arrayType); // Extract T from core::array::Array:: // For API responses, first element is the array length const lengthStr = getNext(responseIterator); const arrayLength = parseInt(lengthStr, 16); - // First check direct constructors - const constructor = strategy.constructors[elementType]; - - if (constructor) { + const strategyConstructorNum = parsingStrategies.findIndex( + (strategy: ParsingStrategy) => strategy.constructors[elementType] + ); + if (strategyConstructorNum >= 0) { + const constructor = parsingStrategies[strategyConstructorNum].constructors[elementType]; return Array.from({ length: arrayLength }, () => - constructor(responseIterator, strategy, elementType) + constructor(responseIterator, parsingStrategies, elementType) ); } - // Check dynamic selectors (includes CairoArray, CairoFixedArray, future: tuples, structs, etc.) - const dynamicSelectors = Object.entries(strategy.dynamicSelectors); - const matchingSelector = dynamicSelectors.find(([, selectorFn]) => selectorFn(elementType)); - - if (matchingSelector) { - const [selectorName] = matchingSelector; - const dynamicConstructor = strategy.constructors[selectorName]; + // Check dynamic selectors (includes CairoFixedArray, future: tuples, structs, etc.) + const strategyDynamicNum = parsingStrategies.findIndex((strategy: ParsingStrategy) => { + const dynamicSelectors = Object.entries(strategy.dynamicSelectors); + return dynamicSelectors.find(([, selectorFn]) => selectorFn(elementType)); + }); + if (strategyDynamicNum >= 0) { + const dynamicSelectors = Object.entries( + parsingStrategies[strategyDynamicNum].dynamicSelectors + ); + const matchingSelector = dynamicSelectors.find(([, selectorFn]) => selectorFn(elementType)); + const [selectorName] = matchingSelector as [string, (type: string) => boolean]; + const dynamicConstructor = parsingStrategies[strategyDynamicNum].constructors[selectorName]; if (dynamicConstructor) { return Array.from({ length: arrayLength }, () => - dynamicConstructor(responseIterator, strategy, elementType) + dynamicConstructor(responseIterator, parsingStrategies, elementType) ); } } - // Unknown type - collect raw values, defer error const rawValues = Array.from({ length: arrayLength }, () => getNext(responseIterator)); return rawValues as unknown as CairoType[]; @@ -342,7 +356,7 @@ export class CairoArray extends CairoType { * response parsers (e.g., CairoUint8 → BigInt). This method is used primarily for * parsing API responses into user-friendly formats. * - * @param strategy - Parsing strategy for response parsing + * @param strategyDecompose - Parsing strategy for response parsing * @returns Array of parsed values (BigInt, numbers, nested arrays, etc.) * @example * ```typescript @@ -350,8 +364,9 @@ export class CairoArray extends CairoType { * const parsed = dynArray.decompose(hdParsingStrategy); // [1n, 2n, 3n] * ``` */ - public decompose(strategy: ParsingStrategy): any[] { + public decompose(strategyDecompose: AllowArray): any[] { // Use response parsers to get final parsed values (for API response parsing) + const strategies = Array.isArray(strategyDecompose) ? strategyDecompose : [strategyDecompose]; const elementType = getArrayType(this.arrayType); return this.content.map((element) => { // For raw string values (unsupported types), throw error @@ -365,9 +380,12 @@ export class CairoArray extends CairoType { parserName = (element as any).dynamicSelector; } } - const responseParser = strategy.response[parserName]; + const strategyDecomposeNum = strategies.findIndex( + (strategy: ParsingStrategy) => strategy.response[parserName] + ); + const responseParser = strategies[strategyDecomposeNum].response[parserName]; if (responseParser) { - return responseParser(element, strategy); + return responseParser(element, strategies); } // No response parser found - throw error instead of fallback magic diff --git a/src/utils/cairoDataTypes/cairoStruct.ts b/src/utils/cairoDataTypes/cairoStruct.ts index eaeb0596e..fbdddf319 100644 --- a/src/utils/cairoDataTypes/cairoStruct.ts +++ b/src/utils/cairoDataTypes/cairoStruct.ts @@ -1,30 +1,60 @@ -import type { AbiStruct } from '../../types'; +import type { AbiStruct, AllowArray } from '../../types'; import assert from '../assert'; import type { ParsingStrategy, VariantType } from '../calldata'; -import { CairoOption } from '../calldata/enum'; import { addCompiledFlag } from '../helpers'; import { getNext } from '../num'; import { CairoType } from './cairoType.interface'; -import { CairoTypeOption } from './cairoTypeOption'; import { CairoFelt252 } from './felt'; +/** + * Represents a Cairo named struct. + */ export class CairoStruct extends CairoType { public readonly dynamicSelector: string; + /** Array of CairoType instances representing the struct elements. */ public readonly content: CairoType[]; + /** Cairo named struct type definition */ public readonly abiStruct: AbiStruct; - constructor(content: unknown, abiStruct: AbiStruct, strategy: ParsingStrategy) { + /** + * Represents a Cairo named struct. + * @param {unknown} content - Input data. (Iterator, object, array) + * @param {AbiStruct} abiStruct - Abi definition of the struct + * @param {AllowArray} parsingStrategy - parsing strategy or array of strategies, + * that includes the handling of the named struct defined in `abiStruct` (created automatically by `createAbiParser().parsingStrategies`) + * @example + * ```typescript + * const abiPoint: AbiStruct = { + * type: 'struct', + * name: 'cairo_test::Point', + * members: [{ name: 'x', type: 'core::integer::u64' }, { name: 'y', type: 'core::integer::u32' }] + * } + * // From user object + * const struct0 = new CairoStruct({x: 1, y: 2}, 'cairo_test::Point', parsingStrategies); + * // From an array + * const struct1 = new CairoStruct([1, 2], 'cairo_test::Point', parsingStrategies); + * // From an iterator + * const iterator = ['0x1', '0x2'][Symbol.iterator](); + * const struct2 = new CairoStruct(iterator, 'cairo_test::Point', parsingStrategies); + * ``` + */ + constructor( + content: unknown, + abiStruct: AbiStruct, + parsingStrategy: AllowArray + ) { super(); this.dynamicSelector = abiStruct.name; this.abiStruct = abiStruct; + const strategies = Array.isArray(parsingStrategy) ? parsingStrategy : [parsingStrategy]; if (content && typeof content === 'object' && 'next' in content) { // "content" is an iterator const parsedContent: CairoType[] = CairoStruct.parser( content as Iterator, abiStruct, - strategy + strategies ); this.content = parsedContent; return; @@ -39,37 +69,39 @@ export class CairoStruct extends CairoType { const structContentType: string[] = CairoStruct.getStructMembersTypes(abiStruct); const resultContent: any[] = CairoStruct.extractValuesArray(content).map( (contentItem: any, index: number) => { + // "content" is a CairoType if ( contentItem && typeof contentItem === 'object' && contentItem !== null && 'toApiRequest' in contentItem ) { - // "content" is a CairoType return contentItem as CairoType; } - if (contentItem instanceof CairoOption) { - // "content" is a CairoOption - return new CairoTypeOption(contentItem, structContentType[index], strategy); - } - - // TODO: add CairoResult // not an iterator, not an CairoType, neither a CairoType -> so is low level data (BigNumberish, array, object) - - const constructor = strategy.constructors[structContentType[index]]; - if (constructor) { - return constructor(contentItem, strategy, structContentType[index]); - } - const dynamicSelectors = Object.entries(strategy.dynamicSelectors); - const matchingSelector = dynamicSelectors.find(([, selectorFn]) => - selectorFn(structContentType[index]) + const strategyConstructorNum = strategies.findIndex( + (strategy: ParsingStrategy) => strategy.constructors[structContentType[index]] ); - if (matchingSelector) { - const [selectorName] = matchingSelector; - const dynamicConstructor = strategy.constructors[selectorName]; + if (strategyConstructorNum >= 0) { + const constructor = + strategies[strategyConstructorNum].constructors[structContentType[index]]; + return constructor(contentItem, strategies, structContentType[index]); + } + + const strategyDynamicNum = strategies.findIndex((strategy: ParsingStrategy) => { + const dynamicSelectors = Object.entries(strategy.dynamicSelectors); + return dynamicSelectors.find(([, selectorFn]) => selectorFn(structContentType[index])); + }); + if (strategyDynamicNum >= 0) { + const dynamicSelectors = Object.entries(strategies[strategyDynamicNum].dynamicSelectors); + const matchingSelector = dynamicSelectors.find(([, selectorFn]) => + selectorFn(structContentType[index]) + ); + const [selectorName] = matchingSelector as [string, (type: string) => boolean]; + const dynamicConstructor = strategies[strategyDynamicNum].constructors[selectorName]; if (dynamicConstructor) { - return dynamicConstructor(contentItem, strategy, structContentType[index]); + return dynamicConstructor(contentItem, strategies, structContentType[index]); } } throw new Error(`"${structContentType[index]}" is not a valid Cairo type`); @@ -78,35 +110,60 @@ export class CairoStruct extends CairoType { this.content = resultContent; } + /** + * Parse data from iterator into CairoType instances using the provided parsing strategy. + * + * This is the core parsing logic that consumes data sequentially from an iterator and + * converts it into proper CairoType instances. It handles: + * - Direct constructors (primitive types like u8, u256, etc.) + * - Dynamic selectors (complex types like nested tuples, arrays) + * - Unknown types (stored as raw strings for later error handling) + * @param {Iterator} responseIterator - Iterator over string data to parse + * @param {AbiStruct} abiStruct - The Abi description of the struct + * @param {ParsingStrategy[]} parsingStrategies - The parsing strategies containing constructors and selectors + * @returns Array of parsed CairoType instances + */ private static parser( responseIterator: Iterator, abiStruct: AbiStruct, - strategy: ParsingStrategy + parsingStrategies: ParsingStrategy[] ): CairoType[] { const elementTypes: string[] = CairoStruct.getStructMembersTypes(abiStruct); return elementTypes.map((elementType: string) => { - const constructor = strategy.constructors[elementType]; - if (constructor) { - return constructor(responseIterator, strategy, elementType); + const strategyConstructorNum = parsingStrategies.findIndex( + (strategy: ParsingStrategy) => strategy.constructors[elementType] + ); + if (strategyConstructorNum >= 0) { + const constructor = parsingStrategies[strategyConstructorNum].constructors[elementType]; + return constructor(responseIterator, parsingStrategies, elementType); } // Check dynamic selectors (includes CairoArray, CairoFixedArray, CairoTuple, etc.) - const dynamicSelectors = Object.entries(strategy.dynamicSelectors); - const matchingSelector = dynamicSelectors.find(([, selectorFn]) => selectorFn(elementType)); - - if (matchingSelector) { - const [selectorName] = matchingSelector; - const dynamicConstructor = strategy.constructors[selectorName]; + const strategyDynamicNum = parsingStrategies.findIndex((strategy: ParsingStrategy) => { + const dynamicSelectors = Object.entries(strategy.dynamicSelectors); + return dynamicSelectors.find(([, selectorFn]) => selectorFn(elementType)); + }); + if (strategyDynamicNum >= 0) { + const dynamicSelectors = Object.entries( + parsingStrategies[strategyDynamicNum].dynamicSelectors + ); + const matchingSelector = dynamicSelectors.find(([, selectorFn]) => selectorFn(elementType)); + const [selectorName] = matchingSelector as [string, (type: string) => boolean]; + const dynamicConstructor = parsingStrategies[strategyDynamicNum].constructors[selectorName]; if (dynamicConstructor) { - return dynamicConstructor(responseIterator, strategy, elementType); + return dynamicConstructor(responseIterator, parsingStrategies, elementType); } } // Unknown type - fallback to felt252 constructor - const feltConstructor = strategy.constructors[CairoFelt252.abiSelector]; - if (feltConstructor) { - return feltConstructor(responseIterator, strategy, elementType); + const feltConstructorNum = parsingStrategies.findIndex( + (strategy: ParsingStrategy) => strategy.constructors[CairoFelt252.abiSelector] + ); + if (feltConstructorNum >= 0) { + const feltConstructor = + parsingStrategies[feltConstructorNum].constructors[CairoFelt252.abiSelector]; + return feltConstructor(responseIterator, parsingStrategies, elementType); } // If even felt252 constructor is not available, collect raw value for error handling @@ -115,6 +172,12 @@ export class CairoStruct extends CairoType { }); } + /** + * Validate input data for CairoStruct creation. + * @param {unknown} input - Input data to validate + * @param {AbiStruct} abiStruct - optional - Abi definition of the struct + * @throws Error if input is invalid + */ static validate(input: unknown, abiStruct?: AbiStruct): void { assert( Array.isArray(input) || (typeof input === 'object' && input !== null), @@ -129,6 +192,13 @@ export class CairoStruct extends CairoType { ); } + /** + * Check if input data is valid for CairoStruct creation. + * @param {any} data - Input data to check + * @param {string} _type - not used + * @param {VariantType} _variant - not used + * @returns true if valid, false otherwise + */ static is(data: any, _type?: string, _variant?: VariantType): boolean { try { CairoStruct.validate(data); @@ -138,11 +208,17 @@ export class CairoStruct extends CairoType { } } + /** Not applicable for CairoStruct */ static isAbiType(_type: string): boolean { // A Cairo struct type (it's name) do not include any special pattern allowing to identify it directly. return true; } + /** + * Extract an array from data representing a Cairo Struct + * @param {unknown} input - Input data (array or object) + * @returns {any[]} Array of values extracted from the input + */ private static extractValuesArray(input: unknown): any[] { if (Array.isArray(input)) { return input; @@ -151,20 +227,50 @@ export class CairoStruct extends CairoType { return Object.values(inputObj); } + /** + * Extract the Cairo type of each property of a named Cairo Struct + * @param {AbiStruct} type - Abi definition of the struct + * @returns {string[]} an array of Cairo types + */ private static getStructMembersTypes(type: AbiStruct): string[] { return type.members.map((member) => member.type); } + /** + *Extract the Cairo names of each property of a named Cairo Struct + * @param {AbiStruct} type - Abi definition of the struct + * @returns {string[]} an array of Cairo struct properties + */ public static extractStructMembersNames(type: AbiStruct): string[] { return type.members.map((member) => member.name); } + /** + * Serialize the CairoStruct into hex strings for Starknet API requests. + * @returns {string[]} Array of hex strings ready for API requests + * ```typescript + * // for a struct {x:1, y:2} + * const result = myStruct.toApiRequest(); + * // result = ['0x1', '0x2'] + * ``` + */ toApiRequest(): string[] { const result = this.content.flatMap((element) => element.toApiRequest()); return addCompiledFlag(result); } - public decompose(strategy: ParsingStrategy): Object { + /** + * Decompose the struct into final parsed values, in an object {x:value0, ...}. + * @param {AllowArray} strategyDecompose + * @returns {Object} an object of format {a:value0, b:value1, ...} + * ```typescript + * // for a struct {x:1, y:2} + * const result = myStruct.decompose(strategies); + * // result = {x:1, y:2} + * ``` + */ + public decompose(strategyDecompose: AllowArray): Object { + const strategies = Array.isArray(strategyDecompose) ? strategyDecompose : [strategyDecompose]; const structContentType = CairoStruct.getStructMembersTypes(this.abiStruct); const result = this.content.map((element: CairoType, index: number) => { // For raw string values (unsupported types), throw error @@ -182,9 +288,12 @@ export class CairoStruct extends CairoType { parserName = (element as any).dynamicSelector; } } - const responseParser = strategy.response[parserName]; + const strategyDecomposeNum = strategies.findIndex( + (strategy: ParsingStrategy) => strategy.response[parserName] + ); + const responseParser = strategies[strategyDecomposeNum].response[parserName]; if (responseParser) { - return responseParser(element, strategy); + return responseParser(element, strategies); } // No response parser found - throw error instead of fallback magic throw new Error( diff --git a/src/utils/cairoDataTypes/cairoTypeOption.ts b/src/utils/cairoDataTypes/cairoTypeOption.ts index 77f6c5224..6901cc31e 100644 --- a/src/utils/cairoDataTypes/cairoTypeOption.ts +++ b/src/utils/cairoDataTypes/cairoTypeOption.ts @@ -1,13 +1,14 @@ import assert from '../assert'; import { addCompiledFlag } from '../helpers'; import { getNext } from '../num'; -import { type ParsingStrategy, type VariantType } from '../calldata/parser/parsingStrategy'; +import { type ParsingStrategy, type VariantType } from '../calldata/parser/parsingStrategy.type'; import { CairoType } from './cairoType.interface'; import { isTypeOption } from '../calldata/cairo'; import { isUndefined } from '../typed'; import { CairoOptionVariant, CairoOption, CairoResult, CairoResultVariant } from '../calldata/enum'; // eslint-disable-next-line import/no-cycle import { CairoTypeResult } from './cairoTypeResult'; +import type { AllowArray } from '../../types'; /** * Represents a Cairo Option. @@ -44,7 +45,7 @@ export class CairoTypeOption extends CairoType { * Iterator, CairoOption, CairoResult, CairoCustomEnum, or CairoType instance). * "content" parameter has to be defined when Some variant is selected * @param {string} optionCairoType - Cairo option type string (e.g., "core::option::Option::"). - * @param {ParsingStrategy} strategy - Parsing strategy for element type handling (e.g. hdParsingStrategy). + * @param {AllowArray} parsingStrategy - Parsing strategy for element type handling (e.g. hdParsingStrategy). * @param {CairoOptionVariant | number} [variant] - (optional) variant of the option: CairoOptionVariant.Some (0), or CairoOptionVariant.None (1). If "content" is an iterator, this parameter must be omitted. * @param {boolean} [subType=false] - optional default=false. Use "true" if called in nested CairoOption instances. * @example @@ -70,12 +71,13 @@ export class CairoTypeOption extends CairoType { constructor( content: unknown, optionCairoType: string, - strategy: ParsingStrategy, + parsingStrategy: AllowArray, variant?: CairoOptionVariant | number, subType: boolean = false ) { super(); this.optionCairoType = optionCairoType; + const strategies = Array.isArray(parsingStrategy) ? parsingStrategy : [parsingStrategy]; if (variant === CairoOptionVariant.Some && isUndefined(content)) { throw new Error('"content" parameter has to be defined when Some variant is selected'); } @@ -94,7 +96,7 @@ export class CairoTypeOption extends CairoType { const parsedContent: CairoType = CairoTypeOption.parser( content as Iterator, optionCairoType, - strategy + strategies ); this.content = parsedContent; break; @@ -128,7 +130,7 @@ export class CairoTypeOption extends CairoType { const option = new CairoTypeOption( content.unwrap(), subType ? CairoTypeOption.getVariantSomeType(optionCairoType) : optionCairoType, - strategy, + strategies, content.isSome() ? CairoOptionVariant.Some : CairoOptionVariant.None, true // recursive sub-type ); @@ -141,7 +143,7 @@ export class CairoTypeOption extends CairoType { const result = new CairoTypeResult( content.unwrap(), CairoTypeOption.getVariantSomeType(optionCairoType), - strategy, + strategies, content.isOk() ? CairoResultVariant.Ok : CairoResultVariant.Err, false ); @@ -158,19 +160,28 @@ export class CairoTypeOption extends CairoType { switch (variant) { case CairoOptionVariant.Some: { const elementType = CairoTypeOption.getVariantSomeType(optionCairoType); - const constructor = strategy.constructors[elementType]; - if (constructor) { - this.content = constructor(content, strategy, elementType); + const strategyConstructorNum = strategies.findIndex( + (strategy: ParsingStrategy) => strategy.constructors[elementType] + ); + if (strategyConstructorNum >= 0) { + const constructor = strategies[strategyConstructorNum].constructors[elementType]; + this.content = constructor(content, strategies, elementType); } else { - const dynamicSelectors = Object.entries(strategy.dynamicSelectors); - const matchingSelector = dynamicSelectors.find(([, selectorFn]) => - selectorFn(elementType) - ); - if (matchingSelector) { - const [selectorName] = matchingSelector; - const dynamicConstructor = strategy.constructors[selectorName]; + const strategyDynamicNum = strategies.findIndex((strategy: ParsingStrategy) => { + const dynamicSelectors = Object.entries(strategy.dynamicSelectors); + return dynamicSelectors.find(([, selectorFn]) => selectorFn(elementType)); + }); + if (strategyDynamicNum >= 0) { + const dynamicSelectors = Object.entries( + strategies[strategyDynamicNum].dynamicSelectors + ); + const matchingSelector = dynamicSelectors.find(([, selectorFn]) => + selectorFn(elementType) + ); + const [selectorName] = matchingSelector as [string, (type: string) => boolean]; + const dynamicConstructor = strategies[strategyDynamicNum].constructors[selectorName]; if (dynamicConstructor) { - this.content = dynamicConstructor(content, strategy, elementType); + this.content = dynamicConstructor(content, strategies, elementType); } } else { throw new Error(`"${elementType}" is not a valid Cairo type`); @@ -201,28 +212,36 @@ export class CairoTypeOption extends CairoType { * * @param {Iterator} responseIterator - Iterator over string data to parse * @param {string} someVariantCairoType - The Cairo option type (e.g., "core::option::Option::") - * @param {ParsingStrategy} strategy - The parsing strategy containing constructors and selectors + * @param {ParsingStrategy[]} parsingStrategies - The parsing strategy containing constructors and selectors * @returns {CairoType} CairoType instance * @private */ private static parser( responseIterator: Iterator, someVariantCairoType: string, - strategy: ParsingStrategy + parsingStrategies: ParsingStrategy[] ): CairoType { const elementType = CairoTypeOption.getVariantSomeType(someVariantCairoType); - const constructor = strategy.constructors[elementType]; - if (constructor) { - return constructor(responseIterator, strategy, elementType); + const strategyConstructorNum = parsingStrategies.findIndex( + (strategy: ParsingStrategy) => strategy.constructors[elementType] + ); + if (strategyConstructorNum >= 0) { + const constructor = parsingStrategies[strategyConstructorNum].constructors[elementType]; + return constructor(responseIterator, parsingStrategies, elementType); } - const dynamicSelectors = Object.entries(strategy.dynamicSelectors); - const matchingSelector = dynamicSelectors.find(([, selectorFn]) => selectorFn(elementType)); - - if (matchingSelector) { - const [selectorName] = matchingSelector; - const dynamicConstructor = strategy.constructors[selectorName]; + const strategyDynamicNum = parsingStrategies.findIndex((strategy: ParsingStrategy) => { + const dynamicSelectors = Object.entries(strategy.dynamicSelectors); + return dynamicSelectors.find(([, selectorFn]) => selectorFn(elementType)); + }); + if (strategyDynamicNum >= 0) { + const dynamicSelectors = Object.entries( + parsingStrategies[strategyDynamicNum].dynamicSelectors + ); + const matchingSelector = dynamicSelectors.find(([, selectorFn]) => selectorFn(elementType)); + const [selectorName] = matchingSelector as [string, (type: string) => boolean]; + const dynamicConstructor = parsingStrategies[strategyDynamicNum].constructors[selectorName]; if (dynamicConstructor) { - return dynamicConstructor(responseIterator, strategy, elementType); + return dynamicConstructor(responseIterator, parsingStrategies, elementType); } } // Unknown type - collect raw values, defer error @@ -249,7 +268,7 @@ export class CairoTypeOption extends CairoType { /** * Validate input data for CairoTypeOption creation. - * @param {unknown} input - Input data to validate + * @param {unknown} _input - Input data to validate * @param {string} type - The Cairo option type string (e.g., "core::option::Option::") * @throws Error if input is invalid * @example @@ -258,7 +277,7 @@ export class CairoTypeOption extends CairoType { * CairoTypeOption.validate(200, "wrong", 3); // throws * ``` */ - static validate(input: unknown, type: string, variant: VariantType | undefined): void { + static validate(_input: unknown, type: string, variant: VariantType | undefined): void { assert( CairoTypeOption.isAbiType(type), `The type ${type} is not a Cairo option. Needs core::option::Option::.` @@ -276,6 +295,7 @@ export class CairoTypeOption extends CairoType { * Check if input data is valid for CairoTypeOption creation. * @param {unknown} input - Input data to check * @param {string} type - The Cairo option type (e.g., "core::option::Option::") + * @param {VariantType} variant - The variant of the option (Some or None) * @returns {boolean} true if valid, false otherwise * @example * ```typescript @@ -330,8 +350,9 @@ export class CairoTypeOption extends CairoType { return addCompiledFlag(result.flat()); } - private decomposeSome(strategy: ParsingStrategy): any { + private decomposeSome(strategyDecompose: AllowArray): any { const { content } = this; + const strategies = Array.isArray(strategyDecompose) ? strategyDecompose : [strategyDecompose]; const elementType = CairoTypeOption.getVariantSomeType(this.optionCairoType); // For raw string values (unsupported types), throw error if (typeof content === 'string') { @@ -344,9 +365,12 @@ export class CairoTypeOption extends CairoType { parserName = (content as any).dynamicSelector; } } - const responseParser = strategy.response[parserName]; + const strategyDecomposeNum = strategies.findIndex( + (strategy: ParsingStrategy) => strategy.response[parserName] + ); + const responseParser = strategies[strategyDecomposeNum].response[parserName]; if (responseParser) { - return responseParser(content as CairoType, strategy); + return responseParser(content as CairoType, strategies[strategyDecomposeNum]); } // No response parser found - throw error instead of fallback magic @@ -362,7 +386,7 @@ export class CairoTypeOption extends CairoType { * response parsers (e.g., CairoUint8 → BigInt). This method is used primarily for * parsing API responses into user-friendly formats. * - * @param {ParsingStrategy} strategy - Parsing strategy for response parsing + * @param {AllowArray} strategyDecompose - Parsing strategy for response parsing * @returns {CairoOption} a CairoOptionInstance, with parsed variant (BigInt, numbers, nested arrays, etc.) * @example * ```typescript @@ -370,9 +394,9 @@ export class CairoTypeOption extends CairoType { * const parsed = myOption.decompose(hdParsingStrategy); // CairoOption{ Some: 3n } * ``` */ - public decompose(strategy: ParsingStrategy): CairoOption { + public decompose(strategyDecompose: AllowArray): CairoOption { if (this.isVariantSome) { - const someContent = this.decomposeSome(strategy); + const someContent = this.decomposeSome(strategyDecompose); return new CairoOption(CairoOptionVariant.Some, someContent); } return new CairoOption(CairoOptionVariant.None); diff --git a/src/utils/cairoDataTypes/cairoTypeResult.ts b/src/utils/cairoDataTypes/cairoTypeResult.ts index a48a9e21c..a93fc070e 100644 --- a/src/utils/cairoDataTypes/cairoTypeResult.ts +++ b/src/utils/cairoDataTypes/cairoTypeResult.ts @@ -1,7 +1,7 @@ import assert from '../assert'; import { addCompiledFlag } from '../helpers'; import { getNext } from '../num'; -import { type ParsingStrategy, type VariantType } from '../calldata/parser/parsingStrategy'; +import { type ParsingStrategy, type VariantType } from '../calldata/parser/parsingStrategy.type'; import { CairoType } from './cairoType.interface'; import { isTypeResult } from '../calldata/cairo'; import { isUndefined } from '../typed'; @@ -10,6 +10,7 @@ import { CairoOptionVariant, CairoOption, CairoResultVariant, CairoResult } from import { CairoTuple } from './tuple'; // eslint-disable-next-line import/no-cycle import { CairoTypeOption } from './cairoTypeOption'; +import type { AllowArray } from '../../types'; /** * Represents a Cairo Result enum. @@ -45,7 +46,7 @@ export class CairoTypeResult extends CairoType { * @param {unknown} content - Input data (array, object, BigNumberish, * Iterator, CairoOption, CairoResult, CairoCustomEnum, or CairoType instance). * @param {string} resultCairoType - Cairo result type string (e.g., "core::result::Result::"). - * @param {ParsingStrategy} strategy - Parsing strategy for element type handling (e.g. hdParsingStrategy). + * @param {AllowArray} parsingStrategy - Parsing strategy for element type handling (e.g. hdParsingStrategy). * @param {CairoResultVariant | number} [variant] - (optional) variant of the result: CairoResultVariant.Ok (0), or CairoResultVariant.Err (1). If "content" is an iterator, this parameter must be omitted. * @param {boolean} [subType=false] - optional default=false. Use "true" if called in nested CairoResult instances. * @example @@ -71,12 +72,13 @@ export class CairoTypeResult extends CairoType { constructor( content: unknown, resultCairoType: string, - strategy: ParsingStrategy, + parsingStrategy: AllowArray, variant?: CairoResultVariant | number, subType: boolean = false ) { super(); this.resultCairoType = resultCairoType; + const strategies = Array.isArray(parsingStrategy) ? parsingStrategy : [parsingStrategy]; assert(!isUndefined(content), '"content" parameter has to be defined.'); assert(content !== null, '"content" parameter has to be defined.'); if (typeof content === 'object' && 'next' in content) { @@ -91,7 +93,7 @@ export class CairoTypeResult extends CairoType { const parsedContent: CairoType = CairoTypeResult.parser( content as Iterator, activeVariantType, - strategy + strategies ); this.content = parsedContent; this.isVariantOk = variantFromIterator === CairoResultVariant.Ok; @@ -127,7 +129,7 @@ export class CairoTypeResult extends CairoType { const option = new CairoTypeOption( content.unwrap(), CairoTypeResult.getVariantTypes(resultCairoType)[variant], - strategy, + strategies, content.isSome() ? CairoOptionVariant.Some : CairoOptionVariant.None ); this.content = option; @@ -148,7 +150,7 @@ export class CairoTypeResult extends CairoType { const result = new CairoTypeResult( content.unwrap(), typeForResult, - strategy, + strategies, variantForResult, true // recursive sub-type ); @@ -163,17 +165,24 @@ export class CairoTypeResult extends CairoType { '"variant" parameter is mandatory when creating a new Cairo Result from a Cairo Enum or raw data.' ); const elementType = CairoTypeResult.getVariantTypes(resultCairoType)[variant]; - const constructor = strategy.constructors[elementType]; - if (constructor) { - this.content = constructor(content, strategy, elementType); + const strategyConstructorNum = strategies.findIndex( + (strategy: ParsingStrategy) => strategy.constructors[elementType] + ); + if (strategyConstructorNum >= 0) { + const constructor = strategies[strategyConstructorNum].constructors[elementType]; + this.content = constructor(content, strategies, elementType); } else { - const dynamicSelectors = Object.entries(strategy.dynamicSelectors); - const matchingSelector = dynamicSelectors.find(([, selectorFn]) => selectorFn(elementType)); - if (matchingSelector) { - const [selectorName] = matchingSelector; - const dynamicConstructor = strategy.constructors[selectorName]; + const strategyDynamicNum = strategies.findIndex((strategy: ParsingStrategy) => { + const dynamicSelectors = Object.entries(strategy.dynamicSelectors); + return dynamicSelectors.find(([, selectorFn]) => selectorFn(elementType)); + }); + if (strategyDynamicNum >= 0) { + const dynamicSelectors = Object.entries(strategies[strategyDynamicNum].dynamicSelectors); + const matchingSelector = dynamicSelectors.find(([, selectorFn]) => selectorFn(elementType)); + const [selectorName] = matchingSelector as [string, (type: string) => boolean]; + const dynamicConstructor = strategies[strategyDynamicNum].constructors[selectorName]; if (dynamicConstructor) { - this.content = dynamicConstructor(content, strategy, elementType); + this.content = dynamicConstructor(content, strategies, elementType); } } else { throw new Error(`"${elementType}" is not a valid Cairo type`); @@ -193,27 +202,35 @@ export class CairoTypeResult extends CairoType { * * @param {Iterator} responseIterator - Iterator over string data to parse * @param {string} elementType - The Cairo result type (e.g., "core::result::Result::") - * @param {ParsingStrategy} strategy - The parsing strategy containing constructors and selectors + * @param {ParsingStrategy[]} parsingStrategies - The parsing strategy containing constructors and selectors * @returns {CairoType} CairoType instance * @private */ private static parser( responseIterator: Iterator, elementType: string, - strategy: ParsingStrategy + parsingStrategies: ParsingStrategy[] ): CairoType { - const constructor = strategy.constructors[elementType]; - if (constructor) { - return constructor(responseIterator, strategy, elementType); + const strategyConstructorNum = parsingStrategies.findIndex( + (strategy: ParsingStrategy) => strategy.constructors[elementType] + ); + if (strategyConstructorNum >= 0) { + const constructor = parsingStrategies[strategyConstructorNum].constructors[elementType]; + return constructor(responseIterator, parsingStrategies, elementType); } - const dynamicSelectors = Object.entries(strategy.dynamicSelectors); - const matchingSelector = dynamicSelectors.find(([, selectorFn]) => selectorFn(elementType)); - - if (matchingSelector) { - const [selectorName] = matchingSelector; - const dynamicConstructor = strategy.constructors[selectorName]; + const strategyDynamicNum = parsingStrategies.findIndex((strategy: ParsingStrategy) => { + const dynamicSelectors = Object.entries(strategy.dynamicSelectors); + return dynamicSelectors.find(([, selectorFn]) => selectorFn(elementType)); + }); + if (strategyDynamicNum >= 0) { + const dynamicSelectors = Object.entries( + parsingStrategies[strategyDynamicNum].dynamicSelectors + ); + const matchingSelector = dynamicSelectors.find(([, selectorFn]) => selectorFn(elementType)); + const [selectorName] = matchingSelector as [string, (type: string) => boolean]; + const dynamicConstructor = parsingStrategies[strategyDynamicNum].constructors[selectorName]; if (dynamicConstructor) { - return dynamicConstructor(responseIterator, strategy, elementType); + return dynamicConstructor(responseIterator, parsingStrategies, elementType); } } // Unknown type - collect raw values, defer error @@ -245,7 +262,7 @@ export class CairoTypeResult extends CairoType { /** * Validate input data for CairoTypeResult creation. - * @param {unknown} input - Input data to validate + * @param {unknown} _input - Input data to validate * @param {string} type - The Cairo Result type string (e.g., "core::result::Result::") * @throws Error if input is invalid * @example @@ -254,7 +271,7 @@ export class CairoTypeResult extends CairoType { * CairoTypeResult.validate(200, "wrong", 3); // throws * ``` */ - static validate(input: unknown, type: string, variant: VariantType | undefined): void { + static validate(_input: unknown, type: string, variant: VariantType | undefined): void { assert( CairoTypeResult.isAbiType(type), `The type ${type} is not a Cairo Result. Needs core::result::Result::.` @@ -332,7 +349,7 @@ export class CairoTypeResult extends CairoType { * response parsers (e.g., CairoUint8 → BigInt). This method is used primarily for * parsing API responses into user-friendly formats. * - * @param {ParsingStrategy} strategy - Parsing strategy for response parsing + * @param {AllowArray} strategyDecompose - Parsing strategy for response parsing * @returns {CairoResult} a CairoResultInstance, with parsed variant (BigInt, numbers, nested arrays, etc.) * @example * ```typescript @@ -340,8 +357,9 @@ export class CairoTypeResult extends CairoType { * const parsed = myResult.decompose(hdParsingStrategy); // CairoResult{ Some: 3n } * ``` */ - public decompose(strategy: ParsingStrategy): CairoResult { + public decompose(strategyDecompose: AllowArray): CairoResult { const { content } = this; + const strategies = Array.isArray(strategyDecompose) ? strategyDecompose : [strategyDecompose]; // For raw string values (unsupported types), throw error const elementType = CairoTypeResult.getVariantTypes(this.resultCairoType)[ this.isVariantOk ? CairoResultVariant.Ok : CairoResultVariant.Err @@ -356,11 +374,14 @@ export class CairoTypeResult extends CairoType { parserName = (content as any).dynamicSelector; } } - const responseParser = strategy.response[parserName]; + const strategyDecomposeNum = strategies.findIndex( + (strategy: ParsingStrategy) => strategy.response[parserName] + ); + const responseParser = strategies[strategyDecomposeNum].response[parserName]; if (responseParser) { return new CairoResult( this.isVariantOk ? CairoResultVariant.Ok : CairoResultVariant.Err, - responseParser(content as CairoType, strategy) + responseParser(content as CairoType, strategies) ); } // No response parser found - throw error instead of fallback magic diff --git a/src/utils/cairoDataTypes/fixedArray.ts b/src/utils/cairoDataTypes/fixedArray.ts index 35a60ba8b..26a0a5b19 100644 --- a/src/utils/cairoDataTypes/fixedArray.ts +++ b/src/utils/cairoDataTypes/fixedArray.ts @@ -1,11 +1,12 @@ import assert from '../assert'; import { addCompiledFlag } from '../helpers'; import { getNext } from '../num'; -import { type ParsingStrategy } from '../calldata/parser/parsingStrategy'; +import { type ParsingStrategy } from '../calldata/parser/parsingStrategy.type'; import { CairoType } from './cairoType.interface'; import { CairoOption, CairoResult } from '../calldata/enum'; import { CairoTypeOption } from './cairoTypeOption'; import { CairoTypeResult } from './cairoTypeResult'; +import type { AllowArray } from '../../types'; /** * Represents a Cairo fixed-size array with compile-time known length. @@ -68,7 +69,7 @@ export class CairoFixedArray extends CairoType { * * @param content - Input data (array, object, Iterator, or CairoType instances) * @param arrayType - Fixed array type string (e.g., "[core::integer::u8; 3]") - * @param strategy - Parsing strategy for element type handling + * @param parsingStrategy - Parsing strategy for element type handling * @example * ```typescript * // From user array @@ -85,29 +86,16 @@ export class CairoFixedArray extends CairoType { * const nested = new CairoFixedArray([[1, 2], [3, 4]], '[[core::integer::u8; 2]; 2]', hdParsingStrategy); * ``` */ - constructor(content: unknown, arrayType: string, strategy: ParsingStrategy) { + constructor(content: unknown, arrayType: string, parsingStrategy: AllowArray) { super(); - - // // If content is already a CairoFixedArray instance, just copy its properties - // if (content instanceof CairoFixedArray) { - // this.content = content.content; - // this.arrayType = content.arrayType; - // return; - // } - - // // Always use parser for unified processing - // const iterator = CairoFixedArray.prepareIterator(content, arrayType); - // const parsedContent = CairoFixedArray.parser(iterator, arrayType, strategy); - - // this.content = parsedContent; - this.arrayType = arrayType; + const strategies = Array.isArray(parsingStrategy) ? parsingStrategy : [parsingStrategy]; if (content && typeof content === 'object' && 'next' in content) { // "content" is an iterator const parsedContent: CairoType[] = CairoFixedArray.parser( content as Iterator, arrayType, - strategy + strategies ); this.content = parsedContent; return; @@ -132,26 +120,33 @@ export class CairoFixedArray extends CairoType { } if (contentItem instanceof CairoOption) { // "content" is a CairoOption - return new CairoTypeOption(contentItem, arrayContentType, strategy); + return new CairoTypeOption(contentItem, arrayContentType, strategies); } if (contentItem instanceof CairoResult) { // "content" is a CairoResult - return new CairoTypeResult(contentItem, arrayContentType, strategy); + return new CairoTypeResult(contentItem, arrayContentType, strategies); } // not an iterator, not an CairoType, neither a CairoType -> so is low level data (BigNumberish, array, object) - const constructor = strategy.constructors[arrayContentType]; - if (constructor) { - return constructor(contentItem, strategy, arrayContentType); - } - const dynamicSelectors = Object.entries(strategy.dynamicSelectors); - const matchingSelector = dynamicSelectors.find(([, selectorFn]) => - selectorFn(arrayContentType) + const strategyConstructorNum = strategies.findIndex( + (strategy: ParsingStrategy) => strategy.constructors[arrayContentType] ); - if (matchingSelector) { - const [selectorName] = matchingSelector; - const dynamicConstructor = strategy.constructors[selectorName]; + if (strategyConstructorNum >= 0) { + const constructor = strategies[strategyConstructorNum].constructors[arrayContentType]; + return constructor(contentItem, strategies, arrayContentType); + } + const strategyDynamicNum = strategies.findIndex((strategy: ParsingStrategy) => { + const dynamicSelectors = Object.entries(strategy.dynamicSelectors); + return dynamicSelectors.find(([, selectorFn]) => selectorFn(arrayContentType)); + }); + if (strategyDynamicNum >= 0) { + const dynamicSelectors = Object.entries(strategies[strategyDynamicNum].dynamicSelectors); + const matchingSelector = dynamicSelectors.find(([, selectorFn]) => + selectorFn(arrayContentType) + ); + const [selectorName] = matchingSelector as [string, (type: string) => boolean]; + const dynamicConstructor = strategies[strategyDynamicNum].constructors[selectorName]; if (dynamicConstructor) { - return dynamicConstructor(contentItem, strategy, arrayContentType); + return dynamicConstructor(contentItem, strategies, arrayContentType); } } throw new Error(`"${arrayContentType}" is not a valid Cairo type`); @@ -175,37 +170,44 @@ export class CairoFixedArray extends CairoType { * * @param responseIterator - Iterator over string data to parse * @param arrayType - The fixed array type (e.g., "[core::integer::u32; 4]") - * @param strategy - The parsing strategy containing constructors and selectors + * @param parsingStrategies - The parsing strategy containing constructors and selectors * @returns Array of parsed CairoType instances * @private */ private static parser( responseIterator: Iterator, arrayType: string, - strategy: ParsingStrategy + parsingStrategies: ParsingStrategy[] ): CairoType[] { const elementType = CairoFixedArray.getFixedArrayType(arrayType); const outerSize = CairoFixedArray.getFixedArraySize(arrayType); // First check direct constructors - const constructor = strategy.constructors[elementType]; - - if (constructor) { + const strategyConstructorNum = parsingStrategies.findIndex( + (strategy: ParsingStrategy) => strategy.constructors[elementType] + ); + if (strategyConstructorNum >= 0) { + const constructor = parsingStrategies[strategyConstructorNum].constructors[elementType]; return Array.from({ length: outerSize }, () => - constructor(responseIterator, strategy, elementType) + constructor(responseIterator, parsingStrategies, elementType) ); } // Check dynamic selectors (includes CairoFixedArray, future: tuples, structs, etc.) - const dynamicSelectors = Object.entries(strategy.dynamicSelectors); - const matchingSelector = dynamicSelectors.find(([, selectorFn]) => selectorFn(elementType)); - - if (matchingSelector) { - const [selectorName] = matchingSelector; - const dynamicConstructor = strategy.constructors[selectorName]; + const strategyDynamicNum = parsingStrategies.findIndex((strategy: ParsingStrategy) => { + const dynamicSelectors = Object.entries(strategy.dynamicSelectors); + return dynamicSelectors.find(([, selectorFn]) => selectorFn(elementType)); + }); + if (strategyDynamicNum >= 0) { + const dynamicSelectors = Object.entries( + parsingStrategies[strategyDynamicNum].dynamicSelectors + ); + const matchingSelector = dynamicSelectors.find(([, selectorFn]) => selectorFn(elementType)); + const [selectorName] = matchingSelector as [string, (type: string) => boolean]; + const dynamicConstructor = parsingStrategies[strategyDynamicNum].constructors[selectorName]; if (dynamicConstructor) { return Array.from({ length: outerSize }, () => - dynamicConstructor(responseIterator, strategy, elementType) + dynamicConstructor(responseIterator, parsingStrategies, elementType) ); } } @@ -378,7 +380,7 @@ export class CairoFixedArray extends CairoType { * response parsers (e.g., CairoUint8 → BigInt). This method is used primarily for * parsing API responses into user-friendly formats. * - * @param strategy - Parsing strategy for response parsing + * @param strategyDecompose - Parsing strategy for response parsing * @returns Array of parsed values (BigInt, numbers, nested arrays, etc.) * @example * ```typescript @@ -386,8 +388,29 @@ export class CairoFixedArray extends CairoType { * const parsed = fixedArray.decompose(hdParsingStrategy); // [1n, 2n, 3n] * ``` */ - public decompose(strategy: ParsingStrategy): any[] { + + /** + * Create an object from a Cairo fixed array. + * Be sure to have an array length conform to the ABI. + * To be used with CallData.compile(). + * @param {Array} input JS array representing a Cairo fixed array. + * @returns {Object} a specific struct representing a fixed Array. + * @example + * ```typescript + * const result = CairoFixedArray.compile([10,20,30]); + * // result = { '0': 10, '1': 20, '2': 30 } + * ``` + */ + static compile(input: Array): Object { + return input.reduce((acc: any, item: any, idx: number) => { + acc[idx] = item; + return acc; + }, {}); + } + + public decompose(strategyDecompose: AllowArray): any[] { // Use response parsers to get final parsed values (for API response parsing) + const strategies = Array.isArray(strategyDecompose) ? strategyDecompose : [strategyDecompose]; const elementType = CairoFixedArray.getFixedArrayType(this.arrayType); return this.content.map((element) => { // For raw string values (unsupported types), throw error @@ -401,9 +424,12 @@ export class CairoFixedArray extends CairoType { parserName = (element as any).dynamicSelector; } } - const responseParser = strategy.response[parserName]; + const strategyDecomposeNum = strategies.findIndex( + (strategy: ParsingStrategy) => strategy.response[parserName] + ); + const responseParser = strategies[strategyDecomposeNum].response[parserName]; if (responseParser) { - return responseParser(element, strategy); + return responseParser(element, strategies); } // No response parser found - throw error instead of fallback magic diff --git a/src/utils/cairoDataTypes/tuple.ts b/src/utils/cairoDataTypes/tuple.ts index 5b111aa49..3cb6ed681 100644 --- a/src/utils/cairoDataTypes/tuple.ts +++ b/src/utils/cairoDataTypes/tuple.ts @@ -2,13 +2,14 @@ import assert from '../assert'; import { addCompiledFlag } from '../helpers'; import { getNext } from '../num'; import { isTypeTuple, isCairo1Type, isTypeNamedTuple } from '../calldata/cairo'; -import { type ParsingStrategy } from '../calldata/parser/parsingStrategy'; +import { type ParsingStrategy } from '../calldata/parser/parsingStrategy.type'; import { CairoType } from './cairoType.interface'; import { CairoFelt252 } from './felt'; import { CairoOption, CairoResult } from '../calldata/enum'; // eslint-disable-next-line import/no-cycle import { CairoTypeOption } from './cairoTypeOption'; import { CairoTypeResult } from './cairoTypeResult'; +import type { AllowArray } from '../../types'; /** * Represents a Cairo tuple with compile-time known structure. @@ -88,15 +89,16 @@ export class CairoTuple extends CairoType { * const nested = new CairoTuple([[1, 2], 3], '((core::integer::u8, core::integer::u8), core::integer::u32)', hdParsingStrategy); * ``` */ - constructor(content: unknown, tupleType: string, strategy: ParsingStrategy) { + constructor(content: unknown, tupleType: string, parsingStrategy: AllowArray) { super(); this.tupleType = tupleType; + const strategies = Array.isArray(parsingStrategy) ? parsingStrategy : [parsingStrategy]; if (content && typeof content === 'object' && 'next' in content) { // "content" is an iterator const parsedContent: CairoType[] = CairoTuple.parser( content as Iterator, tupleType, - strategy + strategies ); this.content = parsedContent; return; @@ -124,27 +126,38 @@ export class CairoTuple extends CairoType { } if (contentItem instanceof CairoOption) { // "content" is a CairoOption - return new CairoTypeOption(contentItem, tupleContentType[index], strategy); + return new CairoTypeOption(contentItem, tupleContentType[index], strategies); } if (contentItem instanceof CairoResult) { // "content" is a CairoResult - return new CairoTypeResult(contentItem, tupleContentType[index], strategy); + return new CairoTypeResult(contentItem, tupleContentType[index], strategies); } // not an iterator, not an CairoType, neither a CairoType -> so is low level data (BigNumberish, array, object) - - const constructor = strategy.constructors[tupleContentType[index]]; - if (constructor) { - return constructor(contentItem, strategy, tupleContentType[index]); - } - const dynamicSelectors = Object.entries(strategy.dynamicSelectors); - const matchingSelector = dynamicSelectors.find(([, selectorFn]) => - selectorFn(tupleContentType[index]) + const strategyConstructorNum = strategies.findIndex( + (strategy: ParsingStrategy) => strategy.constructors[tupleContentType[index]] ); - if (matchingSelector) { - const [selectorName] = matchingSelector; - const dynamicConstructor = strategy.constructors[selectorName]; + if (strategyConstructorNum >= 0) { + const constructor = + strategies[strategyConstructorNum].constructors[tupleContentType[index]]; + return constructor(contentItem, strategies, tupleContentType[index]); + } + const strategyDynamicNum = strategies.findIndex((strategy: ParsingStrategy) => { + const dynamicSelectors = Object.entries(strategy.dynamicSelectors); + return dynamicSelectors.find(([, selectorFn]) => selectorFn(tupleType)); + }); + if (strategyDynamicNum >= 0) { + const dynamicSelectors = Object.entries(strategies[strategyDynamicNum].dynamicSelectors); + const matchingSelector = dynamicSelectors.find(([, selectorFn]) => + selectorFn(tupleContentType[index]) + ); + const [selectorName] = matchingSelector as [string, (type: string) => boolean]; + const dynamicConstructor = strategies[strategyDynamicNum].constructors[selectorName]; if (dynamicConstructor) { - return dynamicConstructor(contentItem, strategy, tupleContentType[index]); + return dynamicConstructor( + contentItem, + strategies[strategyDynamicNum], + tupleContentType[index] + ); } } throw new Error(`"${tupleContentType[index]}" is not a valid Cairo type`); @@ -170,14 +183,14 @@ export class CairoTuple extends CairoType { * * @param responseIterator - Iterator over string data to parse * @param tupleType - The tuple type (e.g., "(core::integer::u8, core::integer::u32)") - * @param strategy - The parsing strategy containing constructors and selectors + * @param parsingStrategies - The parsing strategies containing constructors and selectors * @returns Array of parsed CairoType instances * @private */ private static parser( responseIterator: Iterator, tupleType: string, - strategy: ParsingStrategy + parsingStrategies: ParsingStrategy[] ): CairoType[] { const elementTypes = CairoTuple.getTupleElementTypes(tupleType); @@ -186,25 +199,37 @@ export class CairoTuple extends CairoType { typeof elementTypeInfo === 'string' ? elementTypeInfo : (elementTypeInfo as any).type; // First check direct constructors - const constructor = strategy.constructors[elementType]; - if (constructor) { + const strategyConstructorNum = parsingStrategies.findIndex( + (strategy: ParsingStrategy) => strategy.constructors[elementType] + ); + if (strategyConstructorNum >= 0) { + const constructor = parsingStrategies[strategyConstructorNum].constructors[elementType]; return constructor(responseIterator, elementType); } // Check dynamic selectors (includes CairoArray, CairoFixedArray, CairoTuple, etc.) - const dynamicSelectors = Object.entries(strategy.dynamicSelectors); - const matchingSelector = dynamicSelectors.find(([, selectorFn]) => selectorFn(elementType)); - - if (matchingSelector) { - const [selectorName] = matchingSelector; - const dynamicConstructor = strategy.constructors[selectorName]; + const strategyDynamicNum = parsingStrategies.findIndex((strategy: ParsingStrategy) => { + const dynamicSelectors = Object.entries(strategy.dynamicSelectors); + return dynamicSelectors.find(([, selectorFn]) => selectorFn(elementType)); + }); + if (strategyDynamicNum >= 0) { + const dynamicSelectors = Object.entries( + parsingStrategies[strategyDynamicNum].dynamicSelectors + ); + const matchingSelector = dynamicSelectors.find(([, selectorFn]) => selectorFn(elementType)); + const [selectorName] = matchingSelector as [string, (type: string) => boolean]; + const dynamicConstructor = parsingStrategies[strategyDynamicNum].constructors[selectorName]; if (dynamicConstructor) { - return dynamicConstructor(responseIterator, strategy, elementType); + return dynamicConstructor(responseIterator, parsingStrategies, elementType); } } // Unknown type - fallback to felt252 constructor - const feltConstructor = strategy.constructors[CairoFelt252.abiSelector]; + const felt252ConstructorNum = parsingStrategies.findIndex( + (strategy: ParsingStrategy) => strategy.constructors[CairoFelt252.abiSelector] + ); + const feltConstructor = + parsingStrategies[felt252ConstructorNum].constructors[CairoFelt252.abiSelector]; if (feltConstructor) { return feltConstructor(responseIterator, elementType); } @@ -595,7 +620,7 @@ export class CairoTuple extends CairoType { * response parsers (e.g., CairoUint8 → BigInt). This method is used primarily for * parsing API responses into user-friendly formats. * - * @param {ParsingStrategy} strategy - Parsing strategy for response parsing + * @param {AllowArray} strategyDecompose - Parsing strategies for response parsing * @returns {Object} an object of format {0:value0, 1:value2} * @example * ```typescript @@ -605,7 +630,8 @@ export class CairoTuple extends CairoType { * const parsed1 = myTuple.decompose(hdParsingStrategy); // { x: 100n, y: 200n } * ``` */ - public decompose(strategy: ParsingStrategy): Object { + public decompose(strategyDecompose: AllowArray): Object { + const strategies = Array.isArray(strategyDecompose) ? strategyDecompose : [strategyDecompose]; const tupleContentTypeResponse = CairoTuple.getTupleElementTypes(this.tupleType); const elementTypes: string[] = tupleContentTypeResponse.map( (el: string | { name: string; type: string }) => (typeof el === 'string' ? el : el.type) @@ -626,9 +652,12 @@ export class CairoTuple extends CairoType { parserName = (element as any).dynamicSelector; } } - const responseParser = strategy.response[parserName]; + const strategyDecomposeNum = strategies.findIndex( + (strategy: ParsingStrategy) => strategy.response[parserName] + ); + const responseParser = strategies[strategyDecomposeNum].response[parserName]; if (responseParser) { - return responseParser(element, strategy); + return responseParser(element, strategies); } // No response parser found - throw error instead of fallback magic throw new Error( diff --git a/src/utils/calldata/getAbiStruct.ts b/src/utils/calldata/getAbiStruct.ts new file mode 100644 index 000000000..7d4b2862f --- /dev/null +++ b/src/utils/calldata/getAbiStruct.ts @@ -0,0 +1,18 @@ +import { Abi, AbiStructs } from '../../types'; + +/** + * Helper to extract structs from abi + * @param abi Abi + * @returns AbiStructs - structs from abi + */ +export function getAbiStruct(abi: Abi): AbiStructs { + return abi + .filter((abiEntry) => abiEntry.type === 'struct') + .reduce( + (acc, abiEntry) => ({ + ...acc, + [abiEntry.name]: abiEntry, + }), + {} + ); +} diff --git a/src/utils/calldata/index.ts b/src/utils/calldata/index.ts index 70e049ea3..02bc70a5c 100644 --- a/src/utils/calldata/index.ts +++ b/src/utils/calldata/index.ts @@ -32,12 +32,8 @@ import { CairoFixedArray } from '../cairoDataTypes/fixedArray'; import { CairoArray } from '../cairoDataTypes/array'; import { CairoTuple } from '../cairoDataTypes/tuple'; import formatter from './formatter'; -import { - createAbiParser, - hdParsingStrategy, - isNoConstructorValid, - ParsingStrategy, -} from './parser'; +import { createAbiParser, isNoConstructorValid, ParsingStrategy } from './parser'; +import { hdParsingStrategy } from './parser/parsingStrategy'; import { AbiParserInterface } from './parser/interface'; import orderPropsByAbi from './propertyOrder'; import { parseCalldataField } from './requestParser'; @@ -45,6 +41,8 @@ import responseParser from './responseParser'; import validateFields from './validate'; import { CairoTypeOption } from '../cairoDataTypes/cairoTypeOption'; import { CairoTypeResult } from '../cairoDataTypes/cairoTypeResult'; +import { getAbiStruct } from './getAbiStruct'; +import { CairoStruct } from '../cairoDataTypes/cairoStruct'; export * as cairo from './cairo'; export { parseCalldataField } from './requestParser'; @@ -59,7 +57,7 @@ export class CallData { protected readonly enums: AbiEnums; - constructor(abi: Abi, parsingStrategy?: ParsingStrategy) { + constructor(abi: Abi, parsingStrategy: ParsingStrategy = hdParsingStrategy) { this.structs = CallData.getAbiStruct(abi); this.enums = CallData.getAbiEnum(abi); this.parser = createAbiParser(abi, parsingStrategy); @@ -269,6 +267,13 @@ export class CallData { ); return getEntries(compiledObj, `${prefix}${kk}.`); } + if (value instanceof CairoStruct) { + const apiRequest = value.toApiRequest(); + const compiledObj = Object.fromEntries( + apiRequest.map((item, idx) => [idx.toString(), item]) + ); + return getEntries(compiledObj, `${prefix}${kk}.`); + } // normal object return getEntries(value, `${prefix}${kk}.`); } @@ -350,15 +355,7 @@ export class CallData { * @returns AbiStructs - structs from abi */ static getAbiStruct(abi: Abi): AbiStructs { - return abi - .filter((abiEntry) => abiEntry.type === 'struct') - .reduce( - (acc, abiEntry) => ({ - ...acc, - [abiEntry.name]: abiEntry, - }), - {} - ); + return getAbiStruct(abi); } /** diff --git a/src/utils/calldata/parser/index.ts b/src/utils/calldata/parser/index.ts index 7c23d7fee..68415656a 100644 --- a/src/utils/calldata/parser/index.ts +++ b/src/utils/calldata/parser/index.ts @@ -3,17 +3,20 @@ import { isCairo1Abi } from '../cairo'; import { AbiParserInterface } from './interface'; import { AbiParser1 } from './parser-0-1.1.0'; import { AbiParser2 } from './parser-2.0.0'; -import { ParsingStrategy } from './parsingStrategy'; +import { hdParsingStrategy } from './parsingStrategy'; +import { ParsingStrategy } from './parsingStrategy.type'; export { AbiParser2 }; export { AbiParser1 }; export { AbiParserInterface }; export * from './parsingStrategy'; +export * from './parsingStrategy.type'; /** * Creates ABI parser * * @param {Abi} abi + * @param {ParsingStrategy} parsingStrategy - optional - parsing strategy * @returns {AbiParserInterface} abi parser interface * * @example @@ -23,7 +26,10 @@ export * from './parsingStrategy'; * const abiParser1 = createAbiParser([getFunctionAbi('struct')]); * // abiParser1 instanceof AbiParser1 === true */ -export function createAbiParser(abi: Abi, parsingStrategy?: ParsingStrategy): AbiParserInterface { +export function createAbiParser( + abi: Abi, + parsingStrategy: ParsingStrategy = hdParsingStrategy +): AbiParserInterface { const version = getAbiVersion(abi); if (version === 0 || version === 1) { return new AbiParser1(abi, parsingStrategy); @@ -64,7 +70,7 @@ export function getAbiVersion(abi: Abi): 1 | 2 | 0 { * * @param {string} method * @param {RawArgs} argsCalldata - * @param {FunctionAbi} abiMethod + * @param {FunctionAbi} abiMethod - optional * @returns boolean * * @example diff --git a/src/utils/calldata/parser/interface.ts b/src/utils/calldata/parser/interface.ts index 76b758c7d..429ebadd4 100644 --- a/src/utils/calldata/parser/interface.ts +++ b/src/utils/calldata/parser/interface.ts @@ -1,11 +1,11 @@ -import { Abi, AbiEntryType, FunctionAbi } from '../../../types'; -import { ParsingStrategy } from './parsingStrategy'; +import { Abi, AbiEntryType, FunctionAbi, type AllowArray } from '../../../types'; +import { ParsingStrategy } from './parsingStrategy.type'; /** * Abi parser interface */ export abstract class AbiParserInterface { - abstract parsingStrategy: ParsingStrategy; + abstract parsingStrategies: AllowArray; /** * Helper to calculate inputs length from abi diff --git a/src/utils/calldata/parser/parser-0-1.1.0.ts b/src/utils/calldata/parser/parser-0-1.1.0.ts index 323dca53a..f52a001a1 100644 --- a/src/utils/calldata/parser/parser-0-1.1.0.ts +++ b/src/utils/calldata/parser/parser-0-1.1.0.ts @@ -1,25 +1,25 @@ import { Abi, AbiEntryType, FunctionAbi } from '../../../types'; import { isLen } from '../cairo'; import { AbiParserInterface } from './interface'; -import { hdParsingStrategy, ParsingStrategy } from './parsingStrategy'; +import { ParsingStrategy } from './parsingStrategy.type'; export class AbiParser1 implements AbiParserInterface { abi: Abi; - parsingStrategy: ParsingStrategy; + parsingStrategies: ParsingStrategy; - constructor(abi: Abi, parsingStrategy?: ParsingStrategy) { + constructor(abi: Abi, parsingStrategy: ParsingStrategy) { this.abi = abi; - this.parsingStrategy = parsingStrategy || hdParsingStrategy; + this.parsingStrategies = parsingStrategy; } public getRequestParser(abiType: AbiEntryType): (val: unknown, type?: string) => any { // Check direct constructors first - if (this.parsingStrategy.constructors[abiType]) { + if (this.parsingStrategies.constructors[abiType]) { return (val: unknown, type?: string) => { - const instance = this.parsingStrategy.constructors[abiType]( + const instance = this.parsingStrategies.constructors[abiType]( val, - this.parsingStrategy, + this.parsingStrategies, type ); return instance.toApiRequest(); @@ -27,15 +27,15 @@ export class AbiParser1 implements AbiParserInterface { } // Check dynamic selectors - const dynamicSelectors = Object.entries(this.parsingStrategy.dynamicSelectors); + const dynamicSelectors = Object.entries(this.parsingStrategies.dynamicSelectors); const matchingSelector = dynamicSelectors.find(([, selectorFn]) => selectorFn(abiType)); if (matchingSelector) { const [selectorName] = matchingSelector; - const dynamicConstructor = this.parsingStrategy.constructors[selectorName]; + const dynamicConstructor = this.parsingStrategies.constructors[selectorName]; if (dynamicConstructor) { return (val: unknown, type?: string) => { - const instance = dynamicConstructor(val, this.parsingStrategy, type || abiType); + const instance = dynamicConstructor(val, this.parsingStrategies, type || abiType); return instance.toApiRequest(); }; } @@ -48,33 +48,33 @@ export class AbiParser1 implements AbiParserInterface { abiType: AbiEntryType ): (responseIterator: Iterator, type?: string) => any { // Check direct constructors first - if (this.parsingStrategy.constructors[abiType] && this.parsingStrategy.response[abiType]) { + if (this.parsingStrategies.constructors[abiType] && this.parsingStrategies.response[abiType]) { return (responseIterator: Iterator, type?: string) => { - const instance = this.parsingStrategy.constructors[abiType]( + const instance = this.parsingStrategies.constructors[abiType]( responseIterator, - this.parsingStrategy, + this.parsingStrategies, type ); - return this.parsingStrategy.response[abiType](instance, this.parsingStrategy); + return this.parsingStrategies.response[abiType](instance, this.parsingStrategies); }; } // Check dynamic selectors - const dynamicSelectors = Object.entries(this.parsingStrategy.dynamicSelectors); + const dynamicSelectors = Object.entries(this.parsingStrategies.dynamicSelectors); const matchingSelector = dynamicSelectors.find(([, selectorFn]) => selectorFn(abiType)); if (matchingSelector) { const [selectorName] = matchingSelector; - const dynamicConstructor = this.parsingStrategy.constructors[selectorName]; - const responseParser = this.parsingStrategy.response[selectorName]; + const dynamicConstructor = this.parsingStrategies.constructors[selectorName]; + const responseParser = this.parsingStrategies.response[selectorName]; if (dynamicConstructor && responseParser) { return (responseIterator: Iterator, type?: string) => { const instance = dynamicConstructor( responseIterator, - this.parsingStrategy, + this.parsingStrategies, type || abiType ); - return responseParser(instance, this.parsingStrategy); + return responseParser(instance, this.parsingStrategies); }; } } diff --git a/src/utils/calldata/parser/parser-2.0.0.ts b/src/utils/calldata/parser/parser-2.0.0.ts index acfd05654..da1f574ac 100644 --- a/src/utils/calldata/parser/parser-2.0.0.ts +++ b/src/utils/calldata/parser/parser-2.0.0.ts @@ -1,5 +1,3 @@ -// eslint-disable-next-line import/no-cycle -import { CallData, hdParsingStrategy } from '..'; import { Abi, FunctionAbi, @@ -8,58 +6,78 @@ import { InterfaceAbi, type LegacyEvent, AbiEntryType, + type AllowArray, } from '../../../types'; import { CairoStruct } from '../../cairoDataTypes/cairoStruct'; import type { CairoType } from '../../cairoDataTypes/cairoType.interface'; -import { deepCopy } from '../../helpers'; +import { isTypeArray } from '../cairo'; import { AbiParserInterface } from './interface'; -import { ParsingStrategy } from './parsingStrategy'; +import { ParsingStrategy } from './parsingStrategy.type'; +import { getAbiStruct } from '../getAbiStruct'; export class AbiParser2 implements AbiParserInterface { abi: Abi; - parsingStrategy: ParsingStrategy; + parsingStrategies: ParsingStrategy[]; - constructor(abi: Abi, parsingStrategy: ParsingStrategy = hdParsingStrategy) { + constructor(abi: Abi, parsingStrategy: ParsingStrategy) { this.abi = abi; // add structs & enums in strategy - this.parsingStrategy = deepCopy(parsingStrategy); - const structs: AbiStruct[] = Object.values(CallData.getAbiStruct(abi)); + const structs: AbiStruct[] = Object.values(getAbiStruct(abi)); + const structAndEnumStrategy: ParsingStrategy = { + constructors: {}, + response: {}, + dynamicSelectors: {}, + }; structs.forEach((struct: AbiStruct) => { - this.parsingStrategy.constructors[struct.name] = (input: Iterator | unknown) => { - return new CairoStruct(input, struct, this.parsingStrategy); - }; - this.parsingStrategy.response[struct.name] = ( - instance: CairoType, - strategy: ParsingStrategy - ) => (instance as CairoStruct).decompose(strategy); - this.parsingStrategy.dynamicSelectors[struct.name] = (_type: string) => true; + // Span are defined as Struct in Abi, but are useless here + if (!isTypeArray(struct.name)) { + structAndEnumStrategy.constructors[struct.name] = (input: Iterator | unknown) => { + return new CairoStruct(input, struct, [parsingStrategy, structAndEnumStrategy]); + }; + structAndEnumStrategy.response[struct.name] = ( + instance: CairoType, + strategy: AllowArray + ) => (instance as CairoStruct).decompose(strategy); + structAndEnumStrategy.dynamicSelectors[struct.name] = (_type: string) => true; + } }); + this.parsingStrategies = [parsingStrategy, structAndEnumStrategy]; } public getRequestParser(abiType: AbiEntryType): (val: unknown, type?: string) => any { // Check direct constructors first - if (this.parsingStrategy.constructors[abiType]) { + const strategyConstructorNum = this.parsingStrategies.findIndex( + (strategy: ParsingStrategy) => strategy.constructors[abiType] + ); + if (strategyConstructorNum >= 0) { return (val: unknown, type?: string) => { - const instance = this.parsingStrategy.constructors[abiType]( + const instance = this.parsingStrategies[strategyConstructorNum].constructors[abiType]( val, - this.parsingStrategy, + this.parsingStrategies, type ); return instance.toApiRequest(); }; } - // Check dynamic selectors - const dynamicSelectors = Object.entries(this.parsingStrategy.dynamicSelectors); - const matchingSelector = dynamicSelectors.find(([, selectorFn]) => selectorFn(abiType)); + const strategyDynamicNum = this.parsingStrategies.findIndex((strategy: ParsingStrategy) => { + const dynamicSelectors = Object.entries(strategy.dynamicSelectors); + return dynamicSelectors.find(([, selectorFn]) => selectorFn(abiType)); + }); - if (matchingSelector) { - const [selectorName] = matchingSelector; - const dynamicConstructor = this.parsingStrategy.constructors[selectorName]; + if (strategyDynamicNum >= 0) { + const dynamicSelectors = Object.entries( + this.parsingStrategies[strategyDynamicNum].dynamicSelectors + ); + const matchingSelector = dynamicSelectors.find(([, selectorFn]) => selectorFn(abiType)); + + const [selectorName] = matchingSelector as [string, (type: string) => boolean]; + const dynamicConstructor = + this.parsingStrategies[strategyDynamicNum].constructors[selectorName]; if (dynamicConstructor) { return (val: unknown, type?: string) => { - const instance = dynamicConstructor(val, this.parsingStrategy, type || abiType); + const instance = dynamicConstructor(val, this.parsingStrategies, type || abiType); return instance.toApiRequest(); }; } @@ -72,33 +90,44 @@ export class AbiParser2 implements AbiParserInterface { abiType: AbiEntryType ): (responseIterator: Iterator, type?: string) => any { // Check direct constructors first - if (this.parsingStrategy.constructors[abiType] && this.parsingStrategy.response[abiType]) { + const strategyConstructorNum = this.parsingStrategies.findIndex( + (strategy: ParsingStrategy) => strategy.constructors[abiType] && strategy.response[abiType] + ); + if (strategyConstructorNum >= 0) { return (responseIterator: Iterator, type?: string) => { - const instance = this.parsingStrategy.constructors[abiType]( + const instance = this.parsingStrategies[strategyConstructorNum].constructors[abiType]( responseIterator, - this.parsingStrategy, + this.parsingStrategies, type ); - return this.parsingStrategy.response[abiType](instance, this.parsingStrategy); + return this.parsingStrategies[strategyConstructorNum].response[abiType]( + instance, + this.parsingStrategies + ); }; } - // Check dynamic selectors - const dynamicSelectors = Object.entries(this.parsingStrategy.dynamicSelectors); - const matchingSelector = dynamicSelectors.find(([, selectorFn]) => selectorFn(abiType)); - - if (matchingSelector) { - const [selectorName] = matchingSelector; - const dynamicConstructor = this.parsingStrategy.constructors[selectorName]; - const responseParser = this.parsingStrategy.response[selectorName]; + const strategyDynamicNum = this.parsingStrategies.findIndex((strategy: ParsingStrategy) => { + const dynamicSelectors = Object.entries(strategy.dynamicSelectors); + return dynamicSelectors.find(([, selectorFn]) => selectorFn(abiType)); + }); + if (strategyDynamicNum >= 0) { + const dynamicSelectors = Object.entries( + this.parsingStrategies[strategyDynamicNum].dynamicSelectors + ); + const matchingSelector = dynamicSelectors.find(([, selectorFn]) => selectorFn(abiType)); + const [selectorName] = matchingSelector as [string, (type: string) => boolean]; + const dynamicConstructor = + this.parsingStrategies[strategyDynamicNum].constructors[selectorName]; + const responseParser = this.parsingStrategies[strategyDynamicNum].response[selectorName]; if (dynamicConstructor && responseParser) { return (responseIterator: Iterator, type?: string) => { const instance = dynamicConstructor( responseIterator, - this.parsingStrategy, + this.parsingStrategies, type || abiType ); - return responseParser(instance, this.parsingStrategy); + return responseParser(instance, this.parsingStrategies); }; } } diff --git a/src/utils/calldata/parser/parsingStrategy.ts b/src/utils/calldata/parser/parsingStrategy.ts index ab1731f3a..df8078c21 100644 --- a/src/utils/calldata/parser/parsingStrategy.ts +++ b/src/utils/calldata/parser/parsingStrategy.ts @@ -1,6 +1,6 @@ import { CairoBytes31 } from '../../cairoDataTypes/bytes31'; import { CairoByteArray } from '../../cairoDataTypes/byteArray'; -import { AbiEntryType } from '../../../types'; +import { type AllowArray } from '../../../types'; import { CairoFelt252 } from '../../cairoDataTypes/felt'; import { CairoUint256 } from '../../cairoDataTypes/uint256'; import { CairoUint512 } from '../../cairoDataTypes/uint512'; @@ -23,28 +23,9 @@ import { CairoType } from '../../cairoDataTypes/cairoType.interface'; import assert from '../../assert'; import { isTypeArray, isTypeOption, isTypeResult, isTypeTuple } from '../cairo'; import { CairoTypeOption } from '../../cairoDataTypes/cairoTypeOption'; -import type { CairoOptionVariant, CairoResultVariant } from '../enum'; import { isUndefined } from '../../typed'; import { CairoTypeResult } from '../../cairoDataTypes/cairoTypeResult'; - -/** - * Parsing map for constructors and response parsers - * Configure parsing strategy for each abi type - */ -export type VariantType = CairoOptionVariant | CairoResultVariant | string | number; -export type ParsingStrategy = { - constructors: Record< - AbiEntryType, - ( - input: Iterator | unknown, - strategy: ParsingStrategy, - type?: string, - variant?: VariantType - ) => CairoType - >; - response: Record any>; - dynamicSelectors: Record boolean>; -}; +import type { ParsingStrategy, VariantType } from './parsingStrategy.type'; /** * More robust parsing strategy @@ -162,9 +143,9 @@ export const hdParsingStrategy: ParsingStrategy = { } return new CairoSecp256k1Point(input); }, - [CairoFixedArray.dynamicSelector]: ( + CairoFixedArray: ( input: Iterator | unknown, - strategy: ParsingStrategy, + strategy: AllowArray, type?: string ) => { assert(!!type, 'CairoFixedArray constructor requires type parameter'); @@ -173,25 +154,25 @@ export const hdParsingStrategy: ParsingStrategy = { }, [CairoArray.dynamicSelector]: ( input: Iterator | unknown, - strategy: ParsingStrategy, + strategy: AllowArray, type?: string ) => { assert(!!type, 'CairoArray constructor requires type parameter'); // Always use constructor - it handles both iterator and user input internally return new CairoArray(input, type, strategy); }, - [CairoTuple.dynamicSelector]: ( + CairoTuple: ( input: Iterator | unknown, - strategy: ParsingStrategy, + strategy: AllowArray, type?: string ) => { assert(!!type, 'CairoTuple constructor requires type parameter'); // Always use constructor - it handles both iterator and user input internally return new CairoTuple(input, type, strategy); }, - [CairoTypeOption.dynamicSelector]: ( + CairoTypeOption: ( input: Iterator | unknown, - strategy: ParsingStrategy, + strategy: AllowArray, type?: string, variant?: VariantType ) => { @@ -199,9 +180,9 @@ export const hdParsingStrategy: ParsingStrategy = { const variantNumber = isUndefined(variant) ? undefined : Number(variant); return new CairoTypeOption(input, type, strategy, variantNumber); }, - [CairoTypeResult.dynamicSelector]: ( + CairoTypeResult: ( input: Iterator | unknown, - strategy: ParsingStrategy, + strategy: AllowArray, type?: string, variant?: VariantType ) => { @@ -211,19 +192,19 @@ export const hdParsingStrategy: ParsingStrategy = { }, }, dynamicSelectors: { - [CairoFixedArray.dynamicSelector]: (type: string) => { + CairoFixedArray: (type: string) => { return CairoFixedArray.isAbiType(type); }, [CairoArray.dynamicSelector]: (type: string) => { return isTypeArray(type); }, - [CairoTuple.dynamicSelector]: (type: string) => { + CairoTuple: (type: string) => { return isTypeTuple(type); }, - [CairoTypeOption.dynamicSelector]: (type: string) => { + CairoTypeOption: (type: string) => { return isTypeOption(type); }, - [CairoTypeResult.dynamicSelector]: (type: string) => { + CairoTypeResult: (type: string) => { return isTypeResult(type); }, // TODO: add more dynamic selectors here @@ -249,15 +230,15 @@ export const hdParsingStrategy: ParsingStrategy = { [CairoInt128.abiSelector]: (instance: CairoType) => (instance as CairoInt128).toBigInt(), [CairoSecp256k1Point.abiSelector]: (instance: CairoType) => (instance as CairoSecp256k1Point).toBigInt(), - [CairoFixedArray.dynamicSelector]: (instance: CairoType, strategy: ParsingStrategy) => + CairoFixedArray: (instance: CairoType, strategy: AllowArray) => (instance as CairoFixedArray).decompose(strategy), - [CairoArray.dynamicSelector]: (instance: CairoType, strategy: ParsingStrategy) => + [CairoArray.dynamicSelector]: (instance: CairoType, strategy: AllowArray) => (instance as CairoArray).decompose(strategy), - [CairoTuple.dynamicSelector]: (instance: CairoType, strategy: ParsingStrategy) => + CairoTuple: (instance: CairoType, strategy: AllowArray) => (instance as CairoTuple).decompose(strategy), - [CairoTypeOption.dynamicSelector]: (instance: CairoType, strategy: ParsingStrategy) => + CairoTypeOption: (instance: CairoType, strategy: AllowArray) => (instance as CairoTypeOption).decompose(strategy), - [CairoTypeResult.dynamicSelector]: (instance: CairoType, strategy: ParsingStrategy) => + CairoTypeResult: (instance: CairoType, strategy: AllowArray) => (instance as CairoTypeResult).decompose(strategy), }, } as const; diff --git a/src/utils/calldata/parser/parsingStrategy.type.ts b/src/utils/calldata/parser/parsingStrategy.type.ts new file mode 100644 index 000000000..8c6db3669 --- /dev/null +++ b/src/utils/calldata/parser/parsingStrategy.type.ts @@ -0,0 +1,25 @@ +import type { AbiEntryType, AllowArray } from '../../../types'; +import type { CairoType } from '../../cairoDataTypes/cairoType.interface'; +import type { CairoOptionVariant, CairoResultVariant } from '../enum'; + +/** + * Parsing map for constructors and response parsers + * Configure parsing strategy for each abi type + */ +export type VariantType = CairoOptionVariant | CairoResultVariant | string | number; +export type ParsingStrategy = { + constructors: Record< + AbiEntryType, + ( + input: Iterator | unknown, + strategy: AllowArray, + type?: string, + variant?: VariantType + ) => CairoType + >; + response: Record< + AbiEntryType, + (instance: CairoType, strategy: AllowArray) => any + >; + dynamicSelectors: Record boolean>; +}; diff --git a/src/utils/calldata/propertyOrder.ts b/src/utils/calldata/propertyOrder.ts index af50ec727..ba1410a19 100644 --- a/src/utils/calldata/propertyOrder.ts +++ b/src/utils/calldata/propertyOrder.ts @@ -38,6 +38,7 @@ import { CairoSecp256k1Point } from '../cairoDataTypes/secp256k1Point'; import { CairoTypeOption } from '../cairoDataTypes/cairoTypeOption'; import { type ParsingStrategy } from './parser'; import { CairoTypeResult } from '../cairoDataTypes/cairoTypeResult'; +import { CairoStruct } from '../cairoDataTypes/cairoStruct'; function errorU256(key: string) { return Error( @@ -113,6 +114,9 @@ export default function orderPropsByAbi( } return { limb0: u512.limb0, limb1: u512.limb1, limb2: u512.limb2, limb3: u512.limb3 }; } + if (CairoStruct.isAbiType(abiType)) { + return unorderedItem; + } if (isTypeStruct(abiType, structs)) { const abiOfStruct = structs[abiType].members; // eslint-disable-next-line @typescript-eslint/no-use-before-define diff --git a/src/utils/calldata/requestParser.ts b/src/utils/calldata/requestParser.ts index a1a7955eb..115975e22 100644 --- a/src/utils/calldata/requestParser.ts +++ b/src/utils/calldata/requestParser.ts @@ -44,6 +44,7 @@ import { CairoCustomEnum, CairoOption, CairoOptionVariant, CairoResult } from '. import { AbiParserInterface } from './parser'; import { CairoTypeOption } from '../cairoDataTypes/cairoTypeOption'; import { CairoTypeResult } from '../cairoDataTypes/cairoTypeResult'; +import { CairoStruct } from '../cairoDataTypes/cairoStruct'; // TODO: cleanup implementations to work with unknown, instead of blind casting with 'as' @@ -161,7 +162,7 @@ function parseCalldataValue({ } // checking if the passed element is struct - if (structs[type] && structs[type].members.length) { + if (structs[type]) { if (isTypeEthAddress(type)) { return parseBaseTypes({ type, val: element as BigNumberish, parser }); } @@ -170,6 +171,11 @@ function parseCalldataValue({ return parser.getRequestParser(type)(element); } + // value is CairoStruct instance + if (element instanceof CairoStruct) { + return element.toApiRequest(); + } + const { members } = structs[type]; const subElement = element as any; @@ -185,10 +191,11 @@ function parseCalldataValue({ ); }, [] as string[]); } + // check if abi element is tuple if (isTypeTuple(type)) { // Create CairoTuple instance and use its toApiRequest method - const tuple = new CairoTuple(element, type, parser.parsingStrategy); + const tuple = new CairoTuple(element, type, parser.parsingStrategies); return tuple.toApiRequest(); } @@ -202,7 +209,7 @@ function parseCalldataValue({ myOption = new CairoTypeOption( element, type, - parser.parsingStrategy, + parser.parsingStrategies, element.isSome() ? CairoOptionVariant.Some : CairoOptionVariant.None ); } else { @@ -221,7 +228,7 @@ function parseCalldataValue({ if (isTypeResult(type)) { let myResult: CairoTypeResult; if (element instanceof CairoResult) { - myResult = new CairoTypeResult(element, type, parser.parsingStrategy); + myResult = new CairoTypeResult(element, type, parser.parsingStrategies); } else { myResult = element as CairoTypeResult; } @@ -360,13 +367,13 @@ export function parseCalldataField({ return value.toApiRequest(); // Tuple type - create CairoTuple from raw input case isTypeTuple(type): { - const tuple = new CairoTuple(value, type, parser.parsingStrategy); + const tuple = new CairoTuple(value, type, parser.parsingStrategies); return tuple.toApiRequest(); } // Struct case isTypeStruct(type, structs) || CairoUint256.isAbiType(type): return parseCalldataValue({ - element: value as ParsedStruct | BigNumberish[], + element: value as ParsedStruct | BigNumberish[] | CairoStruct, type, structs, enums, diff --git a/src/utils/calldata/responseParser.ts b/src/utils/calldata/responseParser.ts index 01d3f4598..ca12eca1a 100644 --- a/src/utils/calldata/responseParser.ts +++ b/src/utils/calldata/responseParser.ts @@ -47,6 +47,7 @@ import { CairoResultVariant, } from './enum'; import { AbiParserInterface } from './parser/interface'; +import type { CairoStruct } from '../cairoDataTypes/cairoStruct'; /** * Parse base types @@ -112,7 +113,7 @@ function parseResponseValue( parser: AbiParserInterface, structs?: AbiStructs, enums?: AbiEnums -): BigNumberish | ParsedStruct | boolean | any[] | CairoEnum { +): BigNumberish | ParsedStruct | boolean | any[] | CairoEnum | CairoStruct { if (element.type === '()') { return {}; } @@ -140,7 +141,14 @@ function parseResponseValue( // type c1 array if (isTypeArray(element.type)) { // eslint-disable-next-line no-case-declarations - const parsedDataArr: (BigNumberish | ParsedStruct | boolean | any[] | CairoEnum)[] = []; + const parsedDataArr: ( + | BigNumberish + | ParsedStruct + | boolean + | any[] + | CairoEnum + | CairoStruct + )[] = []; const el: AbiEntry = { name: '', type: getArrayType(element.type) }; const len = BigInt(responseIterator.next().value); // get length while (parsedDataArr.length < len) { @@ -208,15 +216,22 @@ function parseResponseValue( // type tuple if (isTypeTuple(element.type)) { - const tuple = new CairoTuple(responseIterator, element.type, parser.parsingStrategy); - return tuple.decompose(parser.parsingStrategy); + const tuple = new CairoTuple(responseIterator, element.type, parser.parsingStrategies); + return tuple.decompose(parser.parsingStrategies) as ParsedStruct; } // TODO: duplicated, investigate why and what was an issue then de-duplicate // type c1 array if (isTypeArray(element.type)) { // eslint-disable-next-line no-case-declarations - const parsedDataArr: (BigNumberish | ParsedStruct | boolean | any[] | CairoEnum)[] = []; + const parsedDataArr: ( + | BigNumberish + | ParsedStruct + | boolean + | any[] + | CairoEnum + | CairoStruct + )[] = []; const el = { name: '', type: getArrayType(element.type) }; const len = BigInt(responseIterator.next().value); // get length while (parsedDataArr.length < len) { @@ -277,7 +292,14 @@ export default function responseParser({ } // C0 Array // eslint-disable-next-line no-case-declarations - const parsedDataArr: (BigNumberish | ParsedStruct | boolean | any[] | CairoEnum)[] = []; + const parsedDataArr: ( + | BigNumberish + | ParsedStruct + | boolean + | any[] + | CairoEnum + | CairoStruct + )[] = []; if (parsedResult && parsedResult[`${name}_len`]) { const arrLen = parsedResult[`${name}_len`] as number; while (parsedDataArr.length < arrLen) { diff --git a/src/utils/calldata/validate.ts b/src/utils/calldata/validate.ts index a6438967c..d8fa4709e 100644 --- a/src/utils/calldata/validate.ts +++ b/src/utils/calldata/validate.ts @@ -43,6 +43,7 @@ import { import { CairoTypeOption } from '../cairoDataTypes/cairoTypeOption'; import { CairoOption, CairoResult } from './enum'; import { CairoTypeResult } from '../cairoDataTypes/cairoTypeResult'; +import { CairoStruct } from '../cairoDataTypes/cairoStruct'; // TODO: separate validate is redundant as CairoTypes are validated during construction. // TODO: This validate should provide added valie method base validate poiniting to incorect value for method, opt. using color coding @@ -201,6 +202,10 @@ const validateStruct = (parameter: any, input: AbiEntry, structs: AbiStructs) => return; } + if (isTypeStruct(input.type, structs) && parameter instanceof CairoStruct) { + return; // CairoStruct + } + assert( isObject(parameter), `Validate: arg ${input.name} is cairo type struct (${input.type}), and should be defined as a js object (not array)` @@ -428,7 +433,7 @@ const validateNonZero = (parameter: any, input: AbiEntry) => { * }; * * validateFields(functionAbi, [1n], abiStructs, abiEnums); // Returns void since validation passes - * validateFields(functionAbi, [{}], abiStructs, abiEnums); // Throw an error because paramters are not valid + * validateFields(functionAbi, [{}], abiStructs, abiEnums); // Throw an error because parameters are not valid */ export default function validateFields( abiMethod: FunctionAbi, diff --git a/src/utils/helpers.ts b/src/utils/helpers.ts index cf2951af7..a5c5a89c8 100644 --- a/src/utils/helpers.ts +++ b/src/utils/helpers.ts @@ -12,28 +12,23 @@ export function addCompiledFlag(compiled: T): T { return compiled; } -export function deepCopy(obj: T): T { - if (typeof obj !== 'object' || obj === null) { - return obj; - } - - // Handle Date objects - if (obj instanceof Date) { - return new Date(obj.getTime()) as any; - } - - // Handle arrays - if (Array.isArray(obj)) { - const copyArr = [] as any[]; - obj.forEach((value) => copyArr.push(deepCopy(value))); - return copyArr as any; +/** + * Copy by value of a complex object (including Date, Array, functions or classes) + * @param {any} obj - object to copy by value + * @returns {any} copied object. + */ +export function deepCopyWithMethods(obj: any): any { + if (obj === null || typeof obj !== 'object') return obj; + if (obj instanceof Date) return new Date(obj); + if (obj instanceof Array) return obj.map((item) => deepCopyWithMethods(item)); + if (obj instanceof Function) return obj; + const cloned = Object.create(Object.getPrototypeOf(obj)); + // eslint-disable-next-line no-restricted-syntax + for (const key in obj as Object) { + // eslint-disable-next-line no-prototype-builtins + if (obj.hasOwnProperty(key)) { + cloned[key] = deepCopyWithMethods(obj[key]); + } } - - // Handle plain objects - const copyObj = { ...obj } as { [key: string]: any }; - Object.keys(copyObj).forEach((key) => { - copyObj[key] = deepCopy(copyObj[key]); - }); - - return copyObj as T; + return cloned; } From 8e0d256716b11a07eda03e989ae791974a616714 Mon Sep 17 00:00:00 2001 From: PhilippeR26 Date: Fri, 26 Sep 2025 18:40:14 +0200 Subject: [PATCH 10/17] feat: add CairoTypeCustomEnum --- ...tract_class.json => enums_test_enums.casm} | 2463 +++++--- .../cairo2120/enums_test_enums.sierra.json | 5423 +++++++++++++++++ .../enums_test_option.contract_class.json | 4894 --------------- .../calldata/enum/CairoTypeOption.test.ts | 35 + .../calldata/enum/CairoTypeResult.test.ts | 36 +- src/index.ts | 2 +- src/types/cairoEnum.ts | 3 +- src/utils/cairoDataTypes/array.ts | 15 +- src/utils/cairoDataTypes/cairoStruct.ts | 16 +- ...iroTypeEnum.tmp => cairoTypeCustomEnum.ts} | 291 +- src/utils/cairoDataTypes/cairoTypeOption.ts | 83 +- src/utils/cairoDataTypes/cairoTypeResult.ts | 89 +- src/utils/cairoDataTypes/fixedArray.ts | 15 +- src/utils/cairoDataTypes/tuple.ts | 17 +- src/utils/calldata/calldataUtils.ts | 37 + src/utils/calldata/getAbiStruct.ts | 18 - src/utils/calldata/index.ts | 72 +- src/utils/calldata/parser/parser-2.0.0.ts | 35 +- src/utils/calldata/propertyOrder.ts | 64 +- src/utils/calldata/requestParser.ts | 31 +- src/utils/calldata/responseParser.ts | 62 +- src/utils/calldata/validate.ts | 10 +- src/utils/helpers.ts | 10 + 23 files changed, 7692 insertions(+), 6029 deletions(-) rename __mocks__/cairo/cairo2120/{enums_test_option.compiled_contract_class.json => enums_test_enums.casm} (89%) create mode 100644 __mocks__/cairo/cairo2120/enums_test_enums.sierra.json delete mode 100644 __mocks__/cairo/cairo2120/enums_test_option.contract_class.json rename src/utils/cairoDataTypes/{cairoTypeEnum.tmp => cairoTypeCustomEnum.ts} (57%) create mode 100644 src/utils/calldata/calldataUtils.ts delete mode 100644 src/utils/calldata/getAbiStruct.ts diff --git a/__mocks__/cairo/cairo2120/enums_test_option.compiled_contract_class.json b/__mocks__/cairo/cairo2120/enums_test_enums.casm similarity index 89% rename from __mocks__/cairo/cairo2120/enums_test_option.compiled_contract_class.json rename to __mocks__/cairo/cairo2120/enums_test_enums.casm index 45b27186a..e534e29a9 100644 --- a/__mocks__/cairo/cairo2120/enums_test_option.compiled_contract_class.json +++ b/__mocks__/cairo/cairo2120/enums_test_enums.casm @@ -96,7 +96,7 @@ "0x10780017fff7fff", "0xc", "0x1104800180018000", - "0xc1b", + "0xda7", "0x48127ff17fff8000", "0x48127ff17fff8000", "0x480a7ffb7fff8000", @@ -106,9 +106,9 @@ "0x48127ffa7fff8000", "0x208b7fff7fff7ffe", "0x1104800180018000", - "0x1b92", + "0x1df0", "0x482480017fff8000", - "0x1b91", + "0x1def", "0x480080007fff8000", "0xa0680017fff8000", "0x9", @@ -170,7 +170,7 @@ "0x482480017ffd8000", "0x1dce", "0x1104800180018000", - "0xbd6", + "0xd62", "0x48127ff67fff8000", "0x48127ff67fff8000", "0x480a7ffb7fff8000", @@ -184,7 +184,7 @@ "0x482680017ffa8000", "0x1e96", "0x1104800180018000", - "0xbcd", + "0xd59", "0x48127ff67fff8000", "0x48127ff67fff8000", "0x480a7ffb7fff8000", @@ -209,7 +209,7 @@ "0x480a7ffc7fff8000", "0x480a7ffd7fff8000", "0x1104800180018000", - "0xbb9", + "0xd45", "0x20680017fff7ff9", "0x69", "0x20680017fff7ffc", @@ -220,7 +220,7 @@ "0x10780017fff7fff", "0xc", "0x1104800180018000", - "0xb9f", + "0xd2b", "0x48127fee7fff8000", "0x48127fee7fff8000", "0x480a7ffb7fff8000", @@ -230,9 +230,9 @@ "0x48127ffa7fff8000", "0x208b7fff7fff7ffe", "0x1104800180018000", - "0x1b16", + "0x1d74", "0x482480017fff8000", - "0x1b15", + "0x1d73", "0x480080007fff8000", "0xa0680017fff8000", "0x9", @@ -264,7 +264,7 @@ "0x482480017ff88000", "0x2", "0x1104800180018000", - "0xc0f", + "0xd9b", "0x20680017fff7ffd", "0x8", "0x48127ffb7fff8000", @@ -306,7 +306,7 @@ "0x10780017fff7fff", "0x18", "0x1104800180018000", - "0xb4e", + "0xcda", "0x48127fef7fff8000", "0x48127fef7fff8000", "0x480a7ffb7fff8000", @@ -328,7 +328,7 @@ "0x482680017ffa8000", "0x1e96", "0x1104800180018000", - "0xb3d", + "0xcc9", "0x48127ff67fff8000", "0x48127ff67fff8000", "0x480a7ffb7fff8000", @@ -361,7 +361,7 @@ "0x1", "0x480a7ffd7fff8000", "0x1104800180018000", - "0xbde", + "0xd6a", "0x20680017fff7ffc", "0xe", "0x48127ff97fff8000", @@ -406,7 +406,7 @@ "0x10780017fff7fff", "0xc", "0x1104800180018000", - "0xae5", + "0xc71", "0x48127fef7fff8000", "0x48127fef7fff8000", "0x480a7ffb7fff8000", @@ -416,9 +416,9 @@ "0x48127ffa7fff8000", "0x208b7fff7fff7ffe", "0x1104800180018000", - "0x1a5c", + "0x1cba", "0x482480017fff8000", - "0x1a5b", + "0x1cb9", "0x480080007fff8000", "0xa0680017fff8000", "0x9", @@ -482,7 +482,7 @@ "0x482480017ffd8000", "0x1dce", "0x1104800180018000", - "0xa9e", + "0xc2a", "0x48127ff67fff8000", "0x48127ff67fff8000", "0x480a7ffb7fff8000", @@ -496,7 +496,7 @@ "0x482680017ffa8000", "0x1e96", "0x1104800180018000", - "0xa95", + "0xc21", "0x48127ff67fff8000", "0x48127ff67fff8000", "0x480a7ffb7fff8000", @@ -521,7 +521,7 @@ "0x480a7ffc7fff8000", "0x480a7ffd7fff8000", "0x1104800180018000", - "0xbdc", + "0xd68", "0x20680017fff7ff8", "0x69", "0x20680017fff7ffb", @@ -532,7 +532,7 @@ "0x10780017fff7fff", "0xc", "0x1104800180018000", - "0xa67", + "0xbf3", "0x48127fed7fff8000", "0x48127fed7fff8000", "0x480a7ffb7fff8000", @@ -542,9 +542,9 @@ "0x48127ffa7fff8000", "0x208b7fff7fff7ffe", "0x1104800180018000", - "0x19de", + "0x1c3c", "0x482480017fff8000", - "0x19dd", + "0x1c3b", "0x480080007fff8000", "0xa0680017fff8000", "0x9", @@ -577,7 +577,7 @@ "0x482480017ff88000", "0x3", "0x1104800180018000", - "0xc23", + "0xdaf", "0x20680017fff7ffd", "0x8", "0x48127ffb7fff8000", @@ -618,7 +618,7 @@ "0x10780017fff7fff", "0x18", "0x1104800180018000", - "0xa16", + "0xba2", "0x48127fee7fff8000", "0x48127fee7fff8000", "0x480a7ffb7fff8000", @@ -640,7 +640,7 @@ "0x482680017ffa8000", "0x1e96", "0x1104800180018000", - "0xa05", + "0xb91", "0x48127ff67fff8000", "0x48127ff67fff8000", "0x480a7ffb7fff8000", @@ -664,7 +664,7 @@ "0x480a7ffc7fff8000", "0x480a7ffd7fff8000", "0x1104800180018000", - "0xbfc", + "0xd88", "0x20680017fff7ffc", "0x5b", "0x48307ffa80007ffb", @@ -673,7 +673,7 @@ "0x10780017fff7fff", "0xc", "0x1104800180018000", - "0x9da", + "0xb66", "0x48127ff07fff8000", "0x48127fd87fff8000", "0x480a7ffb7fff8000", @@ -683,9 +683,9 @@ "0x48127ffa7fff8000", "0x208b7fff7fff7ffe", "0x1104800180018000", - "0x1951", + "0x1baf", "0x482480017fff8000", - "0x1950", + "0x1bae", "0x480080007fff8000", "0xa0680017fff8000", "0x9", @@ -757,7 +757,7 @@ "0x10780017fff7fff", "0x10", "0x1104800180018000", - "0x98b", + "0xb17", "0x48127ff17fff8000", "0x48127fd97fff8000", "0x480a7ffb7fff8000", @@ -771,7 +771,7 @@ "0x482680017ffa8000", "0x1e96", "0x1104800180018000", - "0x982", + "0xb0e", "0x48127ff67fff8000", "0x48127ff67fff8000", "0x480a7ffb7fff8000", @@ -804,7 +804,7 @@ "0x1", "0x480a7ffd7fff8000", "0x1104800180018000", - "0xc0d", + "0xd99", "0x20680017fff7ffd", "0xd", "0x48127ffa7fff8000", @@ -846,7 +846,7 @@ "0x10780017fff7fff", "0xc", "0x1104800180018000", - "0x92d", + "0xab9", "0x48127ff07fff8000", "0x48127ff07fff8000", "0x480a7ffb7fff8000", @@ -856,9 +856,9 @@ "0x48127ffa7fff8000", "0x208b7fff7fff7ffe", "0x1104800180018000", - "0x18a4", + "0x1b02", "0x482480017fff8000", - "0x18a3", + "0x1b01", "0x480080007fff8000", "0xa0680017fff8000", "0x9", @@ -938,7 +938,7 @@ "0x482480017ffd8000", "0x1dce", "0x1104800180018000", - "0x8d6", + "0xa62", "0x48127ff67fff8000", "0x48127ff67fff8000", "0x480a7ffb7fff8000", @@ -952,7 +952,120 @@ "0x482680017ffa8000", "0x1e96", "0x1104800180018000", - "0x8cd", + "0xa59", + "0x48127ff67fff8000", + "0x48127ff67fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0xa0680017fff8000", + "0x7", + "0x482680017ffa8000", + "0x100000000000000000000000000000000", + "0x400280007ff97fff", + "0x10780017fff7fff", + "0x5e", + "0x4825800180007ffa", + "0x0", + "0x400280007ff97fff", + "0x482680017ff98000", + "0x1", + "0x480a7ffc7fff8000", + "0x480a7ffd7fff8000", + "0x1104800180018000", + "0xd88", + "0x20680017fff7ffc", + "0x49", + "0x48307ffa80007ffb", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0xc", + "0x1104800180018000", + "0xa2e", + "0x48127ff07fff8000", + "0x48127fd67fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0x1104800180018000", + "0x1a77", + "0x482480017fff8000", + "0x1a76", + "0x480080007fff8000", + "0xa0680017fff8000", + "0x9", + "0x4824800180007fda", + "0x0", + "0x482480017fff8000", + "0x100000000000000000000000000000000", + "0x400080007ff17fff", + "0x10780017fff7fff", + "0x26", + "0x4824800180007fda", + "0x0", + "0x400080007ff27fff", + "0x40780017fff7fff", + "0x1", + "0x20680017fff7ff5", + "0xe", + "0x480680017fff8000", + "0x0", + "0x400080007ffe7fff", + "0x400080017ffe7ff5", + "0x400080027ffe7ff6", + "0x482480017ffd8000", + "0x96a", + "0x48127ffd7fff8000", + "0x482480017ffc8000", + "0x3", + "0x10780017fff7fff", + "0xa", + "0x480680017fff8000", + "0x1", + "0x400080007ffe7fff", + "0x482480017ffd8000", + "0xa96", + "0x48127ffd7fff8000", + "0x482480017ffc8000", + "0x1", + "0x482480017fed8000", + "0x1", + "0x48127ffc7fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x0", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0x482480017ff18000", + "0x1", + "0x482480017fd78000", + "0x7da", + "0x10780017fff7fff", + "0x10", + "0x1104800180018000", + "0x9f1", + "0x48127ff17fff8000", + "0x48127fd77fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0x482680017ff98000", + "0x1", + "0x482680017ffa8000", + "0x1e96", + "0x1104800180018000", + "0x9e8", "0x48127ff67fff8000", "0x48127ff67fff8000", "0x480a7ffb7fff8000", @@ -988,7 +1101,7 @@ "0x48127ffa7fff8000", "0x480280007ffc8000", "0x1104800180018000", - "0xbf0", + "0xdac", "0x20680017fff7ffa", "0x52", "0x20680017fff7ffd", @@ -999,7 +1112,7 @@ "0x10780017fff7fff", "0xc", "0x1104800180018000", - "0x894", + "0x9af", "0x48127fef7fff8000", "0x48127fef7fff8000", "0x480a7ffb7fff8000", @@ -1009,9 +1122,9 @@ "0x48127ffa7fff8000", "0x208b7fff7fff7ffe", "0x1104800180018000", - "0x180b", + "0x19f8", "0x482480017fff8000", - "0x180a", + "0x19f7", "0x480080007fff8000", "0xa0680017fff8000", "0x9", @@ -1040,7 +1153,7 @@ "0x482480017ff98000", "0x1", "0x1104800180018000", - "0xc61", + "0xe1d", "0x20680017fff7ffd", "0xb", "0x48127ffb7fff8000", @@ -1084,7 +1197,7 @@ "0x482480017ffd8000", "0x1dce", "0x1104800180018000", - "0x844", + "0x95f", "0x48127ff67fff8000", "0x48127ff67fff8000", "0x480a7ffb7fff8000", @@ -1098,7 +1211,7 @@ "0x482680017ffa8000", "0x1e96", "0x1104800180018000", - "0x83b", + "0x956", "0x48127ff67fff8000", "0x48127ff67fff8000", "0x480a7ffb7fff8000", @@ -1194,7 +1307,7 @@ "0x10780017fff7fff", "0xc", "0x1104800180018000", - "0x7d1", + "0x8ec", "0x48127ff37fff8000", "0x48127ff37fff8000", "0x480a7ffb7fff8000", @@ -1204,9 +1317,9 @@ "0x48127ffa7fff8000", "0x208b7fff7fff7ffe", "0x1104800180018000", - "0x1748", + "0x1935", "0x482480017fff8000", - "0x1747", + "0x1934", "0x480080007fff8000", "0xa0680017fff8000", "0x9", @@ -1248,7 +1361,7 @@ "0x482480017ffd8000", "0x1dce", "0x1104800180018000", - "0x7a0", + "0x8bb", "0x48127ff67fff8000", "0x48127ff67fff8000", "0x480a7ffb7fff8000", @@ -1262,7 +1375,7 @@ "0x482680017ffa8000", "0x1e96", "0x1104800180018000", - "0x797", + "0x8b2", "0x48127ff67fff8000", "0x48127ff67fff8000", "0x480a7ffb7fff8000", @@ -1286,7 +1399,7 @@ "0x480a7ffc7fff8000", "0x480a7ffd7fff8000", "0x1104800180018000", - "0xbae", + "0xbe1", "0x20680017fff7ffc", "0x49", "0x48307ffa80007ffb", @@ -1295,7 +1408,7 @@ "0x10780017fff7fff", "0xc", "0x1104800180018000", - "0x76c", + "0x887", "0x48127ff07fff8000", "0x48127fd67fff8000", "0x480a7ffb7fff8000", @@ -1305,9 +1418,9 @@ "0x48127ffa7fff8000", "0x208b7fff7fff7ffe", "0x1104800180018000", - "0x16e3", + "0x18d0", "0x482480017fff8000", - "0x16e2", + "0x18cf", "0x480080007fff8000", "0xa0680017fff8000", "0x9", @@ -1361,7 +1474,7 @@ "0x10780017fff7fff", "0x10", "0x1104800180018000", - "0x72f", + "0x84a", "0x48127ff17fff8000", "0x48127fd77fff8000", "0x480a7ffb7fff8000", @@ -1375,7 +1488,7 @@ "0x482680017ffa8000", "0x1e96", "0x1104800180018000", - "0x726", + "0x841", "0x48127ff67fff8000", "0x48127ff67fff8000", "0x480a7ffb7fff8000", @@ -1399,7 +1512,7 @@ "0x480a7ffc7fff8000", "0x480a7ffd7fff8000", "0x1104800180018000", - "0x9ba", + "0xad5", "0x20680017fff7ffd", "0x49", "0x48307ffb80007ffc", @@ -1408,7 +1521,7 @@ "0x10780017fff7fff", "0xc", "0x1104800180018000", - "0x6fb", + "0x816", "0x48127ff17fff8000", "0x48127fdc7fff8000", "0x480a7ffb7fff8000", @@ -1418,9 +1531,9 @@ "0x48127ffa7fff8000", "0x208b7fff7fff7ffe", "0x1104800180018000", - "0x1672", + "0x185f", "0x482480017fff8000", - "0x1671", + "0x185e", "0x480080007fff8000", "0xa0680017fff8000", "0x9", @@ -1474,7 +1587,7 @@ "0x10780017fff7fff", "0x10", "0x1104800180018000", - "0x6be", + "0x7d9", "0x48127ff27fff8000", "0x48127fdd7fff8000", "0x480a7ffb7fff8000", @@ -1488,7 +1601,7 @@ "0x482680017ffa8000", "0x1e96", "0x1104800180018000", - "0x6b5", + "0x7d0", "0x48127ff67fff8000", "0x48127ff67fff8000", "0x480a7ffb7fff8000", @@ -1513,7 +1626,7 @@ "0x480a7ffc7fff8000", "0x480a7ffd7fff8000", "0x1104800180018000", - "0xb6c", + "0xc87", "0x20680017fff7ff9", "0x6a", "0x20680017fff7ffc", @@ -1524,7 +1637,7 @@ "0x10780017fff7fff", "0xc", "0x1104800180018000", - "0x687", + "0x7a2", "0x48127fee7fff8000", "0x48127fee7fff8000", "0x480a7ffb7fff8000", @@ -1534,9 +1647,9 @@ "0x48127ffa7fff8000", "0x208b7fff7fff7ffe", "0x1104800180018000", - "0x15fe", + "0x17eb", "0x482480017fff8000", - "0x15fd", + "0x17ea", "0x480080007fff8000", "0xa0680017fff8000", "0x9", @@ -1568,7 +1681,7 @@ "0x482480017ff88000", "0x2", "0x1104800180018000", - "0x6f7", + "0x812", "0x10780017fff7fff", "0x12", "0x480680017fff8000", @@ -1586,7 +1699,7 @@ "0x482480017ff88000", "0x2", "0x1104800180018000", - "0xbe2", + "0xcfd", "0x20680017fff7ffd", "0xa", "0x48127ffb7fff8000", @@ -1611,7 +1724,7 @@ "0x10780017fff7fff", "0x18", "0x1104800180018000", - "0x635", + "0x750", "0x48127fef7fff8000", "0x48127fef7fff8000", "0x480a7ffb7fff8000", @@ -1633,7 +1746,7 @@ "0x482680017ffa8000", "0x1e96", "0x1104800180018000", - "0x624", + "0x73f", "0x48127ff67fff8000", "0x48127ff67fff8000", "0x480a7ffb7fff8000", @@ -1657,7 +1770,7 @@ "0x480a7ffc7fff8000", "0x480a7ffd7fff8000", "0x1104800180018000", - "0xbcb", + "0xce6", "0x20680017fff7ffb", "0x4b", "0x48307ff980007ffa", @@ -1666,7 +1779,7 @@ "0x10780017fff7fff", "0xc", "0x1104800180018000", - "0x5f9", + "0x714", "0x48127fef7fff8000", "0x48127fc37fff8000", "0x480a7ffb7fff8000", @@ -1676,9 +1789,9 @@ "0x48127ffa7fff8000", "0x208b7fff7fff7ffe", "0x1104800180018000", - "0x1570", + "0x175d", "0x482480017fff8000", - "0x156f", + "0x175c", "0x480080007fff8000", "0xa0680017fff8000", "0x9", @@ -1734,7 +1847,7 @@ "0x10780017fff7fff", "0x10", "0x1104800180018000", - "0x5ba", + "0x6d5", "0x48127ff07fff8000", "0x48127fc47fff8000", "0x480a7ffb7fff8000", @@ -1748,7 +1861,7 @@ "0x482680017ffa8000", "0x1e96", "0x1104800180018000", - "0x5b1", + "0x6cc", "0x48127ff67fff8000", "0x48127ff67fff8000", "0x480a7ffb7fff8000", @@ -1773,7 +1886,7 @@ "0x480a7ffc7fff8000", "0x480a7ffd7fff8000", "0x1104800180018000", - "0xc12", + "0xd2d", "0x20680017fff7ff8", "0x6c", "0x20680017fff7ffb", @@ -1784,7 +1897,7 @@ "0x10780017fff7fff", "0xc", "0x1104800180018000", - "0x583", + "0x69e", "0x48127fed7fff8000", "0x48127fed7fff8000", "0x480a7ffb7fff8000", @@ -1794,9 +1907,9 @@ "0x48127ffa7fff8000", "0x208b7fff7fff7ffe", "0x1104800180018000", - "0x14fa", + "0x16e7", "0x482480017fff8000", - "0x14f9", + "0x16e6", "0x480080007fff8000", "0xa0680017fff8000", "0x9", @@ -1829,7 +1942,7 @@ "0x482480017ff88000", "0x3", "0x1104800180018000", - "0x73f", + "0x85a", "0x10780017fff7fff", "0x13", "0x480680017fff8000", @@ -1848,7 +1961,7 @@ "0x482480017ff88000", "0x3", "0x1104800180018000", - "0xadc", + "0xbf7", "0x20680017fff7ffd", "0xa", "0x48127ffb7fff8000", @@ -1873,7 +1986,7 @@ "0x10780017fff7fff", "0x18", "0x1104800180018000", - "0x52f", + "0x64a", "0x48127fee7fff8000", "0x48127fee7fff8000", "0x480a7ffb7fff8000", @@ -1895,7 +2008,7 @@ "0x482680017ffa8000", "0x1e96", "0x1104800180018000", - "0x51e", + "0x639", "0x48127ff67fff8000", "0x48127ff67fff8000", "0x480a7ffb7fff8000", @@ -1919,7 +2032,7 @@ "0x480a7ffc7fff8000", "0x480a7ffd7fff8000", "0x1104800180018000", - "0xc23", + "0xd3e", "0x20680017fff7ffc", "0x5b", "0x48307ffa80007ffb", @@ -1928,7 +2041,7 @@ "0x10780017fff7fff", "0xc", "0x1104800180018000", - "0x4f3", + "0x60e", "0x48127ff07fff8000", "0x48127fcc7fff8000", "0x480a7ffb7fff8000", @@ -1938,9 +2051,9 @@ "0x48127ffa7fff8000", "0x208b7fff7fff7ffe", "0x1104800180018000", - "0x146a", + "0x1657", "0x482480017fff8000", - "0x1469", + "0x1656", "0x480080007fff8000", "0xa0680017fff8000", "0x9", @@ -2012,7 +2125,7 @@ "0x10780017fff7fff", "0x10", "0x1104800180018000", - "0x4a4", + "0x5bf", "0x48127ff17fff8000", "0x48127fcd7fff8000", "0x480a7ffb7fff8000", @@ -2026,7 +2139,7 @@ "0x482680017ffa8000", "0x1e96", "0x1104800180018000", - "0x49b", + "0x5b6", "0x48127ff67fff8000", "0x48127ff67fff8000", "0x480a7ffb7fff8000", @@ -2050,7 +2163,7 @@ "0x480a7ffc7fff8000", "0x480a7ffd7fff8000", "0x1104800180018000", - "0xc23", + "0xd3e", "0x20680017fff7ffc", "0x5a", "0x48307ffa80007ffb", @@ -2059,7 +2172,7 @@ "0x10780017fff7fff", "0xc", "0x1104800180018000", - "0x470", + "0x58b", "0x48127ff07fff8000", "0x48127fd77fff8000", "0x480a7ffb7fff8000", @@ -2069,9 +2182,9 @@ "0x48127ffa7fff8000", "0x208b7fff7fff7ffe", "0x1104800180018000", - "0x13e7", + "0x15d4", "0x482480017fff8000", - "0x13e6", + "0x15d3", "0x480080007fff8000", "0xa0680017fff8000", "0x9", @@ -2142,7 +2255,7 @@ "0x10780017fff7fff", "0x10", "0x1104800180018000", - "0x422", + "0x53d", "0x48127ff17fff8000", "0x48127fd87fff8000", "0x480a7ffb7fff8000", @@ -2156,7 +2269,121 @@ "0x482680017ffa8000", "0x1e96", "0x1104800180018000", - "0x419", + "0x534", + "0x48127ff67fff8000", + "0x48127ff67fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0xa0680017fff8000", + "0x7", + "0x482680017ffa8000", + "0x100000000000000000000000000000000", + "0x400280007ff97fff", + "0x10780017fff7fff", + "0x5f", + "0x4825800180007ffa", + "0x0", + "0x400280007ff97fff", + "0x482680017ff98000", + "0x1", + "0x480a7ffc7fff8000", + "0x480a7ffd7fff8000", + "0x1104800180018000", + "0xd8a", + "0x20680017fff7ffc", + "0x4a", + "0x48307ffa80007ffb", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0xc", + "0x1104800180018000", + "0x509", + "0x48127ff07fff8000", + "0x48127fd57fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0x1104800180018000", + "0x1552", + "0x482480017fff8000", + "0x1551", + "0x480080007fff8000", + "0xa0680017fff8000", + "0x9", + "0x4824800180007fd9", + "0x0", + "0x482480017fff8000", + "0x100000000000000000000000000000000", + "0x400080007ff17fff", + "0x10780017fff7fff", + "0x27", + "0x4824800180007fd9", + "0x0", + "0x400080007ff27fff", + "0x40780017fff7fff", + "0x1", + "0x20680017fff7ff5", + "0xd", + "0x480680017fff8000", + "0x0", + "0x400080007ffe7fff", + "0x400080017ffe7ff6", + "0x482480017ffd8000", + "0x906", + "0x48127ffd7fff8000", + "0x482480017ffc8000", + "0x2", + "0x10780017fff7fff", + "0xc", + "0x480680017fff8000", + "0x1", + "0x400080007ffe7fff", + "0x400080017ffe7ff5", + "0x400080027ffe7ff6", + "0x482480017ffd8000", + "0x906", + "0x48127ffd7fff8000", + "0x482480017ffc8000", + "0x3", + "0x482480017fed8000", + "0x1", + "0x48127ffc7fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x0", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0x482480017ff18000", + "0x1", + "0x482480017fd68000", + "0x712", + "0x10780017fff7fff", + "0x10", + "0x1104800180018000", + "0x4cb", + "0x48127ff17fff8000", + "0x48127fd67fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0x482680017ff98000", + "0x1", + "0x482680017ffa8000", + "0x1e96", + "0x1104800180018000", + "0x4c2", "0x48127ff67fff8000", "0x48127ff67fff8000", "0x480a7ffb7fff8000", @@ -2180,7 +2407,7 @@ "0x480a7ffc7fff8000", "0x480a7ffd7fff8000", "0x1104800180018000", - "0x6ad", + "0x756", "0x20680017fff7ffd", "0x34", "0x48307ffb80007ffc", @@ -2189,7 +2416,7 @@ "0x10780017fff7fff", "0xc", "0x1104800180018000", - "0x3ee", + "0x497", "0x48127ff17fff8000", "0x48127fdc7fff8000", "0x480a7ffb7fff8000", @@ -2199,9 +2426,9 @@ "0x48127ffa7fff8000", "0x208b7fff7fff7ffe", "0x1104800180018000", - "0x1365", + "0x14e0", "0x482480017fff8000", - "0x1364", + "0x14df", "0x480080007fff8000", "0xa0680017fff8000", "0x9", @@ -2234,7 +2461,7 @@ "0x10780017fff7fff", "0x10", "0x1104800180018000", - "0x3c6", + "0x46f", "0x48127ff27fff8000", "0x48127fdd7fff8000", "0x480a7ffb7fff8000", @@ -2248,7 +2475,7 @@ "0x482680017ffa8000", "0x1e96", "0x1104800180018000", - "0x3bd", + "0x466", "0x48127ff67fff8000", "0x48127ff67fff8000", "0x480a7ffb7fff8000", @@ -2335,7 +2562,7 @@ "0x10780017fff7fff", "0xd", "0x1104800180018000", - "0x35c", + "0x405", "0x482680017ff98000", "0x5", "0x48127fe97fff8000", @@ -2346,9 +2573,9 @@ "0x48127ffa7fff8000", "0x208b7fff7fff7ffe", "0x1104800180018000", - "0x12d2", + "0x144d", "0x482480017fff8000", - "0x12d1", + "0x144c", "0x480080007fff8000", "0xa0680017fff8000", "0x9", @@ -2408,7 +2635,7 @@ "0x482480017ffd8000", "0x1dce", "0x1104800180018000", - "0x318", + "0x3c1", "0x48127ff67fff8000", "0x48127ff67fff8000", "0x480a7ffb7fff8000", @@ -2422,7 +2649,7 @@ "0x482680017ffa8000", "0x1e96", "0x1104800180018000", - "0x30f", + "0x3b8", "0x48127ff67fff8000", "0x48127ff67fff8000", "0x480a7ffb7fff8000", @@ -2446,7 +2673,7 @@ "0x480a7ffc7fff8000", "0x480a7ffd7fff8000", "0x1104800180018000", - "0xb65", + "0xce0", "0x20680017fff7ffc", "0x38", "0x48307ffa80007ffb", @@ -2455,7 +2682,7 @@ "0x10780017fff7fff", "0xc", "0x1104800180018000", - "0x2e4", + "0x38d", "0x48127ff07fff8000", "0x48127fd47fff8000", "0x480a7ffb7fff8000", @@ -2465,9 +2692,9 @@ "0x48127ffa7fff8000", "0x208b7fff7fff7ffe", "0x1104800180018000", - "0x125b", + "0x13d6", "0x482480017fff8000", - "0x125a", + "0x13d5", "0x480080007fff8000", "0xa0680017fff8000", "0x9", @@ -2504,7 +2731,7 @@ "0x10780017fff7fff", "0x10", "0x1104800180018000", - "0x2b8", + "0x361", "0x48127ff17fff8000", "0x48127fd57fff8000", "0x480a7ffb7fff8000", @@ -2518,7 +2745,7 @@ "0x482680017ffa8000", "0x1e96", "0x1104800180018000", - "0x2af", + "0x358", "0x48127ff67fff8000", "0x48127ff67fff8000", "0x480a7ffb7fff8000", @@ -2543,7 +2770,7 @@ "0x10780017fff7fff", "0xd", "0x1104800180018000", - "0x28c", + "0x335", "0x482680017ff98000", "0x1", "0x48127ff57fff8000", @@ -2554,9 +2781,9 @@ "0x48127ffa7fff8000", "0x208b7fff7fff7ffe", "0x1104800180018000", - "0x1202", + "0x137d", "0x482480017fff8000", - "0x1201", + "0x137c", "0x480080007fff8000", "0xa0680017fff8000", "0x9", @@ -2593,7 +2820,7 @@ "0x482680017ffa8000", "0x1e96", "0x1104800180018000", - "0x264", + "0x30d", "0x48127ff67fff8000", "0x48127ff67fff8000", "0x480a7ffb7fff8000", @@ -2617,7 +2844,7 @@ "0x480a7ffc7fff8000", "0x480a7ffd7fff8000", "0x1104800180018000", - "0xb58", + "0xcd3", "0x20680017fff7ffa", "0x39", "0x48307ff880007ff9", @@ -2626,7 +2853,7 @@ "0x10780017fff7fff", "0xc", "0x1104800180018000", - "0x239", + "0x2e2", "0x48127fee7fff8000", "0x48127fbc7fff8000", "0x480a7ffb7fff8000", @@ -2636,9 +2863,9 @@ "0x48127ffa7fff8000", "0x208b7fff7fff7ffe", "0x1104800180018000", - "0x11b0", + "0x132b", "0x482480017fff8000", - "0x11af", + "0x132a", "0x480080007fff8000", "0xa0680017fff8000", "0x9", @@ -2676,7 +2903,7 @@ "0x10780017fff7fff", "0x10", "0x1104800180018000", - "0x20c", + "0x2b5", "0x48127fef7fff8000", "0x48127fbd7fff8000", "0x480a7ffb7fff8000", @@ -2690,7 +2917,7 @@ "0x482680017ffa8000", "0x1e96", "0x1104800180018000", - "0x203", + "0x2ac", "0x48127ff67fff8000", "0x48127ff67fff8000", "0x480a7ffb7fff8000", @@ -2715,7 +2942,7 @@ "0x480a7ffc7fff8000", "0x480a7ffd7fff8000", "0x1104800180018000", - "0xb76", + "0xcf1", "0x20680017fff7ff9", "0x54", "0x20680017fff7ffc", @@ -2726,7 +2953,7 @@ "0x10780017fff7fff", "0xc", "0x1104800180018000", - "0x1d5", + "0x27e", "0x48127fee7fff8000", "0x48127fee7fff8000", "0x480a7ffb7fff8000", @@ -2736,9 +2963,9 @@ "0x48127ffa7fff8000", "0x208b7fff7fff7ffe", "0x1104800180018000", - "0x114c", + "0x12c7", "0x482480017fff8000", - "0x114b", + "0x12c6", "0x480080007fff8000", "0xa0680017fff8000", "0x9", @@ -2766,7 +2993,7 @@ "0x482480017ff98000", "0x2", "0x1104800180018000", - "0x396", + "0x43f", "0x20680017fff7ffd", "0xa", "0x48127ffb7fff8000", @@ -2791,7 +3018,7 @@ "0x10780017fff7fff", "0x18", "0x1104800180018000", - "0x199", + "0x242", "0x48127fef7fff8000", "0x48127fef7fff8000", "0x480a7ffb7fff8000", @@ -2813,7 +3040,7 @@ "0x482680017ffa8000", "0x1e96", "0x1104800180018000", - "0x188", + "0x231", "0x48127ff67fff8000", "0x48127ff67fff8000", "0x480a7ffb7fff8000", @@ -2837,7 +3064,7 @@ "0x480a7ffc7fff8000", "0x480a7ffd7fff8000", "0x1104800180018000", - "0xb87", + "0xd02", "0x20680017fff7ffa", "0x39", "0x48307ff880007ff9", @@ -2846,7 +3073,7 @@ "0x10780017fff7fff", "0xc", "0x1104800180018000", - "0x15d", + "0x206", "0x48127fee7fff8000", "0x48127fbc7fff8000", "0x480a7ffb7fff8000", @@ -2856,9 +3083,9 @@ "0x48127ffa7fff8000", "0x208b7fff7fff7ffe", "0x1104800180018000", - "0x10d4", + "0x124f", "0x482480017fff8000", - "0x10d3", + "0x124e", "0x480080007fff8000", "0xa0680017fff8000", "0x9", @@ -2896,7 +3123,7 @@ "0x10780017fff7fff", "0x10", "0x1104800180018000", - "0x130", + "0x1d9", "0x48127fef7fff8000", "0x48127fbd7fff8000", "0x480a7ffb7fff8000", @@ -2910,7 +3137,7 @@ "0x482680017ffa8000", "0x1e96", "0x1104800180018000", - "0x127", + "0x1d0", "0x48127ff67fff8000", "0x48127ff67fff8000", "0x480a7ffb7fff8000", @@ -2934,7 +3161,7 @@ "0x480a7ffc7fff8000", "0x480a7ffd7fff8000", "0x1104800180018000", - "0xba6", + "0xd21", "0x20680017fff7ffc", "0x49", "0x48307ffa80007ffb", @@ -2943,7 +3170,7 @@ "0x10780017fff7fff", "0xc", "0x1104800180018000", - "0xfc", + "0x1a5", "0x48127ff07fff8000", "0x48127fd67fff8000", "0x480a7ffb7fff8000", @@ -2953,9 +3180,9 @@ "0x48127ffa7fff8000", "0x208b7fff7fff7ffe", "0x1104800180018000", - "0x1073", + "0x11ee", "0x482480017fff8000", - "0x1072", + "0x11ed", "0x480080007fff8000", "0xa0680017fff8000", "0x9", @@ -3009,7 +3236,7 @@ "0x10780017fff7fff", "0x10", "0x1104800180018000", - "0xbf", + "0x168", "0x48127ff17fff8000", "0x48127fd77fff8000", "0x480a7ffb7fff8000", @@ -3023,7 +3250,7 @@ "0x482680017ffa8000", "0x1e96", "0x1104800180018000", - "0xb6", + "0x15f", "0x48127ff67fff8000", "0x48127ff67fff8000", "0x480a7ffb7fff8000", @@ -3077,7 +3304,7 @@ "0x1", "0x480a7ffd7fff8000", "0x1104800180018000", - "0xbb3", + "0xd2e", "0x20680017fff7ffd", "0x4d", "0x48307ffb80007ffc", @@ -3086,7 +3313,7 @@ "0x10780017fff7fff", "0xc", "0x1104800180018000", - "0x6d", + "0x116", "0x48127ff17fff8000", "0x48127fd97fff8000", "0x480a7ffb7fff8000", @@ -3096,9 +3323,9 @@ "0x48127ffa7fff8000", "0x208b7fff7fff7ffe", "0x1104800180018000", - "0xfe4", + "0x115f", "0x482480017fff8000", - "0xfe3", + "0x115e", "0x480080007fff8000", "0xa0680017fff8000", "0x9", @@ -3171,7 +3398,7 @@ "0x482480017ffd8000", "0x1dce", "0x1104800180018000", - "0x1d", + "0xc6", "0x48127ff67fff8000", "0x48127ff67fff8000", "0x480a7ffb7fff8000", @@ -3185,7 +3412,7 @@ "0x482680017ffa8000", "0x1e96", "0x1104800180018000", - "0x14", + "0xbd", "0x48127ff67fff8000", "0x48127ff67fff8000", "0x480a7ffb7fff8000", @@ -3194,40 +3421,209 @@ "0x48127ffa7fff8000", "0x48127ffa7fff8000", "0x208b7fff7fff7ffe", - "0x480680017fff8000", - "0x496e70757420746f6f206c6f6e6720666f7220617267756d656e7473", - "0x1104800180018000", - "0xbd6", - "0x208b7fff7fff7ffe", - "0x480680017fff8000", - "0x4661696c656420746f20646573657269616c697a6520706172616d202331", - "0x1104800180018000", - "0xbd1", - "0x208b7fff7fff7ffe", - "0x480680017fff8000", - "0x4f7574206f6620676173", - "0x1104800180018000", - "0xbcc", - "0x208b7fff7fff7ffe", + "0xa0680017fff8000", + "0x7", + "0x482680017ffa8000", + "0x100000000000000000000000000000000", + "0x400280007ff97fff", + "0x10780017fff7fff", + "0x96", + "0x4825800180007ffa", + "0x0", + "0x400280007ff97fff", "0x48297ffc80007ffd", "0x20680017fff7fff", "0x4", "0x10780017fff7fff", - "0x7a", + "0x80", "0x480280007ffc8000", - "0x20680017fff7fff", - "0x51", - "0x482680017ffc8000", - "0x1", - "0x480a7ffd7fff8000", - "0x48307ffe80007fff", - "0x20680017fff7fff", - "0x4", - "0x10780017fff7fff", - "0x35", - "0x40780017fff7fff", - "0x1", - "0x480a7ffa7fff8000", + "0xa0680017fff8000", + "0x12", + "0x4824800180007ffe", + "0x10000000000000000", + "0x4844800180008002", + "0x8000000000000110000000000000000", + "0x4830800080017ffe", + "0x480280017ff97fff", + "0x482480017ffe8000", + "0xefffffffffffffdeffffffffffffffff", + "0x480280027ff97fff", + "0x400280037ff97ffb", + "0x402480017fff7ffb", + "0xffffffffffffffffffffffffffffffff", + "0x20680017fff7fff", + "0x69", + "0x402780017fff7fff", + "0x1", + "0x400280017ff97ffe", + "0x482480017ffe8000", + "0xffffffffffffffff0000000000000000", + "0x400280027ff97fff", + "0x482680017ffc8000", + "0x1", + "0x480a7ffd7fff8000", + "0x48307ffe80007fff", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0x55", + "0x480080007ffd8000", + "0xa0680017fff8000", + "0x12", + "0x4824800180007ffe", + "0x100000000", + "0x4844800180008002", + "0x8000000000000110000000000000000", + "0x4830800080017ffe", + "0x480280037ff97fff", + "0x482480017ffe8000", + "0xefffffffffffffde00000000ffffffff", + "0x480280047ff97fff", + "0x400280057ff97ffb", + "0x402480017fff7ffb", + "0xffffffffffffffffffffffffffffffff", + "0x20680017fff7fff", + "0x3e", + "0x402780017fff7fff", + "0x1", + "0x400280037ff97ffe", + "0x482480017ffe8000", + "0xffffffffffffffffffffffff00000000", + "0x400280047ff97fff", + "0x482480017ffa8000", + "0x1", + "0x48127ffa7fff8000", + "0x48307ffe80007fff", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0xd", + "0x1104800180018000", + "0x5c", + "0x482680017ff98000", + "0x5", + "0x48127fe97fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0x1104800180018000", + "0x10a4", + "0x482480017fff8000", + "0x10a3", + "0x480080007fff8000", + "0xa0680017fff8000", + "0x9", + "0x4824800180007fed", + "0x0", + "0x482480017fff8000", + "0x100000000000000000000000000000000", + "0x400280057ff97fff", + "0x10780017fff7fff", + "0x11", + "0x4824800180007fed", + "0x0", + "0x400280057ff97fff", + "0x40780017fff7fff", + "0x1", + "0x482680017ff98000", + "0x6", + "0x482480017ffd8000", + "0x1694", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x0", + "0x48127ffb7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0x482680017ff98000", + "0x6", + "0x482480017fea8000", + "0x1180", + "0x10780017fff7fff", + "0x26", + "0x482680017ff98000", + "0x6", + "0x482480017fef8000", + "0x14a0", + "0x10780017fff7fff", + "0x12", + "0x482680017ff98000", + "0x3", + "0x482480017ff78000", + "0x195a", + "0x10780017fff7fff", + "0xc", + "0x482680017ff98000", + "0x4", + "0x482480017ff58000", + "0x18b0", + "0x10780017fff7fff", + "0x6", + "0x482680017ff98000", + "0x1", + "0x482480017ffd8000", + "0x1dce", + "0x1104800180018000", + "0x1d", + "0x48127ff67fff8000", + "0x48127ff67fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0x482680017ff98000", + "0x1", + "0x482680017ffa8000", + "0x1e96", + "0x1104800180018000", + "0x14", + "0x48127ff67fff8000", + "0x48127ff67fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0x480680017fff8000", + "0x496e70757420746f6f206c6f6e6720666f7220617267756d656e7473", + "0x1104800180018000", + "0xca8", + "0x208b7fff7fff7ffe", + "0x480680017fff8000", + "0x4661696c656420746f20646573657269616c697a6520706172616d202331", + "0x1104800180018000", + "0xca3", + "0x208b7fff7fff7ffe", + "0x480680017fff8000", + "0x4f7574206f6620676173", + "0x1104800180018000", + "0xc9e", + "0x208b7fff7fff7ffe", + "0x48297ffc80007ffd", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0x7a", + "0x480280007ffc8000", + "0x20680017fff7fff", + "0x51", + "0x482680017ffc8000", + "0x1", + "0x480a7ffd7fff8000", + "0x48307ffe80007fff", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0x35", + "0x40780017fff7fff", + "0x1", + "0x480a7ffa7fff8000", "0x480a7ffb7fff8000", "0x482480017ffa8000", "0x1", @@ -3236,7 +3632,7 @@ "0x48127ffa7fff8000", "0x480080007ff68000", "0x1104800180018000", - "0xbb6", + "0xc88", "0x20680017fff7ffa", "0x18", "0x20680017fff7ffd", @@ -3570,7 +3966,7 @@ "0x1", "0x480a7ffd7fff8000", "0x1104800180018000", - "0xad8", + "0xbaa", "0x20680017fff7ff9", "0x23", "0x20680017fff7ffc", @@ -4043,86 +4439,247 @@ "0x480680017fff8000", "0x0", "0x208b7fff7fff7ffe", - "0xa0680017fff8000", - "0x7", - "0x482680017ff88000", - "0xfffffffffffffffffffffffffffff182", - "0x400280007ff77fff", - "0x10780017fff7fff", - "0x90", - "0x4825800180007ff8", - "0xe7e", - "0x400280007ff77fff", - "0x20780017fff7ffd", - "0xf", - "0x482680017ff78000", - "0x1", - "0x482480017ffe8000", - "0x1202", - "0x480680017fff8000", - "0x0", - "0x480a7ff97fff8000", - "0x480a7ffa7fff8000", - "0x480680017fff8000", - "0x0", - "0x480a7ffb7fff8000", - "0x480a7ffc7fff8000", - "0x208b7fff7fff7ffe", - "0x48297ff980007ffa", + "0x48297ffc80007ffd", "0x20680017fff7fff", "0x4", "0x10780017fff7fff", - "0x66", - "0x480280007ff98000", + "0x90", + "0x480280007ffc8000", "0x20680017fff7fff", - "0x3d", - "0x482680017ff98000", + "0x6d", + "0x482680017ffc8000", "0x1", - "0x480a7ffa7fff8000", + "0x480a7ffd7fff8000", "0x48307ffe80007fff", "0x20680017fff7fff", "0x4", "0x10780017fff7fff", - "0x2d", + "0x5e", "0x480080007ffd8000", "0xa0680017fff8000", "0x12", "0x4824800180007ffe", - "0x10000", + "0x10000000000000000", "0x4844800180008002", "0x8000000000000110000000000000000", "0x4830800080017ffe", - "0x480280017ff77fff", + "0x480280007ffb7fff", "0x482480017ffe8000", - "0xefffffffffffffde000000000000ffff", - "0x480280027ff77fff", - "0x400280037ff77ffb", + "0xefffffffffffffdeffffffffffffffff", + "0x480280017ffb7fff", + "0x400280027ffb7ffb", "0x402480017fff7ffb", "0xffffffffffffffffffffffffffffffff", "0x20680017fff7fff", - "0x13", + "0x44", "0x402780017fff7fff", "0x1", - "0x400280017ff77ffe", + "0x400280007ffb7ffe", "0x482480017ffe8000", - "0xffffffffffffffffffffffffffff0000", - "0x400280027ff77fff", - "0x482680017ff78000", - "0x3", - "0x48127ff67fff8000", - "0x480680017fff8000", - "0x0", - "0x48127ffa7fff8000", - "0x482480017ff68000", + "0xffffffffffffffff0000000000000000", + "0x400280017ffb7fff", + "0x482480017ffa8000", "0x1", - "0x48127ff67fff8000", - "0x10780017fff7fff", - "0x22", - "0x482680017ff78000", + "0x48127ffa7fff8000", + "0x48307ffe80007fff", + "0x20680017fff7fff", "0x4", - "0x482480017ff18000", - "0x7d0", - "0x482480017ff38000", + "0x10780017fff7fff", + "0x2e", + "0x480080007ffd8000", + "0xa0680017fff8000", + "0x12", + "0x4824800180007ffe", + "0x100000000", + "0x4844800180008002", + "0x8000000000000110000000000000000", + "0x4830800080017ffe", + "0x480280027ffb7fff", + "0x482480017ffe8000", + "0xefffffffffffffde00000000ffffffff", + "0x480280037ffb7fff", + "0x400280047ffb7ffb", + "0x402480017fff7ffb", + "0xffffffffffffffffffffffffffffffff", + "0x20680017fff7fff", + "0x16", + "0x402780017fff7fff", + "0x1", + "0x400280027ffb7ffe", + "0x482480017ffe8000", + "0xffffffffffffffffffffffff00000000", + "0x400280037ffb7fff", + "0x40780017fff7fff", + "0x5", + "0x482680017ffb8000", + "0x4", + "0x482480017ff48000", + "0x1", + "0x48127ff47fff8000", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x48127fed7fff8000", + "0x48127ff27fff8000", + "0x208b7fff7fff7ffe", + "0x482680017ffb8000", + "0x5", + "0x482480017ff48000", + "0x1", + "0x48127ff47fff8000", + "0x10780017fff7fff", + "0x3f", + "0x40780017fff7fff", + "0x8", + "0x482680017ffb8000", + "0x2", + "0x48127ff47fff8000", + "0x48127ff47fff8000", + "0x10780017fff7fff", + "0x37", + "0x40780017fff7fff", + "0x6", + "0x482680017ffb8000", + "0x3", + "0x482480017fee8000", + "0x1", + "0x48127fee7fff8000", + "0x10780017fff7fff", + "0x2e", + "0x40780017fff7fff", + "0xe", + "0x480a7ffb7fff8000", + "0x48127fee7fff8000", + "0x48127fee7fff8000", + "0x10780017fff7fff", + "0x27", + "0x40780017fff7fff", + "0x10", + "0x4824800180007fef", + "0x1", + "0x20680017fff7fff", + "0xf", + "0x480a7ffb7fff8000", + "0x482680017ffc8000", + "0x1", + "0x480a7ffd7fff8000", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x1", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x208b7fff7fff7ffe", + "0x480a7ffb7fff8000", + "0x482680017ffc8000", + "0x1", + "0x480a7ffd7fff8000", + "0x480680017fff8000", + "0x1", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x208b7fff7fff7ffe", + "0x40780017fff7fff", + "0x12", + "0x480a7ffb7fff8000", + "0x480a7ffc7fff8000", + "0x480a7ffd7fff8000", + "0x480680017fff8000", + "0x1", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x208b7fff7fff7ffe", + "0xa0680017fff8000", + "0x7", + "0x482680017ff88000", + "0xfffffffffffffffffffffffffffff182", + "0x400280007ff77fff", + "0x10780017fff7fff", + "0x90", + "0x4825800180007ff8", + "0xe7e", + "0x400280007ff77fff", + "0x20780017fff7ffd", + "0xf", + "0x482680017ff78000", + "0x1", + "0x482480017ffe8000", + "0x1202", + "0x480680017fff8000", + "0x0", + "0x480a7ff97fff8000", + "0x480a7ffa7fff8000", + "0x480680017fff8000", + "0x0", + "0x480a7ffb7fff8000", + "0x480a7ffc7fff8000", + "0x208b7fff7fff7ffe", + "0x48297ff980007ffa", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0x66", + "0x480280007ff98000", + "0x20680017fff7fff", + "0x3d", + "0x482680017ff98000", + "0x1", + "0x480a7ffa7fff8000", + "0x48307ffe80007fff", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0x2d", + "0x480080007ffd8000", + "0xa0680017fff8000", + "0x12", + "0x4824800180007ffe", + "0x10000", + "0x4844800180008002", + "0x8000000000000110000000000000000", + "0x4830800080017ffe", + "0x480280017ff77fff", + "0x482480017ffe8000", + "0xefffffffffffffde000000000000ffff", + "0x480280027ff77fff", + "0x400280037ff77ffb", + "0x402480017fff7ffb", + "0xffffffffffffffffffffffffffffffff", + "0x20680017fff7fff", + "0x13", + "0x402780017fff7fff", + "0x1", + "0x400280017ff77ffe", + "0x482480017ffe8000", + "0xffffffffffffffffffffffffffff0000", + "0x400280027ff77fff", + "0x482680017ff78000", + "0x3", + "0x48127ff67fff8000", + "0x480680017fff8000", + "0x0", + "0x48127ffa7fff8000", + "0x482480017ff68000", + "0x1", + "0x48127ff67fff8000", + "0x10780017fff7fff", + "0x22", + "0x482680017ff78000", + "0x4", + "0x482480017ff18000", + "0x7d0", + "0x482480017ff38000", "0x1", "0x48127ff37fff8000", "0x10780017fff7fff", @@ -4193,7 +4750,7 @@ "0x0", "0x208b7fff7fff7ffe", "0x1104800180018000", - "0x800000000000010fffffffffffffffffffffffffffffffffffffffffffffc25", + "0x800000000000010fffffffffffffffffffffffffffffffffffffffffffffb84", "0x482680017ff78000", "0x1", "0x480a7ff87fff8000", @@ -4266,7 +4823,7 @@ "0x480a7ffd7fff8000", "0x208b7fff7fff7ffe", "0x1104800180018000", - "0x800000000000010fffffffffffffffffffffffffffffffffffffffffffffbdc", + "0x800000000000010fffffffffffffffffffffffffffffffffffffffffffffb3b", "0x482680017ff88000", "0x1", "0x480a7ff97fff8000", @@ -4279,167 +4836,6 @@ "0x20680017fff7fff", "0x4", "0x10780017fff7fff", - "0x90", - "0x480280007ffc8000", - "0x20680017fff7fff", - "0x6d", - "0x482680017ffc8000", - "0x1", - "0x480a7ffd7fff8000", - "0x48307ffe80007fff", - "0x20680017fff7fff", - "0x4", - "0x10780017fff7fff", - "0x5e", - "0x480080007ffd8000", - "0xa0680017fff8000", - "0x12", - "0x4824800180007ffe", - "0x10000000000000000", - "0x4844800180008002", - "0x8000000000000110000000000000000", - "0x4830800080017ffe", - "0x480280007ffb7fff", - "0x482480017ffe8000", - "0xefffffffffffffdeffffffffffffffff", - "0x480280017ffb7fff", - "0x400280027ffb7ffb", - "0x402480017fff7ffb", - "0xffffffffffffffffffffffffffffffff", - "0x20680017fff7fff", - "0x44", - "0x402780017fff7fff", - "0x1", - "0x400280007ffb7ffe", - "0x482480017ffe8000", - "0xffffffffffffffff0000000000000000", - "0x400280017ffb7fff", - "0x482480017ffa8000", - "0x1", - "0x48127ffa7fff8000", - "0x48307ffe80007fff", - "0x20680017fff7fff", - "0x4", - "0x10780017fff7fff", - "0x2e", - "0x480080007ffd8000", - "0xa0680017fff8000", - "0x12", - "0x4824800180007ffe", - "0x100000000", - "0x4844800180008002", - "0x8000000000000110000000000000000", - "0x4830800080017ffe", - "0x480280027ffb7fff", - "0x482480017ffe8000", - "0xefffffffffffffde00000000ffffffff", - "0x480280037ffb7fff", - "0x400280047ffb7ffb", - "0x402480017fff7ffb", - "0xffffffffffffffffffffffffffffffff", - "0x20680017fff7fff", - "0x16", - "0x402780017fff7fff", - "0x1", - "0x400280027ffb7ffe", - "0x482480017ffe8000", - "0xffffffffffffffffffffffff00000000", - "0x400280037ffb7fff", - "0x40780017fff7fff", - "0x5", - "0x482680017ffb8000", - "0x4", - "0x482480017ff48000", - "0x1", - "0x48127ff47fff8000", - "0x480680017fff8000", - "0x0", - "0x480680017fff8000", - "0x0", - "0x48127fed7fff8000", - "0x48127ff27fff8000", - "0x208b7fff7fff7ffe", - "0x482680017ffb8000", - "0x5", - "0x482480017ff48000", - "0x1", - "0x48127ff47fff8000", - "0x10780017fff7fff", - "0x3f", - "0x40780017fff7fff", - "0x8", - "0x482680017ffb8000", - "0x2", - "0x48127ff47fff8000", - "0x48127ff47fff8000", - "0x10780017fff7fff", - "0x37", - "0x40780017fff7fff", - "0x6", - "0x482680017ffb8000", - "0x3", - "0x482480017fee8000", - "0x1", - "0x48127fee7fff8000", - "0x10780017fff7fff", - "0x2e", - "0x40780017fff7fff", - "0xe", - "0x480a7ffb7fff8000", - "0x48127fee7fff8000", - "0x48127fee7fff8000", - "0x10780017fff7fff", - "0x27", - "0x40780017fff7fff", - "0x10", - "0x4824800180007fef", - "0x1", - "0x20680017fff7fff", - "0xf", - "0x480a7ffb7fff8000", - "0x482680017ffc8000", - "0x1", - "0x480a7ffd7fff8000", - "0x480680017fff8000", - "0x0", - "0x480680017fff8000", - "0x1", - "0x480680017fff8000", - "0x0", - "0x480680017fff8000", - "0x0", - "0x208b7fff7fff7ffe", - "0x480a7ffb7fff8000", - "0x482680017ffc8000", - "0x1", - "0x480a7ffd7fff8000", - "0x480680017fff8000", - "0x1", - "0x480680017fff8000", - "0x0", - "0x480680017fff8000", - "0x0", - "0x480680017fff8000", - "0x0", - "0x208b7fff7fff7ffe", - "0x40780017fff7fff", - "0x12", - "0x480a7ffb7fff8000", - "0x480a7ffc7fff8000", - "0x480a7ffd7fff8000", - "0x480680017fff8000", - "0x1", - "0x480680017fff8000", - "0x0", - "0x480680017fff8000", - "0x0", - "0x480680017fff8000", - "0x0", - "0x208b7fff7fff7ffe", - "0x48297ffc80007ffd", - "0x20680017fff7fff", - "0x4", - "0x10780017fff7fff", "0xac", "0x480280007ffc8000", "0x20680017fff7fff", @@ -4463,7 +4859,7 @@ "0x48127ffa7fff8000", "0x480080007ff68000", "0x1104800180018000", - "0x6eb", + "0x7bd", "0x20680017fff7ffa", "0x19", "0x20680017fff7ffd", @@ -4534,7 +4930,7 @@ "0x48127ffa7fff8000", "0x480080007ff68000", "0x1104800180018000", - "0x79f", + "0x871", "0x20680017fff7ffa", "0x18", "0x20680017fff7ffd", @@ -4876,7 +5272,7 @@ "0x1", "0x480a7ffd7fff8000", "0x1104800180018000", - "0x5be", + "0x690", "0x20680017fff7ff9", "0x1a", "0x20680017fff7ffc", @@ -4930,7 +5326,7 @@ "0x1", "0x480a7ffd7fff8000", "0x1104800180018000", - "0x683", + "0x755", "0x20680017fff7ff9", "0x28", "0x20680017fff7ffc", @@ -5066,17 +5462,190 @@ "0x0", "0x208b7fff7fff7ffe", "0x40780017fff7fff", - "0xf", - "0x4824800180007ff0", + "0xf", + "0x4824800180007ff0", + "0x1", + "0x20680017fff7fff", + "0x3b", + "0x48307fed80007fee", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0x2f", + "0x480080007fec8000", + "0xa0680017fff8000", + "0x12", + "0x4824800180007ffe", + "0x100000000", + "0x4844800180008002", + "0x8000000000000110000000000000000", + "0x4830800080017ffe", + "0x480280007ffb7fff", + "0x482480017ffe8000", + "0xefffffffffffffde00000000ffffffff", + "0x480280017ffb7fff", + "0x400280027ffb7ffb", + "0x402480017fff7ffb", + "0xffffffffffffffffffffffffffffffff", + "0x20680017fff7fff", + "0x17", + "0x402780017fff7fff", + "0x1", + "0x400280007ffb7ffe", + "0x482480017ffe8000", + "0xffffffffffffffffffffffff00000000", + "0x400280017ffb7fff", + "0x40780017fff7fff", + "0x5", + "0x482680017ffb8000", + "0x2", + "0x482480017fe38000", + "0x1", + "0x48127fe37fff8000", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x1", + "0x480680017fff8000", + "0x0", + "0x48127ff27fff8000", + "0x208b7fff7fff7ffe", + "0x482680017ffb8000", + "0x3", + "0x482480017fe38000", + "0x1", + "0x48127fe37fff8000", + "0x10780017fff7fff", + "0x1c", + "0x40780017fff7fff", + "0x8", + "0x480a7ffb7fff8000", + "0x48127fe37fff8000", + "0x48127fe37fff8000", + "0x10780017fff7fff", + "0x15", + "0x40780017fff7fff", + "0x9", + "0x480a7ffb7fff8000", + "0x48127fe37fff8000", + "0x48127fe37fff8000", + "0x480680017fff8000", + "0x1", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x208b7fff7fff7ffe", + "0x40780017fff7fff", + "0x1c", + "0x480a7ffb7fff8000", + "0x480a7ffc7fff8000", + "0x480a7ffd7fff8000", + "0x480680017fff8000", + "0x1", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x208b7fff7fff7ffe", + "0x48297ffc80007ffd", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0xbd", + "0x480280007ffc8000", + "0x20680017fff7fff", + "0x40", + "0x40780017fff7fff", + "0x5", + "0x482680017ffc8000", + "0x1", + "0x480a7ffd7fff8000", + "0x48307ffe80007fff", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0x2f", + "0x480080007ffd8000", + "0xa0680017fff8000", + "0x12", + "0x4824800180007ffe", + "0x100", + "0x4844800180008002", + "0x8000000000000110000000000000000", + "0x4830800080017ffe", + "0x480280007ffb7fff", + "0x482480017ffe8000", + "0xefffffffffffffde00000000000000ff", + "0x480280017ffb7fff", + "0x400280027ffb7ffb", + "0x402480017fff7ffb", + "0xffffffffffffffffffffffffffffffff", + "0x20680017fff7fff", + "0x17", + "0x402780017fff7fff", + "0x1", + "0x400280007ffb7ffe", + "0x482480017ffe8000", + "0xffffffffffffffffffffffffffffff00", + "0x400280017ffb7fff", + "0x40780017fff7fff", + "0x5", + "0x482680017ffb8000", + "0x2", + "0x482480017ff48000", + "0x1", + "0x48127ff47fff8000", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x48127ff27fff8000", + "0x208b7fff7fff7ffe", + "0x482680017ffb8000", + "0x3", + "0x482480017ff48000", + "0x1", + "0x48127ff47fff8000", + "0x10780017fff7fff", + "0x88", + "0x40780017fff7fff", + "0x8", + "0x480a7ffb7fff8000", + "0x48127ff47fff8000", + "0x48127ff47fff8000", + "0x10780017fff7fff", + "0x81", + "0x4824800180007fff", "0x1", "0x20680017fff7fff", - "0x3b", - "0x48307fed80007fee", + "0x69", + "0x482680017ffc8000", + "0x1", + "0x480a7ffd7fff8000", + "0x48307ffe80007fff", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0x5a", + "0x480080007ffd8000", + "0x20680017fff7fff", + "0x3e", + "0x482480017ffc8000", + "0x1", + "0x48127ffc7fff8000", + "0x48307ffe80007fff", "0x20680017fff7fff", "0x4", "0x10780017fff7fff", "0x2f", - "0x480080007fec8000", + "0x480080007ffd8000", "0xa0680017fff8000", "0x12", "0x4824800180007ffe", @@ -5103,9 +5672,9 @@ "0x5", "0x482680017ffb8000", "0x2", - "0x482480017fe38000", + "0x482480017ff48000", "0x1", - "0x48127fe37fff8000", + "0x48127ff47fff8000", "0x480680017fff8000", "0x0", "0x480680017fff8000", @@ -5116,23 +5685,56 @@ "0x208b7fff7fff7ffe", "0x482680017ffb8000", "0x3", - "0x482480017fe38000", + "0x482480017ff48000", "0x1", - "0x48127fe37fff8000", + "0x48127ff47fff8000", "0x10780017fff7fff", - "0x1c", + "0x27", "0x40780017fff7fff", "0x8", "0x480a7ffb7fff8000", - "0x48127fe37fff8000", - "0x48127fe37fff8000", + "0x48127ff47fff8000", + "0x48127ff47fff8000", "0x10780017fff7fff", - "0x15", + "0x20", "0x40780017fff7fff", - "0x9", + "0xa", + "0x4824800180007ff5", + "0x1", + "0x20680017fff7fff", + "0xf", "0x480a7ffb7fff8000", - "0x48127fe37fff8000", - "0x48127fe37fff8000", + "0x482480017ff08000", + "0x1", + "0x48127ff07fff8000", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x1", + "0x480680017fff8000", + "0x1", + "0x480680017fff8000", + "0x0", + "0x208b7fff7fff7ffe", + "0x480a7ffb7fff8000", + "0x482480017ff08000", + "0x1", + "0x48127ff07fff8000", + "0x10780017fff7fff", + "0x1d", + "0x40780017fff7fff", + "0xc", + "0x480a7ffb7fff8000", + "0x48127ff07fff8000", + "0x48127ff07fff8000", + "0x10780017fff7fff", + "0x16", + "0x40780017fff7fff", + "0xf", + "0x480a7ffb7fff8000", + "0x482680017ffc8000", + "0x1", + "0x480a7ffd7fff8000", "0x480680017fff8000", "0x1", "0x480680017fff8000", @@ -5143,7 +5745,7 @@ "0x0", "0x208b7fff7fff7ffe", "0x40780017fff7fff", - "0x1c", + "0x11", "0x480a7ffb7fff8000", "0x480a7ffc7fff8000", "0x480a7ffd7fff8000", @@ -5160,12 +5762,12 @@ "0x20680017fff7fff", "0x4", "0x10780017fff7fff", - "0xbd", + "0xc1", "0x480280007ffc8000", "0x20680017fff7fff", "0x40", "0x40780017fff7fff", - "0x5", + "0x7", "0x482680017ffc8000", "0x1", "0x480a7ffd7fff8000", @@ -5218,18 +5820,18 @@ "0x1", "0x48127ff47fff8000", "0x10780017fff7fff", - "0x88", + "0x8c", "0x40780017fff7fff", "0x8", "0x480a7ffb7fff8000", "0x48127ff47fff8000", "0x48127ff47fff8000", "0x10780017fff7fff", - "0x81", + "0x85", "0x4824800180007fff", "0x1", "0x20680017fff7fff", - "0x69", + "0x6d", "0x482680017ffc8000", "0x1", "0x480a7ffd7fff8000", @@ -5237,18 +5839,38 @@ "0x20680017fff7fff", "0x4", "0x10780017fff7fff", - "0x5a", + "0x5e", "0x480080007ffd8000", + "0xa0680017fff8000", + "0x12", + "0x4824800180007ffe", + "0x10000000000000000", + "0x4844800180008002", + "0x8000000000000110000000000000000", + "0x4830800080017ffe", + "0x480280007ffb7fff", + "0x482480017ffe8000", + "0xefffffffffffffdeffffffffffffffff", + "0x480280017ffb7fff", + "0x400280027ffb7ffb", + "0x402480017fff7ffb", + "0xffffffffffffffffffffffffffffffff", "0x20680017fff7fff", - "0x3e", - "0x482480017ffc8000", + "0x44", + "0x402780017fff7fff", "0x1", - "0x48127ffc7fff8000", + "0x400280007ffb7ffe", + "0x482480017ffe8000", + "0xffffffffffffffff0000000000000000", + "0x400280017ffb7fff", + "0x482480017ffa8000", + "0x1", + "0x48127ffa7fff8000", "0x48307ffe80007fff", "0x20680017fff7fff", "0x4", "0x10780017fff7fff", - "0x2f", + "0x2e", "0x480080007ffd8000", "0xa0680017fff8000", "0x12", @@ -5257,25 +5879,25 @@ "0x4844800180008002", "0x8000000000000110000000000000000", "0x4830800080017ffe", - "0x480280007ffb7fff", + "0x480280027ffb7fff", "0x482480017ffe8000", "0xefffffffffffffde00000000ffffffff", - "0x480280017ffb7fff", - "0x400280027ffb7ffb", + "0x480280037ffb7fff", + "0x400280047ffb7ffb", "0x402480017fff7ffb", "0xffffffffffffffffffffffffffffffff", "0x20680017fff7fff", - "0x17", + "0x16", "0x402780017fff7fff", "0x1", - "0x400280007ffb7ffe", + "0x400280027ffb7ffe", "0x482480017ffe8000", "0xffffffffffffffffffffffff00000000", - "0x400280017ffb7fff", + "0x400280037ffb7fff", "0x40780017fff7fff", "0x5", "0x482680017ffb8000", - "0x2", + "0x4", "0x482480017ff48000", "0x1", "0x48127ff47fff8000", @@ -5283,58 +5905,42 @@ "0x0", "0x480680017fff8000", "0x1", - "0x480680017fff8000", - "0x0", + "0x48127fed7fff8000", "0x48127ff27fff8000", "0x208b7fff7fff7ffe", "0x482680017ffb8000", - "0x3", + "0x5", "0x482480017ff48000", "0x1", "0x48127ff47fff8000", "0x10780017fff7fff", - "0x27", + "0x2e", "0x40780017fff7fff", "0x8", - "0x480a7ffb7fff8000", + "0x482680017ffb8000", + "0x2", "0x48127ff47fff8000", "0x48127ff47fff8000", "0x10780017fff7fff", - "0x20", + "0x26", "0x40780017fff7fff", - "0xa", - "0x4824800180007ff5", - "0x1", - "0x20680017fff7fff", - "0xf", - "0x480a7ffb7fff8000", - "0x482480017ff08000", - "0x1", - "0x48127ff07fff8000", - "0x480680017fff8000", - "0x0", - "0x480680017fff8000", - "0x1", - "0x480680017fff8000", - "0x1", - "0x480680017fff8000", - "0x0", - "0x208b7fff7fff7ffe", - "0x480a7ffb7fff8000", - "0x482480017ff08000", + "0x6", + "0x482680017ffb8000", + "0x3", + "0x482480017fee8000", "0x1", - "0x48127ff07fff8000", + "0x48127fee7fff8000", "0x10780017fff7fff", "0x1d", "0x40780017fff7fff", - "0xc", + "0xe", "0x480a7ffb7fff8000", - "0x48127ff07fff8000", - "0x48127ff07fff8000", + "0x48127fee7fff8000", + "0x48127fee7fff8000", "0x10780017fff7fff", "0x16", "0x40780017fff7fff", - "0xf", + "0x11", "0x480a7ffb7fff8000", "0x482680017ffc8000", "0x1", @@ -5349,7 +5955,7 @@ "0x0", "0x208b7fff7fff7ffe", "0x40780017fff7fff", - "0x11", + "0x13", "0x480a7ffb7fff8000", "0x480a7ffc7fff8000", "0x480a7ffd7fff8000", @@ -6330,7 +6936,7 @@ "0x0", "0x208b7fff7fff7ffe", "0x1104800180018000", - "0x800000000000010fffffffffffffffffffffffffffffffffffffffffffff3cc", + "0x800000000000010fffffffffffffffffffffffffffffffffffffffffffff2fa", "0x482680017ff78000", "0x1", "0x480a7ff87fff8000", @@ -6581,7 +7187,7 @@ "0x0", "0x208b7fff7fff7ffe", "0x1104800180018000", - "0x800000000000010fffffffffffffffffffffffffffffffffffffffffffff2d1", + "0x800000000000010fffffffffffffffffffffffffffffffffffffffffffff1ff", "0x482680017ff78000", "0x1", "0x480a7ff87fff8000", @@ -6990,7 +7596,7 @@ "0x0", "0x208b7fff7fff7ffe", "0x1104800180018000", - "0x800000000000010fffffffffffffffffffffffffffffffffffffffffffff138", + "0x800000000000010fffffffffffffffffffffffffffffffffffffffffffff066", "0x482680017ff78000", "0x1", "0x480a7ff87fff8000", @@ -7165,9 +7771,9 @@ "0x208b7fff7fff7ffe" ], "bytecode_segment_lengths": [ - 191, 144, 168, 144, 131, 181, 146, 164, 113, 113, 145, 115, 147, 131, 130, 92, 174, 96, 75, 97, - 123, 97, 113, 162, 5, 5, 5, 141, 48, 158, 127, 48, 157, 155, 165, 67, 161, 191, 48, 187, 163, - 131, 206, 158, 128, 139, 128, 156, 155, 7, 112, 139, 112, 139, 158, 112, 158 + 191, 144, 168, 144, 131, 181, 113, 146, 164, 113, 113, 145, 115, 147, 131, 130, 114, 92, 174, + 96, 75, 97, 123, 97, 113, 162, 169, 5, 5, 5, 141, 48, 158, 127, 48, 157, 155, 161, 165, 67, 191, + 48, 187, 163, 131, 206, 210, 158, 128, 139, 128, 156, 155, 7, 112, 139, 112, 139, 158, 112, 158 ], "hints": [ [ @@ -7364,17 +7970,74 @@ ] ], [ - 418, + 418, + [ + { + "TestLessThanOrEqual": { + "lhs": { + "Immediate": "0x0" + }, + "rhs": { + "Deref": { + "register": "AP", + "offset": -12 + } + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 430, + [ + { + "AllocSegment": { + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 503, + [ + { + "TestLessThanOrEqual": { + "lhs": { + "Immediate": "0x9f6" + }, + "rhs": { + "Deref": { + "register": "FP", + "offset": -6 + } + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 544, [ { "TestLessThanOrEqual": { "lhs": { - "Immediate": "0x0" + "Immediate": "0xa0a" }, "rhs": { "Deref": { "register": "AP", - "offset": -12 + "offset": -14 } }, "dst": { @@ -7386,7 +8049,7 @@ ] ], [ - 430, + 556, [ { "AllocSegment": { @@ -7399,12 +8062,12 @@ ] ], [ - 503, + 647, [ { "TestLessThanOrEqual": { "lhs": { - "Immediate": "0x9f6" + "Immediate": "0x0" }, "rhs": { "Deref": { @@ -7421,17 +8084,17 @@ ] ], [ - 544, + 685, [ { "TestLessThanOrEqual": { "lhs": { - "Immediate": "0xa0a" + "Immediate": "0x0" }, "rhs": { "Deref": { "register": "AP", - "offset": -14 + "offset": -35 } }, "dst": { @@ -7443,7 +8106,7 @@ ] ], [ - 556, + 697, [ { "AllocSegment": { @@ -7456,7 +8119,7 @@ ] ], [ - 647, + 778, [ { "TestLessThanOrEqual": { @@ -7478,7 +8141,7 @@ ] ], [ - 685, + 858, [ { "TestLessThanOrEqual": { @@ -7488,7 +8151,7 @@ "rhs": { "Deref": { "register": "AP", - "offset": -35 + "offset": -11 } }, "dst": { @@ -7500,7 +8163,7 @@ ] ], [ - 697, + 870, [ { "AllocSegment": { @@ -7513,7 +8176,7 @@ ] ], [ - 778, + 959, [ { "TestLessThanOrEqual": { @@ -7535,7 +8198,7 @@ ] ], [ - 858, + 997, [ { "TestLessThanOrEqual": { @@ -7545,7 +8208,7 @@ "rhs": { "Deref": { "register": "AP", - "offset": -11 + "offset": -37 } }, "dst": { @@ -7557,7 +8220,7 @@ ] ], [ - 870, + 1009, [ { "AllocSegment": { @@ -7570,7 +8233,7 @@ ] ], [ - 959, + 1072, [ { "TestLessThanOrEqual": { @@ -7592,7 +8255,7 @@ ] ], [ - 974, + 1087, [ { "AllocSegment": { @@ -7605,7 +8268,7 @@ ] ], [ - 1011, + 1124, [ { "TestLessThanOrEqual": { @@ -7627,7 +8290,7 @@ ] ], [ - 1024, + 1137, [ { "AllocSegment": { @@ -7640,7 +8303,7 @@ ] ], [ - 1105, + 1218, [ { "TestLessThanOrEqual": { @@ -7662,7 +8325,7 @@ ] ], [ - 1132, + 1245, [ { "TestLessThan": { @@ -7690,7 +8353,7 @@ ] ], [ - 1136, + 1249, [ { "LinearSplit": { @@ -7719,7 +8382,7 @@ ] ], [ - 1206, + 1319, [ { "TestLessThanOrEqual": { @@ -7741,7 +8404,7 @@ ] ], [ - 1218, + 1331, [ { "AllocSegment": { @@ -7754,7 +8417,7 @@ ] ], [ - 1269, + 1382, [ { "TestLessThanOrEqual": { @@ -7776,7 +8439,7 @@ ] ], [ - 1307, + 1420, [ { "TestLessThanOrEqual": { @@ -7798,7 +8461,7 @@ ] ], [ - 1319, + 1432, [ { "AllocSegment": { @@ -7811,7 +8474,7 @@ ] ], [ - 1382, + 1495, [ { "TestLessThanOrEqual": { @@ -7833,7 +8496,7 @@ ] ], [ - 1420, + 1533, [ { "TestLessThanOrEqual": { @@ -7855,7 +8518,7 @@ ] ], [ - 1432, + 1545, [ { "AllocSegment": { @@ -7868,7 +8531,7 @@ ] ], [ - 1495, + 1608, [ { "TestLessThanOrEqual": { @@ -7890,7 +8553,7 @@ ] ], [ - 1536, + 1649, [ { "TestLessThanOrEqual": { @@ -7912,7 +8575,7 @@ ] ], [ - 1548, + 1661, [ { "AllocSegment": { @@ -7925,7 +8588,7 @@ ] ], [ - 1640, + 1753, [ { "TestLessThanOrEqual": { @@ -7947,7 +8610,7 @@ ] ], [ - 1678, + 1791, [ { "TestLessThanOrEqual": { @@ -7969,7 +8632,7 @@ ] ], [ - 1690, + 1803, [ { "AllocSegment": { @@ -7982,7 +8645,7 @@ ] ], [ - 1755, + 1868, [ { "TestLessThanOrEqual": { @@ -8004,7 +8667,7 @@ ] ], [ - 1796, + 1909, [ { "TestLessThanOrEqual": { @@ -8026,7 +8689,7 @@ ] ], [ - 1808, + 1921, [ { "AllocSegment": { @@ -8039,7 +8702,7 @@ ] ], [ - 1902, + 2015, [ { "TestLessThanOrEqual": { @@ -8061,7 +8724,7 @@ ] ], [ - 1940, + 2053, [ { "TestLessThanOrEqual": { @@ -8083,7 +8746,7 @@ ] ], [ - 1952, + 2065, [ { "AllocSegment": { @@ -8096,7 +8759,7 @@ ] ], [ - 2033, + 2146, [ { "TestLessThanOrEqual": { @@ -8118,7 +8781,7 @@ ] ], [ - 2071, + 2184, [ { "TestLessThanOrEqual": { @@ -8140,7 +8803,64 @@ ] ], [ - 2083, + 2196, + [ + { + "AllocSegment": { + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 2276, + [ + { + "TestLessThanOrEqual": { + "lhs": { + "Immediate": "0x0" + }, + "rhs": { + "Deref": { + "register": "FP", + "offset": -6 + } + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 2314, + [ + { + "TestLessThanOrEqual": { + "lhs": { + "Immediate": "0x0" + }, + "rhs": { + "Deref": { + "register": "AP", + "offset": -38 + } + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 2326, [ { "AllocSegment": { @@ -8153,7 +8873,7 @@ ] ], [ - 2163, + 2390, [ { "TestLessThanOrEqual": { @@ -8175,7 +8895,7 @@ ] ], [ - 2201, + 2428, [ { "TestLessThanOrEqual": { @@ -8197,7 +8917,7 @@ ] ], [ - 2213, + 2440, [ { "AllocSegment": { @@ -8210,7 +8930,7 @@ ] ], [ - 2255, + 2482, [ { "TestLessThanOrEqual": { @@ -8232,7 +8952,7 @@ ] ], [ - 2271, + 2498, [ { "TestLessThan": { @@ -8260,7 +8980,7 @@ ] ], [ - 2275, + 2502, [ { "LinearSplit": { @@ -8289,7 +9009,7 @@ ] ], [ - 2302, + 2529, [ { "TestLessThan": { @@ -8317,7 +9037,7 @@ ] ], [ - 2306, + 2533, [ { "LinearSplit": { @@ -8346,7 +9066,7 @@ ] ], [ - 2348, + 2575, [ { "TestLessThanOrEqual": { @@ -8368,7 +9088,7 @@ ] ], [ - 2362, + 2589, [ { "AllocSegment": { @@ -8381,7 +9101,7 @@ ] ], [ - 2429, + 2656, [ { "TestLessThanOrEqual": { @@ -8403,7 +9123,7 @@ ] ], [ - 2467, + 2694, [ { "TestLessThanOrEqual": { @@ -8425,7 +9145,7 @@ ] ], [ - 2479, + 2706, [ { "AllocSegment": { @@ -8438,7 +9158,7 @@ ] ], [ - 2525, + 2752, [ { "TestLessThanOrEqual": { @@ -8460,7 +9180,7 @@ ] ], [ - 2556, + 2783, [ { "TestLessThanOrEqual": { @@ -8482,7 +9202,7 @@ ] ], [ - 2568, + 2795, [ { "AllocSegment": { @@ -8495,7 +9215,7 @@ ] ], [ - 2600, + 2827, [ { "TestLessThanOrEqual": { @@ -8517,7 +9237,7 @@ ] ], [ - 2638, + 2865, [ { "TestLessThanOrEqual": { @@ -8539,7 +9259,7 @@ ] ], [ - 2650, + 2877, [ { "AllocSegment": { @@ -8552,7 +9272,7 @@ ] ], [ - 2697, + 2924, [ { "TestLessThanOrEqual": { @@ -8574,7 +9294,7 @@ ] ], [ - 2738, + 2965, [ { "TestLessThanOrEqual": { @@ -8596,7 +9316,7 @@ ] ], [ - 2750, + 2977, [ { "AllocSegment": { @@ -8609,7 +9329,7 @@ ] ], [ - 2820, + 3047, [ { "TestLessThanOrEqual": { @@ -8631,7 +9351,7 @@ ] ], [ - 2858, + 3085, [ { "TestLessThanOrEqual": { @@ -8653,7 +9373,7 @@ ] ], [ - 2870, + 3097, [ { "AllocSegment": { @@ -8666,7 +9386,7 @@ ] ], [ - 2917, + 3144, [ { "TestLessThanOrEqual": { @@ -8688,7 +9408,7 @@ ] ], [ - 2955, + 3182, [ { "TestLessThanOrEqual": { @@ -8710,7 +9430,112 @@ ] ], [ - 2967, + 3194, + [ + { + "AllocSegment": { + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 3257, + [ + { + "TestLessThanOrEqual": { + "lhs": { + "Immediate": "0x0" + }, + "rhs": { + "Deref": { + "register": "FP", + "offset": -6 + } + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 3273, + [ + { + "TestLessThan": { + "lhs": { + "Deref": { + "register": "AP", + "offset": -1 + } + }, + "rhs": { + "Immediate": "0x100000000000000000000000000000000" + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 3275, + [ + { + "DivMod": { + "lhs": { + "Deref": { + "register": "AP", + "offset": -2 + } + }, + "rhs": { + "Immediate": "0x100000000000000000000000000000000" + }, + "quotient": { + "register": "AP", + "offset": 3 + }, + "remainder": { + "register": "AP", + "offset": 4 + } + } + } + ] + ], + [ + 3325, + [ + { + "TestLessThanOrEqual": { + "lhs": { + "Immediate": "0x0" + }, + "rhs": { + "Deref": { + "register": "AP", + "offset": -34 + } + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 3340, [ { "AllocSegment": { @@ -8723,7 +9548,7 @@ ] ], [ - 3030, + 3419, [ { "TestLessThanOrEqual": { @@ -8745,18 +9570,81 @@ ] ], [ - 3046, + 3435, [ { "TestLessThan": { "lhs": { + "BinOp": { + "op": "Add", + "a": { + "register": "AP", + "offset": -1 + }, + "b": { + "Immediate": "0x0" + } + } + }, + "rhs": { + "Immediate": "0x10000000000000000" + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 3439, + [ + { + "LinearSplit": { + "value": { "Deref": { "register": "AP", "offset": -1 } }, + "scalar": { + "Immediate": "0x8000000000000110000000000000000" + }, + "max_x": { + "Immediate": "0xfffffffffffffffffffffffffffffffe" + }, + "x": { + "register": "AP", + "offset": 0 + }, + "y": { + "register": "AP", + "offset": 1 + } + } + } + ] + ], + [ + 3466, + [ + { + "TestLessThan": { + "lhs": { + "BinOp": { + "op": "Add", + "a": { + "register": "AP", + "offset": -1 + }, + "b": { + "Immediate": "0x0" + } + } + }, "rhs": { - "Immediate": "0x100000000000000000000000000000000" + "Immediate": "0x100000000" }, "dst": { "register": "AP", @@ -8767,33 +9655,36 @@ ] ], [ - 3048, + 3470, [ { - "DivMod": { - "lhs": { + "LinearSplit": { + "value": { "Deref": { "register": "AP", - "offset": -2 + "offset": -1 } }, - "rhs": { - "Immediate": "0x100000000000000000000000000000000" + "scalar": { + "Immediate": "0x8000000000000110000000000000000" }, - "quotient": { + "max_x": { + "Immediate": "0xfffffffffffffffffffffffffffffffe" + }, + "x": { "register": "AP", - "offset": 3 + "offset": 0 }, - "remainder": { + "y": { "register": "AP", - "offset": 4 + "offset": 1 } } } ] ], [ - 3098, + 3512, [ { "TestLessThanOrEqual": { @@ -8803,7 +9694,7 @@ "rhs": { "Deref": { "register": "AP", - "offset": -34 + "offset": -18 } }, "dst": { @@ -8815,7 +9706,7 @@ ] ], [ - 3113, + 3524, [ { "AllocSegment": { @@ -8828,7 +9719,7 @@ ] ], [ - 3223, + 3619, [ { "AllocSegment": { @@ -8841,7 +9732,7 @@ ] ], [ - 3348, + 3744, [ { "TestLessThanOrEqual": { @@ -8863,7 +9754,7 @@ ] ], [ - 3402, + 3798, [ { "TestLessThan": { @@ -8891,7 +9782,7 @@ ] ], [ - 3406, + 3802, [ { "LinearSplit": { @@ -8920,7 +9811,7 @@ ] ], [ - 3433, + 3829, [ { "TestLessThan": { @@ -8948,7 +9839,7 @@ ] ], [ - 3437, + 3833, [ { "LinearSplit": { @@ -8977,7 +9868,7 @@ ] ], [ - 3464, + 3860, [ { "TestLessThan": { @@ -9005,7 +9896,7 @@ ] ], [ - 3468, + 3864, [ { "LinearSplit": { @@ -9034,7 +9925,7 @@ ] ], [ - 3681, + 4077, [ { "TestLessThanOrEqual": { @@ -9056,7 +9947,7 @@ ] ], [ - 3757, + 4153, [ { "TestLessThan": { @@ -9084,7 +9975,7 @@ ] ], [ - 3761, + 4157, [ { "LinearSplit": { @@ -9113,7 +10004,7 @@ ] ], [ - 3905, + 4301, [ { "TestLessThan": { @@ -9141,7 +10032,7 @@ ] ], [ - 3909, + 4305, [ { "LinearSplit": { @@ -9170,7 +10061,7 @@ ] ], [ - 3967, + 4363, [ { "TestLessThan": { @@ -9198,7 +10089,7 @@ ] ], [ - 3971, + 4367, [ { "LinearSplit": { @@ -9227,29 +10118,64 @@ ] ], [ - 4041, + 4454, [ { - "TestLessThanOrEqual": { + "TestLessThan": { "lhs": { - "Immediate": "0xe7e" + "BinOp": { + "op": "Add", + "a": { + "register": "AP", + "offset": -1 + }, + "b": { + "Immediate": "0x0" + } + } }, "rhs": { + "Immediate": "0x10000000000000000" + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 4458, + [ + { + "LinearSplit": { + "value": { "Deref": { - "register": "FP", - "offset": -8 + "register": "AP", + "offset": -1 } }, - "dst": { + "scalar": { + "Immediate": "0x8000000000000110000000000000000" + }, + "max_x": { + "Immediate": "0xfffffffffffffffffffffffffffffffe" + }, + "x": { "register": "AP", "offset": 0 + }, + "y": { + "register": "AP", + "offset": 1 } } } ] ], [ - 4083, + 4485, [ { "TestLessThan": { @@ -9266,7 +10192,7 @@ } }, "rhs": { - "Immediate": "0x10000" + "Immediate": "0x100000000" }, "dst": { "register": "AP", @@ -9277,7 +10203,7 @@ ] ], [ - 4087, + 4489, [ { "LinearSplit": { @@ -9306,17 +10232,17 @@ ] ], [ - 4206, + 4598, [ { "TestLessThanOrEqual": { "lhs": { - "Immediate": "0x942" + "Immediate": "0xe7e" }, "rhs": { "Deref": { "register": "FP", - "offset": -7 + "offset": -8 } }, "dst": { @@ -9328,7 +10254,7 @@ ] ], [ - 4290, + 4640, [ { "TestLessThan": { @@ -9345,7 +10271,7 @@ } }, "rhs": { - "Immediate": "0x10000000000000000" + "Immediate": "0x10000" }, "dst": { "register": "AP", @@ -9356,7 +10282,7 @@ ] ], [ - 4294, + 4644, [ { "LinearSplit": { @@ -9385,7 +10311,77 @@ ] ], [ - 4321, + 4763, + [ + { + "TestLessThanOrEqual": { + "lhs": { + "Immediate": "0x942" + }, + "rhs": { + "Deref": { + "register": "FP", + "offset": -7 + } + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 4846, + [ + { + "AllocSegment": { + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 4917, + [ + { + "AllocSegment": { + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 5021, + [ + { + "TestLessThanOrEqual": { + "lhs": { + "Immediate": "0x622" + }, + "rhs": { + "Deref": { + "register": "FP", + "offset": -7 + } + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 5124, [ { "TestLessThan": { @@ -9402,7 +10398,7 @@ } }, "rhs": { - "Immediate": "0x100000000" + "Immediate": "0x10000" }, "dst": { "register": "AP", @@ -9413,7 +10409,7 @@ ] ], [ - 4325, + 5128, [ { "LinearSplit": { @@ -9442,10 +10438,25 @@ ] ], [ - 4450, + 5155, [ { - "AllocSegment": { + "TestLessThan": { + "lhs": { + "BinOp": { + "op": "Add", + "a": { + "register": "AP", + "offset": -1 + }, + "b": { + "Immediate": "0x0" + } + } + }, + "rhs": { + "Immediate": "0x10000" + }, "dst": { "register": "AP", "offset": 0 @@ -9455,42 +10466,93 @@ ] ], [ - 4521, + 5159, [ { - "AllocSegment": { - "dst": { + "LinearSplit": { + "value": { + "Deref": { + "register": "AP", + "offset": -1 + } + }, + "scalar": { + "Immediate": "0x8000000000000110000000000000000" + }, + "max_x": { + "Immediate": "0xfffffffffffffffffffffffffffffffe" + }, + "x": { "register": "AP", "offset": 0 + }, + "y": { + "register": "AP", + "offset": 1 } } } ] ], [ - 4625, + 5471, [ { - "TestLessThanOrEqual": { + "TestLessThan": { "lhs": { - "Immediate": "0x622" + "BinOp": { + "op": "Add", + "a": { + "register": "AP", + "offset": -1 + }, + "b": { + "Immediate": "0x0" + } + } }, "rhs": { + "Immediate": "0x100000000" + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 5475, + [ + { + "LinearSplit": { + "value": { "Deref": { - "register": "FP", - "offset": -7 + "register": "AP", + "offset": -1 } }, - "dst": { + "scalar": { + "Immediate": "0x8000000000000110000000000000000" + }, + "max_x": { + "Immediate": "0xfffffffffffffffffffffffffffffffe" + }, + "x": { "register": "AP", "offset": 0 + }, + "y": { + "register": "AP", + "offset": 1 } } } ] ], [ - 4728, + 5569, [ { "TestLessThan": { @@ -9507,7 +10569,7 @@ } }, "rhs": { - "Immediate": "0x10000" + "Immediate": "0x100" }, "dst": { "register": "AP", @@ -9518,7 +10580,7 @@ ] ], [ - 4732, + 5573, [ { "LinearSplit": { @@ -9547,7 +10609,7 @@ ] ], [ - 4759, + 5644, [ { "TestLessThan": { @@ -9564,7 +10626,7 @@ } }, "rhs": { - "Immediate": "0x10000" + "Immediate": "0x100000000" }, "dst": { "register": "AP", @@ -9575,7 +10637,7 @@ ] ], [ - 4763, + 5648, [ { "LinearSplit": { @@ -9604,7 +10666,7 @@ ] ], [ - 5075, + 5775, [ { "TestLessThan": { @@ -9621,7 +10683,7 @@ } }, "rhs": { - "Immediate": "0x100000000" + "Immediate": "0x100" }, "dst": { "register": "AP", @@ -9632,7 +10694,7 @@ ] ], [ - 5079, + 5779, [ { "LinearSplit": { @@ -9661,7 +10723,7 @@ ] ], [ - 5173, + 5839, [ { "TestLessThan": { @@ -9678,7 +10740,7 @@ } }, "rhs": { - "Immediate": "0x100" + "Immediate": "0x10000000000000000" }, "dst": { "register": "AP", @@ -9689,7 +10751,7 @@ ] ], [ - 5177, + 5843, [ { "LinearSplit": { @@ -9718,7 +10780,7 @@ ] ], [ - 5248, + 5870, [ { "TestLessThan": { @@ -9746,7 +10808,7 @@ ] ], [ - 5252, + 5874, [ { "LinearSplit": { @@ -9775,7 +10837,7 @@ ] ], [ - 5366, + 5972, [ { "TestLessThan": { @@ -9803,7 +10865,7 @@ ] ], [ - 5370, + 5976, [ { "LinearSplit": { @@ -9832,7 +10894,7 @@ ] ], [ - 5397, + 6003, [ { "TestLessThan": { @@ -9860,7 +10922,7 @@ ] ], [ - 5401, + 6007, [ { "LinearSplit": { @@ -9889,7 +10951,7 @@ ] ], [ - 5428, + 6034, [ { "TestLessThan": { @@ -9917,7 +10979,7 @@ ] ], [ - 5432, + 6038, [ { "LinearSplit": { @@ -9946,7 +11008,7 @@ ] ], [ - 5524, + 6130, [ { "TestLessThan": { @@ -9974,7 +11036,7 @@ ] ], [ - 5528, + 6134, [ { "LinearSplit": { @@ -10003,7 +11065,7 @@ ] ], [ - 5555, + 6161, [ { "TestLessThan": { @@ -10031,7 +11093,7 @@ ] ], [ - 5559, + 6165, [ { "LinearSplit": { @@ -10060,7 +11122,7 @@ ] ], [ - 5654, + 6260, [ { "TestLessThan": { @@ -10088,7 +11150,7 @@ ] ], [ - 5658, + 6264, [ { "LinearSplit": { @@ -10117,7 +11179,7 @@ ] ], [ - 5684, + 6290, [ { "AllocSegment": { @@ -10130,7 +11192,7 @@ ] ], [ - 5791, + 6397, [ { "TestLessThan": { @@ -10158,7 +11220,7 @@ ] ], [ - 5795, + 6401, [ { "LinearSplit": { @@ -10187,7 +11249,7 @@ ] ], [ - 5822, + 6428, [ { "TestLessThan": { @@ -10215,7 +11277,7 @@ ] ], [ - 5826, + 6432, [ { "LinearSplit": { @@ -10244,7 +11306,7 @@ ] ], [ - 5919, + 6525, [ { "TestLessThan": { @@ -10272,7 +11334,7 @@ ] ], [ - 5923, + 6529, [ { "LinearSplit": { @@ -10301,7 +11363,7 @@ ] ], [ - 5961, + 6567, [ { "TestLessThan": { @@ -10329,7 +11391,7 @@ ] ], [ - 5965, + 6571, [ { "LinearSplit": { @@ -10358,7 +11420,7 @@ ] ], [ - 6088, + 6694, [ { "TestLessThan": { @@ -10386,7 +11448,7 @@ ] ], [ - 6092, + 6698, [ { "LinearSplit": { @@ -10415,7 +11477,7 @@ ] ], [ - 6150, + 6756, [ { "TestLessThan": { @@ -10443,7 +11505,7 @@ ] ], [ - 6154, + 6760, [ { "LinearSplit": { @@ -10472,7 +11534,7 @@ ] ], [ - 6224, + 6830, [ { "AllocSegment": { @@ -10485,7 +11547,7 @@ ] ], [ - 6231, + 6837, [ { "TestLessThanOrEqual": { @@ -10507,7 +11569,7 @@ ] ], [ - 6262, + 6868, [ { "TestLessThan": { @@ -10535,7 +11597,7 @@ ] ], [ - 6266, + 6872, [ { "LinearSplit": { @@ -10564,7 +11626,7 @@ ] ], [ - 6351, + 6957, [ { "TestLessThan": { @@ -10592,7 +11654,7 @@ ] ], [ - 6355, + 6961, [ { "LinearSplit": { @@ -10621,7 +11683,7 @@ ] ], [ - 6381, + 6987, [ { "AllocSegment": { @@ -10634,7 +11696,7 @@ ] ], [ - 6482, + 7088, [ { "TestLessThanOrEqual": { @@ -10656,7 +11718,7 @@ ] ], [ - 6513, + 7119, [ { "TestLessThan": { @@ -10684,7 +11746,7 @@ ] ], [ - 6517, + 7123, [ { "LinearSplit": { @@ -10713,7 +11775,7 @@ ] ], [ - 6602, + 7208, [ { "TestLessThan": { @@ -10741,7 +11803,7 @@ ] ], [ - 6606, + 7212, [ { "LinearSplit": { @@ -10770,7 +11832,7 @@ ] ], [ - 6632, + 7238, [ { "AllocSegment": { @@ -10783,7 +11845,7 @@ ] ], [ - 6739, + 7345, [ { "TestLessThan": { @@ -10811,7 +11873,7 @@ ] ], [ - 6743, + 7349, [ { "LinearSplit": { @@ -10840,7 +11902,7 @@ ] ], [ - 6770, + 7376, [ { "TestLessThan": { @@ -10868,7 +11930,7 @@ ] ], [ - 6774, + 7380, [ { "LinearSplit": { @@ -10897,7 +11959,7 @@ ] ], [ - 6801, + 7407, [ { "TestLessThan": { @@ -10925,7 +11987,7 @@ ] ], [ - 6805, + 7411, [ { "LinearSplit": { @@ -10954,7 +12016,7 @@ ] ], [ - 6891, + 7497, [ { "TestLessThanOrEqual": { @@ -10976,7 +12038,7 @@ ] ], [ - 6922, + 7528, [ { "TestLessThan": { @@ -11004,7 +12066,7 @@ ] ], [ - 6926, + 7532, [ { "LinearSplit": { @@ -11033,7 +12095,7 @@ ] ], [ - 7009, + 7615, [ { "TestLessThan": { @@ -11061,7 +12123,7 @@ ] ], [ - 7013, + 7619, [ { "LinearSplit": { @@ -11090,7 +12152,7 @@ ] ], [ - 7040, + 7646, [ { "TestLessThan": { @@ -11118,7 +12180,7 @@ ] ], [ - 7044, + 7650, [ { "LinearSplit": { @@ -11147,7 +12209,7 @@ ] ], [ - 7071, + 7677, [ { "TestLessThan": { @@ -11175,7 +12237,7 @@ ] ], [ - 7075, + 7681, [ { "LinearSplit": { @@ -11213,7 +12275,7 @@ }, { "selector": "0x1feb29d0d6e8c4ba7a71db4cdaa24898ddd8bb350e724f844145997afee9c9", - "offset": 2600, + "offset": 2827, "builtins": ["range_check"] }, { @@ -11221,59 +12283,64 @@ "offset": 191, "builtins": ["range_check"] }, + { + "selector": "0xc5c709a3ffed9c578aa6ee00ce77e78a490d2c8aa971d1f6ccdd662da6f17b", + "offset": 2276, + "builtins": ["range_check"] + }, { "selector": "0xe1eafdb08801cfc555a49e25dabfd7aa4ed7b2dd5c7e2c5a6930eac6d1b54c", - "offset": 2429, + "offset": 2656, "builtins": ["range_check"] }, { "selector": "0x106f418ef7e2ea39027bcde47d5f0a54ed68fe34aa69b24c3a162def52a841b", - "offset": 1902, + "offset": 2015, "builtins": ["range_check"] }, { "selector": "0x11fdea672ded06956bdd64d89fd111661735e88595f88c1199f648fe3c2dd15", - "offset": 2697, + "offset": 2924, "builtins": ["range_check"] }, { "selector": "0x126587e6b203b756642ff0bd9f92e84ef609cf2a02b516fbf2d94f36a73b83e", - "offset": 959, + "offset": 1072, "builtins": ["range_check"] }, { "selector": "0x1303ef00936936490ad20afec7fbe2bf74669665b2a2249945ff561debad733", - "offset": 1105, + "offset": 1218, "builtins": ["range_check"] }, { "selector": "0x13d3b1aae5fa65a483db7c67c98dca6aac27353970caa114d112c4b6de8ec73", - "offset": 1640, + "offset": 1753, "builtins": ["range_check"] }, { "selector": "0x145f0cd3e37db4233ce4d6b84935d9b32387d72eb53713e78e2ec56cc6fdf5d", - "offset": 2255, + "offset": 2482, "builtins": ["range_check"] }, { "selector": "0x147c0b24e5bfb625956c5a44d3fc84d509b789bf2e5335365c03b9be2d757d3", - "offset": 2163, + "offset": 2390, "builtins": ["range_check"] }, { "selector": "0x1785e0d94a5ba07a47865d69afdf914dad65466b25d38cb78cb741fac447ba8", - "offset": 2917, + "offset": 3144, "builtins": ["range_check"] }, { "selector": "0x1c7564da2ac3c0ee05570d52004d51604c5315131cafd67610b2e629bf4fd7c", - "offset": 2033, + "offset": 2146, "builtins": ["range_check"] }, { "selector": "0x1d39fadfe7e2621092d7d0a467672f0eb0ad03c5926829d40ceefa7bcd10b80", - "offset": 3030, + "offset": 3257, "builtins": ["range_check"] }, { @@ -11283,7 +12350,7 @@ }, { "selector": "0x208b88c80fabc1b03f3c78a09aaa1a693a5bb1366271a1c6b9e7971aa325116", - "offset": 2525, + "offset": 2752, "builtins": ["range_check"] }, { @@ -11303,27 +12370,37 @@ }, { "selector": "0x29a68d48876fa0d864a616e212175e42824be1cdcb35bcd2e05b302042e491f", - "offset": 1269, + "offset": 1382, "builtins": ["range_check"] }, { "selector": "0x31c18e21d8e75a5f2f6f1330c56da1f8b2fd93568002ef0d15bcce9c5644c2b", - "offset": 1495, + "offset": 1608, + "builtins": ["range_check"] + }, + { + "selector": "0x36d666ce4d4c894d5dcb35a06bb6ca9659358f5e9d7fe07519e7531ef44a6e2", + "offset": 3419, "builtins": ["range_check"] }, { "selector": "0x36e432757f2854d382b66d849ed9a3edf35fdbf55a7c83296142cf7b89b0573", - "offset": 1755, + "offset": 1868, "builtins": ["range_check"] }, { "selector": "0x3bb1cf9f6b291f5c63c8ecbfcf8cd522642fdc7ec277c2fddb7dc069cd05ced", - "offset": 2820, + "offset": 3047, "builtins": ["range_check"] }, { "selector": "0x3c694eba4d500b140694d8f7da3f85031f4d4827b57da58cb5f2bd1ab74e5ab", - "offset": 1382, + "offset": 1495, + "builtins": ["range_check"] + }, + { + "selector": "0x3dbc7f289caba706d06644803f1db94983f3b8d8af334bfbf346aaa1b711d0c", + "offset": 959, "builtins": ["range_check"] } ], diff --git a/__mocks__/cairo/cairo2120/enums_test_enums.sierra.json b/__mocks__/cairo/cairo2120/enums_test_enums.sierra.json new file mode 100644 index 000000000..f1a3a7a13 --- /dev/null +++ b/__mocks__/cairo/cairo2120/enums_test_enums.sierra.json @@ -0,0 +1,5423 @@ +{ + "sierra_program": [ + "0x1", + "0x7", + "0x0", + "0x2", + "0xc", + "0x0", + "0x421", + "0x3df", + "0x7e", + "0x52616e6765436865636b", + "0x800000000000000100000000000000000000000000000000", + "0x537472756374", + "0x800000000000000f00000000000000000000000000000001", + "0x0", + "0x16a4c8d7c05909052238a862d8cc3e7975bf05a07b3a69c6b28951083a6d672", + "0x753136", + "0x800000000000000700000000000000000000000000000000", + "0x800000000000000700000000000000000000000000000004", + "0x2ee1e2b1b89f8c495f200e4956278a4d47395fe262f27b52e5865c9524c08c3", + "0x1", + "0x2", + "0x456e756d", + "0x800000000000000700000000000000000000000000000003", + "0x34ba6bae0cf8d1255e30a917ff6107d46826b40196a72d0e7e40774c78e1308", + "0x3", + "0x4", + "0x4172726179", + "0x800000000000000300000000000000000000000000000001", + "0x10", + "0x800000000000000300000000000000000000000000000003", + "0xea899504b4052c27cccf9971daead33001122c7badf30382a469a86d9f8143", + "0x6", + "0xe", + "0x536e617073686f74", + "0x800000000000000700000000000000000000000000000001", + "0x8", + "0x800000000000000700000000000000000000000000000002", + "0x1baeba72e79e9db2587cf44fedb2f3700b2075a5e8e39a562584862c4b71f62", + "0x9", + "0xa", + "0x7", + "0x38bd985835a9a53895c52b1878f7fea1ea86c6c36372a6554306b7deed44be6", + "0xb", + "0xc", + "0x66656c74323532", + "0x556e696e697469616c697a6564", + "0x800000000000000200000000000000000000000000000001", + "0x753332", + "0x753634", + "0x11", + "0x2daa4fab7cd27a2ed3cc28ccfb3cfca70ad3c000028aa10db2f4783fcefd345", + "0x12", + "0x14", + "0x120fbeae2508a96307cd9d3cd58ad37fd8f6a1ee44e75a9df62b5b86ba2ee2a", + "0x15", + "0x16", + "0x3590158452123707463380113690aa6c9c45f48ef55005fd27b035b47348988", + "0x17", + "0x426f78", + "0x370026b31ac236e06160ec5dd0d3f03ae6a16e3a80a7672d579c97014775824", + "0x1a", + "0x32d2062143aba742e856373db8854bb12033d85fbe03e144a91067f9e4d52f3", + "0x1b", + "0x64", + "0x2f99b21e21b1ea68f77345d47bde74e1e6c34d34cf69c71cbefd71b887b142f", + "0x1f", + "0x20", + "0x762af7d47e06fd1456367bdd600ec298e8ca9b72ada03929e234ae0a6974fa", + "0x21", + "0x2c", + "0x172b2d029d59f97d93dd24b7cc98c01ca8efd7bf422afd18e9041d6a1a5c170", + "0x24", + "0x25", + "0x30f87c80a9ff91f3ba0997da70c24279680d81f2429f998f2964b1a555ebb1a", + "0x26", + "0x436f6e7374", + "0x800000000000000000000000000000000000000000000002", + "0x4f7574206f6620676173", + "0x4661696c656420746f20646573657269616c697a6520706172616d202331", + "0x496e70757420746f6f206c6f6e6720666f7220617267756d656e7473", + "0x75313238", + "0x7538", + "0x3be6f13b1eeea8f6d4a3f8f94ff73e9fcdb11e0fc6bbda219a39d7ee87174b2", + "0x39f4bddbd30d58053c5c0e4cf215fd40c2ff6254027e1ca82d99dfb9352890f", + "0x2b", + "0x2d", + "0xee6bdef6928642145ee888437aa85c8de49c7818f4182a14a2a976e754de1", + "0x3b9ddf97bd58cc7301a2107c3eabad82196f38221c880cd3645d07c3aac1422", + "0x29f6621519cd76912cfece1d674f3b588713e5ed5f584eaae76037bcf225363", + "0x30", + "0x2b87e8e624ece2f0cf85d181387988b18f6983045a9920dc64764db7b704649", + "0x31", + "0x800000000000000700000000000000000000000000000005", + "0x1ca0859cc72336b50627b89194f06980da93ce94909d112cdc3a765a051f732", + "0x33", + "0x25f9ad655d525bf79405d9b98957b3aa16d86a2669a7252030de6dd582fce7a", + "0x34", + "0x336711c2797eda3aaf8c07c5cf7b92162501924a7090b25482d45dd3a24ddce", + "0x36", + "0x2299982bf733771210a7b4e01be8e699d9c778cc43743de9c81adc233d0c388", + "0x37", + "0x511591274d8813cc87dcfdf4098a0f02d4d964e5252715695c7682ef8ed20c", + "0x38", + "0x39", + "0x1363576206b17df7adacad7f47f20a0558a0e854432cf721f96cbbba837bf12", + "0x3a", + "0x33cff8ca50b98f40b2384a9deb3aa0ab15aaf36318ded0ef9476dabf49bcf59", + "0x3c", + "0x3f17eacf0c93d1c0968ec9606d65005de0d0f783350ed6e8fb034f4e616c4ac", + "0x3d", + "0x2311b30ff91641e03086db219fbd3a339d658feb37d0c9ae93c065185b98998", + "0x3f88fb1329d0c686ba50f926ff79af1c2a252a3594ae051c810b5f9492092f5", + "0x3f", + "0xc3ca175aa1161f5f8990fd287efc42d31a161e1c88dd5023cc11411ad9900e", + "0x40", + "0x272f6df0a5a47be47433e7300dbb5e90319ca2166288be35db1953ea4207953", + "0x21c91a6948c444aa3a421cc79bfe733affa309ec645268ee0c2ad9c3cf184de", + "0x42", + "0x19b9ae4ba181a54f9e7af894a81b44a60aea4c9803939708d6cc212759ee94c", + "0x3bc34212d2c42e27596fdda5c1c673422d928dc4f40e1de8c35217d1981d935", + "0x44", + "0x351e72f2e3f133f52891974fa3d211b3e579625b5b15c8d1d0c9db2a1a7d407", + "0x45", + "0x35b26fd36f40720f06990724c28a5d888642e82c23b388420091777a9116b14", + "0xb421937e7950e3d75405b25a18ee821a663b39dd8b4d0e442095780f90f986", + "0x47", + "0x178d6d12f3b1afb72a326e7a35eaad41bcdbd002be501b5e1e9b1b79a05dbf3", + "0x48", + "0x3d020cc8ad67767402690d2175f46e5a6c4bdfeffd34713354e19f97b494da0", + "0x4b", + "0x88925dd451d220784df2998389085d5ae6b56c2d22d1d8e151ec9c2e0cd25", + "0x4d", + "0xb72e72e5a63caf9f10f3902eec9557b15660c00d245f7c5ae7157423fff53c", + "0x4e", + "0x325d56ed86ca2c3a275a749ddb80c013c5d9851885ab349d2ad8510170b42d9", + "0x51", + "0x50", + "0x185d9b297d752b92e36e7514f2af6ce91e23bd34be2b075b970d46b0f9a3d23", + "0x52", + "0x18c63d3eac6cdb8f2492ed432412542dce6b4ae731500e7570a41938aa68948", + "0x54", + "0x18881bb414cda2bb967493bb34bf6902e0f92d7dcdc5ed5c30dc67c9a90fcff", + "0x56", + "0x19f021de67a29d8733a584446c0a0c78f9c6bce2583e229f9a4bccd8d724d72", + "0x58", + "0x22493ed12362cd6b4b118733fccc20ee3faf6d6546367fcd35d931dc90833e3", + "0x59", + "0x5b", + "0x3fe244a46c1456c4718ef097f5cdd18149ca294c5bdffdd22b7e6f9540cf113", + "0x5c", + "0x3e914fa4847734da785313048196c36310337c36df9be4ce4ff971d838f07c1", + "0x5e", + "0x3850676e95044bcafdab66d09d52fbdc6c05024f661372f2c15e33951a241de", + "0x5f", + "0x3a6cffe2561983a3685045e4600085227508651a8efcafe6a1bc1f70802e054", + "0x2ae68393e5819b8dee9845b8c1ec8dbedfba9bbd68e7253e8f59d867460c0dc", + "0x61", + "0x141d61b4bf9a6647000e805a7f949d847cbe9ca009321b7a63424d9742a8912", + "0x1df5abf484ff46fcefc4c239b5c351ce9c47777b7e1f26b505f9e9bc5823115", + "0x154df121ec994a15880fd221c3fbaacd125f6c4807302f13f9a52cf62f5ce4e", + "0x33c2f5a7e0fffa93f1a29733d5927eb7ad69162f4de1c4fa05018aba200144e", + "0x65", + "0x183950d5e3273ec891c75fa886c8de01eadccb5ff4ca417397ccb80471b8bea", + "0x69", + "0x15c0a3cc422e9cead14b117474a7e040bc249953f092f790d2238c03d2d4a0b", + "0x6a", + "0x107c4c114adf6d3b44474301d2cdc063e750f40c4d85ae2bcb9d2c5609cf970", + "0x74584e9f10ffb1a40aa5a3582e203f6758defc4a497d1a2d5a89f274a320e9", + "0x6d", + "0x34c1a4ee6ef3ec231b7e21635f0ab0f5e73f747e42beb02d65fc54c8e0e0575", + "0x6f", + "0x7613c7135b064a210243c4d523d64a3e8bb1803abc97c950d43a9c0340ac10", + "0x72", + "0x47d50ab84c14028e58f88d9f15b2547ac4d9e3ddb79a76ff9dbd8f98b6374", + "0x73", + "0x4275696c74696e436f737473", + "0x53797374656d", + "0x9931c641b913035ae674b400b61a51476d506bbe8bba2ff8a6272790aba9e6", + "0x75", + "0x4e6f6e5a65726f", + "0x4761734275696c74696e", + "0x1cc", + "0x7265766f6b655f61705f747261636b696e67", + "0x77697468647261775f676173", + "0x6272616e63685f616c69676e", + "0x7374727563745f6465636f6e737472756374", + "0x61727261795f736e617073686f745f706f705f66726f6e74", + "0x756e626f78", + "0x72656e616d65", + "0x73746f72655f74656d70", + "0x647570", + "0x66656c743235325f69735f7a65726f", + "0x64726f70", + "0x7531365f7472795f66726f6d5f66656c74323532", + "0x72656465706f7369745f676173", + "0x656e756d5f696e6974", + "0x7d", + "0x6a756d70", + "0x7b", + "0x636f6e73745f61735f696d6d656469617465", + "0x7a", + "0x66656c743235325f737562", + "0x7374727563745f636f6e737472756374", + "0x7c", + "0x66756e6374696f6e5f63616c6c", + "0x79", + "0x78", + "0x6765745f6275696c74696e5f636f737473", + "0x77", + "0x77697468647261775f6761735f616c6c", + "0x61727261795f6e6577", + "0x736e617073686f745f74616b65", + "0x656e61626c655f61705f747261636b696e67", + "0x656e756d5f6d61746368", + "0x7531365f746f5f66656c74323532", + "0x76", + "0x61727261795f617070656e64", + "0x64697361626c655f61705f747261636b696e67", + "0x1c", + "0x1d", + "0x1e", + "0x74", + "0x656e756d5f736e617073686f745f6d61746368", + "0x61727261795f6c656e", + "0x7533325f746f5f66656c74323532", + "0x70", + "0x6e", + "0x6c", + "0x6b", + "0x7374727563745f736e617073686f745f6465636f6e737472756374", + "0x22", + "0x23", + "0x66", + "0x63", + "0x75385f746f5f66656c74323532", + "0x62", + "0x7536345f746f5f66656c74323532", + "0x60", + "0x5d", + "0x27", + "0x28", + "0x5a", + "0x55", + "0x29", + "0x2a", + "0x53", + "0x4f", + "0x49", + "0x46", + "0x2e", + "0x43", + "0x7536345f7472795f66726f6d5f66656c74323532", + "0x7533325f7472795f66726f6d5f66656c74323532", + "0x2f", + "0x41", + "0x3e", + "0x3b", + "0x32", + "0x35", + "0x75313238735f66726f6d5f66656c74323532", + "0x753132385f746f5f66656c74323532", + "0x75385f7472795f66726f6d5f66656c74323532", + "0x18", + "0x13", + "0x616c6c6f635f6c6f63616c", + "0x66696e616c697a655f6c6f63616c73", + "0x73746f72655f6c6f63616c", + "0xd", + "0xf", + "0x5", + "0x1510", + "0xffffffffffffffff", + "0x86", + "0x19", + "0x71", + "0x8b", + "0x4a", + "0x4c", + "0x7f", + "0xfe", + "0xf7", + "0xed", + "0xab", + "0xe7", + "0xd4", + "0xcd", + "0xdd", + "0x103", + "0x18f", + "0x183", + "0x12c", + "0x125", + "0x13a", + "0x188", + "0x17c", + "0x146", + "0x176", + "0x163", + "0x16b", + "0x194", + "0x57", + "0x20b", + "0x204", + "0x1fa", + "0x1b4", + "0x1f4", + "0x1e1", + "0x1da", + "0x1ea", + "0x210", + "0x272", + "0x268", + "0x22c", + "0x262", + "0x24d", + "0x247", + "0x257", + "0x252", + "0x277", + "0x30c", + "0x300", + "0x2a0", + "0x299", + "0x2ae", + "0x305", + "0x2f9", + "0x2ba", + "0x67", + "0x2f3", + "0x68", + "0x2e0", + "0x2d5", + "0x2e8", + "0x311", + "0x36e", + "0x364", + "0x32d", + "0x35e", + "0x34b", + "0x353", + "0x373", + "0x3e6", + "0x3da", + "0x3d3", + "0x3cc", + "0x39c", + "0x3c6", + "0x80", + "0x81", + "0x82", + "0x83", + "0x3bf", + "0x3eb", + "0x3df", + "0x45b", + "0x44d", + "0x419", + "0x413", + "0x40d", + "0x84", + "0x424", + "0x452", + "0x446", + "0x42f", + "0x441", + "0x460", + "0x454", + "0x4bd", + "0x4b3", + "0x47c", + "0x4ad", + "0x49a", + "0x4a2", + "0x4c2", + "0x519", + "0x50f", + "0x4de", + "0x85", + "0x509", + "0x4f4", + "0x4fe", + "0x51e", + "0x59c", + "0x87", + "0x88", + "0x595", + "0x89", + "0x8a", + "0x58b", + "0x53e", + "0x585", + "0x8c", + "0x8d", + "0x55c", + "0x8e", + "0x56f", + "0x8f", + "0x90", + "0x91", + "0x92", + "0x93", + "0x57e", + "0x5a1", + "0x603", + "0x94", + "0x95", + "0x5f9", + "0x5bd", + "0x96", + "0x5f3", + "0x97", + "0x98", + "0x5da", + "0x5e8", + "0x99", + "0x608", + "0x68e", + "0x9a", + "0x9b", + "0x687", + "0x9c", + "0x9d", + "0x67d", + "0x628", + "0x9e", + "0x677", + "0x9f", + "0xa0", + "0x64a", + "0x661", + "0xa1", + "0x670", + "0x693", + "0x6fa", + "0xa2", + "0xa3", + "0x6f0", + "0x6af", + "0xa4", + "0x6ea", + "0xa5", + "0xa6", + "0x6d5", + "0x6ca", + "0x6df", + "0x6ff", + "0x764", + "0xa7", + "0xa8", + "0x75a", + "0x71b", + "0xa9", + "0x754", + "0xaa", + "0x731", + "0x749", + "0xac", + "0x741", + "0x769", + "0x7c8", + "0xad", + "0xae", + "0x7be", + "0x785", + "0xaf", + "0x7b8", + "0xb0", + "0xb1", + "0x79b", + "0x7ad", + "0x7cd", + "0x80a", + "0x800", + "0x7e9", + "0x7fb", + "0x80f", + "0x87f", + "0x873", + "0xb2", + "0x86d", + "0x866", + "0xb3", + "0x85f", + "0x837", + "0x858", + "0xb4", + "0xb5", + "0xb6", + "0xb7", + "0x884", + "0x878", + "0x8d7", + "0xb8", + "0xb9", + "0x8cd", + "0x8a0", + "0xba", + "0x8c7", + "0xbb", + "0xbc", + "0xbd", + "0x8dc", + "0x909", + "0x8f2", + "0x904", + "0x90e", + "0x963", + "0xbe", + "0xbf", + "0x959", + "0x92a", + "0xc0", + "0x953", + "0xc1", + "0xc2", + "0xc3", + "0xc4", + "0xc5", + "0x968", + "0x9d3", + "0xc6", + "0xc7", + "0x9cc", + "0xc8", + "0xc9", + "0x9c2", + "0x988", + "0xca", + "0x9bc", + "0xcb", + "0xcc", + "0xce", + "0xcf", + "0xd0", + "0xd1", + "0x9b5", + "0x9d8", + "0xa2d", + "0xd2", + "0xd3", + "0xa23", + "0x9f4", + "0xa1d", + "0xd5", + "0xd6", + "0xd7", + "0xd8", + "0xd9", + "0xa32", + "0xa8f", + "0xda", + "0xdb", + "0xa85", + "0xa4e", + "0xdc", + "0xa7f", + "0xde", + "0xdf", + "0xe0", + "0xe1", + "0xa6c", + "0xa74", + "0xa94", + "0xb14", + "0xb06", + "0xe2", + "0xafe", + "0xe3", + "0xe4", + "0xaf6", + "0xaba", + "0xe5", + "0xe6", + "0xaef", + "0xe8", + "0xe9", + "0xea", + "0xeb", + "0xec", + "0xee", + "0xef", + "0xada", + "0xae4", + "0xb19", + "0xb0d", + "0xb0b", + "0xb76", + "0xb6a", + "0xb64", + "0xb5e", + "0xb58", + "0xb41", + "0xb53", + "0xb7b", + "0xb6f", + "0xf0", + "0xf1", + "0xf2", + "0xf3", + "0xbed", + "0xbd0", + "0xbc1", + "0xf4", + "0xf5", + "0xf6", + "0xbbb", + "0xf8", + "0xf9", + "0xbb4", + "0xfa", + "0xfb", + "0xfc", + "0xfd", + "0xff", + "0xbc9", + "0x100", + "0x101", + "0xbe2", + "0x102", + "0xc15", + "0x104", + "0xc0b", + "0x105", + "0x106", + "0x107", + "0x108", + "0x109", + "0x10a", + "0x10b", + "0xc57", + "0xc53", + "0xc4e", + "0xc49", + "0xc43", + "0xc3d", + "0x10c", + "0xc5a", + "0xca8", + "0xc8c", + "0x10d", + "0x10e", + "0xc86", + "0x10f", + "0x110", + "0xc7d", + "0x111", + "0x112", + "0x113", + "0x114", + "0x115", + "0x116", + "0x117", + "0xc9d", + "0x118", + "0xcd0", + "0x119", + "0xcc6", + "0x11a", + "0x11b", + "0xd37", + "0xd20", + "0xd1a", + "0xd05", + "0xd01", + "0xcfd", + "0x11c", + "0x11d", + "0x11e", + "0xd1d", + "0xd15", + "0xd3a", + "0x11f", + "0xd2f", + "0x120", + "0x121", + "0xd87", + "0xd60", + "0xd5c", + "0x122", + "0xd58", + "0x123", + "0xd8a", + "0xd7e", + "0xd7a", + "0xd76", + "0x124", + "0xdda", + "0xdc3", + "0xdbf", + "0xdbb", + "0xdb6", + "0xdb1", + "0x126", + "0x127", + "0xddd", + "0xdd2", + "0x128", + "0x129", + "0xe51", + "0xdf1", + "0x12a", + "0x12b", + "0x12d", + "0xe3e", + "0xe1c", + "0xe14", + "0xe0c", + "0xe2a", + "0xe45", + "0xe35", + "0x12e", + "0xe48", + "0x12f", + "0x130", + "0xe8a", + "0x131", + "0x132", + "0xe80", + "0x133", + "0xe71", + "0xe79", + "0x134", + "0x135", + "0xf19", + "0xecf", + "0xec6", + "0xec0", + "0xeb9", + "0x136", + "0x137", + "0x138", + "0x139", + "0xf06", + "0x13b", + "0xf0d", + "0xefe", + "0x13c", + "0x13d", + "0x13e", + "0x13f", + "0xef8", + "0x140", + "0x141", + "0xef1", + "0x142", + "0x143", + "0xf41", + "0x144", + "0x145", + "0xf37", + "0x147", + "0x148", + "0xfa3", + "0x149", + "0xf69", + "0xf63", + "0x14a", + "0x14b", + "0x14c", + "0x14d", + "0xf9a", + "0xf96", + "0xf92", + "0xf8d", + "0xf88", + "0x14e", + "0x14f", + "0xfa6", + "0x100d", + "0xfd6", + "0xfd0", + "0xfc9", + "0x150", + "0x151", + "0x152", + "0x153", + "0x154", + "0xff5", + "0x155", + "0x1002", + "0x156", + "0x157", + "0xffc", + "0x158", + "0x159", + "0xfef", + "0x15a", + "0x15b", + "0x105e", + "0x1037", + "0x1031", + "0x15c", + "0x15d", + "0x15e", + "0x15f", + "0x1055", + "0x1051", + "0x104d", + "0x160", + "0x1061", + "0x10d4", + "0x1087", + "0x1083", + "0x107f", + "0x161", + "0x162", + "0x10d7", + "0x10cb", + "0x10c5", + "0x10b0", + "0x10ac", + "0x10a8", + "0x164", + "0x165", + "0x10c8", + "0x10c0", + "0x166", + "0x167", + "0x1137", + "0x10fd", + "0x10f9", + "0x10f5", + "0x168", + "0x169", + "0x16a", + "0x113a", + "0x112e", + "0x112a", + "0x1126", + "0x1121", + "0x111c", + "0x16c", + "0x1179", + "0x1175", + "0x1170", + "0x116b", + "0x1165", + "0x115f", + "0x16d", + "0x16e", + "0x16f", + "0x117c", + "0x170", + "0x11b7", + "0x11b3", + "0x11ac", + "0x11a7", + "0x171", + "0x172", + "0x119f", + "0x173", + "0x174", + "0x175", + "0x177", + "0x178", + "0x11ba", + "0x11b0", + "0x179", + "0x17a", + "0x17b", + "0x120d", + "0x1207", + "0x11f7", + "0x17d", + "0x17e", + "0x17f", + "0x180", + "0x11f0", + "0x181", + "0x182", + "0x11e8", + "0x184", + "0x185", + "0x186", + "0x187", + "0x189", + "0x1200", + "0x18a", + "0x18b", + "0x1213", + "0x18c", + "0x1252", + "0x124e", + "0x1247", + "0x1242", + "0x18d", + "0x18e", + "0x123a", + "0x190", + "0x191", + "0x192", + "0x193", + "0x1255", + "0x124b", + "0x12a7", + "0x12a3", + "0x129c", + "0x1286", + "0x1281", + "0x127c", + "0x195", + "0x196", + "0x197", + "0x198", + "0x12a0", + "0x1296", + "0x199", + "0x12aa", + "0x19a", + "0x12f7", + "0x12d0", + "0x12cc", + "0x12c8", + "0x19b", + "0x19c", + "0x19d", + "0x12fa", + "0x12ee", + "0x12ea", + "0x12e6", + "0x19e", + "0x19f", + "0x1a0", + "0x1a1", + "0x1a2", + "0x1342", + "0x1314", + "0x1a3", + "0x1a4", + "0x1a5", + "0x1332", + "0x132a", + "0x1a6", + "0x1a7", + "0x1339", + "0x1a8", + "0x1397", + "0x1391", + "0x1382", + "0x137b", + "0x1372", + "0x1a9", + "0x1aa", + "0x1ab", + "0x1ac", + "0x1388", + "0x1ad", + "0x139d", + "0x13e3", + "0x13b5", + "0x1ae", + "0x1af", + "0x1b0", + "0x1b1", + "0x13d3", + "0x13cb", + "0x1b2", + "0x1b3", + "0x13da", + "0x1b5", + "0x1438", + "0x1432", + "0x1423", + "0x141c", + "0x1413", + "0x1b6", + "0x1b7", + "0x1b8", + "0x1b9", + "0x1ba", + "0x1429", + "0x1bb", + "0x1bc", + "0x143e", + "0x1480", + "0x147c", + "0x1477", + "0x1472", + "0x146c", + "0x1466", + "0x1bd", + "0x1be", + "0x1bf", + "0x1483", + "0x1c0", + "0x14c5", + "0x1497", + "0x1c1", + "0x1c2", + "0x1c3", + "0x1c4", + "0x14b5", + "0x14ad", + "0x1c5", + "0x14bc", + "0x1c6", + "0x1c7", + "0x1508", + "0x1504", + "0x14ff", + "0x14fa", + "0x14f4", + "0x14ee", + "0x1c8", + "0x1c9", + "0x1ca", + "0x150b", + "0x1cb", + "0x217", + "0x27e", + "0x318", + "0x37a", + "0x3f2", + "0x467", + "0x4c9", + "0x525", + "0x5a8", + "0x60f", + "0x69a", + "0x706", + "0x770", + "0x7d4", + "0x816", + "0x88b", + "0x8e3", + "0x915", + "0x96f", + "0x9df", + "0xa39", + "0xa9b", + "0xb20", + "0xb82", + "0xb86", + "0xb8a", + "0xb8e", + "0xbf8", + "0xc1e", + "0xc5f", + "0xcb3", + "0xcd9", + "0xd3f", + "0xd8f", + "0xde2", + "0xe5b", + "0xe93", + "0xf24", + "0xf4a", + "0xfab", + "0x1018", + "0x1066", + "0x10dc", + "0x113f", + "0x1181", + "0x11bf", + "0x121c", + "0x125a", + "0x12af", + "0x12ff", + "0x1305", + "0x134c", + "0x13a6", + "0x13ed", + "0x1447", + "0x1488", + "0x14cf", + "0xb1d2", + "0x28040060300580c0160300580a00a0240180800e0180280400600800800", + "0x901101605c0581600a0540681401604c090110160400580f00a0380680a", + "0x182001607c0580a00a0540181e0160740281c00606c0581a03206005813", + "0x138180160981280804808c058220160840281501a06c0580b01602802815", + "0x90110160ac0582a00a038068290160500580c0160280280900602014008", + "0x28150060440582e0160b40281501a0b00580c0160280281500603005813", + "0x583300a0540680c016068190230160c40583000a0540682f01607c0580a", + "0x581a06408c058360160d40281501a0d00581f016028028150060440582c", + "0x18110160e40583800a054068170160500580a00a0540181401606819037", + "0x58130240f40581a06408c0583c0160ec0281501a0e80581f01602802815", + "0x584100a0540684001607c0580a00a054018110160fc0583e00a0540683d", + "0x240470180600584408611806018016110218450180600584408608c05842", + "0x280e01a1340584c01612c0280e0060a40583d0161280280e01a02024808", + "0x68510160500585000a038018110160f40584f00a038068110161340584e", + "0x280e0060300580c0160300580c01602802854006044058530161480280e", + "0x585900a070018170160680c8110161600585700a0380685601603005855", + "0x580a00a038018110161780585d00a0380685c0160300585b00a0380185a", + "0x58140160300583d0160280285400608c058610161800281501a17c0581f", + "0x586600a038018110161940586400a038068630160300586200a03801829", + "0x280e01a0440586a0161a40280e01a1a00582901619c0280e00605005829", + "0x68110160500586e00a038068110161b40586c00a038068680160f40586b", + "0x583d0161cc0280e01a044058720161c40280e01a1c00583d0161bc0280e", + "0x682e0160680c8110161dc0587600a038068140161d40587400a0380680c", + "0x2815006044058790161e80281501a1e40581a0320b8058390161e002815", + "0x180c0160300580a00a038018230161f40587c00a0540687b01607c0580a", + "0x588100a038068800161fc0587e00a038068140160500581401602802809", + "0xc82c0160fc0588500a0540688401620c0281c0060b00581a03204405882", + "0x281501a2200581f016028028150060440588601621c0281501a2180581a", + "0x281501a2340588c00a0700188b0160680c83701604c0902301622805889", + "0x68230162440589000a0540688f01607c0580a00a0540181101622c0588e", + "0x58750162540280e01a0440589401624c0280e01a044058680162480280e", + "0x589800a038068110160dc0589700a038068110160300589600a03806811", + "0x28150060440583a0162680281501a0e80581a0320e40581a03204405899", + "0x18110161fc0589e00a038068230162740589c00a0540689b01607c0580a", + "0x281c0060fc0581a03208c058a001627c0281501a0440581b01602802815", + "0x581f016028028150060440584001628c0281501a1000581a032288058a1", + "0x538050180600584408607c0580a00a07001823016298058a500a054068a4", + "0x190180160685580b0180600584408608c058aa0162a40281501a00854008", + "0x58b303002c058b203e02c058b100a2c0028af00a2b8568021580600581a", + "0x58b503002c058b800a2dc0c00b0162d80c00b0162d40c00b0162d00c00b", + "0x58b517802c058b500a02c058b500a0301b80b0182ec028ba00a2e40f00b", + "0x880b016308028c118002c058bf17c02c058b803c02c058b800a2f41b80b", + "0x6280b0182ec1b0100163101b80b0162e06180b0162e00580c06e02c060bb", + "0xc00b016328028c919002c058b500a31c6280b0162d46300b0162d40580c", + "0x58d019e02c058bf00a3380600b0162d01b80b016334028cc06e02c058cb", + "0x58c203602c058b803602c058cb00a3440880b0162e00d80b0162d40c00b", + "0x58c417802c058b400a02c058b400a0306280b0182ec5500b0163080f80b", + "0x6a80b0163346a0100163100f80b0162d4698100163100f80b0162e069010", + "0x58b608002c058d608002c058cb08002c058b814802c058cd14c02c058b1", + "0x58cd072040058c41b202c058b51b202c058c200a3601e80b01635c5100b", + "0x58b500a0306d80b0182ec6d80b0163341d0100163105000b0162c46d00b", + "0x58b40fe02c058b11b602c058cb1b602c058b80160306d80b0182ec6d80b", + "0x1d00b0162e04d80b0163344e80b0162c46e00b0163341e0100163100a00b", + "0x58c202802c058d70b402c058b607202c058dd07402c058d607402c058cb", + "0x4c80b0162e07000b0163346f8100163106f0100163102e00b0162d42e00b", + "0x280c1c202c060bb1c202c058cd07e040058c413202c058cd13202c058cb", + "0x3a80b0163347080b01632c7080b0162e00580c1c202c060bb1c202c058b5", + "0x4a00b01632c4a00b0162e07180b01633420010016310028e207a02c058b4", + "0x28e405202c058b402802c058b80d002c058b10d002c058b612802c058cd", + "0x58b11ca02c058cd084040058c411602c058b506e02c058ca05202c058b8", + "0x1b80b01635c4680b0162d84580b01632c4580b0162e04780b0163344880b", + "0x58cb0ea02c058b801802c058b81ce040058c41cc02c058b51cc02c058c2", + "0x4300b0162e04400b0163344500b0162c47480b016334740100163103a80b", + "0x58c201802c058d710802c058b61b402c058b410c02c058d610c02c058cb", + "0x4100b0162e07680b01633476010016310758100163107500b0162d47500b", + "0x58b11dc02c058cd098040058c410002c058b110402c058cd10402c058cb", + "0x1700b0163743c80b0163583c80b01632c3c80b0162e03d80b0163343e80b", + "0x58c40ee02c058cd0ee02c058cb0ee02c058b81de02c058cd07a040058c4", + "0x3800b0163343900b0163343900b01632c3900b0162e07800b01633426810", + "0x28f30da02c058cd0da02c058cb0da02c058b81e402c058cd1e2040058c4", + "0x7a8100163103400b0162d43400b0162e03400b01632c3400b016308028f4", + "0x58c40d402c058b10d402c058b60d402c058cb0d402c058b81ec02c058cd", + "0x3280b0162c43280b0162d83280b01632c3280b0162e07b80b01633428810", + "0x58cd0c202c058b11f002c058cd0a6040058c40c602c058b10c602c058b8", + "0x2e00b0162e02f00b0162c42f00b0162d82f00b01632c2f00b0162e02f80b", + "0x58b81f402c058cd1f2040058c40b802c058b10b802c058b40b802c058b6", + "0x2b00b0162c42b00b0162e02c00b0162c42c00b0162d82c00b01632c2c00b", + "0x58b10a602c058b60a602c058cb0a602c058b81f202c058cd0ac040058c4", + "0x58b81ea02c058cd0b0040058c400a3ec2880b0163342880b0162e02980b", + "0x7880b0162d47880b0162e07880b01632c7880b0163082680b0162e02600b", + "0x7600b0162fc2680b016334028fc09802c058b41e202c058b11e202c058b6", + "0x58c407e02c058b507a02c058ca1d002c058bf1d602c058bf1f4040058c4", + "0x60bb00a0302000b0182ec2000b0163342100b0162c47380b0163342d010", + "0x880b0162d06a80b0162d40280c1aa02c060bb14c02c058c200a0305200b", + "0x6c80b0162c40580c08002c060bb0160305200b0182ec0580c1aa02c060bb", + "0x280c1b402c060bb14002c058c214402c058b807a02c058b307a02c058b2", + "0x2e0100163103f80b0163080580c1b402c060bb1b202c058b81b402c058b5", + "0x4d80b0182ec0280c07402c060bb07402c058cd07802c058b11bc02c058cd", + "0x580c13602c060bb1b802c058b500a0306e00b0182ec4e80b0163080280c", + "0x58b802802c058b302802c058b20160301d00b0182ec0580c1b802c060bb", + "0xf00b0162d07000b0162d40280c1c002c060bb00a0304c80b0182ec2d00b", + "0x60bb00a0303a80b0182ec028fd0160307000b0182ec0580c13202c060bb", + "0x60bb1c602c058b500a0307180b0182ec0280c12802c060bb0160303a80b", + "0x60bb12202c058c200a0304780b0182ec0580c1c602c060bb0160304a00b", + "0x7280b0182ec0580c11e02c060bb06e02c058d01ca02c058b500a0307280b", + "0x7300b0162e04680b0162e01b80b0162cc1b80b0162c87300b0162c40580c", + "0x280c1d202c060bb11402c058c200a0304400b0182ec0280c10c02c060bb", + "0x2f0100163101600b0162d40600b0163280580c1d202c060bb1d202c058b5", + "0x4400b0182ec0580c10c02c060bb06802c058cd06c02c058b11a402c058cd", + "0x7500b0162e04200b0162e00600b0162cc0600b0162c87500b0162c40580c", + "0x60bb1da02c058b500a0307680b0182ec0280c10402c060bb03c02c058b6", + "0x60bb00a0303c80b0182ec0580c10402c060bb10002c058c20160307680b", + "0x7700b0182ec7700b0162d40280c1dc02c060bb0fa02c058c200a0303d80b", + "0x3c80b0182ec1780b0163341880b0162c47f00b0163342f8100163100580c", + "0x58b500a0307780b0182ec0280c0ee02c060bb0160303d80b0182ec0580c", + "0x60bb00a0303900b0182ec0580c0ee02c060bb0160307780b0182ec7780b", + "0x60bb0160303900b0182ec0280c0e002c060bb1e002c058b500a0307800b", + "0x280c1e402c060bb00a0303680b0182ec0580c1e002c060bb0160303800b", + "0x60bb0d402c058c20160307900b0182ec0580c0da02c060bb1e402c058b5", + "0x7f80b016334308100163100580c1ec02c060bb1ec02c058b500a0307b00b", + "0x7b80b0162d40280c1ee02c060bb0ca02c058c20c602c058c205602c058b1", + "0x58ca03002c0590200a4040c00b0164000580c1ee02c060bb07a02c058b8", + "0x1000b0163341100b0162c48180b0163347c0100163100b80b0162d40a00b", + "0x3080b0163080280c0be02c060bb0bc02c058c202e02c058b802e02c058cb", + "0x580c0be02c060bb0160307c00b0182ec7c00b0162d40280c1f002c060bb", + "0x58c20ac02c058c202002c058b120a02c058cd0c6040058c420802c058b8", + "0x2880b0182ec0580c1f402c060bb1f402c058b500a0307d00b0182ec2c00b", + "0x580c0a202c060bb1f202c058b500a0307c80b0182ec2980b0163080280c", + "0x7a80b0162d40280c1ea02c060bb00a0302680b0182ec0580c1f202c060bb", + "0x58b504602c058c201602c058c20160307a80b0182ec0580c09a02c060bb", + "0x58b807a02c058d01ce02c058b500a0307380b0182ec2100b0163081180b", + "0x280c1bc02c060bb07802c058c207202c058c20160307380b0182ec1f80b", + "0x60bb06c02c058c200a0301a00b0182ec0580c1bc02c060bb1bc02c058b5", + "0x580c06802c060bb05802c058b801802c058d01a402c058b500a0306900b", + "0x60bb06202c058c200a0301780b0182ec1700b0163080580c1a402c060bb", + "0x58c20160301780b0182ec0580c1fc02c060bb1fc02c058b500a0307f00b", + "0x1000b0182ec0580c1fe02c060bb1fe02c058b500a0307f80b0182ec1580b", + "0x60bb02802c058d020602c058b500a0308180b0182ec1100b0163080280c", + "0x58b500a0308280b0182ec0800b0163080580c20602c060bb0160301000b", + "0x8380c0160140600b00a0148380b00a014029060160308280b0182ec8280b", + "0x281b01641c058100160400280520e02c0280c00a0800b80c2104140880c", + "0x581f0164140280520e02c0280c00a088058c603e0780610701806c05811", + "0x581b00a40c0590701640c0582000a40c0590701608c0581700a08c05907", + "0x29070160140600520802c7400520e0300c00b03c0140c10301841c05903", + "0x61070180780581100a078059070160780582200a0148380b20602c0f805", + "0x581700a3fc059070160a40590500a0148380b00a0300282b01637814814", + "0x1700c20e0301601101808c0282c01641c0582c0160800282c01641c058ff", + "0x1780b0300147f00b20e02c8280b206014029070160140600506202c6902f", + "0x1480506c02c8380b1fc02c0a00506802c8380b05c02c8200521202c8380b", + "0x600500a168058050560146980b20e02c0a00b0440146900b20e02c8480b", + "0x590400a350059070164140590300a0148380b02802c7f80500a41c05805", + "0x280c00a0145e00b00a0ac0283a01641c058d40160500283901641c05831", + "0x880b2080141e00b20e02c8280b206014029070160ac058ff00a0148380b", + "0x5805018014028bc0160141580507402c8380b07802c0a00507202c8380b", + "0x58de206030178051bc02c8380b00a0b80280520e02c8200b05801402907", + "0x283f0164280290701837c0581e00a37c0590701637c0582000a37c05907", + "0x7f00508402c8380b00a0c40284001641c0590501640c0280520e02c0280c", + "0x1b00b20e02c2000b0280141a00b20e02c0880b2080147380b20e02c2100b", + "0x8380c1a602c088051a602c8380b03c02c110051a402c8380b1ce02c14805", + "0x590900a0148380b1d002c7f80500a41c058050180147600b0da3ac7400c", + "0x2600b1a40142600b20e02c0283600a0148380b1a402c1a00500a41c058eb", + "0x6980506c02c8380b06c02c0a00506802c8380b06802c8200507a02c8380b", + "0x600507a0301b03402202c1e80b20e02c1e80b1a80140600b20e02c0600b", + "0x2680b0740142680b20e02c0283900a0148380b1d802c7f80500a41c05805", + "0x280c00a14c2880c1b83d47880c20e030268360680401e00509a02c8380b", + "0x583400a1602b00c20e02c6900b1be0147c80b20e02c028de00a0148380b", + "0x285a0162207d00b20e0302c00b080014029070160141f80500a41c05856", + "0x285e01641c058fa0161080285c01641c058f501640c0280520e02c0280c", + "0x3080b20e02c3080b0400143080b20e02c028e800a17c05907016178058e7", + "0x2e00b0280143180b20e02c2f8f80183ac028f801641c058611f203075805", + "0x5805018014028e5016014158051ee02c8380b0c602c760050ca02c8380b", + "0x8380b00a0b80286801641c058f501640c0280520e02c2d00b09801402907", + "0x581400a3d8059070161a87c80c1d60143500b20e02c3500b0400143500b", + "0x584d00a0148380b00a0f4028f701641c058f60163b00286501641c05868", + "0x287001641c058f20163d40280520e02c3680b1e20147906d01841c058f7", + "0x59070163c40590400a3c0059070161c80585300a1c8059070161c005851", + "0x58f00163500280c01641c0580c01634c0286501641c05865016050028f1", + "0x29070163480583400a0148380b00a030028f0018194788110163c005907", + "0x8380b0ea02c0a0050ee02c8380b0a202c820050ea02c8380b0a602c81805", + "0x280520e02c1f80b058014029070160140600500a42c058050560147780b", + "0x3c80b20e02c0880b2080148600b20e02c8280b20601402907016078058ff", + "0x7f80500a41c058050180140290e0160141580521a02c8380b21802c0a005", + "0x283901641c058110164100287b01641c0590501640c0280520e02c1100b", + "0x59070160e80585600a1e4059070160e4058f900a0e8059070161ec05814", + "0x8380b0f202c820051dc02c8380b0fa02c690050fa02c8380b00a1600290d", + "0x7700b1a80140600b20e02c0600b1a60148680b20e02c8680b0280143c80b", + "0x8380b02002c7d00500a41c058050180147700c21a1e40880b1dc02c8380b", + "0x58800160500287701641c058170164100288001641c0582001640c02805", + "0x3b80b2080144100b20e02c3f80b1a40143f80b20e02c0285a00a3bc05907", + "0x6a00501802c8380b01802c698051de02c8380b1de02c0a0050ee02c8380b", + "0x280c01601402907016014028051040307787702202c4100b20e02c4100b", + "0x8380b02202c8200500a41c058050180141001701843c8281101841c0600b", + "0x88100bc0140800b20e02c0800b0b80148280b20e02c8280b0280140880b", + "0x280c00a08c0591004402c8380c03e02c2f80503e0780d81020e02c08105", + "0x591120802c8380c03002c7c00503040c061070160880586100a0148380b", + "0x61070180a40581100a0a40590701640c0581000a0148380b00a03002814", + "0x7f80b212014029070160ac058ff00a0148380b00a0300282c0164487f82b", + "0x582e0163480282e01641c0580506c014029070164100586300a0148380b", + "0x58d300a078059070160780581400a06c0590701606c0590400a0bc05907", + "0x280c00a0bc0601e0360440582f01641c0582f0163500280c01641c0580c", + "0x58310160e80283101641c05805072014029070160b0058ff00a0148380b", + "0x58050180141b03401844c848fe01841c0603103c06c0803c00a0c405907", + "0x6980b0c60146a0d301841c05904016194028d201641c058051bc01402907", + "0x3400500a41c058050180141d00b2280e405907018350058f700a0148380b", + "0x5907016378058f600a378059070160f00586a00a0f01c80c20e02c1c80b", + "0x583f1a40307580507e02c8380b07e02c1000507e02c8380b00a3a0028df", + "0x3680508402c8380b1be100060eb00a37c0590701637c0582000a10005907", + "0x8480b20e02c8480b0280147f00b20e02c7f00b2080147380b20e02c1c80b", + "0x739091fc0443800508402c8380b08402c760051ce02c8380b1ce02c79005", + "0x58050180141e80b22a130059070183b00587200a3b0758e802041c05842", + "0x584c00a3d47880c20e02c2600b1e00142680b20e02c7580b20601402907", + "0x760050a602c8380b09a02c0a0050a202c8380b1d002c8200500a41c058f5", + "0x1e80b1a4014029070160140600500a458058050560147c80b20e02c7880b", + "0x698051d602c8380b1d602c0a0051d002c8380b1d002c820050ac02c8380b", + "0x60050ac030758e802202c2b00b20e02c2b00b1a80140600b20e02c0600b", + "0x282e00a160059070164240590300a0148380b07402c2600500a41c05805", + "0x285a01641c058fa1a4030758051f402c8380b1f402c100051f402c8380b", + "0x5907016168058ec00a14c059070161600581400a144059070163f805904", + "0x585e0163d40280520e02c2e00b1e20142f05c01841c058f9016134028f9", + "0x590400a3e0059070161840585300a1840590701617c0585100a17c05907", + "0x280c01641c0580c01634c0285301641c058530160500285101641c05851", + "0x586300a0148380b00a030028f801814c288110163e0059070163e0058d4", + "0xa0050ca02c8380b06802c820050c602c8380b06c02c8180500a41c05904", + "0xa00b098014029070160140600500a45c058050560147b80b20e02c3180b", + "0x58680163480286801641c058050b00140290701640c058fa00a0148380b", + "0x58d300a078059070160780581400a06c0590701606c0590400a1a805907", + "0x280c00a1a80601e0360440586a01641c0586a0163500280c01641c0580c", + "0x581400a06c0590701606c0590400a3d80590701608c058d200a0148380b", + "0x58f601641c058f60163500280c01641c0580c01634c0281e01641c0581e", + "0x1000b20601402907016040058fa00a0148380b00a030028f60180780d811", + "0x2d0051ee02c8380b0da02c0a0050ca02c8380b02e02c820050da02c8380b", + "0x286501641c058650164100287001641c058f2016348028f201641c05805", + "0x59070161c0058d400a03005907016030058d300a3dc059070163dc05814", + "0x880c20e0300580501802c0280520e02c0280500a1c0060f70ca04405870", + "0x581100a06c059070160400581000a0148380b00a0300282002e0308c105", + "0x590701607c0590500a0148380b00a030028220164640f81e01841c0601b", + "0x590301606c0290301641c059030160800290301641c0582301605c02823", + "0xf80500a41c058050180148200b2340148380c03002c0f00503040c06107", + "0x281101641c058110164100281401641c0581e0163d40280520e02c8180b", + "0x7f80b0ee0147f82b0520408380b0280440607500a050059070160500585c", + "0x282f01641c0590501640c0280520e02c0280c00a0b80591b05802c8380c", + "0x59070160a40590400a3f8059070160ac0581000a0c4059070160b0058ef", + "0x58fe0160880283601641c058310164300283401641c0582f01605002909", + "0x29070160b80584c00a0148380b00a0300280523802c0282b00a34805907", + "0x59070160a40590400a34c059070164140590300a0148380b05602c7d005", + "0x280520e02c0280c00a0148e80b00a0ac0283901641c058d3016050028d4", + "0x1e00b20e02c1d1030180bc0283a01641c0580505c014029070164100582c", + "0x58050180146f00b23c0148380c07802c0f00507802c8380b07802c10005", + "0x583f0161e40283f01641c058050620146f80b20e02c8280b20601402907", + "0x590c00a0d00590701637c0581400a424059070160440590400a10005907", + "0x7384201841c060d2016044028d201641c0581e0160880283601641c05840", + "0x8380b1ce02c8480500a41c058420163fc0280520e02c0280c00a3a00591f", + "0x59070163ac058d200a3ac059070160141b00500a41c0583601643402805", + "0x580c01634c0283401641c058340160500290901641c05909016410028ec", + "0x8380b00a030028ec0180d0848110163b0059070163b0058d400a03005907", + "0x59070161300583a00a130059070160141c80500a41c058e80163fc02805", + "0x2907016014060051ea3c40612009a0f4061070181301a1090200f00284c", + "0x8380b0a602c868051f214c061070160d80587b00a144059070160146f005", + "0x58050180142c00b242158059070183e40587700a0148380b00a0fc02805", + "0x770050bc1702d01020e02c2b00b0fa0147d00b20e02c2680b20601402907", + "0x7c00b20e02c2e00b1dc0143080b20e02c2f80b1ec0142f80b20e02c2d00b", + "0x8380b0ca02c7b0050ca02c8380b0bc02c770050c602c8380b1f002c7b005", + "0x340510183ac0286801641c058680160800286801641c058051d00147b80b", + "0x3680b20e02c318f60183ac028f601641c058610d4030758050d402c8380b", + "0x58f20163b00287001641c058fa016050028f201641c058f70da03075805", + "0x29070161600584c00a0148380b00a0300280524402c0282b00a1c805907", + "0x59070161d40582000a1d405907016014170051e002c8380b09a02c81805", + "0x3b80b1d80143800b20e02c7800b0280143b80b20e02c3a8510183ac02875", + "0x58f100a4307780c20e02c3900b09a014029070160141e8050e402c8380b", + "0x2980521a02c8380b0f202c288050f202c8380b21802c7a80500a41c058ef", + "0x3800b20e02c3800b0280141e80b20e02c1e80b2080143d80b20e02c8680b", + "0x3d80c0e00f40880b0f602c8380b0f602c6a00501802c8380b01802c69805", + "0x287d01641c058f501640c0280520e02c1b00b21a0140290701601406005", + "0x280524602c0282b00a200059070161f40581400a3b8059070163c405904", + "0x590300a0148380b03c02c7f80500a41c058de0160b00280520e02c0280c", + "0x283901641c0587f016050028d401641c058110164100287f01641c05905", + "0x8280b20601402907016088058ff00a0148380b00a0300280523a02c0282b", + "0x2c00507202c8380b10402c0a0051a802c8380b02202c8200510402c8380b", + "0x28d401641c058d40164100288401641c058ed016348028ed01641c05805", + "0x5907016210058d400a03005907016030058d300a0e4059070160e405814", + "0x8180500a41c058100163e80280520e02c0280c00a210060391a804405884", + "0x4000b20e02c7500b0280147700b20e02c0b80b2080147500b20e02c1000b", + "0x59070163b80590400a49005907016218058d200a218059070160142d005", + "0x59240163500280c01641c0580c01634c0288001641c05880016050028ee", + "0x8380c0160140600b00a0148380b00a014029240182007701101649005907", + "0x281101641c058110164100280520e02c0280c00a0800b80c24a4140880c", + "0x581020a0440808000a040059070160400585c00a4140590701641405814", + "0x29070160140600504602c9302201641c0601f0161fc0281f03c06c08107", + "0x600502802c9390401641c060180163b4028182060308380b04402c41005", + "0x940ff0560308380c05202c0880505202c8380b20602c0800500a41c05805", + "0x29070163fc0590900a0148380b05602c7f80500a41c058050180141600b", + "0x1780b20e02c1700b1a40141700b20e02c0283600a0148380b20802c42005", + "0x8380b01802c6980503c02c8380b03c02c0a00503602c8380b03602c82005", + "0x29070160140600505e0300f01b02202c1780b20e02c1780b1a80140600b", + "0x1880b20e02c1880b0740141880b20e02c0283900a0148380b05802c7f805", + "0x280520e02c0280c00a0d81a00c2524247f00c20e0301881e0360401e005", + "0x290701634c0588400a3506980c20e02c8200b1d40146900b20e02c028de", + "0x58390164900280520e02c0280c00a0e80592a07202c8380c1a802c43005", + "0x4400507e02c8380b1be02c7b0051be02c8380b07802c770051bc0f006107", + "0x5907016108058f600a108059070161000588a00a1006f00c20e02c6f00b", + "0x58e81a4030758051d002c8380b1d002c100051d002c8380b00a3a0028e7", + "0x758051ce02c8380b1ce02c100051d802c8380b07e3ac060eb00a3ac05907", + "0x59070163f80590400a0f405907016378058e900a1300590701639c7600c", + "0x584c0163b00283d01641c0583d01622c0290901641c05909016050028fe", + "0x8380c1ea02c390051ea3c42681020e02c2603d2123f80888d00a13005907", + "0x58f000a3e4059070163c40590300a0148380b00a030028530164ac2880b", + "0x28fa01641c0584d0164100280520e02c2c00b0980142c05601841c05851", + "0x280525802c0282b00a17005907016158058ec00a168059070163e405814", + "0x284d01641c0584d0164100285e01641c058530163480280520e02c0280c", + "0x5907016178058d400a03005907016030058d300a3c4059070163c405814", + "0x8180500a41c0583a0161300280520e02c0280c00a178060f109a0440585e", + "0x286101641c058610160800286101641c0580505c0142f80b20e02c8480b", + "0x8380b0be02c0a0051f402c8380b1fc02c820051f002c8380b0c2348060eb", + "0x58f100a1943180c20e02c2e00b09a0142e00b20e02c7c00b1d80142d00b", + "0x298050d002c8380b1ee02c288051ee02c8380b0ca02c7a80500a41c05863", + "0x2d00b20e02c2d00b0280147d00b20e02c7d00b2080143500b20e02c3400b", + "0x3500c0b43e80880b0d402c8380b0d402c6a00501802c8380b01802c69805", + "0x28f601641c0583601640c0280520e02c8200b1080140290701601406005", + "0x280525a02c0282b00a3c8059070163d80581400a1b4059070160d005904", + "0x285800a0148380b20602c7d00500a41c058140161300280520e02c0280c", + "0xa00503602c8380b03602c820050e402c8380b0e002c690050e002c8380b", + "0x3900b20e02c3900b1a80140600b20e02c0600b1a60140f00b20e02c0f00b", + "0x820051e002c8380b04602c6900500a41c058050180143900c03c06c0880b", + "0x600b20e02c0600b1a60140f00b20e02c0f00b0280140d80b20e02c0d80b", + "0x7d00500a41c058050180147800c03c06c0880b1e002c8380b1e002c6a005", + "0x286d01641c058170164100287501641c0582001640c0280520e02c0800b", + "0x7780b20e02c3b80b1a40143b80b20e02c0285a00a3c8059070161d405814", + "0x8380b01802c698051e402c8380b1e402c0a0050da02c8380b0da02c82005", + "0x2907016014028051de0307906d02202c7780b20e02c7780b1a80140600b", + "0x8200500a41c05805018014100170184b88281101841c0600b00a03005805", + "0x81070160400880c1cc0140800b20e02c0800b0b80140880b20e02c0880b", + "0x800500a41c058050180141180b25e0880590701807c0588f00a07c0f01b", + "0x58050180140a00b2604100c00c20e0308180b0220148180b20e02c0f00b", + "0x8380b04402c4880500a41c059040164240280520e02c0c00b1fe01402907", + "0x8380b03602c8200505602c8380b05202c6900505202c8380b00a0d802805", + "0x1580b1a80140600b20e02c0600b1a60148280b20e02c8280b0280140d80b", + "0x8380b02802c7f80500a41c058050180141580c20a06c0880b05602c8380b", + "0x7f9050360401e0051fe02c8380b1fe02c1d0051fe02c8380b00a0e402805", + "0x7f00b20e02c028de00a0148380b00a0300283105e0309882e0580308380c", + "0x29070160141f80500a41c05909016244028342120308380b04402c72805", + "0x8380b00a3a00280520e02c0280c00a3480593206c02c8380c06802c4a005", + "0x584000a3500590701634c7f00c1d60146980b20e02c6980b0400146980b", + "0x1e00b20e02c1700b206014029070160140600507402c9983901641c06036", + "0x5907016014740051be02c8380b1bc02c738051bc02c8380b07202c21005", + "0x2000c1d60142000b20e02c1f8d40183ac0283f01641c0583f0160800283f", + "0x28e801641c058420163b0028e701641c0583c0160500284201641c058df", + "0x1700b206014029070160e80584c00a0148380b00a0300280526802c0282b", + "0x1580509802c8380b1a802c760051d802c8380b1d602c0a0051d602c8380b", + "0x582e01640c0280520e02c6900b098014029070160140600500a4d405805", + "0x282e00a130059070163f8058ec00a3b0059070160f40581400a0f405907", + "0x28f101641c0584d0980307580509a02c8380b09a02c1000509a02c8380b", + "0x280520e02c0283d00a3a0059070163c4058ec00a39c059070163b005814", + "0x5907016144058f500a0148380b1ea02c788050a23d4061070163a00584d", + "0x582c0164100285601641c058f901614c028f901641c0585301614402853", + "0x58d400a03005907016030058d300a39c0590701639c0581400a0b005907", + "0x58220162440280520e02c0280c00a158060e70580440585601641c05856", + "0x2c00b0280147d00b20e02c1780b2080142c00b20e02c1880b20601402907", + "0x8380b04602c2600500a41c0580501801402936016014158050b402c8380b", + "0x5907016170058d200a170059070160142c00500a41c0581e0163e802805", + "0x580c01634c0290501641c059050160500281b01641c0581b0164100285e", + "0x8380b00a0300285e0184140d81101617805907016178058d400a03005907", + "0x8380b02e02c820050be02c8380b04002c8180500a41c058100163e802805", + "0x58610163480286101641c058050b40142d00b20e02c2f80b0280147d00b", + "0x58d300a168059070161680581400a3e8059070163e80590400a3e005907", + "0x280500a3e00605a1f4044058f801641c058f80163500280c01641c0580c", + "0x8380b00a0300282002e0309b9050220308380c0160140600b00a0148380b", + "0x28220164e00f81e01841c0601b0160440281b01641c0581001604002805", + "0x290301641c0582301605c0282301641c0581f0164140280520e02c0280c", + "0x8380c03002c0f00503040c0610701640c0581b00a40c0590701640c05820", + "0x581e0163d40280520e02c8180b03e014029070160140600520802c9c805", + "0x60e300a050059070160500585c00a044059070160440590400a05005907", + "0x280c00a0b80593a05802c8380c1fe02c708051fe0ac1481020e02c0a011", + "0x581000a0c4059070160b00583700a0bc059070164140590300a0148380b", + "0x283401641c0582f0160500290901641c05829016410028fe01641c0582b", + "0x280527602c0282b00a348059070163f80582200a0d8059070160c405899", + "0x590300a0148380b05602c7d00500a41c0582e0161300280520e02c0280c", + "0x283901641c058d3016050028d401641c05829016410028d301641c05905", + "0x580505c014029070164100582c00a0148380b00a0300280527802c0282b", + "0xf00507802c8380b07802c1000507802c8380b07440c0602f00a0e805907", + "0x6f80b20e02c8280b20601402907016014060051bc02c9e80520e0301e00b", + "0x59070160440590400a100059070160fc058e000a0fc0590701601418805", + "0x581e0160880283601641c058400162640283401641c058df01605002909", + "0x280520e02c0280c00a3a00593e1ce108061070183480581100a34805907", + "0x1b00500a41c058360164fc0280520e02c7380b21201402907016108058ff", + "0x290901641c05909016410028ec01641c058eb016348028eb01641c05805", + "0x59070163b0058d400a03005907016030058d300a0d0059070160d005814", + "0x1c80500a41c058e80163fc0280520e02c0280c00a3b006034212044058ec", + "0x61070181301a1090200f00284c01641c0584c0160e80284c01641c05805", + "0x594100a144059070160146f00500a41c058050180147a8f10185002683d", + "0x58e100a0148380b00a0fc0280520e02c2980b27e0147c85301841c05836", + "0x28fa01641c058051d001402907016014060050b002ca105601641c060f9", + "0x8380c0ac02c4d8050b402c8380b1f4144060eb00a3e8059070163e805820", + "0x589d00a17c059070161340590300a0148380b00a0300285e01650c2e00b", + "0x100050c602c8380b00a3a0028f801641c058610163700286101641c0585c", + "0x8380b1f0194060eb00a1940590701618c2d00c1d60143180b20e02c3180b", + "0x58050560143500b20e02c7b80b1d80143400b20e02c2f80b0280147b80b", + "0x8380b0bc02c210051ec02c8380b09a02c8180500a41c0580501801402944", + "0x58700160800287001641c0580505c0147900b20e02c3680b1ce0143680b", + "0x28f001641c058f20e4030758050e402c8380b0e0168060eb00a1c005907", + "0x280528802c0282b00a1a8059070163c0058ec00a1a0059070163d805814", + "0x170050ea02c8380b09a02c8180500a41c058580161300280520e02c0280c", + "0x7780b20e02c3b8510183ac0287701641c058770160800287701641c05805", + "0x29070160141e8050d402c8380b1de02c760050d002c8380b0ea02c0a005", + "0x8380b0f202c7a80500a41c0590c0163c4028792180308380b0d402c26805", + "0x1e80b2080143e80b20e02c3d80b0a60143d80b20e02c8680b0a20148680b", + "0x6a00501802c8380b01802c698050d002c8380b0d002c0a00507a02c8380b", + "0x1b00b27e01402907016014060050fa0303403d02202c3e80b20e02c3e80b", + "0x581400a200059070163c40590400a3b8059070163d40590300a0148380b", + "0x58de0160b00280520e02c0280c00a014a280b00a0ac0287f01641c058ee", + "0x58110164100288201641c0590501640c0280520e02c0f00b1fe01402907", + "0x8380b00a0300280527802c0282b00a0e4059070162080581400a35005907", + "0x8380b02202c820051da02c8380b20a02c8180500a41c058220163fc02805", + "0x58840163480288401641c058050b00141c80b20e02c7680b0280146a00b", + "0x58d300a0e4059070160e40581400a350059070163500590400a3a805907", + "0x280c00a3a8060391a8044058ea01641c058ea0163500280c01641c0580c", + "0xb80b2080144300b20e02c1000b20601402907016040058fa00a0148380b", + "0x58d200a490059070160142d0050fe02c8380b10c02c0a00510002c8380b", + "0x287f01641c0587f0160500288001641c058800164100288801641c05924", + "0x28880181fc4001101622005907016220058d400a03005907016030058d3", + "0x280c00a0800b80c28c4140880c20e0300580501802c0280520e02c02805", + "0x60db00a040059070160400585c00a044059070160440590400a0148380b", + "0x280c00a08c0594704402c8380c03e02c5000503e0780d81020e02c08011", + "0x59482080600610701840c0581100a40c059070160780581000a0148380b", + "0x280520e02c8200b21201402907016060058ff00a0148380b00a03002814", + "0x282b01641c058290163480282901641c0580506c01402907016088058da", + "0x5907016030058d300a414059070164140581400a06c0590701606c05904", + "0x280520e02c0280c00a0ac061050360440582b01641c0582b0163500280c", + "0x28ff01641c058ff0160e8028ff01641c0580507201402907016050058ff", + "0x6f00500a41c058050180141882f0185241702c01841c060ff20a06c0803c", + "0x280520e02c8480b1b40141a10901841c05822016288028fe01641c05805", + "0x2907016014060051a402ca503601641c060340163640280520e02c0283f", + "0x58d4016290028d406c0308380b06c02c850051a602c8380b05c02c81805", + "0x58aa00a0f0059070160e4058d500a0148380b07402c530050740e406107", + "0x280520e02c6f80b19e0141f8df01841c05836016290028de01641c0583c", + "0x7380b20e02c028e800a10805907016100058f600a100059070160fc058ee", + "0x6f0e80183ac028e801641c058e71fc030758051ce02c8380b1ce02c10005", + "0x284c01641c058d3016050028ec01641c058421d6030758051d602c8380b", + "0x584c00a0148380b00a0300280529602c0282b00a0f4059070163b0058ec", + "0x582000a3c4059070160141700509a02c8380b05c02c8180500a41c058d2", + "0x2600b20e02c2680b0280147a80b20e02c788fe0183ac028f101641c058f1", + "0x2880c20e02c1e80b09a014029070160141e80507a02c8380b1ea02c76005", + "0x8380b1f202c288051f202c8380b0a602c7a80500a41c058510163c402853", + "0x2600b0280141600b20e02c1600b2080142c00b20e02c2b00b0a60142b00b", + "0x880b0b002c8380b0b002c6a00501802c8380b01802c6980509802c8380b", + "0x583101640c0280520e02c1100b1b401402907016014060050b00302602c", + "0x282b00a170059070163e80581400a168059070160bc0590400a3e805907", + "0x8380b03c02c7d00500a41c058230161300280520e02c0280c00a014a600b", + "0x8380b03602c820050be02c8380b0bc02c690050bc02c8380b00a16002805", + "0x2f80b1a80140600b20e02c0600b1a60148280b20e02c8280b0280140d80b", + "0x8380b02002c7d00500a41c058050180142f80c20a06c0880b0be02c8380b", + "0x58610160500285a01641c058170164100286101641c0582001640c02805", + "0x2d00b2080143180b20e02c7c00b1a40147c00b20e02c0285a00a17005907", + "0x6a00501802c8380b01802c698050b802c8380b0b802c0a0050b402c8380b", + "0x280c01601402907016014028050c60302e05a02202c3180b20e02c3180b", + "0x8380b02002c0800500a41c05805018014100170185348281101841c0600b", + "0x8280500a41c058050180141100b29c07c0f00c20e0300d80b0220140d80b", + "0x281801641c058051900148180b20e02c1180b02e0141180b20e02c0f80b", + "0x59070164140581400a044059070160440590400a41005907016078058f5", + "0x59030160800281801641c058180163180290401641c0590401617002905", + "0x602b0163000282b0520500810701640c0c10420a044828c500a40c05907", + "0x282f05c0308380b1fe02c5f00500a41c058050180141600b29e3fc05907", + "0x8380b05c02c0800500a41c058050180147f00b2a00c4059070180bc058c3", + "0x7f80500a41c058050180146900b2a20d81a00c20e0308480b0220148480b", + "0x283600a0148380b06202c5e00500a41c058360164240280520e02c1a00b", + "0xa00502802c8380b02802c820051a802c8380b1a602c690051a602c8380b", + "0x6a00b20e02c6a00b1a80140600b20e02c0600b1a60141480b20e02c1480b", + "0x283900a0148380b1a402c7f80500a41c058050180146a00c0520500880b", + "0x1d00c20e0301c8290280401e00507202c8380b07202c1d00507202c8380b", + "0x5e0050800fc061070160c40580000a0148380b00a030028df1bc030a903c", + "0x7380b20e02c2100b2a60142104001841c058400164380280520e02c1f80b", + "0x59070163a00582000a3ac059070160146f0051d002c8380b1ce02c7b005", + "0x1d00b2080142600b20e02c2000b2a80147600b20e02c740eb0183ac028e8", + "0x7600509802c8380b09802caa80507802c8380b07802c0a00507402c8380b", + "0x587200a3c42683d02041c058ec0980f01d0112ac0147600b20e02c7600b", + "0x2980b20e02c2680b20601402907016014060050a202cab8f501641c060f1", + "0x8380b1f202c2680500a41c05856016130028561f20308380b1ea02c78005", + "0x2d00b0a20142d00b20e02c7d00b1ea01402907016160058f100a3e82c00c", + "0xa00507a02c8380b07a02c820050bc02c8380b0b802c298050b802c8380b", + "0x2f00b20e02c2f00b1a80140600b20e02c0600b1a60142980b20e02c2980b", + "0x820050be02c8380b0a202c6900500a41c058050180142f00c0a60f40880b", + "0x600b20e02c0600b1a60142680b20e02c2680b0280141e80b20e02c1e80b", + "0x5e00500a41c058050180142f80c09a0f40880b0be02c8380b0be02c6a005", + "0x28f801641c058de0164100286101641c058df01640c0280520e02c1880b", + "0x584c00a0148380b00a030028052b002c0282b00a18c0590701618405814", + "0x590400a194059070160a40590300a0148380b05c02c7d00500a41c058fe", + "0x280c00a014ac80b00a0ac0286801641c05865016050028f701641c05814", + "0x581400a050059070160500590400a1a8059070160b0058d200a0148380b", + "0x586a01641c0586a0163500280c01641c0580c01634c0282901641c05829", + "0x8280b20601402907016088058ff00a0148380b00a0300286a0180a40a011", + "0x2c0050d002c8380b1ec02c0a0051ee02c8380b02202c820051ec02c8380b", + "0x28f701641c058f7016410028f201641c0586d0163480286d01641c05805", + "0x59070163c8058d400a03005907016030058d300a1a0059070161a005814", + "0x8180500a41c058100163e80280520e02c0280c00a3c8060681ee044058f2", + "0x3180b20e02c3800b0280147c00b20e02c0b80b2080143800b20e02c1000b", + "0x59070163e00590400a3c0059070161c8058d200a1c8059070160142d005", + "0x58f00163500280c01641c0580c01634c0286301641c05863016050028f8", + "0x8380c0160140600b00a0148380b00a014028f001818c7c0110163c005907", + "0x281b01641c058100160400280520e02c0280c00a0800b80c2b44140880c", + "0x581f0164140280520e02c0280c00a0880595b03e0780610701806c05811", + "0x581b00a40c0590701640c0582000a40c0590701608c0581700a08c05907", + "0x29070160140600520802cae00520e0300c00b03c0140c10301841c05903", + "0x61070180780581100a078059070160780582200a0148380b20602c0f805", + "0x581700a3fc059070160a40590500a0148380b00a0300282b01657414814", + "0x1700c20e0301601101808c0282c01641c0582c0160800282c01641c058ff", + "0x590501640c0280520e02c1780b2be014029070160140600506202caf02f", + "0x582200a0d0059070163f80581400a424059070160b80590400a3f805907", + "0x58140163fc0280520e02c0280c00a014b000b00a0ac0283601641c05814", + "0x6900b0280146980b20e02c1880b2080146900b20e02c8280b20601402907", + "0x8380b05602c7f80500a41c0580501801402961016014158051a802c8380b", + "0x5839016050028d301641c058110164100283901641c0590501640c02805", + "0x29070164100582c00a0148380b00a030028052c202c0282b00a35005907", + "0x8380b07802c1000507802c8380b07440c0602f00a0e80590701601417005", + "0x8280b20601402907016014060051bc02cb100520e0301e00b03c0141e00b", + "0x1100506802c8380b1be02c0a00521202c8380b02202c820051be02c8380b", + "0x58050180142100b2c61001f80c20e0301b00b0220141b00b20e02c0f00b", + "0x59070160141b00500a41c058400164240280520e02c1f80b1fe01402907", + "0x58340160500290901641c05909016410028e801641c058e7016348028e7", + "0x848110163a0059070163a0058d400a03005907016030058d300a0d005907", + "0x59070160141c80500a41c058420163fc0280520e02c0280c00a3a006034", + "0x61640983b0061070183ac1a1090200f0028eb01641c058eb0160e8028eb", + "0x59070160146f0051e202c8380b09802c8180500a41c058050180142683d", + "0x58530163d40280520e02c2880b1e20142985101841c058f5016134028f5", + "0x590400a160059070161580585300a158059070163e40585100a3e405907", + "0x280c01641c0580c01634c028f101641c058f1016050028ec01641c058ec", + "0x590300a0148380b00a030028580183c47601101616005907016160058d4", + "0x285c01641c058fa0160500285a01641c0583d016410028fa01641c0584d", + "0xf00b1fe014029070163780582c00a0148380b00a030028052ca02c0282b", + "0x581400a17c059070160440590400a178059070164140590300a0148380b", + "0x58220163fc0280520e02c0280c00a014b300b00a0ac0286101641c0585e", + "0x7c00b0280146980b20e02c0880b2080147c00b20e02c8280b20601402907", + "0x2c0050c202c8380b1a802c2b0050be02c8380b1a602c7c8051a802c8380b", + "0x285f01641c0585f0164100286501641c058630163480286301641c05805", + "0x5907016194058d400a03005907016030058d300a1840590701618405814", + "0x8180500a41c058100163e80280520e02c0280c00a194060610be04405865", + "0x2e00b20e02c7b80b0280142d00b20e02c0b80b2080147b80b20e02c1000b", + "0x59070161680590400a1a8059070161a0058d200a1a0059070160142d005", + "0x586a0163500280c01641c0580c01634c0285c01641c0585c0160500285a", + "0x8380c0160140600b00a0148380b00a0140286a0181702d0110161a805907", + "0x281101641c058110164100280520e02c0280c00a0800b80c2ce4140880c", + "0xf80b1400140f81e0360408380b020044060db00a040059070160400585c", + "0x290301641c0581e0160400280520e02c0280c00a08c0596804402c8380c", + "0x58180163fc0280520e02c0280c00a050059692080600610701840c05811", + "0x59070160141b00500a41c058220163680280520e02c8200b21201402907", + "0x59050160500281b01641c0581b0164100282b01641c0582901634802829", + "0xd8110160ac059070160ac058d400a03005907016030058d300a41405907", + "0x59070160141c80500a41c058140163fc0280520e02c0280c00a0ac06105", + "0x616a05c0b0061070183fc8281b0200f0028ff01641c058ff0160e8028ff", + "0x6107016088058a200a3f8059070160146f00500a41c058050180141882f", + "0x59070180d0058d900a0148380b00a0fc0280520e02c8480b1b40141a109", + "0x1b00b2140146980b20e02c1700b20601402907016014060051a402cb5836", + "0x280520e02c1d00b14c0141d03901841c058d4016290028d406c0308380b", + "0x61070160d8058a400a378059070160f0058aa00a0f0059070160e4058d5", + "0x58400163d80284001641c0583f0163b80280520e02c6f80b19e0141f8df", + "0x7f00c1d60147380b20e02c7380b0400147380b20e02c028e800a10805907", + "0x59070161087580c1d60147580b20e02c6f0e80183ac028e801641c058e7", + "0xb600b00a0ac0283d01641c058ec0163b00284c01641c058d3016050028ec", + "0x2680b20e02c1700b206014029070163480584c00a0148380b00a03002805", + "0x8380b1e23f8060eb00a3c4059070163c40582000a3c40590701601417005", + "0x580507a0141e80b20e02c7a80b1d80142600b20e02c2680b0280147a80b", + "0x2980b1ea01402907016144058f100a14c2880c20e02c1e80b09a01402907", + "0x820050b002c8380b0ac02c298050ac02c8380b1f202c288051f202c8380b", + "0x600b20e02c0600b1a60142600b20e02c2600b0280141600b20e02c1600b", + "0x6d00500a41c058050180142c00c0980b00880b0b002c8380b0b002c6a005", + "0x285a01641c0582f016410028fa01641c0583101640c0280520e02c1100b", + "0x584c00a0148380b00a030028052da02c0282b00a170059070163e805814", + "0x2f00b1a40142f00b20e02c0285800a0148380b03c02c7d00500a41c05823", + "0x6980520a02c8380b20a02c0a00503602c8380b03602c820050be02c8380b", + "0x60050be0308281b02202c2f80b20e02c2f80b1a80140600b20e02c0600b", + "0x590400a184059070160800590300a0148380b02002c7d00500a41c05805", + "0x690051f002c8380b00a1680285c01641c058610160500285a01641c05817", + "0x2e00b20e02c2e00b0280142d00b20e02c2d00b2080143180b20e02c7c00b", + "0x3180c0b81680880b0c602c8380b0c602c6a00501802c8380b01802c69805", + "0x600504005c0616e20a0440610701802c0280c0160140290701601402805", + "0x7180502002c8380b02002c2e00502202c8380b02202c8200500a41c05805", + "0x600504602cb782201641c0601f0163840281f03c06c081070160400880c", + "0xb81040300308380c20602c0880520602c8380b03c02c0800500a41c05805", + "0x29070164100590900a0148380b03002c7f80500a41c058050180140a00b", + "0x1580b20e02c1480b1a40141480b20e02c0283600a0148380b04402cb8805", + "0x8380b01802c6980520a02c8380b20a02c0a00503602c8380b03602c82005", + "0x2907016014060050560308281b02202c1580b20e02c1580b1a80140600b", + "0x7f80b20e02c7f80b0740147f80b20e02c0283900a0148380b02802c7f805", + "0x280520e02c0280c00a0c41780c2e40b81600c20e0307f9050360401e005", + "0x29070164240597100a0d08480c20e02c1100b2100147f00b20e02c028de", + "0x8380b00a030028d20165cc1b00b20e0301a00b136014029070160141f805", + "0x58d4016370028d401641c05836016274028d301641c0582e01640c02805", + "0x7f00c1d60141d00b20e02c1d00b0400141d00b20e02c028e800a0e405907", + "0x6f80b20e02c6980b0280146f00b20e02c1c83c0183ac0283c01641c0583a", + "0x8180500a41c05805018014029740160141580507e02c8380b1bc02c76005", + "0x7380b20e02c2100b1ce0142100b20e02c6900b0840142000b20e02c1700b", + "0x8380b1d03f8060eb00a3a0059070163a00582000a3a00590701601417005", + "0x58ec00a37c059070161000581400a3b00590701639c7580c1d60147580b", + "0x7880507a130061070160fc0584d00a0148380b00a0f40283f01641c058ec", + "0x28f101641c0584d0161440284d01641c0583d0163d40280520e02c2600b", + "0x590701637c0581400a0b0059070160b00590400a3d4059070163c405853", + "0x60df058044058f501641c058f50163500280c01641c0580c01634c028df", + "0x2880b20e02c1880b206014029070160880597100a0148380b00a030028f5", + "0x2975016014158051f202c8380b0a202c0a0050a602c8380b05e02c82005", + "0x2c00500a41c0581e0163e80280520e02c1180b0980140290701601406005", + "0x281b01641c0581b0164100285801641c058560163480285601641c05805", + "0x5907016160058d400a03005907016030058d300a4140590701641405814", + "0x8180500a41c058100163e80280520e02c0280c00a1600610503604405858", + "0x7c80b20e02c7d00b0280142980b20e02c0b80b2080147d00b20e02c1000b", + "0x590701614c0590400a17005907016168058d200a168059070160142d005", + "0x585c0163500280c01641c0580c01634c028f901641c058f901605002853", + "0x8380c0160140600b00a0148380b00a0140285c0183e42981101617005907", + "0x281101641c058110164100280520e02c0280c00a0800b80c2ec4140880c", + "0x581020a0440817700a040059070160400585c00a4140590701641405814", + "0x29070160140600504602cbc82201641c0601f0165e00281f03c06c08107", + "0x600502802cbe10401641c060180165ec028182060308380b04402cbd005", + "0xbe8ff0560308380c05202c0880505202c8380b20602c0800500a41c05805", + "0x29070163fc0590900a0148380b05602c7f80500a41c058050180141600b", + "0x1780b20e02c1700b1a40141700b20e02c0283600a0148380b20802c85805", + "0x8380b01802c6980503c02c8380b03c02c0a00503602c8380b03602c82005", + "0x29070160140600505e0300f01b02202c1780b20e02c1780b1a80140600b", + "0x1880b20e02c1880b0740141880b20e02c0283900a0148380b05802c7f805", + "0x280520e02c0280c00a0d81a00c2fc4247f00c20e0301881e0360401e005", + "0x290701634c0590b00a3506980c20e02c8200b2fe0146900b20e02c028de", + "0x590901640c0280520e02c0280c00a0e80598107202c8380c1a802cc0005", + "0x7b0051be02c8380b1bc02c350051bc0e4061070160e40586800a0f005907", + "0x284001641c058400160800284001641c058051d00141f80b20e02c6f80b", + "0x583f0840307580507e02c8380b07e02c1000508402c8380b080348060eb", + "0x581400a3f8059070163f80590400a3a0059070160e40586d00a39c05907", + "0x28e701641c058e70163b0028e801641c058e80163c80283c01641c0583c", + "0x2b00507a02c8380b1d602c7c8050983b07581020e02c738e80783f808870", + "0x600500a60c058050560147880b20e02c2600b3040142680b20e02c7600b", + "0x28510740308380b07402cc20051ea02c8380b21202c8180500a41c05805", + "0x2b00b20e02c0282e00a3e40590701614c058f600a14c0590701614405985", + "0x58f90160800285801641c058561a4030758050ac02c8380b0ac02c10005", + "0x820050b402c8380b07402cc30051f402c8380b1f2160060eb00a3e405907", + "0x2d00b20e02c2d00b30e0147a80b20e02c7a80b0280147f00b20e02c7f00b", + "0x285f0bc170081070163e82d0f51fc044c40051f402c8380b1f402c76005", + "0x590701617c0598200a134059070161780585600a0f405907016170058f9", + "0x2680b20601402907016014060051f002cc486101641c060f10161c8028f1", + "0x2680500a41c058f7016130028f70ca0308380b0c202c780050c602c8380b", + "0x7b00b20e02c3500b1ea014029070161a0058f100a1a83400c20e02c3280b", + "0x8380b07a02c820051e402c8380b0da02c298050da02c8380b1ec02c28805", + "0x7900b1a80140600b20e02c0600b1a60143180b20e02c3180b0280141e80b", + "0x8380b1f002c6900500a41c058050180147900c0c60f40880b1e402c8380b", + "0x600b1a60142680b20e02c2680b0280141e80b20e02c1e80b2080143800b", + "0x58050180143800c09a0f40880b0e002c8380b0e002c6a00501802c8380b", + "0x58340164100287201641c0583601640c0280520e02c8200b21601402907", + "0x8380b00a0300280531402c0282b00a1d4059070161c80581400a3c005907", + "0x3b80b20e02c0285800a0148380b20602c7d00500a41c0581401613002805", + "0x8380b03c02c0a00503602c8380b03602c820051de02c8380b0ee02c69005", + "0xf01b02202c7780b20e02c7780b1a80140600b20e02c0600b1a60140f00b", + "0x8380b03602c8200521802c8380b04602c6900500a41c058050180147780c", + "0x8600b1a80140600b20e02c0600b1a60140f00b20e02c0f00b0280140d80b", + "0x8380b02002c7d00500a41c058050180148600c03c06c0880b21802c8380b", + "0x5879016050028f001641c058170164100287901641c0582001640c02805", + "0x7800b2080143d80b20e02c8680b1a40148680b20e02c0285a00a1d405907", + "0x6a00501802c8380b01802c698050ea02c8380b0ea02c0a0051e002c8380b", + "0x280c01601402907016014028050f60303a8f002202c3d80b20e02c3d80b", + "0x8380b02202c8200500a41c058050180141001701862c8281101841c0600b", + "0x281f03c06c081070160400880c3180140800b20e02c0800b0b80140880b", + "0x8380b03c02c0800500a41c058050180141180b31c0880590701807c0598d", + "0x7f80500a41c058050180140a00b31e4100c00c20e0308180b0220148180b", + "0x283600a0148380b04402cc800500a41c059040164240280520e02c0c00b", + "0xa00503602c8380b03602c8200505602c8380b05202c6900505202c8380b", + "0x1580b20e02c1580b1a80140600b20e02c0600b1a60148280b20e02c8280b", + "0x283900a0148380b02802c7f80500a41c058050180141580c20a06c0880b", + "0x1600c20e0307f9050360401e0051fe02c8380b1fe02c1d0051fe02c8380b", + "0x1100b3240147f00b20e02c028de00a0148380b00a0300283105e030c882e", + "0x1a00b326014029070160141f80500a41c05909016640028342120308380b", + "0x28d301641c0582e01640c0280520e02c0280c00a3480599406c02c8380c", + "0x583c0163d80283c01641c058d40163b80283a072350081070160d80587d", + "0x58ee00a0fc0590701637c058f600a37c059070160e4058ee00a37805907", + "0x100051ce02c8380b00a3a00284201641c058400163d80284001641c0583a", + "0x8380b1bc3a0060eb00a3a00590701639c7f00c1d60147380b20e02c7380b", + "0xa00509802c8380b0843b0060eb00a3b0059070160fc7580c1d60147580b", + "0x600500a654058050560142680b20e02c2600b1d80141e80b20e02c6980b", + "0x28511ea0308380b1a402ccb0051e202c8380b05c02c8180500a41c05805", + "0x59070161440584200a3e40590701614c058e700a14c059070163d405842", + "0x8380b1f402c100051f402c8380b00a0b80285801641c0585601639c02856", + "0x758050b802c8380b1f2168060eb00a168059070163e87f00c1d60147d00b", + "0x5907016178058ec00a0f4059070163c40581400a178059070161602e00c", + "0x8380b0be02c788050c217c061070161340584d00a0148380b00a0f40284d", + "0x586301614c0286301641c058f8016144028f801641c058610163d402805", + "0x58d300a0f4059070160f40581400a0b0059070160b00590400a19405907", + "0x280c00a1940603d0580440586501641c058650163500280c01641c0580c", + "0x1780b2080147b80b20e02c1880b206014029070160880599000a0148380b", + "0x580501801402997016014158050d402c8380b1ee02c0a0050d002c8380b", + "0x59070160142c00500a41c0581e0163e80280520e02c1180b09801402907", + "0x59050160500281b01641c0581b0164100286d01641c058f6016348028f6", + "0xd8110161b4059070161b4058d400a03005907016030058d300a41405907", + "0x8380b04002c8180500a41c058100163e80280520e02c0280c00a1b406105", + "0x58050b40143500b20e02c7900b0280143400b20e02c0b80b2080147900b", + "0x581400a1a0059070161a00590400a1c8059070161c0058d200a1c005907", + "0x587201641c058720163500280c01641c0580c01634c0286a01641c0586a", + "0xcc1050220308380c0160140600b00a0148380b00a014028720181a834011", + "0x59050160500281101641c058110164100280520e02c0280c00a0800b80c", + "0xf01b02041c0581020a0440819900a040059070160400585c00a41405907", + "0x1100b338014029070160140600504602ccd82201641c0601f0166680281f", + "0x29070160140600502802ccf10401641c06018016674028182060308380b", + "0x600505802ccf8ff0560308380c05202c0880505202c8380b20602c08005", + "0x8200b340014029070163fc0590900a0148380b05602c7f80500a41c05805", + "0xd80b2080141780b20e02c1700b1a40141700b20e02c0283600a0148380b", + "0x6a00501802c8380b01802c6980503c02c8380b03c02c0a00503602c8380b", + "0x1600b1fe014029070160140600505e0300f01b02202c1780b20e02c1780b", + "0xd8100780141880b20e02c1880b0740141880b20e02c0283900a0148380b", + "0x8380b00a3780280520e02c0280c00a0d81a00c3424247f00c20e0301881e", + "0x6a00b3460140290701634c059a000a3506980c20e02c8200b3440146900b", + "0x283c01641c0590901640c0280520e02c0280c00a0e8059a407202c8380c", + "0x8380b07e02c7b00507e02c8380b1bc02c770051be378061070160e405924", + "0x58f600a39c059070161080588a00a1086f80c20e02c6f80b1100142000b", + "0x758051d602c8380b1d602c100051d602c8380b00a3a0028e801641c058e7", + "0x8380b1d002c1000509802c8380b0803b0060eb00a3b0059070163ac6900c", + "0x590400a1340590701637c058e900a0f4059070163a02600c1d60147400b", + "0x284d01641c0584d01622c0283c01641c0583c016050028fe01641c058fe", + "0x7c8050a23d47881020e02c1e84d0783f80888d00a0f4059070160f4058ec", + "0x2b00b20e02c2880b3040147c80b20e02c7a80b0ac0142980b20e02c7880b", + "0xd30050b002c8380b21202c8180500a41c05805018014029a501601415805", + "0x5907016170058e700a170059070163e80584200a1687d00c20e02c1d00b", + "0x3080b1ec0143080b20e02c2f80b30a0142f85a01841c0585a0166100285e", + "0x60eb00a18c0590701618c0582000a18c05907016014170051f002c8380b", + "0x59070163e00582000a3dc059070161783280c1d60143280b20e02c318d2", + "0x7f00b2080143500b20e02c2d00b30c0143400b20e02c7c0f70183ac028f8", + "0x760050d402c8380b0d402cc38050b002c8380b0b002c0a0051fc02c8380b", + "0x58f900a3c8368f602041c058680d41607f0113100143400b20e02c3400b", + "0x285601641c058f2016608028f901641c0586d0161580285301641c058f6", + "0x8380b1f202c8180500a41c058050180143900b34e1c00590701815805872", + "0x3a80b09a014029070161dc0584c00a1dc3a80c20e02c3800b1e00147800b", + "0x288050f202c8380b21802c7a80500a41c058ef0163c40290c1de0308380b", + "0x2980b20e02c2980b2080143d80b20e02c8680b0a60148680b20e02c3c80b", + "0x8380b0f602c6a00501802c8380b01802c698051e002c8380b1e002c0a005", + "0x3e80b20e02c3900b1a401402907016014060050f60307805302202c3d80b", + "0x8380b01802c698051f202c8380b1f202c0a0050a602c8380b0a602c82005", + "0x2907016014060050fa0307c85302202c3e80b20e02c3e80b1a80140600b", + "0x59070160d00590400a3b8059070160d80590300a0148380b20802cd0005", + "0x280520e02c0280c00a014d400b00a0ac0287f01641c058ee01605002880", + "0x6900510402c8380b00a1600280520e02c8180b1f4014029070160500584c", + "0xf00b20e02c0f00b0280140d80b20e02c0d80b2080147680b20e02c4100b", + "0x7680c03c06c0880b1da02c8380b1da02c6a00501802c8380b01802c69805", + "0xd80b20e02c0d80b2080144200b20e02c1180b1a40140290701601406005", + "0x8380b10802c6a00501802c8380b01802c6980503c02c8380b03c02c0a005", + "0x280520e02c0800b1f401402907016014060051080300f01b02202c4200b", + "0x59070163a80581400a2000590701605c0590400a3a80590701608005903", + "0x8380b10002c8200524802c8380b10c02c6900510c02c8380b00a1680287f", + "0x9200b1a80140600b20e02c0600b1a60143f80b20e02c3f80b0280144000b", + "0x600b00a0300580500a41c0580500a0149200c0fe2000880b24802c8380b", + "0x880b20e02c0880b208014029070160140600504005c061a920a04406107", + "0x59ab00a07c0f01b02041c05810022030d500502002c8380b02002c2e005", + "0x8180b20e02c0f00b020014029070160140600504602cd602201641c0601f", + "0xc00b1fe014029070160140600502802cd69040300308380c20602c08805", + "0x8380b00a0d80280520e02c1100b35c014029070164100590900a0148380b", + "0x8280b0280140d80b20e02c0d80b2080141580b20e02c1480b1a40141480b", + "0x880b05602c8380b05602c6a00501802c8380b01802c6980520a02c8380b", + "0x8380b00a0e40280520e02c0a00b1fe01402907016014060050560308281b", + "0xd782e0580308380c1fe4140d8100780147f80b20e02c7f80b0740147f80b", + "0x8380b04402cd80051fc02c8380b00a3780280520e02c0280c00a0c41780c", + "0x8380c06802cd880500a41c0580507e01402907016424059ae00a0d08480c", + "0x6980b0400146980b20e02c028e800a0148380b00a030028d20166c81b00b", + "0xd983901641c0603601626c028d401641c058d31fc030758051a602c8380b", + "0x8380b07202c4e80507802c8380b05c02c8180500a41c058050180141d00b", + "0x583f0160800283f01641c058051d00146f80b20e02c6f00b1b80146f00b", + "0x284201641c058df0800307580508002c8380b07e350060eb00a0fc05907", + "0x280536802c0282b00a3a005907016108058ec00a39c059070160f005814", + "0x28ec01641c0583a016108028eb01641c0582e01640c0280520e02c0280c", + "0x1e80b20e02c1e80b0400141e80b20e02c0282e00a130059070163b0058e7", + "0x7580b0280147880b20e02c2604d0183ac0284d01641c0583d1a803075805", + "0x5805018014029b4016014158051d002c8380b1e202c760051ce02c8380b", + "0x2880b1ec0142880b20e02c6900b1dc0147a80b20e02c1700b20601402907", + "0x60eb00a3e4059070163e40582000a3e405907016014170050a602c8380b", + "0x59070163d40581400a1600590701614c2b00c1d60142b00b20e02c7c8fe", + "0x61070163a00584d00a0148380b00a0f4028e801641c058580163b0028e7", + "0x585c0161440285c01641c0585a0163d40280520e02c7d00b1e20142d0fa", + "0x581400a0b0059070160b00590400a17c059070161780585300a17805907", + "0x585f01641c0585f0163500280c01641c0580c01634c028e701641c058e7", + "0x1880b20601402907016088059ae00a0148380b00a0300285f01839c16011", + "0x158050c602c8380b0c202c0a0051f002c8380b05e02c820050c202c8380b", + "0x581e0163e80280520e02c1180b098014029070160140600500a6d405805", + "0x581b016410028f701641c058650163480286501641c058050b001402907", + "0x58d400a03005907016030058d300a414059070164140581400a06c05907", + "0x58100163e80280520e02c0280c00a3dc06105036044058f701641c058f7", + "0x3400b0280147c00b20e02c0b80b2080143400b20e02c1000b20601402907", + "0x590400a3d8059070161a8058d200a1a8059070160142d0050c602c8380b", + "0x280c01641c0580c01634c0286301641c05863016050028f801641c058f8", + "0x600b00a0148380b00a014028f601818c7c0110163d8059070163d8058d4", + "0x58110164100280520e02c0280c00a0800b80c36c4140880c20e03005805", + "0xf81e0360408380b020044061b700a040059070160400585c00a04405907", + "0x581e0160400280520e02c0280c00a08c059b904402c8380c03e02cdc005", + "0x280520e02c0280c00a050059ba2080600610701840c0581100a40c05907", + "0x1b00500a41c058220166ec0280520e02c8200b21201402907016060058ff", + "0x281b01641c0581b0164100282b01641c058290163480282901641c05805", + "0x59070160ac058d400a03005907016030058d300a4140590701641405814", + "0x1c80500a41c058140163fc0280520e02c0280c00a0ac061050360440582b", + "0x61070183fc8281b0200f0028ff01641c058ff0160e8028ff01641c05805", + "0x59bd00a3f8059070160146f00500a41c058050180141882f0186f01702c", + "0x591200a0148380b00a0fc0280520e02c8480b3760141a10901841c05822", + "0x6980b20e02c1700b20601402907016014060051a402cdf03601641c06034", + "0x59070160147400507202c8380b1a802c6e0051a802c8380b06c02c4e805", + "0x1e00c1d60141e00b20e02c1d0fe0183ac0283a01641c0583a0160800283a", + "0x283f01641c058de0163b0028df01641c058d3016050028de01641c05839", + "0x2000b0400142000b20e02c0282e00a0148380b00a0300280537e02c0282b", + "0xe08e701641c060d20167000284201641c058401fc0307580508002c8380b", + "0x8380b1ce02c770051d602c8380b05c02c8180500a41c058050180147400b", + "0x583d0160800283d01641c058051d00142600b20e02c7600b1ec0147600b", + "0x28f101641c0584c09a0307580509a02c8380b07a108060eb00a0f405907", + "0x280537e02c0282b00a0fc059070163c4058ec00a37c059070163ac05814", + "0x170051ea02c8380b05c02c8180500a41c058e80161300280520e02c0280c", + "0x2980b20e02c288420183ac0285101641c058510160800285101641c05805", + "0x29070160141e80507e02c8380b0a602c760051be02c8380b1ea02c0a005", + "0x8380b0ac02c7a80500a41c058f90163c4028561f20308380b07e02c26805", + "0x1600b2080142d00b20e02c7d00b0a60147d00b20e02c2c00b0a20142c00b", + "0x6a00501802c8380b01802c698051be02c8380b1be02c0a00505802c8380b", + "0x1100b37601402907016014060050b40306f82c02202c2d00b20e02c2d00b", + "0x581400a178059070160bc0590400a170059070160c40590300a0148380b", + "0x58230161300280520e02c0280c00a014e100b00a0ac0285f01641c0585c", + "0x8380b0c202c690050c202c8380b00a1600280520e02c0f00b1f401402907", + "0x600b1a60148280b20e02c8280b0280140d80b20e02c0d80b2080147c00b", + "0x58050180147c00c20a06c0880b1f002c8380b1f002c6a00501802c8380b", + "0x58170164100286301641c0582001640c0280520e02c0800b1f401402907", + "0x3280b1a40143280b20e02c0285a00a17c0590701618c0581400a17805907", + "0x698050be02c8380b0be02c0a0050bc02c8380b0bc02c820051ee02c8380b", + "0x28051ee0302f85e02202c7b80b20e02c7b80b1a80140600b20e02c0600b", + "0x58050180141001701870c8281101841c0600b00a0300580500a41c05805", + "0x880c3880140800b20e02c0800b0b80140880b20e02c0880b20801402907", + "0x58050180141180b38c0880590701807c059c500a07c0f01b02041c05810", + "0xa00b38e4100c00c20e0308180b0220148180b20e02c0f00b02001402907", + "0xe400500a41c059040164240280520e02c0c00b1fe0140290701601406005", + "0x8200505602c8380b05202c6900505202c8380b00a0d80280520e02c1100b", + "0x600b20e02c0600b1a60148280b20e02c8280b0280140d80b20e02c0d80b", + "0x7f80500a41c058050180141580c20a06c0880b05602c8380b05602c6a005", + "0x1e0051fe02c8380b1fe02c1d0051fe02c8380b00a0e40280520e02c0a00b", + "0x28de00a0148380b00a0300283105e030e482e0580308380c1fe4140d810", + "0x1f80500a41c05909016720028342120308380b04402ce50051fc02c8380b", + "0x280520e02c0280c00a348059cc06c02c8380c06802ce580500a41c05805", + "0x5907016350058dc00a350059070160d80589d00a34c059070160b805903", + "0x583a1fc0307580507402c8380b07402c1000507402c8380b00a3a002839", + "0x760051be02c8380b1a602c0a0051bc02c8380b0720f0060eb00a0f005907", + "0x1700b206014029070160140600500a734058050560141f80b20e02c6f00b", + "0x740e701841c05842016290028421a40308380b1a402c8500508002c8380b", + "0x59070163ac058aa00a3ac0590701639c058d500a0148380b1d002c53005", + "0x583d0163b80280520e02c2600b19e0141e84c01841c058d2016290028ec", + "0x7a80b0400147a80b20e02c0282e00a3c405907016134058f600a13405907", + "0x2980b20e02c760510183ac0285101641c058f51fc030758051ea02c8380b", + "0x58f90163b0028df01641c05840016050028f901641c058f10a603075805", + "0x2b00b1e20142c05601841c0583f0161340280520e02c0283d00a0fc05907", + "0x585300a168059070163e80585100a3e805907016160058f500a0148380b", + "0x28df01641c058df0160500282c01641c0582c0164100285c01641c0585a", + "0x285c01837c1601101617005907016170058d400a03005907016030058d3", + "0x820050bc02c8380b06202c8180500a41c058220167200280520e02c0280c", + "0x600500a738058050560143080b20e02c2f00b0280142f80b20e02c1780b", + "0x58050b001402907016078058fa00a0148380b04602c2600500a41c05805", + "0x581400a06c0590701606c0590400a18c059070163e0058d200a3e005907", + "0x586301641c058630163500280c01641c0580c01634c0290501641c05905", + "0x1000b20601402907016040058fa00a0148380b00a030028630184140d811", + "0x2d0050c202c8380b0ca02c0a0050be02c8380b02e02c820050ca02c8380b", + "0x285f01641c0585f0164100286801641c058f7016348028f701641c05805", + "0x59070161a0058d400a03005907016030058d300a1840590701618405814", + "0x880c20e0300580501802c0280520e02c0280500a1a0060610be04405868", + "0x585c00a044059070160440590400a0148380b00a0300282002e030e7905", + "0x8380c03e02c7080503e0780d81020e02c0801101838c0281001641c05810", + "0xf00b020014029070160880597100a0148380b00a030028230167401100b", + "0x29070160140600502802ce89040300308380c20602c0880520602c8380b", + "0x282901641c0580506c014029070164100590900a0148380b03002c7f805", + "0x59070164140581400a06c0590701606c0590400a0ac059070160a4058d2", + "0x61050360440582b01641c0582b0163500280c01641c0580c01634c02905", + "0x28ff01641c0580507201402907016050058ff00a0148380b00a0300282b", + "0x1882f0187481702c01841c060ff20a06c0803c00a3fc059070163fc0583a", + "0x290901641c058051bc0147f00b20e02c1700b2060140290701601406005", + "0x59070160d8058f500a0148380b06802c7880506c0d0061070164240584d", + "0x582c016410028d401641c058d301614c028d301641c058d2016144028d2", + "0x58d400a03005907016030058d300a3f8059070163f80581400a0b005907", + "0x583101640c0280520e02c0280c00a350060fe058044058d401641c058d4", + "0x282b00a0f0059070160e40581400a0e8059070160bc0590400a0e405907", + "0x8380b03c02c7d00500a41c058230161300280520e02c0280c00a014e980b", + "0x8380b03602c820051be02c8380b1bc02c690051bc02c8380b00a16002805", + "0x6f80b1a80140600b20e02c0600b1a60148280b20e02c8280b0280140d80b", + "0x8380b02002c7d00500a41c058050180146f80c20a06c0880b1be02c8380b", + "0x583f0160500283a01641c058170164100283f01641c0582001640c02805", + "0x1d00b2080142100b20e02c2000b1a40142000b20e02c0285a00a0f005907", + "0x6a00501802c8380b01802c6980507802c8380b07802c0a00507402c8380b", + "0x280c01601402907016014028050840301e03a02202c2100b20e02c2100b", + "0x8380b02002c0800500a41c05805018014100170187508281101841c0600b", + "0x8280500a41c058050180141100b3aa07c0f00c20e0300d80b0220140d80b", + "0x8180b20e02c8180b0400148180b20e02c1180b02e0141180b20e02c0f80b", + "0x582200a0148380b00a0300281401675c8201801841c06103022030eb005", + "0x8380b00a030028ff0167601582901841c0601e0160440281e01641c0581e", + "0x582e0160800282e01641c0582c01605c0282c01641c0582b01641402805", + "0x2907016014060051fc02ced03105e0308380c05c060061d900a0b805907", + "0x600506c02ced8342120308380c05202c0880505202c8380b05202c11005", + "0x1880b14c014029070160d00590900a0148380b21202c7f80500a41c05805", + "0x58d2016348028d201641c0580506c01402907016410058cf00a0148380b", + "0x58d300a414059070164140581400a0bc059070160bc0590400a34c05907", + "0x280c00a34c0610505e044058d301641c058d30163500280c01641c0580c", + "0x58d40160e8028d401641c05805072014029070160d8058ff00a0148380b", + "0x58050180146f03c0187701d03901841c060d420a0bc0803c00a35005907", + "0x59de00a0fc059070160c48200c3ba0146f80b20e02c1d00b20601402907", + "0x284201641c058420167800280520e02c2000b3be0142104001841c0583f", + "0x58eb016298028eb1d00308380b1ce02c520051ce108061070161080590a", + "0x2100b1480142600b20e02c7600b1540147600b20e02c7400b1aa01402907", + "0x7b0051e202c8380b09a02c7700500a41c0583d01633c0284d07a0308380b", + "0x2980b20e02c260510183ac0285101641c058051bc0147a80b20e02c7880b", + "0x2b00b1e20142c05601841c058f9016134028f901641c058f50a603075805", + "0x585300a168059070163e80585100a3e805907016160058f500a0148380b", + "0x28df01641c058df0160500283901641c058390164100285c01641c0585a", + "0x285c01837c1c81101617005907016170058d400a03005907016030058d3", + "0x590300a0148380b20802c6780500a41c058310162980280520e02c0280c", + "0x286101641c0585e0160500285f01641c0583c0164100285e01641c058de", + "0x8200b19e014029070160a4058ff00a0148380b00a030028053c202c0282b", + "0x581400a18c059070163f80590400a3e0059070164140590300a0148380b", + "0x58ff0163fc0280520e02c0280c00a014f100b00a0ac0286501641c058f8", + "0x5818016410028f701641c0590501640c0280520e02c8200b19e01402907", + "0x8380b00a030028053c402c0282b00a194059070163dc0581400a18c05907", + "0x8380b02802c820050d002c8380b20a02c8180500a41c0581e0163fc02805", + "0x29070160140600500a788058050560143280b20e02c3400b0280143180b", + "0x59070160440590400a1a8059070164140590300a0148380b04402c7f805", + "0x8380b1ec02c690051ec02c8380b00a1600286501641c0586a01605002863", + "0x600b1a60143280b20e02c3280b0280143180b20e02c3180b2080143680b", + "0x58050180143680c0ca18c0880b0da02c8380b0da02c6a00501802c8380b", + "0x5817016410028f201641c0582001640c0280520e02c0800b1f401402907", + "0x3800b1a40143800b20e02c0285a00a184059070163c80581400a17c05907", + "0x698050c202c8380b0c202c0a0050be02c8380b0be02c820050e402c8380b", + "0x28050e40303085f02202c3900b20e02c3900b1a80140600b20e02c0600b", + "0x58050180141001701878c8281101841c0600b00a0300580500a41c05805", + "0x880c3c80140800b20e02c0800b0b80140880b20e02c0880b20801402907", + "0x58050180141180b3cc0880590701807c059e500a07c0f01b02041c05810", + "0xa00b3ce4100c00c20e0308180b0220148180b20e02c0f00b02001402907", + "0xf400500a41c059040164240280520e02c0c00b1fe0140290701601406005", + "0x8200505602c8380b05202c6900505202c8380b00a0d80280520e02c1100b", + "0x600b20e02c0600b1a60148280b20e02c8280b0280140d80b20e02c0d80b", + "0x7f80500a41c058050180141580c20a06c0880b05602c8380b05602c6a005", + "0x1e0051fe02c8380b1fe02c1d0051fe02c8380b00a0e40280520e02c0a00b", + "0x590300a0148380b00a0300283105e030f482e0580308380c1fe4140d810", + "0x280520e02c8480b3d00141a10901841c058220167a8028fe01641c0582e", + "0x58d301677c028d31a40308380b06c02cf600506c0d0061070160d0059eb", + "0x1a00b3d80141c80b20e02c6a00b1540146a00b20e02c6900b1aa01402907", + "0x28de0780308380b07802c8500500a41c0583a01633c0283c0740308380b", + "0x590701637c058d500a0148380b07e02c5300507e37c06107016378058a4", + "0x7380b19e014740e701841c0583c0162900284201641c058400162a802840", + "0x28de00a3b0059070163ac058f600a3ac059070163a0058ee00a0148380b", + "0x2680b20e02c2103d0183ac0283d01641c058390980307580509802c8380b", + "0x7a80b1e2014288f501841c058f1016134028f101641c058ec09a03075805", + "0x585300a3e40590701614c0585100a14c05907016144058f500a0148380b", + "0x28fe01641c058fe0160500282c01641c0582c0164100285601641c058f9", + "0x28560183f81601101615805907016158058d400a03005907016030058d3", + "0x820050b002c8380b06202c8180500a41c058220167a00280520e02c0280c", + "0x600500a7b4058050560142d00b20e02c2c00b0280147d00b20e02c1780b", + "0x58050b001402907016078058fa00a0148380b04602c2600500a41c05805", + "0x581400a06c0590701606c0590400a17805907016170058d200a17005907", + "0x585e01641c0585e0163500280c01641c0580c01634c0290501641c05905", + "0x1000b20601402907016040058fa00a0148380b00a0300285e0184140d811", + "0x2d0050b402c8380b0be02c0a0051f402c8380b02e02c820050be02c8380b", + "0x28fa01641c058fa016410028f801641c058610163480286101641c05805", + "0x59070163e0058d400a03005907016030058d300a1680590701616805814", + "0x880c20e0300580501802c0280520e02c0280500a3e00605a1f4044058f8", + "0x581100a06c059070160400581000a0148380b00a0300282002e030f7105", + "0x2907016078058ff00a0148380b00a030028220167bc0f81e01841c0601b", + "0x8180b20e02c1180b1a40141180b20e02c0283600a0148380b03e02c84805", + "0x8380b01802c6980520a02c8380b20a02c0a00502202c8380b02202c82005", + "0x2907016014060052060308281102202c8180b20e02c8180b1a80140600b", + "0xc00b20e02c0c00b0740140c00b20e02c0283900a0148380b04402c7f805", + "0x280520e02c0280c00a0ac1480c3e00508200c20e0300c1050220401e005", + "0x1700c20e02c1600b09a0141600b20e02c028de00a3fc0590701605005903", + "0x8380b06202c2880506202c8380b05e02c7a80500a41c0582e0163c40282f", + "0x7f80b0280148200b20e02c8200b2080148480b20e02c7f00b0a60147f00b", + "0x880b21202c8380b21202c6a00501802c8380b01802c698051fe02c8380b", + "0x1480b2080141a00b20e02c1580b20601402907016014060052120307f904", + "0x5805018014029f1016014158051a402c8380b06802c0a00506c02c8380b", + "0x5817016410028d301641c0582001640c0280520e02c0800b1f401402907", + "0x6a00b1a40146a00b20e02c0285a00a3480590701634c0581400a0d805907", + "0x698051a402c8380b1a402c0a00506c02c8380b06c02c8200507202c8380b", + "0x28050720306903602202c1c80b20e02c1c80b1a80140600b20e02c0600b", + "0x5805018014100170187c88281101841c0600b00a0300580500a41c05805", + "0x880c3e60140800b20e02c0800b0b80140880b20e02c0880b20801402907", + "0x58050180141180b3ea0880590701807c059f400a07c0f01b02041c05810", + "0xa00b3ec4100c00c20e0308180b0220148180b20e02c0f00b02001402907", + "0xfb80500a41c059040164240280520e02c0c00b1fe0140290701601406005", + "0x8200505602c8380b05202c6900505202c8380b00a0d80280520e02c1100b", + "0x600b20e02c0600b1a60148280b20e02c8280b0280140d80b20e02c0d80b", + "0x7f80500a41c058050180141580c20a06c0880b05602c8380b05602c6a005", + "0x1e0051fe02c8380b1fe02c1d0051fe02c8380b00a0e40280520e02c0a00b", + "0x590300a0148380b00a0300283105e030fc02e0580308380c1fe4140d810", + "0x280520e02c8480b3ee0141a10901841c058220167e4028fe01641c0582e", + "0x58d30167f0028d31a40308380b06c02cfd80506c0d0061070160d0059fa", + "0x1a00b3f60141c80b20e02c6a00b1ce0146a00b20e02c6900b08401402907", + "0x1f8df1bc0448380b07802cfe80500a41c0583a01657c0283c0740308380b", + "0x58df016108028e701641c058420163700284201641c058de01627402840", + "0x58f600a3b0059070160fc058ee00a3ac059070163a0058e700a3a005907", + "0x284d01641c0583d0162a80283d01641c058400163540284c01641c058ec", + "0x8380b1ce3d4060eb00a3d4059070160e47880c1d60147880b20e02c028de", + "0x758051f202c8380b09814c060eb00a14c059070163ac2880c1d60142880b", + "0x8380b0b002c788051f4160061070161580584d00a158059070161347c80c", + "0x585c01614c0285c01641c0585a0161440285a01641c058fa0163d402805", + "0x58d300a3f8059070163f80581400a0b0059070160b00590400a17805907", + "0x280c00a178060fe0580440585e01641c0585e0163500280c01641c0580c", + "0x1780b2080142f80b20e02c1880b20601402907016088059f700a0148380b", + "0x5805018014029fe016014158051f002c8380b0be02c0a0050c202c8380b", + "0x59070160142c00500a41c0581e0163e80280520e02c1180b09801402907", + "0x59050160500281b01641c0581b0164100286501641c0586301634802863", + "0xd81101619405907016194058d400a03005907016030058d300a41405907", + "0x8380b04002c8180500a41c058100163e80280520e02c0280c00a19406105", + "0x58050b40147c00b20e02c7b80b0280143080b20e02c0b80b2080147b80b", + "0x581400a184059070161840590400a1a8059070161a0058d200a1a005907", + "0x586a01641c0586a0163500280c01641c0580c01634c028f801641c058f8", + "0xff9050220308380c0160140600b00a0148380b00a0140286a0183e030811", + "0x59050160500281101641c058110164100280520e02c0280c00a0800b80c", + "0xf01b02041c0581020a0440820000a040059070160400585c00a41405907", + "0x1100b406014029070160140600504602d0102201641c0601f0168040281f", + "0x29070160140600502802d0290401641c06018016810028182060308380b", + "0x600505802d030ff0560308380c05202c0880505202c8380b20602c08005", + "0x8200b40e014029070163fc0590900a0148380b05602c7f80500a41c05805", + "0xd80b2080141780b20e02c1700b1a40141700b20e02c0283600a0148380b", + "0x6a00501802c8380b01802c6980503c02c8380b03c02c0a00503602c8380b", + "0x1600b1fe014029070160140600505e0300f01b02202c1780b20e02c1780b", + "0xd8100780141880b20e02c1880b0740141880b20e02c0283900a0148380b", + "0x59040168240280520e02c0280c00a0d81a00c4104247f00c20e0301881e", + "0x8a8051a834c0610701634c05a0a00a0148380b1a402d038051a634806107", + "0x1e00b20e02c1c80b084014029070160e805a0b00a0e81c80c20e02c6a00b", + "0x58df01657c0283f1be0308380b1a602c8a8051bc02c8380b07802c73805", + "0x5a0e00a1080590701610005a0d00a1001f80c20e02c1f80b41801402907", + "0x28eb01641c058e80163d8028e801641c058e7016228028e701641c05842", + "0x59070163ac0582000a130059070163787600c1d60147600b20e02c028de", + "0x7f00b2080142680b20e02c1f80b41a0141e80b20e02c7584c0183ac028eb", + "0x7600509a02c8380b09a02c4580521202c8380b21202c0a0051fc02c8380b", + "0x587200a1447a8f102041c0583d09a4247f01111a0141e80b20e02c1e80b", + "0x2b00b20e02c7a80b20601402907016014060051f202d0785301641c06051", + "0x8380b0b002c2680500a41c058fa016130028fa0b00308380b0a602c78005", + "0x2f00b0a20142f00b20e02c2e00b1ea01402907016168058f100a1702d00c", + "0xa0051e202c8380b1e202c820050c202c8380b0be02c298050be02c8380b", + "0x3080b20e02c3080b1a80140600b20e02c0600b1a60142b00b20e02c2b00b", + "0x820051f002c8380b1f202c6900500a41c058050180143080c0ac3c40880b", + "0x600b20e02c0600b1a60147a80b20e02c7a80b0280147880b20e02c7880b", + "0x10380500a41c058050180147c00c1ea3c40880b1f002c8380b1f002c6a005", + "0x286501641c058340164100286301641c0583601640c0280520e02c8200b", + "0x584c00a0148380b00a0300280542002c0282b00a3dc0590701618c05814", + "0x3400b1a40143400b20e02c0285800a0148380b20602c7d00500a41c05814", + "0x6980503c02c8380b03c02c0a00503602c8380b03602c820050d402c8380b", + "0x60050d40300f01b02202c3500b20e02c3500b1a80140600b20e02c0600b", + "0xa00503602c8380b03602c820051ec02c8380b04602c6900500a41c05805", + "0x7b00b20e02c7b00b1a80140600b20e02c0600b1a60140f00b20e02c0f00b", + "0x590300a0148380b02002c7d00500a41c058050180147b00c03c06c0880b", + "0x28f701641c0586d0160500286501641c058170164100286d01641c05820", + "0x3280b20e02c3280b2080143800b20e02c7900b1a40147900b20e02c0285a", + "0x8380b0e002c6a00501802c8380b01802c698051ee02c8380b1ee02c0a005", + "0x610701802c0280c01601402907016014028050e00307b86502202c3800b", + "0x2e00502202c8380b02202c8200500a41c058050180141001701884482811", + "0x601f01684c0281f03c06c081070160400880c4240140800b20e02c0800b", + "0x880520602c8380b03c02c0800500a41c058050180141180b42808805907", + "0x8380b03002c7f80500a41c058050180140a00b42a4100c00c20e0308180b", + "0x1480b20e02c0283600a0148380b04402c8a00500a41c0590401642402805", + "0x8380b20a02c0a00503602c8380b03602c8200505602c8380b05202c69005", + "0x8281b02202c1580b20e02c1580b1a80140600b20e02c0600b1a60148280b", + "0x7f80b20e02c0283900a0148380b02802c7f80500a41c058050180141580c", + "0x1780c42c0b81600c20e0307f9050360401e0051fe02c8380b1fe02c1d005", + "0x610701608805a1700a3f8059070160b80590300a0148380b00a03002831", + "0x1b00b4320141b03401841c058340168600280520e02c8480b2280141a109", + "0x738051a802c8380b1a402c2100500a41c058d3016868028d31a40308380b", + "0x29070160e80595f00a0f01d00c20e02c1a00b4320141c80b20e02c6a00b", + "0x58e700a108059070163780584200a1001f8df1bc0448380b07802d0d805", + "0x28eb01641c058e801639c028e801641c058df016108028e701641c05842", + "0x59070161000584200a130059070163b0058e700a3b0059070160fc05842", + "0x58391e2030758051e202c8380b00a3780284d01641c0583d01639c0283d", + "0x285301641c058eb0a2030758050a202c8380b1ce3d4060eb00a3d405907", + "0x58560161340285601641c0584d1f2030758051f202c8380b09814c060eb", + "0x585100a168059070163e8058f500a0148380b0b002c788051f416006107", + "0x282c01641c0582c0164100285e01641c0585c01614c0285c01641c0585a", + "0x5907016178058d400a03005907016030058d300a3f8059070163f805814", + "0x8180500a41c058220164500280520e02c0280c00a178060fe0580440585e", + "0x7c00b20e02c2f80b0280143080b20e02c1780b2080142f80b20e02c1880b", + "0x58fa00a0148380b04602c2600500a41c0580501801402a1c01601415805", + "0x590400a1940590701618c058d200a18c059070160142c00500a41c0581e", + "0x280c01641c0580c01634c0290501641c059050160500281b01641c0581b", + "0x58fa00a0148380b00a030028650184140d81101619405907016194058d4", + "0xa0050c202c8380b02e02c820051ee02c8380b04002c8180500a41c05810", + "0x286a01641c058680163480286801641c058050b40147c00b20e02c7b80b", + "0x5907016030058d300a3e0059070163e00581400a1840590701618405904", + "0x280520e02c0280500a1a8060f80c20440586a01641c0586a0163500280c", + "0x590400a0148380b00a0300282002e0310e9050220308380c0160140600b", + "0xd81020e02c080110188780281001641c058100161700281101641c05811", + "0x581000a0148380b00a030028230168801100b20e0300f80b43e0140f81e", + "0x8380b00a030028140168848201801841c061030160440290301641c0581e", + "0x290701608805a2200a0148380b20802c8480500a41c058180163fc02805", + "0x590701606c0590400a0ac059070160a4058d200a0a4059070160141b005", + "0x582b0163500280c01641c0580c01634c0290501641c059050160500281b", + "0x2907016050058ff00a0148380b00a0300282b0184140d8110160ac05907", + "0x60ff20a06c0803c00a3fc059070163fc0583a00a3fc059070160141c805", + "0x7f00c20e02c1100b22c01402907016014060050620bc0622305c0b006107", + "0x5834016894028342120308380b21202d1200500a41c058fe01688802909", + "0x58f600a34c059070160d8058ee00a0148380b1a402d130051a40d806107", + "0x283a01641c058d40720307580507202c8380b00a378028d401641c058d3", + "0x280520e02c0283f00a0148380b07802c530051bc0f00610701642405a25", + "0x8380b05c02c8180500a41c058050180141f80b45037c0590701837805a27", + "0x58051d00147380b20e02c2100b1b80142100b20e02c6f80b13a0142000b", + "0x758051d602c8380b1d00e8060eb00a3a0059070163a00582000a3a005907", + "0x59070163b0058ec00a130059070161000581400a3b00590701639c7580c", + "0x8180500a41c0583f0161300280520e02c0280c00a0151480b00a0ac0283d", + "0x28f101641c058f1016080028f101641c0580505c0142680b20e02c1700b", + "0x8380b1ea02c7600509802c8380b09a02c0a0051ea02c8380b1e20e8060eb", + "0x58510163c4028530a20308380b07a02c2680500a41c0580507a0141e80b", + "0x2b00b0a60142b00b20e02c7c80b0a20147c80b20e02c2980b1ea01402907", + "0x6980509802c8380b09802c0a00505802c8380b05802c820050b002c8380b", + "0x60050b00302602c02202c2c00b20e02c2c00b1a80140600b20e02c0600b", + "0x590400a3e8059070160c40590300a0148380b04402d1100500a41c05805", + "0x280c00a0151500b00a0ac0285c01641c058fa0160500285a01641c0582f", + "0x8380b00a1600280520e02c0f00b1f40140290701608c0584c00a0148380b", + "0x8280b0280140d80b20e02c0d80b2080142f80b20e02c2f00b1a40142f00b", + "0x880b0be02c8380b0be02c6a00501802c8380b01802c6980520a02c8380b", + "0x582001640c0280520e02c0800b1f401402907016014060050be0308281b", + "0x285a00a170059070161840581400a1680590701605c0590400a18405907", + "0xa0050b402c8380b0b402c820050c602c8380b1f002c690051f002c8380b", + "0x3180b20e02c3180b1a80140600b20e02c0600b1a60142e00b20e02c2e00b", + "0x8281101841c0600b00a0300580500a41c0580500a0143180c0b81680880b", + "0xd80b0220140d80b20e02c0800b020014029070160140600504005c0622b", + "0x1180b20e02c0f80b20a014029070160140600504402d1601f03c0308380c", + "0x61030220311680520602c8380b20602c1000520602c8380b04602c0b805", + "0x5907016078058f500a0148380b00a0300282b0520500822e20806006107", + "0x7f8180188bc028ff01641c058ff0161700281801641c05818016410028ff", + "0x8380b00a030028fe0168c41880b20e0301780b4600141782e0580408380b", + "0x28d20168c81b03401841c061090160440290901641c0582e01604002805", + "0x5a3300a0148380b06c02c8480500a41c058340163fc0280520e02c0280c", + "0x6980b1a40146980b20e02c0283600a0148380b06202d1a00500a41c05904", + "0x6980520a02c8380b20a02c0a00505802c8380b05802c820051a802c8380b", + "0x60051a80308282c02202c6a00b20e02c6a00b1a80140600b20e02c0600b", + "0x1c80b0740141c80b20e02c0283900a0148380b1a402c7f80500a41c05805", + "0x280c00a37c6f00c46a0f01d00c20e0301c9050580401e00507202c8380b", + "0x28420800308380b07e02d1b00507e02c8380b0624100611300a0148380b", + "0x2100c20e02c2100b4720142100b20e02c2100b4700140290701610005a37", + "0x58e80164440280520e02c7580b468014758e801841c058e70168e8028e7", + "0x1e80c1d60141e80b20e02c028de00a130059070163b005a3b00a3b005907", + "0x280520e02c7880b4660147a8f101841c058420168e80284d01641c0584c", + "0x2907016014060050a602d1e85101641c060f50168f00280520e02c0283f", + "0x8380b0ac02c6e0050ac02c8380b0a202c4e8051f202c8380b07802c81805", + "0x7d04d0183ac028fa01641c058fa016080028fa01641c058051d00142c00b", + "0x285e01641c058f90160500285c01641c058580b4030758050b402c8380b", + "0x590300a0148380b00a0300280547c02c0282b00a17c05907016170058ec", + "0x286301641c058f80162a8028f801641c058530163540286101641c0583c", + "0x59070161942680c1d60143280b20e02c3280b0400143280b20e02c0282e", + "0x3400b1d80142f00b20e02c3080b0280143400b20e02c318f70183ac028f7", + "0x58f100a3d83500c20e02c2f80b09a014029070160141e8050be02c8380b", + "0x298051e402c8380b0da02c288050da02c8380b1ec02c7a80500a41c0586a", + "0x2f00b20e02c2f00b0280141d00b20e02c1d00b2080143800b20e02c7900b", + "0x3800c0bc0e80880b0e002c8380b0e002c6a00501802c8380b01802c69805", + "0x8180500a41c058310168d00280520e02c8200b4660140290701601406005", + "0x3a80b20e02c3900b0280147800b20e02c6f00b2080143900b20e02c6f80b", + "0x5a3300a0148380b1fc02c2600500a41c0580501801402a3f01601415805", + "0x590400a1dc059070164140590300a0148380b05c02c7d00500a41c05904", + "0x280c00a0152000b00a0ac0290c01641c05877016050028ef01641c0582c", + "0x581e0163fc0280520e02c1580b466014029070160a405a3300a0148380b", + "0x3c80b0280148680b20e02c0a00b2080143c80b20e02c8280b20601402907", + "0x8380b04402c7f80500a41c0580501801402a41016014158050f602c8380b", + "0x587d0160500290d01641c058110164100287d01641c0590501640c02805", + "0x285800a430059070161ec0585600a3bc05907016434058f900a1ec05907", + "0xa0051de02c8380b1de02c8200510002c8380b1dc02c690051dc02c8380b", + "0x4000b20e02c4000b1a80140600b20e02c0600b1a60148600b20e02c8600b", + "0x590300a0148380b02002c7d00500a41c058050180144000c2183bc0880b", + "0x287501641c0587f016050028f001641c058170164100287f01641c05820", + "0x7800b20e02c7800b2080147680b20e02c4100b1a40144100b20e02c0285a", + "0x8380b1da02c6a00501802c8380b01802c698050ea02c8380b0ea02c0a005", + "0x610701802c0280c01601402907016014028051da0303a8f002202c7680b", + "0x880503602c8380b02002c0800500a41c058050180141001701890882811", + "0x8380b03e02c8280500a41c058050180141100b48607c0f00c20e0300d80b", + "0x880c3ac0148180b20e02c8180b0400148180b20e02c1180b02e0141180b", + "0x2907016410058cf00a0148380b00a030028140169108201801841c06103", + "0x60051fe02d2282b0520308380c03c02c0880503c02c8380b03c02c11005", + "0x1000505c02c8380b05802c0b80505802c8380b05602c8280500a41c05805", + "0x280c00a3f805a460620bc061070180b80c00c3b20141700b20e02c1700b", + "0x1480b0220141480b20e02c1480b044014029070160c4058a600a0148380b", + "0x280520e02c8480b1fe014029070160140600506c02d238342120308380c", + "0x28d301641c058d2016348028d201641c0580506c014029070160d005909", + "0x5907016030058d300a414059070164140581400a0bc059070160bc05904", + "0x280520e02c0280c00a34c0610505e044058d301641c058d30163500280c", + "0x28d401641c058d40160e8028d401641c05805072014029070160d8058ff", + "0x8180500a41c058050180146f03c0189201d03901841c060d420a0bc0803c", + "0x2104001841c0583f0161340283f01641c058051bc0146f80b20e02c1d00b", + "0x590701639c0585100a39c05907016108058f500a0148380b08002c78805", + "0x58df0160500283901641c05839016410028eb01641c058e801614c028e8", + "0x1c8110163ac059070163ac058d400a03005907016030058d300a37c05907", + "0x583c016410028ec01641c058de01640c0280520e02c0280c00a3ac060df", + "0x8380b00a0300280549202c0282b00a0f4059070163b00581400a13005907", + "0x8380b1fc02c8200509a02c8380b20a02c8180500a41c058290163fc02805", + "0x29070160140600500a928058050560147a80b20e02c2680b0280147880b", + "0x59070160600590400a144059070164140590300a0148380b1fe02c7f805", + "0x280520e02c0280c00a0152500b00a0ac028f501641c05851016050028f1", + "0x7880b20e02c0a00b2080142980b20e02c8280b20601402907016078058ff", + "0x7f80500a41c0580501801402a4a016014158051ea02c8380b0a602c0a005", + "0x28f101641c05811016410028f901641c0590501640c0280520e02c1100b", + "0x2c00b20e02c2b00b1a40142b00b20e02c0285800a3d4059070163e405814", + "0x8380b01802c698051ea02c8380b1ea02c0a0051e202c8380b1e202c82005", + "0x2907016014060050b00307a8f102202c2c00b20e02c2c00b1a80140600b", + "0x590701605c0590400a3e8059070160800590300a0148380b02002c7d005", + "0x8380b0b402c690050b402c8380b00a1680283d01641c058fa0160500284c", + "0x600b1a60141e80b20e02c1e80b0280142600b20e02c2600b2080142e00b", + "0x58054960142e00c07a1300880b0b802c8380b0b802c6a00501802c8380b", + "0x580b01602c0590701601405a4c00a014059070160140582000a01405907", + "0x590701601405a4c00a014059070160140582000a0140590701601526805", + "0x5a4c00a014059070160140582000a014059070160152700501602c0580b", + "0x800b20e02c0600b020014029070160141e80501602c0580b01641c05805", + "0x8280b20a014029070160140600502e02d279050220308380c02002c08805", + "0xd80503602c8380b03602c1000503602c8380b04002c0b80504002c8380b", + "0x8380b00a0300281f016940029070180780581e00a0780d80c20e02c0d80b", + "0x8380c02202c0880502202c8380b02202c1100500a41c0581b01607c02805", + "0xb80503002c8380b04602c8280500a41c058050180148180b4a208c1100c", + "0x282901641c058220163d40281401641c058054a40148200b20e02c0c00b", + "0x59070160a40585c00a02c0590701602c0581400a0140590701601405904", + "0x580520a9500290401641c059040160800281401641c0581401694c02829", + "0x600505e02d2a82e01641c0602c0164400282c1fe0ac081070164100a029", + "0x12c10901641c060fe01695c028fe0620308380b05c02d2b00500a41c05805", + "0x8380b21202d2c80506c02c8380b1fe02c8180500a41c058050180141a00b", + "0x5a5c00a3500590701634c1880c4b60146980b20e02c6900b4b40146900b", + "0x283601641c058360160500282b01641c0582b0164100283901641c058d4", + "0x7f80b20601402907016014060050720d8158100160e4059070160e40590f", + "0x12e8051bc02c8380b07402c0a00507802c8380b05602c8200507402c8380b", + "0x600500a978058050560141f80b20e02c1880b0b80146f80b20e02c1a00b", + "0xa00505602c8380b05602c8200508002c8380b05e02d2f80500a41c05805", + "0x280c00a1007f82b02002c2000b20e02c2000b21e0147f80b20e02c7f80b", + "0x8180b1ea0147380b20e02c0283100a1080590701602c0590300a0148380b", + "0x12e8051bc02c8380b08402c0a00507802c8380b00a02c820051d002c8380b", + "0x7580b20e02c6f80b4c00141f80b20e02c7400b0b80146f80b20e02c7380b", + "0x583c0164100284c01641c058ec016970028ec01641c058eb07e0312d805", + "0x1e010016130059070161300590f00a378059070163780581400a0f005907", + "0x5907016044058f500a0148380b03e02c1600500a41c05805018014260de", + "0x58f1016080028f101641c0584d0360301780509a02c8380b00a0b80283d", + "0x590300a0148380b00a030028f5016984029070183c40581e00a3c405907", + "0x12d0051f202c8380b0a602d310050a602c8380b00a0c40285101641c0580b", + "0x590701616005a5c00a160059070161581e80c4b60142b00b20e02c7c80b", + "0x58fa01643c0285101641c058510160500280501641c05805016410028fa", + "0x280520e02c7a80b05801402907016014060051f4144028100163e805907", + "0x2f00b20e02c2e00b4c00142e00b20e02c0283100a1680590701602c05903", + "0x58050164100286101641c0585f0169700285f01641c0585e07a0312d805", + "0x2810016184059070161840590f00a168059070161680581400a01405907", + "0x5907016014188051f002c8380b01602c8180500a41c058050180143085a", + "0x328f701896c028f701641c058170163d40286501641c0586301698002863", + "0xa00500a02c8380b00a02c820050d402c8380b0d002d2e0050d002c8380b", + "0x283d00a1a87c00502002c3500b20e02c3500b21e0147c00b20e02c7c00b", + "0x8380b00a0300282002e031319050220308380c0160140600b00a0148380b", + "0x28220169940f81e01841c0601b0169900281b01641c0580c01645c02805", + "0x290301641c0581f0169980282301641c0590501640c0280520e02c0280c", + "0x59070164100582000a41005907016060058dc00a0600590701640c0589d", + "0x880b2080141480b20e02c0f00b0da0140a00b20e02c820100183ac02904", + "0x7600505202c8380b05202c7900504602c8380b04602c0a00502202c8380b", + "0x158100160b07f82b02041c0581405208c088110e00140a00b20e02c0a00b", + "0x59070164140590300a0148380b04402d3380500a41c05805018014160ff", + "0x58310169a40283101641c0582f0200313400505e02c8380b00a0c40282e", + "0x5a6a00a0b8059070160b80581400a044059070160440590400a3f805907", + "0x8380b02002c7880500a41c058050180147f02e022040058fe01641c058fe", + "0x590701642405a6c00a424059070160142d00500a41c0580c0169ac02805", + "0x58340169a80282001641c058200160500281701641c0581701641002834", + "0x8380c01802c0880501802c8380b01602c080050680800b8100160d005907", + "0xb80502e02c8380b02202c8280500a41c058050180148280b4da0440800c", + "0x61070180800280c3b20141000b20e02c1000b0400141000b20e02c0b80b", + "0x581100a040059070160400582200a0148380b00a0300281f0169b80f01b", + "0x590701608c0590500a0148380b00a030029030169bc1182201841c06010", + "0x8201b0187640290401641c059040160800290401641c0581801605c02818", + "0x1100b20e02c1100b044014029070160140600505602d380290280308380c", + "0x1600b20a014029070160140600505c02d3882c1fe0308380c04402c08805", + "0xec80506202c8380b06202c1000506202c8380b05e02c0b80505e02c8380b", + "0x58ff0163d40280520e02c0280c00a0d005a722123f8061070180c40a00c", + "0x28d301641c058d20163bc028d201641c059090520780827300a0d805907", + "0x590701634c0590c00a0d8059070160d80585c00a3f8059070163f805904", + "0x58a600a0148380b03c02c5300500a41c05805018014698361fc040058d3", + "0x1580507202c8380b1fe02c110051a802c8380b06802c8200500a41c05829", + "0x58290162980280520e02c0f00b14c014029070160140600500a9d005805", + "0x58050560141c80b20e02c1700b0440146a00b20e02c0a00b20801402907", + "0x59070160ac0590400a0148380b03c02c5300500a41c0580501801402a74", + "0x280520e02c0280c00a0153a00b00a0ac0283901641c05822016088028d4", + "0x1c80b20e02c8180b0440146a00b20e02c0d80b20801402907016078058a6", + "0x110051a802c8380b03e02c8200500a41c0580501801402a7401601415805", + "0x280b208014029070160140600500a9d0058050560141c80b20e02c0800b", + "0x587900a0e8059070160141880507202c8380b20a02c110051a802c8380b", + "0x583c01641c0583c016430028de01641c058390163d40283c01641c0583a", + "0x800b0220140800b20e02c0600b020014029070160141e8050783786a010", + "0x1000b20e02c8280b20a014029070160140600502e02d3a9050220308380c", + "0x8380b03602c1000503c02c8380b02202c7a80503602c8380b04002c0b805", + "0x28220169d80290701807c0581e00a07c0d80c20e02c0d80b0360140d80b", + "0xa00500a02c8380b00a02c8200500a41c0581b01607c0280520e02c0280c", + "0x8380b03c02c028104ee0140f00b20e02c0f00b0b80140580b20e02c0580b", + "0x280520e02c0280c00a05005a7920802c8380c03002d3c00503040c11810", + "0x280c00a0b005a7c1fe02c8380c05602d3d8050560a40610701641005a7a", + "0x5a7e00a0bc059070163fc05a7d00a0b80590701640c0590300a0148380b", + "0x8480b20e02c7f00b5000147f00b20e02c188290189fc0283101641c0582f", + "0x8380b21202d4080505c02c8380b05c02c0a00504602c8380b04602c82005", + "0x283401641c0590301640c0280520e02c0280c00a4241702302002c8480b", + "0x8380b1a402d400051a402c8380b06c0a40627f00a0d8059070160b005a82", + "0x6980b5020141a00b20e02c1a00b0280141180b20e02c1180b2080146980b", + "0x590701605005a8300a0148380b00a030028d306808c0800b1a602c8380b", + "0x58d4016a040290301641c059030160500282301641c05823016410028d4", + "0x280520e02c1100b05801402907016014060051a840c1181001635005907", + "0x59070160e80582000a0e8059070160e40d80c05e0141c80b20e02c0282e", + "0x580b01640c0280520e02c0280c00a0f005a8400a41c0603a0160780283a", + "0x1f80b4fc0141f80b20e02c6f80b50a0146f80b20e02c0283100a37805907", + "0x28e701641c05842016a000284201641c0584003c0313f80508002c8380b", + "0x590701639c05a8100a378059070163780581400a0140590701601405904", + "0x590300a0148380b07802c1600500a41c05805018014738de00a040058e7", + "0x13f8051d802c8380b1d602d410051d602c8380b00a0c4028e801641c0580b", + "0x59070160140590400a0f40590701613005a8000a130059070163b00f00c", + "0x1e8e800a0400583d01641c0583d016a04028e801641c058e801605002805", + "0x28f101641c058050620142680b20e02c0580b2060140290701601406005", + "0x8380b1ea1440627f00a1440590701605c058f500a3d4059070163c405a82", + "0x2680b0280140280b20e02c0280b2080147c80b20e02c2980b5000142980b", + "0x8380b00a0f4028f909a0140800b1f202c8380b1f202d4080509a02c8380b", + "0x280520e02c0280c00a0800b80c50c4140880c20e0300580501802c02805", + "0x280c00a08805a8803e0780610701806c05a8700a06c0590701603005a0e", + "0x58ee00a40c0590701607c05a8900a08c059070164140590300a0148380b", + "0x290401641c059040160800290401641c058180163d80281801641c05903", + "0x8380b02202c8200505202c8380b03c02c7480502802c8380b208040060eb", + "0xa00b1d80141480b20e02c1480b1160141180b20e02c1180b0280140880b", + "0x160ff0560400582c1fe0ac08107016050148230220444680502802c8380b", + "0x282e01641c0590501640c0280520e02c1100b5140140290701601406005", + "0x59070160c405a6900a0c4059070160bc0800c4d00141780b20e02c02831", + "0x58fe0169a80282e01641c0582e0160500281101641c05811016410028fe", + "0x280520e02c0800b1e201402907016014060051fc0b8088100163f805907", + "0x283401641c059090169b00290901641c058050b40140290701603005a0b", + "0x59070160d005a6a00a080059070160800581400a05c0590701605c05904", + "0x800c20e0300600b0220140600b20e02c0580b0200141a02002e04005834", + "0xb80b02e0140b80b20e02c0880b20a014029070160140600520a02d45811", + "0x281b0400308380b04002c0d80504002c8380b04002c1000504002c8380b", + "0x29070160800581f00a0148380b00a0300281e016a300290701806c0581e", + "0x600504602d4682203e0308380c02002c0880502002c8380b02002c11005", + "0x1000503002c8380b20602c0b80520602c8380b04402c8280500a41c05805", + "0x29070184100581e00a4100c00c20e02c0c00b0360140c00b20e02c0c00b", + "0x8380b03e02c1100500a41c0581801607c0280520e02c0280c00a05005a8e", + "0x8280500a41c058050180147f80b51e0ac1480c20e0300f80b0220140f80b", + "0x1700b20e02c1700b0400141700b20e02c1600b02e0141600b20e02c1580b", + "0x58f500a0148380b00a030028fe016a401882f01841c0602e00a03011805", + "0x283601641c05834016a440283401641c058310160600290901641c05829", + "0x59070164240585c00a0bc059070160bc0590400a348059070160d805a92", + "0x8200500a41c058050180146910905e040058d201641c058d2016a4c02909", + "0x600500aa50058050560146a00b20e02c1480b0440146980b20e02c7f00b", + "0x158051a802c8380b1fe02c110051a602c8380b00a02c8200500a41c05805", + "0x8380b00a0b80280520e02c0a00b058014029070160140600500aa5005805", + "0x581e00a0e8059070160e80582000a0e8059070160e40c00c05e0141c80b", + "0x7f0051bc02c8380b00a0c40280520e02c0280c00a0f005a9500a41c0603a", + "0x2000b20e02c6f80b5220141f80b20e02c0f80b1ea0146f80b20e02c6f00b", + "0x8380b07e02c2e00500a02c8380b00a02c8200508402c8380b08002d49005", + "0x280520e02c0280c00a1081f80502002c2100b20e02c2100b5260141f80b", + "0x7400b20e02c0f80b0440147380b20e02c0280b208014029070160f00582c", + "0x110051a602c8380b00a02c8200500a41c0580501801402a9601601415805", + "0x7400b20e02c6a00b52e0147380b20e02c6980b1f20146a00b20e02c1180b", + "0x58f500a0148380b03c02c1600500a41c0580501801402a9601601415805", + "0x284c01641c058ec040030178051d802c8380b00a0b8028eb01641c05810", + "0x8380b00a0300283d016a60029070181300581e00a1300590701613005820", + "0x8380b1e202d490051e202c8380b09a02d4c80509a02c8380b00a0c402805", + "0x7a80b5260147580b20e02c7580b0b80140280b20e02c0280b2080147a80b", + "0x29070160f40582c00a0148380b00a030028f51d60140800b1ea02c8380b", + "0x59070160140590400a14c0590701614405a9a00a1440590701601418805", + "0x298eb00a0400585301641c05853016a4c028eb01641c058eb01617002805", + "0x7400b20e02c8280b0440147380b20e02c0280b2080140290701601406005", + "0x59070163a0058f500a158059070163e405a9a00a3e40590701601418805", + "0x600b20e02c0580b0200142b0581ce0400585601641c05856016a4c02858", + "0x880b20a014029070160140600520a02d4d8110200308380c01802c08805", + "0xd80504002c8380b04002c1000504002c8380b02e02c0b80502e02c8380b", + "0x8380b00a0300281e016a700290701806c0581e00a06c1000c20e02c1000b", + "0x8380c02002c0880502002c8380b02002c1100500a41c0582001607c02805", + "0xb80520602c8380b04402c8280500a41c058050180141180b53a0880f80c", + "0x61070180600280c53c0140c00b20e02c0c00b0400140c00b20e02c8180b", + "0x5aa000a0ac0590701607c058f500a0148380b00a03002829016a7c0a104", + "0x290401641c059040164100282c01641c058ff0160dc028ff01641c05814", + "0x60050580ac820100160b0059070160b00589900a0ac059070160ac0585c", + "0x1580505e02c8380b03e02c1100505c02c8380b05202c8200500a41c05805", + "0x1180b0440141700b20e02c0280b208014029070160140600500aa8405805", + "0x8380b03c02c1600500a41c0580501801402aa10160141580505e02c8380b", + "0x58fe016080028fe01641c058310400301780506202c8380b00a0b802805", + "0x582200a0148380b00a03002909016a88029070183f80581e00a3f805907", + "0x8380b00a030028d2016a8c1b03401841c060100160440281001641c05810", + "0x58d4016080028d401641c058d301605c028d301641c0583601641402805", + "0x29070160140600507802d5203a0720308380c1a80140602300a35005907", + "0x8380b1be02c1b8051be02c8380b07402d528051bc02c8380b06802c7a805", + "0x1f80b1320146f00b20e02c6f00b0b80141c80b20e02c1c80b2080141f80b", + "0x59070160f00590400a0148380b00a0300283f1bc0e40800b07e02c8380b", + "0x280520e02c0280c00a0155080b00a0ac0282f01641c058340160880282e", + "0x280554202c0282b00a0bc059070163480582200a0b80590701601405904", + "0x1880508002c8380b02002c7a80500a41c059090160b00280520e02c0280c", + "0x280501641c05805016410028e701641c058420163800284201641c05805", + "0x60051ce1000281001639c0590701639c0589900a100059070161000585c", + "0x1880505e02c8380b20a02c1100505c02c8380b00a02c8200500a41c05805", + "0x28ec01641c0582f0163d4028eb01641c058e8016380028e801641c05805", + "0x880501802c8380b01602c080051d63b0170100163ac059070163ac05899", + "0x8380b02202c8280500a41c058050180148280b54c0440800c20e0300600b", + "0x1000b0360141000b20e02c1000b0400141000b20e02c0b80b02e0140b80b", + "0x280520e02c0280c00a07805aa700a41c0601b0160780281b0400308380b", + "0xf80c20e0300800b0220140800b20e02c0800b044014029070160800581f", + "0x8180b02e0148180b20e02c1100b20a014029070160140600504602d54022", + "0xa10401841c0601800a030eb00503002c8380b03002c1000503002c8380b", + "0x601f0160440281f01641c0581f0160880280520e02c0280c00a0a405aa9", + "0x282e01641c058ff0164140280520e02c0280c00a0b005aaa1fe0ac06107", + "0x8380c05e410061d900a0bc059070160bc0582000a0bc059070160b805817", + "0xee80506802c8380b05602c7a80500a41c058050180148480b5563f81880c", + "0x590701634805aac00a348059070160d80591b00a0d8059070163f80a00c", + "0x58d3016ab40283401641c058340161700283101641c05831016410028d3", + "0x280520e02c0a00b19e01402907016014060051a60d01881001634c05907", + "0x280555c02c0282b00a0e4059070160ac0582200a3500590701642405904", + "0x110051a802c8380b20802c8200500a41c0581401633c0280520e02c0280c", + "0x1480b208014029070160140600500aab8058050560141c80b20e02c1600b", + "0x580501801402aae0160141580507202c8380b03e02c110051a802c8380b", + "0x58050560141c80b20e02c1180b0440146a00b20e02c0280b20801402907", + "0x5907016040058f500a0148380b03c02c1600500a41c0580501801402aae", + "0x58de016080028de01641c0583c0400301780507802c8380b00a0b80283a", + "0x283100a0148380b00a030028df016abc029070183780581e00a37805907", + "0x8200508402c8380b08002d5600508002c8380b07e02d5800507e02c8380b", + "0x2100b20e02c2100b55a0141d00b20e02c1d00b0b80140280b20e02c0280b", + "0x58050620140290701637c0582c00a0148380b00a030028420740140800b", + "0x585c00a014059070160140590400a3a00590701639c05ab100a39c05907", + "0x58050180147403a00a040058e801641c058e8016ab40283a01641c0583a", + "0x58050620141c80b20e02c8280b0440146a00b20e02c0280b20801402907", + "0x5aad00a130059070160e4058f500a3b0059070163ac05ab100a3ac05907", + "0x600b00a0300580500a41c0580507a0147604c1a8040058ec01641c058ec", + "0x880c20e02c0880b0360140290701601406005036080062b202e41406107", + "0x581101607c0280520e02c0280c00a07c05ab300a41c0601e0160780281e", + "0x600c56a0141180b20e02c0800b5680141100b20e02c0b80b20601402907", + "0x290501641c059050164100281801641c059030164680290301641c05823", + "0x6005030088828100160600590701606005ab600a0880590701608805814", + "0x581100a410059070160300581000a0148380b03e02c1600500a41c05805", + "0x59070160a40590500a0148380b00a0300282b016adc1481401841c06104", + "0x582c01606c0282c01641c0582c0160800282c01641c058ff01605c028ff", + "0xf80500a41c058050180141780b5700148380c05c02c0f00505c0b006107", + "0x7f03101841c060140160440281401641c058140160880280520e02c1600b", + "0x583401605c0283401641c058fe0164140280520e02c0280c00a42405ab9", + "0x15d0d31a40308380c06c4140602300a0d8059070160d80582000a0d805907", + "0x8380b1a602c0c00507202c8380b02e02c8180500a41c058050180146a00b", + "0x1d00b0520146f00b20e02c1c80b0280141e00b20e02c6900b2080141d00b", + "0x580501801402abb0160141580507e02c8380b06202c110051be02c8380b", + "0x8380b02e02c8180500a41c0581101607c0280520e02c0800b17801402907", + "0x1880b0440147380b20e02c2000b0280142100b20e02c6a00b2080142000b", + "0x8380b02002c5e00500a41c0580501801402abc016014158051d002c8380b", + "0x8380b20a02c820051d602c8380b02e02c8180500a41c0581101607c02805", + "0x58050560147400b20e02c8480b0440147380b20e02c7580b0280142100b", + "0x7600b20e02c0282e00a0148380b05e02c1600500a41c0580501801402abc", + "0x604c0160780284c01641c0584c0160800284c01641c058ec05803017805", + "0x283100a1340590701605c0590300a0148380b00a0300283d016af402907", + "0xa00507802c8380b20a02c820051ea02c8380b1e202c7f0051e202c8380b", + "0x1f80b20e02c0a00b0440146f80b20e02c7a80b0520146f00b20e02c2680b", + "0x5853022030178050a602c8380b00a0b80285101641c058df0200315f005", + "0x581400a0f0059070160f00590400a158059070160fc058f500a3e405907", + "0x285101641c058510163180285601641c05856016170028de01641c058de", + "0x585a1f4160081070163e4288561bc0f0828c500a3e4059070163e405820", + "0x58100162f00280520e02c1e80b05801402907016014060050b43e82c010", + "0x59050164100285c01641c0581701640c0280520e02c0880b03e01402907", + "0x282b00a184059070160500582200a17c059070161700581400a17805907", + "0x8380b02202c0f80500a41c058100162f00280520e02c0280c00a0155f80b", + "0x58f80160500284201641c05905016410028f801641c0581701640c02805", + "0x585600a17805907016108058f900a3a0059070160ac0582200a39c05907", + "0x1600050c602c8380b00a0c40286101641c058e8016a5c0285f01641c058e7", + "0x59070161947b80c56a0147b80b20e02c3080b1ea0143280b20e02c3180b", + "0x585f0160500285e01641c0585e0164100286a01641c0586801646802868", + "0x2907016014060050d417c2f0100161a8059070161a805ab600a17c05907", + "0x280520e02c0600b1f401402907016040058bc00a0148380b02202c0f805", + "0x1000b20e02c1000b2080143680b20e02c7b00b5820147b00b20e02c0285a", + "0x286d0360800800b0da02c8380b0da02d5b00503602c8380b03602c0a005", + "0x280c00a0800b80c5844140880c20e0300580501802c0280520e02c0283d", + "0x5ac503e0780610701806c05ac400a06c0590701603005ac300a0148380b", + "0x59070160780595400a08c0590701607c05ac600a0148380b00a03002822", + "0x590701808c0584000a08c0590701608c0582900a0148380b00a0fc02903", + "0xc00b0840140a00b20e02c8280b206014029070160140600520802d63818", + "0x582000a3fc059070160147400505602c8380b05202c7380505202c8380b", + "0x59070160ac1600c1d60141600b20e02c7f8100183ac028ff01641c058ff", + "0x16400b00a0ac0283101641c0582e0163b00282f01641c058140160500282e", + "0x7f00b20e02c8280b206014029070164100584c00a0148380b00a03002805", + "0x8380b212040060eb00a424059070164240582000a4240590701601417005", + "0x580507a0141880b20e02c1a00b1d80141780b20e02c7f00b0280141a00b", + "0x8180b2aa0141780b20e02c1780b0280140880b20e02c0880b20801402907", + "0x81070160c48182f022044ab00506202c8380b06202c7600520602c8380b", + "0x280520e02c1100b59201402907016014060051a63481b01001634c69036", + "0x59070160e40800c4d00141c80b20e02c0283100a3500590701641405903", + "0x58d40160500281101641c058110164100283c01641c0583a0169a40283a", + "0x290701601406005078350088100160f0059070160f005a6a00a35005907", + "0x28de01641c058050b401402907016040058f100a0148380b01802d65005", + "0x59070160800581400a05c0590701605c0590400a37c0590701637805a6c", + "0x800500a41c0580507a0146f82002e040058df01641c058df0169a802820", + "0x58050180140b80b5964140880c20e0300800b0220140800b20e02c0600b", + "0xd80b0400140d80b20e02c1000b02e0141000b20e02c8280b20a01402907", + "0x5acc00a41c0601e0160780281e0360308380b03602c0d80503602c8380b", + "0x880b20e02c0880b0440140290701606c0581f00a0148380b00a0300281f", + "0x1180b20a014029070160140600520602d668230440308380c02202c08805", + "0x58f500a050059070160152900520802c8380b03002c0b80503002c8380b", + "0x280b01641c0580b0160500280501641c058050164100282901641c05822", + "0x59070164100582000a0500590701605005a5300a0a4059070160a40585c", + "0x59070180b00591000a0b07f82b02041c059040280a40580520a95002904", + "0x5a5700a3f81880c20e02c1700b4ac014029070160140600505e02d6702e", + "0x1b00b20e02c7f80b206014029070160140600506802d6790901641c060fe", + "0x58d3062031690051a602c8380b1a402d688051a402c8380b21202d68005", + "0x581400a0ac059070160ac0590400a0e40590701635005ad300a35005907", + "0x58050180141c8360560400583901641c058390164700283601641c05836", + "0x1d00b0280141e00b20e02c1580b2080141d00b20e02c7f80b20601402907", + "0x1580507e02c8380b06202c2e0051be02c8380b06802d2e8051bc02c8380b", + "0x1580b2080142000b20e02c1780b5aa014029070160140600500ab5005805", + "0x800b08002c8380b08002c8e0051fe02c8380b1fe02c0a00505602c8380b", + "0x8380b00a0c40284201641c0580b01640c0280520e02c0280c00a1007f82b", + "0x2100b0280141e00b20e02c0280b2080147400b20e02c8180b1ea0147380b", + "0x1580507e02c8380b1d002c2e0051be02c8380b1ce02d2e8051bc02c8380b", + "0x8380b00a0b80280520e02c0f80b058014029070160140600500ab5005805", + "0x581e00a3b0059070163b00582000a3b0059070163ac0d80c05e0147580b", + "0x281101641c058110160880280520e02c0280c00a13005ad600a41c060ec", + "0x584d0164140280520e02c0280c00a3c405ad709a0f40610701804405811", + "0x1e80b1ea0142980b20e02c02ad800a144059070163d40581700a3d405907", + "0x2e00501602c8380b01602c0a00500a02c8380b00a02c820051f202c8380b", + "0x2880b20e02c2880b0400142980b20e02c2980b5b20147c80b20e02c7c80b", + "0x2d00b20e0307d00b5b60147d0580ac0408380b0a214c7c80b00a4156d005", + "0x2f80b5bc0142f85e01841c0585a016b740280520e02c0280c00a17005adc", + "0x286301641c0585801640c0280520e02c0280c00a3e005adf0c202c8380c", + "0x8380b1ee178062d200a3dc0590701619405ad100a1940590701618405ae0", + "0x3180b0280142b00b20e02c2b00b2080143500b20e02c3400b5a60143400b", + "0x8380b00a0300286a0c61580800b0d402c8380b0d402c8e0050c602c8380b", + "0x58f60160500283c01641c05856016410028f601641c0585801640c02805", + "0x282b00a0fc059070161780585c00a37c059070163e005a5d00a37805907", + "0x58560164100286d01641c0585c016b540280520e02c0280c00a0156a00b", + "0x2b0100161b4059070161b40591c00a160059070161600581400a15805907", + "0x5907016014188051e402c8380b01602c8180500a41c0580501801436858", + "0x58f20160500283c01641c058050164100287201641c058f10163d402870", + "0x5ae100a0fc059070161c80585c00a37c059070161c005a5d00a37805907", + "0x3b80b20e02c3a80b5a60143a80b20e02c7803f018b48028f001641c058df", + "0x8380b0ee02c8e0051bc02c8380b1bc02c0a00507802c8380b07802c82005", + "0x8180500a41c0584c0160b00280520e02c0280c00a1dc6f03c02002c3b80b", + "0x287901641c058050620148600b20e02c0880b1ea0147780b20e02c0580b", + "0x8380b0f602d698050f602c8380b21a430062d200a434059070161e405ae1", + "0x3e80b2380147780b20e02c7780b0280140280b20e02c0280b2080143e80b", + "0x590701602c0590300a0148380b00a0300287d1de0140800b0fa02c8380b", + "0x8380b02e02c7a8050fe02c8380b10002d7080510002c8380b00a0c4028ee", + "0x590400a210059070163b405ad300a3b4059070161fc4100c5a40144100b", + "0x588401641c05884016470028ee01641c058ee0160500280501641c05805", + "0x62e220a0440610701802c0280c016014029070160141e8051083b802810", + "0x8380c03602d7200503602c8380b01802d7180500a41c0580501801410017", + "0x8f80504602c8380b20a02c8180500a41c058050180141100b5ca07c0f00c", + "0x8200b20e02c0c00b1ce0140c00b20e02c8180b0840148180b20e02c0f80b", + "0x581e0166180281401641c059040200307580520802c8380b20802c10005", + "0x598700a08c0590701608c0581400a044059070160440590400a0a405907", + "0x8380b0280a4118110226200281401641c058140163b00282901641c05829", + "0x290701608805ae600a0148380b00a0300282c1fe0ac0800b0583fc15810", + "0x8380b05e0400626800a0bc059070160141880505c02c8380b20a02c81805", + "0x1700b0280140880b20e02c0880b2080147f00b20e02c1880b4d20141880b", + "0x8380b00a030028fe05c0440800b1fc02c8380b1fc02d3500505c02c8380b", + "0x8480b20e02c0285a00a0148380b01802d7380500a41c058100163c402805", + "0x8380b04002c0a00502e02c8380b02e02c8200506802c8380b21202d36005", + "0x590701602c0581000a0d01001702002c1a00b20e02c1a00b4d40141000b", + "0x590500a0148380b00a03002905016ba00881001841c0600c0160440280c", + "0x281001641c058100160880282001641c0581701605c0281701641c05811", + "0x8380b04002c1000503c02c8380b03602c7a8050360400610701604005ae9", + "0x2822016ba80290701807c0581e00a07c1000c20e02c1000b0360141000b", + "0x590400a0148380b04002c0f80500a41c058100163fc0280520e02c0280c", + "0x1181020e02c0f0050181d40281e01641c0581e0161700280501641c05805", + "0x5aec00a0148380b00a03002814016bac8200b20e0300c00b0ee0140c103", + "0x282301641c058230164100282b01641c05829016bb40282901641c05904", + "0x600505640c118100160ac059070160ac05aee00a40c0590701640c0585c", + "0x2e00504602c8380b04602c820051fe02c8380b02802d7780500a41c05805", + "0x280c00a3fc8182302002c7f80b20e02c7f80b5dc0148180b20e02c8180b", + "0x160200180bc0282c01641c0580505c014029070160880582c00a0148380b", + "0x1780b5e00148380c05c02c0f00505c02c8380b05c02c1000505c02c8380b", + "0x7f03101841c060100160440280520e02c0f00b1f40140290701601406005", + "0x583401605c0283401641c058fe0164140280520e02c0280c00a42405af1", + "0x1790d31a40308380c06c0140602300a0d8059070160d80582000a0d805907", + "0x8380c06202c0880506202c8380b06202c1100500a41c058050180146a00b", + "0xb8051bc02c8380b07402c8280500a41c058050180141e00b5e60e81c80c", + "0x610701837c6900c0460146f80b20e02c6f80b0400146f80b20e02c6f00b", + "0x62f500a39c059070160e4058f500a0148380b00a03002842016bd02003f", + "0x7600b20e02c7580b5da0147580b20e02c7400b5ec0147400b20e02c200d3", + "0x8380b1d802d770051ce02c8380b1ce02c2e00507e02c8380b07e02c82005", + "0x8200500a41c058d301657c0280520e02c0280c00a3b07383f02002c7600b", + "0x600500abdc058050560141e80b20e02c1c80b0440142600b20e02c2100b", + "0x582200a130059070163480590400a0148380b1a602caf80500a41c05805", + "0x58d40164100280520e02c0280c00a0157b80b00a0ac0283d01641c0583c", + "0x8380b00a030028055ee02c0282b00a0f4059070160c40582200a13005907", + "0x17b80b00a0ac0283d01641c059090160880284c01641c0580501641002805", + "0x280520e02c0800b1fe014029070160bc0582c00a0148380b00a03002805", + "0x280b20e02c0280b2080147880b20e02c2680b5de0142680b20e02c02831", + "0x28f103c0140800b1e202c8380b1e202d7700503c02c8380b03c02c2e005", + "0x283d01641c059050160880284c01641c058050164100280520e02c0280c", + "0x2980b20e02c1e80b1ea0142880b20e02c7a80b5de0147a80b20e02c02831", + "0x581000a0148380b00a0f4028510a61300800b0a202c8380b0a202d77005", + "0x8380b00a03002817016be08281101841c060100160440281001641c0580c", + "0x58110163d40281b01641c0582001605c0282001641c0590501641402805", + "0xf00503e06c0610701606c0581b00a06c0590701606c0582000a07805907", + "0x280520e02c0d80b03e014029070160140600504402d7c80520e0300f80b", + "0x59070160780585c00a02c0590701602c0581400a0140590701601405904", + "0x17d10401641c060180169e00281820608c08107016078058050209dc0281e", + "0x602b0169ec0282b0520308380b20802d3d00500a41c058050180140a00b", + "0x17e00505c02c8380b20602c8180500a41c058050180141600b5f63fc05907", + "0x59070160c41480c5fc0141880b20e02c1780b5fa0141780b20e02c7f80b", + "0x582e0160500282301641c058230164100290901641c058fe016bfc028fe", + "0x2907016014060052120b8118100164240590701642405b0000a0b805907", + "0x8380b06802c0a00506c02c8380b04602c8200506802c8380b20602c81805", + "0x58050560146a00b20e02c1480b0b80146980b20e02c1600b4ba0146900b", + "0x8380b04602c8200507202c8380b02802d8100500a41c0580501801402b01", + "0x8182302002c1c80b20e02c1c80b6000148180b20e02c8180b0280141180b", + "0x283a01641c0580505c014029070160880582c00a0148380b00a03002839", + "0x8380c07802c0f00507802c8380b07802c1000507802c8380b07406c0602f", + "0x580b0280140280b20e02c0280b20801402907016014060051bc02d81805", + "0x6f81020e02c0f00b00a0418200503c02c8380b03c02c2e00501602c8380b", + "0x5b0700a0148380b00a030028e7016c182100b20e0302000b60a0142003f", + "0x8380b00a0300284c016c247600b20e0307580b610014758e801841c05842", + "0x584d016bf40284d01641c058ec016c280283d01641c0583f01640c02805", + "0x820050a202c8380b1ea02d7f8051ea02c8380b1e23a0062fe00a3c405907", + "0x2880b20e02c2880b6000141e80b20e02c1e80b0280146f80b20e02c6f80b", + "0x590400a14c059070160fc0590300a0148380b00a0300285107a37c0800b", + "0x28d301641c0584c016974028d201641c058530160500283601641c058df", + "0x8380b1f2350062fe00a3e40590701634c05b0b00a350059070163a00585c", + "0x6900b0280141b00b20e02c1b00b2080142c00b20e02c2b00b5fe0142b00b", + "0x8380b00a030028581a40d80800b0b002c8380b0b002d800051a402c8380b", + "0x583f016050028df01641c058df016410028fa01641c058e7016c0802805", + "0x2907016014060051f40fc6f8100163e8059070163e805b0000a0fc05907", + "0x2e00b20e02c0283100a1680590701602c0590300a0148380b1bc02c16005", + "0x585f016bfc0285f01641c0585e03c0317f0050bc02c8380b0b802d85805", + "0x5b0000a168059070161680581400a014059070160140590400a18405907", + "0x8380b01602c8180500a41c058050180143085a00a0400586101641c05861", + "0x58170163d40286501641c05863016c2c0286301641c058050620147c00b", + "0x820050d402c8380b0d002d7f8050d002c8380b0ca3dc062fe00a3dc05907", + "0x3500b20e02c3500b6000147c00b20e02c7c00b0280140280b20e02c0280b", + "0x881001841c0600c0160440280c01641c0580b0160400286a1f00140800b", + "0x581701605c0281701641c058110164140280520e02c0280c00a41405b0c", + "0x7a8050360400610701604005ae900a040059070160400582200a08005907", + "0x1000c20e02c1000b0360141000b20e02c1000b0400140f00b20e02c0d80b", + "0x58100163fc0280520e02c0280c00a08805b0d00a41c0601f0160780281f", + "0x581e0161700280501641c058050164100280520e02c1000b03e01402907", + "0x8200b20e0300c00b1c20140c1030460408380b03c014060e300a07805907", + "0x5829016c400282901641c05904016c3c0280520e02c0280c00a05005b0e", + "0x5b1100a40c0590701640c0585c00a08c0590701608c0590400a0ac05907", + "0x8380b02802d8900500a41c05805018014159030460400582b01641c0582b", + "0x7f80b6220148180b20e02c8180b0b80141180b20e02c1180b2080147f80b", + "0x29070160880582c00a0148380b00a030028ff20608c0800b1fe02c8380b", + "0x8380b05c02c1000505c02c8380b0580800602f00a0b00590701601417005", + "0xf00b1f4014029070160140600505e02d8980520e0301700b03c0141700b", + "0x280520e02c0280c00a42405b141fc0c4061070180400581100a0148380b", + "0x59070160d80582000a0d8059070160d00581700a0d0059070163f805905", + "0x7a80500a41c058050180146a00b62a34c6900c20e0301b00501876402836", + "0x1e00b20e02c1d00b6200141d00b20e02c6980b62c0141c80b20e02c1880b", + "0x8380b07802d8880507202c8380b07202c2e0051a402c8380b1a402c82005", + "0x28de01641c058d40164100280520e02c0280c00a0f01c8d202002c1e00b", + "0x590400a0148380b00a0300280562e02c0282b00a37c059070160c405822", + "0x280c00a0158b80b00a0ac028df01641c05909016088028de01641c05805", + "0x8380b00a0c40280520e02c0800b1fe014029070160bc0582c00a0148380b", + "0xf00b0b80140280b20e02c0280b2080142000b20e02c1f80b6240141f80b", + "0x8380b00a0300284003c0140800b08002c8380b08002d8880503c02c8380b", + "0x8380b00a0c4028df01641c05905016088028de01641c0580501641002805", + "0x7380b6220147400b20e02c6f80b1ea0147380b20e02c2100b6240142100b", + "0x600c0160440280c01641c0580b016040028e71d03780800b1ce02c8380b", + "0x281701641c058110164140280520e02c0280c00a41405b1802204006107", + "0x61070160800581b00a080059070160800582000a0800590701605c05817", + "0x1000b03e014029070160140600503c02d8c80520e0300d80b03c0140d820", + "0x5b1a04407c061070180400581100a040059070160400582200a0148380b", + "0x590701640c0581700a40c059070160880590500a0148380b00a03002823", + "0x1480b6360508200c20e0300c005018a780281801641c0581801608002818", + "0x7f80b20e02c0a00b6380141580b20e02c0f80b1ea0140290701601406005", + "0x8380b05602c2e00520802c8380b20802c8200505802c8380b1fe02d8e805", + "0x280520e02c0280c00a0b01590402002c1600b20e02c1600b2420141580b", + "0x280563c02c0282b00a0bc0590701607c0582200a0b8059070160a405904", + "0x282f01641c058230160880282e01641c058050164100280520e02c0280c", + "0x580505c014029070160780582c00a0148380b00a0300280563c02c0282b", + "0xf0051fc02c8380b1fc02c100051fc02c8380b0620800602f00a0c405907", + "0x800b20e02c0800b044014029070160140600521202d8f80520e0307f00b", + "0x1b00b20a01402907016014060051a402d900360680308380c02002c08805", + "0xd8051a802c8380b1a802c100051a802c8380b1a602c0b8051a602c8380b", + "0x8380b00a0300283a016c84029070180e40581e00a0e46a00c20e02c6a00b", + "0x8380c06802c0880506802c8380b06802c1100500a41c058d401607c02805", + "0xb80507e02c8380b1bc02c8280500a41c058050180146f80b6443781e00c", + "0x61070181000280c3b20142000b20e02c2000b0400142000b20e02c1f80b", + "0x5b2400a3ac059070160f0058f500a0148380b00a030028e8016c8c73842", + "0x283d01641c0584c016c740284c01641c058ec016c94028ec01641c058e7", + "0x59070160f40592100a3ac059070163ac0585c00a1080590701610805904", + "0x1100509a02c8380b1d002c8200500a41c058050180141e8eb0840400583d", + "0x280b208014029070160140600500ac98058050560147880b20e02c1e00b", + "0x580501801402b26016014158051e202c8380b1be02c1100509a02c8380b", + "0x58f51a8030178051ea02c8380b00a0b80280520e02c1d00b05801402907", + "0x2853016c9c029070181440581e00a144059070161440582000a14405907", + "0x7a8050ac02c8380b1f202d940051f202c8380b00a0c40280520e02c0280c", + "0x2d00b20e02c7d00b63a0147d00b20e02c2b00b64a0142c00b20e02c1a00b", + "0x8380b0b402c908050b002c8380b0b002c2e00500a02c8380b00a02c82005", + "0x8200500a41c058530160b00280520e02c0280c00a1682c00502002c2d00b", + "0x600500ac78058050560141780b20e02c1a00b0440141700b20e02c0280b", + "0x7c8051e202c8380b1a402c1100509a02c8380b00a02c8200500a41c05805", + "0x600500ac78058050560141780b20e02c7880b52e0141700b20e02c2680b", + "0x283100a17005907016040058f500a0148380b21202c1600500a41c05805", + "0x2e00500a02c8380b00a02c820050be02c8380b0bc02d948050bc02c8380b", + "0x280c00a17c2e00502002c2f80b20e02c2f80b2420142e00b20e02c2e00b", + "0x283100a0bc059070164140582200a0b8059070160140590400a0148380b", + "0x908050c602c8380b05e02c7a8051f002c8380b0c202d948050c202c8380b", + "0x581100a0300590701602c0581000a3e03182e02002c7c00b20e02c7c00b", + "0x59070160440590500a0148380b00a03002905016ca80881001841c0600c", + "0x582001606c0282001641c058200160800282001641c0581701605c02817", + "0xf80500a41c058050180140f00b6560148380c03602c0f00503608006107", + "0x1101f01841c060100160440281001641c058100160880280520e02c1000b", + "0x590301605c0290301641c058220164140280520e02c0280c00a08c05b2c", + "0x1968142080308380c0300140629e00a060059070160600582000a06005907", + "0x8380b02802d9700505602c8380b03e02c7a80500a41c058050180141480b", + "0x1580b0b80148200b20e02c8200b2080141600b20e02c7f80b65e0147f80b", + "0x8380b00a0300282c0564100800b05802c8380b05802d9800505602c8380b", + "0x19880b00a0ac0282f01641c0581f0160880282e01641c0582901641002805", + "0x590701608c0582200a0b8059070160140590400a0148380b00a03002805", + "0x1700500a41c0581e0160b00280520e02c0280c00a0159880b00a0ac0282f", + "0x7f00b20e02c7f00b0400147f00b20e02c188200180bc0283101641c05805", + "0x8380b02002c1100500a41c058050180148480b6640148380c1fc02c0f005", + "0x8280500a41c058050180146900b6660d81a00c20e0300800b0220140800b", + "0x6a00b20e02c6a00b0400146a00b20e02c6980b02e0146980b20e02c1b00b", + "0x582200a0148380b00a0300283c016cd01d03901841c060d400a030eb005", + "0x8380b00a0300283f016cd46f8de01841c060340160440283401641c05834", + "0x58420160800284201641c0584001605c0284001641c058df01641402805", + "0x2907016014060051d602d9b0e81ce0308380c0840e4061d900a10805907", + "0x584c0164880284c01641c058e8074030ee8051d802c8380b1bc02c7a805", + "0x585c00a39c0590701639c0590400a134059070160f405b2f00a0f405907", + "0x5805018014268ec1ce0400584d01641c0584d016cc0028ec01641c058ec", + "0x58de0160880282e01641c058eb0164100280520e02c1d00b19e01402907", + "0x29070160e8058cf00a0148380b00a0300280566202c0282b00a0bc05907", + "0x2b310160141580505e02c8380b07e02c1100505c02c8380b07202c82005", + "0x1780b20e02c1a00b0440141700b20e02c1e00b2080140290701601406005", + "0x1100505c02c8380b00a02c8200500a41c0580501801402b3101601415805", + "0x8480b058014029070160140600500acc4058050560141780b20e02c6900b", + "0x7a80b66e0147a80b20e02c0283100a3c405907016040058f500a0148380b", + "0x1980051e202c8380b1e202c2e00500a02c8380b00a02c820050a202c8380b", + "0x58050164100280520e02c0280c00a1447880502002c2880b20e02c2880b", + "0x2980b66e0142980b20e02c0283100a0bc059070164140582200a0b805907", + "0x800b1f202c8380b1f202d980050ac02c8380b05e02c7a8051f202c8380b", + "0x5b38022040061070180300581100a0300590701602c0581000a3e42b02e", + "0x590701605c0581700a05c059070160440590500a0148380b00a03002905", + "0xf80b6720780d80c20e030100050187580282001641c0582001608002820", + "0x1100c20e0300800b0220140800b20e02c0800b0440140290701601406005", + "0xc00b02e0140c00b20e02c1180b20a014029070160140600520602d9d023", + "0x1481401841c06104036030eb00520802c8380b20802c1000520802c8380b", + "0x60220160440282201641c058220160880280520e02c0280c00a0ac05b3b", + "0x282f01641c0582c0164140280520e02c0280c00a0b805b3c0583fc06107", + "0x8380c062050061d900a0c4059070160c40582000a0c4059070160bc05817", + "0xee80506c02c8380b1fe02c7a80500a41c058050180141a00b67a4247f00c", + "0x8380b1a602d9f8051a602c8380b1a40780633e00a348059070164241480c", + "0x6a00b6800141b00b20e02c1b00b0b80147f00b20e02c7f00b2080146a00b", + "0x29070160a4058cf00a0148380b00a030028d406c3f80800b1a802c8380b", + "0x59070163fc0582200a0e4059070160d00590400a0148380b03c02c67805", + "0x6780500a41c0582901633c0280520e02c0280c00a015a080b00a0ac0283a", + "0x283a01641c0582e0160880283901641c058140164100280520e02c0f00b", + "0x1580b20801402907016078058cf00a0148380b00a0300280568202c0282b", + "0x580501801402b410160141580507402c8380b04402c1100507202c8380b", + "0x59030160880283901641c0581b0164100280520e02c0f00b19e01402907", + "0x590701607c0590400a0148380b00a0300280568202c0282b00a0e805907", + "0x280520e02c0280c00a015a080b00a0ac0283a01641c0581001608802839", + "0x1e00b20e02c0283100a0e8059070164140582200a0e40590701601405904", + "0x8380b1bc02da00051be02c8380b07402c7a8051bc02c8380b07802da1005", + "0x61070180300581100a0300590701602c0581000a3786f83902002c6f00b", + "0x581700a05c059070160440590500a0148380b00a03002905016d0c08810", + "0xd80c20e0301000501808c0282001641c058200160800282001641c05817", + "0x800b0220140800b20e02c0800b044014029070160140600503e02da201e", + "0xc00b20e02c1180b20a014029070160140600520602da28230440308380c", + "0x61040360314f00520802c8380b20802c1000520802c8380b03002c0b805", + "0x28ff01641c058220163d40280520e02c0280c00a0ac05b4605205006107", + "0x8380b1fe0500634700a3fc059070163fc0585c00a0500590701605005904", + "0x280520e02c0280c00a3f805b4906202c8380c05e02da400505e0b816010", + "0x1a60051a402c8380b06c0d084829022d2c02836068424081070160c405b4a", + "0x59070160b00590400a3500590701634c0592000a34c059070163480f00c", + "0x6a02e058040058d401641c058d4016d340282e01641c0582e0161700282c", + "0x1a700500a41c0581e01657c0280520e02c7f00b0980140290701601406005", + "0x283a01641c0582c0164100283901641c0582e0160400280520e02c1480b", + "0x595f00a0148380b00a0300280569e02c0282b00a0f0059070160e405822", + "0x158051be02c8380b04402c110051bc02c8380b05602c8200500a41c0581e", + "0x581b0164100280520e02c0f00b2be014029070160140600500ad4005805", + "0x5a9700a0e805907016378058f900a37c0590701640c0582200a37805907", + "0x581f0164100280520e02c0280c00a015a780b00a0ac0283c01641c058df", + "0x8380b00a0300280569e02c0282b00a0f0059070160400582200a0e805907", + "0x8380b00a0c40283c01641c059050160880283a01641c0580501641002805", + "0x2000b69a0142100b20e02c1e00b1ea0142000b20e02c1f80b6a20141f80b", + "0x2907016015a980502202c8380b00ad48028400840e80800b08002c8380b", + "0xb80c20e0308280b0220148280b20e02c0600b020014029070160141e805", + "0x880c23c0140800b20e02c1000b20a014029070160140600503602daa020", + "0xf80c20e0300f00501808c0281e01641c0581001605c0281001641c05810", + "0xb80b0220140b80b20e02c0b80b044014029070160140600504602daa822", + "0xa00b20e02c0c00b20a014029070160140600520802dab0182060308380c", + "0x590701640c058f500a0ac05907016015ab80505202c8380b02802c0b805", + "0x58ff0161700280b01641c0580b0160500281f01641c0581f016410028ff", + "0x82b5900a0a4059070160a40582000a0ac059070160ac05b5800a3fc05907", + "0x7f00b6b60c4059070180bc05b5a00a0bc1702c02041c058290563fc0581f", + "0x59070180d005b5d00a0d08480c20e02c1880b6b80140290701601406005", + "0x1b00b2320146980b20e02c1700b20601402907016014060051a402daf036", + "0x1b000507402c8380b07202c7480500a41c058d4016d7c028391a80308380b", + "0x8380b1bc4240636200a378059070160f005b6100a0f0059070160e81100c", + "0x6980b0280141600b20e02c1600b2080141f80b20e02c6f80b23a0146f80b", + "0x8380b00a0300283f1a60b00800b07e02c8380b07e02db18051a602c8380b", + "0x8380b05802c8200508002c8380b05c02c8180500a41c0582201657c02805", + "0x8480b0b80147400b20e02c6900b4ba0147380b20e02c2000b0280142100b", + "0x8380b04402caf80500a41c0580501801402b64016014158051d602c8380b", + "0x582e0160500282c01641c0582c016410028ec01641c058fe016d9402805", + "0x2907016014060051d80b8160100163b0059070163b005b6300a0b805907", + "0x1e80b20e02c0283100a1300590701602c0590300a0148380b04402caf805", + "0x8380b09802c0a00508402c8380b03e02c8200509a02c8380b20802c7a805", + "0x7400b6cc0147580b20e02c2680b0b80147400b20e02c1e80b4ba0147380b", + "0x285101641c058f5016474028f501641c058f11d6031b10051e202c8380b", + "0x590701614405b6300a39c0590701639c0581400a1080590701610805904", + "0x820050a602c8380b01602c8180500a41c05805018014288e708404005851", + "0x2c00b20e02c0b80b0440142b00b20e02c2980b0280147c80b20e02c1180b", + "0x590300a0148380b02202db400500a41c0580501801402b6701601415805", + "0x285601641c058fa016050028f901641c05805016410028fa01641c0580b", + "0x2e00b20e02c2d00b6cc0142d00b20e02c0283100a1600590701606c05822", + "0x585f0164740285f01641c0585c0bc031b10050bc02c8380b0b002c7a805", + "0x5b6300a158059070161580581400a3e4059070163e40590400a18405907", + "0x600b0220140600b20e02c0580b020014308561f20400586101641c05861", + "0xb80b20e02c0880b20a014029070160140600520a02db48110200308380c", + "0x602000a0301180504002c8380b04002c1000504002c8380b02e02c0b805", + "0x281001641c058100160880280520e02c0280c00a07c05b6a03c06c06107", + "0x58230164140280520e02c0280c00a40c05b6b0460880610701804005811", + "0x602300a410059070164100582000a410059070160600581700a06005907", + "0x8380b04402c7a80500a41c058050180141580b6d80a40a00c20e0308201b", + "0xa00c6da0147f80b20e02c7f80b0b80140a00b20e02c0a00b2080147f80b", + "0x58050180147f00b6de0c4059070180bc05b6e00a0bc1702c02041c058ff", + "0x59070160d81a109052045b800506c0d08481020e02c1880b23001402907", + "0x1600b2080146a00b20e02c6980b6e40146980b20e02c6901e018dc4028d2", + "0x800b1a802c8380b1a802db980505c02c8380b05c02c2e00505802c8380b", + "0x8380b03c02caf80500a41c058fe0161300280520e02c0280c00a3501702c", + "0x8380b05802c8200507202c8380b05c02c0800500a41c0582901657c02805", + "0x29070160140600500add0058050560141e00b20e02c1c80b0440141d00b", + "0x59070160880582200a378059070160ac0590400a0148380b03c02caf805", + "0x8200500a41c0581e01657c0280520e02c0280c00a015ba80b00a0ac028df", + "0x1d00b20e02c6f00b1f20146f80b20e02c8180b0440146f00b20e02c0d80b", + "0x8200500a41c0580501801402b740160141580507802c8380b1be02d4b805", + "0x600500add0058050560141e00b20e02c0800b0440141d00b20e02c0f80b", + "0x1880507802c8380b20a02c1100507402c8380b00a02c8200500a41c05805", + "0x284201641c0583c0163d40284001641c0583f01648c0283f01641c05805", + "0x880501802c8380b01602c080050801081d0100161000590701610005b73", + "0x8380b02202c8280500a41c058050180148280b6ec0440800c20e0300600b", + "0x280c3b20141000b20e02c1000b0400141000b20e02c0b80b02e0140b80b", + "0x59070160400582200a0148380b00a0300281f016ddc0f01b01841c06020", + "0x590500a0148380b00a03002903016de01182201841c0601001604402810", + "0x290401641c059040160800290401641c0581801605c0281801641c05823", + "0x58050180141480b6f20148380c02802c0f005028410061070164100581b", + "0x60220160440282201641c058220160880280520e02c8200b03e01402907", + "0x282e01641c058ff0164140280520e02c0280c00a0b005b7a1fe0ac06107", + "0x8380c05e06c0629e00a0bc059070160bc0582000a0bc059070160b805817", + "0x1be00506802c8380b05602c7a80500a41c058050180148480b6f63f81880c", + "0x590701634805b7e00a348059070160d80f00c6fa0141b00b20e02c7f00b", + "0x58d3016dfc0283401641c058340161700283101641c05831016410028d3", + "0x280520e02c0f00b14c01402907016014060051a60d01881001634c05907", + "0x280570002c0282b00a0e4059070160ac0582200a3500590701642405904", + "0x110051a802c8380b03602c8200500a41c0581e0162980280520e02c0280c", + "0x1480b058014029070160140600500ae00058050560141c80b20e02c1600b", + "0x582000a0f0059070160e88200c05e0141d00b20e02c0282e00a0148380b", + "0x280520e02c0280c00a37805b8100a41c0603c0160780283c01641c0583c", + "0x2000b20e02c1100b1ea0141f80b20e02c6f80b7040146f80b20e02c02831", + "0x581b016410028e701641c05842016df80284201641c0583f03c031be805", + "0xd81001639c0590701639c05b7f00a100059070161000585c00a06c05907", + "0x2907016078058a600a0148380b1bc02c1600500a41c0580501801473840", + "0x2b83016014158051d602c8380b04402c110051d002c8380b03602c82005", + "0x28d401641c0581b0164100280520e02c0f00b14c0140290701601406005", + "0x59070160e405a9700a3a005907016350058f900a0e40590701640c05822", + "0x28e801641c0581f0164100280520e02c0280c00a015c180b00a0ac028eb", + "0x590400a0148380b00a0300280570602c0282b00a3ac0590701604005822", + "0x1c20051d802c8380b00a0c4028eb01641c05905016088028e801641c05805", + "0x2600b20e02c2600b6fe0141e80b20e02c7580b1ea0142600b20e02c7600b", + "0x881001841c0600c0160440280c01641c0580b0160400284c07a3a00800b", + "0x581701605c0281701641c058110164140280520e02c0280c00a41405b85", + "0xf005036080061070160800581b00a080059070160800582000a08005907", + "0x280520e02c1000b03e014029070160140600503c02dc300520e0300d80b", + "0x280c00a08c05b8704407c061070180400581100a0400590701604005822", + "0x582000a0600590701640c0581700a40c059070160880590500a0148380b", + "0x58050180141480b7100508200c20e0300c005018a780281801641c05818", + "0x7f80b7140147f80b20e02c0a00b7120141580b20e02c0f80b1ea01402907", + "0x1c580505602c8380b05602c2e00520802c8380b20802c8200505802c8380b", + "0x58290164100280520e02c0280c00a0b01590402002c1600b20e02c1600b", + "0x8380b00a0300280571802c0282b00a0bc0590701607c0582200a0b805907", + "0x1c600b00a0ac0282f01641c058230160880282e01641c0580501641002805", + "0x283101641c0580505c014029070160780582c00a0148380b00a03002805", + "0x8380c1fc02c0f0051fc02c8380b1fc02c100051fc02c8380b0620800602f", + "0x800b0220140800b20e02c0800b044014029070160140600521202dc6805", + "0x6980b20e02c1b00b20a01402907016014060051a402dc70360680308380c", + "0x60d400a030eb0051a802c8380b1a802c100051a802c8380b1a602c0b805", + "0x28de01641c058340163d40280520e02c0280c00a0f005b8f0740e406107", + "0x59070160e40590400a0fc0590701637c05b8a00a37c059070160e805b90", + "0x1f8de0720400583f01641c0583f016e2c028de01641c058de01617002839", + "0x1780b20e02c1a00b0440141700b20e02c1e00b2080140290701601406005", + "0x1100505c02c8380b00a02c8200500a41c0580501801402b8c01601415805", + "0x8480b058014029070160140600500ae30058050560141780b20e02c6900b", + "0x2100b7220142100b20e02c0283100a10005907016040058f500a0148380b", + "0x1c580508002c8380b08002c2e00500a02c8380b00a02c820051ce02c8380b", + "0x58050164100280520e02c0280c00a39c2000502002c7380b20e02c7380b", + "0x7400b7220147400b20e02c0283100a0bc059070164140582200a0b805907", + "0x800b1d602c8380b1d602dc58051d802c8380b05e02c7a8051d602c8380b", + "0x2b9200a030059070160140580c1d60140580b20e02c028de00a3ac7602e", + "0x581101641c05811016e500281101641c0580c020031c980502002c8380b", + "0xd820018e540b90501841c0600b00a0300580500a41c0580507a0140880b", + "0x29070180780581e00a0780880c20e02c0880b0360140290701601406005", + "0x8380b02e02c8180500a41c0581101607c0280520e02c0280c00a07c05b96", + "0x5b9800a40c0590701608c0600c72e0141180b20e02c0800b4b20141100b", + "0x282201641c058220160500290501641c059050164100281801641c05903", + "0xf80b0580140290701601406005030088828100160600590701606005b99", + "0x5b9a052050061070184100581100a410059070160300581000a0148380b", + "0x59070163fc0581700a3fc059070160a40590500a0148380b00a0300282b", + "0x1880b7360bc1700c20e03016105018a780282c01641c0582c0160800282c", + "0x59070160bc0800c7380147f00b20e02c0b80b2060140290701601406005", + "0x58140163d40283601641c058340220301780506802c8380b00a0b802909", + "0x585c00a3f8059070163f80581400a0b8059070160b80590400a34805907", + "0x283601641c058360160800290901641c0590901694c028d201641c058d2", + "0x58050180141c8d41a6040058391a834c081070160d8848d21fc0b882a54", + "0x8380b02e02c8180500a41c05810016e740280520e02c0880b03e01402907", + "0xa00b0440146f00b20e02c1d00b0280141e00b20e02c1880b2080141d00b", + "0x8380b02202c0f80500a41c0580501801402b9e016014158051be02c8380b", + "0x8380b20a02c8200507e02c8380b02e02c8180500a41c05810016e7402805", + "0x58050620146f80b20e02c1580b0440146f00b20e02c1f80b0280141e00b", + "0x639700a39c0590701637c058f500a1080590701610005a6200a10005907", + "0x1e00b20e02c1e00b2080147580b20e02c7400b7300147400b20e02c210e7", + "0x28eb1bc0f00800b1d602c8380b1d602dcc8051bc02c8380b1bc02c0a005", + "0x58fa00a0148380b02002dce80500a41c0581101607c0280520e02c0280c", + "0x590400a130059070163b005b9f00a3b0059070160142d00500a41c0580c", + "0x584c01641c0584c016e640281b01641c0581b0160500282001641c05820", + "0x8380b00a0f40280520e02c02b5300a04405907016015a900509806c10010", + "0x281b016e801001701841c061050160440290501641c0580c01604002805", + "0x800b20e02c080110184780281001641c058200164140280520e02c0280c", + "0x2823016e841101f01841c0601e00a030ec80503c02c8380b02002c0b805", + "0xc10301841c060170160440281701641c058170160880280520e02c0280c", + "0x581401605c0281401641c058180164140280520e02c0280c00a41005ba2", + "0xf80b2080147f80b20e02c8180b1ea0141580b20e02c02b5700a0a405907", + "0x1ac0051fe02c8380b1fe02c2e00501602c8380b01602c0a00503e02c8380b", + "0x1482b1fe02c0f9056b20141480b20e02c1480b0400141580b20e02c1580b", + "0x8380b00a030028fe016e8c1880b20e0301780b6b40141782e0580408380b", + "0x28d2016e901b00b20e0301a00b6ba0141a10901841c05831016d7002805", + "0x6a00b20e02c1b022018e94028d301641c0582e01640c0280520e02c0280c", + "0x583a016e9c0283a01641c05839212031d300507202c8380b1a802d3e805", + "0x5ba800a34c0590701634c0581400a0b0059070160b00590400a0f005907", + "0x8380b1a402c2600500a41c058050180141e0d30580400583c01641c0583c", + "0x8380b21202c080051bc02c8380b05c02c8180500a41c0582201629802805", + "0x6f80b0440142000b20e02c6f00b0280141f80b20e02c1600b2080146f80b", + "0x8380b04402c5300500a41c0580501801402ba90160141580508402c8380b", + "0x582e0160500282c01641c0582c016410028e701641c058fe016ea802805", + "0x2907016014060051ce0b81601001639c0590701639c05ba800a0b805907", + "0x590701607c0590400a3a00590701602c0590300a0148380b04402c53005", + "0x8380b00a0c40284201641c059040160880284001641c058e80160500283f", + "0x7600c74c0142600b20e02c7580b50a0147600b20e02c2100b1ea0147580b", + "0x283f01641c0583f0164100284d01641c0583d016e9c0283d01641c0584c", + "0x600509a1001f8100161340590701613405ba800a1000590701610005814", + "0xa0051ea02c8380b04602c820051e202c8380b01602c8180500a41c05805", + "0x600500aeac058050560142980b20e02c0b80b0440142880b20e02c7880b", + "0x590400a3e40590701602c0590300a0148380b02202db400500a41c05805", + "0x285301641c0581b0160880285101641c058f9016050028f501641c05805", + "0x7d00b20e02c2980b1ea0142c00b20e02c2b00b50a0142b00b20e02c02831", + "0x58f50164100285c01641c0585a016e9c0285a01641c058581f4031d3005", + "0x7a8100161700590701617005ba800a144059070161440581400a3d405907", + "0xd820018eb00b90501841c0600b00a0300580500a41c0580507a0142e051", + "0x29070180780581e00a0780880c20e02c0880b0360140290701601406005", + "0x8380b02e02c8180500a41c0581101607c0280520e02c0280c00a07c05bad", + "0x5bb000a40c0590701608c0600c75e0141180b20e02c0800b75c0141100b", + "0x282201641c058220160500290501641c059050164100281801641c05903", + "0xf80b0580140290701601406005030088828100160600590701606005bb1", + "0x5bb2052050061070184100581100a410059070160300581000a0148380b", + "0x59070163fc0581700a3fc059070160a40590500a0148380b00a0300282b", + "0x1880b7660bc1700c20e0301610501808c0282c01641c0582c0160800282c", + "0x59070160bc0800c7680147f00b20e02c0b80b2060140290701601406005", + "0x58140163d40283601641c058340220301780506802c8380b00a0b802909", + "0x585c00a3f8059070163f80581400a0b8059070160b80590400a34805907", + "0x283601641c058360160800290901641c05909016b64028d201641c058d2", + "0x58050180141c8d41a6040058391a834c081070160d8848d21fc0b882ada", + "0x8380b02e02c8180500a41c05810016ed40280520e02c0880b03e01402907", + "0xa00b0440146f00b20e02c1d00b0280141e00b20e02c1880b2080141d00b", + "0x8380b02202c0f80500a41c0580501801402bb6016014158051be02c8380b", + "0x8380b20a02c8200507e02c8380b02e02c8180500a41c05810016ed402805", + "0x58050620146f80b20e02c1580b0440146f00b20e02c1f80b0280141e00b", + "0x63af00a39c0590701637c058f500a108059070161000592800a10005907", + "0x1e00b20e02c1e00b2080147580b20e02c7400b7600147400b20e02c210e7", + "0x28eb1bc0f00800b1d602c8380b1d602dd88051bc02c8380b1bc02c0a005", + "0x58fa00a0148380b02002dda80500a41c0581101607c0280520e02c0280c", + "0x590400a130059070163b005bb700a3b0059070160142d00500a41c0580c", + "0x584c01641c0584c016ec40281b01641c0581b0160500282001641c05820", + "0x8380b00a0f40280520e02c02b5300a04405907016015a900509806c10010", + "0x281b016ee01001701841c061050160440290501641c0580c01604002805", + "0x800b20e02c080110184780281001641c058200164140280520e02c0280c", + "0x2823016ee41101f01841c0601e00a0301180503c02c8380b02002c0b805", + "0xc10301841c060170160440281701641c058170160880280520e02c0280c", + "0x581401605c0281401641c058180164140280520e02c0280c00a41005bba", + "0xf80b2080147f80b20e02c8180b1ea0141580b20e02c02ad800a0a405907", + "0x16c8051fe02c8380b1fe02c2e00501602c8380b01602c0a00503e02c8380b", + "0x1482b1fe02c0f9055b40141480b20e02c1480b0400141580b20e02c1580b", + "0x8380b00a030028fe016eec1880b20e0301780b5b60141782e0580408380b", + "0x28d2016ef01b00b20e0301a00b5bc0141a10901841c05831016b7402805", + "0x6a00b20e02c1b022018ef4028d301641c0582e01640c0280520e02c0280c", + "0x583a016f000283a01641c05839212031df80507202c8380b1a802ddf005", + "0x5bc100a34c0590701634c0581400a0b0059070160b00590400a0f005907", + "0x8380b1a402c2600500a41c058050180141e0d30580400583c01641c0583c", + "0x8380b21202c080051bc02c8380b05c02c8180500a41c0582201657c02805", + "0x6f80b0440142000b20e02c6f00b0280141f80b20e02c1600b2080146f80b", + "0x8380b04402caf80500a41c0580501801402bc20160141580508402c8380b", + "0x582e0160500282c01641c0582c016410028e701641c058fe016f0c02805", + "0x2907016014060051ce0b81601001639c0590701639c05bc100a0b805907", + "0x590701607c0590400a3a00590701602c0590300a0148380b04402caf805", + "0x8380b00a0c40284201641c059040160880284001641c058e80160500283f", + "0x7600c77e0142600b20e02c7580b7880147600b20e02c2100b1ea0147580b", + "0x283f01641c0583f0164100284d01641c0583d016f000283d01641c0584c", + "0x600509a1001f8100161340590701613405bc100a1000590701610005814", + "0xa0051ea02c8380b04602c820051e202c8380b01602c8180500a41c05805", + "0x600500af14058050560142980b20e02c0b80b0440142880b20e02c7880b", + "0x590400a3e40590701602c0590300a0148380b02202db400500a41c05805", + "0x285301641c0581b0160880285101641c058f9016050028f501641c05805", + "0x7d00b20e02c2980b1ea0142c00b20e02c2b00b7880142b00b20e02c02831", + "0x58f50164100285c01641c0585a016f000285a01641c058581f4031df805", + "0x7a8100161700590701617005bc100a144059070161440581400a3d405907", + "0x8280b78c0440800c20e0300600b0220140600b20e02c0580b0200142e051", + "0x1000b20e02c0b80b02e0140b80b20e02c0880b20a0140290701601406005", + "0x281f016f1c0f01b01841c0602000a0301180504002c8380b04002c10005", + "0x1182201841c060100160440281001641c058100160880280520e02c0280c", + "0x581801605c0281801641c058230164140280520e02c0280c00a40c05bc8", + "0x1e48290280308380c20806c061d900a410059070164100582000a41005907", + "0x8380c04402c0880504402c8380b04402c1100500a41c058050180141580b", + "0xb80505e02c8380b05802c8280500a41c058050180141700b7940b07f80c", + "0x61070180c40a00c3ac0141880b20e02c1880b0400141880b20e02c1780b", + "0x83cc00a0d8059070163fc058f500a0148380b00a03002834016f2c848fe", + "0x59070163f80590400a34c0590701634805bcd00a348059070164241481e", + "0x698361fc040058d301641c058d3016f380283601641c05836016170028fe", + "0x8200500a41c058290162980280520e02c0f00b2be0140290701601406005", + "0x600500af3c058050560141c80b20e02c7f80b0440146a00b20e02c1a00b", + "0xa00b208014029070160a4058a600a0148380b03c02caf80500a41c05805", + "0x580501801402bcf0160141580507202c8380b05c02c110051a802c8380b", + "0x5822016088028d401641c0582b0164100280520e02c0f00b2be01402907", + "0x29070160780595f00a0148380b00a0300280579e02c0282b00a0e405907", + "0x2bcf0160141580507202c8380b20602c110051a802c8380b03602c82005", + "0x1c80b20e02c0800b0440146a00b20e02c0f80b2080140290701601406005", + "0x110051a802c8380b00a02c8200500a41c0580501801402bcf01601415805", + "0x283c01641c0583a016f400283a01641c058050620141c80b20e02c8280b", + "0x1e8050783786a0100160f0059070160f005bce00a378059070160e4058f5", + "0x58050180140d820018f440b90501841c0600b00a0300580500a41c05805", + "0x281f016f48029070180780581e00a0780880c20e02c0880b03601402907", + "0x1e980504402c8380b02e02c8180500a41c0581101607c0280520e02c0280c", + "0x590701640c05bd500a40c0590701608c0600c7a80141180b20e02c0800b", + "0x5818016f580282201641c058220160500290501641c0590501641002818", + "0x280520e02c0f80b05801402907016014060050300888281001606005907", + "0x280c00a0ac05bd7052050061070184100581100a4100590701603005810", + "0x582000a0b0059070163fc0581700a3fc059070160a40590500a0148380b", + "0x58050180141880b7b00bc1700c20e030161050187640282c01641c0582c", + "0x282e00a424059070160bc0800c7b20147f00b20e02c0b80b20601402907", + "0x28d201641c058140163d40283601641c058340220301780506802c8380b", + "0x59070163480585c00a3f8059070163f80581400a0b8059070160b805904", + "0x7f02e20ad640283601641c058360160800290901641c05909016d60028d2", + "0xf80500a41c058050180141c8d41a6040058391a834c081070160d8848d2", + "0x8200507402c8380b02e02c8180500a41c05810016d7c0280520e02c0880b", + "0x6f80b20e02c0a00b0440146f00b20e02c1d00b0280141e00b20e02c1880b", + "0x5b5f00a0148380b02202c0f80500a41c0580501801402bda01601415805", + "0xa00507802c8380b20a02c8200507e02c8380b02e02c8180500a41c05810", + "0x284001641c058050620146f80b20e02c1580b0440146f00b20e02c1f80b", + "0x8380b08439c063d400a39c0590701637c058f500a1080590701610005bdb", + "0x6f00b0280141e00b20e02c1e00b2080147580b20e02c7400b7aa0147400b", + "0x8380b00a030028eb1bc0f00800b1d602c8380b1d602deb0051bc02c8380b", + "0x2907016030058fa00a0148380b02002daf80500a41c0581101607c02805", + "0x59070160800590400a130059070163b005bdc00a3b0059070160142d005", + "0x2601b0400400584c01641c0584c016f580281b01641c0581b01605002820", + "0x600520a02dee8110200308380c01802c0880501802c8380b01602c08005", + "0x1000504002c8380b02e02c0b80502e02c8380b02202c8280500a41c05805", + "0x280c00a07c05bde03c06c061070180800280c0460141000b20e02c1000b", + "0x5bdf046088061070180400581100a040059070160400582200a0148380b", + "0x59070160600581700a0600590701608c0590500a0148380b00a03002903", + "0x1580b7c00a40a00c20e0308201b01808c0290401641c0590401608002904", + "0x7f80c20e0301100b0220141100b20e02c1100b0440140290701601406005", + "0x1780b02e0141780b20e02c1600b20a014029070160140600505c02df082c", + "0x848fe01841c060310280301180506202c8380b06202c1000506202c8380b", + "0x1481e020f8c0283601641c058ff0163d40280520e02c0280c00a0d005be2", + "0x28fe01641c058fe016410028d301641c058d2016f90028d201641c05909", + "0x60051a60d87f01001634c0590701634c05be500a0d8059070160d80585c", + "0x1a00b208014029070160a40595f00a0148380b03c02caf80500a41c05805", + "0x580501801402be60160141580507202c8380b1fe02c110051a802c8380b", + "0x8380b02802c8200500a41c0582901657c0280520e02c0f00b2be01402907", + "0x29070160140600500af98058050560141c80b20e02c1700b0440146a00b", + "0x59070160880582200a350059070160ac0590400a0148380b03c02caf805", + "0x8200500a41c0581e01657c0280520e02c0280c00a015f300b00a0ac02839", + "0x600500af98058050560141c80b20e02c8180b0440146a00b20e02c0d80b", + "0x1580507202c8380b02002c110051a802c8380b03e02c8200500a41c05805", + "0x8280b0440146a00b20e02c0280b208014029070160140600500af9805805", + "0x58f500a0f0059070160e805be700a0e8059070160141880507202c8380b", + "0x5e0050221941e0de1a80400583c01641c0583c016f94028de01641c05839", + "0x628c61780140881f18c2f00281100a0400600b00a314630bc00a0440f8c6", + "0x28114d60400600b00a314630bc00a0440f8c61780140898702003005805", + "0x630bc00a0440f8c617801408b890200300580518a3185e00502207c630bc", + "0x8be90200300580518a3185e00502207c630bc00a045f401001802c028c5", + "0x5e00502207c630bc00a045f501001802c028c518c2f00281103e3185e005", + "0x1f601001802c028c518c2f00281103e3185e005022fac0800c016014628c6", + "0x281103e3185e005022fb40800c016014628c61780140881f18c2f002811", + "0x800c016014628c61780140881f18c2f0028117dc0400600b00a314630bc", + "0x881f18c2f0028117e00400600b00a314630bc00a0440f8c617801408bef", + "0x600b00a314630bc00a0440f8c617801408bf10200300580518a3185e005", + "0xf8c617801408bf30200300580518a3185e00502207c630bc00a045f9010", + "0x580518a3185e00502207c630bc00a045fa01001802c028c518c2f002811", + "0x630bc00a045fb01001802c028c518c2f00281103e3185e005022fd40800c", + "0x28c518c2f00281103e3185e005022fdc0800c016014628c61780140881f", + "0x5e005022fe40800c016014628c61780140881f18c2f0028117f00400600b", + "0x628c61780140881f18c2f0028117f40400600b00a314630bc00a0440f8c6", + "0x28117f80400600b00a314630bc00a0440f8c617801408bfb02003005805", + "0x630bc00a0440f8c617801408bfd0200300580518a3185e00502207c630bc", + "0xf8bc00a0420082301601600023016015ff823016015ff01001802c028c5", + "0x20181001802c028da1780140801b1b22f002811804030058051aa2f002810", + "0x20280c0160146e0bc00a0400f8bc00a0420200b00a36c0f80502007c0280c", + "0x28e003e0140801f00a0320301001802c028da1780140801b0b82f002811", + "0x20480b00a38c0f80502007c0280c81002c028e103e0140801f00a0320380b", + "0x801b1cc2f0028118140440800c016014728bc00a0400c08b03e2f002905", + "0x2811818030058051d22f00281003e2f0028108160400600b00a3685e005", + "0x20700b00a3b40f80502007c0280c81a0400600b00a3685e00502006c750bc", + "0x20800b00a3bc0f80502007c0280c81e030058051dc2f00281003e2f002810", + "0x280c82402c028f203e0140801f00a0320880b00a3c00f80502007c0280c", + "0xf8bc00a0420a00b00a3dc0f80502007c0280c82602c028f603e0140801f", + "0x801f00a0320b00b00a3e80f80502007c0280c82a030058051f02f002810", + "0x20c80504602c0c00b83002c028f503e0140801f00a0320b80b00a3e40f805", + "0x281003e2f0028108340440800c016014738bc00a0400c03f03e2f002905", + "0x20e011020030058051a42f0028100300b00f8bc00a4160d80c0160146f0bc", + "0x20f00b00a3fc0f80502007c0280c83a030058051fc2f00281003e2f002810", + "0xf80502007c0280c83e0440800c016014818bc00a0400c01703e2f002905", + "0x84002c02905" + ], + "sierra_program_debug_info": { + "type_names": [ + [0, "RangeCheck"], + [1, "core::panics::Panic"], + [2, "u16"], + [3, "Tuple"], + [4, "Unit"], + [5, "core::option::Option::<[core::integer::u16; 3]>"], + [6, "Array"], + [7, "core::option::Option::>"], + [8, "Array"], + [9, "Snapshot>"], + [10, "core::array::Span::"], + [ + 11, + "Tuple, core::option::Option::>>" + ], + [12, "Tuple>"], + [ + 13, + "core::panics::PanicResult::<(core::array::Span::, core::option::Option::>)>" + ], + [14, "felt252"], + [15, "Uninitialized"], + [16, "u32"], + [17, "u64"], + [18, "Tuple"], + [19, "core::option::Option::<(core::integer::u16, core::integer::u32, core::integer::u64)>"], + [20, "Array"], + [21, "Tuple>"], + [ + 22, + "core::option::Option::<(core::integer::u16, core::array::Array::)>" + ], + [ + 23, + "Tuple, core::option::Option::<(core::integer::u16, core::array::Array::)>>" + ], + [ + 24, + "core::panics::PanicResult::<(core::array::Span::, core::option::Option::<(core::integer::u16, core::array::Array::)>)>" + ], + [25, "Box"], + [26, "core::option::Option::>"], + [ + 27, + "Tuple, core::option::Option::>>" + ], + [ + 28, + "core::panics::PanicResult::<(core::array::Span::, core::option::Option::>)>" + ], + [29, "Box>"], + [30, "Box"], + [31, "Tuple>"], + [ + 32, + "core::option::Option::<(core::integer::u32, core::array::Array::)>" + ], + [ + 33, + "Tuple, core::option::Option::<(core::integer::u32, core::array::Array::)>>" + ], + [ + 34, + "core::panics::PanicResult::<(core::array::Span::, core::option::Option::<(core::integer::u32, core::array::Array::)>)>" + ], + [35, "Box"], + [36, "Array"], + [37, "core::option::Option::>"], + [ + 38, + "Tuple, core::option::Option::>>" + ], + [ + 39, + "core::panics::PanicResult::<(core::array::Span::, core::option::Option::>)>" + ], + [40, "Const"], + [ + 41, + "Const" + ], + [42, "Const"], + [43, "u128"], + [44, "u8"], + [45, "core::result::Result::"], + [46, "enums::Destruction"], + [47, "core::option::Option::>"], + [48, "core::option::Option::"], + [49, "enums::Truck"], + [50, "core::option::Option::"], + [51, "Tuple"], + [52, "enums::Horse"], + [53, "core::option::Option::"], + [54, "Snapshot>"], + [55, "core::array::Span::"], + [56, "enums::Dog"], + [57, "core::option::Option::"], + [58, "Tuple, core::option::Option::>"], + [ + 59, + "core::panics::PanicResult::<(core::array::Span::, core::option::Option::)>" + ], + [60, "Tuple"], + [61, "enums::Cat"], + [62, "core::option::Option::"], + [63, "enums::Point"], + [64, "enums::Point2"], + [65, "core::option::Option::"], + [66, "core::result::Result::"], + [67, "core::option::Option::>"], + [68, "core::option::Option::"], + [69, "core::result::Result::>"], + [ + 70, + "core::option::Option::>>" + ], + [71, "core::result::Result::"], + [ + 72, + "core::result::Result::, core::integer::u32>" + ], + [ + 73, + "core::option::Option::, core::integer::u32>>" + ], + [74, "Snapshot>>"], + [ + 75, + "core::result::Result::<(core::integer::u32, core::array::Array::), (core::integer::u16, core::array::Array::)>" + ], + [ + 76, + "Snapshot), (core::integer::u16, core::array::Array::)>>" + ], + [ + 77, + "core::option::Option::), (core::integer::u16, core::array::Array::)>>" + ], + [ + 78, + "Tuple, core::option::Option::), (core::integer::u16, core::array::Array::)>>>" + ], + [ + 79, + "core::panics::PanicResult::<(core::array::Span::, core::option::Option::), (core::integer::u16, core::array::Array::)>>)>" + ], + [80, "Tuple"], + [81, "Tuple"], + [82, "core::result::Result::<[core::integer::u32; 3], [core::integer::u16; 2]>"], + [ + 83, + "core::option::Option::>" + ], + [84, "Snapshot>"], + [85, "core::array::Span::"], + [ + 86, + "core::result::Result::, core::array::Array::>" + ], + [ + 87, + "Snapshot, core::array::Array::>>" + ], + [ + 88, + "core::option::Option::, core::array::Array::>>" + ], + [ + 89, + "Tuple, core::option::Option::, core::array::Array::>>>" + ], + [ + 90, + "core::panics::PanicResult::<(core::array::Span::, core::option::Option::, core::array::Array::>>)>" + ], + [91, "Array>"], + [92, "Snapshot>>"], + [93, "core::array::Span::>"], + [ + 94, + "core::option::Option::>>" + ], + [ + 95, + "Tuple, core::option::Option::>>>" + ], + [ + 96, + "core::panics::PanicResult::<(core::array::Span::, core::option::Option::>>)>" + ], + [97, "core::option::Option::"], + [98, "core::option::Option::>"], + [99, "core::option::Option::>"], + [100, "core::option::Option::"], + [101, "core::option::Option::>"], + [ + 102, + "core::option::Option::>>" + ], + [103, "Snapshot>>"], + [ + 104, + "Snapshot)>>" + ], + [ + 105, + "core::option::Option::)>>" + ], + [ + 106, + "Tuple, core::option::Option::)>>>" + ], + [ + 107, + "core::panics::PanicResult::<(core::array::Span::, core::option::Option::)>>)>" + ], + [108, "core::option::Option::<[core::integer::u32; 3]>"], + [109, "Tuple, Unit>"], + [110, "core::panics::PanicResult::<(core::array::Array::, ())>"], + [111, "Snapshot>"], + [112, "core::array::Span::"], + [113, "Snapshot>>"], + [ + 114, + "core::option::Option::>>" + ], + [ + 115, + "Tuple, core::option::Option::>>>" + ], + [ + 116, + "core::panics::PanicResult::<(core::array::Span::, core::option::Option::>>)>" + ], + [117, "Tuple>"], + [118, "Const"], + [119, "BuiltinCosts"], + [120, "System"], + [121, "core::panics::PanicResult::<(core::array::Span::,)>"], + [122, "Const"], + [123, "NonZero"], + [124, "Box"], + [125, "GasBuiltin"] + ], + "libfunc_names": [ + [0, "revoke_ap_tracking"], + [1, "withdraw_gas"], + [2, "branch_align"], + [3, "struct_deconstruct>"], + [4, "array_snapshot_pop_front"], + [5, "unbox"], + [6, "rename"], + [7, "store_temp"], + [8, "dup"], + [9, "felt252_is_zero"], + [10, "drop"], + [11, "store_temp>>"], + [12, "u16_try_from_felt252"], + [13, "redeposit_gas"], + [14, "enum_init, 0>"], + [15, "store_temp"], + [16, "store_temp"], + [17, "store_temp>"], + [18, "jump"], + [19, "drop>>"], + [20, "drop>"], + [21, "const_as_immediate>"], + [22, "felt252_sub"], + [23, "struct_construct"], + [24, "enum_init, 1>"], + [25, "drop>"], + [26, "drop>"], + [ + 27, + "function_call>" + ], + [28, "enum_init,)>, 1>"], + [29, "store_temp"], + [30, "store_temp,)>>"], + [31, "get_builtin_costs"], + [32, "store_temp"], + [33, "withdraw_gas_all"], + [34, "array_new"], + [35, "snapshot_take>"], + [36, "enable_ap_tracking"], + [37, "enum_match>"], + [38, "rename"], + [39, "u16_to_felt252"], + [40, "const_as_immediate>"], + [41, "array_append"], + [42, "store_temp>"], + [43, "drop"], + [44, "disable_ap_tracking"], + [45, "snapshot_take>"], + [46, "drop>"], + [47, "struct_construct>"], + [48, "struct_construct>>"], + [49, "enum_init,)>, 0>"], + [50, "rename"], + [51, "rename"], + [ + 52, + "function_call>" + ], + [53, "drop>"], + [54, "function_call>"], + [55, "store_temp>"], + [ + 56, + "function_call, core::array::ArraySerde::, core::integer::u8Drop>>::deserialize>" + ], + [ + 57, + "enum_match, core::option::Option::>>)>>" + ], + [ + 58, + "struct_deconstruct, core::option::Option::>>>>" + ], + [ + 59, + "enum_match>>>" + ], + [60, "drop>>"], + [61, "snapshot_take>>"], + [62, "enum_snapshot_match>>"], + [63, "dup>>"], + [64, "array_len"], + [65, "u32_to_felt252"], + [66, "struct_construct>"], + [67, "store_temp>"], + [ + 68, + "function_call, core::integer::u8Drop>>" + ], + [69, "enum_match, ())>>"], + [70, "struct_deconstruct, Unit>>"], + [ + 71, + "function_call, core::serde::into_felt252_based::SerdeImpl::, core::tuple::DeserializeTupleNext::<[core::integer::u32; 2], core::fixed_size_array::TupleSplitFixedSizedArraySized2::, core::serde::into_felt252_based::SerdeImpl::, core::tuple::DeserializeTupleNext::<[core::integer::u32; 1], core::fixed_size_array::TupleSplitFixedSizedArraySized1::, core::serde::into_felt252_based::SerdeImpl::, core::tuple::DeserializeTupleBaseFixedSizedArray::, core::integer::u32Drop>, core::integer::u32Drop>, core::integer::u32Drop>::deserialize>" + ], + [72, "enum_match>"], + [73, "enum_init, 0>"], + [74, "store_temp>"], + [75, "enum_init, 1>"], + [76, "drop>"], + [77, "snapshot_take>"], + [78, "struct_deconstruct>"], + [79, "rename"], + [ + 80, + "function_call), core::tuple::SerdeTuple::<(core::integer::u32, core::array::Array::), core::tuple::TupleSnapForwardTupleSize2::>, core::tuple::SerializeTupleNext::<(@core::integer::u32, @core::array::Array::), core::tuple::TupleSplitTupleSize2::<@core::integer::u32, @core::array::Array::>, core::tuple::SerdeBasedSerializeTuple::>, core::tuple::SerializeTupleNext::<(@core::array::Array::,), core::tuple::TupleSplitTupleSize1::<@core::array::Array::>, core::tuple::SerdeBasedSerializeTuple::, core::array::ArraySerde::, core::integer::u32Drop>>, core::tuple::SerializeTupleBaseTuple, core::tuple::TupleSize0Drop>, core::tuple::TupleNextDrop::<(@core::array::Array::,), core::tuple::TupleSplitTupleSize1::<@core::array::Array::>, core::tuple::IsTupleTupleSize1::<@core::array::Array::>, core::traits::SnapshotDrop::>, core::tuple::TupleSize0Drop>>, core::tuple::DeserializeTupleNext::<(core::integer::u32, core::array::Array::), core::tuple::TupleSplitTupleSize2::>, core::serde::into_felt252_based::SerdeImpl::, core::tuple::DeserializeTupleNext::<(core::array::Array::,), core::tuple::TupleSplitTupleSize1::>, core::array::ArraySerde::, core::integer::u32Drop>, core::tuple::DeserializeTupleBaseTuple, core::array::ArrayDrop::>, core::integer::u32Drop>>>::deserialize>" + ], + [ + 81, + "enum_match, core::option::Option::)>>)>>" + ], + [ + 82, + "struct_deconstruct, core::option::Option::)>>>>" + ], + [ + 83, + "enum_match)>>>" + ], + [ + 84, + "drop)>>" + ], + [ + 85, + "snapshot_take)>>" + ], + [ + 86, + "enum_snapshot_match)>>" + ], + [87, "struct_snapshot_deconstruct>>"], + [88, "dup>>"], + [89, "array_len"], + [90, "struct_construct>"], + [91, "store_temp>"], + [ + 92, + "function_call, core::integer::u32Drop>>" + ], + [ + 93, + "function_call, core::option::OptionSerde::>>::deserialize>" + ], + [ + 94, + "enum_match>>>" + ], + [95, "drop>>"], + [96, "snapshot_take>>"], + [97, "enum_match>>"], + [ + 98, + "function_call, core::serde::into_felt252_based::SerdeImpl::>::deserialize>" + ], + [ + 99, + "enum_match>>" + ], + [ + 100, + "enum_init>, 0>" + ], + [ + 101, + "store_temp>>" + ], + [ + 102, + "enum_init>, 1>" + ], + [ + 103, + "drop>>" + ], + [ + 104, + "snapshot_take>>" + ], + [105, "enum_match>"], + [106, "rename"], + [107, "u8_to_felt252"], + [ + 108, + "function_call::deserialize>" + ], + [109, "enum_match>>"], + [110, "drop>"], + [111, "snapshot_take>"], + [112, "enum_match>"], + [113, "dup"], + [114, "struct_deconstruct"], + [115, "drop"], + [116, "rename"], + [117, "u64_to_felt252"], + [118, "drop"], + [119, "array_new>"], + [120, "store_temp>>"], + [ + 121, + "function_call, core::option::OptionSerde::>, core::option::OptionDrop::>>" + ], + [ + 122, + "enum_match, core::option::Option::>>)>>" + ], + [ + 123, + "struct_deconstruct, core::option::Option::>>>>" + ], + [ + 124, + "enum_match>>>" + ], + [125, "drop>>"], + [126, "snapshot_take>>"], + [127, "dup>>>"], + [128, "array_len>"], + [129, "struct_construct>>"], + [130, "store_temp>>"], + [ + 131, + "function_call, core::option::OptionSerde::>, core::option::OptionDrop::>>" + ], + [132, "drop"], + [133, "drop>"], + [134, "snapshot_take>"], + [ + 135, + "function_call, core::array::Array::, core::array::ArraySerde::, core::integer::u8Drop>, core::array::ArraySerde::, core::integer::u16Drop>>::deserialize>" + ], + [ + 136, + "enum_match, core::option::Option::, core::array::Array::>>)>>" + ], + [ + 137, + "struct_deconstruct, core::option::Option::, core::array::Array::>>>>" + ], + [ + 138, + "enum_match, core::array::Array::>>>" + ], + [ + 139, + "drop, core::array::Array::>>" + ], + [ + 140, + "snapshot_take, core::array::Array::>>" + ], + [ + 141, + "enum_snapshot_match, core::array::Array::>>" + ], + [142, "rename, ())>>"], + [143, "dup>>"], + [144, "array_len"], + [145, "struct_construct>"], + [146, "store_temp>"], + [ + 147, + "function_call, core::integer::u16Drop>>" + ], + [ + 148, + "function_call, core::tuple::SerializeTupleNext::<[@core::integer::u32; 3], core::fixed_size_array::TupleSplitFixedSizedArraySized3::<@core::integer::u32>, core::tuple::SerdeBasedSerializeTuple::>, core::tuple::SerializeTupleNext::<[@core::integer::u32; 2], core::fixed_size_array::TupleSplitFixedSizedArraySized2::<@core::integer::u32>, core::tuple::SerdeBasedSerializeTuple::>, core::tuple::SerializeTupleNext::<[@core::integer::u32; 1], core::fixed_size_array::TupleSplitFixedSizedArraySized1::<@core::integer::u32>, core::tuple::SerdeBasedSerializeTuple::>, core::tuple::SerializeTupleBaseFixedSizedArray::, core::fixed_size_array::FixedSizedArrayDrop::<@core::integer::u32, core::traits::SnapshotDrop::, 0>>, core::fixed_size_array::FixedSizedArrayDrop::<@core::integer::u32, core::traits::SnapshotDrop::, 1>>, core::fixed_size_array::FixedSizedArrayDrop::<@core::integer::u32, core::traits::SnapshotDrop::, 2>>, core::tuple::DeserializeTupleNext::<[core::integer::u32; 3], core::fixed_size_array::TupleSplitFixedSizedArraySized3::, core::serde::into_felt252_based::SerdeImpl::, core::tuple::DeserializeTupleNext::<[core::integer::u32; 2], core::fixed_size_array::TupleSplitFixedSizedArraySized2::, core::serde::into_felt252_based::SerdeImpl::, core::tuple::DeserializeTupleNext::<[core::integer::u32; 1], core::fixed_size_array::TupleSplitFixedSizedArraySized1::, core::serde::into_felt252_based::SerdeImpl::, core::tuple::DeserializeTupleBaseFixedSizedArray::, core::integer::u32Drop>, core::integer::u32Drop>, core::integer::u32Drop>>, core::tuple::SerdeTuple::<[core::integer::u16; 2], core::fixed_size_array::TupleSnapForwardFixedSizedArraySized2::, core::tuple::SerializeTupleNext::<[@core::integer::u16; 2], core::fixed_size_array::TupleSplitFixedSizedArraySized2::<@core::integer::u16>, core::tuple::SerdeBasedSerializeTuple::>, core::tuple::SerializeTupleNext::<[@core::integer::u16; 1], core::fixed_size_array::TupleSplitFixedSizedArraySized1::<@core::integer::u16>, core::tuple::SerdeBasedSerializeTuple::>, core::tuple::SerializeTupleBaseFixedSizedArray::, core::fixed_size_array::FixedSizedArrayDrop::<@core::integer::u16, core::traits::SnapshotDrop::, 0>>, core::fixed_size_array::FixedSizedArrayDrop::<@core::integer::u16, core::traits::SnapshotDrop::, 1>>, core::tuple::DeserializeTupleNext::<[core::integer::u16; 2], core::fixed_size_array::TupleSplitFixedSizedArraySized2::, core::serde::into_felt252_based::SerdeImpl::, core::tuple::DeserializeTupleNext::<[core::integer::u16; 1], core::fixed_size_array::TupleSplitFixedSizedArraySized1::, core::serde::into_felt252_based::SerdeImpl::, core::tuple::DeserializeTupleBaseFixedSizedArray::, core::integer::u16Drop>, core::integer::u16Drop>>>::deserialize>" + ], + [ + 149, + "enum_match>>" + ], + [150, "drop>"], + [ + 151, + "snapshot_take>" + ], + [152, "enum_match>"], + [153, "struct_deconstruct>"], + [ + 154, + "function_call), (core::integer::u16, core::array::Array::), core::tuple::SerdeTuple::<(core::integer::u32, core::array::Array::), core::tuple::TupleSnapForwardTupleSize2::>, core::tuple::SerializeTupleNext::<(@core::integer::u32, @core::array::Array::), core::tuple::TupleSplitTupleSize2::<@core::integer::u32, @core::array::Array::>, core::tuple::SerdeBasedSerializeTuple::>, core::tuple::SerializeTupleNext::<(@core::array::Array::,), core::tuple::TupleSplitTupleSize1::<@core::array::Array::>, core::tuple::SerdeBasedSerializeTuple::, core::array::ArraySerde::, core::integer::u32Drop>>, core::tuple::SerializeTupleBaseTuple, core::tuple::TupleSize0Drop>, core::tuple::TupleNextDrop::<(@core::array::Array::,), core::tuple::TupleSplitTupleSize1::<@core::array::Array::>, core::tuple::IsTupleTupleSize1::<@core::array::Array::>, core::traits::SnapshotDrop::>, core::tuple::TupleSize0Drop>>, core::tuple::DeserializeTupleNext::<(core::integer::u32, core::array::Array::), core::tuple::TupleSplitTupleSize2::>, core::serde::into_felt252_based::SerdeImpl::, core::tuple::DeserializeTupleNext::<(core::array::Array::,), core::tuple::TupleSplitTupleSize1::>, core::array::ArraySerde::, core::integer::u32Drop>, core::tuple::DeserializeTupleBaseTuple, core::array::ArrayDrop::>, core::integer::u32Drop>>, core::tuple::SerdeTuple::<(core::integer::u16, core::array::Array::), core::tuple::TupleSnapForwardTupleSize2::>, core::tuple::SerializeTupleNext::<(@core::integer::u16, @core::array::Array::), core::tuple::TupleSplitTupleSize2::<@core::integer::u16, @core::array::Array::>, core::tuple::SerdeBasedSerializeTuple::>, core::tuple::SerializeTupleNext::<(@core::array::Array::,), core::tuple::TupleSplitTupleSize1::<@core::array::Array::>, core::tuple::SerdeBasedSerializeTuple::, core::array::ArraySerde::, core::integer::u16Drop>>, core::tuple::SerializeTupleBaseTuple, core::tuple::TupleSize0Drop>, core::tuple::TupleNextDrop::<(@core::array::Array::,), core::tuple::TupleSplitTupleSize1::<@core::array::Array::>, core::tuple::IsTupleTupleSize1::<@core::array::Array::>, core::traits::SnapshotDrop::>, core::tuple::TupleSize0Drop>>, core::tuple::DeserializeTupleNext::<(core::integer::u16, core::array::Array::), core::tuple::TupleSplitTupleSize2::>, core::serde::into_felt252_based::SerdeImpl::, core::tuple::DeserializeTupleNext::<(core::array::Array::,), core::tuple::TupleSplitTupleSize1::>, core::array::ArraySerde::, core::integer::u16Drop>, core::tuple::DeserializeTupleBaseTuple, core::array::ArrayDrop::>, core::integer::u16Drop>>>::deserialize>" + ], + [ + 155, + "enum_match, core::option::Option::), (core::integer::u16, core::array::Array::)>>)>>" + ], + [ + 156, + "struct_deconstruct, core::option::Option::), (core::integer::u16, core::array::Array::)>>>>" + ], + [ + 157, + "enum_match), (core::integer::u16, core::array::Array::)>>>" + ], + [ + 158, + "drop), (core::integer::u16, core::array::Array::)>>" + ], + [ + 159, + "snapshot_take), (core::integer::u16, core::array::Array::)>>" + ], + [ + 160, + "enum_snapshot_match), (core::integer::u16, core::array::Array::)>>" + ], + [161, "struct_snapshot_deconstruct>>"], + [ + 162, + "function_call, core::integer::u32, core::result::ResultSerde::, core::serde::into_felt252_based::SerdeImpl::>, core::serde::into_felt252_based::SerdeImpl::>::deserialize>" + ], + [ + 163, + "enum_match, core::integer::u32>>>" + ], + [ + 164, + "drop, core::integer::u32>>" + ], + [ + 165, + "snapshot_take, core::integer::u32>>" + ], + [ + 166, + "enum_match, core::integer::u32>>" + ], + [ + 167, + "function_call, core::serde::into_felt252_based::SerdeImpl::, core::option::OptionSerde::>>::deserialize>" + ], + [ + 168, + "enum_match>>>" + ], + [ + 169, + "drop>>" + ], + [ + 170, + "snapshot_take>>" + ], + [ + 171, + "enum_match>>" + ], + [172, "enum_match>"], + [ + 173, + "function_call, enums::PointSerde>::deserialize>" + ], + [ + 174, + "enum_match>>" + ], + [175, "drop>"], + [176, "snapshot_take>"], + [177, "enum_match>"], + [178, "u64_try_from_felt252"], + [179, "u32_try_from_felt252"], + [180, "struct_construct"], + [181, "snapshot_take"], + [182, "drop"], + [183, "store_temp"], + [184, "function_call"], + [185, "enum_match>"], + [186, "drop"], + [187, "snapshot_take"], + [188, "dup"], + [189, "struct_deconstruct"], + [190, "function_call"], + [191, "enum_match>"], + [192, "drop"], + [193, "snapshot_take"], + [194, "dup"], + [195, "struct_deconstruct"], + [196, "drop>"], + [197, "struct_deconstruct>"], + [198, "function_call"], + [ + 199, + "enum_match, core::option::Option::)>>" + ], + [ + 200, + "struct_deconstruct, core::option::Option::>>" + ], + [201, "enum_match>"], + [202, "drop"], + [203, "snapshot_take"], + [204, "dup"], + [205, "struct_deconstruct"], + [206, "drop>"], + [207, "dup>"], + [208, "rename>"], + [209, "struct_deconstruct>"], + [210, "function_call"], + [211, "enum_match>"], + [212, "drop"], + [213, "snapshot_take"], + [214, "dup"], + [215, "struct_deconstruct"], + [216, "drop>"], + [217, "struct_deconstruct>"], + [218, "function_call"], + [219, "enum_match>"], + [220, "drop"], + [221, "snapshot_take"], + [222, "dup"], + [223, "struct_deconstruct"], + [224, "drop>"], + [225, "enum_match>"], + [226, "u128s_from_felt252"], + [ + 227, + "function_call, core::serde::into_felt252_based::SerdeImpl::>::deserialize>" + ], + [ + 228, + "enum_match>>" + ], + [229, "drop"], + [230, "drop>"], + [231, "struct_construct"], + [232, "snapshot_take"], + [233, "drop"], + [234, "store_temp"], + [235, "dup"], + [236, "struct_deconstruct"], + [237, "rename"], + [238, "u128_to_felt252"], + [239, "enum_match>"], + [ + 240, + "const_as_immediate>" + ], + [241, "function_call"], + [ + 242, + "const_as_immediate>" + ], + [243, "const_as_immediate>"], + [244, "array_new"], + [245, "store_temp>"], + [ + 246, + "function_call, core::integer::u8Drop>>" + ], + [ + 247, + "enum_match, core::option::Option::>)>>" + ], + [ + 248, + "struct_deconstruct, core::option::Option::>>>" + ], + [249, "enum_match>>"], + [250, "enum_init>, 0>"], + [ + 251, + "enum_init>>, 0>" + ], + [ + 252, + "struct_construct, core::option::Option::>>>>" + ], + [ + 253, + "enum_init, core::option::Option::>>)>, 0>" + ], + [ + 254, + "store_temp, core::option::Option::>>)>>" + ], + [255, "rename"], + [ + 256, + "enum_init, core::option::Option::>>)>, 1>" + ], + [ + 257, + "enum_init>>, 1>" + ], + [258, "enum_init>, 1>"], + [259, "struct_deconstruct>"], + [260, "array_snapshot_pop_front"], + [261, "unbox"], + [262, "drop>>"], + [263, "struct_construct, Unit>>"], + [264, "enum_init, ())>, 0>"], + [265, "store_temp, ())>>"], + [266, "drop>"], + [267, "enum_init, ())>, 1>"], + [268, "struct_construct>"], + [ + 269, + "function_call), core::tuple::TupleSplitTupleSize2::>, core::serde::into_felt252_based::SerdeImpl::, core::tuple::DeserializeTupleNext::<(core::array::Array::,), core::tuple::TupleSplitTupleSize1::>, core::array::ArraySerde::, core::integer::u32Drop>, core::tuple::DeserializeTupleBaseTuple, core::array::ArrayDrop::>, core::integer::u32Drop>::deserialize>" + ], + [ + 270, + "enum_match, core::option::Option::<(core::integer::u32, core::array::Array::)>)>>" + ], + [ + 271, + "struct_deconstruct, core::option::Option::<(core::integer::u32, core::array::Array::)>>>" + ], + [ + 272, + "enum_match)>>" + ], + [ + 273, + "enum_init)>, 0>" + ], + [ + 274, + "enum_init)>>, 0>" + ], + [ + 275, + "struct_construct, core::option::Option::)>>>>" + ], + [ + 276, + "enum_init, core::option::Option::)>>)>, 0>" + ], + [ + 277, + "store_temp, core::option::Option::)>>)>>" + ], + [ + 278, + "enum_init)>>, 1>" + ], + [ + 279, + "enum_init, core::option::Option::)>>)>, 1>" + ], + [ + 280, + "enum_init)>, 1>" + ], + [281, "array_snapshot_pop_front"], + [282, "unbox"], + [283, "drop>>"], + [284, "enum_init>, 0>"], + [ + 285, + "enum_init>>, 0>" + ], + [ + 286, + "store_temp>>>" + ], + [287, "rename>>"], + [288, "enum_init>, 1>"], + [ + 289, + "enum_init>>, 1>" + ], + [290, "u8_try_from_felt252"], + [291, "enum_init, 0>"], + [292, "enum_init, 1>"], + [293, "enum_init, 0>"], + [294, "enum_init>, 0>"], + [295, "store_temp>>"], + [296, "enum_init, 1>"], + [297, "enum_init>, 1>"], + [ + 298, + "enum_init>>, 0>" + ], + [ + 299, + "struct_construct, core::option::Option::>>>>" + ], + [ + 300, + "enum_init, core::option::Option::>>)>, 0>" + ], + [ + 301, + "store_temp, core::option::Option::>>)>>" + ], + [302, "array_append>"], + [ + 303, + "enum_init>>, 1>" + ], + [ + 304, + "enum_init, core::option::Option::>>)>, 1>" + ], + [305, "struct_deconstruct>>"], + [306, "array_snapshot_pop_front>"], + [307, "unbox>"], + [308, "drop>>>"], + [309, "drop>>"], + [ + 310, + "enum_init, core::array::Array::>, 0>" + ], + [ + 311, + "enum_init, core::array::Array::>>, 0>" + ], + [ + 312, + "struct_construct, core::option::Option::, core::array::Array::>>>>" + ], + [ + 313, + "enum_init, core::option::Option::, core::array::Array::>>)>, 0>" + ], + [ + 314, + "store_temp, core::option::Option::, core::array::Array::>>)>>" + ], + [ + 315, + "enum_init, core::option::Option::, core::array::Array::>>)>, 1>" + ], + [316, "array_new"], + [317, "store_temp>"], + [ + 318, + "function_call, core::integer::u16Drop>>" + ], + [ + 319, + "enum_match, core::option::Option::>)>>" + ], + [ + 320, + "struct_deconstruct, core::option::Option::>>>" + ], + [321, "enum_match>>"], + [ + 322, + "enum_init, core::array::Array::>, 1>" + ], + [ + 323, + "enum_init, core::array::Array::>>, 1>" + ], + [324, "struct_deconstruct>"], + [325, "array_snapshot_pop_front"], + [326, "unbox"], + [327, "drop>>"], + [328, "drop>"], + [329, "dup>>"], + [ + 330, + "enum_init, 0>" + ], + [ + 331, + "enum_init>, 0>" + ], + [ + 332, + "store_temp>>" + ], + [ + 333, + "enum_init>, 1>" + ], + [334, "struct_construct>"], + [ + 335, + "enum_init, 1>" + ], + [ + 336, + "enum_init), (core::integer::u16, core::array::Array::)>, 0>" + ], + [ + 337, + "enum_init), (core::integer::u16, core::array::Array::)>>, 0>" + ], + [ + 338, + "struct_construct, core::option::Option::), (core::integer::u16, core::array::Array::)>>>>" + ], + [ + 339, + "enum_init, core::option::Option::), (core::integer::u16, core::array::Array::)>>)>, 0>" + ], + [ + 340, + "store_temp, core::option::Option::), (core::integer::u16, core::array::Array::)>>)>>" + ], + [ + 341, + "enum_init, core::option::Option::), (core::integer::u16, core::array::Array::)>>)>, 1>" + ], + [ + 342, + "function_call), core::tuple::TupleSplitTupleSize2::>, core::serde::into_felt252_based::SerdeImpl::, core::tuple::DeserializeTupleNext::<(core::array::Array::,), core::tuple::TupleSplitTupleSize1::>, core::array::ArraySerde::, core::integer::u16Drop>, core::tuple::DeserializeTupleBaseTuple, core::array::ArrayDrop::>, core::integer::u16Drop>::deserialize>" + ], + [ + 343, + "enum_match, core::option::Option::<(core::integer::u16, core::array::Array::)>)>>" + ], + [ + 344, + "struct_deconstruct, core::option::Option::<(core::integer::u16, core::array::Array::)>>>" + ], + [ + 345, + "enum_match)>>" + ], + [ + 346, + "enum_init), (core::integer::u16, core::array::Array::)>, 1>" + ], + [ + 347, + "enum_init), (core::integer::u16, core::array::Array::)>>, 1>" + ], + [ + 348, + "enum_init, core::integer::u32>, 0>" + ], + [ + 349, + "enum_init, core::integer::u32>>, 0>" + ], + [ + 350, + "store_temp, core::integer::u32>>>" + ], + [ + 351, + "enum_init, core::integer::u32>>, 1>" + ], + [ + 352, + "enum_init, core::integer::u32>, 1>" + ], + [ + 353, + "enum_init>, 0>" + ], + [ + 354, + "enum_init>>, 0>" + ], + [ + 355, + "store_temp>>>" + ], + [356, "enum_init, 0>"], + [ + 357, + "enum_init>, 1>" + ], + [358, "enum_init, 1>"], + [ + 359, + "enum_init>>, 1>" + ], + [360, "enum_init, 0>"], + [ + 361, + "enum_init>, 0>" + ], + [ + 362, + "store_temp>>" + ], + [363, "enum_init, 1>"], + [ + 364, + "enum_init>, 1>" + ], + [365, "struct_construct"], + [366, "enum_init, 0>"], + [367, "store_temp>"], + [368, "enum_init, 1>"], + [ + 369, + "function_call, core::serde::into_felt252_based::SerdeImpl::, core::tuple::DeserializeTupleNext::<(core::integer::u32, core::integer::u64), core::tuple::TupleSplitTupleSize2::, core::serde::into_felt252_based::SerdeImpl::, core::tuple::DeserializeTupleNext::<(core::integer::u64,), core::tuple::TupleSplitTupleSize1::, core::serde::into_felt252_based::SerdeImpl::, core::tuple::DeserializeTupleBaseTuple, core::integer::u64Drop>, core::integer::u32Drop>, core::integer::u16Drop>::deserialize>" + ], + [ + 370, + "enum_match>" + ], + [371, "struct_deconstruct>"], + [372, "struct_construct>"], + [373, "struct_construct"], + [374, "enum_init, 0>"], + [375, "store_temp>"], + [376, "drop"], + [377, "enum_init, 1>"], + [378, "alloc_local"], + [379, "finalize_locals"], + [380, "store_local"], + [381, "array_new"], + [382, "store_temp>"], + [ + 383, + "function_call, core::integer::u32Drop>>" + ], + [ + 384, + "enum_match, core::option::Option::>)>>" + ], + [ + 385, + "struct_deconstruct, core::option::Option::>>>" + ], + [386, "enum_match>>"], + [387, "snapshot_take>"], + [388, "drop>"], + [389, "struct_construct"], + [390, "enum_init, 0>"], + [ + 391, + "struct_construct, core::option::Option::>>" + ], + [ + 392, + "enum_init, core::option::Option::)>, 0>" + ], + [ + 393, + "store_temp, core::option::Option::)>>" + ], + [ + 394, + "enum_init, core::option::Option::)>, 1>" + ], + [395, "enum_init, 1>"], + [396, "drop>"], + [ + 397, + "function_call, core::serde::into_felt252_based::SerdeImpl::, core::tuple::DeserializeTupleNext::<[core::integer::u16; 2], core::fixed_size_array::TupleSplitFixedSizedArraySized2::, core::serde::into_felt252_based::SerdeImpl::, core::tuple::DeserializeTupleNext::<[core::integer::u16; 1], core::fixed_size_array::TupleSplitFixedSizedArraySized1::, core::serde::into_felt252_based::SerdeImpl::, core::tuple::DeserializeTupleBaseFixedSizedArray::, core::integer::u16Drop>, core::integer::u16Drop>, core::integer::u16Drop>::deserialize>" + ], + [398, "enum_match>"], + [399, "struct_deconstruct>"], + [400, "struct_construct>"], + [401, "struct_construct"], + [402, "enum_init, 0>"], + [403, "store_temp>"], + [404, "enum_init, 1>"], + [405, "enum_init, 0>"], + [406, "struct_construct"], + [407, "enum_init, 0>"], + [408, "store_temp>"], + [409, "enum_init, 1>"], + [410, "enum_init, 1>"], + [411, "enum_init, 0>"], + [ + 412, + "enum_init>, 0>" + ], + [ + 413, + "store_temp>>" + ], + [414, "enum_init, 1>"], + [ + 415, + "enum_init>, 1>" + ], + [416, "struct_construct"], + [417, "struct_construct>>"], + [418, "store_temp>>"], + [ + 419, + "struct_construct, core::option::Option::>>>" + ], + [ + 420, + "enum_init, core::option::Option::>)>, 0>" + ], + [ + 421, + "store_temp, core::option::Option::>)>>" + ], + [422, "array_append"], + [423, "drop>"], + [ + 424, + "enum_init, core::option::Option::>)>, 1>" + ], + [425, "struct_construct>>"], + [ + 426, + "struct_construct, core::option::Option::<(core::integer::u32, core::array::Array::)>>>" + ], + [ + 427, + "enum_init, core::option::Option::<(core::integer::u32, core::array::Array::)>)>, 0>" + ], + [ + 428, + "store_temp, core::option::Option::<(core::integer::u32, core::array::Array::)>)>>" + ], + [ + 429, + "enum_init, core::option::Option::<(core::integer::u32, core::array::Array::)>)>, 1>" + ], + [430, "enum_init>, 0>"], + [ + 431, + "struct_construct, core::option::Option::>>>" + ], + [ + 432, + "enum_init, core::option::Option::>)>, 0>" + ], + [ + 433, + "store_temp, core::option::Option::>)>>" + ], + [434, "array_append"], + [435, "drop>"], + [436, "enum_init>, 1>"], + [ + 437, + "enum_init, core::option::Option::>)>, 1>" + ], + [438, "struct_construct>>"], + [ + 439, + "enum_init)>, 0>" + ], + [ + 440, + "struct_construct, core::option::Option::<(core::integer::u16, core::array::Array::)>>>" + ], + [ + 441, + "enum_init, core::option::Option::<(core::integer::u16, core::array::Array::)>)>, 0>" + ], + [ + 442, + "store_temp, core::option::Option::<(core::integer::u16, core::array::Array::)>)>>" + ], + [ + 443, + "enum_init, core::option::Option::<(core::integer::u16, core::array::Array::)>)>, 1>" + ], + [ + 444, + "enum_init)>, 1>" + ], + [445, "struct_construct>"], + [ + 446, + "enum_init, 0>" + ], + [ + 447, + "store_temp>" + ], + [ + 448, + "enum_init, 1>" + ], + [449, "enum_init>, 0>"], + [ + 450, + "struct_construct, core::option::Option::>>>" + ], + [ + 451, + "enum_init, core::option::Option::>)>, 0>" + ], + [ + 452, + "store_temp, core::option::Option::>)>>" + ], + [453, "array_append"], + [454, "enum_init>, 1>"], + [ + 455, + "enum_init, core::option::Option::>)>, 1>" + ], + [456, "struct_construct>"], + [457, "enum_init, 0>"], + [458, "store_temp>"], + [459, "enum_init, 1>"] + ], + "user_func_names": [ + [0, "enums::test_enums::__wrapper__TestOption__option_bn"], + [1, "enums::test_enums::__wrapper__TestOption__option_array"], + [2, "enums::test_enums::__wrapper__TestOption__option_fixed_array"], + [3, "enums::test_enums::__wrapper__TestOption__option_tuple"], + [4, "enums::test_enums::__wrapper__TestOption__option_option_bn"], + [5, "enums::test_enums::__wrapper__TestOption__option_result"], + [6, "enums::test_enums::__wrapper__TestOption__option_struct"], + [7, "enums::test_enums::__wrapper__TestOption__array_option_bn"], + [8, "enums::test_enums::__wrapper__TestOption__write_option_bn"], + [9, "enums::test_enums::__wrapper__TestOption__option_point"], + [10, "enums::test_enums::__wrapper__TestOption__result_bn"], + [11, "enums::test_enums::__wrapper__TestOption__result_array"], + [12, "enums::test_enums::__wrapper__TestOption__result_fixed_array"], + [13, "enums::test_enums::__wrapper__TestOption__result_tuple"], + [14, "enums::test_enums::__wrapper__TestOption__result_result_bn"], + [15, "enums::test_enums::__wrapper__TestOption__result_option"], + [16, "enums::test_enums::__wrapper__TestOption__result_struct"], + [17, "enums::test_enums::__wrapper__TestOption__write_result_bn"], + [18, "enums::test_enums::__wrapper__TestOption__struct_point"], + [19, "enums::test_enums::__wrapper__TestOption__struct_point2"], + [20, "enums::test_enums::__wrapper__TestOption__struct_Empty"], + [21, "enums::test_enums::__wrapper__TestOption__struct_Cat"], + [22, "enums::test_enums::__wrapper__TestOption__struct_Dog"], + [23, "enums::test_enums::__wrapper__TestOption__struct_Horse"], + [24, "enums::test_enums::__wrapper__TestOption__struct_Truck"], + [25, "enums::test_enums::__wrapper__TestOption__struct_Destruction"], + [26, "enums::test_enums::__wrapper__TestOption__write_struct_point"], + [ + 27, + "core::panic_with_const_felt252::<7733229381460288120802334208475838166080759535023995805565484692595>" + ], + [ + 28, + "core::panic_with_const_felt252::<485748461484230571791265682659113160264223489397539653310998840191492913>" + ], + [29, "core::panic_with_const_felt252::<375233589013918064796019>"], + [ + 30, + "core::option::OptionSerde::, core::array::ArraySerde::, core::integer::u8Drop>>::deserialize" + ], + [ + 31, + "core::array::serialize_array_helper::, core::integer::u8Drop>" + ], + [ + 32, + "core::tuple::DeserializeTupleNext::<[core::integer::u32; 3], core::fixed_size_array::TupleSplitFixedSizedArraySized3::, core::serde::into_felt252_based::SerdeImpl::, core::tuple::DeserializeTupleNext::<[core::integer::u32; 2], core::fixed_size_array::TupleSplitFixedSizedArraySized2::, core::serde::into_felt252_based::SerdeImpl::, core::tuple::DeserializeTupleNext::<[core::integer::u32; 1], core::fixed_size_array::TupleSplitFixedSizedArraySized1::, core::serde::into_felt252_based::SerdeImpl::, core::tuple::DeserializeTupleBaseFixedSizedArray::, core::integer::u32Drop>, core::integer::u32Drop>, core::integer::u32Drop>::deserialize" + ], + [ + 33, + "core::option::OptionSerde::<(core::integer::u32, core::array::Array::), core::tuple::SerdeTuple::<(core::integer::u32, core::array::Array::), core::tuple::TupleSnapForwardTupleSize2::>, core::tuple::SerializeTupleNext::<(@core::integer::u32, @core::array::Array::), core::tuple::TupleSplitTupleSize2::<@core::integer::u32, @core::array::Array::>, core::tuple::SerdeBasedSerializeTuple::>, core::tuple::SerializeTupleNext::<(@core::array::Array::,), core::tuple::TupleSplitTupleSize1::<@core::array::Array::>, core::tuple::SerdeBasedSerializeTuple::, core::array::ArraySerde::, core::integer::u32Drop>>, core::tuple::SerializeTupleBaseTuple, core::tuple::TupleSize0Drop>, core::tuple::TupleNextDrop::<(@core::array::Array::,), core::tuple::TupleSplitTupleSize1::<@core::array::Array::>, core::tuple::IsTupleTupleSize1::<@core::array::Array::>, core::traits::SnapshotDrop::>, core::tuple::TupleSize0Drop>>, core::tuple::DeserializeTupleNext::<(core::integer::u32, core::array::Array::), core::tuple::TupleSplitTupleSize2::>, core::serde::into_felt252_based::SerdeImpl::, core::tuple::DeserializeTupleNext::<(core::array::Array::,), core::tuple::TupleSplitTupleSize1::>, core::array::ArraySerde::, core::integer::u32Drop>, core::tuple::DeserializeTupleBaseTuple, core::array::ArrayDrop::>, core::integer::u32Drop>>>::deserialize" + ], + [ + 34, + "core::array::serialize_array_helper::, core::integer::u32Drop>" + ], + [ + 35, + "core::option::OptionSerde::, core::option::OptionSerde::>>::deserialize" + ], + [ + 36, + "core::result::ResultSerde::, core::serde::into_felt252_based::SerdeImpl::>::deserialize" + ], + [37, "core::option::OptionSerde::::deserialize"], + [ + 38, + "core::array::deserialize_array_helper::, core::option::OptionSerde::>, core::option::OptionDrop::>" + ], + [ + 39, + "core::array::serialize_array_helper::, core::option::OptionSerde::>, core::option::OptionDrop::>" + ], + [ + 40, + "core::result::ResultSerde::, core::array::Array::, core::array::ArraySerde::, core::integer::u8Drop>, core::array::ArraySerde::, core::integer::u16Drop>>::deserialize" + ], + [ + 41, + "core::array::serialize_array_helper::, core::integer::u16Drop>" + ], + [ + 42, + "core::result::ResultSerde::<[core::integer::u32; 3], [core::integer::u16; 2], core::tuple::SerdeTuple::<[core::integer::u32; 3], core::fixed_size_array::TupleSnapForwardFixedSizedArraySized3::, core::tuple::SerializeTupleNext::<[@core::integer::u32; 3], core::fixed_size_array::TupleSplitFixedSizedArraySized3::<@core::integer::u32>, core::tuple::SerdeBasedSerializeTuple::>, core::tuple::SerializeTupleNext::<[@core::integer::u32; 2], core::fixed_size_array::TupleSplitFixedSizedArraySized2::<@core::integer::u32>, core::tuple::SerdeBasedSerializeTuple::>, core::tuple::SerializeTupleNext::<[@core::integer::u32; 1], core::fixed_size_array::TupleSplitFixedSizedArraySized1::<@core::integer::u32>, core::tuple::SerdeBasedSerializeTuple::>, core::tuple::SerializeTupleBaseFixedSizedArray::, core::fixed_size_array::FixedSizedArrayDrop::<@core::integer::u32, core::traits::SnapshotDrop::, 0>>, core::fixed_size_array::FixedSizedArrayDrop::<@core::integer::u32, core::traits::SnapshotDrop::, 1>>, core::fixed_size_array::FixedSizedArrayDrop::<@core::integer::u32, core::traits::SnapshotDrop::, 2>>, core::tuple::DeserializeTupleNext::<[core::integer::u32; 3], core::fixed_size_array::TupleSplitFixedSizedArraySized3::, core::serde::into_felt252_based::SerdeImpl::, core::tuple::DeserializeTupleNext::<[core::integer::u32; 2], core::fixed_size_array::TupleSplitFixedSizedArraySized2::, core::serde::into_felt252_based::SerdeImpl::, core::tuple::DeserializeTupleNext::<[core::integer::u32; 1], core::fixed_size_array::TupleSplitFixedSizedArraySized1::, core::serde::into_felt252_based::SerdeImpl::, core::tuple::DeserializeTupleBaseFixedSizedArray::, core::integer::u32Drop>, core::integer::u32Drop>, core::integer::u32Drop>>, core::tuple::SerdeTuple::<[core::integer::u16; 2], core::fixed_size_array::TupleSnapForwardFixedSizedArraySized2::, core::tuple::SerializeTupleNext::<[@core::integer::u16; 2], core::fixed_size_array::TupleSplitFixedSizedArraySized2::<@core::integer::u16>, core::tuple::SerdeBasedSerializeTuple::>, core::tuple::SerializeTupleNext::<[@core::integer::u16; 1], core::fixed_size_array::TupleSplitFixedSizedArraySized1::<@core::integer::u16>, core::tuple::SerdeBasedSerializeTuple::>, core::tuple::SerializeTupleBaseFixedSizedArray::, core::fixed_size_array::FixedSizedArrayDrop::<@core::integer::u16, core::traits::SnapshotDrop::, 0>>, core::fixed_size_array::FixedSizedArrayDrop::<@core::integer::u16, core::traits::SnapshotDrop::, 1>>, core::tuple::DeserializeTupleNext::<[core::integer::u16; 2], core::fixed_size_array::TupleSplitFixedSizedArraySized2::, core::serde::into_felt252_based::SerdeImpl::, core::tuple::DeserializeTupleNext::<[core::integer::u16; 1], core::fixed_size_array::TupleSplitFixedSizedArraySized1::, core::serde::into_felt252_based::SerdeImpl::, core::tuple::DeserializeTupleBaseFixedSizedArray::, core::integer::u16Drop>, core::integer::u16Drop>>>::deserialize" + ], + [ + 43, + "core::result::ResultSerde::<(core::integer::u32, core::array::Array::), (core::integer::u16, core::array::Array::), core::tuple::SerdeTuple::<(core::integer::u32, core::array::Array::), core::tuple::TupleSnapForwardTupleSize2::>, core::tuple::SerializeTupleNext::<(@core::integer::u32, @core::array::Array::), core::tuple::TupleSplitTupleSize2::<@core::integer::u32, @core::array::Array::>, core::tuple::SerdeBasedSerializeTuple::>, core::tuple::SerializeTupleNext::<(@core::array::Array::,), core::tuple::TupleSplitTupleSize1::<@core::array::Array::>, core::tuple::SerdeBasedSerializeTuple::, core::array::ArraySerde::, core::integer::u32Drop>>, core::tuple::SerializeTupleBaseTuple, core::tuple::TupleSize0Drop>, core::tuple::TupleNextDrop::<(@core::array::Array::,), core::tuple::TupleSplitTupleSize1::<@core::array::Array::>, core::tuple::IsTupleTupleSize1::<@core::array::Array::>, core::traits::SnapshotDrop::>, core::tuple::TupleSize0Drop>>, core::tuple::DeserializeTupleNext::<(core::integer::u32, core::array::Array::), core::tuple::TupleSplitTupleSize2::>, core::serde::into_felt252_based::SerdeImpl::, core::tuple::DeserializeTupleNext::<(core::array::Array::,), core::tuple::TupleSplitTupleSize1::>, core::array::ArraySerde::, core::integer::u32Drop>, core::tuple::DeserializeTupleBaseTuple, core::array::ArrayDrop::>, core::integer::u32Drop>>, core::tuple::SerdeTuple::<(core::integer::u16, core::array::Array::), core::tuple::TupleSnapForwardTupleSize2::>, core::tuple::SerializeTupleNext::<(@core::integer::u16, @core::array::Array::), core::tuple::TupleSplitTupleSize2::<@core::integer::u16, @core::array::Array::>, core::tuple::SerdeBasedSerializeTuple::>, core::tuple::SerializeTupleNext::<(@core::array::Array::,), core::tuple::TupleSplitTupleSize1::<@core::array::Array::>, core::tuple::SerdeBasedSerializeTuple::, core::array::ArraySerde::, core::integer::u16Drop>>, core::tuple::SerializeTupleBaseTuple, core::tuple::TupleSize0Drop>, core::tuple::TupleNextDrop::<(@core::array::Array::,), core::tuple::TupleSplitTupleSize1::<@core::array::Array::>, core::tuple::IsTupleTupleSize1::<@core::array::Array::>, core::traits::SnapshotDrop::>, core::tuple::TupleSize0Drop>>, core::tuple::DeserializeTupleNext::<(core::integer::u16, core::array::Array::), core::tuple::TupleSplitTupleSize2::>, core::serde::into_felt252_based::SerdeImpl::, core::tuple::DeserializeTupleNext::<(core::array::Array::,), core::tuple::TupleSplitTupleSize1::>, core::array::ArraySerde::, core::integer::u16Drop>, core::tuple::DeserializeTupleBaseTuple, core::array::ArrayDrop::>, core::integer::u16Drop>>>::deserialize" + ], + [ + 44, + "core::result::ResultSerde::, core::integer::u32, core::result::ResultSerde::, core::serde::into_felt252_based::SerdeImpl::>, core::serde::into_felt252_based::SerdeImpl::>::deserialize" + ], + [ + 45, + "core::result::ResultSerde::, core::serde::into_felt252_based::SerdeImpl::, core::option::OptionSerde::>>::deserialize" + ], + [ + 46, + "core::result::ResultSerde::, enums::PointSerde>::deserialize" + ], + [47, "enums::Point2Serde::deserialize"], + [48, "enums::CatSerde::deserialize"], + [49, "enums::DogSerde::deserialize"], + [50, "enums::HorseSerde::deserialize"], + [51, "enums::TruckSerde::deserialize"], + [ + 52, + "core::result::ResultSerde::, core::serde::into_felt252_based::SerdeImpl::>::deserialize" + ], + [53, "core::panic_with_felt252"], + [ + 54, + "core::array::deserialize_array_helper::, core::integer::u8Drop>" + ], + [ + 55, + "core::tuple::DeserializeTupleNext::<(core::integer::u32, core::array::Array::), core::tuple::TupleSplitTupleSize2::>, core::serde::into_felt252_based::SerdeImpl::, core::tuple::DeserializeTupleNext::<(core::array::Array::,), core::tuple::TupleSplitTupleSize1::>, core::array::ArraySerde::, core::integer::u32Drop>, core::tuple::DeserializeTupleBaseTuple, core::array::ArrayDrop::>, core::integer::u32Drop>::deserialize" + ], + [ + 56, + "core::array::deserialize_array_helper::, core::integer::u16Drop>" + ], + [ + 57, + "core::tuple::DeserializeTupleNext::<(core::integer::u16, core::array::Array::), core::tuple::TupleSplitTupleSize2::>, core::serde::into_felt252_based::SerdeImpl::, core::tuple::DeserializeTupleNext::<(core::array::Array::,), core::tuple::TupleSplitTupleSize1::>, core::array::ArraySerde::, core::integer::u16Drop>, core::tuple::DeserializeTupleBaseTuple, core::array::ArrayDrop::>, core::integer::u16Drop>::deserialize" + ], + [ + 58, + "core::tuple::DeserializeTupleNext::<(core::integer::u16, core::integer::u32, core::integer::u64), core::tuple::TupleSplitTupleSize3::, core::serde::into_felt252_based::SerdeImpl::, core::tuple::DeserializeTupleNext::<(core::integer::u32, core::integer::u64), core::tuple::TupleSplitTupleSize2::, core::serde::into_felt252_based::SerdeImpl::, core::tuple::DeserializeTupleNext::<(core::integer::u64,), core::tuple::TupleSplitTupleSize1::, core::serde::into_felt252_based::SerdeImpl::, core::tuple::DeserializeTupleBaseTuple, core::integer::u64Drop>, core::integer::u32Drop>, core::integer::u16Drop>::deserialize" + ], + [ + 59, + "core::array::deserialize_array_helper::, core::integer::u32Drop>" + ], + [ + 60, + "core::tuple::DeserializeTupleNext::<[core::integer::u16; 3], core::fixed_size_array::TupleSplitFixedSizedArraySized3::, core::serde::into_felt252_based::SerdeImpl::, core::tuple::DeserializeTupleNext::<[core::integer::u16; 2], core::fixed_size_array::TupleSplitFixedSizedArraySized2::, core::serde::into_felt252_based::SerdeImpl::, core::tuple::DeserializeTupleNext::<[core::integer::u16; 1], core::fixed_size_array::TupleSplitFixedSizedArraySized1::, core::serde::into_felt252_based::SerdeImpl::, core::tuple::DeserializeTupleBaseFixedSizedArray::, core::integer::u16Drop>, core::integer::u16Drop>, core::integer::u16Drop>::deserialize" + ] + ] + }, + "contract_class_version": "0.1.0", + "entry_points_by_type": { + "EXTERNAL": [ + { + "selector": "0x462b1b2d0b30d80be98c4aec16f07b72212bbef41ac45680ed94e954a6aa9", + "function_idx": 3 + }, + { + "selector": "0x1feb29d0d6e8c4ba7a71db4cdaa24898ddd8bb350e724f844145997afee9c9", + "function_idx": 21 + }, + { + "selector": "0x78664aa9f94155a6e6acf3aa0add2ce6fcf36349488671af774d676363e0c7", + "function_idx": 1 + }, + { + "selector": "0xc5c709a3ffed9c578aa6ee00ce77e78a490d2c8aa971d1f6ccdd662da6f17b", + "function_idx": 16 + }, + { + "selector": "0xe1eafdb08801cfc555a49e25dabfd7aa4ed7b2dd5c7e2c5a6930eac6d1b54c", + "function_idx": 19 + }, + { + "selector": "0x106f418ef7e2ea39027bcde47d5f0a54ed68fe34aa69b24c3a162def52a841b", + "function_idx": 14 + }, + { + "selector": "0x11fdea672ded06956bdd64d89fd111661735e88595f88c1199f648fe3c2dd15", + "function_idx": 22 + }, + { + "selector": "0x126587e6b203b756642ff0bd9f92e84ef609cf2a02b516fbf2d94f36a73b83e", + "function_idx": 7 + }, + { + "selector": "0x1303ef00936936490ad20afec7fbe2bf74669665b2a2249945ff561debad733", + "function_idx": 8 + }, + { + "selector": "0x13d3b1aae5fa65a483db7c67c98dca6aac27353970caa114d112c4b6de8ec73", + "function_idx": 12 + }, + { + "selector": "0x145f0cd3e37db4233ce4d6b84935d9b32387d72eb53713e78e2ec56cc6fdf5d", + "function_idx": 18 + }, + { + "selector": "0x147c0b24e5bfb625956c5a44d3fc84d509b789bf2e5335365c03b9be2d757d3", + "function_idx": 17 + }, + { + "selector": "0x1785e0d94a5ba07a47865d69afdf914dad65466b25d38cb78cb741fac447ba8", + "function_idx": 24 + }, + { + "selector": "0x1c7564da2ac3c0ee05570d52004d51604c5315131cafd67610b2e629bf4fd7c", + "function_idx": 15 + }, + { + "selector": "0x1d39fadfe7e2621092d7d0a467672f0eb0ad03c5926829d40ceefa7bcd10b80", + "function_idx": 25 + }, + { + "selector": "0x1ff9f9a5d04b7955383039cae30cd6c0d1cb3c0e04a579f393a7ac9cf39c7b3", + "function_idx": 5 + }, + { + "selector": "0x208b88c80fabc1b03f3c78a09aaa1a693a5bb1366271a1c6b9e7971aa325116", + "function_idx": 20 + }, + { + "selector": "0x21b020335325fcef65a03b765adaefcc9fb4eccceb8e0293516736095e8cceb", + "function_idx": 2 + }, + { + "selector": "0x242ba12536f9ac18cffcedd5588e2922a17c0f453a064a64e62df6d3f6f8dce", + "function_idx": 4 + }, + { + "selector": "0x265cf503e1b425e68026a65eb872306eb863eb6ba526cddc50fd44d00d8e180", + "function_idx": 0 + }, + { + "selector": "0x29a68d48876fa0d864a616e212175e42824be1cdcb35bcd2e05b302042e491f", + "function_idx": 9 + }, + { + "selector": "0x31c18e21d8e75a5f2f6f1330c56da1f8b2fd93568002ef0d15bcce9c5644c2b", + "function_idx": 11 + }, + { + "selector": "0x36d666ce4d4c894d5dcb35a06bb6ca9659358f5e9d7fe07519e7531ef44a6e2", + "function_idx": 26 + }, + { + "selector": "0x36e432757f2854d382b66d849ed9a3edf35fdbf55a7c83296142cf7b89b0573", + "function_idx": 13 + }, + { + "selector": "0x3bb1cf9f6b291f5c63c8ecbfcf8cd522642fdc7ec277c2fddb7dc069cd05ced", + "function_idx": 23 + }, + { + "selector": "0x3c694eba4d500b140694d8f7da3f85031f4d4827b57da58cb5f2bd1ab74e5ab", + "function_idx": 10 + }, + { + "selector": "0x3dbc7f289caba706d06644803f1db94983f3b8d8af334bfbf346aaa1b711d0c", + "function_idx": 6 + } + ], + "L1_HANDLER": [], + "CONSTRUCTOR": [] + }, + "abi": [ + { + "type": "impl", + "name": "TestOption", + "interface_name": "enums::ITestOption" + }, + { + "type": "enum", + "name": "core::option::Option::", + "variants": [ + { + "name": "Some", + "type": "core::integer::u16" + }, + { + "name": "None", + "type": "()" + } + ] + }, + { + "type": "enum", + "name": "core::option::Option::>", + "variants": [ + { + "name": "Some", + "type": "core::array::Array::" + }, + { + "name": "None", + "type": "()" + } + ] + }, + { + "type": "enum", + "name": "core::option::Option::<[core::integer::u32; 3]>", + "variants": [ + { + "name": "Some", + "type": "[core::integer::u32; 3]" + }, + { + "name": "None", + "type": "()" + } + ] + }, + { + "type": "enum", + "name": "core::option::Option::<(core::integer::u32, core::array::Array::)>", + "variants": [ + { + "name": "Some", + "type": "(core::integer::u32, core::array::Array::)" + }, + { + "name": "None", + "type": "()" + } + ] + }, + { + "type": "enum", + "name": "core::option::Option::>", + "variants": [ + { + "name": "Some", + "type": "core::option::Option::" + }, + { + "name": "None", + "type": "()" + } + ] + }, + { + "type": "enum", + "name": "core::result::Result::", + "variants": [ + { + "name": "Ok", + "type": "core::integer::u8" + }, + { + "name": "Err", + "type": "core::integer::u16" + } + ] + }, + { + "type": "enum", + "name": "core::option::Option::>", + "variants": [ + { + "name": "Some", + "type": "core::result::Result::" + }, + { + "name": "None", + "type": "()" + } + ] + }, + { + "type": "struct", + "name": "enums::Point", + "members": [ + { + "name": "x", + "type": "core::integer::u64" + }, + { + "name": "y", + "type": "core::integer::u32" + } + ] + }, + { + "type": "enum", + "name": "core::option::Option::", + "variants": [ + { + "name": "Some", + "type": "enums::Point" + }, + { + "name": "None", + "type": "()" + } + ] + }, + { + "type": "enum", + "name": "core::result::Result::, core::array::Array::>", + "variants": [ + { + "name": "Ok", + "type": "core::array::Array::" + }, + { + "name": "Err", + "type": "core::array::Array::" + } + ] + }, + { + "type": "enum", + "name": "core::result::Result::<[core::integer::u32; 3], [core::integer::u16; 2]>", + "variants": [ + { + "name": "Ok", + "type": "[core::integer::u32; 3]" + }, + { + "name": "Err", + "type": "[core::integer::u16; 2]" + } + ] + }, + { + "type": "enum", + "name": "core::result::Result::<(core::integer::u32, core::array::Array::), (core::integer::u16, core::array::Array::)>", + "variants": [ + { + "name": "Ok", + "type": "(core::integer::u32, core::array::Array::)" + }, + { + "name": "Err", + "type": "(core::integer::u16, core::array::Array::)" + } + ] + }, + { + "type": "enum", + "name": "core::result::Result::, core::integer::u32>", + "variants": [ + { + "name": "Ok", + "type": "core::result::Result::" + }, + { + "name": "Err", + "type": "core::integer::u32" + } + ] + }, + { + "type": "enum", + "name": "core::option::Option::", + "variants": [ + { + "name": "Some", + "type": "core::integer::u32" + }, + { + "name": "None", + "type": "()" + } + ] + }, + { + "type": "enum", + "name": "core::result::Result::>", + "variants": [ + { + "name": "Ok", + "type": "core::integer::u8" + }, + { + "name": "Err", + "type": "core::option::Option::" + } + ] + }, + { + "type": "enum", + "name": "core::result::Result::", + "variants": [ + { + "name": "Ok", + "type": "core::integer::u8" + }, + { + "name": "Err", + "type": "enums::Point" + } + ] + }, + { + "type": "struct", + "name": "enums::Point2", + "members": [ + { + "name": "thickness", + "type": "core::integer::u64" + }, + { + "name": "location", + "type": "enums::Point" + } + ] + }, + { + "type": "struct", + "name": "enums::Empty", + "members": [] + }, + { + "type": "struct", + "name": "enums::Cat", + "members": [ + { + "name": "age", + "type": "core::integer::u16" + }, + { + "name": "legs", + "type": "(core::integer::u8, core::integer::u16, core::integer::u32, core::integer::u64)" + } + ] + }, + { + "type": "struct", + "name": "core::array::Span::", + "members": [ + { + "name": "snapshot", + "type": "@core::array::Array::" + } + ] + }, + { + "type": "struct", + "name": "enums::Dog", + "members": [ + { + "name": "age", + "type": "core::integer::u16" + }, + { + "name": "colors", + "type": "core::array::Span::" + } + ] + }, + { + "type": "struct", + "name": "enums::Horse", + "members": [ + { + "name": "age", + "type": "core::integer::u16" + }, + { + "name": "legs_color", + "type": "[core::integer::u16; 4]" + } + ] + }, + { + "type": "enum", + "name": "core::option::Option::", + "variants": [ + { + "name": "Some", + "type": "core::integer::u8" + }, + { + "name": "None", + "type": "()" + } + ] + }, + { + "type": "struct", + "name": "enums::Truck", + "members": [ + { + "name": "power", + "type": "core::integer::u32" + }, + { + "name": "turbo", + "type": "core::option::Option::" + } + ] + }, + { + "type": "enum", + "name": "core::result::Result::", + "variants": [ + { + "name": "Ok", + "type": "core::integer::u8" + }, + { + "name": "Err", + "type": "core::integer::u64" + } + ] + }, + { + "type": "struct", + "name": "enums::Destruction", + "members": [ + { + "name": "area", + "type": "core::integer::u128" + }, + { + "name": "res", + "type": "core::result::Result::" + } + ] + }, + { + "type": "interface", + "name": "enums::ITestOption", + "items": [ + { + "type": "function", + "name": "option_bn", + "inputs": [ + { + "name": "x", + "type": "core::option::Option::" + } + ], + "outputs": [ + { + "type": "core::option::Option::" + } + ], + "state_mutability": "view" + }, + { + "type": "function", + "name": "option_array", + "inputs": [ + { + "name": "x", + "type": "core::option::Option::>" + } + ], + "outputs": [ + { + "type": "core::option::Option::>" + } + ], + "state_mutability": "view" + }, + { + "type": "function", + "name": "option_fixed_array", + "inputs": [ + { + "name": "x", + "type": "core::option::Option::<[core::integer::u32; 3]>" + } + ], + "outputs": [ + { + "type": "core::option::Option::<[core::integer::u32; 3]>" + } + ], + "state_mutability": "view" + }, + { + "type": "function", + "name": "option_tuple", + "inputs": [ + { + "name": "x", + "type": "core::option::Option::<(core::integer::u32, core::array::Array::)>" + } + ], + "outputs": [ + { + "type": "core::option::Option::<(core::integer::u32, core::array::Array::)>" + } + ], + "state_mutability": "view" + }, + { + "type": "function", + "name": "option_option_bn", + "inputs": [ + { + "name": "x", + "type": "core::option::Option::>" + } + ], + "outputs": [ + { + "type": "core::option::Option::>" + } + ], + "state_mutability": "view" + }, + { + "type": "function", + "name": "option_result", + "inputs": [ + { + "name": "x", + "type": "core::option::Option::>" + } + ], + "outputs": [ + { + "type": "core::option::Option::>" + } + ], + "state_mutability": "view" + }, + { + "type": "function", + "name": "option_struct", + "inputs": [ + { + "name": "x", + "type": "core::option::Option::" + } + ], + "outputs": [ + { + "type": "core::option::Option::" + } + ], + "state_mutability": "view" + }, + { + "type": "function", + "name": "array_option_bn", + "inputs": [ + { + "name": "x", + "type": "core::array::Array::>" + } + ], + "outputs": [ + { + "type": "core::array::Array::>" + } + ], + "state_mutability": "view" + }, + { + "type": "function", + "name": "write_option_bn", + "inputs": [ + { + "name": "x", + "type": "core::option::Option::" + } + ], + "outputs": [], + "state_mutability": "external" + }, + { + "type": "function", + "name": "option_point", + "inputs": [ + { + "name": "x", + "type": "core::option::Option::" + } + ], + "outputs": [ + { + "type": "core::option::Option::" + } + ], + "state_mutability": "view" + }, + { + "type": "function", + "name": "result_bn", + "inputs": [ + { + "name": "x", + "type": "core::result::Result::" + } + ], + "outputs": [ + { + "type": "core::result::Result::" + } + ], + "state_mutability": "view" + }, + { + "type": "function", + "name": "result_array", + "inputs": [ + { + "name": "x", + "type": "core::result::Result::, core::array::Array::>" + } + ], + "outputs": [ + { + "type": "core::result::Result::, core::array::Array::>" + } + ], + "state_mutability": "view" + }, + { + "type": "function", + "name": "result_fixed_array", + "inputs": [ + { + "name": "x", + "type": "core::result::Result::<[core::integer::u32; 3], [core::integer::u16; 2]>" + } + ], + "outputs": [ + { + "type": "core::result::Result::<[core::integer::u32; 3], [core::integer::u16; 2]>" + } + ], + "state_mutability": "view" + }, + { + "type": "function", + "name": "result_tuple", + "inputs": [ + { + "name": "x", + "type": "core::result::Result::<(core::integer::u32, core::array::Array::), (core::integer::u16, core::array::Array::)>" + } + ], + "outputs": [ + { + "type": "core::result::Result::<(core::integer::u32, core::array::Array::), (core::integer::u16, core::array::Array::)>" + } + ], + "state_mutability": "view" + }, + { + "type": "function", + "name": "result_result_bn", + "inputs": [ + { + "name": "x", + "type": "core::result::Result::, core::integer::u32>" + } + ], + "outputs": [ + { + "type": "core::result::Result::, core::integer::u32>" + } + ], + "state_mutability": "view" + }, + { + "type": "function", + "name": "result_option", + "inputs": [ + { + "name": "x", + "type": "core::result::Result::>" + } + ], + "outputs": [ + { + "type": "core::result::Result::>" + } + ], + "state_mutability": "view" + }, + { + "type": "function", + "name": "result_struct", + "inputs": [ + { + "name": "x", + "type": "core::result::Result::" + } + ], + "outputs": [ + { + "type": "core::result::Result::" + } + ], + "state_mutability": "view" + }, + { + "type": "function", + "name": "write_result_bn", + "inputs": [ + { + "name": "x", + "type": "core::result::Result::" + } + ], + "outputs": [], + "state_mutability": "external" + }, + { + "type": "function", + "name": "struct_point", + "inputs": [ + { + "name": "x", + "type": "enums::Point" + } + ], + "outputs": [ + { + "type": "enums::Point" + } + ], + "state_mutability": "view" + }, + { + "type": "function", + "name": "struct_point2", + "inputs": [ + { + "name": "x", + "type": "enums::Point2" + } + ], + "outputs": [ + { + "type": "enums::Point2" + } + ], + "state_mutability": "view" + }, + { + "type": "function", + "name": "struct_Empty", + "inputs": [ + { + "name": "x", + "type": "enums::Empty" + } + ], + "outputs": [ + { + "type": "enums::Empty" + } + ], + "state_mutability": "view" + }, + { + "type": "function", + "name": "struct_Cat", + "inputs": [ + { + "name": "x", + "type": "enums::Cat" + } + ], + "outputs": [ + { + "type": "enums::Cat" + } + ], + "state_mutability": "view" + }, + { + "type": "function", + "name": "struct_Dog", + "inputs": [ + { + "name": "x", + "type": "enums::Dog" + } + ], + "outputs": [ + { + "type": "enums::Dog" + } + ], + "state_mutability": "view" + }, + { + "type": "function", + "name": "struct_Horse", + "inputs": [ + { + "name": "x", + "type": "enums::Horse" + } + ], + "outputs": [ + { + "type": "enums::Horse" + } + ], + "state_mutability": "view" + }, + { + "type": "function", + "name": "struct_Truck", + "inputs": [ + { + "name": "x", + "type": "enums::Truck" + } + ], + "outputs": [ + { + "type": "enums::Truck" + } + ], + "state_mutability": "view" + }, + { + "type": "function", + "name": "struct_Destruction", + "inputs": [ + { + "name": "x", + "type": "enums::Destruction" + } + ], + "outputs": [ + { + "type": "enums::Destruction" + } + ], + "state_mutability": "view" + }, + { + "type": "function", + "name": "write_struct_point", + "inputs": [ + { + "name": "x", + "type": "enums::Point" + } + ], + "outputs": [], + "state_mutability": "external" + } + ] + }, + { + "type": "event", + "name": "enums::test_enums::Event", + "kind": "enum", + "variants": [] + } + ] +} diff --git a/__mocks__/cairo/cairo2120/enums_test_option.contract_class.json b/__mocks__/cairo/cairo2120/enums_test_option.contract_class.json deleted file mode 100644 index 6043d6882..000000000 --- a/__mocks__/cairo/cairo2120/enums_test_option.contract_class.json +++ /dev/null @@ -1,4894 +0,0 @@ -{ - "sierra_program": [ - "0x1", - "0x7", - "0x0", - "0x2", - "0xc", - "0x0", - "0x3f0", - "0x10", - "0x7c", - "0x52616e6765436865636b", - "0x800000000000000100000000000000000000000000000000", - "0x537472756374", - "0x800000000000000f00000000000000000000000000000001", - "0x0", - "0x16a4c8d7c05909052238a862d8cc3e7975bf05a07b3a69c6b28951083a6d672", - "0x753136", - "0x800000000000000700000000000000000000000000000000", - "0x800000000000000700000000000000000000000000000004", - "0x2ee1e2b1b89f8c495f200e4956278a4d47395fe262f27b52e5865c9524c08c3", - "0x1", - "0x2", - "0x456e756d", - "0x800000000000000700000000000000000000000000000003", - "0x34ba6bae0cf8d1255e30a917ff6107d46826b40196a72d0e7e40774c78e1308", - "0x3", - "0x4", - "0x4172726179", - "0x800000000000000300000000000000000000000000000001", - "0x10", - "0x800000000000000300000000000000000000000000000003", - "0xea899504b4052c27cccf9971daead33001122c7badf30382a469a86d9f8143", - "0x6", - "0xe", - "0x536e617073686f74", - "0x800000000000000700000000000000000000000000000001", - "0x8", - "0x800000000000000700000000000000000000000000000002", - "0x1baeba72e79e9db2587cf44fedb2f3700b2075a5e8e39a562584862c4b71f62", - "0x9", - "0xa", - "0x7", - "0x38bd985835a9a53895c52b1878f7fea1ea86c6c36372a6554306b7deed44be6", - "0xb", - "0xc", - "0x66656c74323532", - "0x556e696e697469616c697a6564", - "0x800000000000000200000000000000000000000000000001", - "0x753332", - "0x753634", - "0x11", - "0x2daa4fab7cd27a2ed3cc28ccfb3cfca70ad3c000028aa10db2f4783fcefd345", - "0x12", - "0x14", - "0x120fbeae2508a96307cd9d3cd58ad37fd8f6a1ee44e75a9df62b5b86ba2ee2a", - "0x15", - "0x16", - "0x3590158452123707463380113690aa6c9c45f48ef55005fd27b035b47348988", - "0x17", - "0x426f78", - "0x370026b31ac236e06160ec5dd0d3f03ae6a16e3a80a7672d579c97014775824", - "0x1a", - "0x32d2062143aba742e856373db8854bb12033d85fbe03e144a91067f9e4d52f3", - "0x1b", - "0x62", - "0x2f99b21e21b1ea68f77345d47bde74e1e6c34d34cf69c71cbefd71b887b142f", - "0x1f", - "0x20", - "0x762af7d47e06fd1456367bdd600ec298e8ca9b72ada03929e234ae0a6974fa", - "0x21", - "0x2c", - "0x172b2d029d59f97d93dd24b7cc98c01ca8efd7bf422afd18e9041d6a1a5c170", - "0x24", - "0x25", - "0x30f87c80a9ff91f3ba0997da70c24279680d81f2429f998f2964b1a555ebb1a", - "0x26", - "0x436f6e7374", - "0x800000000000000000000000000000000000000000000002", - "0x4f7574206f6620676173", - "0x4661696c656420746f20646573657269616c697a6520706172616d202331", - "0x496e70757420746f6f206c6f6e6720666f7220617267756d656e7473", - "0x75313238", - "0x7538", - "0x3be6f13b1eeea8f6d4a3f8f94ff73e9fcdb11e0fc6bbda219a39d7ee87174b2", - "0x39f4bddbd30d58053c5c0e4cf215fd40c2ff6254027e1ca82d99dfb9352890f", - "0x2b", - "0x2d", - "0xee6bdef6928642145ee888437aa85c8de49c7818f4182a14a2a976e754de1", - "0x3b9ddf97bd58cc7301a2107c3eabad82196f38221c880cd3645d07c3aac1422", - "0x29f6621519cd76912cfece1d674f3b588713e5ed5f584eaae76037bcf225363", - "0x30", - "0x2b87e8e624ece2f0cf85d181387988b18f6983045a9920dc64764db7b704649", - "0x31", - "0x800000000000000700000000000000000000000000000005", - "0x1ca0859cc72336b50627b89194f06980da93ce94909d112cdc3a765a051f732", - "0x33", - "0x25f9ad655d525bf79405d9b98957b3aa16d86a2669a7252030de6dd582fce7a", - "0x34", - "0x336711c2797eda3aaf8c07c5cf7b92162501924a7090b25482d45dd3a24ddce", - "0x36", - "0x2299982bf733771210a7b4e01be8e699d9c778cc43743de9c81adc233d0c388", - "0x37", - "0x511591274d8813cc87dcfdf4098a0f02d4d964e5252715695c7682ef8ed20c", - "0x38", - "0x39", - "0x1363576206b17df7adacad7f47f20a0558a0e854432cf721f96cbbba837bf12", - "0x3a", - "0x33cff8ca50b98f40b2384a9deb3aa0ab15aaf36318ded0ef9476dabf49bcf59", - "0x3c", - "0x3f17eacf0c93d1c0968ec9606d65005de0d0f783350ed6e8fb034f4e616c4ac", - "0x3d", - "0x2311b30ff91641e03086db219fbd3a339d658feb37d0c9ae93c065185b98998", - "0x3f88fb1329d0c686ba50f926ff79af1c2a252a3594ae051c810b5f9492092f5", - "0x3f", - "0xc3ca175aa1161f5f8990fd287efc42d31a161e1c88dd5023cc11411ad9900e", - "0x40", - "0x19b9ae4ba181a54f9e7af894a81b44a60aea4c9803939708d6cc212759ee94c", - "0x3bc34212d2c42e27596fdda5c1c673422d928dc4f40e1de8c35217d1981d935", - "0x42", - "0x351e72f2e3f133f52891974fa3d211b3e579625b5b15c8d1d0c9db2a1a7d407", - "0x43", - "0x35b26fd36f40720f06990724c28a5d888642e82c23b388420091777a9116b14", - "0xb421937e7950e3d75405b25a18ee821a663b39dd8b4d0e442095780f90f986", - "0x45", - "0x178d6d12f3b1afb72a326e7a35eaad41bcdbd002be501b5e1e9b1b79a05dbf3", - "0x46", - "0x3d020cc8ad67767402690d2175f46e5a6c4bdfeffd34713354e19f97b494da0", - "0x49", - "0x88925dd451d220784df2998389085d5ae6b56c2d22d1d8e151ec9c2e0cd25", - "0x4b", - "0xb72e72e5a63caf9f10f3902eec9557b15660c00d245f7c5ae7157423fff53c", - "0x4c", - "0x325d56ed86ca2c3a275a749ddb80c013c5d9851885ab349d2ad8510170b42d9", - "0x4f", - "0x4e", - "0x185d9b297d752b92e36e7514f2af6ce91e23bd34be2b075b970d46b0f9a3d23", - "0x50", - "0x18c63d3eac6cdb8f2492ed432412542dce6b4ae731500e7570a41938aa68948", - "0x52", - "0x18881bb414cda2bb967493bb34bf6902e0f92d7dcdc5ed5c30dc67c9a90fcff", - "0x54", - "0x19f021de67a29d8733a584446c0a0c78f9c6bce2583e229f9a4bccd8d724d72", - "0x56", - "0x22493ed12362cd6b4b118733fccc20ee3faf6d6546367fcd35d931dc90833e3", - "0x57", - "0x3a6cffe2561983a3685045e4600085227508651a8efcafe6a1bc1f70802e054", - "0x2ae68393e5819b8dee9845b8c1ec8dbedfba9bbd68e7253e8f59d867460c0dc", - "0x59", - "0x5b", - "0x3fe244a46c1456c4718ef097f5cdd18149ca294c5bdffdd22b7e6f9540cf113", - "0x5c", - "0x3e914fa4847734da785313048196c36310337c36df9be4ce4ff971d838f07c1", - "0x5e", - "0x3850676e95044bcafdab66d09d52fbdc6c05024f661372f2c15e33951a241de", - "0x5f", - "0x141d61b4bf9a6647000e805a7f949d847cbe9ca009321b7a63424d9742a8912", - "0x1df5abf484ff46fcefc4c239b5c351ce9c47777b7e1f26b505f9e9bc5823115", - "0x154df121ec994a15880fd221c3fbaacd125f6c4807302f13f9a52cf62f5ce4e", - "0x33c2f5a7e0fffa93f1a29733d5927eb7ad69162f4de1c4fa05018aba200144e", - "0x63", - "0x183950d5e3273ec891c75fa886c8de01eadccb5ff4ca417397ccb80471b8bea", - "0x67", - "0x15c0a3cc422e9cead14b117474a7e040bc249953f092f790d2238c03d2d4a0b", - "0x68", - "0x107c4c114adf6d3b44474301d2cdc063e750f40c4d85ae2bcb9d2c5609cf970", - "0x74584e9f10ffb1a40aa5a3582e203f6758defc4a497d1a2d5a89f274a320e9", - "0x6b", - "0x34c1a4ee6ef3ec231b7e21635f0ab0f5e73f747e42beb02d65fc54c8e0e0575", - "0x6d", - "0x7613c7135b064a210243c4d523d64a3e8bb1803abc97c950d43a9c0340ac10", - "0x70", - "0x47d50ab84c14028e58f88d9f15b2547ac4d9e3ddb79a76ff9dbd8f98b6374", - "0x71", - "0x4275696c74696e436f737473", - "0x53797374656d", - "0x9931c641b913035ae674b400b61a51476d506bbe8bba2ff8a6272790aba9e6", - "0x73", - "0x4e6f6e5a65726f", - "0x4761734275696c74696e", - "0x1c2", - "0x7265766f6b655f61705f747261636b696e67", - "0x77697468647261775f676173", - "0x6272616e63685f616c69676e", - "0x7374727563745f6465636f6e737472756374", - "0x61727261795f736e617073686f745f706f705f66726f6e74", - "0x756e626f78", - "0x72656e616d65", - "0x73746f72655f74656d70", - "0x647570", - "0x66656c743235325f69735f7a65726f", - "0x64726f70", - "0x7531365f7472795f66726f6d5f66656c74323532", - "0x72656465706f7369745f676173", - "0x656e756d5f696e6974", - "0x7b", - "0x6a756d70", - "0x79", - "0x636f6e73745f61735f696d6d656469617465", - "0x78", - "0x66656c743235325f737562", - "0x7374727563745f636f6e737472756374", - "0x7a", - "0x66756e6374696f6e5f63616c6c", - "0x18", - "0x77", - "0x76", - "0x6765745f6275696c74696e5f636f737473", - "0x75", - "0x77697468647261775f6761735f616c6c", - "0x61727261795f6e6577", - "0x736e617073686f745f74616b65", - "0x656e61626c655f61705f747261636b696e67", - "0x656e756d5f6d61746368", - "0x7531365f746f5f66656c74323532", - "0x74", - "0x61727261795f617070656e64", - "0x64697361626c655f61705f747261636b696e67", - "0x19", - "0x72", - "0x656e756d5f736e617073686f745f6d61746368", - "0x61727261795f6c656e", - "0x7533325f746f5f66656c74323532", - "0x6e", - "0x1c", - "0x6c", - "0x1d", - "0x6a", - "0x1e", - "0x69", - "0x7374727563745f736e617073686f745f6465636f6e737472756374", - "0x64", - "0x61", - "0x75385f746f5f66656c74323532", - "0x22", - "0x60", - "0x5d", - "0x23", - "0x5a", - "0x7536345f746f5f66656c74323532", - "0x58", - "0x53", - "0x27", - "0x51", - "0x28", - "0x4d", - "0x29", - "0x47", - "0x2a", - "0x44", - "0x7536345f7472795f66726f6d5f66656c74323532", - "0x7533325f7472795f66726f6d5f66656c74323532", - "0x41", - "0x3e", - "0x3b", - "0x2e", - "0x35", - "0x2f", - "0x32", - "0x75313238735f66726f6d5f66656c74323532", - "0x753132385f746f5f66656c74323532", - "0x75385f7472795f66726f6d5f66656c74323532", - "0x13", - "0x616c6c6f635f6c6f63616c", - "0x66696e616c697a655f6c6f63616c73", - "0x73746f72655f6c6f63616c", - "0xd", - "0xf", - "0x5", - "0x1385", - "0xffffffffffffffff", - "0x86", - "0x7d", - "0x48", - "0x8b", - "0x4a", - "0x7f", - "0xfe", - "0xf7", - "0xed", - "0xab", - "0xe7", - "0xd4", - "0xcd", - "0xdd", - "0x103", - "0x18f", - "0x183", - "0x12c", - "0x125", - "0x13a", - "0x188", - "0x17c", - "0x146", - "0x176", - "0x163", - "0x16b", - "0x194", - "0x55", - "0x20b", - "0x204", - "0x1fa", - "0x1b4", - "0x1f4", - "0x1e1", - "0x1da", - "0x1ea", - "0x210", - "0x272", - "0x268", - "0x22c", - "0x262", - "0x24d", - "0x247", - "0x257", - "0x252", - "0x277", - "0x30c", - "0x300", - "0x2a0", - "0x299", - "0x65", - "0x2ae", - "0x305", - "0x2f9", - "0x66", - "0x2ba", - "0x2f3", - "0x2e0", - "0x2d5", - "0x2e8", - "0x311", - "0x384", - "0x378", - "0x6f", - "0x371", - "0x36a", - "0x33a", - "0x364", - "0x35d", - "0x389", - "0x37d", - "0x3f9", - "0x3eb", - "0x3b7", - "0x3b1", - "0x3ab", - "0x3c2", - "0x3f0", - "0x3e4", - "0x3cd", - "0x3df", - "0x3fe", - "0x3f2", - "0x45b", - "0x451", - "0x41a", - "0x44b", - "0x7e", - "0x438", - "0x80", - "0x81", - "0x82", - "0x83", - "0x84", - "0x440", - "0x460", - "0x4b7", - "0x4ad", - "0x47c", - "0x85", - "0x4a7", - "0x492", - "0x49c", - "0x4bc", - "0x53a", - "0x87", - "0x88", - "0x533", - "0x89", - "0x8a", - "0x529", - "0x4dc", - "0x523", - "0x8c", - "0x8d", - "0x4fa", - "0x8e", - "0x50d", - "0x8f", - "0x90", - "0x91", - "0x92", - "0x93", - "0x51c", - "0x53f", - "0x5a1", - "0x94", - "0x95", - "0x597", - "0x55b", - "0x96", - "0x591", - "0x97", - "0x98", - "0x578", - "0x586", - "0x99", - "0x5a6", - "0x62c", - "0x9a", - "0x9b", - "0x625", - "0x9c", - "0x9d", - "0x61b", - "0x5c6", - "0x9e", - "0x615", - "0x9f", - "0xa0", - "0x5e8", - "0x5ff", - "0xa1", - "0x60e", - "0x631", - "0x698", - "0xa2", - "0xa3", - "0x68e", - "0x64d", - "0xa4", - "0x688", - "0xa5", - "0xa6", - "0x673", - "0x668", - "0x67d", - "0x69d", - "0x702", - "0xa7", - "0xa8", - "0x6f8", - "0x6b9", - "0xa9", - "0x6f2", - "0xaa", - "0x6cf", - "0x6e7", - "0xac", - "0x6df", - "0x707", - "0x744", - "0x73a", - "0x723", - "0x735", - "0x749", - "0x7b9", - "0x7ad", - "0xad", - "0x7a7", - "0x7a0", - "0xae", - "0x799", - "0x771", - "0x792", - "0xaf", - "0xb0", - "0xb1", - "0xb2", - "0x7be", - "0x7b2", - "0x811", - "0xb3", - "0xb4", - "0x807", - "0x7da", - "0xb5", - "0x801", - "0xb6", - "0xb7", - "0xb8", - "0x816", - "0x843", - "0x82c", - "0x83e", - "0x848", - "0x89d", - "0xb9", - "0xba", - "0x893", - "0x864", - "0xbb", - "0x88d", - "0xbc", - "0xbd", - "0xbe", - "0xbf", - "0xc0", - "0x8a2", - "0x90d", - "0xc1", - "0xc2", - "0x906", - "0xc3", - "0xc4", - "0x8fc", - "0x8c2", - "0xc5", - "0x8f6", - "0xc6", - "0xc7", - "0xc8", - "0xc9", - "0xca", - "0xcb", - "0xcc", - "0x8ef", - "0x912", - "0x967", - "0xce", - "0x95d", - "0x92e", - "0xcf", - "0x957", - "0xd0", - "0xd1", - "0xd2", - "0xd3", - "0x96c", - "0x9c9", - "0xd5", - "0xd6", - "0x9bf", - "0x988", - "0xd7", - "0x9b9", - "0xd8", - "0xd9", - "0xda", - "0xdb", - "0xdc", - "0x9a6", - "0x9ae", - "0x9ce", - "0xa4e", - "0xa40", - "0xa38", - "0xde", - "0xdf", - "0xa30", - "0x9f4", - "0xe0", - "0xe1", - "0xa29", - "0xe2", - "0xe3", - "0xe4", - "0xe5", - "0xe6", - "0xe8", - "0xe9", - "0xea", - "0xa14", - "0xa1e", - "0xa53", - "0xa47", - "0xa45", - "0xeb", - "0xec", - "0xee", - "0xac5", - "0xaa8", - "0xa99", - "0xef", - "0xf0", - "0xf1", - "0xf2", - "0xa93", - "0xf3", - "0xf4", - "0xa8c", - "0xf5", - "0xf6", - "0xf8", - "0xf9", - "0xfa", - "0xaa1", - "0xfb", - "0xfc", - "0xaba", - "0xfd", - "0xaed", - "0xff", - "0xae3", - "0x100", - "0x101", - "0x102", - "0x104", - "0x105", - "0x106", - "0xb2f", - "0xb2b", - "0xb26", - "0xb21", - "0xb1b", - "0xb15", - "0x107", - "0xb32", - "0xb80", - "0xb64", - "0x108", - "0x109", - "0xb5e", - "0x10a", - "0x10b", - "0xb55", - "0x10c", - "0x10d", - "0x10e", - "0x10f", - "0x110", - "0x111", - "0x112", - "0xb75", - "0x113", - "0xba8", - "0x114", - "0xb9e", - "0x115", - "0x116", - "0xc0f", - "0xbf8", - "0xbf2", - "0xbdd", - "0xbd9", - "0xbd5", - "0x117", - "0x118", - "0x119", - "0xbf5", - "0xbed", - "0xc12", - "0x11a", - "0xc07", - "0x11b", - "0x11c", - "0xc5f", - "0xc38", - "0xc34", - "0x11d", - "0xc30", - "0x11e", - "0xc62", - "0xc56", - "0xc52", - "0xc4e", - "0x11f", - "0xcd6", - "0xc76", - "0x120", - "0x121", - "0x122", - "0x123", - "0xcc3", - "0xca1", - "0xc99", - "0xc91", - "0xcaf", - "0xcca", - "0xcba", - "0x124", - "0xccd", - "0x126", - "0xd0f", - "0x127", - "0x128", - "0xd05", - "0x129", - "0xcf6", - "0xcfe", - "0x12a", - "0x12b", - "0xd63", - "0xd4c", - "0xd48", - "0xd44", - "0xd3f", - "0xd3a", - "0x12d", - "0x12e", - "0xd66", - "0xd5b", - "0x12f", - "0x130", - "0xdf1", - "0xda7", - "0xd9e", - "0xd98", - "0xd91", - "0x131", - "0x132", - "0x133", - "0x134", - "0x135", - "0xdde", - "0x136", - "0xde5", - "0xdd6", - "0x137", - "0x138", - "0x139", - "0xdd0", - "0x13b", - "0x13c", - "0xdc9", - "0x13d", - "0x13e", - "0xe19", - "0x13f", - "0x140", - "0xe0f", - "0x141", - "0x142", - "0x143", - "0xe7b", - "0x144", - "0xe41", - "0xe3b", - "0x145", - "0x147", - "0x148", - "0xe72", - "0xe6e", - "0xe6a", - "0xe65", - "0xe60", - "0x149", - "0x14a", - "0xe7e", - "0xee5", - "0xeae", - "0xea8", - "0xea1", - "0x14b", - "0x14c", - "0x14d", - "0x14e", - "0x14f", - "0xecd", - "0x150", - "0xeda", - "0x151", - "0x152", - "0xed4", - "0x153", - "0x154", - "0xec7", - "0x155", - "0x156", - "0xf36", - "0xf0f", - "0xf09", - "0x157", - "0x158", - "0x159", - "0x15a", - "0xf2d", - "0xf29", - "0xf25", - "0x15b", - "0xf39", - "0xfac", - "0xf5f", - "0xf5b", - "0xf57", - "0x15c", - "0x15d", - "0x15e", - "0xfaf", - "0xfa3", - "0xf9d", - "0xf88", - "0xf84", - "0xf80", - "0x15f", - "0x160", - "0xfa0", - "0xf98", - "0x161", - "0x162", - "0xfee", - "0xfea", - "0xfe5", - "0xfe0", - "0xfda", - "0xfd4", - "0x164", - "0x165", - "0xff1", - "0x166", - "0x102c", - "0x1028", - "0x1021", - "0x101c", - "0x167", - "0x168", - "0x1014", - "0x169", - "0x16a", - "0x16c", - "0x16d", - "0x16e", - "0x102f", - "0x1025", - "0x16f", - "0x170", - "0x171", - "0x1082", - "0x172", - "0x107c", - "0x106c", - "0x173", - "0x174", - "0x175", - "0x1065", - "0x177", - "0x178", - "0x105d", - "0x179", - "0x17a", - "0x17b", - "0x17d", - "0x17e", - "0x17f", - "0x1075", - "0x180", - "0x181", - "0x1088", - "0x182", - "0x10c7", - "0x10c3", - "0x10bc", - "0x10b7", - "0x184", - "0x10af", - "0x185", - "0x186", - "0x187", - "0x189", - "0x10ca", - "0x10c0", - "0x18a", - "0x111c", - "0x1118", - "0x1111", - "0x10fb", - "0x10f6", - "0x10f1", - "0x18b", - "0x18c", - "0x18d", - "0x18e", - "0x1115", - "0x110b", - "0x111f", - "0x190", - "0x116c", - "0x1145", - "0x1141", - "0x113d", - "0x191", - "0x192", - "0x193", - "0x116f", - "0x1163", - "0x115f", - "0x115b", - "0x195", - "0x196", - "0x197", - "0x198", - "0x11b7", - "0x1189", - "0x199", - "0x19a", - "0x19b", - "0x11a7", - "0x119f", - "0x19c", - "0x19d", - "0x11ae", - "0x19e", - "0x120c", - "0x1206", - "0x11f7", - "0x11f0", - "0x11e7", - "0x19f", - "0x1a0", - "0x1a1", - "0x1a2", - "0x11fd", - "0x1a3", - "0x1212", - "0x1258", - "0x122a", - "0x1a4", - "0x1a5", - "0x1a6", - "0x1a7", - "0x1248", - "0x1240", - "0x1a8", - "0x1a9", - "0x124f", - "0x1aa", - "0x1ab", - "0x12ad", - "0x12a7", - "0x1298", - "0x1291", - "0x1288", - "0x1ac", - "0x1ad", - "0x1ae", - "0x1af", - "0x1b0", - "0x129e", - "0x1b1", - "0x1b2", - "0x12b3", - "0x12f5", - "0x12f1", - "0x12ec", - "0x12e7", - "0x12e1", - "0x12db", - "0x1b3", - "0x1b5", - "0x12f8", - "0x1b6", - "0x133a", - "0x130c", - "0x1b7", - "0x1b8", - "0x1b9", - "0x1ba", - "0x132a", - "0x1322", - "0x1bb", - "0x1331", - "0x1bc", - "0x1bd", - "0x137d", - "0x1379", - "0x1374", - "0x136f", - "0x1369", - "0x1363", - "0x1be", - "0x1bf", - "0x1c0", - "0x1380", - "0x1c1", - "0x217", - "0x27e", - "0x318", - "0x390", - "0x405", - "0x467", - "0x4c3", - "0x546", - "0x5ad", - "0x638", - "0x6a4", - "0x70e", - "0x750", - "0x7c5", - "0x81d", - "0x84f", - "0x8a9", - "0x919", - "0x973", - "0x9d5", - "0xa5a", - "0xa5e", - "0xa62", - "0xa66", - "0xad0", - "0xaf6", - "0xb37", - "0xb8b", - "0xbb1", - "0xc17", - "0xc67", - "0xce0", - "0xd18", - "0xd6b", - "0xdfc", - "0xe22", - "0xe83", - "0xef0", - "0xf3e", - "0xfb4", - "0xff6", - "0x1034", - "0x1091", - "0x10cf", - "0x1124", - "0x1174", - "0x117a", - "0x11c1", - "0x121b", - "0x1262", - "0x12bc", - "0x12fd", - "0x1344", - "0xa567", - "0xe0340a0140400c0c02c0c02c0c02c0a0140900c0801c060140400c0200400", - "0xb068190600b04c120440b05c0b058050540d0500b04c120440b0400b03c05", - "0x150341b02c0b02c0a0141500c2002c1f02c0a0141500c1e02c1d0141c00c1b", - "0xb0500b0300b028050240302028020270600b098250202408c0b0880b08405", - "0x2d014150342c02c0c02c0a0141500c0c02c130481102c2b02c2a0140e03429", - "0xd0300b0683208c0b0c40b0c0050540d0bc0b07c0b02805054030440b0b80b", - "0x1a0c82302c3602c35014150343402c1f02c0a0141500c1102c2c02c3301415", - "0x5054030440b0e40b0e0050540d05c0b0500b02805054030500b068320dc0b", - "0x3e014150343d02c130483d02c1a0c82302c3c02c3b014150343a02c1f02c0a", - "0xc0600b1104308c0b1080b104050540d1000b07c0b02805054030440b0fc0b", - "0x2902c3d02c4a0140e0340812408120470301802c4410c460301802c4410c45", - "0x30440b0f40b13c050380d0440b1340b138050380d1340b1300b12c0503803", - "0xc02c0c02c0c02c0a0145400c1102c5302c520140e0345102c1402c500140e", - "0x50700305c0b068190440b1600b15c050380d1580b0300b15405038030300b", - "0x1f02c0a0140e00c1102c5e02c5d0140e0345c02c0c02c5b0140e00c5a02c59", - "0x5038030a40b0500b0300b0f40b028051500308c0b1840b180050540d17c0b", - "0x670140e00c1402c2902c660140e00c1102c6502c640140e0346302c0c02c62", - "0xb1b0050380d0440b0500b1ac050380d0440b1a80b1a4050380d1a00b0a40b", - "0x7202c710140e0340c02c3d02c700140e0341102c6f02c6e0140e0346d02c3d", - "0xb068190b80b0e40b1d4050540d0b80b068190440b1d00b1cc050380d0500b", - "0x2302c7a02c79014150347802c1f02c0a0141500c1102c7602c770141503476", - "0xb1f00b1ec050380d0500b0500b0500b02805024030300b0300b0280503803", - "0x3f02c82014150348102c800141c00c2c02c1a0641102c7f02c7e0140e0347d", - "0x50540d2140b07c0b02805054030440b20c0b210050540d20c0b068190b00b", - "0x3702c130481102c8a02c890140e0341102c6802c880140e0342302c8702c86", - "0xb07c0b02805054030440b22c0b238050540d2340b230050700322c0b06819", - "0x1102c0c02c930140e0341102c7202c920140e0342302c9102c90014150348f", - "0xd0e80b068190e40b068190440b2580b254050380d0440b0dc0b250050380d", - "0xe0342302c9a02c99014150349802c1f02c0a0141500c1102c3a02c9701415", - "0xb0681908c0b2740b270050540d0440b06c0b02805054030440b1f00b26c05", - "0x1f02c0a0141500c1102c4002ca0014150344002c1a0649f02c9e0141c00c3f", - "0xa5020a40140c0600b1104307c0b028050700308c0b28c0b288050540d2840b", - "0x22a41802c1a0c81802c1a2a00b0301802c4410c2302ca702ca60141503402", - "0xb2c81802c0b2c41802c0b2c01802c0b2bc1f02c0b2b8052b4052b0052acaa", - "0xc0dc0b030b8014b7014b60780b02cb20600b02cb5014b40600b02cb30600b", - "0xb2f0bb02c0b2d41e02c0b2d4052e83702c0b2c8b902c0b2c80502c0b2c805", - "0x1002cc10dc0b02cb53000b02cb502c0c0dc0b030b80440b02cbf014be2f40b", - "0xb3200531cc602c0b2c805314c302c0b2c8c402c0b2c80b030c302c0c2e0c2", - "0xb02cce3340b02cbc014cc0300b02cb10dc0b02ccb014ca0dc0b02cc90600b", - "0xb2fc1f02c0b2fc1b02c0b2d41b02c0b3240533c1102c0b2d41b02c0b2c818", - "0xc107c0b02cb53401002cc12e40b02cb10140b02cb10140c30c0b030b829c0b", - "0xb2d4a102c0b32ca302c0b2b8d102c0b32c360400b3041f02c0b2c8340400b", - "0xb23540b02cbf014d40f40b02cd327c0b02cb31000b02cd21000b02cc91000b", - "0xc2e0d902c0b32cd80400b3049d02c0b2b8d702c0b32cd60400b304d502c0b", - "0xb02cae3640b02cc93640b02cb502c0c3640b030b83640b02cb20140c3640b", - "0x3a02c0b2d49802c0b32c9a02c0b2b8db02c0b32cda0400b3041402c0b2c47c", - "0xb21700b02cbf0500b02cd31680b02cb30e40b02cdc0e80b02cd20e80b02cc9", - "0xb32c9602c0b3249602c0b2d4dd02c0b32c3a0400b304390400b3045c02c0b", - "0xc3780b030b83780b02cb20140c3780b030b83780b02ccb0f01002cc12580b", - "0xb2c83702c0b3200537c3d02c0b2c47202c0b32cde02c0b324de02c0b2d40b", - "0xb02cc922c0b02cb523c0b02ccb2440b02cae3840b02ccb3801002cc122c0b", - "0xc02c0b2d4e30400b304e202c0b2c8e202c0b2fc3702c0b34c8d02c0b2cc8b", - "0xae1a00b02cb32280b02ccb2280b02cc92280b02cb53900b02ccb0fc1002cc1", - "0x7202c0b3247202c0b2d42902c0b2d4053942902c0b2c41402c0b2d46802c0b", - "0xd220c0b02cc920c0b02cb52140b02ccb21c0b02cae3980b02ccb1001002cc1", - "0xb304e702c0b2c8e702c0b2fc0c02c0b34c8102c0b2ccd702c0b2c48302c0b", - "0xb02cae1fc0b02ccb1fc0b02cc91fc0b02cb53a40b02ccb3a01002cc110810", - "0x7602c0b3247602c0b2d47802c0b32c7a02c0b2b8eb02c0b32cea0400b3047d", - "0xcb1d00b02cc91d00b02cb53b40b02ccb3b01002cc10b80b02cdc1d80b02cd2", - "0xb32c6f02c0b32c6f02c0b3246f02c0b2d4ef02c0b32cee0400b3047402c0b", - "0x1002cc11a00b02cb21a00b02cb51a00b02cc91a00b02cbf014f1014f01b40b", - "0x3d0400b3046a02c0b2b86a02c0b2cc6a02c0b3246a02c0b2d4f202c0b32c4c", - "0xae18c0b02cb51940b02cae1940b02cb31940b02cc91940b02cb53cc0b02ccb", - "0xb3245e02c0b2d45f02c0b32c6102c0b2b8f402c0b32c4d0400b3046302c0b", - "0xb02cae1700b02cb11700b02cb31700b02cb51780b02cae1780b02cb31780b", - "0x5802c0b2b85802c0b2cc5802c0b3245802c0b2d4f602c0b32cf50400b3045c", - "0xb314c0b02cc914c0b02cb53e00b02ccb3dc1002cc11580b02cae1580b02cb5", - "0xf702c0b32c510400b304053e45102c0b32c5102c0b2d45302c0b2b85302c0b", - "0xb33d40b02cb23d40b02cb53d40b02cc93d40b02cbf1340b02cb51300b02cb5", - "0x530400b304ee02c0b2f04d02c0b32c053e84c02c0b2c4f502c0b2b8f502c0b", - "0xae3a00b02ccb3e01002cc10fc0b02cb20f40b02cc83a80b02cbc3b00b02cbc", - "0xc2e0a302c0b2fc05030a102c0c2e0050304002c0c2e04002c0b32c4202c0b", - "0xb802c0c2840b030b802c0c3440b030b80440b02cb13440b02cb20140c3440b", - "0x9d02c0b2fc9f02c0b2d43d02c0b2c03d02c0b2bcd502c0b2b80b0304002c0c", - "0xc11f00b02cbf02c0c35c0b030b83540b02cb535c0b02cb20140c35c0b030b8", - "0x9802c0c2e0050303a02c0c2e03a02c0b32c3c02c0b2b8e002c0b32c560400b", - "0xb030b802c0c2600b030b836c0b02cb20140c36c0b030b82680b02cbf0140c", - "0x9602c0c2e05a02c0b2d41402c0b2c01402c0b2bc0b0303a02c0c2e00b030db", - "0xb030b802c0c2580b030b80780b02cb13740b02cb20140c3740b030b80140c", - "0xb2fc050308f02c0c2e00b0307202c0c2e0050307202c0c2e0053ec0b030dd", - "0xb030b802c0c23c0b030b80dc0b02cce3840b02cb20140c3840b030b82440b", - "0xc2e0e202c0b2d48d02c0b2d43702c0b2c03702c0b2bce202c0b2b80b030e1", - "0xc3900b030b802c0c2280b030b83900b02cb20140c3900b030b80140c2280b", - "0xb2c805030e602c0c2e08702c0b2fc050308502c0c2e0050308302c0c2e00b", - "0xae3580b02ccb1601002cc10b00b02cb20300b02cc802c0c3980b030b83980b", - "0xb2bce702c0b2b80b0308502c0c2e00b0308302c0c2e03402c0b32c3602c0b", - "0xb80140c1fc0b030b80780b02cb339c0b02cb52040b02cb50300b02cb00300b", - "0xb0307f02c0c2e07d02c0b2fc0b030e902c0c2e0e902c0b2c805030e902c0c", - "0xb02cb20140c3ac0b030b81e80b02cbf0140c1e00b030b80140c1d80b030b8", - "0xc2e02f02c0b32c3102c0b2b8c202c0b32cf60400b3040b030eb02c0c2e0eb", - "0xb02cb20140c3b40b030b80140c1d00b030b802c0c1e00b030b802c0c1d80b", - "0x5030ef02c0c2e0050306f02c0c2e00b0307402c0c2e00b030ed02c0c2e0ed", - "0xb030b802c0c1b40b030b802c0c1bc0b030b80140c1b40b030b83bc0b02cb2", - "0xb3040b030f202c0c2e0f202c0b2c805030f202c0c2e06a02c0b2fc0b030ef", - "0xb20140c3cc0b030b81940b02cbf18c0b02cbf0ac0b02cae3f00b02ccb16810", - "0xb3201802c0b3fc053f81802c0b3f40b030f302c0c2e03d02c0b2d4f302c0b", - "0xb02cc90800b02ccb0880b02cae4000b02ccb1701002cc105c0b02cb20500b", - "0x5030f402c0c2e06102c0b2fc050305f02c0c2e05e02c0b2fc1702c0b2d417", - "0xcb1781002cc14040b02cb502c0c17c0b030b802c0c3d00b030b83d00b02cb2", - "0xf602c0b2c805030f602c0c2e05802c0b2fc5602c0b2fc1002c0b2b90202c0b", - "0xb02cb20140c3e00b030b814c0b02cbf0140c1440b030b802c0c3d80b030b8", - "0x5030f702c0c2e0050304d02c0c2e00b030f802c0c2e00b0305102c0c2e0f8", - "0xb208c0b02cbf02c0b02cbf02c0c3dc0b030b802c0c1340b030b83dc0b02cb2", - "0x3f02c0b2d43d02c0b338e802c0b2c805030e802c0c2e04202c0b2fc2302c0b", - "0xb83800b02cb20140c3800b030b80f00b02cbf0e40b02cbf02c0c3a00b030b8", - "0xd602c0b2c805030d602c0c2e03602c0b2fc050303402c0c2e00b030e002c0c", - "0xb80b80b02cbf02c0c3580b030b802c0c0d00b030b80b00b02cb50300b02cce", - "0xb030c202c0c2e0c202c0b2c805030c202c0c2e03102c0b2fc050302f02c0c", - "0xc3f00b030b83f00b02cb20140c3f00b030b80ac0b02cbf02c0c0bc0b030b8", - "0x1402c0b3390002c0b2c8050310002c0c2e02202c0b2fc050302002c0c2e00b", - "0xb02cb20140c4080b030b80400b02cbf02c0c4000b030b802c0c0800b030b8", - "0x10540811031040300b0140c02c050150402c050140540c0b0310202c0c2e102", - "0x1e031040301b02c110141b02d0402c1002c10014054100b0140c0142005c0c", - "0xb4100b08c0b05c0508c0b4100b07c0b408050150402c05030050880b2f41f", - "0x54100c0600b07805061000310402d0002c1b0150002d0402d0002c2001500", - "0x50780b4100b0780b088050150402d0002c1f014054100b0140c0150102cea", - "0xfc02d0402c2902d02014054100b0140c0142b02ce00a414031040301e02c11", - "0x2e031040302c0440c08c050b00b4100b0b00b080050b00b4100b3f00b05c05", - "0xb4100b0bc0b060053080b4100b4080b400050150402c05030050c40b3582f", - "0xd602d0402cd002c290143602d0402cc202c140143402d0402c2e02d01014d0", - "0xb0500b3f0050150402c05030050145a02c050ac053600b4100b0500b08805", - "0xb4100b3680b050050e40b4100b0c40b404053680b4100b4080b4000501504", - "0xb4080b400050150402c2b02cfc014054100b0140c014054180b0142b0143a", - "0x54180b0142b0143a02d0402c3c02c140143902d0402c1102d010143c02d04", - "0xe04000c0bc053800b4100b0142e014054100b4040b0b0050150402c0503005", - "0x5030050fc0b28c054100c38c0b0780538c0b4100b38c0b0800538c0b4100b", - "0xb4100b1080b308051080b4100b014310144002d0402d0202d00014054100b", - "0xd602d0402ce802c290143602d0402c4002c140143402d0402c1102d01014e8", - "0x10402c05030053b80b1b4ec3a80c4100c3600b044053600b4100b0780b08805", - "0x50d8050150402cd602c34014054100b3b00b340050150402cea02cfc01405", - "0xb0d80b050050d00b4100b0d00b404050f40b4100b1300b358051300b4100b", - "0x3d030360d01102c3d02d0402c3d02cda0140c02d0402c0c02cd80143602d04", - "0xb1340b0e8051340b4100b01439014054100b3b80b3f0050150402c0503005", - "0x50150402c050300514c510309d3dcf5031040304d0d8340403c0144d02d04", - "0x50fc050150402c5602c34014581580c4100b3580b38c053e00b4100b014e0", - "0xb3dc0b400050150402c05030051680b398f602d040305802c40014054100b", - "0xb4100b014ea0145f02d0402c5e02ce80145e02d0402cf602c420145c02d04", - "0x10402c5f3d00c3b0053d00b4100b184f8030ec0146102d0402c6102c2001461", - "0x5014e102c050ac053cc0b4100b18c0b3b8051940b4100b1700b0500518c0b", - "0x10402c050b8051a00b4100b3dc0b400050150402c5a02c4c014054100b0140c", - "0x10402c6802c14014f202d0402c6a3e00c3b0051a80b4100b1a80b080051a80b", - "0x6f1b40c4100b3cc0b134050150402c050f4053cc0b4100b3c80b3b8051940b", - "0x530147202d0402cef02c51014ef02d0402c6f02cf7014054100b1b40b3d405", - "0xb360051940b4100b1940b050053d40b4100b3d40b404051d00b4100b1c80b", - "0x54100b0140c01474030653d41102c7402d0402c7402cda0140c02d0402c0c", - "0x140150702d0402c5102d01014ed02d0402c5302d00014054100b3580b0d005", - "0x54100b0fc0b0b0050150402c05030050150802c050ac051d80b4100b3b40b", - "0x140147802d0402c1102d010150902d0402d0202d00014054100b0780b3f005", - "0x54100b0880b3f0050150402c05030050150a02c050ac051e80b4100b4240b", - "0x50e80b4100b3ac0b050050e40b4100b0440b404053ac0b4100b4080b40005", - "0xb358051f40b4100b014580147a02d0402c3a02c560147802d0402c3902cf8", - "0xc02cd80147a02d0402c7a02c140147802d0402c7802d010147c02d0402c7d", - "0x50150402c05030051f00c1e8780440b1f00b4100b1f00b368050300b4100b", - "0xb0500541c0b4100b05c0b404051fc0b4100b0800b400050150402c1002cf6", - "0xb41c0b404052040b4100b3a40b358053a40b4100b0145a0147602d0402c7f", - "0x10402c8102cda0140c02d0402c0c02cd80147602d0402c7602c140150702d04", - "0x10b40811031040300b0140c02c050150402c05014052040c1d9070440b2040b", - "0x10202d0402d0202c140141102d0402c1102d01014054100b0140c0142005c0c", - "0xc07c0b17c0507c1e06c104100b0410204410178050400b4100b0400b17005", - "0x1802cf4014184000c4100b0880b184050150402c050300508c0b4302202d04", - "0x2902c110142902d0402d0002c10014054100b0140c0141402d0d4040b4100c", - "0xfc02cd0014054100b0ac0b3f0050150402c05030050b00b438fc0ac0c4100c", - "0x2f02d0402c2e02cd60142e02d0402c050d8050150402d0102c63014054100b", - "0x50300b4100b0300b360050780b4100b0780b0500506c0b4100b06c0b40405", - "0x10402c2c02cfc014054100b0140c0142f0301e06c1102c2f02d0402c2f02cda", - "0xc4100c0c41e06c100f0050c40b4100b0c40b0e8050c40b4100b0143901405", - "0x10402d0102c65014d602d0402c05380050150402c05030050d8340310f340c2", - "0xb0140c0143a02d100e40b4100c3680b3cc050150402cd802c63014da3600c", - "0x10402ce002cf2014e002d0402c3c02c6a0143c0e40c4100b0e40b1a00501504", - "0xb4100b0fcd6030ec0143f02d0402c3f02c200143f02d0402c053a80538c0b", - "0xb4100b0e40b1b4051080b4100b38c40030ec014e302d0402ce302c2001440", - "0xe802d0402ce802c6f014d002d0402cd002c14014c202d0402cc202d01014e8", - "0xee02c72014ee3b0ea0410402c423a0d0308113bc051080b4100b1080b3b805", - "0x4c02c740144d02d0402cec02d00014054100b0140c0143d02d111300b4100c", - "0xb1340b050051440b4100b3a80b404050150402cf702c4c014f73d40c4100b", - "0xd6014054100b0140c014054480b0142b014f802d0402cf502cee0145302d04", - "0xb360053b00b4100b3b00b050053a80b4100b3a80b404051580b4100b0f40b", - "0x54100b0140c01456030ec3a81102c5602d0402c5602cda0140c02d0402c0c", - "0xb080053d80b4100b0142e0145802d0402cd002d00014054100b0e80b13005", - "0xb050051440b4100b3080b404051680b4100b3d8d6030ec014f602d0402cf6", - "0xb3d4051785c0310402cf802c4d014f802d0402c5a02cee0145302d0402c58", - "0xb1840b14c051840b4100b17c0b1440517c0b4100b1780b3dc050150402c5c", - "0x10402c0c02cd80145302d0402c5302c140145102d0402c5102d01014f402d04", - "0xb18c050150402c05030053d00c14c510440b3d00b4100b3d00b368050300b", - "0xb18c0b050051940b4100b0d00b4040518c0b4100b0d80b400050150402d01", - "0xb3d8050150402c1402c4c014054100b0140c0140544c0b0142b014f302d04", - "0x10402c1b02d010146a02d0402c6802cd60146802d0402c05160050150402d00", - "0xb4100b1a80b368050300b4100b0300b360050780b4100b0780b0500506c0b", - "0x1b02d01014f202d0402c2302cd6014054100b0140c0146a0301e06c1102c6a", - "0xb3c80b368050300b4100b0300b360050780b4100b0780b0500506c0b4100b", - "0xb400050150402c1002cf6014054100b0140c014f20301e06c1102cf202d04", - "0xb0145a014f302d0402c6d02c140146502d0402c1702d010146d02d0402c20", - "0x10402cf302c140146502d0402c6502d01014ef02d0402c6f02cd60146f02d04", - "0x53bc0c3cc650440b3bc0b4100b3bc0b368050300b4100b0300b360053cc0b", - "0x54100b0140c0142005c0c451020440c4100c02c050300b014054100b01405", - "0x10402c05030050880b4541f0780c4100c06c0b0440506c0b4100b0400b04005", - "0x10002d0402d0002c200150002d0402c2302c170142302d0402c1f02d0201405", - "0x54100b0140c0150102d16015040301802c1e014184000c4100b4000b06c05", - "0x5c0141102d0402c1102d010141402d0402c1e02cf7014054100b4000b07c05", - "0x2c02d04030fc02d07014fc0ac290410402c140440c3b4050500b4100b0500b", - "0x3102d0402c2c02c760142f02d0402d0202d00014054100b0140c0142e02d17", - "0x50d00b4100b0bc0b050053400b4100b0a40b404053080b4100b0ac0b04005", - "0xb0140c014054600b0142b014d602d0402cc202c220143602d0402c3102d09", - "0x53600b4100b4080b400050150402c2b02cf6014054100b0b80b1300501504", - "0xb0140c014054640b0142b0143902d0402cd802c14014da02d0402c2902d01", - "0x3c02d0402c3a4000c0bc050e80b4100b0142e014054100b4040b0b00501504", - "0x50150402c05030053800b468054100c0f00b078050f00b4100b0f00b08005", - "0xb404051000b4100b0fc0b1e0050fc0b4100b01431014e302d0402d0202d00", - "0x1e02c220143602d0402c4002d090143402d0402ce302c14014d002d0402c11", - "0xb3f0050150402c05030053a80b46ce81080c4100c3580b044053580b4100b", - "0xec02d0402c050d8050150402c3602c7a014054100b3a00b340050150402c42", - "0x50d00b4100b0d00b050053400b4100b3400b404053b80b4100b3b00b35805", - "0xb0140c014ee030343401102cee02d0402cee02cda0140c02d0402c0c02cd8", - "0x51300b4100b1300b0e8051300b4100b01439014054100b3a80b3f00501504", - "0x10402c05380050150402c05030053dcf50311c1343d031040304c0d0d00403c", - "0x50150402c050fc050150402c5302c7a014f814c0c4100b0d80b3ac051440b", - "0x53d80b4100b1340b400050150402c05030051600b4745602d04030f802d07", - "0x6102d0402c5f02cf20145f02d0402c5a02c7c0145e1705a0410402c5602c7d", - "0x51940b4100b1780b1f00518c0b4100b3d00b3c8053d00b4100b1700b1f005", - "0xc3b0051a00b4100b1a00b080051a00b4100b014ea014f302d0402c6502cf2", - "0x51b40b4100b18cf2030ec014f202d0402c611a80c3b0051a80b4100b1a051", - "0x51c80b4100b1bc0b3b8053bc0b4100b3d80b050051bc0b4100b3cc6d030ec", - "0xb4100b1340b400050150402c5802c4c014054100b0140c014054780b0142b", - "0x10702d0402ced1440c3b0053b40b4100b3b40b080053b40b4100b0142e01474", - "0xb134050150402c050f4051c80b4100b41c0b3b8053bc0b4100b1d00b05005", - "0x7802c510147802d0402d0902cf7014054100b1d80b3d405424760310402c72", - "0xb3bc0b050050f40b4100b0f40b404053ac0b4100b1e80b14c051e80b4100b", - "0xeb030ef0f41102ceb02d0402ceb02cda0140c02d0402c0c02cd8014ef02d04", - "0xf502d010147d02d0402cf702d00014054100b0d80b1e8050150402c0503005", - "0x50150402c05030050151f02c050ac051fc0b4100b1f40b050051f00b4100b", - "0x1102d01014e902d0402d0202d00014054100b0780b3f0050150402ce002c2c", - "0x50150402c05030050151902c050ac050e40b4100b3a40b050053680b4100b", - "0xb050053680b4100b0440b404052040b4100b4080b400050150402c2202cfc", - "0xb3680b4040520c0b4100b39c0b3580539c0b4100b014580143902d0402c81", - "0x10402c8302cda0140c02d0402c0c02cd80143902d0402c3902c14014da02d04", - "0x2002d00014054100b0400b3d8050150402c050300520c0c0e4da0440b20c0b", - "0x10402c05168051fc0b4100b4800b050051f00b4100b05c0b404054800b4100b", - "0xb4100b1fc0b050051f00b4100b1f00b4040521c0b4100b2140b358052140b", - "0x5014870307f1f01102c8702d0402c8702cda0140c02d0402c0c02cd80147f", - "0x50150402c0503005080170312140811031040300b0140c02c050150402c05", - "0x7f0141002d0402c1002c5c0150202d0402d0202c140141102d0402c1102d01", - "0xb0140c0142302d220880b4100c07c0b3a40507c1e06c104100b0410204410", - "0x5030050500b48d0102d040301802ce7014184000c4100b0880b2040501504", - "0xc0142c02d243f02b031040302902c110142902d0402d0002c10014054100b", - "0x54100b4040b20c050150402cfc02cd0014054100b0ac0b3f0050150402c05", - "0x140141b02d0402c1b02d010142f02d0402c2e02cd60142e02d0402c050d805", - "0x1b0440b0bc0b4100b0bc0b368050300b4100b0300b360050780b4100b0780b", - "0x3a0143102d0402c050e4050150402c2c02cfc014054100b0140c0142f0301e", - "0xb0140c014360d00c494d03080c4100c0c41e06c100f0050c40b4100b0c40b", - "0x54100b3600b20c05368d80310402d0102d20014d602d0402c053800501504", - "0x3c0310402c3902c87014054100b0140c0143a02d260e40b4100c3680b21405", - "0xe00310402ce002ce60143f02d0402ce302cf2014e302d0402c3c02c7c014e0", - "0x53a80b4100b014ea014e802d0402c4202cf20144202d0402c4002c8a01440", - "0xee02d0402c3f3b00c3b0053b00b4100b3a8d6030ec014ea02d0402cea02c20", - "0x3d02d0402ce002ce40144c02d0402ce83b80c3b0053a00b4100b3a00b08005", - "0x50f40b4100b0f40b22c053400b4100b3400b050053080b4100b3080b40405", - "0xc3dc0b1c8053dcf5134104100b1303d340c20448d0144c02d0402c4c02cee", - "0xb1440b1d0053e00b4100b3d40b400050150402c050300514c0b49c5102d04", - "0x10402cf802c14014f602d0402c4d02d01014054100b1600b130051605603104", - "0xb358050150402c05030050152802c050ac051700b4100b1580b3b8051680b", - "0xc02cd8014f502d0402cf502c140144d02d0402c4d02d010145e02d0402c53", - "0x50150402c05030051780c3d44d0440b1780b4100b1780b368050300b4100b", - "0x6102c200146102d0402c050b80517c0b4100b3400b400050150402c3a02c4c", - "0x5f02c14014f602d0402cc202d01014f402d0402c613580c3b0051840b4100b", - "0x6302cf50146518c0c4100b1700b134051700b4100b3d00b3b8051680b4100b", - "0x10402c6802c530146802d0402cf302c51014f302d0402c6502cf7014054100b", - "0xb4100b0300b360051680b4100b1680b050053d80b4100b3d80b404051a80b", - "0x10102c83014054100b0140c0146a0305a3d81102c6a02d0402c6a02cda0140c", - "0x10402cf202c140146d02d0402c3402d01014f202d0402c3602d00014054100b", - "0x10002cf6014054100b0500b130050150402c05030050152902c050ac051bc0b", - "0xb4100b06c0b404051c80b4100b3bc0b358053bc0b4100b01458014054100b", - "0x7202d0402c7202cda0140c02d0402c0c02cd80141e02d0402c1e02c140141b", - "0xb06c0b404051d00b4100b08c0b358050150402c05030051c80c0781b0440b", - "0x10402c7402cda0140c02d0402c0c02cd80141e02d0402c1e02c140141b02d04", - "0x2002d00014054100b0400b3d8050150402c05030051d00c0781b0440b1d00b", - "0x10402c05168051bc0b4100b3b40b050051b40b4100b05c0b404053b40b4100b", - "0xb4100b1bc0b050051b40b4100b1b40b404051d80b4100b41c0b3580541c0b", - "0x5014760306f1b41102c7602d0402c7602cda0140c02d0402c0c02cd80146f", - "0x50150402c0503005080170312a40811031040300b0140c02c050150402c05", - "0x1e06c104100b04011030e20141002d0402c1002c5c0141102d0402c1102d01", - "0xb4100b0780b040050150402c050300508c0b4ac2202d040301f02c8f0141f", - "0x10402c1802cfc014054100b0140c0141402d2c40418031040310002c1101500", - "0xb358050a40b4100b01436014054100b0880b244050150402d0102cd001405", - "0xc02cd80150202d0402d0202c140141b02d0402c1b02d010142b02d0402c29", - "0x50150402c05030050ac0c4081b0440b0ac0b4100b0ac0b368050300b4100b", - "0x1b0403c014fc02d0402cfc02c3a014fc02d0402c050e4050150402c1402cfc", - "0x53080b4100b014e0014054100b0140c014310bc0c4b42e0b00c4100c3f102", - "0x3402cde014054100b0143f014054100b3400b244050d0d00310402c2202ce1", - "0xb3600b080053600b4100b014ea014054100b0140c014d602d2e0d80b4100c", - "0xc0143a02d2f0e40b4100c0d80b100053680b4100b360c2030ec014d802d04", - "0xb3800b3a0053800b4100b0e40b108050f00b4100b0b80b400050150402c05", - "0x10402c3f3680c3b0050fc0b4100b0fc0b080050fc0b4100b014ea014e302d04", - "0x10402c4202cee014e802d0402c3c02c140144202d0402ce31000c3b0051000b", - "0x2e02d00014054100b0e80b130050150402c05030050153002c050ac053a80b", - "0x13102c050ac051300b4100b3680b3b8053b80b4100b3b00b050053b00b4100b", - "0xb050050f40b4100b0b80b400050150402cd602c4c014054100b0140c01405", - "0xb1340b080051340b4100b0142e0144c02d0402cc202cee014ee02d0402c3d", - "0xb3d40b3b8053a00b4100b3b80b050053d40b4100b1344c030ec0144d02d04", - "0x54100b3dc0b3d405144f70310402cea02c4d014054100b0143d014ea02d04", - "0x51580b4100b3e00b14c053e00b4100b14c0b1440514c0b4100b1440b3dc05", - "0xda0140c02d0402c0c02cd8014e802d0402ce802c140142c02d0402c2c02d01", - "0x54100b0880b244050150402c05030051580c3a02c0440b1580b4100b1580b", - "0x51680b4100b1600b050053d80b4100b0bc0b404051600b4100b0c40b40005", - "0x54100b0780b3d8050150402c2302c4c014054100b0140c014054c80b0142b", - "0x140141b02d0402c1b02d010145e02d0402c5c02cd60145c02d0402c0516005", - "0x1b0440b1780b4100b1780b368050300b4100b0300b360054080b4100b4080b", - "0x517c0b4100b0800b400050150402c1002cf6014054100b0140c0145e03102", - "0xb358051840b4100b0145a0145a02d0402c5f02c14014f602d0402c1702d01", - "0xc02cd80145a02d0402c5a02c14014f602d0402cf602d01014f402d0402c61", - "0x50150402c05014053d00c168f60440b3d00b4100b3d00b368050300b4100b", - "0x10402c1002c10014054100b0140c0142005c0c4cd020440c4100c02c050300b", - "0xb07c0b408050150402c05030050880b4d01f0780c4100c06c0b0440506c0b", - "0x10402d0002c1b0150002d0402d0002c200150002d0402c2302c170142302d04", - "0x10402d0002c1f014054100b0140c0150102d35015040301802c1e014184000c", - "0x1402d0402c1402c5c0141102d0402c1102d010141402d0402c1e02cf701405", - "0x5030050b80b4d82c02d04030fc02c96014fc0ac290410402c140440c0dc05", - "0x10402c2b02c100143102d0402c2c02cdd0142f02d0402d0202d00014054100b", - "0xb4100b0c40b4dc050d00b4100b0bc0b050053400b4100b0a40b404053080b", - "0x2e02c4c014054100b0140c014054e00b0142b014d602d0402cc202c2201436", - "0xb4100b0a40b404053600b4100b4080b400050150402c2b02cf6014054100b", - "0x10102c2c014054100b0140c014054e40b0142b0143902d0402cd802c14014da", - "0x10402c3c02c200143c02d0402c3a4000c0bc050e80b4100b0142e014054100b", - "0xb4100b4080b400050150402c05030053800b4e8054100c0f00b078050f00b", - "0x53400b4100b0440b404051000b4100b0fc0b4ec050fc0b4100b01431014e3", - "0x11014d602d0402c1e02c220143602d0402c4002d370143402d0402ce302c14", - "0xd0014054100b1080b3f0050150402c05030053a80b4f0e81080c4100c3580b", - "0x10402cec02cd6014ec02d0402c050d8050150402c3602c98014054100b3a00b", - "0xb4100b0300b360050d00b4100b0d00b050053400b4100b3400b404053b80b", - "0xea02cfc014054100b0140c014ee030343401102cee02d0402cee02cda0140c", - "0xc13034340100f0051300b4100b1300b0e8051300b4100b01439014054100b", - "0x3602c9a0145102d0402c05380050150402c05030053dcf50313d1343d03104", - "0xb4100c3e00b258050150402c050fc050150402c5302c98014f814c0c4100b", - "0xf602d0402cf602c20014f602d0402c053a8050150402c05030051600b4f856", - "0x10402c05030051780b4fc5c02d040305602cdb0145a02d0402cf61440c3b005", - "0xf402d0402c6102c9d0146102d0402c5c02cd90145f02d0402c4d02d0001405", - "0x51940b4100b18c5a030ec0146302d0402c6302c200146302d0402c053a805", - "0x51a80b4100b3cc0b3b8051a00b4100b17c0b050053cc0b4100b3d065030ec", - "0x10402c5e02c42014f202d0402c4d02d00014054100b0140c014055000b0142b", - "0xef02d0402cef02c20014ef02d0402c050b8051bc0b4100b1b40b3a0051b40b", - "0xb4100b3c80b050051d00b4100b1bc72030ec0147202d0402cef1680c3b005", - "0x5802c4c014054100b0140c014055000b0142b0146a02d0402c7402cee01468", - "0xb4100b41c0b0800541c0b4100b0142e014ed02d0402c4d02d00014054100b", - "0xb4100b1d80b3b8051a00b4100b3b40b050051d80b4100b41c51030ec01507", - "0xf7014054100b4240b3d4051e1090310402c6a02c4d014054100b0143d0146a", - "0xb404051f40b4100b3ac0b14c053ac0b4100b1e80b144051e80b4100b1e00b", - "0x7d02cda0140c02d0402c0c02cd80146802d0402c6802c140143d02d0402c3d", - "0x100014054100b0d80b260050150402c05030051f40c1a03d0440b1f40b4100b", - "0x50ac053a40b4100b1f00b050051fc0b4100b3d40b404051f00b4100b3dc0b", - "0x100014054100b0780b3f0050150402ce002c2c014054100b0140c014055040b", - "0x50ac050e40b4100b2040b050053680b4100b0440b404052040b4100b4080b", - "0x539c0b4100b4080b400050150402c2202cfc014054100b0140c014054e40b", - "0xb3580520c0b4100b014580143902d0402ce702c14014da02d0402c1102d01", - "0xc02cd80143902d0402c3902c14014da02d0402cda02d010152002d0402c83", - "0x50150402c05030054800c0e4da0440b4800b4100b4800b368050300b4100b", - "0xb050051fc0b4100b05c0b404052140b4100b0800b400050150402c1002cf6", - "0xb1fc0b404053980b4100b21c0b3580521c0b4100b0145a014e902d0402c85", - "0x10402ce602cda0140c02d0402c0c02cd8014e902d0402ce902c140147f02d04", - "0x14240811031040300b0140c02c050150402c05014053980c3a47f0440b3980b", - "0x1e031040301b02c110141b02d0402c1002c10014054100b0140c0142005c0c", - "0xb4100b08c0b05c0508c0b4100b07c0b408050150402c05030050880b50c1f", - "0x50440b4100b0440b404054040b4100b0780b3dc050600b4100b014d701500", - "0x200141802d0402c1802c9f0150102d0402d0102c5c0150202d0402d0202c14", - "0xc0ac0b510050ac29050104100b400184050204502354054000b4100b4000b", - "0x2f02ca30142f0b80c4100b3f00b284050150402c05030050b00b514fc02d04", - "0xd002c11014d002d0402c2e02c10014054100b0140c014c202d460c40b4100c", - "0x3602cd0014054100b0d00b3f0050150402c05030053580b51c360d00c4100c", - "0xda02d0402cd802cd6014d802d0402c050d8050150402c3102cd1014054100b", - "0x50300b4100b0300b360050a40b4100b0a40b050050500b4100b0500b40405", - "0x10402cd602cfc014054100b0140c014da030290501102cda02d0402cda02cda", - "0xc4100c0e429050100f0050e40b4100b0e40b0e8050e40b4100b0143901405", - "0x3f02cd1014400fc0c4100b0c40b29c050150402c050300538ce0031480f03a", - "0xb3a00b3c8053a00b4100b1080b31805108400310402c4002ccd014054100b", - "0x10402cea3b00c3b0053a80b4100b3a80b080053b00b4100b014e0014ea02d04", - "0xb4100b0f00b050050e80b4100b0e80b404051300b4100b1000b310053b80b", - "0xb3b84c0f03a044bd014ee02d0402cee02cee0144c02d0402c4c02cc30143c", - "0xb400050150402c05030051440b524f702d04030f502c72014f51343d04104", - "0xf802c4d014054100b1580b13005158f80310402cf702c740145302d0402c4d", - "0xb1680b144051680b4100b3d80b3dc050150402c5802cf5014f61600c4100b", - "0x10402c5302c140143d02d0402c3d02d010145e02d0402c5c02c530145c02d04", - "0x51780c14c3d0440b1780b4100b1780b368050300b4100b0300b3600514c0b", - "0x4d02c140143d02d0402c3d02d010145f02d0402c5102cd6014054100b0140c", - "0xc1343d0440b17c0b4100b17c0b368050300b4100b0300b360051340b4100b", - "0xb404051840b4100b38c0b400050150402c3102cd1014054100b0140c0145f", - "0x54100b0140c014055280b0142b0146302d0402c6102c14014f402d0402ce0", - "0xb404051940b4100b0a40b400050150402c2e02cf6014054100b3080b13005", - "0x54100b0140c0140552c0b0142b0146802d0402c6502c14014f302d0402c14", - "0x50a40b4100b0a40b050050500b4100b0500b404051a80b4100b0b00b35805", - "0xb0140c0146a030290501102c6a02d0402c6a02cda0140c02d0402c0c02cd8", - "0xf302d0402c1102d01014f202d0402d0202d00014054100b0880b3f00501504", - "0x1010146f02d0402c6d02cd60146d02d0402c05160051a00b4100b3c80b05005", - "0xb368050300b4100b0300b360051a00b4100b1a00b050053cc0b4100b3cc0b", - "0x50150402c1002cf6014054100b0140c0146f030683cc1102c6f02d0402c6f", - "0x5a0146302d0402cef02c14014f402d0402c1702d01014ef02d0402c2002d00", - "0x6302c14014f402d0402cf402d010147402d0402c7202cd60147202d0402c05", - "0xc18cf40440b1d00b4100b1d00b368050300b4100b0300b3600518c0b4100b", - "0xb0140c0142005c0c531020440c4100c02c050300b014054100b0140501474", - "0x5030050880b5341f0780c4100c06c0b0440506c0b4100b0400b0400501504", - "0x10402d0002c200150002d0402c2302c170142302d0402c1f02d02014054100b", - "0xb0140c0150102d4e015040301802c1e014184000c4100b4000b06c054000b", - "0x14031040301e02c110141e02d0402c1e02c22014054100b4000b07c0501504", - "0xb4100b3f00b05c053f00b4100b0a40b408050150402c05030050ac0b53c29", - "0x5030050c40b5402f0b80c4100c0b011030230142c02d0402c2c02c200142c", - "0xb4100b0b80b404053080b4100b4080b400050150402c2f02cbb014054100b", - "0xc014055440b0142b0143602d0402c1402c220143402d0402cc202c14014d0", - "0x10402c3102d01014d602d0402d0202d00014054100b0500b3f0050150402c05", - "0xb3f0050150402c05030050155202c050ac053680b4100b3580b050053600b", - "0xb0e40b050053600b4100b0440b404050e40b4100b4080b400050150402c2b", - "0x50b8050150402d0102c2c014054100b0140c014055480b0142b014da02d04", - "0x3c02c1e0143c02d0402c3c02c200143c02d0402c3a4000c0bc050e80b4100b", - "0xb0440b4040538c0b4100b4080b400050150402c05030053800b54c054100c", - "0x1040303602c110143602d0402c1e02c220143402d0402ce302c14014d002d04", - "0x10402c4002cd0014054100b0fc0b3f0050150402c05030051080b550400fc0c", - "0x53400b4100b3400b404053a80b4100b3a00b358053a00b4100b0143601405", - "0x1102cea02d0402cea02cda0140c02d0402c0c02cd80143402d0402c3402c14", - "0x53b00b4100b01439014054100b1080b3f0050150402c05030053a80c0d0d0", - "0x5030051343d03155130ee03104030ec0d0d00403c014ec02d0402cec02c3a", - "0xc4100b3dc0b134053dc0b4100b014e0014f502d0402c4c02d00014054100b", - "0x5602d0402cf802c51014f802d0402c5302cf7014054100b1440b3d40514c51", - "0x53d40b4100b3d40b050053b80b4100b3b80b404051600b4100b1580b14c05", - "0xb0140c01458030f53b81102c5802d0402c5802cda0140c02d0402c0c02cd8", - "0xb4100b3d80b050051680b4100b0f40b404053d80b4100b1340b4000501504", - "0xb0780b3f0050150402ce002c2c014054100b0140c014055580b0142b0145c", - "0xb4100b1780b0500517c0b4100b0440b404051780b4100b4080b4000501504", - "0xb4080b400050150402c2202cfc014054100b0140c0140555c0b0142b01461", - "0x10402cd802cf8014da02d0402cf402c14014d802d0402c1102d01014f402d04", - "0x6502d0402c6302cd60146302d0402c05160051840b4100b3680b1580517c0b", - "0x50300b4100b0300b360051840b4100b1840b0500517c0b4100b17c0b40405", - "0x10402c1002cf6014054100b0140c014650306117c1102c6502d0402c6502cda", - "0x5c02d0402cf302c140145a02d0402c1702d01014f302d0402c2002d0001405", - "0x140145a02d0402c5a02d010146a02d0402c6802cd60146802d0402c0516805", - "0x5a0440b1a80b4100b1a80b368050300b4100b0300b360051700b4100b1700b", - "0xc0142005c0c561020440c4100c02c050300b014054100b014050146a0305c", - "0x100440c300050400b4100b0400b170050440b4100b0440b404050150402c05", - "0x10014054100b0140c0142302d590880b4100c07c0b2e40507c1e06c104100b", - "0x50150402c05030050500b569010600c4100c4000b044054000b4100b0780b", - "0x10402c050d8050150402c2202c00014054100b4040b340050150402c1802cfc", - "0xb4100b4080b0500506c0b4100b06c0b404050ac0b4100b0a40b358050a40b", - "0xc0142b0310206c1102c2b02d0402c2b02cda0140c02d0402c0c02cd801502", - "0xb4100b3f00b0e8053f00b4100b01439014054100b0500b3f0050150402c05", - "0x5380050150402c05030050c42f0315b0b82c03104030fc4081b0403c014fc", - "0x10402c050fc050150402cd002c00014343400c4100b0880b418053080b4100b", - "0xb4100b0b80b400050150402c05030053580b5743602d040303402d5c01405", - "0x10402c3a02d5f0143a0e40c4100b3680b57805368360310402c3602d0a014d8", - "0xe30310402c3602d5e014e002d0402c3c02d610143c02d0402c3902d6001405", - "0x51080b4100b1000b3c8051000b4100b0fc0b1f0050150402ce302d620143f", - "0xec014ea02d0402ce83080c3b0053a00b4100b3a00b080053a00b4100b014ea", - "0x51300b4100b3600b050053b80b4100b108ec030ec014ec02d0402ce03a80c", - "0x10402cd602c4c014054100b0140c0140558c0b0142b0143d02d0402cee02cee", - "0x53d40b4100b3d40b080053d40b4100b0142e0144d02d0402c2e02d0001405", - "0x50f40b4100b3dc0b3b8051300b4100b1340b050053dc0b4100b3d4c2030ec", - "0x5302cf7014054100b1440b3d40514c510310402c3d02c4d014054100b0143d", - "0xb0b00b404051600b4100b1580b14c051580b4100b3e00b144053e00b4100b", - "0x10402c5802cda0140c02d0402c0c02cd80144c02d0402c4c02c140142c02d04", - "0x3102d00014054100b0880b000050150402c05030051600c1302c0440b1600b", - "0x16402c050ac051700b4100b3d80b050051680b4100b0bc0b404053d80b4100b", - "0xb01458014054100b0780b3d8050150402c2302c4c014054100b0140c01405", - "0x10402d0202c140141b02d0402c1b02d010145f02d0402c5e02cd60145e02d04", - "0x517c0c4081b0440b17c0b4100b17c0b368050300b4100b0300b360054080b", - "0xb05c0b404051840b4100b0800b400050150402c1002cf6014054100b0140c", - "0xb4100b3d00b358053d00b4100b0145a0145c02d0402c6102c140145a02d04", - "0xc02d0402c0c02cd80145c02d0402c5c02c140145a02d0402c5a02d0101463", - "0xb0140c02c050150402c050140518c0c1705a0440b18c0b4100b18c0b36805", - "0x5c0141102d0402c1102d01014054100b0140c0142005c0c595020440c4100c", - "0x2202d040301f02c960141f0781b0410402c100440c0dc050400b4100b0400b", - "0x18031040310002c110150002d0402c1e02c10014054100b0140c0142302d66", - "0x50150402d0102cd0014054100b0600b3f0050150402c05030050500b59d01", - "0x1b02d010142b02d0402c2902cd60142902d0402c050d8050150402c2202d68", - "0xb0ac0b368050300b4100b0300b360054080b4100b4080b0500506c0b4100b", - "0x50e4050150402c1402cfc014054100b0140c0142b0310206c1102c2b02d04", - "0xc5a42e0b00c4100c3f10206c100f0053f00b4100b3f00b0e8053f00b4100b", - "0x50d0d00310402c2202d05014c202d0402c05380050150402c05030050c42f", - "0xc014d602d6a0d80b4100c0d00b36c050150402c050fc050150402cd002d68", - "0xb3680b274053680b4100b0d80b364053600b4100b0b80b400050150402c05", - "0x10402c3a3080c3b0050e80b4100b0e80b080050e80b4100b014ea0143902d04", - "0x10402ce002cee014e302d0402cd802c14014e002d0402c390f00c3b0050f00b", - "0xb108051000b4100b0b80b400050150402c05030050156b02c050ac050fc0b", - "0xb3a80b080053a80b4100b0142e014e802d0402c4202ce80144202d0402cd6", - "0x4002c14014ee02d0402ce83b00c3b0053b00b4100b3a8c2030ec014ea02d04", - "0xc4100b0fc0b134050150402c050f4050fc0b4100b3b80b3b80538c0b4100b", - "0xf502d0402c4d02c510144d02d0402c3d02cf7014054100b1300b3d4050f44c", - "0x538c0b4100b38c0b050050b00b4100b0b00b404053dc0b4100b3d40b14c05", - "0xb0140c014f7030e30b01102cf702d0402cf702cda0140c02d0402c0c02cd8", - "0x5302d0402c2f02d010145102d0402c3102d00014054100b0880b5a00501504", - "0xb08c0b130050150402c05030050156c02c050ac053e00b4100b1440b05005", - "0x51600b4100b1580b358051580b4100b01458014054100b0780b3d80501504", - "0xda0140c02d0402c0c02cd80150202d0402d0202c140141b02d0402c1b02d01", - "0x54100b0400b3d8050150402c05030051600c4081b0440b1600b4100b1600b", - "0x53e00b4100b3d80b0500514c0b4100b05c0b404053d80b4100b0800b40005", - "0xb0500514c0b4100b14c0b404051700b4100b1680b358051680b4100b0145a", - "0xf814c1102c5c02d0402c5c02cda0140c02d0402c0c02cd8014f802d0402cf8", - "0x503005080170316d40811031040300b0140c02c050150402c05014051700c", - "0x10402c1002c5c0150202d0402d0202c140141102d0402c1102d01014054100b", - "0x2302d700880b4100c07c0b5bc0507c1e06c104100b04102044105b8050400b", - "0xb5cd0102d040301802d72014184000c4100b0880b5c4050150402c0503005", - "0x1743f02b031040302902c110142902d0402d0002c10014054100b0140c01414", - "0xb420050150402cfc02cd0014054100b0ac0b3f0050150402c05030050b00b", - "0x10402c1b02d010142f02d0402c2e02cd60142e02d0402c050d8050150402d01", - "0xb4100b0bc0b368050300b4100b0300b360050780b4100b0780b0500506c0b", - "0x10402c050e4050150402c2c02cfc014054100b0140c0142f0301e06c1102c2f", - "0x360d00c5d4d03080c4100c0c41e06c100f0050c40b4100b0c40b0e8050c40b", - "0xb42005368d80310402d0102d76014d602d0402c05380050150402c0503005", - "0xd002d00014054100b0140c0143a02d780e40b4100c3680b5dc050150402cd8", - "0xe302cf2014e302d0402ce002c6a014e00e40c4100b0e40b1a0050f00b4100b", - "0xb100d6030ec0144002d0402c4002c200144002d0402c053a8050fc0b4100b", - "0xb0e40b1b4053a00b4100b0fc42030ec0143f02d0402c3f02c200144202d04", - "0x10402cea02c6f0143c02d0402c3c02c14014c202d0402cc202d01014ea02d04", - "0xf80144c3b8ec0410402ce83a83c308113bc053a00b4100b3a00b3b8053a80b", - "0x50ac053d40b4100b1300b5e4051340b4100b3b80b158050f40b4100b3b00b", - "0x3a0310402c3a02d7b014f702d0402cd002d00014054100b0140c014055e80b", - "0x51580b4100b0142e014f802d0402c5302cf20145302d0402c5102d7c01451", - "0x53e00b4100b3e00b080051600b4100b158d6030ec0145602d0402c5602c20", - "0x53080b4100b3080b404051680b4100b0e80b5f4053d80b4100b3e058030ec", - "0x17f014f602d0402cf602cee0145a02d0402c5a02d7e014f702d0402cf702c14", - "0x10402c5e02c560143d02d0402c5c02cf80145f1785c0410402cf6168f730811", - "0xb0140c014f402d801840b4100c3d40b1c8053d40b4100b17c0b5e4051340b", - "0x10402cf302c4c014f31940c4100b1840b1d00518c0b4100b1340b4000501504", - "0xf202d0402c6a02cf7014054100b1a00b3d4051a8680310402c6502c4d01405", - "0x50f40b4100b0f40b404051bc0b4100b1b40b14c051b40b4100b3c80b14405", - "0x1102c6f02d0402c6f02cda0140c02d0402c0c02cd80146302d0402c6302c14", - "0xb4100b0f40b404053bc0b4100b3d00b358050150402c05030051bc0c18c3d", - "0xef02d0402cef02cda0140c02d0402c0c02cd80144d02d0402c4d02c140143d", - "0x10402c3602d00014054100b4040b420050150402c05030053bc0c1343d0440b", - "0x50158102c050ac053b40b4100b1c80b050051d00b4100b0d00b404051c80b", - "0xb4100b01458014054100b4000b3d8050150402c1402c4c014054100b0140c", - "0x1e02d0402c1e02c140141b02d0402c1b02d010147602d0402d0702cd601507", - "0x5030051d80c0781b0440b1d80b4100b1d80b368050300b4100b0300b36005", - "0x10402c1e02c140141b02d0402c1b02d010150902d0402c2302cd6014054100b", - "0x54240c0781b0440b4240b4100b4240b368050300b4100b0300b360050780b", - "0xb05c0b404051e00b4100b0800b400050150402c1002cf6014054100b0140c", - "0xb4100b1e80b358051e80b4100b0145a014ed02d0402c7802c140147402d04", - "0xc02d0402c0c02cd8014ed02d0402ced02c140147402d0402c7402d01014eb", - "0xb0140c02c050150402c05014053ac0c3b4740440b3ac0b4100b3ac0b36805", - "0x5c0141102d0402c1102d01014054100b0140c0142005c0c609020440c4100c", - "0x2202d040301f02d840141f0781b0410402c100440c60c050400b4100b0400b", - "0x18031040310002c110150002d0402c1e02c10014054100b0140c0142302d85", - "0x50150402d0102cd0014054100b0600b3f0050150402c05030050500b61901", - "0x1b02d010142b02d0402c2902cd60142902d0402c050d8050150402c2202d87", - "0xb0ac0b368050300b4100b0300b360054080b4100b4080b0500506c0b4100b", - "0x50e4050150402c1402cfc014054100b0140c0142b0310206c1102c2b02d04", - "0xc6202e0b00c4100c3f10206c100f0053f00b4100b3f00b0e8053f00b4100b", - "0x50d0d00310402c2202d89014c202d0402c05380050150402c05030050c42f", - "0xc014d602d8b0d80b4100c0d00b628050150402c050fc050150402cd002d87", - "0xb1f0050e839368104100b0d80b1f4053600b4100b0b80b400050150402c05", - "0xe302cf2014e302d0402c3902c7c014e002d0402c3c02cf20143c02d0402cda", - "0x10402c053a8051080b4100b1000b3c8051000b4100b0e80b1f0050fc0b4100b", - "0xb380ea030ec014ea02d0402ce83080c3b0053a00b4100b3a00b080053a00b", - "0xd802c140144c02d0402c423b80c3b0053b80b4100b0fcec030ec014ec02d04", - "0x50150402c05030050158c02c050ac051340b4100b1300b3b8050f40b4100b", - "0x514c0b4100b3dc0b10805144f70310402cd602d8d014f502d0402c2e02d00", - "0x2e0145802d0402c5602ce80145602d0402c5102c42014f802d0402c5302ce8", - "0xc3b0051680b4100b3d8c2030ec014f602d0402cf602c20014f602d0402c05", - "0xee0143d02d0402cf502c140145e02d0402c581700c3b0051700b4100b3e05a", - "0x5f02cf50146117c0c4100b1340b134050150402c050f4051340b4100b1780b", - "0x10402c6302c530146302d0402cf402c51014f402d0402c6102cf7014054100b", - "0xb4100b0300b360050f40b4100b0f40b050050b00b4100b0b00b404051940b", - "0x2202d87014054100b0140c014650303d0b01102c6502d0402c6502cda0140c", - "0x10402cf302c140146802d0402c2f02d01014f302d0402c3102d00014054100b", - "0x1e02cf6014054100b08c0b130050150402c05030050158e02c050ac051a80b", - "0xb4100b06c0b404051b40b4100b3c80b358053c80b4100b01458014054100b", - "0x6d02d0402c6d02cda0140c02d0402c0c02cd80150202d0402d0202c140141b", - "0x10402c2002d00014054100b0400b3d8050150402c05030051b40c4081b0440b", - "0xef02d0402c05168051a80b4100b1bc0b050051a00b4100b05c0b404051bc0b", - "0x51a80b4100b1a80b050051a00b4100b1a00b404051c80b4100b3bc0b35805", - "0xb01405014720306a1a01102c7202d0402c7202cda0140c02d0402c0c02cd8", - "0xb404050150402c0503005080170318f40811031040300b0140c02c0501504", - "0x11041900141002d0402c1002c5c0150202d0402d0202c140141102d0402c11", - "0x54100b0140c0142302d920880b4100c07c0b6440507c1e06c104100b04102", - "0x10402c05030050500b6550102d040301802d94014184000c4100b0880b64c05", - "0xb0140c0142c02d963f02b031040302902c110142902d0402d0002c1001405", - "0x36014054100b4040b65c050150402cfc02cd0014054100b0ac0b3f00501504", - "0x1e02c140141b02d0402c1b02d010142f02d0402c2e02cd60142e02d0402c05", - "0xc0781b0440b0bc0b4100b0bc0b368050300b4100b0300b360050780b4100b", - "0x3102c3a0143102d0402c050e4050150402c2c02cfc014054100b0140c0142f", - "0x54100b0140c014360d00c660d03080c4100c0c41e06c100f0050c40b4100b", - "0x19a014054100b3600b65c05368d80310402d0102d99014d602d0402c0538005", - "0x870143c02d0402cd002d00014054100b0140c0143a02d9b0e40b4100c3680b", - "0xe60144002d0402c3f02cf20143f02d0402ce002c7c014e33800c4100b0e40b", - "0xea014ea02d0402ce802cf2014e802d0402c4202c8a0144238c0c4100b38c0b", - "0xc3b0053b80b4100b3b0d6030ec014ec02d0402cec02c20014ec02d0402c05", - "0xe40143d02d0402cea1300c3b0053a80b4100b3a80b080051300b4100b100ee", - "0xb22c050f00b4100b0f00b050053080b4100b3080b404051340b4100b38c0b", - "0xf73d4104100b0f44d0f0c20448d0143d02d0402c3d02cee0144d02d0402c4d", - "0x5602d0402c5102d79014f802d0402cf702c560145302d0402cf502cf801451", - "0xb0e80b674051600b4100b3400b400050150402c05030050159c02c050ac05", - "0xb1680b5ec051780b4100b1700b3a0051700b4100b3d80b10805168f603104", - "0x10402c050b8053d00b4100b1840b3c8051840b4100b17c0b5f00517c5a03104", - "0xb17865030ec0146502d0402c633580c3b00518c0b4100b18c0b0800518c0b", - "0xb1680b5f4051a00b4100b3d0f3030ec014f402d0402cf402c20014f302d04", - "0x10402c6a02d7e0145802d0402c5802c14014c202d0402cc202d010146a02d04", - "0xf80146f1b4f20410402c681a858308115fc051a00b4100b1a00b3b8051a80b", - "0xb1c8051580b4100b1bc0b5e4053e00b4100b1b40b1580514c0b4100b3c80b", - "0xb1d0051d00b4100b3e00b400050150402c05030051c80b678ef02d0403056", - "0xb3d405424760310402ced02c4d014054100b41c0b1300541ced0310402cef", - "0xb1e80b14c051e80b4100b1e00b144051e00b4100b4240b3dc050150402c76", - "0x10402c0c02cd80147402d0402c7402c140145302d0402c5302d01014eb02d04", - "0xb358050150402c05030053ac0c1d0530440b3ac0b4100b3ac0b368050300b", - "0xc02cd8014f802d0402cf802c140145302d0402c5302d010147d02d0402c72", - "0x50150402c05030051f40c3e0530440b1f40b4100b1f40b368050300b4100b", - "0xb050051fc0b4100b0d00b404051f00b4100b0d80b400050150402d0102d97", - "0x50150402c1402c4c014054100b0140c0140567c0b0142b014e902d0402c7c", - "0x1b02d01014e702d0402c8102cd60148102d0402c05160050150402d0002cf6", - "0xb39c0b368050300b4100b0300b360050780b4100b0780b0500506c0b4100b", - "0x1010148302d0402c2302cd6014054100b0140c014e70301e06c1102ce702d04", - "0xb368050300b4100b0300b360050780b4100b0780b0500506c0b4100b06c0b", - "0x50150402c1002cf6014054100b0140c014830301e06c1102c8302d0402c83", - "0x5a014e902d0402d2002c140147f02d0402c1702d010152002d0402c2002d00", - "0xe902c140147f02d0402c7f02d010148702d0402c8502cd60148502d0402c05", - "0xc3a47f0440b21c0b4100b21c0b368050300b4100b0300b360053a40b4100b", - "0xb0140c0142005c0c681020440c4100c02c050300b014054100b0140501487", - "0x10402c100440c684050400b4100b0400b170050440b4100b0440b4040501504", - "0x1e02c10014054100b0140c0142302da30880b4100c07c0b6880507c1e06c10", - "0xb3f0050150402c05030050500b691010600c4100c4000b044054000b4100b", - "0x2902d0402c050d8050150402c2202da5014054100b4040b340050150402c18", - "0x54080b4100b4080b0500506c0b4100b06c0b404050ac0b4100b0a40b35805", - "0xb0140c0142b0310206c1102c2b02d0402c2b02cda0140c02d0402c0c02cd8", - "0x53f00b4100b3f00b0e8053f00b4100b01439014054100b0500b3f00501504", - "0x10402c05380050150402c05030050c42f031a60b82c03104030fc4081b0403c", - "0x50150402c050fc050150402cd002da5014343400c4100b0880b69c053080b", - "0x20014d802d0402c053a8050150402c05030053580b6a43602d040303402da8", - "0xb6a83902d040303602cdb014da02d0402cd83080c3b0053600b4100b3600b", - "0x9d014e002d0402c3902cd90143c02d0402c2e02d00014054100b0140c0143a", - "0xda030ec0143f02d0402c3f02c200143f02d0402c053a80538c0b4100b3800b", - "0xb3b8053a00b4100b0f00b050051080b4100b38c40030ec0144002d0402c3f", - "0xec02d0402c2e02d00014054100b0140c014056ac0b0142b014ea02d0402c42", - "0x200143d02d0402c050b8051300b4100b3b80b3a0053b80b4100b0e80b10805", - "0x53d40b4100b1304d030ec0144d02d0402c3d3680c3b0050f40b4100b0f40b", - "0xb0140c014056ac0b0142b014ea02d0402cf502cee014e802d0402cec02c14", - "0xb4100b1440b3c8051440b4100b3580b1f0053dc0b4100b0b80b4000501504", - "0x5602d0402cf83080c3b0053e00b4100b3e00b080053e00b4100b0142e01453", - "0xea02d0402c5802cee014e802d0402cf702c140145802d0402c531580c3b005", - "0xb3dc050150402cf602cf50145a3d80c4100b3a80b134050150402c050f405", - "0x2c02d010145f02d0402c5e02c530145e02d0402c5c02c510145c02d0402c5a", - "0xb17c0b368050300b4100b0300b360053a00b4100b3a00b050050b00b4100b", - "0xb400050150402c2202da5014054100b0140c0145f030e80b01102c5f02d04", - "0xb0142b0146302d0402c6102c14014f402d0402c2f02d010146102d0402c31", - "0x5160050150402c1e02cf6014054100b08c0b130050150402c0503005015ac", - "0xb4080b0500506c0b4100b06c0b404053cc0b4100b1940b358051940b4100b", - "0xf30310206c1102cf302d0402cf302cda0140c02d0402c0c02cd80150202d04", - "0x1702d010146802d0402c2002d00014054100b0400b3d8050150402c0503005", - "0x10402c6a02cd60146a02d0402c051680518c0b4100b1a00b050053d00b4100b", - "0xb4100b0300b3600518c0b4100b18c0b050053d00b4100b3d00b404053c80b", - "0x50300b014054100b01405014f2030633d01102cf202d0402cf202cda0140c", - "0x50440b4100b0440b404050150402c050300508017031ad40811031040300b", - "0xb4100c07c0b6bc0507c1e06c104100b04011031ae0141002d0402c1002c5c", - "0xc4100c4000b044054000b4100b0780b040050150402c050300508c0b6c022", - "0x54100b4040b340050150402c1802cfc014054100b0140c0141402db140418", - "0xb404050ac0b4100b0a40b358050a40b4100b01436014054100b0880b6c805", - "0x2b02cda0140c02d0402c0c02cd80150202d0402d0202c140141b02d0402c1b", - "0x39014054100b0500b3f0050150402c05030050ac0c4081b0440b0ac0b4100b", - "0x1b30b82c03104030fc4081b0403c014fc02d0402cfc02c3a014fc02d0402c05", - "0x343400c4100b0880b6d0053080b4100b014e0014054100b0140c014310bc0c", - "0x53580b6d43602d040303402d0e014054100b0143f014054100b3400b6c805", - "0xda02c9d014da02d0402c3602cd9014d802d0402c2e02d00014054100b0140c", - "0xb0e8c2030ec0143a02d0402c3a02c200143a02d0402c053a8050e40b4100b", - "0xb3800b3b80538c0b4100b3600b050053800b4100b0e43c030ec0143c02d04", - "0xb080051000b4100b0142e014054100b0140c014056d80b0142b0143f02d04", - "0xea02db83a00b4100c3580b6dc051080b4100b100c2030ec0144002d0402c40", - "0xb3c8053b80b4100b3a00b1f0053b00b4100b0b80b400050150402c0503005", - "0x3d1080c3b0050f40b4100b0f40b080050f40b4100b014ea0144c02d0402cee", - "0xf502cee014e302d0402cec02c14014f502d0402c4c1340c3b0051340b4100b", - "0x100014054100b3a80b130050150402c0503005015b602c050ac050fc0b4100b", - "0x42030ec0145102d0402c5102c200145102d0402c050b8053dc0b4100b0b80b", - "0xb0143d0143f02d0402c5302cee014e302d0402cf702c140145302d0402c51", - "0xb4100b1580b3dc050150402cf802cf5014563e00c4100b0fc0b1340501504", - "0x2c02d0402c2c02d010145a02d0402cf602c53014f602d0402c5802c5101458", - "0xb1680b4100b1680b368050300b4100b0300b3600538c0b4100b38c0b05005", - "0xb4100b0c40b400050150402c2202db2014054100b0140c0145a030e30b011", - "0xc014056e40b0142b0145f02d0402c5c02c140145e02d0402c2f02d010145c", - "0x6102d0402c05160050150402c1e02cf6014054100b08c0b130050150402c05", - "0x54080b4100b4080b0500506c0b4100b06c0b404053d00b4100b1840b35805", - "0xb0140c014f40310206c1102cf402d0402cf402cda0140c02d0402c0c02cd8", - "0x5e02d0402c1702d010146302d0402c2002d00014054100b0400b3d80501504", - "0x101014f302d0402c6502cd60146502d0402c051680517c0b4100b18c0b05005", - "0xb368050300b4100b0300b3600517c0b4100b17c0b050051780b4100b1780b", - "0xc4100c02c050300b014054100b01405014f30305f1781102cf302d0402cf3", - "0xb0400b170050440b4100b0440b404050150402c050300508017031ba40811", - "0x2302dbb0880b4100c07c0b2580507c1e06c104100b04011030370141002d04", - "0x10002c110150002d0402c1e02c10014054100b0880b5a0050150402c0503005", - "0x10102cd0014054100b0600b3f0050150402c05030050500b6f1010600c4100c", - "0xb4100b06c0b404050ac0b4100b0a40b358050a40b4100b01436014054100b", - "0x2b02d0402c2b02cda0140c02d0402c0c02cd80150202d0402d0202c140141b", - "0xb4100b01439014054100b0500b3f0050150402c05030050ac0c4081b0440b", - "0x50c42f031bd0b82c03104030fc4081b0403c014fc02d0402cfc02c3a014fc", - "0xb3400b134053400b4100b014e0014c202d0402c2e02d00014054100b0140c", - "0x10402cd602c51014d602d0402c3602cf7014054100b0d00b3d4050d83403104", - "0xb4100b3080b050050b00b4100b0b00b404053680b4100b3600b14c053600b", - "0xc014da030c20b01102cda02d0402cda02cda0140c02d0402c0c02cd8014c2", - "0xb0e40b050050e80b4100b0bc0b404050e40b4100b0c40b400050150402c05", - "0xb3d8050150402c2302c4c014054100b0140c014056f80b0142b0143c02d04", - "0x10402c1b02d01014e302d0402ce002cd6014e002d0402c05160050150402c1e", - "0xb4100b38c0b368050300b4100b0300b360054080b4100b4080b0500506c0b", - "0xb0800b400050150402c1002cf6014054100b0140c014e30310206c1102ce3", - "0xb4100b0145a0143c02d0402c3f02c140143a02d0402c1702d010143f02d04", - "0x3c02d0402c3c02c140143a02d0402c3a02d010144202d0402c4002cd601440", - "0x5014051080c0f03a0440b1080b4100b1080b368050300b4100b0300b36005", - "0x10014054100b0140c0142005c0c6fd020440c4100c02c050300b014054100b", - "0x50150402c05030050880b7001f0780c4100c06c0b0440506c0b4100b0400b", - "0x1c10150002d0402d0002c200150002d0402c2302c170142302d0402c1f02d02", - "0x1e02d0402c1e02c22014054100b0140c0141402dc24041803104031000440c", - "0xb4100b0ac0b408050150402c05030053f00b70c2b0a40c4100c0780b04405", - "0xc4100c0b818031c40142e02d0402c2e02c200142e02d0402c2c02c170142c", - "0x1040302902c110142902d0402c2902c22014054100b0140c014c202dc50c42f", - "0x10402c3402cd0014054100b3400b3f0050150402c05030050d80b718343400c", - "0xb358053580b4100b01436014054100b4040b588050150402c3102d5f01405", - "0xc02cd80150202d0402d0202c140142f02d0402c2f02d01014d802d0402cd6", - "0x50150402c05030053600c4082f0440b3600b4100b3600b368050300b4100b", - "0x2f0403c014da02d0402cda02c3a014da02d0402c050e4050150402c3602cfc", - "0xe302d0402c3a02d00014054100b0140c014e00f00c71c3a0e40c4100c36902", - "0x54100b1000b72805108400310402c3f02dc90143f02d0402c314040c72005", - "0xea0310402ce802d5e014e81080c4100b1080b428051080b4100b1080b72c05", - "0x51300b4100b3b80b584053b80b4100b3a80b580050150402cec02d5f014ec", - "0xf2014f502d0402c4d02c7c014054100b0f40b588051343d0310402c4202d5e", - "0xc3b00514c0b4100b13051030ec0145102d0402c05380053dc0b4100b3d40b", - "0xb3dc050150402c5602cf5014581580c4100b3e00b134053e00b4100b3dc53", - "0x3902d010145c02d0402c5a02c530145a02d0402cf602c51014f602d0402c58", - "0xb1700b368050300b4100b0300b3600538c0b4100b38c0b050050e40b4100b", - "0xb588050150402c3102d5f014054100b0140c0145c030e30e41102c5c02d04", - "0xb1780b0500517c0b4100b0f00b404051780b4100b3800b400050150402d01", - "0xb588050150402c2902cfc014054100b0140c014057300b0142b0146102d04", - "0xb3d00b0500518c0b4100b3080b404053d00b4100b4080b400050150402d01", - "0xb588050150402cfc02cfc014054100b0140c014057340b0142b0146502d04", - "0xb3cc0b0500518c0b4100b0600b404053cc0b4100b4080b400050150402d01", - "0xb400050150402c1e02cfc014054100b0140c014057340b0142b0146502d04", - "0xb0142b0146502d0402c6802c140146302d0402c1402d010146802d0402d02", - "0x1010146a02d0402d0202d00014054100b0880b3f0050150402c0503005015cd", - "0xf202cd6014f202d0402c05160051940b4100b1a80b0500518c0b4100b0440b", - "0xb0300b360051940b4100b1940b0500518c0b4100b18c0b404051b40b4100b", - "0xf6014054100b0140c0146d0306518c1102c6d02d0402c6d02cda0140c02d04", - "0x6f02c140145f02d0402c1702d010146f02d0402c2002d00014054100b0400b", - "0x10402c5f02d010147202d0402cef02cd6014ef02d0402c05168051840b4100b", - "0xb4100b1c80b368050300b4100b0300b360051840b4100b1840b0500517c0b", - "0xc739020440c4100c02c050300b014054100b01405014720306117c1102c72", - "0x50400b4100b0400b170050440b4100b0440b404050150402c050300508017", - "0xb0140c0142302dd10880b4100c07c0b7400507c1e06c104100b04011031cf", - "0x5030050500b749010600c4100c4000b044054000b4100b0780b0400501504", - "0x50150402c2202dd3014054100b4040b340050150402c1802cfc014054100b", - "0xb0500506c0b4100b06c0b404050ac0b4100b0a40b358050a40b4100b01436", - "0x10206c1102c2b02d0402c2b02cda0140c02d0402c0c02cd80150202d0402d02", - "0xb0e8053f00b4100b01439014054100b0500b3f0050150402c05030050ac0c", - "0x10402c05030050c42f031d40b82c03104030fc4081b0403c014fc02d0402cfc", - "0x54100b3400b74c050d0d00310402c2202dd5014c202d0402c2e02d0001405", - "0x54100b3600b72805360d60310402c3602dd7014360d00c4100b0d00b75805", - "0x3c0e80c4100b0d00b75c050e40b4100b3680b584053680b4100b3580b58005", - "0x3f38c0c4100b3800b578053803c0310402c3c02d0a014054100b0e80b58805", - "0x15e0144202d0402c4002d610144002d0402ce302d60014054100b0fc0b57c05", - "0xb3c8053b00b4100b3a80b1f0050150402ce802d62014ea3a00c4100b0f00b", - "0x3d030ec0143d02d0402c391300c3b0051300b4100b014e0014ee02d0402cec", - "0xf5014513dc0c4100b3d40b134053d40b4100b3b84d030ec0144d02d0402c42", - "0xf802c53014f802d0402c5302c510145302d0402c5102cf7014054100b3dc0b", - "0xb0300b360053080b4100b3080b050050b00b4100b0b00b404051580b4100b", - "0x1d3014054100b0140c01456030c20b01102c5602d0402c5602cda0140c02d04", - "0x5802c14014f602d0402c2f02d010145802d0402c3102d00014054100b0880b", - "0xf6014054100b08c0b130050150402c0503005015d802c050ac051680b4100b", - "0xb06c0b404051780b4100b1700b358051700b4100b01458014054100b0780b", - "0x10402c5e02cda0140c02d0402c0c02cd80150202d0402d0202c140141b02d04", - "0x2002d00014054100b0400b3d8050150402c05030051780c4081b0440b1780b", - "0x10402c05168051680b4100b17c0b050053d80b4100b05c0b4040517c0b4100b", - "0xb4100b1680b050053d80b4100b3d80b404053d00b4100b1840b358051840b", - "0x5014f40305a3d81102cf402d0402cf402cda0140c02d0402c0c02cd80145a", - "0x50150402c050300508017031d940811031040300b0140c02c050150402c05", - "0x54100b0140c0142202dda07c1e031040301b02c110141b02d0402c1002c10", - "0x2302cd60142302d0402c050d8050150402c1f02cd0014054100b0780b3f005", - "0xb0300b360054080b4100b4080b050050440b4100b0440b404054000b4100b", - "0xfc014054100b0140c01500031020441102d0002d0402d0002cda0140c02d04", - "0x102044100f0050600b4100b0600b0e8050600b4100b01439014054100b0880b", - "0x53f00b4100b0500b400050150402c05030050ac29031db051010310403018", - "0xb3dc050150402c2e02cf50142f0b80c4100b0b00b134050b00b4100b014e0", - "0x10102d01014d002d0402cc202c53014c202d0402c3102c510143102d0402c2f", - "0xb3400b368050300b4100b0300b360053f00b4100b3f00b050054040b4100b", - "0x1010143402d0402c2b02d00014054100b0140c014d0030fc4041102cd002d04", - "0x10402c0503005015dc02c050ac053580b4100b0d00b050050d80b4100b0a40b", - "0x50d80b4100b05c0b404053600b4100b0800b400050150402c1002cf601405", - "0xb404050e40b4100b3680b358053680b4100b0145a014d602d0402cd802c14", - "0x3902cda0140c02d0402c0c02cd8014d602d0402cd602c140143602d0402c36", - "0x11031040300b0140c02c050150402c05014050e40c358360440b0e40b4100b", - "0x10402c1002c5c0141102d0402c1102d01014054100b0140c0142005c0c77502", - "0x508c0b7802202d040301f02ddf0141f0781b0410402c100440c778050400b", - "0x1402de140418031040310002c110150002d0402c1e02c10014054100b0140c", - "0xb0880b788050150402d0102cd0014054100b0600b3f0050150402c0503005", - "0x1b02d0402c1b02d010142b02d0402c2902cd60142902d0402c050d80501504", - "0xb0ac0b4100b0ac0b368050300b4100b0300b360054080b4100b4080b05005", - "0xfc02d0402c050e4050150402c1402cfc014054100b0140c0142b0310206c11", - "0xc014310bc0c78c2e0b00c4100c3f10206c100f0053f00b4100b3f00b0e805", - "0xd002de2014343400c4100b0880b790053080b4100b0b80b400050150402c05", - "0xd802de7014d83580c4100b0d80b798050d8340310402c3402de5014054100b", - "0x10402c3402de60143902d0402cda02ce8014da02d0402cd602c42014054100b", - "0xe002cd9014400fce3380114100b0f00b7a0050150402c3a02cbb0143c0e80c", - "0xb3a80b3a0053a80b4100b38c0b108053a00b4100b1080b274051080b4100b", - "0x10402c4002d600144c02d0402cee02cf2014ee02d0402c3f02c7c014ec02d04", - "0xb4100b0e4f5030ec014f502d0402c05380051340b4100b0f40b584050f40b", - "0xb13053030ec0145302d0402cec1440c3b0051440b4100b3a0f7030ec014f7", - "0x5802cf5014f61600c4100b1580b134051580b4100b134f8030ec014f802d04", - "0x10402c5c02c530145c02d0402c5a02c510145a02d0402cf602cf7014054100b", - "0xb4100b0300b360053080b4100b3080b050050b00b4100b0b00b404051780b", - "0x2202de2014054100b0140c0145e030c20b01102c5e02d0402c5e02cda0140c", - "0x10402c5f02c140146102d0402c2f02d010145f02d0402c3102d00014054100b", - "0x1e02cf6014054100b08c0b130050150402c0503005015e902c050ac053d00b", - "0xb4100b06c0b404051940b4100b18c0b3580518c0b4100b01458014054100b", - "0x6502d0402c6502cda0140c02d0402c0c02cd80150202d0402d0202c140141b", - "0x10402c2002d00014054100b0400b3d8050150402c05030051940c4081b0440b", - "0x6802d0402c05168053d00b4100b3cc0b050051840b4100b05c0b404053cc0b", - "0x53d00b4100b3d00b050051840b4100b1840b404051a80b4100b1a00b35805", - "0xb014050146a030f41841102c6a02d0402c6a02cda0140c02d0402c0c02cd8", - "0xb404050150402c050300508017031ea40811031040300b0140c02c0501504", - "0x11041eb0141002d0402c1002c5c0150202d0402d0202c140141102d0402c11", - "0x54100b0140c0142302ded0880b4100c07c0b7b00507c1e06c104100b04102", - "0x10402c05030050500b7c10102d040301802def014184000c4100b0880b7b805", - "0xb0140c0142c02df13f02b031040302902c110142902d0402d0002c1001405", - "0x36014054100b4040b7c8050150402cfc02cd0014054100b0ac0b3f00501504", - "0x1e02c140141b02d0402c1b02d010142f02d0402c2e02cd60142e02d0402c05", - "0xc0781b0440b0bc0b4100b0bc0b368050300b4100b0300b360050780b4100b", - "0x3102c3a0143102d0402c050e4050150402c2c02cfc014054100b0140c0142f", - "0x54100b0140c014360d00c7ccd03080c4100c0c41e06c100f0050c40b4100b", - "0xda3600c4100b3600b7d4050150402cd602df2014d83580c4100b4040b7d005", - "0x50f00b4100b0e40b108050150402c3a02df70143a0e40c4100b3680b7d805", - "0x1f8014054100b38c0b2ec050fce30310402cd802df6014e002d0402c3c02ce8", - "0x8a014e802d0402c4202dfa0144202d0402c4002df9014400fc0c4100b0fc0b", - "0xee030ec014ee02d0402c05380053b00b4100b3a80b3c8053a80b4100b3a00b", - "0xb7e4050f40b4100b3b04c030ec014ec02d0402cec02c200144c02d0402ce0", - "0x4d02c8b014d002d0402cd002c14014c202d0402cc202d010144d02d0402c3f", - "0x513dcf50410402c3d134d030811234050f40b4100b0f40b3b8051340b4100b", - "0x5602d0402cf702d00014054100b0140c014f802dfb14c0b4100c1440b1c805", - "0x5c1680c4100b1600b134050150402cf602c4c014f61600c4100b14c0b1d005", - "0x530145f02d0402c5e02c510145e02d0402c5c02cf7014054100b1680b3d405", - "0xb360051580b4100b1580b050053d40b4100b3d40b404051840b4100b17c0b", - "0x54100b0140c01461030563d41102c6102d0402c6102cda0140c02d0402c0c", - "0x53dc0b4100b3dc0b050053d40b4100b3d40b404053d00b4100b3e00b35805", - "0xb0140c014f4030f73d41102cf402d0402cf402cda0140c02d0402c0c02cd8", - "0x6502d0402c3402d010146302d0402c3602d00014054100b4040b7c80501504", - "0xb0500b130050150402c0503005015fc02c050ac053cc0b4100b18c0b05005", - "0x51a80b4100b1a00b358051a00b4100b01458014054100b4000b3d80501504", - "0xda0140c02d0402c0c02cd80141e02d0402c1e02c140141b02d0402c1b02d01", - "0xb4100b08c0b358050150402c05030051a80c0781b0440b1a80b4100b1a80b", - "0xc02d0402c0c02cd80141e02d0402c1e02c140141b02d0402c1b02d01014f2", - "0xb0400b3d8050150402c05030053c80c0781b0440b3c80b4100b3c80b36805", - "0xb4100b1b40b050051940b4100b05c0b404051b40b4100b0800b4000501504", - "0x51940b4100b1940b404053bc0b4100b1bc0b358051bc0b4100b0145a014f3", - "0x1102cef02d0402cef02cda0140c02d0402c0c02cd8014f302d0402cf302c14", - "0x508017031fd40811031040300b0140c02c050150402c05014053bc0c3cc65", - "0x11031110141002d0402c1002c5c0141102d0402c1102d01014054100b0140c", - "0x50150402c050300508c0b7fc2202d040301f02dfe0141f0781b0410402c10", - "0x54100b0140c0141402e0040418031040310002c110150002d0402c1e02c10", - "0xb01436014054100b0880b804050150402d0102cd0014054100b0600b3f005", - "0x10402d0202c140141b02d0402c1b02d010142b02d0402c2902cd60142902d04", - "0x50ac0c4081b0440b0ac0b4100b0ac0b368050300b4100b0300b360054080b", - "0x10402cfc02c3a014fc02d0402c050e4050150402c1402cfc014054100b0140c", - "0x100014054100b0140c014310bc0c8082e0b00c4100c3f10206c100f0053f00b", - "0xb810050150402cd002e01014343400c4100b0880b80c053080b4100b0b80b", - "0xb108050150402cd802e06014d83580c4100b0d80b814050d8340310402c34", - "0xb2ec050f03a0310402c3402e050143902d0402cda02ce8014da02d0402cd6", - "0xe80144202d0402ce002c42014400fce3380114100b0f00b440050150402c3a", - "0xb108053b00b4100b3a80b3a0053a80b4100b38c0b108053a00b4100b1080b", - "0x3d02ce80143d02d0402c4002c420144c02d0402cee02ce8014ee02d0402c3f", - "0xe83dc0c3b0053dc0b4100b0e4f5030ec014f502d0402c05380051340b4100b", - "0xc3b0053e00b4100b13053030ec0145302d0402cec1440c3b0051440b4100b", - "0xb3dc050150402c5802cf5014f61600c4100b1580b134051580b4100b134f8", - "0x2c02d010145e02d0402c5c02c530145c02d0402c5a02c510145a02d0402cf6", - "0xb1780b368050300b4100b0300b360053080b4100b3080b050050b00b4100b", - "0xb400050150402c2202e01014054100b0140c0145e030c20b01102c5e02d04", - "0xb0142b014f402d0402c5f02c140146102d0402c2f02d010145f02d0402c31", - "0x5160050150402c1e02cf6014054100b08c0b130050150402c050300501607", - "0xb4080b0500506c0b4100b06c0b404051940b4100b18c0b3580518c0b4100b", - "0x650310206c1102c6502d0402c6502cda0140c02d0402c0c02cd80150202d04", - "0x1702d01014f302d0402c2002d00014054100b0400b3d8050150402c0503005", - "0x10402c6802cd60146802d0402c05168053d00b4100b3cc0b050051840b4100b", - "0xb4100b0300b360053d00b4100b3d00b050051840b4100b1840b404051a80b", - "0x50300b014054100b014050146a030f41841102c6a02d0402c6a02cda0140c", - "0x50440b4100b0440b404050150402c0503005080170320840811031040300b", - "0xb4100c07c0b8280507c1e06c104100b04011032090141002d0402c1002c5c", - "0xc4100c4000b044054000b4100b0780b040050150402c050300508c0b82c22", - "0x54100b4040b340050150402c1802cfc014054100b0140c0141402e0c40418", - "0xb404050ac0b4100b0a40b358050a40b4100b01436014054100b0880b83405", - "0x2b02cda0140c02d0402c0c02cd80150202d0402d0202c140141b02d0402c1b", - "0x39014054100b0500b3f0050150402c05030050ac0c4081b0440b0ac0b4100b", - "0x20e0b82c03104030fc4081b0403c014fc02d0402cfc02c3a014fc02d0402c05", - "0x54100b3080b83405340c20310402c2202e0f014054100b0140c014310bc0c", - "0x54100b3580b84805358360310402c3402e11014343400c4100b3400b84005", - "0xec0143902d0402c05380053680b4100b3600b3c8053600b4100b0d80b1f005", - "0x3f014054100b0f00b57c053803c0310402cd002e110143a02d0402cda0e40c", - "0x2e02d00014054100b0140c0143f02e1438c0b4100c3800b84c050150402c05", - "0x10402c053a8053a00b4100b1080b274051080b4100b38c0b364051000b4100b", - "0xb3a0ec030ec014ec02d0402cea0e80c3b0053a80b4100b3a80b080053a80b", - "0x58540b0142b0143d02d0402cee02cee0144c02d0402c4002c14014ee02d04", - "0xb0142e0144d02d0402c2e02d00014054100b0fc0b130050150402c0503005", - "0xb1340b050053dc0b4100b3d43a030ec014f502d0402cf502c20014f502d04", - "0x510310402c3d02c4d014054100b0143d0143d02d0402cf702cee0144c02d04", - "0x51580b4100b3e00b144053e00b4100b14c0b3dc050150402c5102cf501453", - "0xd80144c02d0402c4c02c140142c02d0402c2c02d010145802d0402c5602c53", - "0x10402c05030051600c1302c0440b1600b4100b1600b368050300b4100b0300b", - "0x51680b4100b0bc0b404053d80b4100b0c40b400050150402c2202e0d01405", - "0x10402c2302c4c014054100b0140c014058580b0142b0145c02d0402cf602c14", - "0x1010145f02d0402c5e02cd60145e02d0402c05160050150402c1e02cf601405", - "0xb368050300b4100b0300b360054080b4100b4080b0500506c0b4100b06c0b", - "0x50150402c1002cf6014054100b0140c0145f0310206c1102c5f02d0402c5f", - "0x5a0145c02d0402c6102c140145a02d0402c1702d010146102d0402c2002d00", - "0x5c02c140145a02d0402c5a02d010146302d0402cf402cd6014f402d0402c05", - "0xc1705a0440b18c0b4100b18c0b368050300b4100b0300b360051700b4100b", - "0xb0140c0142005c0c85d020440c4100c02c050300b014054100b0140501463", - "0x5030050880b8601f0780c4100c06c0b0440506c0b4100b0400b0400501504", - "0x10402d0002c200150002d0402c2302c170142302d0402c1f02d02014054100b", - "0xf7014054100b0140c0142b0a414042194041803104031000440c448054000b", - "0xc868053f00b4100b3f00b170050600b4100b0600b404053f00b4100b0780b", - "0x54100b0140c014c202e1c0c40b4100c0bc0b86c050bc2e0b0104100b3f018", - "0x10402c05030053580b874360d00c4100c3400b044053400b4100b0b80b04005", - "0xb87c050150402d0102e1e014054100b0d80b340050150402c3402cfc01405", - "0x10402c2c02d01014da02d0402cd802cd6014d802d0402c050d8050150402c31", - "0xb4100b3680b368050300b4100b0300b360054080b4100b4080b050050b00b", - "0x10402c050e4050150402cd602cfc014054100b0140c014da031020b01102cda", - "0xe33800c8803c0e80c4100c0e5020b0100f0050e40b4100b0e40b0e8050e40b", - "0x5108400310402c3f02e220143f02d0402c314040c884050150402c0503005", - "0x10f014e81080c4100b1080b894051080b4100b1080b890050150402c4002e23", - "0xb89c053b80b4100b3a80b898050150402cec02e1f014ec3a80c4100b3a00b", - "0x4202d0f0144d02d0402c4c0f40c3b0050f40b4100b014e00144c02d0402cee", - "0xb4100c3dc0b8a0050150402c050fc050150402cf502e1e014f73d40c4100b", - "0xb4100b1440b364053e00b4100b0f00b400050150402c050300514c0b8a451", - "0x53d80b4100b3d80b080053d80b4100b014ea0145802d0402c5602c9d01456", - "0x5e02d0402cf802c140145c02d0402c581680c3b0051680b4100b3d84d030ec", - "0xb0f00b400050150402c05030050162a02c050ac0517c0b4100b1700b3b805", - "0xb4100b0142e0146302d0402cf402d61014f402d0402c5302d600146102d04", - "0x10402c633cc0c3b0053cc0b4100b1944d030ec0146502d0402c6502c2001465", - "0x50150402c050f40517c0b4100b1a00b3b8051780b4100b1840b050051a00b", - "0x510146d02d0402cf202cf7014054100b1a80b3d4053c86a0310402c5f02c4d", - "0xb050050e80b4100b0e80b404053bc0b4100b1bc0b14c051bc0b4100b1b40b", - "0x5e0e81102cef02d0402cef02cda0140c02d0402c0c02cd80145e02d0402c5e", - "0xb400050150402c3102e1f014054100b4040b878050150402c05030053bc0c", - "0xb0142b014ed02d0402c7202c140147402d0402ce002d010147202d0402ce3", - "0xb3d8050150402d0102e1e014054100b3080b130050150402c05030050162b", - "0xb41c0b050051d80b4100b0b00b4040541c0b4100b4080b400050150402c2e", - "0xb878050150402c2902e1e014054100b0140c014058b00b0142b0150902d04", - "0x10402c1402d010147802d0402d0202d00014054100b0780b3f0050150402c2b", - "0xb3f0050150402c05030050162d02c050ac053ac0b4100b1e00b050051e80b", - "0xb1f40b050051e80b4100b0440b404051f40b4100b4080b400050150402c22", - "0xb4100b014580150902d0402ceb02c560147602d0402c7a02cf8014eb02d04", - "0x10902d0402d0902c140147602d0402c7602d010147f02d0402c7c02cd60147c", - "0x5030051fc0c424760440b1fc0b4100b1fc0b368050300b4100b0300b36005", - "0xb4100b05c0b404053a40b4100b0800b400050150402c1002cf6014054100b", - "0x539c0b4100b2040b358052040b4100b0145a014ed02d0402ce902c1401474", - "0xda0140c02d0402c0c02cd8014ed02d0402ced02c140147402d0402c7402d01", - "0x10402c0502c200140502d0402c058b80539c0c3b4740440b39c0b4100b39c0b", - "0xb0140b080050140b4100b0150d0140b02c0b02c0b4100b0140b8bc050140b", - "0x502c200140502d0402c058c00502c0b02c0b02d0402c0502e2f0140502d04", - "0xc02c10014054100b0143d0140b02c0b02c0b4100b0140b8bc050140b4100b", - "0xb408050150402c050300505c0b8c5020440c4100c0400b044050400b4100b", - "0x1b02c1b0141b02d0402c1b02c200141b02d0402c2002c170142002d0402d02", - "0x1b02c1f014054100b0140c0141f02e32015040301e02c1e0141e06c0c4100b", - "0xc0150002e3308c22031040301102c110141102d0402c1102c22014054100b", - "0x10402c058d0054040b4100b0600b05c050600b4100b08c0b408050150402c05", - "0xb4100b02c0b050050140b4100b0140b404050a40b4100b0880b3dc050500b", - "0x10102d0402d0102c200141402d0402c1402e350142902d0402c2902c5c0140b", - "0x2f02e380b80b4100c0b00b8dc050b0fc0ac104100b404140a40b015028d805", - "0xb8ecd002d04030c202e3a014c20c40c4100b0b80b8e4050150402c0503005", - "0x23d014d602d0402cd002e3c0143602d0402cfc02d00014054100b0140c01434", - "0x1010143902d0402cda02e3e014da02d0402cd80c40c430053600b4100b3580b", - "0x2b0400b0e40b4100b0e40b8fc050d80b4100b0d80b050050ac0b4100b0ac0b", - "0x50f00b4100b0ac0b404050e80b4100b3f00b400050150402c05030050e436", - "0x2b0143f02d0402c3102c5c014e302d0402c3402e40014e002d0402c3a02c14", - "0xb4100b0ac0b404051000b4100b0bc0b908050150402c05030050164102c05", - "0x503005100fc0ac1002c4002d0402c4002e3f014fc02d0402cfc02c140142b", - "0xb4100b4000b3dc053a00b4100b014310144202d0402c0b02d00014054100b", - "0xe302d0402ce802e40014e002d0402c4202c140143c02d0402c0502d01014ea", - "0xee02d0402cec0fc0c430053b00b4100b38c0b90c050fc0b4100b3a80b17005", - "0x53800b4100b3800b050050f00b4100b0f00b404051300b4100b3b80b8f805", - "0x54100b07c0b0b0050150402c0503005130e00f01002c4c02d0402c4c02e3f", - "0x53d40b4100b1341b0302f0144d02d0402c050b8050f40b4100b0440b3dc05", - "0x100014054100b0140c014f702e4401504030f502c1e014f502d0402cf502c20", - "0xf802e3d014f802d0402c5302e450145302d0402c050c4051440b4100b02c0b", - "0x502d01014f602d0402c5802e3e0145802d0402c560f40c430051580b4100b", - "0xf6144050400b3d80b4100b3d80b8fc051440b4100b1440b050050140b4100b", - "0xb014310145a02d0402c0b02d00014054100b3dc0b0b0050150402c0503005", - "0xb17c0b8f80517c0b4100b1783d0310c0145e02d0402c5c02e430145c02d04", - "0x10402c6102e3f0145a02d0402c5a02c140140502d0402c0502d010146102d04", - "0xb01431014f402d0402c0b02d00014054100b0140c01461168050400b1840b", - "0xb194f30310c014f302d0402c1702cf70146502d0402c6302e430146302d04", - "0x10402cf402c140140502d0402c0502d010146a02d0402c6802e3e0146802d04", - "0x50300b014054100b0143d0146a3d0050400b1a80b4100b1a80b8fc053d00b", - "0x506c0b4100b0300b42c050150402c0503005080170324640811031040300b", - "0x2302d0402d0202d00014054100b0140c0142202e4807c1e031040301b02e47", - "0x54040b4100b0600b274050600b4100b4000b364054000b4100b07c0b92405", - "0x50a40b4100b0780b1b4050500b4100b40410030ec0150102d0402d0102c20", - "0xee0142902d0402c2902c6f0142302d0402c2302c140141102d0402c1102d01", - "0x50b0fc0ac1002c2c3f02b0410402c140a423044113bc050500b4100b0500b", - "0x10402c050c4050b80b4100b4080b400050150402c2202e4a014054100b0140c", - "0x10402c1102d01014c202d0402c3102d130143102d0402c2f0400c92c050bc0b", - "0xc014c20b8110400b3080b4100b3080b930050b80b4100b0b80b050050440b", - "0xd002d0402c05168050150402c0c02e4d014054100b0400b3d4050150402c05", - "0x50800b4100b0800b0500505c0b4100b05c0b404050d00b4100b3400b93805", - "0xc0300b044050300b4100b02c0b040050d02005c1002c3402d0402c3402e4c", - "0x1702c170141702d0402c1102d02014054100b0140c0150202e4f0441003104", - "0x1f02e500781b03104030200140c710050800b4100b0800b080050800b4100b", - "0xb944230880c4100c0400b044050400b4100b0400b088050150402c0503005", - "0x200150102d0402c1802c170141802d0402c2302d02014054100b0140c01500", - "0x54100b0140c0142b02e520a414031040310106c0c710054040b4100b4040b", - "0x10402c05030050b80b94c2c3f00c4100c0880b044050880b4100b0880b08805", - "0x3102d0402c3102c200143102d0402c2f02c170142f02d0402c2c02d0201405", - "0x10402cfc02cf7014054100b0140c0143402e54340c203104030310500c71005", - "0xb3080b404053600b4100b3580b1d8053580b4100b3402907810954050d80b", - "0x5360363081002cd802d0402cd802d090143602d0402c3602c5c014c202d04", - "0x10402c3402d01014054100b0a40b57c050150402c1e02d5f014054100b0140c", - "0xb57c050150402c05030050165602c050ac050e40b4100b3f00b088053680b", - "0x10402c2e02c22014da02d0402c1402d01014054100b0a40b57c050150402c1e", - "0x2b02d01014054100b0780b57c050150402c05030050165602c050ac050e40b", - "0x50150402c05030050165602c050ac050e40b4100b0880b088053680b4100b", - "0x50ac050e40b4100b4000b088053680b4100b06c0b404050150402c1e02d5f", - "0x3902d0402c1002c22014da02d0402c1f02d01014054100b0140c014059580b", - "0xb4080b088053680b4100b0140b404050150402c05030050165602c050ac05", - "0xb4100b0e40b3dc050f00b4100b0e80b1e0050e80b4100b014310143902d04", - "0xb0300b040050150402c050f4050f0e03681002c3c02d0402c3c02d09014e0", - "0x10202d02014054100b0140c0141702e5740811031040301002c110141002d04", - "0xb06c0b080050780b4100b0440b3dc0506c0b4100b0800b05c050800b4100b", - "0x5030050880b960054100c07c0b0780507c1b0310402c1b02c1b0141b02d04", - "0xb4100b02c0b050050140b4100b0140b404050150402c1b02c1f014054100b", - "0x1802e5a01418400230410402c1e02c05042590141e02d0402c1e02c5c0140b", - "0xb974050ac290310402d0102e5c014054100b0140c0141402e5b4040b4100c", - "0xb97c050b80b4100b4000b400050150402c05030050b00b978fc02d040302b", - "0xb988053080b4100b0c429032610143102d0402c2f02e600142f02d0402cfc", - "0xd002e630142e02d0402c2e02c140142302d0402c2302d01014d002d0402cc2", - "0x2640143402d0402d0002d00014054100b0140c014d00b8230400b3400b4100b", - "0x101014d802d0402cd602e62014d602d0402c360a40c984050d80b4100b0b00b", - "0x230400b3600b4100b3600b98c050d00b4100b0d00b0500508c0b4100b08c0b", - "0x508c0b4100b08c0b404053680b4100b0500b994050150402c050300536034", - "0x10402c05030053690008c1002cda02d0402cda02e630150002d0402d0002c14", - "0x50e80b4100b0e41b0302f0143902d0402c050b8050150402c2202c2c01405", - "0x100014054100b0140c0143c02e66015040303a02c1e0143a02d0402c3a02c20", - "0x3f02e600143f02d0402ce302e67014e302d0402c050c4053800b4100b02c0b", - "0x502d01014e802d0402c4202e620144202d0402c400780c984051000b4100b", - "0xe8380050400b3a00b4100b3a00b98c053800b4100b3800b050050140b4100b", - "0xb01431014ea02d0402c0b02d00014054100b0f00b0b0050150402c0503005", - "0xb1300b988051300b4100b3b81e03261014ee02d0402cec02e64014ec02d04", - "0x10402c3d02e63014ea02d0402cea02c140140502d0402c0502d010143d02d04", - "0xb014310144d02d0402c0b02d00014054100b0140c0143d3a8050400b0f40b", - "0xb3dc51032610145102d0402c1702cf7014f702d0402cf502e64014f502d04", - "0x10402c4d02c140140502d0402c0502d01014f802d0402c5302e620145302d04", - "0x50300b014054100b0143d014f8134050400b3e00b4100b3e00b98c051340b", - "0x506c0b4100b0300b7e8050150402c0503005080170326840811031040300b", - "0x2302d0402d0202d00014054100b0140c0142202e6a07c1e031040301b02e69", - "0x54040b4100b0600b3c8050600b4100b4000b1f0054000b4100b07c0b9ac05", - "0x50a40b4100b0780b390050500b4100b40410030ec0150102d0402d0102c20", - "0xee0142902d0402c2902c8b0142302d0402c2302c140141102d0402c1102d01", - "0x50b0fc0ac1002c2c3f02b0410402c140a42304411234050500b4100b0500b", - "0x10402c050c4050b80b4100b4080b400050150402c2202e6c014054100b0140c", - "0x10402c1102d01014c202d0402c3102d130143102d0402c2f0400c92c050bc0b", - "0xc014c20b8110400b3080b4100b3080b930050b80b4100b0b80b050050440b", - "0xd002d0402c05168050150402c0c02df7014054100b0400b3d4050150402c05", - "0x50800b4100b0800b0500505c0b4100b05c0b404050d00b4100b3400b93805", - "0xc0300b044050300b4100b02c0b040050d02005c1002c3402d0402c3402e4c", - "0x1702c170141702d0402c1102d02014054100b0140c0150202e6d0441003104", - "0x1b02c1e0141b0800c4100b0800b06c050800b4100b0800b080050800b4100b", - "0x10402c1002c22014054100b0800b07c050150402c05030050780b9b8054100c", - "0xb0880b408050150402c050300508c0b9bc2207c0c4100c0400b044050400b", - "0x10402c1802c1b0141802d0402c1802c200141802d0402d0002c170150002d04", - "0x10402c1802c1f014054100b0140c0141402e70015040310102c1e015010600c", - "0xb0140c014fc02e710ac29031040301f02c110141f02d0402c1f02c2201405", - "0xb4100b0b80b080050b80b4100b0b00b05c050b00b4100b0ac0b4080501504", - "0xb0a40b3dc050150402c05030053080b9c8310bc0c4100c0b805030230142e", - "0x10402c3602e740143602d0402c3402e730143402d0402c3102c18014d002d04", - "0xb4100b3580b9d4053400b4100b3400b170050bc0b4100b0bc0b404053580b", - "0xb0a40b088053600b4100b3080b404050150402c0503005358d00bc1002cd6", - "0x22014d802d0402c0502d01014054100b0140c014059d80b0142b014da02d04", - "0x54100b0500b0b0050150402c05030050167602c050ac053680b4100b3f00b", - "0x50e80b4100b0e80b080050e80b4100b0e4180302f0143902d0402c050b805", - "0xb308053800b4100b01431014054100b0140c0143c02e77015040303a02c1e", - "0x4002e740144002d0402ce302e730143f02d0402c1f02cf7014e302d0402ce0", - "0xb1080b9d4050fc0b4100b0fc0b170050140b4100b0140b404051080b4100b", - "0x502d01014054100b0f00b0b0050150402c05030051083f0141002c4202d04", - "0x50150402c05030050167802c050ac053a80b4100b07c0b088053a00b4100b", - "0x279014e802d0402cd802cf8014da02d0402c2302c22014d802d0402c0502d01", - "0x54100b0780b0b0050150402c05030050167802c050ac053a80b4100b3680b", - "0x51300b4100b3b8200302f014ee02d0402c050b8053b00b4100b0400b3dc05", - "0x31014054100b0140c0143d02e7a015040304c02c1e0144c02d0402c4c02c20", - "0x502d01014f702d0402cf502e74014f502d0402c4d02e7b0144d02d0402c05", - "0xf73b0050400b3dc0b4100b3dc0b9d4053b00b4100b3b00b170050140b4100b", - "0xb1440b9f0051440b4100b01431014054100b0f40b0b0050150402c0503005", - "0x10402c5302e75014ec02d0402cec02c5c0140502d0402c0502d010145302d04", - "0x10202c22014e802d0402c0502d01014054100b0140c014533b0050400b14c0b", - "0x10402cea02cf70145602d0402cf802e7c014f802d0402c050c4053a80b4100b", - "0x110140c02d0402c0b02c1001456160e80400b1580b4100b1580b9d4051600b", - "0x505c0b4100b0440b408050150402c05030054080b9f4110400c4100c0300b", - "0x506c200310402c2002c1b0142002d0402c2002c200142002d0402c1702c17", - "0xb088050150402c2002c1f014054100b0140c0141e02e7e015040301b02c1e", - "0x102014054100b0140c0142302e7f0881f031040301002c110141002d0402c10", - "0xca00050600b4100b0600b080050600b4100b4000b05c054000b4100b0880b", - "0x50ac0b4100b07c0b3dc050150402c05030050a40ba04144040c4100c06005", - "0x5c0150102d0402d0102d010142c02d0402cfc02cdd014fc02d0402c1402e82", - "0x54100b0140c0142c0ad010400b0b00b4100b0b00b4dc050ac0b4100b0ac0b", - "0x5030050168302c050ac050bc0b4100b07c0b088050b80b4100b0a40b40405", - "0x5a0c0b0142b0142f02d0402c2302c220142e02d0402c0502d01014054100b", - "0x310800c0bc050c40b4100b0142e014054100b0780b0b0050150402c0503005", - "0x5030053400ba10054100c3080b078053080b4100b3080b080053080b4100b", - "0xc014d602e850d834031040301002c110141002d0402c1002c22014054100b", - "0xb3680b080053680b4100b3600b05c053600b4100b0d80b408050150402c05", - "0xb3dc050150402c05030050f00ba183a0e40c4100c3680503023014da02d04", - "0x3902d010143f02d0402ce302cdd014e302d0402c3a02e87014e002d0402c34", - "0x3f380390400b0fc0b4100b0fc0b4dc053800b4100b3800b170050e40b4100b", - "0x50ac050bc0b4100b0d00b088050b80b4100b0f00b404050150402c0503005", - "0x2f02d0402cd602c220142e02d0402c0502d01014054100b0140c01405a0c0b", - "0x10402c1002cf7014054100b3400b0b0050150402c05030050168302c050ac05", - "0x502d0402c0502d01014e802d0402c4202d3b0144202d0402c050c4051000b", - "0xb0140c014e8100050400b3a00b4100b3a00b4dc051000b4100b1000b17005", - "0xea02d0402c050c4050bc0b4100b4080b088050b80b4100b0140b4040501504", - "0xb3b00b4100b3b00b4dc053b80b4100b0bc0b3dc053b00b4100b3a80b4ec05", - "0x506c200328805d02031040300b0140c02c050150402c050f4053b0ee0b810", - "0x507c0ba24054100c0780b07805078110310402c1102c1b014054100b0140c", - "0xb0400ba28050880b4100b05c0b400050150402c1102c1f014054100b0140c", - "0xb4080b404050600b4100b4000ba30054000b4100b08c0c0328b0142302d04", - "0x5060224081002c1802d0402c1802e8d0142202d0402c2202c140150202d04", - "0xc4040b044054040b4100b0300b040050150402c1f02c2c014054100b0140c", - "0xfc02c17014fc02d0402c2902d02014054100b0140c0142b02e8e0a41403104", - "0x2e02c1e0142e0b00c4100b0b00b06c050b00b4100b0b00b080050b00b4100b", - "0x10402c1402c22014054100b0b00b07c050150402c05030050bc0ba3c054100c", - "0xb3080b408050150402c05030053400ba40c20c40c4100c0500b044050500b", - "0xc0d902030230143602d0402c3602c200143602d0402c3402c170143402d04", - "0xd802c180143902d0402c1702d00014054100b0140c014da02e91360d603104", - "0xb0e80b0a4053800b4100b0e40b050050f00b4100b3580b404050e80b4100b", - "0xd1014054100b0140c01405a480b0142b0143f02d0402c3102c22014e302d04", - "0xb3680b404051000b4100b05c0b400050150402c1102c1f014054100b0400b", - "0x5a4c0b0142b014ea02d0402c3102c22014e802d0402c4002c140144202d04", - "0xb05c0b400050150402c1102c1f014054100b0400b344050150402c0503005", - "0x10402cd002c22014e802d0402cec02c140144202d0402d0202d01014ec02d04", - "0xb0142e014054100b0bc0b0b0050150402c05030050169302c050ac053a80b", - "0xc1300b078051300b4100b1300b080051300b4100b3b82c0302f014ee02d04", - "0xb4100b014310144d02d0402c1702d00014054100b0140c0143d02e9401504", - "0xe002d0402c4d02c140143c02d0402d0202d01014f702d0402cf502cc2014f5", - "0x5102d0402ce30400ca54050fc0b4100b0500b0880538c0b4100b3dc0b0a405", - "0x51580b4100b0fc0b3dc053e00b4100b14c110302f0145302d0402c050b805", - "0x9f0145602d0402c5602c5c014e002d0402ce002c140143c02d0402c3c02d01", - "0x104100b3e051158e00f102354053e00b4100b3e00b080051440b4100b1440b", - "0x1002cd1014054100b0f40b0b0050150402c0503005168f61601002c5a3d858", - "0xb4100b4080b404051700b4100b05c0b400050150402c1102c1f014054100b", - "0xc01405a580b0142b0146102d0402c1402c220145f02d0402c5c02c140145e", - "0xb4100b05c0b400050150402c1102c1f014054100b0400b344050150402c05", - "0xea02d0402c2b02c22014e802d0402cf402c140144202d0402d0202d01014f4", - "0x51840b4100b3a80b9e40517c0b4100b3a00b158051780b4100b1080b3e005", - "0xca2c053cc0b4100b1840b3dc051940b4100b18c0b45c0518c0b4100b01431", - "0xb050051780b4100b1780b404051a80b4100b1a00ba30051a00b4100b194f3", - "0x50150402c05030051a85f1781002c6a02d0402c6a02e8d0145f02d0402c5f", - "0x10402c05168050150402c0c02cf6014054100b0400b344050150402c1102c1f", - "0xb4100b06c0b050050800b4100b0800b404051b40b4100b3c80ba5c053c80b", - "0xb0140c02c050150402c050f4051b41b0801002c6d02d0402c6d02e8d0141b", - "0x29a0141b02d0402c0c02e99014054100b0140c0142005c0ca61020440c4100c", - "0x508c0b4100b07c0ba70050150402c05030050880ba6c1f0780c4100c06c0b", - "0x2302c400142302d0402c2302c29014054100b0143f0150002d0402c1e02cc4", - "0x1802c420141402d0402d0202d00014054100b0140c0150102e9d0600b4100c", - "0x10402cfc02c20014fc02d0402c053a8050ac0b4100b0a40b3a0050a40b4100b", - "0xb0500b050050b80b4100b0ac2c030ec0142c02d0402cfc0400c3b0053f00b", - "0x4c014054100b0140c01405a780b0142b0143102d0402c2e02cee0142f02d04", - "0xb3400b080053400b4100b0142e014c202d0402d0202d00014054100b4040b", - "0xb0d00b3b8050bc0b4100b3080b050050d00b4100b34010030ec014d002d04", - "0x2f02d0402c2f02c140141102d0402c1102d01014054100b0143d0143102d04", - "0x10402c314002f044112f4050c40b4100b0c40b3b8054000b4100b4000b30c05", - "0xb400050150402c2202e9f014054100b0140c014d8358360400b360d60d810", - "0x3a02d130143a02d0402c390400c92c050e40b4100b01431014da02d0402d02", - "0xb0f00b930053680b4100b3680b050050440b4100b0440b404050f00b4100b", - "0x1002cf5014054100b0300ba80050150402c05030050f0da0441002c3c02d04", - "0xb4100b05c0b4040538c0b4100b3800b938053800b4100b0145a014054100b", - "0xb0400538c2005c1002ce302d0402ce302e4c0142002d0402c2002c1401417", - "0x102014054100b0140c0150202ea104410031040300c02c110140c02d0402c0b", - "0xb06c050800b4100b0800b080050800b4100b05c0b05c0505c0b4100b0440b", - "0xb07c050150402c05030050780ba88054100c06c0b0780506c200310402c20", - "0x508c0ba8c2207c0c4100c0400b044050400b4100b0400b088050150402c20", - "0x1802c200141802d0402d0002c170150002d0402c2202d02014054100b0140c", - "0x22014054100b0140c0142902ea40510103104030180140c704050600b4100b", - "0x50150402c05030050b00ba94fc0ac0c4100c07c0b0440507c0b4100b07c0b", - "0x1c40142f02d0402c2f02c200142f02d0402c2e02c170142e02d0402cfc02d02", - "0x3402d0402c2b02cf7014054100b0140c014d002ea630831031040302f4040c", - "0xd802d0402cd602ea7014d602d0402c3602d160143602d0402cc20500c72005", - "0xb3600b4100b3600baa0050d00b4100b0d00b170050c40b4100b0c40b40405", - "0xda02d0402cd002d01014054100b0500b588050150402c0503005360340c410", - "0xb0500b588050150402c0503005016a902c050ac050e40b4100b0ac0b08805", - "0x5016a902c050ac050e40b4100b0b00b088053680b4100b4040b4040501504", - "0xb0142b0143902d0402c1f02c22014da02d0402c2902d01014054100b0140c", - "0x50e40b4100b08c0b088053680b4100b0140b404050150402c0503005016a9", - "0xb4100b0400b3dc050150402c1e02c2c014054100b0140c01405aa40b0142b", - "0xe002d0402ce002c20014e002d0402c3c0800c0bc050f00b4100b0142e0143a", - "0x2ab0143f02d0402c050c4050150402c050300538c0baa8054100c3800b07805", - "0xb170050140b4100b0140b404051080b4100b1000ba9c051000b4100b0fc0b", - "0x50150402c05030051083a0141002c4202d0402c4202ea80143a02d0402c3a", - "0x502d01014ea02d0402ce802eac014e802d0402c050c4050150402ce302c2c", - "0xea0e8050400b3a80b4100b3a80baa0050e80b4100b0e80b170050140b4100b", - "0x50c4050e40b4100b4080b088053680b4100b0140b404050150402c0503005", - "0xb3b80baa0051300b4100b0e40b3dc053b80b4100b3b00bab0053b00b4100b", - "0xb044050400b4100b0300b040050150402c050f4053b84c3681002cee02d04", - "0x170142002d0402d0202d02014054100b0140c0141702ead408110310403010", - "0x1e0141e06c0c4100b06c0b06c0506c0b4100b06c0b0800506c0b4100b0800b", - "0x1102c22014054100b06c0b07c050150402c050300507c0bab8054100c0780b", - "0xb408050150402c05030054000babc230880c4100c0440b044050440b4100b", - "0xb0880b3dc050500b4100b016340150102d0402c1802c170141802d0402c23", - "0x10402c2902c5c0140b02d0402c0b02c140140502d0402c0502d010142902d04", - "0x140a40b015028d8054040b4100b4040b080050500b4100b0500b8d4050a40b", - "0x50150402c05030050bc0bac02e02d040302c02e370142c3f02b0410402d01", - "0x54100b0140c0143402eb13400b4100c3080b8e805308310310402c2e02e39", - "0x53600b4100b3580bacc053580b4100b3400bac8050d80b4100b3f00b40005", - "0x50ac0b4100b0ac0b404050e40b4100b3680bad4053680b4100b36031032b4", - "0x10402c05030050e4360ac1002c3902d0402c3902eb60143602d0402c3602c14", - "0xe002d0402c3a02c140143c02d0402c2b02d010143a02d0402cfc02d0001405", - "0x503005016b702c050ac050fc0b4100b0c40b1700538c0b4100b0d00b90005", - "0x10402cfc02c140142b02d0402c2b02d010144002d0402c2f02eb8014054100b", - "0xb02d00014054100b0140c014403f02b0400b1000b4100b1000bad8053f00b", - "0x10402c0502d01014ea02d0402d0002cf7014e802d0402c050c4051080b4100b", - "0xb4100b3a80b1700538c0b4100b3a00b900053800b4100b1080b050050f00b", - "0x10402c050b8050150402c1f02c2c014054100b0140c01405adc0b0142b0143f", - "0x104030ee02c1e014ee02d0402cee02c20014ee02d0402cec06c0c0bc053b00b", - "0xc4100c0440b044050440b4100b0440b088050150402c05030051300bae405", - "0x10402cf702c17014f702d0402c4d02d02014054100b0140c014f502eba1343d", - "0x502d0402c0502d01014f802d0402c3d02cf70145302d0402c05aec051440b", - "0x514c0b4100b14c0baf0053e00b4100b3e00b1700502c0b4100b02c0b05005", - "0xf602d18014f6160560410402c5114cf802c0540abd0145102d0402c5102c20", - "0xbb000517c5e0310402c5a02ebf014054100b0140c0145c02ebe1680b4100c", - "0xbb080518c0b4100b1600b400050150402c05030053d00bb046102d040305f", - "0xbad4051a00b4100b3cc5e032b4014f302d0402c6502eb30146502d0402c61", - "0x6a02eb60146302d0402c6302c140145602d0402c5602d010146a02d0402c68", - "0x101014f202d0402c5802d00014054100b0140c0146a18c560400b1a80b4100b", - "0xb1700538c0b4100b3d00b900053800b4100b3c80b050050f00b4100b1580b", - "0x6d02d0402c5c02eb8014054100b0140c01405adc0b0142b0143f02d0402c5e", - "0xb1b40b4100b1b40bad8051600b4100b1600b050051580b4100b1580b40405", - "0xef02d0402c050c4051bc0b4100b02c0b400050150402c05030051b45815810", - "0x53800b4100b1bc0b050050f00b4100b0140b404051c80b4100b3d40b3dc05", - "0x2b40147402d0402ce302ec30143f02d0402c7202c5c014e302d0402cef02e40", - "0x140143c02d0402c3c02d010150702d0402ced02eb5014ed02d0402c740fc0c", - "0x54100b0140c015073803c0400b41c0b4100b41c0bad8053800b4100b3800b", - "0x310150902d0402c1102cf70147602d0402c0b02d00014054100b1300b0b005", - "0xbad4053ac0b4100b1e909032b40147a02d0402c7802ec30147802d0402c05", - "0x7d02eb60147602d0402c7602c140140502d0402c0502d010147d02d0402ceb", - "0x310147c02d0402c0b02d00014054100b0140c0147d1d8050400b1f40b4100b", - "0x81032b40148102d0402c1702cf7014e902d0402c7f02ec30147f02d0402c05", - "0x7c02c140140502d0402c0502d010148302d0402ce702eb5014e702d0402ce9", - "0xb014054100b0143d014831f0050400b20c0b4100b20c0bad8051f00b4100b", - "0xb4100b0300bb14050150402c050300508017032c440811031040300b0140c", - "0x10402d0202d00014054100b0140c0142202ec707c1e031040301b02ec60141b", - "0xb4100b0600b3a0050600b4100b4000b108054000b4100b07c0bb200508c0b", - "0xb4100b0780b5f4050500b4100b40410030ec0150102d0402d0102c2001501", - "0x2902d0402c2902d7e0142302d0402c2302c140141102d0402c1102d0101429", - "0xfc0ac1002c2c3f02b0410402c140a423044115fc050500b4100b0500b3b805", - "0x50c4050b80b4100b4080b400050150402c2202ec9014054100b0140c0142c", - "0x1102d01014c202d0402c3102d130143102d0402c2f0400c92c050bc0b4100b", - "0xc20b8110400b3080b4100b3080b930050b80b4100b0b80b050050440b4100b", - "0x10402c05168050150402c0c02eca014054100b0400b3d4050150402c0503005", - "0xb4100b0800b0500505c0b4100b05c0b404050d00b4100b3400b938053400b", - "0xb044050300b4100b02c0b040050d02005c1002c3402d0402c3402e4c01420", - "0x170141702d0402c1102d02014054100b0140c0150202ecb04410031040300c", - "0xf70141b0400c4100b0400bb30050400b4100b0400b088050800b4100b05c0b", - "0x1e0141f0800c4100b0800b06c050800b4100b0800b080050780b4100b06c0b", - "0x2002c1f014054100b0400b3f0050150402c05030050880bb34054100c07c0b", - "0xb07805030ed0141e02d0402c1e02c5c0140502d0402c0502d01014054100b", - "0xbb3c050150402c05030050500bb390102d040301802d07014184002304104", - "0x10002c5c0142302d0402c2302d010142b02d0402c2902d1b0142902d0402d01", - "0x2d1014054100b0140c0142b400230400b0ac0b4100b0ac0bb40054000b4100b", - "0xbb40054000b4100b4000b1700508c0b4100b08c0b404053f00b4100b0500b", - "0x2e014054100b0880b0b0050150402c05030053f10008c1002cfc02d0402cfc", - "0xb078050b80b4100b0b80b080050b80b4100b0b0200302f0142c02d0402c05", - "0xc0400b044050150402c1e02cf6014054100b0140c0142f02ed2015040302e", - "0x3402c170143402d0402cc202d02014054100b0140c014d002ed33083103104", - "0xda02ed4360d603104030360140c08c050d80b4100b0d80b080050d80b4100b", - "0xbb543a0e40c4100c0c40b044050c40b4100b0c40b088050150402c0503005", - "0x20014e302d0402ce002c17014e002d0402c3a02d02014054100b0140c0143c", - "0x54100b0140c0144202ed61003f03104030e33580c08c0538c0b4100b38c0b", - "0xec02d0402cea02ed8014ea02d0402c403600cb5c053a00b4100b0e40b3dc05", - "0x53a00b4100b3a00b170050fc0b4100b0fc0b404053b80b4100b3b00b46c05", - "0x54100b3600b2ec050150402c05030053b8e80fc1002cee02d0402cee02ed0", - "0x503005016d902c050ac050f40b4100b0e40b088051300b4100b1080b40405", - "0xb4100b0f00b088051300b4100b3580b404050150402cd802cbb014054100b", - "0x3102c220144c02d0402cda02d01014054100b0140c01405b640b0142b0143d", - "0x51300b4100b0140b404050150402c0503005016d902c050ac050f40b4100b", - "0x10402c2f02c2c014054100b0140c01405b640b0142b0143d02d0402cd002c22", - "0x101014f502d0402c4d02ed10144d02d0402c050c4050150402c1002cfc01405", - "0x50400b3d40b4100b3d40bb40050780b4100b0780b170050140b4100b0140b", - "0x50f40b4100b4080b088051300b4100b0140b404050150402c05030053d41e", - "0xbb400514c0b4100b0f40b3dc051440b4100b3dc0bb44053dc0b4100b01431", - "0x50400b4100b0300b040050150402c050f405144531301002c5102d0402c51", - "0x2002d0402d0202d02014054100b0140c0141702eda40811031040301002c11", - "0x506c0b4100b06c0b080050780b4100b0440b3dc0506c0b4100b0800b05c05", - "0x50150402c05030050880bb6c054100c07c0b0780507c1b0310402c1b02c1b", - "0xb1700502c0b4100b02c0b050050140b4100b0140b404050150402c1b02c1f", - "0x10102d040301802e5a01418400230410402c1e02c05042590141e02d0402c1e", - "0xb4100c0ac0b974050ac290310402d0102e5c014054100b0140c0141402edc", - "0xb4100b3f00bb78050b80b4100b4000b400050150402c05030050b00bb74fc", - "0xb4100b3080bb84053080b4100b0c429032e00143102d0402c2f02edf0142f", - "0xd002d0402cd002ee20142e02d0402c2e02c140142302d0402c2302d01014d0", - "0x10402c2302d010143402d0402d0002d00014054100b0140c014d00b8230400b", - "0xb4100b0a40b170053600b4100b0b00b900053580b4100b0d00b050050d80b", - "0x2302d010143902d0402c1402ee4014054100b0140c01405b8c0b0142b014da", - "0x39400230400b0e40b4100b0e40bb88054000b4100b4000b0500508c0b4100b", - "0x3a06c0c0bc050e80b4100b0142e014054100b0880b0b0050150402c0503005", - "0x5030053800bb94054100c0f00b078050f00b4100b0f00b080050f00b4100b", - "0x10402c1e02c5c0140b02d0402c0b02c140140502d0402c0502d01014054100b", - "0xe802ee81080b4100c1000bb9c051003f38c104100b0780b01410b98050780b", - "0xbbacee02d04030ec02eea014ec3a80c4100b1080bba4050150402c0503005", - "0x2df0144d02d0402cee02eec0143d02d0402c3f02d00014054100b0140c0144c", - "0x1010145102d0402cf702ee1014f702d0402cf53a80cb80053d40b4100b1340b", - "0xe30400b1440b4100b1440bb88050f40b4100b0f40b0500538c0b4100b38c0b", - "0x50d80b4100b38c0b4040514c0b4100b0fc0b400050150402c05030051443d", - "0x2ed014da02d0402cea02c5c014d802d0402c4c02e40014d602d0402c5302c14", - "0x1010145802d0402c5602ee10145602d0402cf83680cb80053e00b4100b3600b", - "0x360400b1600b4100b1600bb88053580b4100b3580b050050d80b4100b0d80b", - "0x538c0b4100b38c0b404053d80b4100b3a00bb90050150402c0503005160d6", - "0x10402c05030053d83f38c1002cf602d0402cf602ee20143f02d0402c3f02c14", - "0x2ed0145c02d0402c050c4051680b4100b02c0b400050150402ce002c2c01405", - "0x1010146102d0402c5f02ee10145f02d0402c5e0780cb80051780b4100b1700b", - "0x50400b1840b4100b1840bb88051680b4100b1680b050050140b4100b0140b", - "0x2ed0146302d0402c050c4053d00b4100b02c0b400050150402c05030051845a", - "0x2e10146802d0402c653cc0cb80053cc0b4100b05c0b3dc051940b4100b18c0b", - "0xbb88053d00b4100b3d00b050050140b4100b0140b404051a80b4100b1a00b", - "0xc4100c0300b044050300b4100b02c0b040051a8f40141002c6a02d0402c6a", - "0x10402c1702c170141702d0402c1102d02014054100b0140c0150202eee04410", - "0x10402c1b02cf70141b0400c4100b0400bb30050400b4100b0400b088050800b", - "0x1040301f02c1e0141f0800c4100b0800b06c050800b4100b0800b080050780b", - "0x50150402c2002c1f014054100b0400b3f0050150402c05030050880bbbc05", - "0x10008c104100b07805030370141e02d0402c1e02c5c0140502d0402c0502d01", - "0xb4100b4040bbc4050150402c05030050500bbc10102d040301802c9601418", - "0x10002d0402d0002c5c0142302d0402c2302d010142b02d0402c2902ef201429", - "0x10402c1402ef4014054100b0140c0142b400230400b0ac0b4100b0ac0bbcc05", - "0xb4100b3f00bbcc054000b4100b4000b1700508c0b4100b08c0b404053f00b", - "0xb4100b0142e014054100b0880b0b0050150402c05030053f10008c1002cfc", - "0x54100c0b80b078050b80b4100b0b80b080050b80b4100b0b0200302f0142c", - "0xc20c40c4100c0400b044050150402c1e02cf6014054100b0140c0142f02ef5", - "0x3602d0402c3402c170143402d0402cc202d02014054100b0140c014d002ef6", - "0xb0140c014da02ef7360d603104030360140c710050d80b4100b0d80b08005", - "0xb4100b0e80bbc8050e80b4100b3600bbe0050e40b4100b0c40b3dc0501504", - "0x3c02d0402c3c02ef30143902d0402c3902c5c014d602d0402cd602d010143c", - "0x10402c3102c22014e002d0402cda02d01014054100b0140c0143c0e4d60400b", - "0xb088053800b4100b0140b404050150402c0503005016f902c050ac0538c0b", - "0x50150402c2f02c2c014054100b0140c01405be40b0142b014e302d0402cd0", - "0x502d010144002d0402c3f02ef40143f02d0402c050c4050150402c1002cfc", - "0x40078050400b1000b4100b1000bbcc050780b4100b0780b170050140b4100b", - "0x50c40538c0b4100b4080b088053800b4100b0140b404050150402c0503005", - "0xb3a00bbcc053a80b4100b38c0b3dc053a00b4100b1080bbd0051080b4100b", - "0x110400c4100c0300b044050300b4100b02c0b040053a0ea3801002ce802d04", - "0x2002d0402c1702c170141702d0402c1102d02014054100b0140c0150202efa", - "0x2fb015040301b02c1e0141b0800c4100b0800b06c050800b4100b0800b08005", - "0x110141002d0402c1002c22014054100b0800b07c050150402c05030050780b", - "0x54000b4100b0880b408050150402c050300508c0bbf02207c0c4100c0400b", - "0x144040c4100c06005032800141802d0402c1802c200141802d0402d0002c17", - "0xfc02d0402c1402efe0142b02d0402c1f02cf7014054100b0140c0142902efd", - "0x50ac0b4100b0ac0b170054040b4100b4040b404050b00b4100b3f00bbfc05", - "0xb4100b0a40b404050150402c05030050b02b4041002c2c02d0402c2c02f00", - "0x502d01014054100b0140c01405c040b0142b0142f02d0402c1f02c220142e", - "0x50150402c05030050170102c050ac050bc0b4100b08c0b088050b80b4100b", - "0xb080053080b4100b0c4200302f0143102d0402c050b8050150402c1e02c2c", - "0x1002c22014054100b0140c014d002f0201504030c202c1e014c202d0402cc2", - "0xb408050150402c05030053580bc0c360d00c4100c0400b044050400b4100b", - "0xda02c1b014da02d0402cda02c20014da02d0402cd802c17014d802d0402c36", - "0xda02c1f014054100b0140c0143a02f04015040303902c1e014393680c4100b", - "0xc014e302f053803c031040303402c110143402d0402c3402c22014054100b", - "0xb1000b080051000b4100b0fc0b05c050fc0b4100b3800b408050150402c05", - "0xb3dc050150402c05030053a80bc18e81080c4100c10005031c40144002d04", - "0x4c02eff0144c02d0402cee02f08014ee02d0402ce802f07014ec02d0402c3c", - "0xb0f40bc00053b00b4100b3b00b170051080b4100b1080b404050f40b4100b", - "0xb088051340b4100b3a80b404050150402c05030050f4ec1081002c3d02d04", - "0x4d02d0402c0502d01014054100b0140c01405c240b0142b014f502d0402c3c", - "0xb0e80b0b0050150402c05030050170902c050ac053d40b4100b38c0b08805", - "0xb4100b1440b080051440b4100b3dcda0302f014f702d0402c050b80501504", - "0x53e00b4100b01431014054100b0140c0145302f0a015040305102c1e01451", - "0x2ff014f602d0402c5602f080145802d0402c3402cf70145602d0402cf802f0b", - "0xbc00051600b4100b1600b170050140b4100b0140b404051680b4100b3d80b", - "0x101014054100b14c0b0b0050150402c0503005168580141002c5a02d0402c5a", - "0x10402c05030050170102c050ac050bc0b4100b0d00b088050b80b4100b0140b", - "0x2e02d0402c4d02cf8014f502d0402cd602c220144d02d0402c0502d0101405", - "0xb3400b0b0050150402c05030050170102c050ac050bc0b4100b3d40b9e405", - "0x5f02d0402c5e02f0c0145e02d0402c050c4051700b4100b0400b3dc0501504", - "0xb17c0b4100b17c0bc00051700b4100b1700b170050140b4100b0140b40405", - "0xb4100b4080b088050b80b4100b0140b404050150402c050300517c5c01410", - "0x518c0b4100b0bc0b3dc053d00b4100b1840bc30051840b4100b014310142f", - "0xc0300b044050300b4100b02c0b040053d0630b81002cf402d0402cf402f00", - "0x1702c170141702d0402c1102d02014054100b0140c0150202f0d0441003104", - "0x1f02f0e0781b03104030200140c704050800b4100b0800b080050800b4100b", - "0xbc3c230880c4100c0400b044050400b4100b0400b088050150402c0503005", - "0x200150102d0402c1802c170141802d0402c2302d02014054100b0140c01500", - "0x54100b0140c0142b02f100a414031040310106c0c704054040b4100b4040b", - "0x10402c05030050b80bc442c3f00c4100c0880b044050880b4100b0880b08805", - "0x3102d0402c3102c200143102d0402c2f02c170142f02d0402c2c02d0201405", - "0x10402cfc02cf7014054100b0140c0143402f12340c203104030310500c71005", - "0xb3600bc4c053600b4100b3581e0311d014d602d0402cd00a40c720050d80b", - "0x10402cda02f140143602d0402c3602c5c014c202d0402cc202d01014da02d04", - "0xb0780b588050150402c2902d62014054100b0140c014da0d8c20400b3680b", - "0x50171502c050ac050e80b4100b3f00b088050e40b4100b0d00b4040501504", - "0x10402c1402d01014054100b0780b588050150402c2902d62014054100b0140c", - "0xb588050150402c05030050171502c050ac050e80b4100b0b80b088050e40b", - "0x31502c050ac050e80b4100b0880b088050e40b4100b0ac0b404050150402c1e", - "0xb088050e40b4100b06c0b404050150402c1e02d62014054100b0140c01405", - "0x3902d0402c1f02d01014054100b0140c01405c540b0142b0143a02d0402d00", - "0xb0140b404050150402c05030050171502c050ac050e80b4100b0400b08805", - "0xb4100b0f00bc58050f00b4100b014310143a02d0402d0202c220143902d04", - "0xb04005380e30e41002ce002d0402ce002f14014e302d0402c3a02cf7014e0", - "0x102014054100b0140c0150202f1704410031040300c02c110140c02d0402c0b", - "0xc08c050800b4100b0800b080050800b4100b05c0b05c0505c0b4100b0440b", - "0x50400b4100b0400b088050150402c050300507c0bc601e06c0c4100c08005", - "0x1802d0402c2302d02014054100b0140c0150002f1908c22031040301002c11", - "0x14031040310106c0ca00054040b4100b4040b080054040b4100b0600b05c05", - "0xb4100b0500b404053f00b4100b0880b3dc050150402c05030050ac0bc6829", - "0xc0bc0bc70050bc2e0b0104100b3f0140331b014fc02d0402cfc02c5c01414", - "0x11c7c050d834340104100b0c40bc78050150402c05030053080bc743102d04", - "0xda02d0402cd802f20014d802d0402cd60780c478053580b4100b0d83434029", - "0xb3680b4100b3680bc84050b80b4100b0b80b170050b00b4100b0b00b40405", - "0x50150402c1e02cbb014054100b3080b130050150402c05030053682e0b010", - "0xb088050e80b4100b0b00b404050e40b4100b0b80b040050150402c2902f22", - "0x50150402c1e02cbb014054100b0140c01405c8c0b0142b0143c02d0402c39", - "0xb0140c01405c900b0142b014e302d0402c2202c22014e002d0402c2b02d01", - "0xe302d0402d0002c22014e002d0402c1b02d01014054100b0780b2ec0501504", - "0x5030050172302c050ac050f00b4100b38c0b9e4050e80b4100b3800b3e005", - "0x5c8c0b0142b0143c02d0402c1002c220143a02d0402c1f02d01014054100b", - "0x50c4050f00b4100b4080b088050e80b4100b0140b404050150402c0503005", - "0xb1000bc84051080b4100b0f00b3dc051000b4100b0fc0bc94050fc0b4100b", - "0xb0143d014054100b017270141102d0402c05c9805100420e81002c4002d04", - "0x50300506c0bca02005c0c4100c4080b044054080b4100b0300b0400501504", - "0xb0400b05c050400b4100b04011033290141002d0402c2002d02014054100b", - "0xb088050150402c050300508c0bca82207c0c4100c07805030230141e02d04", - "0x102014054100b0140c0150102f2b06100031040301702c110141702d0402c17", - "0x10002cf70142b02d0402c05cb0050a40b4100b0500b05c050500b4100b0600b", - "0xb3f00b1700502c0b4100b02c0b0500507c0b4100b07c0b404053f00b4100b", - "0xfc02c1f40b2e0142902d0402c2902c200142b02d0402c2b02f2d014fc02d04", - "0x54100b0140c014c202f2f0c40b4100c0bc0b470050bc2e0b0104100b0a42b", - "0x10402c05030053580bcc83602d040303402f31014343400c4100b0c40bcc005", - "0x54100b3680bcd0050e4da0310402c3602f33014d802d0402c2e02d0001405", - "0xe002d0402c3c02d1a0143c02d0402c3a0880ccd4050e80b4100b0e40b39005", - "0x2c02d0402c2c02d010143f02d0402ce302f37014e302d0402ce03400ccd805", - "0xb0140c0143f3602c0400b0fc0b4100b0fc0bce0053600b4100b3600b05005", - "0x4202d0402c2c02d010144002d0402c2e02d00014054100b0880b2ec0501504", - "0x53b00b4100b3400b170053a80b4100b3580b900053a00b4100b1000b05005", - "0xb4100b3080bce8050150402c2202cbb014054100b0140c01405ce40b0142b", - "0xee02d0402cee02f380142e02d0402c2e02c140142c02d0402c2c02d01014ee", - "0xb4100b02c0b400050150402c2202cbb014054100b0140c014ee0b82c0400b", - "0x51080b4100b07c0b404051340b4100b4040b3dc050f40b4100b014310144c", - "0x33b014ec02d0402c4d02c5c014ea02d0402c3d02e40014e802d0402c4c02c14", - "0x1010145102d0402cf702f37014f702d0402cf53b00ccd8053d40b4100b3a80b", - "0x420400b1440b4100b1440bce0053a00b4100b3a00b050051080b4100b1080b", - "0x53e00b4100b08c0b4040514c0b4100b02c0b400050150402c0503005144e8", - "0xb0140c01405cf00b0142b0145802d0402c1702c220145602d0402c5302c14", - "0xf802d0402c0502d01014f602d0402c0b02d00014054100b0440bcf40501504", - "0x33b0145a02d0402c050c4051600b4100b06c0b088051580b4100b3d80b05005", - "0x3370145f02d0402c5c1780ccd8051780b4100b1600b3dc051700b4100b1680b", - "0xbce0051580b4100b1580b050053e00b4100b3e00b404051840b4100b17c0b", - "0xc4100c0300b044050300b4100b02c0b04005184563e01002c6102d0402c61", - "0x10402c1702c170141702d0402c1102d02014054100b0140c0150202f3e04410", - "0xc0141f02f3f0781b03104030200140c08c050800b4100b0800b080050800b", - "0x54000bd00230880c4100c0400b044050400b4100b0400b088050150402c05", - "0x10102c200150102d0402c1802c170141802d0402c2302d02014054100b0140c", - "0xf7014054100b0140c0142b02f410a414031040310106c0c08c054040b4100b", - "0xc454053f00b4100b3f00b170050500b4100b0500b404053f00b4100b0880b", - "0x54100b0140c014c202f430c40b4100c0bc0bd08050bc2e0b0104100b3f014", - "0x1e03346014d602d0402c360d0d00a411d14050d834340104100b0c40bd1005", - "0x2e02c5c0142c02d0402c2c02d01014da02d0402cd802d19014d802d0402cd6", - "0x4c014054100b0140c014da0b82c0400b3680b4100b3680bd1c050b80b4100b", - "0x10402c2e02c10014054100b0a40b2ec050150402c1e02cbb014054100b3080b", - "0x50174802c050ac050f00b4100b0e40b088050e80b4100b0b00b404050e40b", - "0xb0880b088053800b4100b0ac0b404050150402c1e02cbb014054100b0140c", - "0xb404050150402c1e02cbb014054100b0140c01405d240b0142b014e302d04", - "0xe302e790143a02d0402ce002cf8014e302d0402d0002c22014e002d0402c1b", - "0x50e80b4100b07c0b404050150402c05030050174802c050ac050f00b4100b", - "0x10402c0502d01014054100b0140c01405d200b0142b0143c02d0402c1002c22", - "0x4002d0402c3f02f4a0143f02d0402c050c4050f00b4100b4080b088050e80b", - "0xb02c10014401083a0400b1000b4100b1000bd1c051080b4100b0f00b3dc05", - "0xb408050150402c05030054080bd2c110400c4100c0300b044050300b4100b", - "0x5031c40142002d0402c2002c200142002d0402c1702c170141702d0402c11", - "0x110141002d0402c1002c22014054100b0140c0141f02f4c0781b0310403020", - "0x50600b4100b08c0b408050150402c05030054000bd34230880c4100c0400b", - "0x5051010310402d0102c1b0150102d0402d0102c200150102d0402c1802c17", - "0xb088050150402d0102c1f014054100b0140c0142902f4e015040301402c1e", - "0x102014054100b0140c0142c02f4f3f02b031040302202c110142202d0402c22", - "0xca00050bc0b4100b0bc0b080050bc0b4100b0b80b05c050b80b4100b3f00b", - "0x50d00b4100b0ac0b3dc050150402c05030053400bd40c20c40c4100c0bc1b", - "0x53600b4100b3580bd4c053580b4100b0d81e033520143602d0402cc202f51", - "0x1002cd802d0402cd802f540143402d0402c3402c5c0143102d0402c3102d01", - "0x53680b4100b3400b404050150402c1e02d5f014054100b0140c014d80d031", - "0x10402c1e02d5f014054100b0140c01405d540b0142b0143902d0402c2b02c22", - "0xc01405d540b0142b0143902d0402c2c02c22014da02d0402c1b02d0101405", - "0x10402c3a4040c0bc050e80b4100b0142e014054100b0a40b0b0050150402c05", - "0x10402c05030053800bd58054100c0f00b078050f00b4100b0f00b080050f00b", - "0x51000b4100b0880b3dc050fc0b4100b38c0b4500538c0b4100b0143101405", - "0x506c0b4100b06c0b404053a00b4100b1080bd4c051080b4100b0fc1e03352", - "0x10402c05030053a04006c1002ce802d0402ce802f540144002d0402c4002c5c", - "0x22014ea02d0402c1b02d01014054100b0780b57c050150402ce002c2c01405", - "0x54100b0780b57c050150402c05030050175702c050ac053b00b4100b0880b", - "0x53a80b4100b3680b3e0050e40b4100b4000b088053680b4100b06c0b40405", - "0x10402c1f02d01014054100b0140c01405d5c0b0142b014ec02d0402c3902e79", - "0xb404050150402c05030050175702c050ac053b00b4100b0400b088053a80b", - "0xb3b80bd60053b80b4100b01431014ec02d0402d0202c22014ea02d0402c05", - "0x51303d3a81002c4c02d0402c4c02f540143d02d0402cec02cf70144c02d04", - "0x54100b0140c0150202f5904410031040300c02c110140c02d0402c0b02c10", - "0x50800b4100b0800b080050800b4100b05c0b05c0505c0b4100b0440b40805", - "0x50150402c05030050780bd68054100c06c0b0780506c200310402c2002c1b", - "0xbd6c2207c0c4100c0400b044050400b4100b0400b088050150402c2002c1f", - "0x200141802d0402d0002c170150002d0402c2202d02014054100b0140c01423", - "0x54100b0140c0142902f5c0510103104030180140ca00050600b4100b0600b", - "0x50b00b4100b3f00bd78053f00b4100b0500bd74050ac0b4100b07c0b3dc05", - "0x1002c2c02d0402c2c02f5f0142b02d0402c2b02c5c0150102d0402d0102d01", - "0x2f02d0402c1f02c220142e02d0402c2902d01014054100b0140c0142c0ad01", - "0xb08c0b088050b80b4100b0140b404050150402c05030050176002c050ac05", - "0x50b8050150402c1e02c2c014054100b0140c01405d800b0142b0142f02d04", - "0xc202c1e014c202d0402cc202c20014c202d0402c310800c0bc050c40b4100b", - "0xc0400b044050400b4100b0400b088050150402c05030053400bd84054100c", - "0xd802c17014d802d0402c3602d02014054100b0140c014d602f620d83403104", - "0x3c02f630e83903104030da0140c704053680b4100b3680b080053680b4100b", - "0xbd780538c0b4100b0e80b47c053800b4100b0d00b3dc050150402c0503005", - "0x3f02f5f014e002d0402ce002c5c0143902d0402c3902d010143f02d0402ce3", - "0x220142e02d0402c3c02d01014054100b0140c0143f380390400b0fc0b4100b", - "0xb4100b0140b404050150402c05030050176002c050ac050bc0b4100b0d00b", - "0xd002c2c014054100b0140c01405d800b0142b0142f02d0402cd602c220142e", - "0xb4100b1080bd90051080b4100b014310144002d0402c1002cf7014054100b", - "0xe802d0402ce802f5f0144002d0402c4002c5c0140502d0402c0502d01014e8", - "0x10402d0202c220142e02d0402c0502d01014054100b0140c014e8100050400b", - "0xee02d0402c2f02cf7014ec02d0402cea02f64014ea02d0402c050c4050bc0b", - "0x502c0c3b00502c0b4100b014e0014ec3b82e0400b3b00b4100b3b00bd7c05", - "0xb0440bd9c050440b4100b03010033660141002d0402c05d94050300b4100b", - "0x200336805d02031040300b0140c02c050150402c050f4050440b02c1102d04", - "0xbda4054100c0780b07805078110310402c1102c1b014054100b0140c0141b", - "0xb8f0050880b4100b05c0b400050150402c1102c1f014054100b0140c0141f", - "0xb404050600b4100b4000bdac054000b4100b08c0c0336a0142302d0402c10", - "0x224081002c1802d0402c1802f6c0142202d0402c2202c140150202d0402d02", - "0xb044054040b4100b0300b040050150402c1f02c2c014054100b0140c01418", - "0x17014fc02d0402c2902d02014054100b0140c0142b02f6d0a4140310403101", - "0x36e0bc2e031040302c4080ca00050b00b4100b0b00b080050b00b4100b3f00b", - "0xd002d0402c2f0400cdbc053080b4100b05c0b400050150402c05030050c40b", - "0x53580b4100b0500b3dc050d80b4100b0d0110302f0143402d0402c050b805", - "0x235014d602d0402cd602c5c014c202d0402cc202c140142e02d0402c2e02d01", - "0x104100b0d8d0358c20b9028d8050d80b4100b0d80b080053400b4100b3400b", - "0x1002f70014054100b0440b07c050150402c05030050e4da3601002c39368d8", - "0x10402c3a02c140143c02d0402c3102d010143a02d0402c1702d00014054100b", - "0xb07c050150402c05030050177102c050ac0538c0b4100b0500b088053800b", - "0x10402d0202d010143f02d0402c1702d00014054100b0400bdc0050150402c11", - "0x4002d0402c050c40538c0b4100b0ac0b088053800b4100b0fc0b050050f00b", - "0xea02d0402c423a00cda8053a00b4100b38c0b3dc051080b4100b1000b91405", - "0x53800b4100b3800b050050f00b4100b0f00b404053b00b4100b3a80bdac05", - "0x54100b0440b07c050150402c05030053b0e00f01002cec02d0402cec02f6c", - "0xee02f72014ee02d0402c05168050150402c0c02cf6014054100b0400bdc005", - "0xb1300bdb00506c0b4100b06c0b050050800b4100b0800b404051300b4100b", - "0xb0143d014054100b017270141102d0402c05c98051301b0801002c4c02d04", - "0x50300506c0bdcc2005c0c4100c4080b044054080b4100b0300b0400501504", - "0xb0400b05c050400b4100b04011033290141002d0402c2002d02014054100b", - "0xb088050150402c050300508c0bdd02207c0c4100c07805031c40141e02d04", - "0x102014054100b0140c0150102f7506100031040301702c110141702d0402c17", - "0x10002cf70142b02d0402c05cb0050a40b4100b0500b05c050500b4100b0600b", - "0xb3f00b1700502c0b4100b02c0b0500507c0b4100b07c0b404053f00b4100b", - "0xfc02c1f40b2e0142902d0402c2902c200142b02d0402c2b02f2d014fc02d04", - "0x54100b0140c014c202f760c40b4100c0bc0b470050bc2e0b0104100b0a42b", - "0x10402c05030053580bddc3602d040303402f31014343400c4100b0c40bcc005", - "0xb4100b3680b97c053680b4100b0d82203378014d802d0402c2e02d0001405", - "0xb4100b0b00b404050f00b4100b0e80bde8050e80b4100b0e4d00337901439", - "0x5030050f0d80b01002c3c02d0402c3c02f7b014d802d0402cd802c140142c", - "0xe002d0402c2e02d00014054100b0880b57c050150402cd602c4c014054100b", - "0x51000b4100b3800b050050fc0b4100b0b00b4040538c0b4100b3400b04005", - "0x10402c2202d5f014054100b0140c01405df00b0142b0144202d0402ce302c22", - "0x2e02d0402c2e02c140142c02d0402c2c02d01014e802d0402cc202f7d01405", - "0x10402c2202d5f014054100b0140c014e80b82c0400b3a00b4100b3a00bdec05", - "0x4002d0402cea02c140143f02d0402c1f02d01014ea02d0402c0b02d0001405", - "0x267014ee02d0402c4202cf7014ec02d0402c050c4051080b4100b4040b08805", - "0x1010144d02d0402c3d02f7a0143d02d0402c4c3b80cde4051300b4100b3b00b", - "0x3f0400b1340b4100b1340bdec051000b4100b1000b050050fc0b4100b0fc0b", - "0x53dc0b4100b08c0b404053d40b4100b02c0b400050150402c050300513440", - "0xb0140c01405df80b0142b0145302d0402c1702c220145102d0402cf502c14", - "0xf702d0402c0502d01014f802d0402c0b02d00014054100b0440bcf40501504", - "0x2670145602d0402c050c40514c0b4100b06c0b088051440b4100b3e00b05005", - "0x37a0145a02d0402c583d80cde4053d80b4100b14c0b3dc051600b4100b1580b", - "0xbdec051440b4100b1440b050053dc0b4100b3dc0b404051700b4100b1680b", - "0x102031040300b0140c02c050150402c050f405170513dc1002c5c02d0402c5c", - "0xc0780b07805078110310402c1102c1b014054100b0140c0141b0800cdfc17", - "0xb4100b05c0b400050150402c1102c1f014054100b0140c0141f02f8001504", - "0xb4100b4000be0c054000b4100b08c0c033820142302d0402c1002f8101422", - "0x1802d0402c1802f840142202d0402c2202c140150202d0402d0202d0101418", - "0xb4100b0300b040050150402c1f02c2c014054100b0140c01418089020400b", - "0x10402c2902d02014054100b0140c0142b02f850a414031040310102c1101501", - "0x1040302c4080c08c050b00b4100b0b00b080050b00b4100b3f00b05c053f00b", - "0x2f0400ce1c053080b4100b05c0b400050150402c05030050c40be182f0b80c", - "0xb0500b3dc050d80b4100b0d0110302f0143402d0402c050b8053400b4100b", - "0x10402cd602c5c014c202d0402cc202c140142e02d0402c2e02d01014d602d04", - "0xd0358c20b902af4050d80b4100b0d80b080053400b4100b3400baf0053580b", - "0x54100b0440b07c050150402c05030050e4da3601002c39368d80410402c36", - "0x140143c02d0402c3102d010143a02d0402c1702d00014054100b0400be2005", - "0x10402c05030050178902c050ac0538c0b4100b0500b088053800b4100b0e80b", - "0x1010143f02d0402c1702d00014054100b0400be20050150402c1102c1f01405", - "0x50c40538c0b4100b0ac0b088053800b4100b0fc0b050050f00b4100b4080b", - "0x423a00ce08053a00b4100b38c0b3dc051080b4100b1000be28051000b4100b", - "0xb3800b050050f00b4100b0f00b404053b00b4100b3a80be0c053a80b4100b", - "0xb07c050150402c05030053b0e00f01002cec02d0402cec02f84014e002d04", - "0xee02d0402c05168050150402c0c02cf6014054100b0400be20050150402c11", - "0x506c0b4100b06c0b050050800b4100b0800b404051300b4100b3b80be2c05", - "0x54100b017270141102d0402c05c98051301b0801002c4c02d0402c4c02f84", - "0xbe302005c0c4100c4080b044054080b4100b0300b040050150402c050f405", - "0x50400b4100b04011033290141002d0402c2002d02014054100b0140c0141b", - "0x10402c050300508c0be342207c0c4100c07805030230141e02d0402c1002c17", - "0xb0140c0150102f8e06100031040301702c110141702d0402c1702c2201405", - "0x2b02d0402c05aec050a40b4100b0500b05c050500b4100b0600b4080501504", - "0x502c0b4100b02c0b0500507c0b4100b07c0b404053f00b4100b4000b3dc05", - "0x2bd0142902d0402c2902c200142b02d0402c2b02ebc014fc02d0402cfc02c5c", - "0xc014c202f8f0c40b4100c0bc0b460050bc2e0b0104100b0a42b3f00b07d02", - "0x53580be403602d040303402ec0014343400c4100b0c40bafc050150402c05", - "0xbe48053680b4100b0d82203391014d802d0402c2e02d00014054100b0140c", - "0xb404050f00b4100b0e80be50050e80b4100b0e4d0033930143902d0402cda", - "0xd80b01002c3c02d0402c3c02f95014d802d0402cd802c140142c02d0402c2c", - "0x2e02d00014054100b0880b2ec050150402cd602c4c014054100b0140c0143c", - "0xb3800b050050fc0b4100b0b00b4040538c0b4100b3400b040053800b4100b", - "0xbb014054100b0140c01405e580b0142b0144202d0402ce302c220144002d04", - "0x2e02c140142c02d0402c2c02d01014e802d0402cc202f97014054100b0880b", - "0xbb014054100b0140c014e80b82c0400b3a00b4100b3a00be54050b80b4100b", - "0xea02c140143f02d0402c1f02d01014ea02d0402c0b02d00014054100b0880b", - "0x10402c4202cf7014ec02d0402c050c4051080b4100b4040b088051000b4100b", - "0x10402c3d02f940143d02d0402c4c3b80ce4c051300b4100b3b00be60053b80b", - "0xb4100b1340be54051000b4100b1000b050050fc0b4100b0fc0b404051340b", - "0xb08c0b404053d40b4100b02c0b400050150402c0503005134400fc1002c4d", - "0x5e640b0142b0145302d0402c1702c220145102d0402cf502c14014f702d04", - "0x502d01014f802d0402c0b02d00014054100b0440bcf4050150402c0503005", - "0x10402c050c40514c0b4100b06c0b088051440b4100b3e00b050053dc0b4100b", - "0x10402c583d80ce4c053d80b4100b14c0b3dc051600b4100b1580be60051580b", - "0xb4100b1440b050053dc0b4100b3dc0b404051700b4100b1680be50051680b", - "0xb044050300b4100b02c0b04005170513dc1002c5c02d0402c5c02f9501451", - "0x170141702d0402c1102d02014054100b0140c0150202f9a04410031040300c", - "0x39b0781b03104030200140c08c050800b4100b0800b080050800b4100b05c0b", - "0x230880c4100c0400b044050400b4100b0400b088050150402c050300507c0b", - "0x10102d0402c1802c170141802d0402c2302d02014054100b0140c0150002f9c", - "0xb0140c0142b02f9d0a414031040310106c0c710054040b4100b4040b08005", - "0x5030050b80be782c3f00c4100c0880b044050880b4100b0880b0880501504", - "0x10402c3102c200143102d0402c2f02c170142f02d0402c2c02d02014054100b", - "0xfc02cf7014054100b0140c0143402f9f340c203104030310500c704050c40b", - "0xb404053600b4100b3580b490053580b4100b3402907810e80050d80b4100b", - "0x363081002cd802d0402cd802fa10143602d0402c3602c5c014c202d0402cc2", - "0x3402d01014054100b0a40b57c050150402c1e02cbb014054100b0140c014d8", - "0x50150402c0503005017a202c050ac050e40b4100b3f00b088053680b4100b", - "0x2e02c22014da02d0402c1402d01014054100b0a40b57c050150402c1e02cbb", - "0x101014054100b0780b2ec050150402c0503005017a202c050ac050e40b4100b", - "0x10402c0503005017a202c050ac050e40b4100b0880b088053680b4100b0ac0b", - "0x50e40b4100b4000b088053680b4100b06c0b404050150402c1e02cbb01405", - "0x10402c1002c22014da02d0402c1f02d01014054100b0140c01405e880b0142b", - "0xb088053680b4100b0140b404050150402c0503005017a202c050ac050e40b", - "0xb0e40b3dc050f00b4100b0e80be8c050e80b4100b014310143902d0402d02", - "0xc02c050150402c050f4050f0e03681002c3c02d0402c3c02fa1014e002d04", - "0x110310402c1102c1b014054100b0140c0141b0800ce90174080c4100c02c05", - "0x50150402c1102c1f014054100b0140c0141f02fa5015040301e02c1e0141e", - "0x54000b4100b08c0c033a70142302d0402c1002fa60142202d0402c1702d00", - "0x3a90142202d0402c2202c140150202d0402d0202d010141802d0402d0002fa8", - "0x50150402c1f02c2c014054100b0140c01418089020400b0600b4100b0600b", - "0x54100b0140c0142b02faa0a414031040310102c110150102d0402c0c02c10", - "0x50b00b4100b0b00b080050b00b4100b3f00b05c053f00b4100b0a40b40805", - "0xb4100b05c0b400050150402c05030050c40beac2f0b80c4100c0b102031c4", - "0xb4100b0d0110302f0143402d0402c050b8053400b4100b0bc10033ac014c2", - "0xc202d0402cc202c140142e02d0402c2e02d01014d602d0402c1402cf701436", - "0x50d80b4100b0d80b080053400b4100b3400bcb4053580b4100b3580b17005", - "0x50150402c05030050e4da3601002c39368d80410402c36340d63082e40b2e", - "0x3102d010143a02d0402c1702d00014054100b0400bcd0050150402c1102c1f", - "0x3ad02c050ac0538c0b4100b0500b088053800b4100b0e80b050050f00b4100b", - "0x1702d00014054100b0400bcd0050150402c1102c1f014054100b0140c01405", - "0xb0ac0b088053800b4100b0fc0b050050f00b4100b4080b404050fc0b4100b", - "0xb4100b38c0b3dc051080b4100b1000beb8051000b4100b01431014e302d04", - "0xb4100b0f00b404053b00b4100b3a80bea0053a80b4100b108e8033a7014e8", - "0x5030053b0e00f01002cec02d0402cec02fa9014e002d0402ce002c140143c", - "0x50150402c0c02cf6014054100b0400bcd0050150402c1102c1f014054100b", - "0xb050050800b4100b0800b404051300b4100b3b80bebc053b80b4100b0145a", - "0xb4100b02c0b040051301b0801002c4c02d0402c4c02fa90141b02d0402c1b", - "0x10402c1102d02014054100b0140c0150202fb004410031040300c02c110140c", - "0x104030200140c08c050800b4100b0800b080050800b4100b05c0b05c0505c0b", - "0xc0400b044050400b4100b0400b088050150402c050300507c0bec41e06c0c", - "0x1802c170141802d0402c2302d02014054100b0140c0150002fb208c2203104", - "0x2b02fb30a414031040310106c0c08c054040b4100b4040b080054040b4100b", - "0xbed02c3f00c4100c0880b044050880b4100b0880b088050150402c0503005", - "0x200143102d0402c2f02c170142f02d0402c2c02d02014054100b0140c0142e", - "0x54100b0140c0143402fb5340c203104030310500c08c050c40b4100b0c40b", - "0xb4100b3580bedc053580b4100b3402907810ed8050d80b4100b3f00b3dc05", - "0xd802d0402cd802fb80143602d0402c3602c5c014c202d0402cc202d01014d8", - "0x54100b0a40b2ec050150402c1e02cbb014054100b0140c014d80d8c20400b", - "0x503005017b902c050ac050e40b4100b3f00b088053680b4100b0d00b40405", - "0xda02d0402c1402d01014054100b0a40b2ec050150402c1e02cbb014054100b", - "0xb0780b2ec050150402c0503005017b902c050ac050e40b4100b0b80b08805", - "0x5017b902c050ac050e40b4100b0880b088053680b4100b0ac0b4040501504", - "0xb4000b088053680b4100b06c0b404050150402c1e02cbb014054100b0140c", - "0x22014da02d0402c1f02d01014054100b0140c01405ee40b0142b0143902d04", - "0xb4100b0140b404050150402c0503005017b902c050ac050e40b4100b0400b", - "0x50f00b4100b0e80bee8050e80b4100b014310143902d0402d0202c22014da", - "0xc42e4050445f0f0e03681002c3c02d0402c3c02fb8014e002d0402c3902cf7", - "0x100300b014c3310b90141107cc42e405044050400c02c0530cc42e4050441f", - "0xc42e4050441f310b901411970100300b014c3310b90141107cc42e4050457e", - "0xc42e405047bb0400c02c0530cc42e4050441f310b901411db0100300b014c3", - "0x100300b014c3310b90141107cc42e405047bc0400c02c0530cc42e4050441f", - "0xc42e4050441f310b901411ef8100300b014c3310b90141107cc42e405047bd", - "0xc42e405047c00400c02c0530cc42e4050441f310b901411efc100300b014c3", - "0x100300b014c3310b90141107cc42e405047c10400c02c0530cc42e4050441f", - "0xc42e4050441f310b901411f0c100300b014c3310b90141107cc42e405047c2", - "0xc42e405047c50400c02c0530cc42e4050441f310b901411f10100300b014c3", - "0x100300b014c3310b90141107cc42e405047c60400c02c0530cc42e4050441f", - "0xc42e4050441f310b901411f20100300b014c3310b90141107cc42e405047c7", - "0xc42e405047ca0400c02c0530cc42e4050441f310b901411f24100300b014c3", - "0x100300b014c3310b90141107cc42e405047cb0400c02c0530cc42e4050441f", - "0xc42e4050441f310b901411f34100300b014c3310b90141107cc42e405047cc", - "0xb90141007cb901410f442302c05f402302c05f3c2302c05f38100300b014c3", - "0x1f0141007c05033d30400c02c0535cb90141006cd52e405047d20300b014d1", - "0xd72e4050401b170b901411f540c02c0536cb90141007cb901410f500b014d9", - "0x3d802c053781f0141007c05033d702c053741f0141007c05033d60400c02c05", - "0xd72e4050401b388b901411f64110400c02c05384b9014100608b07cb901502", - "0xb014e62e4050401f2e405043db02c053901f0141007c05033da0400c02c05", - "0xb014e907c050401f0140cf74100300b014d72e4050401b39cb901411f700c", - "0x5033e002c053b41f0141007c05033df0300b014eb2e4050401f2e405043de", - "0xf307c050401f0140cf880b014f207c050401f0140cf840b014ef07c050401f", - "0x3e502c053d81f0141007c05033e40300b014f42e4050401f2e405043e302c05", - "0x508c0b0600bf9c0b014f707c050401f0140cf980b014f807c050401f0140c", - "0xe02e4050401f2e405043e9044100300b014e82e405040180fc1f2e40540be8", - "0x1007cb901410fac110400c02c05358b9014100602c07cb901502fa80c02c05", - "0x50401805c1f2e40540bed02c053f01f0141007c05033ec0300b014c22e405", - "0xfbc0b0150207c050401f0140cfb8110400c02c05400b9" - ], - "sierra_program_debug_info": { - "type_names": [ - [0, "RangeCheck"], - [1, "core::panics::Panic"], - [2, "u16"], - [3, "Tuple"], - [4, "Unit"], - [5, "core::option::Option::<[core::integer::u16; 3]>"], - [6, "Array"], - [7, "core::option::Option::>"], - [8, "Array"], - [9, "Snapshot>"], - [10, "core::array::Span::"], - [ - 11, - "Tuple, core::option::Option::>>" - ], - [12, "Tuple>"], - [ - 13, - "core::panics::PanicResult::<(core::array::Span::, core::option::Option::>)>" - ], - [14, "felt252"], - [15, "Uninitialized"], - [16, "u32"], - [17, "u64"], - [18, "Tuple"], - [19, "core::option::Option::<(core::integer::u16, core::integer::u32, core::integer::u64)>"], - [20, "Array"], - [21, "Tuple>"], - [ - 22, - "core::option::Option::<(core::integer::u16, core::array::Array::)>" - ], - [ - 23, - "Tuple, core::option::Option::<(core::integer::u16, core::array::Array::)>>" - ], - [ - 24, - "core::panics::PanicResult::<(core::array::Span::, core::option::Option::<(core::integer::u16, core::array::Array::)>)>" - ], - [25, "Box"], - [26, "core::option::Option::>"], - [ - 27, - "Tuple, core::option::Option::>>" - ], - [ - 28, - "core::panics::PanicResult::<(core::array::Span::, core::option::Option::>)>" - ], - [29, "Box>"], - [30, "Box"], - [31, "Tuple>"], - [ - 32, - "core::option::Option::<(core::integer::u32, core::array::Array::)>" - ], - [ - 33, - "Tuple, core::option::Option::<(core::integer::u32, core::array::Array::)>>" - ], - [ - 34, - "core::panics::PanicResult::<(core::array::Span::, core::option::Option::<(core::integer::u32, core::array::Array::)>)>" - ], - [35, "Box"], - [36, "Array"], - [37, "core::option::Option::>"], - [ - 38, - "Tuple, core::option::Option::>>" - ], - [ - 39, - "core::panics::PanicResult::<(core::array::Span::, core::option::Option::>)>" - ], - [40, "Const"], - [ - 41, - "Const" - ], - [42, "Const"], - [43, "u128"], - [44, "u8"], - [45, "core::result::Result::"], - [46, "enums::Destruction"], - [47, "core::option::Option::>"], - [48, "core::option::Option::"], - [49, "enums::Truck"], - [50, "core::option::Option::"], - [51, "Tuple"], - [52, "enums::Horse"], - [53, "core::option::Option::"], - [54, "Snapshot>"], - [55, "core::array::Span::"], - [56, "enums::Dog"], - [57, "core::option::Option::"], - [58, "Tuple, core::option::Option::>"], - [ - 59, - "core::panics::PanicResult::<(core::array::Span::, core::option::Option::)>" - ], - [60, "Tuple"], - [61, "enums::Cat"], - [62, "core::option::Option::"], - [63, "enums::Point"], - [64, "enums::Point2"], - [65, "core::option::Option::"], - [66, "core::option::Option::"], - [67, "core::result::Result::>"], - [ - 68, - "core::option::Option::>>" - ], - [69, "core::result::Result::"], - [ - 70, - "core::result::Result::, core::integer::u32>" - ], - [ - 71, - "core::option::Option::, core::integer::u32>>" - ], - [72, "Snapshot>>"], - [ - 73, - "core::result::Result::<(core::integer::u32, core::array::Array::), (core::integer::u16, core::array::Array::)>" - ], - [ - 74, - "Snapshot), (core::integer::u16, core::array::Array::)>>" - ], - [ - 75, - "core::option::Option::), (core::integer::u16, core::array::Array::)>>" - ], - [ - 76, - "Tuple, core::option::Option::), (core::integer::u16, core::array::Array::)>>>" - ], - [ - 77, - "core::panics::PanicResult::<(core::array::Span::, core::option::Option::), (core::integer::u16, core::array::Array::)>>)>" - ], - [78, "Tuple"], - [79, "Tuple"], - [80, "core::result::Result::<[core::integer::u32; 3], [core::integer::u16; 2]>"], - [ - 81, - "core::option::Option::>" - ], - [82, "Snapshot>"], - [83, "core::array::Span::"], - [ - 84, - "core::result::Result::, core::array::Array::>" - ], - [ - 85, - "Snapshot, core::array::Array::>>" - ], - [ - 86, - "core::option::Option::, core::array::Array::>>" - ], - [ - 87, - "Tuple, core::option::Option::, core::array::Array::>>>" - ], - [ - 88, - "core::panics::PanicResult::<(core::array::Span::, core::option::Option::, core::array::Array::>>)>" - ], - [89, "core::option::Option::"], - [90, "core::option::Option::>"], - [91, "Array>"], - [92, "Snapshot>>"], - [93, "core::array::Span::>"], - [ - 94, - "core::option::Option::>>" - ], - [ - 95, - "Tuple, core::option::Option::>>>" - ], - [ - 96, - "core::panics::PanicResult::<(core::array::Span::, core::option::Option::>>)>" - ], - [97, "core::option::Option::>"], - [98, "core::option::Option::"], - [99, "core::option::Option::>"], - [ - 100, - "core::option::Option::>>" - ], - [101, "Snapshot>>"], - [ - 102, - "Snapshot)>>" - ], - [ - 103, - "core::option::Option::)>>" - ], - [ - 104, - "Tuple, core::option::Option::)>>>" - ], - [ - 105, - "core::panics::PanicResult::<(core::array::Span::, core::option::Option::)>>)>" - ], - [106, "core::option::Option::<[core::integer::u32; 3]>"], - [107, "Tuple, Unit>"], - [108, "core::panics::PanicResult::<(core::array::Array::, ())>"], - [109, "Snapshot>"], - [110, "core::array::Span::"], - [111, "Snapshot>>"], - [ - 112, - "core::option::Option::>>" - ], - [ - 113, - "Tuple, core::option::Option::>>>" - ], - [ - 114, - "core::panics::PanicResult::<(core::array::Span::, core::option::Option::>>)>" - ], - [115, "Tuple>"], - [116, "Const"], - [117, "BuiltinCosts"], - [118, "System"], - [119, "core::panics::PanicResult::<(core::array::Span::,)>"], - [120, "Const"], - [121, "NonZero"], - [122, "Box"], - [123, "GasBuiltin"] - ], - "libfunc_names": [ - [0, "revoke_ap_tracking"], - [1, "withdraw_gas"], - [2, "branch_align"], - [3, "struct_deconstruct>"], - [4, "array_snapshot_pop_front"], - [5, "unbox"], - [6, "rename"], - [7, "store_temp"], - [8, "dup"], - [9, "felt252_is_zero"], - [10, "drop"], - [11, "store_temp>>"], - [12, "u16_try_from_felt252"], - [13, "redeposit_gas"], - [14, "enum_init, 0>"], - [15, "store_temp"], - [16, "store_temp"], - [17, "store_temp>"], - [18, "jump"], - [19, "drop>>"], - [20, "drop>"], - [21, "const_as_immediate>"], - [22, "felt252_sub"], - [23, "struct_construct"], - [24, "enum_init, 1>"], - [25, "drop>"], - [26, "drop>"], - [ - 27, - "function_call>" - ], - [28, "enum_init,)>, 1>"], - [29, "store_temp"], - [30, "store_temp,)>>"], - [31, "get_builtin_costs"], - [32, "store_temp"], - [33, "withdraw_gas_all"], - [34, "array_new"], - [35, "snapshot_take>"], - [36, "enable_ap_tracking"], - [37, "enum_match>"], - [38, "rename"], - [39, "u16_to_felt252"], - [40, "const_as_immediate>"], - [41, "array_append"], - [42, "store_temp>"], - [43, "drop"], - [44, "disable_ap_tracking"], - [45, "snapshot_take>"], - [46, "drop>"], - [47, "struct_construct>"], - [48, "struct_construct>>"], - [49, "enum_init,)>, 0>"], - [50, "rename"], - [51, "rename"], - [ - 52, - "function_call>" - ], - [53, "drop>"], - [54, "function_call>"], - [55, "store_temp>"], - [ - 56, - "function_call, core::array::ArraySerde::, core::integer::u8Drop>>::deserialize>" - ], - [ - 57, - "enum_match, core::option::Option::>>)>>" - ], - [ - 58, - "struct_deconstruct, core::option::Option::>>>>" - ], - [ - 59, - "enum_match>>>" - ], - [60, "drop>>"], - [61, "snapshot_take>>"], - [62, "enum_snapshot_match>>"], - [63, "dup>>"], - [64, "array_len"], - [65, "u32_to_felt252"], - [66, "struct_construct>"], - [67, "store_temp>"], - [ - 68, - "function_call, core::integer::u8Drop>>" - ], - [69, "enum_match, ())>>"], - [70, "struct_deconstruct, Unit>>"], - [ - 71, - "function_call, core::serde::into_felt252_based::SerdeImpl::, core::tuple::DeserializeTupleNext::<[core::integer::u32; 2], core::fixed_size_array::TupleSplitFixedSizedArraySized2::, core::serde::into_felt252_based::SerdeImpl::, core::tuple::DeserializeTupleNext::<[core::integer::u32; 1], core::fixed_size_array::TupleSplitFixedSizedArraySized1::, core::serde::into_felt252_based::SerdeImpl::, core::tuple::DeserializeTupleBaseFixedSizedArray::, core::integer::u32Drop>, core::integer::u32Drop>, core::integer::u32Drop>::deserialize>" - ], - [72, "enum_match>"], - [73, "enum_init, 0>"], - [74, "store_temp>"], - [75, "enum_init, 1>"], - [76, "drop>"], - [77, "snapshot_take>"], - [78, "struct_deconstruct>"], - [79, "rename"], - [ - 80, - "function_call), core::tuple::SerdeTuple::<(core::integer::u32, core::array::Array::), core::tuple::TupleSnapForwardTupleSize2::>, core::tuple::SerializeTupleNext::<(@core::integer::u32, @core::array::Array::), core::tuple::TupleSplitTupleSize2::<@core::integer::u32, @core::array::Array::>, core::tuple::SerdeBasedSerializeTuple::>, core::tuple::SerializeTupleNext::<(@core::array::Array::,), core::tuple::TupleSplitTupleSize1::<@core::array::Array::>, core::tuple::SerdeBasedSerializeTuple::, core::array::ArraySerde::, core::integer::u32Drop>>, core::tuple::SerializeTupleBaseTuple, core::tuple::TupleSize0Drop>, core::tuple::TupleNextDrop::<(@core::array::Array::,), core::tuple::TupleSplitTupleSize1::<@core::array::Array::>, core::tuple::IsTupleTupleSize1::<@core::array::Array::>, core::traits::SnapshotDrop::>, core::tuple::TupleSize0Drop>>, core::tuple::DeserializeTupleNext::<(core::integer::u32, core::array::Array::), core::tuple::TupleSplitTupleSize2::>, core::serde::into_felt252_based::SerdeImpl::, core::tuple::DeserializeTupleNext::<(core::array::Array::,), core::tuple::TupleSplitTupleSize1::>, core::array::ArraySerde::, core::integer::u32Drop>, core::tuple::DeserializeTupleBaseTuple, core::array::ArrayDrop::>, core::integer::u32Drop>>>::deserialize>" - ], - [ - 81, - "enum_match, core::option::Option::)>>)>>" - ], - [ - 82, - "struct_deconstruct, core::option::Option::)>>>>" - ], - [ - 83, - "enum_match)>>>" - ], - [ - 84, - "drop)>>" - ], - [ - 85, - "snapshot_take)>>" - ], - [ - 86, - "enum_snapshot_match)>>" - ], - [87, "struct_snapshot_deconstruct>>"], - [88, "dup>>"], - [89, "array_len"], - [90, "struct_construct>"], - [91, "store_temp>"], - [ - 92, - "function_call, core::integer::u32Drop>>" - ], - [ - 93, - "function_call, core::option::OptionSerde::>>::deserialize>" - ], - [ - 94, - "enum_match>>>" - ], - [95, "drop>>"], - [96, "snapshot_take>>"], - [97, "enum_match>>"], - [ - 98, - "function_call, core::serde::into_felt252_based::SerdeImpl::>::deserialize>" - ], - [ - 99, - "enum_match>>" - ], - [ - 100, - "enum_init>, 0>" - ], - [ - 101, - "store_temp>>" - ], - [ - 102, - "enum_init>, 1>" - ], - [ - 103, - "drop>>" - ], - [ - 104, - "snapshot_take>>" - ], - [105, "enum_match>"], - [106, "rename"], - [107, "u8_to_felt252"], - [108, "array_new>"], - [109, "store_temp>>"], - [ - 110, - "function_call, core::option::OptionSerde::>, core::option::OptionDrop::>>" - ], - [ - 111, - "enum_match, core::option::Option::>>)>>" - ], - [ - 112, - "struct_deconstruct, core::option::Option::>>>>" - ], - [ - 113, - "enum_match>>>" - ], - [114, "drop>>"], - [115, "snapshot_take>>"], - [116, "dup>>>"], - [117, "array_len>"], - [118, "struct_construct>>"], - [119, "store_temp>>"], - [ - 120, - "function_call, core::option::OptionSerde::>, core::option::OptionDrop::>>" - ], - [121, "drop"], - [ - 122, - "function_call::deserialize>" - ], - [123, "enum_match>>"], - [124, "drop>"], - [125, "snapshot_take>"], - [126, "enum_match>"], - [127, "dup"], - [128, "struct_deconstruct"], - [129, "drop"], - [130, "rename"], - [131, "u64_to_felt252"], - [132, "drop"], - [133, "drop>"], - [134, "snapshot_take>"], - [ - 135, - "function_call, core::array::Array::, core::array::ArraySerde::, core::integer::u8Drop>, core::array::ArraySerde::, core::integer::u16Drop>>::deserialize>" - ], - [ - 136, - "enum_match, core::option::Option::, core::array::Array::>>)>>" - ], - [ - 137, - "struct_deconstruct, core::option::Option::, core::array::Array::>>>>" - ], - [ - 138, - "enum_match, core::array::Array::>>>" - ], - [ - 139, - "drop, core::array::Array::>>" - ], - [ - 140, - "snapshot_take, core::array::Array::>>" - ], - [ - 141, - "enum_snapshot_match, core::array::Array::>>" - ], - [142, "rename, ())>>"], - [143, "dup>>"], - [144, "array_len"], - [145, "struct_construct>"], - [146, "store_temp>"], - [ - 147, - "function_call, core::integer::u16Drop>>" - ], - [ - 148, - "function_call, core::tuple::SerializeTupleNext::<[@core::integer::u32; 3], core::fixed_size_array::TupleSplitFixedSizedArraySized3::<@core::integer::u32>, core::tuple::SerdeBasedSerializeTuple::>, core::tuple::SerializeTupleNext::<[@core::integer::u32; 2], core::fixed_size_array::TupleSplitFixedSizedArraySized2::<@core::integer::u32>, core::tuple::SerdeBasedSerializeTuple::>, core::tuple::SerializeTupleNext::<[@core::integer::u32; 1], core::fixed_size_array::TupleSplitFixedSizedArraySized1::<@core::integer::u32>, core::tuple::SerdeBasedSerializeTuple::>, core::tuple::SerializeTupleBaseFixedSizedArray::, core::fixed_size_array::FixedSizedArrayDrop::<@core::integer::u32, core::traits::SnapshotDrop::, 0>>, core::fixed_size_array::FixedSizedArrayDrop::<@core::integer::u32, core::traits::SnapshotDrop::, 1>>, core::fixed_size_array::FixedSizedArrayDrop::<@core::integer::u32, core::traits::SnapshotDrop::, 2>>, core::tuple::DeserializeTupleNext::<[core::integer::u32; 3], core::fixed_size_array::TupleSplitFixedSizedArraySized3::, core::serde::into_felt252_based::SerdeImpl::, core::tuple::DeserializeTupleNext::<[core::integer::u32; 2], core::fixed_size_array::TupleSplitFixedSizedArraySized2::, core::serde::into_felt252_based::SerdeImpl::, core::tuple::DeserializeTupleNext::<[core::integer::u32; 1], core::fixed_size_array::TupleSplitFixedSizedArraySized1::, core::serde::into_felt252_based::SerdeImpl::, core::tuple::DeserializeTupleBaseFixedSizedArray::, core::integer::u32Drop>, core::integer::u32Drop>, core::integer::u32Drop>>, core::tuple::SerdeTuple::<[core::integer::u16; 2], core::fixed_size_array::TupleSnapForwardFixedSizedArraySized2::, core::tuple::SerializeTupleNext::<[@core::integer::u16; 2], core::fixed_size_array::TupleSplitFixedSizedArraySized2::<@core::integer::u16>, core::tuple::SerdeBasedSerializeTuple::>, core::tuple::SerializeTupleNext::<[@core::integer::u16; 1], core::fixed_size_array::TupleSplitFixedSizedArraySized1::<@core::integer::u16>, core::tuple::SerdeBasedSerializeTuple::>, core::tuple::SerializeTupleBaseFixedSizedArray::, core::fixed_size_array::FixedSizedArrayDrop::<@core::integer::u16, core::traits::SnapshotDrop::, 0>>, core::fixed_size_array::FixedSizedArrayDrop::<@core::integer::u16, core::traits::SnapshotDrop::, 1>>, core::tuple::DeserializeTupleNext::<[core::integer::u16; 2], core::fixed_size_array::TupleSplitFixedSizedArraySized2::, core::serde::into_felt252_based::SerdeImpl::, core::tuple::DeserializeTupleNext::<[core::integer::u16; 1], core::fixed_size_array::TupleSplitFixedSizedArraySized1::, core::serde::into_felt252_based::SerdeImpl::, core::tuple::DeserializeTupleBaseFixedSizedArray::, core::integer::u16Drop>, core::integer::u16Drop>>>::deserialize>" - ], - [ - 149, - "enum_match>>" - ], - [150, "drop>"], - [ - 151, - "snapshot_take>" - ], - [152, "enum_match>"], - [153, "struct_deconstruct>"], - [ - 154, - "function_call), (core::integer::u16, core::array::Array::), core::tuple::SerdeTuple::<(core::integer::u32, core::array::Array::), core::tuple::TupleSnapForwardTupleSize2::>, core::tuple::SerializeTupleNext::<(@core::integer::u32, @core::array::Array::), core::tuple::TupleSplitTupleSize2::<@core::integer::u32, @core::array::Array::>, core::tuple::SerdeBasedSerializeTuple::>, core::tuple::SerializeTupleNext::<(@core::array::Array::,), core::tuple::TupleSplitTupleSize1::<@core::array::Array::>, core::tuple::SerdeBasedSerializeTuple::, core::array::ArraySerde::, core::integer::u32Drop>>, core::tuple::SerializeTupleBaseTuple, core::tuple::TupleSize0Drop>, core::tuple::TupleNextDrop::<(@core::array::Array::,), core::tuple::TupleSplitTupleSize1::<@core::array::Array::>, core::tuple::IsTupleTupleSize1::<@core::array::Array::>, core::traits::SnapshotDrop::>, core::tuple::TupleSize0Drop>>, core::tuple::DeserializeTupleNext::<(core::integer::u32, core::array::Array::), core::tuple::TupleSplitTupleSize2::>, core::serde::into_felt252_based::SerdeImpl::, core::tuple::DeserializeTupleNext::<(core::array::Array::,), core::tuple::TupleSplitTupleSize1::>, core::array::ArraySerde::, core::integer::u32Drop>, core::tuple::DeserializeTupleBaseTuple, core::array::ArrayDrop::>, core::integer::u32Drop>>, core::tuple::SerdeTuple::<(core::integer::u16, core::array::Array::), core::tuple::TupleSnapForwardTupleSize2::>, core::tuple::SerializeTupleNext::<(@core::integer::u16, @core::array::Array::), core::tuple::TupleSplitTupleSize2::<@core::integer::u16, @core::array::Array::>, core::tuple::SerdeBasedSerializeTuple::>, core::tuple::SerializeTupleNext::<(@core::array::Array::,), core::tuple::TupleSplitTupleSize1::<@core::array::Array::>, core::tuple::SerdeBasedSerializeTuple::, core::array::ArraySerde::, core::integer::u16Drop>>, core::tuple::SerializeTupleBaseTuple, core::tuple::TupleSize0Drop>, core::tuple::TupleNextDrop::<(@core::array::Array::,), core::tuple::TupleSplitTupleSize1::<@core::array::Array::>, core::tuple::IsTupleTupleSize1::<@core::array::Array::>, core::traits::SnapshotDrop::>, core::tuple::TupleSize0Drop>>, core::tuple::DeserializeTupleNext::<(core::integer::u16, core::array::Array::), core::tuple::TupleSplitTupleSize2::>, core::serde::into_felt252_based::SerdeImpl::, core::tuple::DeserializeTupleNext::<(core::array::Array::,), core::tuple::TupleSplitTupleSize1::>, core::array::ArraySerde::, core::integer::u16Drop>, core::tuple::DeserializeTupleBaseTuple, core::array::ArrayDrop::>, core::integer::u16Drop>>>::deserialize>" - ], - [ - 155, - "enum_match, core::option::Option::), (core::integer::u16, core::array::Array::)>>)>>" - ], - [ - 156, - "struct_deconstruct, core::option::Option::), (core::integer::u16, core::array::Array::)>>>>" - ], - [ - 157, - "enum_match), (core::integer::u16, core::array::Array::)>>>" - ], - [ - 158, - "drop), (core::integer::u16, core::array::Array::)>>" - ], - [ - 159, - "snapshot_take), (core::integer::u16, core::array::Array::)>>" - ], - [ - 160, - "enum_snapshot_match), (core::integer::u16, core::array::Array::)>>" - ], - [161, "struct_snapshot_deconstruct>>"], - [ - 162, - "function_call, core::integer::u32, core::result::ResultSerde::, core::serde::into_felt252_based::SerdeImpl::>, core::serde::into_felt252_based::SerdeImpl::>::deserialize>" - ], - [ - 163, - "enum_match, core::integer::u32>>>" - ], - [ - 164, - "drop, core::integer::u32>>" - ], - [ - 165, - "snapshot_take, core::integer::u32>>" - ], - [ - 166, - "enum_match, core::integer::u32>>" - ], - [ - 167, - "function_call, core::serde::into_felt252_based::SerdeImpl::, core::option::OptionSerde::>>::deserialize>" - ], - [ - 168, - "enum_match>>>" - ], - [ - 169, - "drop>>" - ], - [ - 170, - "snapshot_take>>" - ], - [ - 171, - "enum_match>>" - ], - [172, "enum_match>"], - [173, "u64_try_from_felt252"], - [174, "u32_try_from_felt252"], - [175, "struct_construct"], - [176, "snapshot_take"], - [177, "drop"], - [178, "store_temp"], - [179, "function_call"], - [180, "enum_match>"], - [181, "drop"], - [182, "snapshot_take"], - [183, "dup"], - [184, "struct_deconstruct"], - [185, "function_call"], - [186, "enum_match>"], - [187, "drop"], - [188, "snapshot_take"], - [189, "dup"], - [190, "struct_deconstruct"], - [191, "drop>"], - [192, "struct_deconstruct>"], - [193, "function_call"], - [ - 194, - "enum_match, core::option::Option::)>>" - ], - [ - 195, - "struct_deconstruct, core::option::Option::>>" - ], - [196, "enum_match>"], - [197, "drop"], - [198, "snapshot_take"], - [199, "dup"], - [200, "struct_deconstruct"], - [201, "drop>"], - [202, "dup>"], - [203, "rename>"], - [204, "struct_deconstruct>"], - [205, "function_call"], - [206, "enum_match>"], - [207, "drop"], - [208, "snapshot_take"], - [209, "dup"], - [210, "struct_deconstruct"], - [211, "drop>"], - [212, "struct_deconstruct>"], - [213, "function_call"], - [214, "enum_match>"], - [215, "drop"], - [216, "snapshot_take"], - [217, "dup"], - [218, "struct_deconstruct"], - [219, "drop>"], - [220, "enum_match>"], - [221, "u128s_from_felt252"], - [ - 222, - "function_call, core::serde::into_felt252_based::SerdeImpl::>::deserialize>" - ], - [ - 223, - "enum_match>>" - ], - [224, "drop"], - [225, "drop>"], - [226, "struct_construct"], - [227, "snapshot_take"], - [228, "drop"], - [229, "store_temp"], - [230, "dup"], - [231, "struct_deconstruct"], - [232, "rename"], - [233, "u128_to_felt252"], - [234, "enum_match>"], - [ - 235, - "const_as_immediate>" - ], - [236, "function_call"], - [ - 237, - "const_as_immediate>" - ], - [238, "const_as_immediate>"], - [239, "array_new"], - [240, "store_temp>"], - [ - 241, - "function_call, core::integer::u8Drop>>" - ], - [ - 242, - "enum_match, core::option::Option::>)>>" - ], - [ - 243, - "struct_deconstruct, core::option::Option::>>>" - ], - [244, "enum_match>>"], - [245, "enum_init>, 0>"], - [ - 246, - "enum_init>>, 0>" - ], - [ - 247, - "struct_construct, core::option::Option::>>>>" - ], - [ - 248, - "enum_init, core::option::Option::>>)>, 0>" - ], - [ - 249, - "store_temp, core::option::Option::>>)>>" - ], - [250, "rename"], - [ - 251, - "enum_init, core::option::Option::>>)>, 1>" - ], - [ - 252, - "enum_init>>, 1>" - ], - [253, "enum_init>, 1>"], - [254, "struct_deconstruct>"], - [255, "array_snapshot_pop_front"], - [256, "unbox"], - [257, "drop>>"], - [258, "struct_construct, Unit>>"], - [259, "enum_init, ())>, 0>"], - [260, "store_temp, ())>>"], - [261, "drop>"], - [262, "enum_init, ())>, 1>"], - [263, "struct_construct>"], - [ - 264, - "function_call), core::tuple::TupleSplitTupleSize2::>, core::serde::into_felt252_based::SerdeImpl::, core::tuple::DeserializeTupleNext::<(core::array::Array::,), core::tuple::TupleSplitTupleSize1::>, core::array::ArraySerde::, core::integer::u32Drop>, core::tuple::DeserializeTupleBaseTuple, core::array::ArrayDrop::>, core::integer::u32Drop>::deserialize>" - ], - [ - 265, - "enum_match, core::option::Option::<(core::integer::u32, core::array::Array::)>)>>" - ], - [ - 266, - "struct_deconstruct, core::option::Option::<(core::integer::u32, core::array::Array::)>>>" - ], - [ - 267, - "enum_match)>>" - ], - [ - 268, - "enum_init)>, 0>" - ], - [ - 269, - "enum_init)>>, 0>" - ], - [ - 270, - "struct_construct, core::option::Option::)>>>>" - ], - [ - 271, - "enum_init, core::option::Option::)>>)>, 0>" - ], - [ - 272, - "store_temp, core::option::Option::)>>)>>" - ], - [ - 273, - "enum_init)>>, 1>" - ], - [ - 274, - "enum_init, core::option::Option::)>>)>, 1>" - ], - [ - 275, - "enum_init)>, 1>" - ], - [276, "array_snapshot_pop_front"], - [277, "unbox"], - [278, "drop>>"], - [279, "enum_init>, 0>"], - [ - 280, - "enum_init>>, 0>" - ], - [ - 281, - "store_temp>>>" - ], - [282, "rename>>"], - [283, "enum_init>, 1>"], - [ - 284, - "enum_init>>, 1>" - ], - [285, "u8_try_from_felt252"], - [286, "enum_init, 0>"], - [287, "enum_init, 1>"], - [ - 288, - "enum_init>>, 0>" - ], - [ - 289, - "struct_construct, core::option::Option::>>>>" - ], - [ - 290, - "enum_init, core::option::Option::>>)>, 0>" - ], - [ - 291, - "store_temp, core::option::Option::>>)>>" - ], - [292, "array_append>"], - [ - 293, - "enum_init>>, 1>" - ], - [ - 294, - "enum_init, core::option::Option::>>)>, 1>" - ], - [295, "struct_deconstruct>>"], - [296, "array_snapshot_pop_front>"], - [297, "unbox>"], - [298, "drop>>>"], - [299, "drop>>"], - [300, "enum_init, 0>"], - [301, "enum_init>, 0>"], - [302, "store_temp>>"], - [303, "enum_init, 1>"], - [304, "enum_init>, 1>"], - [ - 305, - "enum_init, core::array::Array::>, 0>" - ], - [ - 306, - "enum_init, core::array::Array::>>, 0>" - ], - [ - 307, - "struct_construct, core::option::Option::, core::array::Array::>>>>" - ], - [ - 308, - "enum_init, core::option::Option::, core::array::Array::>>)>, 0>" - ], - [ - 309, - "store_temp, core::option::Option::, core::array::Array::>>)>>" - ], - [ - 310, - "enum_init, core::option::Option::, core::array::Array::>>)>, 1>" - ], - [311, "array_new"], - [312, "store_temp>"], - [ - 313, - "function_call, core::integer::u16Drop>>" - ], - [ - 314, - "enum_match, core::option::Option::>)>>" - ], - [ - 315, - "struct_deconstruct, core::option::Option::>>>" - ], - [316, "enum_match>>"], - [ - 317, - "enum_init, core::array::Array::>, 1>" - ], - [ - 318, - "enum_init, core::array::Array::>>, 1>" - ], - [319, "struct_deconstruct>"], - [320, "array_snapshot_pop_front"], - [321, "unbox"], - [322, "drop>>"], - [323, "drop>"], - [324, "dup>>"], - [ - 325, - "enum_init, 0>" - ], - [ - 326, - "enum_init>, 0>" - ], - [ - 327, - "store_temp>>" - ], - [ - 328, - "enum_init>, 1>" - ], - [329, "struct_construct>"], - [ - 330, - "enum_init, 1>" - ], - [ - 331, - "enum_init), (core::integer::u16, core::array::Array::)>, 0>" - ], - [ - 332, - "enum_init), (core::integer::u16, core::array::Array::)>>, 0>" - ], - [ - 333, - "struct_construct, core::option::Option::), (core::integer::u16, core::array::Array::)>>>>" - ], - [ - 334, - "enum_init, core::option::Option::), (core::integer::u16, core::array::Array::)>>)>, 0>" - ], - [ - 335, - "store_temp, core::option::Option::), (core::integer::u16, core::array::Array::)>>)>>" - ], - [ - 336, - "enum_init, core::option::Option::), (core::integer::u16, core::array::Array::)>>)>, 1>" - ], - [ - 337, - "function_call), core::tuple::TupleSplitTupleSize2::>, core::serde::into_felt252_based::SerdeImpl::, core::tuple::DeserializeTupleNext::<(core::array::Array::,), core::tuple::TupleSplitTupleSize1::>, core::array::ArraySerde::, core::integer::u16Drop>, core::tuple::DeserializeTupleBaseTuple, core::array::ArrayDrop::>, core::integer::u16Drop>::deserialize>" - ], - [ - 338, - "enum_match, core::option::Option::<(core::integer::u16, core::array::Array::)>)>>" - ], - [ - 339, - "struct_deconstruct, core::option::Option::<(core::integer::u16, core::array::Array::)>>>" - ], - [ - 340, - "enum_match)>>" - ], - [ - 341, - "enum_init), (core::integer::u16, core::array::Array::)>, 1>" - ], - [ - 342, - "enum_init), (core::integer::u16, core::array::Array::)>>, 1>" - ], - [ - 343, - "enum_init, core::integer::u32>, 0>" - ], - [ - 344, - "enum_init, core::integer::u32>>, 0>" - ], - [ - 345, - "store_temp, core::integer::u32>>>" - ], - [ - 346, - "enum_init, core::integer::u32>>, 1>" - ], - [ - 347, - "enum_init, core::integer::u32>, 1>" - ], - [ - 348, - "enum_init>, 0>" - ], - [ - 349, - "enum_init>>, 0>" - ], - [ - 350, - "store_temp>>>" - ], - [351, "enum_init, 0>"], - [ - 352, - "enum_init>, 1>" - ], - [353, "enum_init, 1>"], - [ - 354, - "enum_init>>, 1>" - ], - [355, "struct_construct"], - [356, "enum_init, 0>"], - [357, "store_temp>"], - [358, "enum_init, 1>"], - [ - 359, - "function_call, core::serde::into_felt252_based::SerdeImpl::, core::tuple::DeserializeTupleNext::<(core::integer::u32, core::integer::u64), core::tuple::TupleSplitTupleSize2::, core::serde::into_felt252_based::SerdeImpl::, core::tuple::DeserializeTupleNext::<(core::integer::u64,), core::tuple::TupleSplitTupleSize1::, core::serde::into_felt252_based::SerdeImpl::, core::tuple::DeserializeTupleBaseTuple, core::integer::u64Drop>, core::integer::u32Drop>, core::integer::u16Drop>::deserialize>" - ], - [ - 360, - "enum_match>" - ], - [361, "struct_deconstruct>"], - [362, "struct_construct>"], - [363, "struct_construct"], - [364, "enum_init, 0>"], - [365, "store_temp>"], - [366, "drop"], - [367, "enum_init, 1>"], - [368, "alloc_local"], - [369, "finalize_locals"], - [370, "store_local"], - [371, "array_new"], - [372, "store_temp>"], - [ - 373, - "function_call, core::integer::u32Drop>>" - ], - [ - 374, - "enum_match, core::option::Option::>)>>" - ], - [ - 375, - "struct_deconstruct, core::option::Option::>>>" - ], - [376, "enum_match>>"], - [377, "snapshot_take>"], - [378, "drop>"], - [379, "struct_construct"], - [380, "enum_init, 0>"], - [ - 381, - "struct_construct, core::option::Option::>>" - ], - [ - 382, - "enum_init, core::option::Option::)>, 0>" - ], - [ - 383, - "store_temp, core::option::Option::)>>" - ], - [ - 384, - "enum_init, core::option::Option::)>, 1>" - ], - [385, "enum_init, 1>"], - [386, "drop>"], - [ - 387, - "function_call, core::serde::into_felt252_based::SerdeImpl::, core::tuple::DeserializeTupleNext::<[core::integer::u16; 2], core::fixed_size_array::TupleSplitFixedSizedArraySized2::, core::serde::into_felt252_based::SerdeImpl::, core::tuple::DeserializeTupleNext::<[core::integer::u16; 1], core::fixed_size_array::TupleSplitFixedSizedArraySized1::, core::serde::into_felt252_based::SerdeImpl::, core::tuple::DeserializeTupleBaseFixedSizedArray::, core::integer::u16Drop>, core::integer::u16Drop>, core::integer::u16Drop>::deserialize>" - ], - [388, "enum_match>"], - [389, "struct_deconstruct>"], - [390, "struct_construct>"], - [391, "struct_construct"], - [392, "enum_init, 0>"], - [393, "store_temp>"], - [394, "enum_init, 1>"], - [395, "enum_init, 0>"], - [396, "struct_construct"], - [397, "enum_init, 0>"], - [398, "store_temp>"], - [399, "enum_init, 1>"], - [400, "enum_init, 1>"], - [401, "enum_init, 0>"], - [ - 402, - "enum_init>, 0>" - ], - [ - 403, - "store_temp>>" - ], - [404, "enum_init, 1>"], - [ - 405, - "enum_init>, 1>" - ], - [406, "struct_construct"], - [407, "struct_construct>>"], - [408, "store_temp>>"], - [ - 409, - "struct_construct, core::option::Option::>>>" - ], - [ - 410, - "enum_init, core::option::Option::>)>, 0>" - ], - [ - 411, - "store_temp, core::option::Option::>)>>" - ], - [412, "array_append"], - [413, "drop>"], - [ - 414, - "enum_init, core::option::Option::>)>, 1>" - ], - [415, "struct_construct>>"], - [ - 416, - "struct_construct, core::option::Option::<(core::integer::u32, core::array::Array::)>>>" - ], - [ - 417, - "enum_init, core::option::Option::<(core::integer::u32, core::array::Array::)>)>, 0>" - ], - [ - 418, - "store_temp, core::option::Option::<(core::integer::u32, core::array::Array::)>)>>" - ], - [ - 419, - "enum_init, core::option::Option::<(core::integer::u32, core::array::Array::)>)>, 1>" - ], - [420, "enum_init>, 0>"], - [ - 421, - "struct_construct, core::option::Option::>>>" - ], - [ - 422, - "enum_init, core::option::Option::>)>, 0>" - ], - [ - 423, - "store_temp, core::option::Option::>)>>" - ], - [424, "array_append"], - [425, "drop>"], - [426, "enum_init>, 1>"], - [ - 427, - "enum_init, core::option::Option::>)>, 1>" - ], - [428, "struct_construct>>"], - [ - 429, - "enum_init)>, 0>" - ], - [ - 430, - "struct_construct, core::option::Option::<(core::integer::u16, core::array::Array::)>>>" - ], - [ - 431, - "enum_init, core::option::Option::<(core::integer::u16, core::array::Array::)>)>, 0>" - ], - [ - 432, - "store_temp, core::option::Option::<(core::integer::u16, core::array::Array::)>)>>" - ], - [ - 433, - "enum_init, core::option::Option::<(core::integer::u16, core::array::Array::)>)>, 1>" - ], - [ - 434, - "enum_init)>, 1>" - ], - [435, "struct_construct>"], - [ - 436, - "enum_init, 0>" - ], - [ - 437, - "store_temp>" - ], - [ - 438, - "enum_init, 1>" - ], - [439, "enum_init>, 0>"], - [ - 440, - "struct_construct, core::option::Option::>>>" - ], - [ - 441, - "enum_init, core::option::Option::>)>, 0>" - ], - [ - 442, - "store_temp, core::option::Option::>)>>" - ], - [443, "array_append"], - [444, "enum_init>, 1>"], - [ - 445, - "enum_init, core::option::Option::>)>, 1>" - ], - [446, "struct_construct>"], - [447, "enum_init, 0>"], - [448, "store_temp>"], - [449, "enum_init, 1>"] - ], - "user_func_names": [ - [0, "enums::test_option::__wrapper__TestOption__option_bn"], - [1, "enums::test_option::__wrapper__TestOption__option_array"], - [2, "enums::test_option::__wrapper__TestOption__option_fixed_array"], - [3, "enums::test_option::__wrapper__TestOption__option_tuple"], - [4, "enums::test_option::__wrapper__TestOption__option_option_bn"], - [5, "enums::test_option::__wrapper__TestOption__option_result"], - [6, "enums::test_option::__wrapper__TestOption__array_option_bn"], - [7, "enums::test_option::__wrapper__TestOption__write_option_bn"], - [8, "enums::test_option::__wrapper__TestOption__option_point"], - [9, "enums::test_option::__wrapper__TestOption__result_bn"], - [10, "enums::test_option::__wrapper__TestOption__result_array"], - [11, "enums::test_option::__wrapper__TestOption__result_fixed_array"], - [12, "enums::test_option::__wrapper__TestOption__result_tuple"], - [13, "enums::test_option::__wrapper__TestOption__result_result_bn"], - [14, "enums::test_option::__wrapper__TestOption__result_option"], - [15, "enums::test_option::__wrapper__TestOption__write_result_bn"], - [16, "enums::test_option::__wrapper__TestOption__struct_point"], - [17, "enums::test_option::__wrapper__TestOption__struct_point2"], - [18, "enums::test_option::__wrapper__TestOption__struct_Empty"], - [19, "enums::test_option::__wrapper__TestOption__struct_Cat"], - [20, "enums::test_option::__wrapper__TestOption__struct_Dog"], - [21, "enums::test_option::__wrapper__TestOption__struct_Horse"], - [22, "enums::test_option::__wrapper__TestOption__struct_Truck"], - [23, "enums::test_option::__wrapper__TestOption__struct_Destruction"], - [ - 24, - "core::panic_with_const_felt252::<7733229381460288120802334208475838166080759535023995805565484692595>" - ], - [ - 25, - "core::panic_with_const_felt252::<485748461484230571791265682659113160264223489397539653310998840191492913>" - ], - [26, "core::panic_with_const_felt252::<375233589013918064796019>"], - [ - 27, - "core::option::OptionSerde::, core::array::ArraySerde::, core::integer::u8Drop>>::deserialize" - ], - [ - 28, - "core::array::serialize_array_helper::, core::integer::u8Drop>" - ], - [ - 29, - "core::tuple::DeserializeTupleNext::<[core::integer::u32; 3], core::fixed_size_array::TupleSplitFixedSizedArraySized3::, core::serde::into_felt252_based::SerdeImpl::, core::tuple::DeserializeTupleNext::<[core::integer::u32; 2], core::fixed_size_array::TupleSplitFixedSizedArraySized2::, core::serde::into_felt252_based::SerdeImpl::, core::tuple::DeserializeTupleNext::<[core::integer::u32; 1], core::fixed_size_array::TupleSplitFixedSizedArraySized1::, core::serde::into_felt252_based::SerdeImpl::, core::tuple::DeserializeTupleBaseFixedSizedArray::, core::integer::u32Drop>, core::integer::u32Drop>, core::integer::u32Drop>::deserialize" - ], - [ - 30, - "core::option::OptionSerde::<(core::integer::u32, core::array::Array::), core::tuple::SerdeTuple::<(core::integer::u32, core::array::Array::), core::tuple::TupleSnapForwardTupleSize2::>, core::tuple::SerializeTupleNext::<(@core::integer::u32, @core::array::Array::), core::tuple::TupleSplitTupleSize2::<@core::integer::u32, @core::array::Array::>, core::tuple::SerdeBasedSerializeTuple::>, core::tuple::SerializeTupleNext::<(@core::array::Array::,), core::tuple::TupleSplitTupleSize1::<@core::array::Array::>, core::tuple::SerdeBasedSerializeTuple::, core::array::ArraySerde::, core::integer::u32Drop>>, core::tuple::SerializeTupleBaseTuple, core::tuple::TupleSize0Drop>, core::tuple::TupleNextDrop::<(@core::array::Array::,), core::tuple::TupleSplitTupleSize1::<@core::array::Array::>, core::tuple::IsTupleTupleSize1::<@core::array::Array::>, core::traits::SnapshotDrop::>, core::tuple::TupleSize0Drop>>, core::tuple::DeserializeTupleNext::<(core::integer::u32, core::array::Array::), core::tuple::TupleSplitTupleSize2::>, core::serde::into_felt252_based::SerdeImpl::, core::tuple::DeserializeTupleNext::<(core::array::Array::,), core::tuple::TupleSplitTupleSize1::>, core::array::ArraySerde::, core::integer::u32Drop>, core::tuple::DeserializeTupleBaseTuple, core::array::ArrayDrop::>, core::integer::u32Drop>>>::deserialize" - ], - [ - 31, - "core::array::serialize_array_helper::, core::integer::u32Drop>" - ], - [ - 32, - "core::option::OptionSerde::, core::option::OptionSerde::>>::deserialize" - ], - [ - 33, - "core::result::ResultSerde::, core::serde::into_felt252_based::SerdeImpl::>::deserialize" - ], - [ - 34, - "core::array::deserialize_array_helper::, core::option::OptionSerde::>, core::option::OptionDrop::>" - ], - [ - 35, - "core::array::serialize_array_helper::, core::option::OptionSerde::>, core::option::OptionDrop::>" - ], - [36, "core::option::OptionSerde::::deserialize"], - [ - 37, - "core::result::ResultSerde::, core::array::Array::, core::array::ArraySerde::, core::integer::u8Drop>, core::array::ArraySerde::, core::integer::u16Drop>>::deserialize" - ], - [ - 38, - "core::array::serialize_array_helper::, core::integer::u16Drop>" - ], - [ - 39, - "core::result::ResultSerde::<[core::integer::u32; 3], [core::integer::u16; 2], core::tuple::SerdeTuple::<[core::integer::u32; 3], core::fixed_size_array::TupleSnapForwardFixedSizedArraySized3::, core::tuple::SerializeTupleNext::<[@core::integer::u32; 3], core::fixed_size_array::TupleSplitFixedSizedArraySized3::<@core::integer::u32>, core::tuple::SerdeBasedSerializeTuple::>, core::tuple::SerializeTupleNext::<[@core::integer::u32; 2], core::fixed_size_array::TupleSplitFixedSizedArraySized2::<@core::integer::u32>, core::tuple::SerdeBasedSerializeTuple::>, core::tuple::SerializeTupleNext::<[@core::integer::u32; 1], core::fixed_size_array::TupleSplitFixedSizedArraySized1::<@core::integer::u32>, core::tuple::SerdeBasedSerializeTuple::>, core::tuple::SerializeTupleBaseFixedSizedArray::, core::fixed_size_array::FixedSizedArrayDrop::<@core::integer::u32, core::traits::SnapshotDrop::, 0>>, core::fixed_size_array::FixedSizedArrayDrop::<@core::integer::u32, core::traits::SnapshotDrop::, 1>>, core::fixed_size_array::FixedSizedArrayDrop::<@core::integer::u32, core::traits::SnapshotDrop::, 2>>, core::tuple::DeserializeTupleNext::<[core::integer::u32; 3], core::fixed_size_array::TupleSplitFixedSizedArraySized3::, core::serde::into_felt252_based::SerdeImpl::, core::tuple::DeserializeTupleNext::<[core::integer::u32; 2], core::fixed_size_array::TupleSplitFixedSizedArraySized2::, core::serde::into_felt252_based::SerdeImpl::, core::tuple::DeserializeTupleNext::<[core::integer::u32; 1], core::fixed_size_array::TupleSplitFixedSizedArraySized1::, core::serde::into_felt252_based::SerdeImpl::, core::tuple::DeserializeTupleBaseFixedSizedArray::, core::integer::u32Drop>, core::integer::u32Drop>, core::integer::u32Drop>>, core::tuple::SerdeTuple::<[core::integer::u16; 2], core::fixed_size_array::TupleSnapForwardFixedSizedArraySized2::, core::tuple::SerializeTupleNext::<[@core::integer::u16; 2], core::fixed_size_array::TupleSplitFixedSizedArraySized2::<@core::integer::u16>, core::tuple::SerdeBasedSerializeTuple::>, core::tuple::SerializeTupleNext::<[@core::integer::u16; 1], core::fixed_size_array::TupleSplitFixedSizedArraySized1::<@core::integer::u16>, core::tuple::SerdeBasedSerializeTuple::>, core::tuple::SerializeTupleBaseFixedSizedArray::, core::fixed_size_array::FixedSizedArrayDrop::<@core::integer::u16, core::traits::SnapshotDrop::, 0>>, core::fixed_size_array::FixedSizedArrayDrop::<@core::integer::u16, core::traits::SnapshotDrop::, 1>>, core::tuple::DeserializeTupleNext::<[core::integer::u16; 2], core::fixed_size_array::TupleSplitFixedSizedArraySized2::, core::serde::into_felt252_based::SerdeImpl::, core::tuple::DeserializeTupleNext::<[core::integer::u16; 1], core::fixed_size_array::TupleSplitFixedSizedArraySized1::, core::serde::into_felt252_based::SerdeImpl::, core::tuple::DeserializeTupleBaseFixedSizedArray::, core::integer::u16Drop>, core::integer::u16Drop>>>::deserialize" - ], - [ - 40, - "core::result::ResultSerde::<(core::integer::u32, core::array::Array::), (core::integer::u16, core::array::Array::), core::tuple::SerdeTuple::<(core::integer::u32, core::array::Array::), core::tuple::TupleSnapForwardTupleSize2::>, core::tuple::SerializeTupleNext::<(@core::integer::u32, @core::array::Array::), core::tuple::TupleSplitTupleSize2::<@core::integer::u32, @core::array::Array::>, core::tuple::SerdeBasedSerializeTuple::>, core::tuple::SerializeTupleNext::<(@core::array::Array::,), core::tuple::TupleSplitTupleSize1::<@core::array::Array::>, core::tuple::SerdeBasedSerializeTuple::, core::array::ArraySerde::, core::integer::u32Drop>>, core::tuple::SerializeTupleBaseTuple, core::tuple::TupleSize0Drop>, core::tuple::TupleNextDrop::<(@core::array::Array::,), core::tuple::TupleSplitTupleSize1::<@core::array::Array::>, core::tuple::IsTupleTupleSize1::<@core::array::Array::>, core::traits::SnapshotDrop::>, core::tuple::TupleSize0Drop>>, core::tuple::DeserializeTupleNext::<(core::integer::u32, core::array::Array::), core::tuple::TupleSplitTupleSize2::>, core::serde::into_felt252_based::SerdeImpl::, core::tuple::DeserializeTupleNext::<(core::array::Array::,), core::tuple::TupleSplitTupleSize1::>, core::array::ArraySerde::, core::integer::u32Drop>, core::tuple::DeserializeTupleBaseTuple, core::array::ArrayDrop::>, core::integer::u32Drop>>, core::tuple::SerdeTuple::<(core::integer::u16, core::array::Array::), core::tuple::TupleSnapForwardTupleSize2::>, core::tuple::SerializeTupleNext::<(@core::integer::u16, @core::array::Array::), core::tuple::TupleSplitTupleSize2::<@core::integer::u16, @core::array::Array::>, core::tuple::SerdeBasedSerializeTuple::>, core::tuple::SerializeTupleNext::<(@core::array::Array::,), core::tuple::TupleSplitTupleSize1::<@core::array::Array::>, core::tuple::SerdeBasedSerializeTuple::, core::array::ArraySerde::, core::integer::u16Drop>>, core::tuple::SerializeTupleBaseTuple, core::tuple::TupleSize0Drop>, core::tuple::TupleNextDrop::<(@core::array::Array::,), core::tuple::TupleSplitTupleSize1::<@core::array::Array::>, core::tuple::IsTupleTupleSize1::<@core::array::Array::>, core::traits::SnapshotDrop::>, core::tuple::TupleSize0Drop>>, core::tuple::DeserializeTupleNext::<(core::integer::u16, core::array::Array::), core::tuple::TupleSplitTupleSize2::>, core::serde::into_felt252_based::SerdeImpl::, core::tuple::DeserializeTupleNext::<(core::array::Array::,), core::tuple::TupleSplitTupleSize1::>, core::array::ArraySerde::, core::integer::u16Drop>, core::tuple::DeserializeTupleBaseTuple, core::array::ArrayDrop::>, core::integer::u16Drop>>>::deserialize" - ], - [ - 41, - "core::result::ResultSerde::, core::integer::u32, core::result::ResultSerde::, core::serde::into_felt252_based::SerdeImpl::>, core::serde::into_felt252_based::SerdeImpl::>::deserialize" - ], - [ - 42, - "core::result::ResultSerde::, core::serde::into_felt252_based::SerdeImpl::, core::option::OptionSerde::>>::deserialize" - ], - [43, "enums::Point2Serde::deserialize"], - [44, "enums::CatSerde::deserialize"], - [45, "enums::DogSerde::deserialize"], - [46, "enums::HorseSerde::deserialize"], - [47, "enums::TruckSerde::deserialize"], - [ - 48, - "core::result::ResultSerde::, core::serde::into_felt252_based::SerdeImpl::>::deserialize" - ], - [49, "core::panic_with_felt252"], - [ - 50, - "core::array::deserialize_array_helper::, core::integer::u8Drop>" - ], - [ - 51, - "core::tuple::DeserializeTupleNext::<(core::integer::u32, core::array::Array::), core::tuple::TupleSplitTupleSize2::>, core::serde::into_felt252_based::SerdeImpl::, core::tuple::DeserializeTupleNext::<(core::array::Array::,), core::tuple::TupleSplitTupleSize1::>, core::array::ArraySerde::, core::integer::u32Drop>, core::tuple::DeserializeTupleBaseTuple, core::array::ArrayDrop::>, core::integer::u32Drop>::deserialize" - ], - [ - 52, - "core::array::deserialize_array_helper::, core::integer::u16Drop>" - ], - [ - 53, - "core::tuple::DeserializeTupleNext::<(core::integer::u16, core::array::Array::), core::tuple::TupleSplitTupleSize2::>, core::serde::into_felt252_based::SerdeImpl::, core::tuple::DeserializeTupleNext::<(core::array::Array::,), core::tuple::TupleSplitTupleSize1::>, core::array::ArraySerde::, core::integer::u16Drop>, core::tuple::DeserializeTupleBaseTuple, core::array::ArrayDrop::>, core::integer::u16Drop>::deserialize" - ], - [ - 54, - "core::tuple::DeserializeTupleNext::<(core::integer::u16, core::integer::u32, core::integer::u64), core::tuple::TupleSplitTupleSize3::, core::serde::into_felt252_based::SerdeImpl::, core::tuple::DeserializeTupleNext::<(core::integer::u32, core::integer::u64), core::tuple::TupleSplitTupleSize2::, core::serde::into_felt252_based::SerdeImpl::, core::tuple::DeserializeTupleNext::<(core::integer::u64,), core::tuple::TupleSplitTupleSize1::, core::serde::into_felt252_based::SerdeImpl::, core::tuple::DeserializeTupleBaseTuple, core::integer::u64Drop>, core::integer::u32Drop>, core::integer::u16Drop>::deserialize" - ], - [ - 55, - "core::array::deserialize_array_helper::, core::integer::u32Drop>" - ], - [ - 56, - "core::tuple::DeserializeTupleNext::<[core::integer::u16; 3], core::fixed_size_array::TupleSplitFixedSizedArraySized3::, core::serde::into_felt252_based::SerdeImpl::, core::tuple::DeserializeTupleNext::<[core::integer::u16; 2], core::fixed_size_array::TupleSplitFixedSizedArraySized2::, core::serde::into_felt252_based::SerdeImpl::, core::tuple::DeserializeTupleNext::<[core::integer::u16; 1], core::fixed_size_array::TupleSplitFixedSizedArraySized1::, core::serde::into_felt252_based::SerdeImpl::, core::tuple::DeserializeTupleBaseFixedSizedArray::, core::integer::u16Drop>, core::integer::u16Drop>, core::integer::u16Drop>::deserialize" - ] - ] - }, - "contract_class_version": "0.1.0", - "entry_points_by_type": { - "EXTERNAL": [ - { - "selector": "0x462b1b2d0b30d80be98c4aec16f07b72212bbef41ac45680ed94e954a6aa9", - "function_idx": 3 - }, - { - "selector": "0x1feb29d0d6e8c4ba7a71db4cdaa24898ddd8bb350e724f844145997afee9c9", - "function_idx": 19 - }, - { - "selector": "0x78664aa9f94155a6e6acf3aa0add2ce6fcf36349488671af774d676363e0c7", - "function_idx": 1 - }, - { - "selector": "0xe1eafdb08801cfc555a49e25dabfd7aa4ed7b2dd5c7e2c5a6930eac6d1b54c", - "function_idx": 17 - }, - { - "selector": "0x106f418ef7e2ea39027bcde47d5f0a54ed68fe34aa69b24c3a162def52a841b", - "function_idx": 13 - }, - { - "selector": "0x11fdea672ded06956bdd64d89fd111661735e88595f88c1199f648fe3c2dd15", - "function_idx": 20 - }, - { - "selector": "0x126587e6b203b756642ff0bd9f92e84ef609cf2a02b516fbf2d94f36a73b83e", - "function_idx": 6 - }, - { - "selector": "0x1303ef00936936490ad20afec7fbe2bf74669665b2a2249945ff561debad733", - "function_idx": 7 - }, - { - "selector": "0x13d3b1aae5fa65a483db7c67c98dca6aac27353970caa114d112c4b6de8ec73", - "function_idx": 11 - }, - { - "selector": "0x145f0cd3e37db4233ce4d6b84935d9b32387d72eb53713e78e2ec56cc6fdf5d", - "function_idx": 16 - }, - { - "selector": "0x147c0b24e5bfb625956c5a44d3fc84d509b789bf2e5335365c03b9be2d757d3", - "function_idx": 15 - }, - { - "selector": "0x1785e0d94a5ba07a47865d69afdf914dad65466b25d38cb78cb741fac447ba8", - "function_idx": 22 - }, - { - "selector": "0x1c7564da2ac3c0ee05570d52004d51604c5315131cafd67610b2e629bf4fd7c", - "function_idx": 14 - }, - { - "selector": "0x1d39fadfe7e2621092d7d0a467672f0eb0ad03c5926829d40ceefa7bcd10b80", - "function_idx": 23 - }, - { - "selector": "0x1ff9f9a5d04b7955383039cae30cd6c0d1cb3c0e04a579f393a7ac9cf39c7b3", - "function_idx": 5 - }, - { - "selector": "0x208b88c80fabc1b03f3c78a09aaa1a693a5bb1366271a1c6b9e7971aa325116", - "function_idx": 18 - }, - { - "selector": "0x21b020335325fcef65a03b765adaefcc9fb4eccceb8e0293516736095e8cceb", - "function_idx": 2 - }, - { - "selector": "0x242ba12536f9ac18cffcedd5588e2922a17c0f453a064a64e62df6d3f6f8dce", - "function_idx": 4 - }, - { - "selector": "0x265cf503e1b425e68026a65eb872306eb863eb6ba526cddc50fd44d00d8e180", - "function_idx": 0 - }, - { - "selector": "0x29a68d48876fa0d864a616e212175e42824be1cdcb35bcd2e05b302042e491f", - "function_idx": 8 - }, - { - "selector": "0x31c18e21d8e75a5f2f6f1330c56da1f8b2fd93568002ef0d15bcce9c5644c2b", - "function_idx": 10 - }, - { - "selector": "0x36e432757f2854d382b66d849ed9a3edf35fdbf55a7c83296142cf7b89b0573", - "function_idx": 12 - }, - { - "selector": "0x3bb1cf9f6b291f5c63c8ecbfcf8cd522642fdc7ec277c2fddb7dc069cd05ced", - "function_idx": 21 - }, - { - "selector": "0x3c694eba4d500b140694d8f7da3f85031f4d4827b57da58cb5f2bd1ab74e5ab", - "function_idx": 9 - } - ], - "L1_HANDLER": [], - "CONSTRUCTOR": [] - }, - "abi": [ - { - "type": "impl", - "name": "TestOption", - "interface_name": "enums::ITestOption" - }, - { - "type": "enum", - "name": "core::option::Option::", - "variants": [ - { - "name": "Some", - "type": "core::integer::u16" - }, - { - "name": "None", - "type": "()" - } - ] - }, - { - "type": "enum", - "name": "core::option::Option::>", - "variants": [ - { - "name": "Some", - "type": "core::array::Array::" - }, - { - "name": "None", - "type": "()" - } - ] - }, - { - "type": "enum", - "name": "core::option::Option::<[core::integer::u32; 3]>", - "variants": [ - { - "name": "Some", - "type": "[core::integer::u32; 3]" - }, - { - "name": "None", - "type": "()" - } - ] - }, - { - "type": "enum", - "name": "core::option::Option::<(core::integer::u32, core::array::Array::)>", - "variants": [ - { - "name": "Some", - "type": "(core::integer::u32, core::array::Array::)" - }, - { - "name": "None", - "type": "()" - } - ] - }, - { - "type": "enum", - "name": "core::option::Option::>", - "variants": [ - { - "name": "Some", - "type": "core::option::Option::" - }, - { - "name": "None", - "type": "()" - } - ] - }, - { - "type": "enum", - "name": "core::result::Result::", - "variants": [ - { - "name": "Ok", - "type": "core::integer::u8" - }, - { - "name": "Err", - "type": "core::integer::u16" - } - ] - }, - { - "type": "enum", - "name": "core::option::Option::>", - "variants": [ - { - "name": "Some", - "type": "core::result::Result::" - }, - { - "name": "None", - "type": "()" - } - ] - }, - { - "type": "struct", - "name": "enums::Point", - "members": [ - { - "name": "x", - "type": "core::integer::u64" - }, - { - "name": "y", - "type": "core::integer::u32" - } - ] - }, - { - "type": "enum", - "name": "core::option::Option::", - "variants": [ - { - "name": "Some", - "type": "enums::Point" - }, - { - "name": "None", - "type": "()" - } - ] - }, - { - "type": "enum", - "name": "core::result::Result::, core::array::Array::>", - "variants": [ - { - "name": "Ok", - "type": "core::array::Array::" - }, - { - "name": "Err", - "type": "core::array::Array::" - } - ] - }, - { - "type": "enum", - "name": "core::result::Result::<[core::integer::u32; 3], [core::integer::u16; 2]>", - "variants": [ - { - "name": "Ok", - "type": "[core::integer::u32; 3]" - }, - { - "name": "Err", - "type": "[core::integer::u16; 2]" - } - ] - }, - { - "type": "enum", - "name": "core::result::Result::<(core::integer::u32, core::array::Array::), (core::integer::u16, core::array::Array::)>", - "variants": [ - { - "name": "Ok", - "type": "(core::integer::u32, core::array::Array::)" - }, - { - "name": "Err", - "type": "(core::integer::u16, core::array::Array::)" - } - ] - }, - { - "type": "enum", - "name": "core::result::Result::, core::integer::u32>", - "variants": [ - { - "name": "Ok", - "type": "core::result::Result::" - }, - { - "name": "Err", - "type": "core::integer::u32" - } - ] - }, - { - "type": "enum", - "name": "core::option::Option::", - "variants": [ - { - "name": "Some", - "type": "core::integer::u32" - }, - { - "name": "None", - "type": "()" - } - ] - }, - { - "type": "enum", - "name": "core::result::Result::>", - "variants": [ - { - "name": "Ok", - "type": "core::integer::u8" - }, - { - "name": "Err", - "type": "core::option::Option::" - } - ] - }, - { - "type": "struct", - "name": "enums::Point2", - "members": [ - { - "name": "thickness", - "type": "core::integer::u64" - }, - { - "name": "location", - "type": "enums::Point" - } - ] - }, - { - "type": "struct", - "name": "enums::Empty", - "members": [] - }, - { - "type": "struct", - "name": "enums::Cat", - "members": [ - { - "name": "age", - "type": "core::integer::u16" - }, - { - "name": "legs", - "type": "(core::integer::u8, core::integer::u16, core::integer::u32, core::integer::u64)" - } - ] - }, - { - "type": "struct", - "name": "core::array::Span::", - "members": [ - { - "name": "snapshot", - "type": "@core::array::Array::" - } - ] - }, - { - "type": "struct", - "name": "enums::Dog", - "members": [ - { - "name": "age", - "type": "core::integer::u16" - }, - { - "name": "colors", - "type": "core::array::Span::" - } - ] - }, - { - "type": "struct", - "name": "enums::Horse", - "members": [ - { - "name": "age", - "type": "core::integer::u16" - }, - { - "name": "legs_color", - "type": "[core::integer::u16; 4]" - } - ] - }, - { - "type": "enum", - "name": "core::option::Option::", - "variants": [ - { - "name": "Some", - "type": "core::integer::u8" - }, - { - "name": "None", - "type": "()" - } - ] - }, - { - "type": "struct", - "name": "enums::Truck", - "members": [ - { - "name": "power", - "type": "core::integer::u32" - }, - { - "name": "turbo", - "type": "core::option::Option::" - } - ] - }, - { - "type": "enum", - "name": "core::result::Result::", - "variants": [ - { - "name": "Ok", - "type": "core::integer::u8" - }, - { - "name": "Err", - "type": "core::integer::u64" - } - ] - }, - { - "type": "struct", - "name": "enums::Destruction", - "members": [ - { - "name": "area", - "type": "core::integer::u128" - }, - { - "name": "res", - "type": "core::result::Result::" - } - ] - }, - { - "type": "interface", - "name": "enums::ITestOption", - "items": [ - { - "type": "function", - "name": "option_bn", - "inputs": [ - { - "name": "x", - "type": "core::option::Option::" - } - ], - "outputs": [ - { - "type": "core::option::Option::" - } - ], - "state_mutability": "view" - }, - { - "type": "function", - "name": "option_array", - "inputs": [ - { - "name": "x", - "type": "core::option::Option::>" - } - ], - "outputs": [ - { - "type": "core::option::Option::>" - } - ], - "state_mutability": "view" - }, - { - "type": "function", - "name": "option_fixed_array", - "inputs": [ - { - "name": "x", - "type": "core::option::Option::<[core::integer::u32; 3]>" - } - ], - "outputs": [ - { - "type": "core::option::Option::<[core::integer::u32; 3]>" - } - ], - "state_mutability": "view" - }, - { - "type": "function", - "name": "option_tuple", - "inputs": [ - { - "name": "x", - "type": "core::option::Option::<(core::integer::u32, core::array::Array::)>" - } - ], - "outputs": [ - { - "type": "core::option::Option::<(core::integer::u32, core::array::Array::)>" - } - ], - "state_mutability": "view" - }, - { - "type": "function", - "name": "option_option_bn", - "inputs": [ - { - "name": "x", - "type": "core::option::Option::>" - } - ], - "outputs": [ - { - "type": "core::option::Option::>" - } - ], - "state_mutability": "view" - }, - { - "type": "function", - "name": "option_result", - "inputs": [ - { - "name": "x", - "type": "core::option::Option::>" - } - ], - "outputs": [ - { - "type": "core::option::Option::>" - } - ], - "state_mutability": "view" - }, - { - "type": "function", - "name": "array_option_bn", - "inputs": [ - { - "name": "x", - "type": "core::array::Array::>" - } - ], - "outputs": [ - { - "type": "core::array::Array::>" - } - ], - "state_mutability": "view" - }, - { - "type": "function", - "name": "write_option_bn", - "inputs": [ - { - "name": "x", - "type": "core::option::Option::" - } - ], - "outputs": [], - "state_mutability": "external" - }, - { - "type": "function", - "name": "option_point", - "inputs": [ - { - "name": "x", - "type": "core::option::Option::" - } - ], - "outputs": [ - { - "type": "core::option::Option::" - } - ], - "state_mutability": "view" - }, - { - "type": "function", - "name": "result_bn", - "inputs": [ - { - "name": "x", - "type": "core::result::Result::" - } - ], - "outputs": [ - { - "type": "core::result::Result::" - } - ], - "state_mutability": "view" - }, - { - "type": "function", - "name": "result_array", - "inputs": [ - { - "name": "x", - "type": "core::result::Result::, core::array::Array::>" - } - ], - "outputs": [ - { - "type": "core::result::Result::, core::array::Array::>" - } - ], - "state_mutability": "view" - }, - { - "type": "function", - "name": "result_fixed_array", - "inputs": [ - { - "name": "x", - "type": "core::result::Result::<[core::integer::u32; 3], [core::integer::u16; 2]>" - } - ], - "outputs": [ - { - "type": "core::result::Result::<[core::integer::u32; 3], [core::integer::u16; 2]>" - } - ], - "state_mutability": "view" - }, - { - "type": "function", - "name": "result_tuple", - "inputs": [ - { - "name": "x", - "type": "core::result::Result::<(core::integer::u32, core::array::Array::), (core::integer::u16, core::array::Array::)>" - } - ], - "outputs": [ - { - "type": "core::result::Result::<(core::integer::u32, core::array::Array::), (core::integer::u16, core::array::Array::)>" - } - ], - "state_mutability": "view" - }, - { - "type": "function", - "name": "result_result_bn", - "inputs": [ - { - "name": "x", - "type": "core::result::Result::, core::integer::u32>" - } - ], - "outputs": [ - { - "type": "core::result::Result::, core::integer::u32>" - } - ], - "state_mutability": "view" - }, - { - "type": "function", - "name": "result_option", - "inputs": [ - { - "name": "x", - "type": "core::result::Result::>" - } - ], - "outputs": [ - { - "type": "core::result::Result::>" - } - ], - "state_mutability": "view" - }, - { - "type": "function", - "name": "write_result_bn", - "inputs": [ - { - "name": "x", - "type": "core::result::Result::" - } - ], - "outputs": [], - "state_mutability": "external" - }, - { - "type": "function", - "name": "struct_point", - "inputs": [ - { - "name": "x", - "type": "enums::Point" - } - ], - "outputs": [ - { - "type": "enums::Point" - } - ], - "state_mutability": "view" - }, - { - "type": "function", - "name": "struct_point2", - "inputs": [ - { - "name": "x", - "type": "enums::Point2" - } - ], - "outputs": [ - { - "type": "enums::Point2" - } - ], - "state_mutability": "view" - }, - { - "type": "function", - "name": "struct_Empty", - "inputs": [ - { - "name": "x", - "type": "enums::Empty" - } - ], - "outputs": [ - { - "type": "enums::Empty" - } - ], - "state_mutability": "view" - }, - { - "type": "function", - "name": "struct_Cat", - "inputs": [ - { - "name": "x", - "type": "enums::Cat" - } - ], - "outputs": [ - { - "type": "enums::Cat" - } - ], - "state_mutability": "view" - }, - { - "type": "function", - "name": "struct_Dog", - "inputs": [ - { - "name": "x", - "type": "enums::Dog" - } - ], - "outputs": [ - { - "type": "enums::Dog" - } - ], - "state_mutability": "view" - }, - { - "type": "function", - "name": "struct_Horse", - "inputs": [ - { - "name": "x", - "type": "enums::Horse" - } - ], - "outputs": [ - { - "type": "enums::Horse" - } - ], - "state_mutability": "view" - }, - { - "type": "function", - "name": "struct_Truck", - "inputs": [ - { - "name": "x", - "type": "enums::Truck" - } - ], - "outputs": [ - { - "type": "enums::Truck" - } - ], - "state_mutability": "view" - }, - { - "type": "function", - "name": "struct_Destruction", - "inputs": [ - { - "name": "x", - "type": "enums::Destruction" - } - ], - "outputs": [ - { - "type": "enums::Destruction" - } - ], - "state_mutability": "view" - } - ] - }, - { - "type": "event", - "name": "enums::test_option::Event", - "kind": "enum", - "variants": [] - } - ] -} diff --git a/__tests__/utils/calldata/enum/CairoTypeOption.test.ts b/__tests__/utils/calldata/enum/CairoTypeOption.test.ts index e3f29591a..23461504d 100644 --- a/__tests__/utils/calldata/enum/CairoTypeOption.test.ts +++ b/__tests__/utils/calldata/enum/CairoTypeOption.test.ts @@ -10,7 +10,11 @@ import { CairoTypeResult, CairoResultVariant, CairoResult, + type AbiStruct, + type ParsingStrategy, + CairoStruct, } from '../../../../src'; +import { contracts } from '../../../config/fixtures'; describe('CairoTypeOption', () => { describe('constructor variant', () => { @@ -195,6 +199,37 @@ describe('CairoTypeOption', () => { ); }); + test('optionCairoType: option of a struct', () => { + type Point = { x: BigNumberish; y: BigNumberish }; + const struct0: Point = { x: 4, y: 5 }; + const abiPoint: AbiStruct = contracts.TestCairoType.sierra.abi.find( + (item) => item.name === 'enums::Point' + ); + const myCallData = new CallData(contracts.TestCairoType.sierra.abi); + const strategies = myCallData.parser.parsingStrategies as ParsingStrategy[]; + const myTypeStruct0 = new CairoStruct(struct0, abiPoint, strategies); + const myOption0 = new CairoTypeOption( + struct0, + 'core::option::Option::', + strategies, + CairoOptionVariant.Some + ); + const myOption1 = new CairoTypeOption( + myTypeStruct0, + 'core::option::Option::', + strategies, + CairoOptionVariant.Some + ); + expect(myOption0.toApiRequest()).toEqual(['0x00', '0x4', '0x5']); + expect(myOption0.decompose(strategies)).toEqual( + new CairoOption(CairoOptionVariant.Some, { x: 4n, y: 5n }) + ); + expect(myOption1.toApiRequest()).toEqual(['0x00', '0x4', '0x5']); + expect(myOption1.decompose(strategies)).toEqual( + new CairoOption(CairoOptionVariant.Some, { x: 4n, y: 5n }) + ); + }); + test('optionCairoType: nested options', () => { const option0 = new CairoOption(CairoOptionVariant.Some, 5n); const option1 = new CairoOption>(CairoOptionVariant.Some, option0); diff --git a/__tests__/utils/calldata/enum/CairoTypeResult.test.ts b/__tests__/utils/calldata/enum/CairoTypeResult.test.ts index a57cd985f..2c8095218 100644 --- a/__tests__/utils/calldata/enum/CairoTypeResult.test.ts +++ b/__tests__/utils/calldata/enum/CairoTypeResult.test.ts @@ -14,7 +14,10 @@ import { CairoTuple, CairoFixedArray, type ParsingStrategy, + CairoStruct, + type AbiStruct, } from '../../../../src'; +import { contracts } from '../../../config/fixtures'; describe('CairoTypeResult', () => { describe('constructor variant', () => { @@ -299,11 +302,42 @@ describe('CairoTypeResult', () => { ) ).toThrow( new Error( - '"variant" parameter is mandatory when creating a new Cairo Result from a Cairo Enum or raw data.' + '"variant" parameter is mandatory when creating a new Cairo Result from a CairoOption.' ) ); }); + test('resultCairoType: result of a struct', () => { + type Point = { x: BigNumberish; y: BigNumberish }; + const struct0: Point = { x: 4, y: 5 }; + const abiPoint: AbiStruct = contracts.TestCairoType.sierra.abi.find( + (item) => item.name === 'enums::Point' + ); + const myCallData = new CallData(contracts.TestCairoType.sierra.abi); + const strategies = myCallData.parser.parsingStrategies as ParsingStrategy[]; + const myTypeStruct0 = new CairoStruct(struct0, abiPoint, strategies); + const myResult0 = new CairoResult(CairoResultVariant.Err, struct0); + const myResult1 = new CairoTypeResult( + myResult0, + 'core::result::Result::', + strategies + ); + const myResult2 = new CairoTypeResult( + myTypeStruct0, + 'core::result::Result::', + strategies, + CairoResultVariant.Err + ); + expect(myResult1.toApiRequest()).toEqual(['0x01', '0x4', '0x5']); + expect(myResult1.decompose(strategies)).toEqual( + new CairoResult(CairoResultVariant.Err, { x: 4n, y: 5n }) + ); + expect(myResult2.toApiRequest()).toEqual(['0x01', '0x4', '0x5']); + expect(myResult2.decompose(strategies)).toEqual( + new CairoResult(CairoResultVariant.Err, { x: 4n, y: 5n }) + ); + }); + test('resultCairoType: nested results', () => { const result0 = new CairoResult(CairoResultVariant.Err, 5n); const result1 = new CairoResult, BigNumberish>( diff --git a/src/index.ts b/src/index.ts index 70597f749..9e69c0c24 100644 --- a/src/index.ts +++ b/src/index.ts @@ -60,7 +60,7 @@ export * from './utils/cairoDataTypes/secp256k1Point'; export * from './utils/cairoDataTypes/cairoTypeOption'; export * from './utils/cairoDataTypes/cairoTypeResult'; export * from './utils/cairoDataTypes/cairoStruct'; -// export * from './utils/cairoDataTypes/cairoTypeEnum'; +export * from './utils/cairoDataTypes/cairoTypeCustomEnum'; export * from './utils/address'; export * from './utils/calldata'; diff --git a/src/types/cairoEnum.ts b/src/types/cairoEnum.ts index 46ca760e6..4af91e34d 100644 --- a/src/types/cairoEnum.ts +++ b/src/types/cairoEnum.ts @@ -1,6 +1,7 @@ +import type { CairoTypeCustomEnum } from '../utils/cairoDataTypes/cairoTypeCustomEnum'; import type { CairoTypeOption } from '../utils/cairoDataTypes/cairoTypeOption'; import type { CairoTypeResult } from '../utils/cairoDataTypes/cairoTypeResult'; import { CairoCustomEnum, CairoResult, CairoOption } from '../utils/calldata/enum'; export type CairoEnum = CairoCustomEnum | CairoOption | CairoResult; -export type CairoTypeEnum = CairoCustomEnum | CairoTypeOption | CairoTypeResult; +export type CairoTypeEnum = CairoTypeCustomEnum | CairoTypeOption | CairoTypeResult; diff --git a/src/utils/cairoDataTypes/array.ts b/src/utils/cairoDataTypes/array.ts index 13199de44..bbf7a997e 100644 --- a/src/utils/cairoDataTypes/array.ts +++ b/src/utils/cairoDataTypes/array.ts @@ -4,9 +4,6 @@ import { getNext, toHex } from '../num'; import { felt, getArrayType, isTypeArray } from '../calldata/cairo'; import { type ParsingStrategy } from '../calldata/parser/parsingStrategy.type'; import { CairoType } from './cairoType.interface'; -import { CairoTypeOption } from './cairoTypeOption'; -import { CairoOption, CairoResult } from '../calldata/enum'; -import { CairoTypeResult } from './cairoTypeResult'; import type { AllowArray } from '../../types'; /** @@ -120,15 +117,7 @@ export class CairoArray extends CairoType { // "content" is a CairoType return contentItem as CairoType; } - if (contentItem instanceof CairoOption) { - // "content" is a CairoOption - return new CairoTypeOption(contentItem, arrayContentType, strategies); - } - if (contentItem instanceof CairoResult) { - // "content" is a CairoResult - return new CairoTypeResult(contentItem, arrayContentType, strategies); - } - // not an iterator, not an CairoType, neither a CairoType -> so is low level data (BigNumberish, array, object) + // not an iterator, not an CairoType -> so is low level data (BigNumberish, array, object, Cairo Enums) const strategyConstructorNum = strategies.findIndex( (strategy: ParsingStrategy) => strategy.constructors[arrayContentType] @@ -375,7 +364,7 @@ export class CairoArray extends CairoType { } let parserName: string = elementType; if (element instanceof CairoType) { - if (Object.hasOwn(element, 'dynamicSelector')) { + if ('dynamicSelector' in element) { // dynamic recursive CairoType parserName = (element as any).dynamicSelector; } diff --git a/src/utils/cairoDataTypes/cairoStruct.ts b/src/utils/cairoDataTypes/cairoStruct.ts index fbdddf319..2efbffd84 100644 --- a/src/utils/cairoDataTypes/cairoStruct.ts +++ b/src/utils/cairoDataTypes/cairoStruct.ts @@ -79,7 +79,7 @@ export class CairoStruct extends CairoType { return contentItem as CairoType; } - // not an iterator, not an CairoType, neither a CairoType -> so is low level data (BigNumberish, array, object) + // not an iterator, not an CairoType -> so is low level data (BigNumberish, array, object) const strategyConstructorNum = strategies.findIndex( (strategy: ParsingStrategy) => strategy.constructors[structContentType[index]] ); @@ -100,9 +100,7 @@ export class CairoStruct extends CairoType { ); const [selectorName] = matchingSelector as [string, (type: string) => boolean]; const dynamicConstructor = strategies[strategyDynamicNum].constructors[selectorName]; - if (dynamicConstructor) { - return dynamicConstructor(contentItem, strategies, structContentType[index]); - } + return dynamicConstructor(contentItem, strategies, structContentType[index]); } throw new Error(`"${structContentType[index]}" is not a valid Cairo type`); } @@ -283,7 +281,7 @@ export class CairoStruct extends CairoType { } let parserName: string = structContentType[index] as string; if (element instanceof CairoType) { - if (Object.hasOwn(element, 'dynamicSelector')) { + if ('dynamicSelector' in element) { // dynamic recursive CairoType parserName = (element as any).dynamicSelector; } @@ -291,9 +289,11 @@ export class CairoStruct extends CairoType { const strategyDecomposeNum = strategies.findIndex( (strategy: ParsingStrategy) => strategy.response[parserName] ); - const responseParser = strategies[strategyDecomposeNum].response[parserName]; - if (responseParser) { - return responseParser(element, strategies); + if (strategyDecomposeNum >= 0) { + const responseParser = strategies[strategyDecomposeNum].response[parserName]; + if (responseParser) { + return responseParser(element, strategies); + } } // No response parser found - throw error instead of fallback magic throw new Error( diff --git a/src/utils/cairoDataTypes/cairoTypeEnum.tmp b/src/utils/cairoDataTypes/cairoTypeCustomEnum.ts similarity index 57% rename from src/utils/cairoDataTypes/cairoTypeEnum.tmp rename to src/utils/cairoDataTypes/cairoTypeCustomEnum.ts index b075645c7..4bd9fc46d 100644 --- a/src/utils/cairoDataTypes/cairoTypeEnum.tmp +++ b/src/utils/cairoDataTypes/cairoTypeCustomEnum.ts @@ -1,13 +1,21 @@ import assert from '../assert'; import { addCompiledFlag } from '../helpers'; -import { getNext } from '../num'; -import { type ParsingStrategy, type VariantType } from '../calldata/parser/parsingStrategy'; +import { getNext, toHex } from '../num'; +import { type ParsingStrategy, type VariantType } from '../calldata/parser/parsingStrategy.type'; import { CairoType } from './cairoType.interface'; -import { isTypeResult } from '../calldata/cairo'; +import { isCairo1Type } from '../calldata/cairo'; import { isUndefined } from '../typed'; -import { CairoOptionVariant, CairoOption, CairoResultVariant, CairoResult } from '../calldata/enum'; -import { CairoTuple } from './tuple'; +import { + CairoOptionVariant, + CairoOption, + CairoResultVariant, + CairoResult, + CairoCustomEnum, + type CairoEnumRaw, +} from '../calldata/enum'; import { CairoTypeOption } from './cairoTypeOption'; +import type { AbiEnum, AllowArray } from '../../types'; +import { CairoTypeResult } from './cairoTypeResult'; /** * Represents a Cairo custom enum. @@ -21,19 +29,17 @@ import { CairoTypeOption } from './cairoTypeOption'; * - Direct CallData.compile() integration * - Comprehensive type checking and validation */ -export class CairoTypeEnum extends CairoType { - static dynamicSelector = 'CairoTypeEnum' as const; - - public readonly dynamicSelector = CairoTypeEnum.dynamicSelector; +export class CairoTypeCustomEnum extends CairoType { + public readonly dynamicSelector: string; /* CairoType instance representing the content of a Cairo enum. */ - public readonly content: CairoType | undefined; + public readonly content: CairoType; - /* Cairo type of the result enum. */ - public readonly resultCairoType: string; + /** Cairo named custom enum type definition */ + public readonly abiEnum: AbiEnum; - /* True if the current variant is 'Ok', false if 'Err'. */ - public readonly isVariantOk: boolean; + /* Id of the selected enum */ + public readonly enumVariant: number; /** * CairoTypeResult provides a complete implementation for handling Cairo's result, @@ -66,118 +72,145 @@ export class CairoTypeEnum extends CairoType { * const fromApiResult = new CairoTypeResult(apiData, "core::result::Result::", hdParsingStrategy); // CairoResult instance with content 32n and Ok variant. * ``` */ + constructor( content: unknown, - resultCairoType: string, - strategy: ParsingStrategy, - variant?: CairoResultVariant | number, + abiEnum: AbiEnum, + parsingStrategy: AllowArray, + variant?: number, subType: boolean = false ) { super(); - this.resultCairoType = resultCairoType; + this.dynamicSelector = abiEnum.name; + this.abiEnum = abiEnum; + const strategies = Array.isArray(parsingStrategy) ? parsingStrategy : [parsingStrategy]; assert(!isUndefined(content), '"content" parameter has to be defined.'); assert(content !== null, '"content" parameter has to be defined.'); - if (typeof content === 'object' && 'next' in content) { + if (content && typeof content === 'object' && 'next' in content) { // "content" is an iterator assert( isUndefined(variant), 'when "content" parameter is an iterator, do not define "variant" parameter.' ); const variantFromIterator = Number(getNext(content as Iterator)); - const activeVariantType = - CairoTypeResult.getVariantTypes(resultCairoType)[variantFromIterator]; - const parsedContent: CairoType = CairoTypeResult.parser( + this.enumVariant = variantFromIterator; + const elementTypes: string[] = CairoTypeCustomEnum.getVariantTypes(abiEnum); + + const parsedContent: CairoType = CairoTypeCustomEnum.parser( content as Iterator, - activeVariantType, - strategy + elementTypes[variantFromIterator], + strategies ); this.content = parsedContent; - this.isVariantOk = variantFromIterator === CairoResultVariant.Ok; return; } - if (content instanceof CairoTypeResult) { + if (content instanceof CairoTypeCustomEnum) { assert( isUndefined(variant), - 'when "content" parameter is a CairoTypeResult, do not define "variant" parameter.' + 'when "content" parameter is a CairoTypeCustomEnum do not define "variant" parameter.' ); this.content = content.content; - this.isVariantOk = content.isVariantOk; - this.resultCairoType = content.resultCairoType; + this.enumVariant = content.enumVariant; + this.dynamicSelector = content.dynamicSelector; + this.abiEnum = content.abiEnum; return; } - CairoTypeResult.validate(content, resultCairoType, variant); + CairoTypeCustomEnum.validate(content, abiEnum, variant); + // "content" is a CairoType if (content && typeof content === 'object' && content !== null && 'toApiRequest' in content) { - // "content" is a CairoType assert( !isUndefined(variant), - '"variant" parameter is mandatory when creating a new Cairo Result from a CairoType.' + '"variant" parameter is mandatory when creating a new Cairo enum from a CairoType.' ); this.content = content as CairoType; - this.isVariantOk = variant === CairoResultVariant.Ok; + this.enumVariant = variant; return; } + if (content instanceof CairoOption) { // "content" is a CairoOption assert( !isUndefined(variant), - '"variant" parameter is mandatory when creating a new Cairo Result from a Cairo Enum or raw data.' + '"variant" parameter is mandatory when creating a new Cairo custom enum from a CairoOption.' ); const option = new CairoTypeOption( content.unwrap(), - CairoTypeResult.getVariantTypes(resultCairoType)[variant], - strategy, + CairoTypeCustomEnum.getVariantTypes(abiEnum)[variant], + strategies, content.isSome() ? CairoOptionVariant.Some : CairoOptionVariant.None ); this.content = option; - this.isVariantOk = variant === CairoResultVariant.Ok; + this.enumVariant = variant; return; } if (content instanceof CairoResult) { // "content" is a CairoResult - if (subType === false && !isUndefined(variant)) { - throw new Error( - 'when "content" parameter is a CairoResult and subType is false, do not define "variant" parameter.' - ); - } - const variantForResult = content.isOk() ? CairoResultVariant.Ok : CairoResultVariant.Err; - const typeForResult = subType - ? CairoTypeResult.getVariantTypes(resultCairoType)[variant as number] - : resultCairoType; - const result = new CairoTypeResult( + assert( + !isUndefined(variant), + '"variant" parameter is mandatory when creating a new Cairo custom enum from a CairoResult.' + ); + const option = new CairoTypeResult( content.unwrap(), - typeForResult, - strategy, - variantForResult, - true // recursive sub-type + CairoTypeCustomEnum.getVariantTypes(abiEnum)[variant], + strategies, + content.isOk() ? CairoResultVariant.Ok : CairoResultVariant.Err ); - this.content = subType ? result : result.content; - const isVariantOk = variant === CairoResultVariant.Ok; - this.isVariantOk = subType ? isVariantOk : content.isOk(); + this.content = option; + this.enumVariant = variant; return; } - // not an iterator, not an CairoType, neither a CairoOption, CairoResult, CairoCustomEnum -> so is low level data (BigNumberish, array, object) + + // "content" is a CairoCustomEnum + if (content instanceof CairoCustomEnum) { + if (!subType) { + const subVariant: number = CairoTypeCustomEnum.extractEnumMembersNames(abiEnum).indexOf( + content.activeVariant() + ); + assert(subVariant >= 0, `${content.activeVariant()} activeVariant is unknown in AbiEnum.`); + const customEnum = new CairoTypeCustomEnum( + content.unwrap(), + abiEnum, + strategies, + subVariant, + true // recursive sub-type + ); + this.content = customEnum.content; + this.enumVariant = customEnum.enumVariant; + return; + } + assert( + !isUndefined(variant), + '"variant" parameter is mandatory when creating a new Cairo custom enum from a CairoCustomEnum.' + ); + } + // not an iterator, not an CairoType -> so is low level data (BigNumberish, array, object) assert( !isUndefined(variant), - '"variant" parameter is mandatory when creating a new Cairo Result from a Cairo Enum or raw data.' + '"variant" parameter is mandatory when creating a new Cairo custom enum from a Cairo Enum or raw data.' ); - const elementType = CairoTypeResult.getVariantTypes(resultCairoType)[variant]; - const constructor = strategy.constructors[elementType]; - if (constructor) { - this.content = constructor(content, elementType); - } else { + this.enumVariant = variant; + const elementType = CairoTypeCustomEnum.getVariantTypes(abiEnum)[variant]; + const strategyConstructorNum = strategies.findIndex( + (strategy: ParsingStrategy) => strategy.constructors[elementType] + ); + if (strategyConstructorNum >= 0) { + const constructor = strategies[strategyConstructorNum].constructors[elementType]; + this.content = constructor(content, strategies, elementType, variant); + return; + } + const strategyDynamicNum = strategies.findIndex((strategy: ParsingStrategy) => { const dynamicSelectors = Object.entries(strategy.dynamicSelectors); + return dynamicSelectors.find(([, selectorFn]) => selectorFn(elementType)); + }); + if (strategyDynamicNum >= 0) { + const dynamicSelectors = Object.entries(strategies[strategyDynamicNum].dynamicSelectors); const matchingSelector = dynamicSelectors.find(([, selectorFn]) => selectorFn(elementType)); - if (matchingSelector) { - const [selectorName] = matchingSelector; - const dynamicConstructor = strategy.constructors[selectorName]; - if (dynamicConstructor) { - this.content = dynamicConstructor(content, elementType); - } - } else { - throw new Error(`"${elementType}" is not a valid Cairo type`); - } + const [selectorName] = matchingSelector as [string, (type: string) => boolean]; + const dynamicConstructor = strategies[strategyDynamicNum].constructors[selectorName]; + this.content = dynamicConstructor(content, strategies, elementType, variant); + return; } - this.isVariantOk = variant === CairoResultVariant.Ok; + throw new Error(`"${elementType}" is not a valid Cairo type`); } /** @@ -197,21 +230,31 @@ export class CairoTypeEnum extends CairoType { */ private static parser( responseIterator: Iterator, - elementType: string, - strategy: ParsingStrategy + variantCairoType: string, + parsingStrategies: ParsingStrategy[] ): CairoType { - const constructor = strategy.constructors[elementType]; - if (constructor) { - return constructor(responseIterator, elementType); + const strategyConstructorNum = parsingStrategies.findIndex( + (strategy: ParsingStrategy) => strategy.constructors[variantCairoType] + ); + if (strategyConstructorNum >= 0) { + const constructor = parsingStrategies[strategyConstructorNum].constructors[variantCairoType]; + return constructor(responseIterator, parsingStrategies, variantCairoType); } - const dynamicSelectors = Object.entries(strategy.dynamicSelectors); - const matchingSelector = dynamicSelectors.find(([, selectorFn]) => selectorFn(elementType)); - - if (matchingSelector) { - const [selectorName] = matchingSelector; - const dynamicConstructor = strategy.constructors[selectorName]; + const strategyDynamicNum = parsingStrategies.findIndex((strategy: ParsingStrategy) => { + const dynamicSelectors = Object.entries(strategy.dynamicSelectors); + return dynamicSelectors.find(([, selectorFn]) => selectorFn(variantCairoType)); + }); + if (strategyDynamicNum >= 0) { + const dynamicSelectors = Object.entries( + parsingStrategies[strategyDynamicNum].dynamicSelectors + ); + const matchingSelector = dynamicSelectors.find(([, selectorFn]) => + selectorFn(variantCairoType) + ); + const [selectorName] = matchingSelector as [string, (type: string) => boolean]; + const dynamicConstructor = parsingStrategies[strategyDynamicNum].constructors[selectorName]; if (dynamicConstructor) { - return dynamicConstructor(responseIterator, elementType); + return dynamicConstructor(responseIterator, parsingStrategies, variantCairoType); } } // Unknown type - collect raw values, defer error @@ -229,17 +272,17 @@ export class CairoTypeEnum extends CairoType { * // result = [" core::integer::u8", "core::integer::u16"] * ``` */ - static getVariantTypes(type: string): string[] { - const matchArray = type.match(/(?<=<).+(?=>)/); - if (matchArray === null) - throw new Error(`ABI type ${type} do not includes 2 types enclosed in <>.`); - const subTypes = CairoTuple.extractCairo1Tuple(`(${matchArray[0]})`) as string[]; - assert( - subTypes.length === 2, - `ABI type ${type} is not including 2 sub types. Found ${subTypes.length}.` - ); - return subTypes; - } + // static getVariantTypes(type: string): string[] { + // const matchArray = type.match(/(?<=<).+(?=>)/); + // if (matchArray === null) + // throw new Error(`ABI type ${type} do not includes 2 types enclosed in <>.`); + // const subTypes = CairoTuple.extractCairo1Tuple(`(${matchArray[0]})`) as string[]; + // assert( + // subTypes.length === 2, + // `ABI type ${type} is not including 2 sub types. Found ${subTypes.length}.` + // ); + // return subTypes; + // } /** * Validate input data for CairoTypeResult creation. @@ -252,16 +295,16 @@ export class CairoTypeEnum extends CairoType { * CairoTypeResult.validate(200, "wrong", 3); // throws * ``` */ - static validate(input: unknown, type: string, variant: VariantType | undefined): void { + static validate(_input: unknown, abiEnum: AbiEnum, variant: VariantType | undefined): void { assert( - CairoTypeResult.isAbiType(type), - `The type ${type} is not a Cairo Result. Needs core::result::Result::.` + CairoTypeCustomEnum.isAbiType(abiEnum.name), + `The type ${abiEnum.name} is not a Cairo Enum. Needs impl::name.` ); if (!isUndefined(variant)) { const numberVariant = Number(variant); assert( - [0, 1].includes(numberVariant), - 'In Cairo Result, only 0 or 1 variants are authorized.' + numberVariant < abiEnum.variants.length && numberVariant >= 0, + `The custom enum ${abiEnum.name} variant must be in the range 0..${abiEnum.variants.length - 1}. You requested variant #${numberVariant}` ); } } @@ -300,7 +343,25 @@ export class CairoTypeEnum extends CairoType { * ``` */ static isAbiType(type: string): boolean { - return isTypeResult(type); + return isCairo1Type(type); + } + + /** + * Extract the Cairo type of each property of a named Cairo Enum + * @param {AbiEnum} type - Abi definition of the enum + * @returns {string[]} an array of Cairo types + */ + private static getVariantTypes(type: AbiEnum): string[] { + return type.variants.map((member) => member.type); + } + + /** + *Extract the Cairo names of each property of a Cairo custom enum + * @param {AbiStruct} type - Abi definition of the enum + * @returns {string[]} an array of Cairo enum property names + */ + public static extractEnumMembersNames(type: AbiEnum): string[] { + return type.variants.map((member) => member.name); } /** @@ -318,7 +379,7 @@ export class CairoTypeEnum extends CairoType { * ``` */ public toApiRequest(): string[] { - const result = [this.isVariantOk ? '0x00' : '0x01']; + const result = [toHex(this.enumVariant)]; result.push(this.content!.toApiRequest()); return addCompiledFlag(result.flat()); } @@ -338,28 +399,38 @@ export class CairoTypeEnum extends CairoType { * const parsed = myResult.decompose(hdParsingStrategy); // CairoResult{ Some: 3n } * ``` */ - public decompose(strategy: ParsingStrategy): CairoResult { + public decompose(strategyDecompose: AllowArray): CairoCustomEnum { const { content } = this; + const strategies = Array.isArray(strategyDecompose) ? strategyDecompose : [strategyDecompose]; // For raw string values (unsupported types), throw error - const elementType = CairoTypeResult.getVariantTypes(this.resultCairoType)[ - this.isVariantOk ? CairoResultVariant.Ok : CairoResultVariant.Err - ]; + const enumTypes = CairoTypeCustomEnum.getVariantTypes(this.abiEnum); + const elementType = enumTypes[this.enumVariant]; + const elementNames = CairoTypeCustomEnum.extractEnumMembersNames(this.abiEnum); if (typeof content === 'string') { throw new Error(`No parser found for element type: ${elementType} in parsing strategy`); } let parserName: string = elementType; if (content instanceof CairoType) { - if (Object.hasOwn(content, 'dynamicSelector')) { + if ('dynamicSelector' in content) { // dynamic recursive CairoType parserName = (content as any).dynamicSelector; } } - const responseParser = strategy.response[parserName]; + const strategyDecomposeNum = strategies.findIndex( + (strategy: ParsingStrategy) => strategy.response[parserName] + ); + const responseParser = strategies[strategyDecomposeNum].response[parserName]; if (responseParser) { - return new CairoResult( - this.isVariantOk ? CairoResultVariant.Ok : CairoResultVariant.Err, - responseParser(content as CairoType) + const resultObject: CairoEnumRaw = elementNames.reduce( + (current: CairoEnumRaw, name: string, index: number) => { + if (index === this.enumVariant) { + return { ...current, [name]: responseParser(content as CairoType, strategies) }; + } + return { ...current, [name]: undefined }; + }, + {} ); + return new CairoCustomEnum(resultObject); } // No response parser found - throw error instead of fallback magic throw new Error( diff --git a/src/utils/cairoDataTypes/cairoTypeOption.ts b/src/utils/cairoDataTypes/cairoTypeOption.ts index 6901cc31e..ccef9de84 100644 --- a/src/utils/cairoDataTypes/cairoTypeOption.ts +++ b/src/utils/cairoDataTypes/cairoTypeOption.ts @@ -5,9 +5,7 @@ import { type ParsingStrategy, type VariantType } from '../calldata/parser/parsi import { CairoType } from './cairoType.interface'; import { isTypeOption } from '../calldata/cairo'; import { isUndefined } from '../typed'; -import { CairoOptionVariant, CairoOption, CairoResult, CairoResultVariant } from '../calldata/enum'; -// eslint-disable-next-line import/no-cycle -import { CairoTypeResult } from './cairoTypeResult'; +import { CairoOptionVariant, CairoOption } from '../calldata/enum'; import type { AllowArray } from '../../types'; /** @@ -127,36 +125,30 @@ export class CairoTypeOption extends CairoType { } if (content instanceof CairoOption) { // "content" is a CairoOption - const option = new CairoTypeOption( - content.unwrap(), - subType ? CairoTypeOption.getVariantSomeType(optionCairoType) : optionCairoType, - strategies, - content.isSome() ? CairoOptionVariant.Some : CairoOptionVariant.None, - true // recursive sub-type - ); - this.content = subType ? option : option.content; - this.isVariantSome = option.isVariantSome; - return; - } - if (content instanceof CairoResult) { - // "content" is a CairoResult & CairoOptionVariant is "Some"" - const result = new CairoTypeResult( - content.unwrap(), - CairoTypeOption.getVariantSomeType(optionCairoType), - strategies, - content.isOk() ? CairoResultVariant.Ok : CairoResultVariant.Err, - false + if (!subType) { + const option = new CairoTypeOption( + content.unwrap(), + optionCairoType, + strategies, + content.isSome() ? CairoOptionVariant.Some : CairoOptionVariant.None, + true // recursive sub-type + ); + this.content = option.content; + this.isVariantSome = option.isVariantSome; + return; + } + assert( + !isUndefined(variant), + '"variant" parameter is mandatory when creating a new Cairo custom enum from a CairoOption.' ); - this.content = result; - this.isVariantSome = true; - return; } - // not an iterator, not an CairoType, neither a CairoOption, CairoResult, CairoCustomEnum -> so is low level data (BigNumberish, array, object) + // not an iterator, not an CairoType -> so is low level data (BigNumberish, array, object, Cairo Enum) assert( !isUndefined(variant), '"variant" parameter is mandatory when creating a new Cairo option from a "CairoType" or raw data.' ); + this.isVariantSome = true; switch (variant) { case CairoOptionVariant.Some: { const elementType = CairoTypeOption.getVariantSomeType(optionCairoType); @@ -166,28 +158,21 @@ export class CairoTypeOption extends CairoType { if (strategyConstructorNum >= 0) { const constructor = strategies[strategyConstructorNum].constructors[elementType]; this.content = constructor(content, strategies, elementType); - } else { - const strategyDynamicNum = strategies.findIndex((strategy: ParsingStrategy) => { - const dynamicSelectors = Object.entries(strategy.dynamicSelectors); - return dynamicSelectors.find(([, selectorFn]) => selectorFn(elementType)); - }); - if (strategyDynamicNum >= 0) { - const dynamicSelectors = Object.entries( - strategies[strategyDynamicNum].dynamicSelectors - ); - const matchingSelector = dynamicSelectors.find(([, selectorFn]) => - selectorFn(elementType) - ); - const [selectorName] = matchingSelector as [string, (type: string) => boolean]; - const dynamicConstructor = strategies[strategyDynamicNum].constructors[selectorName]; - if (dynamicConstructor) { - this.content = dynamicConstructor(content, strategies, elementType); - } - } else { - throw new Error(`"${elementType}" is not a valid Cairo type`); - } + return; + } + const strategyDynamicNum = strategies.findIndex((strategy: ParsingStrategy) => { + const dynamicSelectors = Object.entries(strategy.dynamicSelectors); + return dynamicSelectors.find(([, selectorFn]) => selectorFn(elementType)); + }); + if (strategyDynamicNum >= 0) { + const dynamicSelectors = Object.entries(strategies[strategyDynamicNum].dynamicSelectors); + const matchingSelector = dynamicSelectors.find(([, selectorFn]) => + selectorFn(elementType) + ); + const [selectorName] = matchingSelector as [string, (type: string) => boolean]; + const dynamicConstructor = strategies[strategyDynamicNum].constructors[selectorName]; + this.content = dynamicConstructor(content, strategies, elementType); } - this.isVariantSome = true; break; } case CairoOptionVariant.None: { @@ -360,7 +345,7 @@ export class CairoTypeOption extends CairoType { } let parserName: string = elementType; if (content instanceof CairoType) { - if (Object.hasOwn(content, 'dynamicSelector')) { + if ('dynamicSelector' in content) { // dynamic recursive CairoType parserName = (content as any).dynamicSelector; } @@ -370,7 +355,7 @@ export class CairoTypeOption extends CairoType { ); const responseParser = strategies[strategyDecomposeNum].response[parserName]; if (responseParser) { - return responseParser(content as CairoType, strategies[strategyDecomposeNum]); + return responseParser(content as CairoType, strategies); } // No response parser found - throw error instead of fallback magic diff --git a/src/utils/cairoDataTypes/cairoTypeResult.ts b/src/utils/cairoDataTypes/cairoTypeResult.ts index a93fc070e..5290ce863 100644 --- a/src/utils/cairoDataTypes/cairoTypeResult.ts +++ b/src/utils/cairoDataTypes/cairoTypeResult.ts @@ -5,11 +5,8 @@ import { type ParsingStrategy, type VariantType } from '../calldata/parser/parsi import { CairoType } from './cairoType.interface'; import { isTypeResult } from '../calldata/cairo'; import { isUndefined } from '../typed'; -import { CairoOptionVariant, CairoOption, CairoResultVariant, CairoResult } from '../calldata/enum'; -// eslint-disable-next-line import/no-cycle +import { CairoResultVariant, CairoResult } from '../calldata/enum'; import { CairoTuple } from './tuple'; -// eslint-disable-next-line import/no-cycle -import { CairoTypeOption } from './cairoTypeOption'; import type { AllowArray } from '../../types'; /** @@ -30,7 +27,7 @@ export class CairoTypeResult extends CairoType { public readonly dynamicSelector = CairoTypeResult.dynamicSelector; /* CairoType instance representing the content of a Cairo result. */ - public readonly content: CairoType | undefined; + public readonly content: CairoType; /* Cairo type of the result enum. */ public readonly resultCairoType: string; @@ -120,50 +117,29 @@ export class CairoTypeResult extends CairoType { this.isVariantOk = variant === CairoResultVariant.Ok; return; } - if (content instanceof CairoOption) { - // "content" is a CairoOption - assert( - !isUndefined(variant), - '"variant" parameter is mandatory when creating a new Cairo Result from a Cairo Enum or raw data.' - ); - const option = new CairoTypeOption( - content.unwrap(), - CairoTypeResult.getVariantTypes(resultCairoType)[variant], - strategies, - content.isSome() ? CairoOptionVariant.Some : CairoOptionVariant.None - ); - this.content = option; - this.isVariantOk = variant === CairoResultVariant.Ok; - return; - } if (content instanceof CairoResult) { // "content" is a CairoResult - if (subType === false && !isUndefined(variant)) { - throw new Error( - 'when "content" parameter is a CairoResult and subType is false, do not define "variant" parameter.' + if (!subType) { + const variantForResult = content.isOk() ? CairoResultVariant.Ok : CairoResultVariant.Err; + const result = new CairoTypeResult( + content.unwrap(), + resultCairoType, + strategies, + variantForResult, + true // recursive sub-type ); + this.content = result.content; + this.isVariantOk = content.isOk(); + return; } - const variantForResult = content.isOk() ? CairoResultVariant.Ok : CairoResultVariant.Err; - const typeForResult = subType - ? CairoTypeResult.getVariantTypes(resultCairoType)[variant as number] - : resultCairoType; - const result = new CairoTypeResult( - content.unwrap(), - typeForResult, - strategies, - variantForResult, - true // recursive sub-type - ); - this.content = subType ? result : result.content; - const isVariantOk = variant === CairoResultVariant.Ok; - this.isVariantOk = subType ? isVariantOk : content.isOk(); - return; } - // not an iterator, not an CairoType, neither a CairoOption, CairoResult, CairoCustomEnum -> so is low level data (BigNumberish, array, object) + + // not an iterator, not an CairoType -> so is low level data (BigNumberish, array, object, Cairo Enum) assert( !isUndefined(variant), '"variant" parameter is mandatory when creating a new Cairo Result from a Cairo Enum or raw data.' ); + this.isVariantOk = variant === CairoResultVariant.Ok; const elementType = CairoTypeResult.getVariantTypes(resultCairoType)[variant]; const strategyConstructorNum = strategies.findIndex( (strategy: ParsingStrategy) => strategy.constructors[elementType] @@ -171,24 +147,21 @@ export class CairoTypeResult extends CairoType { if (strategyConstructorNum >= 0) { const constructor = strategies[strategyConstructorNum].constructors[elementType]; this.content = constructor(content, strategies, elementType); - } else { - const strategyDynamicNum = strategies.findIndex((strategy: ParsingStrategy) => { - const dynamicSelectors = Object.entries(strategy.dynamicSelectors); - return dynamicSelectors.find(([, selectorFn]) => selectorFn(elementType)); - }); - if (strategyDynamicNum >= 0) { - const dynamicSelectors = Object.entries(strategies[strategyDynamicNum].dynamicSelectors); - const matchingSelector = dynamicSelectors.find(([, selectorFn]) => selectorFn(elementType)); - const [selectorName] = matchingSelector as [string, (type: string) => boolean]; - const dynamicConstructor = strategies[strategyDynamicNum].constructors[selectorName]; - if (dynamicConstructor) { - this.content = dynamicConstructor(content, strategies, elementType); - } - } else { - throw new Error(`"${elementType}" is not a valid Cairo type`); - } + return; } - this.isVariantOk = variant === CairoResultVariant.Ok; + const strategyDynamicNum = strategies.findIndex((strategy: ParsingStrategy) => { + const dynamicSelectors = Object.entries(strategy.dynamicSelectors); + return dynamicSelectors.find(([, selectorFn]) => selectorFn(elementType)); + }); + if (strategyDynamicNum >= 0) { + const dynamicSelectors = Object.entries(strategies[strategyDynamicNum].dynamicSelectors); + const matchingSelector = dynamicSelectors.find(([, selectorFn]) => selectorFn(elementType)); + const [selectorName] = matchingSelector as [string, (type: string) => boolean]; + const dynamicConstructor = strategies[strategyDynamicNum].constructors[selectorName]; + this.content = dynamicConstructor(content, strategies, elementType); + return; + } + throw new Error(`"${elementType}" is not a valid Cairo type`); } /** @@ -369,7 +342,7 @@ export class CairoTypeResult extends CairoType { } let parserName: string = elementType; if (content instanceof CairoType) { - if (Object.hasOwn(content, 'dynamicSelector')) { + if ('dynamicSelector' in content) { // dynamic recursive CairoType parserName = (content as any).dynamicSelector; } diff --git a/src/utils/cairoDataTypes/fixedArray.ts b/src/utils/cairoDataTypes/fixedArray.ts index 26a0a5b19..7444e27bc 100644 --- a/src/utils/cairoDataTypes/fixedArray.ts +++ b/src/utils/cairoDataTypes/fixedArray.ts @@ -3,9 +3,6 @@ import { addCompiledFlag } from '../helpers'; import { getNext } from '../num'; import { type ParsingStrategy } from '../calldata/parser/parsingStrategy.type'; import { CairoType } from './cairoType.interface'; -import { CairoOption, CairoResult } from '../calldata/enum'; -import { CairoTypeOption } from './cairoTypeOption'; -import { CairoTypeResult } from './cairoTypeResult'; import type { AllowArray } from '../../types'; /** @@ -118,15 +115,7 @@ export class CairoFixedArray extends CairoType { // "content" is a CairoType return contentItem as CairoType; } - if (contentItem instanceof CairoOption) { - // "content" is a CairoOption - return new CairoTypeOption(contentItem, arrayContentType, strategies); - } - if (contentItem instanceof CairoResult) { - // "content" is a CairoResult - return new CairoTypeResult(contentItem, arrayContentType, strategies); - } - // not an iterator, not an CairoType, neither a CairoType -> so is low level data (BigNumberish, array, object) + // not an iterator, not an CairoType -> so is low level data (BigNumberish, array, object, Cairo Enums) const strategyConstructorNum = strategies.findIndex( (strategy: ParsingStrategy) => strategy.constructors[arrayContentType] ); @@ -419,7 +408,7 @@ export class CairoFixedArray extends CairoType { } let parserName: string = elementType; if (element instanceof CairoType) { - if (Object.hasOwn(element, 'dynamicSelector')) { + if ('dynamicSelector' in element) { // dynamic recursive CairoType parserName = (element as any).dynamicSelector; } diff --git a/src/utils/cairoDataTypes/tuple.ts b/src/utils/cairoDataTypes/tuple.ts index 3cb6ed681..7261c3ab9 100644 --- a/src/utils/cairoDataTypes/tuple.ts +++ b/src/utils/cairoDataTypes/tuple.ts @@ -5,10 +5,6 @@ import { isTypeTuple, isCairo1Type, isTypeNamedTuple } from '../calldata/cairo'; import { type ParsingStrategy } from '../calldata/parser/parsingStrategy.type'; import { CairoType } from './cairoType.interface'; import { CairoFelt252 } from './felt'; -import { CairoOption, CairoResult } from '../calldata/enum'; -// eslint-disable-next-line import/no-cycle -import { CairoTypeOption } from './cairoTypeOption'; -import { CairoTypeResult } from './cairoTypeResult'; import type { AllowArray } from '../../types'; /** @@ -124,15 +120,8 @@ export class CairoTuple extends CairoType { // "content" is a CairoType return contentItem as CairoType; } - if (contentItem instanceof CairoOption) { - // "content" is a CairoOption - return new CairoTypeOption(contentItem, tupleContentType[index], strategies); - } - if (contentItem instanceof CairoResult) { - // "content" is a CairoResult - return new CairoTypeResult(contentItem, tupleContentType[index], strategies); - } - // not an iterator, not an CairoType, neither a CairoType -> so is low level data (BigNumberish, array, object) + + // not an iterator, not an CairoType -> so is low level data (BigNumberish, array, object, Cairo Enums) const strategyConstructorNum = strategies.findIndex( (strategy: ParsingStrategy) => strategy.constructors[tupleContentType[index]] ); @@ -647,7 +636,7 @@ export class CairoTuple extends CairoType { } let parserName: string = elementTypes[index] as string; if (element instanceof CairoType) { - if (Object.hasOwn(element, 'dynamicSelector')) { + if ('dynamicSelector' in element) { // dynamic recursive CairoType parserName = (element as any).dynamicSelector; } diff --git a/src/utils/calldata/calldataUtils.ts b/src/utils/calldata/calldataUtils.ts new file mode 100644 index 000000000..3684f3362 --- /dev/null +++ b/src/utils/calldata/calldataUtils.ts @@ -0,0 +1,37 @@ +import type { Abi, AbiEnums, AbiStructs } from '../../types'; + +/** + * Helper to extract enums from abi + * @param abi Abi + * @returns AbiEnums - enums from abi + */ +export function getAbiEnum(abi: Abi): AbiEnums { + const fullEnumList = abi + .filter((abiEntry) => abiEntry.type === 'enum') + .reduce( + (acc, abiEntry) => ({ + ...acc, + [abiEntry.name]: abiEntry, + }), + {} + ); + delete fullEnumList['core::bool']; + return fullEnumList; +} + +/** + * Helper to extract structs from abi + * @param abi Abi + * @returns AbiStructs - structs from abi + */ +export function getAbiStruct(abi: Abi): AbiStructs { + return abi + .filter((abiEntry) => abiEntry.type === 'struct') + .reduce( + (acc, abiEntry) => ({ + ...acc, + [abiEntry.name]: abiEntry, + }), + {} + ); +} diff --git a/src/utils/calldata/getAbiStruct.ts b/src/utils/calldata/getAbiStruct.ts deleted file mode 100644 index 7d4b2862f..000000000 --- a/src/utils/calldata/getAbiStruct.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { Abi, AbiStructs } from '../../types'; - -/** - * Helper to extract structs from abi - * @param abi Abi - * @returns AbiStructs - structs from abi - */ -export function getAbiStruct(abi: Abi): AbiStructs { - return abi - .filter((abiEntry) => abiEntry.type === 'struct') - .reduce( - (acc, abiEntry) => ({ - ...acc, - [abiEntry.name]: abiEntry, - }), - {} - ); -} diff --git a/src/utils/calldata/index.ts b/src/utils/calldata/index.ts index 02bc70a5c..5aaa79978 100644 --- a/src/utils/calldata/index.ts +++ b/src/utils/calldata/index.ts @@ -32,7 +32,7 @@ import { CairoFixedArray } from '../cairoDataTypes/fixedArray'; import { CairoArray } from '../cairoDataTypes/array'; import { CairoTuple } from '../cairoDataTypes/tuple'; import formatter from './formatter'; -import { createAbiParser, isNoConstructorValid, ParsingStrategy } from './parser'; +import { createAbiParser, isNoConstructorValid, type ParsingStrategy } from './parser'; import { hdParsingStrategy } from './parser/parsingStrategy'; import { AbiParserInterface } from './parser/interface'; import orderPropsByAbi from './propertyOrder'; @@ -41,8 +41,10 @@ import responseParser from './responseParser'; import validateFields from './validate'; import { CairoTypeOption } from '../cairoDataTypes/cairoTypeOption'; import { CairoTypeResult } from '../cairoDataTypes/cairoTypeResult'; -import { getAbiStruct } from './getAbiStruct'; import { CairoStruct } from '../cairoDataTypes/cairoStruct'; +import { getAbiEnum, getAbiStruct } from './calldataUtils'; +import { CairoTypeCustomEnum } from '../cairoDataTypes/cairoTypeCustomEnum'; +import { isInstanceOf as isInstanceOfClasses } from '../helpers'; export * as cairo from './cairo'; export { parseCalldataField } from './requestParser'; @@ -127,7 +129,7 @@ export class CallData { public compile( method: string, argsCalldata: RawArgs, - parserStrategy: ParsingStrategy = hdParsingStrategy + parserStrategy: AllowArray = this.parser.parsingStrategies ): Calldata { const abiMethod = this.abi.find((abiFunction) => abiFunction.name === method) as FunctionAbi; @@ -229,48 +231,20 @@ export class CallData { } return getEntries({ 0: activeVariantNb, 1: myEnum.unwrap() }, `${prefix}${kk}.`); } - if (value instanceof CairoFixedArray) { - // CairoFixedArray - use toApiRequest() to get flat array, then convert to tree structure + if ( + isInstanceOfClasses(value, [ + CairoTypeOption, + CairoTypeResult, + CairoStruct, + CairoTypeCustomEnum, + CairoTuple, + CairoArray, + CairoFixedArray, + ]) + ) { const apiRequest = value.toApiRequest(); const compiledObj = Object.fromEntries( - apiRequest.map((item, idx) => [idx.toString(), item]) - ); - return getEntries(compiledObj, `${prefix}${kk}.`); - } - if (value instanceof CairoArray) { - // CairoArray - use toApiRequest() to get length-prefixed array, then convert to tree structure - const apiRequest = value.toApiRequest(); - const compiledObj = Object.fromEntries( - apiRequest.map((item, idx) => [idx.toString(), item]) - ); - return getEntries(compiledObj, `${prefix}${kk}.`); - } - if (value instanceof CairoTuple) { - // CairoTuple - use toApiRequest() to get flat array (no length prefix), then convert to tree structure - const apiRequest = value.toApiRequest(); - const compiledObj = Object.fromEntries( - apiRequest.map((item, idx) => [idx.toString(), item]) - ); - return getEntries(compiledObj, `${prefix}${kk}.`); - } - if (value instanceof CairoTypeOption) { - const apiRequest = value.toApiRequest(); - const compiledObj = Object.fromEntries( - apiRequest.map((item, idx) => [idx.toString(), item]) - ); - return getEntries(compiledObj, `${prefix}${kk}.`); - } - if (value instanceof CairoTypeResult) { - const apiRequest = value.toApiRequest(); - const compiledObj = Object.fromEntries( - apiRequest.map((item, idx) => [idx.toString(), item]) - ); - return getEntries(compiledObj, `${prefix}${kk}.`); - } - if (value instanceof CairoStruct) { - const apiRequest = value.toApiRequest(); - const compiledObj = Object.fromEntries( - apiRequest.map((item, idx) => [idx.toString(), item]) + apiRequest.map((item: any, idx: number) => [idx.toString(), item]) ); return getEntries(compiledObj, `${prefix}${kk}.`); } @@ -364,17 +338,7 @@ export class CallData { * @returns AbiEnums - enums from abi */ static getAbiEnum(abi: Abi): AbiEnums { - const fullEnumList = abi - .filter((abiEntry) => abiEntry.type === 'enum') - .reduce( - (acc, abiEntry) => ({ - ...acc, - [abiEntry.name]: abiEntry, - }), - {} - ); - delete fullEnumList['core::bool']; - return fullEnumList; + return getAbiEnum(abi); } /** diff --git a/src/utils/calldata/parser/parser-2.0.0.ts b/src/utils/calldata/parser/parser-2.0.0.ts index da1f574ac..21e2ec485 100644 --- a/src/utils/calldata/parser/parser-2.0.0.ts +++ b/src/utils/calldata/parser/parser-2.0.0.ts @@ -7,13 +7,16 @@ import { type LegacyEvent, AbiEntryType, type AllowArray, + type AbiEnum, } from '../../../types'; import { CairoStruct } from '../../cairoDataTypes/cairoStruct'; import type { CairoType } from '../../cairoDataTypes/cairoType.interface'; -import { isTypeArray } from '../cairo'; +import { isTypeArray, isTypeOption, isTypeResult } from '../cairo'; import { AbiParserInterface } from './interface'; -import { ParsingStrategy } from './parsingStrategy.type'; -import { getAbiStruct } from '../getAbiStruct'; +import { ParsingStrategy, type VariantType } from './parsingStrategy.type'; +import { CairoTypeCustomEnum } from '../../cairoDataTypes/cairoTypeCustomEnum'; +import { getAbiEnum, getAbiStruct } from '../calldataUtils'; +import assert from '../../assert'; export class AbiParser2 implements AbiParserInterface { abi: Abi; @@ -24,6 +27,7 @@ export class AbiParser2 implements AbiParserInterface { this.abi = abi; // add structs & enums in strategy const structs: AbiStruct[] = Object.values(getAbiStruct(abi)); + const enums: AbiEnum[] = Object.values(getAbiEnum(abi)); const structAndEnumStrategy: ParsingStrategy = { constructors: {}, response: {}, @@ -42,6 +46,31 @@ export class AbiParser2 implements AbiParserInterface { structAndEnumStrategy.dynamicSelectors[struct.name] = (_type: string) => true; } }); + enums.forEach((enumDef: AbiEnum) => { + // option & result are defined as enums in Abi, but are useless here + if (!isTypeOption(enumDef.name) && !isTypeResult(enumDef.name)) { + structAndEnumStrategy.constructors[enumDef.name] = ( + input: Iterator | unknown, + _strategy: AllowArray, + _type?: string, + variant?: VariantType + ) => { + // assert(!!variant, 'CairoTypeCustomEnum constructor requires "variant" parameter.'); + assert(!(typeof variant === 'string'), 'variant needs to be an integer.'); + return new CairoTypeCustomEnum( + input, + enumDef, + [parsingStrategy, structAndEnumStrategy], + variant + ); + }; + structAndEnumStrategy.response[enumDef.name] = ( + instance: CairoType, + strategy: AllowArray + ) => (instance as CairoTypeCustomEnum).decompose(strategy); + structAndEnumStrategy.dynamicSelectors[enumDef.name] = (_type: string) => true; + } + }); this.parsingStrategies = [parsingStrategy, structAndEnumStrategy]; } diff --git a/src/utils/calldata/propertyOrder.ts b/src/utils/calldata/propertyOrder.ts index ba1410a19..82dc70fe5 100644 --- a/src/utils/calldata/propertyOrder.ts +++ b/src/utils/calldata/propertyOrder.ts @@ -4,6 +4,7 @@ import { AbiStructs, CairoEnum, RawArgsObject, + type AllowArray, type CairoTypeEnum, } from '../../types'; import { CairoUint256 } from '../cairoDataTypes/uint256'; @@ -39,6 +40,7 @@ import { CairoTypeOption } from '../cairoDataTypes/cairoTypeOption'; import { type ParsingStrategy } from './parser'; import { CairoTypeResult } from '../cairoDataTypes/cairoTypeResult'; import { CairoStruct } from '../cairoDataTypes/cairoStruct'; +import { CairoTypeCustomEnum } from '../cairoDataTypes/cairoTypeCustomEnum'; function errorU256(key: string) { return Error( @@ -57,7 +59,7 @@ export default function orderPropsByAbi( abiOfObject: AbiEntry[], structs: AbiStructs, enums: AbiEnums, - parseStrategy: ParsingStrategy + parseStrategy: AllowArray ): object { const orderInput = (unorderedItem: any, abiType: string): any => { if (CairoFixedArray.isAbiType(abiType)) { @@ -224,18 +226,7 @@ export default function orderPropsByAbi( unorderedResult.isOk() ? CairoResultVariant.Ok : CairoResultVariant.Err ); } - const unorderedResult = unorderedObject2 as CairoTypeResult; - return new CairoTypeResult( - orderInput( - unorderedResult.content, - CairoTypeResult.getVariantTypes(abiObject.name)[ - unorderedResult.isVariantOk ? CairoResultVariant.Ok : CairoResultVariant.Err - ] - ), - abiObject.name, - parseStrategy, - unorderedResult.isVariantOk ? CairoResultVariant.Ok : CairoResultVariant.Err - ); + return unorderedObject2 as CairoTypeResult; } if (isTypeOption(abiObject.name)) { if (unorderedObject2 instanceof CairoOption) { @@ -257,36 +248,29 @@ export default function orderPropsByAbi( CairoOptionVariant.None ); } - const unorderedOption = unorderedObject2 as CairoTypeOption; - if (unorderedOption.isVariantSome) { - const resultSomeType: string = CairoTypeOption.getVariantSomeType(abiObject.name); - return new CairoTypeOption( - orderInput(unorderedOption.content, resultSomeType), - abiObject.name, - parseStrategy, - CairoOptionVariant.Some - ); - } - // none(()) - return new CairoTypeOption(undefined, abiObject.type, parseStrategy, CairoOptionVariant.None); + return unorderedObject2 as CairoTypeOption; } // custom Enum - const unorderedCustomEnum = unorderedObject2 as CairoCustomEnum; - const variants = Object.entries(unorderedCustomEnum.variant); - const newEntries = variants.map((variant) => { - if (isUndefined(variant[1])) { - return variant; - } - const variantType: string = abiObject.type.substring( - abiObject.type.lastIndexOf('<') + 1, - abiObject.type.lastIndexOf('>') + if (unorderedObject2 instanceof CairoCustomEnum) { + const unorderedCustomEnum = unorderedObject2; + const variantList = Object.values(enums[abiObject.name].variants); + const newEntries = variantList.map((abiEntry) => { + if (isUndefined(unorderedCustomEnum.variant[abiEntry.name])) { + return [abiEntry.name, undefined]; + } + return [abiEntry.name, orderInput(unorderedCustomEnum.unwrap(), abiEntry.type)]; + }); + const variantIndex = variantList.findIndex( + (variant) => variant.name === unorderedCustomEnum.activeVariant() ); - if (variantType === '()') { - return variant; - } - return [variant[0], orderInput(unorderedCustomEnum.unwrap(), variantType)]; - }); - return new CairoCustomEnum(Object.fromEntries(newEntries)); + return new CairoTypeCustomEnum( + new CairoCustomEnum(Object.fromEntries(newEntries)), + enums[abiObject.name], + parseStrategy, + variantIndex + ); + } + return unorderedObject2 as CairoTypeCustomEnum; }; // Order Call Parameters diff --git a/src/utils/calldata/requestParser.ts b/src/utils/calldata/requestParser.ts index 115975e22..43038a11e 100644 --- a/src/utils/calldata/requestParser.ts +++ b/src/utils/calldata/requestParser.ts @@ -6,6 +6,7 @@ import { BigNumberish, CairoEnum, ParsedStruct, + type CairoTypeEnum, } from '../../types'; import { CairoByteArray } from '../cairoDataTypes/byteArray'; import { CairoBytes31 } from '../cairoDataTypes/bytes31'; @@ -45,6 +46,7 @@ import { AbiParserInterface } from './parser'; import { CairoTypeOption } from '../cairoDataTypes/cairoTypeOption'; import { CairoTypeResult } from '../cairoDataTypes/cairoTypeResult'; import { CairoStruct } from '../cairoDataTypes/cairoStruct'; +import { CairoTypeCustomEnum } from '../cairoDataTypes/cairoTypeCustomEnum'; // TODO: cleanup implementations to work with unknown, instead of blind casting with 'as' @@ -240,28 +242,13 @@ function parseCalldataValue({ return myResult.toApiRequest(); } // Custom Enum - const myEnum = element as CairoCustomEnum; - const activeVariant: string = myEnum.activeVariant(); - const listTypeVariant = variants.find((variant) => variant.name === activeVariant); - if (isUndefined(listTypeVariant)) { - throw Error(`Not find in abi : Enum has no '${activeVariant}' variant.`); + let myEnum: CairoTypeCustomEnum; + if (element instanceof CairoCustomEnum) { + myEnum = new CairoTypeCustomEnum(element, enums[type], parser.parsingStrategies); + } else { + myEnum = element as CairoTypeCustomEnum; } - const typeActiveVariant = listTypeVariant.type; - const numActiveVariant = variants.findIndex((variant) => variant.name === activeVariant); // can not fail due to check of listTypeVariant - if (typeActiveVariant === '()') { - return numActiveVariant.toString(); - } - const parsedParameter = parseCalldataValue({ - element: myEnum.unwrap(), - type: typeActiveVariant, - structs, - enums, - parser, - }); - if (Array.isArray(parsedParameter)) { - return [numActiveVariant.toString(), ...parsedParameter]; - } - return [numActiveVariant.toString(), parsedParameter]; + return myEnum.toApiRequest(); } if (isTypeNonZero(type)) { @@ -383,7 +370,7 @@ export function parseCalldataField({ // Enums case isTypeEnum(type, enums): return parseCalldataValue({ - element: value as CairoTypeOption | CairoResult | CairoEnum, + element: value as CairoTypeEnum | CairoEnum, type, structs, enums, diff --git a/src/utils/calldata/responseParser.ts b/src/utils/calldata/responseParser.ts index ca12eca1a..968adb4dc 100644 --- a/src/utils/calldata/responseParser.ts +++ b/src/utils/calldata/responseParser.ts @@ -35,19 +35,17 @@ import { isTypeEnum, isTypeEthAddress, isTypeNonZero, + isTypeOption, + isTypeResult, isTypeSecp256k1Point, isTypeTuple, } from './cairo'; -import { - CairoCustomEnum, - CairoEnumRaw, - CairoOption, - CairoOptionVariant, - CairoResult, - CairoResultVariant, -} from './enum'; +import { CairoCustomEnum, CairoOption, CairoResult } from './enum'; import { AbiParserInterface } from './parser/interface'; import type { CairoStruct } from '../cairoDataTypes/cairoStruct'; +import { CairoTypeCustomEnum } from '../cairoDataTypes/cairoTypeCustomEnum'; +import { CairoTypeOption } from '../cairoDataTypes/cairoTypeOption'; +import { CairoTypeResult } from '../cairoDataTypes/cairoTypeResult'; /** * Parse base types @@ -179,39 +177,31 @@ function parseResponseValue( // type Enum (only CustomEnum) if (enums && element.type in enums && enums[element.type]) { - const variantNum: number = Number(responseIterator.next().value); // get variant number - const rawEnum = enums[element.type].variants.reduce((acc, variant, num) => { - if (num === variantNum) { - acc[variant.name] = parseResponseValue( - responseIterator, - { name: '', type: variant.type }, - parser, - structs, - enums - ); - return acc; - } - acc[variant.name] = undefined; - return acc; - }, {} as CairoEnumRaw); // Option - if (element.type.startsWith('core::option::Option')) { - const content = variantNum === CairoOptionVariant.Some ? rawEnum.Some : undefined; - return new CairoOption(variantNum, content); + if (isTypeOption(element.type)) { + const myOption = new CairoTypeOption( + responseIterator, + element.type, + parser.parsingStrategies + ); + return myOption.decompose(parser.parsingStrategies) as CairoOption; } // Result - if (element.type.startsWith('core::result::Result')) { - let content: Object; - if (variantNum === CairoResultVariant.Ok) { - content = rawEnum.Ok; - } else { - content = rawEnum.Err; - } - return new CairoResult(variantNum, content); + if (isTypeResult(element.type)) { + const myResult = new CairoTypeResult( + responseIterator, + element.type, + parser.parsingStrategies + ); + return myResult.decompose(parser.parsingStrategies) as CairoResult; } // Cairo custom Enum - const customEnum = new CairoCustomEnum(rawEnum); - return customEnum; + const customEnum = new CairoTypeCustomEnum( + responseIterator, + enums[element.type], + parser.parsingStrategies + ); + return customEnum.decompose(parser.parsingStrategies) as CairoCustomEnum; } // type tuple diff --git a/src/utils/calldata/validate.ts b/src/utils/calldata/validate.ts index d8fa4709e..7999d0890 100644 --- a/src/utils/calldata/validate.ts +++ b/src/utils/calldata/validate.ts @@ -41,9 +41,10 @@ import { isTypeUint, } from './cairo'; import { CairoTypeOption } from '../cairoDataTypes/cairoTypeOption'; -import { CairoOption, CairoResult } from './enum'; +import { CairoCustomEnum, CairoOption, CairoResult } from './enum'; import { CairoTypeResult } from '../cairoDataTypes/cairoTypeResult'; import { CairoStruct } from '../cairoDataTypes/cairoStruct'; +import { CairoTypeCustomEnum } from '../cairoDataTypes/cairoTypeCustomEnum'; // TODO: separate validate is redundant as CairoTypes are validated during construction. // TODO: This validate should provide added valie method base validate poiniting to incorect value for method, opt. using color coding @@ -221,6 +222,10 @@ const validateStruct = (parameter: any, input: AbiEntry, structs: AbiStructs) => }; const validateEnum = (parameter: any, input: AbiEntry) => { + // If parameter is a CairoTypeCustomEnum instance, skip validation (it's already validated) + if (parameter instanceof CairoTypeCustomEnum) { + return; + } assert( isObject(parameter), `Validate: arg ${input.name} is cairo type Enum (${input.type}), and should be defined as a js object (not array)` @@ -240,6 +245,9 @@ const validateEnum = (parameter: any, input: AbiEntry) => { if (isTypeResult(input.type) && parameter instanceof CairoResult) { return; // CairoResult Enum } + if (parameter instanceof CairoCustomEnum) { + return; + } if (keys.includes('variant') && keys.includes('activeVariant')) { return; // Custom Enum } diff --git a/src/utils/helpers.ts b/src/utils/helpers.ts index a5c5a89c8..5db8e0cd7 100644 --- a/src/utils/helpers.ts +++ b/src/utils/helpers.ts @@ -32,3 +32,13 @@ export function deepCopyWithMethods(obj: any): any { } return cloned; } + +/** + * Check if an instance is from an array of classes + * @param {any} toCheck - instance to check + * @param {any[]} classArray - array of class names to check against + * @returns {boolean} + */ +export function isInstanceOf(toCheck: any, classArray: any[]): boolean { + return classArray.some((cls) => toCheck instanceof cls); +} From 24386d4be05c73090b3f848db3f0f957a7cfa467 Mon Sep 17 00:00:00 2001 From: PhilippeR26 Date: Wed, 1 Oct 2025 18:45:58 +0200 Subject: [PATCH 11/17] test: add tests including customEnum. solve struct non ordered items problem --- .../cairo/cairo2120/enums_test_enums.casm | 10943 +++++++++------- .../cairo2120/enums_test_enums.sierra.json | 8575 +++++++----- .../utils/cairoDataTypes/CairoStruct.test.ts | 18 +- .../utils/cairoDataTypes/CairoTuple.test.ts | 4 + .../calldata/enum/CairoResult.test copy.ts | 49 + .../calldata/enum/CairoTypeResult.test.ts | 2 +- .../utils/calldata/requestParser.test.ts | 10 +- src/index.ts | 23 +- src/utils/cairoDataTypes/cairoStruct.ts | 27 +- .../cairoDataTypes/cairoTypeCustomEnum.ts | 155 +- src/utils/cairoDataTypes/cairoTypeResult.ts | 4 + src/utils/cairoDataTypes/index.ts | 25 + src/utils/cairoDataTypes/tuple.ts | 8 +- src/utils/calldata/parser/parser-0-1.1.0.ts | 91 +- src/utils/calldata/requestParser.ts | 3 +- 15 files changed, 11458 insertions(+), 8479 deletions(-) create mode 100644 __tests__/utils/calldata/enum/CairoResult.test copy.ts create mode 100644 src/utils/cairoDataTypes/index.ts diff --git a/__mocks__/cairo/cairo2120/enums_test_enums.casm b/__mocks__/cairo/cairo2120/enums_test_enums.casm index e534e29a9..13253795a 100644 --- a/__mocks__/cairo/cairo2120/enums_test_enums.casm +++ b/__mocks__/cairo/cairo2120/enums_test_enums.casm @@ -96,7 +96,7 @@ "0x10780017fff7fff", "0xc", "0x1104800180018000", - "0xda7", + "0x10b9", "0x48127ff17fff8000", "0x48127ff17fff8000", "0x480a7ffb7fff8000", @@ -106,9 +106,9 @@ "0x48127ffa7fff8000", "0x208b7fff7fff7ffe", "0x1104800180018000", - "0x1df0", + "0x2950", "0x482480017fff8000", - "0x1def", + "0x294f", "0x480080007fff8000", "0xa0680017fff8000", "0x9", @@ -170,7 +170,7 @@ "0x482480017ffd8000", "0x1dce", "0x1104800180018000", - "0xd62", + "0x1074", "0x48127ff67fff8000", "0x48127ff67fff8000", "0x480a7ffb7fff8000", @@ -184,7 +184,7 @@ "0x482680017ffa8000", "0x1e96", "0x1104800180018000", - "0xd59", + "0x106b", "0x48127ff67fff8000", "0x48127ff67fff8000", "0x480a7ffb7fff8000", @@ -209,7 +209,7 @@ "0x480a7ffc7fff8000", "0x480a7ffd7fff8000", "0x1104800180018000", - "0xd45", + "0x1057", "0x20680017fff7ff9", "0x69", "0x20680017fff7ffc", @@ -220,7 +220,7 @@ "0x10780017fff7fff", "0xc", "0x1104800180018000", - "0xd2b", + "0x103d", "0x48127fee7fff8000", "0x48127fee7fff8000", "0x480a7ffb7fff8000", @@ -230,9 +230,9 @@ "0x48127ffa7fff8000", "0x208b7fff7fff7ffe", "0x1104800180018000", - "0x1d74", + "0x28d4", "0x482480017fff8000", - "0x1d73", + "0x28d3", "0x480080007fff8000", "0xa0680017fff8000", "0x9", @@ -264,7 +264,7 @@ "0x482480017ff88000", "0x2", "0x1104800180018000", - "0xd9b", + "0x10ad", "0x20680017fff7ffd", "0x8", "0x48127ffb7fff8000", @@ -306,7 +306,7 @@ "0x10780017fff7fff", "0x18", "0x1104800180018000", - "0xcda", + "0xfec", "0x48127fef7fff8000", "0x48127fef7fff8000", "0x480a7ffb7fff8000", @@ -328,7 +328,7 @@ "0x482680017ffa8000", "0x1e96", "0x1104800180018000", - "0xcc9", + "0xfdb", "0x48127ff67fff8000", "0x48127ff67fff8000", "0x480a7ffb7fff8000", @@ -361,7 +361,7 @@ "0x1", "0x480a7ffd7fff8000", "0x1104800180018000", - "0xd6a", + "0x107c", "0x20680017fff7ffc", "0xe", "0x48127ff97fff8000", @@ -406,7 +406,7 @@ "0x10780017fff7fff", "0xc", "0x1104800180018000", - "0xc71", + "0xf83", "0x48127fef7fff8000", "0x48127fef7fff8000", "0x480a7ffb7fff8000", @@ -416,9 +416,9 @@ "0x48127ffa7fff8000", "0x208b7fff7fff7ffe", "0x1104800180018000", - "0x1cba", + "0x281a", "0x482480017fff8000", - "0x1cb9", + "0x2819", "0x480080007fff8000", "0xa0680017fff8000", "0x9", @@ -482,7 +482,7 @@ "0x482480017ffd8000", "0x1dce", "0x1104800180018000", - "0xc2a", + "0xf3c", "0x48127ff67fff8000", "0x48127ff67fff8000", "0x480a7ffb7fff8000", @@ -496,7 +496,7 @@ "0x482680017ffa8000", "0x1e96", "0x1104800180018000", - "0xc21", + "0xf33", "0x48127ff67fff8000", "0x48127ff67fff8000", "0x480a7ffb7fff8000", @@ -521,7 +521,7 @@ "0x480a7ffc7fff8000", "0x480a7ffd7fff8000", "0x1104800180018000", - "0xd68", + "0x107a", "0x20680017fff7ff8", "0x69", "0x20680017fff7ffb", @@ -532,7 +532,7 @@ "0x10780017fff7fff", "0xc", "0x1104800180018000", - "0xbf3", + "0xf05", "0x48127fed7fff8000", "0x48127fed7fff8000", "0x480a7ffb7fff8000", @@ -542,9 +542,9 @@ "0x48127ffa7fff8000", "0x208b7fff7fff7ffe", "0x1104800180018000", - "0x1c3c", + "0x279c", "0x482480017fff8000", - "0x1c3b", + "0x279b", "0x480080007fff8000", "0xa0680017fff8000", "0x9", @@ -577,7 +577,7 @@ "0x482480017ff88000", "0x3", "0x1104800180018000", - "0xdaf", + "0x10c1", "0x20680017fff7ffd", "0x8", "0x48127ffb7fff8000", @@ -618,7 +618,7 @@ "0x10780017fff7fff", "0x18", "0x1104800180018000", - "0xba2", + "0xeb4", "0x48127fee7fff8000", "0x48127fee7fff8000", "0x480a7ffb7fff8000", @@ -640,7 +640,7 @@ "0x482680017ffa8000", "0x1e96", "0x1104800180018000", - "0xb91", + "0xea3", "0x48127ff67fff8000", "0x48127ff67fff8000", "0x480a7ffb7fff8000", @@ -664,7 +664,7 @@ "0x480a7ffc7fff8000", "0x480a7ffd7fff8000", "0x1104800180018000", - "0xd88", + "0x109a", "0x20680017fff7ffc", "0x5b", "0x48307ffa80007ffb", @@ -673,7 +673,7 @@ "0x10780017fff7fff", "0xc", "0x1104800180018000", - "0xb66", + "0xe78", "0x48127ff07fff8000", "0x48127fd87fff8000", "0x480a7ffb7fff8000", @@ -683,9 +683,9 @@ "0x48127ffa7fff8000", "0x208b7fff7fff7ffe", "0x1104800180018000", - "0x1baf", + "0x270f", "0x482480017fff8000", - "0x1bae", + "0x270e", "0x480080007fff8000", "0xa0680017fff8000", "0x9", @@ -757,7 +757,7 @@ "0x10780017fff7fff", "0x10", "0x1104800180018000", - "0xb17", + "0xe29", "0x48127ff17fff8000", "0x48127fd97fff8000", "0x480a7ffb7fff8000", @@ -771,7 +771,7 @@ "0x482680017ffa8000", "0x1e96", "0x1104800180018000", - "0xb0e", + "0xe20", "0x48127ff67fff8000", "0x48127ff67fff8000", "0x480a7ffb7fff8000", @@ -804,7 +804,7 @@ "0x1", "0x480a7ffd7fff8000", "0x1104800180018000", - "0xd99", + "0x10ab", "0x20680017fff7ffd", "0xd", "0x48127ffa7fff8000", @@ -846,7 +846,7 @@ "0x10780017fff7fff", "0xc", "0x1104800180018000", - "0xab9", + "0xdcb", "0x48127ff07fff8000", "0x48127ff07fff8000", "0x480a7ffb7fff8000", @@ -856,9 +856,9 @@ "0x48127ffa7fff8000", "0x208b7fff7fff7ffe", "0x1104800180018000", - "0x1b02", + "0x2662", "0x482480017fff8000", - "0x1b01", + "0x2661", "0x480080007fff8000", "0xa0680017fff8000", "0x9", @@ -938,7 +938,7 @@ "0x482480017ffd8000", "0x1dce", "0x1104800180018000", - "0xa62", + "0xd74", "0x48127ff67fff8000", "0x48127ff67fff8000", "0x480a7ffb7fff8000", @@ -952,7 +952,7 @@ "0x482680017ffa8000", "0x1e96", "0x1104800180018000", - "0xa59", + "0xd6b", "0x48127ff67fff8000", "0x48127ff67fff8000", "0x480a7ffb7fff8000", @@ -976,7 +976,7 @@ "0x480a7ffc7fff8000", "0x480a7ffd7fff8000", "0x1104800180018000", - "0xd88", + "0x109a", "0x20680017fff7ffc", "0x49", "0x48307ffa80007ffb", @@ -985,7 +985,7 @@ "0x10780017fff7fff", "0xc", "0x1104800180018000", - "0xa2e", + "0xd40", "0x48127ff07fff8000", "0x48127fd67fff8000", "0x480a7ffb7fff8000", @@ -995,9 +995,9 @@ "0x48127ffa7fff8000", "0x208b7fff7fff7ffe", "0x1104800180018000", - "0x1a77", + "0x25d7", "0x482480017fff8000", - "0x1a76", + "0x25d6", "0x480080007fff8000", "0xa0680017fff8000", "0x9", @@ -1051,7 +1051,7 @@ "0x10780017fff7fff", "0x10", "0x1104800180018000", - "0x9f1", + "0xd03", "0x48127ff17fff8000", "0x48127fd77fff8000", "0x480a7ffb7fff8000", @@ -1065,7 +1065,150 @@ "0x482680017ffa8000", "0x1e96", "0x1104800180018000", - "0x9e8", + "0xcfa", + "0x48127ff67fff8000", + "0x48127ff67fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0xa0680017fff8000", + "0x7", + "0x482680017ffa8000", + "0xfffffffffffffffffffffffffffff042", + "0x400280007ff97fff", + "0x10780017fff7fff", + "0x7c", + "0x4825800180007ffa", + "0xfbe", + "0x400280007ff97fff", + "0x482680017ff98000", + "0x1", + "0x48127ffe7fff8000", + "0x480a7ffc7fff8000", + "0x480a7ffd7fff8000", + "0x1104800180018000", + "0x10c9", + "0x20680017fff7ff7", + "0x68", + "0x20680017fff7ffa", + "0x5c", + "0x48307ff880007ff9", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0xc", + "0x1104800180018000", + "0xccc", + "0x48127fec7fff8000", + "0x48127fec7fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0x1104800180018000", + "0x2563", + "0x482480017fff8000", + "0x2562", + "0x480080007fff8000", + "0xa0680017fff8000", + "0x9", + "0x4824800180007ff0", + "0xf82", + "0x482480017fff8000", + "0x100000000000000000000000000000000", + "0x400080007fed7fff", + "0x10780017fff7fff", + "0x3a", + "0x4824800180007ff0", + "0xf82", + "0x400080007fee7fff", + "0x40780017fff7fff", + "0x1", + "0x20680017fff7ff3", + "0x21", + "0x480680017fff8000", + "0x0", + "0x400080007ffe7fff", + "0x482480017fec8000", + "0x1", + "0x48127ffc7fff8000", + "0x48127ff17fff8000", + "0x48127ff17fff8000", + "0x48127ff17fff8000", + "0x48127ff17fff8000", + "0x48127ff87fff8000", + "0x482480017ff78000", + "0x1", + "0x1104800180018000", + "0x111c", + "0x20680017fff7ffd", + "0x8", + "0x48127ffb7fff8000", + "0x48127ffb7fff8000", + "0x48127ffc7fff8000", + "0x48127ffc7fff8000", + "0x10780017fff7fff", + "0x14", + "0x48127ffb7fff8000", + "0x48127ffb7fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0x480680017fff8000", + "0x1", + "0x400080007ffe7fff", + "0x482480017fec8000", + "0x1", + "0x482480017ffc8000", + "0x11da", + "0x48127ffc7fff8000", + "0x482480017ffb8000", + "0x1", + "0x48127ffc7fff8000", + "0x48127ffc7fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x0", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0x482480017fed8000", + "0x1", + "0x48127fed7fff8000", + "0x10780017fff7fff", + "0x18", + "0x1104800180018000", + "0xc7c", + "0x48127fed7fff8000", + "0x48127fed7fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0x48127ff57fff8000", + "0x48127ff57fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0x482680017ff98000", + "0x1", + "0x482680017ffa8000", + "0x1e96", + "0x1104800180018000", + "0xc6b", "0x48127ff67fff8000", "0x48127ff67fff8000", "0x480a7ffb7fff8000", @@ -1101,7 +1244,7 @@ "0x48127ffa7fff8000", "0x480280007ffc8000", "0x1104800180018000", - "0xdac", + "0x1176", "0x20680017fff7ffa", "0x52", "0x20680017fff7ffd", @@ -1112,7 +1255,7 @@ "0x10780017fff7fff", "0xc", "0x1104800180018000", - "0x9af", + "0xc32", "0x48127fef7fff8000", "0x48127fef7fff8000", "0x480a7ffb7fff8000", @@ -1122,9 +1265,9 @@ "0x48127ffa7fff8000", "0x208b7fff7fff7ffe", "0x1104800180018000", - "0x19f8", + "0x24c9", "0x482480017fff8000", - "0x19f7", + "0x24c8", "0x480080007fff8000", "0xa0680017fff8000", "0x9", @@ -1153,7 +1296,7 @@ "0x482480017ff98000", "0x1", "0x1104800180018000", - "0xe1d", + "0x11e7", "0x20680017fff7ffd", "0xb", "0x48127ffb7fff8000", @@ -1197,7 +1340,7 @@ "0x482480017ffd8000", "0x1dce", "0x1104800180018000", - "0x95f", + "0xbe2", "0x48127ff67fff8000", "0x48127ff67fff8000", "0x480a7ffb7fff8000", @@ -1211,7 +1354,7 @@ "0x482680017ffa8000", "0x1e96", "0x1104800180018000", - "0x956", + "0xbd9", "0x48127ff67fff8000", "0x48127ff67fff8000", "0x480a7ffb7fff8000", @@ -1226,7 +1369,7 @@ "0x100000000000000000000000000000000", "0x400280007ff97fff", "0x10780017fff7fff", - "0x91", + "0x7f", "0x4825800180007ffa", "0x0", "0x400280007ff97fff", @@ -1234,82 +1377,33 @@ "0x20680017fff7fff", "0x4", "0x10780017fff7fff", - "0x7b", - "0x480280007ffc8000", - "0x20680017fff7fff", - "0x36", - "0x482680017ffc8000", - "0x1", - "0x480a7ffd7fff8000", - "0x48307ffe80007fff", - "0x20680017fff7fff", - "0x4", - "0x10780017fff7fff", - "0x28", - "0x480080007ffd8000", - "0xa0680017fff8000", - "0x12", - "0x4824800180007ffe", - "0x10000", - "0x4844800180008002", - "0x8000000000000110000000000000000", - "0x4830800080017ffe", - "0x480280017ff97fff", - "0x482480017ffe8000", - "0xefffffffffffffde000000000000ffff", - "0x480280027ff97fff", - "0x400280037ff97ffb", - "0x402480017fff7ffb", - "0xffffffffffffffffffffffffffffffff", - "0x20680017fff7fff", - "0x11", - "0x402780017fff7fff", - "0x1", - "0x400280017ff97ffe", - "0x482480017ffe8000", - "0xffffffffffffffffffffffffffff0000", - "0x400280027ff97fff", - "0x482680017ff98000", - "0x3", - "0x482480017ff68000", - "0x120c", - "0x482480017ff88000", - "0x1", - "0x48127ff87fff8000", - "0x10780017fff7fff", - "0x19", - "0x482680017ff98000", - "0x4", - "0x482480017ff18000", - "0x1658", - "0x10780017fff7fff", - "0x4e", - "0x482680017ff98000", - "0x1", - "0x482480017ff98000", - "0x1b12", - "0x10780017fff7fff", - "0x48", - "0x4824800180007fff", + "0x69", + "0x40780017fff7fff", "0x1", - "0x20680017fff7fff", - "0x3a", "0x482680017ff98000", "0x1", - "0x482480017ffb8000", - "0x15b8", + "0x48127ffc7fff8000", "0x482680017ffc8000", "0x1", "0x480a7ffd7fff8000", - "0x48307ffe80007fff", + "0x48127ffb7fff8000", + "0x48127ffa7fff8000", + "0x480280007ffc8000", + "0x1104800180018000", + "0x11cc", + "0x20680017fff7ffa", + "0x52", + "0x20680017fff7ffd", + "0x4b", + "0x48307ffb80007ffc", "0x20680017fff7fff", "0x4", "0x10780017fff7fff", "0xc", "0x1104800180018000", - "0x8ec", - "0x48127ff37fff8000", - "0x48127ff37fff8000", + "0xba0", + "0x48127fef7fff8000", + "0x48127fef7fff8000", "0x480a7ffb7fff8000", "0x480680017fff8000", "0x1", @@ -1317,41 +1411,236 @@ "0x48127ffa7fff8000", "0x208b7fff7fff7ffe", "0x1104800180018000", - "0x1935", + "0x2437", "0x482480017fff8000", - "0x1934", + "0x2436", "0x480080007fff8000", "0xa0680017fff8000", "0x9", - "0x4824800180007ff7", + "0x4824800180007ff3", "0x0", "0x482480017fff8000", "0x100000000000000000000000000000000", - "0x400080007ff47fff", + "0x400080007ff07fff", "0x10780017fff7fff", - "0x11", - "0x4824800180007ff7", + "0x28", + "0x4824800180007ff3", "0x0", - "0x400080007ff57fff", + "0x400080007ff17fff", + "0x48307ff780007ff8", "0x40780017fff7fff", "0x1", - "0x482480017ff48000", + "0x4844800180007ffe", + "0x4", + "0x400080007ffe7fff", + "0x482480017fee8000", "0x1", - "0x482480017ffd8000", - "0x514", + "0x48127ffb7fff8000", + "0x48127ff27fff8000", + "0x48127ff27fff8000", + "0x48127ffa7fff8000", + "0x482480017ff98000", + "0x1", + "0x1104800180018000", + "0x11f7", + "0x20680017fff7ffd", + "0xb", + "0x48127ffb7fff8000", + "0x482480017ffb8000", + "0x44c", "0x480a7ffb7fff8000", "0x480680017fff8000", "0x0", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0x48127ffb7fff8000", "0x48127ffb7fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", "0x48127ffa7fff8000", "0x208b7fff7fff7ffe", - "0x482480017ff48000", + "0x482480017ff08000", "0x1", - "0x48127ff47fff8000", + "0x482480017ff08000", + "0xbae", "0x10780017fff7fff", - "0x1a", - "0x482680017ff98000", - "0x1", + "0x21", + "0x48127ff87fff8000", + "0x482480017ff88000", + "0x10a4", + "0x10780017fff7fff", + "0xe", + "0x48127ff87fff8000", + "0x48127ff87fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0x482680017ff98000", + "0x1", + "0x482480017ffd8000", + "0x1dce", + "0x1104800180018000", + "0xb50", + "0x48127ff67fff8000", + "0x48127ff67fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0x482680017ff98000", + "0x1", + "0x482680017ffa8000", + "0x1e96", + "0x1104800180018000", + "0xb47", + "0x48127ff67fff8000", + "0x48127ff67fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0xa0680017fff8000", + "0x7", + "0x482680017ffa8000", + "0x100000000000000000000000000000000", + "0x400280007ff97fff", + "0x10780017fff7fff", + "0x91", + "0x4825800180007ffa", + "0x0", + "0x400280007ff97fff", + "0x48297ffc80007ffd", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0x7b", + "0x480280007ffc8000", + "0x20680017fff7fff", + "0x36", + "0x482680017ffc8000", + "0x1", + "0x480a7ffd7fff8000", + "0x48307ffe80007fff", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0x28", + "0x480080007ffd8000", + "0xa0680017fff8000", + "0x12", + "0x4824800180007ffe", + "0x10000", + "0x4844800180008002", + "0x8000000000000110000000000000000", + "0x4830800080017ffe", + "0x480280017ff97fff", + "0x482480017ffe8000", + "0xefffffffffffffde000000000000ffff", + "0x480280027ff97fff", + "0x400280037ff97ffb", + "0x402480017fff7ffb", + "0xffffffffffffffffffffffffffffffff", + "0x20680017fff7fff", + "0x11", + "0x402780017fff7fff", + "0x1", + "0x400280017ff97ffe", + "0x482480017ffe8000", + "0xffffffffffffffffffffffffffff0000", + "0x400280027ff97fff", + "0x482680017ff98000", + "0x3", + "0x482480017ff68000", + "0x120c", + "0x482480017ff88000", + "0x1", + "0x48127ff87fff8000", + "0x10780017fff7fff", + "0x19", + "0x482680017ff98000", + "0x4", + "0x482480017ff18000", + "0x1658", + "0x10780017fff7fff", + "0x4e", + "0x482680017ff98000", + "0x1", + "0x482480017ff98000", + "0x1b12", + "0x10780017fff7fff", + "0x48", + "0x4824800180007fff", + "0x1", + "0x20680017fff7fff", + "0x3a", + "0x482680017ff98000", + "0x1", + "0x482480017ffb8000", + "0x15b8", + "0x482680017ffc8000", + "0x1", + "0x480a7ffd7fff8000", + "0x48307ffe80007fff", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0xc", + "0x1104800180018000", + "0xadd", + "0x48127ff37fff8000", + "0x48127ff37fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0x1104800180018000", + "0x2374", + "0x482480017fff8000", + "0x2373", + "0x480080007fff8000", + "0xa0680017fff8000", + "0x9", + "0x4824800180007ff7", + "0x0", + "0x482480017fff8000", + "0x100000000000000000000000000000000", + "0x400080007ff47fff", + "0x10780017fff7fff", + "0x11", + "0x4824800180007ff7", + "0x0", + "0x400080007ff57fff", + "0x40780017fff7fff", + "0x1", + "0x482480017ff48000", + "0x1", + "0x482480017ffd8000", + "0x514", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x0", + "0x48127ffb7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0x482480017ff48000", + "0x1", + "0x48127ff47fff8000", + "0x10780017fff7fff", + "0x1a", + "0x482680017ff98000", + "0x1", "0x482480017ffb8000", "0x1c3e", "0x10780017fff7fff", @@ -1361,7 +1650,7 @@ "0x482480017ffd8000", "0x1dce", "0x1104800180018000", - "0x8bb", + "0xaac", "0x48127ff67fff8000", "0x48127ff67fff8000", "0x480a7ffb7fff8000", @@ -1375,7 +1664,7 @@ "0x482680017ffa8000", "0x1e96", "0x1104800180018000", - "0x8b2", + "0xaa3", "0x48127ff67fff8000", "0x48127ff67fff8000", "0x480a7ffb7fff8000", @@ -1399,7 +1688,7 @@ "0x480a7ffc7fff8000", "0x480a7ffd7fff8000", "0x1104800180018000", - "0xbe1", + "0xdd2", "0x20680017fff7ffc", "0x49", "0x48307ffa80007ffb", @@ -1408,7 +1697,7 @@ "0x10780017fff7fff", "0xc", "0x1104800180018000", - "0x887", + "0xa78", "0x48127ff07fff8000", "0x48127fd67fff8000", "0x480a7ffb7fff8000", @@ -1418,9 +1707,9 @@ "0x48127ffa7fff8000", "0x208b7fff7fff7ffe", "0x1104800180018000", - "0x18d0", + "0x230f", "0x482480017fff8000", - "0x18cf", + "0x230e", "0x480080007fff8000", "0xa0680017fff8000", "0x9", @@ -1474,7 +1763,7 @@ "0x10780017fff7fff", "0x10", "0x1104800180018000", - "0x84a", + "0xa3b", "0x48127ff17fff8000", "0x48127fd77fff8000", "0x480a7ffb7fff8000", @@ -1488,7 +1777,7 @@ "0x482680017ffa8000", "0x1e96", "0x1104800180018000", - "0x841", + "0xa32", "0x48127ff67fff8000", "0x48127ff67fff8000", "0x480a7ffb7fff8000", @@ -1512,7 +1801,7 @@ "0x480a7ffc7fff8000", "0x480a7ffd7fff8000", "0x1104800180018000", - "0xad5", + "0xcc6", "0x20680017fff7ffd", "0x49", "0x48307ffb80007ffc", @@ -1521,7 +1810,7 @@ "0x10780017fff7fff", "0xc", "0x1104800180018000", - "0x816", + "0xa07", "0x48127ff17fff8000", "0x48127fdc7fff8000", "0x480a7ffb7fff8000", @@ -1531,9 +1820,9 @@ "0x48127ffa7fff8000", "0x208b7fff7fff7ffe", "0x1104800180018000", - "0x185f", + "0x229e", "0x482480017fff8000", - "0x185e", + "0x229d", "0x480080007fff8000", "0xa0680017fff8000", "0x9", @@ -1587,7 +1876,7 @@ "0x10780017fff7fff", "0x10", "0x1104800180018000", - "0x7d9", + "0x9ca", "0x48127ff27fff8000", "0x48127fdd7fff8000", "0x480a7ffb7fff8000", @@ -1601,7 +1890,7 @@ "0x482680017ffa8000", "0x1e96", "0x1104800180018000", - "0x7d0", + "0x9c1", "0x48127ff67fff8000", "0x48127ff67fff8000", "0x480a7ffb7fff8000", @@ -1626,7 +1915,7 @@ "0x480a7ffc7fff8000", "0x480a7ffd7fff8000", "0x1104800180018000", - "0xc87", + "0x1062", "0x20680017fff7ff9", "0x6a", "0x20680017fff7ffc", @@ -1637,7 +1926,7 @@ "0x10780017fff7fff", "0xc", "0x1104800180018000", - "0x7a2", + "0x993", "0x48127fee7fff8000", "0x48127fee7fff8000", "0x480a7ffb7fff8000", @@ -1647,9 +1936,9 @@ "0x48127ffa7fff8000", "0x208b7fff7fff7ffe", "0x1104800180018000", - "0x17eb", + "0x222a", "0x482480017fff8000", - "0x17ea", + "0x2229", "0x480080007fff8000", "0xa0680017fff8000", "0x9", @@ -1681,7 +1970,7 @@ "0x482480017ff88000", "0x2", "0x1104800180018000", - "0x812", + "0xa03", "0x10780017fff7fff", "0x12", "0x480680017fff8000", @@ -1699,7 +1988,7 @@ "0x482480017ff88000", "0x2", "0x1104800180018000", - "0xcfd", + "0x10d8", "0x20680017fff7ffd", "0xa", "0x48127ffb7fff8000", @@ -1724,7 +2013,7 @@ "0x10780017fff7fff", "0x18", "0x1104800180018000", - "0x750", + "0x941", "0x48127fef7fff8000", "0x48127fef7fff8000", "0x480a7ffb7fff8000", @@ -1746,7 +2035,7 @@ "0x482680017ffa8000", "0x1e96", "0x1104800180018000", - "0x73f", + "0x930", "0x48127ff67fff8000", "0x48127ff67fff8000", "0x480a7ffb7fff8000", @@ -1770,7 +2059,7 @@ "0x480a7ffc7fff8000", "0x480a7ffd7fff8000", "0x1104800180018000", - "0xce6", + "0x10c1", "0x20680017fff7ffb", "0x4b", "0x48307ff980007ffa", @@ -1779,7 +2068,7 @@ "0x10780017fff7fff", "0xc", "0x1104800180018000", - "0x714", + "0x905", "0x48127fef7fff8000", "0x48127fc37fff8000", "0x480a7ffb7fff8000", @@ -1789,9 +2078,9 @@ "0x48127ffa7fff8000", "0x208b7fff7fff7ffe", "0x1104800180018000", - "0x175d", + "0x219c", "0x482480017fff8000", - "0x175c", + "0x219b", "0x480080007fff8000", "0xa0680017fff8000", "0x9", @@ -1847,7 +2136,7 @@ "0x10780017fff7fff", "0x10", "0x1104800180018000", - "0x6d5", + "0x8c6", "0x48127ff07fff8000", "0x48127fc47fff8000", "0x480a7ffb7fff8000", @@ -1861,7 +2150,7 @@ "0x482680017ffa8000", "0x1e96", "0x1104800180018000", - "0x6cc", + "0x8bd", "0x48127ff67fff8000", "0x48127ff67fff8000", "0x480a7ffb7fff8000", @@ -1886,7 +2175,7 @@ "0x480a7ffc7fff8000", "0x480a7ffd7fff8000", "0x1104800180018000", - "0xd2d", + "0x1108", "0x20680017fff7ff8", "0x6c", "0x20680017fff7ffb", @@ -1897,7 +2186,7 @@ "0x10780017fff7fff", "0xc", "0x1104800180018000", - "0x69e", + "0x88f", "0x48127fed7fff8000", "0x48127fed7fff8000", "0x480a7ffb7fff8000", @@ -1907,9 +2196,9 @@ "0x48127ffa7fff8000", "0x208b7fff7fff7ffe", "0x1104800180018000", - "0x16e7", + "0x2126", "0x482480017fff8000", - "0x16e6", + "0x2125", "0x480080007fff8000", "0xa0680017fff8000", "0x9", @@ -1942,7 +2231,7 @@ "0x482480017ff88000", "0x3", "0x1104800180018000", - "0x85a", + "0xa4b", "0x10780017fff7fff", "0x13", "0x480680017fff8000", @@ -1961,7 +2250,7 @@ "0x482480017ff88000", "0x3", "0x1104800180018000", - "0xbf7", + "0xfd2", "0x20680017fff7ffd", "0xa", "0x48127ffb7fff8000", @@ -1986,7 +2275,7 @@ "0x10780017fff7fff", "0x18", "0x1104800180018000", - "0x64a", + "0x83b", "0x48127fee7fff8000", "0x48127fee7fff8000", "0x480a7ffb7fff8000", @@ -2008,7 +2297,7 @@ "0x482680017ffa8000", "0x1e96", "0x1104800180018000", - "0x639", + "0x82a", "0x48127ff67fff8000", "0x48127ff67fff8000", "0x480a7ffb7fff8000", @@ -2032,7 +2321,7 @@ "0x480a7ffc7fff8000", "0x480a7ffd7fff8000", "0x1104800180018000", - "0xd3e", + "0x1119", "0x20680017fff7ffc", "0x5b", "0x48307ffa80007ffb", @@ -2041,7 +2330,7 @@ "0x10780017fff7fff", "0xc", "0x1104800180018000", - "0x60e", + "0x7ff", "0x48127ff07fff8000", "0x48127fcc7fff8000", "0x480a7ffb7fff8000", @@ -2051,9 +2340,9 @@ "0x48127ffa7fff8000", "0x208b7fff7fff7ffe", "0x1104800180018000", - "0x1657", + "0x2096", "0x482480017fff8000", - "0x1656", + "0x2095", "0x480080007fff8000", "0xa0680017fff8000", "0x9", @@ -2125,7 +2414,7 @@ "0x10780017fff7fff", "0x10", "0x1104800180018000", - "0x5bf", + "0x7b0", "0x48127ff17fff8000", "0x48127fcd7fff8000", "0x480a7ffb7fff8000", @@ -2139,7 +2428,7 @@ "0x482680017ffa8000", "0x1e96", "0x1104800180018000", - "0x5b6", + "0x7a7", "0x48127ff67fff8000", "0x48127ff67fff8000", "0x480a7ffb7fff8000", @@ -2163,7 +2452,7 @@ "0x480a7ffc7fff8000", "0x480a7ffd7fff8000", "0x1104800180018000", - "0xd3e", + "0x1119", "0x20680017fff7ffc", "0x5a", "0x48307ffa80007ffb", @@ -2172,7 +2461,7 @@ "0x10780017fff7fff", "0xc", "0x1104800180018000", - "0x58b", + "0x77c", "0x48127ff07fff8000", "0x48127fd77fff8000", "0x480a7ffb7fff8000", @@ -2182,9 +2471,9 @@ "0x48127ffa7fff8000", "0x208b7fff7fff7ffe", "0x1104800180018000", - "0x15d4", + "0x2013", "0x482480017fff8000", - "0x15d3", + "0x2012", "0x480080007fff8000", "0xa0680017fff8000", "0x9", @@ -2255,7 +2544,7 @@ "0x10780017fff7fff", "0x10", "0x1104800180018000", - "0x53d", + "0x72e", "0x48127ff17fff8000", "0x48127fd87fff8000", "0x480a7ffb7fff8000", @@ -2269,7 +2558,7 @@ "0x482680017ffa8000", "0x1e96", "0x1104800180018000", - "0x534", + "0x725", "0x48127ff67fff8000", "0x48127ff67fff8000", "0x480a7ffb7fff8000", @@ -2293,7 +2582,7 @@ "0x480a7ffc7fff8000", "0x480a7ffd7fff8000", "0x1104800180018000", - "0xd8a", + "0x1165", "0x20680017fff7ffc", "0x4a", "0x48307ffa80007ffb", @@ -2302,7 +2591,7 @@ "0x10780017fff7fff", "0xc", "0x1104800180018000", - "0x509", + "0x6fa", "0x48127ff07fff8000", "0x48127fd57fff8000", "0x480a7ffb7fff8000", @@ -2312,9 +2601,9 @@ "0x48127ffa7fff8000", "0x208b7fff7fff7ffe", "0x1104800180018000", - "0x1552", + "0x1f91", "0x482480017fff8000", - "0x1551", + "0x1f90", "0x480080007fff8000", "0xa0680017fff8000", "0x9", @@ -2369,7 +2658,7 @@ "0x10780017fff7fff", "0x10", "0x1104800180018000", - "0x4cb", + "0x6bc", "0x48127ff17fff8000", "0x48127fd67fff8000", "0x480a7ffb7fff8000", @@ -2383,7 +2672,7 @@ "0x482680017ffa8000", "0x1e96", "0x1104800180018000", - "0x4c2", + "0x6b3", "0x48127ff67fff8000", "0x48127ff67fff8000", "0x480a7ffb7fff8000", @@ -2395,30 +2684,33 @@ "0xa0680017fff8000", "0x7", "0x482680017ffa8000", - "0x100000000000000000000000000000000", + "0xffffffffffffffffffffffffffffef7a", "0x400280007ff97fff", "0x10780017fff7fff", - "0x49", + "0x7d", "0x4825800180007ffa", - "0x0", + "0x1086", "0x400280007ff97fff", "0x482680017ff98000", "0x1", + "0x48127ffe7fff8000", "0x480a7ffc7fff8000", "0x480a7ffd7fff8000", "0x1104800180018000", - "0x756", - "0x20680017fff7ffd", - "0x34", - "0x48307ffb80007ffc", + "0x11c4", + "0x20680017fff7ff7", + "0x69", + "0x20680017fff7ffa", + "0x5d", + "0x48307ff880007ff9", "0x20680017fff7fff", "0x4", "0x10780017fff7fff", "0xc", "0x1104800180018000", - "0x497", - "0x48127ff17fff8000", - "0x48127fdc7fff8000", + "0x685", + "0x48127fec7fff8000", + "0x48127fec7fff8000", "0x480a7ffb7fff8000", "0x480680017fff8000", "0x1", @@ -2426,58 +2718,199 @@ "0x48127ffa7fff8000", "0x208b7fff7fff7ffe", "0x1104800180018000", - "0x14e0", + "0x1f1c", "0x482480017fff8000", - "0x14df", + "0x1f1b", "0x480080007fff8000", "0xa0680017fff8000", "0x9", - "0x4824800180007fe0", - "0x0", + "0x4824800180007ff0", + "0xf1e", "0x482480017fff8000", "0x100000000000000000000000000000000", - "0x400080007ff27fff", + "0x400080007fed7fff", "0x10780017fff7fff", - "0x11", - "0x4824800180007fe0", - "0x0", - "0x400080007ff37fff", + "0x3b", + "0x4824800180007ff0", + "0xf1e", + "0x400080007fee7fff", "0x40780017fff7fff", "0x1", - "0x482480017ff28000", - "0x1", - "0x482480017ffd8000", - "0x109a", - "0x480a7ffb7fff8000", + "0x20680017fff7ff3", + "0xf", "0x480680017fff8000", "0x0", - "0x48127ffb7fff8000", - "0x48127ffa7fff8000", - "0x208b7fff7fff7ffe", - "0x482480017ff28000", + "0x400080007ffe7fff", + "0x400080017ffe7ff6", + "0x482480017fec8000", "0x1", - "0x482480017fdd8000", - "0xb86", + "0x482480017ffc8000", + "0x10ae", + "0x48127ffc7fff8000", + "0x482480017ffb8000", + "0x2", "0x10780017fff7fff", - "0x10", + "0x17", + "0x480680017fff8000", + "0x1", + "0x400080007ffe7fff", + "0x482480017fec8000", + "0x1", + "0x48127ffc7fff8000", + "0x48127ff17fff8000", + "0x48127ff17fff8000", + "0x48127ff17fff8000", + "0x48127ff17fff8000", + "0x48127ff87fff8000", + "0x482480017ff78000", + "0x1", "0x1104800180018000", - "0x46f", - "0x48127ff27fff8000", - "0x48127fdd7fff8000", + "0xac8", + "0x20680017fff7ffd", + "0xe", + "0x48127ffb7fff8000", + "0x48127ffb7fff8000", + "0x48127ffc7fff8000", + "0x48127ffc7fff8000", + "0x48127ffc7fff8000", + "0x48127ffc7fff8000", "0x480a7ffb7fff8000", "0x480680017fff8000", - "0x1", + "0x0", "0x48127ffa7fff8000", "0x48127ffa7fff8000", "0x208b7fff7fff7ffe", - "0x482680017ff98000", - "0x1", - "0x482680017ffa8000", - "0x1e96", - "0x1104800180018000", - "0x466", - "0x48127ff67fff8000", - "0x48127ff67fff8000", + "0x48127ffb7fff8000", + "0x48127ffb7fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0x482480017fed8000", + "0x1", + "0x48127fed7fff8000", + "0x10780017fff7fff", + "0x18", + "0x1104800180018000", + "0x634", + "0x48127fed7fff8000", + "0x48127fed7fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0x48127ff57fff8000", + "0x48127ff57fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0x482680017ff98000", + "0x1", + "0x482680017ffa8000", + "0x1e96", + "0x1104800180018000", + "0x623", + "0x48127ff67fff8000", + "0x48127ff67fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0xa0680017fff8000", + "0x7", + "0x482680017ffa8000", + "0x100000000000000000000000000000000", + "0x400280007ff97fff", + "0x10780017fff7fff", + "0x49", + "0x4825800180007ffa", + "0x0", + "0x400280007ff97fff", + "0x482680017ff98000", + "0x1", + "0x480a7ffc7fff8000", + "0x480a7ffd7fff8000", + "0x1104800180018000", + "0x8b7", + "0x20680017fff7ffd", + "0x34", + "0x48307ffb80007ffc", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0xc", + "0x1104800180018000", + "0x5f8", + "0x48127ff17fff8000", + "0x48127fdc7fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0x1104800180018000", + "0x1e8f", + "0x482480017fff8000", + "0x1e8e", + "0x480080007fff8000", + "0xa0680017fff8000", + "0x9", + "0x4824800180007fe0", + "0x0", + "0x482480017fff8000", + "0x100000000000000000000000000000000", + "0x400080007ff27fff", + "0x10780017fff7fff", + "0x11", + "0x4824800180007fe0", + "0x0", + "0x400080007ff37fff", + "0x40780017fff7fff", + "0x1", + "0x482480017ff28000", + "0x1", + "0x482480017ffd8000", + "0x109a", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x0", + "0x48127ffb7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0x482480017ff28000", + "0x1", + "0x482480017fdd8000", + "0xb86", + "0x10780017fff7fff", + "0x10", + "0x1104800180018000", + "0x5d0", + "0x48127ff27fff8000", + "0x48127fdd7fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0x482680017ff98000", + "0x1", + "0x482680017ffa8000", + "0x1e96", + "0x1104800180018000", + "0x5c7", + "0x48127ff67fff8000", + "0x48127ff67fff8000", "0x480a7ffb7fff8000", "0x480680017fff8000", "0x1", @@ -2562,7 +2995,7 @@ "0x10780017fff7fff", "0xd", "0x1104800180018000", - "0x405", + "0x566", "0x482680017ff98000", "0x5", "0x48127fe97fff8000", @@ -2573,9 +3006,9 @@ "0x48127ffa7fff8000", "0x208b7fff7fff7ffe", "0x1104800180018000", - "0x144d", + "0x1dfc", "0x482480017fff8000", - "0x144c", + "0x1dfb", "0x480080007fff8000", "0xa0680017fff8000", "0x9", @@ -2635,7 +3068,7 @@ "0x482480017ffd8000", "0x1dce", "0x1104800180018000", - "0x3c1", + "0x522", "0x48127ff67fff8000", "0x48127ff67fff8000", "0x480a7ffb7fff8000", @@ -2649,7 +3082,7 @@ "0x482680017ffa8000", "0x1e96", "0x1104800180018000", - "0x3b8", + "0x519", "0x48127ff67fff8000", "0x48127ff67fff8000", "0x480a7ffb7fff8000", @@ -2673,7 +3106,7 @@ "0x480a7ffc7fff8000", "0x480a7ffd7fff8000", "0x1104800180018000", - "0xce0", + "0x10e8", "0x20680017fff7ffc", "0x38", "0x48307ffa80007ffb", @@ -2682,7 +3115,7 @@ "0x10780017fff7fff", "0xc", "0x1104800180018000", - "0x38d", + "0x4ee", "0x48127ff07fff8000", "0x48127fd47fff8000", "0x480a7ffb7fff8000", @@ -2692,9 +3125,9 @@ "0x48127ffa7fff8000", "0x208b7fff7fff7ffe", "0x1104800180018000", - "0x13d6", + "0x1d85", "0x482480017fff8000", - "0x13d5", + "0x1d84", "0x480080007fff8000", "0xa0680017fff8000", "0x9", @@ -2731,7 +3164,7 @@ "0x10780017fff7fff", "0x10", "0x1104800180018000", - "0x361", + "0x4c2", "0x48127ff17fff8000", "0x48127fd57fff8000", "0x480a7ffb7fff8000", @@ -2745,7 +3178,7 @@ "0x482680017ffa8000", "0x1e96", "0x1104800180018000", - "0x358", + "0x4b9", "0x48127ff67fff8000", "0x48127ff67fff8000", "0x480a7ffb7fff8000", @@ -2770,7 +3203,7 @@ "0x10780017fff7fff", "0xd", "0x1104800180018000", - "0x335", + "0x496", "0x482680017ff98000", "0x1", "0x48127ff57fff8000", @@ -2781,9 +3214,9 @@ "0x48127ffa7fff8000", "0x208b7fff7fff7ffe", "0x1104800180018000", - "0x137d", + "0x1d2c", "0x482480017fff8000", - "0x137c", + "0x1d2b", "0x480080007fff8000", "0xa0680017fff8000", "0x9", @@ -2820,7 +3253,7 @@ "0x482680017ffa8000", "0x1e96", "0x1104800180018000", - "0x30d", + "0x46e", "0x48127ff67fff8000", "0x48127ff67fff8000", "0x480a7ffb7fff8000", @@ -2844,7 +3277,7 @@ "0x480a7ffc7fff8000", "0x480a7ffd7fff8000", "0x1104800180018000", - "0xcd3", + "0x10db", "0x20680017fff7ffa", "0x39", "0x48307ff880007ff9", @@ -2853,7 +3286,7 @@ "0x10780017fff7fff", "0xc", "0x1104800180018000", - "0x2e2", + "0x443", "0x48127fee7fff8000", "0x48127fbc7fff8000", "0x480a7ffb7fff8000", @@ -2863,9 +3296,9 @@ "0x48127ffa7fff8000", "0x208b7fff7fff7ffe", "0x1104800180018000", - "0x132b", + "0x1cda", "0x482480017fff8000", - "0x132a", + "0x1cd9", "0x480080007fff8000", "0xa0680017fff8000", "0x9", @@ -2903,7 +3336,7 @@ "0x10780017fff7fff", "0x10", "0x1104800180018000", - "0x2b5", + "0x416", "0x48127fef7fff8000", "0x48127fbd7fff8000", "0x480a7ffb7fff8000", @@ -2917,7 +3350,7 @@ "0x482680017ffa8000", "0x1e96", "0x1104800180018000", - "0x2ac", + "0x40d", "0x48127ff67fff8000", "0x48127ff67fff8000", "0x480a7ffb7fff8000", @@ -2942,7 +3375,7 @@ "0x480a7ffc7fff8000", "0x480a7ffd7fff8000", "0x1104800180018000", - "0xcf1", + "0x10f9", "0x20680017fff7ff9", "0x54", "0x20680017fff7ffc", @@ -2953,7 +3386,7 @@ "0x10780017fff7fff", "0xc", "0x1104800180018000", - "0x27e", + "0x3df", "0x48127fee7fff8000", "0x48127fee7fff8000", "0x480a7ffb7fff8000", @@ -2963,9 +3396,9 @@ "0x48127ffa7fff8000", "0x208b7fff7fff7ffe", "0x1104800180018000", - "0x12c7", + "0x1c76", "0x482480017fff8000", - "0x12c6", + "0x1c75", "0x480080007fff8000", "0xa0680017fff8000", "0x9", @@ -2993,7 +3426,7 @@ "0x482480017ff98000", "0x2", "0x1104800180018000", - "0x43f", + "0x5a0", "0x20680017fff7ffd", "0xa", "0x48127ffb7fff8000", @@ -3018,7 +3451,7 @@ "0x10780017fff7fff", "0x18", "0x1104800180018000", - "0x242", + "0x3a3", "0x48127fef7fff8000", "0x48127fef7fff8000", "0x480a7ffb7fff8000", @@ -3040,7 +3473,7 @@ "0x482680017ffa8000", "0x1e96", "0x1104800180018000", - "0x231", + "0x392", "0x48127ff67fff8000", "0x48127ff67fff8000", "0x480a7ffb7fff8000", @@ -3064,7 +3497,7 @@ "0x480a7ffc7fff8000", "0x480a7ffd7fff8000", "0x1104800180018000", - "0xd02", + "0x110a", "0x20680017fff7ffa", "0x39", "0x48307ff880007ff9", @@ -3073,7 +3506,7 @@ "0x10780017fff7fff", "0xc", "0x1104800180018000", - "0x206", + "0x367", "0x48127fee7fff8000", "0x48127fbc7fff8000", "0x480a7ffb7fff8000", @@ -3083,9 +3516,9 @@ "0x48127ffa7fff8000", "0x208b7fff7fff7ffe", "0x1104800180018000", - "0x124f", + "0x1bfe", "0x482480017fff8000", - "0x124e", + "0x1bfd", "0x480080007fff8000", "0xa0680017fff8000", "0x9", @@ -3123,7 +3556,7 @@ "0x10780017fff7fff", "0x10", "0x1104800180018000", - "0x1d9", + "0x33a", "0x48127fef7fff8000", "0x48127fbd7fff8000", "0x480a7ffb7fff8000", @@ -3137,7 +3570,7 @@ "0x482680017ffa8000", "0x1e96", "0x1104800180018000", - "0x1d0", + "0x331", "0x48127ff67fff8000", "0x48127ff67fff8000", "0x480a7ffb7fff8000", @@ -3161,7 +3594,7 @@ "0x480a7ffc7fff8000", "0x480a7ffd7fff8000", "0x1104800180018000", - "0xd21", + "0x1129", "0x20680017fff7ffc", "0x49", "0x48307ffa80007ffb", @@ -3170,7 +3603,7 @@ "0x10780017fff7fff", "0xc", "0x1104800180018000", - "0x1a5", + "0x306", "0x48127ff07fff8000", "0x48127fd67fff8000", "0x480a7ffb7fff8000", @@ -3180,9 +3613,9 @@ "0x48127ffa7fff8000", "0x208b7fff7fff7ffe", "0x1104800180018000", - "0x11ee", + "0x1b9d", "0x482480017fff8000", - "0x11ed", + "0x1b9c", "0x480080007fff8000", "0xa0680017fff8000", "0x9", @@ -3236,7 +3669,7 @@ "0x10780017fff7fff", "0x10", "0x1104800180018000", - "0x168", + "0x2c9", "0x48127ff17fff8000", "0x48127fd77fff8000", "0x480a7ffb7fff8000", @@ -3250,7 +3683,7 @@ "0x482680017ffa8000", "0x1e96", "0x1104800180018000", - "0x15f", + "0x2c0", "0x48127ff67fff8000", "0x48127ff67fff8000", "0x480a7ffb7fff8000", @@ -3304,7 +3737,7 @@ "0x1", "0x480a7ffd7fff8000", "0x1104800180018000", - "0xd2e", + "0x1136", "0x20680017fff7ffd", "0x4d", "0x48307ffb80007ffc", @@ -3313,7 +3746,7 @@ "0x10780017fff7fff", "0xc", "0x1104800180018000", - "0x116", + "0x277", "0x48127ff17fff8000", "0x48127fd97fff8000", "0x480a7ffb7fff8000", @@ -3323,9 +3756,9 @@ "0x48127ffa7fff8000", "0x208b7fff7fff7ffe", "0x1104800180018000", - "0x115f", + "0x1b0e", "0x482480017fff8000", - "0x115e", + "0x1b0d", "0x480080007fff8000", "0xa0680017fff8000", "0x9", @@ -3398,7 +3831,7 @@ "0x482480017ffd8000", "0x1dce", "0x1104800180018000", - "0xc6", + "0x227", "0x48127ff67fff8000", "0x48127ff67fff8000", "0x480a7ffb7fff8000", @@ -3412,7 +3845,137 @@ "0x482680017ffa8000", "0x1e96", "0x1104800180018000", - "0xbd", + "0x21e", + "0x48127ff67fff8000", + "0x48127ff67fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0x40780017fff7fff", + "0x5", + "0xa0680017fff8000", + "0x7", + "0x482680017ffa8000", + "0xffffffffffffffffffffffffffffe804", + "0x400280007ff97fff", + "0x10780017fff7fff", + "0x6d", + "0x4825800180007ffa", + "0x17fc", + "0x400280007ff97fff", + "0x482680017ff98000", + "0x1", + "0x48127ffe7fff8000", + "0x480a7ffc7fff8000", + "0x480a7ffd7fff8000", + "0x1104800180018000", + "0x114a", + "0x20680017fff7ff7", + "0x59", + "0x20680017fff7ffa", + "0x4d", + "0x40137ffb7fff8000", + "0x40137ffc7fff8001", + "0x40137ffd7fff8002", + "0x40137ffe7fff8003", + "0x40137fff7fff8004", + "0x48307ff880007ff9", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0xc", + "0x1104800180018000", + "0x1e9", + "0x48127fec7fff8000", + "0x48127fec7fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0x1104800180018000", + "0x1a80", + "0x482480017fff8000", + "0x1a7f", + "0x480080007fff8000", + "0xa0680017fff8000", + "0x9", + "0x4824800180007ff0", + "0xcc6", + "0x482480017fff8000", + "0x100000000000000000000000000000000", + "0x400080007fed7fff", + "0x10780017fff7fff", + "0x26", + "0x4824800180007ff0", + "0xcc6", + "0x400080007fee7fff", + "0x40780017fff7fff", + "0x1", + "0x482480017fed8000", + "0x1", + "0x48127ffd7fff8000", + "0x480a80007fff8000", + "0x480a80017fff8000", + "0x480a80027fff8000", + "0x480a80037fff8000", + "0x48127ff97fff8000", + "0x48127ff87fff8000", + "0x1104800180018000", + "0x63f", + "0x20680017fff7ffd", + "0xc", + "0x400180007fff8004", + "0x48127ffb7fff8000", + "0x48127ffb7fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x0", + "0x48127ffa7fff8000", + "0x482480017ffa8000", + "0x1", + "0x208b7fff7fff7ffe", + "0x48127ffb7fff8000", + "0x48127ffb7fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0x482480017fed8000", + "0x1", + "0x48127fed7fff8000", + "0x10780017fff7fff", + "0x18", + "0x1104800180018000", + "0x1ad", + "0x48127fed7fff8000", + "0x48127fed7fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0x48127ff57fff8000", + "0x48127ff57fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0x482680017ff98000", + "0x1", + "0x482680017ffa8000", + "0x1e00", + "0x1104800180018000", + "0x19c", "0x48127ff67fff8000", "0x48127ff67fff8000", "0x480a7ffb7fff8000", @@ -3499,7 +4062,7 @@ "0x10780017fff7fff", "0xd", "0x1104800180018000", - "0x5c", + "0x13b", "0x482680017ff98000", "0x5", "0x48127fe97fff8000", @@ -3510,9 +4073,9 @@ "0x48127ffa7fff8000", "0x208b7fff7fff7ffe", "0x1104800180018000", - "0x10a4", + "0x19d1", "0x482480017fff8000", - "0x10a3", + "0x19d0", "0x480080007fff8000", "0xa0680017fff8000", "0x9", @@ -3567,7 +4130,7 @@ "0x482480017ffd8000", "0x1dce", "0x1104800180018000", - "0x1d", + "0xfc", "0x48127ff67fff8000", "0x48127ff67fff8000", "0x480a7ffb7fff8000", @@ -3581,7 +4144,7 @@ "0x482680017ffa8000", "0x1e96", "0x1104800180018000", - "0x14", + "0xf3", "0x48127ff67fff8000", "0x48127ff67fff8000", "0x480a7ffb7fff8000", @@ -3590,27 +4153,250 @@ "0x48127ffa7fff8000", "0x48127ffa7fff8000", "0x208b7fff7fff7ffe", - "0x480680017fff8000", - "0x496e70757420746f6f206c6f6e6720666f7220617267756d656e7473", - "0x1104800180018000", - "0xca8", - "0x208b7fff7fff7ffe", - "0x480680017fff8000", - "0x4661696c656420746f20646573657269616c697a6520706172616d202331", - "0x1104800180018000", - "0xca3", - "0x208b7fff7fff7ffe", - "0x480680017fff8000", - "0x4f7574206f6620676173", - "0x1104800180018000", - "0xc9e", - "0x208b7fff7fff7ffe", - "0x48297ffc80007ffd", - "0x20680017fff7fff", - "0x4", + "0xa0680017fff8000", + "0x7", + "0x482680017ffa8000", + "0xfffffffffffffffffffffffffffff93e", + "0x400280007ff97fff", "0x10780017fff7fff", - "0x7a", - "0x480280007ffc8000", + "0x66", + "0x4825800180007ffa", + "0x6c2", + "0x400280007ff97fff", + "0x482680017ff98000", + "0x1", + "0x48127ffe7fff8000", + "0x480a7ffc7fff8000", + "0x480a7ffd7fff8000", + "0x1104800180018000", + "0x109f", + "0x20680017fff7ff8", + "0x52", + "0x20680017fff7ffb", + "0x46", + "0x48307ff980007ffa", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0xc", + "0x1104800180018000", + "0xc5", + "0x48127fed7fff8000", + "0x48127fed7fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0x1104800180018000", + "0x195c", + "0x482480017fff8000", + "0x195b", + "0x480080007fff8000", + "0xa0680017fff8000", + "0x9", + "0x4824800180007ff1", + "0xc62", + "0x482480017fff8000", + "0x100000000000000000000000000000000", + "0x400080007fee7fff", + "0x10780017fff7fff", + "0x24", + "0x4824800180007ff1", + "0xc62", + "0x400080007fef7fff", + "0x40780017fff7fff", + "0x1", + "0x482480017fee8000", + "0x1", + "0x48127ffd7fff8000", + "0x48127ff27fff8000", + "0x48127ff27fff8000", + "0x48127ff27fff8000", + "0x48127ff27fff8000", + "0x48127ff97fff8000", + "0x48127ff87fff8000", + "0x1104800180018000", + "0x51b", + "0x20680017fff7ffd", + "0xa", + "0x48127ffb7fff8000", + "0x48127ffb7fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x0", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0x48127ffb7fff8000", + "0x48127ffb7fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0x482480017fee8000", + "0x1", + "0x48127fee7fff8000", + "0x10780017fff7fff", + "0x18", + "0x1104800180018000", + "0x8b", + "0x48127fee7fff8000", + "0x48127fee7fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0x48127ff67fff8000", + "0x48127ff67fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0x482680017ff98000", + "0x1", + "0x482680017ffa8000", + "0x1e96", + "0x1104800180018000", + "0x7a", + "0x48127ff67fff8000", + "0x48127ff67fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0xa0680017fff8000", + "0x7", + "0x482680017ffa8000", + "0xfffffffffffffffffffffffffffff93e", + "0x400280007ff97fff", + "0x10780017fff7fff", + "0x53", + "0x4825800180007ffa", + "0x6c2", + "0x400280007ff97fff", + "0x482680017ff98000", + "0x1", + "0x48127ffe7fff8000", + "0x480a7ffc7fff8000", + "0x480a7ffd7fff8000", + "0x1104800180018000", + "0x1026", + "0x20680017fff7ff8", + "0x3f", + "0x20680017fff7ffb", + "0x33", + "0x48307ff980007ffa", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0xc", + "0x1104800180018000", + "0x4c", + "0x48127fed7fff8000", + "0x48127fed7fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0x1104800180018000", + "0x18e3", + "0x482480017fff8000", + "0x18e2", + "0x480080007fff8000", + "0xa0680017fff8000", + "0x9", + "0x4824800180007ff1", + "0x0", + "0x482480017fff8000", + "0x100000000000000000000000000000000", + "0x400080007fee7fff", + "0x10780017fff7fff", + "0x11", + "0x4824800180007ff1", + "0x0", + "0x400080007fef7fff", + "0x40780017fff7fff", + "0x1", + "0x482480017fee8000", + "0x1", + "0x482480017ffd8000", + "0x514", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x0", + "0x48127ffb7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0x482480017fee8000", + "0x1", + "0x48127fee7fff8000", + "0x10780017fff7fff", + "0x18", + "0x1104800180018000", + "0x25", + "0x48127fee7fff8000", + "0x48127fee7fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0x48127ff67fff8000", + "0x48127ff67fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0x482680017ff98000", + "0x1", + "0x482680017ffa8000", + "0x1e96", + "0x1104800180018000", + "0x14", + "0x48127ff67fff8000", + "0x48127ff67fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0x480680017fff8000", + "0x496e70757420746f6f206c6f6e6720666f7220617267756d656e7473", + "0x1104800180018000", + "0x12d0", + "0x208b7fff7fff7ffe", + "0x480680017fff8000", + "0x4661696c656420746f20646573657269616c697a6520706172616d202331", + "0x1104800180018000", + "0x12cb", + "0x208b7fff7fff7ffe", + "0x480680017fff8000", + "0x4f7574206f6620676173", + "0x1104800180018000", + "0x12c6", + "0x208b7fff7fff7ffe", + "0x48297ffc80007ffd", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0x7a", + "0x480280007ffc8000", "0x20680017fff7fff", "0x51", "0x482680017ffc8000", @@ -3632,7 +4418,7 @@ "0x48127ffa7fff8000", "0x480080007ff68000", "0x1104800180018000", - "0xc88", + "0x12b0", "0x20680017fff7ffa", "0x18", "0x20680017fff7ffd", @@ -3966,7 +4752,7 @@ "0x1", "0x480a7ffd7fff8000", "0x1104800180018000", - "0xbaa", + "0x11d2", "0x20680017fff7ff9", "0x23", "0x20680017fff7ffc", @@ -4600,160 +5386,61 @@ "0x480680017fff8000", "0x0", "0x208b7fff7fff7ffe", - "0xa0680017fff8000", - "0x7", - "0x482680017ff88000", - "0xfffffffffffffffffffffffffffff182", - "0x400280007ff77fff", - "0x10780017fff7fff", - "0x90", - "0x4825800180007ff8", - "0xe7e", - "0x400280007ff77fff", - "0x20780017fff7ffd", - "0xf", - "0x482680017ff78000", - "0x1", - "0x482480017ffe8000", - "0x1202", - "0x480680017fff8000", - "0x0", - "0x480a7ff97fff8000", - "0x480a7ffa7fff8000", - "0x480680017fff8000", - "0x0", - "0x480a7ffb7fff8000", - "0x480a7ffc7fff8000", - "0x208b7fff7fff7ffe", - "0x48297ff980007ffa", + "0x48297ffc80007ffd", "0x20680017fff7fff", "0x4", "0x10780017fff7fff", - "0x66", - "0x480280007ff98000", + "0x73", + "0x480280007ffc8000", "0x20680017fff7fff", - "0x3d", - "0x482680017ff98000", - "0x1", + "0x42", "0x480a7ffa7fff8000", - "0x48307ffe80007fff", - "0x20680017fff7fff", - "0x4", - "0x10780017fff7fff", - "0x2d", - "0x480080007ffd8000", - "0xa0680017fff8000", - "0x12", - "0x4824800180007ffe", - "0x10000", - "0x4844800180008002", - "0x8000000000000110000000000000000", - "0x4830800080017ffe", - "0x480280017ff77fff", - "0x482480017ffe8000", - "0xefffffffffffffde000000000000ffff", - "0x480280027ff77fff", - "0x400280037ff77ffb", - "0x402480017fff7ffb", - "0xffffffffffffffffffffffffffffffff", - "0x20680017fff7fff", - "0x13", - "0x402780017fff7fff", + "0x480a7ffb7fff8000", + "0x482680017ffc8000", "0x1", - "0x400280017ff77ffe", - "0x482480017ffe8000", - "0xffffffffffffffffffffffffffff0000", - "0x400280027ff77fff", - "0x482680017ff78000", - "0x3", + "0x480a7ffd7fff8000", + "0x1104800180018000", + "0xbd0", + "0x20680017fff7ff8", + "0x26", + "0x20680017fff7ffb", + "0x11", + "0x48127ff67fff8000", "0x48127ff67fff8000", "0x480680017fff8000", "0x0", - "0x48127ffa7fff8000", - "0x482480017ff68000", - "0x1", "0x48127ff67fff8000", - "0x10780017fff7fff", - "0x22", - "0x482680017ff78000", - "0x4", - "0x482480017ff18000", - "0x7d0", - "0x482480017ff38000", - "0x1", - "0x48127ff37fff8000", - "0x10780017fff7fff", - "0x36", - "0x482680017ff78000", - "0x1", - "0x482480017ff98000", - "0xc8a", - "0x48127ffb7fff8000", - "0x48127ffb7fff8000", - "0x10780017fff7fff", - "0x2e", - "0x4824800180007fff", - "0x1", - "0x20680017fff7fff", - "0x1b", - "0x482680017ff78000", - "0x1", - "0x482480017ffb8000", - "0x3ac", + "0x48127ff67fff8000", "0x480680017fff8000", - "0x1", + "0x0", "0x480680017fff8000", "0x0", - "0x482680017ff98000", - "0x1", - "0x480a7ffa7fff8000", - "0x400280007ffc7ffc", - "0x400280017ffc7ffd", - "0x48127ffa7fff8000", - "0x48127ffa7fff8000", - "0x48127ffc7fff8000", - "0x48127ffc7fff8000", - "0x480a7ffb7fff8000", - "0x482680017ffc8000", - "0x2", - "0x4825800180007ffd", - "0x1", - "0x1104800180018000", - "0x800000000000010ffffffffffffffffffffffffffffffffffffffffffffff8b", + "0x48127ff57fff8000", + "0x48127ff57fff8000", + "0x48127ff57fff8000", + "0x48127ff57fff8000", "0x208b7fff7fff7ffe", - "0x482680017ff78000", - "0x1", - "0x482480017ffb8000", - "0xdb6", - "0x482680017ff98000", - "0x1", - "0x480a7ffa7fff8000", - "0x10780017fff7fff", - "0x8", - "0x482680017ff78000", - "0x1", - "0x482480017ffd8000", - "0xf46", - "0x480a7ff97fff8000", - "0x480a7ffa7fff8000", - "0x48127ffc7fff8000", - "0x48127ffc7fff8000", + "0x48127ff67fff8000", + "0x48127ff67fff8000", "0x480680017fff8000", "0x0", - "0x48127ffb7fff8000", - "0x48127ffb7fff8000", + "0x48127ff67fff8000", + "0x48127ff67fff8000", "0x480680017fff8000", "0x1", "0x480680017fff8000", "0x0", "0x480680017fff8000", "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", "0x208b7fff7fff7ffe", - "0x1104800180018000", - "0x800000000000010fffffffffffffffffffffffffffffffffffffffffffffb84", - "0x482680017ff78000", - "0x1", - "0x480a7ff87fff8000", + "0x48127ff67fff8000", + "0x48127ff67fff8000", "0x480680017fff8000", "0x1", "0x480680017fff8000", @@ -4762,131 +5449,48 @@ "0x0", "0x480680017fff8000", "0x0", - "0x48127ff87fff8000", - "0x48127ff87fff8000", - "0x208b7fff7fff7ffe", - "0xa0680017fff8000", - "0x7", - "0x482680017ff98000", - "0xfffffffffffffffffffffffffffff6be", - "0x400280007ff87fff", - "0x10780017fff7fff", - "0x34", - "0x4825800180007ff9", - "0x942", - "0x400280007ff87fff", - "0x48297ffa80007ffb", - "0x20680017fff7fff", - "0x4", - "0x10780017fff7fff", - "0x23", - "0x480280007ffa8000", - "0x480280017ffa8000", - "0x20680017fff7ffe", - "0xc", "0x480680017fff8000", "0x0", - "0x400280007ffd7fff", - "0x400280017ffd7ffe", - "0x48127ffb7fff8000", - "0x480a7ffc7fff8000", - "0x482680017ffd8000", - "0x2", - "0x10780017fff7fff", - "0xa", "0x480680017fff8000", - "0x1", - "0x400280007ffd7fff", - "0x482480017ffb8000", - "0xc8", - "0x480a7ffc7fff8000", - "0x482680017ffd8000", - "0x1", - "0x482680017ff88000", - "0x1", - "0x48127ffc7fff8000", - "0x482680017ffa8000", - "0x2", - "0x480a7ffb7fff8000", - "0x48127ffa7fff8000", - "0x48127ffa7fff8000", - "0x1104800180018000", - "0x800000000000010ffffffffffffffffffffffffffffffffffffffffffffffd4", - "0x208b7fff7fff7ffe", - "0x482680017ff88000", - "0x1", - "0x482480017ffd8000", - "0xbfe", + "0x0", "0x480680017fff8000", "0x0", - "0x480a7ffc7fff8000", - "0x480a7ffd7fff8000", + "0x48127ff57fff8000", + "0x48127ff57fff8000", "0x208b7fff7fff7ffe", - "0x1104800180018000", - "0x800000000000010fffffffffffffffffffffffffffffffffffffffffffffb3b", - "0x482680017ff88000", - "0x1", - "0x480a7ff97fff8000", - "0x480680017fff8000", + "0x4824800180007fff", "0x1", - "0x48127ffb7fff8000", - "0x48127ffb7fff8000", - "0x208b7fff7fff7ffe", - "0x48297ffc80007ffd", - "0x20680017fff7fff", - "0x4", - "0x10780017fff7fff", - "0xac", - "0x480280007ffc8000", "0x20680017fff7fff", - "0x45", + "0x17", + "0x480a7ffa7fff8000", + "0x482680017ffb8000", + "0x1f9a", + "0x480680017fff8000", + "0x0", "0x482680017ffc8000", "0x1", "0x480a7ffd7fff8000", - "0x48307ffe80007fff", - "0x20680017fff7fff", - "0x4", - "0x10780017fff7fff", - "0x36", - "0x40780017fff7fff", - "0x1", - "0x480a7ffa7fff8000", - "0x480a7ffb7fff8000", - "0x482480017ffa8000", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", "0x1", - "0x48127ffa7fff8000", - "0x48127ffb7fff8000", - "0x48127ffa7fff8000", - "0x480080007ff68000", - "0x1104800180018000", - "0x7bd", - "0x20680017fff7ffa", - "0x19", - "0x20680017fff7ffd", - "0x10", - "0x48127ff87fff8000", - "0x482480017ff88000", - "0x2bc", "0x480680017fff8000", "0x0", - "0x48127ff87fff8000", - "0x48127ff87fff8000", "0x480680017fff8000", "0x0", "0x480680017fff8000", "0x0", - "0x48127ff77fff8000", - "0x48127ff77fff8000", + "0x480680017fff8000", + "0x0", "0x208b7fff7fff7ffe", - "0x48127ff87fff8000", - "0x482480017ff88000", - "0xc8", - "0x48127ff97fff8000", - "0x48127ff97fff8000", - "0x10780017fff7fff", - "0x5c", - "0x48127ff87fff8000", - "0x48127ff87fff8000", + "0x480a7ffa7fff8000", + "0x482680017ffb8000", + "0x1f9a", + "0x480680017fff8000", + "0x0", + "0x482680017ffc8000", + "0x1", + "0x480a7ffd7fff8000", "0x480680017fff8000", "0x1", "0x480680017fff8000", @@ -4897,8 +5501,680 @@ "0x0", "0x480680017fff8000", "0x0", - "0x48127ff77fff8000", - "0x48127ff77fff8000", + "0x480680017fff8000", + "0x0", + "0x208b7fff7fff7ffe", + "0x480a7ffa7fff8000", + "0x482680017ffb8000", + "0x20c6", + "0x480680017fff8000", + "0x0", + "0x480a7ffc7fff8000", + "0x480a7ffd7fff8000", + "0x480680017fff8000", + "0x1", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x208b7fff7fff7ffe", + "0x10b7ff87fff7fff", + "0x10780017fff7fff", + "0xad", + "0x10780017fff7fff", + "0x90", + "0x10780017fff7fff", + "0x74", + "0x10780017fff7fff", + "0x66", + "0x10780017fff7fff", + "0x53", + "0x10780017fff7fff", + "0x45", + "0x10780017fff7fff", + "0x1b", + "0x10780017fff7fff", + "0xd", + "0x480680017fff8000", + "0x0", + "0x400280007ffd7fff", + "0x400380017ffd7ffb", + "0x482680017ff78000", + "0x816", + "0x480a7ffc7fff8000", + "0x482680017ffd8000", + "0x2", + "0x10780017fff7fff", + "0x9c", + "0x480680017fff8000", + "0x1", + "0x400280007ffd7fff", + "0x400380017ffd7ffa", + "0x400380027ffd7ffb", + "0x482680017ff78000", + "0x74e", + "0x480a7ffc7fff8000", + "0x482680017ffd8000", + "0x3", + "0x10780017fff7fff", + "0x90", + "0x480680017fff8000", + "0x2", + "0x400280007ffd7fff", + "0x10b7ff97fff7fff", + "0x10780017fff7fff", + "0x1a", + "0x10780017fff7fff", + "0xe", + "0x480680017fff8000", + "0x0", + "0x400280017ffd7fff", + "0x400380027ffd7ffa", + "0x400380037ffd7ffb", + "0x482680017ff78000", + "0x5be", + "0x480a7ffc7fff8000", + "0x482680017ffd8000", + "0x4", + "0x10780017fff7fff", + "0x14", + "0x480680017fff8000", + "0x1", + "0x400280017ffd7fff", + "0x482680017ff78000", + "0x622", + "0x480a7ffc7fff8000", + "0x482680017ffd8000", + "0x2", + "0x10780017fff7fff", + "0xa", + "0x480680017fff8000", + "0x2", + "0x400280017ffd7fff", + "0x482680017ff78000", + "0x686", + "0x480a7ffc7fff8000", + "0x482680017ffd8000", + "0x2", + "0x10780017fff7fff", + "0x68", + "0x480680017fff8000", + "0x3", + "0x400280007ffd7fff", + "0x400380017ffd7ffa", + "0x400380027ffd7ffb", + "0x482680017ff78000", + "0x74e", + "0x480a7ffc7fff8000", + "0x482680017ffd8000", + "0x3", + "0x10780017fff7fff", + "0x5c", + "0x48297ffa80007ffb", + "0x480680017fff8000", + "0x4", + "0x400280007ffd7fff", + "0x4844800180007ffe", + "0x2", + "0x400280017ffd7fff", + "0x480a7ff67fff8000", + "0x480a7ff77fff8000", + "0x480a7ffa7fff8000", + "0x480a7ffb7fff8000", + "0x480a7ffc7fff8000", + "0x482680017ffd8000", + "0x2", + "0x1104800180018000", + "0xeee", + "0x208b7fff7fff7ffe", + "0x480680017fff8000", + "0x5", + "0x400280007ffd7fff", + "0x400380017ffd7ffa", + "0x400380027ffd7ffb", + "0x482680017ff78000", + "0x74e", + "0x480a7ffc7fff8000", + "0x482680017ffd8000", + "0x3", + "0x10780017fff7fff", + "0x3f", + "0x480680017fff8000", + "0x6", + "0x400280007ffd7fff", + "0x20780017fff7ffa", + "0xd", + "0x480680017fff8000", + "0x0", + "0x400280017ffd7fff", + "0x400380027ffd7ffb", + "0x482680017ff78000", + "0x622", + "0x480a7ffc7fff8000", + "0x482680017ffd8000", + "0x3", + "0x10780017fff7fff", + "0xa", + "0x480680017fff8000", + "0x1", + "0x400280017ffd7fff", + "0x482680017ff78000", + "0x6ea", + "0x480a7ffc7fff8000", + "0x482680017ffd8000", + "0x2", + "0x10780017fff7fff", + "0x25", + "0x480680017fff8000", + "0x7", + "0x400280007ffd7fff", + "0x20780017fff7ffa", + "0xd", + "0x480680017fff8000", + "0x0", + "0x400280017ffd7fff", + "0x400380027ffd7ffb", + "0x482680017ff78000", + "0x622", + "0x480a7ffc7fff8000", + "0x482680017ffd8000", + "0x3", + "0x10780017fff7fff", + "0xb", + "0x480680017fff8000", + "0x1", + "0x400280017ffd7fff", + "0x400380027ffd7ffb", + "0x482680017ff78000", + "0x686", + "0x480a7ffc7fff8000", + "0x482680017ffd8000", + "0x3", + "0x10780017fff7fff", + "0xa", + "0x480680017fff8000", + "0x8", + "0x400280007ffd7fff", + "0x482680017ff78000", + "0x87a", + "0x480a7ffc7fff8000", + "0x482680017ffd8000", + "0x1", + "0x480a7ff67fff8000", + "0x48127ffc7fff8000", + "0x480680017fff8000", + "0x0", + "0x48127ffb7fff8000", + "0x48127ffb7fff8000", + "0x208b7fff7fff7ffe", + "0xa0680017fff8000", + "0x7", + "0x482680017ff88000", + "0xfffffffffffffffffffffffffffff182", + "0x400280007ff77fff", + "0x10780017fff7fff", + "0x90", + "0x4825800180007ff8", + "0xe7e", + "0x400280007ff77fff", + "0x20780017fff7ffd", + "0xf", + "0x482680017ff78000", + "0x1", + "0x482480017ffe8000", + "0x1202", + "0x480680017fff8000", + "0x0", + "0x480a7ff97fff8000", + "0x480a7ffa7fff8000", + "0x480680017fff8000", + "0x0", + "0x480a7ffb7fff8000", + "0x480a7ffc7fff8000", + "0x208b7fff7fff7ffe", + "0x48297ff980007ffa", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0x66", + "0x480280007ff98000", + "0x20680017fff7fff", + "0x3d", + "0x482680017ff98000", + "0x1", + "0x480a7ffa7fff8000", + "0x48307ffe80007fff", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0x2d", + "0x480080007ffd8000", + "0xa0680017fff8000", + "0x12", + "0x4824800180007ffe", + "0x10000", + "0x4844800180008002", + "0x8000000000000110000000000000000", + "0x4830800080017ffe", + "0x480280017ff77fff", + "0x482480017ffe8000", + "0xefffffffffffffde000000000000ffff", + "0x480280027ff77fff", + "0x400280037ff77ffb", + "0x402480017fff7ffb", + "0xffffffffffffffffffffffffffffffff", + "0x20680017fff7fff", + "0x13", + "0x402780017fff7fff", + "0x1", + "0x400280017ff77ffe", + "0x482480017ffe8000", + "0xffffffffffffffffffffffffffff0000", + "0x400280027ff77fff", + "0x482680017ff78000", + "0x3", + "0x48127ff67fff8000", + "0x480680017fff8000", + "0x0", + "0x48127ffa7fff8000", + "0x482480017ff68000", + "0x1", + "0x48127ff67fff8000", + "0x10780017fff7fff", + "0x22", + "0x482680017ff78000", + "0x4", + "0x482480017ff18000", + "0x7d0", + "0x482480017ff38000", + "0x1", + "0x48127ff37fff8000", + "0x10780017fff7fff", + "0x36", + "0x482680017ff78000", + "0x1", + "0x482480017ff98000", + "0xc8a", + "0x48127ffb7fff8000", + "0x48127ffb7fff8000", + "0x10780017fff7fff", + "0x2e", + "0x4824800180007fff", + "0x1", + "0x20680017fff7fff", + "0x1b", + "0x482680017ff78000", + "0x1", + "0x482480017ffb8000", + "0x3ac", + "0x480680017fff8000", + "0x1", + "0x480680017fff8000", + "0x0", + "0x482680017ff98000", + "0x1", + "0x480a7ffa7fff8000", + "0x400280007ffc7ffc", + "0x400280017ffc7ffd", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x48127ffc7fff8000", + "0x48127ffc7fff8000", + "0x480a7ffb7fff8000", + "0x482680017ffc8000", + "0x2", + "0x4825800180007ffd", + "0x1", + "0x1104800180018000", + "0x800000000000010ffffffffffffffffffffffffffffffffffffffffffffff8b", + "0x208b7fff7fff7ffe", + "0x482680017ff78000", + "0x1", + "0x482480017ffb8000", + "0xdb6", + "0x482680017ff98000", + "0x1", + "0x480a7ffa7fff8000", + "0x10780017fff7fff", + "0x8", + "0x482680017ff78000", + "0x1", + "0x482480017ffd8000", + "0xf46", + "0x480a7ff97fff8000", + "0x480a7ffa7fff8000", + "0x48127ffc7fff8000", + "0x48127ffc7fff8000", + "0x480680017fff8000", + "0x0", + "0x48127ffb7fff8000", + "0x48127ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x208b7fff7fff7ffe", + "0x1104800180018000", + "0x800000000000010fffffffffffffffffffffffffffffffffffffffffffffa3d", + "0x482680017ff78000", + "0x1", + "0x480a7ff87fff8000", + "0x480680017fff8000", + "0x1", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x48127ff87fff8000", + "0x48127ff87fff8000", + "0x208b7fff7fff7ffe", + "0xa0680017fff8000", + "0x7", + "0x482680017ff98000", + "0xfffffffffffffffffffffffffffff6be", + "0x400280007ff87fff", + "0x10780017fff7fff", + "0x34", + "0x4825800180007ff9", + "0x942", + "0x400280007ff87fff", + "0x48297ffa80007ffb", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0x23", + "0x480280007ffa8000", + "0x480280017ffa8000", + "0x20680017fff7ffe", + "0xc", + "0x480680017fff8000", + "0x0", + "0x400280007ffd7fff", + "0x400280017ffd7ffe", + "0x48127ffb7fff8000", + "0x480a7ffc7fff8000", + "0x482680017ffd8000", + "0x2", + "0x10780017fff7fff", + "0xa", + "0x480680017fff8000", + "0x1", + "0x400280007ffd7fff", + "0x482480017ffb8000", + "0xc8", + "0x480a7ffc7fff8000", + "0x482680017ffd8000", + "0x1", + "0x482680017ff88000", + "0x1", + "0x48127ffc7fff8000", + "0x482680017ffa8000", + "0x2", + "0x480a7ffb7fff8000", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x1104800180018000", + "0x800000000000010ffffffffffffffffffffffffffffffffffffffffffffffd4", + "0x208b7fff7fff7ffe", + "0x482680017ff88000", + "0x1", + "0x482480017ffd8000", + "0xbfe", + "0x480680017fff8000", + "0x0", + "0x480a7ffc7fff8000", + "0x480a7ffd7fff8000", + "0x208b7fff7fff7ffe", + "0x1104800180018000", + "0x800000000000010fffffffffffffffffffffffffffffffffffffffffffff9f4", + "0x482680017ff88000", + "0x1", + "0x480a7ff97fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffb7fff8000", + "0x48127ffb7fff8000", + "0x208b7fff7fff7ffe", + "0xa0680017fff8000", + "0x7", + "0x482680017ff88000", + "0xffffffffffffffffffffffffffffd8b4", + "0x400280007ff77fff", + "0x10780017fff7fff", + "0x4a", + "0x4825800180007ff8", + "0x274c", + "0x400280007ff77fff", + "0x20780017fff7ffd", + "0xf", + "0x482680017ff78000", + "0x1", + "0x482480017ffe8000", + "0x2ad0", + "0x480680017fff8000", + "0x0", + "0x480a7ff97fff8000", + "0x480a7ffa7fff8000", + "0x480680017fff8000", + "0x0", + "0x480a7ffb7fff8000", + "0x480a7ffc7fff8000", + "0x208b7fff7fff7ffe", + "0x482680017ff78000", + "0x1", + "0x48127ffe7fff8000", + "0x480a7ff97fff8000", + "0x480a7ffa7fff8000", + "0x1104800180018000", + "0x990", + "0x20680017fff7ff8", + "0x22", + "0x20680017fff7ffb", + "0x12", + "0x400280007ffc7ffc", + "0x400280017ffc7ffd", + "0x400280027ffc7ffe", + "0x400280037ffc7fff", + "0x48127ff67fff8000", + "0x48127ff67fff8000", + "0x48127ff77fff8000", + "0x48127ff77fff8000", + "0x480a7ffb7fff8000", + "0x482680017ffc8000", + "0x4", + "0x4825800180007ffd", + "0x1", + "0x1104800180018000", + "0x800000000000010ffffffffffffffffffffffffffffffffffffffffffffffd0", + "0x208b7fff7fff7ffe", + "0x48127ff67fff8000", + "0x482480017ff68000", + "0xa6e", + "0x480680017fff8000", + "0x0", + "0x48127ff67fff8000", + "0x48127ff67fff8000", + "0x480680017fff8000", + "0x1", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x208b7fff7fff7ffe", + "0x48127ff67fff8000", + "0x48127ff67fff8000", + "0x480680017fff8000", + "0x1", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x48127ff87fff8000", + "0x48127ff87fff8000", + "0x208b7fff7fff7ffe", + "0x1104800180018000", + "0x800000000000010fffffffffffffffffffffffffffffffffffffffffffff99b", + "0x482680017ff78000", + "0x1", + "0x480a7ff87fff8000", + "0x480680017fff8000", + "0x1", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x48127ff87fff8000", + "0x48127ff87fff8000", + "0x208b7fff7fff7ffe", + "0x40780017fff7fff", + "0x2", + "0xa0680017fff8000", + "0x7", + "0x482680017ff98000", + "0xffffffffffffffffffffffffffffe804", + "0x400280007ff87fff", + "0x10780017fff7fff", + "0x33", + "0x4825800180007ff9", + "0x17fc", + "0x400280007ff87fff", + "0x48297ffa80007ffb", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0x22", + "0x482680017ff88000", + "0x1", + "0x48127ffd7fff8000", + "0x480280007ffa8000", + "0x480280017ffa8000", + "0x480280027ffa8000", + "0x480280037ffa8000", + "0x480a7ffc7fff8000", + "0x480a7ffd7fff8000", + "0x402780017ffa8000", + "0x4", + "0x400b7ffb7fff8001", + "0x1104800180018000", + "0x800000000000010fffffffffffffffffffffffffffffffffffffffffffffde0", + "0x20680017fff7ffd", + "0xb", + "0x48127ffb7fff8000", + "0x48127ffb7fff8000", + "0x480a80007fff8000", + "0x480a80017fff8000", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x1104800180018000", + "0x800000000000010ffffffffffffffffffffffffffffffffffffffffffffffda", + "0x208b7fff7fff7ffe", + "0x48127ffb7fff8000", + "0x48127ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffb7fff8000", + "0x48127ffb7fff8000", + "0x208b7fff7fff7ffe", + "0x482680017ff88000", + "0x1", + "0x482480017ffd8000", + "0x1ab8", + "0x480680017fff8000", + "0x0", + "0x480a7ffc7fff8000", + "0x480a7ffd7fff8000", + "0x208b7fff7fff7ffe", + "0x1104800180018000", + "0x800000000000010fffffffffffffffffffffffffffffffffffffffffffff951", + "0x482680017ff88000", + "0x1", + "0x480a7ff97fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffb7fff8000", + "0x48127ffb7fff8000", + "0x208b7fff7fff7ffe", + "0x48297ffc80007ffd", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0xac", + "0x480280007ffc8000", + "0x20680017fff7fff", + "0x45", + "0x482680017ffc8000", + "0x1", + "0x480a7ffd7fff8000", + "0x48307ffe80007fff", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0x36", + "0x40780017fff7fff", + "0x1", + "0x480a7ffa7fff8000", + "0x480a7ffb7fff8000", + "0x482480017ffa8000", + "0x1", + "0x48127ffa7fff8000", + "0x48127ffb7fff8000", + "0x48127ffa7fff8000", + "0x480080007ff68000", + "0x1104800180018000", + "0xbfb", + "0x20680017fff7ffa", + "0x19", + "0x20680017fff7ffd", + "0x10", + "0x48127ff87fff8000", + "0x482480017ff88000", + "0x2bc", + "0x480680017fff8000", + "0x0", + "0x48127ff87fff8000", + "0x48127ff87fff8000", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x48127ff77fff8000", + "0x48127ff77fff8000", + "0x208b7fff7fff7ffe", + "0x48127ff87fff8000", + "0x482480017ff88000", + "0xc8", + "0x48127ff97fff8000", + "0x48127ff97fff8000", + "0x10780017fff7fff", + "0x5c", + "0x48127ff87fff8000", + "0x48127ff87fff8000", + "0x480680017fff8000", + "0x1", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x48127ff77fff8000", + "0x48127ff77fff8000", "0x208b7fff7fff7ffe", "0x480a7ffa7fff8000", "0x482680017ffb8000", @@ -4906,57 +6182,1180 @@ "0x48127ffb7fff8000", "0x48127ffb7fff8000", "0x10780017fff7fff", - "0x46", + "0x46", + "0x4824800180007fff", + "0x1", + "0x20680017fff7fff", + "0x51", + "0x482680017ffc8000", + "0x1", + "0x480a7ffd7fff8000", + "0x48307ffe80007fff", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0x35", + "0x40780017fff7fff", + "0x1", + "0x480a7ffa7fff8000", + "0x480a7ffb7fff8000", + "0x482480017ffa8000", + "0x1", + "0x48127ffa7fff8000", + "0x48127ffb7fff8000", + "0x48127ffa7fff8000", + "0x480080007ff68000", + "0x1104800180018000", + "0xce1", + "0x20680017fff7ffa", + "0x18", + "0x20680017fff7ffd", + "0x10", + "0x48127ff87fff8000", + "0x482480017ff88000", + "0x1f4", + "0x480680017fff8000", + "0x0", + "0x48127ff87fff8000", + "0x48127ff87fff8000", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x1", + "0x48127ff77fff8000", + "0x48127ff77fff8000", + "0x208b7fff7fff7ffe", + "0x48127ff87fff8000", + "0x48127ff87fff8000", + "0x48127ff97fff8000", + "0x48127ff97fff8000", + "0x10780017fff7fff", + "0x16", + "0x48127ff87fff8000", + "0x48127ff87fff8000", + "0x480680017fff8000", + "0x1", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x48127ff77fff8000", + "0x48127ff77fff8000", + "0x208b7fff7fff7ffe", + "0x480a7ffa7fff8000", + "0x482680017ffb8000", + "0xd2a", + "0x48127ffb7fff8000", + "0x48127ffb7fff8000", + "0x48127ffc7fff8000", + "0x48127ffc7fff8000", + "0x480680017fff8000", + "0x0", + "0x48127ffb7fff8000", + "0x48127ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x208b7fff7fff7ffe", + "0x480a7ffa7fff8000", + "0x482680017ffb8000", + "0x10ae", + "0x480680017fff8000", + "0x0", + "0x482680017ffc8000", + "0x1", + "0x480a7ffd7fff8000", + "0x480680017fff8000", + "0x1", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x208b7fff7fff7ffe", + "0x480a7ffa7fff8000", + "0x482680017ffb8000", + "0x11da", + "0x480680017fff8000", + "0x0", + "0x480a7ffc7fff8000", + "0x480a7ffd7fff8000", + "0x480680017fff8000", + "0x1", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x208b7fff7fff7ffe", + "0xa0680017fff8000", + "0x7", + "0x482680017ff98000", + "0xfffffffffffffffffffffffffffff9de", + "0x400280007ff87fff", + "0x10780017fff7fff", + "0x21", + "0x4825800180007ff9", + "0x622", + "0x400280007ff87fff", + "0x48297ffa80007ffb", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0x10", + "0x480280007ffa8000", + "0x400280007ffd7fff", + "0x482680017ff88000", + "0x1", + "0x48127ffc7fff8000", + "0x482680017ffa8000", + "0x1", + "0x480a7ffb7fff8000", + "0x480a7ffc7fff8000", + "0x482680017ffd8000", + "0x1", + "0x1104800180018000", + "0x800000000000010ffffffffffffffffffffffffffffffffffffffffffffffe7", + "0x208b7fff7fff7ffe", + "0x482680017ff88000", + "0x1", + "0x482480017ffd8000", + "0x8de", + "0x480680017fff8000", + "0x0", + "0x480a7ffc7fff8000", + "0x480a7ffd7fff8000", + "0x208b7fff7fff7ffe", + "0x1104800180018000", + "0x800000000000010fffffffffffffffffffffffffffffffffffffffffffff862", + "0x482680017ff88000", + "0x1", + "0x480a7ff97fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffb7fff8000", + "0x48127ffb7fff8000", + "0x208b7fff7fff7ffe", + "0x48297ffc80007ffd", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0xa8", + "0x482680017ffc8000", + "0x1", + "0x480a7ffd7fff8000", + "0x480280007ffc8000", + "0x20680017fff7fff", + "0x22", + "0x480a7ffb7fff8000", + "0x48127ffc7fff8000", + "0x48127ffc7fff8000", + "0x1104800180018000", + "0x800000000000010fffffffffffffffffffffffffffffffffffffffffffff90c", + "0x20680017fff7ffc", + "0xd", + "0x48127ff97fff8000", + "0x48127ff97fff8000", + "0x48127ff97fff8000", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x48127ff87fff8000", + "0x48127ff87fff8000", + "0x48127ff87fff8000", + "0x208b7fff7fff7ffe", + "0x48127ff97fff8000", + "0x48127ff97fff8000", + "0x48127ff97fff8000", + "0x480680017fff8000", + "0x1", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x208b7fff7fff7ffe", + "0x40780017fff7fff", + "0x11", + "0x4824800180007fee", + "0x1", + "0x20680017fff7fff", + "0x6c", + "0x48307feb80007fec", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0x60", + "0x480080007fea8000", + "0xa0680017fff8000", + "0x12", + "0x4824800180007ffe", + "0x10000", + "0x4844800180008002", + "0x8000000000000110000000000000000", + "0x4830800080017ffe", + "0x480280007ffb7fff", + "0x482480017ffe8000", + "0xefffffffffffffde000000000000ffff", + "0x480280017ffb7fff", + "0x400280027ffb7ffb", + "0x402480017fff7ffb", + "0xffffffffffffffffffffffffffffffff", + "0x20680017fff7fff", + "0x46", + "0x402780017fff7fff", + "0x1", + "0x400280007ffb7ffe", + "0x482480017ffe8000", + "0xffffffffffffffffffffffffffff0000", + "0x400280017ffb7fff", + "0x482480017fe78000", + "0x1", + "0x48127fe77fff8000", + "0x48307ffe80007fff", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0x30", + "0x480080007ffd8000", + "0xa0680017fff8000", + "0x12", + "0x4824800180007ffe", + "0x10000", + "0x4844800180008002", + "0x8000000000000110000000000000000", + "0x4830800080017ffe", + "0x480280027ffb7fff", + "0x482480017ffe8000", + "0xefffffffffffffde000000000000ffff", + "0x480280037ffb7fff", + "0x400280047ffb7ffb", + "0x402480017fff7ffb", + "0xffffffffffffffffffffffffffffffff", + "0x20680017fff7fff", + "0x18", + "0x402780017fff7fff", + "0x1", + "0x400280027ffb7ffe", + "0x482480017ffe8000", + "0xffffffffffffffffffffffffffff0000", + "0x400280037ffb7fff", + "0x40780017fff7fff", + "0x5", + "0x482680017ffb8000", + "0x4", + "0x482480017ff48000", + "0x1", + "0x48127ff47fff8000", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x1", + "0x480680017fff8000", + "0x0", + "0x48127fec7fff8000", + "0x48127ff17fff8000", + "0x208b7fff7fff7ffe", + "0x482680017ffb8000", + "0x5", + "0x482480017ff48000", + "0x1", + "0x48127ff47fff8000", + "0x10780017fff7fff", + "0x2f", + "0x40780017fff7fff", + "0x8", + "0x482680017ffb8000", + "0x2", + "0x48127ff47fff8000", + "0x48127ff47fff8000", + "0x10780017fff7fff", + "0x27", + "0x40780017fff7fff", + "0x6", + "0x482680017ffb8000", + "0x3", + "0x482480017fdb8000", + "0x1", + "0x48127fdb7fff8000", + "0x10780017fff7fff", + "0x1e", + "0x40780017fff7fff", + "0xe", + "0x480a7ffb7fff8000", + "0x48127fdb7fff8000", + "0x48127fdb7fff8000", + "0x10780017fff7fff", + "0x17", + "0x40780017fff7fff", + "0xf", + "0x480a7ffb7fff8000", + "0x48127fdb7fff8000", + "0x48127fdb7fff8000", + "0x480680017fff8000", + "0x1", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x208b7fff7fff7ffe", + "0x40780017fff7fff", + "0x24", + "0x480a7ffb7fff8000", + "0x480a7ffc7fff8000", + "0x480a7ffd7fff8000", + "0x480680017fff8000", + "0x1", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x208b7fff7fff7ffe", + "0x48297ffc80007ffd", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0x8e", + "0x480280007ffc8000", + "0x20680017fff7fff", + "0x34", + "0x480a7ffa7fff8000", + "0x480a7ffb7fff8000", + "0x482680017ffc8000", + "0x1", + "0x480a7ffd7fff8000", + "0x1104800180018000", + "0xace", + "0x20680017fff7ff9", + "0x1a", + "0x20680017fff7ffc", + "0x11", + "0x48127ff77fff8000", + "0x482480017ff78000", + "0x258", + "0x480680017fff8000", + "0x0", + "0x48127ff77fff8000", + "0x48127ff77fff8000", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x48127ff67fff8000", + "0x48127ff67fff8000", + "0x48127ff67fff8000", + "0x208b7fff7fff7ffe", + "0x48127ff77fff8000", + "0x482480017ff78000", + "0x64", + "0x48127ff87fff8000", + "0x48127ff87fff8000", + "0x10780017fff7fff", + "0x35", + "0x48127ff77fff8000", + "0x48127ff77fff8000", + "0x480680017fff8000", + "0x1", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x48127ff67fff8000", + "0x48127ff67fff8000", + "0x208b7fff7fff7ffe", + "0x4824800180007fff", + "0x1", + "0x20680017fff7fff", + "0x42", + "0x480a7ffa7fff8000", + "0x480a7ffb7fff8000", + "0x482680017ffc8000", + "0x1", + "0x480a7ffd7fff8000", + "0x1104800180018000", + "0xbc5", + "0x20680017fff7ff9", + "0x28", + "0x20680017fff7ffc", + "0x11", + "0x48127ff77fff8000", + "0x482480017ff78000", + "0x190", + "0x480680017fff8000", + "0x0", + "0x48127ff77fff8000", + "0x48127ff77fff8000", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x1", + "0x48127ff67fff8000", + "0x48127ff67fff8000", + "0x48127ff67fff8000", + "0x208b7fff7fff7ffe", + "0x48127ff77fff8000", + "0x48127ff77fff8000", + "0x48127ff87fff8000", + "0x48127ff87fff8000", + "0x48127ffc7fff8000", + "0x48127ffc7fff8000", + "0x480680017fff8000", + "0x0", + "0x48127ffb7fff8000", + "0x48127ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x208b7fff7fff7ffe", + "0x48127ff77fff8000", + "0x48127ff77fff8000", + "0x480680017fff8000", + "0x1", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x48127ff67fff8000", + "0x48127ff67fff8000", + "0x208b7fff7fff7ffe", + "0x480a7ffa7fff8000", + "0x482680017ffb8000", + "0x1c8e", + "0x480680017fff8000", + "0x0", + "0x482680017ffc8000", + "0x1", + "0x480a7ffd7fff8000", + "0x480680017fff8000", + "0x1", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x208b7fff7fff7ffe", + "0x480a7ffa7fff8000", + "0x482680017ffb8000", + "0x1dba", + "0x480680017fff8000", + "0x0", + "0x480a7ffc7fff8000", + "0x480a7ffd7fff8000", + "0x480680017fff8000", + "0x1", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x208b7fff7fff7ffe", + "0x48297ffc80007ffd", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0x72", + "0x482680017ffc8000", + "0x1", + "0x480a7ffd7fff8000", + "0x480280007ffc8000", + "0x20680017fff7fff", + "0x1f", + "0x480a7ffb7fff8000", + "0x48127ffc7fff8000", + "0x48127ffc7fff8000", + "0x1104800180018000", + "0x800000000000010fffffffffffffffffffffffffffffffffffffffffffff998", + "0x20680017fff7ffd", + "0xc", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x48127ff97fff8000", + "0x48127ff97fff8000", + "0x208b7fff7fff7ffe", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x480680017fff8000", + "0x1", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x208b7fff7fff7ffe", + "0x40780017fff7fff", + "0xf", + "0x4824800180007ff0", + "0x1", + "0x20680017fff7fff", + "0x3b", + "0x48307fed80007fee", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0x2f", + "0x480080007fec8000", + "0xa0680017fff8000", + "0x12", + "0x4824800180007ffe", + "0x100000000", + "0x4844800180008002", + "0x8000000000000110000000000000000", + "0x4830800080017ffe", + "0x480280007ffb7fff", + "0x482480017ffe8000", + "0xefffffffffffffde00000000ffffffff", + "0x480280017ffb7fff", + "0x400280027ffb7ffb", + "0x402480017fff7ffb", + "0xffffffffffffffffffffffffffffffff", + "0x20680017fff7fff", + "0x17", + "0x402780017fff7fff", + "0x1", + "0x400280007ffb7ffe", + "0x482480017ffe8000", + "0xffffffffffffffffffffffff00000000", + "0x400280017ffb7fff", + "0x40780017fff7fff", + "0x5", + "0x482680017ffb8000", + "0x2", + "0x482480017fe38000", + "0x1", + "0x48127fe37fff8000", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x1", + "0x480680017fff8000", + "0x0", + "0x48127ff27fff8000", + "0x208b7fff7fff7ffe", + "0x482680017ffb8000", + "0x3", + "0x482480017fe38000", + "0x1", + "0x48127fe37fff8000", + "0x10780017fff7fff", + "0x1c", + "0x40780017fff7fff", + "0x8", + "0x480a7ffb7fff8000", + "0x48127fe37fff8000", + "0x48127fe37fff8000", + "0x10780017fff7fff", + "0x15", + "0x40780017fff7fff", + "0x9", + "0x480a7ffb7fff8000", + "0x48127fe37fff8000", + "0x48127fe37fff8000", + "0x480680017fff8000", + "0x1", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x208b7fff7fff7ffe", + "0x40780017fff7fff", + "0x1c", + "0x480a7ffb7fff8000", + "0x480a7ffc7fff8000", + "0x480a7ffd7fff8000", + "0x480680017fff8000", + "0x1", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x208b7fff7fff7ffe", + "0x48297ffc80007ffd", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0xbd", + "0x480280007ffc8000", + "0x20680017fff7fff", + "0x40", + "0x40780017fff7fff", + "0x5", + "0x482680017ffc8000", + "0x1", + "0x480a7ffd7fff8000", + "0x48307ffe80007fff", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0x2f", + "0x480080007ffd8000", + "0xa0680017fff8000", + "0x12", + "0x4824800180007ffe", + "0x100", + "0x4844800180008002", + "0x8000000000000110000000000000000", + "0x4830800080017ffe", + "0x480280007ffb7fff", + "0x482480017ffe8000", + "0xefffffffffffffde00000000000000ff", + "0x480280017ffb7fff", + "0x400280027ffb7ffb", + "0x402480017fff7ffb", + "0xffffffffffffffffffffffffffffffff", + "0x20680017fff7fff", + "0x17", + "0x402780017fff7fff", + "0x1", + "0x400280007ffb7ffe", + "0x482480017ffe8000", + "0xffffffffffffffffffffffffffffff00", + "0x400280017ffb7fff", + "0x40780017fff7fff", + "0x5", + "0x482680017ffb8000", + "0x2", + "0x482480017ff48000", + "0x1", + "0x48127ff47fff8000", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x48127ff27fff8000", + "0x208b7fff7fff7ffe", + "0x482680017ffb8000", + "0x3", + "0x482480017ff48000", + "0x1", + "0x48127ff47fff8000", + "0x10780017fff7fff", + "0x88", + "0x40780017fff7fff", + "0x8", + "0x480a7ffb7fff8000", + "0x48127ff47fff8000", + "0x48127ff47fff8000", + "0x10780017fff7fff", + "0x81", + "0x4824800180007fff", + "0x1", + "0x20680017fff7fff", + "0x69", + "0x482680017ffc8000", + "0x1", + "0x480a7ffd7fff8000", + "0x48307ffe80007fff", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0x5a", + "0x480080007ffd8000", + "0x20680017fff7fff", + "0x3e", + "0x482480017ffc8000", + "0x1", + "0x48127ffc7fff8000", + "0x48307ffe80007fff", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0x2f", + "0x480080007ffd8000", + "0xa0680017fff8000", + "0x12", + "0x4824800180007ffe", + "0x100000000", + "0x4844800180008002", + "0x8000000000000110000000000000000", + "0x4830800080017ffe", + "0x480280007ffb7fff", + "0x482480017ffe8000", + "0xefffffffffffffde00000000ffffffff", + "0x480280017ffb7fff", + "0x400280027ffb7ffb", + "0x402480017fff7ffb", + "0xffffffffffffffffffffffffffffffff", + "0x20680017fff7fff", + "0x17", + "0x402780017fff7fff", + "0x1", + "0x400280007ffb7ffe", + "0x482480017ffe8000", + "0xffffffffffffffffffffffff00000000", + "0x400280017ffb7fff", + "0x40780017fff7fff", + "0x5", + "0x482680017ffb8000", + "0x2", + "0x482480017ff48000", + "0x1", + "0x48127ff47fff8000", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x1", + "0x480680017fff8000", + "0x0", + "0x48127ff27fff8000", + "0x208b7fff7fff7ffe", + "0x482680017ffb8000", + "0x3", + "0x482480017ff48000", + "0x1", + "0x48127ff47fff8000", + "0x10780017fff7fff", + "0x27", + "0x40780017fff7fff", + "0x8", + "0x480a7ffb7fff8000", + "0x48127ff47fff8000", + "0x48127ff47fff8000", + "0x10780017fff7fff", + "0x20", + "0x40780017fff7fff", + "0xa", + "0x4824800180007ff5", + "0x1", + "0x20680017fff7fff", + "0xf", + "0x480a7ffb7fff8000", + "0x482480017ff08000", + "0x1", + "0x48127ff07fff8000", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x1", + "0x480680017fff8000", + "0x1", + "0x480680017fff8000", + "0x0", + "0x208b7fff7fff7ffe", + "0x480a7ffb7fff8000", + "0x482480017ff08000", + "0x1", + "0x48127ff07fff8000", + "0x10780017fff7fff", + "0x1d", + "0x40780017fff7fff", + "0xc", + "0x480a7ffb7fff8000", + "0x48127ff07fff8000", + "0x48127ff07fff8000", + "0x10780017fff7fff", + "0x16", + "0x40780017fff7fff", + "0xf", + "0x480a7ffb7fff8000", + "0x482680017ffc8000", + "0x1", + "0x480a7ffd7fff8000", + "0x480680017fff8000", + "0x1", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x208b7fff7fff7ffe", + "0x40780017fff7fff", + "0x11", + "0x480a7ffb7fff8000", + "0x480a7ffc7fff8000", + "0x480a7ffd7fff8000", + "0x480680017fff8000", + "0x1", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x208b7fff7fff7ffe", + "0x48297ffc80007ffd", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0xc1", + "0x480280007ffc8000", + "0x20680017fff7fff", + "0x40", + "0x40780017fff7fff", + "0x7", + "0x482680017ffc8000", + "0x1", + "0x480a7ffd7fff8000", + "0x48307ffe80007fff", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0x2f", + "0x480080007ffd8000", + "0xa0680017fff8000", + "0x12", + "0x4824800180007ffe", + "0x100", + "0x4844800180008002", + "0x8000000000000110000000000000000", + "0x4830800080017ffe", + "0x480280007ffb7fff", + "0x482480017ffe8000", + "0xefffffffffffffde00000000000000ff", + "0x480280017ffb7fff", + "0x400280027ffb7ffb", + "0x402480017fff7ffb", + "0xffffffffffffffffffffffffffffffff", + "0x20680017fff7fff", + "0x17", + "0x402780017fff7fff", + "0x1", + "0x400280007ffb7ffe", + "0x482480017ffe8000", + "0xffffffffffffffffffffffffffffff00", + "0x400280017ffb7fff", + "0x40780017fff7fff", + "0x5", + "0x482680017ffb8000", + "0x2", + "0x482480017ff48000", + "0x1", + "0x48127ff47fff8000", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x48127ff27fff8000", + "0x208b7fff7fff7ffe", + "0x482680017ffb8000", + "0x3", + "0x482480017ff48000", + "0x1", + "0x48127ff47fff8000", + "0x10780017fff7fff", + "0x8c", + "0x40780017fff7fff", + "0x8", + "0x480a7ffb7fff8000", + "0x48127ff47fff8000", + "0x48127ff47fff8000", + "0x10780017fff7fff", + "0x85", + "0x4824800180007fff", + "0x1", + "0x20680017fff7fff", + "0x6d", + "0x482680017ffc8000", + "0x1", + "0x480a7ffd7fff8000", + "0x48307ffe80007fff", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0x5e", + "0x480080007ffd8000", + "0xa0680017fff8000", + "0x12", + "0x4824800180007ffe", + "0x10000000000000000", + "0x4844800180008002", + "0x8000000000000110000000000000000", + "0x4830800080017ffe", + "0x480280007ffb7fff", + "0x482480017ffe8000", + "0xefffffffffffffdeffffffffffffffff", + "0x480280017ffb7fff", + "0x400280027ffb7ffb", + "0x402480017fff7ffb", + "0xffffffffffffffffffffffffffffffff", + "0x20680017fff7fff", + "0x44", + "0x402780017fff7fff", + "0x1", + "0x400280007ffb7ffe", + "0x482480017ffe8000", + "0xffffffffffffffff0000000000000000", + "0x400280017ffb7fff", + "0x482480017ffa8000", + "0x1", + "0x48127ffa7fff8000", + "0x48307ffe80007fff", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0x2e", + "0x480080007ffd8000", + "0xa0680017fff8000", + "0x12", + "0x4824800180007ffe", + "0x100000000", + "0x4844800180008002", + "0x8000000000000110000000000000000", + "0x4830800080017ffe", + "0x480280027ffb7fff", + "0x482480017ffe8000", + "0xefffffffffffffde00000000ffffffff", + "0x480280037ffb7fff", + "0x400280047ffb7ffb", + "0x402480017fff7ffb", + "0xffffffffffffffffffffffffffffffff", + "0x20680017fff7fff", + "0x16", + "0x402780017fff7fff", + "0x1", + "0x400280027ffb7ffe", + "0x482480017ffe8000", + "0xffffffffffffffffffffffff00000000", + "0x400280037ffb7fff", + "0x40780017fff7fff", + "0x5", + "0x482680017ffb8000", + "0x4", + "0x482480017ff48000", + "0x1", + "0x48127ff47fff8000", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x1", + "0x48127fed7fff8000", + "0x48127ff27fff8000", + "0x208b7fff7fff7ffe", + "0x482680017ffb8000", + "0x5", + "0x482480017ff48000", + "0x1", + "0x48127ff47fff8000", + "0x10780017fff7fff", + "0x2e", + "0x40780017fff7fff", + "0x8", + "0x482680017ffb8000", + "0x2", + "0x48127ff47fff8000", + "0x48127ff47fff8000", + "0x10780017fff7fff", + "0x26", + "0x40780017fff7fff", + "0x6", + "0x482680017ffb8000", + "0x3", + "0x482480017fee8000", + "0x1", + "0x48127fee7fff8000", + "0x10780017fff7fff", + "0x1d", + "0x40780017fff7fff", + "0xe", + "0x480a7ffb7fff8000", + "0x48127fee7fff8000", + "0x48127fee7fff8000", + "0x10780017fff7fff", + "0x16", + "0x40780017fff7fff", + "0x11", + "0x480a7ffb7fff8000", + "0x482680017ffc8000", + "0x1", + "0x480a7ffd7fff8000", + "0x480680017fff8000", + "0x1", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x208b7fff7fff7ffe", + "0x40780017fff7fff", + "0x13", + "0x480a7ffb7fff8000", + "0x480a7ffc7fff8000", + "0x480a7ffd7fff8000", + "0x480680017fff8000", + "0x1", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x208b7fff7fff7ffe", + "0x48297ffc80007ffd", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0xa2", + "0x480280007ffc8000", + "0x20680017fff7fff", + "0x46", + "0x482680017ffc8000", + "0x1", + "0x480a7ffd7fff8000", + "0x48307ffe80007fff", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0x37", + "0x480080007ffd8000", + "0xa0680017fff8000", + "0x12", + "0x4824800180007ffe", + "0x100", + "0x4844800180008002", + "0x8000000000000110000000000000000", + "0x4830800080017ffe", + "0x480280007ffa7fff", + "0x482480017ffe8000", + "0xefffffffffffffde00000000000000ff", + "0x480280017ffa7fff", + "0x400280027ffa7ffb", + "0x402480017fff7ffb", + "0xffffffffffffffffffffffffffffffff", + "0x20680017fff7fff", + "0x1d", + "0x402780017fff7fff", + "0x1", + "0x400280007ffa7ffe", + "0x482480017ffe8000", + "0xffffffffffffffffffffffffffffff00", + "0x400280017ffa7fff", + "0x482680017ffa8000", + "0x2", + "0x482680017ffb8000", + "0x1d1a", + "0x480680017fff8000", + "0x0", + "0x482480017ff78000", + "0x1", + "0x48127ff77fff8000", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x48127ff37fff8000", + "0x208b7fff7fff7ffe", + "0x482680017ffa8000", + "0x3", + "0x482680017ffb8000", + "0x1888", + "0x482480017ff38000", + "0x1", + "0x48127ff37fff8000", + "0x10780017fff7fff", + "0x67", + "0x480a7ffa7fff8000", + "0x482680017ffb8000", + "0x1d42", + "0x48127ffb7fff8000", + "0x48127ffb7fff8000", + "0x10780017fff7fff", + "0x60", "0x4824800180007fff", "0x1", "0x20680017fff7fff", - "0x51", - "0x482680017ffc8000", - "0x1", - "0x480a7ffd7fff8000", - "0x48307ffe80007fff", - "0x20680017fff7fff", - "0x4", - "0x10780017fff7fff", - "0x35", - "0x40780017fff7fff", - "0x1", + "0x42", "0x480a7ffa7fff8000", "0x480a7ffb7fff8000", - "0x482480017ffa8000", + "0x482680017ffc8000", "0x1", - "0x48127ffa7fff8000", - "0x48127ffb7fff8000", - "0x48127ffa7fff8000", - "0x480080007ff68000", + "0x480a7ffd7fff8000", "0x1104800180018000", - "0x871", - "0x20680017fff7ffa", - "0x18", - "0x20680017fff7ffd", - "0x10", - "0x48127ff87fff8000", - "0x482480017ff88000", - "0x1f4", + "0x446", + "0x20680017fff7ff8", + "0x26", + "0x20680017fff7ffb", + "0x11", + "0x48127ff67fff8000", + "0x48127ff67fff8000", "0x480680017fff8000", "0x0", - "0x48127ff87fff8000", - "0x48127ff87fff8000", + "0x48127ff67fff8000", + "0x48127ff67fff8000", "0x480680017fff8000", "0x0", "0x480680017fff8000", "0x1", - "0x48127ff77fff8000", - "0x48127ff77fff8000", + "0x48127ff57fff8000", + "0x48127ff57fff8000", + "0x48127ff57fff8000", + "0x48127ff57fff8000", "0x208b7fff7fff7ffe", - "0x48127ff87fff8000", - "0x48127ff87fff8000", - "0x48127ff97fff8000", - "0x48127ff97fff8000", - "0x10780017fff7fff", - "0x16", - "0x48127ff87fff8000", - "0x48127ff87fff8000", + "0x48127ff67fff8000", + "0x48127ff67fff8000", + "0x480680017fff8000", + "0x0", + "0x48127ff67fff8000", + "0x48127ff67fff8000", "0x480680017fff8000", "0x1", "0x480680017fff8000", @@ -4967,20 +7366,11 @@ "0x0", "0x480680017fff8000", "0x0", - "0x48127ff77fff8000", - "0x48127ff77fff8000", - "0x208b7fff7fff7ffe", - "0x480a7ffa7fff8000", - "0x482680017ffb8000", - "0xd2a", - "0x48127ffb7fff8000", - "0x48127ffb7fff8000", - "0x48127ffc7fff8000", - "0x48127ffc7fff8000", "0x480680017fff8000", "0x0", - "0x48127ffb7fff8000", - "0x48127ffb7fff8000", + "0x208b7fff7fff7ffe", + "0x48127ff67fff8000", + "0x48127ff67fff8000", "0x480680017fff8000", "0x1", "0x480680017fff8000", @@ -4989,10 +7379,18 @@ "0x0", "0x480680017fff8000", "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x48127ff57fff8000", + "0x48127ff57fff8000", "0x208b7fff7fff7ffe", "0x480a7ffa7fff8000", "0x482680017ffb8000", - "0x10ae", + "0x2062", "0x480680017fff8000", "0x0", "0x482680017ffc8000", @@ -5006,14 +7404,22 @@ "0x0", "0x480680017fff8000", "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", "0x208b7fff7fff7ffe", "0x480a7ffa7fff8000", "0x482680017ffb8000", - "0x11da", - "0x480680017fff8000", - "0x0", + "0x1ffe", "0x480a7ffc7fff8000", "0x480a7ffd7fff8000", + "0x48127ffc7fff8000", + "0x48127ffc7fff8000", + "0x480680017fff8000", + "0x0", + "0x48127ffb7fff8000", + "0x48127ffb7fff8000", "0x480680017fff8000", "0x1", "0x480680017fff8000", @@ -5022,87 +7428,160 @@ "0x0", "0x480680017fff8000", "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", "0x208b7fff7fff7ffe", - "0xa0680017fff8000", - "0x7", - "0x482680017ff98000", - "0xfffffffffffffffffffffffffffff9de", - "0x400280007ff87fff", + "0x48297ffc80007ffd", + "0x20680017fff7fff", + "0x4", "0x10780017fff7fff", - "0x21", - "0x4825800180007ff9", - "0x622", - "0x400280007ff87fff", - "0x48297ffa80007ffb", + "0x8d", + "0x480280007ffc8000", + "0xa0680017fff8000", + "0x12", + "0x4824800180007ffe", + "0x10000000000000000", + "0x4844800180008002", + "0x8000000000000110000000000000000", + "0x4830800080017ffe", + "0x480280007ffb7fff", + "0x482480017ffe8000", + "0xefffffffffffffdeffffffffffffffff", + "0x480280017ffb7fff", + "0x400280027ffb7ffb", + "0x402480017fff7ffb", + "0xffffffffffffffffffffffffffffffff", + "0x20680017fff7fff", + "0x73", + "0x402780017fff7fff", + "0x1", + "0x400280007ffb7ffe", + "0x482480017ffe8000", + "0xffffffffffffffff0000000000000000", + "0x400280017ffb7fff", + "0x482680017ffc8000", + "0x1", + "0x480a7ffd7fff8000", + "0x48307ffe80007fff", "0x20680017fff7fff", "0x4", "0x10780017fff7fff", - "0x10", - "0x480280007ffa8000", - "0x400280007ffd7fff", - "0x482680017ff88000", + "0x5d", + "0x480080007ffd8000", + "0xa0680017fff8000", + "0x12", + "0x4824800180007ffe", + "0x10000000000000000", + "0x4844800180008002", + "0x8000000000000110000000000000000", + "0x4830800080017ffe", + "0x480280027ffb7fff", + "0x482480017ffe8000", + "0xefffffffffffffdeffffffffffffffff", + "0x480280037ffb7fff", + "0x400280047ffb7ffb", + "0x402480017fff7ffb", + "0xffffffffffffffffffffffffffffffff", + "0x20680017fff7fff", + "0x43", + "0x402780017fff7fff", "0x1", - "0x48127ffc7fff8000", - "0x482680017ffa8000", + "0x400280027ffb7ffe", + "0x482480017ffe8000", + "0xffffffffffffffff0000000000000000", + "0x400280037ffb7fff", + "0x482480017ffa8000", "0x1", - "0x480a7ffb7fff8000", - "0x480a7ffc7fff8000", - "0x482680017ffd8000", + "0x48127ffa7fff8000", + "0x48307ffe80007fff", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0x2d", + "0x480080007ffd8000", + "0xa0680017fff8000", + "0x12", + "0x4824800180007ffe", + "0x100000000", + "0x4844800180008002", + "0x8000000000000110000000000000000", + "0x4830800080017ffe", + "0x480280047ffb7fff", + "0x482480017ffe8000", + "0xefffffffffffffde00000000ffffffff", + "0x480280057ffb7fff", + "0x400280067ffb7ffb", + "0x402480017fff7ffb", + "0xffffffffffffffffffffffffffffffff", + "0x20680017fff7fff", + "0x15", + "0x402780017fff7fff", "0x1", - "0x1104800180018000", - "0x800000000000010ffffffffffffffffffffffffffffffffffffffffffffffe7", - "0x208b7fff7fff7ffe", - "0x482680017ff88000", + "0x400280047ffb7ffe", + "0x482480017ffe8000", + "0xffffffffffffffffffffffff00000000", + "0x400280057ffb7fff", + "0x40780017fff7fff", + "0x5", + "0x482680017ffb8000", + "0x6", + "0x482480017ff48000", "0x1", - "0x482480017ffd8000", - "0x8de", + "0x48127ff47fff8000", "0x480680017fff8000", "0x0", - "0x480a7ffc7fff8000", - "0x480a7ffd7fff8000", + "0x48127fe87fff8000", + "0x48127fed7fff8000", + "0x48127ff27fff8000", "0x208b7fff7fff7ffe", - "0x1104800180018000", - "0x800000000000010fffffffffffffffffffffffffffffffffffffffffffffa4c", - "0x482680017ff88000", - "0x1", - "0x480a7ff97fff8000", - "0x480680017fff8000", + "0x482680017ffb8000", + "0x7", + "0x482480017ff48000", "0x1", - "0x48127ffb7fff8000", - "0x48127ffb7fff8000", - "0x208b7fff7fff7ffe", - "0x48297ffc80007ffd", - "0x20680017fff7fff", + "0x48127ff47fff8000", + "0x10780017fff7fff", + "0x29", + "0x40780017fff7fff", + "0x8", + "0x482680017ffb8000", "0x4", + "0x48127ff47fff8000", + "0x48127ff47fff8000", "0x10780017fff7fff", - "0xa8", + "0x21", + "0x40780017fff7fff", + "0x6", + "0x482680017ffb8000", + "0x5", + "0x482480017fee8000", + "0x1", + "0x48127fee7fff8000", + "0x10780017fff7fff", + "0x18", + "0x40780017fff7fff", + "0xe", + "0x482680017ffb8000", + "0x2", + "0x48127fee7fff8000", + "0x48127fee7fff8000", + "0x10780017fff7fff", + "0x10", + "0x40780017fff7fff", + "0xc", + "0x482680017ffb8000", + "0x3", "0x482680017ffc8000", "0x1", "0x480a7ffd7fff8000", - "0x480280007ffc8000", - "0x20680017fff7fff", - "0x22", + "0x10780017fff7fff", + "0x7", + "0x40780017fff7fff", + "0x14", "0x480a7ffb7fff8000", - "0x48127ffc7fff8000", - "0x48127ffc7fff8000", - "0x1104800180018000", - "0x800000000000010fffffffffffffffffffffffffffffffffffffffffffffaf6", - "0x20680017fff7ffc", - "0xd", - "0x48127ff97fff8000", - "0x48127ff97fff8000", - "0x48127ff97fff8000", - "0x480680017fff8000", - "0x0", - "0x480680017fff8000", - "0x0", - "0x48127ff87fff8000", - "0x48127ff87fff8000", - "0x48127ff87fff8000", - "0x208b7fff7fff7ffe", - "0x48127ff97fff8000", - "0x48127ff97fff8000", - "0x48127ff97fff8000", + "0x480a7ffc7fff8000", + "0x480a7ffd7fff8000", "0x480680017fff8000", "0x1", "0x480680017fff8000", @@ -5111,21 +7590,13 @@ "0x0", "0x480680017fff8000", "0x0", - "0x480680017fff8000", - "0x0", "0x208b7fff7fff7ffe", - "0x40780017fff7fff", - "0x11", - "0x4824800180007fee", - "0x1", - "0x20680017fff7fff", - "0x6c", - "0x48307feb80007fec", + "0x48297ffc80007ffd", "0x20680017fff7fff", "0x4", "0x10780017fff7fff", - "0x60", - "0x480080007fea8000", + "0x6b", + "0x480280007ffc8000", "0xa0680017fff8000", "0x12", "0x4824800180007ffe", @@ -5141,109 +7612,97 @@ "0x402480017fff7ffb", "0xffffffffffffffffffffffffffffffff", "0x20680017fff7fff", - "0x46", + "0x51", "0x402780017fff7fff", "0x1", "0x400280007ffb7ffe", "0x482480017ffe8000", "0xffffffffffffffffffffffffffff0000", "0x400280017ffb7fff", - "0x482480017fe78000", + "0x482680017ffc8000", "0x1", - "0x48127fe77fff8000", + "0x480a7ffd7fff8000", "0x48307ffe80007fff", "0x20680017fff7fff", "0x4", "0x10780017fff7fff", - "0x30", + "0x3b", "0x480080007ffd8000", "0xa0680017fff8000", "0x12", "0x4824800180007ffe", - "0x10000", + "0x100", "0x4844800180008002", "0x8000000000000110000000000000000", "0x4830800080017ffe", "0x480280027ffb7fff", "0x482480017ffe8000", - "0xefffffffffffffde000000000000ffff", + "0xefffffffffffffde00000000000000ff", "0x480280037ffb7fff", "0x400280047ffb7ffb", "0x402480017fff7ffb", "0xffffffffffffffffffffffffffffffff", "0x20680017fff7fff", - "0x18", + "0x21", "0x402780017fff7fff", "0x1", "0x400280027ffb7ffe", "0x482480017ffe8000", - "0xffffffffffffffffffffffffffff0000", + "0xffffffffffffffffffffffffffffff00", "0x400280037ffb7fff", - "0x40780017fff7fff", - "0x5", "0x482680017ffb8000", "0x4", - "0x482480017ff48000", - "0x1", - "0x48127ff47fff8000", - "0x480680017fff8000", - "0x0", - "0x480680017fff8000", + "0x482480017ff98000", "0x1", + "0x48127ff97fff8000", + "0x1104800180018000", + "0x832", + "0x20680017fff7ffc", + "0xd", + "0x48127ff97fff8000", + "0x48127ff97fff8000", + "0x48127ff97fff8000", "0x480680017fff8000", "0x0", - "0x48127fec7fff8000", - "0x48127ff17fff8000", + "0x48127fd27fff8000", + "0x48127fd77fff8000", + "0x48127ff77fff8000", + "0x48127ff77fff8000", + "0x48127ff77fff8000", "0x208b7fff7fff7ffe", + "0x48127ff97fff8000", + "0x48127ff97fff8000", + "0x48127ff97fff8000", + "0x10780017fff7fff", + "0x21", + "0x40780017fff7fff", + "0x1c", "0x482680017ffb8000", "0x5", - "0x482480017ff48000", + "0x482480017fd88000", "0x1", - "0x48127ff47fff8000", + "0x48127fd87fff8000", "0x10780017fff7fff", - "0x2f", - "0x40780017fff7fff", "0x8", + "0x40780017fff7fff", + "0x24", "0x482680017ffb8000", "0x2", - "0x48127ff47fff8000", - "0x48127ff47fff8000", + "0x48127fd87fff8000", + "0x48127fd87fff8000", "0x10780017fff7fff", - "0x27", + "0x10", "0x40780017fff7fff", - "0x6", + "0x22", "0x482680017ffb8000", "0x3", - "0x482480017fdb8000", + "0x482680017ffc8000", "0x1", - "0x48127fdb7fff8000", - "0x10780017fff7fff", - "0x1e", - "0x40780017fff7fff", - "0xe", - "0x480a7ffb7fff8000", - "0x48127fdb7fff8000", - "0x48127fdb7fff8000", + "0x480a7ffd7fff8000", "0x10780017fff7fff", - "0x17", - "0x40780017fff7fff", - "0xf", - "0x480a7ffb7fff8000", - "0x48127fdb7fff8000", - "0x48127fdb7fff8000", - "0x480680017fff8000", - "0x1", - "0x480680017fff8000", - "0x0", - "0x480680017fff8000", - "0x0", - "0x480680017fff8000", - "0x0", - "0x480680017fff8000", - "0x0", - "0x208b7fff7fff7ffe", + "0x7", "0x40780017fff7fff", - "0x24", + "0x2a", "0x480a7ffb7fff8000", "0x480a7ffc7fff8000", "0x480a7ffd7fff8000", @@ -5257,105 +7716,85 @@ "0x0", "0x480680017fff8000", "0x0", + "0x480680017fff8000", + "0x0", "0x208b7fff7fff7ffe", + "0x40780017fff7fff", + "0x1", "0x48297ffc80007ffd", "0x20680017fff7fff", "0x4", "0x10780017fff7fff", - "0x8e", - "0x480280007ffc8000", + "0x72", + "0x400380007ffc8000", + "0xa0680017fff8000", + "0x12", + "0x4825800180008000", + "0x10000", + "0x4844800180008002", + "0x8000000000000110000000000000000", + "0x4830800080017ffe", + "0x480280007ffa7fff", + "0x482480017ffe8000", + "0xefffffffffffffde000000000000ffff", + "0x480280017ffa7fff", + "0x400280027ffa7ffb", + "0x402480017fff7ffb", + "0xffffffffffffffffffffffffffffffff", "0x20680017fff7fff", - "0x34", - "0x480a7ffa7fff8000", - "0x480a7ffb7fff8000", + "0x58", + "0x402780017fff7fff", + "0x1", + "0x400380007ffa8000", + "0x4826800180008000", + "0xffffffffffffffffffffffffffff0000", + "0x400280017ffa7fff", "0x482680017ffc8000", "0x1", "0x480a7ffd7fff8000", - "0x1104800180018000", - "0x690", - "0x20680017fff7ff9", - "0x1a", - "0x20680017fff7ffc", - "0x11", - "0x48127ff77fff8000", - "0x482480017ff78000", - "0x258", - "0x480680017fff8000", - "0x0", - "0x48127ff77fff8000", - "0x48127ff77fff8000", - "0x480680017fff8000", - "0x0", - "0x480680017fff8000", - "0x0", - "0x48127ff67fff8000", - "0x48127ff67fff8000", - "0x48127ff67fff8000", - "0x208b7fff7fff7ffe", - "0x48127ff77fff8000", - "0x482480017ff78000", - "0x64", - "0x48127ff87fff8000", - "0x48127ff87fff8000", + "0x48307ffe80007fff", + "0x20680017fff7fff", + "0x4", "0x10780017fff7fff", "0x35", - "0x48127ff77fff8000", - "0x48127ff77fff8000", - "0x480680017fff8000", - "0x1", - "0x480680017fff8000", - "0x0", - "0x480680017fff8000", - "0x0", - "0x480680017fff8000", - "0x0", - "0x480680017fff8000", - "0x0", - "0x480680017fff8000", - "0x0", - "0x48127ff67fff8000", - "0x48127ff67fff8000", - "0x208b7fff7fff7ffe", - "0x4824800180007fff", + "0x40780017fff7fff", "0x1", - "0x20680017fff7fff", - "0x42", - "0x480a7ffa7fff8000", + "0x482680017ffa8000", + "0x2", "0x480a7ffb7fff8000", - "0x482680017ffc8000", + "0x482480017ffa8000", "0x1", - "0x480a7ffd7fff8000", - "0x1104800180018000", - "0x755", - "0x20680017fff7ff9", - "0x28", - "0x20680017fff7ffc", - "0x11", - "0x48127ff77fff8000", - "0x482480017ff78000", - "0x190", + "0x48127ffa7fff8000", + "0x48127ffb7fff8000", + "0x48127ffa7fff8000", + "0x480080007ff68000", + "0x1104800180018000", + "0x85f", + "0x20680017fff7ffa", + "0x17", + "0x20680017fff7ffd", + "0xf", + "0x48127ff87fff8000", + "0x482480017ff88000", + "0x1f4", "0x480680017fff8000", "0x0", - "0x48127ff77fff8000", - "0x48127ff77fff8000", + "0x48127ff87fff8000", + "0x48127ff87fff8000", "0x480680017fff8000", "0x0", - "0x480680017fff8000", - "0x1", - "0x48127ff67fff8000", - "0x48127ff67fff8000", - "0x48127ff67fff8000", - "0x208b7fff7fff7ffe", + "0x480a80007fff8000", "0x48127ff77fff8000", "0x48127ff77fff8000", + "0x208b7fff7fff7ffe", + "0x48127ff87fff8000", + "0x48127ff87fff8000", + "0x48127ff97fff8000", + "0x48127ff97fff8000", + "0x10780017fff7fff", + "0x17", "0x48127ff87fff8000", "0x48127ff87fff8000", - "0x48127ffc7fff8000", - "0x48127ffc7fff8000", - "0x480680017fff8000", - "0x0", - "0x48127ffb7fff8000", - "0x48127ffb7fff8000", "0x480680017fff8000", "0x1", "0x480680017fff8000", @@ -5366,54 +7805,52 @@ "0x0", "0x480680017fff8000", "0x0", - "0x208b7fff7fff7ffe", "0x48127ff77fff8000", "0x48127ff77fff8000", - "0x480680017fff8000", - "0x1", + "0x208b7fff7fff7ffe", + "0x482680017ffa8000", + "0x2", + "0x482680017ffb8000", + "0xd2a", + "0x48127ffb7fff8000", + "0x48127ffb7fff8000", + "0x48127ffc7fff8000", + "0x48127ffc7fff8000", "0x480680017fff8000", "0x0", + "0x48127ffb7fff8000", + "0x48127ffb7fff8000", "0x480680017fff8000", - "0x0", + "0x1", "0x480680017fff8000", "0x0", "0x480680017fff8000", "0x0", "0x480680017fff8000", "0x0", - "0x48127ff67fff8000", - "0x48127ff67fff8000", "0x208b7fff7fff7ffe", - "0x480a7ffa7fff8000", + "0x482680017ffa8000", + "0x3", "0x482680017ffb8000", - "0x1c8e", - "0x480680017fff8000", - "0x0", + "0xc1c", "0x482680017ffc8000", "0x1", "0x480a7ffd7fff8000", - "0x480680017fff8000", - "0x1", - "0x480680017fff8000", - "0x0", - "0x480680017fff8000", - "0x0", - "0x480680017fff8000", - "0x0", - "0x480680017fff8000", - "0x0", - "0x208b7fff7fff7ffe", + "0x10780017fff7fff", + "0x7", "0x480a7ffa7fff8000", "0x482680017ffb8000", - "0x1dba", - "0x480680017fff8000", - "0x0", + "0x1130", "0x480a7ffc7fff8000", "0x480a7ffd7fff8000", - "0x480680017fff8000", - "0x1", + "0x48127ffc7fff8000", + "0x48127ffc7fff8000", "0x480680017fff8000", "0x0", + "0x48127ffb7fff8000", + "0x48127ffb7fff8000", + "0x480680017fff8000", + "0x1", "0x480680017fff8000", "0x0", "0x480680017fff8000", @@ -5425,33 +7862,117 @@ "0x20680017fff7fff", "0x4", "0x10780017fff7fff", - "0x72", + "0x6b", + "0x480280007ffc8000", + "0xa0680017fff8000", + "0x12", + "0x4824800180007ffe", + "0x10000", + "0x4844800180008002", + "0x8000000000000110000000000000000", + "0x4830800080017ffe", + "0x480280007ffb7fff", + "0x482480017ffe8000", + "0xefffffffffffffde000000000000ffff", + "0x480280017ffb7fff", + "0x400280027ffb7ffb", + "0x402480017fff7ffb", + "0xffffffffffffffffffffffffffffffff", + "0x20680017fff7fff", + "0x51", + "0x402780017fff7fff", + "0x1", + "0x400280007ffb7ffe", + "0x482480017ffe8000", + "0xffffffffffffffffffffffffffff0000", + "0x400280017ffb7fff", "0x482680017ffc8000", "0x1", "0x480a7ffd7fff8000", - "0x480280007ffc8000", + "0x48307ffe80007fff", "0x20680017fff7fff", - "0x1f", - "0x480a7ffb7fff8000", - "0x48127ffc7fff8000", - "0x48127ffc7fff8000", + "0x4", + "0x10780017fff7fff", + "0x3b", + "0x480080007ffd8000", + "0xa0680017fff8000", + "0x12", + "0x4824800180007ffe", + "0x10000", + "0x4844800180008002", + "0x8000000000000110000000000000000", + "0x4830800080017ffe", + "0x480280027ffb7fff", + "0x482480017ffe8000", + "0xefffffffffffffde000000000000ffff", + "0x480280037ffb7fff", + "0x400280047ffb7ffb", + "0x402480017fff7ffb", + "0xffffffffffffffffffffffffffffffff", + "0x20680017fff7fff", + "0x21", + "0x402780017fff7fff", + "0x1", + "0x400280027ffb7ffe", + "0x482480017ffe8000", + "0xffffffffffffffffffffffffffff0000", + "0x400280037ffb7fff", + "0x482680017ffb8000", + "0x4", + "0x482480017ff98000", + "0x1", + "0x48127ff97fff8000", "0x1104800180018000", - "0x800000000000010fffffffffffffffffffffffffffffffffffffffffffffb82", - "0x20680017fff7ffd", - "0xc", - "0x48127ffa7fff8000", - "0x48127ffa7fff8000", - "0x48127ffa7fff8000", - "0x480680017fff8000", - "0x0", + "0x835", + "0x20680017fff7ffc", + "0xd", + "0x48127ff97fff8000", + "0x48127ff97fff8000", + "0x48127ff97fff8000", "0x480680017fff8000", "0x0", + "0x48127fd27fff8000", + "0x48127fd77fff8000", + "0x48127ff77fff8000", + "0x48127ff77fff8000", + "0x48127ff77fff8000", + "0x208b7fff7fff7ffe", "0x48127ff97fff8000", "0x48127ff97fff8000", - "0x208b7fff7fff7ffe", - "0x48127ffa7fff8000", - "0x48127ffa7fff8000", - "0x48127ffa7fff8000", + "0x48127ff97fff8000", + "0x10780017fff7fff", + "0x21", + "0x40780017fff7fff", + "0x1c", + "0x482680017ffb8000", + "0x5", + "0x482480017fd88000", + "0x1", + "0x48127fd87fff8000", + "0x10780017fff7fff", + "0x8", + "0x40780017fff7fff", + "0x24", + "0x482680017ffb8000", + "0x2", + "0x48127fd87fff8000", + "0x48127fd87fff8000", + "0x10780017fff7fff", + "0x10", + "0x40780017fff7fff", + "0x22", + "0x482680017ffb8000", + "0x3", + "0x482680017ffc8000", + "0x1", + "0x480a7ffd7fff8000", + "0x10780017fff7fff", + "0x7", + "0x40780017fff7fff", + "0x2a", + "0x480a7ffb7fff8000", + "0x480a7ffc7fff8000", + "0x480a7ffd7fff8000", "0x480680017fff8000", "0x1", "0x480680017fff8000", @@ -5460,86 +7981,155 @@ "0x0", "0x480680017fff8000", "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", "0x208b7fff7fff7ffe", - "0x40780017fff7fff", - "0xf", - "0x4824800180007ff0", - "0x1", + "0x48297ffc80007ffd", "0x20680017fff7fff", - "0x3b", - "0x48307fed80007fee", + "0x4", + "0x10780017fff7fff", + "0x8b", + "0x480280007ffc8000", + "0xa0680017fff8000", + "0x12", + "0x4824800180007ffe", + "0x100000000", + "0x4844800180008002", + "0x8000000000000110000000000000000", + "0x4830800080017ffe", + "0x480280007ffb7fff", + "0x482480017ffe8000", + "0xefffffffffffffde00000000ffffffff", + "0x480280017ffb7fff", + "0x400280027ffb7ffb", + "0x402480017fff7ffb", + "0xffffffffffffffffffffffffffffffff", + "0x20680017fff7fff", + "0x71", + "0x402780017fff7fff", + "0x1", + "0x400280007ffb7ffe", + "0x482480017ffe8000", + "0xffffffffffffffffffffffff00000000", + "0x400280017ffb7fff", + "0x482680017ffc8000", + "0x1", + "0x480a7ffd7fff8000", + "0x48307ffe80007fff", "0x20680017fff7fff", "0x4", "0x10780017fff7fff", - "0x2f", - "0x480080007fec8000", + "0x5b", + "0x480080007ffd8000", + "0x20680017fff7fff", + "0x3e", + "0x482480017ffc8000", + "0x1", + "0x48127ffc7fff8000", + "0x48307ffe80007fff", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0x2e", + "0x480080007ffd8000", "0xa0680017fff8000", "0x12", "0x4824800180007ffe", - "0x100000000", + "0x100", "0x4844800180008002", "0x8000000000000110000000000000000", "0x4830800080017ffe", - "0x480280007ffb7fff", + "0x480280027ffb7fff", "0x482480017ffe8000", - "0xefffffffffffffde00000000ffffffff", - "0x480280017ffb7fff", - "0x400280027ffb7ffb", + "0xefffffffffffffde00000000000000ff", + "0x480280037ffb7fff", + "0x400280047ffb7ffb", "0x402480017fff7ffb", "0xffffffffffffffffffffffffffffffff", "0x20680017fff7fff", - "0x17", + "0x16", "0x402780017fff7fff", "0x1", - "0x400280007ffb7ffe", + "0x400280027ffb7ffe", "0x482480017ffe8000", - "0xffffffffffffffffffffffff00000000", - "0x400280017ffb7fff", + "0xffffffffffffffffffffffffffffff00", + "0x400280037ffb7fff", "0x40780017fff7fff", "0x5", "0x482680017ffb8000", - "0x2", - "0x482480017fe38000", + "0x4", + "0x482480017ff48000", "0x1", - "0x48127fe37fff8000", + "0x48127ff47fff8000", "0x480680017fff8000", "0x0", - "0x480680017fff8000", - "0x1", + "0x48127fea7fff8000", "0x480680017fff8000", "0x0", "0x48127ff27fff8000", "0x208b7fff7fff7ffe", "0x482680017ffb8000", - "0x3", - "0x482480017fe38000", + "0x5", + "0x482480017ff48000", "0x1", - "0x48127fe37fff8000", + "0x48127ff47fff8000", "0x10780017fff7fff", - "0x1c", + "0x2a", "0x40780017fff7fff", "0x8", - "0x480a7ffb7fff8000", - "0x48127fe37fff8000", - "0x48127fe37fff8000", + "0x482680017ffb8000", + "0x2", + "0x48127ff47fff8000", + "0x48127ff47fff8000", "0x10780017fff7fff", - "0x15", + "0x22", "0x40780017fff7fff", - "0x9", - "0x480a7ffb7fff8000", - "0x48127fe37fff8000", - "0x48127fe37fff8000", - "0x480680017fff8000", + "0xa", + "0x4824800180007ff5", + "0x1", + "0x20680017fff7fff", + "0xf", + "0x482680017ffb8000", + "0x2", + "0x482480017ff08000", "0x1", + "0x48127ff07fff8000", "0x480680017fff8000", "0x0", + "0x48127fea7fff8000", "0x480680017fff8000", - "0x0", + "0x1", "0x480680017fff8000", "0x0", "0x208b7fff7fff7ffe", + "0x482680017ffb8000", + "0x2", + "0x482480017ff08000", + "0x1", + "0x48127ff07fff8000", + "0x10780017fff7fff", + "0x18", "0x40780017fff7fff", - "0x1c", + "0xc", + "0x482680017ffb8000", + "0x2", + "0x48127ff07fff8000", + "0x48127ff07fff8000", + "0x10780017fff7fff", + "0x10", + "0x40780017fff7fff", + "0xa", + "0x482680017ffb8000", + "0x3", + "0x482680017ffc8000", + "0x1", + "0x480a7ffd7fff8000", + "0x10780017fff7fff", + "0x7", + "0x40780017fff7fff", + "0x12", "0x480a7ffb7fff8000", "0x480a7ffc7fff8000", "0x480a7ffd7fff8000", @@ -5556,12 +8146,12 @@ "0x20680017fff7fff", "0x4", "0x10780017fff7fff", - "0xbd", + "0x8c", "0x480280007ffc8000", "0x20680017fff7fff", - "0x40", + "0x3e", "0x40780017fff7fff", - "0x5", + "0x1", "0x482680017ffc8000", "0x1", "0x480a7ffd7fff8000", @@ -5569,7 +8159,7 @@ "0x20680017fff7fff", "0x4", "0x10780017fff7fff", - "0x2f", + "0x2d", "0x480080007ffd8000", "0xa0680017fff8000", "0x12", @@ -5586,7 +8176,7 @@ "0x402480017fff7ffb", "0xffffffffffffffffffffffffffffffff", "0x20680017fff7fff", - "0x17", + "0x15", "0x402780017fff7fff", "0x1", "0x400280007ffb7ffe", @@ -5604,9 +8194,7 @@ "0x0", "0x480680017fff8000", "0x0", - "0x480680017fff8000", - "0x0", - "0x48127ff27fff8000", + "0x48127ff37fff8000", "0x208b7fff7fff7ffe", "0x482680017ffb8000", "0x3", @@ -5614,18 +8202,18 @@ "0x1", "0x48127ff47fff8000", "0x10780017fff7fff", - "0x88", + "0x59", "0x40780017fff7fff", "0x8", "0x480a7ffb7fff8000", "0x48127ff47fff8000", "0x48127ff47fff8000", "0x10780017fff7fff", - "0x81", + "0x52", "0x4824800180007fff", "0x1", "0x20680017fff7fff", - "0x69", + "0x3c", "0x482680017ffc8000", "0x1", "0x480a7ffd7fff8000", @@ -5633,40 +8221,29 @@ "0x20680017fff7fff", "0x4", "0x10780017fff7fff", - "0x5a", - "0x480080007ffd8000", - "0x20680017fff7fff", - "0x3e", - "0x482480017ffc8000", - "0x1", - "0x48127ffc7fff8000", - "0x48307ffe80007fff", - "0x20680017fff7fff", - "0x4", - "0x10780017fff7fff", - "0x2f", + "0x2d", "0x480080007ffd8000", "0xa0680017fff8000", "0x12", "0x4824800180007ffe", - "0x100000000", + "0x10000000000000000", "0x4844800180008002", "0x8000000000000110000000000000000", "0x4830800080017ffe", "0x480280007ffb7fff", "0x482480017ffe8000", - "0xefffffffffffffde00000000ffffffff", + "0xefffffffffffffdeffffffffffffffff", "0x480280017ffb7fff", "0x400280027ffb7ffb", "0x402480017fff7ffb", "0xffffffffffffffffffffffffffffffff", "0x20680017fff7fff", - "0x17", + "0x15", "0x402780017fff7fff", "0x1", "0x400280007ffb7ffe", "0x482480017ffe8000", - "0xffffffffffffffffffffffff00000000", + "0xffffffffffffffff0000000000000000", "0x400280017ffb7fff", "0x40780017fff7fff", "0x5", @@ -5679,9 +8256,7 @@ "0x0", "0x480680017fff8000", "0x1", - "0x480680017fff8000", - "0x0", - "0x48127ff27fff8000", + "0x48127ff37fff8000", "0x208b7fff7fff7ffe", "0x482680017ffb8000", "0x3", @@ -5689,52 +8264,133 @@ "0x1", "0x48127ff47fff8000", "0x10780017fff7fff", - "0x27", + "0x1b", "0x40780017fff7fff", "0x8", "0x480a7ffb7fff8000", "0x48127ff47fff8000", "0x48127ff47fff8000", "0x10780017fff7fff", - "0x20", + "0x14", "0x40780017fff7fff", - "0xa", - "0x4824800180007ff5", - "0x1", - "0x20680017fff7fff", - "0xf", + "0xb", "0x480a7ffb7fff8000", - "0x482480017ff08000", + "0x482680017ffc8000", + "0x1", + "0x480a7ffd7fff8000", + "0x480680017fff8000", "0x1", - "0x48127ff07fff8000", "0x480680017fff8000", "0x0", "0x480680017fff8000", - "0x1", + "0x0", + "0x208b7fff7fff7ffe", + "0x40780017fff7fff", + "0xd", + "0x480a7ffb7fff8000", + "0x480a7ffc7fff8000", + "0x480a7ffd7fff8000", "0x480680017fff8000", "0x1", "0x480680017fff8000", "0x0", + "0x480680017fff8000", + "0x0", "0x208b7fff7fff7ffe", + "0x480a7ffa7fff8000", "0x480a7ffb7fff8000", - "0x482480017ff08000", - "0x1", - "0x48127ff07fff8000", + "0x480a7ffc7fff8000", + "0x480a7ffd7fff8000", + "0x1104800180018000", + "0x7a", + "0x20680017fff7ff8", + "0x65", + "0x20680017fff7ffb", + "0x4f", + "0x48307ff980007ffa", + "0x20680017fff7fff", + "0x4", "0x10780017fff7fff", - "0x1d", - "0x40780017fff7fff", - "0xc", - "0x480a7ffb7fff8000", - "0x48127ff07fff8000", + "0x32", + "0x480080007ff88000", + "0xa0680017fff8004", + "0xe", + "0x4824800180047ffe", + "0x100000000000000000000000000000000000000000000000000000000000000", + "0x484480017ffe8000", + "0x7000000000000110000000000000000", + "0x48307ffe7fff8002", + "0x480080007ff07ffc", + "0x480080017fef7ffc", + "0x402480017ffb7ffd", + "0xf8ffffffffffffeeffffffffffffffff", + "0x400080027fee7ffd", + "0x10780017fff7fff", + "0x1b", + "0x484480017fff8001", + "0x1000000000000000000000000000000", + "0x48307fff80007ffd", + "0x480080007ff17ffd", + "0x480080017ff07ffd", + "0x402480017ffc7ffe", + "0xff000000000000000000000000000000", + "0x400080027fef7ffe", + "0x482480017fef8000", + "0x3", + "0x482480017fef8000", + "0x2bc", + "0x480680017fff8000", + "0x0", + "0x482480017fef8000", + "0x1", + "0x48127fef7fff8000", + "0x480680017fff8000", + "0x0", + "0x48127fef7fff8000", + "0x48127fef7fff8000", + "0x48127fef7fff8000", + "0x48127fef7fff8000", "0x48127ff07fff8000", + "0x208b7fff7fff7ffe", + "0x482480017fee8000", + "0x3", + "0x48127fee7fff8000", + "0x482480017fef8000", + "0x1", + "0x48127fef7fff8000", "0x10780017fff7fff", - "0x16", - "0x40780017fff7fff", - "0xf", - "0x480a7ffb7fff8000", - "0x482680017ffc8000", + "0x7", + "0x48127ff57fff8000", + "0x482480017ff58000", + "0x4ba", + "0x48127ff67fff8000", + "0x48127ff67fff8000", + "0x48127ffc7fff8000", + "0x48127ffc7fff8000", + "0x480680017fff8000", + "0x0", + "0x48127ffb7fff8000", + "0x48127ffb7fff8000", + "0x480680017fff8000", "0x1", - "0x480a7ffd7fff8000", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x208b7fff7fff7ffe", + "0x48127ff67fff8000", + "0x482480017ff68000", + "0x776", + "0x480680017fff8000", + "0x0", + "0x48127ff67fff8000", + "0x48127ff67fff8000", "0x480680017fff8000", "0x1", "0x480680017fff8000", @@ -5743,40 +8399,88 @@ "0x0", "0x480680017fff8000", "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", "0x208b7fff7fff7ffe", - "0x40780017fff7fff", - "0x11", - "0x480a7ffb7fff8000", - "0x480a7ffc7fff8000", - "0x480a7ffd7fff8000", + "0x48127ff67fff8000", + "0x48127ff67fff8000", + "0x480680017fff8000", + "0x1", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", "0x480680017fff8000", - "0x1", + "0x0", "0x480680017fff8000", "0x0", "0x480680017fff8000", "0x0", "0x480680017fff8000", "0x0", + "0x48127ff57fff8000", + "0x48127ff57fff8000", "0x208b7fff7fff7ffe", "0x48297ffc80007ffd", "0x20680017fff7fff", "0x4", "0x10780017fff7fff", - "0xc1", - "0x480280007ffc8000", - "0x20680017fff7fff", - "0x40", - "0x40780017fff7fff", - "0x7", + "0x2ea", "0x482680017ffc8000", "0x1", "0x480a7ffd7fff8000", - "0x48307ffe80007fff", + "0x480280007ffc8000", + "0xa0680017fff8000", + "0x12", + "0x4824800180007ffe", + "0x9", + "0x4844800180008002", + "0x8000000000000110000000000000000", + "0x4830800080017ffe", + "0x480280007ffa7fff", + "0x482480017ffe8000", + "0xefffffffffffffde0000000000000008", + "0x480280017ffa7fff", + "0x400280027ffa7ffb", + "0x402480017fff7ffb", + "0xffffffffffffffffffffffffffffffff", + "0x20680017fff7fff", + "0x2c3", + "0x402780017fff7fff", + "0x1", + "0x400280007ffa7ffe", + "0x482480017ffe8000", + "0xfffffffffffffffffffffffffffffff7", + "0x400280017ffa7fff", + "0x4824800180007ffd", + "0x400000000000008800000000000000000000000000000000000000000000009", + "0x484480017fff8000", + "0x800000000000010ffffffffffffffffffffffffffffffffffffffffffffffff", + "0x1137fff7fff7fff", + "0x10780017fff7fff", + "0x2a3", + "0x10780017fff7fff", + "0x273", + "0x10780017fff7fff", + "0x1fd", + "0x10780017fff7fff", + "0x18b", + "0x10780017fff7fff", + "0x143", + "0x10780017fff7fff", + "0xd2", + "0x10780017fff7fff", + "0xb3", + "0x10780017fff7fff", + "0x42", + "0x48307ff980007ffa", "0x20680017fff7fff", "0x4", "0x10780017fff7fff", - "0x2f", - "0x480080007ffd8000", + "0x35", + "0x480080007ff88000", "0xa0680017fff8000", "0x12", "0x4824800180007ffe", @@ -5784,63 +8488,63 @@ "0x4844800180008002", "0x8000000000000110000000000000000", "0x4830800080017ffe", - "0x480280007ffb7fff", + "0x480280027ffa7fff", "0x482480017ffe8000", "0xefffffffffffffde00000000000000ff", - "0x480280017ffb7fff", - "0x400280027ffb7ffb", + "0x480280037ffa7fff", + "0x400280047ffa7ffb", "0x402480017fff7ffb", "0xffffffffffffffffffffffffffffffff", "0x20680017fff7fff", - "0x17", + "0x1b", "0x402780017fff7fff", "0x1", - "0x400280007ffb7ffe", + "0x400280027ffa7ffe", "0x482480017ffe8000", "0xffffffffffffffffffffffffffffff00", - "0x400280017ffb7fff", - "0x40780017fff7fff", - "0x5", + "0x400280037ffa7fff", + "0x482680017ffa8000", + "0x4", "0x482680017ffb8000", - "0x2", - "0x482480017ff48000", + "0x10d6", + "0x480680017fff8000", + "0x0", + "0x482480017ff28000", "0x1", - "0x48127ff47fff8000", + "0x48127ff27fff8000", "0x480680017fff8000", "0x0", "0x480680017fff8000", + "0x11", + "0x480680017fff8000", "0x0", "0x480680017fff8000", "0x0", - "0x48127ff27fff8000", + "0x48127ff47fff8000", "0x208b7fff7fff7ffe", + "0x482680017ffa8000", + "0x5", "0x482680017ffb8000", - "0x3", - "0x482480017ff48000", + "0xc44", + "0x482480017fee8000", "0x1", - "0x48127ff47fff8000", + "0x48127fee7fff8000", "0x10780017fff7fff", - "0x8c", - "0x40780017fff7fff", - "0x8", - "0x480a7ffb7fff8000", - "0x48127ff47fff8000", - "0x48127ff47fff8000", + "0x288", + "0x482680017ffa8000", + "0x2", + "0x482680017ffb8000", + "0x10fe", + "0x48127ff67fff8000", + "0x48127ff67fff8000", "0x10780017fff7fff", - "0x85", - "0x4824800180007fff", - "0x1", - "0x20680017fff7fff", - "0x6d", - "0x482680017ffc8000", - "0x1", - "0x480a7ffd7fff8000", - "0x48307ffe80007fff", + "0x280", + "0x48307ff980007ffa", "0x20680017fff7fff", "0x4", "0x10780017fff7fff", - "0x5e", - "0x480080007ffd8000", + "0x64", + "0x480080007ff88000", "0xa0680017fff8000", "0x12", "0x4824800180007ffe", @@ -5848,29 +8552,29 @@ "0x4844800180008002", "0x8000000000000110000000000000000", "0x4830800080017ffe", - "0x480280007ffb7fff", + "0x480280027ffa7fff", "0x482480017ffe8000", "0xefffffffffffffdeffffffffffffffff", - "0x480280017ffb7fff", - "0x400280027ffb7ffb", + "0x480280037ffa7fff", + "0x400280047ffa7ffb", "0x402480017fff7ffb", "0xffffffffffffffffffffffffffffffff", "0x20680017fff7fff", - "0x44", + "0x4a", "0x402780017fff7fff", "0x1", - "0x400280007ffb7ffe", + "0x400280027ffa7ffe", "0x482480017ffe8000", "0xffffffffffffffff0000000000000000", - "0x400280017ffb7fff", - "0x482480017ffa8000", + "0x400280037ffa7fff", + "0x482480017ff58000", "0x1", - "0x48127ffa7fff8000", + "0x48127ff57fff8000", "0x48307ffe80007fff", "0x20680017fff7fff", "0x4", "0x10780017fff7fff", - "0x2e", + "0x34", "0x480080007ffd8000", "0xa0680017fff8000", "0x12", @@ -5879,162 +8583,138 @@ "0x4844800180008002", "0x8000000000000110000000000000000", "0x4830800080017ffe", - "0x480280027ffb7fff", + "0x480280047ffa7fff", "0x482480017ffe8000", "0xefffffffffffffde00000000ffffffff", - "0x480280037ffb7fff", - "0x400280047ffb7ffb", + "0x480280057ffa7fff", + "0x400280067ffa7ffb", "0x402480017fff7ffb", "0xffffffffffffffffffffffffffffffff", "0x20680017fff7fff", - "0x16", + "0x1a", "0x402780017fff7fff", "0x1", - "0x400280027ffb7ffe", + "0x400280047ffa7ffe", "0x482480017ffe8000", "0xffffffffffffffffffffffff00000000", - "0x400280037ffb7fff", - "0x40780017fff7fff", - "0x5", + "0x400280057ffa7fff", + "0x482680017ffa8000", + "0x6", "0x482680017ffb8000", - "0x4", - "0x482480017ff48000", + "0xc62", + "0x480680017fff8000", + "0x0", + "0x482480017ff78000", "0x1", - "0x48127ff47fff8000", + "0x48127ff77fff8000", "0x480680017fff8000", "0x0", "0x480680017fff8000", - "0x1", - "0x48127fed7fff8000", - "0x48127ff27fff8000", + "0xf", + "0x480680017fff8000", + "0x0", + "0x48127fef7fff8000", + "0x48127ff47fff8000", "0x208b7fff7fff7ffe", + "0x482680017ffa8000", + "0x7", "0x482680017ffb8000", - "0x5", - "0x482480017ff48000", + "0x7d0", + "0x482480017ff38000", "0x1", - "0x48127ff47fff8000", + "0x48127ff37fff8000", "0x10780017fff7fff", - "0x2e", - "0x40780017fff7fff", - "0x8", + "0x22a", + "0x482680017ffa8000", + "0x4", "0x482680017ffb8000", - "0x2", - "0x48127ff47fff8000", - "0x48127ff47fff8000", + "0xc8a", + "0x48127ffb7fff8000", + "0x48127ffb7fff8000", "0x10780017fff7fff", - "0x26", - "0x40780017fff7fff", - "0x6", + "0x222", + "0x482680017ffa8000", + "0x5", "0x482680017ffb8000", - "0x3", + "0xbe0", "0x482480017fee8000", "0x1", "0x48127fee7fff8000", "0x10780017fff7fff", - "0x1d", - "0x40780017fff7fff", - "0xe", - "0x480a7ffb7fff8000", - "0x48127fee7fff8000", - "0x48127fee7fff8000", + "0x219", + "0x482680017ffa8000", + "0x2", + "0x482680017ffb8000", + "0x109a", + "0x48127ff67fff8000", + "0x48127ff67fff8000", "0x10780017fff7fff", - "0x16", - "0x40780017fff7fff", + "0x211", + "0x482680017ffa8000", + "0x2", + "0x48127ff87fff8000", + "0x48127ff87fff8000", + "0x1104800180018000", + "0x5f7", + "0x20680017fff7ffc", "0x11", - "0x480a7ffb7fff8000", - "0x482680017ffc8000", - "0x1", - "0x480a7ffd7fff8000", - "0x480680017fff8000", - "0x1", + "0x48127ff97fff8000", + "0x482680017ffb8000", + "0x1f4", "0x480680017fff8000", "0x0", + "0x48127ff77fff8000", + "0x48127ff77fff8000", "0x480680017fff8000", "0x0", "0x480680017fff8000", - "0x0", + "0xd", + "0x48127ff67fff8000", + "0x48127ff67fff8000", + "0x48127ff67fff8000", "0x208b7fff7fff7ffe", - "0x40780017fff7fff", - "0x13", + "0x48127ff97fff8000", "0x480a7ffb7fff8000", - "0x480a7ffc7fff8000", - "0x480a7ffd7fff8000", - "0x480680017fff8000", - "0x1", - "0x480680017fff8000", - "0x0", - "0x480680017fff8000", - "0x0", - "0x480680017fff8000", - "0x0", - "0x208b7fff7fff7ffe", - "0x48297ffc80007ffd", - "0x20680017fff7fff", - "0x4", + "0x48127ff87fff8000", + "0x48127ff87fff8000", "0x10780017fff7fff", - "0x8d", - "0x480280007ffc8000", - "0xa0680017fff8000", - "0x12", - "0x4824800180007ffe", - "0x10000000000000000", - "0x4844800180008002", - "0x8000000000000110000000000000000", - "0x4830800080017ffe", - "0x480280007ffb7fff", - "0x482480017ffe8000", - "0xefffffffffffffdeffffffffffffffff", - "0x480280017ffb7fff", - "0x400280027ffb7ffb", - "0x402480017fff7ffb", - "0xffffffffffffffffffffffffffffffff", - "0x20680017fff7fff", - "0x73", - "0x402780017fff7fff", - "0x1", - "0x400280007ffb7ffe", - "0x482480017ffe8000", - "0xffffffffffffffff0000000000000000", - "0x400280017ffb7fff", - "0x482680017ffc8000", - "0x1", - "0x480a7ffd7fff8000", - "0x48307ffe80007fff", + "0x1b8", + "0x48307ff980007ffa", "0x20680017fff7fff", "0x4", "0x10780017fff7fff", - "0x5d", - "0x480080007ffd8000", + "0x64", + "0x480080007ff88000", "0xa0680017fff8000", "0x12", "0x4824800180007ffe", - "0x10000000000000000", + "0x100000000", "0x4844800180008002", "0x8000000000000110000000000000000", "0x4830800080017ffe", - "0x480280027ffb7fff", + "0x480280027ffa7fff", "0x482480017ffe8000", - "0xefffffffffffffdeffffffffffffffff", - "0x480280037ffb7fff", - "0x400280047ffb7ffb", + "0xefffffffffffffde00000000ffffffff", + "0x480280037ffa7fff", + "0x400280047ffa7ffb", "0x402480017fff7ffb", "0xffffffffffffffffffffffffffffffff", "0x20680017fff7fff", - "0x43", + "0x4a", "0x402780017fff7fff", "0x1", - "0x400280027ffb7ffe", + "0x400280027ffa7ffe", "0x482480017ffe8000", - "0xffffffffffffffff0000000000000000", - "0x400280037ffb7fff", - "0x482480017ffa8000", + "0xffffffffffffffffffffffff00000000", + "0x400280037ffa7fff", + "0x482480017ff58000", "0x1", - "0x48127ffa7fff8000", + "0x48127ff57fff8000", "0x48307ffe80007fff", "0x20680017fff7fff", "0x4", "0x10780017fff7fff", - "0x2d", + "0x34", "0x480080007ffd8000", "0xa0680017fff8000", "0x12", @@ -6043,80 +8723,120 @@ "0x4844800180008002", "0x8000000000000110000000000000000", "0x4830800080017ffe", - "0x480280047ffb7fff", + "0x480280047ffa7fff", "0x482480017ffe8000", "0xefffffffffffffde00000000ffffffff", - "0x480280057ffb7fff", - "0x400280067ffb7ffb", + "0x480280057ffa7fff", + "0x400280067ffa7ffb", "0x402480017fff7ffb", "0xffffffffffffffffffffffffffffffff", "0x20680017fff7fff", - "0x15", + "0x1a", "0x402780017fff7fff", "0x1", - "0x400280047ffb7ffe", + "0x400280047ffa7ffe", "0x482480017ffe8000", "0xffffffffffffffffffffffff00000000", - "0x400280057ffb7fff", - "0x40780017fff7fff", - "0x5", - "0x482680017ffb8000", + "0x400280057ffa7fff", + "0x482680017ffa8000", "0x6", - "0x482480017ff48000", + "0x482680017ffb8000", + "0xc62", + "0x480680017fff8000", + "0x0", + "0x482480017ff78000", "0x1", - "0x48127ff47fff8000", + "0x48127ff77fff8000", "0x480680017fff8000", "0x0", - "0x48127fe87fff8000", - "0x48127fed7fff8000", - "0x48127ff27fff8000", + "0x480680017fff8000", + "0xb", + "0x480680017fff8000", + "0x0", + "0x48127fef7fff8000", + "0x48127ff47fff8000", "0x208b7fff7fff7ffe", - "0x482680017ffb8000", + "0x482680017ffa8000", "0x7", - "0x482480017ff48000", + "0x482680017ffb8000", + "0x7d0", + "0x482480017ff38000", "0x1", - "0x48127ff47fff8000", + "0x48127ff37fff8000", "0x10780017fff7fff", - "0x29", - "0x40780017fff7fff", - "0x8", - "0x482680017ffb8000", + "0x19e", + "0x482680017ffa8000", "0x4", - "0x48127ff47fff8000", - "0x48127ff47fff8000", - "0x10780017fff7fff", - "0x21", - "0x40780017fff7fff", - "0x6", "0x482680017ffb8000", + "0xc8a", + "0x48127ffb7fff8000", + "0x48127ffb7fff8000", + "0x10780017fff7fff", + "0x196", + "0x482680017ffa8000", "0x5", + "0x482680017ffb8000", + "0xbe0", "0x482480017fee8000", "0x1", "0x48127fee7fff8000", "0x10780017fff7fff", - "0x18", - "0x40780017fff7fff", - "0xe", - "0x482680017ffb8000", + "0x18d", + "0x482680017ffa8000", "0x2", - "0x48127fee7fff8000", - "0x48127fee7fff8000", - "0x10780017fff7fff", - "0x10", - "0x40780017fff7fff", - "0xc", "0x482680017ffb8000", - "0x3", - "0x482680017ffc8000", - "0x1", - "0x480a7ffd7fff8000", + "0x109a", + "0x48127ff67fff8000", + "0x48127ff67fff8000", "0x10780017fff7fff", - "0x7", + "0x185", + "0x48307ff980007ffa", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0x3b", "0x40780017fff7fff", - "0x14", + "0x1", + "0x482680017ffa8000", + "0x2", "0x480a7ffb7fff8000", - "0x480a7ffc7fff8000", - "0x480a7ffd7fff8000", + "0x482480017ff58000", + "0x1", + "0x48127ff57fff8000", + "0x48127ffb7fff8000", + "0x48127ffa7fff8000", + "0x480080007ff18000", + "0x1104800180018000", + "0x613", + "0x20680017fff7ffa", + "0x1b", + "0x20680017fff7ffd", + "0x12", + "0x48127ff87fff8000", + "0x482480017ff88000", + "0x5c8", + "0x480680017fff8000", + "0x0", + "0x48127ff87fff8000", + "0x48127ff87fff8000", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x9", + "0x480680017fff8000", + "0x0", + "0x48127ff67fff8000", + "0x48127ff67fff8000", + "0x208b7fff7fff7ffe", + "0x48127ff87fff8000", + "0x482480017ff88000", + "0x3d4", + "0x48127ff97fff8000", + "0x48127ff97fff8000", + "0x10780017fff7fff", + "0x11c", + "0x48127ff87fff8000", + "0x48127ff87fff8000", "0x480680017fff8000", "0x1", "0x480680017fff8000", @@ -6125,393 +8845,346 @@ "0x0", "0x480680017fff8000", "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x48127ff67fff8000", + "0x48127ff67fff8000", "0x208b7fff7fff7ffe", - "0x48297ffc80007ffd", + "0x482680017ffa8000", + "0x2", + "0x482680017ffb8000", + "0x109a", + "0x48127ff67fff8000", + "0x48127ff67fff8000", + "0x10780017fff7fff", + "0x103", + "0x48307ff980007ffa", "0x20680017fff7fff", "0x4", "0x10780017fff7fff", - "0x6b", - "0x480280007ffc8000", + "0x65", + "0x480080007ff88000", "0xa0680017fff8000", "0x12", "0x4824800180007ffe", - "0x10000", + "0x10000000000000000", "0x4844800180008002", "0x8000000000000110000000000000000", "0x4830800080017ffe", - "0x480280007ffb7fff", + "0x480280027ffa7fff", "0x482480017ffe8000", - "0xefffffffffffffde000000000000ffff", - "0x480280017ffb7fff", - "0x400280027ffb7ffb", + "0xefffffffffffffdeffffffffffffffff", + "0x480280037ffa7fff", + "0x400280047ffa7ffb", "0x402480017fff7ffb", "0xffffffffffffffffffffffffffffffff", "0x20680017fff7fff", - "0x51", + "0x4b", "0x402780017fff7fff", "0x1", - "0x400280007ffb7ffe", + "0x400280027ffa7ffe", "0x482480017ffe8000", - "0xffffffffffffffffffffffffffff0000", - "0x400280017ffb7fff", - "0x482680017ffc8000", + "0xffffffffffffffff0000000000000000", + "0x400280037ffa7fff", + "0x482480017ff58000", "0x1", - "0x480a7ffd7fff8000", + "0x48127ff57fff8000", "0x48307ffe80007fff", "0x20680017fff7fff", "0x4", "0x10780017fff7fff", - "0x3b", + "0x35", "0x480080007ffd8000", "0xa0680017fff8000", - "0x12", - "0x4824800180007ffe", - "0x100", - "0x4844800180008002", - "0x8000000000000110000000000000000", - "0x4830800080017ffe", - "0x480280027ffb7fff", - "0x482480017ffe8000", - "0xefffffffffffffde00000000000000ff", - "0x480280037ffb7fff", - "0x400280047ffb7ffb", - "0x402480017fff7ffb", + "0x16", + "0x480280047ffa8003", + "0x480280057ffa8003", + "0x4844800180017ffe", + "0x100000000000000000000000000000000", + "0x483080017ffd7ffb", + "0x482480017fff7ffd", + "0x800000000000010fffffffffffffffff7ffffffffffffef0000000000000001", + "0x20680017fff7ffc", + "0x6", + "0x402480017fff7ffd", "0xffffffffffffffffffffffffffffffff", - "0x20680017fff7fff", - "0x21", - "0x402780017fff7fff", - "0x1", - "0x400280027ffb7ffe", - "0x482480017ffe8000", - "0xffffffffffffffffffffffffffffff00", - "0x400280037ffb7fff", - "0x482680017ffb8000", + "0x10780017fff7fff", "0x4", - "0x482480017ff98000", + "0x402480017ffe7ffd", + "0xf7ffffffffffffef0000000000000000", + "0x400280067ffa7ffd", + "0x20680017fff7ffe", + "0x17", + "0x402780017fff7fff", "0x1", - "0x48127ff97fff8000", - "0x1104800180018000", - "0x47f", - "0x20680017fff7ffc", - "0xd", - "0x48127ff97fff8000", - "0x48127ff97fff8000", - "0x48127ff97fff8000", - "0x480680017fff8000", - "0x0", - "0x48127fd27fff8000", - "0x48127fd77fff8000", - "0x48127ff77fff8000", - "0x48127ff77fff8000", - "0x48127ff77fff8000", - "0x208b7fff7fff7ffe", - "0x48127ff97fff8000", - "0x48127ff97fff8000", - "0x48127ff97fff8000", - "0x10780017fff7fff", - "0x21", - "0x40780017fff7fff", - "0x1c", - "0x482680017ffb8000", + "0x400280047ffa7ffe", + "0x482680017ffa8000", "0x5", - "0x482480017fd88000", - "0x1", - "0x48127fd87fff8000", - "0x10780017fff7fff", - "0x8", - "0x40780017fff7fff", - "0x24", - "0x482680017ffb8000", - "0x2", - "0x48127fd87fff8000", - "0x48127fd87fff8000", - "0x10780017fff7fff", - "0x10", - "0x40780017fff7fff", - "0x22", "0x482680017ffb8000", - "0x3", - "0x482680017ffc8000", - "0x1", - "0x480a7ffd7fff8000", - "0x10780017fff7fff", - "0x7", - "0x40780017fff7fff", - "0x2a", - "0x480a7ffb7fff8000", - "0x480a7ffc7fff8000", - "0x480a7ffd7fff8000", - "0x480680017fff8000", - "0x1", - "0x480680017fff8000", - "0x0", + "0xd70", "0x480680017fff8000", "0x0", + "0x482480017ff88000", + "0x1", + "0x48127ff87fff8000", "0x480680017fff8000", "0x0", "0x480680017fff8000", - "0x0", + "0x7", "0x480680017fff8000", "0x0", + "0x48127ff07fff8000", + "0x48127ff57fff8000", "0x208b7fff7fff7ffe", - "0x40780017fff7fff", + "0x482680017ffa8000", + "0x7", + "0x482680017ffb8000", + "0x76c", + "0x482480017ff48000", "0x1", - "0x48297ffc80007ffd", + "0x48127ff47fff8000", + "0x10780017fff7fff", + "0xe8", + "0x482680017ffa8000", + "0x4", + "0x482680017ffb8000", + "0xc8a", + "0x48127ffb7fff8000", + "0x48127ffb7fff8000", + "0x10780017fff7fff", + "0xe0", + "0x482680017ffa8000", + "0x5", + "0x482680017ffb8000", + "0xbe0", + "0x482480017fee8000", + "0x1", + "0x48127fee7fff8000", + "0x10780017fff7fff", + "0xd7", + "0x482680017ffa8000", + "0x2", + "0x482680017ffb8000", + "0x109a", + "0x48127ff67fff8000", + "0x48127ff67fff8000", + "0x10780017fff7fff", + "0xcf", + "0x48307ff980007ffa", "0x20680017fff7fff", "0x4", "0x10780017fff7fff", - "0x72", - "0x400380007ffc8000", + "0x69", + "0x480080007ff88000", + "0x20680017fff7fff", + "0x45", + "0x482480017ff78000", + "0x1", + "0x48127ff77fff8000", + "0x48307ffe80007fff", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0x35", + "0x480080007ffd8000", "0xa0680017fff8000", "0x12", - "0x4825800180008000", - "0x10000", + "0x4824800180007ffe", + "0x100", "0x4844800180008002", "0x8000000000000110000000000000000", "0x4830800080017ffe", - "0x480280007ffa7fff", + "0x480280027ffa7fff", "0x482480017ffe8000", - "0xefffffffffffffde000000000000ffff", - "0x480280017ffa7fff", - "0x400280027ffa7ffb", + "0xefffffffffffffde00000000000000ff", + "0x480280037ffa7fff", + "0x400280047ffa7ffb", "0x402480017fff7ffb", "0xffffffffffffffffffffffffffffffff", "0x20680017fff7fff", - "0x58", + "0x1b", "0x402780017fff7fff", "0x1", - "0x400380007ffa8000", - "0x4826800180008000", - "0xffffffffffffffffffffffffffff0000", - "0x400280017ffa7fff", - "0x482680017ffc8000", - "0x1", - "0x480a7ffd7fff8000", - "0x48307ffe80007fff", - "0x20680017fff7fff", - "0x4", - "0x10780017fff7fff", - "0x35", - "0x40780017fff7fff", - "0x1", + "0x400280027ffa7ffe", + "0x482480017ffe8000", + "0xffffffffffffffffffffffffffffff00", + "0x400280037ffa7fff", "0x482680017ffa8000", - "0x2", - "0x480a7ffb7fff8000", - "0x482480017ffa8000", - "0x1", - "0x48127ffa7fff8000", - "0x48127ffb7fff8000", - "0x48127ffa7fff8000", - "0x480080007ff68000", - "0x1104800180018000", - "0x4ac", - "0x20680017fff7ffa", - "0x17", - "0x20680017fff7ffd", - "0xf", - "0x48127ff87fff8000", - "0x482480017ff88000", - "0x1f4", - "0x480680017fff8000", - "0x0", - "0x48127ff87fff8000", - "0x48127ff87fff8000", + "0x4", + "0x482680017ffb8000", + "0xe1a", "0x480680017fff8000", "0x0", - "0x480a80007fff8000", - "0x48127ff77fff8000", - "0x48127ff77fff8000", - "0x208b7fff7fff7ffe", - "0x48127ff87fff8000", - "0x48127ff87fff8000", - "0x48127ff97fff8000", - "0x48127ff97fff8000", - "0x10780017fff7fff", - "0x17", - "0x48127ff87fff8000", - "0x48127ff87fff8000", - "0x480680017fff8000", + "0x482480017ff78000", "0x1", + "0x48127ff77fff8000", "0x480680017fff8000", "0x0", "0x480680017fff8000", - "0x0", + "0x5", "0x480680017fff8000", "0x0", "0x480680017fff8000", "0x0", - "0x48127ff77fff8000", - "0x48127ff77fff8000", + "0x48127ff47fff8000", "0x208b7fff7fff7ffe", "0x482680017ffa8000", + "0x5", + "0x482680017ffb8000", + "0x924", + "0x482480017ff38000", + "0x1", + "0x48127ff37fff8000", + "0x10780017fff7fff", + "0x31", + "0x482680017ffa8000", "0x2", "0x482680017ffb8000", - "0xd2a", + "0xdde", "0x48127ffb7fff8000", "0x48127ffb7fff8000", - "0x48127ffc7fff8000", - "0x48127ffc7fff8000", + "0x10780017fff7fff", + "0x29", + "0x4824800180007fff", + "0x1", + "0x20680017fff7fff", + "0x16", + "0x482680017ffa8000", + "0x2", + "0x482680017ffb8000", + "0x1162", "0x480680017fff8000", "0x0", - "0x48127ffb7fff8000", - "0x48127ffb7fff8000", - "0x480680017fff8000", + "0x482480017ff38000", "0x1", + "0x48127ff37fff8000", "0x480680017fff8000", "0x0", "0x480680017fff8000", + "0x5", + "0x480680017fff8000", "0x0", "0x480680017fff8000", + "0x1", + "0x480680017fff8000", "0x0", "0x208b7fff7fff7ffe", "0x482680017ffa8000", - "0x3", + "0x2", "0x482680017ffb8000", - "0xc1c", - "0x482680017ffc8000", + "0xf6e", + "0x482480017ff48000", "0x1", - "0x480a7ffd7fff8000", + "0x48127ff47fff8000", "0x10780017fff7fff", - "0x7", - "0x480a7ffa7fff8000", + "0x63", + "0x482680017ffa8000", + "0x2", "0x482680017ffb8000", - "0x1130", - "0x480a7ffc7fff8000", - "0x480a7ffd7fff8000", - "0x48127ffc7fff8000", - "0x48127ffc7fff8000", + "0x109a", + "0x48127ff67fff8000", + "0x48127ff67fff8000", + "0x10780017fff7fff", + "0x5b", + "0x482680017ffa8000", + "0x2", + "0x48127ff87fff8000", + "0x48127ff87fff8000", + "0x1104800180018000", + "0x59a", + "0x20680017fff7ffd", + "0x12", + "0x48127ffa7fff8000", + "0x482680017ffb8000", + "0x5a0", "0x480680017fff8000", "0x0", - "0x48127ffb7fff8000", - "0x48127ffb7fff8000", - "0x480680017fff8000", - "0x1", + "0x48127ff87fff8000", + "0x48127ff87fff8000", "0x480680017fff8000", "0x0", "0x480680017fff8000", - "0x0", + "0x3", "0x480680017fff8000", "0x0", + "0x48127ff67fff8000", + "0x48127ff67fff8000", "0x208b7fff7fff7ffe", - "0x48297ffc80007ffd", - "0x20680017fff7fff", - "0x4", - "0x10780017fff7fff", - "0x6b", - "0x480280007ffc8000", - "0xa0680017fff8000", - "0x12", - "0x4824800180007ffe", - "0x10000", - "0x4844800180008002", - "0x8000000000000110000000000000000", - "0x4830800080017ffe", - "0x480280007ffb7fff", - "0x482480017ffe8000", - "0xefffffffffffffde000000000000ffff", - "0x480280017ffb7fff", - "0x400280027ffb7ffb", - "0x402480017fff7ffb", - "0xffffffffffffffffffffffffffffffff", - "0x20680017fff7fff", - "0x51", - "0x402780017fff7fff", - "0x1", - "0x400280007ffb7ffe", - "0x482480017ffe8000", - "0xffffffffffffffffffffffffffff0000", - "0x400280017ffb7fff", - "0x482680017ffc8000", - "0x1", - "0x480a7ffd7fff8000", - "0x48307ffe80007fff", - "0x20680017fff7fff", - "0x4", - "0x10780017fff7fff", - "0x3b", - "0x480080007ffd8000", - "0xa0680017fff8000", - "0x12", - "0x4824800180007ffe", - "0x10000", - "0x4844800180008002", - "0x8000000000000110000000000000000", - "0x4830800080017ffe", - "0x480280027ffb7fff", - "0x482480017ffe8000", - "0xefffffffffffffde000000000000ffff", - "0x480280037ffb7fff", - "0x400280047ffb7ffb", - "0x402480017fff7ffb", - "0xffffffffffffffffffffffffffffffff", - "0x20680017fff7fff", - "0x21", - "0x402780017fff7fff", - "0x1", - "0x400280027ffb7ffe", - "0x482480017ffe8000", - "0xffffffffffffffffffffffffffff0000", - "0x400280037ffb7fff", + "0x48127ffa7fff8000", "0x482680017ffb8000", - "0x4", - "0x482480017ff98000", - "0x1", - "0x48127ff97fff8000", - "0x1104800180018000", - "0x482", - "0x20680017fff7ffc", - "0xd", - "0x48127ff97fff8000", + "0x410", "0x48127ff97fff8000", "0x48127ff97fff8000", + "0x48127ffc7fff8000", + "0x48127ffc7fff8000", "0x480680017fff8000", "0x0", - "0x48127fd27fff8000", - "0x48127fd77fff8000", - "0x48127ff77fff8000", - "0x48127ff77fff8000", - "0x48127ff77fff8000", - "0x208b7fff7fff7ffe", - "0x48127ff97fff8000", - "0x48127ff97fff8000", - "0x48127ff97fff8000", - "0x10780017fff7fff", - "0x21", - "0x40780017fff7fff", - "0x1c", - "0x482680017ffb8000", - "0x5", - "0x482480017fd88000", + "0x48127ffb7fff8000", + "0x48127ffb7fff8000", + "0x480680017fff8000", "0x1", - "0x48127fd87fff8000", - "0x10780017fff7fff", - "0x8", - "0x40780017fff7fff", - "0x24", - "0x482680017ffb8000", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x208b7fff7fff7ffe", + "0x482680017ffa8000", "0x2", - "0x48127fd87fff8000", - "0x48127fd87fff8000", - "0x10780017fff7fff", - "0x10", - "0x40780017fff7fff", - "0x22", "0x482680017ffb8000", + "0x13ba", + "0x480680017fff8000", + "0x0", + "0x48127ff67fff8000", + "0x48127ff67fff8000", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x1", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x208b7fff7fff7ffe", + "0x482680017ffa8000", "0x3", - "0x482680017ffc8000", + "0x482680017ffb8000", + "0x12ac", + "0x480680017fff8000", + "0x0", + "0x48127ff37fff8000", + "0x48127ff37fff8000", + "0x480680017fff8000", "0x1", - "0x480a7ffd7fff8000", - "0x10780017fff7fff", - "0x7", - "0x40780017fff7fff", - "0x2a", - "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x208b7fff7fff7ffe", + "0x480a7ffa7fff8000", + "0x482680017ffb8000", + "0x169e", "0x480a7ffc7fff8000", "0x480a7ffd7fff8000", - "0x480680017fff8000", - "0x1", + "0x48127ffc7fff8000", + "0x48127ffc7fff8000", "0x480680017fff8000", "0x0", + "0x48127ffb7fff8000", + "0x48127ffb7fff8000", + "0x480680017fff8000", + "0x1", "0x480680017fff8000", "0x0", "0x480680017fff8000", @@ -6521,54 +9194,44 @@ "0x480680017fff8000", "0x0", "0x208b7fff7fff7ffe", - "0x48297ffc80007ffd", - "0x20680017fff7fff", - "0x4", - "0x10780017fff7fff", - "0x8b", - "0x480280007ffc8000", - "0xa0680017fff8000", - "0x12", - "0x4824800180007ffe", - "0x100000000", - "0x4844800180008002", - "0x8000000000000110000000000000000", - "0x4830800080017ffe", - "0x480280007ffb7fff", - "0x482480017ffe8000", - "0xefffffffffffffde00000000ffffffff", - "0x480280017ffb7fff", - "0x400280027ffb7ffb", - "0x402480017fff7ffb", - "0xffffffffffffffffffffffffffffffff", - "0x20680017fff7fff", - "0x71", - "0x402780017fff7fff", + "0x40780017fff7fff", "0x1", - "0x400280007ffb7ffe", + "0x400180007fff7ffd", + "0x48127fff7fff8000", "0x482480017ffe8000", - "0xffffffffffffffffffffffff00000000", - "0x400280017ffb7fff", - "0x482680017ffc8000", "0x1", - "0x480a7ffd7fff8000", - "0x48307ffe80007fff", - "0x20680017fff7fff", - "0x4", + "0x208b7fff7fff7ffe", + "0xa0680017fff8000", + "0x7", + "0x482680017ff88000", + "0xfffffffffffffffffffffffffffff6fa", + "0x400280007ff77fff", "0x10780017fff7fff", "0x5b", - "0x480080007ffd8000", - "0x20680017fff7fff", - "0x3e", - "0x482480017ffc8000", + "0x4825800180007ff8", + "0x906", + "0x400280007ff77fff", + "0x20780017fff7ffd", + "0xf", + "0x482680017ff78000", "0x1", - "0x48127ffc7fff8000", - "0x48307ffe80007fff", + "0x482480017ffe8000", + "0xc8a", + "0x480680017fff8000", + "0x0", + "0x480a7ff97fff8000", + "0x480a7ffa7fff8000", + "0x480680017fff8000", + "0x0", + "0x480a7ffb7fff8000", + "0x480a7ffc7fff8000", + "0x208b7fff7fff7ffe", + "0x48297ff980007ffa", "0x20680017fff7fff", "0x4", "0x10780017fff7fff", - "0x2e", - "0x480080007ffd8000", + "0x31", + "0x480280007ff98000", "0xa0680017fff8000", "0x12", "0x4824800180007ffe", @@ -6576,98 +9239,69 @@ "0x4844800180008002", "0x8000000000000110000000000000000", "0x4830800080017ffe", - "0x480280027ffb7fff", + "0x480280017ff77fff", "0x482480017ffe8000", "0xefffffffffffffde00000000000000ff", - "0x480280037ffb7fff", - "0x400280047ffb7ffb", + "0x480280027ff77fff", + "0x400280037ff77ffb", "0x402480017fff7ffb", "0xffffffffffffffffffffffffffffffff", "0x20680017fff7fff", - "0x16", + "0x17", "0x402780017fff7fff", "0x1", - "0x400280027ffb7ffe", + "0x400280017ff77ffe", "0x482480017ffe8000", "0xffffffffffffffffffffffffffffff00", - "0x400280037ffb7fff", - "0x40780017fff7fff", - "0x5", - "0x482680017ffb8000", - "0x4", - "0x482480017ff48000", + "0x400280027ff77fff", + "0x400280007ffc7ffd", + "0x482680017ff78000", + "0x3", + "0x48127ffa7fff8000", + "0x482680017ff98000", "0x1", - "0x48127ff47fff8000", - "0x480680017fff8000", - "0x0", - "0x48127fea7fff8000", - "0x480680017fff8000", - "0x0", - "0x48127ff27fff8000", + "0x480a7ffa7fff8000", + "0x480a7ffb7fff8000", + "0x482680017ffc8000", + "0x1", + "0x4825800180007ffd", + "0x1", + "0x1104800180018000", + "0x800000000000010ffffffffffffffffffffffffffffffffffffffffffffffc0", "0x208b7fff7fff7ffe", - "0x482680017ffb8000", - "0x5", - "0x482480017ff48000", + "0x482680017ff78000", + "0x4", + "0x482480017ff58000", + "0x4b0", + "0x482680017ff98000", "0x1", - "0x48127ff47fff8000", + "0x480a7ffa7fff8000", "0x10780017fff7fff", - "0x2a", - "0x40780017fff7fff", "0x8", - "0x482680017ffb8000", - "0x2", - "0x48127ff47fff8000", - "0x48127ff47fff8000", - "0x10780017fff7fff", - "0x22", - "0x40780017fff7fff", - "0xa", - "0x4824800180007ff5", - "0x1", - "0x20680017fff7fff", - "0xf", - "0x482680017ffb8000", - "0x2", - "0x482480017ff08000", + "0x482680017ff78000", "0x1", - "0x48127ff07fff8000", + "0x482480017ffd8000", + "0x9ce", + "0x480a7ff97fff8000", + "0x480a7ffa7fff8000", + "0x48127ffc7fff8000", + "0x48127ffc7fff8000", "0x480680017fff8000", "0x0", - "0x48127fea7fff8000", + "0x48127ffb7fff8000", + "0x48127ffb7fff8000", "0x480680017fff8000", "0x1", "0x480680017fff8000", - "0x0", - "0x208b7fff7fff7ffe", - "0x482680017ffb8000", - "0x2", - "0x482480017ff08000", - "0x1", - "0x48127ff07fff8000", - "0x10780017fff7fff", - "0x18", - "0x40780017fff7fff", - "0xc", - "0x482680017ffb8000", - "0x2", - "0x48127ff07fff8000", - "0x48127ff07fff8000", - "0x10780017fff7fff", - "0x10", - "0x40780017fff7fff", - "0xa", - "0x482680017ffb8000", - "0x3", - "0x482680017ffc8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x208b7fff7fff7ffe", + "0x1104800180018000", + "0x800000000000010ffffffffffffffffffffffffffffffffffffffffffffecd2", + "0x482680017ff78000", "0x1", - "0x480a7ffd7fff8000", - "0x10780017fff7fff", - "0x7", - "0x40780017fff7fff", - "0x12", - "0x480a7ffb7fff8000", - "0x480a7ffc7fff8000", - "0x480a7ffd7fff8000", + "0x480a7ff87fff8000", "0x480680017fff8000", "0x1", "0x480680017fff8000", @@ -6676,79 +9310,39 @@ "0x0", "0x480680017fff8000", "0x0", + "0x48127ff87fff8000", + "0x48127ff87fff8000", "0x208b7fff7fff7ffe", - "0x48297ffc80007ffd", - "0x20680017fff7fff", - "0x4", - "0x10780017fff7fff", - "0x8c", - "0x480280007ffc8000", - "0x20680017fff7fff", - "0x3e", "0x40780017fff7fff", "0x1", - "0x482680017ffc8000", - "0x1", - "0x480a7ffd7fff8000", - "0x48307ffe80007fff", + "0x48297ffc80007ffd", "0x20680017fff7fff", "0x4", "0x10780017fff7fff", - "0x2d", - "0x480080007ffd8000", + "0x72", + "0x400380007ffc8000", "0xa0680017fff8000", "0x12", - "0x4824800180007ffe", - "0x100", + "0x4825800180008000", + "0x100000000", "0x4844800180008002", "0x8000000000000110000000000000000", "0x4830800080017ffe", - "0x480280007ffb7fff", + "0x480280007ffa7fff", "0x482480017ffe8000", - "0xefffffffffffffde00000000000000ff", - "0x480280017ffb7fff", - "0x400280027ffb7ffb", + "0xefffffffffffffde00000000ffffffff", + "0x480280017ffa7fff", + "0x400280027ffa7ffb", "0x402480017fff7ffb", "0xffffffffffffffffffffffffffffffff", "0x20680017fff7fff", - "0x15", + "0x58", "0x402780017fff7fff", "0x1", - "0x400280007ffb7ffe", - "0x482480017ffe8000", - "0xffffffffffffffffffffffffffffff00", - "0x400280017ffb7fff", - "0x40780017fff7fff", - "0x5", - "0x482680017ffb8000", - "0x2", - "0x482480017ff48000", - "0x1", - "0x48127ff47fff8000", - "0x480680017fff8000", - "0x0", - "0x480680017fff8000", - "0x0", - "0x48127ff37fff8000", - "0x208b7fff7fff7ffe", - "0x482680017ffb8000", - "0x3", - "0x482480017ff48000", - "0x1", - "0x48127ff47fff8000", - "0x10780017fff7fff", - "0x59", - "0x40780017fff7fff", - "0x8", - "0x480a7ffb7fff8000", - "0x48127ff47fff8000", - "0x48127ff47fff8000", - "0x10780017fff7fff", - "0x52", - "0x4824800180007fff", - "0x1", - "0x20680017fff7fff", - "0x3c", + "0x400380007ffa8000", + "0x4826800180008000", + "0xffffffffffffffffffffffff00000000", + "0x400280017ffa7fff", "0x482680017ffc8000", "0x1", "0x480a7ffd7fff8000", @@ -6756,88 +9350,157 @@ "0x20680017fff7fff", "0x4", "0x10780017fff7fff", - "0x2d", - "0x480080007ffd8000", - "0xa0680017fff8000", - "0x12", - "0x4824800180007ffe", - "0x10000000000000000", - "0x4844800180008002", - "0x8000000000000110000000000000000", - "0x4830800080017ffe", - "0x480280007ffb7fff", - "0x482480017ffe8000", - "0xefffffffffffffdeffffffffffffffff", - "0x480280017ffb7fff", - "0x400280027ffb7ffb", - "0x402480017fff7ffb", - "0xffffffffffffffffffffffffffffffff", - "0x20680017fff7fff", - "0x15", - "0x402780017fff7fff", - "0x1", - "0x400280007ffb7ffe", - "0x482480017ffe8000", - "0xffffffffffffffff0000000000000000", - "0x400280017ffb7fff", + "0x35", "0x40780017fff7fff", - "0x5", - "0x482680017ffb8000", + "0x1", + "0x482680017ffa8000", "0x2", - "0x482480017ff48000", + "0x480a7ffb7fff8000", + "0x482480017ffa8000", "0x1", - "0x48127ff47fff8000", + "0x48127ffa7fff8000", + "0x48127ffb7fff8000", + "0x48127ffa7fff8000", + "0x480080007ff68000", + "0x1104800180018000", + "0x225", + "0x20680017fff7ffa", + "0x17", + "0x20680017fff7ffd", + "0xf", + "0x48127ff87fff8000", + "0x482480017ff88000", + "0x1f4", + "0x480680017fff8000", + "0x0", + "0x48127ff87fff8000", + "0x48127ff87fff8000", "0x480680017fff8000", "0x0", + "0x480a80007fff8000", + "0x48127ff77fff8000", + "0x48127ff77fff8000", + "0x208b7fff7fff7ffe", + "0x48127ff87fff8000", + "0x48127ff87fff8000", + "0x48127ff97fff8000", + "0x48127ff97fff8000", + "0x10780017fff7fff", + "0x17", + "0x48127ff87fff8000", + "0x48127ff87fff8000", "0x480680017fff8000", "0x1", - "0x48127ff37fff8000", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x48127ff77fff8000", + "0x48127ff77fff8000", "0x208b7fff7fff7ffe", + "0x482680017ffa8000", + "0x2", "0x482680017ffb8000", - "0x3", - "0x482480017ff48000", + "0xd2a", + "0x48127ffb7fff8000", + "0x48127ffb7fff8000", + "0x48127ffc7fff8000", + "0x48127ffc7fff8000", + "0x480680017fff8000", + "0x0", + "0x48127ffb7fff8000", + "0x48127ffb7fff8000", + "0x480680017fff8000", "0x1", - "0x48127ff47fff8000", - "0x10780017fff7fff", - "0x1b", - "0x40780017fff7fff", - "0x8", - "0x480a7ffb7fff8000", - "0x48127ff47fff8000", - "0x48127ff47fff8000", - "0x10780017fff7fff", - "0x14", - "0x40780017fff7fff", - "0xb", - "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x208b7fff7fff7ffe", + "0x482680017ffa8000", + "0x3", + "0x482680017ffb8000", + "0xc1c", "0x482680017ffc8000", "0x1", "0x480a7ffd7fff8000", + "0x10780017fff7fff", + "0x7", + "0x480a7ffa7fff8000", + "0x482680017ffb8000", + "0x1130", + "0x480a7ffc7fff8000", + "0x480a7ffd7fff8000", + "0x48127ffc7fff8000", + "0x48127ffc7fff8000", + "0x480680017fff8000", + "0x0", + "0x48127ffb7fff8000", + "0x48127ffb7fff8000", "0x480680017fff8000", "0x1", "0x480680017fff8000", "0x0", "0x480680017fff8000", "0x0", + "0x480680017fff8000", + "0x0", "0x208b7fff7fff7ffe", - "0x40780017fff7fff", - "0xd", + "0xa0680017fff8000", + "0x7", + "0x482680017ff98000", + "0xfffffffffffffffffffffffffffff916", + "0x400280007ff87fff", + "0x10780017fff7fff", + "0x23", + "0x4825800180007ff9", + "0x6ea", + "0x400280007ff87fff", + "0x48297ffa80007ffb", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0x12", + "0x480280007ffa8000", + "0x480280017ffa8000", + "0x400280007ffd7ffe", + "0x400280017ffd7fff", + "0x482680017ff88000", + "0x1", + "0x48127ffb7fff8000", + "0x482680017ffa8000", + "0x2", "0x480a7ffb7fff8000", "0x480a7ffc7fff8000", - "0x480a7ffd7fff8000", - "0x480680017fff8000", + "0x482680017ffd8000", + "0x2", + "0x1104800180018000", + "0x800000000000010ffffffffffffffffffffffffffffffffffffffffffffffe5", + "0x208b7fff7fff7ffe", + "0x482680017ff88000", "0x1", + "0x482480017ffd8000", + "0x9a6", "0x480680017fff8000", "0x0", - "0x480680017fff8000", - "0x0", + "0x480a7ffc7fff8000", + "0x480a7ffd7fff8000", "0x208b7fff7fff7ffe", - "0x40780017fff7fff", + "0x1104800180018000", + "0x800000000000010ffffffffffffffffffffffffffffffffffffffffffffec0f", + "0x482680017ff88000", "0x1", - "0x400180007fff7ffd", - "0x48127fff7fff8000", - "0x482480017ffe8000", + "0x480a7ff97fff8000", + "0x480680017fff8000", "0x1", + "0x48127ffb7fff8000", + "0x48127ffb7fff8000", "0x208b7fff7fff7ffe", "0xa0680017fff8000", "0x7", @@ -6873,13 +9536,13 @@ "0xa0680017fff8000", "0x12", "0x4824800180007ffe", - "0x100", + "0x10000", "0x4844800180008002", "0x8000000000000110000000000000000", "0x4830800080017ffe", "0x480280017ff77fff", "0x482480017ffe8000", - "0xefffffffffffffde00000000000000ff", + "0xefffffffffffffde000000000000ffff", "0x480280027ff77fff", "0x400280037ff77ffb", "0x402480017fff7ffb", @@ -6890,7 +9553,7 @@ "0x1", "0x400280017ff77ffe", "0x482480017ffe8000", - "0xffffffffffffffffffffffffffffff00", + "0xffffffffffffffffffffffffffff0000", "0x400280027ff77fff", "0x400280007ffc7ffd", "0x482680017ff78000", @@ -6936,7 +9599,7 @@ "0x0", "0x208b7fff7fff7ffe", "0x1104800180018000", - "0x800000000000010fffffffffffffffffffffffffffffffffffffffffffff2fa", + "0x800000000000010ffffffffffffffffffffffffffffffffffffffffffffeba5", "0x482680017ff78000", "0x1", "0x480a7ff87fff8000", @@ -6962,13 +9625,13 @@ "0xa0680017fff8000", "0x12", "0x4825800180008000", - "0x100000000", + "0x10000", "0x4844800180008002", "0x8000000000000110000000000000000", "0x4830800080017ffe", "0x480280007ffa7fff", "0x482480017ffe8000", - "0xefffffffffffffde00000000ffffffff", + "0xefffffffffffffde000000000000ffff", "0x480280017ffa7fff", "0x400280027ffa7ffb", "0x402480017fff7ffb", @@ -6979,7 +9642,7 @@ "0x1", "0x400380007ffa8000", "0x4826800180008000", - "0xffffffffffffffffffffffff00000000", + "0xffffffffffffffffffffffffffff0000", "0x400280017ffa7fff", "0x482680017ffc8000", "0x1", @@ -7001,7 +9664,7 @@ "0x48127ffa7fff8000", "0x480080007ff68000", "0x1104800180018000", - "0x1f3", + "0x800000000000010ffffffffffffffffffffffffffffffffffffffffffffff60", "0x20680017fff7ffa", "0x17", "0x20680017fff7ffd", @@ -7090,37 +9753,12 @@ "0x480680017fff8000", "0x0", "0x208b7fff7fff7ffe", - "0xa0680017fff8000", - "0x7", - "0x482680017ff88000", - "0xfffffffffffffffffffffffffffff6fa", - "0x400280007ff77fff", - "0x10780017fff7fff", - "0x5b", - "0x4825800180007ff8", - "0x906", - "0x400280007ff77fff", - "0x20780017fff7ffd", - "0xf", - "0x482680017ff78000", - "0x1", - "0x482480017ffe8000", - "0xc8a", - "0x480680017fff8000", - "0x0", - "0x480a7ff97fff8000", - "0x480a7ffa7fff8000", - "0x480680017fff8000", - "0x0", - "0x480a7ffb7fff8000", - "0x480a7ffc7fff8000", - "0x208b7fff7fff7ffe", - "0x48297ff980007ffa", + "0x48297ffc80007ffd", "0x20680017fff7fff", "0x4", "0x10780017fff7fff", - "0x31", - "0x480280007ff98000", + "0x8d", + "0x480280007ffc8000", "0xa0680017fff8000", "0x12", "0x4824800180007ffe", @@ -7128,175 +9766,234 @@ "0x4844800180008002", "0x8000000000000110000000000000000", "0x4830800080017ffe", - "0x480280017ff77fff", + "0x480280007ffb7fff", "0x482480017ffe8000", "0xefffffffffffffde000000000000ffff", - "0x480280027ff77fff", - "0x400280037ff77ffb", + "0x480280017ffb7fff", + "0x400280027ffb7ffb", "0x402480017fff7ffb", "0xffffffffffffffffffffffffffffffff", "0x20680017fff7fff", - "0x17", + "0x73", "0x402780017fff7fff", "0x1", - "0x400280017ff77ffe", + "0x400280007ffb7ffe", "0x482480017ffe8000", "0xffffffffffffffffffffffffffff0000", - "0x400280027ff77fff", - "0x400280007ffc7ffd", - "0x482680017ff78000", - "0x3", - "0x48127ffa7fff8000", - "0x482680017ff98000", - "0x1", - "0x480a7ffa7fff8000", - "0x480a7ffb7fff8000", + "0x400280017ffb7fff", "0x482680017ffc8000", "0x1", - "0x4825800180007ffd", - "0x1", - "0x1104800180018000", - "0x800000000000010ffffffffffffffffffffffffffffffffffffffffffffffc0", - "0x208b7fff7fff7ffe", - "0x482680017ff78000", + "0x480a7ffd7fff8000", + "0x48307ffe80007fff", + "0x20680017fff7fff", "0x4", - "0x482480017ff58000", - "0x4b0", - "0x482680017ff98000", + "0x10780017fff7fff", + "0x5d", + "0x480080007ffd8000", + "0xa0680017fff8000", + "0x12", + "0x4824800180007ffe", + "0x100000000", + "0x4844800180008002", + "0x8000000000000110000000000000000", + "0x4830800080017ffe", + "0x480280027ffb7fff", + "0x482480017ffe8000", + "0xefffffffffffffde00000000ffffffff", + "0x480280037ffb7fff", + "0x400280047ffb7ffb", + "0x402480017fff7ffb", + "0xffffffffffffffffffffffffffffffff", + "0x20680017fff7fff", + "0x43", + "0x402780017fff7fff", "0x1", - "0x480a7ffa7fff8000", + "0x400280027ffb7ffe", + "0x482480017ffe8000", + "0xffffffffffffffffffffffff00000000", + "0x400280037ffb7fff", + "0x482480017ffa8000", + "0x1", + "0x48127ffa7fff8000", + "0x48307ffe80007fff", + "0x20680017fff7fff", + "0x4", "0x10780017fff7fff", - "0x8", - "0x482680017ff78000", + "0x2d", + "0x480080007ffd8000", + "0xa0680017fff8000", + "0x12", + "0x4824800180007ffe", + "0x10000000000000000", + "0x4844800180008002", + "0x8000000000000110000000000000000", + "0x4830800080017ffe", + "0x480280047ffb7fff", + "0x482480017ffe8000", + "0xefffffffffffffdeffffffffffffffff", + "0x480280057ffb7fff", + "0x400280067ffb7ffb", + "0x402480017fff7ffb", + "0xffffffffffffffffffffffffffffffff", + "0x20680017fff7fff", + "0x15", + "0x402780017fff7fff", "0x1", - "0x482480017ffd8000", - "0x9ce", - "0x480a7ff97fff8000", - "0x480a7ffa7fff8000", - "0x48127ffc7fff8000", - "0x48127ffc7fff8000", + "0x400280047ffb7ffe", + "0x482480017ffe8000", + "0xffffffffffffffff0000000000000000", + "0x400280057ffb7fff", + "0x40780017fff7fff", + "0x5", + "0x482680017ffb8000", + "0x6", + "0x482480017ff48000", + "0x1", + "0x48127ff47fff8000", "0x480680017fff8000", "0x0", - "0x48127ffb7fff8000", - "0x48127ffb7fff8000", + "0x48127fe87fff8000", + "0x48127fed7fff8000", + "0x48127ff27fff8000", + "0x208b7fff7fff7ffe", + "0x482680017ffb8000", + "0x7", + "0x482480017ff48000", + "0x1", + "0x48127ff47fff8000", + "0x10780017fff7fff", + "0x29", + "0x40780017fff7fff", + "0x8", + "0x482680017ffb8000", + "0x4", + "0x48127ff47fff8000", + "0x48127ff47fff8000", + "0x10780017fff7fff", + "0x21", + "0x40780017fff7fff", + "0x6", + "0x482680017ffb8000", + "0x5", + "0x482480017fee8000", + "0x1", + "0x48127fee7fff8000", + "0x10780017fff7fff", + "0x18", + "0x40780017fff7fff", + "0xe", + "0x482680017ffb8000", + "0x2", + "0x48127fee7fff8000", + "0x48127fee7fff8000", + "0x10780017fff7fff", + "0x10", + "0x40780017fff7fff", + "0xc", + "0x482680017ffb8000", + "0x3", + "0x482680017ffc8000", + "0x1", + "0x480a7ffd7fff8000", + "0x10780017fff7fff", + "0x7", + "0x40780017fff7fff", + "0x14", + "0x480a7ffb7fff8000", + "0x480a7ffc7fff8000", + "0x480a7ffd7fff8000", "0x480680017fff8000", "0x1", "0x480680017fff8000", "0x0", "0x480680017fff8000", "0x0", + "0x480680017fff8000", + "0x0", "0x208b7fff7fff7ffe", - "0x1104800180018000", - "0x800000000000010fffffffffffffffffffffffffffffffffffffffffffff1ff", + "0xa0680017fff8000", + "0x7", + "0x482680017ff88000", + "0xfffffffffffffffffffffffffffff6fa", + "0x400280007ff77fff", + "0x10780017fff7fff", + "0x5b", + "0x4825800180007ff8", + "0x906", + "0x400280007ff77fff", + "0x20780017fff7ffd", + "0xf", "0x482680017ff78000", "0x1", - "0x480a7ff87fff8000", - "0x480680017fff8000", - "0x1", - "0x480680017fff8000", - "0x0", + "0x482480017ffe8000", + "0xc8a", "0x480680017fff8000", "0x0", + "0x480a7ff97fff8000", + "0x480a7ffa7fff8000", "0x480680017fff8000", "0x0", - "0x48127ff87fff8000", - "0x48127ff87fff8000", + "0x480a7ffb7fff8000", + "0x480a7ffc7fff8000", "0x208b7fff7fff7ffe", - "0x40780017fff7fff", - "0x1", - "0x48297ffc80007ffd", + "0x48297ff980007ffa", "0x20680017fff7fff", "0x4", "0x10780017fff7fff", - "0x72", - "0x400380007ffc8000", + "0x31", + "0x480280007ff98000", "0xa0680017fff8000", "0x12", - "0x4825800180008000", - "0x10000", + "0x4824800180007ffe", + "0x100000000", "0x4844800180008002", "0x8000000000000110000000000000000", "0x4830800080017ffe", - "0x480280007ffa7fff", + "0x480280017ff77fff", "0x482480017ffe8000", - "0xefffffffffffffde000000000000ffff", - "0x480280017ffa7fff", - "0x400280027ffa7ffb", + "0xefffffffffffffde00000000ffffffff", + "0x480280027ff77fff", + "0x400280037ff77ffb", "0x402480017fff7ffb", "0xffffffffffffffffffffffffffffffff", "0x20680017fff7fff", - "0x58", + "0x17", "0x402780017fff7fff", "0x1", - "0x400380007ffa8000", - "0x4826800180008000", - "0xffffffffffffffffffffffffffff0000", - "0x400280017ffa7fff", + "0x400280017ff77ffe", + "0x482480017ffe8000", + "0xffffffffffffffffffffffff00000000", + "0x400280027ff77fff", + "0x400280007ffc7ffd", + "0x482680017ff78000", + "0x3", + "0x48127ffa7fff8000", + "0x482680017ff98000", + "0x1", + "0x480a7ffa7fff8000", + "0x480a7ffb7fff8000", "0x482680017ffc8000", "0x1", - "0x480a7ffd7fff8000", - "0x48307ffe80007fff", - "0x20680017fff7fff", - "0x4", - "0x10780017fff7fff", - "0x35", - "0x40780017fff7fff", - "0x1", - "0x482680017ffa8000", - "0x2", - "0x480a7ffb7fff8000", - "0x482480017ffa8000", + "0x4825800180007ffd", "0x1", - "0x48127ffa7fff8000", - "0x48127ffb7fff8000", - "0x48127ffa7fff8000", - "0x480080007ff68000", "0x1104800180018000", - "0x800000000000010ffffffffffffffffffffffffffffffffffffffffffffff60", - "0x20680017fff7ffa", - "0x17", - "0x20680017fff7ffd", - "0xf", - "0x48127ff87fff8000", - "0x482480017ff88000", - "0x1f4", - "0x480680017fff8000", - "0x0", - "0x48127ff87fff8000", - "0x48127ff87fff8000", - "0x480680017fff8000", - "0x0", - "0x480a80007fff8000", - "0x48127ff77fff8000", - "0x48127ff77fff8000", + "0x800000000000010ffffffffffffffffffffffffffffffffffffffffffffffc0", "0x208b7fff7fff7ffe", - "0x48127ff87fff8000", - "0x48127ff87fff8000", - "0x48127ff97fff8000", - "0x48127ff97fff8000", + "0x482680017ff78000", + "0x4", + "0x482480017ff58000", + "0x4b0", + "0x482680017ff98000", + "0x1", + "0x480a7ffa7fff8000", "0x10780017fff7fff", - "0x17", - "0x48127ff87fff8000", - "0x48127ff87fff8000", - "0x480680017fff8000", + "0x8", + "0x482680017ff78000", "0x1", - "0x480680017fff8000", - "0x0", - "0x480680017fff8000", - "0x0", - "0x480680017fff8000", - "0x0", - "0x480680017fff8000", - "0x0", - "0x48127ff77fff8000", - "0x48127ff77fff8000", - "0x208b7fff7fff7ffe", - "0x482680017ffa8000", - "0x2", - "0x482680017ffb8000", - "0xd2a", - "0x48127ffb7fff8000", - "0x48127ffb7fff8000", + "0x482480017ffd8000", + "0x9ce", + "0x480a7ff97fff8000", + "0x480a7ffa7fff8000", "0x48127ffc7fff8000", "0x48127ffc7fff8000", "0x480680017fff8000", @@ -7309,29 +10006,12 @@ "0x0", "0x480680017fff8000", "0x0", - "0x480680017fff8000", - "0x0", "0x208b7fff7fff7ffe", - "0x482680017ffa8000", - "0x3", - "0x482680017ffb8000", - "0xc1c", - "0x482680017ffc8000", + "0x1104800180018000", + "0x800000000000010ffffffffffffffffffffffffffffffffffffffffffffea0c", + "0x482680017ff78000", "0x1", - "0x480a7ffd7fff8000", - "0x10780017fff7fff", - "0x7", - "0x480a7ffa7fff8000", - "0x482680017ffb8000", - "0x1130", - "0x480a7ffc7fff8000", - "0x480a7ffd7fff8000", - "0x48127ffc7fff8000", - "0x48127ffc7fff8000", - "0x480680017fff8000", - "0x0", - "0x48127ffb7fff8000", - "0x48127ffb7fff8000", + "0x480a7ff87fff8000", "0x480680017fff8000", "0x1", "0x480680017fff8000", @@ -7340,6 +10020,8 @@ "0x0", "0x480680017fff8000", "0x0", + "0x48127ff87fff8000", + "0x48127ff87fff8000", "0x208b7fff7fff7ffe", "0x48297ffc80007ffd", "0x20680017fff7fff", @@ -7381,13 +10063,13 @@ "0xa0680017fff8000", "0x12", "0x4824800180007ffe", - "0x100000000", + "0x10000", "0x4844800180008002", "0x8000000000000110000000000000000", "0x4830800080017ffe", "0x480280027ffb7fff", "0x482480017ffe8000", - "0xefffffffffffffde00000000ffffffff", + "0xefffffffffffffde000000000000ffff", "0x480280037ffb7fff", "0x400280047ffb7ffb", "0x402480017fff7ffb", @@ -7398,7 +10080,7 @@ "0x1", "0x400280027ffb7ffe", "0x482480017ffe8000", - "0xffffffffffffffffffffffff00000000", + "0xffffffffffffffffffffffffffff0000", "0x400280037ffb7fff", "0x482480017ffa8000", "0x1", @@ -7412,13 +10094,13 @@ "0xa0680017fff8000", "0x12", "0x4824800180007ffe", - "0x10000000000000000", + "0x10000", "0x4844800180008002", "0x8000000000000110000000000000000", "0x4830800080017ffe", "0x480280047ffb7fff", "0x482480017ffe8000", - "0xefffffffffffffdeffffffffffffffff", + "0xefffffffffffffde000000000000ffff", "0x480280057ffb7fff", "0x400280067ffb7ffb", "0x402480017fff7ffb", @@ -7429,7 +10111,7 @@ "0x1", "0x400280047ffb7ffe", "0x482480017ffe8000", - "0xffffffffffffffff0000000000000000", + "0xffffffffffffffffffffffffffff0000", "0x400280057ffb7fff", "0x40780017fff7fff", "0x5", @@ -7467,26 +10149,206 @@ "0x1", "0x48127fee7fff8000", "0x10780017fff7fff", - "0x18", + "0x18", + "0x40780017fff7fff", + "0xe", + "0x482680017ffb8000", + "0x2", + "0x48127fee7fff8000", + "0x48127fee7fff8000", + "0x10780017fff7fff", + "0x10", + "0x40780017fff7fff", + "0xc", + "0x482680017ffb8000", + "0x3", + "0x482680017ffc8000", + "0x1", + "0x480a7ffd7fff8000", + "0x10780017fff7fff", + "0x7", + "0x40780017fff7fff", + "0x14", + "0x480a7ffb7fff8000", + "0x480a7ffc7fff8000", + "0x480a7ffd7fff8000", + "0x480680017fff8000", + "0x1", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x208b7fff7fff7ffe", + "0x48297ffc80007ffd", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0xa3", + "0x480280007ffc8000", + "0x20680017fff7fff", + "0x6d", + "0x482680017ffc8000", + "0x1", + "0x480a7ffd7fff8000", + "0x48307ffe80007fff", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0x5e", + "0x480080007ffd8000", + "0xa0680017fff8000", + "0x12", + "0x4824800180007ffe", + "0x10000000000000000", + "0x4844800180008002", + "0x8000000000000110000000000000000", + "0x4830800080017ffe", + "0x480280007ffb7fff", + "0x482480017ffe8000", + "0xefffffffffffffdeffffffffffffffff", + "0x480280017ffb7fff", + "0x400280027ffb7ffb", + "0x402480017fff7ffb", + "0xffffffffffffffffffffffffffffffff", + "0x20680017fff7fff", + "0x44", + "0x402780017fff7fff", + "0x1", + "0x400280007ffb7ffe", + "0x482480017ffe8000", + "0xffffffffffffffff0000000000000000", + "0x400280017ffb7fff", + "0x482480017ffa8000", + "0x1", + "0x48127ffa7fff8000", + "0x48307ffe80007fff", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0x2e", + "0x480080007ffd8000", + "0xa0680017fff8000", + "0x12", + "0x4824800180007ffe", + "0x100000000", + "0x4844800180008002", + "0x8000000000000110000000000000000", + "0x4830800080017ffe", + "0x480280027ffb7fff", + "0x482480017ffe8000", + "0xefffffffffffffde00000000ffffffff", + "0x480280037ffb7fff", + "0x400280047ffb7ffb", + "0x402480017fff7ffb", + "0xffffffffffffffffffffffffffffffff", + "0x20680017fff7fff", + "0x16", + "0x402780017fff7fff", + "0x1", + "0x400280027ffb7ffe", + "0x482480017ffe8000", + "0xffffffffffffffffffffffff00000000", + "0x400280037ffb7fff", + "0x40780017fff7fff", + "0x5", + "0x482680017ffb8000", + "0x4", + "0x482480017ff48000", + "0x1", + "0x48127ff47fff8000", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x5", + "0x48127fed7fff8000", + "0x48127ff27fff8000", + "0x208b7fff7fff7ffe", + "0x482680017ffb8000", + "0x5", + "0x482480017ff48000", + "0x1", + "0x48127ff47fff8000", + "0x10780017fff7fff", + "0x52", + "0x40780017fff7fff", + "0x8", + "0x482680017ffb8000", + "0x2", + "0x48127ff47fff8000", + "0x48127ff47fff8000", + "0x10780017fff7fff", + "0x4a", + "0x40780017fff7fff", + "0x6", + "0x482680017ffb8000", + "0x3", + "0x482480017fee8000", + "0x1", + "0x48127fee7fff8000", + "0x10780017fff7fff", + "0x41", "0x40780017fff7fff", "0xe", - "0x482680017ffb8000", - "0x2", + "0x480a7ffb7fff8000", "0x48127fee7fff8000", "0x48127fee7fff8000", "0x10780017fff7fff", - "0x10", + "0x3a", "0x40780017fff7fff", - "0xc", - "0x482680017ffb8000", + "0xf", + "0x4824800180007ff0", + "0x1", + "0x20680017fff7fff", + "0x11", + "0x40780017fff7fff", + "0x1", + "0x480a7ffb7fff8000", + "0x482680017ffc8000", + "0x1", + "0x480a7ffd7fff8000", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", "0x3", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x208b7fff7fff7ffe", + "0x4824800180007fef", + "0x2", + "0x20680017fff7fff", + "0xf", + "0x480a7ffb7fff8000", "0x482680017ffc8000", "0x1", "0x480a7ffd7fff8000", - "0x10780017fff7fff", - "0x7", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x1", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x208b7fff7fff7ffe", + "0x480a7ffb7fff8000", + "0x482680017ffc8000", + "0x1", + "0x480a7ffd7fff8000", + "0x480680017fff8000", + "0x1", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x208b7fff7fff7ffe", "0x40780017fff7fff", - "0x14", + "0x12", "0x480a7ffb7fff8000", "0x480a7ffc7fff8000", "0x480a7ffd7fff8000", @@ -7502,19 +10364,19 @@ "0xa0680017fff8000", "0x7", "0x482680017ff88000", - "0xfffffffffffffffffffffffffffff6fa", + "0xfffffffffffffffffffffffffffff3da", "0x400280007ff77fff", "0x10780017fff7fff", - "0x5b", + "0x90", "0x4825800180007ff8", - "0x906", + "0xc26", "0x400280007ff77fff", "0x20780017fff7ffd", "0xf", "0x482680017ff78000", "0x1", "0x482480017ffe8000", - "0xc8a", + "0xfaa", "0x480680017fff8000", "0x0", "0x480a7ff97fff8000", @@ -7528,49 +10390,102 @@ "0x20680017fff7fff", "0x4", "0x10780017fff7fff", - "0x31", + "0x66", "0x480280007ff98000", "0xa0680017fff8000", - "0x12", - "0x4824800180007ffe", - "0x100000000", - "0x4844800180008002", - "0x8000000000000110000000000000000", - "0x4830800080017ffe", - "0x480280017ff77fff", - "0x482480017ffe8000", - "0xefffffffffffffde00000000ffffffff", - "0x480280027ff77fff", - "0x400280037ff77ffb", - "0x402480017fff7ffb", + "0x16", + "0x480280017ff78003", + "0x480280027ff78003", + "0x4844800180017ffe", + "0x100000000000000000000000000000000", + "0x483080017ffd7ffb", + "0x482480017fff7ffd", + "0x800000000000010fffffffffffffffff7ffffffffffffef0000000000000001", + "0x20680017fff7ffc", + "0x6", + "0x402480017fff7ffd", "0xffffffffffffffffffffffffffffffff", + "0x10780017fff7fff", + "0x4", + "0x402480017ffe7ffd", + "0xf7ffffffffffffef0000000000000000", + "0x400280037ff77ffd", + "0x20680017fff7ffe", + "0x48", + "0x402780017fff7fff", + "0x1", + "0x400280017ff77ffe", + "0x482680017ff98000", + "0x1", + "0x480a7ffa7fff8000", + "0x48307ffe80007fff", "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0x35", + "0x480080007ffd8000", + "0xa0680017fff8000", + "0x16", + "0x480280027ff78003", + "0x480280037ff78003", + "0x4844800180017ffe", + "0x100000000000000000000000000000000", + "0x483080017ffd7ffb", + "0x482480017fff7ffd", + "0x800000000000010fffffffffffffffff7ffffffffffffef0000000000000001", + "0x20680017fff7ffc", + "0x6", + "0x402480017fff7ffd", + "0xffffffffffffffffffffffffffffffff", + "0x10780017fff7fff", + "0x4", + "0x402480017ffe7ffd", + "0xf7ffffffffffffef0000000000000000", + "0x400280047ff77ffd", + "0x20680017fff7ffe", "0x17", "0x402780017fff7fff", "0x1", - "0x400280017ff77ffe", - "0x482480017ffe8000", - "0xffffffffffffffffffffffff00000000", - "0x400280027ff77fff", - "0x400280007ffc7ffd", + "0x400280027ff77ffe", + "0x48127ff97fff8000", + "0x48127ffd7fff8000", + "0x400280007ffc7ffe", + "0x400280017ffc7fff", "0x482680017ff78000", "0x3", - "0x48127ffa7fff8000", - "0x482680017ff98000", + "0x48127ff47fff8000", + "0x482480017ff78000", "0x1", - "0x480a7ffa7fff8000", + "0x48127ff77fff8000", "0x480a7ffb7fff8000", "0x482680017ffc8000", - "0x1", + "0x2", "0x4825800180007ffd", "0x1", "0x1104800180018000", - "0x800000000000010ffffffffffffffffffffffffffffffffffffffffffffffc0", + "0x800000000000010ffffffffffffffffffffffffffffffffffffffffffffff9c", "0x208b7fff7fff7ffe", "0x482680017ff78000", + "0x5", + "0x482480017ff18000", + "0x46a", + "0x482480017ff48000", + "0x1", + "0x48127ff47fff8000", + "0x10780017fff7fff", + "0x19", + "0x482680017ff78000", + "0x2", + "0x482480017ff88000", + "0x988", + "0x48127ffb7fff8000", + "0x48127ffb7fff8000", + "0x10780017fff7fff", + "0x11", + "0x482680017ff78000", "0x4", - "0x482480017ff58000", - "0x4b0", + "0x482480017ff68000", + "0x76c", "0x482680017ff98000", "0x1", "0x480a7ffa7fff8000", @@ -7579,7 +10494,7 @@ "0x482680017ff78000", "0x1", "0x482480017ffd8000", - "0x9ce", + "0xcee", "0x480a7ff97fff8000", "0x480a7ffa7fff8000", "0x48127ffc7fff8000", @@ -7596,7 +10511,7 @@ "0x0", "0x208b7fff7fff7ffe", "0x1104800180018000", - "0x800000000000010fffffffffffffffffffffffffffffffffffffffffffff066", + "0x800000000000010ffffffffffffffffffffffffffffffffffffffffffffe815", "0x482680017ff78000", "0x1", "0x480a7ff87fff8000", @@ -7615,30 +10530,12 @@ "0x20680017fff7fff", "0x4", "0x10780017fff7fff", - "0x8d", + "0x8c", "0x480280007ffc8000", - "0xa0680017fff8000", - "0x12", - "0x4824800180007ffe", - "0x10000", - "0x4844800180008002", - "0x8000000000000110000000000000000", - "0x4830800080017ffe", - "0x480280007ffb7fff", - "0x482480017ffe8000", - "0xefffffffffffffde000000000000ffff", - "0x480280017ffb7fff", - "0x400280027ffb7ffb", - "0x402480017fff7ffb", - "0xffffffffffffffffffffffffffffffff", "0x20680017fff7fff", - "0x73", - "0x402780017fff7fff", + "0x3e", + "0x40780017fff7fff", "0x1", - "0x400280007ffb7ffe", - "0x482480017ffe8000", - "0xffffffffffffffffffffffffffff0000", - "0x400280017ffb7fff", "0x482680017ffc8000", "0x1", "0x480a7ffd7fff8000", @@ -7646,33 +10543,64 @@ "0x20680017fff7fff", "0x4", "0x10780017fff7fff", - "0x5d", + "0x2d", "0x480080007ffd8000", "0xa0680017fff8000", "0x12", "0x4824800180007ffe", - "0x10000", + "0x100000000", "0x4844800180008002", "0x8000000000000110000000000000000", "0x4830800080017ffe", - "0x480280027ffb7fff", + "0x480280007ffb7fff", "0x482480017ffe8000", - "0xefffffffffffffde000000000000ffff", - "0x480280037ffb7fff", - "0x400280047ffb7ffb", + "0xefffffffffffffde00000000ffffffff", + "0x480280017ffb7fff", + "0x400280027ffb7ffb", "0x402480017fff7ffb", "0xffffffffffffffffffffffffffffffff", "0x20680017fff7fff", - "0x43", + "0x15", "0x402780017fff7fff", "0x1", - "0x400280027ffb7ffe", + "0x400280007ffb7ffe", "0x482480017ffe8000", - "0xffffffffffffffffffffffffffff0000", - "0x400280037ffb7fff", - "0x482480017ffa8000", + "0xffffffffffffffffffffffff00000000", + "0x400280017ffb7fff", + "0x40780017fff7fff", + "0x5", + "0x482680017ffb8000", + "0x2", + "0x482480017ff48000", "0x1", - "0x48127ffa7fff8000", + "0x48127ff47fff8000", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x48127ff37fff8000", + "0x208b7fff7fff7ffe", + "0x482680017ffb8000", + "0x3", + "0x482480017ff48000", + "0x1", + "0x48127ff47fff8000", + "0x10780017fff7fff", + "0x59", + "0x40780017fff7fff", + "0x8", + "0x480a7ffb7fff8000", + "0x48127ff47fff8000", + "0x48127ff47fff8000", + "0x10780017fff7fff", + "0x52", + "0x4824800180007fff", + "0x1", + "0x20680017fff7fff", + "0x3c", + "0x482680017ffc8000", + "0x1", + "0x480a7ffd7fff8000", "0x48307ffe80007fff", "0x20680017fff7fff", "0x4", @@ -7682,81 +10610,67 @@ "0xa0680017fff8000", "0x12", "0x4824800180007ffe", - "0x10000", + "0x10000000000000000", "0x4844800180008002", "0x8000000000000110000000000000000", "0x4830800080017ffe", - "0x480280047ffb7fff", + "0x480280007ffb7fff", "0x482480017ffe8000", - "0xefffffffffffffde000000000000ffff", - "0x480280057ffb7fff", - "0x400280067ffb7ffb", + "0xefffffffffffffdeffffffffffffffff", + "0x480280017ffb7fff", + "0x400280027ffb7ffb", "0x402480017fff7ffb", "0xffffffffffffffffffffffffffffffff", "0x20680017fff7fff", "0x15", "0x402780017fff7fff", "0x1", - "0x400280047ffb7ffe", + "0x400280007ffb7ffe", "0x482480017ffe8000", - "0xffffffffffffffffffffffffffff0000", - "0x400280057ffb7fff", + "0xffffffffffffffff0000000000000000", + "0x400280017ffb7fff", "0x40780017fff7fff", "0x5", "0x482680017ffb8000", - "0x6", + "0x2", "0x482480017ff48000", "0x1", "0x48127ff47fff8000", "0x480680017fff8000", "0x0", - "0x48127fe87fff8000", - "0x48127fed7fff8000", - "0x48127ff27fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ff37fff8000", "0x208b7fff7fff7ffe", "0x482680017ffb8000", - "0x7", + "0x3", "0x482480017ff48000", "0x1", "0x48127ff47fff8000", "0x10780017fff7fff", - "0x29", + "0x1b", "0x40780017fff7fff", "0x8", - "0x482680017ffb8000", - "0x4", + "0x480a7ffb7fff8000", "0x48127ff47fff8000", "0x48127ff47fff8000", "0x10780017fff7fff", - "0x21", - "0x40780017fff7fff", - "0x6", - "0x482680017ffb8000", - "0x5", - "0x482480017fee8000", - "0x1", - "0x48127fee7fff8000", - "0x10780017fff7fff", - "0x18", - "0x40780017fff7fff", - "0xe", - "0x482680017ffb8000", - "0x2", - "0x48127fee7fff8000", - "0x48127fee7fff8000", - "0x10780017fff7fff", - "0x10", + "0x14", "0x40780017fff7fff", - "0xc", - "0x482680017ffb8000", - "0x3", + "0xb", + "0x480a7ffb7fff8000", "0x482680017ffc8000", "0x1", "0x480a7ffd7fff8000", - "0x10780017fff7fff", - "0x7", + "0x480680017fff8000", + "0x1", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x208b7fff7fff7ffe", "0x40780017fff7fff", - "0x14", + "0xd", "0x480a7ffb7fff8000", "0x480a7ffc7fff8000", "0x480a7ffd7fff8000", @@ -7766,14 +10680,13 @@ "0x0", "0x480680017fff8000", "0x0", - "0x480680017fff8000", - "0x0", "0x208b7fff7fff7ffe" ], "bytecode_segment_lengths": [ - 191, 144, 168, 144, 131, 181, 113, 146, 164, 113, 113, 145, 115, 147, 131, 130, 114, 92, 174, - 96, 75, 97, 123, 97, 113, 162, 169, 5, 5, 5, 141, 48, 158, 127, 48, 157, 155, 161, 165, 67, 191, - 48, 187, 163, 131, 206, 210, 158, 128, 139, 128, 156, 155, 7, 112, 139, 112, 139, 158, 112, 158 + 191, 144, 168, 144, 131, 181, 113, 143, 146, 146, 164, 113, 113, 145, 115, 147, 131, 130, 114, + 144, 92, 174, 96, 75, 97, 123, 97, 113, 162, 130, 169, 121, 102, 5, 5, 5, 141, 48, 158, 127, 48, + 157, 155, 161, 138, 189, 165, 67, 95, 68, 191, 48, 187, 163, 131, 206, 210, 189, 158, 128, 139, + 128, 156, 155, 126, 771, 7, 112, 139, 50, 112, 139, 158, 112, 158, 180, 165, 155 ], "hints": [ [ @@ -7781,19 +10694,9 @@ [ { "TestLessThanOrEqual": { - "lhs": { - "Immediate": "0x0" - }, - "rhs": { - "Deref": { - "register": "FP", - "offset": -6 - } - }, - "dst": { - "register": "AP", - "offset": 0 - } + "lhs": { "Immediate": "0x0" }, + "rhs": { "Deref": { "register": "FP", "offset": -6 } }, + "dst": { "register": "AP", "offset": 0 } } } ] @@ -7806,22 +10709,12 @@ "lhs": { "BinOp": { "op": "Add", - "a": { - "register": "AP", - "offset": -1 - }, - "b": { - "Immediate": "0x0" - } + "a": { "register": "AP", "offset": -1 }, + "b": { "Immediate": "0x0" } } }, - "rhs": { - "Immediate": "0x10000" - }, - "dst": { - "register": "AP", - "offset": 0 - } + "rhs": { "Immediate": "0x10000" }, + "dst": { "register": "AP", "offset": 0 } } } ] @@ -7831,26 +10724,11 @@ [ { "LinearSplit": { - "value": { - "Deref": { - "register": "AP", - "offset": -1 - } - }, - "scalar": { - "Immediate": "0x8000000000000110000000000000000" - }, - "max_x": { - "Immediate": "0xfffffffffffffffffffffffffffffffe" - }, - "x": { - "register": "AP", - "offset": 0 - }, - "y": { - "register": "AP", - "offset": 1 - } + "value": { "Deref": { "register": "AP", "offset": -1 } }, + "scalar": { "Immediate": "0x8000000000000110000000000000000" }, + "max_x": { "Immediate": "0xfffffffffffffffffffffffffffffffe" }, + "x": { "register": "AP", "offset": 0 }, + "y": { "register": "AP", "offset": 1 } } } ] @@ -7860,4407 +10738,2962 @@ [ { "TestLessThanOrEqual": { - "lhs": { - "Immediate": "0x0" - }, - "rhs": { - "Deref": { - "register": "AP", - "offset": -10 - } - }, - "dst": { - "register": "AP", - "offset": 0 - } + "lhs": { "Immediate": "0x0" }, + "rhs": { "Deref": { "register": "AP", "offset": -10 } }, + "dst": { "register": "AP", "offset": 0 } } } ] ], + [120, [{ "AllocSegment": { "dst": { "register": "AP", "offset": 0 } } }]], [ - 120, + 191, [ { - "AllocSegment": { - "dst": { - "register": "AP", - "offset": 0 - } + "TestLessThanOrEqual": { + "lhs": { "Immediate": "0x0" }, + "rhs": { "Deref": { "register": "FP", "offset": -6 } }, + "dst": { "register": "AP", "offset": 0 } } } ] ], [ - 191, + 232, [ { "TestLessThanOrEqual": { - "lhs": { - "Immediate": "0x0" - }, - "rhs": { - "Deref": { - "register": "FP", - "offset": -6 - } - }, - "dst": { - "register": "AP", - "offset": 0 - } + "lhs": { "Immediate": "0x8e8" }, + "rhs": { "Deref": { "register": "AP", "offset": -13 } }, + "dst": { "register": "AP", "offset": 0 } } } ] ], + [244, [{ "AllocSegment": { "dst": { "register": "AP", "offset": 0 } } }]], [ - 232, + 335, [ { "TestLessThanOrEqual": { - "lhs": { - "Immediate": "0x8e8" - }, - "rhs": { - "Deref": { - "register": "AP", - "offset": -13 - } - }, - "dst": { - "register": "AP", - "offset": 0 - } + "lhs": { "Immediate": "0x0" }, + "rhs": { "Deref": { "register": "FP", "offset": -6 } }, + "dst": { "register": "AP", "offset": 0 } } } ] ], [ - 244, + 418, [ { - "AllocSegment": { - "dst": { - "register": "AP", - "offset": 0 - } + "TestLessThanOrEqual": { + "lhs": { "Immediate": "0x0" }, + "rhs": { "Deref": { "register": "AP", "offset": -12 } }, + "dst": { "register": "AP", "offset": 0 } } } ] ], + [430, [{ "AllocSegment": { "dst": { "register": "AP", "offset": 0 } } }]], [ - 335, + 503, [ { "TestLessThanOrEqual": { - "lhs": { - "Immediate": "0x0" - }, - "rhs": { - "Deref": { - "register": "FP", - "offset": -6 - } - }, - "dst": { - "register": "AP", - "offset": 0 - } + "lhs": { "Immediate": "0x9f6" }, + "rhs": { "Deref": { "register": "FP", "offset": -6 } }, + "dst": { "register": "AP", "offset": 0 } } } ] ], [ - 418, + 544, [ { "TestLessThanOrEqual": { - "lhs": { - "Immediate": "0x0" - }, - "rhs": { - "Deref": { - "register": "AP", - "offset": -12 - } - }, - "dst": { - "register": "AP", - "offset": 0 - } + "lhs": { "Immediate": "0xa0a" }, + "rhs": { "Deref": { "register": "AP", "offset": -14 } }, + "dst": { "register": "AP", "offset": 0 } } } ] ], + [556, [{ "AllocSegment": { "dst": { "register": "AP", "offset": 0 } } }]], [ - 430, + 647, [ { - "AllocSegment": { - "dst": { - "register": "AP", - "offset": 0 - } + "TestLessThanOrEqual": { + "lhs": { "Immediate": "0x0" }, + "rhs": { "Deref": { "register": "FP", "offset": -6 } }, + "dst": { "register": "AP", "offset": 0 } } } ] ], [ - 503, + 685, [ { "TestLessThanOrEqual": { - "lhs": { - "Immediate": "0x9f6" - }, - "rhs": { - "Deref": { - "register": "FP", - "offset": -6 - } - }, - "dst": { - "register": "AP", - "offset": 0 - } + "lhs": { "Immediate": "0x0" }, + "rhs": { "Deref": { "register": "AP", "offset": -35 } }, + "dst": { "register": "AP", "offset": 0 } } } ] ], + [697, [{ "AllocSegment": { "dst": { "register": "AP", "offset": 0 } } }]], [ - 544, + 778, [ { "TestLessThanOrEqual": { - "lhs": { - "Immediate": "0xa0a" - }, - "rhs": { - "Deref": { - "register": "AP", - "offset": -14 - } - }, - "dst": { - "register": "AP", - "offset": 0 - } + "lhs": { "Immediate": "0x0" }, + "rhs": { "Deref": { "register": "FP", "offset": -6 } }, + "dst": { "register": "AP", "offset": 0 } } } ] ], [ - 556, + 858, [ { - "AllocSegment": { - "dst": { - "register": "AP", - "offset": 0 - } + "TestLessThanOrEqual": { + "lhs": { "Immediate": "0x0" }, + "rhs": { "Deref": { "register": "AP", "offset": -11 } }, + "dst": { "register": "AP", "offset": 0 } } } ] ], + [870, [{ "AllocSegment": { "dst": { "register": "AP", "offset": 0 } } }]], [ - 647, + 959, [ { "TestLessThanOrEqual": { - "lhs": { - "Immediate": "0x0" - }, - "rhs": { - "Deref": { - "register": "FP", - "offset": -6 - } - }, - "dst": { - "register": "AP", - "offset": 0 - } + "lhs": { "Immediate": "0x0" }, + "rhs": { "Deref": { "register": "FP", "offset": -6 } }, + "dst": { "register": "AP", "offset": 0 } } } ] ], [ - 685, + 997, [ { "TestLessThanOrEqual": { - "lhs": { - "Immediate": "0x0" - }, - "rhs": { - "Deref": { - "register": "AP", - "offset": -35 - } - }, - "dst": { - "register": "AP", - "offset": 0 - } + "lhs": { "Immediate": "0x0" }, + "rhs": { "Deref": { "register": "AP", "offset": -37 } }, + "dst": { "register": "AP", "offset": 0 } } } ] ], + [1009, [{ "AllocSegment": { "dst": { "register": "AP", "offset": 0 } } }]], [ - 697, + 1072, [ { - "AllocSegment": { - "dst": { - "register": "AP", - "offset": 0 - } + "TestLessThanOrEqual": { + "lhs": { "Immediate": "0xfbe" }, + "rhs": { "Deref": { "register": "FP", "offset": -6 } }, + "dst": { "register": "AP", "offset": 0 } } } ] ], [ - 778, + 1113, [ { "TestLessThanOrEqual": { - "lhs": { - "Immediate": "0x0" - }, - "rhs": { - "Deref": { - "register": "FP", - "offset": -6 - } - }, - "dst": { - "register": "AP", - "offset": 0 - } + "lhs": { "Immediate": "0xf82" }, + "rhs": { "Deref": { "register": "AP", "offset": -15 } }, + "dst": { "register": "AP", "offset": 0 } } } ] ], + [1125, [{ "AllocSegment": { "dst": { "register": "AP", "offset": 0 } } }]], [ - 858, + 1215, [ { "TestLessThanOrEqual": { - "lhs": { - "Immediate": "0x0" - }, - "rhs": { - "Deref": { - "register": "AP", - "offset": -11 - } - }, - "dst": { - "register": "AP", - "offset": 0 - } + "lhs": { "Immediate": "0x0" }, + "rhs": { "Deref": { "register": "FP", "offset": -6 } }, + "dst": { "register": "AP", "offset": 0 } } } ] ], + [1230, [{ "AllocSegment": { "dst": { "register": "AP", "offset": 0 } } }]], [ - 870, + 1267, [ { - "AllocSegment": { - "dst": { - "register": "AP", - "offset": 0 - } + "TestLessThanOrEqual": { + "lhs": { "Immediate": "0x0" }, + "rhs": { "Deref": { "register": "AP", "offset": -12 } }, + "dst": { "register": "AP", "offset": 0 } } } ] ], + [1280, [{ "AllocSegment": { "dst": { "register": "AP", "offset": 0 } } }]], [ - 959, + 1361, [ { "TestLessThanOrEqual": { - "lhs": { - "Immediate": "0x0" - }, - "rhs": { - "Deref": { - "register": "FP", - "offset": -6 - } - }, - "dst": { - "register": "AP", - "offset": 0 - } + "lhs": { "Immediate": "0x0" }, + "rhs": { "Deref": { "register": "FP", "offset": -6 } }, + "dst": { "register": "AP", "offset": 0 } } } ] ], + [1376, [{ "AllocSegment": { "dst": { "register": "AP", "offset": 0 } } }]], [ - 997, + 1413, + [ + { + "TestLessThanOrEqual": { + "lhs": { "Immediate": "0x0" }, + "rhs": { "Deref": { "register": "AP", "offset": -12 } }, + "dst": { "register": "AP", "offset": 0 } + } + } + ] + ], + [1426, [{ "AllocSegment": { "dst": { "register": "AP", "offset": 0 } } }]], + [ + 1507, [ { "TestLessThanOrEqual": { + "lhs": { "Immediate": "0x0" }, + "rhs": { "Deref": { "register": "FP", "offset": -6 } }, + "dst": { "register": "AP", "offset": 0 } + } + } + ] + ], + [ + 1534, + [ + { + "TestLessThan": { "lhs": { - "Immediate": "0x0" - }, - "rhs": { - "Deref": { - "register": "AP", - "offset": -37 + "BinOp": { + "op": "Add", + "a": { "register": "AP", "offset": -1 }, + "b": { "Immediate": "0x0" } } }, - "dst": { - "register": "AP", - "offset": 0 - } + "rhs": { "Immediate": "0x10000" }, + "dst": { "register": "AP", "offset": 0 } } } ] ], [ - 1009, + 1538, [ { - "AllocSegment": { - "dst": { - "register": "AP", - "offset": 0 - } + "LinearSplit": { + "value": { "Deref": { "register": "AP", "offset": -1 } }, + "scalar": { "Immediate": "0x8000000000000110000000000000000" }, + "max_x": { "Immediate": "0xfffffffffffffffffffffffffffffffe" }, + "x": { "register": "AP", "offset": 0 }, + "y": { "register": "AP", "offset": 1 } } } ] ], [ - 1072, + 1608, [ { "TestLessThanOrEqual": { - "lhs": { - "Immediate": "0x0" - }, - "rhs": { - "Deref": { - "register": "FP", - "offset": -6 - } - }, - "dst": { - "register": "AP", - "offset": 0 - } + "lhs": { "Immediate": "0x0" }, + "rhs": { "Deref": { "register": "AP", "offset": -8 } }, + "dst": { "register": "AP", "offset": 0 } } } ] ], + [1620, [{ "AllocSegment": { "dst": { "register": "AP", "offset": 0 } } }]], [ - 1087, + 1671, [ { - "AllocSegment": { - "dst": { - "register": "AP", - "offset": 0 - } + "TestLessThanOrEqual": { + "lhs": { "Immediate": "0x0" }, + "rhs": { "Deref": { "register": "FP", "offset": -6 } }, + "dst": { "register": "AP", "offset": 0 } } } ] ], [ - 1124, + 1709, [ { "TestLessThanOrEqual": { - "lhs": { - "Immediate": "0x0" - }, - "rhs": { - "Deref": { - "register": "AP", - "offset": -12 - } - }, - "dst": { - "register": "AP", - "offset": 0 - } + "lhs": { "Immediate": "0x0" }, + "rhs": { "Deref": { "register": "AP", "offset": -37 } }, + "dst": { "register": "AP", "offset": 0 } + } + } + ] + ], + [1721, [{ "AllocSegment": { "dst": { "register": "AP", "offset": 0 } } }]], + [ + 1784, + [ + { + "TestLessThanOrEqual": { + "lhs": { "Immediate": "0x0" }, + "rhs": { "Deref": { "register": "FP", "offset": -6 } }, + "dst": { "register": "AP", "offset": 0 } + } + } + ] + ], + [ + 1822, + [ + { + "TestLessThanOrEqual": { + "lhs": { "Immediate": "0x0" }, + "rhs": { "Deref": { "register": "AP", "offset": -31 } }, + "dst": { "register": "AP", "offset": 0 } + } + } + ] + ], + [1834, [{ "AllocSegment": { "dst": { "register": "AP", "offset": 0 } } }]], + [ + 1897, + [ + { + "TestLessThanOrEqual": { + "lhs": { "Immediate": "0xa" }, + "rhs": { "Deref": { "register": "FP", "offset": -6 } }, + "dst": { "register": "AP", "offset": 0 } + } + } + ] + ], + [ + 1938, + [ + { + "TestLessThanOrEqual": { + "lhs": { "Immediate": "0x816" }, + "rhs": { "Deref": { "register": "AP", "offset": -13 } }, + "dst": { "register": "AP", "offset": 0 } + } + } + ] + ], + [1950, [{ "AllocSegment": { "dst": { "register": "AP", "offset": 0 } } }]], + [ + 2042, + [ + { + "TestLessThanOrEqual": { + "lhs": { "Immediate": "0x1ae" }, + "rhs": { "Deref": { "register": "FP", "offset": -6 } }, + "dst": { "register": "AP", "offset": 0 } + } + } + ] + ], + [ + 2080, + [ + { + "TestLessThanOrEqual": { + "lhs": { "Immediate": "0x0" }, + "rhs": { "Deref": { "register": "AP", "offset": -56 } }, + "dst": { "register": "AP", "offset": 0 } + } + } + ] + ], + [2092, [{ "AllocSegment": { "dst": { "register": "AP", "offset": 0 } } }]], + [ + 2157, + [ + { + "TestLessThanOrEqual": { + "lhs": { "Immediate": "0xc4e" }, + "rhs": { "Deref": { "register": "FP", "offset": -6 } }, + "dst": { "register": "AP", "offset": 0 } + } + } + ] + ], + [ + 2198, + [ + { + "TestLessThanOrEqual": { + "lhs": { "Immediate": "0x87a" }, + "rhs": { "Deref": { "register": "AP", "offset": -14 } }, + "dst": { "register": "AP", "offset": 0 } + } + } + ] + ], + [2210, [{ "AllocSegment": { "dst": { "register": "AP", "offset": 0 } } }]], + [ + 2304, + [ + { + "TestLessThanOrEqual": { + "lhs": { "Immediate": "0x0" }, + "rhs": { "Deref": { "register": "FP", "offset": -6 } }, + "dst": { "register": "AP", "offset": 0 } } } ] ], [ - 1137, + 2342, [ { - "AllocSegment": { - "dst": { - "register": "AP", - "offset": 0 - } + "TestLessThanOrEqual": { + "lhs": { "Immediate": "0x0" }, + "rhs": { "Deref": { "register": "AP", "offset": -47 } }, + "dst": { "register": "AP", "offset": 0 } } } ] ], + [2354, [{ "AllocSegment": { "dst": { "register": "AP", "offset": 0 } } }]], [ - 1218, + 2435, [ { "TestLessThanOrEqual": { - "lhs": { - "Immediate": "0x0" - }, - "rhs": { - "Deref": { - "register": "FP", - "offset": -6 - } - }, - "dst": { - "register": "AP", - "offset": 0 - } + "lhs": { "Immediate": "0x0" }, + "rhs": { "Deref": { "register": "FP", "offset": -6 } }, + "dst": { "register": "AP", "offset": 0 } } } ] ], [ - 1245, + 2473, [ { - "TestLessThan": { - "lhs": { - "BinOp": { - "op": "Add", - "a": { - "register": "AP", - "offset": -1 - }, - "b": { - "Immediate": "0x0" - } - } - }, - "rhs": { - "Immediate": "0x10000" - }, - "dst": { - "register": "AP", - "offset": 0 - } + "TestLessThanOrEqual": { + "lhs": { "Immediate": "0x0" }, + "rhs": { "Deref": { "register": "AP", "offset": -36 } }, + "dst": { "register": "AP", "offset": 0 } } } ] ], + [2485, [{ "AllocSegment": { "dst": { "register": "AP", "offset": 0 } } }]], [ - 1249, + 2565, [ { - "LinearSplit": { - "value": { - "Deref": { - "register": "AP", - "offset": -1 - } - }, - "scalar": { - "Immediate": "0x8000000000000110000000000000000" - }, - "max_x": { - "Immediate": "0xfffffffffffffffffffffffffffffffe" - }, - "x": { - "register": "AP", - "offset": 0 - }, - "y": { - "register": "AP", - "offset": 1 - } + "TestLessThanOrEqual": { + "lhs": { "Immediate": "0x0" }, + "rhs": { "Deref": { "register": "FP", "offset": -6 } }, + "dst": { "register": "AP", "offset": 0 } } } ] ], [ - 1319, + 2603, [ { "TestLessThanOrEqual": { - "lhs": { - "Immediate": "0x0" - }, - "rhs": { - "Deref": { - "register": "AP", - "offset": -8 - } - }, - "dst": { - "register": "AP", - "offset": 0 - } + "lhs": { "Immediate": "0x0" }, + "rhs": { "Deref": { "register": "AP", "offset": -38 } }, + "dst": { "register": "AP", "offset": 0 } } } ] ], + [2615, [{ "AllocSegment": { "dst": { "register": "AP", "offset": 0 } } }]], [ - 1331, + 2679, [ { - "AllocSegment": { - "dst": { - "register": "AP", - "offset": 0 - } + "TestLessThanOrEqual": { + "lhs": { "Immediate": "0x1086" }, + "rhs": { "Deref": { "register": "FP", "offset": -6 } }, + "dst": { "register": "AP", "offset": 0 } } } ] ], [ - 1382, + 2720, [ { "TestLessThanOrEqual": { - "lhs": { - "Immediate": "0x0" - }, - "rhs": { - "Deref": { - "register": "FP", - "offset": -6 - } - }, - "dst": { - "register": "AP", - "offset": 0 - } + "lhs": { "Immediate": "0xf1e" }, + "rhs": { "Deref": { "register": "AP", "offset": -15 } }, + "dst": { "register": "AP", "offset": 0 } } } ] ], + [2732, [{ "AllocSegment": { "dst": { "register": "AP", "offset": 0 } } }]], [ - 1420, + 2823, [ { "TestLessThanOrEqual": { - "lhs": { - "Immediate": "0x0" - }, - "rhs": { - "Deref": { - "register": "AP", - "offset": -37 - } - }, - "dst": { - "register": "AP", - "offset": 0 - } + "lhs": { "Immediate": "0x0" }, + "rhs": { "Deref": { "register": "FP", "offset": -6 } }, + "dst": { "register": "AP", "offset": 0 } } } ] ], [ - 1432, + 2861, [ { - "AllocSegment": { - "dst": { - "register": "AP", - "offset": 0 - } + "TestLessThanOrEqual": { + "lhs": { "Immediate": "0x0" }, + "rhs": { "Deref": { "register": "AP", "offset": -31 } }, + "dst": { "register": "AP", "offset": 0 } } } ] ], + [2873, [{ "AllocSegment": { "dst": { "register": "AP", "offset": 0 } } }]], [ - 1495, + 2915, [ { "TestLessThanOrEqual": { - "lhs": { - "Immediate": "0x0" - }, - "rhs": { - "Deref": { - "register": "FP", - "offset": -6 - } - }, - "dst": { - "register": "AP", - "offset": 0 - } + "lhs": { "Immediate": "0x0" }, + "rhs": { "Deref": { "register": "FP", "offset": -6 } }, + "dst": { "register": "AP", "offset": 0 } } } ] ], [ - 1533, + 2931, [ { - "TestLessThanOrEqual": { + "TestLessThan": { "lhs": { - "Immediate": "0x0" - }, - "rhs": { - "Deref": { - "register": "AP", - "offset": -31 + "BinOp": { + "op": "Add", + "a": { "register": "AP", "offset": -1 }, + "b": { "Immediate": "0x0" } } }, - "dst": { - "register": "AP", - "offset": 0 - } + "rhs": { "Immediate": "0x10000000000000000" }, + "dst": { "register": "AP", "offset": 0 } } } ] ], [ - 1545, + 2935, [ { - "AllocSegment": { - "dst": { - "register": "AP", - "offset": 0 - } + "LinearSplit": { + "value": { "Deref": { "register": "AP", "offset": -1 } }, + "scalar": { "Immediate": "0x8000000000000110000000000000000" }, + "max_x": { "Immediate": "0xfffffffffffffffffffffffffffffffe" }, + "x": { "register": "AP", "offset": 0 }, + "y": { "register": "AP", "offset": 1 } } } ] ], [ - 1608, + 2962, [ { - "TestLessThanOrEqual": { + "TestLessThan": { "lhs": { - "Immediate": "0xa" - }, - "rhs": { - "Deref": { - "register": "FP", - "offset": -6 + "BinOp": { + "op": "Add", + "a": { "register": "AP", "offset": -1 }, + "b": { "Immediate": "0x0" } } }, - "dst": { - "register": "AP", - "offset": 0 - } + "rhs": { "Immediate": "0x100000000" }, + "dst": { "register": "AP", "offset": 0 } } } ] ], [ - 1649, + 2966, [ { - "TestLessThanOrEqual": { - "lhs": { - "Immediate": "0x816" - }, - "rhs": { - "Deref": { - "register": "AP", - "offset": -13 - } - }, - "dst": { - "register": "AP", - "offset": 0 - } + "LinearSplit": { + "value": { "Deref": { "register": "AP", "offset": -1 } }, + "scalar": { "Immediate": "0x8000000000000110000000000000000" }, + "max_x": { "Immediate": "0xfffffffffffffffffffffffffffffffe" }, + "x": { "register": "AP", "offset": 0 }, + "y": { "register": "AP", "offset": 1 } } } ] ], [ - 1661, + 3008, [ { - "AllocSegment": { - "dst": { - "register": "AP", - "offset": 0 - } + "TestLessThanOrEqual": { + "lhs": { "Immediate": "0x0" }, + "rhs": { "Deref": { "register": "AP", "offset": -18 } }, + "dst": { "register": "AP", "offset": 0 } } } ] ], + [3022, [{ "AllocSegment": { "dst": { "register": "AP", "offset": 0 } } }]], [ - 1753, + 3089, [ { "TestLessThanOrEqual": { - "lhs": { - "Immediate": "0x1ae" - }, - "rhs": { - "Deref": { - "register": "FP", - "offset": -6 - } - }, - "dst": { - "register": "AP", - "offset": 0 - } + "lhs": { "Immediate": "0x0" }, + "rhs": { "Deref": { "register": "FP", "offset": -6 } }, + "dst": { "register": "AP", "offset": 0 } } } ] ], [ - 1791, + 3127, [ { "TestLessThanOrEqual": { - "lhs": { - "Immediate": "0x0" - }, - "rhs": { - "Deref": { - "register": "AP", - "offset": -56 - } - }, - "dst": { - "register": "AP", - "offset": 0 - } + "lhs": { "Immediate": "0x0" }, + "rhs": { "Deref": { "register": "AP", "offset": -39 } }, + "dst": { "register": "AP", "offset": 0 } } } ] ], + [3139, [{ "AllocSegment": { "dst": { "register": "AP", "offset": 0 } } }]], [ - 1803, + 3185, [ { - "AllocSegment": { - "dst": { - "register": "AP", - "offset": 0 - } + "TestLessThanOrEqual": { + "lhs": { "Immediate": "0x0" }, + "rhs": { "Deref": { "register": "FP", "offset": -6 } }, + "dst": { "register": "AP", "offset": 0 } } } ] ], [ - 1868, + 3216, [ { "TestLessThanOrEqual": { - "lhs": { - "Immediate": "0xc4e" - }, - "rhs": { - "Deref": { - "register": "FP", - "offset": -6 - } - }, - "dst": { - "register": "AP", - "offset": 0 - } + "lhs": { "Immediate": "0x0" }, + "rhs": { "Deref": { "register": "AP", "offset": -6 } }, + "dst": { "register": "AP", "offset": 0 } } } ] ], + [3228, [{ "AllocSegment": { "dst": { "register": "AP", "offset": 0 } } }]], [ - 1909, + 3260, [ { "TestLessThanOrEqual": { - "lhs": { - "Immediate": "0x87a" - }, - "rhs": { - "Deref": { - "register": "AP", - "offset": -14 - } - }, - "dst": { - "register": "AP", - "offset": 0 - } + "lhs": { "Immediate": "0x776" }, + "rhs": { "Deref": { "register": "FP", "offset": -6 } }, + "dst": { "register": "AP", "offset": 0 } } } ] ], [ - 1921, + 3298, [ { - "AllocSegment": { - "dst": { - "register": "AP", - "offset": 0 - } + "TestLessThanOrEqual": { + "lhs": { "Immediate": "0x0" }, + "rhs": { "Deref": { "register": "AP", "offset": -63 } }, + "dst": { "register": "AP", "offset": 0 } } } ] ], + [3310, [{ "AllocSegment": { "dst": { "register": "AP", "offset": 0 } } }]], [ - 2015, + 3357, [ { "TestLessThanOrEqual": { - "lhs": { - "Immediate": "0x0" - }, - "rhs": { - "Deref": { - "register": "FP", - "offset": -6 - } - }, - "dst": { - "register": "AP", - "offset": 0 - } + "lhs": { "Immediate": "0x15e" }, + "rhs": { "Deref": { "register": "FP", "offset": -6 } }, + "dst": { "register": "AP", "offset": 0 } } } ] ], [ - 2053, + 3398, [ { "TestLessThanOrEqual": { - "lhs": { - "Immediate": "0x0" - }, - "rhs": { - "Deref": { - "register": "AP", - "offset": -47 - } - }, - "dst": { - "register": "AP", - "offset": 0 - } + "lhs": { "Immediate": "0x6ea" }, + "rhs": { "Deref": { "register": "AP", "offset": -13 } }, + "dst": { "register": "AP", "offset": 0 } } } ] ], + [3410, [{ "AllocSegment": { "dst": { "register": "AP", "offset": 0 } } }]], [ - 2065, + 3480, [ { - "AllocSegment": { - "dst": { - "register": "AP", - "offset": 0 - } + "TestLessThanOrEqual": { + "lhs": { "Immediate": "0x776" }, + "rhs": { "Deref": { "register": "FP", "offset": -6 } }, + "dst": { "register": "AP", "offset": 0 } } } ] ], [ - 2146, + 3518, [ { "TestLessThanOrEqual": { - "lhs": { - "Immediate": "0x0" - }, - "rhs": { - "Deref": { - "register": "FP", - "offset": -6 - } - }, - "dst": { - "register": "AP", - "offset": 0 - } + "lhs": { "Immediate": "0x0" }, + "rhs": { "Deref": { "register": "AP", "offset": -63 } }, + "dst": { "register": "AP", "offset": 0 } } } ] ], + [3530, [{ "AllocSegment": { "dst": { "register": "AP", "offset": 0 } } }]], [ - 2184, + 3577, [ { "TestLessThanOrEqual": { - "lhs": { - "Immediate": "0x0" - }, - "rhs": { - "Deref": { - "register": "AP", - "offset": -36 - } - }, - "dst": { - "register": "AP", - "offset": 0 - } + "lhs": { "Immediate": "0x0" }, + "rhs": { "Deref": { "register": "FP", "offset": -6 } }, + "dst": { "register": "AP", "offset": 0 } } } ] ], [ - 2196, + 3615, [ { - "AllocSegment": { - "dst": { - "register": "AP", - "offset": 0 - } + "TestLessThanOrEqual": { + "lhs": { "Immediate": "0x0" }, + "rhs": { "Deref": { "register": "AP", "offset": -37 } }, + "dst": { "register": "AP", "offset": 0 } } } ] ], + [3627, [{ "AllocSegment": { "dst": { "register": "AP", "offset": 0 } } }]], [ - 2276, + 3690, [ { "TestLessThanOrEqual": { - "lhs": { - "Immediate": "0x0" - }, - "rhs": { - "Deref": { - "register": "FP", - "offset": -6 - } - }, - "dst": { - "register": "AP", - "offset": 0 - } + "lhs": { "Immediate": "0x0" }, + "rhs": { "Deref": { "register": "FP", "offset": -6 } }, + "dst": { "register": "AP", "offset": 0 } } } ] ], [ - 2314, + 3706, [ { - "TestLessThanOrEqual": { - "lhs": { - "Immediate": "0x0" - }, - "rhs": { - "Deref": { - "register": "AP", - "offset": -38 - } - }, - "dst": { - "register": "AP", - "offset": 0 - } + "TestLessThan": { + "lhs": { "Deref": { "register": "AP", "offset": -1 } }, + "rhs": { "Immediate": "0x100000000000000000000000000000000" }, + "dst": { "register": "AP", "offset": 0 } } } ] ], [ - 2326, + 3708, [ { - "AllocSegment": { - "dst": { - "register": "AP", - "offset": 0 - } + "DivMod": { + "lhs": { "Deref": { "register": "AP", "offset": -2 } }, + "rhs": { "Immediate": "0x100000000000000000000000000000000" }, + "quotient": { "register": "AP", "offset": 3 }, + "remainder": { "register": "AP", "offset": 4 } } } ] ], [ - 2390, + 3758, [ { "TestLessThanOrEqual": { - "lhs": { - "Immediate": "0x0" - }, - "rhs": { - "Deref": { - "register": "FP", - "offset": -6 - } - }, - "dst": { - "register": "AP", - "offset": 0 - } + "lhs": { "Immediate": "0x0" }, + "rhs": { "Deref": { "register": "AP", "offset": -34 } }, + "dst": { "register": "AP", "offset": 0 } } } ] ], + [3773, [{ "AllocSegment": { "dst": { "register": "AP", "offset": 0 } } }]], [ - 2428, + 3854, [ { "TestLessThanOrEqual": { - "lhs": { - "Immediate": "0x0" - }, - "rhs": { - "Deref": { - "register": "AP", - "offset": -31 - } - }, - "dst": { - "register": "AP", - "offset": 0 - } + "lhs": { "Immediate": "0x17fc" }, + "rhs": { "Deref": { "register": "FP", "offset": -6 } }, + "dst": { "register": "AP", "offset": 0 } } } ] ], [ - 2440, + 3900, [ { - "AllocSegment": { - "dst": { - "register": "AP", - "offset": 0 - } + "TestLessThanOrEqual": { + "lhs": { "Immediate": "0xcc6" }, + "rhs": { "Deref": { "register": "AP", "offset": -15 } }, + "dst": { "register": "AP", "offset": 0 } } } ] ], + [3912, [{ "AllocSegment": { "dst": { "register": "AP", "offset": 0 } } }]], [ - 2482, + 3982, [ { "TestLessThanOrEqual": { - "lhs": { - "Immediate": "0x0" - }, - "rhs": { - "Deref": { - "register": "FP", - "offset": -6 - } - }, - "dst": { - "register": "AP", - "offset": 0 - } + "lhs": { "Immediate": "0x0" }, + "rhs": { "Deref": { "register": "FP", "offset": -6 } }, + "dst": { "register": "AP", "offset": 0 } } } ] ], [ - 2498, + 3998, [ { "TestLessThan": { "lhs": { "BinOp": { "op": "Add", - "a": { - "register": "AP", - "offset": -1 - }, - "b": { - "Immediate": "0x0" - } + "a": { "register": "AP", "offset": -1 }, + "b": { "Immediate": "0x0" } } }, - "rhs": { - "Immediate": "0x10000000000000000" - }, - "dst": { - "register": "AP", - "offset": 0 - } + "rhs": { "Immediate": "0x10000000000000000" }, + "dst": { "register": "AP", "offset": 0 } } } ] ], [ - 2502, + 4002, [ { "LinearSplit": { - "value": { - "Deref": { - "register": "AP", - "offset": -1 - } - }, - "scalar": { - "Immediate": "0x8000000000000110000000000000000" - }, - "max_x": { - "Immediate": "0xfffffffffffffffffffffffffffffffe" - }, - "x": { - "register": "AP", - "offset": 0 - }, - "y": { - "register": "AP", - "offset": 1 - } + "value": { "Deref": { "register": "AP", "offset": -1 } }, + "scalar": { "Immediate": "0x8000000000000110000000000000000" }, + "max_x": { "Immediate": "0xfffffffffffffffffffffffffffffffe" }, + "x": { "register": "AP", "offset": 0 }, + "y": { "register": "AP", "offset": 1 } } } ] ], [ - 2529, + 4029, [ { "TestLessThan": { "lhs": { "BinOp": { "op": "Add", - "a": { - "register": "AP", - "offset": -1 - }, - "b": { - "Immediate": "0x0" - } + "a": { "register": "AP", "offset": -1 }, + "b": { "Immediate": "0x0" } } }, - "rhs": { - "Immediate": "0x100000000" - }, - "dst": { - "register": "AP", - "offset": 0 - } + "rhs": { "Immediate": "0x100000000" }, + "dst": { "register": "AP", "offset": 0 } } } ] ], [ - 2533, + 4033, [ { "LinearSplit": { - "value": { - "Deref": { - "register": "AP", - "offset": -1 - } - }, - "scalar": { - "Immediate": "0x8000000000000110000000000000000" - }, - "max_x": { - "Immediate": "0xfffffffffffffffffffffffffffffffe" - }, - "x": { - "register": "AP", - "offset": 0 - }, - "y": { - "register": "AP", - "offset": 1 - } + "value": { "Deref": { "register": "AP", "offset": -1 } }, + "scalar": { "Immediate": "0x8000000000000110000000000000000" }, + "max_x": { "Immediate": "0xfffffffffffffffffffffffffffffffe" }, + "x": { "register": "AP", "offset": 0 }, + "y": { "register": "AP", "offset": 1 } } } ] ], [ - 2575, + 4075, [ { "TestLessThanOrEqual": { - "lhs": { - "Immediate": "0x0" - }, - "rhs": { - "Deref": { - "register": "AP", - "offset": -18 - } - }, - "dst": { - "register": "AP", - "offset": 0 - } + "lhs": { "Immediate": "0x0" }, + "rhs": { "Deref": { "register": "AP", "offset": -18 } }, + "dst": { "register": "AP", "offset": 0 } } } ] ], + [4087, [{ "AllocSegment": { "dst": { "register": "AP", "offset": 0 } } }]], [ - 2589, + 4151, [ { - "AllocSegment": { - "dst": { - "register": "AP", - "offset": 0 - } + "TestLessThanOrEqual": { + "lhs": { "Immediate": "0x6c2" }, + "rhs": { "Deref": { "register": "FP", "offset": -6 } }, + "dst": { "register": "AP", "offset": 0 } } } ] ], [ - 2656, + 4192, [ { "TestLessThanOrEqual": { - "lhs": { - "Immediate": "0x0" - }, - "rhs": { - "Deref": { - "register": "FP", - "offset": -6 - } - }, - "dst": { - "register": "AP", - "offset": 0 - } + "lhs": { "Immediate": "0xc62" }, + "rhs": { "Deref": { "register": "AP", "offset": -14 } }, + "dst": { "register": "AP", "offset": 0 } } } ] ], + [4204, [{ "AllocSegment": { "dst": { "register": "AP", "offset": 0 } } }]], [ - 2694, + 4272, [ { "TestLessThanOrEqual": { - "lhs": { - "Immediate": "0x0" - }, - "rhs": { - "Deref": { - "register": "AP", - "offset": -39 - } - }, - "dst": { - "register": "AP", - "offset": 0 - } + "lhs": { "Immediate": "0x6c2" }, + "rhs": { "Deref": { "register": "FP", "offset": -6 } }, + "dst": { "register": "AP", "offset": 0 } } } ] ], [ - 2706, + 4313, [ { - "AllocSegment": { - "dst": { - "register": "AP", - "offset": 0 - } + "TestLessThanOrEqual": { + "lhs": { "Immediate": "0x0" }, + "rhs": { "Deref": { "register": "AP", "offset": -14 } }, + "dst": { "register": "AP", "offset": 0 } } } ] ], + [4325, [{ "AllocSegment": { "dst": { "register": "AP", "offset": 0 } } }]], + [4405, [{ "AllocSegment": { "dst": { "register": "AP", "offset": 0 } } }]], [ - 2752, + 4530, [ { "TestLessThanOrEqual": { - "lhs": { - "Immediate": "0x0" - }, - "rhs": { - "Deref": { - "register": "FP", - "offset": -6 - } - }, - "dst": { - "register": "AP", - "offset": 0 - } + "lhs": { "Immediate": "0x622" }, + "rhs": { "Deref": { "register": "FP", "offset": -7 } }, + "dst": { "register": "AP", "offset": 0 } } } ] ], [ - 2783, + 4584, [ { - "TestLessThanOrEqual": { + "TestLessThan": { "lhs": { - "Immediate": "0x0" - }, - "rhs": { - "Deref": { - "register": "AP", - "offset": -6 + "BinOp": { + "op": "Add", + "a": { "register": "AP", "offset": -1 }, + "b": { "Immediate": "0x0" } } }, - "dst": { - "register": "AP", - "offset": 0 - } + "rhs": { "Immediate": "0x100000000" }, + "dst": { "register": "AP", "offset": 0 } } } ] ], [ - 2795, + 4588, [ { - "AllocSegment": { - "dst": { - "register": "AP", - "offset": 0 - } + "LinearSplit": { + "value": { "Deref": { "register": "AP", "offset": -1 } }, + "scalar": { "Immediate": "0x8000000000000110000000000000000" }, + "max_x": { "Immediate": "0xfffffffffffffffffffffffffffffffe" }, + "x": { "register": "AP", "offset": 0 }, + "y": { "register": "AP", "offset": 1 } } } ] ], [ - 2827, + 4615, [ { - "TestLessThanOrEqual": { + "TestLessThan": { "lhs": { - "Immediate": "0x776" - }, - "rhs": { - "Deref": { - "register": "FP", - "offset": -6 + "BinOp": { + "op": "Add", + "a": { "register": "AP", "offset": -1 }, + "b": { "Immediate": "0x0" } } }, - "dst": { - "register": "AP", - "offset": 0 - } + "rhs": { "Immediate": "0x100000000" }, + "dst": { "register": "AP", "offset": 0 } } } ] ], [ - 2865, + 4619, [ { - "TestLessThanOrEqual": { + "LinearSplit": { + "value": { "Deref": { "register": "AP", "offset": -1 } }, + "scalar": { "Immediate": "0x8000000000000110000000000000000" }, + "max_x": { "Immediate": "0xfffffffffffffffffffffffffffffffe" }, + "x": { "register": "AP", "offset": 0 }, + "y": { "register": "AP", "offset": 1 } + } + } + ] + ], + [ + 4646, + [ + { + "TestLessThan": { "lhs": { - "Immediate": "0x0" - }, - "rhs": { - "Deref": { - "register": "AP", - "offset": -63 + "BinOp": { + "op": "Add", + "a": { "register": "AP", "offset": -1 }, + "b": { "Immediate": "0x0" } } }, - "dst": { - "register": "AP", - "offset": 0 - } + "rhs": { "Immediate": "0x100000000" }, + "dst": { "register": "AP", "offset": 0 } } } ] ], [ - 2877, + 4650, [ { - "AllocSegment": { - "dst": { - "register": "AP", - "offset": 0 - } + "LinearSplit": { + "value": { "Deref": { "register": "AP", "offset": -1 } }, + "scalar": { "Immediate": "0x8000000000000110000000000000000" }, + "max_x": { "Immediate": "0xfffffffffffffffffffffffffffffffe" }, + "x": { "register": "AP", "offset": 0 }, + "y": { "register": "AP", "offset": 1 } } } ] ], [ - 2924, + 4863, [ { "TestLessThanOrEqual": { - "lhs": { - "Immediate": "0x15e" - }, - "rhs": { - "Deref": { - "register": "FP", - "offset": -6 - } - }, - "dst": { - "register": "AP", - "offset": 0 - } + "lhs": { "Immediate": "0x622" }, + "rhs": { "Deref": { "register": "FP", "offset": -7 } }, + "dst": { "register": "AP", "offset": 0 } } } ] ], [ - 2965, + 4939, [ { - "TestLessThanOrEqual": { + "TestLessThan": { "lhs": { - "Immediate": "0x6ea" - }, - "rhs": { - "Deref": { - "register": "AP", - "offset": -13 + "BinOp": { + "op": "Add", + "a": { "register": "AP", "offset": -1 }, + "b": { "Immediate": "0x0" } } }, - "dst": { - "register": "AP", - "offset": 0 - } + "rhs": { "Immediate": "0x10000" }, + "dst": { "register": "AP", "offset": 0 } } } ] ], [ - 2977, + 4943, [ { - "AllocSegment": { - "dst": { - "register": "AP", - "offset": 0 - } + "LinearSplit": { + "value": { "Deref": { "register": "AP", "offset": -1 } }, + "scalar": { "Immediate": "0x8000000000000110000000000000000" }, + "max_x": { "Immediate": "0xfffffffffffffffffffffffffffffffe" }, + "x": { "register": "AP", "offset": 0 }, + "y": { "register": "AP", "offset": 1 } } } ] ], [ - 3047, + 5087, [ { - "TestLessThanOrEqual": { + "TestLessThan": { "lhs": { - "Immediate": "0x776" - }, - "rhs": { - "Deref": { - "register": "FP", - "offset": -6 + "BinOp": { + "op": "Add", + "a": { "register": "AP", "offset": -1 }, + "b": { "Immediate": "0x0" } } }, - "dst": { - "register": "AP", - "offset": 0 - } + "rhs": { "Immediate": "0x100" }, + "dst": { "register": "AP", "offset": 0 } } } ] ], [ - 3085, + 5091, [ { - "TestLessThanOrEqual": { + "LinearSplit": { + "value": { "Deref": { "register": "AP", "offset": -1 } }, + "scalar": { "Immediate": "0x8000000000000110000000000000000" }, + "max_x": { "Immediate": "0xfffffffffffffffffffffffffffffffe" }, + "x": { "register": "AP", "offset": 0 }, + "y": { "register": "AP", "offset": 1 } + } + } + ] + ], + [ + 5149, + [ + { + "TestLessThan": { "lhs": { - "Immediate": "0x0" - }, - "rhs": { - "Deref": { - "register": "AP", - "offset": -63 + "BinOp": { + "op": "Add", + "a": { "register": "AP", "offset": -1 }, + "b": { "Immediate": "0x0" } } }, - "dst": { - "register": "AP", - "offset": 0 - } + "rhs": { "Immediate": "0x10000" }, + "dst": { "register": "AP", "offset": 0 } } } ] ], [ - 3097, + 5153, [ { - "AllocSegment": { - "dst": { - "register": "AP", - "offset": 0 - } + "LinearSplit": { + "value": { "Deref": { "register": "AP", "offset": -1 } }, + "scalar": { "Immediate": "0x8000000000000110000000000000000" }, + "max_x": { "Immediate": "0xfffffffffffffffffffffffffffffffe" }, + "x": { "register": "AP", "offset": 0 }, + "y": { "register": "AP", "offset": 1 } } } ] ], [ - 3144, + 5240, [ { - "TestLessThanOrEqual": { + "TestLessThan": { "lhs": { - "Immediate": "0x0" - }, - "rhs": { - "Deref": { - "register": "FP", - "offset": -6 + "BinOp": { + "op": "Add", + "a": { "register": "AP", "offset": -1 }, + "b": { "Immediate": "0x0" } } }, - "dst": { - "register": "AP", - "offset": 0 - } + "rhs": { "Immediate": "0x10000000000000000" }, + "dst": { "register": "AP", "offset": 0 } } } ] ], [ - 3182, + 5244, [ { - "TestLessThanOrEqual": { + "LinearSplit": { + "value": { "Deref": { "register": "AP", "offset": -1 } }, + "scalar": { "Immediate": "0x8000000000000110000000000000000" }, + "max_x": { "Immediate": "0xfffffffffffffffffffffffffffffffe" }, + "x": { "register": "AP", "offset": 0 }, + "y": { "register": "AP", "offset": 1 } + } + } + ] + ], + [ + 5271, + [ + { + "TestLessThan": { "lhs": { - "Immediate": "0x0" - }, - "rhs": { - "Deref": { - "register": "AP", - "offset": -37 + "BinOp": { + "op": "Add", + "a": { "register": "AP", "offset": -1 }, + "b": { "Immediate": "0x0" } } }, - "dst": { - "register": "AP", - "offset": 0 - } + "rhs": { "Immediate": "0x100000000" }, + "dst": { "register": "AP", "offset": 0 } } } ] ], [ - 3194, + 5275, [ { - "AllocSegment": { - "dst": { - "register": "AP", - "offset": 0 - } + "LinearSplit": { + "value": { "Deref": { "register": "AP", "offset": -1 } }, + "scalar": { "Immediate": "0x8000000000000110000000000000000" }, + "max_x": { "Immediate": "0xfffffffffffffffffffffffffffffffe" }, + "x": { "register": "AP", "offset": 0 }, + "y": { "register": "AP", "offset": 1 } } } ] ], [ - 3257, + 5711, [ { "TestLessThanOrEqual": { - "lhs": { - "Immediate": "0x0" - }, - "rhs": { - "Deref": { - "register": "FP", - "offset": -6 - } - }, - "dst": { - "register": "AP", - "offset": 0 - } + "lhs": { "Immediate": "0xe7e" }, + "rhs": { "Deref": { "register": "FP", "offset": -8 } }, + "dst": { "register": "AP", "offset": 0 } } } ] ], [ - 3273, + 5753, [ { "TestLessThan": { "lhs": { - "Deref": { - "register": "AP", - "offset": -1 + "BinOp": { + "op": "Add", + "a": { "register": "AP", "offset": -1 }, + "b": { "Immediate": "0x0" } } }, - "rhs": { - "Immediate": "0x100000000000000000000000000000000" - }, - "dst": { - "register": "AP", - "offset": 0 - } + "rhs": { "Immediate": "0x10000" }, + "dst": { "register": "AP", "offset": 0 } } } ] ], [ - 3275, + 5757, [ { - "DivMod": { - "lhs": { - "Deref": { - "register": "AP", - "offset": -2 - } - }, - "rhs": { - "Immediate": "0x100000000000000000000000000000000" - }, - "quotient": { - "register": "AP", - "offset": 3 - }, - "remainder": { - "register": "AP", - "offset": 4 - } + "LinearSplit": { + "value": { "Deref": { "register": "AP", "offset": -1 } }, + "scalar": { "Immediate": "0x8000000000000110000000000000000" }, + "max_x": { "Immediate": "0xfffffffffffffffffffffffffffffffe" }, + "x": { "register": "AP", "offset": 0 }, + "y": { "register": "AP", "offset": 1 } } } ] ], [ - 3325, + 5876, [ { "TestLessThanOrEqual": { - "lhs": { - "Immediate": "0x0" - }, - "rhs": { - "Deref": { - "register": "AP", - "offset": -34 - } - }, - "dst": { - "register": "AP", - "offset": 0 - } + "lhs": { "Immediate": "0x942" }, + "rhs": { "Deref": { "register": "FP", "offset": -7 } }, + "dst": { "register": "AP", "offset": 0 } } } ] ], [ - 3340, + 5943, [ { - "AllocSegment": { - "dst": { - "register": "AP", - "offset": 0 - } + "TestLessThanOrEqual": { + "lhs": { "Immediate": "0x274c" }, + "rhs": { "Deref": { "register": "FP", "offset": -8 } }, + "dst": { "register": "AP", "offset": 0 } } } ] ], [ - 3419, + 6040, [ { "TestLessThanOrEqual": { - "lhs": { - "Immediate": "0x0" - }, - "rhs": { - "Deref": { - "register": "FP", - "offset": -6 - } - }, - "dst": { - "register": "AP", - "offset": 0 - } + "lhs": { "Immediate": "0x17fc" }, + "rhs": { "Deref": { "register": "FP", "offset": -7 } }, + "dst": { "register": "AP", "offset": 0 } + } + } + ] + ], + [6122, [{ "AllocSegment": { "dst": { "register": "AP", "offset": 0 } } }]], + [6193, [{ "AllocSegment": { "dst": { "register": "AP", "offset": 0 } } }]], + [ + 6297, + [ + { + "TestLessThanOrEqual": { + "lhs": { "Immediate": "0x622" }, + "rhs": { "Deref": { "register": "FP", "offset": -7 } }, + "dst": { "register": "AP", "offset": 0 } } } ] ], [ - 3435, + 6400, [ { "TestLessThan": { "lhs": { "BinOp": { "op": "Add", - "a": { - "register": "AP", - "offset": -1 - }, - "b": { - "Immediate": "0x0" - } + "a": { "register": "AP", "offset": -1 }, + "b": { "Immediate": "0x0" } } }, - "rhs": { - "Immediate": "0x10000000000000000" - }, - "dst": { - "register": "AP", - "offset": 0 - } + "rhs": { "Immediate": "0x10000" }, + "dst": { "register": "AP", "offset": 0 } } } ] ], [ - 3439, + 6404, [ { "LinearSplit": { - "value": { - "Deref": { - "register": "AP", - "offset": -1 - } - }, - "scalar": { - "Immediate": "0x8000000000000110000000000000000" - }, - "max_x": { - "Immediate": "0xfffffffffffffffffffffffffffffffe" - }, - "x": { - "register": "AP", - "offset": 0 - }, - "y": { - "register": "AP", - "offset": 1 - } + "value": { "Deref": { "register": "AP", "offset": -1 } }, + "scalar": { "Immediate": "0x8000000000000110000000000000000" }, + "max_x": { "Immediate": "0xfffffffffffffffffffffffffffffffe" }, + "x": { "register": "AP", "offset": 0 }, + "y": { "register": "AP", "offset": 1 } } } ] ], [ - 3466, + 6431, [ { "TestLessThan": { "lhs": { "BinOp": { "op": "Add", - "a": { - "register": "AP", - "offset": -1 - }, - "b": { - "Immediate": "0x0" - } + "a": { "register": "AP", "offset": -1 }, + "b": { "Immediate": "0x0" } } }, - "rhs": { - "Immediate": "0x100000000" - }, - "dst": { - "register": "AP", - "offset": 0 - } + "rhs": { "Immediate": "0x10000" }, + "dst": { "register": "AP", "offset": 0 } } } ] ], [ - 3470, + 6435, [ { "LinearSplit": { - "value": { - "Deref": { - "register": "AP", - "offset": -1 - } - }, - "scalar": { - "Immediate": "0x8000000000000110000000000000000" - }, - "max_x": { - "Immediate": "0xfffffffffffffffffffffffffffffffe" - }, - "x": { - "register": "AP", - "offset": 0 - }, - "y": { - "register": "AP", - "offset": 1 - } + "value": { "Deref": { "register": "AP", "offset": -1 } }, + "scalar": { "Immediate": "0x8000000000000110000000000000000" }, + "max_x": { "Immediate": "0xfffffffffffffffffffffffffffffffe" }, + "x": { "register": "AP", "offset": 0 }, + "y": { "register": "AP", "offset": 1 } } } ] ], [ - 3512, + 6747, [ { - "TestLessThanOrEqual": { + "TestLessThan": { "lhs": { - "Immediate": "0x0" - }, - "rhs": { - "Deref": { - "register": "AP", - "offset": -18 + "BinOp": { + "op": "Add", + "a": { "register": "AP", "offset": -1 }, + "b": { "Immediate": "0x0" } } }, - "dst": { - "register": "AP", - "offset": 0 - } + "rhs": { "Immediate": "0x100000000" }, + "dst": { "register": "AP", "offset": 0 } } } ] ], [ - 3524, + 6751, [ { - "AllocSegment": { - "dst": { - "register": "AP", - "offset": 0 - } + "LinearSplit": { + "value": { "Deref": { "register": "AP", "offset": -1 } }, + "scalar": { "Immediate": "0x8000000000000110000000000000000" }, + "max_x": { "Immediate": "0xfffffffffffffffffffffffffffffffe" }, + "x": { "register": "AP", "offset": 0 }, + "y": { "register": "AP", "offset": 1 } } } ] ], [ - 3619, + 6845, [ { - "AllocSegment": { - "dst": { - "register": "AP", - "offset": 0 - } + "TestLessThan": { + "lhs": { + "BinOp": { + "op": "Add", + "a": { "register": "AP", "offset": -1 }, + "b": { "Immediate": "0x0" } + } + }, + "rhs": { "Immediate": "0x100" }, + "dst": { "register": "AP", "offset": 0 } } } ] ], [ - 3744, + 6849, [ { - "TestLessThanOrEqual": { - "lhs": { - "Immediate": "0x622" - }, - "rhs": { - "Deref": { - "register": "FP", - "offset": -7 - } - }, - "dst": { - "register": "AP", - "offset": 0 - } + "LinearSplit": { + "value": { "Deref": { "register": "AP", "offset": -1 } }, + "scalar": { "Immediate": "0x8000000000000110000000000000000" }, + "max_x": { "Immediate": "0xfffffffffffffffffffffffffffffffe" }, + "x": { "register": "AP", "offset": 0 }, + "y": { "register": "AP", "offset": 1 } } } ] ], [ - 3798, + 6920, [ { "TestLessThan": { "lhs": { "BinOp": { "op": "Add", - "a": { - "register": "AP", - "offset": -1 - }, - "b": { - "Immediate": "0x0" - } + "a": { "register": "AP", "offset": -1 }, + "b": { "Immediate": "0x0" } } }, - "rhs": { - "Immediate": "0x100000000" - }, - "dst": { - "register": "AP", - "offset": 0 - } + "rhs": { "Immediate": "0x100000000" }, + "dst": { "register": "AP", "offset": 0 } } } ] ], [ - 3802, + 6924, [ { "LinearSplit": { - "value": { - "Deref": { - "register": "AP", - "offset": -1 - } - }, - "scalar": { - "Immediate": "0x8000000000000110000000000000000" - }, - "max_x": { - "Immediate": "0xfffffffffffffffffffffffffffffffe" - }, - "x": { - "register": "AP", - "offset": 0 - }, - "y": { - "register": "AP", - "offset": 1 - } + "value": { "Deref": { "register": "AP", "offset": -1 } }, + "scalar": { "Immediate": "0x8000000000000110000000000000000" }, + "max_x": { "Immediate": "0xfffffffffffffffffffffffffffffffe" }, + "x": { "register": "AP", "offset": 0 }, + "y": { "register": "AP", "offset": 1 } } } ] ], [ - 3829, + 7051, [ { "TestLessThan": { "lhs": { "BinOp": { "op": "Add", - "a": { - "register": "AP", - "offset": -1 - }, - "b": { - "Immediate": "0x0" - } + "a": { "register": "AP", "offset": -1 }, + "b": { "Immediate": "0x0" } } }, - "rhs": { - "Immediate": "0x100000000" - }, - "dst": { - "register": "AP", - "offset": 0 - } + "rhs": { "Immediate": "0x100" }, + "dst": { "register": "AP", "offset": 0 } } } ] ], [ - 3833, + 7055, [ { "LinearSplit": { - "value": { - "Deref": { - "register": "AP", - "offset": -1 - } - }, - "scalar": { - "Immediate": "0x8000000000000110000000000000000" - }, - "max_x": { - "Immediate": "0xfffffffffffffffffffffffffffffffe" - }, - "x": { - "register": "AP", - "offset": 0 - }, - "y": { - "register": "AP", - "offset": 1 - } + "value": { "Deref": { "register": "AP", "offset": -1 } }, + "scalar": { "Immediate": "0x8000000000000110000000000000000" }, + "max_x": { "Immediate": "0xfffffffffffffffffffffffffffffffe" }, + "x": { "register": "AP", "offset": 0 }, + "y": { "register": "AP", "offset": 1 } } } ] ], [ - 3860, + 7115, [ { "TestLessThan": { "lhs": { "BinOp": { "op": "Add", - "a": { - "register": "AP", - "offset": -1 - }, - "b": { - "Immediate": "0x0" - } + "a": { "register": "AP", "offset": -1 }, + "b": { "Immediate": "0x0" } } }, - "rhs": { - "Immediate": "0x100000000" - }, - "dst": { - "register": "AP", - "offset": 0 - } + "rhs": { "Immediate": "0x10000000000000000" }, + "dst": { "register": "AP", "offset": 0 } } } ] ], [ - 3864, + 7119, [ { "LinearSplit": { - "value": { - "Deref": { - "register": "AP", - "offset": -1 - } - }, - "scalar": { - "Immediate": "0x8000000000000110000000000000000" - }, - "max_x": { - "Immediate": "0xfffffffffffffffffffffffffffffffe" - }, - "x": { - "register": "AP", - "offset": 0 - }, - "y": { - "register": "AP", - "offset": 1 - } - } - } - ] - ], - [ - 4077, - [ - { - "TestLessThanOrEqual": { - "lhs": { - "Immediate": "0x622" - }, - "rhs": { - "Deref": { - "register": "FP", - "offset": -7 - } - }, - "dst": { - "register": "AP", - "offset": 0 - } + "value": { "Deref": { "register": "AP", "offset": -1 } }, + "scalar": { "Immediate": "0x8000000000000110000000000000000" }, + "max_x": { "Immediate": "0xfffffffffffffffffffffffffffffffe" }, + "x": { "register": "AP", "offset": 0 }, + "y": { "register": "AP", "offset": 1 } } } ] ], [ - 4153, + 7146, [ { "TestLessThan": { "lhs": { "BinOp": { "op": "Add", - "a": { - "register": "AP", - "offset": -1 - }, - "b": { - "Immediate": "0x0" - } + "a": { "register": "AP", "offset": -1 }, + "b": { "Immediate": "0x0" } } }, - "rhs": { - "Immediate": "0x10000" - }, - "dst": { - "register": "AP", - "offset": 0 - } + "rhs": { "Immediate": "0x100000000" }, + "dst": { "register": "AP", "offset": 0 } } } ] ], [ - 4157, + 7150, [ { "LinearSplit": { - "value": { - "Deref": { - "register": "AP", - "offset": -1 - } - }, - "scalar": { - "Immediate": "0x8000000000000110000000000000000" - }, - "max_x": { - "Immediate": "0xfffffffffffffffffffffffffffffffe" - }, - "x": { - "register": "AP", - "offset": 0 - }, - "y": { - "register": "AP", - "offset": 1 - } + "value": { "Deref": { "register": "AP", "offset": -1 } }, + "scalar": { "Immediate": "0x8000000000000110000000000000000" }, + "max_x": { "Immediate": "0xfffffffffffffffffffffffffffffffe" }, + "x": { "register": "AP", "offset": 0 }, + "y": { "register": "AP", "offset": 1 } } } ] ], [ - 4301, + 7259, [ { "TestLessThan": { "lhs": { "BinOp": { "op": "Add", - "a": { - "register": "AP", - "offset": -1 - }, - "b": { - "Immediate": "0x0" - } + "a": { "register": "AP", "offset": -1 }, + "b": { "Immediate": "0x0" } } }, - "rhs": { - "Immediate": "0x100" - }, - "dst": { - "register": "AP", - "offset": 0 - } + "rhs": { "Immediate": "0x100" }, + "dst": { "register": "AP", "offset": 0 } } } ] ], [ - 4305, + 7263, [ { "LinearSplit": { - "value": { - "Deref": { - "register": "AP", - "offset": -1 - } - }, - "scalar": { - "Immediate": "0x8000000000000110000000000000000" - }, - "max_x": { - "Immediate": "0xfffffffffffffffffffffffffffffffe" - }, - "x": { - "register": "AP", - "offset": 0 - }, - "y": { - "register": "AP", - "offset": 1 - } + "value": { "Deref": { "register": "AP", "offset": -1 } }, + "scalar": { "Immediate": "0x8000000000000110000000000000000" }, + "max_x": { "Immediate": "0xfffffffffffffffffffffffffffffffe" }, + "x": { "register": "AP", "offset": 0 }, + "y": { "register": "AP", "offset": 1 } } } ] ], [ - 4363, + 7437, [ { "TestLessThan": { "lhs": { "BinOp": { "op": "Add", - "a": { - "register": "AP", - "offset": -1 - }, - "b": { - "Immediate": "0x0" - } + "a": { "register": "AP", "offset": -1 }, + "b": { "Immediate": "0x0" } } }, - "rhs": { - "Immediate": "0x10000" - }, - "dst": { - "register": "AP", - "offset": 0 - } + "rhs": { "Immediate": "0x10000000000000000" }, + "dst": { "register": "AP", "offset": 0 } } } ] ], [ - 4367, + 7441, [ { "LinearSplit": { - "value": { - "Deref": { - "register": "AP", - "offset": -1 - } - }, - "scalar": { - "Immediate": "0x8000000000000110000000000000000" - }, - "max_x": { - "Immediate": "0xfffffffffffffffffffffffffffffffe" - }, - "x": { - "register": "AP", - "offset": 0 - }, - "y": { - "register": "AP", - "offset": 1 - } + "value": { "Deref": { "register": "AP", "offset": -1 } }, + "scalar": { "Immediate": "0x8000000000000110000000000000000" }, + "max_x": { "Immediate": "0xfffffffffffffffffffffffffffffffe" }, + "x": { "register": "AP", "offset": 0 }, + "y": { "register": "AP", "offset": 1 } } } ] ], [ - 4454, + 7468, [ { "TestLessThan": { "lhs": { "BinOp": { "op": "Add", - "a": { - "register": "AP", - "offset": -1 - }, - "b": { - "Immediate": "0x0" - } + "a": { "register": "AP", "offset": -1 }, + "b": { "Immediate": "0x0" } } }, - "rhs": { - "Immediate": "0x10000000000000000" - }, - "dst": { - "register": "AP", - "offset": 0 - } + "rhs": { "Immediate": "0x10000000000000000" }, + "dst": { "register": "AP", "offset": 0 } } } ] ], [ - 4458, + 7472, [ { "LinearSplit": { - "value": { - "Deref": { - "register": "AP", - "offset": -1 - } - }, - "scalar": { - "Immediate": "0x8000000000000110000000000000000" - }, - "max_x": { - "Immediate": "0xfffffffffffffffffffffffffffffffe" - }, - "x": { - "register": "AP", - "offset": 0 - }, - "y": { - "register": "AP", - "offset": 1 - } + "value": { "Deref": { "register": "AP", "offset": -1 } }, + "scalar": { "Immediate": "0x8000000000000110000000000000000" }, + "max_x": { "Immediate": "0xfffffffffffffffffffffffffffffffe" }, + "x": { "register": "AP", "offset": 0 }, + "y": { "register": "AP", "offset": 1 } } } ] ], [ - 4485, + 7499, [ { "TestLessThan": { "lhs": { "BinOp": { "op": "Add", - "a": { - "register": "AP", - "offset": -1 - }, - "b": { - "Immediate": "0x0" - } + "a": { "register": "AP", "offset": -1 }, + "b": { "Immediate": "0x0" } } }, - "rhs": { - "Immediate": "0x100000000" - }, - "dst": { - "register": "AP", - "offset": 0 - } + "rhs": { "Immediate": "0x100000000" }, + "dst": { "register": "AP", "offset": 0 } } } ] ], [ - 4489, + 7503, [ { "LinearSplit": { - "value": { - "Deref": { - "register": "AP", - "offset": -1 - } - }, - "scalar": { - "Immediate": "0x8000000000000110000000000000000" - }, - "max_x": { - "Immediate": "0xfffffffffffffffffffffffffffffffe" - }, - "x": { - "register": "AP", - "offset": 0 - }, - "y": { - "register": "AP", - "offset": 1 - } - } - } - ] - ], - [ - 4598, - [ - { - "TestLessThanOrEqual": { - "lhs": { - "Immediate": "0xe7e" - }, - "rhs": { - "Deref": { - "register": "FP", - "offset": -8 - } - }, - "dst": { - "register": "AP", - "offset": 0 - } + "value": { "Deref": { "register": "AP", "offset": -1 } }, + "scalar": { "Immediate": "0x8000000000000110000000000000000" }, + "max_x": { "Immediate": "0xfffffffffffffffffffffffffffffffe" }, + "x": { "register": "AP", "offset": 0 }, + "y": { "register": "AP", "offset": 1 } } } ] ], [ - 4640, + 7595, [ { "TestLessThan": { "lhs": { "BinOp": { "op": "Add", - "a": { - "register": "AP", - "offset": -1 - }, - "b": { - "Immediate": "0x0" - } + "a": { "register": "AP", "offset": -1 }, + "b": { "Immediate": "0x0" } } }, - "rhs": { - "Immediate": "0x10000" - }, - "dst": { - "register": "AP", - "offset": 0 - } + "rhs": { "Immediate": "0x10000" }, + "dst": { "register": "AP", "offset": 0 } } } ] ], [ - 4644, + 7599, [ { "LinearSplit": { - "value": { - "Deref": { - "register": "AP", - "offset": -1 - } - }, - "scalar": { - "Immediate": "0x8000000000000110000000000000000" - }, - "max_x": { - "Immediate": "0xfffffffffffffffffffffffffffffffe" - }, - "x": { - "register": "AP", - "offset": 0 - }, - "y": { - "register": "AP", - "offset": 1 - } + "value": { "Deref": { "register": "AP", "offset": -1 } }, + "scalar": { "Immediate": "0x8000000000000110000000000000000" }, + "max_x": { "Immediate": "0xfffffffffffffffffffffffffffffffe" }, + "x": { "register": "AP", "offset": 0 }, + "y": { "register": "AP", "offset": 1 } } } ] ], [ - 4763, + 7626, [ { - "TestLessThanOrEqual": { + "TestLessThan": { "lhs": { - "Immediate": "0x942" - }, - "rhs": { - "Deref": { - "register": "FP", - "offset": -7 + "BinOp": { + "op": "Add", + "a": { "register": "AP", "offset": -1 }, + "b": { "Immediate": "0x0" } } }, - "dst": { - "register": "AP", - "offset": 0 - } + "rhs": { "Immediate": "0x100" }, + "dst": { "register": "AP", "offset": 0 } } } ] ], [ - 4846, + 7630, [ { - "AllocSegment": { - "dst": { - "register": "AP", - "offset": 0 - } + "LinearSplit": { + "value": { "Deref": { "register": "AP", "offset": -1 } }, + "scalar": { "Immediate": "0x8000000000000110000000000000000" }, + "max_x": { "Immediate": "0xfffffffffffffffffffffffffffffffe" }, + "x": { "register": "AP", "offset": 0 }, + "y": { "register": "AP", "offset": 1 } } } ] ], [ - 4917, + 7725, [ { - "AllocSegment": { - "dst": { - "register": "AP", - "offset": 0 - } + "TestLessThan": { + "lhs": { + "BinOp": { + "op": "Add", + "a": { "register": "FP", "offset": 0 }, + "b": { "Immediate": "0x0" } + } + }, + "rhs": { "Immediate": "0x10000" }, + "dst": { "register": "AP", "offset": 0 } } } ] ], [ - 5021, + 7729, [ { - "TestLessThanOrEqual": { - "lhs": { - "Immediate": "0x622" - }, - "rhs": { - "Deref": { - "register": "FP", - "offset": -7 - } - }, - "dst": { - "register": "AP", - "offset": 0 - } + "LinearSplit": { + "value": { "Deref": { "register": "AP", "offset": -1 } }, + "scalar": { "Immediate": "0x8000000000000110000000000000000" }, + "max_x": { "Immediate": "0xfffffffffffffffffffffffffffffffe" }, + "x": { "register": "AP", "offset": 0 }, + "y": { "register": "AP", "offset": 1 } } } ] ], + [7755, [{ "AllocSegment": { "dst": { "register": "AP", "offset": 0 } } }]], [ - 5124, + 7862, [ { "TestLessThan": { "lhs": { "BinOp": { "op": "Add", - "a": { - "register": "AP", - "offset": -1 - }, - "b": { - "Immediate": "0x0" - } + "a": { "register": "AP", "offset": -1 }, + "b": { "Immediate": "0x0" } } }, - "rhs": { - "Immediate": "0x10000" - }, - "dst": { - "register": "AP", - "offset": 0 - } + "rhs": { "Immediate": "0x10000" }, + "dst": { "register": "AP", "offset": 0 } } } ] ], [ - 5128, + 7866, [ { "LinearSplit": { - "value": { - "Deref": { - "register": "AP", - "offset": -1 - } - }, - "scalar": { - "Immediate": "0x8000000000000110000000000000000" - }, - "max_x": { - "Immediate": "0xfffffffffffffffffffffffffffffffe" - }, - "x": { - "register": "AP", - "offset": 0 - }, - "y": { - "register": "AP", - "offset": 1 - } + "value": { "Deref": { "register": "AP", "offset": -1 } }, + "scalar": { "Immediate": "0x8000000000000110000000000000000" }, + "max_x": { "Immediate": "0xfffffffffffffffffffffffffffffffe" }, + "x": { "register": "AP", "offset": 0 }, + "y": { "register": "AP", "offset": 1 } } } ] ], [ - 5155, + 7893, [ { "TestLessThan": { "lhs": { "BinOp": { "op": "Add", - "a": { - "register": "AP", - "offset": -1 - }, - "b": { - "Immediate": "0x0" - } + "a": { "register": "AP", "offset": -1 }, + "b": { "Immediate": "0x0" } } }, - "rhs": { - "Immediate": "0x10000" - }, - "dst": { - "register": "AP", - "offset": 0 - } + "rhs": { "Immediate": "0x10000" }, + "dst": { "register": "AP", "offset": 0 } } } ] ], [ - 5159, + 7897, [ { "LinearSplit": { - "value": { - "Deref": { - "register": "AP", - "offset": -1 - } - }, - "scalar": { - "Immediate": "0x8000000000000110000000000000000" - }, - "max_x": { - "Immediate": "0xfffffffffffffffffffffffffffffffe" - }, - "x": { - "register": "AP", - "offset": 0 - }, - "y": { - "register": "AP", - "offset": 1 - } + "value": { "Deref": { "register": "AP", "offset": -1 } }, + "scalar": { "Immediate": "0x8000000000000110000000000000000" }, + "max_x": { "Immediate": "0xfffffffffffffffffffffffffffffffe" }, + "x": { "register": "AP", "offset": 0 }, + "y": { "register": "AP", "offset": 1 } } } ] ], [ - 5471, + 7990, [ { "TestLessThan": { "lhs": { "BinOp": { "op": "Add", - "a": { - "register": "AP", - "offset": -1 - }, - "b": { - "Immediate": "0x0" - } + "a": { "register": "AP", "offset": -1 }, + "b": { "Immediate": "0x0" } } }, - "rhs": { - "Immediate": "0x100000000" - }, - "dst": { - "register": "AP", - "offset": 0 - } + "rhs": { "Immediate": "0x100000000" }, + "dst": { "register": "AP", "offset": 0 } } } ] ], [ - 5475, + 7994, [ { "LinearSplit": { - "value": { - "Deref": { - "register": "AP", - "offset": -1 - } - }, - "scalar": { - "Immediate": "0x8000000000000110000000000000000" - }, - "max_x": { - "Immediate": "0xfffffffffffffffffffffffffffffffe" - }, - "x": { - "register": "AP", - "offset": 0 - }, - "y": { - "register": "AP", - "offset": 1 - } + "value": { "Deref": { "register": "AP", "offset": -1 } }, + "scalar": { "Immediate": "0x8000000000000110000000000000000" }, + "max_x": { "Immediate": "0xfffffffffffffffffffffffffffffffe" }, + "x": { "register": "AP", "offset": 0 }, + "y": { "register": "AP", "offset": 1 } } } ] ], [ - 5569, + 8032, [ { "TestLessThan": { "lhs": { "BinOp": { "op": "Add", - "a": { - "register": "AP", - "offset": -1 - }, - "b": { - "Immediate": "0x0" - } + "a": { "register": "AP", "offset": -1 }, + "b": { "Immediate": "0x0" } } }, - "rhs": { - "Immediate": "0x100" - }, - "dst": { - "register": "AP", - "offset": 0 - } + "rhs": { "Immediate": "0x100" }, + "dst": { "register": "AP", "offset": 0 } } } ] ], [ - 5573, + 8036, [ { "LinearSplit": { - "value": { - "Deref": { - "register": "AP", - "offset": -1 - } - }, - "scalar": { - "Immediate": "0x8000000000000110000000000000000" - }, - "max_x": { - "Immediate": "0xfffffffffffffffffffffffffffffffe" - }, - "x": { - "register": "AP", - "offset": 0 - }, - "y": { - "register": "AP", - "offset": 1 - } + "value": { "Deref": { "register": "AP", "offset": -1 } }, + "scalar": { "Immediate": "0x8000000000000110000000000000000" }, + "max_x": { "Immediate": "0xfffffffffffffffffffffffffffffffe" }, + "x": { "register": "AP", "offset": 0 }, + "y": { "register": "AP", "offset": 1 } } } ] ], [ - 5644, + 8159, [ { "TestLessThan": { "lhs": { "BinOp": { "op": "Add", - "a": { - "register": "AP", - "offset": -1 - }, - "b": { - "Immediate": "0x0" - } + "a": { "register": "AP", "offset": -1 }, + "b": { "Immediate": "0x0" } } }, - "rhs": { - "Immediate": "0x100000000" - }, - "dst": { - "register": "AP", - "offset": 0 - } + "rhs": { "Immediate": "0x100" }, + "dst": { "register": "AP", "offset": 0 } } } ] ], [ - 5648, + 8163, [ { "LinearSplit": { - "value": { - "Deref": { - "register": "AP", - "offset": -1 - } - }, - "scalar": { - "Immediate": "0x8000000000000110000000000000000" - }, - "max_x": { - "Immediate": "0xfffffffffffffffffffffffffffffffe" - }, - "x": { - "register": "AP", - "offset": 0 - }, - "y": { - "register": "AP", - "offset": 1 - } + "value": { "Deref": { "register": "AP", "offset": -1 } }, + "scalar": { "Immediate": "0x8000000000000110000000000000000" }, + "max_x": { "Immediate": "0xfffffffffffffffffffffffffffffffe" }, + "x": { "register": "AP", "offset": 0 }, + "y": { "register": "AP", "offset": 1 } } } ] ], [ - 5775, + 8221, [ { "TestLessThan": { "lhs": { "BinOp": { "op": "Add", - "a": { - "register": "AP", - "offset": -1 - }, - "b": { - "Immediate": "0x0" - } + "a": { "register": "AP", "offset": -1 }, + "b": { "Immediate": "0x0" } } }, - "rhs": { - "Immediate": "0x100" - }, - "dst": { - "register": "AP", - "offset": 0 - } + "rhs": { "Immediate": "0x10000000000000000" }, + "dst": { "register": "AP", "offset": 0 } } } ] ], [ - 5779, + 8225, [ { "LinearSplit": { - "value": { - "Deref": { - "register": "AP", - "offset": -1 - } - }, - "scalar": { - "Immediate": "0x8000000000000110000000000000000" - }, - "max_x": { - "Immediate": "0xfffffffffffffffffffffffffffffffe" - }, - "x": { - "register": "AP", - "offset": 0 - }, - "y": { - "register": "AP", - "offset": 1 - } + "value": { "Deref": { "register": "AP", "offset": -1 } }, + "scalar": { "Immediate": "0x8000000000000110000000000000000" }, + "max_x": { "Immediate": "0xfffffffffffffffffffffffffffffffe" }, + "x": { "register": "AP", "offset": 0 }, + "y": { "register": "AP", "offset": 1 } } } ] ], [ - 5839, + 8311, [ { "TestLessThan": { - "lhs": { - "BinOp": { - "op": "Add", - "a": { - "register": "AP", - "offset": -1 - }, - "b": { - "Immediate": "0x0" - } - } - }, + "lhs": { "Deref": { "register": "AP", "offset": -1 } }, "rhs": { - "Immediate": "0x10000000000000000" + "Immediate": "0x100000000000000000000000000000000000000000000000000000000000000" }, - "dst": { - "register": "AP", - "offset": 0 - } + "dst": { "register": "AP", "offset": 4 } } } ] ], [ - 5843, + 8315, [ { "LinearSplit": { - "value": { - "Deref": { - "register": "AP", - "offset": -1 - } - }, - "scalar": { - "Immediate": "0x8000000000000110000000000000000" - }, - "max_x": { - "Immediate": "0xfffffffffffffffffffffffffffffffe" - }, - "x": { - "register": "AP", - "offset": 0 - }, - "y": { - "register": "AP", - "offset": 1 - } + "value": { "Deref": { "register": "AP", "offset": 3 } }, + "scalar": { "Immediate": "0x7000000000000110000000000000000" }, + "max_x": { "Immediate": "0xffffffffffffffffffffffffffffffff" }, + "x": { "register": "AP", "offset": -2 }, + "y": { "register": "AP", "offset": -1 } + } + } + ] + ], + [ + 8325, + [ + { + "LinearSplit": { + "value": { "Deref": { "register": "AP", "offset": -2 } }, + "scalar": { "Immediate": "0x1000000000000000000000000000000" }, + "max_x": { "Immediate": "0xffffffffffffffffffffffffffffffff" }, + "x": { "register": "AP", "offset": -1 }, + "y": { "register": "AP", "offset": 0 } } } ] ], [ - 5870, + 8430, [ { "TestLessThan": { "lhs": { "BinOp": { "op": "Add", - "a": { - "register": "AP", - "offset": -1 - }, - "b": { - "Immediate": "0x0" - } + "a": { "register": "AP", "offset": -1 }, + "b": { "Immediate": "0x0" } } }, - "rhs": { - "Immediate": "0x100000000" - }, - "dst": { - "register": "AP", - "offset": 0 - } + "rhs": { "Immediate": "0x9" }, + "dst": { "register": "AP", "offset": 0 } } } ] ], [ - 5874, + 8434, [ { "LinearSplit": { - "value": { - "Deref": { - "register": "AP", - "offset": -1 - } - }, - "scalar": { - "Immediate": "0x8000000000000110000000000000000" - }, - "max_x": { - "Immediate": "0xfffffffffffffffffffffffffffffffe" - }, - "x": { - "register": "AP", - "offset": 0 - }, - "y": { - "register": "AP", - "offset": 1 - } + "value": { "Deref": { "register": "AP", "offset": -1 } }, + "scalar": { "Immediate": "0x8000000000000110000000000000000" }, + "max_x": { "Immediate": "0xfffffffffffffffffffffffffffffffe" }, + "x": { "register": "AP", "offset": 0 }, + "y": { "register": "AP", "offset": 1 } } } ] ], [ - 5972, + 8479, [ { "TestLessThan": { "lhs": { "BinOp": { "op": "Add", - "a": { - "register": "AP", - "offset": -1 - }, - "b": { - "Immediate": "0x0" - } + "a": { "register": "AP", "offset": -1 }, + "b": { "Immediate": "0x0" } } }, - "rhs": { - "Immediate": "0x10000000000000000" - }, - "dst": { - "register": "AP", - "offset": 0 - } + "rhs": { "Immediate": "0x100" }, + "dst": { "register": "AP", "offset": 0 } } } ] ], [ - 5976, + 8483, [ { - "LinearSplit": { - "value": { - "Deref": { - "register": "AP", - "offset": -1 - } - }, - "scalar": { - "Immediate": "0x8000000000000110000000000000000" - }, - "max_x": { - "Immediate": "0xfffffffffffffffffffffffffffffffe" - }, - "x": { - "register": "AP", - "offset": 0 - }, - "y": { - "register": "AP", - "offset": 1 - } + "LinearSplit": { + "value": { "Deref": { "register": "AP", "offset": -1 } }, + "scalar": { "Immediate": "0x8000000000000110000000000000000" }, + "max_x": { "Immediate": "0xfffffffffffffffffffffffffffffffe" }, + "x": { "register": "AP", "offset": 0 }, + "y": { "register": "AP", "offset": 1 } } } ] ], [ - 6003, + 8543, [ { "TestLessThan": { "lhs": { "BinOp": { "op": "Add", - "a": { - "register": "AP", - "offset": -1 - }, - "b": { - "Immediate": "0x0" - } + "a": { "register": "AP", "offset": -1 }, + "b": { "Immediate": "0x0" } } }, - "rhs": { - "Immediate": "0x10000000000000000" - }, - "dst": { - "register": "AP", - "offset": 0 - } + "rhs": { "Immediate": "0x10000000000000000" }, + "dst": { "register": "AP", "offset": 0 } } } ] ], [ - 6007, + 8547, [ { "LinearSplit": { - "value": { - "Deref": { - "register": "AP", - "offset": -1 - } - }, - "scalar": { - "Immediate": "0x8000000000000110000000000000000" - }, - "max_x": { - "Immediate": "0xfffffffffffffffffffffffffffffffe" - }, - "x": { - "register": "AP", - "offset": 0 - }, - "y": { - "register": "AP", - "offset": 1 - } + "value": { "Deref": { "register": "AP", "offset": -1 } }, + "scalar": { "Immediate": "0x8000000000000110000000000000000" }, + "max_x": { "Immediate": "0xfffffffffffffffffffffffffffffffe" }, + "x": { "register": "AP", "offset": 0 }, + "y": { "register": "AP", "offset": 1 } } } ] ], [ - 6034, + 8574, [ { "TestLessThan": { "lhs": { "BinOp": { "op": "Add", - "a": { - "register": "AP", - "offset": -1 - }, - "b": { - "Immediate": "0x0" - } + "a": { "register": "AP", "offset": -1 }, + "b": { "Immediate": "0x0" } } }, - "rhs": { - "Immediate": "0x100000000" - }, - "dst": { - "register": "AP", - "offset": 0 - } + "rhs": { "Immediate": "0x100000000" }, + "dst": { "register": "AP", "offset": 0 } } } ] ], [ - 6038, + 8578, [ { "LinearSplit": { - "value": { - "Deref": { - "register": "AP", - "offset": -1 - } - }, - "scalar": { - "Immediate": "0x8000000000000110000000000000000" - }, - "max_x": { - "Immediate": "0xfffffffffffffffffffffffffffffffe" - }, - "x": { - "register": "AP", - "offset": 0 - }, - "y": { - "register": "AP", - "offset": 1 - } + "value": { "Deref": { "register": "AP", "offset": -1 } }, + "scalar": { "Immediate": "0x8000000000000110000000000000000" }, + "max_x": { "Immediate": "0xfffffffffffffffffffffffffffffffe" }, + "x": { "register": "AP", "offset": 0 }, + "y": { "register": "AP", "offset": 1 } } } ] ], [ - 6130, + 8683, [ { "TestLessThan": { "lhs": { "BinOp": { "op": "Add", - "a": { - "register": "AP", - "offset": -1 - }, - "b": { - "Immediate": "0x0" - } + "a": { "register": "AP", "offset": -1 }, + "b": { "Immediate": "0x0" } } }, - "rhs": { - "Immediate": "0x10000" - }, - "dst": { - "register": "AP", - "offset": 0 - } + "rhs": { "Immediate": "0x100000000" }, + "dst": { "register": "AP", "offset": 0 } } } ] ], [ - 6134, + 8687, [ { "LinearSplit": { - "value": { - "Deref": { - "register": "AP", - "offset": -1 - } - }, - "scalar": { - "Immediate": "0x8000000000000110000000000000000" - }, - "max_x": { - "Immediate": "0xfffffffffffffffffffffffffffffffe" - }, - "x": { - "register": "AP", - "offset": 0 - }, - "y": { - "register": "AP", - "offset": 1 - } + "value": { "Deref": { "register": "AP", "offset": -1 } }, + "scalar": { "Immediate": "0x8000000000000110000000000000000" }, + "max_x": { "Immediate": "0xfffffffffffffffffffffffffffffffe" }, + "x": { "register": "AP", "offset": 0 }, + "y": { "register": "AP", "offset": 1 } } } ] ], [ - 6161, + 8714, [ { "TestLessThan": { "lhs": { "BinOp": { "op": "Add", - "a": { - "register": "AP", - "offset": -1 - }, - "b": { - "Immediate": "0x0" - } + "a": { "register": "AP", "offset": -1 }, + "b": { "Immediate": "0x0" } } }, - "rhs": { - "Immediate": "0x100" - }, - "dst": { - "register": "AP", - "offset": 0 - } + "rhs": { "Immediate": "0x100000000" }, + "dst": { "register": "AP", "offset": 0 } } } ] ], [ - 6165, + 8718, [ { "LinearSplit": { - "value": { - "Deref": { - "register": "AP", - "offset": -1 - } - }, - "scalar": { - "Immediate": "0x8000000000000110000000000000000" - }, - "max_x": { - "Immediate": "0xfffffffffffffffffffffffffffffffe" - }, - "x": { - "register": "AP", - "offset": 0 - }, - "y": { - "register": "AP", - "offset": 1 - } + "value": { "Deref": { "register": "AP", "offset": -1 } }, + "scalar": { "Immediate": "0x8000000000000110000000000000000" }, + "max_x": { "Immediate": "0xfffffffffffffffffffffffffffffffe" }, + "x": { "register": "AP", "offset": 0 }, + "y": { "register": "AP", "offset": 1 } } } ] ], + [8793, [{ "AllocSegment": { "dst": { "register": "AP", "offset": 0 } } }]], [ - 6260, + 8864, [ { "TestLessThan": { "lhs": { "BinOp": { "op": "Add", - "a": { - "register": "FP", - "offset": 0 - }, - "b": { - "Immediate": "0x0" - } + "a": { "register": "AP", "offset": -1 }, + "b": { "Immediate": "0x0" } } }, - "rhs": { - "Immediate": "0x10000" - }, - "dst": { - "register": "AP", - "offset": 0 - } + "rhs": { "Immediate": "0x10000000000000000" }, + "dst": { "register": "AP", "offset": 0 } } } ] ], [ - 6264, + 8868, [ { "LinearSplit": { - "value": { - "Deref": { - "register": "AP", - "offset": -1 - } - }, - "scalar": { - "Immediate": "0x8000000000000110000000000000000" - }, - "max_x": { - "Immediate": "0xfffffffffffffffffffffffffffffffe" - }, - "x": { - "register": "AP", - "offset": 0 - }, - "y": { - "register": "AP", - "offset": 1 - } + "value": { "Deref": { "register": "AP", "offset": -1 } }, + "scalar": { "Immediate": "0x8000000000000110000000000000000" }, + "max_x": { "Immediate": "0xfffffffffffffffffffffffffffffffe" }, + "x": { "register": "AP", "offset": 0 }, + "y": { "register": "AP", "offset": 1 } + } + } + ] + ], + [ + 8895, + [ + { + "TestLessThan": { + "lhs": { "Deref": { "register": "AP", "offset": -1 } }, + "rhs": { "Immediate": "0x100000000000000000000000000000000" }, + "dst": { "register": "AP", "offset": 0 } } } ] ], [ - 6290, + 8897, [ { - "AllocSegment": { - "dst": { - "register": "AP", - "offset": 0 - } + "DivMod": { + "lhs": { "Deref": { "register": "AP", "offset": -2 } }, + "rhs": { "Immediate": "0x100000000000000000000000000000000" }, + "quotient": { "register": "AP", "offset": 3 }, + "remainder": { "register": "AP", "offset": 4 } } } ] ], [ - 6397, + 8987, [ { "TestLessThan": { "lhs": { "BinOp": { "op": "Add", - "a": { - "register": "AP", - "offset": -1 - }, - "b": { - "Immediate": "0x0" - } + "a": { "register": "AP", "offset": -1 }, + "b": { "Immediate": "0x0" } } }, - "rhs": { - "Immediate": "0x10000" - }, - "dst": { - "register": "AP", - "offset": 0 - } + "rhs": { "Immediate": "0x100" }, + "dst": { "register": "AP", "offset": 0 } } } ] ], [ - 6401, + 8991, [ { "LinearSplit": { - "value": { - "Deref": { - "register": "AP", - "offset": -1 - } - }, - "scalar": { - "Immediate": "0x8000000000000110000000000000000" - }, - "max_x": { - "Immediate": "0xfffffffffffffffffffffffffffffffe" - }, - "x": { - "register": "AP", - "offset": 0 - }, - "y": { - "register": "AP", - "offset": 1 - } + "value": { "Deref": { "register": "AP", "offset": -1 } }, + "scalar": { "Immediate": "0x8000000000000110000000000000000" }, + "max_x": { "Immediate": "0xfffffffffffffffffffffffffffffffe" }, + "x": { "register": "AP", "offset": 0 }, + "y": { "register": "AP", "offset": 1 } + } + } + ] + ], + [9192, [{ "AllocSegment": { "dst": { "register": "AP", "offset": 0 } } }]], + [ + 9199, + [ + { + "TestLessThanOrEqual": { + "lhs": { "Immediate": "0x906" }, + "rhs": { "Deref": { "register": "FP", "offset": -8 } }, + "dst": { "register": "AP", "offset": 0 } } } ] ], [ - 6428, + 9230, [ { "TestLessThan": { "lhs": { "BinOp": { "op": "Add", - "a": { - "register": "AP", - "offset": -1 - }, - "b": { - "Immediate": "0x0" - } + "a": { "register": "AP", "offset": -1 }, + "b": { "Immediate": "0x0" } } }, - "rhs": { - "Immediate": "0x10000" - }, - "dst": { - "register": "AP", - "offset": 0 - } + "rhs": { "Immediate": "0x100" }, + "dst": { "register": "AP", "offset": 0 } } } ] ], [ - 6432, + 9234, [ { "LinearSplit": { - "value": { - "Deref": { - "register": "AP", - "offset": -1 - } - }, - "scalar": { - "Immediate": "0x8000000000000110000000000000000" - }, - "max_x": { - "Immediate": "0xfffffffffffffffffffffffffffffffe" - }, - "x": { - "register": "AP", - "offset": 0 - }, - "y": { - "register": "AP", - "offset": 1 - } + "value": { "Deref": { "register": "AP", "offset": -1 } }, + "scalar": { "Immediate": "0x8000000000000110000000000000000" }, + "max_x": { "Immediate": "0xfffffffffffffffffffffffffffffffe" }, + "x": { "register": "AP", "offset": 0 }, + "y": { "register": "AP", "offset": 1 } } } ] ], [ - 6525, + 9319, [ { "TestLessThan": { "lhs": { "BinOp": { "op": "Add", - "a": { - "register": "AP", - "offset": -1 - }, - "b": { - "Immediate": "0x0" - } + "a": { "register": "FP", "offset": 0 }, + "b": { "Immediate": "0x0" } } }, - "rhs": { - "Immediate": "0x100000000" - }, - "dst": { - "register": "AP", - "offset": 0 - } + "rhs": { "Immediate": "0x100000000" }, + "dst": { "register": "AP", "offset": 0 } } } ] ], [ - 6529, + 9323, [ { "LinearSplit": { - "value": { - "Deref": { - "register": "AP", - "offset": -1 - } - }, - "scalar": { - "Immediate": "0x8000000000000110000000000000000" - }, - "max_x": { - "Immediate": "0xfffffffffffffffffffffffffffffffe" - }, - "x": { - "register": "AP", - "offset": 0 - }, - "y": { - "register": "AP", - "offset": 1 - } + "value": { "Deref": { "register": "AP", "offset": -1 } }, + "scalar": { "Immediate": "0x8000000000000110000000000000000" }, + "max_x": { "Immediate": "0xfffffffffffffffffffffffffffffffe" }, + "x": { "register": "AP", "offset": 0 }, + "y": { "register": "AP", "offset": 1 } } } ] ], + [9349, [{ "AllocSegment": { "dst": { "register": "AP", "offset": 0 } } }]], [ - 6567, + 9450, [ { - "TestLessThan": { - "lhs": { - "BinOp": { - "op": "Add", - "a": { - "register": "AP", - "offset": -1 - }, - "b": { - "Immediate": "0x0" - } - } - }, - "rhs": { - "Immediate": "0x100" - }, - "dst": { - "register": "AP", - "offset": 0 - } + "TestLessThanOrEqual": { + "lhs": { "Immediate": "0x6ea" }, + "rhs": { "Deref": { "register": "FP", "offset": -7 } }, + "dst": { "register": "AP", "offset": 0 } } } ] ], [ - 6571, + 9500, [ { - "LinearSplit": { - "value": { - "Deref": { - "register": "AP", - "offset": -1 - } - }, - "scalar": { - "Immediate": "0x8000000000000110000000000000000" - }, - "max_x": { - "Immediate": "0xfffffffffffffffffffffffffffffffe" - }, - "x": { - "register": "AP", - "offset": 0 - }, - "y": { - "register": "AP", - "offset": 1 - } + "TestLessThanOrEqual": { + "lhs": { "Immediate": "0x906" }, + "rhs": { "Deref": { "register": "FP", "offset": -8 } }, + "dst": { "register": "AP", "offset": 0 } } } ] ], [ - 6694, + 9531, [ { "TestLessThan": { "lhs": { "BinOp": { "op": "Add", - "a": { - "register": "AP", - "offset": -1 - }, - "b": { - "Immediate": "0x0" - } + "a": { "register": "AP", "offset": -1 }, + "b": { "Immediate": "0x0" } } }, - "rhs": { - "Immediate": "0x100" - }, - "dst": { - "register": "AP", - "offset": 0 - } + "rhs": { "Immediate": "0x10000" }, + "dst": { "register": "AP", "offset": 0 } } } ] ], [ - 6698, + 9535, [ { "LinearSplit": { - "value": { - "Deref": { - "register": "AP", - "offset": -1 - } - }, - "scalar": { - "Immediate": "0x8000000000000110000000000000000" - }, - "max_x": { - "Immediate": "0xfffffffffffffffffffffffffffffffe" - }, - "x": { - "register": "AP", - "offset": 0 - }, - "y": { - "register": "AP", - "offset": 1 - } + "value": { "Deref": { "register": "AP", "offset": -1 } }, + "scalar": { "Immediate": "0x8000000000000110000000000000000" }, + "max_x": { "Immediate": "0xfffffffffffffffffffffffffffffffe" }, + "x": { "register": "AP", "offset": 0 }, + "y": { "register": "AP", "offset": 1 } } } ] ], [ - 6756, + 9620, [ { "TestLessThan": { "lhs": { "BinOp": { "op": "Add", - "a": { - "register": "AP", - "offset": -1 - }, - "b": { - "Immediate": "0x0" - } + "a": { "register": "FP", "offset": 0 }, + "b": { "Immediate": "0x0" } } }, - "rhs": { - "Immediate": "0x10000000000000000" - }, - "dst": { - "register": "AP", - "offset": 0 - } + "rhs": { "Immediate": "0x10000" }, + "dst": { "register": "AP", "offset": 0 } } } ] ], [ - 6760, + 9624, [ { "LinearSplit": { - "value": { - "Deref": { - "register": "AP", - "offset": -1 - } - }, - "scalar": { - "Immediate": "0x8000000000000110000000000000000" - }, - "max_x": { - "Immediate": "0xfffffffffffffffffffffffffffffffe" - }, - "x": { - "register": "AP", - "offset": 0 - }, - "y": { - "register": "AP", - "offset": 1 - } + "value": { "Deref": { "register": "AP", "offset": -1 } }, + "scalar": { "Immediate": "0x8000000000000110000000000000000" }, + "max_x": { "Immediate": "0xfffffffffffffffffffffffffffffffe" }, + "x": { "register": "AP", "offset": 0 }, + "y": { "register": "AP", "offset": 1 } } } ] ], + [9650, [{ "AllocSegment": { "dst": { "register": "AP", "offset": 0 } } }]], [ - 6830, + 9757, [ { - "AllocSegment": { - "dst": { - "register": "AP", - "offset": 0 - } + "TestLessThan": { + "lhs": { + "BinOp": { + "op": "Add", + "a": { "register": "AP", "offset": -1 }, + "b": { "Immediate": "0x0" } + } + }, + "rhs": { "Immediate": "0x10000" }, + "dst": { "register": "AP", "offset": 0 } } } ] ], [ - 6837, + 9761, [ { - "TestLessThanOrEqual": { - "lhs": { - "Immediate": "0x906" - }, - "rhs": { - "Deref": { - "register": "FP", - "offset": -8 - } - }, - "dst": { - "register": "AP", - "offset": 0 - } + "LinearSplit": { + "value": { "Deref": { "register": "AP", "offset": -1 } }, + "scalar": { "Immediate": "0x8000000000000110000000000000000" }, + "max_x": { "Immediate": "0xfffffffffffffffffffffffffffffffe" }, + "x": { "register": "AP", "offset": 0 }, + "y": { "register": "AP", "offset": 1 } } } ] ], [ - 6868, + 9788, [ { "TestLessThan": { "lhs": { "BinOp": { "op": "Add", - "a": { - "register": "AP", - "offset": -1 - }, - "b": { - "Immediate": "0x0" - } + "a": { "register": "AP", "offset": -1 }, + "b": { "Immediate": "0x0" } } }, - "rhs": { - "Immediate": "0x100" - }, - "dst": { - "register": "AP", - "offset": 0 - } + "rhs": { "Immediate": "0x100000000" }, + "dst": { "register": "AP", "offset": 0 } } } ] ], [ - 6872, + 9792, [ { "LinearSplit": { - "value": { - "Deref": { - "register": "AP", - "offset": -1 - } - }, - "scalar": { - "Immediate": "0x8000000000000110000000000000000" - }, - "max_x": { - "Immediate": "0xfffffffffffffffffffffffffffffffe" - }, - "x": { - "register": "AP", - "offset": 0 - }, - "y": { - "register": "AP", - "offset": 1 - } + "value": { "Deref": { "register": "AP", "offset": -1 } }, + "scalar": { "Immediate": "0x8000000000000110000000000000000" }, + "max_x": { "Immediate": "0xfffffffffffffffffffffffffffffffe" }, + "x": { "register": "AP", "offset": 0 }, + "y": { "register": "AP", "offset": 1 } } } ] ], [ - 6957, + 9819, [ { "TestLessThan": { "lhs": { "BinOp": { "op": "Add", - "a": { - "register": "FP", - "offset": 0 - }, - "b": { - "Immediate": "0x0" - } + "a": { "register": "AP", "offset": -1 }, + "b": { "Immediate": "0x0" } } }, - "rhs": { - "Immediate": "0x100000000" - }, - "dst": { - "register": "AP", - "offset": 0 - } + "rhs": { "Immediate": "0x10000000000000000" }, + "dst": { "register": "AP", "offset": 0 } } } ] ], [ - 6961, + 9823, [ { "LinearSplit": { - "value": { - "Deref": { - "register": "AP", - "offset": -1 - } - }, - "scalar": { - "Immediate": "0x8000000000000110000000000000000" - }, - "max_x": { - "Immediate": "0xfffffffffffffffffffffffffffffffe" - }, - "x": { - "register": "AP", - "offset": 0 - }, - "y": { - "register": "AP", - "offset": 1 - } - } - } - ] - ], - [ - 6987, - [ - { - "AllocSegment": { - "dst": { - "register": "AP", - "offset": 0 - } + "value": { "Deref": { "register": "AP", "offset": -1 } }, + "scalar": { "Immediate": "0x8000000000000110000000000000000" }, + "max_x": { "Immediate": "0xfffffffffffffffffffffffffffffffe" }, + "x": { "register": "AP", "offset": 0 }, + "y": { "register": "AP", "offset": 1 } } } ] ], [ - 7088, + 9909, [ { "TestLessThanOrEqual": { - "lhs": { - "Immediate": "0x906" - }, - "rhs": { - "Deref": { - "register": "FP", - "offset": -8 - } - }, - "dst": { - "register": "AP", - "offset": 0 - } + "lhs": { "Immediate": "0x906" }, + "rhs": { "Deref": { "register": "FP", "offset": -8 } }, + "dst": { "register": "AP", "offset": 0 } } } ] ], [ - 7119, + 9940, [ { "TestLessThan": { "lhs": { "BinOp": { "op": "Add", - "a": { - "register": "AP", - "offset": -1 - }, - "b": { - "Immediate": "0x0" - } + "a": { "register": "AP", "offset": -1 }, + "b": { "Immediate": "0x0" } } }, - "rhs": { - "Immediate": "0x10000" - }, - "dst": { - "register": "AP", - "offset": 0 - } + "rhs": { "Immediate": "0x100000000" }, + "dst": { "register": "AP", "offset": 0 } } } ] ], [ - 7123, + 9944, [ { "LinearSplit": { - "value": { - "Deref": { - "register": "AP", - "offset": -1 - } - }, - "scalar": { - "Immediate": "0x8000000000000110000000000000000" - }, - "max_x": { - "Immediate": "0xfffffffffffffffffffffffffffffffe" - }, - "x": { - "register": "AP", - "offset": 0 - }, - "y": { - "register": "AP", - "offset": 1 - } + "value": { "Deref": { "register": "AP", "offset": -1 } }, + "scalar": { "Immediate": "0x8000000000000110000000000000000" }, + "max_x": { "Immediate": "0xfffffffffffffffffffffffffffffffe" }, + "x": { "register": "AP", "offset": 0 }, + "y": { "register": "AP", "offset": 1 } } } ] ], [ - 7208, + 10027, [ { "TestLessThan": { "lhs": { "BinOp": { "op": "Add", - "a": { - "register": "FP", - "offset": 0 - }, - "b": { - "Immediate": "0x0" - } + "a": { "register": "AP", "offset": -1 }, + "b": { "Immediate": "0x0" } } }, - "rhs": { - "Immediate": "0x10000" - }, - "dst": { - "register": "AP", - "offset": 0 - } + "rhs": { "Immediate": "0x10000" }, + "dst": { "register": "AP", "offset": 0 } } } ] ], [ - 7212, + 10031, [ { "LinearSplit": { - "value": { - "Deref": { - "register": "AP", - "offset": -1 + "value": { "Deref": { "register": "AP", "offset": -1 } }, + "scalar": { "Immediate": "0x8000000000000110000000000000000" }, + "max_x": { "Immediate": "0xfffffffffffffffffffffffffffffffe" }, + "x": { "register": "AP", "offset": 0 }, + "y": { "register": "AP", "offset": 1 } + } + } + ] + ], + [ + 10058, + [ + { + "TestLessThan": { + "lhs": { + "BinOp": { + "op": "Add", + "a": { "register": "AP", "offset": -1 }, + "b": { "Immediate": "0x0" } } }, - "scalar": { - "Immediate": "0x8000000000000110000000000000000" - }, - "max_x": { - "Immediate": "0xfffffffffffffffffffffffffffffffe" - }, - "x": { - "register": "AP", - "offset": 0 - }, - "y": { - "register": "AP", - "offset": 1 - } + "rhs": { "Immediate": "0x10000" }, + "dst": { "register": "AP", "offset": 0 } } } ] ], [ - 7238, + 10062, [ { - "AllocSegment": { - "dst": { - "register": "AP", - "offset": 0 - } + "LinearSplit": { + "value": { "Deref": { "register": "AP", "offset": -1 } }, + "scalar": { "Immediate": "0x8000000000000110000000000000000" }, + "max_x": { "Immediate": "0xfffffffffffffffffffffffffffffffe" }, + "x": { "register": "AP", "offset": 0 }, + "y": { "register": "AP", "offset": 1 } } } ] ], [ - 7345, + 10089, [ { "TestLessThan": { "lhs": { "BinOp": { "op": "Add", - "a": { - "register": "AP", - "offset": -1 - }, - "b": { - "Immediate": "0x0" - } + "a": { "register": "AP", "offset": -1 }, + "b": { "Immediate": "0x0" } } }, - "rhs": { - "Immediate": "0x10000" - }, - "dst": { - "register": "AP", - "offset": 0 - } + "rhs": { "Immediate": "0x10000" }, + "dst": { "register": "AP", "offset": 0 } } } ] ], [ - 7349, + 10093, [ { "LinearSplit": { - "value": { - "Deref": { - "register": "AP", - "offset": -1 - } - }, - "scalar": { - "Immediate": "0x8000000000000110000000000000000" - }, - "max_x": { - "Immediate": "0xfffffffffffffffffffffffffffffffe" - }, - "x": { - "register": "AP", - "offset": 0 - }, - "y": { - "register": "AP", - "offset": 1 - } + "value": { "Deref": { "register": "AP", "offset": -1 } }, + "scalar": { "Immediate": "0x8000000000000110000000000000000" }, + "max_x": { "Immediate": "0xfffffffffffffffffffffffffffffffe" }, + "x": { "register": "AP", "offset": 0 }, + "y": { "register": "AP", "offset": 1 } } } ] ], [ - 7376, + 10196, [ { "TestLessThan": { "lhs": { "BinOp": { "op": "Add", - "a": { - "register": "AP", - "offset": -1 - }, - "b": { - "Immediate": "0x0" - } + "a": { "register": "AP", "offset": -1 }, + "b": { "Immediate": "0x0" } } }, - "rhs": { - "Immediate": "0x100000000" - }, - "dst": { - "register": "AP", - "offset": 0 - } + "rhs": { "Immediate": "0x10000000000000000" }, + "dst": { "register": "AP", "offset": 0 } } } ] ], [ - 7380, + 10200, [ { "LinearSplit": { - "value": { - "Deref": { - "register": "AP", - "offset": -1 - } - }, - "scalar": { - "Immediate": "0x8000000000000110000000000000000" - }, - "max_x": { - "Immediate": "0xfffffffffffffffffffffffffffffffe" - }, - "x": { - "register": "AP", - "offset": 0 - }, - "y": { - "register": "AP", - "offset": 1 - } + "value": { "Deref": { "register": "AP", "offset": -1 } }, + "scalar": { "Immediate": "0x8000000000000110000000000000000" }, + "max_x": { "Immediate": "0xfffffffffffffffffffffffffffffffe" }, + "x": { "register": "AP", "offset": 0 }, + "y": { "register": "AP", "offset": 1 } } } ] ], [ - 7407, + 10227, [ { "TestLessThan": { "lhs": { "BinOp": { "op": "Add", - "a": { - "register": "AP", - "offset": -1 - }, - "b": { - "Immediate": "0x0" - } + "a": { "register": "AP", "offset": -1 }, + "b": { "Immediate": "0x0" } } }, - "rhs": { - "Immediate": "0x10000000000000000" - }, - "dst": { - "register": "AP", - "offset": 0 - } + "rhs": { "Immediate": "0x100000000" }, + "dst": { "register": "AP", "offset": 0 } } } ] ], [ - 7411, + 10231, [ { "LinearSplit": { - "value": { - "Deref": { - "register": "AP", - "offset": -1 - } - }, - "scalar": { - "Immediate": "0x8000000000000110000000000000000" - }, - "max_x": { - "Immediate": "0xfffffffffffffffffffffffffffffffe" - }, - "x": { - "register": "AP", - "offset": 0 - }, - "y": { - "register": "AP", - "offset": 1 - } + "value": { "Deref": { "register": "AP", "offset": -1 } }, + "scalar": { "Immediate": "0x8000000000000110000000000000000" }, + "max_x": { "Immediate": "0xfffffffffffffffffffffffffffffffe" }, + "x": { "register": "AP", "offset": 0 }, + "y": { "register": "AP", "offset": 1 } } } ] ], [ - 7497, + 10359, [ { "TestLessThanOrEqual": { - "lhs": { - "Immediate": "0x906" - }, - "rhs": { - "Deref": { - "register": "FP", - "offset": -8 - } - }, - "dst": { - "register": "AP", - "offset": 0 - } + "lhs": { "Immediate": "0xc26" }, + "rhs": { "Deref": { "register": "FP", "offset": -8 } }, + "dst": { "register": "AP", "offset": 0 } } } ] ], [ - 7528, + 10390, [ { "TestLessThan": { - "lhs": { - "BinOp": { - "op": "Add", - "a": { - "register": "AP", - "offset": -1 - }, - "b": { - "Immediate": "0x0" - } - } - }, - "rhs": { - "Immediate": "0x100000000" - }, - "dst": { - "register": "AP", - "offset": 0 - } + "lhs": { "Deref": { "register": "AP", "offset": -1 } }, + "rhs": { "Immediate": "0x100000000000000000000000000000000" }, + "dst": { "register": "AP", "offset": 0 } } } ] ], [ - 7532, + 10392, [ { - "LinearSplit": { - "value": { - "Deref": { - "register": "AP", - "offset": -1 - } - }, - "scalar": { - "Immediate": "0x8000000000000110000000000000000" - }, - "max_x": { - "Immediate": "0xfffffffffffffffffffffffffffffffe" - }, - "x": { - "register": "AP", - "offset": 0 - }, - "y": { - "register": "AP", - "offset": 1 - } + "DivMod": { + "lhs": { "Deref": { "register": "AP", "offset": -2 } }, + "rhs": { "Immediate": "0x100000000000000000000000000000000" }, + "quotient": { "register": "AP", "offset": 3 }, + "remainder": { "register": "AP", "offset": 4 } } } ] ], [ - 7615, + 10422, [ { "TestLessThan": { - "lhs": { - "BinOp": { - "op": "Add", - "a": { - "register": "AP", - "offset": -1 - }, - "b": { - "Immediate": "0x0" - } - } - }, - "rhs": { - "Immediate": "0x10000" - }, - "dst": { - "register": "AP", - "offset": 0 - } + "lhs": { "Deref": { "register": "AP", "offset": -1 } }, + "rhs": { "Immediate": "0x100000000000000000000000000000000" }, + "dst": { "register": "AP", "offset": 0 } } } ] ], [ - 7619, + 10424, [ { - "LinearSplit": { - "value": { - "Deref": { - "register": "AP", - "offset": -1 - } - }, - "scalar": { - "Immediate": "0x8000000000000110000000000000000" - }, - "max_x": { - "Immediate": "0xfffffffffffffffffffffffffffffffe" - }, - "x": { - "register": "AP", - "offset": 0 - }, - "y": { - "register": "AP", - "offset": 1 - } + "DivMod": { + "lhs": { "Deref": { "register": "AP", "offset": -2 } }, + "rhs": { "Immediate": "0x100000000000000000000000000000000" }, + "quotient": { "register": "AP", "offset": 3 }, + "remainder": { "register": "AP", "offset": 4 } } } ] ], [ - 7646, + 10543, [ { "TestLessThan": { "lhs": { "BinOp": { "op": "Add", - "a": { - "register": "AP", - "offset": -1 - }, - "b": { - "Immediate": "0x0" - } + "a": { "register": "AP", "offset": -1 }, + "b": { "Immediate": "0x0" } } }, - "rhs": { - "Immediate": "0x10000" - }, - "dst": { - "register": "AP", - "offset": 0 - } + "rhs": { "Immediate": "0x100000000" }, + "dst": { "register": "AP", "offset": 0 } } } ] ], [ - 7650, + 10547, [ { "LinearSplit": { - "value": { - "Deref": { - "register": "AP", - "offset": -1 - } - }, - "scalar": { - "Immediate": "0x8000000000000110000000000000000" - }, - "max_x": { - "Immediate": "0xfffffffffffffffffffffffffffffffe" - }, - "x": { - "register": "AP", - "offset": 0 - }, - "y": { - "register": "AP", - "offset": 1 - } + "value": { "Deref": { "register": "AP", "offset": -1 } }, + "scalar": { "Immediate": "0x8000000000000110000000000000000" }, + "max_x": { "Immediate": "0xfffffffffffffffffffffffffffffffe" }, + "x": { "register": "AP", "offset": 0 }, + "y": { "register": "AP", "offset": 1 } } } ] ], [ - 7677, + 10605, [ { "TestLessThan": { "lhs": { "BinOp": { "op": "Add", - "a": { - "register": "AP", - "offset": -1 - }, - "b": { - "Immediate": "0x0" - } + "a": { "register": "AP", "offset": -1 }, + "b": { "Immediate": "0x0" } } }, - "rhs": { - "Immediate": "0x10000" - }, - "dst": { - "register": "AP", - "offset": 0 - } + "rhs": { "Immediate": "0x10000000000000000" }, + "dst": { "register": "AP", "offset": 0 } } } ] ], [ - 7681, + 10609, [ { "LinearSplit": { - "value": { - "Deref": { - "register": "AP", - "offset": -1 - } - }, - "scalar": { - "Immediate": "0x8000000000000110000000000000000" - }, - "max_x": { - "Immediate": "0xfffffffffffffffffffffffffffffffe" - }, - "x": { - "register": "AP", - "offset": 0 - }, - "y": { - "register": "AP", - "offset": 1 - } + "value": { "Deref": { "register": "AP", "offset": -1 } }, + "scalar": { "Immediate": "0x8000000000000110000000000000000" }, + "max_x": { "Immediate": "0xfffffffffffffffffffffffffffffffe" }, + "x": { "register": "AP", "offset": 0 }, + "y": { "register": "AP", "offset": 1 } } } ] @@ -12275,7 +13708,7 @@ }, { "selector": "0x1feb29d0d6e8c4ba7a71db4cdaa24898ddd8bb350e724f844145997afee9c9", - "offset": 2827, + "offset": 3260, "builtins": ["range_check"] }, { @@ -12285,62 +13718,67 @@ }, { "selector": "0xc5c709a3ffed9c578aa6ee00ce77e78a490d2c8aa971d1f6ccdd662da6f17b", - "offset": 2276, + "offset": 2565, "builtins": ["range_check"] }, { "selector": "0xe1eafdb08801cfc555a49e25dabfd7aa4ed7b2dd5c7e2c5a6930eac6d1b54c", - "offset": 2656, + "offset": 3089, "builtins": ["range_check"] }, { "selector": "0x106f418ef7e2ea39027bcde47d5f0a54ed68fe34aa69b24c3a162def52a841b", - "offset": 2015, + "offset": 2304, + "builtins": ["range_check"] + }, + { + "selector": "0x11e332cf3fdb4f58a72be710217fdd238834524d13dae1c6131f3206b7c329a", + "offset": 4151, "builtins": ["range_check"] }, { "selector": "0x11fdea672ded06956bdd64d89fd111661735e88595f88c1199f648fe3c2dd15", - "offset": 2924, + "offset": 3357, "builtins": ["range_check"] }, { "selector": "0x126587e6b203b756642ff0bd9f92e84ef609cf2a02b516fbf2d94f36a73b83e", - "offset": 1072, + "offset": 1215, "builtins": ["range_check"] }, { "selector": "0x1303ef00936936490ad20afec7fbe2bf74669665b2a2249945ff561debad733", - "offset": 1218, + "offset": 1507, "builtins": ["range_check"] }, { "selector": "0x13d3b1aae5fa65a483db7c67c98dca6aac27353970caa114d112c4b6de8ec73", - "offset": 1753, + "offset": 2042, "builtins": ["range_check"] }, { "selector": "0x145f0cd3e37db4233ce4d6b84935d9b32387d72eb53713e78e2ec56cc6fdf5d", - "offset": 2482, + "offset": 2915, "builtins": ["range_check"] }, { "selector": "0x147c0b24e5bfb625956c5a44d3fc84d509b789bf2e5335365c03b9be2d757d3", - "offset": 2390, + "offset": 2823, "builtins": ["range_check"] }, { "selector": "0x1785e0d94a5ba07a47865d69afdf914dad65466b25d38cb78cb741fac447ba8", - "offset": 3144, + "offset": 3577, "builtins": ["range_check"] }, { "selector": "0x1c7564da2ac3c0ee05570d52004d51604c5315131cafd67610b2e629bf4fd7c", - "offset": 2146, + "offset": 2435, "builtins": ["range_check"] }, { "selector": "0x1d39fadfe7e2621092d7d0a467672f0eb0ad03c5926829d40ceefa7bcd10b80", - "offset": 3257, + "offset": 3690, "builtins": ["range_check"] }, { @@ -12348,9 +13786,14 @@ "offset": 778, "builtins": ["range_check"] }, + { + "selector": "0x202cff97d5b709d201beabe103b284f8595094a25620c72dbbcb57d814d62fb", + "offset": 1361, + "builtins": ["range_check"] + }, { "selector": "0x208b88c80fabc1b03f3c78a09aaa1a693a5bb1366271a1c6b9e7971aa325116", - "offset": 2752, + "offset": 3185, "builtins": ["range_check"] }, { @@ -12363,39 +13806,59 @@ "offset": 647, "builtins": ["range_check"] }, + { + "selector": "0x24793ea78a1f64b05c541f9e92f63fa2a71ddb3a23e9ff16aac9ed7d178fa66", + "offset": 1072, + "builtins": ["range_check"] + }, + { + "selector": "0x24ee851566f42b478860ca46d2543852ef11c919efc4e114db8829520728305", + "offset": 2679, + "builtins": ["range_check"] + }, { "selector": "0x265cf503e1b425e68026a65eb872306eb863eb6ba526cddc50fd44d00d8e180", "offset": 0, "builtins": ["range_check"] }, + { + "selector": "0x284a2ddea630469ba82b6fbced35fa12c6504de7b50af7cda84bedbaae5e521", + "offset": 4272, + "builtins": ["range_check"] + }, { "selector": "0x29a68d48876fa0d864a616e212175e42824be1cdcb35bcd2e05b302042e491f", - "offset": 1382, + "offset": 1671, + "builtins": ["range_check"] + }, + { + "selector": "0x2bf962c6ef0f8dddc516426e31a25831c882b7a1a5a47f2716a3d4403c5894c", + "offset": 3852, "builtins": ["range_check"] }, { "selector": "0x31c18e21d8e75a5f2f6f1330c56da1f8b2fd93568002ef0d15bcce9c5644c2b", - "offset": 1608, + "offset": 1897, "builtins": ["range_check"] }, { "selector": "0x36d666ce4d4c894d5dcb35a06bb6ca9659358f5e9d7fe07519e7531ef44a6e2", - "offset": 3419, + "offset": 3982, "builtins": ["range_check"] }, { "selector": "0x36e432757f2854d382b66d849ed9a3edf35fdbf55a7c83296142cf7b89b0573", - "offset": 1868, + "offset": 2157, "builtins": ["range_check"] }, { "selector": "0x3bb1cf9f6b291f5c63c8ecbfcf8cd522642fdc7ec277c2fddb7dc069cd05ced", - "offset": 3047, + "offset": 3480, "builtins": ["range_check"] }, { "selector": "0x3c694eba4d500b140694d8f7da3f85031f4d4827b57da58cb5f2bd1ab74e5ab", - "offset": 1495, + "offset": 1784, "builtins": ["range_check"] }, { diff --git a/__mocks__/cairo/cairo2120/enums_test_enums.sierra.json b/__mocks__/cairo/cairo2120/enums_test_enums.sierra.json index f1a3a7a13..95ab083cc 100644 --- a/__mocks__/cairo/cairo2120/enums_test_enums.sierra.json +++ b/__mocks__/cairo/cairo2120/enums_test_enums.sierra.json @@ -6,182 +6,237 @@ "0x2", "0xc", "0x0", - "0x421", - "0x3df", - "0x7e", + "0x57c", + "0x284", + "0xaf", "0x52616e6765436865636b", "0x800000000000000100000000000000000000000000000000", + "0x426f78", + "0x800000000000000700000000000000000000000000000001", + "0x1", + "0x34", "0x537472756374", "0x800000000000000f00000000000000000000000000000001", "0x0", "0x16a4c8d7c05909052238a862d8cc3e7975bf05a07b3a69c6b28951083a6d672", - "0x753136", + "0x753332", "0x800000000000000700000000000000000000000000000000", - "0x800000000000000700000000000000000000000000000004", - "0x2ee1e2b1b89f8c495f200e4956278a4d47395fe262f27b52e5865c9524c08c3", - "0x1", - "0x2", + "0x753634", "0x456e756d", "0x800000000000000700000000000000000000000000000003", - "0x34ba6bae0cf8d1255e30a917ff6107d46826b40196a72d0e7e40774c78e1308", + "0x3fb357b5eb238b06277946b7f070edd26e0cee063892b4c4e567ab4ba82e64f", "0x3", "0x4", + "0x2ee1e2b1b89f8c495f200e4956278a4d47395fe262f27b52e5865c9524c08c3", + "0x3e51796447a0ee383cd378461ce43cdc4de99e073e134523aa1a50759251b79", + "0x5", + "0x6", "0x4172726179", "0x800000000000000300000000000000000000000000000001", - "0x10", "0x800000000000000300000000000000000000000000000003", - "0xea899504b4052c27cccf9971daead33001122c7badf30382a469a86d9f8143", - "0x6", - "0xe", - "0x536e617073686f74", - "0x800000000000000700000000000000000000000000000001", + "0x136d0900c2262223b2f503b689e160b3ee22f06de12b274968e5782c9afa5a2", "0x8", + "0x1c", + "0x536e617073686f74", + "0xa", "0x800000000000000700000000000000000000000000000002", "0x1baeba72e79e9db2587cf44fedb2f3700b2075a5e8e39a562584862c4b71f62", - "0x9", - "0xa", - "0x7", - "0x38bd985835a9a53895c52b1878f7fea1ea86c6c36372a6554306b7deed44be6", "0xb", "0xc", + "0x9", + "0x2", + "0x116ac10601706a5b64d570e66fe38769be8ba393099acfc10c9ac928656a55d", + "0xd", + "0xe", + "0x800000000000000700000000000000000000000000000004", + "0x22b643b99f22c18dbd3f5a33597738df5429dac0f2504b5b6db1f5ed83a890c", + "0x10", + "0x11fafbc81ad3e4840b46ff967e3f76441ab2f339eb4001286e5fd1f7a64deab", + "0x11", + "0x80000000000000070000000000000000000000000000000a", + "0x35a614f038c856c9d7a6dd81133fa7a7d9280f9f22f552e3af2b5e11493272b", + "0x426f756e646564496e74", + "0x753136", + "0x15", + "0x34ba6bae0cf8d1255e30a917ff6107d46826b40196a72d0e7e40774c78e1308", + "0x16", + "0xea899504b4052c27cccf9971daead33001122c7badf30382a469a86d9f8143", + "0x18", + "0x19", + "0x38bd985835a9a53895c52b1878f7fea1ea86c6c36372a6554306b7deed44be6", + "0x1a", "0x66656c74323532", "0x556e696e697469616c697a6564", "0x800000000000000200000000000000000000000000000001", - "0x753332", - "0x753634", - "0x11", "0x2daa4fab7cd27a2ed3cc28ccfb3cfca70ad3c000028aa10db2f4783fcefd345", - "0x12", - "0x14", + "0x1e", + "0x20", "0x120fbeae2508a96307cd9d3cd58ad37fd8f6a1ee44e75a9df62b5b86ba2ee2a", - "0x15", - "0x16", + "0x21", + "0x22", "0x3590158452123707463380113690aa6c9c45f48ef55005fd27b035b47348988", - "0x17", - "0x426f78", + "0x23", "0x370026b31ac236e06160ec5dd0d3f03ae6a16e3a80a7672d579c97014775824", - "0x1a", + "0x26", "0x32d2062143aba742e856373db8854bb12033d85fbe03e144a91067f9e4d52f3", - "0x1b", - "0x64", + "0x27", + "0x4b", + "0x2a", + "0x2b", + "0x95", + "0x436f6e7374", + "0x800000000000000000000000000000000000000000000002", + "0x7", + "0x75313238", + "0x25e2ca4b84968c2d8b83ef476ca8549410346b00836ce79beaf538155990bb2", + "0x33", + "0x38b507bf259d96f5c53e8ab8f187781c3d096482729ec2d57f3366318a8502f", + "0x35", "0x2f99b21e21b1ea68f77345d47bde74e1e6c34d34cf69c71cbefd71b887b142f", - "0x1f", - "0x20", + "0x3c", + "0x3d", "0x762af7d47e06fd1456367bdd600ec298e8ca9b72ada03929e234ae0a6974fa", - "0x21", - "0x2c", + "0x3e", + "0x48", "0x172b2d029d59f97d93dd24b7cc98c01ca8efd7bf422afd18e9041d6a1a5c170", - "0x24", - "0x25", + "0x41", + "0x42", "0x30f87c80a9ff91f3ba0997da70c24279680d81f2429f998f2964b1a555ebb1a", - "0x26", - "0x436f6e7374", - "0x800000000000000000000000000000000000000000000002", + "0x43", "0x4f7574206f6620676173", "0x4661696c656420746f20646573657269616c697a6520706172616d202331", "0x496e70757420746f6f206c6f6e6720666f7220617267756d656e7473", - "0x75313238", "0x7538", + "0x2311b30ff91641e03086db219fbd3a339d658feb37d0c9ae93c065185b98998", + "0x3b9ddf97bd58cc7301a2107c3eabad82196f38221c880cd3645d07c3aac1422", + "0x10cb7ae6c8cdf83f18216c0ebb0b1f8cc2987483060d6cc4e803febe3144a49", + "0x49", + "0x3a", + "0x39", + "0x38", + "0x4a", + "0x18b15629396a92c8e73f47983561befa3685a537436ee3c1e3204f88eea8917", + "0x4c", + "0x23623e68c4d7be4a19e3239e653fa39cd9db5bbd5c090eae6f8150b8dc311da", + "0x4d", + "0x62797465733331", + "0xe896e7a7e3809dd3a09fe6fb92e01ffb20145934f9e10674e41a4dc9471605", + "0x4f", + "0xd99412735bde3dd7e4431599a4936b70b3e93e9ca18fe1cae8bef3fd6ace86", + "0x50", + "0x51", + "0x12ad4a46f1b3666169c1bd623edf28918b8314c531ae5dced26d2ef25cc6a88", + "0x52", "0x3be6f13b1eeea8f6d4a3f8f94ff73e9fcdb11e0fc6bbda219a39d7ee87174b2", "0x39f4bddbd30d58053c5c0e4cf215fd40c2ff6254027e1ca82d99dfb9352890f", - "0x2b", - "0x2d", + "0x55", "0xee6bdef6928642145ee888437aa85c8de49c7818f4182a14a2a976e754de1", - "0x3b9ddf97bd58cc7301a2107c3eabad82196f38221c880cd3645d07c3aac1422", "0x29f6621519cd76912cfece1d674f3b588713e5ed5f584eaae76037bcf225363", - "0x30", "0x2b87e8e624ece2f0cf85d181387988b18f6983045a9920dc64764db7b704649", - "0x31", + "0x58", "0x800000000000000700000000000000000000000000000005", "0x1ca0859cc72336b50627b89194f06980da93ce94909d112cdc3a765a051f732", - "0x33", + "0x5a", "0x25f9ad655d525bf79405d9b98957b3aa16d86a2669a7252030de6dd582fce7a", - "0x34", + "0x5b", "0x336711c2797eda3aaf8c07c5cf7b92162501924a7090b25482d45dd3a24ddce", - "0x36", + "0x5d", "0x2299982bf733771210a7b4e01be8e699d9c778cc43743de9c81adc233d0c388", - "0x37", + "0x5e", "0x511591274d8813cc87dcfdf4098a0f02d4d964e5252715695c7682ef8ed20c", - "0x38", - "0x39", + "0x5f", + "0x60", "0x1363576206b17df7adacad7f47f20a0558a0e854432cf721f96cbbba837bf12", - "0x3a", + "0x61", "0x33cff8ca50b98f40b2384a9deb3aa0ab15aaf36318ded0ef9476dabf49bcf59", - "0x3c", + "0x63", "0x3f17eacf0c93d1c0968ec9606d65005de0d0f783350ed6e8fb034f4e616c4ac", - "0x3d", - "0x2311b30ff91641e03086db219fbd3a339d658feb37d0c9ae93c065185b98998", + "0x64", "0x3f88fb1329d0c686ba50f926ff79af1c2a252a3594ae051c810b5f9492092f5", - "0x3f", "0xc3ca175aa1161f5f8990fd287efc42d31a161e1c88dd5023cc11411ad9900e", - "0x40", + "0x66", + "0x21d0c426e745a80b1d24c9a0ec7c81dda7f2cedffbabc0aff033502da6318a8", + "0x39a49016b474fb3467c8897c9d95adb572fb22c109b9c347e99e2b2628a6964", + "0x68", + "0x69", + "0x24dc0465903d1c8757b6cfb4633b582f88a9d558c8c57c4f8ddd950c299c134", + "0x6a", "0x272f6df0a5a47be47433e7300dbb5e90319ca2166288be35db1953ea4207953", "0x21c91a6948c444aa3a421cc79bfe733affa309ec645268ee0c2ad9c3cf184de", - "0x42", + "0x6c", "0x19b9ae4ba181a54f9e7af894a81b44a60aea4c9803939708d6cc212759ee94c", "0x3bc34212d2c42e27596fdda5c1c673422d928dc4f40e1de8c35217d1981d935", - "0x44", + "0x6e", "0x351e72f2e3f133f52891974fa3d211b3e579625b5b15c8d1d0c9db2a1a7d407", - "0x45", + "0x6f", "0x35b26fd36f40720f06990724c28a5d888642e82c23b388420091777a9116b14", "0xb421937e7950e3d75405b25a18ee821a663b39dd8b4d0e442095780f90f986", - "0x47", + "0x71", "0x178d6d12f3b1afb72a326e7a35eaad41bcdbd002be501b5e1e9b1b79a05dbf3", - "0x48", + "0x72", "0x3d020cc8ad67767402690d2175f46e5a6c4bdfeffd34713354e19f97b494da0", - "0x4b", + "0x75", "0x88925dd451d220784df2998389085d5ae6b56c2d22d1d8e151ec9c2e0cd25", - "0x4d", + "0x77", "0xb72e72e5a63caf9f10f3902eec9557b15660c00d245f7c5ae7157423fff53c", - "0x4e", + "0x78", "0x325d56ed86ca2c3a275a749ddb80c013c5d9851885ab349d2ad8510170b42d9", - "0x51", - "0x50", + "0x7b", + "0x7a", "0x185d9b297d752b92e36e7514f2af6ce91e23bd34be2b075b970d46b0f9a3d23", - "0x52", + "0x7c", "0x18c63d3eac6cdb8f2492ed432412542dce6b4ae731500e7570a41938aa68948", - "0x54", + "0x7e", "0x18881bb414cda2bb967493bb34bf6902e0f92d7dcdc5ed5c30dc67c9a90fcff", - "0x56", + "0x80", "0x19f021de67a29d8733a584446c0a0c78f9c6bce2583e229f9a4bccd8d724d72", - "0x58", + "0x82", "0x22493ed12362cd6b4b118733fccc20ee3faf6d6546367fcd35d931dc90833e3", - "0x59", - "0x5b", + "0x83", + "0x153753017267be18101667c301bd9c1bad154a1788f792a6865df0f46131f54", + "0x35c4b06e7eeef8e35750bbd3a86dc0e7f78139f47cad7d41d8b3f0c7b800543", + "0x86", + "0x2a3099fc1fa1ba82867769f236e219f5d4e17abbab18f492c0ebf05c8217197", + "0x87", + "0x89", "0x3fe244a46c1456c4718ef097f5cdd18149ca294c5bdffdd22b7e6f9540cf113", - "0x5c", + "0x8a", "0x3e914fa4847734da785313048196c36310337c36df9be4ce4ff971d838f07c1", - "0x5e", + "0x8c", "0x3850676e95044bcafdab66d09d52fbdc6c05024f661372f2c15e33951a241de", - "0x5f", + "0x8d", + "0x5e8142f349aa7f4d94e6434e7c37d42fc4a378139b2e853552e298defd4f94", + "0x8f", + "0x1056d8bd785d4e4840b7cb8bc486a78c787357ed6cfbe2ceb0d28ff7f821a93", + "0x90", "0x3a6cffe2561983a3685045e4600085227508651a8efcafe6a1bc1f70802e054", "0x2ae68393e5819b8dee9845b8c1ec8dbedfba9bbd68e7253e8f59d867460c0dc", - "0x61", + "0x92", "0x141d61b4bf9a6647000e805a7f949d847cbe9ca009321b7a63424d9742a8912", "0x1df5abf484ff46fcefc4c239b5c351ce9c47777b7e1f26b505f9e9bc5823115", "0x154df121ec994a15880fd221c3fbaacd125f6c4807302f13f9a52cf62f5ce4e", "0x33c2f5a7e0fffa93f1a29733d5927eb7ad69162f4de1c4fa05018aba200144e", - "0x65", + "0x96", "0x183950d5e3273ec891c75fa886c8de01eadccb5ff4ca417397ccb80471b8bea", - "0x69", + "0x9a", "0x15c0a3cc422e9cead14b117474a7e040bc249953f092f790d2238c03d2d4a0b", - "0x6a", + "0x9b", "0x107c4c114adf6d3b44474301d2cdc063e750f40c4d85ae2bcb9d2c5609cf970", "0x74584e9f10ffb1a40aa5a3582e203f6758defc4a497d1a2d5a89f274a320e9", - "0x6d", + "0x9e", "0x34c1a4ee6ef3ec231b7e21635f0ab0f5e73f747e42beb02d65fc54c8e0e0575", - "0x6f", + "0xa0", "0x7613c7135b064a210243c4d523d64a3e8bb1803abc97c950d43a9c0340ac10", - "0x72", + "0xa3", "0x47d50ab84c14028e58f88d9f15b2547ac4d9e3ddb79a76ff9dbd8f98b6374", - "0x73", + "0xa4", "0x4275696c74696e436f737473", "0x53797374656d", "0x9931c641b913035ae674b400b61a51476d506bbe8bba2ff8a6272790aba9e6", - "0x75", + "0xa6", "0x4e6f6e5a65726f", "0x4761734275696c74696e", - "0x1cc", + "0x272", "0x7265766f6b655f61705f747261636b696e67", "0x77697468647261775f676173", "0x6272616e63685f616c69676e", @@ -196,93 +251,110 @@ "0x7531365f7472795f66726f6d5f66656c74323532", "0x72656465706f7369745f676173", "0x656e756d5f696e6974", - "0x7d", + "0xae", "0x6a756d70", - "0x7b", + "0xac", "0x636f6e73745f61735f696d6d656469617465", - "0x7a", + "0xab", "0x66656c743235325f737562", "0x7374727563745f636f6e737472756374", - "0x7c", + "0xad", "0x66756e6374696f6e5f63616c6c", - "0x79", - "0x78", + "0xaa", + "0xa9", "0x6765745f6275696c74696e5f636f737473", - "0x77", + "0xa8", "0x77697468647261775f6761735f616c6c", "0x61727261795f6e6577", "0x736e617073686f745f74616b65", "0x656e61626c655f61705f747261636b696e67", "0x656e756d5f6d61746368", "0x7531365f746f5f66656c74323532", - "0x76", + "0xa7", "0x61727261795f617070656e64", "0x64697361626c655f61705f747261636b696e67", - "0x1c", - "0x1d", - "0x1e", - "0x74", + "0x24", + "0xa5", "0x656e756d5f736e617073686f745f6d61746368", "0x61727261795f6c656e", "0x7533325f746f5f66656c74323532", - "0x70", - "0x6e", - "0x6c", - "0x6b", + "0xa1", + "0x25", + "0x9f", + "0x9d", + "0x9c", "0x7374727563745f736e617073686f745f6465636f6e737472756374", - "0x22", - "0x23", - "0x66", - "0x63", - "0x75385f746f5f66656c74323532", - "0x62", - "0x7536345f746f5f66656c74323532", - "0x60", - "0x5d", - "0x27", "0x28", - "0x5a", - "0x55", "0x29", - "0x2a", - "0x53", - "0x4f", - "0x49", - "0x46", + "0x97", + "0x94", + "0x75385f746f5f66656c74323532", + "0x93", + "0x7536345f746f5f66656c74323532", + "0x2c", + "0x91", + "0x2d", "0x2e", - "0x43", + "0x8e", + "0x8b", + "0x2f", + "0x30", + "0x88", + "0x85", + "0x31", + "0x32", + "0x84", + "0x7f", + "0x7d", + "0x79", + "0x36", + "0x73", + "0x37", + "0x70", + "0x6d", + "0x6b", "0x7536345f7472795f66726f6d5f66656c74323532", "0x7533325f7472795f66726f6d5f66656c74323532", - "0x2f", - "0x41", - "0x3e", + "0x67", "0x3b", - "0x32", - "0x35", + "0x65", + "0x62", + "0x5c", + "0x59", "0x75313238735f66726f6d5f66656c74323532", + "0x3f", + "0x57", + "0x56", "0x753132385f746f5f66656c74323532", - "0x75385f7472795f66726f6d5f66656c74323532", - "0x18", - "0x13", "0x616c6c6f635f6c6f63616c", "0x66696e616c697a655f6c6f63616c73", + "0x40", + "0x53", "0x73746f72655f6c6f63616c", - "0xd", + "0x627974657333315f746f5f66656c74323532", + "0x54", + "0x4e", + "0x47", + "0x46", + "0x45", + "0x44", + "0x75385f7472795f66726f6d5f66656c74323532", + "0x1f", + "0x1b", + "0x1d", + "0x17", + "0x627974657333315f7472795f66726f6d5f66656c74323532", + "0x646f776e63617374", + "0x14", + "0x656e756d5f66726f6d5f626f756e6465645f696e74", + "0x13", + "0x12", "0xf", - "0x5", - "0x1510", + "0x1cc1", "0xffffffffffffffff", - "0x86", - "0x19", - "0x71", - "0x8b", - "0x4a", - "0x4c", - "0x7f", "0xfe", "0xf7", "0xed", - "0xab", "0xe7", "0xd4", "0xcd", @@ -300,7 +372,6 @@ "0x163", "0x16b", "0x194", - "0x57", "0x20b", "0x204", "0x1fa", @@ -310,7 +381,6 @@ "0x1da", "0x1ea", "0x210", - "0x272", "0x268", "0x22c", "0x262", @@ -327,9 +397,7 @@ "0x305", "0x2f9", "0x2ba", - "0x67", "0x2f3", - "0x68", "0x2e0", "0x2d5", "0x2e8", @@ -339,289 +407,254 @@ "0x32d", "0x35e", "0x34b", + "0x74", + "0x76", "0x353", "0x373", - "0x3e6", - "0x3da", - "0x3d3", - "0x3cc", - "0x39c", - "0x3c6", - "0x80", - "0x81", - "0x82", - "0x83", + "0x3e0", + "0x3d9", + "0x3cf", + "0x393", + "0x3c9", + "0x3b6", + "0x3af", "0x3bf", - "0x3eb", - "0x3df", - "0x45b", - "0x44d", - "0x419", - "0x413", - "0x40d", - "0x84", - "0x424", - "0x452", - "0x446", - "0x42f", - "0x441", - "0x460", - "0x454", + "0x3e5", + "0x458", + "0x44c", + "0x81", + "0x445", + "0x43e", + "0x40e", + "0x438", + "0x431", + "0x45d", + "0x451", + "0x4d0", + "0x4c4", "0x4bd", - "0x4b3", - "0x47c", - "0x4ad", - "0x49a", - "0x4a2", - "0x4c2", + "0x4b6", + "0x486", + "0x4b0", + "0x98", + "0x99", + "0x4a9", + "0x4d5", + "0x4c9", + "0x545", + "0x537", + "0x503", + "0x4fd", + "0x4f7", + "0x50e", + "0x53c", + "0x530", "0x519", - "0x50f", - "0x4de", - "0x85", - "0x509", - "0x4f4", - "0x4fe", - "0x51e", - "0x59c", - "0x87", - "0x88", - "0x595", - "0x89", - "0x8a", - "0x58b", + "0x52b", + "0x54a", "0x53e", - "0x585", - "0x8c", - "0x8d", - "0x55c", - "0x8e", - "0x56f", - "0x8f", - "0x90", - "0x91", - "0x92", - "0x93", - "0x57e", - "0x5a1", + "0x5a7", + "0x59d", + "0x566", + "0x597", + "0x584", + "0x58c", + "0x5ac", "0x603", - "0x94", - "0x95", "0x5f9", - "0x5bd", - "0x96", + "0x5c8", "0x5f3", - "0x97", - "0x98", - "0x5da", + "0x5de", "0x5e8", - "0x99", "0x608", - "0x68e", - "0x9a", - "0x9b", - "0x687", - "0x9c", - "0x9d", - "0x67d", + "0x686", + "0x67f", + "0x675", "0x628", - "0x9e", - "0x677", - "0x9f", - "0xa0", - "0x64a", - "0x661", - "0xa1", - "0x670", - "0x693", - "0x6fa", + "0x66f", "0xa2", - "0xa3", - "0x6f0", - "0x6af", - "0xa4", - "0x6ea", - "0xa5", - "0xa6", - "0x6d5", - "0x6ca", - "0x6df", - "0x6ff", - "0x764", - "0xa7", - "0xa8", - "0x75a", - "0x71b", - "0xa9", - "0x754", - "0xaa", - "0x731", - "0x749", - "0xac", - "0x741", - "0x769", - "0x7c8", - "0xad", - "0xae", - "0x7be", - "0x785", - "0xaf", - "0x7b8", + "0x646", + "0x659", + "0x668", + "0x68b", + "0x6ed", + "0x6e3", + "0x6a7", + "0x6dd", + "0x6c4", + "0x6d2", + "0x6f2", + "0x778", "0xb0", "0xb1", - "0x79b", - "0x7ad", - "0x7cd", - "0x80a", - "0x800", - "0x7e9", - "0x7fb", - "0x80f", - "0x87f", - "0x873", + "0x771", "0xb2", - "0x86d", - "0x866", "0xb3", - "0x85f", - "0x837", - "0x858", + "0x767", + "0x712", "0xb4", + "0x761", "0xb5", "0xb6", + "0x734", + "0x74b", "0xb7", - "0x884", - "0x878", - "0x8d7", + "0x75a", + "0x77d", + "0x7e4", "0xb8", "0xb9", - "0x8cd", - "0x8a0", + "0x7da", + "0x799", "0xba", - "0x8c7", + "0x7d4", "0xbb", "0xbc", + "0x7bf", + "0x7b4", + "0x7c9", + "0x7e9", + "0x84e", "0xbd", - "0x8dc", - "0x909", - "0x8f2", - "0x904", - "0x90e", - "0x963", "0xbe", + "0x844", + "0x805", "0xbf", - "0x959", - "0x92a", + "0x83e", "0xc0", - "0x953", "0xc1", + "0x81b", + "0x833", "0xc2", + "0x82b", + "0x853", + "0x8b2", "0xc3", "0xc4", + "0x8a8", + "0x86f", "0xc5", - "0x968", - "0x9d3", + "0x8a2", "0xc6", "0xc7", - "0x9cc", + "0x885", + "0x897", + "0x8b7", + "0x926", "0xc8", "0xc9", - "0x9c2", - "0x988", + "0x91f", "0xca", - "0x9bc", "0xcb", + "0x915", + "0x8d7", "0xcc", + "0x90f", "0xce", + "0x8ed", + "0x8fe", + "0x908", + "0x92b", + "0x968", + "0x95e", + "0x947", + "0x959", + "0x96d", + "0x9dd", + "0x9d1", "0xcf", + "0x9cb", + "0x9c4", "0xd0", + "0x9bd", + "0x995", + "0x9b6", "0xd1", - "0x9b5", - "0x9d8", - "0xa2d", "0xd2", "0xd3", - "0xa23", - "0x9f4", - "0xa1d", + "0x9e2", + "0x9d6", + "0xa35", "0xd5", "0xd6", + "0xa2b", + "0x9fe", "0xd7", + "0xa25", "0xd8", "0xd9", - "0xa32", - "0xa8f", "0xda", + "0xa3a", + "0xa67", + "0xa50", + "0xa62", + "0xa6c", + "0xac1", "0xdb", - "0xa85", - "0xa4e", "0xdc", - "0xa7f", + "0xab7", + "0xa88", + "0xab1", "0xde", "0xdf", "0xe0", "0xe1", - "0xa6c", - "0xa74", - "0xa94", - "0xb14", - "0xb06", "0xe2", - "0xafe", + "0xac6", + "0xb31", "0xe3", "0xe4", - "0xaf6", - "0xaba", + "0xb2a", "0xe5", "0xe6", - "0xaef", + "0xb20", + "0xae6", + "0xb1a", "0xe8", "0xe9", "0xea", "0xeb", "0xec", "0xee", + "0xb13", + "0xb36", + "0xb8b", "0xef", - "0xada", - "0xae4", - "0xb19", - "0xb0d", - "0xb0b", - "0xb76", - "0xb6a", - "0xb64", - "0xb5e", - "0xb58", - "0xb41", - "0xb53", - "0xb7b", - "0xb6f", "0xf0", + "0xb81", + "0xb52", "0xf1", + "0xb7b", "0xf2", "0xf3", - "0xbed", - "0xbd0", - "0xbc1", "0xf4", "0xf5", "0xf6", - "0xbbb", + "0xb90", + "0xbed", "0xf8", + "0xbe3", + "0xbac", "0xf9", - "0xbb4", + "0xbdd", "0xfa", "0xfb", "0xfc", "0xfd", + "0xbca", + "0xbd2", + "0xbf2", + "0xc72", + "0xc64", "0xff", - "0xbc9", + "0xc5c", "0x100", "0x101", - "0xbe2", + "0xc54", + "0xc18", "0x102", - "0xc15", + "0xc4d", "0x104", - "0xc0b", "0x105", "0x106", "0x107", @@ -629,2759 +662,3921 @@ "0x109", "0x10a", "0x10b", - "0xc57", - "0xc53", - "0xc4e", - "0xc49", - "0xc43", - "0xc3d", "0x10c", - "0xc5a", - "0xca8", - "0xc8c", + "0xc38", + "0xc42", + "0xc77", + "0xc6b", + "0xc69", "0x10d", "0x10e", - "0xc86", + "0xce0", "0x10f", "0x110", - "0xc7d", + "0xcd8", "0x111", "0x112", + "0xccd", "0x113", + "0xc9a", "0x114", + "0xcc7", "0x115", "0x116", "0x117", - "0xc9d", "0x118", - "0xcd0", + "0xcbf", "0x119", - "0xcc6", "0x11a", "0x11b", + "0xce6", + "0x11c", + "0xd43", "0xd37", + "0xd31", + "0xd2b", + "0xd25", + "0xd0e", "0xd20", - "0xd1a", - "0xd05", - "0xd01", - "0xcfd", - "0x11c", + "0xd48", + "0xd3c", + "0xda3", "0x11d", "0x11e", - "0xd1d", - "0xd15", - "0xd3a", + "0xd9c", "0x11f", - "0xd2f", + "0xd92", + "0xd68", + "0xd8c", "0x120", + "0xd85", + "0xda8", + "0xdf0", + "0xde9", + "0xddf", + "0xdc8", + "0xdda", + "0xdf5", "0x121", - "0xd87", - "0xd60", - "0xd5c", "0x122", - "0xd58", "0x123", - "0xd8a", - "0xd7e", - "0xd7a", - "0xd76", "0x124", - "0xdda", - "0xdc3", - "0xdbf", - "0xdbb", - "0xdb6", - "0xdb1", + "0xe67", + "0xe4a", + "0xe3b", "0x126", "0x127", - "0xddd", - "0xdd2", "0x128", + "0xe35", "0x129", - "0xe51", - "0xdf1", "0x12a", + "0xe2e", "0x12b", "0x12d", - "0xe3e", - "0xe1c", - "0xe14", - "0xe0c", - "0xe2a", - "0xe45", - "0xe35", "0x12e", - "0xe48", "0x12f", "0x130", - "0xe8a", + "0xe43", "0x131", "0x132", - "0xe80", + "0xe5c", "0x133", - "0xe71", - "0xe79", + "0xe8f", "0x134", "0x135", - "0xf19", - "0xecf", - "0xec6", - "0xec0", - "0xeb9", + "0xe85", "0x136", "0x137", "0x138", "0x139", - "0xf06", "0x13b", - "0xf0d", - "0xefe", "0x13c", + "0xed1", + "0xecd", + "0xec8", + "0xec3", + "0xebd", + "0xeb7", "0x13d", + "0xed4", + "0xf22", + "0xf06", "0x13e", "0x13f", - "0xef8", + "0xf00", "0x140", "0x141", - "0xef1", + "0xef7", "0x142", "0x143", - "0xf41", "0x144", "0x145", - "0xf37", "0x147", "0x148", - "0xfa3", + "0xf17", "0x149", - "0xf69", - "0xf63", + "0xf4a", "0x14a", + "0xf40", "0x14b", "0x14c", - "0x14d", + "0xfb1", "0xf9a", - "0xf96", - "0xf92", - "0xf8d", - "0xf88", + "0xf94", + "0xf7f", + "0xf7b", + "0xf77", + "0x14d", "0x14e", "0x14f", - "0xfa6", - "0x100d", - "0xfd6", - "0xfd0", - "0xfc9", + "0xf97", + "0xf8f", + "0xfb4", "0x150", + "0xfa9", "0x151", "0x152", + "0x1001", + "0xfda", + "0xfd6", "0x153", + "0xfd2", "0x154", - "0xff5", + "0x1004", + "0xff8", + "0xff4", + "0xff0", "0x155", - "0x1002", + "0x1054", + "0x103d", + "0x1039", + "0x1035", + "0x1030", + "0x102b", "0x156", "0x157", - "0xffc", "0x158", + "0x1057", + "0x104c", "0x159", - "0xfef", "0x15a", + "0x10a5", + "0x1089", + "0x1083", + "0x107a", "0x15b", - "0x105e", - "0x1037", - "0x1031", "0x15c", "0x15d", "0x15e", "0x15f", - "0x1055", - "0x1051", - "0x104d", "0x160", - "0x1061", - "0x10d4", - "0x1087", - "0x1083", - "0x107f", "0x161", + "0x109a", "0x162", - "0x10d7", - "0x10cb", - "0x10c5", - "0x10b0", - "0x10ac", - "0x10a8", + "0x10bd", + "0x10d0", + "0x10f8", + "0x1107", + "0x111a", + "0x1129", + "0x1144", + "0x1161", + "0x1169", "0x164", "0x165", - "0x10c8", - "0x10c0", + "0x10e4", + "0x10ed", "0x166", - "0x167", - "0x1137", - "0x10fd", - "0x10f9", "0x10f5", + "0x167", "0x168", "0x169", "0x16a", - "0x113a", - "0x112e", - "0x112a", - "0x1126", - "0x1121", - "0x111c", "0x16c", - "0x1179", - "0x1175", - "0x1170", - "0x116b", - "0x1165", - "0x115f", "0x16d", "0x16e", "0x16f", - "0x117c", "0x170", - "0x11b7", - "0x11b3", - "0x11ac", - "0x11a7", "0x171", "0x172", - "0x119f", "0x173", + "0x1139", + "0x1141", "0x174", "0x175", + "0x1154", + "0x115e", + "0x11df", + "0x117f", "0x177", "0x178", - "0x11ba", - "0x11b0", "0x179", "0x17a", + "0x11cc", + "0x11aa", + "0x11a2", + "0x119a", + "0x11b8", + "0x11d3", + "0x11c3", "0x17b", - "0x120d", - "0x1207", - "0x11f7", + "0x11d6", "0x17d", + "0x1218", "0x17e", "0x17f", + "0x120e", "0x180", - "0x11f0", + "0x11ff", + "0x1207", "0x181", "0x182", - "0x11e8", + "0x1259", + "0x1230", "0x184", "0x185", "0x186", + "0x1251", + "0x1246", "0x187", "0x189", - "0x1200", "0x18a", + "0x1290", "0x18b", - "0x1213", "0x18c", - "0x1252", - "0x124e", - "0x1247", - "0x1242", + "0x1285", "0x18d", "0x18e", - "0x123a", + "0x127e", "0x190", "0x191", + "0x1320", + "0x12d6", + "0x12cd", + "0x12c7", + "0x12c0", "0x192", "0x193", - "0x1255", - "0x124b", - "0x12a7", - "0x12a3", - "0x129c", - "0x1286", - "0x1281", - "0x127c", "0x195", "0x196", + "0x130d", "0x197", + "0x1314", + "0x1305", "0x198", - "0x12a0", - "0x1296", "0x199", - "0x12aa", "0x19a", - "0x12f7", - "0x12d0", - "0x12cc", - "0x12c8", "0x19b", + "0x12ff", "0x19c", "0x19d", - "0x12fa", - "0x12ee", - "0x12ea", - "0x12e6", + "0x12f8", "0x19e", "0x19f", + "0x1348", "0x1a0", "0x1a1", + "0x133e", "0x1a2", - "0x1342", - "0x1314", "0x1a3", "0x1a4", + "0x13aa", "0x1a5", - "0x1332", - "0x132a", + "0x1370", + "0x136a", "0x1a6", "0x1a7", - "0x1339", "0x1a8", - "0x1397", - "0x1391", - "0x1382", - "0x137b", - "0x1372", "0x1a9", + "0x13a1", + "0x139d", + "0x1399", + "0x1394", + "0x138f", "0x1aa", "0x1ab", + "0x13ad", + "0x1414", + "0x13dd", + "0x13d7", + "0x13d0", "0x1ac", - "0x1388", "0x1ad", - "0x139d", - "0x13e3", - "0x13b5", "0x1ae", "0x1af", "0x1b0", + "0x13fc", "0x1b1", - "0x13d3", - "0x13cb", + "0x1409", "0x1b2", "0x1b3", - "0x13da", + "0x1403", "0x1b5", - "0x1438", - "0x1432", - "0x1423", - "0x141c", - "0x1413", + "0x13f6", "0x1b6", "0x1b7", + "0x1465", + "0x143e", + "0x1438", "0x1b8", "0x1b9", "0x1ba", - "0x1429", "0x1bb", + "0x145c", + "0x1458", + "0x1454", "0x1bc", - "0x143e", - "0x1480", - "0x147c", - "0x1477", - "0x1472", - "0x146c", - "0x1466", + "0x1468", + "0x14db", + "0x148e", + "0x148a", + "0x1486", "0x1bd", "0x1be", "0x1bf", - "0x1483", + "0x14de", + "0x14d2", + "0x14cc", + "0x14b7", + "0x14b3", + "0x14af", "0x1c0", - "0x14c5", - "0x1497", "0x1c1", + "0x14cf", + "0x14c7", "0x1c2", "0x1c3", + "0x153e", + "0x1504", + "0x1500", + "0x14fc", "0x1c4", - "0x14b5", - "0x14ad", "0x1c5", - "0x14bc", "0x1c6", + "0x1541", + "0x1535", + "0x1531", + "0x152d", + "0x1528", + "0x1523", "0x1c7", - "0x1508", - "0x1504", - "0x14ff", - "0x14fa", - "0x14f4", - "0x14ee", "0x1c8", + "0x15a3", + "0x156f", + "0x1569", + "0x1563", "0x1c9", "0x1ca", - "0x150b", "0x1cb", + "0x1cc", + "0x1cd", + "0x15a8", + "0x1598", + "0x1592", + "0x1589", + "0x1ce", + "0x1cf", + "0x1d0", + "0x15eb", + "0x15e7", + "0x15e2", + "0x15dd", + "0x15d7", + "0x15d1", + "0x1d1", + "0x1d2", + "0x1d3", + "0x15ee", + "0x1d4", + "0x1629", + "0x1625", + "0x161e", + "0x1619", + "0x1d5", + "0x1d6", + "0x1611", + "0x1d7", + "0x1d8", + "0x1d9", + "0x1db", + "0x1dc", + "0x162c", + "0x1622", + "0x1dd", + "0x1de", + "0x167f", + "0x1df", + "0x1679", + "0x1669", + "0x1e0", + "0x1e2", + "0x1e3", + "0x1662", + "0x1e4", + "0x1e5", + "0x165a", + "0x1e6", + "0x1e7", + "0x1e8", + "0x1e9", + "0x1eb", + "0x1ec", + "0x1672", + "0x1ed", + "0x1ee", + "0x1685", + "0x1ef", + "0x16c4", + "0x16c0", + "0x16b9", + "0x16b4", + "0x1f0", + "0x1f1", + "0x16ac", + "0x1f2", + "0x1f3", + "0x1f5", + "0x1f6", + "0x16c7", + "0x16bd", + "0x1f7", + "0x1719", + "0x1715", + "0x170e", + "0x16f8", + "0x16f3", + "0x16ee", + "0x1f8", + "0x1f9", + "0x1fb", + "0x1712", + "0x1708", + "0x1fc", + "0x171c", + "0x1fd", + "0x1769", + "0x1742", + "0x173e", + "0x173a", + "0x1fe", + "0x1ff", + "0x200", + "0x176c", + "0x1760", + "0x175c", + "0x1758", + "0x201", + "0x202", + "0x17ac", + "0x17a3", + "0x1794", + "0x203", + "0x178d", + "0x205", + "0x206", + "0x207", + "0x208", + "0x179a", + "0x209", + "0x20a", + "0x195a", + "0x194f", + "0x20c", + "0x20d", + "0x20e", + "0x17e1", + "0x1818", + "0x1830", + "0x1867", + "0x189d", + "0x18d6", + "0x1924", + "0x1942", + "0x17db", + "0x17d5", + "0x20f", + "0x211", + "0x212", + "0x195f", + "0x1812", + "0x180c", + "0x1805", + "0x17fe", + "0x213", + "0x214", + "0x215", + "0x1829", + "0x216", + "0x193b", + "0x1861", + "0x185b", + "0x1854", + "0x184d", "0x217", + "0x218", + "0x1894", + "0x219", + "0x21a", + "0x21b", + "0x21c", + "0x188e", + "0x21d", + "0x21e", + "0x1887", + "0x21f", + "0x220", + "0x221", + "0x222", + "0x223", + "0x18d0", + "0x18ca", + "0x18c3", + "0x18ba", + "0x224", + "0x225", + "0x191b", + "0x1901", + "0x18fb", + "0x18f5", + "0x226", + "0x1920", + "0x1914", + "0x227", + "0x228", + "0x1935", + "0x229", + "0x22a", + "0x22b", + "0x22d", + "0x19ab", + "0x197d", + "0x22e", + "0x22f", + "0x230", + "0x199b", + "0x1993", + "0x231", + "0x232", + "0x19a2", + "0x233", + "0x1a00", + "0x19fa", + "0x19eb", + "0x19e4", + "0x19db", + "0x234", + "0x235", + "0x236", + "0x237", + "0x19f1", + "0x238", + "0x1a06", + "0x1a34", + "0x239", + "0x1a2a", + "0x23a", + "0x23b", + "0x23c", + "0x23d", + "0x23e", + "0x23f", + "0x1a7a", + "0x1a4c", + "0x240", + "0x241", + "0x242", + "0x243", + "0x1a6a", + "0x1a62", + "0x244", + "0x245", + "0x1a71", + "0x246", + "0x1acf", + "0x1ac9", + "0x1aba", + "0x1ab3", + "0x1aaa", + "0x248", + "0x249", + "0x24a", + "0x24b", + "0x24c", + "0x1ac0", + "0x24e", + "0x1ad5", + "0x1b17", + "0x1b13", + "0x1b0e", + "0x1b09", + "0x1b03", + "0x1afd", + "0x24f", + "0x250", + "0x251", + "0x1b1a", + "0x1b5c", + "0x1b2e", + "0x253", + "0x254", + "0x255", + "0x256", + "0x1b4c", + "0x1b44", + "0x1b53", + "0x258", + "0x259", + "0x1b9f", + "0x1b9b", + "0x1b96", + "0x1b91", + "0x1b8b", + "0x1b85", + "0x25a", + "0x25b", + "0x25c", + "0x1ba2", + "0x25d", + "0x1c02", + "0x1bdb", + "0x1bd7", + "0x1bd3", + "0x1bce", + "0x1bc9", + "0x25e", + "0x25f", + "0x260", + "0x261", + "0x1c05", + "0x1bec", + "0x1bfa", + "0x263", + "0x264", + "0x1c67", + "0x1c19", + "0x265", + "0x266", + "0x267", + "0x1c57", + "0x1c4d", + "0x1c44", + "0x1c39", + "0x269", + "0x26a", + "0x1c5e", + "0x26b", + "0x26c", + "0x1cb9", + "0x1c92", + "0x1c8e", + "0x1c8a", + "0x26d", + "0x26e", + "0x26f", + "0x1cbc", + "0x1cb0", + "0x1cac", + "0x1ca8", + "0x270", + "0x271", "0x27e", "0x318", "0x37a", - "0x3f2", - "0x467", - "0x4c9", - "0x525", - "0x5a8", + "0x3ec", + "0x464", + "0x4dc", + "0x551", + "0x5b3", "0x60f", - "0x69a", - "0x706", - "0x770", - "0x7d4", - "0x816", - "0x88b", - "0x8e3", - "0x915", - "0x96f", - "0x9df", - "0xa39", - "0xa9b", - "0xb20", - "0xb82", - "0xb86", - "0xb8a", - "0xb8e", - "0xbf8", - "0xc1e", - "0xc5f", - "0xcb3", - "0xcd9", - "0xd3f", - "0xd8f", - "0xde2", - "0xe5b", - "0xe93", - "0xf24", - "0xf4a", - "0xfab", - "0x1018", - "0x1066", - "0x10dc", - "0x113f", - "0x1181", - "0x11bf", - "0x121c", - "0x125a", - "0x12af", - "0x12ff", - "0x1305", - "0x134c", - "0x13a6", - "0x13ed", - "0x1447", - "0x1488", - "0x14cf", - "0xb1d2", - "0x28040060300580c0160300580a00a0240180800e0180280400600800800", - "0x901101605c0581600a0540681401604c090110160400580f00a0380680a", - "0x182001607c0580a00a0540181e0160740281c00606c0581a03206005813", - "0x138180160981280804808c058220160840281501a06c0580b01602802815", - "0x90110160ac0582a00a038068290160500580c0160280280900602014008", - "0x28150060440582e0160b40281501a0b00580c0160280281500603005813", - "0x583300a0540680c016068190230160c40583000a0540682f01607c0580a", - "0x581a06408c058360160d40281501a0d00581f016028028150060440582c", - "0x18110160e40583800a054068170160500580a00a0540181401606819037", - "0x58130240f40581a06408c0583c0160ec0281501a0e80581f01602802815", - "0x584100a0540684001607c0580a00a054018110160fc0583e00a0540683d", - "0x240470180600584408611806018016110218450180600584408608c05842", - "0x280e01a1340584c01612c0280e0060a40583d0161280280e01a02024808", - "0x68510160500585000a038018110160f40584f00a038068110161340584e", - "0x280e0060300580c0160300580c01602802854006044058530161480280e", - "0x585900a070018170160680c8110161600585700a0380685601603005855", - "0x580a00a038018110161780585d00a0380685c0160300585b00a0380185a", - "0x58140160300583d0160280285400608c058610161800281501a17c0581f", - "0x586600a038018110161940586400a038068630160300586200a03801829", - "0x280e01a0440586a0161a40280e01a1a00582901619c0280e00605005829", - "0x68110160500586e00a038068110161b40586c00a038068680160f40586b", - "0x583d0161cc0280e01a044058720161c40280e01a1c00583d0161bc0280e", - "0x682e0160680c8110161dc0587600a038068140161d40587400a0380680c", - "0x2815006044058790161e80281501a1e40581a0320b8058390161e002815", - "0x180c0160300580a00a038018230161f40587c00a0540687b01607c0580a", - "0x588100a038068800161fc0587e00a038068140160500581401602802809", - "0xc82c0160fc0588500a0540688401620c0281c0060b00581a03204405882", - "0x281501a2200581f016028028150060440588601621c0281501a2180581a", - "0x281501a2340588c00a0700188b0160680c83701604c0902301622805889", - "0x68230162440589000a0540688f01607c0580a00a0540181101622c0588e", - "0x58750162540280e01a0440589401624c0280e01a044058680162480280e", - "0x589800a038068110160dc0589700a038068110160300589600a03806811", - "0x28150060440583a0162680281501a0e80581a0320e40581a03204405899", - "0x18110161fc0589e00a038068230162740589c00a0540689b01607c0580a", - "0x281c0060fc0581a03208c058a001627c0281501a0440581b01602802815", - "0x581f016028028150060440584001628c0281501a1000581a032288058a1", - "0x538050180600584408607c0580a00a07001823016298058a500a054068a4", - "0x190180160685580b0180600584408608c058aa0162a40281501a00854008", - "0x58b303002c058b203e02c058b100a2c0028af00a2b8568021580600581a", - "0x58b503002c058b800a2dc0c00b0162d80c00b0162d40c00b0162d00c00b", - "0x58b517802c058b500a02c058b500a0301b80b0182ec028ba00a2e40f00b", - "0x880b016308028c118002c058bf17c02c058b803c02c058b800a2f41b80b", - "0x6280b0182ec1b0100163101b80b0162e06180b0162e00580c06e02c060bb", - "0xc00b016328028c919002c058b500a31c6280b0162d46300b0162d40580c", - "0x58d019e02c058bf00a3380600b0162d01b80b016334028cc06e02c058cb", - "0x58c203602c058b803602c058cb00a3440880b0162e00d80b0162d40c00b", - "0x58c417802c058b400a02c058b400a0306280b0182ec5500b0163080f80b", - "0x6a80b0163346a0100163100f80b0162d4698100163100f80b0162e069010", - "0x58b608002c058d608002c058cb08002c058b814802c058cd14c02c058b1", - "0x58cd072040058c41b202c058b51b202c058c200a3601e80b01635c5100b", - "0x58b500a0306d80b0182ec6d80b0163341d0100163105000b0162c46d00b", - "0x58b40fe02c058b11b602c058cb1b602c058b80160306d80b0182ec6d80b", - "0x1d00b0162e04d80b0163344e80b0162c46e00b0163341e0100163100a00b", - "0x58c202802c058d70b402c058b607202c058dd07402c058d607402c058cb", - "0x4c80b0162e07000b0163346f8100163106f0100163102e00b0162d42e00b", - "0x280c1c202c060bb1c202c058cd07e040058c413202c058cd13202c058cb", - "0x3a80b0163347080b01632c7080b0162e00580c1c202c060bb1c202c058b5", - "0x4a00b01632c4a00b0162e07180b01633420010016310028e207a02c058b4", - "0x28e405202c058b402802c058b80d002c058b10d002c058b612802c058cd", - "0x58b11ca02c058cd084040058c411602c058b506e02c058ca05202c058b8", - "0x1b80b01635c4680b0162d84580b01632c4580b0162e04780b0163344880b", - "0x58cb0ea02c058b801802c058b81ce040058c41cc02c058b51cc02c058c2", - "0x4300b0162e04400b0163344500b0162c47480b016334740100163103a80b", - "0x58c201802c058d710802c058b61b402c058b410c02c058d610c02c058cb", - "0x4100b0162e07680b01633476010016310758100163107500b0162d47500b", - "0x58b11dc02c058cd098040058c410002c058b110402c058cd10402c058cb", - "0x1700b0163743c80b0163583c80b01632c3c80b0162e03d80b0163343e80b", - "0x58c40ee02c058cd0ee02c058cb0ee02c058b81de02c058cd07a040058c4", - "0x3800b0163343900b0163343900b01632c3900b0162e07800b01633426810", - "0x28f30da02c058cd0da02c058cb0da02c058b81e402c058cd1e2040058c4", - "0x7a8100163103400b0162d43400b0162e03400b01632c3400b016308028f4", - "0x58c40d402c058b10d402c058b60d402c058cb0d402c058b81ec02c058cd", - "0x3280b0162c43280b0162d83280b01632c3280b0162e07b80b01633428810", - "0x58cd0c202c058b11f002c058cd0a6040058c40c602c058b10c602c058b8", - "0x2e00b0162e02f00b0162c42f00b0162d82f00b01632c2f00b0162e02f80b", - "0x58b81f402c058cd1f2040058c40b802c058b10b802c058b40b802c058b6", - "0x2b00b0162c42b00b0162e02c00b0162c42c00b0162d82c00b01632c2c00b", - "0x58b10a602c058b60a602c058cb0a602c058b81f202c058cd0ac040058c4", - "0x58b81ea02c058cd0b0040058c400a3ec2880b0163342880b0162e02980b", - "0x7880b0162d47880b0162e07880b01632c7880b0163082680b0162e02600b", - "0x7600b0162fc2680b016334028fc09802c058b41e202c058b11e202c058b6", - "0x58c407e02c058b507a02c058ca1d002c058bf1d602c058bf1f4040058c4", - "0x60bb00a0302000b0182ec2000b0163342100b0162c47380b0163342d010", - "0x880b0162d06a80b0162d40280c1aa02c060bb14c02c058c200a0305200b", - "0x6c80b0162c40580c08002c060bb0160305200b0182ec0580c1aa02c060bb", - "0x280c1b402c060bb14002c058c214402c058b807a02c058b307a02c058b2", - "0x2e0100163103f80b0163080580c1b402c060bb1b202c058b81b402c058b5", - "0x4d80b0182ec0280c07402c060bb07402c058cd07802c058b11bc02c058cd", - "0x580c13602c060bb1b802c058b500a0306e00b0182ec4e80b0163080280c", - "0x58b802802c058b302802c058b20160301d00b0182ec0580c1b802c060bb", - "0xf00b0162d07000b0162d40280c1c002c060bb00a0304c80b0182ec2d00b", - "0x60bb00a0303a80b0182ec028fd0160307000b0182ec0580c13202c060bb", - "0x60bb1c602c058b500a0307180b0182ec0280c12802c060bb0160303a80b", - "0x60bb12202c058c200a0304780b0182ec0580c1c602c060bb0160304a00b", - "0x7280b0182ec0580c11e02c060bb06e02c058d01ca02c058b500a0307280b", - "0x7300b0162e04680b0162e01b80b0162cc1b80b0162c87300b0162c40580c", - "0x280c1d202c060bb11402c058c200a0304400b0182ec0280c10c02c060bb", - "0x2f0100163101600b0162d40600b0163280580c1d202c060bb1d202c058b5", - "0x4400b0182ec0580c10c02c060bb06802c058cd06c02c058b11a402c058cd", - "0x7500b0162e04200b0162e00600b0162cc0600b0162c87500b0162c40580c", - "0x60bb1da02c058b500a0307680b0182ec0280c10402c060bb03c02c058b6", - "0x60bb00a0303c80b0182ec0580c10402c060bb10002c058c20160307680b", - "0x7700b0182ec7700b0162d40280c1dc02c060bb0fa02c058c200a0303d80b", - "0x3c80b0182ec1780b0163341880b0162c47f00b0163342f8100163100580c", - "0x58b500a0307780b0182ec0280c0ee02c060bb0160303d80b0182ec0580c", - "0x60bb00a0303900b0182ec0580c0ee02c060bb0160307780b0182ec7780b", - "0x60bb0160303900b0182ec0280c0e002c060bb1e002c058b500a0307800b", - "0x280c1e402c060bb00a0303680b0182ec0580c1e002c060bb0160303800b", - "0x60bb0d402c058c20160307900b0182ec0580c0da02c060bb1e402c058b5", - "0x7f80b016334308100163100580c1ec02c060bb1ec02c058b500a0307b00b", - "0x7b80b0162d40280c1ee02c060bb0ca02c058c20c602c058c205602c058b1", - "0x58ca03002c0590200a4040c00b0164000580c1ee02c060bb07a02c058b8", - "0x1000b0163341100b0162c48180b0163347c0100163100b80b0162d40a00b", - "0x3080b0163080280c0be02c060bb0bc02c058c202e02c058b802e02c058cb", - "0x580c0be02c060bb0160307c00b0182ec7c00b0162d40280c1f002c060bb", - "0x58c20ac02c058c202002c058b120a02c058cd0c6040058c420802c058b8", - "0x2880b0182ec0580c1f402c060bb1f402c058b500a0307d00b0182ec2c00b", - "0x580c0a202c060bb1f202c058b500a0307c80b0182ec2980b0163080280c", - "0x7a80b0162d40280c1ea02c060bb00a0302680b0182ec0580c1f202c060bb", - "0x58b504602c058c201602c058c20160307a80b0182ec0580c09a02c060bb", - "0x58b807a02c058d01ce02c058b500a0307380b0182ec2100b0163081180b", - "0x280c1bc02c060bb07802c058c207202c058c20160307380b0182ec1f80b", - "0x60bb06c02c058c200a0301a00b0182ec0580c1bc02c060bb1bc02c058b5", - "0x580c06802c060bb05802c058b801802c058d01a402c058b500a0306900b", - "0x60bb06202c058c200a0301780b0182ec1700b0163080580c1a402c060bb", - "0x58c20160301780b0182ec0580c1fc02c060bb1fc02c058b500a0307f00b", - "0x1000b0182ec0580c1fe02c060bb1fe02c058b500a0307f80b0182ec1580b", - "0x60bb02802c058d020602c058b500a0308180b0182ec1100b0163080280c", - "0x58b500a0308280b0182ec0800b0163080580c20602c060bb0160301000b", - "0x8380c0160140600b00a0148380b00a014029060160308280b0182ec8280b", - "0x281b01641c058100160400280520e02c0280c00a0800b80c2104140880c", - "0x581f0164140280520e02c0280c00a088058c603e0780610701806c05811", - "0x581b00a40c0590701640c0582000a40c0590701608c0581700a08c05907", - "0x29070160140600520802c7400520e0300c00b03c0140c10301841c05903", - "0x61070180780581100a078059070160780582200a0148380b20602c0f805", - "0x581700a3fc059070160a40590500a0148380b00a0300282b01637814814", - "0x1700c20e0301601101808c0282c01641c0582c0160800282c01641c058ff", - "0x1780b0300147f00b20e02c8280b206014029070160140600506202c6902f", - "0x1480506c02c8380b1fc02c0a00506802c8380b05c02c8200521202c8380b", - "0x600500a168058050560146980b20e02c0a00b0440146900b20e02c8480b", - "0x590400a350059070164140590300a0148380b02802c7f80500a41c05805", - "0x280c00a0145e00b00a0ac0283a01641c058d40160500283901641c05831", - "0x880b2080141e00b20e02c8280b206014029070160ac058ff00a0148380b", - "0x5805018014028bc0160141580507402c8380b07802c0a00507202c8380b", - "0x58de206030178051bc02c8380b00a0b80280520e02c8200b05801402907", - "0x283f0164280290701837c0581e00a37c0590701637c0582000a37c05907", - "0x7f00508402c8380b00a0c40284001641c0590501640c0280520e02c0280c", - "0x1b00b20e02c2000b0280141a00b20e02c0880b2080147380b20e02c2100b", - "0x8380c1a602c088051a602c8380b03c02c110051a402c8380b1ce02c14805", - "0x590900a0148380b1d002c7f80500a41c058050180147600b0da3ac7400c", - "0x2600b1a40142600b20e02c0283600a0148380b1a402c1a00500a41c058eb", - "0x6980506c02c8380b06c02c0a00506802c8380b06802c8200507a02c8380b", - "0x600507a0301b03402202c1e80b20e02c1e80b1a80140600b20e02c0600b", - "0x2680b0740142680b20e02c0283900a0148380b1d802c7f80500a41c05805", - "0x280c00a14c2880c1b83d47880c20e030268360680401e00509a02c8380b", - "0x583400a1602b00c20e02c6900b1be0147c80b20e02c028de00a0148380b", - "0x285a0162207d00b20e0302c00b080014029070160141f80500a41c05856", - "0x285e01641c058fa0161080285c01641c058f501640c0280520e02c0280c", - "0x3080b20e02c3080b0400143080b20e02c028e800a17c05907016178058e7", - "0x2e00b0280143180b20e02c2f8f80183ac028f801641c058611f203075805", - "0x5805018014028e5016014158051ee02c8380b0c602c760050ca02c8380b", - "0x8380b00a0b80286801641c058f501640c0280520e02c2d00b09801402907", - "0x581400a3d8059070161a87c80c1d60143500b20e02c3500b0400143500b", - "0x584d00a0148380b00a0f4028f701641c058f60163b00286501641c05868", - "0x287001641c058f20163d40280520e02c3680b1e20147906d01841c058f7", - "0x59070163c40590400a3c0059070161c80585300a1c8059070161c005851", - "0x58f00163500280c01641c0580c01634c0286501641c05865016050028f1", - "0x29070163480583400a0148380b00a030028f0018194788110163c005907", - "0x8380b0ea02c0a0050ee02c8380b0a202c820050ea02c8380b0a602c81805", - "0x280520e02c1f80b058014029070160140600500a42c058050560147780b", - "0x3c80b20e02c0880b2080148600b20e02c8280b20601402907016078058ff", - "0x7f80500a41c058050180140290e0160141580521a02c8380b21802c0a005", - "0x283901641c058110164100287b01641c0590501640c0280520e02c1100b", - "0x59070160e80585600a1e4059070160e4058f900a0e8059070161ec05814", - "0x8380b0f202c820051dc02c8380b0fa02c690050fa02c8380b00a1600290d", - "0x7700b1a80140600b20e02c0600b1a60148680b20e02c8680b0280143c80b", - "0x8380b02002c7d00500a41c058050180147700c21a1e40880b1dc02c8380b", - "0x58800160500287701641c058170164100288001641c0582001640c02805", - "0x3b80b2080144100b20e02c3f80b1a40143f80b20e02c0285a00a3bc05907", - "0x6a00501802c8380b01802c698051de02c8380b1de02c0a0050ee02c8380b", - "0x280c01601402907016014028051040307787702202c4100b20e02c4100b", - "0x8380b02202c8200500a41c058050180141001701843c8281101841c0600b", - "0x88100bc0140800b20e02c0800b0b80148280b20e02c8280b0280140880b", - "0x280c00a08c0591004402c8380c03e02c2f80503e0780d81020e02c08105", - "0x591120802c8380c03002c7c00503040c061070160880586100a0148380b", - "0x61070180a40581100a0a40590701640c0581000a0148380b00a03002814", - "0x7f80b212014029070160ac058ff00a0148380b00a0300282c0164487f82b", - "0x582e0163480282e01641c0580506c014029070164100586300a0148380b", - "0x58d300a078059070160780581400a06c0590701606c0590400a0bc05907", - "0x280c00a0bc0601e0360440582f01641c0582f0163500280c01641c0580c", - "0x58310160e80283101641c05805072014029070160b0058ff00a0148380b", - "0x58050180141b03401844c848fe01841c0603103c06c0803c00a0c405907", - "0x6980b0c60146a0d301841c05904016194028d201641c058051bc01402907", - "0x3400500a41c058050180141d00b2280e405907018350058f700a0148380b", - "0x5907016378058f600a378059070160f00586a00a0f01c80c20e02c1c80b", - "0x583f1a40307580507e02c8380b07e02c1000507e02c8380b00a3a0028df", - "0x3680508402c8380b1be100060eb00a37c0590701637c0582000a10005907", - "0x8480b20e02c8480b0280147f00b20e02c7f00b2080147380b20e02c1c80b", - "0x739091fc0443800508402c8380b08402c760051ce02c8380b1ce02c79005", - "0x58050180141e80b22a130059070183b00587200a3b0758e802041c05842", - "0x584c00a3d47880c20e02c2600b1e00142680b20e02c7580b20601402907", - "0x760050a602c8380b09a02c0a0050a202c8380b1d002c8200500a41c058f5", - "0x1e80b1a4014029070160140600500a458058050560147c80b20e02c7880b", - "0x698051d602c8380b1d602c0a0051d002c8380b1d002c820050ac02c8380b", - "0x60050ac030758e802202c2b00b20e02c2b00b1a80140600b20e02c0600b", - "0x282e00a160059070164240590300a0148380b07402c2600500a41c05805", - "0x285a01641c058fa1a4030758051f402c8380b1f402c100051f402c8380b", - "0x5907016168058ec00a14c059070161600581400a144059070163f805904", - "0x585e0163d40280520e02c2e00b1e20142f05c01841c058f9016134028f9", - "0x590400a3e0059070161840585300a1840590701617c0585100a17c05907", - "0x280c01641c0580c01634c0285301641c058530160500285101641c05851", - "0x586300a0148380b00a030028f801814c288110163e0059070163e0058d4", - "0xa0050ca02c8380b06802c820050c602c8380b06c02c8180500a41c05904", - "0xa00b098014029070160140600500a45c058050560147b80b20e02c3180b", - "0x58680163480286801641c058050b00140290701640c058fa00a0148380b", - "0x58d300a078059070160780581400a06c0590701606c0590400a1a805907", - "0x280c00a1a80601e0360440586a01641c0586a0163500280c01641c0580c", - "0x581400a06c0590701606c0590400a3d80590701608c058d200a0148380b", - "0x58f601641c058f60163500280c01641c0580c01634c0281e01641c0581e", - "0x1000b20601402907016040058fa00a0148380b00a030028f60180780d811", - "0x2d0051ee02c8380b0da02c0a0050ca02c8380b02e02c820050da02c8380b", - "0x286501641c058650164100287001641c058f2016348028f201641c05805", - "0x59070161c0058d400a03005907016030058d300a3dc059070163dc05814", - "0x880c20e0300580501802c0280520e02c0280500a1c0060f70ca04405870", - "0x581100a06c059070160400581000a0148380b00a0300282002e0308c105", - "0x590701607c0590500a0148380b00a030028220164640f81e01841c0601b", - "0x590301606c0290301641c059030160800290301641c0582301605c02823", - "0xf80500a41c058050180148200b2340148380c03002c0f00503040c06107", - "0x281101641c058110164100281401641c0581e0163d40280520e02c8180b", - "0x7f80b0ee0147f82b0520408380b0280440607500a050059070160500585c", - "0x282f01641c0590501640c0280520e02c0280c00a0b80591b05802c8380c", - "0x59070160a40590400a3f8059070160ac0581000a0c4059070160b0058ef", - "0x58fe0160880283601641c058310164300283401641c0582f01605002909", - "0x29070160b80584c00a0148380b00a0300280523802c0282b00a34805907", - "0x59070160a40590400a34c059070164140590300a0148380b05602c7d005", - "0x280520e02c0280c00a0148e80b00a0ac0283901641c058d3016050028d4", - "0x1e00b20e02c1d1030180bc0283a01641c0580505c014029070164100582c", - "0x58050180146f00b23c0148380c07802c0f00507802c8380b07802c10005", - "0x583f0161e40283f01641c058050620146f80b20e02c8280b20601402907", - "0x590c00a0d00590701637c0581400a424059070160440590400a10005907", - "0x7384201841c060d2016044028d201641c0581e0160880283601641c05840", - "0x8380b1ce02c8480500a41c058420163fc0280520e02c0280c00a3a00591f", - "0x59070163ac058d200a3ac059070160141b00500a41c0583601643402805", - "0x580c01634c0283401641c058340160500290901641c05909016410028ec", - "0x8380b00a030028ec0180d0848110163b0059070163b0058d400a03005907", - "0x59070161300583a00a130059070160141c80500a41c058e80163fc02805", - "0x2907016014060051ea3c40612009a0f4061070181301a1090200f00284c", - "0x8380b0a602c868051f214c061070160d80587b00a144059070160146f005", - "0x58050180142c00b242158059070183e40587700a0148380b00a0fc02805", - "0x770050bc1702d01020e02c2b00b0fa0147d00b20e02c2680b20601402907", - "0x7c00b20e02c2e00b1dc0143080b20e02c2f80b1ec0142f80b20e02c2d00b", - "0x8380b0ca02c7b0050ca02c8380b0bc02c770050c602c8380b1f002c7b005", - "0x340510183ac0286801641c058680160800286801641c058051d00147b80b", - "0x3680b20e02c318f60183ac028f601641c058610d4030758050d402c8380b", - "0x58f20163b00287001641c058fa016050028f201641c058f70da03075805", - "0x29070161600584c00a0148380b00a0300280524402c0282b00a1c805907", - "0x59070161d40582000a1d405907016014170051e002c8380b09a02c81805", - "0x3b80b1d80143800b20e02c7800b0280143b80b20e02c3a8510183ac02875", - "0x58f100a4307780c20e02c3900b09a014029070160141e8050e402c8380b", - "0x2980521a02c8380b0f202c288050f202c8380b21802c7a80500a41c058ef", - "0x3800b20e02c3800b0280141e80b20e02c1e80b2080143d80b20e02c8680b", - "0x3d80c0e00f40880b0f602c8380b0f602c6a00501802c8380b01802c69805", - "0x287d01641c058f501640c0280520e02c1b00b21a0140290701601406005", - "0x280524602c0282b00a200059070161f40581400a3b8059070163c405904", - "0x590300a0148380b03c02c7f80500a41c058de0160b00280520e02c0280c", - "0x283901641c0587f016050028d401641c058110164100287f01641c05905", - "0x8280b20601402907016088058ff00a0148380b00a0300280523a02c0282b", - "0x2c00507202c8380b10402c0a0051a802c8380b02202c8200510402c8380b", - "0x28d401641c058d40164100288401641c058ed016348028ed01641c05805", - "0x5907016210058d400a03005907016030058d300a0e4059070160e405814", - "0x8180500a41c058100163e80280520e02c0280c00a210060391a804405884", - "0x4000b20e02c7500b0280147700b20e02c0b80b2080147500b20e02c1000b", - "0x59070163b80590400a49005907016218058d200a218059070160142d005", - "0x59240163500280c01641c0580c01634c0288001641c05880016050028ee", - "0x8380c0160140600b00a0148380b00a014029240182007701101649005907", - "0x281101641c058110164100280520e02c0280c00a0800b80c24a4140880c", - "0x581020a0440808000a040059070160400585c00a4140590701641405814", - "0x29070160140600504602c9302201641c0601f0161fc0281f03c06c08107", - "0x600502802c9390401641c060180163b4028182060308380b04402c41005", - "0x940ff0560308380c05202c0880505202c8380b20602c0800500a41c05805", - "0x29070163fc0590900a0148380b05602c7f80500a41c058050180141600b", - "0x1780b20e02c1700b1a40141700b20e02c0283600a0148380b20802c42005", - "0x8380b01802c6980503c02c8380b03c02c0a00503602c8380b03602c82005", - "0x29070160140600505e0300f01b02202c1780b20e02c1780b1a80140600b", - "0x1880b20e02c1880b0740141880b20e02c0283900a0148380b05802c7f805", - "0x280520e02c0280c00a0d81a00c2524247f00c20e0301881e0360401e005", - "0x290701634c0588400a3506980c20e02c8200b1d40146900b20e02c028de", - "0x58390164900280520e02c0280c00a0e80592a07202c8380c1a802c43005", - "0x4400507e02c8380b1be02c7b0051be02c8380b07802c770051bc0f006107", - "0x5907016108058f600a108059070161000588a00a1006f00c20e02c6f00b", - "0x58e81a4030758051d002c8380b1d002c100051d002c8380b00a3a0028e7", - "0x758051ce02c8380b1ce02c100051d802c8380b07e3ac060eb00a3ac05907", - "0x59070163f80590400a0f405907016378058e900a1300590701639c7600c", - "0x584c0163b00283d01641c0583d01622c0290901641c05909016050028fe", - "0x8380c1ea02c390051ea3c42681020e02c2603d2123f80888d00a13005907", - "0x58f000a3e4059070163c40590300a0148380b00a030028530164ac2880b", - "0x28fa01641c0584d0164100280520e02c2c00b0980142c05601841c05851", - "0x280525802c0282b00a17005907016158058ec00a168059070163e405814", - "0x284d01641c0584d0164100285e01641c058530163480280520e02c0280c", - "0x5907016178058d400a03005907016030058d300a3c4059070163c405814", - "0x8180500a41c0583a0161300280520e02c0280c00a178060f109a0440585e", - "0x286101641c058610160800286101641c0580505c0142f80b20e02c8480b", - "0x8380b0be02c0a0051f402c8380b1fc02c820051f002c8380b0c2348060eb", - "0x58f100a1943180c20e02c2e00b09a0142e00b20e02c7c00b1d80142d00b", - "0x298050d002c8380b1ee02c288051ee02c8380b0ca02c7a80500a41c05863", - "0x2d00b20e02c2d00b0280147d00b20e02c7d00b2080143500b20e02c3400b", - "0x3500c0b43e80880b0d402c8380b0d402c6a00501802c8380b01802c69805", - "0x28f601641c0583601640c0280520e02c8200b1080140290701601406005", - "0x280525a02c0282b00a3c8059070163d80581400a1b4059070160d005904", - "0x285800a0148380b20602c7d00500a41c058140161300280520e02c0280c", - "0xa00503602c8380b03602c820050e402c8380b0e002c690050e002c8380b", - "0x3900b20e02c3900b1a80140600b20e02c0600b1a60140f00b20e02c0f00b", - "0x820051e002c8380b04602c6900500a41c058050180143900c03c06c0880b", - "0x600b20e02c0600b1a60140f00b20e02c0f00b0280140d80b20e02c0d80b", - "0x7d00500a41c058050180147800c03c06c0880b1e002c8380b1e002c6a005", - "0x286d01641c058170164100287501641c0582001640c0280520e02c0800b", - "0x7780b20e02c3b80b1a40143b80b20e02c0285a00a3c8059070161d405814", - "0x8380b01802c698051e402c8380b1e402c0a0050da02c8380b0da02c82005", - "0x2907016014028051de0307906d02202c7780b20e02c7780b1a80140600b", - "0x8200500a41c05805018014100170184b88281101841c0600b00a03005805", - "0x81070160400880c1cc0140800b20e02c0800b0b80140880b20e02c0880b", - "0x800500a41c058050180141180b25e0880590701807c0588f00a07c0f01b", - "0x58050180140a00b2604100c00c20e0308180b0220148180b20e02c0f00b", - "0x8380b04402c4880500a41c059040164240280520e02c0c00b1fe01402907", - "0x8380b03602c8200505602c8380b05202c6900505202c8380b00a0d802805", - "0x1580b1a80140600b20e02c0600b1a60148280b20e02c8280b0280140d80b", - "0x8380b02802c7f80500a41c058050180141580c20a06c0880b05602c8380b", - "0x7f9050360401e0051fe02c8380b1fe02c1d0051fe02c8380b00a0e402805", - "0x7f00b20e02c028de00a0148380b00a0300283105e0309882e0580308380c", - "0x29070160141f80500a41c05909016244028342120308380b04402c72805", - "0x8380b00a3a00280520e02c0280c00a3480593206c02c8380c06802c4a005", - "0x584000a3500590701634c7f00c1d60146980b20e02c6980b0400146980b", - "0x1e00b20e02c1700b206014029070160140600507402c9983901641c06036", - "0x5907016014740051be02c8380b1bc02c738051bc02c8380b07202c21005", - "0x2000c1d60142000b20e02c1f8d40183ac0283f01641c0583f0160800283f", - "0x28e801641c058420163b0028e701641c0583c0160500284201641c058df", - "0x1700b206014029070160e80584c00a0148380b00a0300280526802c0282b", - "0x1580509802c8380b1a802c760051d802c8380b1d602c0a0051d602c8380b", - "0x582e01640c0280520e02c6900b098014029070160140600500a4d405805", - "0x282e00a130059070163f8058ec00a3b0059070160f40581400a0f405907", - "0x28f101641c0584d0980307580509a02c8380b09a02c1000509a02c8380b", - "0x280520e02c0283d00a3a0059070163c4058ec00a39c059070163b005814", - "0x5907016144058f500a0148380b1ea02c788050a23d4061070163a00584d", - "0x582c0164100285601641c058f901614c028f901641c0585301614402853", - "0x58d400a03005907016030058d300a39c0590701639c0581400a0b005907", - "0x58220162440280520e02c0280c00a158060e70580440585601641c05856", - "0x2c00b0280147d00b20e02c1780b2080142c00b20e02c1880b20601402907", - "0x8380b04602c2600500a41c0580501801402936016014158050b402c8380b", - "0x5907016170058d200a170059070160142c00500a41c0581e0163e802805", - "0x580c01634c0290501641c059050160500281b01641c0581b0164100285e", - "0x8380b00a0300285e0184140d81101617805907016178058d400a03005907", - "0x8380b02e02c820050be02c8380b04002c8180500a41c058100163e802805", - "0x58610163480286101641c058050b40142d00b20e02c2f80b0280147d00b", - "0x58d300a168059070161680581400a3e8059070163e80590400a3e005907", - "0x280500a3e00605a1f4044058f801641c058f80163500280c01641c0580c", - "0x8380b00a0300282002e0309b9050220308380c0160140600b00a0148380b", - "0x28220164e00f81e01841c0601b0160440281b01641c0581001604002805", - "0x290301641c0582301605c0282301641c0581f0164140280520e02c0280c", - "0x8380c03002c0f00503040c0610701640c0581b00a40c0590701640c05820", - "0x581e0163d40280520e02c8180b03e014029070160140600520802c9c805", - "0x60e300a050059070160500585c00a044059070160440590400a05005907", - "0x280c00a0b80593a05802c8380c1fe02c708051fe0ac1481020e02c0a011", - "0x581000a0c4059070160b00583700a0bc059070164140590300a0148380b", - "0x283401641c0582f0160500290901641c05829016410028fe01641c0582b", - "0x280527602c0282b00a348059070163f80582200a0d8059070160c405899", - "0x590300a0148380b05602c7d00500a41c0582e0161300280520e02c0280c", - "0x283901641c058d3016050028d401641c05829016410028d301641c05905", - "0x580505c014029070164100582c00a0148380b00a0300280527802c0282b", - "0xf00507802c8380b07802c1000507802c8380b07440c0602f00a0e805907", - "0x6f80b20e02c8280b20601402907016014060051bc02c9e80520e0301e00b", - "0x59070160440590400a100059070160fc058e000a0fc0590701601418805", - "0x581e0160880283601641c058400162640283401641c058df01605002909", - "0x280520e02c0280c00a3a00593e1ce108061070183480581100a34805907", - "0x1b00500a41c058360164fc0280520e02c7380b21201402907016108058ff", - "0x290901641c05909016410028ec01641c058eb016348028eb01641c05805", - "0x59070163b0058d400a03005907016030058d300a0d0059070160d005814", - "0x1c80500a41c058e80163fc0280520e02c0280c00a3b006034212044058ec", - "0x61070181301a1090200f00284c01641c0584c0160e80284c01641c05805", - "0x594100a144059070160146f00500a41c058050180147a8f10185002683d", - "0x58e100a0148380b00a0fc0280520e02c2980b27e0147c85301841c05836", - "0x28fa01641c058051d001402907016014060050b002ca105601641c060f9", - "0x8380c0ac02c4d8050b402c8380b1f4144060eb00a3e8059070163e805820", - "0x589d00a17c059070161340590300a0148380b00a0300285e01650c2e00b", - "0x100050c602c8380b00a3a0028f801641c058610163700286101641c0585c", - "0x8380b1f0194060eb00a1940590701618c2d00c1d60143180b20e02c3180b", - "0x58050560143500b20e02c7b80b1d80143400b20e02c2f80b0280147b80b", - "0x8380b0bc02c210051ec02c8380b09a02c8180500a41c0580501801402944", - "0x58700160800287001641c0580505c0147900b20e02c3680b1ce0143680b", - "0x28f001641c058f20e4030758050e402c8380b0e0168060eb00a1c005907", - "0x280528802c0282b00a1a8059070163c0058ec00a1a0059070163d805814", - "0x170050ea02c8380b09a02c8180500a41c058580161300280520e02c0280c", - "0x7780b20e02c3b8510183ac0287701641c058770160800287701641c05805", - "0x29070160141e8050d402c8380b1de02c760050d002c8380b0ea02c0a005", - "0x8380b0f202c7a80500a41c0590c0163c4028792180308380b0d402c26805", - "0x1e80b2080143e80b20e02c3d80b0a60143d80b20e02c8680b0a20148680b", - "0x6a00501802c8380b01802c698050d002c8380b0d002c0a00507a02c8380b", - "0x1b00b27e01402907016014060050fa0303403d02202c3e80b20e02c3e80b", - "0x581400a200059070163c40590400a3b8059070163d40590300a0148380b", - "0x58de0160b00280520e02c0280c00a014a280b00a0ac0287f01641c058ee", - "0x58110164100288201641c0590501640c0280520e02c0f00b1fe01402907", - "0x8380b00a0300280527802c0282b00a0e4059070162080581400a35005907", - "0x8380b02202c820051da02c8380b20a02c8180500a41c058220163fc02805", - "0x58840163480288401641c058050b00141c80b20e02c7680b0280146a00b", - "0x58d300a0e4059070160e40581400a350059070163500590400a3a805907", - "0x280c00a3a8060391a8044058ea01641c058ea0163500280c01641c0580c", - "0xb80b2080144300b20e02c1000b20601402907016040058fa00a0148380b", - "0x58d200a490059070160142d0050fe02c8380b10c02c0a00510002c8380b", - "0x287f01641c0587f0160500288001641c058800164100288801641c05924", - "0x28880181fc4001101622005907016220058d400a03005907016030058d3", - "0x280c00a0800b80c28c4140880c20e0300580501802c0280520e02c02805", - "0x60db00a040059070160400585c00a044059070160440590400a0148380b", - "0x280c00a08c0594704402c8380c03e02c5000503e0780d81020e02c08011", - "0x59482080600610701840c0581100a40c059070160780581000a0148380b", - "0x280520e02c8200b21201402907016060058ff00a0148380b00a03002814", - "0x282b01641c058290163480282901641c0580506c01402907016088058da", - "0x5907016030058d300a414059070164140581400a06c0590701606c05904", - "0x280520e02c0280c00a0ac061050360440582b01641c0582b0163500280c", - "0x28ff01641c058ff0160e8028ff01641c0580507201402907016050058ff", - "0x6f00500a41c058050180141882f0185241702c01841c060ff20a06c0803c", - "0x280520e02c8480b1b40141a10901841c05822016288028fe01641c05805", - "0x2907016014060051a402ca503601641c060340163640280520e02c0283f", - "0x58d4016290028d406c0308380b06c02c850051a602c8380b05c02c81805", - "0x58aa00a0f0059070160e4058d500a0148380b07402c530050740e406107", - "0x280520e02c6f80b19e0141f8df01841c05836016290028de01641c0583c", - "0x7380b20e02c028e800a10805907016100058f600a100059070160fc058ee", - "0x6f0e80183ac028e801641c058e71fc030758051ce02c8380b1ce02c10005", - "0x284c01641c058d3016050028ec01641c058421d6030758051d602c8380b", - "0x584c00a0148380b00a0300280529602c0282b00a0f4059070163b0058ec", - "0x582000a3c4059070160141700509a02c8380b05c02c8180500a41c058d2", - "0x2600b20e02c2680b0280147a80b20e02c788fe0183ac028f101641c058f1", - "0x2880c20e02c1e80b09a014029070160141e80507a02c8380b1ea02c76005", - "0x8380b1f202c288051f202c8380b0a602c7a80500a41c058510163c402853", - "0x2600b0280141600b20e02c1600b2080142c00b20e02c2b00b0a60142b00b", - "0x880b0b002c8380b0b002c6a00501802c8380b01802c6980509802c8380b", - "0x583101640c0280520e02c1100b1b401402907016014060050b00302602c", - "0x282b00a170059070163e80581400a168059070160bc0590400a3e805907", - "0x8380b03c02c7d00500a41c058230161300280520e02c0280c00a014a600b", - "0x8380b03602c820050be02c8380b0bc02c690050bc02c8380b00a16002805", - "0x2f80b1a80140600b20e02c0600b1a60148280b20e02c8280b0280140d80b", - "0x8380b02002c7d00500a41c058050180142f80c20a06c0880b0be02c8380b", - "0x58610160500285a01641c058170164100286101641c0582001640c02805", - "0x2d00b2080143180b20e02c7c00b1a40147c00b20e02c0285a00a17005907", - "0x6a00501802c8380b01802c698050b802c8380b0b802c0a0050b402c8380b", - "0x280c01601402907016014028050c60302e05a02202c3180b20e02c3180b", - "0x8380b02002c0800500a41c05805018014100170185348281101841c0600b", - "0x8280500a41c058050180141100b29c07c0f00c20e0300d80b0220140d80b", - "0x281801641c058051900148180b20e02c1180b02e0141180b20e02c0f80b", - "0x59070164140581400a044059070160440590400a41005907016078058f5", - "0x59030160800281801641c058180163180290401641c0590401617002905", - "0x602b0163000282b0520500810701640c0c10420a044828c500a40c05907", - "0x282f05c0308380b1fe02c5f00500a41c058050180141600b29e3fc05907", - "0x8380b05c02c0800500a41c058050180147f00b2a00c4059070180bc058c3", - "0x7f80500a41c058050180146900b2a20d81a00c20e0308480b0220148480b", - "0x283600a0148380b06202c5e00500a41c058360164240280520e02c1a00b", - "0xa00502802c8380b02802c820051a802c8380b1a602c690051a602c8380b", - "0x6a00b20e02c6a00b1a80140600b20e02c0600b1a60141480b20e02c1480b", - "0x283900a0148380b1a402c7f80500a41c058050180146a00c0520500880b", - "0x1d00c20e0301c8290280401e00507202c8380b07202c1d00507202c8380b", - "0x5e0050800fc061070160c40580000a0148380b00a030028df1bc030a903c", - "0x7380b20e02c2100b2a60142104001841c058400164380280520e02c1f80b", - "0x59070163a00582000a3ac059070160146f0051d002c8380b1ce02c7b005", - "0x1d00b2080142600b20e02c2000b2a80147600b20e02c740eb0183ac028e8", - "0x7600509802c8380b09802caa80507802c8380b07802c0a00507402c8380b", - "0x587200a3c42683d02041c058ec0980f01d0112ac0147600b20e02c7600b", - "0x2980b20e02c2680b20601402907016014060050a202cab8f501641c060f1", - "0x8380b1f202c2680500a41c05856016130028561f20308380b1ea02c78005", - "0x2d00b0a20142d00b20e02c7d00b1ea01402907016160058f100a3e82c00c", - "0xa00507a02c8380b07a02c820050bc02c8380b0b802c298050b802c8380b", - "0x2f00b20e02c2f00b1a80140600b20e02c0600b1a60142980b20e02c2980b", - "0x820050be02c8380b0a202c6900500a41c058050180142f00c0a60f40880b", - "0x600b20e02c0600b1a60142680b20e02c2680b0280141e80b20e02c1e80b", - "0x5e00500a41c058050180142f80c09a0f40880b0be02c8380b0be02c6a005", - "0x28f801641c058de0164100286101641c058df01640c0280520e02c1880b", - "0x584c00a0148380b00a030028052b002c0282b00a18c0590701618405814", - "0x590400a194059070160a40590300a0148380b05c02c7d00500a41c058fe", - "0x280c00a014ac80b00a0ac0286801641c05865016050028f701641c05814", - "0x581400a050059070160500590400a1a8059070160b0058d200a0148380b", - "0x586a01641c0586a0163500280c01641c0580c01634c0282901641c05829", - "0x8280b20601402907016088058ff00a0148380b00a0300286a0180a40a011", - "0x2c0050d002c8380b1ec02c0a0051ee02c8380b02202c820051ec02c8380b", - "0x28f701641c058f7016410028f201641c0586d0163480286d01641c05805", - "0x59070163c8058d400a03005907016030058d300a1a0059070161a005814", - "0x8180500a41c058100163e80280520e02c0280c00a3c8060681ee044058f2", - "0x3180b20e02c3800b0280147c00b20e02c0b80b2080143800b20e02c1000b", - "0x59070163e00590400a3c0059070161c8058d200a1c8059070160142d005", - "0x58f00163500280c01641c0580c01634c0286301641c05863016050028f8", - "0x8380c0160140600b00a0148380b00a014028f001818c7c0110163c005907", - "0x281b01641c058100160400280520e02c0280c00a0800b80c2b44140880c", - "0x581f0164140280520e02c0280c00a0880595b03e0780610701806c05811", - "0x581b00a40c0590701640c0582000a40c0590701608c0581700a08c05907", - "0x29070160140600520802cae00520e0300c00b03c0140c10301841c05903", - "0x61070180780581100a078059070160780582200a0148380b20602c0f805", - "0x581700a3fc059070160a40590500a0148380b00a0300282b01657414814", - "0x1700c20e0301601101808c0282c01641c0582c0160800282c01641c058ff", - "0x590501640c0280520e02c1780b2be014029070160140600506202caf02f", - "0x582200a0d0059070163f80581400a424059070160b80590400a3f805907", - "0x58140163fc0280520e02c0280c00a014b000b00a0ac0283601641c05814", - "0x6900b0280146980b20e02c1880b2080146900b20e02c8280b20601402907", - "0x8380b05602c7f80500a41c0580501801402961016014158051a802c8380b", - "0x5839016050028d301641c058110164100283901641c0590501640c02805", - "0x29070164100582c00a0148380b00a030028052c202c0282b00a35005907", - "0x8380b07802c1000507802c8380b07440c0602f00a0e80590701601417005", - "0x8280b20601402907016014060051bc02cb100520e0301e00b03c0141e00b", - "0x1100506802c8380b1be02c0a00521202c8380b02202c820051be02c8380b", - "0x58050180142100b2c61001f80c20e0301b00b0220141b00b20e02c0f00b", - "0x59070160141b00500a41c058400164240280520e02c1f80b1fe01402907", - "0x58340160500290901641c05909016410028e801641c058e7016348028e7", - "0x848110163a0059070163a0058d400a03005907016030058d300a0d005907", - "0x59070160141c80500a41c058420163fc0280520e02c0280c00a3a006034", - "0x61640983b0061070183ac1a1090200f0028eb01641c058eb0160e8028eb", - "0x59070160146f0051e202c8380b09802c8180500a41c058050180142683d", - "0x58530163d40280520e02c2880b1e20142985101841c058f5016134028f5", - "0x590400a160059070161580585300a158059070163e40585100a3e405907", - "0x280c01641c0580c01634c028f101641c058f1016050028ec01641c058ec", - "0x590300a0148380b00a030028580183c47601101616005907016160058d4", - "0x285c01641c058fa0160500285a01641c0583d016410028fa01641c0584d", - "0xf00b1fe014029070163780582c00a0148380b00a030028052ca02c0282b", - "0x581400a17c059070160440590400a178059070164140590300a0148380b", - "0x58220163fc0280520e02c0280c00a014b300b00a0ac0286101641c0585e", - "0x7c00b0280146980b20e02c0880b2080147c00b20e02c8280b20601402907", - "0x2c0050c202c8380b1a802c2b0050be02c8380b1a602c7c8051a802c8380b", - "0x285f01641c0585f0164100286501641c058630163480286301641c05805", - "0x5907016194058d400a03005907016030058d300a1840590701618405814", - "0x8180500a41c058100163e80280520e02c0280c00a194060610be04405865", - "0x2e00b20e02c7b80b0280142d00b20e02c0b80b2080147b80b20e02c1000b", - "0x59070161680590400a1a8059070161a0058d200a1a0059070160142d005", - "0x586a0163500280c01641c0580c01634c0285c01641c0585c0160500285a", - "0x8380c0160140600b00a0148380b00a0140286a0181702d0110161a805907", - "0x281101641c058110164100280520e02c0280c00a0800b80c2ce4140880c", - "0xf80b1400140f81e0360408380b020044060db00a040059070160400585c", - "0x290301641c0581e0160400280520e02c0280c00a08c0596804402c8380c", - "0x58180163fc0280520e02c0280c00a050059692080600610701840c05811", - "0x59070160141b00500a41c058220163680280520e02c8200b21201402907", - "0x59050160500281b01641c0581b0164100282b01641c0582901634802829", - "0xd8110160ac059070160ac058d400a03005907016030058d300a41405907", - "0x59070160141c80500a41c058140163fc0280520e02c0280c00a0ac06105", - "0x616a05c0b0061070183fc8281b0200f0028ff01641c058ff0160e8028ff", - "0x6107016088058a200a3f8059070160146f00500a41c058050180141882f", - "0x59070180d0058d900a0148380b00a0fc0280520e02c8480b1b40141a109", - "0x1b00b2140146980b20e02c1700b20601402907016014060051a402cb5836", - "0x280520e02c1d00b14c0141d03901841c058d4016290028d406c0308380b", - "0x61070160d8058a400a378059070160f0058aa00a0f0059070160e4058d5", - "0x58400163d80284001641c0583f0163b80280520e02c6f80b19e0141f8df", - "0x7f00c1d60147380b20e02c7380b0400147380b20e02c028e800a10805907", - "0x59070161087580c1d60147580b20e02c6f0e80183ac028e801641c058e7", - "0xb600b00a0ac0283d01641c058ec0163b00284c01641c058d3016050028ec", - "0x2680b20e02c1700b206014029070163480584c00a0148380b00a03002805", - "0x8380b1e23f8060eb00a3c4059070163c40582000a3c40590701601417005", - "0x580507a0141e80b20e02c7a80b1d80142600b20e02c2680b0280147a80b", - "0x2980b1ea01402907016144058f100a14c2880c20e02c1e80b09a01402907", - "0x820050b002c8380b0ac02c298050ac02c8380b1f202c288051f202c8380b", - "0x600b20e02c0600b1a60142600b20e02c2600b0280141600b20e02c1600b", - "0x6d00500a41c058050180142c00c0980b00880b0b002c8380b0b002c6a005", - "0x285a01641c0582f016410028fa01641c0583101640c0280520e02c1100b", - "0x584c00a0148380b00a030028052da02c0282b00a170059070163e805814", - "0x2f00b1a40142f00b20e02c0285800a0148380b03c02c7d00500a41c05823", - "0x6980520a02c8380b20a02c0a00503602c8380b03602c820050be02c8380b", - "0x60050be0308281b02202c2f80b20e02c2f80b1a80140600b20e02c0600b", - "0x590400a184059070160800590300a0148380b02002c7d00500a41c05805", - "0x690051f002c8380b00a1680285c01641c058610160500285a01641c05817", - "0x2e00b20e02c2e00b0280142d00b20e02c2d00b2080143180b20e02c7c00b", - "0x3180c0b81680880b0c602c8380b0c602c6a00501802c8380b01802c69805", - "0x600504005c0616e20a0440610701802c0280c0160140290701601402805", - "0x7180502002c8380b02002c2e00502202c8380b02202c8200500a41c05805", - "0x600504602cb782201641c0601f0163840281f03c06c081070160400880c", - "0xb81040300308380c20602c0880520602c8380b03c02c0800500a41c05805", - "0x29070164100590900a0148380b03002c7f80500a41c058050180140a00b", - "0x1580b20e02c1480b1a40141480b20e02c0283600a0148380b04402cb8805", - "0x8380b01802c6980520a02c8380b20a02c0a00503602c8380b03602c82005", - "0x2907016014060050560308281b02202c1580b20e02c1580b1a80140600b", - "0x7f80b20e02c7f80b0740147f80b20e02c0283900a0148380b02802c7f805", - "0x280520e02c0280c00a0c41780c2e40b81600c20e0307f9050360401e005", - "0x29070164240597100a0d08480c20e02c1100b2100147f00b20e02c028de", - "0x8380b00a030028d20165cc1b00b20e0301a00b136014029070160141f805", - "0x58d4016370028d401641c05836016274028d301641c0582e01640c02805", - "0x7f00c1d60141d00b20e02c1d00b0400141d00b20e02c028e800a0e405907", - "0x6f80b20e02c6980b0280146f00b20e02c1c83c0183ac0283c01641c0583a", - "0x8180500a41c05805018014029740160141580507e02c8380b1bc02c76005", - "0x7380b20e02c2100b1ce0142100b20e02c6900b0840142000b20e02c1700b", - "0x8380b1d03f8060eb00a3a0059070163a00582000a3a00590701601417005", - "0x58ec00a37c059070161000581400a3b00590701639c7580c1d60147580b", - "0x7880507a130061070160fc0584d00a0148380b00a0f40283f01641c058ec", - "0x28f101641c0584d0161440284d01641c0583d0163d40280520e02c2600b", - "0x590701637c0581400a0b0059070160b00590400a3d4059070163c405853", - "0x60df058044058f501641c058f50163500280c01641c0580c01634c028df", - "0x2880b20e02c1880b206014029070160880597100a0148380b00a030028f5", - "0x2975016014158051f202c8380b0a202c0a0050a602c8380b05e02c82005", - "0x2c00500a41c0581e0163e80280520e02c1180b0980140290701601406005", - "0x281b01641c0581b0164100285801641c058560163480285601641c05805", - "0x5907016160058d400a03005907016030058d300a4140590701641405814", - "0x8180500a41c058100163e80280520e02c0280c00a1600610503604405858", - "0x7c80b20e02c7d00b0280142980b20e02c0b80b2080147d00b20e02c1000b", - "0x590701614c0590400a17005907016168058d200a168059070160142d005", - "0x585c0163500280c01641c0580c01634c028f901641c058f901605002853", - "0x8380c0160140600b00a0148380b00a0140285c0183e42981101617005907", - "0x281101641c058110164100280520e02c0280c00a0800b80c2ec4140880c", - "0x581020a0440817700a040059070160400585c00a4140590701641405814", - "0x29070160140600504602cbc82201641c0601f0165e00281f03c06c08107", - "0x600502802cbe10401641c060180165ec028182060308380b04402cbd005", - "0xbe8ff0560308380c05202c0880505202c8380b20602c0800500a41c05805", - "0x29070163fc0590900a0148380b05602c7f80500a41c058050180141600b", - "0x1780b20e02c1700b1a40141700b20e02c0283600a0148380b20802c85805", - "0x8380b01802c6980503c02c8380b03c02c0a00503602c8380b03602c82005", - "0x29070160140600505e0300f01b02202c1780b20e02c1780b1a80140600b", - "0x1880b20e02c1880b0740141880b20e02c0283900a0148380b05802c7f805", - "0x280520e02c0280c00a0d81a00c2fc4247f00c20e0301881e0360401e005", - "0x290701634c0590b00a3506980c20e02c8200b2fe0146900b20e02c028de", - "0x590901640c0280520e02c0280c00a0e80598107202c8380c1a802cc0005", - "0x7b0051be02c8380b1bc02c350051bc0e4061070160e40586800a0f005907", - "0x284001641c058400160800284001641c058051d00141f80b20e02c6f80b", - "0x583f0840307580507e02c8380b07e02c1000508402c8380b080348060eb", - "0x581400a3f8059070163f80590400a3a0059070160e40586d00a39c05907", - "0x28e701641c058e70163b0028e801641c058e80163c80283c01641c0583c", - "0x2b00507a02c8380b1d602c7c8050983b07581020e02c738e80783f808870", - "0x600500a60c058050560147880b20e02c2600b3040142680b20e02c7600b", - "0x28510740308380b07402cc20051ea02c8380b21202c8180500a41c05805", - "0x2b00b20e02c0282e00a3e40590701614c058f600a14c0590701614405985", - "0x58f90160800285801641c058561a4030758050ac02c8380b0ac02c10005", - "0x820050b402c8380b07402cc30051f402c8380b1f2160060eb00a3e405907", - "0x2d00b20e02c2d00b30e0147a80b20e02c7a80b0280147f00b20e02c7f00b", - "0x285f0bc170081070163e82d0f51fc044c40051f402c8380b1f402c76005", - "0x590701617c0598200a134059070161780585600a0f405907016170058f9", - "0x2680b20601402907016014060051f002cc486101641c060f10161c8028f1", - "0x2680500a41c058f7016130028f70ca0308380b0c202c780050c602c8380b", - "0x7b00b20e02c3500b1ea014029070161a0058f100a1a83400c20e02c3280b", - "0x8380b07a02c820051e402c8380b0da02c298050da02c8380b1ec02c28805", - "0x7900b1a80140600b20e02c0600b1a60143180b20e02c3180b0280141e80b", - "0x8380b1f002c6900500a41c058050180147900c0c60f40880b1e402c8380b", - "0x600b1a60142680b20e02c2680b0280141e80b20e02c1e80b2080143800b", - "0x58050180143800c09a0f40880b0e002c8380b0e002c6a00501802c8380b", - "0x58340164100287201641c0583601640c0280520e02c8200b21601402907", - "0x8380b00a0300280531402c0282b00a1d4059070161c80581400a3c005907", - "0x3b80b20e02c0285800a0148380b20602c7d00500a41c0581401613002805", - "0x8380b03c02c0a00503602c8380b03602c820051de02c8380b0ee02c69005", - "0xf01b02202c7780b20e02c7780b1a80140600b20e02c0600b1a60140f00b", - "0x8380b03602c8200521802c8380b04602c6900500a41c058050180147780c", - "0x8600b1a80140600b20e02c0600b1a60140f00b20e02c0f00b0280140d80b", - "0x8380b02002c7d00500a41c058050180148600c03c06c0880b21802c8380b", - "0x5879016050028f001641c058170164100287901641c0582001640c02805", - "0x7800b2080143d80b20e02c8680b1a40148680b20e02c0285a00a1d405907", - "0x6a00501802c8380b01802c698050ea02c8380b0ea02c0a0051e002c8380b", - "0x280c01601402907016014028050f60303a8f002202c3d80b20e02c3d80b", - "0x8380b02202c8200500a41c058050180141001701862c8281101841c0600b", - "0x281f03c06c081070160400880c3180140800b20e02c0800b0b80140880b", - "0x8380b03c02c0800500a41c058050180141180b31c0880590701807c0598d", - "0x7f80500a41c058050180140a00b31e4100c00c20e0308180b0220148180b", - "0x283600a0148380b04402cc800500a41c059040164240280520e02c0c00b", - "0xa00503602c8380b03602c8200505602c8380b05202c6900505202c8380b", - "0x1580b20e02c1580b1a80140600b20e02c0600b1a60148280b20e02c8280b", - "0x283900a0148380b02802c7f80500a41c058050180141580c20a06c0880b", - "0x1600c20e0307f9050360401e0051fe02c8380b1fe02c1d0051fe02c8380b", - "0x1100b3240147f00b20e02c028de00a0148380b00a0300283105e030c882e", - "0x1a00b326014029070160141f80500a41c05909016640028342120308380b", - "0x28d301641c0582e01640c0280520e02c0280c00a3480599406c02c8380c", - "0x583c0163d80283c01641c058d40163b80283a072350081070160d80587d", - "0x58ee00a0fc0590701637c058f600a37c059070160e4058ee00a37805907", - "0x100051ce02c8380b00a3a00284201641c058400163d80284001641c0583a", - "0x8380b1bc3a0060eb00a3a00590701639c7f00c1d60147380b20e02c7380b", - "0xa00509802c8380b0843b0060eb00a3b0059070160fc7580c1d60147580b", - "0x600500a654058050560142680b20e02c2600b1d80141e80b20e02c6980b", - "0x28511ea0308380b1a402ccb0051e202c8380b05c02c8180500a41c05805", - "0x59070161440584200a3e40590701614c058e700a14c059070163d405842", - "0x8380b1f402c100051f402c8380b00a0b80285801641c0585601639c02856", - "0x758050b802c8380b1f2168060eb00a168059070163e87f00c1d60147d00b", - "0x5907016178058ec00a0f4059070163c40581400a178059070161602e00c", - "0x8380b0be02c788050c217c061070161340584d00a0148380b00a0f40284d", - "0x586301614c0286301641c058f8016144028f801641c058610163d402805", - "0x58d300a0f4059070160f40581400a0b0059070160b00590400a19405907", - "0x280c00a1940603d0580440586501641c058650163500280c01641c0580c", - "0x1780b2080147b80b20e02c1880b206014029070160880599000a0148380b", - "0x580501801402997016014158050d402c8380b1ee02c0a0050d002c8380b", - "0x59070160142c00500a41c0581e0163e80280520e02c1180b09801402907", - "0x59050160500281b01641c0581b0164100286d01641c058f6016348028f6", - "0xd8110161b4059070161b4058d400a03005907016030058d300a41405907", - "0x8380b04002c8180500a41c058100163e80280520e02c0280c00a1b406105", - "0x58050b40143500b20e02c7900b0280143400b20e02c0b80b2080147900b", - "0x581400a1a0059070161a00590400a1c8059070161c0058d200a1c005907", - "0x587201641c058720163500280c01641c0580c01634c0286a01641c0586a", - "0xcc1050220308380c0160140600b00a0148380b00a014028720181a834011", - "0x59050160500281101641c058110164100280520e02c0280c00a0800b80c", - "0xf01b02041c0581020a0440819900a040059070160400585c00a41405907", - "0x1100b338014029070160140600504602ccd82201641c0601f0166680281f", - "0x29070160140600502802ccf10401641c06018016674028182060308380b", - "0x600505802ccf8ff0560308380c05202c0880505202c8380b20602c08005", - "0x8200b340014029070163fc0590900a0148380b05602c7f80500a41c05805", - "0xd80b2080141780b20e02c1700b1a40141700b20e02c0283600a0148380b", - "0x6a00501802c8380b01802c6980503c02c8380b03c02c0a00503602c8380b", - "0x1600b1fe014029070160140600505e0300f01b02202c1780b20e02c1780b", - "0xd8100780141880b20e02c1880b0740141880b20e02c0283900a0148380b", - "0x8380b00a3780280520e02c0280c00a0d81a00c3424247f00c20e0301881e", - "0x6a00b3460140290701634c059a000a3506980c20e02c8200b3440146900b", - "0x283c01641c0590901640c0280520e02c0280c00a0e8059a407202c8380c", - "0x8380b07e02c7b00507e02c8380b1bc02c770051be378061070160e405924", - "0x58f600a39c059070161080588a00a1086f80c20e02c6f80b1100142000b", - "0x758051d602c8380b1d602c100051d602c8380b00a3a0028e801641c058e7", - "0x8380b1d002c1000509802c8380b0803b0060eb00a3b0059070163ac6900c", - "0x590400a1340590701637c058e900a0f4059070163a02600c1d60147400b", - "0x284d01641c0584d01622c0283c01641c0583c016050028fe01641c058fe", - "0x7c8050a23d47881020e02c1e84d0783f80888d00a0f4059070160f4058ec", - "0x2b00b20e02c2880b3040147c80b20e02c7a80b0ac0142980b20e02c7880b", - "0xd30050b002c8380b21202c8180500a41c05805018014029a501601415805", - "0x5907016170058e700a170059070163e80584200a1687d00c20e02c1d00b", - "0x3080b1ec0143080b20e02c2f80b30a0142f85a01841c0585a0166100285e", - "0x60eb00a18c0590701618c0582000a18c05907016014170051f002c8380b", - "0x59070163e00582000a3dc059070161783280c1d60143280b20e02c318d2", - "0x7f00b2080143500b20e02c2d00b30c0143400b20e02c7c0f70183ac028f8", - "0x760050d402c8380b0d402cc38050b002c8380b0b002c0a0051fc02c8380b", - "0x58f900a3c8368f602041c058680d41607f0113100143400b20e02c3400b", - "0x285601641c058f2016608028f901641c0586d0161580285301641c058f6", - "0x8380b1f202c8180500a41c058050180143900b34e1c00590701815805872", - "0x3a80b09a014029070161dc0584c00a1dc3a80c20e02c3800b1e00147800b", - "0x288050f202c8380b21802c7a80500a41c058ef0163c40290c1de0308380b", - "0x2980b20e02c2980b2080143d80b20e02c8680b0a60148680b20e02c3c80b", - "0x8380b0f602c6a00501802c8380b01802c698051e002c8380b1e002c0a005", - "0x3e80b20e02c3900b1a401402907016014060050f60307805302202c3d80b", - "0x8380b01802c698051f202c8380b1f202c0a0050a602c8380b0a602c82005", - "0x2907016014060050fa0307c85302202c3e80b20e02c3e80b1a80140600b", - "0x59070160d00590400a3b8059070160d80590300a0148380b20802cd0005", - "0x280520e02c0280c00a014d400b00a0ac0287f01641c058ee01605002880", - "0x6900510402c8380b00a1600280520e02c8180b1f4014029070160500584c", - "0xf00b20e02c0f00b0280140d80b20e02c0d80b2080147680b20e02c4100b", - "0x7680c03c06c0880b1da02c8380b1da02c6a00501802c8380b01802c69805", - "0xd80b20e02c0d80b2080144200b20e02c1180b1a40140290701601406005", - "0x8380b10802c6a00501802c8380b01802c6980503c02c8380b03c02c0a005", - "0x280520e02c0800b1f401402907016014060051080300f01b02202c4200b", - "0x59070163a80581400a2000590701605c0590400a3a80590701608005903", - "0x8380b10002c8200524802c8380b10c02c6900510c02c8380b00a1680287f", - "0x9200b1a80140600b20e02c0600b1a60143f80b20e02c3f80b0280144000b", - "0x600b00a0300580500a41c0580500a0149200c0fe2000880b24802c8380b", - "0x880b20e02c0880b208014029070160140600504005c061a920a04406107", - "0x59ab00a07c0f01b02041c05810022030d500502002c8380b02002c2e005", - "0x8180b20e02c0f00b020014029070160140600504602cd602201641c0601f", - "0xc00b1fe014029070160140600502802cd69040300308380c20602c08805", - "0x8380b00a0d80280520e02c1100b35c014029070164100590900a0148380b", - "0x8280b0280140d80b20e02c0d80b2080141580b20e02c1480b1a40141480b", - "0x880b05602c8380b05602c6a00501802c8380b01802c6980520a02c8380b", - "0x8380b00a0e40280520e02c0a00b1fe01402907016014060050560308281b", - "0xd782e0580308380c1fe4140d8100780147f80b20e02c7f80b0740147f80b", - "0x8380b04402cd80051fc02c8380b00a3780280520e02c0280c00a0c41780c", - "0x8380c06802cd880500a41c0580507e01402907016424059ae00a0d08480c", - "0x6980b0400146980b20e02c028e800a0148380b00a030028d20166c81b00b", - "0xd983901641c0603601626c028d401641c058d31fc030758051a602c8380b", - "0x8380b07202c4e80507802c8380b05c02c8180500a41c058050180141d00b", - "0x583f0160800283f01641c058051d00146f80b20e02c6f00b1b80146f00b", - "0x284201641c058df0800307580508002c8380b07e350060eb00a0fc05907", - "0x280536802c0282b00a3a005907016108058ec00a39c059070160f005814", - "0x28ec01641c0583a016108028eb01641c0582e01640c0280520e02c0280c", - "0x1e80b20e02c1e80b0400141e80b20e02c0282e00a130059070163b0058e7", - "0x7580b0280147880b20e02c2604d0183ac0284d01641c0583d1a803075805", - "0x5805018014029b4016014158051d002c8380b1e202c760051ce02c8380b", - "0x2880b1ec0142880b20e02c6900b1dc0147a80b20e02c1700b20601402907", - "0x60eb00a3e4059070163e40582000a3e405907016014170050a602c8380b", - "0x59070163d40581400a1600590701614c2b00c1d60142b00b20e02c7c8fe", - "0x61070163a00584d00a0148380b00a0f4028e801641c058580163b0028e7", - "0x585c0161440285c01641c0585a0163d40280520e02c7d00b1e20142d0fa", - "0x581400a0b0059070160b00590400a17c059070161780585300a17805907", - "0x585f01641c0585f0163500280c01641c0580c01634c028e701641c058e7", - "0x1880b20601402907016088059ae00a0148380b00a0300285f01839c16011", - "0x158050c602c8380b0c202c0a0051f002c8380b05e02c820050c202c8380b", - "0x581e0163e80280520e02c1180b098014029070160140600500a6d405805", - "0x581b016410028f701641c058650163480286501641c058050b001402907", - "0x58d400a03005907016030058d300a414059070164140581400a06c05907", - "0x58100163e80280520e02c0280c00a3dc06105036044058f701641c058f7", - "0x3400b0280147c00b20e02c0b80b2080143400b20e02c1000b20601402907", - "0x590400a3d8059070161a8058d200a1a8059070160142d0050c602c8380b", - "0x280c01641c0580c01634c0286301641c05863016050028f801641c058f8", - "0x600b00a0148380b00a014028f601818c7c0110163d8059070163d8058d4", - "0x58110164100280520e02c0280c00a0800b80c36c4140880c20e03005805", - "0xf81e0360408380b020044061b700a040059070160400585c00a04405907", - "0x581e0160400280520e02c0280c00a08c059b904402c8380c03e02cdc005", - "0x280520e02c0280c00a050059ba2080600610701840c0581100a40c05907", - "0x1b00500a41c058220166ec0280520e02c8200b21201402907016060058ff", - "0x281b01641c0581b0164100282b01641c058290163480282901641c05805", - "0x59070160ac058d400a03005907016030058d300a4140590701641405814", - "0x1c80500a41c058140163fc0280520e02c0280c00a0ac061050360440582b", - "0x61070183fc8281b0200f0028ff01641c058ff0160e8028ff01641c05805", - "0x59bd00a3f8059070160146f00500a41c058050180141882f0186f01702c", - "0x591200a0148380b00a0fc0280520e02c8480b3760141a10901841c05822", - "0x6980b20e02c1700b20601402907016014060051a402cdf03601641c06034", - "0x59070160147400507202c8380b1a802c6e0051a802c8380b06c02c4e805", - "0x1e00c1d60141e00b20e02c1d0fe0183ac0283a01641c0583a0160800283a", - "0x283f01641c058de0163b0028df01641c058d3016050028de01641c05839", - "0x2000b0400142000b20e02c0282e00a0148380b00a0300280537e02c0282b", - "0xe08e701641c060d20167000284201641c058401fc0307580508002c8380b", - "0x8380b1ce02c770051d602c8380b05c02c8180500a41c058050180147400b", - "0x583d0160800283d01641c058051d00142600b20e02c7600b1ec0147600b", - "0x28f101641c0584c09a0307580509a02c8380b07a108060eb00a0f405907", - "0x280537e02c0282b00a0fc059070163c4058ec00a37c059070163ac05814", - "0x170051ea02c8380b05c02c8180500a41c058e80161300280520e02c0280c", - "0x2980b20e02c288420183ac0285101641c058510160800285101641c05805", - "0x29070160141e80507e02c8380b0a602c760051be02c8380b1ea02c0a005", - "0x8380b0ac02c7a80500a41c058f90163c4028561f20308380b07e02c26805", - "0x1600b2080142d00b20e02c7d00b0a60147d00b20e02c2c00b0a20142c00b", - "0x6a00501802c8380b01802c698051be02c8380b1be02c0a00505802c8380b", - "0x1100b37601402907016014060050b40306f82c02202c2d00b20e02c2d00b", - "0x581400a178059070160bc0590400a170059070160c40590300a0148380b", - "0x58230161300280520e02c0280c00a014e100b00a0ac0285f01641c0585c", - "0x8380b0c202c690050c202c8380b00a1600280520e02c0f00b1f401402907", - "0x600b1a60148280b20e02c8280b0280140d80b20e02c0d80b2080147c00b", - "0x58050180147c00c20a06c0880b1f002c8380b1f002c6a00501802c8380b", - "0x58170164100286301641c0582001640c0280520e02c0800b1f401402907", - "0x3280b1a40143280b20e02c0285a00a17c0590701618c0581400a17805907", - "0x698050be02c8380b0be02c0a0050bc02c8380b0bc02c820051ee02c8380b", - "0x28051ee0302f85e02202c7b80b20e02c7b80b1a80140600b20e02c0600b", - "0x58050180141001701870c8281101841c0600b00a0300580500a41c05805", - "0x880c3880140800b20e02c0800b0b80140880b20e02c0880b20801402907", - "0x58050180141180b38c0880590701807c059c500a07c0f01b02041c05810", - "0xa00b38e4100c00c20e0308180b0220148180b20e02c0f00b02001402907", - "0xe400500a41c059040164240280520e02c0c00b1fe0140290701601406005", - "0x8200505602c8380b05202c6900505202c8380b00a0d80280520e02c1100b", - "0x600b20e02c0600b1a60148280b20e02c8280b0280140d80b20e02c0d80b", - "0x7f80500a41c058050180141580c20a06c0880b05602c8380b05602c6a005", - "0x1e0051fe02c8380b1fe02c1d0051fe02c8380b00a0e40280520e02c0a00b", - "0x28de00a0148380b00a0300283105e030e482e0580308380c1fe4140d810", - "0x1f80500a41c05909016720028342120308380b04402ce50051fc02c8380b", - "0x280520e02c0280c00a348059cc06c02c8380c06802ce580500a41c05805", - "0x5907016350058dc00a350059070160d80589d00a34c059070160b805903", - "0x583a1fc0307580507402c8380b07402c1000507402c8380b00a3a002839", - "0x760051be02c8380b1a602c0a0051bc02c8380b0720f0060eb00a0f005907", - "0x1700b206014029070160140600500a734058050560141f80b20e02c6f00b", - "0x740e701841c05842016290028421a40308380b1a402c8500508002c8380b", - "0x59070163ac058aa00a3ac0590701639c058d500a0148380b1d002c53005", - "0x583d0163b80280520e02c2600b19e0141e84c01841c058d2016290028ec", - "0x7a80b0400147a80b20e02c0282e00a3c405907016134058f600a13405907", - "0x2980b20e02c760510183ac0285101641c058f51fc030758051ea02c8380b", - "0x58f90163b0028df01641c05840016050028f901641c058f10a603075805", - "0x2b00b1e20142c05601841c0583f0161340280520e02c0283d00a0fc05907", - "0x585300a168059070163e80585100a3e805907016160058f500a0148380b", - "0x28df01641c058df0160500282c01641c0582c0164100285c01641c0585a", - "0x285c01837c1601101617005907016170058d400a03005907016030058d3", - "0x820050bc02c8380b06202c8180500a41c058220167200280520e02c0280c", - "0x600500a738058050560143080b20e02c2f00b0280142f80b20e02c1780b", - "0x58050b001402907016078058fa00a0148380b04602c2600500a41c05805", - "0x581400a06c0590701606c0590400a18c059070163e0058d200a3e005907", - "0x586301641c058630163500280c01641c0580c01634c0290501641c05905", - "0x1000b20601402907016040058fa00a0148380b00a030028630184140d811", - "0x2d0050c202c8380b0ca02c0a0050be02c8380b02e02c820050ca02c8380b", - "0x285f01641c0585f0164100286801641c058f7016348028f701641c05805", - "0x59070161a0058d400a03005907016030058d300a1840590701618405814", - "0x880c20e0300580501802c0280520e02c0280500a1a0060610be04405868", - "0x585c00a044059070160440590400a0148380b00a0300282002e030e7905", - "0x8380c03e02c7080503e0780d81020e02c0801101838c0281001641c05810", - "0xf00b020014029070160880597100a0148380b00a030028230167401100b", - "0x29070160140600502802ce89040300308380c20602c0880520602c8380b", - "0x282901641c0580506c014029070164100590900a0148380b03002c7f805", - "0x59070164140581400a06c0590701606c0590400a0ac059070160a4058d2", - "0x61050360440582b01641c0582b0163500280c01641c0580c01634c02905", - "0x28ff01641c0580507201402907016050058ff00a0148380b00a0300282b", - "0x1882f0187481702c01841c060ff20a06c0803c00a3fc059070163fc0583a", - "0x290901641c058051bc0147f00b20e02c1700b2060140290701601406005", - "0x59070160d8058f500a0148380b06802c7880506c0d0061070164240584d", - "0x582c016410028d401641c058d301614c028d301641c058d2016144028d2", - "0x58d400a03005907016030058d300a3f8059070163f80581400a0b005907", - "0x583101640c0280520e02c0280c00a350060fe058044058d401641c058d4", - "0x282b00a0f0059070160e40581400a0e8059070160bc0590400a0e405907", - "0x8380b03c02c7d00500a41c058230161300280520e02c0280c00a014e980b", - "0x8380b03602c820051be02c8380b1bc02c690051bc02c8380b00a16002805", - "0x6f80b1a80140600b20e02c0600b1a60148280b20e02c8280b0280140d80b", - "0x8380b02002c7d00500a41c058050180146f80c20a06c0880b1be02c8380b", - "0x583f0160500283a01641c058170164100283f01641c0582001640c02805", - "0x1d00b2080142100b20e02c2000b1a40142000b20e02c0285a00a0f005907", - "0x6a00501802c8380b01802c6980507802c8380b07802c0a00507402c8380b", - "0x280c01601402907016014028050840301e03a02202c2100b20e02c2100b", - "0x8380b02002c0800500a41c05805018014100170187508281101841c0600b", - "0x8280500a41c058050180141100b3aa07c0f00c20e0300d80b0220140d80b", - "0x8180b20e02c8180b0400148180b20e02c1180b02e0141180b20e02c0f80b", - "0x582200a0148380b00a0300281401675c8201801841c06103022030eb005", - "0x8380b00a030028ff0167601582901841c0601e0160440281e01641c0581e", - "0x582e0160800282e01641c0582c01605c0282c01641c0582b01641402805", - "0x2907016014060051fc02ced03105e0308380c05c060061d900a0b805907", - "0x600506c02ced8342120308380c05202c0880505202c8380b05202c11005", - "0x1880b14c014029070160d00590900a0148380b21202c7f80500a41c05805", - "0x58d2016348028d201641c0580506c01402907016410058cf00a0148380b", - "0x58d300a414059070164140581400a0bc059070160bc0590400a34c05907", - "0x280c00a34c0610505e044058d301641c058d30163500280c01641c0580c", - "0x58d40160e8028d401641c05805072014029070160d8058ff00a0148380b", - "0x58050180146f03c0187701d03901841c060d420a0bc0803c00a35005907", - "0x59de00a0fc059070160c48200c3ba0146f80b20e02c1d00b20601402907", - "0x284201641c058420167800280520e02c2000b3be0142104001841c0583f", - "0x58eb016298028eb1d00308380b1ce02c520051ce108061070161080590a", - "0x2100b1480142600b20e02c7600b1540147600b20e02c7400b1aa01402907", - "0x7b0051e202c8380b09a02c7700500a41c0583d01633c0284d07a0308380b", - "0x2980b20e02c260510183ac0285101641c058051bc0147a80b20e02c7880b", - "0x2b00b1e20142c05601841c058f9016134028f901641c058f50a603075805", - "0x585300a168059070163e80585100a3e805907016160058f500a0148380b", - "0x28df01641c058df0160500283901641c058390164100285c01641c0585a", - "0x285c01837c1c81101617005907016170058d400a03005907016030058d3", - "0x590300a0148380b20802c6780500a41c058310162980280520e02c0280c", - "0x286101641c0585e0160500285f01641c0583c0164100285e01641c058de", - "0x8200b19e014029070160a4058ff00a0148380b00a030028053c202c0282b", - "0x581400a18c059070163f80590400a3e0059070164140590300a0148380b", - "0x58ff0163fc0280520e02c0280c00a014f100b00a0ac0286501641c058f8", - "0x5818016410028f701641c0590501640c0280520e02c8200b19e01402907", - "0x8380b00a030028053c402c0282b00a194059070163dc0581400a18c05907", - "0x8380b02802c820050d002c8380b20a02c8180500a41c0581e0163fc02805", - "0x29070160140600500a788058050560143280b20e02c3400b0280143180b", - "0x59070160440590400a1a8059070164140590300a0148380b04402c7f805", - "0x8380b1ec02c690051ec02c8380b00a1600286501641c0586a01605002863", - "0x600b1a60143280b20e02c3280b0280143180b20e02c3180b2080143680b", - "0x58050180143680c0ca18c0880b0da02c8380b0da02c6a00501802c8380b", - "0x5817016410028f201641c0582001640c0280520e02c0800b1f401402907", - "0x3800b1a40143800b20e02c0285a00a184059070163c80581400a17c05907", - "0x698050c202c8380b0c202c0a0050be02c8380b0be02c820050e402c8380b", - "0x28050e40303085f02202c3900b20e02c3900b1a80140600b20e02c0600b", - "0x58050180141001701878c8281101841c0600b00a0300580500a41c05805", - "0x880c3c80140800b20e02c0800b0b80140880b20e02c0880b20801402907", - "0x58050180141180b3cc0880590701807c059e500a07c0f01b02041c05810", - "0xa00b3ce4100c00c20e0308180b0220148180b20e02c0f00b02001402907", - "0xf400500a41c059040164240280520e02c0c00b1fe0140290701601406005", - "0x8200505602c8380b05202c6900505202c8380b00a0d80280520e02c1100b", - "0x600b20e02c0600b1a60148280b20e02c8280b0280140d80b20e02c0d80b", - "0x7f80500a41c058050180141580c20a06c0880b05602c8380b05602c6a005", - "0x1e0051fe02c8380b1fe02c1d0051fe02c8380b00a0e40280520e02c0a00b", - "0x590300a0148380b00a0300283105e030f482e0580308380c1fe4140d810", - "0x280520e02c8480b3d00141a10901841c058220167a8028fe01641c0582e", - "0x58d301677c028d31a40308380b06c02cf600506c0d0061070160d0059eb", - "0x1a00b3d80141c80b20e02c6a00b1540146a00b20e02c6900b1aa01402907", - "0x28de0780308380b07802c8500500a41c0583a01633c0283c0740308380b", - "0x590701637c058d500a0148380b07e02c5300507e37c06107016378058a4", - "0x7380b19e014740e701841c0583c0162900284201641c058400162a802840", - "0x28de00a3b0059070163ac058f600a3ac059070163a0058ee00a0148380b", - "0x2680b20e02c2103d0183ac0283d01641c058390980307580509802c8380b", - "0x7a80b1e2014288f501841c058f1016134028f101641c058ec09a03075805", - "0x585300a3e40590701614c0585100a14c05907016144058f500a0148380b", - "0x28fe01641c058fe0160500282c01641c0582c0164100285601641c058f9", - "0x28560183f81601101615805907016158058d400a03005907016030058d3", - "0x820050b002c8380b06202c8180500a41c058220167a00280520e02c0280c", - "0x600500a7b4058050560142d00b20e02c2c00b0280147d00b20e02c1780b", - "0x58050b001402907016078058fa00a0148380b04602c2600500a41c05805", - "0x581400a06c0590701606c0590400a17805907016170058d200a17005907", - "0x585e01641c0585e0163500280c01641c0580c01634c0290501641c05905", - "0x1000b20601402907016040058fa00a0148380b00a0300285e0184140d811", - "0x2d0050b402c8380b0be02c0a0051f402c8380b02e02c820050be02c8380b", - "0x28fa01641c058fa016410028f801641c058610163480286101641c05805", - "0x59070163e0058d400a03005907016030058d300a1680590701616805814", - "0x880c20e0300580501802c0280520e02c0280500a3e00605a1f4044058f8", - "0x581100a06c059070160400581000a0148380b00a0300282002e030f7105", - "0x2907016078058ff00a0148380b00a030028220167bc0f81e01841c0601b", - "0x8180b20e02c1180b1a40141180b20e02c0283600a0148380b03e02c84805", - "0x8380b01802c6980520a02c8380b20a02c0a00502202c8380b02202c82005", - "0x2907016014060052060308281102202c8180b20e02c8180b1a80140600b", - "0xc00b20e02c0c00b0740140c00b20e02c0283900a0148380b04402c7f805", - "0x280520e02c0280c00a0ac1480c3e00508200c20e0300c1050220401e005", - "0x1700c20e02c1600b09a0141600b20e02c028de00a3fc0590701605005903", - "0x8380b06202c2880506202c8380b05e02c7a80500a41c0582e0163c40282f", - "0x7f80b0280148200b20e02c8200b2080148480b20e02c7f00b0a60147f00b", - "0x880b21202c8380b21202c6a00501802c8380b01802c698051fe02c8380b", - "0x1480b2080141a00b20e02c1580b20601402907016014060052120307f904", - "0x5805018014029f1016014158051a402c8380b06802c0a00506c02c8380b", - "0x5817016410028d301641c0582001640c0280520e02c0800b1f401402907", - "0x6a00b1a40146a00b20e02c0285a00a3480590701634c0581400a0d805907", - "0x698051a402c8380b1a402c0a00506c02c8380b06c02c8200507202c8380b", - "0x28050720306903602202c1c80b20e02c1c80b1a80140600b20e02c0600b", - "0x5805018014100170187c88281101841c0600b00a0300580500a41c05805", - "0x880c3e60140800b20e02c0800b0b80140880b20e02c0880b20801402907", - "0x58050180141180b3ea0880590701807c059f400a07c0f01b02041c05810", - "0xa00b3ec4100c00c20e0308180b0220148180b20e02c0f00b02001402907", - "0xfb80500a41c059040164240280520e02c0c00b1fe0140290701601406005", - "0x8200505602c8380b05202c6900505202c8380b00a0d80280520e02c1100b", - "0x600b20e02c0600b1a60148280b20e02c8280b0280140d80b20e02c0d80b", - "0x7f80500a41c058050180141580c20a06c0880b05602c8380b05602c6a005", - "0x1e0051fe02c8380b1fe02c1d0051fe02c8380b00a0e40280520e02c0a00b", - "0x590300a0148380b00a0300283105e030fc02e0580308380c1fe4140d810", - "0x280520e02c8480b3ee0141a10901841c058220167e4028fe01641c0582e", - "0x58d30167f0028d31a40308380b06c02cfd80506c0d0061070160d0059fa", - "0x1a00b3f60141c80b20e02c6a00b1ce0146a00b20e02c6900b08401402907", - "0x1f8df1bc0448380b07802cfe80500a41c0583a01657c0283c0740308380b", - "0x58df016108028e701641c058420163700284201641c058de01627402840", - "0x58f600a3b0059070160fc058ee00a3ac059070163a0058e700a3a005907", - "0x284d01641c0583d0162a80283d01641c058400163540284c01641c058ec", - "0x8380b1ce3d4060eb00a3d4059070160e47880c1d60147880b20e02c028de", - "0x758051f202c8380b09814c060eb00a14c059070163ac2880c1d60142880b", - "0x8380b0b002c788051f4160061070161580584d00a158059070161347c80c", - "0x585c01614c0285c01641c0585a0161440285a01641c058fa0163d402805", - "0x58d300a3f8059070163f80581400a0b0059070160b00590400a17805907", - "0x280c00a178060fe0580440585e01641c0585e0163500280c01641c0580c", - "0x1780b2080142f80b20e02c1880b20601402907016088059f700a0148380b", - "0x5805018014029fe016014158051f002c8380b0be02c0a0050c202c8380b", - "0x59070160142c00500a41c0581e0163e80280520e02c1180b09801402907", - "0x59050160500281b01641c0581b0164100286501641c0586301634802863", - "0xd81101619405907016194058d400a03005907016030058d300a41405907", - "0x8380b04002c8180500a41c058100163e80280520e02c0280c00a19406105", - "0x58050b40147c00b20e02c7b80b0280143080b20e02c0b80b2080147b80b", - "0x581400a184059070161840590400a1a8059070161a0058d200a1a005907", - "0x586a01641c0586a0163500280c01641c0580c01634c028f801641c058f8", - "0xff9050220308380c0160140600b00a0148380b00a0140286a0183e030811", - "0x59050160500281101641c058110164100280520e02c0280c00a0800b80c", - "0xf01b02041c0581020a0440820000a040059070160400585c00a41405907", - "0x1100b406014029070160140600504602d0102201641c0601f0168040281f", - "0x29070160140600502802d0290401641c06018016810028182060308380b", - "0x600505802d030ff0560308380c05202c0880505202c8380b20602c08005", - "0x8200b40e014029070163fc0590900a0148380b05602c7f80500a41c05805", - "0xd80b2080141780b20e02c1700b1a40141700b20e02c0283600a0148380b", - "0x6a00501802c8380b01802c6980503c02c8380b03c02c0a00503602c8380b", - "0x1600b1fe014029070160140600505e0300f01b02202c1780b20e02c1780b", - "0xd8100780141880b20e02c1880b0740141880b20e02c0283900a0148380b", - "0x59040168240280520e02c0280c00a0d81a00c4104247f00c20e0301881e", - "0x8a8051a834c0610701634c05a0a00a0148380b1a402d038051a634806107", - "0x1e00b20e02c1c80b084014029070160e805a0b00a0e81c80c20e02c6a00b", - "0x58df01657c0283f1be0308380b1a602c8a8051bc02c8380b07802c73805", - "0x5a0e00a1080590701610005a0d00a1001f80c20e02c1f80b41801402907", - "0x28eb01641c058e80163d8028e801641c058e7016228028e701641c05842", - "0x59070163ac0582000a130059070163787600c1d60147600b20e02c028de", - "0x7f00b2080142680b20e02c1f80b41a0141e80b20e02c7584c0183ac028eb", - "0x7600509a02c8380b09a02c4580521202c8380b21202c0a0051fc02c8380b", - "0x587200a1447a8f102041c0583d09a4247f01111a0141e80b20e02c1e80b", - "0x2b00b20e02c7a80b20601402907016014060051f202d0785301641c06051", - "0x8380b0b002c2680500a41c058fa016130028fa0b00308380b0a602c78005", - "0x2f00b0a20142f00b20e02c2e00b1ea01402907016168058f100a1702d00c", - "0xa0051e202c8380b1e202c820050c202c8380b0be02c298050be02c8380b", - "0x3080b20e02c3080b1a80140600b20e02c0600b1a60142b00b20e02c2b00b", - "0x820051f002c8380b1f202c6900500a41c058050180143080c0ac3c40880b", - "0x600b20e02c0600b1a60147a80b20e02c7a80b0280147880b20e02c7880b", - "0x10380500a41c058050180147c00c1ea3c40880b1f002c8380b1f002c6a005", - "0x286501641c058340164100286301641c0583601640c0280520e02c8200b", - "0x584c00a0148380b00a0300280542002c0282b00a3dc0590701618c05814", - "0x3400b1a40143400b20e02c0285800a0148380b20602c7d00500a41c05814", - "0x6980503c02c8380b03c02c0a00503602c8380b03602c820050d402c8380b", - "0x60050d40300f01b02202c3500b20e02c3500b1a80140600b20e02c0600b", - "0xa00503602c8380b03602c820051ec02c8380b04602c6900500a41c05805", - "0x7b00b20e02c7b00b1a80140600b20e02c0600b1a60140f00b20e02c0f00b", - "0x590300a0148380b02002c7d00500a41c058050180147b00c03c06c0880b", - "0x28f701641c0586d0160500286501641c058170164100286d01641c05820", - "0x3280b20e02c3280b2080143800b20e02c7900b1a40147900b20e02c0285a", - "0x8380b0e002c6a00501802c8380b01802c698051ee02c8380b1ee02c0a005", - "0x610701802c0280c01601402907016014028050e00307b86502202c3800b", - "0x2e00502202c8380b02202c8200500a41c058050180141001701884482811", - "0x601f01684c0281f03c06c081070160400880c4240140800b20e02c0800b", - "0x880520602c8380b03c02c0800500a41c058050180141180b42808805907", - "0x8380b03002c7f80500a41c058050180140a00b42a4100c00c20e0308180b", - "0x1480b20e02c0283600a0148380b04402c8a00500a41c0590401642402805", - "0x8380b20a02c0a00503602c8380b03602c8200505602c8380b05202c69005", - "0x8281b02202c1580b20e02c1580b1a80140600b20e02c0600b1a60148280b", - "0x7f80b20e02c0283900a0148380b02802c7f80500a41c058050180141580c", - "0x1780c42c0b81600c20e0307f9050360401e0051fe02c8380b1fe02c1d005", - "0x610701608805a1700a3f8059070160b80590300a0148380b00a03002831", - "0x1b00b4320141b03401841c058340168600280520e02c8480b2280141a109", - "0x738051a802c8380b1a402c2100500a41c058d3016868028d31a40308380b", - "0x29070160e80595f00a0f01d00c20e02c1a00b4320141c80b20e02c6a00b", - "0x58e700a108059070163780584200a1001f8df1bc0448380b07802d0d805", - "0x28eb01641c058e801639c028e801641c058df016108028e701641c05842", - "0x59070161000584200a130059070163b0058e700a3b0059070160fc05842", - "0x58391e2030758051e202c8380b00a3780284d01641c0583d01639c0283d", - "0x285301641c058eb0a2030758050a202c8380b1ce3d4060eb00a3d405907", - "0x58560161340285601641c0584d1f2030758051f202c8380b09814c060eb", - "0x585100a168059070163e8058f500a0148380b0b002c788051f416006107", - "0x282c01641c0582c0164100285e01641c0585c01614c0285c01641c0585a", - "0x5907016178058d400a03005907016030058d300a3f8059070163f805814", - "0x8180500a41c058220164500280520e02c0280c00a178060fe0580440585e", - "0x7c00b20e02c2f80b0280143080b20e02c1780b2080142f80b20e02c1880b", - "0x58fa00a0148380b04602c2600500a41c0580501801402a1c01601415805", - "0x590400a1940590701618c058d200a18c059070160142c00500a41c0581e", - "0x280c01641c0580c01634c0290501641c059050160500281b01641c0581b", - "0x58fa00a0148380b00a030028650184140d81101619405907016194058d4", - "0xa0050c202c8380b02e02c820051ee02c8380b04002c8180500a41c05810", - "0x286a01641c058680163480286801641c058050b40147c00b20e02c7b80b", - "0x5907016030058d300a3e0059070163e00581400a1840590701618405904", - "0x280520e02c0280500a1a8060f80c20440586a01641c0586a0163500280c", - "0x590400a0148380b00a0300282002e0310e9050220308380c0160140600b", - "0xd81020e02c080110188780281001641c058100161700281101641c05811", - "0x581000a0148380b00a030028230168801100b20e0300f80b43e0140f81e", - "0x8380b00a030028140168848201801841c061030160440290301641c0581e", - "0x290701608805a2200a0148380b20802c8480500a41c058180163fc02805", - "0x590701606c0590400a0ac059070160a4058d200a0a4059070160141b005", - "0x582b0163500280c01641c0580c01634c0290501641c059050160500281b", - "0x2907016050058ff00a0148380b00a0300282b0184140d8110160ac05907", - "0x60ff20a06c0803c00a3fc059070163fc0583a00a3fc059070160141c805", - "0x7f00c20e02c1100b22c01402907016014060050620bc0622305c0b006107", - "0x5834016894028342120308380b21202d1200500a41c058fe01688802909", - "0x58f600a34c059070160d8058ee00a0148380b1a402d130051a40d806107", - "0x283a01641c058d40720307580507202c8380b00a378028d401641c058d3", - "0x280520e02c0283f00a0148380b07802c530051bc0f00610701642405a25", - "0x8380b05c02c8180500a41c058050180141f80b45037c0590701837805a27", - "0x58051d00147380b20e02c2100b1b80142100b20e02c6f80b13a0142000b", - "0x758051d602c8380b1d00e8060eb00a3a0059070163a00582000a3a005907", - "0x59070163b0058ec00a130059070161000581400a3b00590701639c7580c", - "0x8180500a41c0583f0161300280520e02c0280c00a0151480b00a0ac0283d", - "0x28f101641c058f1016080028f101641c0580505c0142680b20e02c1700b", - "0x8380b1ea02c7600509802c8380b09a02c0a0051ea02c8380b1e20e8060eb", - "0x58510163c4028530a20308380b07a02c2680500a41c0580507a0141e80b", - "0x2b00b0a60142b00b20e02c7c80b0a20147c80b20e02c2980b1ea01402907", - "0x6980509802c8380b09802c0a00505802c8380b05802c820050b002c8380b", - "0x60050b00302602c02202c2c00b20e02c2c00b1a80140600b20e02c0600b", - "0x590400a3e8059070160c40590300a0148380b04402d1100500a41c05805", - "0x280c00a0151500b00a0ac0285c01641c058fa0160500285a01641c0582f", - "0x8380b00a1600280520e02c0f00b1f40140290701608c0584c00a0148380b", - "0x8280b0280140d80b20e02c0d80b2080142f80b20e02c2f00b1a40142f00b", - "0x880b0be02c8380b0be02c6a00501802c8380b01802c6980520a02c8380b", - "0x582001640c0280520e02c0800b1f401402907016014060050be0308281b", - "0x285a00a170059070161840581400a1680590701605c0590400a18405907", - "0xa0050b402c8380b0b402c820050c602c8380b1f002c690051f002c8380b", - "0x3180b20e02c3180b1a80140600b20e02c0600b1a60142e00b20e02c2e00b", - "0x8281101841c0600b00a0300580500a41c0580500a0143180c0b81680880b", - "0xd80b0220140d80b20e02c0800b020014029070160140600504005c0622b", - "0x1180b20e02c0f80b20a014029070160140600504402d1601f03c0308380c", - "0x61030220311680520602c8380b20602c1000520602c8380b04602c0b805", - "0x5907016078058f500a0148380b00a0300282b0520500822e20806006107", - "0x7f8180188bc028ff01641c058ff0161700281801641c05818016410028ff", - "0x8380b00a030028fe0168c41880b20e0301780b4600141782e0580408380b", - "0x28d20168c81b03401841c061090160440290901641c0582e01604002805", - "0x5a3300a0148380b06c02c8480500a41c058340163fc0280520e02c0280c", - "0x6980b1a40146980b20e02c0283600a0148380b06202d1a00500a41c05904", - "0x6980520a02c8380b20a02c0a00505802c8380b05802c820051a802c8380b", - "0x60051a80308282c02202c6a00b20e02c6a00b1a80140600b20e02c0600b", - "0x1c80b0740141c80b20e02c0283900a0148380b1a402c7f80500a41c05805", - "0x280c00a37c6f00c46a0f01d00c20e0301c9050580401e00507202c8380b", - "0x28420800308380b07e02d1b00507e02c8380b0624100611300a0148380b", - "0x2100c20e02c2100b4720142100b20e02c2100b4700140290701610005a37", - "0x58e80164440280520e02c7580b468014758e801841c058e70168e8028e7", - "0x1e80c1d60141e80b20e02c028de00a130059070163b005a3b00a3b005907", - "0x280520e02c7880b4660147a8f101841c058420168e80284d01641c0584c", - "0x2907016014060050a602d1e85101641c060f50168f00280520e02c0283f", - "0x8380b0ac02c6e0050ac02c8380b0a202c4e8051f202c8380b07802c81805", - "0x7d04d0183ac028fa01641c058fa016080028fa01641c058051d00142c00b", - "0x285e01641c058f90160500285c01641c058580b4030758050b402c8380b", - "0x590300a0148380b00a0300280547c02c0282b00a17c05907016170058ec", - "0x286301641c058f80162a8028f801641c058530163540286101641c0583c", - "0x59070161942680c1d60143280b20e02c3280b0400143280b20e02c0282e", - "0x3400b1d80142f00b20e02c3080b0280143400b20e02c318f70183ac028f7", - "0x58f100a3d83500c20e02c2f80b09a014029070160141e8050be02c8380b", - "0x298051e402c8380b0da02c288050da02c8380b1ec02c7a80500a41c0586a", - "0x2f00b20e02c2f00b0280141d00b20e02c1d00b2080143800b20e02c7900b", - "0x3800c0bc0e80880b0e002c8380b0e002c6a00501802c8380b01802c69805", - "0x8180500a41c058310168d00280520e02c8200b4660140290701601406005", - "0x3a80b20e02c3900b0280147800b20e02c6f00b2080143900b20e02c6f80b", - "0x5a3300a0148380b1fc02c2600500a41c0580501801402a3f01601415805", - "0x590400a1dc059070164140590300a0148380b05c02c7d00500a41c05904", - "0x280c00a0152000b00a0ac0290c01641c05877016050028ef01641c0582c", - "0x581e0163fc0280520e02c1580b466014029070160a405a3300a0148380b", - "0x3c80b0280148680b20e02c0a00b2080143c80b20e02c8280b20601402907", - "0x8380b04402c7f80500a41c0580501801402a41016014158050f602c8380b", - "0x587d0160500290d01641c058110164100287d01641c0590501640c02805", - "0x285800a430059070161ec0585600a3bc05907016434058f900a1ec05907", - "0xa0051de02c8380b1de02c8200510002c8380b1dc02c690051dc02c8380b", - "0x4000b20e02c4000b1a80140600b20e02c0600b1a60148600b20e02c8600b", - "0x590300a0148380b02002c7d00500a41c058050180144000c2183bc0880b", - "0x287501641c0587f016050028f001641c058170164100287f01641c05820", - "0x7800b20e02c7800b2080147680b20e02c4100b1a40144100b20e02c0285a", - "0x8380b1da02c6a00501802c8380b01802c698050ea02c8380b0ea02c0a005", - "0x610701802c0280c01601402907016014028051da0303a8f002202c7680b", - "0x880503602c8380b02002c0800500a41c058050180141001701890882811", - "0x8380b03e02c8280500a41c058050180141100b48607c0f00c20e0300d80b", - "0x880c3ac0148180b20e02c8180b0400148180b20e02c1180b02e0141180b", - "0x2907016410058cf00a0148380b00a030028140169108201801841c06103", - "0x60051fe02d2282b0520308380c03c02c0880503c02c8380b03c02c11005", - "0x1000505c02c8380b05802c0b80505802c8380b05602c8280500a41c05805", - "0x280c00a3f805a460620bc061070180b80c00c3b20141700b20e02c1700b", - "0x1480b0220141480b20e02c1480b044014029070160c4058a600a0148380b", - "0x280520e02c8480b1fe014029070160140600506c02d238342120308380c", - "0x28d301641c058d2016348028d201641c0580506c014029070160d005909", - "0x5907016030058d300a414059070164140581400a0bc059070160bc05904", - "0x280520e02c0280c00a34c0610505e044058d301641c058d30163500280c", - "0x28d401641c058d40160e8028d401641c05805072014029070160d8058ff", - "0x8180500a41c058050180146f03c0189201d03901841c060d420a0bc0803c", - "0x2104001841c0583f0161340283f01641c058051bc0146f80b20e02c1d00b", - "0x590701639c0585100a39c05907016108058f500a0148380b08002c78805", - "0x58df0160500283901641c05839016410028eb01641c058e801614c028e8", - "0x1c8110163ac059070163ac058d400a03005907016030058d300a37c05907", - "0x583c016410028ec01641c058de01640c0280520e02c0280c00a3ac060df", - "0x8380b00a0300280549202c0282b00a0f4059070163b00581400a13005907", - "0x8380b1fc02c8200509a02c8380b20a02c8180500a41c058290163fc02805", - "0x29070160140600500a928058050560147a80b20e02c2680b0280147880b", - "0x59070160600590400a144059070164140590300a0148380b1fe02c7f805", - "0x280520e02c0280c00a0152500b00a0ac028f501641c05851016050028f1", - "0x7880b20e02c0a00b2080142980b20e02c8280b20601402907016078058ff", - "0x7f80500a41c0580501801402a4a016014158051ea02c8380b0a602c0a005", - "0x28f101641c05811016410028f901641c0590501640c0280520e02c1100b", - "0x2c00b20e02c2b00b1a40142b00b20e02c0285800a3d4059070163e405814", - "0x8380b01802c698051ea02c8380b1ea02c0a0051e202c8380b1e202c82005", - "0x2907016014060050b00307a8f102202c2c00b20e02c2c00b1a80140600b", - "0x590701605c0590400a3e8059070160800590300a0148380b02002c7d005", - "0x8380b0b402c690050b402c8380b00a1680283d01641c058fa0160500284c", - "0x600b1a60141e80b20e02c1e80b0280142600b20e02c2600b2080142e00b", - "0x58054960142e00c07a1300880b0b802c8380b0b802c6a00501802c8380b", - "0x580b01602c0590701601405a4c00a014059070160140582000a01405907", - "0x590701601405a4c00a014059070160140582000a0140590701601526805", - "0x5a4c00a014059070160140582000a014059070160152700501602c0580b", - "0x800b20e02c0600b020014029070160141e80501602c0580b01641c05805", - "0x8280b20a014029070160140600502e02d279050220308380c02002c08805", - "0xd80503602c8380b03602c1000503602c8380b04002c0b80504002c8380b", - "0x8380b00a0300281f016940029070180780581e00a0780d80c20e02c0d80b", - "0x8380c02202c0880502202c8380b02202c1100500a41c0581b01607c02805", - "0xb80503002c8380b04602c8280500a41c058050180148180b4a208c1100c", - "0x282901641c058220163d40281401641c058054a40148200b20e02c0c00b", - "0x59070160a40585c00a02c0590701602c0581400a0140590701601405904", - "0x580520a9500290401641c059040160800281401641c0581401694c02829", - "0x600505e02d2a82e01641c0602c0164400282c1fe0ac081070164100a029", - "0x12c10901641c060fe01695c028fe0620308380b05c02d2b00500a41c05805", - "0x8380b21202d2c80506c02c8380b1fe02c8180500a41c058050180141a00b", - "0x5a5c00a3500590701634c1880c4b60146980b20e02c6900b4b40146900b", - "0x283601641c058360160500282b01641c0582b0164100283901641c058d4", - "0x7f80b20601402907016014060050720d8158100160e4059070160e40590f", - "0x12e8051bc02c8380b07402c0a00507802c8380b05602c8200507402c8380b", - "0x600500a978058050560141f80b20e02c1880b0b80146f80b20e02c1a00b", - "0xa00505602c8380b05602c8200508002c8380b05e02d2f80500a41c05805", - "0x280c00a1007f82b02002c2000b20e02c2000b21e0147f80b20e02c7f80b", - "0x8180b1ea0147380b20e02c0283100a1080590701602c0590300a0148380b", - "0x12e8051bc02c8380b08402c0a00507802c8380b00a02c820051d002c8380b", - "0x7580b20e02c6f80b4c00141f80b20e02c7400b0b80146f80b20e02c7380b", - "0x583c0164100284c01641c058ec016970028ec01641c058eb07e0312d805", - "0x1e010016130059070161300590f00a378059070163780581400a0f005907", - "0x5907016044058f500a0148380b03e02c1600500a41c05805018014260de", - "0x58f1016080028f101641c0584d0360301780509a02c8380b00a0b80283d", - "0x590300a0148380b00a030028f5016984029070183c40581e00a3c405907", - "0x12d0051f202c8380b0a602d310050a602c8380b00a0c40285101641c0580b", - "0x590701616005a5c00a160059070161581e80c4b60142b00b20e02c7c80b", - "0x58fa01643c0285101641c058510160500280501641c05805016410028fa", - "0x280520e02c7a80b05801402907016014060051f4144028100163e805907", - "0x2f00b20e02c2e00b4c00142e00b20e02c0283100a1680590701602c05903", - "0x58050164100286101641c0585f0169700285f01641c0585e07a0312d805", - "0x2810016184059070161840590f00a168059070161680581400a01405907", - "0x5907016014188051f002c8380b01602c8180500a41c058050180143085a", - "0x328f701896c028f701641c058170163d40286501641c0586301698002863", - "0xa00500a02c8380b00a02c820050d402c8380b0d002d2e0050d002c8380b", - "0x283d00a1a87c00502002c3500b20e02c3500b21e0147c00b20e02c7c00b", - "0x8380b00a0300282002e031319050220308380c0160140600b00a0148380b", - "0x28220169940f81e01841c0601b0169900281b01641c0580c01645c02805", - "0x290301641c0581f0169980282301641c0590501640c0280520e02c0280c", - "0x59070164100582000a41005907016060058dc00a0600590701640c0589d", - "0x880b2080141480b20e02c0f00b0da0140a00b20e02c820100183ac02904", - "0x7600505202c8380b05202c7900504602c8380b04602c0a00502202c8380b", - "0x158100160b07f82b02041c0581405208c088110e00140a00b20e02c0a00b", - "0x59070164140590300a0148380b04402d3380500a41c05805018014160ff", - "0x58310169a40283101641c0582f0200313400505e02c8380b00a0c40282e", - "0x5a6a00a0b8059070160b80581400a044059070160440590400a3f805907", - "0x8380b02002c7880500a41c058050180147f02e022040058fe01641c058fe", - "0x590701642405a6c00a424059070160142d00500a41c0580c0169ac02805", - "0x58340169a80282001641c058200160500281701641c0581701641002834", - "0x8380c01802c0880501802c8380b01602c080050680800b8100160d005907", - "0xb80502e02c8380b02202c8280500a41c058050180148280b4da0440800c", - "0x61070180800280c3b20141000b20e02c1000b0400141000b20e02c0b80b", - "0x581100a040059070160400582200a0148380b00a0300281f0169b80f01b", - "0x590701608c0590500a0148380b00a030029030169bc1182201841c06010", - "0x8201b0187640290401641c059040160800290401641c0581801605c02818", - "0x1100b20e02c1100b044014029070160140600505602d380290280308380c", - "0x1600b20a014029070160140600505c02d3882c1fe0308380c04402c08805", - "0xec80506202c8380b06202c1000506202c8380b05e02c0b80505e02c8380b", - "0x58ff0163d40280520e02c0280c00a0d005a722123f8061070180c40a00c", - "0x28d301641c058d20163bc028d201641c059090520780827300a0d805907", - "0x590701634c0590c00a0d8059070160d80585c00a3f8059070163f805904", - "0x58a600a0148380b03c02c5300500a41c05805018014698361fc040058d3", - "0x1580507202c8380b1fe02c110051a802c8380b06802c8200500a41c05829", - "0x58290162980280520e02c0f00b14c014029070160140600500a9d005805", - "0x58050560141c80b20e02c1700b0440146a00b20e02c0a00b20801402907", - "0x59070160ac0590400a0148380b03c02c5300500a41c0580501801402a74", - "0x280520e02c0280c00a0153a00b00a0ac0283901641c05822016088028d4", - "0x1c80b20e02c8180b0440146a00b20e02c0d80b20801402907016078058a6", - "0x110051a802c8380b03e02c8200500a41c0580501801402a7401601415805", - "0x280b208014029070160140600500a9d0058050560141c80b20e02c0800b", - "0x587900a0e8059070160141880507202c8380b20a02c110051a802c8380b", - "0x583c01641c0583c016430028de01641c058390163d40283c01641c0583a", - "0x800b0220140800b20e02c0600b020014029070160141e8050783786a010", - "0x1000b20e02c8280b20a014029070160140600502e02d3a9050220308380c", - "0x8380b03602c1000503c02c8380b02202c7a80503602c8380b04002c0b805", - "0x28220169d80290701807c0581e00a07c0d80c20e02c0d80b0360140d80b", - "0xa00500a02c8380b00a02c8200500a41c0581b01607c0280520e02c0280c", - "0x8380b03c02c028104ee0140f00b20e02c0f00b0b80140580b20e02c0580b", - "0x280520e02c0280c00a05005a7920802c8380c03002d3c00503040c11810", - "0x280c00a0b005a7c1fe02c8380c05602d3d8050560a40610701641005a7a", - "0x5a7e00a0bc059070163fc05a7d00a0b80590701640c0590300a0148380b", - "0x8480b20e02c7f00b5000147f00b20e02c188290189fc0283101641c0582f", - "0x8380b21202d4080505c02c8380b05c02c0a00504602c8380b04602c82005", - "0x283401641c0590301640c0280520e02c0280c00a4241702302002c8480b", - "0x8380b1a402d400051a402c8380b06c0a40627f00a0d8059070160b005a82", - "0x6980b5020141a00b20e02c1a00b0280141180b20e02c1180b2080146980b", - "0x590701605005a8300a0148380b00a030028d306808c0800b1a602c8380b", - "0x58d4016a040290301641c059030160500282301641c05823016410028d4", - "0x280520e02c1100b05801402907016014060051a840c1181001635005907", - "0x59070160e80582000a0e8059070160e40d80c05e0141c80b20e02c0282e", - "0x580b01640c0280520e02c0280c00a0f005a8400a41c0603a0160780283a", - "0x1f80b4fc0141f80b20e02c6f80b50a0146f80b20e02c0283100a37805907", - "0x28e701641c05842016a000284201641c0584003c0313f80508002c8380b", - "0x590701639c05a8100a378059070163780581400a0140590701601405904", - "0x590300a0148380b07802c1600500a41c05805018014738de00a040058e7", - "0x13f8051d802c8380b1d602d410051d602c8380b00a0c4028e801641c0580b", - "0x59070160140590400a0f40590701613005a8000a130059070163b00f00c", - "0x1e8e800a0400583d01641c0583d016a04028e801641c058e801605002805", - "0x28f101641c058050620142680b20e02c0580b2060140290701601406005", - "0x8380b1ea1440627f00a1440590701605c058f500a3d4059070163c405a82", - "0x2680b0280140280b20e02c0280b2080147c80b20e02c2980b5000142980b", - "0x8380b00a0f4028f909a0140800b1f202c8380b1f202d4080509a02c8380b", - "0x280520e02c0280c00a0800b80c50c4140880c20e0300580501802c02805", - "0x280c00a08805a8803e0780610701806c05a8700a06c0590701603005a0e", - "0x58ee00a40c0590701607c05a8900a08c059070164140590300a0148380b", - "0x290401641c059040160800290401641c058180163d80281801641c05903", - "0x8380b02202c8200505202c8380b03c02c7480502802c8380b208040060eb", - "0xa00b1d80141480b20e02c1480b1160141180b20e02c1180b0280140880b", - "0x160ff0560400582c1fe0ac08107016050148230220444680502802c8380b", - "0x282e01641c0590501640c0280520e02c1100b5140140290701601406005", - "0x59070160c405a6900a0c4059070160bc0800c4d00141780b20e02c02831", - "0x58fe0169a80282e01641c0582e0160500281101641c05811016410028fe", - "0x280520e02c0800b1e201402907016014060051fc0b8088100163f805907", - "0x283401641c059090169b00290901641c058050b40140290701603005a0b", - "0x59070160d005a6a00a080059070160800581400a05c0590701605c05904", - "0x800c20e0300600b0220140600b20e02c0580b0200141a02002e04005834", - "0xb80b02e0140b80b20e02c0880b20a014029070160140600520a02d45811", - "0x281b0400308380b04002c0d80504002c8380b04002c1000504002c8380b", - "0x29070160800581f00a0148380b00a0300281e016a300290701806c0581e", - "0x600504602d4682203e0308380c02002c0880502002c8380b02002c11005", - "0x1000503002c8380b20602c0b80520602c8380b04402c8280500a41c05805", - "0x29070184100581e00a4100c00c20e02c0c00b0360140c00b20e02c0c00b", - "0x8380b03e02c1100500a41c0581801607c0280520e02c0280c00a05005a8e", - "0x8280500a41c058050180147f80b51e0ac1480c20e0300f80b0220140f80b", - "0x1700b20e02c1700b0400141700b20e02c1600b02e0141600b20e02c1580b", - "0x58f500a0148380b00a030028fe016a401882f01841c0602e00a03011805", - "0x283601641c05834016a440283401641c058310160600290901641c05829", - "0x59070164240585c00a0bc059070160bc0590400a348059070160d805a92", - "0x8200500a41c058050180146910905e040058d201641c058d2016a4c02909", - "0x600500aa50058050560146a00b20e02c1480b0440146980b20e02c7f00b", - "0x158051a802c8380b1fe02c110051a602c8380b00a02c8200500a41c05805", - "0x8380b00a0b80280520e02c0a00b058014029070160140600500aa5005805", - "0x581e00a0e8059070160e80582000a0e8059070160e40c00c05e0141c80b", - "0x7f0051bc02c8380b00a0c40280520e02c0280c00a0f005a9500a41c0603a", - "0x2000b20e02c6f80b5220141f80b20e02c0f80b1ea0146f80b20e02c6f00b", - "0x8380b07e02c2e00500a02c8380b00a02c8200508402c8380b08002d49005", - "0x280520e02c0280c00a1081f80502002c2100b20e02c2100b5260141f80b", - "0x7400b20e02c0f80b0440147380b20e02c0280b208014029070160f00582c", - "0x110051a602c8380b00a02c8200500a41c0580501801402a9601601415805", - "0x7400b20e02c6a00b52e0147380b20e02c6980b1f20146a00b20e02c1180b", - "0x58f500a0148380b03c02c1600500a41c0580501801402a9601601415805", - "0x284c01641c058ec040030178051d802c8380b00a0b8028eb01641c05810", - "0x8380b00a0300283d016a60029070181300581e00a1300590701613005820", - "0x8380b1e202d490051e202c8380b09a02d4c80509a02c8380b00a0c402805", - "0x7a80b5260147580b20e02c7580b0b80140280b20e02c0280b2080147a80b", - "0x29070160f40582c00a0148380b00a030028f51d60140800b1ea02c8380b", - "0x59070160140590400a14c0590701614405a9a00a1440590701601418805", - "0x298eb00a0400585301641c05853016a4c028eb01641c058eb01617002805", - "0x7400b20e02c8280b0440147380b20e02c0280b2080140290701601406005", - "0x59070163a0058f500a158059070163e405a9a00a3e40590701601418805", - "0x600b20e02c0580b0200142b0581ce0400585601641c05856016a4c02858", - "0x880b20a014029070160140600520a02d4d8110200308380c01802c08805", - "0xd80504002c8380b04002c1000504002c8380b02e02c0b80502e02c8380b", - "0x8380b00a0300281e016a700290701806c0581e00a06c1000c20e02c1000b", - "0x8380c02002c0880502002c8380b02002c1100500a41c0582001607c02805", - "0xb80520602c8380b04402c8280500a41c058050180141180b53a0880f80c", - "0x61070180600280c53c0140c00b20e02c0c00b0400140c00b20e02c8180b", - "0x5aa000a0ac0590701607c058f500a0148380b00a03002829016a7c0a104", - "0x290401641c059040164100282c01641c058ff0160dc028ff01641c05814", - "0x60050580ac820100160b0059070160b00589900a0ac059070160ac0585c", - "0x1580505e02c8380b03e02c1100505c02c8380b05202c8200500a41c05805", - "0x1180b0440141700b20e02c0280b208014029070160140600500aa8405805", - "0x8380b03c02c1600500a41c0580501801402aa10160141580505e02c8380b", - "0x58fe016080028fe01641c058310400301780506202c8380b00a0b802805", - "0x582200a0148380b00a03002909016a88029070183f80581e00a3f805907", - "0x8380b00a030028d2016a8c1b03401841c060100160440281001641c05810", - "0x58d4016080028d401641c058d301605c028d301641c0583601641402805", - "0x29070160140600507802d5203a0720308380c1a80140602300a35005907", - "0x8380b1be02c1b8051be02c8380b07402d528051bc02c8380b06802c7a805", - "0x1f80b1320146f00b20e02c6f00b0b80141c80b20e02c1c80b2080141f80b", - "0x59070160f00590400a0148380b00a0300283f1bc0e40800b07e02c8380b", - "0x280520e02c0280c00a0155080b00a0ac0282f01641c058340160880282e", - "0x280554202c0282b00a0bc059070163480582200a0b80590701601405904", - "0x1880508002c8380b02002c7a80500a41c059090160b00280520e02c0280c", - "0x280501641c05805016410028e701641c058420163800284201641c05805", - "0x60051ce1000281001639c0590701639c0589900a100059070161000585c", - "0x1880505e02c8380b20a02c1100505c02c8380b00a02c8200500a41c05805", - "0x28ec01641c0582f0163d4028eb01641c058e8016380028e801641c05805", - "0x880501802c8380b01602c080051d63b0170100163ac059070163ac05899", - "0x8380b02202c8280500a41c058050180148280b54c0440800c20e0300600b", - "0x1000b0360141000b20e02c1000b0400141000b20e02c0b80b02e0140b80b", - "0x280520e02c0280c00a07805aa700a41c0601b0160780281b0400308380b", - "0xf80c20e0300800b0220140800b20e02c0800b044014029070160800581f", - "0x8180b02e0148180b20e02c1100b20a014029070160140600504602d54022", - "0xa10401841c0601800a030eb00503002c8380b03002c1000503002c8380b", - "0x601f0160440281f01641c0581f0160880280520e02c0280c00a0a405aa9", - "0x282e01641c058ff0164140280520e02c0280c00a0b005aaa1fe0ac06107", - "0x8380c05e410061d900a0bc059070160bc0582000a0bc059070160b805817", - "0xee80506802c8380b05602c7a80500a41c058050180148480b5563f81880c", - "0x590701634805aac00a348059070160d80591b00a0d8059070163f80a00c", - "0x58d3016ab40283401641c058340161700283101641c05831016410028d3", - "0x280520e02c0a00b19e01402907016014060051a60d01881001634c05907", - "0x280555c02c0282b00a0e4059070160ac0582200a3500590701642405904", - "0x110051a802c8380b20802c8200500a41c0581401633c0280520e02c0280c", - "0x1480b208014029070160140600500aab8058050560141c80b20e02c1600b", - "0x580501801402aae0160141580507202c8380b03e02c110051a802c8380b", - "0x58050560141c80b20e02c1180b0440146a00b20e02c0280b20801402907", - "0x5907016040058f500a0148380b03c02c1600500a41c0580501801402aae", - "0x58de016080028de01641c0583c0400301780507802c8380b00a0b80283a", - "0x283100a0148380b00a030028df016abc029070183780581e00a37805907", - "0x8200508402c8380b08002d5600508002c8380b07e02d5800507e02c8380b", - "0x2100b20e02c2100b55a0141d00b20e02c1d00b0b80140280b20e02c0280b", - "0x58050620140290701637c0582c00a0148380b00a030028420740140800b", - "0x585c00a014059070160140590400a3a00590701639c05ab100a39c05907", - "0x58050180147403a00a040058e801641c058e8016ab40283a01641c0583a", - "0x58050620141c80b20e02c8280b0440146a00b20e02c0280b20801402907", - "0x5aad00a130059070160e4058f500a3b0059070163ac05ab100a3ac05907", - "0x600b00a0300580500a41c0580507a0147604c1a8040058ec01641c058ec", - "0x880c20e02c0880b0360140290701601406005036080062b202e41406107", - "0x581101607c0280520e02c0280c00a07c05ab300a41c0601e0160780281e", - "0x600c56a0141180b20e02c0800b5680141100b20e02c0b80b20601402907", - "0x290501641c059050164100281801641c059030164680290301641c05823", - "0x6005030088828100160600590701606005ab600a0880590701608805814", - "0x581100a410059070160300581000a0148380b03e02c1600500a41c05805", - "0x59070160a40590500a0148380b00a0300282b016adc1481401841c06104", - "0x582c01606c0282c01641c0582c0160800282c01641c058ff01605c028ff", - "0xf80500a41c058050180141780b5700148380c05c02c0f00505c0b006107", - "0x7f03101841c060140160440281401641c058140160880280520e02c1600b", - "0x583401605c0283401641c058fe0164140280520e02c0280c00a42405ab9", - "0x15d0d31a40308380c06c4140602300a0d8059070160d80582000a0d805907", - "0x8380b1a602c0c00507202c8380b02e02c8180500a41c058050180146a00b", - "0x1d00b0520146f00b20e02c1c80b0280141e00b20e02c6900b2080141d00b", - "0x580501801402abb0160141580507e02c8380b06202c110051be02c8380b", - "0x8380b02e02c8180500a41c0581101607c0280520e02c0800b17801402907", - "0x1880b0440147380b20e02c2000b0280142100b20e02c6a00b2080142000b", - "0x8380b02002c5e00500a41c0580501801402abc016014158051d002c8380b", - "0x8380b20a02c820051d602c8380b02e02c8180500a41c0581101607c02805", - "0x58050560147400b20e02c8480b0440147380b20e02c7580b0280142100b", - "0x7600b20e02c0282e00a0148380b05e02c1600500a41c0580501801402abc", - "0x604c0160780284c01641c0584c0160800284c01641c058ec05803017805", - "0x283100a1340590701605c0590300a0148380b00a0300283d016af402907", - "0xa00507802c8380b20a02c820051ea02c8380b1e202c7f0051e202c8380b", - "0x1f80b20e02c0a00b0440146f80b20e02c7a80b0520146f00b20e02c2680b", - "0x5853022030178050a602c8380b00a0b80285101641c058df0200315f005", - "0x581400a0f0059070160f00590400a158059070160fc058f500a3e405907", - "0x285101641c058510163180285601641c05856016170028de01641c058de", - "0x585a1f4160081070163e4288561bc0f0828c500a3e4059070163e405820", - "0x58100162f00280520e02c1e80b05801402907016014060050b43e82c010", - "0x59050164100285c01641c0581701640c0280520e02c0880b03e01402907", - "0x282b00a184059070160500582200a17c059070161700581400a17805907", - "0x8380b02202c0f80500a41c058100162f00280520e02c0280c00a0155f80b", - "0x58f80160500284201641c05905016410028f801641c0581701640c02805", - "0x585600a17805907016108058f900a3a0059070160ac0582200a39c05907", - "0x1600050c602c8380b00a0c40286101641c058e8016a5c0285f01641c058e7", - "0x59070161947b80c56a0147b80b20e02c3080b1ea0143280b20e02c3180b", - "0x585f0160500285e01641c0585e0164100286a01641c0586801646802868", - "0x2907016014060050d417c2f0100161a8059070161a805ab600a17c05907", - "0x280520e02c0600b1f401402907016040058bc00a0148380b02202c0f805", - "0x1000b20e02c1000b2080143680b20e02c7b00b5820147b00b20e02c0285a", - "0x286d0360800800b0da02c8380b0da02d5b00503602c8380b03602c0a005", - "0x280c00a0800b80c5844140880c20e0300580501802c0280520e02c0283d", - "0x5ac503e0780610701806c05ac400a06c0590701603005ac300a0148380b", - "0x59070160780595400a08c0590701607c05ac600a0148380b00a03002822", - "0x590701808c0584000a08c0590701608c0582900a0148380b00a0fc02903", - "0xc00b0840140a00b20e02c8280b206014029070160140600520802d63818", - "0x582000a3fc059070160147400505602c8380b05202c7380505202c8380b", - "0x59070160ac1600c1d60141600b20e02c7f8100183ac028ff01641c058ff", - "0x16400b00a0ac0283101641c0582e0163b00282f01641c058140160500282e", - "0x7f00b20e02c8280b206014029070164100584c00a0148380b00a03002805", - "0x8380b212040060eb00a424059070164240582000a4240590701601417005", - "0x580507a0141880b20e02c1a00b1d80141780b20e02c7f00b0280141a00b", - "0x8180b2aa0141780b20e02c1780b0280140880b20e02c0880b20801402907", - "0x81070160c48182f022044ab00506202c8380b06202c7600520602c8380b", - "0x280520e02c1100b59201402907016014060051a63481b01001634c69036", - "0x59070160e40800c4d00141c80b20e02c0283100a3500590701641405903", - "0x58d40160500281101641c058110164100283c01641c0583a0169a40283a", - "0x290701601406005078350088100160f0059070160f005a6a00a35005907", - "0x28de01641c058050b401402907016040058f100a0148380b01802d65005", - "0x59070160800581400a05c0590701605c0590400a37c0590701637805a6c", - "0x800500a41c0580507a0146f82002e040058df01641c058df0169a802820", - "0x58050180140b80b5964140880c20e0300800b0220140800b20e02c0600b", - "0xd80b0400140d80b20e02c1000b02e0141000b20e02c8280b20a01402907", - "0x5acc00a41c0601e0160780281e0360308380b03602c0d80503602c8380b", - "0x880b20e02c0880b0440140290701606c0581f00a0148380b00a0300281f", - "0x1180b20a014029070160140600520602d668230440308380c02202c08805", - "0x58f500a050059070160152900520802c8380b03002c0b80503002c8380b", - "0x280b01641c0580b0160500280501641c058050164100282901641c05822", - "0x59070164100582000a0500590701605005a5300a0a4059070160a40585c", - "0x59070180b00591000a0b07f82b02041c059040280a40580520a95002904", - "0x5a5700a3f81880c20e02c1700b4ac014029070160140600505e02d6702e", - "0x1b00b20e02c7f80b206014029070160140600506802d6790901641c060fe", - "0x58d3062031690051a602c8380b1a402d688051a402c8380b21202d68005", - "0x581400a0ac059070160ac0590400a0e40590701635005ad300a35005907", - "0x58050180141c8360560400583901641c058390164700283601641c05836", - "0x1d00b0280141e00b20e02c1580b2080141d00b20e02c7f80b20601402907", - "0x1580507e02c8380b06202c2e0051be02c8380b06802d2e8051bc02c8380b", - "0x1580b2080142000b20e02c1780b5aa014029070160140600500ab5005805", - "0x800b08002c8380b08002c8e0051fe02c8380b1fe02c0a00505602c8380b", - "0x8380b00a0c40284201641c0580b01640c0280520e02c0280c00a1007f82b", - "0x2100b0280141e00b20e02c0280b2080147400b20e02c8180b1ea0147380b", - "0x1580507e02c8380b1d002c2e0051be02c8380b1ce02d2e8051bc02c8380b", - "0x8380b00a0b80280520e02c0f80b058014029070160140600500ab5005805", - "0x581e00a3b0059070163b00582000a3b0059070163ac0d80c05e0147580b", - "0x281101641c058110160880280520e02c0280c00a13005ad600a41c060ec", - "0x584d0164140280520e02c0280c00a3c405ad709a0f40610701804405811", - "0x1e80b1ea0142980b20e02c02ad800a144059070163d40581700a3d405907", - "0x2e00501602c8380b01602c0a00500a02c8380b00a02c820051f202c8380b", - "0x2880b20e02c2880b0400142980b20e02c2980b5b20147c80b20e02c7c80b", - "0x2d00b20e0307d00b5b60147d0580ac0408380b0a214c7c80b00a4156d005", - "0x2f80b5bc0142f85e01841c0585a016b740280520e02c0280c00a17005adc", - "0x286301641c0585801640c0280520e02c0280c00a3e005adf0c202c8380c", - "0x8380b1ee178062d200a3dc0590701619405ad100a1940590701618405ae0", - "0x3180b0280142b00b20e02c2b00b2080143500b20e02c3400b5a60143400b", - "0x8380b00a0300286a0c61580800b0d402c8380b0d402c8e0050c602c8380b", - "0x58f60160500283c01641c05856016410028f601641c0585801640c02805", - "0x282b00a0fc059070161780585c00a37c059070163e005a5d00a37805907", - "0x58560164100286d01641c0585c016b540280520e02c0280c00a0156a00b", - "0x2b0100161b4059070161b40591c00a160059070161600581400a15805907", - "0x5907016014188051e402c8380b01602c8180500a41c0580501801436858", - "0x58f20160500283c01641c058050164100287201641c058f10163d402870", - "0x5ae100a0fc059070161c80585c00a37c059070161c005a5d00a37805907", - "0x3b80b20e02c3a80b5a60143a80b20e02c7803f018b48028f001641c058df", - "0x8380b0ee02c8e0051bc02c8380b1bc02c0a00507802c8380b07802c82005", - "0x8180500a41c0584c0160b00280520e02c0280c00a1dc6f03c02002c3b80b", - "0x287901641c058050620148600b20e02c0880b1ea0147780b20e02c0580b", - "0x8380b0f602d698050f602c8380b21a430062d200a434059070161e405ae1", - "0x3e80b2380147780b20e02c7780b0280140280b20e02c0280b2080143e80b", - "0x590701602c0590300a0148380b00a0300287d1de0140800b0fa02c8380b", - "0x8380b02e02c7a8050fe02c8380b10002d7080510002c8380b00a0c4028ee", - "0x590400a210059070163b405ad300a3b4059070161fc4100c5a40144100b", - "0x588401641c05884016470028ee01641c058ee0160500280501641c05805", - "0x62e220a0440610701802c0280c016014029070160141e8051083b802810", - "0x8380c03602d7200503602c8380b01802d7180500a41c0580501801410017", - "0x8f80504602c8380b20a02c8180500a41c058050180141100b5ca07c0f00c", - "0x8200b20e02c0c00b1ce0140c00b20e02c8180b0840148180b20e02c0f80b", - "0x581e0166180281401641c059040200307580520802c8380b20802c10005", - "0x598700a08c0590701608c0581400a044059070160440590400a0a405907", - "0x8380b0280a4118110226200281401641c058140163b00282901641c05829", - "0x290701608805ae600a0148380b00a0300282c1fe0ac0800b0583fc15810", - "0x8380b05e0400626800a0bc059070160141880505c02c8380b20a02c81805", - "0x1700b0280140880b20e02c0880b2080147f00b20e02c1880b4d20141880b", - "0x8380b00a030028fe05c0440800b1fc02c8380b1fc02d3500505c02c8380b", - "0x8480b20e02c0285a00a0148380b01802d7380500a41c058100163c402805", - "0x8380b04002c0a00502e02c8380b02e02c8200506802c8380b21202d36005", - "0x590701602c0581000a0d01001702002c1a00b20e02c1a00b4d40141000b", - "0x590500a0148380b00a03002905016ba00881001841c0600c0160440280c", - "0x281001641c058100160880282001641c0581701605c0281701641c05811", - "0x8380b04002c1000503c02c8380b03602c7a8050360400610701604005ae9", - "0x2822016ba80290701807c0581e00a07c1000c20e02c1000b0360141000b", - "0x590400a0148380b04002c0f80500a41c058100163fc0280520e02c0280c", - "0x1181020e02c0f0050181d40281e01641c0581e0161700280501641c05805", - "0x5aec00a0148380b00a03002814016bac8200b20e0300c00b0ee0140c103", - "0x282301641c058230164100282b01641c05829016bb40282901641c05904", - "0x600505640c118100160ac059070160ac05aee00a40c0590701640c0585c", - "0x2e00504602c8380b04602c820051fe02c8380b02802d7780500a41c05805", - "0x280c00a3fc8182302002c7f80b20e02c7f80b5dc0148180b20e02c8180b", - "0x160200180bc0282c01641c0580505c014029070160880582c00a0148380b", - "0x1780b5e00148380c05c02c0f00505c02c8380b05c02c1000505c02c8380b", - "0x7f03101841c060100160440280520e02c0f00b1f40140290701601406005", - "0x583401605c0283401641c058fe0164140280520e02c0280c00a42405af1", - "0x1790d31a40308380c06c0140602300a0d8059070160d80582000a0d805907", - "0x8380c06202c0880506202c8380b06202c1100500a41c058050180146a00b", - "0xb8051bc02c8380b07402c8280500a41c058050180141e00b5e60e81c80c", - "0x610701837c6900c0460146f80b20e02c6f80b0400146f80b20e02c6f00b", - "0x62f500a39c059070160e4058f500a0148380b00a03002842016bd02003f", - "0x7600b20e02c7580b5da0147580b20e02c7400b5ec0147400b20e02c200d3", - "0x8380b1d802d770051ce02c8380b1ce02c2e00507e02c8380b07e02c82005", - "0x8200500a41c058d301657c0280520e02c0280c00a3b07383f02002c7600b", - "0x600500abdc058050560141e80b20e02c1c80b0440142600b20e02c2100b", - "0x582200a130059070163480590400a0148380b1a602caf80500a41c05805", - "0x58d40164100280520e02c0280c00a0157b80b00a0ac0283d01641c0583c", - "0x8380b00a030028055ee02c0282b00a0f4059070160c40582200a13005907", - "0x17b80b00a0ac0283d01641c059090160880284c01641c0580501641002805", - "0x280520e02c0800b1fe014029070160bc0582c00a0148380b00a03002805", - "0x280b20e02c0280b2080147880b20e02c2680b5de0142680b20e02c02831", - "0x28f103c0140800b1e202c8380b1e202d7700503c02c8380b03c02c2e005", - "0x283d01641c059050160880284c01641c058050164100280520e02c0280c", - "0x2980b20e02c1e80b1ea0142880b20e02c7a80b5de0147a80b20e02c02831", - "0x581000a0148380b00a0f4028510a61300800b0a202c8380b0a202d77005", - "0x8380b00a03002817016be08281101841c060100160440281001641c0580c", - "0x58110163d40281b01641c0582001605c0282001641c0590501641402805", - "0xf00503e06c0610701606c0581b00a06c0590701606c0582000a07805907", - "0x280520e02c0d80b03e014029070160140600504402d7c80520e0300f80b", - "0x59070160780585c00a02c0590701602c0581400a0140590701601405904", - "0x17d10401641c060180169e00281820608c08107016078058050209dc0281e", - "0x602b0169ec0282b0520308380b20802d3d00500a41c058050180140a00b", - "0x17e00505c02c8380b20602c8180500a41c058050180141600b5f63fc05907", - "0x59070160c41480c5fc0141880b20e02c1780b5fa0141780b20e02c7f80b", - "0x582e0160500282301641c058230164100290901641c058fe016bfc028fe", - "0x2907016014060052120b8118100164240590701642405b0000a0b805907", - "0x8380b06802c0a00506c02c8380b04602c8200506802c8380b20602c81805", - "0x58050560146a00b20e02c1480b0b80146980b20e02c1600b4ba0146900b", - "0x8380b04602c8200507202c8380b02802d8100500a41c0580501801402b01", - "0x8182302002c1c80b20e02c1c80b6000148180b20e02c8180b0280141180b", - "0x283a01641c0580505c014029070160880582c00a0148380b00a03002839", - "0x8380c07802c0f00507802c8380b07802c1000507802c8380b07406c0602f", - "0x580b0280140280b20e02c0280b20801402907016014060051bc02d81805", - "0x6f81020e02c0f00b00a0418200503c02c8380b03c02c2e00501602c8380b", - "0x5b0700a0148380b00a030028e7016c182100b20e0302000b60a0142003f", - "0x8380b00a0300284c016c247600b20e0307580b610014758e801841c05842", - "0x584d016bf40284d01641c058ec016c280283d01641c0583f01640c02805", - "0x820050a202c8380b1ea02d7f8051ea02c8380b1e23a0062fe00a3c405907", - "0x2880b20e02c2880b6000141e80b20e02c1e80b0280146f80b20e02c6f80b", - "0x590400a14c059070160fc0590300a0148380b00a0300285107a37c0800b", - "0x28d301641c0584c016974028d201641c058530160500283601641c058df", - "0x8380b1f2350062fe00a3e40590701634c05b0b00a350059070163a00585c", - "0x6900b0280141b00b20e02c1b00b2080142c00b20e02c2b00b5fe0142b00b", - "0x8380b00a030028581a40d80800b0b002c8380b0b002d800051a402c8380b", - "0x583f016050028df01641c058df016410028fa01641c058e7016c0802805", - "0x2907016014060051f40fc6f8100163e8059070163e805b0000a0fc05907", - "0x2e00b20e02c0283100a1680590701602c0590300a0148380b1bc02c16005", - "0x585f016bfc0285f01641c0585e03c0317f0050bc02c8380b0b802d85805", - "0x5b0000a168059070161680581400a014059070160140590400a18405907", - "0x8380b01602c8180500a41c058050180143085a00a0400586101641c05861", - "0x58170163d40286501641c05863016c2c0286301641c058050620147c00b", - "0x820050d402c8380b0d002d7f8050d002c8380b0ca3dc062fe00a3dc05907", - "0x3500b20e02c3500b6000147c00b20e02c7c00b0280140280b20e02c0280b", - "0x881001841c0600c0160440280c01641c0580b0160400286a1f00140800b", - "0x581701605c0281701641c058110164140280520e02c0280c00a41405b0c", - "0x7a8050360400610701604005ae900a040059070160400582200a08005907", - "0x1000c20e02c1000b0360141000b20e02c1000b0400140f00b20e02c0d80b", - "0x58100163fc0280520e02c0280c00a08805b0d00a41c0601f0160780281f", - "0x581e0161700280501641c058050164100280520e02c1000b03e01402907", - "0x8200b20e0300c00b1c20140c1030460408380b03c014060e300a07805907", - "0x5829016c400282901641c05904016c3c0280520e02c0280c00a05005b0e", - "0x5b1100a40c0590701640c0585c00a08c0590701608c0590400a0ac05907", - "0x8380b02802d8900500a41c05805018014159030460400582b01641c0582b", - "0x7f80b6220148180b20e02c8180b0b80141180b20e02c1180b2080147f80b", - "0x29070160880582c00a0148380b00a030028ff20608c0800b1fe02c8380b", - "0x8380b05c02c1000505c02c8380b0580800602f00a0b00590701601417005", - "0xf00b1f4014029070160140600505e02d8980520e0301700b03c0141700b", - "0x280520e02c0280c00a42405b141fc0c4061070180400581100a0148380b", - "0x59070160d80582000a0d8059070160d00581700a0d0059070163f805905", - "0x7a80500a41c058050180146a00b62a34c6900c20e0301b00501876402836", - "0x1e00b20e02c1d00b6200141d00b20e02c6980b62c0141c80b20e02c1880b", - "0x8380b07802d8880507202c8380b07202c2e0051a402c8380b1a402c82005", - "0x28de01641c058d40164100280520e02c0280c00a0f01c8d202002c1e00b", - "0x590400a0148380b00a0300280562e02c0282b00a37c059070160c405822", - "0x280c00a0158b80b00a0ac028df01641c05909016088028de01641c05805", - "0x8380b00a0c40280520e02c0800b1fe014029070160bc0582c00a0148380b", - "0xf00b0b80140280b20e02c0280b2080142000b20e02c1f80b6240141f80b", - "0x8380b00a0300284003c0140800b08002c8380b08002d8880503c02c8380b", - "0x8380b00a0c4028df01641c05905016088028de01641c0580501641002805", - "0x7380b6220147400b20e02c6f80b1ea0147380b20e02c2100b6240142100b", - "0x600c0160440280c01641c0580b016040028e71d03780800b1ce02c8380b", - "0x281701641c058110164140280520e02c0280c00a41405b1802204006107", - "0x61070160800581b00a080059070160800582000a0800590701605c05817", - "0x1000b03e014029070160140600503c02d8c80520e0300d80b03c0140d820", - "0x5b1a04407c061070180400581100a040059070160400582200a0148380b", - "0x590701640c0581700a40c059070160880590500a0148380b00a03002823", - "0x1480b6360508200c20e0300c005018a780281801641c0581801608002818", - "0x7f80b20e02c0a00b6380141580b20e02c0f80b1ea0140290701601406005", - "0x8380b05602c2e00520802c8380b20802c8200505802c8380b1fe02d8e805", - "0x280520e02c0280c00a0b01590402002c1600b20e02c1600b2420141580b", - "0x280563c02c0282b00a0bc0590701607c0582200a0b8059070160a405904", - "0x282f01641c058230160880282e01641c058050164100280520e02c0280c", - "0x580505c014029070160780582c00a0148380b00a0300280563c02c0282b", - "0xf0051fc02c8380b1fc02c100051fc02c8380b0620800602f00a0c405907", - "0x800b20e02c0800b044014029070160140600521202d8f80520e0307f00b", - "0x1b00b20a01402907016014060051a402d900360680308380c02002c08805", - "0xd8051a802c8380b1a802c100051a802c8380b1a602c0b8051a602c8380b", - "0x8380b00a0300283a016c84029070180e40581e00a0e46a00c20e02c6a00b", - "0x8380c06802c0880506802c8380b06802c1100500a41c058d401607c02805", - "0xb80507e02c8380b1bc02c8280500a41c058050180146f80b6443781e00c", - "0x61070181000280c3b20142000b20e02c2000b0400142000b20e02c1f80b", - "0x5b2400a3ac059070160f0058f500a0148380b00a030028e8016c8c73842", - "0x283d01641c0584c016c740284c01641c058ec016c94028ec01641c058e7", - "0x59070160f40592100a3ac059070163ac0585c00a1080590701610805904", - "0x1100509a02c8380b1d002c8200500a41c058050180141e8eb0840400583d", - "0x280b208014029070160140600500ac98058050560147880b20e02c1e00b", - "0x580501801402b26016014158051e202c8380b1be02c1100509a02c8380b", - "0x58f51a8030178051ea02c8380b00a0b80280520e02c1d00b05801402907", - "0x2853016c9c029070181440581e00a144059070161440582000a14405907", - "0x7a8050ac02c8380b1f202d940051f202c8380b00a0c40280520e02c0280c", - "0x2d00b20e02c7d00b63a0147d00b20e02c2b00b64a0142c00b20e02c1a00b", - "0x8380b0b402c908050b002c8380b0b002c2e00500a02c8380b00a02c82005", - "0x8200500a41c058530160b00280520e02c0280c00a1682c00502002c2d00b", - "0x600500ac78058050560141780b20e02c1a00b0440141700b20e02c0280b", - "0x7c8051e202c8380b1a402c1100509a02c8380b00a02c8200500a41c05805", - "0x600500ac78058050560141780b20e02c7880b52e0141700b20e02c2680b", - "0x283100a17005907016040058f500a0148380b21202c1600500a41c05805", - "0x2e00500a02c8380b00a02c820050be02c8380b0bc02d948050bc02c8380b", - "0x280c00a17c2e00502002c2f80b20e02c2f80b2420142e00b20e02c2e00b", - "0x283100a0bc059070164140582200a0b8059070160140590400a0148380b", - "0x908050c602c8380b05e02c7a8051f002c8380b0c202d948050c202c8380b", - "0x581100a0300590701602c0581000a3e03182e02002c7c00b20e02c7c00b", - "0x59070160440590500a0148380b00a03002905016ca80881001841c0600c", - "0x582001606c0282001641c058200160800282001641c0581701605c02817", - "0xf80500a41c058050180140f00b6560148380c03602c0f00503608006107", - "0x1101f01841c060100160440281001641c058100160880280520e02c1000b", - "0x590301605c0290301641c058220164140280520e02c0280c00a08c05b2c", - "0x1968142080308380c0300140629e00a060059070160600582000a06005907", - "0x8380b02802d9700505602c8380b03e02c7a80500a41c058050180141480b", - "0x1580b0b80148200b20e02c8200b2080141600b20e02c7f80b65e0147f80b", - "0x8380b00a0300282c0564100800b05802c8380b05802d9800505602c8380b", - "0x19880b00a0ac0282f01641c0581f0160880282e01641c0582901641002805", - "0x590701608c0582200a0b8059070160140590400a0148380b00a03002805", - "0x1700500a41c0581e0160b00280520e02c0280c00a0159880b00a0ac0282f", - "0x7f00b20e02c7f00b0400147f00b20e02c188200180bc0283101641c05805", - "0x8380b02002c1100500a41c058050180148480b6640148380c1fc02c0f005", - "0x8280500a41c058050180146900b6660d81a00c20e0300800b0220140800b", - "0x6a00b20e02c6a00b0400146a00b20e02c6980b02e0146980b20e02c1b00b", - "0x582200a0148380b00a0300283c016cd01d03901841c060d400a030eb005", - "0x8380b00a0300283f016cd46f8de01841c060340160440283401641c05834", - "0x58420160800284201641c0584001605c0284001641c058df01641402805", - "0x2907016014060051d602d9b0e81ce0308380c0840e4061d900a10805907", - "0x584c0164880284c01641c058e8074030ee8051d802c8380b1bc02c7a805", - "0x585c00a39c0590701639c0590400a134059070160f405b2f00a0f405907", - "0x5805018014268ec1ce0400584d01641c0584d016cc0028ec01641c058ec", - "0x58de0160880282e01641c058eb0164100280520e02c1d00b19e01402907", - "0x29070160e8058cf00a0148380b00a0300280566202c0282b00a0bc05907", - "0x2b310160141580505e02c8380b07e02c1100505c02c8380b07202c82005", - "0x1780b20e02c1a00b0440141700b20e02c1e00b2080140290701601406005", - "0x1100505c02c8380b00a02c8200500a41c0580501801402b3101601415805", - "0x8480b058014029070160140600500acc4058050560141780b20e02c6900b", - "0x7a80b66e0147a80b20e02c0283100a3c405907016040058f500a0148380b", - "0x1980051e202c8380b1e202c2e00500a02c8380b00a02c820050a202c8380b", - "0x58050164100280520e02c0280c00a1447880502002c2880b20e02c2880b", - "0x2980b66e0142980b20e02c0283100a0bc059070164140582200a0b805907", - "0x800b1f202c8380b1f202d980050ac02c8380b05e02c7a8051f202c8380b", - "0x5b38022040061070180300581100a0300590701602c0581000a3e42b02e", - "0x590701605c0581700a05c059070160440590500a0148380b00a03002905", - "0xf80b6720780d80c20e030100050187580282001641c0582001608002820", - "0x1100c20e0300800b0220140800b20e02c0800b0440140290701601406005", - "0xc00b02e0140c00b20e02c1180b20a014029070160140600520602d9d023", - "0x1481401841c06104036030eb00520802c8380b20802c1000520802c8380b", - "0x60220160440282201641c058220160880280520e02c0280c00a0ac05b3b", - "0x282f01641c0582c0164140280520e02c0280c00a0b805b3c0583fc06107", - "0x8380c062050061d900a0c4059070160c40582000a0c4059070160bc05817", - "0xee80506c02c8380b1fe02c7a80500a41c058050180141a00b67a4247f00c", - "0x8380b1a602d9f8051a602c8380b1a40780633e00a348059070164241480c", - "0x6a00b6800141b00b20e02c1b00b0b80147f00b20e02c7f00b2080146a00b", - "0x29070160a4058cf00a0148380b00a030028d406c3f80800b1a802c8380b", - "0x59070163fc0582200a0e4059070160d00590400a0148380b03c02c67805", - "0x6780500a41c0582901633c0280520e02c0280c00a015a080b00a0ac0283a", - "0x283a01641c0582e0160880283901641c058140164100280520e02c0f00b", - "0x1580b20801402907016078058cf00a0148380b00a0300280568202c0282b", - "0x580501801402b410160141580507402c8380b04402c1100507202c8380b", - "0x59030160880283901641c0581b0164100280520e02c0f00b19e01402907", - "0x590701607c0590400a0148380b00a0300280568202c0282b00a0e805907", - "0x280520e02c0280c00a015a080b00a0ac0283a01641c0581001608802839", - "0x1e00b20e02c0283100a0e8059070164140582200a0e40590701601405904", - "0x8380b1bc02da00051be02c8380b07402c7a8051bc02c8380b07802da1005", - "0x61070180300581100a0300590701602c0581000a3786f83902002c6f00b", - "0x581700a05c059070160440590500a0148380b00a03002905016d0c08810", - "0xd80c20e0301000501808c0282001641c058200160800282001641c05817", - "0x800b0220140800b20e02c0800b044014029070160140600503e02da201e", - "0xc00b20e02c1180b20a014029070160140600520602da28230440308380c", - "0x61040360314f00520802c8380b20802c1000520802c8380b03002c0b805", - "0x28ff01641c058220163d40280520e02c0280c00a0ac05b4605205006107", - "0x8380b1fe0500634700a3fc059070163fc0585c00a0500590701605005904", - "0x280520e02c0280c00a3f805b4906202c8380c05e02da400505e0b816010", - "0x1a60051a402c8380b06c0d084829022d2c02836068424081070160c405b4a", - "0x59070160b00590400a3500590701634c0592000a34c059070163480f00c", - "0x6a02e058040058d401641c058d4016d340282e01641c0582e0161700282c", - "0x1a700500a41c0581e01657c0280520e02c7f00b0980140290701601406005", - "0x283a01641c0582c0164100283901641c0582e0160400280520e02c1480b", - "0x595f00a0148380b00a0300280569e02c0282b00a0f0059070160e405822", - "0x158051be02c8380b04402c110051bc02c8380b05602c8200500a41c0581e", - "0x581b0164100280520e02c0f00b2be014029070160140600500ad4005805", - "0x5a9700a0e805907016378058f900a37c0590701640c0582200a37805907", - "0x581f0164100280520e02c0280c00a015a780b00a0ac0283c01641c058df", - "0x8380b00a0300280569e02c0282b00a0f0059070160400582200a0e805907", - "0x8380b00a0c40283c01641c059050160880283a01641c0580501641002805", - "0x2000b69a0142100b20e02c1e00b1ea0142000b20e02c1f80b6a20141f80b", - "0x2907016015a980502202c8380b00ad48028400840e80800b08002c8380b", - "0xb80c20e0308280b0220148280b20e02c0600b020014029070160141e805", - "0x880c23c0140800b20e02c1000b20a014029070160140600503602daa020", - "0xf80c20e0300f00501808c0281e01641c0581001605c0281001641c05810", - "0xb80b0220140b80b20e02c0b80b044014029070160140600504602daa822", - "0xa00b20e02c0c00b20a014029070160140600520802dab0182060308380c", - "0x590701640c058f500a0ac05907016015ab80505202c8380b02802c0b805", - "0x58ff0161700280b01641c0580b0160500281f01641c0581f016410028ff", - "0x82b5900a0a4059070160a40582000a0ac059070160ac05b5800a3fc05907", - "0x7f00b6b60c4059070180bc05b5a00a0bc1702c02041c058290563fc0581f", - "0x59070180d005b5d00a0d08480c20e02c1880b6b80140290701601406005", - "0x1b00b2320146980b20e02c1700b20601402907016014060051a402daf036", - "0x1b000507402c8380b07202c7480500a41c058d4016d7c028391a80308380b", - "0x8380b1bc4240636200a378059070160f005b6100a0f0059070160e81100c", - "0x6980b0280141600b20e02c1600b2080141f80b20e02c6f80b23a0146f80b", - "0x8380b00a0300283f1a60b00800b07e02c8380b07e02db18051a602c8380b", - "0x8380b05802c8200508002c8380b05c02c8180500a41c0582201657c02805", - "0x8480b0b80147400b20e02c6900b4ba0147380b20e02c2000b0280142100b", - "0x8380b04402caf80500a41c0580501801402b64016014158051d602c8380b", - "0x582e0160500282c01641c0582c016410028ec01641c058fe016d9402805", - "0x2907016014060051d80b8160100163b0059070163b005b6300a0b805907", - "0x1e80b20e02c0283100a1300590701602c0590300a0148380b04402caf805", - "0x8380b09802c0a00508402c8380b03e02c8200509a02c8380b20802c7a805", - "0x7400b6cc0147580b20e02c2680b0b80147400b20e02c1e80b4ba0147380b", - "0x285101641c058f5016474028f501641c058f11d6031b10051e202c8380b", - "0x590701614405b6300a39c0590701639c0581400a1080590701610805904", - "0x820050a602c8380b01602c8180500a41c05805018014288e708404005851", - "0x2c00b20e02c0b80b0440142b00b20e02c2980b0280147c80b20e02c1180b", - "0x590300a0148380b02202db400500a41c0580501801402b6701601415805", - "0x285601641c058fa016050028f901641c05805016410028fa01641c0580b", - "0x2e00b20e02c2d00b6cc0142d00b20e02c0283100a1600590701606c05822", - "0x585f0164740285f01641c0585c0bc031b10050bc02c8380b0b002c7a805", - "0x5b6300a158059070161580581400a3e4059070163e40590400a18405907", - "0x600b0220140600b20e02c0580b020014308561f20400586101641c05861", - "0xb80b20e02c0880b20a014029070160140600520a02db48110200308380c", - "0x602000a0301180504002c8380b04002c1000504002c8380b02e02c0b805", - "0x281001641c058100160880280520e02c0280c00a07c05b6a03c06c06107", - "0x58230164140280520e02c0280c00a40c05b6b0460880610701804005811", - "0x602300a410059070164100582000a410059070160600581700a06005907", - "0x8380b04402c7a80500a41c058050180141580b6d80a40a00c20e0308201b", - "0xa00c6da0147f80b20e02c7f80b0b80140a00b20e02c0a00b2080147f80b", - "0x58050180147f00b6de0c4059070180bc05b6e00a0bc1702c02041c058ff", - "0x59070160d81a109052045b800506c0d08481020e02c1880b23001402907", - "0x1600b2080146a00b20e02c6980b6e40146980b20e02c6901e018dc4028d2", - "0x800b1a802c8380b1a802db980505c02c8380b05c02c2e00505802c8380b", - "0x8380b03c02caf80500a41c058fe0161300280520e02c0280c00a3501702c", - "0x8380b05802c8200507202c8380b05c02c0800500a41c0582901657c02805", - "0x29070160140600500add0058050560141e00b20e02c1c80b0440141d00b", - "0x59070160880582200a378059070160ac0590400a0148380b03c02caf805", - "0x8200500a41c0581e01657c0280520e02c0280c00a015ba80b00a0ac028df", - "0x1d00b20e02c6f00b1f20146f80b20e02c8180b0440146f00b20e02c0d80b", - "0x8200500a41c0580501801402b740160141580507802c8380b1be02d4b805", - "0x600500add0058050560141e00b20e02c0800b0440141d00b20e02c0f80b", - "0x1880507802c8380b20a02c1100507402c8380b00a02c8200500a41c05805", - "0x284201641c0583c0163d40284001641c0583f01648c0283f01641c05805", - "0x880501802c8380b01602c080050801081d0100161000590701610005b73", - "0x8380b02202c8280500a41c058050180148280b6ec0440800c20e0300600b", - "0x280c3b20141000b20e02c1000b0400141000b20e02c0b80b02e0140b80b", - "0x59070160400582200a0148380b00a0300281f016ddc0f01b01841c06020", - "0x590500a0148380b00a03002903016de01182201841c0601001604402810", - "0x290401641c059040160800290401641c0581801605c0281801641c05823", - "0x58050180141480b6f20148380c02802c0f005028410061070164100581b", - "0x60220160440282201641c058220160880280520e02c8200b03e01402907", - "0x282e01641c058ff0164140280520e02c0280c00a0b005b7a1fe0ac06107", - "0x8380c05e06c0629e00a0bc059070160bc0582000a0bc059070160b805817", - "0x1be00506802c8380b05602c7a80500a41c058050180148480b6f63f81880c", - "0x590701634805b7e00a348059070160d80f00c6fa0141b00b20e02c7f00b", - "0x58d3016dfc0283401641c058340161700283101641c05831016410028d3", - "0x280520e02c0f00b14c01402907016014060051a60d01881001634c05907", - "0x280570002c0282b00a0e4059070160ac0582200a3500590701642405904", - "0x110051a802c8380b03602c8200500a41c0581e0162980280520e02c0280c", - "0x1480b058014029070160140600500ae00058050560141c80b20e02c1600b", - "0x582000a0f0059070160e88200c05e0141d00b20e02c0282e00a0148380b", - "0x280520e02c0280c00a37805b8100a41c0603c0160780283c01641c0583c", - "0x2000b20e02c1100b1ea0141f80b20e02c6f80b7040146f80b20e02c02831", - "0x581b016410028e701641c05842016df80284201641c0583f03c031be805", - "0xd81001639c0590701639c05b7f00a100059070161000585c00a06c05907", - "0x2907016078058a600a0148380b1bc02c1600500a41c0580501801473840", - "0x2b83016014158051d602c8380b04402c110051d002c8380b03602c82005", - "0x28d401641c0581b0164100280520e02c0f00b14c0140290701601406005", - "0x59070160e405a9700a3a005907016350058f900a0e40590701640c05822", - "0x28e801641c0581f0164100280520e02c0280c00a015c180b00a0ac028eb", - "0x590400a0148380b00a0300280570602c0282b00a3ac0590701604005822", - "0x1c20051d802c8380b00a0c4028eb01641c05905016088028e801641c05805", - "0x2600b20e02c2600b6fe0141e80b20e02c7580b1ea0142600b20e02c7600b", - "0x881001841c0600c0160440280c01641c0580b0160400284c07a3a00800b", - "0x581701605c0281701641c058110164140280520e02c0280c00a41405b85", - "0xf005036080061070160800581b00a080059070160800582000a08005907", - "0x280520e02c1000b03e014029070160140600503c02dc300520e0300d80b", - "0x280c00a08c05b8704407c061070180400581100a0400590701604005822", - "0x582000a0600590701640c0581700a40c059070160880590500a0148380b", - "0x58050180141480b7100508200c20e0300c005018a780281801641c05818", - "0x7f80b7140147f80b20e02c0a00b7120141580b20e02c0f80b1ea01402907", - "0x1c580505602c8380b05602c2e00520802c8380b20802c8200505802c8380b", - "0x58290164100280520e02c0280c00a0b01590402002c1600b20e02c1600b", - "0x8380b00a0300280571802c0282b00a0bc0590701607c0582200a0b805907", - "0x1c600b00a0ac0282f01641c058230160880282e01641c0580501641002805", - "0x283101641c0580505c014029070160780582c00a0148380b00a03002805", - "0x8380c1fc02c0f0051fc02c8380b1fc02c100051fc02c8380b0620800602f", - "0x800b0220140800b20e02c0800b044014029070160140600521202dc6805", - "0x6980b20e02c1b00b20a01402907016014060051a402dc70360680308380c", - "0x60d400a030eb0051a802c8380b1a802c100051a802c8380b1a602c0b805", - "0x28de01641c058340163d40280520e02c0280c00a0f005b8f0740e406107", - "0x59070160e40590400a0fc0590701637c05b8a00a37c059070160e805b90", - "0x1f8de0720400583f01641c0583f016e2c028de01641c058de01617002839", - "0x1780b20e02c1a00b0440141700b20e02c1e00b2080140290701601406005", - "0x1100505c02c8380b00a02c8200500a41c0580501801402b8c01601415805", - "0x8480b058014029070160140600500ae30058050560141780b20e02c6900b", - "0x2100b7220142100b20e02c0283100a10005907016040058f500a0148380b", - "0x1c580508002c8380b08002c2e00500a02c8380b00a02c820051ce02c8380b", - "0x58050164100280520e02c0280c00a39c2000502002c7380b20e02c7380b", - "0x7400b7220147400b20e02c0283100a0bc059070164140582200a0b805907", - "0x800b1d602c8380b1d602dc58051d802c8380b05e02c7a8051d602c8380b", - "0x2b9200a030059070160140580c1d60140580b20e02c028de00a3ac7602e", - "0x581101641c05811016e500281101641c0580c020031c980502002c8380b", - "0xd820018e540b90501841c0600b00a0300580500a41c0580507a0140880b", - "0x29070180780581e00a0780880c20e02c0880b0360140290701601406005", - "0x8380b02e02c8180500a41c0581101607c0280520e02c0280c00a07c05b96", - "0x5b9800a40c0590701608c0600c72e0141180b20e02c0800b4b20141100b", - "0x282201641c058220160500290501641c059050164100281801641c05903", - "0xf80b0580140290701601406005030088828100160600590701606005b99", - "0x5b9a052050061070184100581100a410059070160300581000a0148380b", - "0x59070163fc0581700a3fc059070160a40590500a0148380b00a0300282b", - "0x1880b7360bc1700c20e03016105018a780282c01641c0582c0160800282c", - "0x59070160bc0800c7380147f00b20e02c0b80b2060140290701601406005", - "0x58140163d40283601641c058340220301780506802c8380b00a0b802909", - "0x585c00a3f8059070163f80581400a0b8059070160b80590400a34805907", - "0x283601641c058360160800290901641c0590901694c028d201641c058d2", - "0x58050180141c8d41a6040058391a834c081070160d8848d21fc0b882a54", - "0x8380b02e02c8180500a41c05810016e740280520e02c0880b03e01402907", - "0xa00b0440146f00b20e02c1d00b0280141e00b20e02c1880b2080141d00b", - "0x8380b02202c0f80500a41c0580501801402b9e016014158051be02c8380b", - "0x8380b20a02c8200507e02c8380b02e02c8180500a41c05810016e7402805", - "0x58050620146f80b20e02c1580b0440146f00b20e02c1f80b0280141e00b", - "0x639700a39c0590701637c058f500a1080590701610005a6200a10005907", - "0x1e00b20e02c1e00b2080147580b20e02c7400b7300147400b20e02c210e7", - "0x28eb1bc0f00800b1d602c8380b1d602dcc8051bc02c8380b1bc02c0a005", - "0x58fa00a0148380b02002dce80500a41c0581101607c0280520e02c0280c", - "0x590400a130059070163b005b9f00a3b0059070160142d00500a41c0580c", - "0x584c01641c0584c016e640281b01641c0581b0160500282001641c05820", - "0x8380b00a0f40280520e02c02b5300a04405907016015a900509806c10010", - "0x281b016e801001701841c061050160440290501641c0580c01604002805", - "0x800b20e02c080110184780281001641c058200164140280520e02c0280c", - "0x2823016e841101f01841c0601e00a030ec80503c02c8380b02002c0b805", - "0xc10301841c060170160440281701641c058170160880280520e02c0280c", - "0x581401605c0281401641c058180164140280520e02c0280c00a41005ba2", - "0xf80b2080147f80b20e02c8180b1ea0141580b20e02c02b5700a0a405907", - "0x1ac0051fe02c8380b1fe02c2e00501602c8380b01602c0a00503e02c8380b", - "0x1482b1fe02c0f9056b20141480b20e02c1480b0400141580b20e02c1580b", - "0x8380b00a030028fe016e8c1880b20e0301780b6b40141782e0580408380b", - "0x28d2016e901b00b20e0301a00b6ba0141a10901841c05831016d7002805", - "0x6a00b20e02c1b022018e94028d301641c0582e01640c0280520e02c0280c", - "0x583a016e9c0283a01641c05839212031d300507202c8380b1a802d3e805", - "0x5ba800a34c0590701634c0581400a0b0059070160b00590400a0f005907", - "0x8380b1a402c2600500a41c058050180141e0d30580400583c01641c0583c", - "0x8380b21202c080051bc02c8380b05c02c8180500a41c0582201629802805", - "0x6f80b0440142000b20e02c6f00b0280141f80b20e02c1600b2080146f80b", - "0x8380b04402c5300500a41c0580501801402ba90160141580508402c8380b", - "0x582e0160500282c01641c0582c016410028e701641c058fe016ea802805", - "0x2907016014060051ce0b81601001639c0590701639c05ba800a0b805907", - "0x590701607c0590400a3a00590701602c0590300a0148380b04402c53005", - "0x8380b00a0c40284201641c059040160880284001641c058e80160500283f", - "0x7600c74c0142600b20e02c7580b50a0147600b20e02c2100b1ea0147580b", - "0x283f01641c0583f0164100284d01641c0583d016e9c0283d01641c0584c", - "0x600509a1001f8100161340590701613405ba800a1000590701610005814", - "0xa0051ea02c8380b04602c820051e202c8380b01602c8180500a41c05805", - "0x600500aeac058050560142980b20e02c0b80b0440142880b20e02c7880b", - "0x590400a3e40590701602c0590300a0148380b02202db400500a41c05805", - "0x285301641c0581b0160880285101641c058f9016050028f501641c05805", - "0x7d00b20e02c2980b1ea0142c00b20e02c2b00b50a0142b00b20e02c02831", - "0x58f50164100285c01641c0585a016e9c0285a01641c058581f4031d3005", - "0x7a8100161700590701617005ba800a144059070161440581400a3d405907", - "0xd820018eb00b90501841c0600b00a0300580500a41c0580507a0142e051", - "0x29070180780581e00a0780880c20e02c0880b0360140290701601406005", - "0x8380b02e02c8180500a41c0581101607c0280520e02c0280c00a07c05bad", - "0x5bb000a40c0590701608c0600c75e0141180b20e02c0800b75c0141100b", - "0x282201641c058220160500290501641c059050164100281801641c05903", - "0xf80b0580140290701601406005030088828100160600590701606005bb1", - "0x5bb2052050061070184100581100a410059070160300581000a0148380b", - "0x59070163fc0581700a3fc059070160a40590500a0148380b00a0300282b", - "0x1880b7660bc1700c20e0301610501808c0282c01641c0582c0160800282c", - "0x59070160bc0800c7680147f00b20e02c0b80b2060140290701601406005", - "0x58140163d40283601641c058340220301780506802c8380b00a0b802909", - "0x585c00a3f8059070163f80581400a0b8059070160b80590400a34805907", - "0x283601641c058360160800290901641c05909016b64028d201641c058d2", - "0x58050180141c8d41a6040058391a834c081070160d8848d21fc0b882ada", - "0x8380b02e02c8180500a41c05810016ed40280520e02c0880b03e01402907", - "0xa00b0440146f00b20e02c1d00b0280141e00b20e02c1880b2080141d00b", - "0x8380b02202c0f80500a41c0580501801402bb6016014158051be02c8380b", - "0x8380b20a02c8200507e02c8380b02e02c8180500a41c05810016ed402805", - "0x58050620146f80b20e02c1580b0440146f00b20e02c1f80b0280141e00b", - "0x63af00a39c0590701637c058f500a108059070161000592800a10005907", - "0x1e00b20e02c1e00b2080147580b20e02c7400b7600147400b20e02c210e7", - "0x28eb1bc0f00800b1d602c8380b1d602dd88051bc02c8380b1bc02c0a005", - "0x58fa00a0148380b02002dda80500a41c0581101607c0280520e02c0280c", - "0x590400a130059070163b005bb700a3b0059070160142d00500a41c0580c", - "0x584c01641c0584c016ec40281b01641c0581b0160500282001641c05820", - "0x8380b00a0f40280520e02c02b5300a04405907016015a900509806c10010", - "0x281b016ee01001701841c061050160440290501641c0580c01604002805", - "0x800b20e02c080110184780281001641c058200164140280520e02c0280c", - "0x2823016ee41101f01841c0601e00a0301180503c02c8380b02002c0b805", - "0xc10301841c060170160440281701641c058170160880280520e02c0280c", - "0x581401605c0281401641c058180164140280520e02c0280c00a41005bba", - "0xf80b2080147f80b20e02c8180b1ea0141580b20e02c02ad800a0a405907", - "0x16c8051fe02c8380b1fe02c2e00501602c8380b01602c0a00503e02c8380b", - "0x1482b1fe02c0f9055b40141480b20e02c1480b0400141580b20e02c1580b", - "0x8380b00a030028fe016eec1880b20e0301780b5b60141782e0580408380b", - "0x28d2016ef01b00b20e0301a00b5bc0141a10901841c05831016b7402805", - "0x6a00b20e02c1b022018ef4028d301641c0582e01640c0280520e02c0280c", - "0x583a016f000283a01641c05839212031df80507202c8380b1a802ddf005", - "0x5bc100a34c0590701634c0581400a0b0059070160b00590400a0f005907", - "0x8380b1a402c2600500a41c058050180141e0d30580400583c01641c0583c", - "0x8380b21202c080051bc02c8380b05c02c8180500a41c0582201657c02805", - "0x6f80b0440142000b20e02c6f00b0280141f80b20e02c1600b2080146f80b", - "0x8380b04402caf80500a41c0580501801402bc20160141580508402c8380b", - "0x582e0160500282c01641c0582c016410028e701641c058fe016f0c02805", - "0x2907016014060051ce0b81601001639c0590701639c05bc100a0b805907", - "0x590701607c0590400a3a00590701602c0590300a0148380b04402caf805", - "0x8380b00a0c40284201641c059040160880284001641c058e80160500283f", - "0x7600c77e0142600b20e02c7580b7880147600b20e02c2100b1ea0147580b", - "0x283f01641c0583f0164100284d01641c0583d016f000283d01641c0584c", - "0x600509a1001f8100161340590701613405bc100a1000590701610005814", - "0xa0051ea02c8380b04602c820051e202c8380b01602c8180500a41c05805", - "0x600500af14058050560142980b20e02c0b80b0440142880b20e02c7880b", - "0x590400a3e40590701602c0590300a0148380b02202db400500a41c05805", - "0x285301641c0581b0160880285101641c058f9016050028f501641c05805", - "0x7d00b20e02c2980b1ea0142c00b20e02c2b00b7880142b00b20e02c02831", - "0x58f50164100285c01641c0585a016f000285a01641c058581f4031df805", - "0x7a8100161700590701617005bc100a144059070161440581400a3d405907", - "0x8280b78c0440800c20e0300600b0220140600b20e02c0580b0200142e051", - "0x1000b20e02c0b80b02e0140b80b20e02c0880b20a0140290701601406005", - "0x281f016f1c0f01b01841c0602000a0301180504002c8380b04002c10005", - "0x1182201841c060100160440281001641c058100160880280520e02c0280c", - "0x581801605c0281801641c058230164140280520e02c0280c00a40c05bc8", - "0x1e48290280308380c20806c061d900a410059070164100582000a41005907", - "0x8380c04402c0880504402c8380b04402c1100500a41c058050180141580b", - "0xb80505e02c8380b05802c8280500a41c058050180141700b7940b07f80c", - "0x61070180c40a00c3ac0141880b20e02c1880b0400141880b20e02c1780b", - "0x83cc00a0d8059070163fc058f500a0148380b00a03002834016f2c848fe", - "0x59070163f80590400a34c0590701634805bcd00a348059070164241481e", - "0x698361fc040058d301641c058d3016f380283601641c05836016170028fe", - "0x8200500a41c058290162980280520e02c0f00b2be0140290701601406005", - "0x600500af3c058050560141c80b20e02c7f80b0440146a00b20e02c1a00b", - "0xa00b208014029070160a4058a600a0148380b03c02caf80500a41c05805", - "0x580501801402bcf0160141580507202c8380b05c02c110051a802c8380b", - "0x5822016088028d401641c0582b0164100280520e02c0f00b2be01402907", - "0x29070160780595f00a0148380b00a0300280579e02c0282b00a0e405907", - "0x2bcf0160141580507202c8380b20602c110051a802c8380b03602c82005", - "0x1c80b20e02c0800b0440146a00b20e02c0f80b2080140290701601406005", - "0x110051a802c8380b00a02c8200500a41c0580501801402bcf01601415805", - "0x283c01641c0583a016f400283a01641c058050620141c80b20e02c8280b", - "0x1e8050783786a0100160f0059070160f005bce00a378059070160e4058f5", - "0x58050180140d820018f440b90501841c0600b00a0300580500a41c05805", - "0x281f016f48029070180780581e00a0780880c20e02c0880b03601402907", - "0x1e980504402c8380b02e02c8180500a41c0581101607c0280520e02c0280c", - "0x590701640c05bd500a40c0590701608c0600c7a80141180b20e02c0800b", - "0x5818016f580282201641c058220160500290501641c0590501641002818", - "0x280520e02c0f80b05801402907016014060050300888281001606005907", - "0x280c00a0ac05bd7052050061070184100581100a4100590701603005810", - "0x582000a0b0059070163fc0581700a3fc059070160a40590500a0148380b", - "0x58050180141880b7b00bc1700c20e030161050187640282c01641c0582c", - "0x282e00a424059070160bc0800c7b20147f00b20e02c0b80b20601402907", - "0x28d201641c058140163d40283601641c058340220301780506802c8380b", - "0x59070163480585c00a3f8059070163f80581400a0b8059070160b805904", - "0x7f02e20ad640283601641c058360160800290901641c05909016d60028d2", - "0xf80500a41c058050180141c8d41a6040058391a834c081070160d8848d2", - "0x8200507402c8380b02e02c8180500a41c05810016d7c0280520e02c0880b", - "0x6f80b20e02c0a00b0440146f00b20e02c1d00b0280141e00b20e02c1880b", - "0x5b5f00a0148380b02202c0f80500a41c0580501801402bda01601415805", - "0xa00507802c8380b20a02c8200507e02c8380b02e02c8180500a41c05810", - "0x284001641c058050620146f80b20e02c1580b0440146f00b20e02c1f80b", - "0x8380b08439c063d400a39c0590701637c058f500a1080590701610005bdb", - "0x6f00b0280141e00b20e02c1e00b2080147580b20e02c7400b7aa0147400b", - "0x8380b00a030028eb1bc0f00800b1d602c8380b1d602deb0051bc02c8380b", - "0x2907016030058fa00a0148380b02002daf80500a41c0581101607c02805", - "0x59070160800590400a130059070163b005bdc00a3b0059070160142d005", - "0x2601b0400400584c01641c0584c016f580281b01641c0581b01605002820", - "0x600520a02dee8110200308380c01802c0880501802c8380b01602c08005", - "0x1000504002c8380b02e02c0b80502e02c8380b02202c8280500a41c05805", - "0x280c00a07c05bde03c06c061070180800280c0460141000b20e02c1000b", - "0x5bdf046088061070180400581100a040059070160400582200a0148380b", - "0x59070160600581700a0600590701608c0590500a0148380b00a03002903", - "0x1580b7c00a40a00c20e0308201b01808c0290401641c0590401608002904", - "0x7f80c20e0301100b0220141100b20e02c1100b0440140290701601406005", - "0x1780b02e0141780b20e02c1600b20a014029070160140600505c02df082c", - "0x848fe01841c060310280301180506202c8380b06202c1000506202c8380b", - "0x1481e020f8c0283601641c058ff0163d40280520e02c0280c00a0d005be2", - "0x28fe01641c058fe016410028d301641c058d2016f90028d201641c05909", - "0x60051a60d87f01001634c0590701634c05be500a0d8059070160d80585c", - "0x1a00b208014029070160a40595f00a0148380b03c02caf80500a41c05805", - "0x580501801402be60160141580507202c8380b1fe02c110051a802c8380b", - "0x8380b02802c8200500a41c0582901657c0280520e02c0f00b2be01402907", - "0x29070160140600500af98058050560141c80b20e02c1700b0440146a00b", - "0x59070160880582200a350059070160ac0590400a0148380b03c02caf805", - "0x8200500a41c0581e01657c0280520e02c0280c00a015f300b00a0ac02839", - "0x600500af98058050560141c80b20e02c8180b0440146a00b20e02c0d80b", - "0x1580507202c8380b02002c110051a802c8380b03e02c8200500a41c05805", - "0x8280b0440146a00b20e02c0280b208014029070160140600500af9805805", - "0x58f500a0f0059070160e805be700a0e8059070160141880507202c8380b", - "0x5e0050221941e0de1a80400583c01641c0583c016f94028de01641c05839", - "0x628c61780140881f18c2f00281100a0400600b00a314630bc00a0440f8c6", - "0x28114d60400600b00a314630bc00a0440f8c61780140898702003005805", - "0x630bc00a0440f8c617801408b890200300580518a3185e00502207c630bc", - "0x8be90200300580518a3185e00502207c630bc00a045f401001802c028c5", - "0x5e00502207c630bc00a045f501001802c028c518c2f00281103e3185e005", - "0x1f601001802c028c518c2f00281103e3185e005022fac0800c016014628c6", - "0x281103e3185e005022fb40800c016014628c61780140881f18c2f002811", - "0x800c016014628c61780140881f18c2f0028117dc0400600b00a314630bc", - "0x881f18c2f0028117e00400600b00a314630bc00a0440f8c617801408bef", - "0x600b00a314630bc00a0440f8c617801408bf10200300580518a3185e005", - "0xf8c617801408bf30200300580518a3185e00502207c630bc00a045f9010", - "0x580518a3185e00502207c630bc00a045fa01001802c028c518c2f002811", - "0x630bc00a045fb01001802c028c518c2f00281103e3185e005022fd40800c", - "0x28c518c2f00281103e3185e005022fdc0800c016014628c61780140881f", - "0x5e005022fe40800c016014628c61780140881f18c2f0028117f00400600b", - "0x628c61780140881f18c2f0028117f40400600b00a314630bc00a0440f8c6", - "0x28117f80400600b00a314630bc00a0440f8c617801408bfb02003005805", - "0x630bc00a0440f8c617801408bfd0200300580518a3185e00502207c630bc", - "0xf8bc00a0420082301601600023016015ff823016015ff01001802c028c5", - "0x20181001802c028da1780140801b1b22f002811804030058051aa2f002810", - "0x20280c0160146e0bc00a0400f8bc00a0420200b00a36c0f80502007c0280c", - "0x28e003e0140801f00a0320301001802c028da1780140801b0b82f002811", - "0x20480b00a38c0f80502007c0280c81002c028e103e0140801f00a0320380b", - "0x801b1cc2f0028118140440800c016014728bc00a0400c08b03e2f002905", - "0x2811818030058051d22f00281003e2f0028108160400600b00a3685e005", - "0x20700b00a3b40f80502007c0280c81a0400600b00a3685e00502006c750bc", - "0x20800b00a3bc0f80502007c0280c81e030058051dc2f00281003e2f002810", - "0x280c82402c028f203e0140801f00a0320880b00a3c00f80502007c0280c", - "0xf8bc00a0420a00b00a3dc0f80502007c0280c82602c028f603e0140801f", - "0x801f00a0320b00b00a3e80f80502007c0280c82a030058051f02f002810", - "0x20c80504602c0c00b83002c028f503e0140801f00a0320b80b00a3e40f805", - "0x281003e2f0028108340440800c016014738bc00a0400c03f03e2f002905", - "0x20e011020030058051a42f0028100300b00f8bc00a4160d80c0160146f0bc", - "0x20f00b00a3fc0f80502007c0280c83a030058051fc2f00281003e2f002810", - "0xf80502007c0280c83e0440800c016014818bc00a0400c01703e2f002905", - "0x84002c02905" + "0x692", + "0x6f9", + "0x784", + "0x7f0", + "0x85a", + "0x8be", + "0x932", + "0x974", + "0x9e9", + "0xa41", + "0xa73", + "0xacd", + "0xb3d", + "0xb97", + "0xbf9", + "0xc7e", + "0xced", + "0xd4f", + "0xdaf", + "0xdfc", + "0xe00", + "0xe04", + "0xe08", + "0xe72", + "0xe98", + "0xed9", + "0xf2d", + "0xf53", + "0xfb9", + "0x1009", + "0x105c", + "0x10b0", + "0x1170", + "0x11e9", + "0x1221", + "0x1263", + "0x129a", + "0x132b", + "0x1351", + "0x13b2", + "0x141f", + "0x146d", + "0x14e3", + "0x1546", + "0x15b1", + "0x15f3", + "0x1631", + "0x168e", + "0x16cc", + "0x1721", + "0x1771", + "0x17b2", + "0x1968", + "0x196e", + "0x19b5", + "0x1a0f", + "0x1a3d", + "0x1a84", + "0x1ade", + "0x1b1f", + "0x1b66", + "0x1ba7", + "0x1c0a", + "0x1c71", + "0xf327", + "0x281100a0400480f01c0300680c0160280480800e0180280400600800800", + "0x281a0120640700600a0600b81600a0540281401203c0701301202003812", + "0x28130120640382100a0800481f00e0780280403a0700281802e0580281b", + "0x480f00e09c0282600a0940481901c0780282400a04c0481900e08c02822", + "0x282c00a0ac0480f01c0580281600a0a8028290120a00701100a04802813", + "0x281600a0580281600a0580281600a0580281600a0580282e0120b407016", + "0x480f01c0c40283100a0c4028130120a00380c06006c1200904807c17816", + "0x28130120640381600a0d4028340120640701100a0600b81600a0cc02832", + "0x28130120a00381c00a0ec1d00c07209c0283800a0dc0481901c0d802822", + "0x28130120640383100a0600b81600a0f40283c01203c0701200a04402831", + "0x481901c1040282200a04c0481900e0580284000a0fc0481901c0f802831", + "0x28130120640381600a0f8028440120640703100a0100182700a10c02842", + "0x280403a1200281802e1200280400609c0284700a1180481901c11402822", + "0x2604e0480700284d09806c1201c00a1342604b00a0100184a00a0ec1d049", + "0x480f00e030278120480700284d0980541201c00a134260160480700284d", + "0x38240480700284d0980441201c00a1342601b00a0100e85100a14402850", + "0x181100a0440281301203c0385300a1480481f00e1440281200a04c0480f", + "0x481900e0580285500a1500481901c0d40281100a04c0481900e04402804", + "0x705900a0600b85900a0100182700a160028570120640705600a08802813", + "0x285e00a1740481901c1700282200a04c0481900e0580285b00a16804819", + "0x380c0c41841201c00a134260600480700284d09817c1201c00a13426027", + "0x285900a1940482d01c0580285900a1900480f01c0440281200a18c0480f", + "0x284800a1ac0480f01c0580281500a1a80286900a1a00286700a0b002866", + "0x480f00e0303782700a1b80286d0120640706c00a0880281301203c03816", + "0x707400a0880281301203c0381600a1cc0287201203c0707100a12002870", + "0x480f00e0480285900a1dc0480f01c1cc0283b07409c0287600a1d404819", + "0x706a00a0440287b01203c0381600a1e40287a01203c0707900a14402878", + "0x480f00e0c40283100a0c40283100a04c0487e00e0580287d00a1f00480f", + "0x288301207c0383500a0100e81600a2080288101203c0708000a0c40287f", + "0x281301203c0381600a2200288701203c0708600a0c40288501203c03884", + "0x281100a0c40285900a04c0487e00e09c0288b00a2280481901c22402822", + "0x289001203c0381600a23c0288e01203c0708d00a0c40288c01203c03812", + "0x480f01c1200285900a24c0480f01c0580289200a2440480f01c19802812", + "0x702700a260028970120640709600a0880281301203c0381600a25402894", + "0x281100a2700480f01c0580289b00a2680480f01c1980285900a2640480f", + "0x28a101203c0701600a2800289f01203c0709e00a1640289d01203c07016", + "0x280403a058028a500a2900480f01c044028a300a2880480f01c0c402859", + "0x381600a29c028a8012064070a700a0100e84000a154028a601206407040", + "0x283100a04c0480f00e09c028ab00a2a80481901c2a40282200a04c04819", + "0x480f01c2b8028ad00a2b00480f01c0440281100a044028130120a003831", + "0x285b00a2cc0481901c2c8028b101207c0383e00a0100e81600a2c0028af", + "0x70b600a088028130120640381600a2d0028b5012064070b400a0100e83e", + "0x381600a124028ba0120640704a00a2e40481f00e09c028b800a2dc04819", + "0x280403a12c0281802e09c028bd00a2f00481901c2ec0282200a04c04819", + "0x282200a04c0481900e058028be00a3040481901c300028bf01207c038be", + "0x281301203c0381600a1b0028c501203c0702700a310028c3012064070c2", + "0x480f01c0580286600a3240480f01c09c028c800a31c0481901c31802822", + "0x701600a0c4028cd01203c0701600a28c028cc01203c0701600a32c028ca", + "0x280403a1540280403a058028d000a33c0480f01c0580284b00a3380480f", + "0x28d3012064070d200a088028130120640381600a158028d101206407056", + "0x481901c0580281e00a04c0481900e058028ad00a3540480f01c09c028d4", + "0x481901c1700280403a364028d801207c0385b00a0100e82700a35c028d6", + "0x382700a374028dc012064070db00a088028130120640381600a170028da", + "0x28e100a3800481901c0086f80c1bc0241201c00a1342602200a04c0481f", + "0x48e6012394720021c607002804006070028041c40141201c00a13426027", + "0xe00500a3b00e00500a3ac0e00500a3a80e00500a3a41100500a3a0048e7", + "0x258050483c8048f10123c01080500a3b00e00500a3bc048ee038014028ed", + "0x28ef042014028ef0123d02580500a3b07980500a3b00480500a3b004824", + "0x7d00500a3bc02824096014120f202c014028f90123e07b80500a3d87a805", + "0x7e00500a3b07e80500a3b0028241f8014120f2080044028fb096014028ef", + "0x2580500a4100490309601402902038014029010124007f80500a3b0048fe", + "0xb00500a3bc0f00500a3b00e00500a41c8300500a3d804905062014028eb", + "0x7e0050483c87080500a3e41100500a3e40f00500a3bc0f00500a40804908", + "0x2181100a3ec1100500a3bc2081100a3ec7980500a3ac0480500a3ac04824", + "0x28ef1b6014029041ba014028e821401402904212044028fb044014028ec", + "0x28f90124342c80500a4306c80500a3b42e00500a42c2e00500a4082e005", + "0x2281100a3ec6b80500a3a08800500a4108781100a3ec8700500a3b087005", + "0x28ef00a090888050483c88880500a3b004824222014120f222201402904", + "0x8900500a4102381100a3ec0880500a3ac5680500a3a08880500a40888805", + "0x29130ac0140290b0ac014029020ac014028ef1a4014029041a8014028e8", + "0x8a01100a3ec4300500a3b04300500a3e40880500a4304200500a3b42a805", + "0x28fb1a0014029041a0014029021a0014028ef22c0140290422a044028fb", + "0x282422e014120f222e014028ec0120908b8050483c88b80500a41024811", + "0x2501100a3ec049180b2014028eb1460140290422e0140290222e014028ef", + "0x28e80cc014028ed1960140290419601402902196014028ef23201402904", + "0x2904236044028fb024014028ef0124680900500a3ac0880500a3bc33005", + "0x3600500a4103600500a4083600500a3bc6300500a4106400500a3a08e005", + "0x290423c044028fb17c014028ec0960140290123a044028fb090014028ec", + "0x6000500a3b45f00500a4085f00500a3bc6100500a4106200500a3a08f805", + "0x28ec09001402901242044028fb240014028ec240014028f90960140290c", + "0x2480500a3bc5d80500a4105e80500a3a09180500a4109101100a3ec24805", + "0x28fb248014028ec248014028f90900140290c094014028ed09201402902", + "0x9380500a4109301100a3ec5180500a4085180500a3bc1880500a3bc92811", + "0x28eb1680140290b16801402902168014028ef16c01402904170014028e8", + "0x2881100a3ec9400500a3b09400500a3e41880500a4305900500a3b488005", + "0x28e81600140290416001402902160014028ef2520140290400c044028fb", + "0x5380500a3bc5480500a4105580500a3a09500500a4102981100a3ec57005", + "0x28ef25801402904256044028fb0800140291314e0140290b14e01402902", + "0x5000500a3bc9700500a4109681100a3ec5280500a4105280500a40852805", + "0x28ef25e014029040d2044028fb13c014029041400140290414001402902", + "0x4c00500a3a09800500a4103401100a3ec4d80500a4104d80500a4084d805", + "0x28f90124c80493112a0140290412a0140290212a014028ef12c01402904", + "0x9980500a4103381100a3ec3300500a3b03300500a3bc3300500a40833005", + "0x2904268044028fb124014028e8124014028ed12401402902124014028ef", + "0x4680500a3bc4780500a3a04780500a3b44780500a4084780500a3bc9a805", + "0x28ef11201402904116014028e826c014029040aa044028fb11a014028e8", + "0x4300500a3b44300500a3bc4400500a3a04400500a3b44400500a40844005", + "0x2902104014028ef26e014029040ac044028fb10c014028e810c014028eb", + "0x2c01100a3ec4000500a3a04000500a3bc4100500a3a04100500a3b441005", + "0x28ef0fa014028e80fa014028ed0fa014029020fa014028ef27001402904", + "0x28ef0a2014028ef27601402904274044028fb0124e43500500a41035005", + "0x9e00500a3b49e00500a3b09e00500a3bc9e00500a4089e00500a3e43c805", + "0x28fb0124fc3980500a4f83c80500a4100493d0a2014028eb278014028e8", + "0x3980500a3bc3980500a5083a00500a4103b00500a3a0a080500a410a0011", + "0x28eb090014028ef0e2014028ef0e6014028e80e6014028ed0e601402902", + "0x29020dc014028e828a014029040b6044028fb288014028ef01250c38805", + "0x2c80500a404a400500a3d8a380500a3d82e01100a3eca300500a3d824005", + "0x120f20b8014029040bc014028e8292014029040bc044028fb0b6014028ec", + "0x28ec012090850050483c86e80500a3e4048241b6014120f20120902e005", + "0x2e0050483c8028241b6014120f200a090850050483c80b00500a3ac85005", + "0x6b80500a3e46c80500a3bc2c80500a3a82c80500a3a48700500a3a002824", + "0x28f900a090880050483c88700500a3bc8800500a3b004824220014120f2", + "0x2b0050483c82b00500a4102c00500a3a09d00500a410a481100a3ec56805", + "0x8900500a3b004824224014120f21a8014028f9012090690050483c804824", + "0x880500a3a4028240ac014120f200a090890050483c8028241a4014120f2", + "0x28ec0120908b0050483c8048241a0014120f2108014028ef022014028ea", + "0x120f20125280282422c014120f200a090680050483c81080500a3ac8b005", + "0x4824232014120f2012090658050483c802824146014120f201209051805", + "0x48240d8014120f200a0908c8050483c802824196014120f2232014028ec", + "0x120f2238014028ec0120908e0050483c86400500a3e40482418c014120f2", + "0x28f60900140290400a090360050483c802824238014120f200a09063005", + "0x9580500a3d83380500a3a00f00500a3ac1500500a3a01600500a41096805", + "0x28ec24c014028f600c0140290c0d0014028e80d0014028eb0d0014028ed", + "0x9080500a3d89100500a3d89280500a3d83480500a3a0a401100a3ec34005", + "0x8f8050483c86200500a3e404824184014120f223c014028f602a01402904", + "0x282423e014120f200a090610050483c82580500a41c8f80500a3b004824", + "0x120f2240014028ef180014028ef096014028ea096014028e9240014028e8", + "0x2400500a41c9180500a3b004824246014120f217a014028f90120905d805", + "0x28e9248014028e80940140293e00a090918050483c802824176014120f2", + "0x9200500a3bc8d80500a3bc2500500a3bc2500500a5082400500a3a824005", + "0x482424e014120f2170014028f90120905b0050483c804824168014120f2", + "0xa381100a3ec1f00500a3b01880500a4040282424e014120f224e014028ec", + "0x5b0050483c802824168014120f208a0140290408e014028e822801402904", + "0x9400500a3bc5900500a3bc1880500a3a81880500a3a49400500a3a002824", + "0x120f2252014028ec012090948050483c804824160014120f2042014028ed", + "0x120f2012090538050483c802824160014120f215c014028f900a09094805", + "0x950050483c89500500a3b004824254014120f2156014028f901209054805", + "0x538050483c82080500a4102180500a3a08480500a410a301100a3ec02824", + "0x28ec012090960050483c80482414a014120f200a090548050483c802824", + "0x120f2012090500050483c80282414a014120f200a090960050483c896005", + "0x120f200a090500050483c80482413c014120f225c014028ec01209097005", + "0x482425e014120f20120904d8050483c80282425c014120f200a0904f005", + "0x482412a014120f200a090978050483c802824136014120f225e014028ec", + "0x120f2260014028ec012090980050483c84c00500a3e40482412c014120f2", + "0x120f2124014028f900a090980050483c80282412c014120f200a0904a805", + "0xa580500a4102c81100a3ec02824266014120f2266014028ec01209099805", + "0x9a80500a3b00482426a014120f211e014028f911a014028f907a014028e8", + "0x880500a4040e00500a5080e00500a4f80282426a014120f20b2014028ef", + "0x290206c01402904070014028e8298014029040cc044028fb06a014028ec", + "0x120f2116014028f9012090448050483c84400500a3e41a80500a3bc1a805", + "0x28ef00a090448050483c80282426c014120f226c014028ec0120909b005", + "0x4100500a3e44000500a3e41980500a3a0a700500a4103501100a3eca6805", + "0x48240d4014120f200a0909b8050483c89b80500a3b00482426e014120f2", + "0x120f200a090350050483c89c00500a3b004824270014120f20fa014028f9", + "0x120f2276014028ec0120909d8050483c8048240f2014120f200a0909c005", + "0x48240e8014120f20e6014028f901253c02824276014120f200a0903c805", + "0x120f200a0903a0050483c8a080500a3b004824282014120f20ec014028f9", + "0xa980500a410a980500a3b0a980500a548a88050380141215000a090a0805", + "0x120f228a014028ec012090a28050483c83700500a3e404824090014120f2", + "0x3380500a3e412024090014120f22a801402904090044028fb00a09024005", + "0xaa80500a4103601100a3ec0d80500a3b00300500a40408824090014120f2", + "0x120f20d0014028f9036014028ef036014029020460140290404c014028e8", + "0x120f202a090240050483c83480500a3e40282428a014120f202409024005", + "0x240050483c827024090014120f209c014029040dc044028fb02c09024005", + "0xa48050483c82f00500a3e41380500a3b01380500a3e41200500a3e40d824", + "0x28f900a090a48050483c82d80500a3bc2c80500a41ca480500a3b004824", + "0x2824274014120f2274014028ec0120909d0050483c82c00500a3e42a805", + "0x28ef00c014028e800c014028ed00c014028ec00c014028ea00c014028e9", + "0x4824228014120f208e014028f9012090228050483c83400500a3bc29805", + "0x8a0050483c80282408a014120f207c014028ef06201402907228014028ec", + "0x4824212014120f2086014028f9012090208050483c82000500a3e402824", + "0x120f207a014028f900a090208050483c802824212014120f2212014028ec", + "0x28f90120901b0050483c802824296014120f2296014028ec012090a5805", + "0x282406c014120f202201402907298014028ec012090a60050483c81c005", + "0x120f229c014028ec012090a70050483c81980500a3e402824298014120f2", + "0x28ec012090aa0050483c804824058014120f2054014028f900a090a7005", + "0x120f200a090aa0050483c812024058014120f200a090160050483c8aa005", + "0x300500a3e4aa80500a3b0048242aa014120f204c014028f901209011805", + "0x482402a014120f200a090aa8050483c802824046014120f200c01402907", + "0x282409c014120f200a0900a8050483c82700500a3b00482409c014120f2", + "0x484e02c0905d815024090ab82400a02412005012024ab80501202404956", + "0xf02304855c1201b00a0480481b00a55c0281100a044048092ae01404824", + "0x282200a0580482200a55c0281e00a054048092ae01404824012084028ab", + "0x1180904e0981215700a0980281b0120980295700a0980284e01209802957", + "0x48092ae0141300503c0240495700a024120092aa0148a0092ae09013805", + "0x4824012550028410580a81215704808c0281201208c0295700a08c02821", + "0x284e0125440295700a54c0281601254c0295700a0b002815012024ab805", + "0x2809048024a70050380cc188242ae090a88120480880495100a55c02951", + "0x188052aa0241b0052ae0141980504e0241a8052ae0140a80504c02404957", + "0x10809038014ab80506c01416009298014ab80506a01415009070014ab805", + "0x150052a60240495700a024120090124ac028092a8024a68052ae01415005", + "0x282a01252c0295700a538029550120f40295700a05402826012024ab805", + "0x295400a54c048092ae01404824012024948050125500483e00a55c0283d", + "0x20005054024a58052ae014090052aa024200052ae0140a80504c02404957", + "0xab8052aa014a880901255c028090480240492900a024aa00907c014ab805", + "0x284300a1380484300a55c0284104c09019809082014ab8050120c404809", + "0x2826012024ab8050120900490900a28c0495704810c0282301210c02957", + "0xaa80908e014ab80508a0141a80908a014ab8050125380490f00a55c02815", + "0xe0052ae01423805058024a60052ae014878050540241c0052ae01409005", + "0x120090920142e115228090ab82429a0140900929a014ab80504601410809", + "0xe0050700240495700a45402836012024ab805228014a980901255c02809", + "0x1c0052aa0248d8052ae01425005038024250052ae0140494c012024ab805", + "0x1e809048014ab805048014a6809298014ab80529801415009070014ab805", + "0x248052a60240495700a02412009236090a60380240148d8052ae0148d805", + "0x1c0110800248e8052ae0148e80507c0248e8052ae0140494b012024ab805", + "0xab805012104048092ae01404824012494910242604848f0242ae0908e94c", + "0x28092120240495700a14402838012018288242ae0140e00508602493005", + "0x2826012024ab8050120900492b00a1f4298052ae0900300521e02404957", + "0x486800a55c0286900a11c0486900a55c0285300a1140492d00a55c02921", + "0x295700a19c9302422a024338052ae0143380509c024338052ae01404914", + "0x2a8050920242b0052ae014968050540242a8052ae0143413404845404934", + "0xab8052560142500901255c028090480240488900a024aa0090b0014ab805", + "0xab80528001427009280014ab8050120c40493a00a55c0292100a09804809", + "0x28490121580295700a4e80282a01216c0295700a5009302422a024a0005", + "0x8f0090bc1701215700a1600291d012024ab80501246c0485800a55c0285b", + "0x494800a55c0294900a4880494900a55c0285e00a484048092ae0142e005", + "0x295700a1580282a0124780295700a4780295501251c0295700a52002925", + "0x1205623c0480294700a55c0294700a0f40482400a55c0282400a53404856", + "0xa30052ae0149280504c0240495700a07002838012024ab80501209004947", + "0x492000a024aa0090cc014ab80528c014150090b2014ab805244014aa809", + "0x1300901255c0282300a54c048092ae014848052a20240495700a02412009", + "0x360052ae01435005054024240052ae014090052aa024350052ae0140a805", + "0x2826012024ab805042014a980901255c028090480240492800a024aa009", + "0x483e00a55c0286e00a0a80494b00a55c0281200a5540486e00a55c02815", + "0xa28052ae014048060121b00295700a0f8028510121200295700a52c02926", + "0xab8050d801415009090014ab805090014aa8090e2014ab80528a0140e009", + "0x36048024014388052ae0143880507a024120052ae0141200529a02436005", + "0x295700a13802826012024ab8050220142980901255c0280904802438824", + "0xab8050124ac0486600a55c0287300a0a80485900a55c0281600a55404873", + "0x330050540242c8052ae0142c8052aa0243b0052ae0143a0050380243a005", + "0x90050ec014ab8050ec0141e809048014ab805048014a68090cc014ab805", + "0x1215802a048121570480140482400a0240495700a024048090ec09033059", + "0xab80502a01415009024014ab805024014aa80901255c0280904802427016", + "0xf023036044ab805022054090110d2024088052ae0140880525a0240a805", + "0x282100a19c048092ae0140482401208802959042014ab82403c01434009", + "0x48092ae014048240120a80295a2aa014ab82404e0149a00904e09812157", + "0x4824012544028f72a6550121570480b0028120120b00295700a09802811", + "0x295500a154048092ae014a980506c0240495700a55002953012024ab805", + "0x281b00a5540483300a55c0283100a0700483100a55c0280929802404957", + "0x283d0120900295700a0900294d01208c0295700a08c0282a01206c02957", + "0x295100a54c048092ae014048240120cc120230360480283300a55c02833", + "0x1181b0221000494e00a55c0294e00a0f80494e00a55c0280929602404957", + "0x295700a0242080901255c02809048024a603804856c1b03504855c1214e", + "0x1203d00a160048092ae014a68050aa0241e94d04855c0295500a1580481c", + "0x4840296090ab8052960149d00901255c028090480241f0052b852c02957", + "0x848052ae0140491401210c0295700a1040285b0121040295700a10002940", + "0x284300a1380490f00a55c029090380908a809212014ab80521201427009", + "0xaa80908e014ab8052960142e00908a014ab80508643c1211501210c02957", + "0x238052ae014238050bc0241b0052ae0141b0050540241a8052ae0141a805", + "0x484922a4500895700a1142383606a048a480908a014ab80508a01424809", + "0xab80522a0141300901255c028090480248d8052ba1280295704812402948", + "0x8a0052aa0240495700a4840284a0124848f0242ae0142500528e0248e805", + "0xaa00924c014ab80523c0142480924a014ab80523a01415009244014ab805", + "0x8a0052aa024288052ae0148d8050380240495700a0241200901257802809", + "0x1e809048014ab805048014a680922a014ab80522a01415009228014ab805", + "0x1f0050940240495700a024120090a20908a914024014288052ae01428805", + "0x2980509c024298052ae014048310120180295700a0d802826012024ab805", + "0x492200a55c0283500a5540492b00a55c028530380908a8090a6014ab805", + "0x1215700a4980291d0124980295700a4ac028490124940295700a0180282a", + "0x286800a4880486800a55c0286900a484048092ae0149680523c0243492d", + "0x282a0124880295700a488029550124d00295700a19c0292501219c02957", + "0x293400a55c0293400a0f40482400a55c0282400a5340492500a55c02925", + "0xa600504c0240495700a55402855012024ab8050120900493404849491012", + "0xaa0090b0014ab8050aa014150090ac014ab805070014aa8090aa014ab805", + "0x282600a14c048092ae014150050940240495700a0241200901257c02809", + "0x281b00a5540494000a55c0293a00a0700493a00a55c0280900c02404957", + "0x283d0120900295700a0900294d01208c0295700a08c0282a01206c02957", + "0x282200a070048092ae01404824012500120230360480294000a55c02940", + "0x294d01208c0295700a08c0282a01206c0295700a06c0295501216c02957", + "0x482401216c120230360480285b00a55c0285b00a0f40482400a55c02824", + "0xb0052aa0242e0052ae0142700504c0240495700a04402853012024ab805", + "0x281c0121780295700a024958090b0014ab8050b8014150090ac014ab805", + "0x485800a55c0285800a0a80485600a55c0285600a5540494900a55c0285e", + "0x49490481602b01200a5240295700a5240283d0120900295700a0900294d", + "0x48240121380b0242c0054090242ae09002809048014048092ae01404809", + "0x296103c08c1215704806c0281201206c0295700a04402811012024ab805", + "0x295700a088028160120880295700a07802815012024ab80501209004821", + "0x138050460241382604855c0282600a06c0482600a55c0282600a13804826", + "0x2921012024ab80504c0140f00901255c02809048024aa8052c4024ab824", + "0x482a00a55c0282a00a4b40481200a55c0281200a5540482a00a55c02823", + "0x483100a58ca88052ae090a98050b2024a9954058044ab80505404812146", + "0x494e00a55c0295100a1980483300a55c0281500a098048092ae01404824", + "0x295700a0cc0282a0120d80295700a0b0029550120d40295700a55002811", + "0xb20050125500481c00a55c0283500a0840494c00a55c0294e00a1a804838", + "0x48092ae014aa0050a60240495700a0c40284a012024ab80501209004809", + "0x295700a5340282a0120f40295700a0b0029550125340295700a05402826", + "0x1880901255c0295500a544048092ae01404824012024b28050125500494b", + "0x200052ae0142000509c024200052ae0141f0260480cc0483e00a55c02809", + "0xab80502a0141300901255c02809048024208052cc024ab82408001411809", + "0x281200a5540490f00a55c0290900a1200490900a55c0280929c02421805", + "0x28210125300295700a43c0286a0120e00295700a10c0282a0120d802957", + "0xab8050120900491400a59c2384504855c1201c00a0480481c00a55c02823", + "0x495700a5300286c012024ab80508e0141b00901255c0284500a54c04809", + "0x295700a0d8029550121240295700a4540281c0124540295700a024a6009", + "0x284900a0f40482400a55c0282400a5340483800a55c0283800a0a804836", + "0x495700a45002953012024ab805012090048490480e01b01200a12402957", + "0x1204a0700d8088400121280295700a1280283e0121280295700a024a5809", + "0x492200a55c028090820240495700a024120092424781216823a46c12157", + "0x48092ae01404909012024ab80524a0143600924c4941215700a5300286e", + "0xab80523a0141300901255c02809048024030052d21440295704849802859", + "0x2d8090d0014ab805256014388090d24b4958112ae0142880528a02429805", + "0x2a8052ae0149a0050b60249a0052ae014968050e2024338052ae01434005", + "0x295700a0248a0090b0014ab8050ac0142d8090ac014ab8050d201438809", + "0xa002422a024a00052ae0149d1220484540493a00a55c0293a00a1380493a", + "0x295700a1602e02422a0242e0052ae0142a85b0484540485b00a55c02867", + "0xb50050125500494800a55c0285e00a1240494900a55c0285300a0a80485e", + "0xa38052ae0148e80504c0240495700a0180284a012024ab80501209004809", + "0xab80528c488121150125180295700a5180284e0125180295700a02418809", + "0x2809236024a40052ae0142c805092024a48052ae014a38050540242c805", + "0x350052420240495700a1980291e0121a8330242ae014a400523a02404957", + "0xaa8090dc014ab8050d8014928090d8014ab80509001491009090014ab805", + "0x120052ae0141200529a024a48052ae014a48050540248d8052ae0148d805", + "0x3600901255c028090480243702429246c090050dc014ab8050dc0141e809", + "0x487100a55c0291e00a5540494500a55c0292100a098048092ae014a6005", + "0x2951012024ab805012090048092d6014049540121cc0295700a5140282a", + "0x29550121d00295700a05402826012024ab805046014a980901255c02841", + "0x4824012024b28050125500494b00a55c0287400a0a80483d00a55c02812", + "0x90052aa0243b0052ae0140a80504c0240495700a08402953012024ab805", + "0x281c0125040295700a02403009296014ab8050ec0141500907a014ab805", + "0x494b00a55c0294b00a0a80483d00a55c0283d00a5540494400a55c02941", + "0x494404852c1e81200a5100295700a5100283d0120900295700a0900294d", + "0xaa8090f2014ab80509c0141300901255c0281100a14c048092ae01404824", + "0x493c00a55c02809256024398052ae0143c805054024388052ae0140b005", + "0x295700a1cc0282a0121c40295700a1c4029550124ec0295700a4f00281c", + "0x120730e20480293b00a55c0293b00a0f40482400a55c0282400a53404873", + "0x484e02c090b6015024090ab82400a02412005012024ab8050120240493b", + "0x481500a55c0281500a0a80481200a55c0281200a554048092ae01404824", + "0x28740120781181b02255c0281102a048088730120440295700a0440292d", + "0x130242ae014108050ec0240495700a02412009044014b682100a55c1201e", + "0x130050220240495700a02412009054014b715500a55c1202700a50404827", + "0x495700a024120092a2014b79532a8090ab82405801409009058014ab805", + "0x48092ae014aa8052880240495700a54c02836012024ab8052a8014a9809", + "0xd8052ae0140d8052aa024198052ae01418805038024188052ae0140494c", + "0xab8050660141e809048014ab805048014a6809046014ab80504601415009", + "0x48092ae014a88052a60240495700a024120090660901181b02401419805", + "0xab82429c08c0d811080024a70052ae014a700507c024a70052ae0140494b", + "0x3c809038014ab805012104048092ae014048240125301c0242e00d81a824", + "0xa58052ae0901e8052780240495700a534029440120f4a68242ae014aa805", + "0x200050e20242084004855c0294b00a4ec048092ae014048240120f802971", + "0x490f082090ab8050820143e809212014ab8050860142d809086014ab805", + "0x8a0052ae0140491401211c0295700a1140285b0121140295700a43c02938", + "0x849150484540491500a55c029140380908a809228014ab80522801427009", + "0x484a00a55c028470920908a80908e014ab80508e01427009092014ab805", + "0x295700a0d80282a0120d40295700a0d40295501246c0295700a10402880", + "0x1b0350244dc0484a00a55c0284a00a1240491b00a55c0291b00a20804836", + "0x482401249402972244014ab824242014a40092424788e8112ae0142511b", + "0x2500900c1441215700a488029470124980295700a47802826012024ab805", + "0x492b00a55c0292600a0a80485300a55c0291d00a554048092ae01403005", + "0x281c012024ab805012090048092e6014049540124b40295700a14402849", + "0x491e00a55c0291e00a0a80491d00a55c0291d00a5540486900a55c02925", + "0x48690484788e81200a1a40295700a1a40283d0120900295700a0900294d", + "0x188090d0014ab80506c0141300901255c0283e00a128048092ae01404824", + "0x9a0052ae0143381c0484540486700a55c0286700a1380486700a55c02809", + "0xab80526801424809256014ab8050d0014150090a6014ab80506a014aa809", + "0x2b0052420240495700a1540291e0121582a8242ae0149680523a02496805", + "0xaa809280014ab80527401492809274014ab8050b0014910090b0014ab805", + "0x120052ae0141200529a024958052ae01495805054024298052ae01429805", + "0xa200901255c02809048024a002425614c09005280014ab8052800141e809", + "0x485c00a55c0283800a5540485b00a55c0294c00a098048092ae014aa805", + "0x284a012024ab805012090048092e8014049540121780295700a16c0282a", + "0xa4805038024a48052ae01404806012024ab80504c0142980901255c0282a", + "0xa6809046014ab80504601415009036014ab805036014aa809290014ab805", + "0x120092900901181b024014a40052ae014a400507a024120052ae01412005", + "0x15009036014ab805036014aa80928e014ab8050440140e00901255c02809", + "0xa38052ae014a380507a024120052ae0141200529a024118052ae01411805", + "0x2826012024ab8050220142980901255c02809048024a382404606c09005", + "0x485e00a55c0294600a0a80485c00a55c0281600a5540494600a55c0284e", + "0x2e0052ae0142e0052aa024330052ae0142c8050380242c8052ae0140492b", + "0xab8050cc0141e809048014ab805048014a68090bc014ab8050bc01415009", + "0x121570480140482400a0240495700a024048090cc0902f05c02401433005", + "0x96809024014ab805024014aa80901255c02809048024270160483900a812", + "0x1201e00a2180481e04606c0895700a04409024108024088052ae01408805", + "0x900904c014ab8050460140880901255c02809048024110052ea08402957", + "0xab80504e014a980901255c02809048024150052ec554138242ae09013005", + "0x160052ae0140494c012024ab8050420144400901255c0295500a0d804809", + "0xab80502a01415009036014ab805036014aa8092a8014ab8050580140e009", + "0xa81b024014aa0052ae014aa00507a024120052ae0141200529a0240a805", + "0xa98052ae0140494b012024ab805054014a980901255c02809048024aa024", + "0x198242ee0c4a88242ae090a9815036044200092a6014ab8052a60141f009", + "0x1b0242ae014108051120241a8052ae01404841012024ab8050120900494e", + "0xa60052ae0901c0051160240495700a0248480901255c0283600a22004838", + "0xab80529a0142700929a014ab805012450048092ae0140482401207002978", + "0x1f0052f252c029570485300290f0120f40295700a5341a82422a024a6805", + "0x208052ae014a580508a024200052ae0141880504c0240495700a02412009", + "0x295700a4240284e0124240295700a0248a009086014ab80508201423809", + "0x282a0121140295700a10c8782422a024878052ae0148483d04845404909", + "0x4824012024bd0050125500491400a55c0284500a1240484700a55c02840", + "0x8a8050540248a8052ae0141880504c0240495700a0f80284a012024ab805", + "0x28090480240497b00a024aa009094014ab80507a01424809092014ab805", + "0x291b00a0a80491b00a55c0283100a098048092ae0140e00509402404957", + "0x8e80509c0248e8052ae014048310121280295700a0d40284901212402957", + "0x484700a55c0284900a0a80491e00a55c0291d0940908a80923a014ab805", + "0x9112104855c0291400a474048092ae0140491b0124500295700a47802849", + "0x295700a494029220124940295700a48802921012024ab8052420148f009", + "0x284700a0a80495100a55c0295100a5540485100a55c0292600a49404926", + "0xa881200a1440295700a1440283d0120900295700a0900294d01211c02957", + "0xab80529c0141300901255c0282100a220048092ae0140482401214412047", + "0x28092a8024958052ae01403005054024298052ae014198052aa02403005", + "0x495700a08c02853012024ab8050440142500901255c028090480240497c", + "0x295700a06c029550121a40295700a4b40281c0124b40295700a02403009", + "0x286900a0f40482400a55c0282400a5340481500a55c0281500a0a80481b", + "0x495700a04402853012024ab805012090048690480540d81200a1a402957", + "0xab8050d0014150090a6014ab80502c014aa8090d0014ab80509c01413009", + "0x285300a5540493400a55c0286700a0700486700a55c0280925602495805", + "0x283d0120900295700a0900294d0124ac0295700a4ac0282a01214c02957", + "0x2809048014048092ae014048090124d01212b0a60480293400a55c02934", + "0x295700a04402811012024ab8050120900484e02c090be815024090ab824", + "0x2815012024ab8050120900482100a5f80f02304855c1201b00a0480481b", + "0x482600a55c0282600a1380482600a55c0282200a0580482200a55c0281e", + "0x2809048024aa8052fe024ab82404e0141180904e0981215700a0980281b", + "0x281200a5540482a00a55c0282300a484048092ae0141300503c02404957", + "0xa9954058044ab805054048121360120a80295700a0a80292d01204802957", + "0x281500a098048092ae014048240120c4029802a2014ab8242a601446809", + "0x29550120d40295700a550028110125380295700a5440288f0120cc02957", + "0x494c00a55c0294e00a4d40483800a55c0283300a0a80483600a55c0282c", + "0x284a012024ab80501209004809302014049540120700295700a0d402821", + "0x29550125340295700a05402826012024ab8052a80142980901255c02831", + "0x4824012024c10050125500494b00a55c0294d00a0a80483d00a55c0282c", + "0x1f0260480cc0483e00a55c028090620240495700a55402951012024ab805", + "0x20805306024ab82408001411809080014ab80508001427009080014ab805", + "0x490900a55c0280929c024218052ae0140a80504c0240495700a02412009", + "0x295700a10c0282a0120d80295700a0480295501243c0295700a42402892", + "0x1201c00a0480481c00a55c0282300a0840494c00a55c0290f00a4d404838", + "0x1b00901255c0284500a54c048092ae014048240124500298408e11412157", + "0x281c0124540295700a024a600901255c0294c00a4cc048092ae01423805", + "0x483800a55c0283800a0a80483600a55c0283600a5540484900a55c02915", + "0x48490480e01b01200a1240295700a1240283d0120900295700a0900294d", + "0x283e0121280295700a024a580901255c0291400a54c048092ae01404824", + "0x120092424781218523a46c121570481281c0360221000484a00a55c0284a", + "0x9980924c4941215700a530028950124880295700a0242080901255c02809", + "0x300530c144029570484980288d012024ab805012424048092ae01492805", + "0x485300a55c0285300a1380485300a55c028092280240495700a02412009", + "0x48240121a40298725a014ab8240a20144b009256014ab8050a648812115", + "0x293001219c0295700a4b4028980121a00295700a47402826012024ab805", + "0x8a8090aa014ab8050aa014270090aa014ab8050124500493400a55c02867", + "0xab8050d0014150090b0014ab805268158121150121580295700a15495824", + "0x495700a02412009012620028092a8024a00052ae0142c0050920249d005", + "0xab8050b8014238090b8014ab8050d2014228090b6014ab80523a01413009", + "0xa492b0484540494900a55c0294900a1380494900a55c028090620242f005", + "0x493a00a55c0285b00a0a80494700a55c0285e2900908a809290014ab805", + "0x284a012024ab80501209004809310014049540125000295700a51c02849", + "0x284e0121640295700a0241880928c014ab80523a0141300901255c02806", + "0x9d0052ae014a3005054024330052ae0142c9220484540485900a55c02859", + "0x350242ae014a000523a0240495700a0248d809280014ab8050cc01424809", + "0xab8050d8014910090d8014ab8050900149080901255c0286a00a47804848", + "0x9d0050540248d8052ae0148d8052aa024a28052ae0143700524a02437005", + "0x900528a014ab80528a0141e809048014ab805048014a6809274014ab805", + "0x292100a098048092ae014a60052660240495700a0241200928a0909d11b", + "0x49540121d00295700a1c40282a0121cc0295700a478029550121c402957", + "0xab805046014a980901255c0284100a544048092ae01404824012024c4805", + "0x287600a0a80483d00a55c0281200a5540487600a55c0281500a09804809", + "0x495700a08402953012024ab805012090048093040140495401252c02957", + "0xab8052820141500907a014ab805024014aa809282014ab80502a01413009", + "0x283d00a5540487900a55c0294400a0700494400a55c0280900c024a5805", + "0x283d0120900295700a0900294d01252c0295700a52c0282a0120f402957", + "0x281100a14c048092ae014048240121e41214b07a0480287900a55c02879", + "0x9e005054024398052ae0140b0052aa0249e0052ae0142700504c02404957", + "0x29550121f40295700a4ec0281c0124ec0295700a024958090e8014ab805", + "0x482400a55c0282400a5340487400a55c0287400a0a80487300a55c02873", + "0x12005012024ab8050120240487d0481d03981200a1f40295700a1f40283d", + "0x281200a554048092ae014048240121380b024314054090242ae09002809", + "0xf023036044ab8050220481209b0120440295700a0440292d01204802957", + "0x282300a044048092ae014048240120880298b042014ab82403c01497809", + "0x48092ae014048240120a80298c2aa09c121570480980281201209802957", + "0xa600901255c0282100a278048092ae014aa80506c0240495700a09c02953", + "0x481b00a55c0281b00a5540495400a55c0282c00a0700482c00a55c02809", + "0x295700a5500283d0120900295700a0900294d0120540295700a0540282a", + "0xa580901255c0282a00a54c048092ae014048240125501201503604802954", + "0x1215704854c0a81b0221000495300a55c0295300a0f80495300a55c02809", + "0x28a00120d40295700a0242080901255c02809048024a703304863418951", + "0x292e012024ab805012424048092ae0141b00513c0241c03604855c02821", + "0xa68052ae0141880504c0240495700a02412009038014c714c00a55c12038", + "0x1f0052580241f14b04855c0283d00a2940483d298090ab80529801451809", + "0x28a50121040295700a100028a70121000295700a52c0298f012024ab805", + "0x490f00a55c0290900a1c4048092ae014218053200248484304855c0294c", + "0x238052ae0142380509c024238052ae014049140121140295700a43c0285b", + "0x8a82422a0248a8052ae014209140484540491400a55c0284706a0908a809", + "0x491b00a55c0284900a1240484a00a55c0294d00a0a80484900a55c02845", + "0x1880504c0240495700a0700284a012024ab8050120900480932201404954", + "0x121150124780295700a4780284e0124780295700a0241880923a014ab805", + "0x8d8052ae01490805092024250052ae0148e805054024908052ae0148f035", + "0x495700a4880291e012494910242ae0148d80523a0240495700a0248d809", + "0xab8050a2014928090a2014ab80524c0149100924c014ab80524a01490809", + "0x1200529a024250052ae01425005054024a88052ae014a88052aa02403005", + "0x2809048024030240945440900500c014ab80500c0141e809048014ab805", + "0x283300a5540485300a55c0294e00a098048092ae0141080513c02404957", + "0xab80501209004809324014049540124b40295700a14c0282a0124ac02957", + "0x348052ae01404806012024ab8050460142980901255c0282200a12804809", + "0xab80502a01415009036014ab805036014aa8090d0014ab8050d20140e009", + "0xa81b024014340052ae0143400507a024120052ae0141200529a0240a805", + "0x295700a13802826012024ab8050220142980901255c0280904802434024", + "0xab8050124ac0492d00a55c0286700a0a80492b00a55c0281600a55404867", + "0x96805054024958052ae014958052aa0242a8052ae0149a0050380249a005", + "0x90050aa014ab8050aa0141e809048014ab805048014a680925a014ab805", + "0x1219302a048121570480140482400a0240495700a024048090aa0909692b", + "0xab80502a01415009024014ab805024014aa80901255c0280904802427016", + "0xf023036044ab80502205409011152024088052ae0140880525a0240a805", + "0x282100a4a8048092ae0140482401208802994042014ab82403c01455809", + "0x48092ae014048240120a8029952aa014ab82404e0145700904e09812157", + "0x4824012544029962a6550121570480b0028120120b00295700a09802811", + "0x295500a2b4048092ae014a980506c0240495700a55002953012024ab805", + "0x281b00a5540483300a55c0283100a0700483100a55c0280929802404957", + "0x283d0120900295700a0900294d01208c0295700a08c0282a01206c02957", + "0x295100a54c048092ae014048240120cc120230360480283300a55c02833", + "0x1181b0221000494e00a55c0294e00a0f80494e00a55c0280929602404957", + "0x295700a0242080901255c02809048024a603804865c1b03504855c1214e", + "0x1203d00a4a4048092ae014a680515a0241e94d04855c0295500a2c00481c", + "0x284e0121000295700a0248a00901255c028090480241f00533052c02957", + "0x1a8052ae0141a8052aa024208052ae0142001c0484540484000a55c02840", + "0xab80508201424809296014ab8052960145900906c014ab80506c01415009", + "0x295704843c0294801243c8484302255c028412960d81a81225002420805", + "0x2280528e0248a0052ae0148480504c0240495700a0241200908e014cc845", + "0x15009094014ab805086014aa80901255c0284900a1280484922a090ab805", + "0x12009012668028092a80248e8052ae0148a8050920248d8052ae0148a005", + "0x15009086014ab805086014aa80923c014ab80508e0140e00901255c02809", + "0x8f0052ae0148f00507a024120052ae0141200529a024848052ae01484805", + "0x2826012024ab80507c0142500901255c028090480248f02421210c09005", + "0x8a809244014ab80524401427009244014ab8050120c40492100a55c02836", + "0x295700a4840282a0121280295700a0d4029550124940295700a4880e024", + "0x9300523c0242892604855c0291d00a4740491d00a55c0292500a1240491b", + "0x292501214c0295700a018029220120180295700a14402921012024ab805", + "0x491b00a55c0291b00a0a80484a00a55c0284a00a5540492b00a55c02853", + "0x492b04846c2501200a4ac0295700a4ac0283d0120900295700a0900294d", + "0xaa80925a014ab8052980141300901255c0295500a2b4048092ae01404824", + "0x1200901266c028092a8024340052ae01496805054024348052ae0141c005", + "0x280900c0240495700a09802853012024ab8050540142500901255c02809", + "0x282a01206c0295700a06c029550124d00295700a19c0281c01219c02957", + "0x293400a55c0293400a0f40482400a55c0282400a5340482300a55c02823", + "0x29550121540295700a0880281c012024ab8050120900493404808c0d812", + "0x482400a55c0282400a5340482300a55c0282300a0a80481b00a55c0281b", + "0x2853012024ab8050120900485504808c0d81200a1540295700a1540283d", + "0x150090d2014ab80502c014aa8090ac014ab80509c0141300901255c02811", + "0x493a00a55c0285800a0700485800a55c02809256024340052ae0142b005", + "0x295700a0900294d0121a00295700a1a00282a0121a40295700a1a402955", + "0x48092ae014048090124e8120680d20480293a00a55c0293a00a0f404824", + "0x2811012024ab8050120900484e02c090ce015024090ab82400a02412005", + "0xab8050120900482100a6740f02304855c1201b00a0480481b00a55c02811", + "0xab8050122d00482600a55c0282200a0580482200a55c0281e00a05404809", + "0xa805054024090052ae014090052aa024aa8052ae0141180524202413805", + "0x2700904e014ab80504e014cf0092aa014ab8052aa0149680902a014ab805", + "0x5c0092a80b0150112ae014130272aa0540901516c024130052ae01413005", + "0x1215700a54c02927012024ab8050120900495100a67ca98052ae090aa005", + "0x2811012024ab8050120900483500a680a70052ae0901980524802419831", + "0xab8050120900481c00a684a603804855c1203600a0480483600a55c02831", + "0x495700a538028bb012024ab8052980141b00901255c0283800a54c04809", + "0x295700a0a8029550120f40295700a5340281c0125340295700a024a6009", + "0x283d00a0f40482400a55c0282400a5340482c00a55c0282c00a0a80482a", + "0x495700a07002953012024ab8050120900483d0480b01501200a0f402957", + "0x1214b0580a80884001252c0295700a52c0283e01252c0295700a024a5809", + "0x848242ae014a700517a0240495700a02412009086104121a20800f812157", + "0x284500a2f80484521e090ab80521e0149180901255c0290900a2ec0490f", + "0x8a00509c0248a8052ae014048410124500295700a11c0285b01211c02957", + "0x484a00a55c0290f00a3000484900a55c0291422a0908a809228014ab805", + "0x295700a128029200121000295700a1000282a0120f80295700a0f802955", + "0x8f11d236044ab8050921282003e0243080484900a55c0284900a1240484a", + "0x291d00a098048092ae01404824012488029a3242014ab82423c014a4009", + "0x291d012024ab8050a2014250090a24981215700a4840294701249402957", + "0x492b00a55c0285300a484048092ae0140300523c0242980604855c02926", + "0x295700a46c029550121a40295700a4b4029250124b40295700a4ac02922", + "0x286900a0f40482400a55c0282400a5340492500a55c0292500a0a80491b", + "0x295700a4880281c012024ab805012090048690484948d81200a1a402957", + "0x282400a5340491d00a55c0291d00a0a80491b00a55c0291b00a55404868", + "0xab805012090048680484748d81200a1a00295700a1a00283d01209002957", + "0xab805082014aa8090ce014ab8050860141300901255c0294e00a2ec04809", + "0x495700a02412009012690028092a80242a8052ae014338050540249a005", + "0x2b0052ae0141600504c0240495700a0c402853012024ab80506a01425009", + "0x49a500a024aa009274014ab8050ac014150090b0014ab805054014aa809", + "0x150052ae014150052aa024a00052ae014a88050380240495700a02412009", + "0xab8052800141e809048014ab805048014a6809058014ab80505801415009", + "0x48092ae014108052a60240495700a024120092800901602a024014a0005", + "0x295700a16c0282a0121600295700a0480295501216c0295700a05402826", + "0xab8050b0014aa8090bc014ab8050b80140e0090b8014ab8050120180493a", + "0x2f00507a024120052ae0141200529a0249d0052ae0149d0050540242c005", + "0xab8050220142980901255c028090480242f024274160090050bc014ab805", + "0x294900a0a80493400a55c0281600a5540494900a55c0284e00a09804809", + "0x9a0052aa024a38052ae014a4005038024a40052ae0140492b01215402957", + "0x1e809048014ab805048014a68090aa014ab8050aa01415009268014ab805", + "0x482400a0240495700a0240480928e0902a934024014a38052ae014a3805", + "0xab8050220140880901255c02809048024270160486980a81204855c12005", + "0xa80901255c028090480241080534e078118242ae0900d8050240240d805", + "0x482700a55c02809188024130052ae0141100502c024110052ae0140f005", + "0x295700a0540282a0120480295700a048029550125540295700a08c02921", + "0x282600a1380482700a55c0282700a47c0495500a55c0295500a4b404815", + "0x1215400a320049540580a80895700a0981395502a0480a8c601209802957", + "0x4833062090ab8052a60148e00901255c02809048024a880535054c02957", + "0xab8050620140880901255c028090480241a805352538029570480cc028cb", + "0xa980901255c028090480240e0053545301c0242ae0901b0050240241b005", + "0x494c012024ab80529c0148c80901255c0294c00a0d8048092ae0141c005", + "0x15009054014ab805054014aa80907a014ab80529a0140e00929a014ab805", + "0x1e8052ae0141e80507a024120052ae0141200529a024160052ae01416005", + "0x494b012024ab805038014a980901255c028090480241e8240580a809005", + "0x1f0242ae090a582c05404420009296014ab8052960141f009296014ab805", + "0x8c80921e4241215700a53802917012024ab80501209004843082090d5840", + "0x238052ae014228051a00242290f04855c0290f00a12c048092ae01484805", + "0x295700a4500284e0124540295700a02420809228014ab80508e0142d809", + "0x1f0052aa024250052ae0148780522c024248052ae0148a11504845404914", + "0x24809094014ab805094014d6009080014ab8050800141500907c014ab805", + "0x29480124788e91b02255c028490941001f01235a024248052ae01424805", + "0x928052ae0148e80504c0240495700a02412009244014d712100a55c1211e", + "0xab80524c0148e80901255c0285100a1280485124c090ab805242014a3809", + "0x95805244024958052ae014298052420240495700a0180291e01214c03024", + "0x15009236014ab805236014aa8090d2014ab80525a0149280925a014ab805", + "0x348052ae0143480507a024120052ae0141200529a024928052ae01492805", + "0xaa8090d0014ab8052440140e00901255c028090480243482424a46c09005", + "0x120052ae0141200529a0248e8052ae0148e8050540248d8052ae0148d805", + "0x8c80901255c028090480243402423a46c090050d0014ab8050d00141e809", + "0x493400a55c0284100a5540486700a55c0284300a098048092ae014a7005", + "0x284a012024ab8050120900480935e014049540121540295700a19c0282a", + "0x29550121580295700a0b002826012024ab8050620142980901255c02835", + "0x4824012024d80050125500493a00a55c0285600a0a80485800a55c0282a", + "0x282a0120a80295700a0a8029550125000295700a5440281c012024ab805", + "0x294000a55c0294000a0f40482400a55c0282400a5340482c00a55c0282c", + "0xa80504c0240495700a08402953012024ab805012090049400480b015012", + "0x3009274014ab8050b6014150090b0014ab805024014aa8090b6014ab805", + "0x485800a55c0285800a5540485e00a55c0285c00a0700485c00a55c02809", + "0x295700a1780283d0120900295700a0900294d0124e80295700a4e80282a", + "0x1300901255c0281100a14c048092ae014048240121781213a0b00480285e", + "0x2a8052ae014a48050540249a0052ae0140b0052aa024a48052ae01427005", + "0x295700a4d00295501251c0295700a5200281c0125200295700a02495809", + "0x294700a0f40482400a55c0282400a5340485500a55c0285500a0a804934", + "0xab82400a02412005012024ab805012024049470481549a01200a51c02957", + "0x481b00a55c0281100a044048092ae014048240121380b02436205409024", + "0x281e00a054048092ae01404824012084029b203c08c1215704806c02812", + "0x281b0120980295700a0980284e0120980295700a0880281601208802957", + "0x495700a024120092aa014d98092ae090138050460241382604855c02826", + "0x1215704808c0281201208c0295700a08c02821012024ab80504c0140f009", + "0x281601254c0295700a0b002815012024ab8050120900495400a6d01602a", + "0x188242ae090a88120480880495100a55c0295100a1380495100a55c02953", + "0x281500a098048092ae014198051a40240495700a0241200929c014da833", + "0x28210120e00295700a0d40282a0120d80295700a0c4029550120d402957", + "0x282a00a54c048092ae01404824012024db0050125500494c00a55c0282a", + "0xe005054024a68052ae014a70052aa0240e0052ae0140a80504c02404957", + "0xab8052a8014a980901255c02809048024049b700a024aa00907a014ab805", + "0x294b00a0a80494d00a55c0281200a5540494b00a55c0281500a09804809", + "0x495700a55402951012024ab8050120900480936e014049540120f402957", + "0xab80508001427009080014ab80507c098120330120f80295700a02418809", + "0xa80504c0240495700a02412009082014dc0092ae0902000504602420005", + "0x10809070014ab8050860141500906c014ab805024014aa809086014ab805", + "0x28090480242280537243c848242ae090a6005024024a60052ae01411805", + "0x295700a024a600901255c0290f00a0d8048092ae014848052a602404957", + "0x283800a0a80483600a55c0283600a5540491400a55c0284700a07004847", + "0x1b01200a4500295700a4500283d0120900295700a0900294d0120e002957", + "0x295700a024a580901255c0284500a54c048092ae0140482401245012038", + "0x121ba094124121570484541c0360221000491500a55c0291500a0f804915", + "0x295700a0242080923c014ab8050940141300901255c028090480248e91b", + "0x292500a484048092ae0149100523c0249292204855c0292100a47404921", + "0x29550120180295700a144029250121440295700a4980292201249802957", + "0x482400a55c0282400a5340491e00a55c0291e00a0a80484900a55c02849", + "0x2826012024ab805012090048060484782481200a0180295700a0180283d", + "0x492d00a55c0285300a0a80492b00a55c0291b00a5540485300a55c0291d", + "0x118052a60240495700a10402951012024ab8050120900480937601404954", + "0x282a0121a00295700a048029550121a40295700a05402826012024ab805", + "0x282100a54c048092ae01404824012024de0050125500486700a55c02869", + "0x9a005054024a68052ae014090052aa0249a0052ae0140a80504c02404957", + "0x30090ce014ab80507a014288090d0014ab80529a0149300907a014ab805", + "0x486800a55c0286800a5540485600a55c0285500a0700485500a55c02809", + "0x295700a1580283d0120900295700a0900294d01219c0295700a19c0282a", + "0x1300901255c0281100a14c048092ae01404824012158120670d004802856", + "0x968052ae0142c005054024958052ae0140b0052aa0242c0052ae01427005", + "0x295700a4ac029550125000295700a4e80281c0124e80295700a02495809", + "0x294000a0f40482400a55c0282400a5340492d00a55c0292d00a0a80492b", + "0xab82400a02412005012024ab805012024049400484b49581200a50002957", + "0x481200a55c0281200a554048092ae014048240121380b02437a05409024", + "0xf00525e0240f023036044ab8050220481209b0120440295700a0440292d", + "0x482600a55c0282300a044048092ae01404824012088029be042014ab824", + "0x282700a54c048092ae014048240120a8029bf2aa09c1215704809802812", + "0x295700a024a600901255c0282100a278048092ae014aa80506c02404957", + "0x281500a0a80481b00a55c0281b00a5540495400a55c0282c00a0700482c", + "0xd81200a5500295700a5500283d0120900295700a0900294d01205402957", + "0x295700a024a580901255c0282a00a54c048092ae0140482401255012015", + "0x121c00625441215704854c0a81b0221000495300a55c0295300a0f804953", + "0x1215700a084028a00120d40295700a0242080901255c02809048024a7033", + "0x29570480e00292e012024ab805012424048092ae0141b00513c0241c036", + "0xa6005146024a68052ae0141880504c0240495700a02412009038014e094c", + "0x48092ae0141f0052580241f14b04855c0283d00a2940483d298090ab805", + "0x1215700a530028a50121040295700a100028a70121000295700a52c0298f", + "0x290f00a16c0490f00a55c0290900a1c4048092ae0142180532002484843", + "0x1a82422a024238052ae0142380509c024238052ae0140491401211402957", + "0x295700a1148a82422a0248a8052ae014209140484540491400a55c02847", + "0xe10050125500491b00a55c0284900a1240484a00a55c0294d00a0a804849", + "0x8e8052ae0141880504c0240495700a0700284a012024ab80501209004809", + "0xab80523c0d4121150124780295700a4780284e0124780295700a02418809", + "0x28092360248d8052ae01490805092024250052ae0148e80505402490805", + "0x928052420240495700a4880291e012494910242ae0148d80523a02404957", + "0xaa80900c014ab8050a2014928090a2014ab80524c0149100924c014ab805", + "0x120052ae0141200529a024250052ae01425005054024a88052ae014a8805", + "0x4f00901255c02809048024030240945440900500c014ab80500c0141e809", + "0x492b00a55c0283300a5540485300a55c0294e00a098048092ae01410805", + "0x284a012024ab80501209004809386014049540124b40295700a14c0282a", + "0x34805038024348052ae01404806012024ab8050460142980901255c02822", + "0xa680902a014ab80502a01415009036014ab805036014aa8090d0014ab805", + "0x120090d00900a81b024014340052ae0143400507a024120052ae01412005", + "0x295501219c0295700a13802826012024ab8050220142980901255c02809", + "0xe009268014ab8050124ac0492d00a55c0286700a0a80492b00a55c02816", + "0x968052ae01496805054024958052ae014958052aa0242a8052ae0149a005", + "0x2a82425a4ac090050aa014ab8050aa0141e809048014ab805048014a6809", + "0x1200909c058121c402a048121570480140482400a0240495700a02404809", + "0x9b009022014ab80502201496809024014ab805024014aa80901255c02809", + "0x12009044014e282100a55c1201e00a2340481e04606c0895700a04409024", + "0xe315504e090ab82404c0140900904c014ab8050460140880901255c02809", + "0x495700a55402836012024ab80504e014a980901255c0280904802415005", + "0xaa0052ae01416005038024160052ae0140494c012024ab8050420146a009", + "0xab805048014a680902a014ab80502a01415009036014ab805036014aa809", + "0x495700a024120092a80900a81b024014aa0052ae014aa00507a02412005", + "0xa98052ae014a980507c024a98052ae0140494b012024ab805054014a9809", + "0x48092ae014048240125381982438e0c4a88242ae090a981503604420009", + "0x495700a0d8028d40120e01b0242ae014108052240241a8052ae01404841", + "0xab8050120900481c00a720a60052ae0901c00512c0240495700a02484809", + "0x283d00a4c00483d00a55c0294c00a2600494d00a55c0283100a09804809", + "0x1a82422a0241f0052ae0141f00509c0241f0052ae0140491401252c02957", + "0x218052ae014a6805054024208052ae014a58400484540484000a55c0283e", + "0x1300901255c02809048024049c900a024aa009212014ab80508201424809", + "0x238052ae0142280508e024228052ae0140e00508a024878052ae01418805", + "0xab8052280d4121150124500295700a4500284e0124500295700a02418809", + "0x284901210c0295700a43c0282a0121240295700a11c8a82422a0248a805", + "0x8f0092361281215700a4240291d012024ab80501246c0490900a55c02849", + "0x491e00a55c0291d00a4880491d00a55c0291b00a484048092ae01425005", + "0x295700a10c0282a0125440295700a544029550124840295700a47802925", + "0x120432a20480292100a55c0292100a0f40482400a55c0282400a53404843", + "0x910052ae014a700504c0240495700a084028d4012024ab80501209004921", + "0x49ca00a024aa00924c014ab8052440141500924a014ab805066014aa809", + "0x300901255c0282300a14c048092ae014110050940240495700a02412009", + "0x481b00a55c0281b00a5540480600a55c0285100a0700485100a55c02809", + "0x295700a0180283d0120900295700a0900294d0120540295700a0540282a", + "0x1300901255c0281100a14c048092ae014048240120181201503604802806", + "0x930052ae01429805054024928052ae0140b0052aa024298052ae01427005", + "0x295700a494029550124b40295700a4ac0281c0124ac0295700a02495809", + "0x292d00a0f40482400a55c0282400a5340492600a55c0292600a0a804925", + "0xab82400a02412005012024ab8050120240492d0484989281200a4b402957", + "0x481200a55c0281200a554048092ae014048240121380b02439605409024", + "0x281102a048089110120440295700a0440292d0120540295700a0540282a", + "0x495700a02412009044014e602100a55c1201e00a35c0481e04606c08957", + "0x12009054014e695500a55c1202700a3640482704c090ab80504201488009", + "0xe71532a8090ab82405801409009058014ab80504c0140880901255c02809", + "0x495700a54c02836012024ab8052a8014a980901255c02809048024a8805", + "0x198052ae01418805038024188052ae0140494c012024ab8052aa01487009", + "0xab805048014a6809046014ab80504601415009036014ab805036014aa809", + "0x495700a024120090660901181b024014198052ae0141980507a02412005", + "0xa70052ae014a700507c024a70052ae0140494b012024ab8052a2014a9809", + "0x48092ae014048240125301c02439e0d81a8242ae090a702303604420009", + "0x495700a5340290e0120f4a68242ae014aa8053a00240e0052ae01404841", + "0x283600a098048092ae014048240120f8029d1296014ab82407a0146d809", + "0x2d809086014ab805082014a000908252c1215700a52c0293a01210002957", + "0x490f00a55c0290f00a1380490f00a55c02809228024848052ae01421805", + "0x290908a0908a809212014ab8052120142700908a014ab80521e07012115", + "0x282a0120d40295700a0d4029550124500295700a52c0285c01211c02957", + "0x484700a55c0284700a1240491400a55c0291400a1780484000a55c02840", + "0x28809236014ab80522a014930090941248a8112ae014239140800d409149", + "0x12009012748028092a80248f0052ae014250051ba0248e8052ae01424805", + "0x492207c090ab80507c01485009242014ab80506c0141300901255c02809", + "0x288052ae014048310124980295700a4940285b0124940295700a488028e1", + "0x292600a1380480600a55c028510380908a8090a2014ab8050a201427009", + "0xaa809256014ab80507c014830090a6014ab80524c0181211501249802957", + "0x958052ae014958051fe024908052ae014908050540241a8052ae0141a805", + "0x48680d24b40895700a14c9592106a0487e8090a6014ab8050a601424809", + "0x295700a1a0028dd0124740295700a1a40285101246c0295700a4b402926", + "0x8e80504c0240495700a02412009268014e986700a55c1211e00a5200491e", + "0x8e80901255c0285800a128048580ac090ab8050ce014a38090aa014ab805", + "0x2d8052ae014a00052420240495700a4e80291e0125009d0242ae0142b005", + "0xab805236014aa8090bc014ab8050b8014928090b8014ab8050b601491009", + "0x2f00507a024120052ae0141200529a0242a8052ae0142a8050540248d805", + "0xab8052680140e00901255c028090480242f0240aa46c090050bc014ab805", + "0x1200529a0248e8052ae0148e8050540248d8052ae0148d8052aa024a4805", + "0x2809048024a482423a46c09005292014ab8052920141e809048014ab805", + "0x283800a5540494800a55c0294c00a098048092ae014aa80521c02404957", + "0xab805012090048093a8014049540125180295700a5200282a01251c02957", + "0x2c8052ae01404806012024ab80504c0142980901255c0282a00a12804809", + "0xab80504601415009036014ab805036014aa8090cc014ab8050b20140e009", + "0x1181b024014330052ae0143300507a024120052ae0141200529a02411805", + "0xab805036014aa8090d4014ab8050440140e00901255c0280904802433024", + "0x3500507a024120052ae0141200529a024118052ae014118050540240d805", + "0xab8050220142980901255c028090480243502404606c090050d4014ab805", + "0x284800a0a80494700a55c0281600a5540484800a55c0284e00a09804809", + "0xa38052aa024370052ae01436005038024360052ae0140492b01251802957", + "0x1e809048014ab805048014a680928c014ab80528c0141500928e014ab805", + "0x482400a0240495700a024048090dc090a3147024014370052ae01437005", + "0xab805024014aa80901255c02809048024270160487540a81204855c12005", + "0x481e04606c0895700a044090241f8024088052ae0140880525a02409005", + "0xab8050460140880901255c02809048024110053ac08402957048078028f7", + "0xa980901255c02809048024150053ae554138242ae0901300502402413005", + "0x494c012024ab8050420147a80901255c0295500a0d8048092ae01413805", + "0x15009036014ab805036014aa8092a8014ab8050580140e009058014ab805", + "0xaa0052ae014aa00507a024120052ae0141200529a0240a8052ae0140a805", + "0x494b012024ab805054014a980901255c02809048024aa02402a06c09005", + "0xa88242ae090a9815036044200092a6014ab8052a60141f0092a6014ab805", + "0x108051f40241a8052ae01404841012024ab8050120900494e066090ec031", + "0x1c0051e60240495700a0248480901255c0283600a3d40483806c090ab805", + "0x494d00a55c0283100a098048092ae01404824012070029d9298014ab824", + "0x284000a16c0484000a55c0283d00a1c40483e2960f40895700a53002945", + "0x28710124240295700a10c0285b01210c0295700a52c0287101210402957", + "0x2700908e014ab8050124500484500a55c0290f00a16c0490f00a55c0283e", + "0xab805082450121150124500295700a11c1a82422a024238052ae01423805", + "0x15009094014ab80508a124121150121240295700a4248a82422a0248a805", + "0x12009012768028092a80248e8052ae014250050920248d8052ae014a6805", + "0x4922242090ab8050380140000923c014ab8050620141300901255c02809", + "0x295700a488028450124980295700a494028470124940295700a48402845", + "0xab8050a6014270090a6014ab8050120c40480600a55c0285100a11c04851", + "0x8a80925a014ab80524c4ac121150124ac0295700a14c1a82422a02429805", + "0x295700a1a40284901246c0295700a4780282a0121a40295700a01896824", + "0xab8050d00148f0090ce1a01215700a4740291d012024ab80501246c0491d", + "0x285500a4940485500a55c0293400a4880493400a55c0286700a48404809", + "0x294d01246c0295700a46c0282a0125440295700a5440295501215802957", + "0x48240121581211b2a20480285600a55c0285600a0f40482400a55c02824", + "0x198052aa0242c0052ae014a700504c0240495700a084028f5012024ab805", + "0x2809048024049db00a024aa009280014ab8050b001415009274014ab805", + "0x295700a0240300901255c0282300a14c048092ae0141100509402404957", + "0x281500a0a80481b00a55c0281b00a5540485c00a55c0285b00a0700485b", + "0xd81200a1700295700a1700283d0120900295700a0900294d01205402957", + "0xab80509c0141300901255c0281100a14c048092ae0140482401217012015", + "0x2809256024a00052ae0142f0050540249d0052ae0140b0052aa0242f005", + "0x282a0124e80295700a4e8029550125200295700a5240281c01252402957", + "0x294800a55c0294800a0f40482400a55c0282400a5340494000a55c02940", + "0xee015024090ab82400a02412005012024ab805012024049480485009d012", + "0x281500a0a80481200a55c0281200a554048092ae014048240121380b024", + "0x1181b02255c0281102a048089dd0120440295700a0440292d01205402957", + "0x108053c00240495700a02412009044014ef82100a55c1201e00a7780481e", + "0x495700a02412009054014f115500a55c1202700a7840482704c090ab805", + "0x120092a2014f19532a8090ab82405801409009058014ab80504c01408809", + "0xaa8053c80240495700a54c02836012024ab8052a8014a980901255c02809", + "0xd8052aa024198052ae01418805038024188052ae0140494c012024ab805", + "0x1e809048014ab805048014a6809046014ab80504601415009036014ab805", + "0xa88052a60240495700a024120090660901181b024014198052ae01419805", + "0xd811080024a70052ae014a700507c024a70052ae0140494b012024ab805", + "0xab805012104048092ae014048240125301c0243ca0d81a8242ae090a7023", + "0x1e8053ce0240495700a534029e40120f4a68242ae014aa8053cc0240e005", + "0x484000a55c0283600a098048092ae014048240120f8029e8296014ab824", + "0xab8052120142d809212014ab805082014388090861041215700a52c0293b", + "0x285b01211c0295700a11402938012114218242ae014218050fa02487805", + "0x8a80922a014ab80522a0142700922a014ab8050124500491400a55c02847", + "0xab80522801427009094014ab80521e124121150121240295700a4540e024", + "0x29550124740295700a10c0288001246c0295700a4502502422a0248a005", + "0x491d00a55c0291d00a2080484000a55c0284000a0a80483500a55c02835", + "0x930092444848f0112ae0148d91d0800d40913701246c0295700a46c02849", + "0x288052ae014910051ba024930052ae014908050a2024928052ae0148f005", + "0xf500900c014ab80506c0141300901255c02809048024049e900a024aa009", + "0x295700a4b4028470124b40295700a14c028450124ac298242ae0141f005", + "0x338050b6024338052ae014340051c20243412b04855c0292b00a42804869", + "0x121150121540295700a1540284e0121540295700a02418809268014ab805", + "0x295700a4d00284e0121600295700a1a42b02422a0242b0052ae0142a81c", + "0x1a8052aa024a00052ae0149580520c0249d0052ae0149a05804845404934", + "0x24809280014ab8052800147f80900c014ab80500c0141500906a014ab805", + "0x29260121782e05b02255c0293a2800181a8121fa0249d0052ae0149d005", + "0x485100a55c0285e00a3740492600a55c0285c00a1440492500a55c0285b", + "0xab80524c0141300901255c02809048024a40053d65240295704814402948", + "0xa300523a0240495700a1640284a012164a30242ae014a480528e024a3805", + "0x91009090014ab8050d40149080901255c0286600a4780486a0cc090ab805", + "0x928052ae014928052aa024370052ae0143600524a024360052ae01424005", + "0xab8050dc0141e809048014ab805048014a680928e014ab80528e01415009", + "0xa28052ae014a40050380240495700a024120090dc090a392502401437005", + "0xab805048014a680924c014ab80524c0141500924a014ab80524a014aa809", + "0x495700a0241200928a09093125024014a28052ae014a280507a02412005", + "0x295700a0e0029550121c40295700a53002826012024ab8052aa014f2009", + "0x48092ae01404824012024f60050125500487400a55c0287100a0a804873", + "0xe0090ec014ab805012018048092ae014130050a60240495700a0a80284a", + "0x118052ae014118050540240d8052ae0140d8052aa024a08052ae0143b005", + "0xa082404606c09005282014ab8052820141e809048014ab805048014a6809", + "0xd8052ae0140d8052aa024a20052ae014110050380240495700a02412009", + "0xab8052880141e809048014ab805048014a6809046014ab80504601415009", + "0x48092ae014088050a60240495700a024120092880901181b024014a2005", + "0x295700a1e40282a0121cc0295700a058029550121e40295700a13802826", + "0xab8050e6014aa809276014ab8052780140e009278014ab8050124ac04874", + "0x9d80507a024120052ae0141200529a0243a0052ae0143a00505402439805", + "0x120050120900280901255c028090120249d8240e81cc09005276014ab805", + "0x90052ae014090052aa0240495700a0241200909c058121ed02a04812157", + "0x29ef0120781181b02255c02811024090f7009022014ab80502201496809", + "0x130052ae014118050220240495700a02412009044014f802100a55c1201e", + "0x138052a60240495700a02412009054014f895504e090ab82404c01409009", + "0xab805012530048092ae014108053e40240495700a55402836012024ab805", + "0xa8050540240d8052ae0140d8052aa024aa0052ae0141600503802416005", + "0x90052a8014ab8052a80141e809048014ab805048014a680902a014ab805", + "0xab80501252c048092ae014150052a60240495700a024120092a80900a81b", + "0xf98312a2090ab8242a60540d811080024a98052ae014a980507c024a9805", + "0xab805042014fa00906a014ab805012104048092ae0140482401253819824", + "0xab824070014fa80901255c028092120240495700a0d8029f20120e01b024", + "0xa680509c024a68052ae01404914012024ab8050120900481c00a7d8a6005", + "0xfb94b00a55c1214c00a2580483d00a55c0294d06a0908a80929a014ab805", + "0xab8052960144c009080014ab8050620141300901255c028090480241f005", + "0x290900a1380490900a55c02809228024218052ae0142080526002420805", + "0x484500a55c0284321e0908a80921e014ab8052120f41211501242402957", + "0x48093f0014049540124500295700a1140284901211c0295700a1000282a", + "0x484900a55c0283e00a1140491500a55c0283100a098048092ae01404824", + "0x8d8052ae0148d80509c0248d8052ae014048310121280295700a12402847", + "0x8a8050540248f0052ae0142511d0484540491d00a55c0291b07a0908a809", + "0x2809048024049f800a024aa009228014ab80523c0142480908e014ab805", + "0x910050b6024910052ae0140e0050e2024908052ae0141880504c02404957", + "0x121150124980295700a4980284e0124980295700a0241880924a014ab805", + "0x295700a4840282a0120180295700a4942882422a024288052ae01493035", + "0x1215700a4500291d012024ab80501246c0491400a55c0280600a12404847", + "0x292d00a4880492d00a55c0292b00a484048092ae0142980523c02495853", + "0x282a0125440295700a544029550121a00295700a1a4029250121a402957", + "0x286800a55c0286800a0f40482400a55c0282400a5340484700a55c02847", + "0xa700504c0240495700a084029f2012024ab8050120900486804811ca8812", + "0xaa0090aa014ab8050ce01415009268014ab805066014aa8090ce014ab805", + "0x282300a14c048092ae014110050940240495700a024120090127e402809", + "0x281b00a5540485800a55c0285600a0700485600a55c0280900c02404957", + "0x283d0120900295700a0900294d0120540295700a0540282a01206c02957", + "0x281100a14c048092ae01404824012160120150360480285800a55c02858", + "0x9d0050540249a0052ae0140b0052aa0249d0052ae0142700504c02404957", + "0x295501216c0295700a5000281c0125000295700a024958090aa014ab805", + "0x482400a55c0282400a5340485500a55c0285500a0a80493400a55c02934", + "0x12005012024ab8050120240485b0481549a01200a16c0295700a16c0283d", + "0x281200a554048092ae014048240121380b0243f4054090242ae09002809", + "0xf023036044ab805022048121fb0120440295700a0440292d01204802957", + "0x282300a044048092ae01404824012088029fd042014ab82403c014fe009", + "0x48092ae014048240120a8029fe2aa09c121570480980281201209802957", + "0xa600901255c0282100a7fc048092ae014aa80506c0240495700a09c02953", + "0x481b00a55c0281b00a5540495400a55c0282c00a0700482c00a55c02809", + "0x295700a5500283d0120900295700a0900294d0120540295700a0540282a", + "0xa580901255c0282a00a54c048092ae014048240125501201503604802954", + "0x1215704854c0a81b0221000495300a55c0295300a0f80495300a55c02809", + "0x2a010120d40295700a0242080901255c02809048024a703304880018951", + "0x2a02012024ab805012424048092ae0141b0053fe0241c03604855c02821", + "0xa68052ae0141880504c0240495700a024120090380150194c00a55c12038", + "0x295700a0248a009296014ab80507a0149800907a014ab8052980144c009", + "0x2002422a024200052ae0141f0350484540483e00a55c0283e00a1380483e", + "0x490900a55c0284100a1240484300a55c0294d00a0a80484100a55c0294b", + "0x8780509c024878052ae01404831012024ab8050120900480940801404954", + "0x10304700a55c1201c00a8140484500a55c0290f06a0908a80921e014ab805", + "0xab80508e0143880922a014ab8050620141300901255c028090480248a005", + "0x291b00a1380491b00a55c02809228024250052ae014248050b602424805", + "0x491e00a55c0284a23a0908a80923a014ab8052361141211501246c02957", + "0x4809408014049540124240295700a4780284901210c0295700a4540282a", + "0x18809242014ab8050620141300901255c0291400a128048092ae01404824", + "0x928052ae014910450484540492200a55c0292200a1380492200a55c02809", + "0x495700a0248d809212014ab80524a01424809086014ab80524201415009", + "0xab8050a20149080901255c0292600a4780485124c090ab8052120148e809", + "0xa88052aa024958052ae0142980524a024298052ae0140300524402403005", + "0x1e809048014ab805048014a6809086014ab805086014150092a2014ab805", + "0x108053fe0240495700a0241200925609021951024014958052ae01495805", + "0x282a0121a40295700a0cc029550124b40295700a53802826012024ab805", + "0x282200a128048092ae01404824012025038050125500486800a55c0292d", + "0xab8050ce0140e0090ce014ab805012018048092ae014118050a602404957", + "0x1200529a0240a8052ae0140a8050540240d8052ae0140d8052aa0249a005", + "0x28090480249a02402a06c09005268014ab8052680141e809048014ab805", + "0x281600a5540485500a55c0284e00a098048092ae014088050a602404957", + "0x2b0050380242b0052ae0140492b0121a00295700a1540282a0121a402957", + "0xa68090d0014ab8050d0014150090d2014ab8050d2014aa8090b0014ab805", + "0x48090b0090340690240142c0052ae0142c00507a024120052ae01412005", + "0x2809048024270160488200a81204855c120050120900280901255c02809", + "0x9024412024088052ae0140880525a024090052ae014090052aa02404957", + "0x2809048024110054160840295704807802a0a0120781181b02255c02811", + "0x15005418554138242ae09013005024024130052ae0141180502202404957", + "0x10680901255c0295500a0d8048092ae014138052a60240495700a02412009", + "0xaa8092a8014ab8050580140e009058014ab805012530048092ae01410805", + "0x120052ae0141200529a0240a8052ae0140a8050540240d8052ae0140d805", + "0xa980901255c02809048024aa02402a06c090052a8014ab8052a80141e809", + "0x200092a6014ab8052a60141f0092a6014ab80501252c048092ae01415005", + "0x4841012024ab8050120900494e066091070312a2090ab8242a60540d811", + "0x8480901255c0283600a8340483806c090ab8050420150780906a014ab805", + "0x48092ae0140482401207002a11298014ab8240700150800901255c02809", + "0x295700a0f4029300120f40295700a530028980125340295700a0c402826", + "0x283e06a0908a80907c014ab80507c0142700907c014ab8050124500494b", + "0x24809086014ab80529a01415009082014ab8052961001211501210002957", + "0x1880504c0240495700a02412009012848028092a8024848052ae01420805", + "0x8a04704855c0284500a29404845038090ab8050380145180921e014ab805", + "0x295700a454028a70124540295700a11c0298f012024ab80522801496009", + "0x291b00a1c4048092ae014250053200248d84a04855c0281c00a29404849", + "0x9080509c024908052ae014048310124780295700a4740285b01247402957", + "0x928052ae014249220484540492200a55c0292106a0908a809242014ab805", + "0x292600a1240484300a55c0290f00a0a80492600a55c0291e24a0908a809", + "0x2880523c0240305104855c0290900a474048092ae0140491b01242402957", + "0x29250124ac0295700a14c0292201214c0295700a01802921012024ab805", + "0x484300a55c0284300a0a80495100a55c0295100a5540492d00a55c0292b", + "0x492d04810ca881200a4b40295700a4b40283d0120900295700a0900294d", + "0xaa8090d2014ab80529c0141300901255c0282100a834048092ae01404824", + "0x1200901284c028092a8024338052ae01434805054024340052ae01419805", + "0x280900c0240495700a08c02853012024ab8050440142500901255c02809", + "0x282a01206c0295700a06c029550121540295700a4d00281c0124d002957", + "0x285500a55c0285500a0f40482400a55c0282400a5340481500a55c02815", + "0x2700504c0240495700a04402853012024ab805012090048550480540d812", + "0x958090ce014ab8050ac014150090d0014ab80502c014aa8090ac014ab805", + "0x486800a55c0286800a5540493a00a55c0285800a0700485800a55c02809", + "0x295700a4e80283d0120900295700a0900294d01219c0295700a19c0282a", + "0x90242ae09002809048014048092ae014048090124e8120670d00480293a", + "0x282a0120480295700a04802955012024ab8050120900484e02c0910a015", + "0x895700a0440a8120228540481100a55c0281100a4b40481500a55c02815", + "0x10c00901255c028090480241100542e0840295704807802a160120781181b", + "0x2809048024150054345540295704809c02a1901209c130242ae01410805", + "0xa880543654caa0242ae09016005024024160052ae0141300502202404957", + "0x10e00901255c0295300a0d8048092ae014aa0052a60240495700a02412009", + "0xaa809066014ab8050620140e009062014ab805012530048092ae014aa805", + "0x120052ae0141200529a024118052ae014118050540240d8052ae0140d805", + "0xa980901255c028090480241982404606c09005066014ab8050660141e809", + "0x2000929c014ab80529c0141f00929c014ab80501252c048092ae014a8805", + "0x4841012024ab8050120900494c0700910e83606a090ab82429c08c0d811", + "0x10f00901255c0294d00a8700483d29a090ab8052aa014ae809038014ab805", + "0x295700a0d802826012024ab8050120900483e00a87ca58052ae0901e805", + "0xab8050124500484300a55c0284100a4c00484100a55c0294b00a26004840", + "0x1211501243c0295700a4240e02422a024848052ae0148480509c02484805", + "0x8a0052ae01420005054024238052ae0141a8052aa024228052ae0142190f", + "0x1880901255c0280904802404a2000a024aa00922a014ab80508a01424809", + "0x250052ae0142481c0484540484900a55c0284900a1380484900a55c02809", + "0xab80507c0145900906c014ab80506c0141500906a014ab80506a014aa809", + "0x8e91b02255c0284a07c0d81a812250024250052ae014250050920241f005", + "0x8e80504c0240495700a024120092440151092100a55c1211e00a5200491e", + "0xaa80901255c0285100a1280485124c090ab805242014a380924a014ab805", + "0x8a8052ae014930050920248a0052ae01492805054024238052ae0148d805", + "0xab8050a60149080901255c0280600a4780485300c090ab80522a0148e809", + "0x238052aa024348052ae0149680524a024968052ae0149580524402495805", + "0x1e809048014ab805048014a6809228014ab8052280141500908e014ab805", + "0x910050380240495700a024120090d20908a047024014348052ae01434805", + "0xa680923a014ab80523a01415009236014ab805236014aa8090d0014ab805", + "0x120090d00908e91b024014340052ae0143400507a024120052ae01412005", + "0x295501219c0295700a53002826012024ab8052aa0150e00901255c02809", + "0x4824012025110050125500485500a55c0286700a0a80493400a55c02838", + "0xab805012018048092ae014130050a60240495700a0a80284a012024ab805", + "0x118050540240d8052ae0140d8052aa0242c0052ae0142b0050380242b005", + "0x90050b0014ab8050b00141e809048014ab805048014a6809046014ab805", + "0xd8052aa0249d0052ae014110050380240495700a024120090b00901181b", + "0x1e809048014ab805048014a6809046014ab80504601415009036014ab805", + "0x88050a60240495700a024120092740901181b0240149d0052ae0149d005", + "0x282a0124d00295700a058029550125000295700a13802826012024ab805", + "0xaa8090b8014ab8050b60140e0090b6014ab8050124ac0485500a55c02940", + "0x120052ae0141200529a0242a8052ae0142a8050540249a0052ae0149a005", + "0x280901255c028090120242e0240aa4d0090050b8014ab8050b80141e809", + "0x90052aa0240495700a0241200909c0581222302a0481215704801404824", + "0x1181b02255c028110240909b009022014ab80502201496809024014ab805", + "0x108051a80240495700a024120090440151202100a55c1201e00a2340481e", + "0x2a252aa09c12157048098028120120980295700a08c02811012024ab805", + "0x48092ae014aa80506c0240495700a09c02953012024ab8050120900482a", + "0xd8052ae0140d8052aa024aa0052ae01416005038024160052ae0140494c", + "0xab8052a80141e809048014ab805048014a680902a014ab80502a01415009", + "0x48092ae014150052a60240495700a024120092a80900a81b024014aa005", + "0xab8242a60540d811080024a98052ae014a980507c024a98052ae0140494b", + "0x483500a55c0283100a098048092ae014048240125381982444c0c4a8824", + "0x495700a0e00291e0125301c0242ae0141b00523a0241b0052ae01404841", + "0xab80529a0149280929a014ab80503801491009038014ab80529801490809", + "0x1200529a0241a8052ae0141a805054024a88052ae014a88052aa0241e805", + "0x28090480241e82406a5440900507a014ab80507a0141e809048014ab805", + "0xa58050540241f0052ae014198052aa024a58052ae014a700504c02404957", + "0xab8050440142500901255c0280904802404a2700a024aa009080014ab805", + "0x295700a1040281c0121040295700a0240300901255c0282300a14c04809", + "0x282400a5340481500a55c0281500a0a80481b00a55c0281b00a55404843", + "0xab805012090048430480540d81200a10c0295700a10c0283d01209002957", + "0xab80502c014aa809212014ab80509c0141300901255c0281100a14c04809", + "0x290f00a0700490f00a55c02809256024200052ae014848050540241f005", + "0x294d0121000295700a1000282a0120f80295700a0f80295501211402957", + "0x48090121141204007c0480284500a55c0284500a0f40482400a55c02824", + "0xab8050120900484e02c09114015024090ab82400a02412005012024ab805", + "0x482100a8a40f02304855c1201b00a0480481b00a55c0281100a04404809", + "0x482600a55c0282200a0580482200a55c0281e00a054048092ae01404824", + "0x120090540151595504e090ab82404c0481222a0120980295700a0980284e", + "0x116154058090ab82404601409009046014ab8050460141080901255c02809", + "0xab8052a20140b0092a2014ab8052a80140a80901255c02809048024a9805", + "0x2a2e29c0cc121570480c41382445a024188052ae0141880509c02418805", + "0x121570480b0028120120b00295700a0b002821012024ab80501209004835", + "0x1c00506c0240495700a0d802953012024ab8050120900494c00a8bc1c036", + "0xab805012530048092ae014aa8053200240495700a5380292c012024ab805", + "0xa805054024198052ae014198052aa024a68052ae0140e0050380240e005", + "0x900529a014ab80529a0141e809048014ab805048014a680902a014ab805", + "0xab80501252c048092ae014a60052a60240495700a0241200929a0900a833", + "0x11803e296090ab82407a054198110800241e8052ae0141e80507c0241e805", + "0xa71550488c40484300a55c0283e00a098048092ae0140482401210420024", + "0xae00901255c0290f00a8cc0484521e090ab80521201519009212014ab805", + "0x1215700a11c028a501211c228242ae01422805146024228052ae01422805", + "0x284900a29c0484900a55c0291400a63c048092ae0148a8052580248a914", + "0x2871012024ab805236014c800923a46c1215700a114028a501212802957", + "0x8a809244014ab8050121040492100a55c0291e00a16c0491e00a55c0291d", + "0xab80524c0148e80924c014ab805242494121150124940295700a12891024", + "0x29805244024298052ae014030052420240495700a1440291e01201828824", + "0x15009296014ab805296014aa80925a014ab80525601492809256014ab805", + "0x968052ae0149680507a024120052ae0141200529a024218052ae01421805", + "0x2990012024ab80529c0149600901255c028090480249682408652c09005", + "0x150090d0014ab805080014aa8090d2014ab8050820141300901255c02955", + "0x160052a60240495700a024120090128d0028092a8024338052ae01434805", + "0x1a8052aa0249a0052ae0140a80504c0240495700a55402990012024ab805", + "0x280904802404a3500a024aa0090ac014ab805268014150090aa014ab805", + "0xab80502a0141300901255c0295500a640048092ae014a98052a602404957", + "0x28092a80242b0052ae0142c0050540242a8052ae014138052aa0242c005", + "0x295700a05402826012024ab805046014a980901255c0280904802404a35", + "0x11a8050125500485600a55c0293a00a0a80485500a55c0282a00a5540493a", + "0xa00052ae0140a80504c0240495700a08402953012024ab80501209004809", + "0x295700a024030090ac014ab805280014150090aa014ab805024014aa809", + "0x285600a0a80485500a55c0285500a5540485c00a55c0285b00a0700485b", + "0x2a81200a1700295700a1700283d0120900295700a0900294d01215802957", + "0xab80509c0141300901255c0281100a14c048092ae0140482401217012056", + "0x2809256024338052ae0142f005054024340052ae0140b0052aa0242f005", + "0x282a0121a00295700a1a0029550125200295700a5240281c01252402957", + "0x294800a55c0294800a0f40482400a55c0282400a5340486700a55c02867", + "0x11b015024090ab82400a02412005012024ab8050120240494804819c34012", + "0x281100a4b40481200a55c0281200a554048092ae014048240121380b024", + "0x108052ae0900f0054700240f023036044ab8050220481223701204402957", + "0x1202600a0480482600a55c0282300a044048092ae0140482401208802a39", + "0x1b00901255c0282700a54c048092ae014048240120a802a3a2aa09c12157", + "0x281c0120b00295700a024a600901255c0282100a8ec048092ae014aa805", + "0x481500a55c0281500a0a80481b00a55c0281b00a5540495400a55c0282c", + "0x49540480540d81200a5500295700a5500283d0120900295700a0900294d", + "0x283e01254c0295700a024a580901255c0282a00a54c048092ae01404824", + "0x1200929c0cc1223c0625441215704854c0a81b0221000495300a55c02953", + "0x483806c090ab8050420151e80906a014ab8050620141300901255c02809", + "0x1215700a53002a3f0125301c0242ae0141c00547c0240495700a0d802a3b", + "0x283d00a29c0483d00a55c0281c00a63c048092ae014a6805466024a681c", + "0x28a3012024ab80507c014c80090800f81215700a0e002a3f01252c02957", + "0x495700a4240292c012424218242ae0142080514a0242084004855c02840", + "0xab8050800145280908a014ab80521e0145380921e014ab805086014c7809", + "0x8a8050b60248a8052ae0148a0050e20240495700a11c0299001245023824", + "0x8a809236014ab805296128121150121280295700a02420809092014ab805", + "0xab80523c0148e80923c014ab805092474121150124740295700a1148d824", + "0x92805244024928052ae014910052420240495700a4840291e01248890824", + "0x150092a2014ab8052a2014aa8090a2014ab80524c0149280924c014ab805", + "0x288052ae0142880507a024120052ae0141200529a0241a8052ae0141a805", + "0x2826012024ab8050420151d80901255c028090480242882406a54409005", + "0x492b00a55c0280600a0a80485300a55c0283300a5540480600a55c0294e", + "0x118050a60240495700a0880284a012024ab8050120900480948001404954", + "0xd8052aa024348052ae01496805038024968052ae01404806012024ab805", + "0x1e809048014ab805048014a680902a014ab80502a01415009036014ab805", + "0x88050a60240495700a024120090d20900a81b024014348052ae01434805", + "0x282a01214c0295700a058029550121a00295700a13802826012024ab805", + "0xaa809268014ab8050ce0140e0090ce014ab8050124ac0492b00a55c02868", + "0x120052ae0141200529a024958052ae01495805054024298052ae01429805", + "0x280901255c028090120249a02425614c09005268014ab8052680141e809", + "0x88050220240495700a0241200909c0581224102a0481215704801404824", + "0x495700a024120090420152101e046090ab82403601409009036014ab805", + "0x482200a55c028092980240495700a07802836012024ab805046014a9809", + "0x295700a0540282a0120480295700a048029550120980295700a0880281c", + "0x120150240480282600a55c0282600a0f40482400a55c0282400a53404815", + "0x482700a55c028092960240495700a08402953012024ab80501209004826", + "0xaa02c04890c1515504855c1202702a0480884001209c0295700a09c0283e", + "0x495100a55c02809082024a98052ae0141500504c0240495700a02412009", + "0x295700a0cc02921012024ab8050620148f0090660c41215700a5440291d", + "0x295500a5540483600a55c0283500a4940483500a55c0294e00a4880494e", + "0x283d0120900295700a0900294d01254c0295700a54c0282a01255402957", + "0x295400a098048092ae014048240120d8121532aa0480283600a55c02836", + "0x49540120700295700a0e00282a0125300295700a0b0029550120e002957", + "0xab80509c0141300901255c0281100a14c048092ae0140482401202522005", + "0x28092560240e0052ae014a6805054024a60052ae0140b0052aa024a6805", + "0x282a0125300295700a5300295501252c0295700a0f40281c0120f402957", + "0x294b00a55c0294b00a0f40482400a55c0282400a5340481c00a55c0281c", + "0x122815024090ab82400a02412005012024ab8050120240494b048070a6012", + "0x281100a4b40481200a55c0281200a554048092ae014048240121380b024", + "0x108052ae0900f00548e0240f023036044ab8050220481224601204402957", + "0x1202600a0480482600a55c0282300a044048092ae0140482401208802a48", + "0x1b00901255c0282700a54c048092ae014048240120a802a492aa09c12157", + "0x281c0120b00295700a024a600901255c0282100a578048092ae014aa805", + "0x481500a55c0281500a0a80481b00a55c0281b00a5540495400a55c0282c", + "0x49540480540d81200a5500295700a5500283d0120900295700a0900294d", + "0x283e01254c0295700a024a580901255c0282a00a54c048092ae01404824", + "0x1200929c0cc1224a0625441215704854c0a81b0221000495300a55c02953", + "0x483806c090ab8050420152580906a014ab8050620141300901255c02809", + "0x1215700a53002a4d0125301c0242ae0141c0054980240495700a0d80295e", + "0x283d00a11c0483d00a55c0281c00a114048092ae014a680549c024a681c", + "0x2a4f012024ab80507c014690090800f81215700a0e002a4d01252c02957", + "0xab80508a0149800908a014ab8050820144c00921e4242184102455c02840", + "0x848050e20248a8052ae0148a00508e0248a0052ae0142180508a02423805", + "0x53809236014ab80521e014c7809094014ab8050920142d809092014ab805", + "0x908052ae014a591e0484540491e00a55c028090820248e8052ae0148d805", + "0x9282422a024928052ae0148a9220484540492200a55c028472420908a809", + "0x30242ae0142880523a024288052ae0148e9260484540492600a55c0284a", + "0xab80525601491009256014ab8050a60149080901255c0280600a47804853", + "0x1a805054024a88052ae014a88052aa024348052ae0149680524a02496805", + "0x90050d2014ab8050d20141e809048014ab805048014a680906a014ab805", + "0x294e00a098048092ae014108052bc0240495700a024120090d20901a951", + "0x49540124d00295700a1a00282a01219c0295700a0cc029550121a002957", + "0xab8050460142980901255c0282200a128048092ae0140482401202528005", + "0xab805036014aa8090ac014ab8050aa0140e0090aa014ab80501201804809", + "0x2b00507a024120052ae0141200529a0240a8052ae0140a8050540240d805", + "0xab8050220142980901255c028090480242b02402a06c090050ac014ab805", + "0x285800a0a80486700a55c0281600a5540485800a55c0284e00a09804809", + "0x338052aa024a00052ae0149d0050380249d0052ae0140492b0124d002957", + "0x1e809048014ab805048014a6809268014ab805268014150090ce014ab805", + "0x482400a0240495700a024048092800909a067024014a00052ae014a0005", + "0xab805024014aa80901255c02809048024270160489440a81204855c12005", + "0x90114a4024088052ae0140880525a0240a8052ae0140a80505402409005", + "0x482401208802a54042014ab82403c0152980903c08c0d8112ae01408815", + "0x2a572aa014ab82404e0152b00904e0981215700a08402a55012024ab805", + "0x121570480b0028120120b00295700a09802811012024ab8050120900482a", + "0xa980506c0240495700a55002953012024ab8050120900495100a960a9954", + "0x283100a0700483100a55c028092980240495700a5540295b012024ab805", + "0x294d01208c0295700a08c0282a01206c0295700a06c029550120cc02957", + "0x48240120cc120230360480283300a55c0283300a0f40482400a55c02824", + "0x294e00a0f80494e00a55c028092960240495700a54402953012024ab805", + "0x2809048024a60380489641b03504855c1214e04606c0884001253802957", + "0xa68054b60240495700a0700295b0125340e0242ae014aa8054b402404957", + "0x48092ae0141f0054ba0241f14b04855c0283d00a9700483d29a090ab805", + "0x1215700a53402a5c0121040295700a100028470121000295700a52c02845", + "0x878052b40248790904855c0290900a978048092ae014218051a402484843", + "0x2d809228014ab80508e0149c00908e014ab80508a0152f80908a014ab805", + "0x250052ae014208490484540484900a55c028090820248a8052ae0148a005", + "0x290900a5680491b00a55c029150940908a80922a014ab80522a01427009", + "0x28820120d80295700a0d80282a0120d40295700a0d40295501247402957", + "0xab8052364741b0350244dc0491b00a55c0291b00a1240491d00a55c0291d", + "0x48092ae0140482401249802a6024a014ab824244014a40092444848f011", + "0xab8050a6014250090a60181215700a494029470121440295700a48402826", + "0x292d00a484048092ae0149580523c0249692b04855c0280600a47404809", + "0x295501219c0295700a1a0029250121a00295700a1a4029220121a402957", + "0x482400a55c0282400a5340485100a55c0285100a0a80491e00a55c0291e", + "0x281c012024ab805012090048670481448f01200a19c0295700a19c0283d", + "0x492100a55c0292100a0a80491e00a55c0291e00a5540493400a55c02926", + "0x49340484848f01200a4d00295700a4d00283d0120900295700a0900294d", + "0xaa8090aa014ab8052980141300901255c0295500a56c048092ae01404824", + "0x12009012984028092a80242c0052ae0142a8050540242b0052ae0141c005", + "0x280900c0240495700a09802853012024ab8050540142500901255c02809", + "0x282a01206c0295700a06c029550125000295700a4e80281c0124e802957", + "0x294000a55c0294000a0f40482400a55c0282400a5340482300a55c02823", + "0x295501216c0295700a0880281c012024ab8050120900494004808c0d812", + "0x482400a55c0282400a5340482300a55c0282300a0a80481b00a55c0281b", + "0x2853012024ab8050120900485b04808c0d81200a16c0295700a16c0283d", + "0x150090ac014ab80502c014aa8090b8014ab80509c0141300901255c02811", + "0x494900a55c0285e00a0700485e00a55c028092560242c0052ae0142e005", + "0x295700a0900294d0121600295700a1600282a0121580295700a15802955", + "0x48092ae01404809012524120580ac0480294900a55c0294900a0f404824", + "0x2955012024ab8050120900484e02c09131015024090ab82400a02412005", + "0xd8112ae0140881204898c0481100a55c0281100a4b40481200a55c02812", + "0x2811012024ab8050120900482200a994108052ae0900f0054c80240f023", + "0xab8050120900482a00a998aa82704855c1202600a0480482600a55c02823", + "0x495700a08402a67012024ab8052aa0141b00901255c0282700a54c04809", + "0x295700a06c029550125500295700a0b00281c0120b00295700a024a6009", + "0x295400a0f40482400a55c0282400a5340481500a55c0281500a0a80481b", + "0x495700a0a802953012024ab805012090049540480540d81200a55002957", + "0x1215302a06c0884001254c0295700a54c0283e01254c0295700a024a5809", + "0x1a8052ae0141880504c0240495700a0241200929c0cc1226806254412157", + "0xab8050700153500901255c0283600a99c0483806c090ab80504201534809", + "0x2845012024ab80529a0153600929a0701215700a53002a6b0125301c024", + "0x2003e04855c0283800a9ac0494b00a55c0283d00a11c0483d00a55c0281c", + "0x2080508a024879090861040915700a10002a6d012024ab80507c01469009", + "0x23809228014ab8050860142280908e014ab80508a0142380908a014ab805", + "0x250052ae0142480508e024248052ae0148480508a0248a8052ae0148a005", + "0x295700a0242080923a014ab80523601423809236014ab80521e01422809", + "0x121150124880295700a11c9082422a024908052ae014a591e0484540491e", + "0xab80523a498121150124980295700a1289282422a024928052ae0148a922", + "0x298052420240495700a0180291e01214c030242ae0142880523a02428805", + "0xaa8090d2014ab80525a0149280925a014ab80525601491009256014ab805", + "0x120052ae0141200529a0241a8052ae0141a805054024a88052ae014a8805", + "0x13380901255c028090480243482406a544090050d2014ab8050d20141e809", + "0x486700a55c0283300a5540486800a55c0294e00a098048092ae01410805", + "0x284a012024ab805012090048094dc014049540124d00295700a1a00282a", + "0x2a8050380242a8052ae01404806012024ab8050460142980901255c02822", + "0xa680902a014ab80502a01415009036014ab805036014aa8090ac014ab805", + "0x120090ac0900a81b0240142b0052ae0142b00507a024120052ae01412005", + "0x29550121600295700a13802826012024ab8050220142980901255c02809", + "0xe009274014ab8050124ac0493400a55c0285800a0a80486700a55c02816", + "0x9a0052ae0149a005054024338052ae014338052aa024a00052ae0149d005", + "0xa002426819c09005280014ab8052800141e809048014ab805048014a6809", + "0x1200909c0581226f02a048121570480140482400a0240495700a02404809", + "0xac809022014ab80502201496809024014ab805024014aa80901255c02809", + "0x120090440153882100a55c1201e00a9c00481e04606c0895700a04409024", + "0x13915504e090ab82404c0140900904c014ab8050460140880901255c02809", + "0x495700a55402836012024ab80504e014a980901255c0280904802415005", + "0xaa0052ae01416005038024160052ae0140494c012024ab80504201539809", + "0xab805048014a680902a014ab80502a01415009036014ab805036014aa809", + "0x495700a024120092a80900a81b024014aa0052ae014aa00507a02412005", + "0xa98052ae014a980507c024a98052ae0140494b012024ab805054014a9809", + "0x48092ae01404824012538198244e80c4a88242ae090a981503604420009", + "0x1215700a0d802a76012024ab80506a0153980906c0d41215700a08402a75", + "0xa60050e20240495700a07002a78012070a60242ae0141c0054ee0241c036", + "0x1211501252c0295700a0242080907a014ab80529a0142d80929a014ab805", + "0x495700a1000292c012104200242ae0141b0054ee0241f0052ae0141e94b", + "0xab8050120900490900a9e4218052ae090208052b00240495700a02484809", + "0x284500a4c00484500a55c0284300a2600490f00a55c0283100a09804809", + "0x1f02422a0248a0052ae0148a00509c0248a0052ae0140491401211c02957", + "0x250052ae01487805054024248052ae014239150484540491500a55c02914", + "0x2500901255c0280904802404a7a00a024aa009236014ab80509201424809", + "0x2700923c014ab8050120c40491d00a55c0283100a098048092ae01484805", + "0x295700a4740282a0124840295700a4781f02422a0248f0052ae0148f005", + "0x1215700a46c0291d012024ab80501246c0491b00a55c0292100a1240484a", + "0x292600a4880492600a55c0292500a484048092ae0149100523c02492922", + "0x282a0125440295700a544029550120180295700a1440292501214402957", + "0x280600a55c0280600a0f40482400a55c0282400a5340484a00a55c0284a", + "0xa700504c0240495700a08402a73012024ab80501209004806048128a8812", + "0xaa00925a014ab8050a601415009256014ab805066014aa8090a6014ab805", + "0x282300a14c048092ae014110050940240495700a024120090129ec02809", + "0x281b00a5540486800a55c0286900a0700486900a55c0280900c02404957", + "0x283d0120900295700a0900294d0120540295700a0540282a01206c02957", + "0x281100a14c048092ae014048240121a0120150360480286800a55c02868", + "0x33805054024958052ae0140b0052aa024338052ae0142700504c02404957", + "0x29550121540295700a4d00281c0124d00295700a0249580925a014ab805", + "0x482400a55c0282400a5340492d00a55c0292d00a0a80492b00a55c0292b", + "0x12005012024ab805012024048550484b49581200a1540295700a1540283d", + "0x281100a044048092ae014048240121380b0244f8054090242ae09002809", + "0x48092ae0140482401208402a7d03c08c1215704806c0281201206c02957", + "0x295700a0980284e0120980295700a088028160120880295700a07802815", + "0x495700a024120092a80b0150114fe554138242ae090130120489f804826", + "0xab8052a60149680904e014ab80504e014aa8092a6014ab80504601490809", + "0x14114e00a55c1203300aa04048330625440895700a54c13824500024a9805", + "0xab82406c0140900906c014ab8050620140880901255c028090480241a805", + "0x2836012024ab805070014a980901255c028090480240e0055065301c024", + "0x28092980240495700a5380295f012024ab8052aa0154200901255c0294c", + "0x282a0125440295700a544029550120f40295700a5340281c01253402957", + "0x283d00a55c0283d00a0f40482400a55c0282400a5340481500a55c02815", + "0x28092960240495700a07002953012024ab8050120900483d048054a8812", + "0x2003e04855c1214b02a5440884001252c0295700a52c0283e01252c02957", + "0x2a870124240295700a538aa82450c0240495700a0241200908610412285", + "0x484500a55c0284500aa24048092ae014878055100242290f04855c02909", + "0x291500a57c04915228090ab80508e0154580908e1141215700a11402a8a", + "0x2809082024250052ae0142480551a024248052ae0148a00551802404957", + "0x492123c090ab80508a0154580923a014ab80509446c1211501246c02957", + "0x2a8f244014ab8242420154700901255c028092120240495700a47802a84", + "0x295700a488028980124980295700a10002826012024ab80501209004925", + "0xab8050a6014270090a6014ab8050124500480600a55c0285100a4c004851", + "0x1500925a014ab80500c4ac121150124ac0295700a14c8e82422a02429805", + "0x12009012a40028092a8024340052ae01496805092024348052ae01493005", + "0x53809268014ab80524a014c78090ce014ab8050800141300901255c02809", + "0x485600a55c0285600a1380485600a55c028090620242a8052ae0149a005", + "0x286700a0a80493a00a55c028550b00908a8090b0014ab8050ac47412115", + "0x286800a474048092ae0140491b0121a00295700a4e8028490121a402957", + "0x29220121700295700a16c02921012024ab8052800148f0090b650012157", + "0x483e00a55c0283e00a5540494900a55c0285e00a4940485e00a55c0285c", + "0x295700a5240283d0120900295700a0900294d0121a40295700a1a40282a", + "0xaf80901255c0295500aa10048092ae014048240125241206907c04802949", + "0x494700a55c0284100a5540494800a55c0284300a098048092ae014a7005", + "0x284a012024ab80501209004809522014049540125180295700a5200282a", + "0xa80504c0240495700a0c402853012024ab8052aa0154200901255c02835", + "0xaa0090d4014ab8050b2014150090cc014ab8052a2014aa8090b2014ab805", + "0x295400aa10048092ae014160055080240495700a02412009012a4802809", + "0x282a00a5540484800a55c0281500a098048092ae014118052a602404957", + "0xab80501209004809526014049540121b80295700a1200282a0121b002957", + "0xab805024014aa80928a014ab80502a0141300901255c0282100a54c04809", + "0x370050a2024330052ae0143600524c024370052ae014a280505402436005", + "0x29550121cc0295700a1c40281c0121c40295700a024030090d4014ab805", + "0x482400a55c0282400a5340486a00a55c0286a00a0a80486600a55c02866", + "0x2853012024ab805012090048730481a83301200a1cc0295700a1cc0283d", + "0x1500928e014ab80502c014aa8090e8014ab80509c0141300901255c02811", + "0x494100a55c0287600a0700487600a55c02809256024a30052ae0143a005", + "0x295700a0900294d0125180295700a5180282a01251c0295700a51c02955", + "0xa8052ae01404a940125041214628e0480294100a55c0294100a0f404824", + "0x2701604855c120050120900280901255c028090120240495700a0254a809", + "0x270050540240b0052ae0140b0052aa0240495700a0241200904606c12296", + "0xf0112ae0140884e02c0454b809022014ab8050220149680909c014ab805", + "0x2a9a012024ab8050120900482700aa64130052ae0901100553002411021", + "0xab8050120900482c00aa70090052ae090150055360241515504855c02826", + "0xaa005024024090052ae01409015048a740495400a55c0295500a04404809", + "0x48092ae014a98052a60240495700a024120090620154f1512a6090ab824", + "0xe009066014ab805012530048092ae0140900553e0240495700a54402836", + "0x108052ae014108050540240f0052ae0140f0052aa024a70052ae01419805", + "0xa70240420780900529c014ab80529c0141e809048014ab805048014a6809", + "0x1f00906a014ab80501252c048092ae014188052a60240495700a02412009", + "0x481c2980915003806c090ab82406a0840f0110800241a8052ae0141a805", + "0x48092ae014a680553e0241e94d04855c0281200aa84048092ae01404824", + "0x1215700a0f802aa30120f81e8242ae0141e805544024a58052ae01404841", + "0x283800a0a80483600a55c0283600a554048092ae0142080554802420840", + "0x912801252c0295700a52c028490121000295700a100028b20120e002957", + "0x484700aa94228052ae0908780529002487909086044ab8052961001c036", + "0x2491504855c0283d00aa8c0491400a55c0290900a098048092ae01404824", + "0x295700a12802aa80121280295700a12402aa7012024ab80522a01553009", + "0x8d91d048454048092ae0148f0050940248f11d04855c0284500a51c0491b", + "0x9080901255c0292200a47804925244090ab8052420148e809242014ab805", + "0x30052ae0142880524a024288052ae01493005244024930052ae01492805", + "0xab805048014a6809228014ab80522801415009086014ab805086014aa809", + "0x495700a0241200900c0908a043024014030052ae0140300507a02412005", + "0x295700a10c0295501214c0295700a11c0281c012024ab80507a0154f809", + "0x285300a0f40482400a55c0282400a5340490900a55c0290900a0a804843", + "0x495700a04802a9f012024ab805012090048530484242181200a14c02957", + "0xab8052560141500925a014ab805298014aa809256014ab80503801413009", + "0x48092ae014160050940240495700a02412009012aa4028092a802434805", + "0xe0090d0014ab805012018048092ae0140a8055540240495700a55402853", + "0x108052ae014108050540240f0052ae0140f0052aa024338052ae01434005", + "0x33824042078090050ce014ab8050ce0141e809048014ab805048014a6809", + "0x493400a55c0282700a070048092ae0140a8055540240495700a02412009", + "0x295700a0900294d0120840295700a0840282a0120780295700a07802955", + "0x48092ae014048240124d01202103c0480293400a55c0293400a0f404824", + "0x485500a55c0282300a098048092ae014088050a60240495700a05402aaa", + "0x2b0052ae0140492b0121a40295700a1540282a0124b40295700a06c02955", + "0xab8050d20141500925a014ab80525a014aa8090b0014ab8050ac0140e009", + "0x3492d0240142c0052ae0142c00507a024120052ae0141200529a02434805", + "0x27016048aac0a81204855c120050120900280901255c028090120242c024", + "0x118242ae0900d8050240240d8052ae014088050220240495700a02412009", + "0x1100502c024110052ae0140f00502a0240495700a024120090420155601e", + "0xaa82704855c120260240911500904c014ab80504c0142700904c014ab805", + "0xab8050460141080901255c0295500a640048092ae014048240120a802aad", + "0xa80901255c02809048024a980555c550160242ae0901180502402411805", + "0x188052ae0141880509c024188052ae014a880502c024a88052ae014aa005", + "0x292c012024ab8050120900483500aabca703304855c1203104e09116809", + "0x15803806c090ab82405801409009058014ab8050580141080901255c0294e", + "0x495700a0e002836012024ab80506c014a980901255c02809048024a6005", + "0x295700a0cc029550125340295700a0700281c0120700295700a024a6009", + "0x294d00a0f40482400a55c0282400a5340481500a55c0281500a0a804833", + "0x495700a53002953012024ab8050120900494d0480541981200a53402957", + "0x1203d02a0cc088400120f40295700a0f40283e0120f40295700a024a5809", + "0x218052ae0141f00504c0240495700a02412009082100122b107c52c12157", + "0xab80521e0148f00908a43c1215700a4240291d0124240295700a02420809", + "0x291400a4940491400a55c0284700a4880484700a55c0284500a48404809", + "0x294d01210c0295700a10c0282a01252c0295700a52c0295501245402957", + "0x4824012454120432960480291500a55c0291500a0f40482400a55c02824", + "0x282a0121280295700a100029550121240295700a10402826012024ab805", + "0x282c00a54c048092ae01404824012025590050125500491b00a55c02849", + "0x8e8050540248f0052ae0141a8052aa0248e8052ae0140a80504c02404957", + "0xab8052a6014a980901255c0280904802404ab300a024aa009242014ab805", + "0x292200a0a80491e00a55c0282700a5540492200a55c0281500a09804809", + "0x495700a08c02953012024ab805012090048095660140495401248402957", + "0xab80524a0141500923c014ab805054014aa80924a014ab80502a01413009", + "0x48092ae014108052a60240495700a02412009012acc028092a802490805", + "0x295700a4980282a0124780295700a048029550124980295700a05402826", + "0xab80523c014aa80900c014ab8050a20140e0090a2014ab80501201804921", + "0x300507a024120052ae0141200529a024908052ae014908050540248f005", + "0xab8050220142980901255c02809048024030242424780900500c014ab805", + "0x285300a0a80484a00a55c0281600a5540485300a55c0284e00a09804809", + "0x250052aa024968052ae01495805038024958052ae0140492b01246c02957", + "0x1e809048014ab805048014a6809236014ab80523601415009094014ab805", + "0x482400a0240495700a0240480925a0908d84a024014968052ae01496805", + "0xab805024014aa80901255c0280904802427016048ad00a81204855c12005", + "0x901156a024088052ae0140880525a0240a8052ae0140a80505402409005", + "0x482401208802ab7042014ab82403c0155b00903c08c0d8112ae01408815", + "0x2ab92aa014ab82404e0149480904e0981215700a08402ab8012024ab805", + "0x121570480b0028120120b00295700a09802811012024ab8050120900482a", + "0xa980506c0240495700a55002953012024ab8050120900495100aae8a9954", + "0x283100a0700483100a55c028092980240495700a55402aa6012024ab805", + "0x294d01208c0295700a08c0282a01206c0295700a06c029550120cc02957", + "0x48240120cc120230360480283300a55c0283300a0f40482400a55c02824", + "0x294e00a0f80494e00a55c028092960240495700a54402953012024ab805", + "0x2809048024a6038048aec1b03504855c1214e04606c0884001253802957", + "0xa680554c0241e94d04855c0295500aaf00481c00a55c0280908202404957", + "0x28b20120d80295700a0d80282a0120d40295700a0d402955012024ab805", + "0xab8050380f41b0350244a00481c00a55c0281c00a1240483d00a55c0283d", + "0x48092ae0140482401210c02abd082014ab824080014a40090800f8a5811", + "0xab80508a0142500908a43c1215700a104029470124240295700a0f802826", + "0x291400a484048092ae0142380523c0248a04704855c0290f00a47404809", + "0x29550121280295700a124029250121240295700a4540292201245402957", + "0x482400a55c0282400a5340490900a55c0290900a0a80494b00a55c0294b", + "0x281c012024ab8050120900484a048424a581200a1280295700a1280283d", + "0x483e00a55c0283e00a0a80494b00a55c0294b00a5540491b00a55c02843", + "0x491b0480f8a581200a46c0295700a46c0283d0120900295700a0900294d", + "0xaa80923a014ab8052980141300901255c0295500aa98048092ae01404824", + "0x12009012af8028092a8024908052ae0148e8050540248f0052ae0141c005", + "0x280900c0240495700a09802853012024ab8050540142500901255c02809", + "0x282a01206c0295700a06c029550124940295700a4880281c01248802957", + "0x292500a55c0292500a0f40482400a55c0282400a5340482300a55c02823", + "0x29550124980295700a0880281c012024ab8050120900492504808c0d812", + "0x482400a55c0282400a5340482300a55c0282300a0a80481b00a55c0281b", + "0x2853012024ab8050120900492604808c0d81200a4980295700a4980283d", + "0x1500923c014ab80502c014aa8090a2014ab80509c0141300901255c02811", + "0x485300a55c0280600a0700480600a55c02809256024908052ae01428805", + "0x295700a0900294d0124840295700a4840282a0124780295700a47802955", + "0x48092ae0140480901214c1212123c0480285300a55c0285300a0f404824", + "0x2955012024ab8050120900484e02c0915f815024090ab82400a02412005", + "0x481100a55c0281100a4b40481500a55c0281500a0a80481200a55c02812", + "0x110055800840295704807802ab60120781181b02255c0281102a04808ab5", + "0x295704809c0292901209c130242ae014108055700240495700a02412009", + "0x282600a044048092ae014aa80554c0240495700a0241200905401560955", + "0x48092ae0140482401254402ac22a6550121570480b0028120120b002957", + "0xe009062014ab805012530048092ae014a980506c0240495700a55002953", + "0x118052ae014118050540240d8052ae0140d8052aa024198052ae01418805", + "0x1982404606c09005066014ab8050660141e809048014ab805048014a6809", + "0x1f00929c014ab80501252c048092ae014a88052a60240495700a02412009", + "0x494c0700916183606a090ab82429c08c0d811080024a70052ae014a7005", + "0x8e80929a014ab8050121040481c00a55c0283600a098048092ae01404824", + "0x1f0052ae014a58052420240495700a0f40291e01252c1e8242ae014a6805", + "0xab80506a014aa809082014ab80508001492809080014ab80507c01491009", + "0x2080507a024120052ae0141200529a0240e0052ae0140e0050540241a805", + "0xab8052980141300901255c02809048024208240380d409005082014ab805", + "0x28092a8024878052ae01421805054024848052ae0141c0052aa02421805", + "0x495700a09802853012024ab8050540142500901255c0280904802404ac4", + "0x295700a06c0295501211c0295700a1140281c0121140295700a02403009", + "0x284700a0f40482400a55c0282400a5340482300a55c0282300a0a80481b", + "0x295700a0880281c012024ab8050120900484704808c0d81200a11c02957", + "0x282400a5340482300a55c0282300a0a80481b00a55c0281b00a55404914", + "0xab8050120900491404808c0d81200a4500295700a4500283d01209002957", + "0xab80502c014aa80922a014ab80509c0141300901255c0281100a14c04809", + "0x284900a0700484900a55c02809256024878052ae0148a80505402484805", + "0x294d01243c0295700a43c0282a0124240295700a4240295501212802957", + "0x4ac50121281210f2120480284a00a55c0284a00a0f40482400a55c02824", + "0x280500a014ab80501201563009012014ab80501201427009012014ab805", + "0xab80501201563009012014ab80501201427009012014ab805012b1c04805", + "0x163009012014ab80501201427009012014ab805012b200480500a01402805", + "0x295700a09002811012024ab80501246c0480500a014028052ae01404805", + "0x2815012024ab8050120900481600ab240a81204855c1201100a04804811", + "0x481b00a55c0281b00a1380481b00a55c0284e00a0580484e00a55c02815", + "0x28090480240f005594024ab8240460141180904606c1215700a06c0281b", + "0x1201200a0480481200a55c0281200a084048092ae0140d80503c02404957", + "0x482700a55c0282200a054048092ae0140482401209802acb04408412157", + "0x160052ae01410805242024150052ae014049630125540295700a09c02816", + "0xab8050580149680900a014ab80500a01415009012014ab805012014aa809", + "0x481559a024aa8052ae014aa80509c024150052ae0141500559802416005", + "0x483300ab3c188052ae090a880559c024a89532a8044ab8052aa0a816005", + "0x1b0052ae0901a8055a20241a94e04855c0283100ab40048092ae01404824", + "0x283600ab4c0494c00a55c0295300a098048092ae014048240120e002ad2", + "0x16a80907a014ab80529a538122d40125340295700a0700296201207002957", + "0xa60052ae014a6005054024aa0052ae014aa0052aa024a58052ae0141e805", + "0x2826012024ab8050120900494b29855008805296014ab8052960156b009", + "0x484100a55c0283e00a0a80484000a55c0295400a5540483e00a55c02953", + "0x48095b0014049540124240295700a5380292d01210c0295700a0e002ad7", + "0x495400a55c0295400a5540490f00a55c0283300ab64048092ae01404824", + "0x1200921e54caa01100a43c0295700a43c02ad601254c0295700a54c0282a", + "0x292101211c0295700a024a700908a014ab80500a0141300901255c02809", + "0x484100a55c0284500a0a80484000a55c0280900a5540491400a55c02826", + "0x295700a10c02ada0124240295700a4500292d01210c0295700a11c02ad7", + "0x200052aa024250052ae014248055aa024248052ae0148a909048b5004915", + "0x8805094014ab8050940156b009082014ab80508201415009080014ab805", + "0xab8050240149080901255c0281e00a544048092ae0140482401212820840", + "0x8f00509c0248f0052ae0148e81b0480cc0491d00a55c028090620248d805", + "0x1300901255c02809048024908055b6024ab82423c0141180923c014ab805", + "0x492600a55c0292500ab700492500a55c0280929c024910052ae01402805", + "0xab80500c0156a80900c014ab8050a246c122d40121440295700a49802962", + "0x298055ac024910052ae01491005054024048052ae014048052aa02429805", + "0x495700a48402951012024ab80501209004853244024088050a6014ab805", + "0x295700a4b402ada0124b40295700a024a7009256014ab80500a01413009", + "0x48052aa024338052ae014340055aa024340052ae0143491b048b5004869", + "0x88050ce014ab8050ce0156b009256014ab80525601415009012014ab805", + "0xab8050125380493400a55c0280500a098048092ae0140482401219c95809", + "0x2c0245a80242c0052ae0140b0052420242b0052ae0142a8055b40242a805", + "0x480900a55c0280900a5540494000a55c0293a00ab540493a00a55c02856", + "0x8d8092804d00481100a5000295700a50002ad60124d00295700a4d00282a", + "0x280904802427016048b740a81204855c120050120900280901255c02809", + "0x108055c0078118242ae0900d8055be0240d8052ae014120055bc02404957", + "0x130052ae0140f0055c2024110052ae0140a80504c0240495700a02412009", + "0xab8052aa014270092aa014ab80504e0149800904e014ab80504c0144c009", + "0x29550120b00295700a08c0285c0120a80295700a5540882422a024aa805", + "0x482c00a55c0282c00a1780482200a55c0282200a0a80481200a55c02812", + "0x88052a254caa0112ae0141502c044048091490120a80295700a0a802849", + "0xab80502a0141300901255c0282100ab88048092ae01404824012544a9954", + "0xa70055c8024a70052ae01419811048b8c0483300a55c0280929c02418805", + "0xb2009062014ab80506201415009024014ab805024014aa80906a014ab805", + "0x281100a478048092ae014048240120d4188120220141a8052ae0141a805", + "0xab80506c0157300906c014ab8050124ac048092ae014120055ca02404957", + "0x1c0052c8024270052ae014270050540240b0052ae0140b0052aa0241c005", + "0x1202400a0480482400a55c0280500a0440483809c05808805070014ab805", + "0x481600a55c0281200a054048092ae0140482401205402ae702404412157", + "0xab82409c0241222d0121380295700a1380284e0121380295700a05802816", + "0x9009022014ab8050220141080901255c028090480240f0055d008c0d824", + "0xab8050440140a80901255c02809048024130055d2088108242ae09008805", + "0xd82445a024aa8052ae014aa80509c024aa8052ae0141380502c02413805", + "0x295700a08402821012024ab8050120900495400aba81602a04855c12155", + "0x2815012024ab8050120900483100abaca895304855c1202100a04804821", + "0x494e00a55c0294e00a1380494e00a55c0283300a0580483300a55c02951", + "0xa98052420240495700a024120090700157603606a090ab82429c0a81222d", + "0xa68052ae0140e0050cc0240e0052ae0141b02c04604576809298014ab805", + "0xab80529a01435009298014ab8052980149680906a014ab80506a014aa809", + "0x9600901255c0282300a4b0048092ae01404824012534a6035022014a6805", + "0x494b00a55c0295300a0840483d00a55c0283800a554048092ae01416005", + "0x160052580240495700a08c0292c012024ab805012090048095dc01404954", + "0x495401252c0295700a0c4028210120f40295700a0a802955012024ab805", + "0xab8052a8014aa80901255c0282300a4b0048092ae0140482401202577005", + "0x495700a02412009012bb8028092a8024a58052ae014108050420241e805", + "0x295700a098028210120f40295700a06c02955012024ab80504601496009", + "0x483d00a55c0281e00a554048092ae01404824012025770050125500494b", + "0x2955012024ab805012090048095dc0140495401252c0295700a04402821", + "0x2400907c014ab8050125380494b00a55c0281500a0840483d00a55c02809", + "0x200052ae014200050d4024208052ae014a5805242024200052ae0141f005", + "0x28120120440295700a09002811012024ab80501246c048400820f408805", + "0x295700a05402815012024ab8050120900481600abbc0a81204855c12011", + "0x281b00a1380482300a55c0281200a4840481b00a55c0284e00a0580484e", + "0x108055e0024ab82403c0141180903c06c1215700a06c0281b01206c02957", + "0x480900a55c0280900a554048092ae0140d80503c0240495700a02412009", + "0x282300a02408af101208c0295700a08c0292d0120140295700a0140282a", + "0x495700a024120090540157995500a55c1202700abc80482704c08808957", + "0x120092a20157b15300a55c1215400abd404954058090ab8052aa0157a009", + "0x17c009066014ab8052a60157b809062014ab80504c0141300901255c02809", + "0x295700a0d402afa0120d40295700a538160245f2024a70052ae01419805", + "0x283600a59c0483100a55c0283100a0a80482200a55c0282200a55404836", + "0x1c0052ae0141300504c0240495700a0241200906c0c41101100a0d802957", + "0x281c00abe80481c00a55c0294c0580917c809298014ab8052a20157d809", + "0x29670120e00295700a0e00282a0120880295700a0880295501253402957", + "0xab8050540157e00901255c02809048024a68380440440294d00a55c0294d", + "0x1e8052ce024130052ae01413005054024110052ae014110052aa0241e805", + "0x495700a08402951012024ab8050120900483d04c0880880507a014ab805", + "0xab80507c0142700907c014ab80529606c1203301252c0295700a02418809", + "0x280504c0240495700a024120090800157e8092ae0901f0050460241f005", + "0x2af80124240295700a10c02afe01210c0295700a024a7009082014ab805", + "0x238052ae014228055f4024228052ae01487823048be40490f00a55c02909", + "0xab80508e014b3809082014ab80508201415009012014ab805012014aa809", + "0x1300901255c0284000a544048092ae0140482401211c2080902201423805", + "0x484900a55c0291500abec0491500a55c0280929c0248a0052ae01402805", + "0xab805012014aa809236014ab8050940157d009094014ab80509208c122f9", + "0x8a0090220148d8052ae0148d8052ce0248a0052ae0148a00505402404805", + "0x8f0052ae0140494e0124740295700a01402826012024ab8050120900491b", + "0x29212440917c809244014ab80502c01490809242014ab80523c0157d809", + "0x282a0120240295700a024029550124980295700a49402afa01249402957", + "0x28092360249311d0120440292600a55c0292600a59c0491d00a55c0291d", + "0x495700a0241200909c058122ff02a048121570480140482400a02404957", + "0x120090420158081e046090ab82403601580009036014ab8050480152f809", + "0x3880904c014ab80503c01581009044014ab80502a0141300901255c02809", + "0xaa8052ae014aa80509c024aa8052ae014138050b6024138052ae01413005", + "0x281200a5540482c00a55c0282300a2000482a00a55c029550220908a809", + "0x28490120b00295700a0b0028820120880295700a0880282a01204802957", + "0xa9954022014a89532a8044ab8050540b0110120244dc0482a00a55c0282a", + "0x188052ae0140a80504c0240495700a08402b03012024ab80501209004951", + "0xab80529c0157200929c014ab805066044122e30120cc0295700a024a7009", + "0x1a8052c8024188052ae01418805054024090052ae014090052aa0241a805", + "0x495700a0440291e012024ab805012090048350620480880506a014ab805", + "0x1c0052ae0141b0055cc0241b0052ae0140492b012024ab8050480152e809", + "0xab805070014b200909c014ab80509c0141500902c014ab80502c014aa809", + "0x12157048090028120120900295700a014028110120e0270160220141c005", + "0x28160120580295700a04802815012024ab8050120900481500ac1009011", + "0xd84e04855c0284e00a06c0484e00a55c0284e00a1380484e00a55c02816", + "0xab80509c0140f00901255c028090480241180560a024ab82403601411809", + "0x482200ac181081e04855c1201100a0480481100a55c0281100a08404809", + "0x482700a55c0282600a0580482600a55c0282100a054048092ae01404824", + "0xab8242aa014118092aa09c1215700a09c0281b01209c0295700a09c0284e", + "0x281e00a084048092ae0141380503c0240495700a0241200905401583809", + "0x48092ae0140482401254c02b082a80b0121570480780281201207802957", + "0x295700a0c40284e0120c40295700a544028160125440295700a55002815", + "0x9080901255c028090480241a805612538198242ae0901880904808804831", + "0xa60052ae0141c0056140241c0052ae014a700504e0241b0052ae01416005", + "0xab80506c01496809066014ab805066014aa809038014ab80529801585809", + "0x48092ae014048240120701b0330220140e0052ae0140e0056180241b005", + "0x480961a014049540120f40295700a0b0028210125340295700a0d402955", + "0x483d00a55c0295300a0840494d00a55c0280900a554048092ae01404824", + "0x28090620240495700a0a802951012024ab8050120900480961a01404954", + "0x1180907c014ab80507c0142700907c014ab80529609c1203301252c02957", + "0x484100a55c0280929c0240495700a02412009080015870092ae0901f005", + "0x295700a10c02b0a0124240295700a0780292101210c0295700a10402835", + "0x290900a4b40480900a55c0280900a5540484500a55c0290f00ac2c0490f", + "0x495700a0241200908a4240481100a1140295700a11402b0c01242402957", + "0x295700a0780282101211c0295700a02402955012024ab805080014a8809", + "0x494d00a55c0280900a554048092ae014048240120258780501255004914", + "0x295700a0f402b1001211c0295700a534029260120f40295700a08802821", + "0x9080901255c0282300a544048092ae014048240120258780501255004914", + "0x250052ae0142484e0480cc0484900a55c028090620248a8052ae01408805", + "0x28090480248d805622024ab82409401411809094014ab80509401427009", + "0x291e00ac2c0491e00a55c0291d00ac480491d00a55c0280929c02404957", + "0x2b0c0124540295700a4540292d0120240295700a0240295501248402957", + "0xab805236014a880901255c02809048024909150120440292100a55c02921", + "0xab805012014aa80924a014ab80524401589809244014ab80501253804809", + "0x8a809022014928052ae014928056180248a8052ae0148a80525a02404805", + "0x295700a0540282101211c0295700a02402955012024ab80501209004925", + "0xab805228014908090a2014ab80524c0158980924c014ab80501253804914", + "0x295700a0140281101214403047022014288052ae0142880561802403005", + "0x2815012024ab8050120900481500ac500901104855c1202400a04804824", + "0x484e00a55c0284e00a1380484e00a55c0281600a0580481600a55c02812", + "0x28090480241180562a024ab824036014118090361381215700a1380281b", + "0x1201100a0480481100a55c0281100a084048092ae0142700503c02404957", + "0x482600a55c0282100a054048092ae0140482401208802b1604207812157", + "0xab82404e0241231701209c0295700a09c0284e01209c0295700a09802816", + "0x18c8092a8014ab80503c0149080901255c02809048024160056300a8aa824", + "0xaa8052ae014aa8052aa024a88052ae014a980511e024a98052ae01415005", + "0x49512a8554088052a2014ab8052a20149a8092a8014ab8052a801496809", + "0x483300a55c0281e00a0840483100a55c0282c00a554048092ae01404824", + "0x28210120c40295700a02402955012024ab8050120900480963401404954", + "0x282300a544048092ae014048240120258d0050125500483300a55c02822", + "0x1a80509c0241a8052ae014a704e0480cc0494e00a55c0280906202404957", + "0x1080901255c028090480241b005636024ab82406a0141180906a014ab805", + "0x28090480240e0056385301c0242ae09008805024024088052ae01408805", + "0x1e80509c0241e8052ae014a680502c024a68052ae014a600502a02404957", + "0xab8050120900484000ac741f14b04855c1203d0120901100907a014ab805", + "0x284300a23c0484300a55c0283e00ac780484100a55c0283800a48404809", + "0x29350121040295700a1040292d01252c0295700a52c0295501242402957", + "0xab805080014aa80901255c02809048024848412960440290900a55c02909", + "0x495700a02412009012c68028092a8024198052ae0141c00504202418805", + "0x4b1a00a024aa009066014ab80503801410809062014ab805012014aa809", + "0x490f00a55c0281100a484048092ae0141b0052a20240495700a02412009", + "0x48052ae014048052aa024238052ae01422805124024228052ae0140494e", + "0x484721e0240880508e014ab80508e0149a80921e014ab80521e01496809", + "0x483300a55c0281500a0840483100a55c0280900a554048092ae01404824", + "0x248052ae014198052420248a8052ae0148a0051240248a0052ae0140494e", + "0x482400a55c0280500a044049150920c40880522a014ab80522a0149a809", + "0x281200a054048092ae0140482401205402b1f0240441215704809002812", + "0x281b0121380295700a1380284e0121380295700a0580281601205802957", + "0x495700a02412009046015900092ae0900d8050460240d84e04855c0284e", + "0x12157048044028120120440295700a04402821012024ab80509c0140f009", + "0x28160120980295700a08402815012024ab8050120900482200ac841081e", + "0xaa8242ae090138090488a80482700a55c0282700a1380482700a55c02826", + "0xf0050240240f0052ae0140f0050420240495700a024120090580159102a", + "0x188052ae014a980502a0240495700a024120092a2015919532a8090ab824", + "0x120332aa09116809066014ab80506601427009066014ab8050620140b009", + "0x483800a55c0295400a484048092ae014048240120d802b2406a53812157", + "0xab80503801593009038014ab80529801592809298014ab80506a0a812231", + "0xa680564e0241c0052ae0141c00525a024a70052ae014a70052aa024a6805", + "0x495700a0a802990012024ab8050120900494d0705380880529a014ab805", + "0x4b2800a024aa009296014ab8052a80141080907a014ab80506c014aa809", + "0x483d00a55c0295500a554048092ae014150053200240495700a02412009", + "0x2955012024ab805012090048096500140495401252c0295700a54402821", + "0x4824012025940050125500494b00a55c0281e00a0840483d00a55c0282c", + "0x495401252c0295700a088028210120f40295700a02402955012024ab805", + "0xab8050220149080901255c0282300a544048092ae0140482401202594005", + "0x2080509c024208052ae0142004e0480cc0484000a55c028090620241f005", + "0xa700901255c0280904802421805652024ab82408201411809082014ab805", + "0x484500a55c0290f00ac980490f00a55c0290900aca80490900a55c02809", + "0x295700a11402b270120f80295700a0f80292d0120240295700a02402955", + "0x494e012024ab805086014a880901255c028090480242283e01204402845", + "0x96809012014ab805012014aa809228014ab80508e0159580908e014ab805", + "0x48240124501f0090220148a0052ae0148a00564e0241f0052ae0141f005", + "0x494e01252c0295700a054028210120f40295700a02402955012024ab805", + "0x193809094014ab80529601490809092014ab80522a0159580922a014ab805", + "0x282400a044048092ae0140491b0121242503d022014248052ae01424805", + "0x48092ae0140482401205802b2c02a048121570480440281201204402957", + "0x295700a0480292101206c0295700a138028160121380295700a05402815", + "0xf0050460240f01b04855c0281b00a06c0481b00a55c0281b00a13804823", + "0x2955012024ab8050360140f00901255c028090480241080565a024ab824", + "0x482300a55c0282300a4b40480500a55c0280500a0a80480900a55c02809", + "0x1500565c5540295704809c02ab601209c1302202255c0282300a02408ab5", + "0x295704855002929012550160242ae014aa8055700240495700a02412009", + "0xa9805660024188052ae0141300504c0240495700a024120092a201597953", + "0x483500a55c0294e0580919900929c014ab80506601598809066014ab805", + "0x295700a0c40282a0120880295700a088029550120d80295700a0d402b33", + "0x1300901255c028090480241b0310440440283600a55c0283600acd004831", + "0x295700a53016024664024a60052ae014a880566a0241c0052ae01413005", + "0x283800a0a80482200a55c0282200a5540494d00a55c0281c00accc0481c", + "0x495700a0241200929a0e01101100a5340295700a53402b340120e002957", + "0xab80504c01415009044014ab805044014aa80907a014ab8050540159b009", + "0x48092ae014048240120f4130220220141e8052ae0141e80566802413005", + "0x1f0052ae014a581b0480cc0494b00a55c028090620240495700a08402951", + "0x28090480242000566e024ab82407c0141180907c014ab80507c01427009", + "0x284300ace00484300a55c0280929c024208052ae0140280504c02404957", + "0x19980908a014ab80521e08c1233201243c0295700a42402b3101242402957", + "0x208052ae01420805054024048052ae014048052aa024238052ae01422805", + "0x2951012024ab805012090048470820240880508e014ab80508e0159a009", + "0x2b350124540295700a024a7009228014ab80500a0141300901255c02840", + "0x8d8052ae01425005666024250052ae01424823048cc80484900a55c02915", + "0xab8052360159a009228014ab80522801415009012014ab805012014aa809", + "0x491d00a55c0280500a098048092ae0140482401246c8a0090220148d805", + "0x910052ae0140b005242024908052ae0148f00566a0248f0052ae0140494e", + "0x280900a5540492600a55c0292500accc0492500a55c0292124409199009", + "0x481100a4980295700a49802b340124740295700a4740282a01202402957", + "0xb00567405402b39024014ab823048014b480901255c028092360249311d", + "0x28090480241100568008402b3f03c0159f02300acf40d80567813802b3b", + "0x13805260024138052ae01409005130024130052ae0140280504c02404957", + "0x121150120a80295700a0a80284e0120a80295700a0248a0092aa014ab805", + "0x295700a0980282a0125500295700a5541602422a024160052ae01415011", + "0x48092ae01404824012025a08050125500495100a55c0295400a12404953", + "0xab805066014528090660541215700a054028a30120c40295700a01402826", + "0x1b00514e0241b0052ae014a700531e0240495700a0d40292c0120d4a7024", + "0x3880901255c0294c00a6400481c298090ab80502a01452809070014ab805", + "0x494b00a55c028090620241e8052ae014a68050b6024a68052ae0140e005", + "0x283807c0908a80907c014ab8052960441211501252c0295700a52c0284e", + "0x248092a6014ab80506201415009082014ab80507a1001211501210002957", + "0x28096840240495700a02412009012d04028092a8024a88052ae01420805", + "0x1a1809212014ab8050860441211501210c0295700a10c0284e01210c02957", + "0x280504c0240495700a0241200908e015a284500ad10878052ae0440b005", + "0x484a00a55c0291500a63c0484922a090ab80521e015a3009228014ab805", + "0x295700a4740285b0124740295700a1240287101246c0295700a128028a7", + "0x29212120908a809242014ab80524201427009242014ab8050124500491e", + "0x492600a55c0291e24a0908a80924a014ab8052364881211501248802957", + "0x480968e014049540120180295700a498028490121440295700a4500282a", + "0x188090a6014ab80500a0141300901255c0284500a128048092ae01404824", + "0x968052ae014959090484540492b00a55c0292b00a1380492b00a55c02809", + "0x4b4700a024aa00900c014ab80525a014248090a2014ab8050a601415009", + "0x486900a55c0280500a098048092ae014238050940240495700a02412009", + "0x295700a1a08482422a024340052ae0143400509c024340052ae01404b42", + "0x285100a1440480600a55c0286700a1240485100a55c0286900a0a804867", + "0xab80501209004809682014049540125440295700a01802b4801254c02957", + "0x2a8050e20242b05504855c0284e00ad240493400a55c0280500a09804809", + "0x2d809280014ab8050ac01438809274014ab8050b00142d8090b0014ab805", + "0x485c00a55c0285c00a1380485c00a55c028096940242d8052ae014a0005", + "0x2d9490484540494900a55c0293a0bc0908a8090bc014ab8050b804412115", + "0xaa0092a2014ab805290014248092a6014ab80526801415009290014ab805", + "0xd805696024a38052ae0140280504c0240495700a02412009012d0402809", + "0x486600a55c0285900ad300485900a55c0294600a5a804946036090ab805", + "0x360052ae01404b4e0121200295700a1a80285b0121a80295700a19802b4d", + "0x284800a1380486e00a55c0286c0220908a8090d8014ab8050d801427009", + "0xaa8090e2014ab805036014b500928a014ab8050901b81211501212002957", + "0x388052ae0143880569e024a38052ae014a3805054024048052ae01404805", + "0x28760e81cc0895700a51438947012049a800928a014ab80528a01424809", + "0x118056a2024a08052ae0140280504c0240495700a024120090ec1d039811", + "0x493b00a55c0293c00a29c0493c00a55c0294400a63c04879288090ab805", + "0x400052ae01404b520124e00295700a1f402a8d0121f40295700a1e402a8c", + "0x9d8820484540488200a55c028800220908a809100014ab80510001427009", + "0x495300a55c0294100a0a80488400a55c0293826e0908a80926e014ab805", + "0x4b53012024ab80501209004809682014049540125440295700a21002849", + "0x488800a55c028860220908a80910c014ab80510c0142700910c014ab805", + "0xab80500a0141300901255c02809048024458056a82240295704807802958", + "0x2809228024478052ae01446805260024468052ae014448051300249b005", + "0x8a809124014ab80526a220121150124d40295700a4d40284e0124d402957", + "0x295700a4cc028490122540295700a4d80282a0124cc0295700a23c49024", + "0x1300901255c0288b00a128048092ae01404824012025aa80501255004896", + "0x493000a55c0293000a1380493000a55c028090620244c0052ae01402805", + "0xab8051360142480912a014ab80513001415009136014ab80526022012115", + "0x28092a8024a88052ae0144b005690024a98052ae0144a8050a20244b005", + "0x295700a4bc0284e0124bc0295700a025ab00901255c0280904802404b41", + "0x492e00ad60500052ae090108056ae0244f0052ae014978110484540492f", + "0x48a500a55c028a000a1c4048a300a55c0280500a098048092ae01404824", + "0xc78052ae014c780509c024c78052ae014049140124b00295700a2940285b", + "0x51805054024c80052ae014960a7048454048a700a55c0298f13c0908a809", + "0x280904802404b5900a024aa009156014ab80532001424809152014ab805", + "0x5700514e024570052ae0149700531e024950052ae0140280504c02404957", + "0x121150122c00295700a2c00284e0122c00295700a0241880915a014ab805", + "0x295700a4a80282a0122c80295700a2b49482422a024948052ae0145809e", + "0x28ab00ad200495300a55c028a900a144048ab00a55c028b200a124048a9", + "0x495700a0880284a012024ab805012090048096820140495401254402957", + "0x295700a2d00284e0122d00295700a024b4009250014ab80500a01413009", + "0xcf005092024a98052ae01494005054024cf0052ae0145a011048454048b4", + "0x172009170014ab80516c544122e30122d80295700a024a70092a2014ab805", + "0xa98052ae014a9805054024048052ae014048052aa024938052ae0145c005", + "0x12005012024ab80501246c049272a60240880524e014ab80524e014b2009", + "0x281200a06c048092ae0140482401206c270246b40580a8242ae09002809", + "0xf00901255c028090480240f0056b6024ab8240460141180904604812157", + "0x482200a55c0281100ad700482100a55c0281600a098048092ae01409005", + "0xab80502a014aa80904e014ab80504c015af00904c014ab8050440901235d", + "0x10815022014138052ae014138056be024108052ae014108050540240a805", + "0xaa8052ae014120050220240495700a07802951012024ab80501209004827", + "0x1600502a0240495700a024120092a8015b002c054090ab8242aa01409009", + "0xd8092a2014ab8052a2014270092a2014ab8052a60140b0092a6014ab805", + "0xab8050120900483300ad84049570480c4028230120c4a88242ae014a8805", + "0xab82405401409009054014ab8050540141080901255c0295100a07804809", + "0xb009070014ab80506a0140a80901255c028090480241b0056c40d4a7024", + "0x121570485300a824044024a60052ae014a600509c024a60052ae0141c005", + "0x282701252c0295700a05802826012024ab8050120900483d00ad8ca681c", + "0x484100a55c0294b00a0a80484000a55c0281c00a5540483e00a55c0294d", + "0x48096c8014049540124240295700a5380282101210c0295700a0f80282c", + "0x2826012024ab8050240140f00901255c0281100a2ec048092ae01404824", + "0x484700a55c0290f00a0a80484500a55c0283d00a5540490f00a55c02816", + "0x28bb012024ab805012090048096ca014049540124500295700a53802821", + "0x29550124540295700a05802826012024ab8050240140f00901255c02811", + "0x491400a55c0283600a0840484700a55c0291500a0a80484500a55c02815", + "0x28090620240495700a0cc02951012024ab805012090048096ca01404954", + "0x11809094014ab80509401427009094014ab8050925441203301212402957", + "0x8e8052ae0140b00504c0240495700a02412009236015b30092ae09025005", + "0x295700a054029550124840295700a478028350124780295700a024a7009", + "0x282a00a0840484300a55c0292100a0b00484100a55c0291d00a0a804840", + "0x120330124940295700a02418809244014ab8050860441236701242402957", + "0x200052ae014200052aa024288052ae01484805242024930052ae01492812", + "0xab805244014cf0090a2014ab8050a201496809082014ab80508201415009", + "0x30112ae014931220a21042001516c024930052ae0149300509c02491005", + "0x5d80901255c0291b00a544048092ae014048240124ac2980602201495853", + "0xaa80925a014ab80502c0141300901255c0281200a078048092ae01408805", + "0x338052ae01415005042024340052ae01496805054024348052ae0140a805", + "0x281e012024ab8050220145d80901255c0280904802404b6800a024aa009", + "0x1500908a014ab80502a014aa809268014ab80502c0141300901255c02812", + "0x348052ae0142280524c0248a0052ae014aa005042024238052ae0149a005", + "0x295700a024a70090ce014ab805228015880090d0014ab80508e01428809", + "0x2b058048d740485800a55c0286700a4840485600a55c0285500a59804855", + "0x150090d2014ab8050d2014aa809280014ab805274015af009274014ab805", + "0x482401250034069022014a00052ae014a00056be024340052ae01434005", + "0x282400a14c048092ae014088051760240495700a0480281e012024ab805", + "0x284e00a5540485c00a55c0285b00ada40485b00a55c0280925602404957", + "0x2701100a1700295700a17002b5f01206c0295700a06c0282a01213802957", + "0x27016048da80a81204855c120050120900280901255c028092360242e01b", + "0x118242ae0900d8056d80240d8052ae014120056d60240495700a02412009", + "0x11805180024110052ae0140f0056dc0240495700a02412009042015b681e", + "0x1100521e024110052ae014110050580240495700a0248480904c014ab805", + "0x482a00a55c0281500a098048092ae0140482401255402b6f04e014ab824", + "0xa98052ae014049140125500295700a0b0028470120b00295700a09c02845", + "0xaa1510484540495100a55c029530220908a8092a6014ab8052a601427009", + "0xaa00929c014ab80506201424809066014ab80505401415009062014ab805", + "0x281500a098048092ae014aa8050940240495700a02412009012dc002809", + "0x882422a0241b0052ae0141b00509c0241b0052ae014048310120d402957", + "0x494e00a55c0283800a1240483300a55c0283500a0a80483800a55c02836", + "0x483300a55c0283300a0a80481200a55c0281200a554048092ae0140491b", + "0xa7026066048090c20125380295700a538028490120980295700a09802920", + "0x282100adc4048092ae014048240125340e14c022014a681c298044ab805", + "0xa5811048b8c0494b00a55c0280929c0241e8052ae0140a80504c02404957", + "0x15009024014ab805024014aa809080014ab80507c0157200907c014ab805", + "0x48240121001e812022014200052ae014200052c80241e8052ae0141e805", + "0xab8050124ac048092ae0140880523c0240495700a09002b72012024ab805", + "0x270050540240b0052ae0140b0052aa024218052ae014208055cc02420805", + "0xab80501246c0484309c05808805086014ab805086014b200909c014ab805", + "0x48092ae0140482401206c270246e60580a8242ae0900280904801404809", + "0x28090480240f0056e8024ab824046014118090460481215700a0480281b", + "0x281100a5840482100a55c0281600a098048092ae0140900503c02404957", + "0xaa80904e014ab80504c015bb00904c014ab8050440901237501208802957", + "0x138052ae014138056ee024108052ae014108050540240a8052ae0140a805", + "0xa8052aa0240495700a07802951012024ab8050120900482704205408805", + "0x15a809048014ab8050480149680902c014ab80502c0141500902a014ab805", + "0x495300ade0aa0052ae0901600556c0241602a2aa044ab8050480580a811", + "0x198052ae090188052520241895104855c0295400aae0048092ae01404824", + "0x19811048de80483500a55c0282a00a098048092ae0140482401253802b79", + "0xaa809298014ab805070048120330120e00295700a0241880906c014ab805", + "0xa88052ae014a880525a0241a8052ae0141a805054024aa8052ae014aa805", + "0xa88352aa05463009298014ab8052980142700906c014ab80506c0148f809", + "0x281e012024ab8050120900483d29a0700880507a5340e0112ae014a6036", + "0x296501252c0295700a0a802826012024ab8050220148c80901255c02812", + "0x208052ae014200056ec024200052ae0141f151048dd40483e00a55c0294e", + "0xab805082015bb809296014ab805296014150092aa014ab8052aa014aa809", + "0x8c80901255c0281200a078048092ae01404824012104a595502201420805", + "0x495500a55c0295500a5540484300a55c0295300adec048092ae01408805", + "0x120090860a8aa81100a10c0295700a10c02b770120a80295700a0a80282a", + "0x120050a60240495700a04402919012024ab8050240140f00901255c02809", + "0x270052aa024878052ae014848056f6024848052ae0140492b012024ab805", + "0x880521e014ab80521e015bb809036014ab8050360141500909c014ab805", + "0x495700a0248d80901255c0280952a0240a8052ae01404b7c01243c0d84e", + "0x1bf00901255c028090480241181b048df42701604855c1200501209002809", + "0x280904802411005700084090242ae0900f0056fe0240f0052ae01412005", + "0x270050540240b0052ae0140b0052aa024130052ae0141080570202404957", + "0x1c1009022014ab8050220142480904c014ab80504c0145900909c014ab805", + "0xa4009054554138112ae0140882609c058091280120480295700a0480a824", + "0x295700a55402826012024ab8050120900495400ae0c160052ae09015005", + "0x198050940241983104855c0282c00a51c0495100a55c0281200a45804953", + "0x29ac01254c0295700a54c0282a01209c0295700a09c02955012024ab805", + "0xab805062544a98270246b40483100a55c0283100a1240495100a55c02951", + "0x495700a04802960012024ab8050120900483606a5380880506c0d4a7011", + "0xab8052aa0141500904e014ab80504e014aa809070014ab8052a801573009", + "0x48092ae014048240120e0aa8270220141c0052ae0141c0052c8024aa805", + "0x494c00a55c0284e00a098048092ae0140a8057080240495700a08802960", + "0x295700a53402ae40125340295700a070088245c60240e0052ae0140494e", + "0x283d00a5900494c00a55c0294c00a0a80481600a55c0281600a5540483d", + "0x48092ae0140a8057080240495700a0241200907a5300b01100a0f402957", + "0x173009296014ab8050124ac048092ae0141200570a0240495700a0440291e", + "0x118052ae014118050540240d8052ae0140d8052aa0241f0052ae014a5805", + "0x2811012024ab80501246c0483e04606c0880507c014ab80507c014b2009", + "0xab8050120900481600ae180a81204855c1201100a0480481100a55c02824", + "0x281b00a1380481b00a55c0284e00a0580484e00a55c0281500a05404809", + "0xf00570e024ab8240460141180904606c1215700a06c0281b01206c02957", + "0x481200a55c0281200a084048092ae0140d80503c0240495700a02412009", + "0x282200a054048092ae0140482401209802b880440841215704804802812", + "0x10805242024150052ae014049630125540295700a09c0281601209c02957", + "0x9680900a014ab80500a01415009012014ab805012014aa809058014ab805", + "0xaa8052ae014aa80509c024150052ae01415005598024160052ae01416005", + "0x188052ae090a880559c024a89532a8044ab8052aa0a81600501205566809", + "0x1a8055a20241a94e04855c0283100ab40048092ae014048240120cc02b89", + "0x494c00a55c0295300a098048092ae014048240120e002b8a06c014ab824", + "0xab80529a5381216b0125340295700a07002b8c0120700295700a0d802b8b", + "0xa6005054024aa0052ae014aa0052aa024a58052ae0141e80571a0241e805", + "0xab8050120900494b29855008805296014ab805296015c7009298014ab805", + "0x283e00a0a80484000a55c0295400a5540483e00a55c0295300a09804809", + "0x49540124240295700a5380292d01210c0295700a0e002ad701210402957", + "0x295400a5540490f00a55c0283300ae40048092ae01404824012025c7805", + "0xaa01100a43c0295700a43c02b8e01254c0295700a54c0282a01255002957", + "0x295700a024a700908a014ab80500a0141300901255c0280904802487953", + "0x284500a0a80484000a55c0280900a5540491400a55c0282600a48404847", + "0x49540124240295700a4500292d01210c0295700a11c02ad701210402957", + "0x295700a0241880901255c0281e00a544048092ae01404824012025c7805", + "0x24805046024248052ae0142480509c024248052ae0148a81b0480cc04915", + "0x9009024014ab8050240141080901255c0280904802425005722024ab824", + "0xab80523a0140a80901255c028090480248f0057244748d8242ae09009005", + "0x291b00a4840492500a55c02809726024910052ae0149080502c02490805", + "0x292d0120140295700a0140282a0120240295700a0240295501249802957", + "0x492200a55c0292200a1380492500a55c0292500ae500492600a55c02926", + "0x1cb92b00a55c1205300ae580485300c1440895700a4889292600a0240ab95", + "0x1206800ae64048680d2090ab805256015cc00901255c0280904802496805", + "0x1cd8090aa014ab80500c0141300901255c028090480249a00573419c02957", + "0x295700a160348242d60242c0052ae0142b0057180242b0052ae01433805", + "0x285500a0a80485100a55c0285100a5540494000a55c0293a00ae340493a", + "0x495700a024120092801542881100a5000295700a50002b8e01215402957", + "0xab8050b601415009080014ab8050a2014aa8090b6014ab80500c01413009", + "0x28092a8024848052ae0143480525a024218052ae0149a0055ae02420805", + "0xab8050a2014aa8090b8014ab80525a015c800901255c0280904802404b8f", + "0x30510220142e0052ae0142e00571c024030052ae0140300505402428805", + "0xa48052ae0140494e0121780295700a01402826012024ab8050120900485c", + "0xab8050bc01415009080014ab805012014aa809290014ab80523c01490809", + "0x21805738024848052ae014a400525a024218052ae014a48055ae02420805", + "0x485900a55c0294600ae340494600a55c02947212090b580928e014ab805", + "0x295700a16402b8e0121040295700a1040282a0121000295700a10002955", + "0x2826012024ab805094014a880901255c028090480242c84108004402859", + "0x1ce009090014ab8050125380486a00a55c0281200a4840486600a55c02805", + "0x295700a1b802b8d0121b80295700a1b0350242d6024360052ae01424005", + "0x294500ae380486600a55c0286600a0a80480900a55c0280900a55404945", + "0x388052ae0140280504c0240495700a0241200928a1980481100a51402957", + "0x295700a058029210121d00295700a1cc02b9c0121cc0295700a024a7009", + "0x48052aa024a20052ae014a080571a024a08052ae0143a0760485ac04876", + "0x8805288014ab805288015c70090e2014ab8050e201415009012014ab805", + "0xb02473a054090242ae09002809048014048092ae0140491b01251038809", + "0x1215704806c02b9f01206c0295700a09002b9e012024ab8050120900484e", + "0x2ba10120880295700a05402826012024ab8050120900482100ae800f023", + "0x495500a55c0282700a11c0482700a55c0282600a1140482600a55c0281e", + "0xab80504601483009054014ab8052aa044121150125540295700a5540284e", + "0x160051fe024110052ae01411005054024090052ae014090052aa02416005", + "0x895700a0a8160220240487e809054014ab80505401424809058014ab805", + "0x48092ae014108057440240495700a024120092a254caa01100a544a9954", + "0x295700a0cc088245c6024198052ae0140494e0120c40295700a05402826", + "0x283100a0a80481200a55c0281200a5540483500a55c0294e00ab900494e", + "0x495700a0241200906a0c40901100a0d40295700a0d4029640120c402957", + "0x483600a55c028092560240495700a09002ba3012024ab8050220148f009", + "0x295700a1380282a0120580295700a058029550120e00295700a0d802ae6", + "0x120052ae014028050220241c04e02c0440283800a55c0283800a5900484e", + "0x900502a0240495700a0241200902a015d2012022090ab82404801409009", + "0x1d2809022014ab8050220141080909c014ab80502c0140b00902c014ab805", + "0x295700a1380284e01208c0295700a06c0292101206c088242ae01408805", + "0x12009042015d30092ae0900f0050460240f04e04855c0284e00a06c0484e", + "0x48052aa0240495700a1380281e012024ab805022014a980901255c02809", + "0x1302202255c02823012090a3009046014ab80504601496809012014ab805", + "0xaa8057500240495700a02412009054015d395500a55c1202700a16404827", + "0x96809044014ab805044014aa8092a8014ab805058015d4809058014ab805", + "0x482401255013022022014aa0052ae014aa005754024130052ae01413005", + "0x292d0120880295700a0880295501254c0295700a0a802bab012024ab805", + "0x2809048024a98260440440295300a55c0295300aea80482600a55c02826", + "0x295109c090198092a2014ab8050120c4048092ae014108052a202404957", + "0x483300aeb0049570480c4028230120c40295700a0c40284e0120c402957", + "0x1d683529c090ab8240220140900901255c0282300a14c048092ae01404824", + "0xab8050700140b009070014ab80506a0140a80901255c028090480241b005", + "0x2bae29a0701215704853004824044024a60052ae014a600509c024a6005", + "0x12157048538028120125380295700a53802821012024ab8050120900483d", + "0x28160121040295700a0f802815012024ab8050120900484000aebc1f14b", + "0x848242ae0902181c0480880484300a55c0284300a1380484300a55c02841", + "0xa6824762024238052ae014a58052420240495700a0241200908a015d810f", + "0x484900a55c0291500aea40491500a55c0291400aec80491400a55c0290f", + "0x295700a12402baa01211c0295700a11c0292d0124240295700a42402955", + "0x2955012024ab80529a0146900901255c028090480242484721204402849", + "0x4824012025d98050125500491b00a55c0294b00a0840484a00a55c02845", + "0x20005042024250052ae0140e0052aa0240495700a534028d2012024ab805", + "0xab80507a014aa80901255c0280904802404bb300a024aa009236014ab805", + "0x495700a02412009012ecc028092a80248d8052ae014a700504202425005", + "0x4bb300a024aa009236014ab80506c01410809094014ab805012014aa809", + "0xa700901255c0281100a54c048092ae014198052a20240495700a02412009", + "0x480900a55c0280900a5540491e00a55c0291d00aeac0491d00a55c02809", + "0x1200923c08c0481100a4780295700a47802baa01208c0295700a08c0292d", + "0xa7009236014ab80502a01410809094014ab805012014aa80901255c02809", + "0x492500a55c0291b00a4840492200a55c0292100aeac0492100a55c02809", + "0x120050220240495700a0248d8092444942501100a4880295700a48802baa", + "0x495700a0241200902c015da015024090ab82402201409009022014ab805", + "0xab80502401490809036014ab80509c0140b00909c014ab80502a0140a809", + "0x28230120780d8242ae0140d8050360240d8052ae0140d80509c02411805", + "0xaa80901255c0281b00a078048092ae0140482401208402bb501255c1201e", + "0x118052ae0141180525a024028052ae01402805054024048052ae01404805", + "0x2bb62aa014ab82404e0157900904e098110112ae0141180501204578809", + "0xab8242a80157a8092a80b01215700a55402af4012024ab8050120900482a", + "0x2bb80120c40295700a09802826012024ab8050120900495100aedca9805", + "0x1a8052ae014a702c048ee80494e00a55c0283300aee40483300a55c02953", + "0xab80506201415009044014ab805044014aa80906c014ab80506a015dd809", + "0x48092ae014048240120d8188220220141b0052ae0141b00577802418805", + "0x295700a0e00282a0125300295700a088029550120e00295700a09802826", + "0x1de8050125500483d00a55c0282c00a4b40494d00a55c0295100ab5c0481c", + "0x295700a0880295501252c0295700a0a802bbe012024ab80501209004809", + "0xa58260440440294b00a55c0294b00aef00482600a55c0282600a0a804822", + "0x1980907c014ab8050120c4048092ae014108052a20240495700a02412009", + "0x4957048100028230121000295700a1000284e0121000295700a0f80d824", + "0x280500a0a80480900a55c0280900a554048092ae0140482401210402bbf", + "0x8484302255c0282300a02408bc001208c0295700a08c0292d01201402957", + "0x228052de0240495700a0241200908e015e104500a55c1210f00af040490f", + "0x495700a02412009094015e204900a55c1211500af0c04915228090ab805", + "0xab80523a015dc80923a014ab805092015e2809236014ab80521201413009", + "0x29550124880295700a48402bbb0124840295700a4788a0247740248f005", + "0x292200a55c0292200aef00491b00a55c0291b00a0a80484300a55c02843", + "0x218052aa024928052ae0148480504c0240495700a0241200924446c21811", + "0x9680929a014ab8050940156b809038014ab80524a01415009298014ab805", + "0x295700a4981e824774024930052ae014a680578c0241e8052ae0148a005", + "0x281c00a0a80494c00a55c0294c00a5540480600a55c0285100aeec04851", + "0x495700a0241200900c070a601100a0180295700a01802bbc01207002957", + "0xab80521201415009086014ab805086014aa8090a6014ab80508e015df009", + "0x48092ae0140482401214c84843022014298052ae0142980577802484805", + "0x492d00a55c0280929c024958052ae0140280504c0240495700a10402951", + "0xab8050d0015dd8090d0014ab8050d208c123ba0121a40295700a4b402bc6", + "0x33805778024958052ae01495805054024048052ae014048052aa02433805", + "0x295700a01402826012024ab80501209004867256024088050ce014ab805", + "0xab80502c014908090ac014ab8050aa015e30090aa014ab80501253804934", + "0x29550125000295700a4e802bbb0124e80295700a1582c0247740242c005", + "0x294000a55c0294000aef00493400a55c0293400a0a80480900a55c02809", + "0x1e3812022090ab82404801409009048014ab80500a014088092804d004811", + "0xab80502c0140b00902c014ab8050240140a80901255c028090480240a805", + "0x292101206c088242ae0140880574a024088052ae0140880504202427005", + "0xf04e04855c0284e00a06c0484e00a55c0284e00a1380482300a55c0281b", + "0xab805022014a980901255c0280904802410805790024ab82403c01411809", + "0xab80504601496809012014ab805012014aa80901255c0284e00a07804809", + "0x1e495500a55c1202700a2340482704c0880895700a08c0482426c02411805", + "0xab805058015e5809058014ab8052aa015e500901255c0280904802415005", + "0xaa005798024130052ae0141300525a024110052ae014110052aa024aa005", + "0x295700a0a802bcd012024ab8050120900495404c088088052a8014ab805", + "0x295300af300482600a55c0282600a4b40482200a55c0282200a55404953", + "0x48092ae014108052a20240495700a024120092a60981101100a54c02957", + "0x295700a0c40284e0120c40295700a54427024066024a88052ae01404831", + "0x282300a14c048092ae014048240120cc02bce01255c1203100a08c04831", + "0xa80901255c028090480241b00579e0d4a70242ae0900880502402404957", + "0xa60052ae014a600509c024a60052ae0141c00502c0241c0052ae0141a805", + "0x2921012024ab8050120900483d00af40a681c04855c1214c01209116809", + "0x484000a55c0283e00af2c0483e00a55c0294d00af440494b00a55c0294e", + "0x295700a10002bcc01252c0295700a52c0292d0120700295700a07002955", + "0x10809082014ab80507a014aa80901255c028090480242014b03804402840", + "0x48052aa0240495700a02412009012f48028092a8024218052ae014a7005", + "0x280904802404bd200a024aa009086014ab80506c01410809082014ab805", + "0x295700a024a700901255c0281100a54c048092ae014198052a202404957", + "0x282300a4b40480900a55c0280900a5540490f00a55c0290900af3404909", + "0x495700a0241200921e08c0481100a43c0295700a43c02bcc01208c02957", + "0x295700a024a7009086014ab80502a01410809082014ab805012014aa809", + "0x284700af300491400a55c0284300a4840484700a55c0284500af3404845", + "0xab82404801409009048014ab80500a0140880908e4502081100a11c02957", + "0xb00902c014ab8050240140a80901255c028090480240a8057a604808824", + "0x270242ae01427005036024270052ae0142700509c024270052ae0140b005", + "0x284e00a078048092ae0140482401208c02bd401255c1201b00a08c0481b", + "0x110057aa0840f0242ae09008805024024088052ae0140880504202404957", + "0x138052ae0141300502c024130052ae0141080502a0240495700a02412009", + "0x482c00af581515504855c120270120918b80904e014ab80504e01427009", + "0x495300a55c0282a00af5c0495400a55c0281e00a484048092ae01404824", + "0x295700a5500292d0125540295700a554029550125440295700a54c02bd8", + "0xaa80901255c02809048024a89542aa0440295100a55c0295100af6404954", + "0x12009012f68028092a8024198052ae0140f005042024188052ae01416005", + "0xaa009066014ab80504401410809062014ab805012014aa80901255c02809", + "0xab8050120c4048092ae014118052a20240495700a02412009012f6802809", + "0x28230120d40295700a0d40284e0120d40295700a53827024066024a7005", + "0x481100a55c0281100a084048092ae014048240120d802bdb01255c12035", + "0x294c00a054048092ae0140482401207002bdc2980e01215704804402812", + "0x281b0120f40295700a0f40284e0120f40295700a5340281601253402957", + "0x495700a0241200907c015ee8092ae090a5805046024a583d04855c0283d", + "0x121570480e0028120120e00295700a0e002821012024ab80507a0140f009", + "0x28160124240295700a10402815012024ab8050120900484300af7820840", + "0x228242ae090878090488b40490f00a55c0290f00a1380490f00a55c02909", + "0x238057c00248a8052ae014200052420240495700a02412009228015ef847", + "0xaa809236014ab805094015ec009094014ab805092015f0809092014ab805", + "0x8d8052ae0148d8057b20248a8052ae0148a80525a024228052ae01422805", + "0x28210124740295700a45002955012024ab8050120900491b22a11408805", + "0x280900a554048092ae01404824012025f10050125500491e00a55c02840", + "0xab805012090048097c4014049540124780295700a10c0282101247402957", + "0xab8052420f4120330124840295700a0241880901255c0283e00a54404809", + "0x1200924a015f18092ae09091005046024910052ae0149100509c02491005", + "0x29210121440295700a49802be40124980295700a024a700901255c02809", + "0x492b00a55c0285300af600485300a55c0285100af840480600a55c02838", + "0x295700a4ac02bd90120180295700a0180292d0120240295700a02402955", + "0x2955012024ab80524a014a880901255c02809048024958060120440292b", + "0x4824012025ed0050125500483300a55c0283800a0840483100a55c02809", + "0x29260124780295700a070028210124740295700a02402955012024ab805", + "0x4824012025ed0050125500483300a55c0291e00ac400483100a55c0291d", + "0x280929c024968052ae014088052420240495700a0d802951012024ab805", + "0x292d0120240295700a024029550121a00295700a1a402be50121a402957", + "0x28090480243412d0120440286800a55c0286800af640492d00a55c0292d", + "0x280929c024198052ae0140a805042024188052ae014048052aa02404957", + "0x2bd90121540295700a0cc029210124d00295700a19c02be501219c02957", + "0x12005024024120052ae014028050220249a0550620440293400a55c02934", + "0xb0052ae0140900502a0240495700a0241200902a015f3012022090ab824", + "0xab80509c0140d80909c014ab80509c0142700909c014ab80502c0140b009", + "0x281e012024ab8050120900482300af9c0495704806c0282301206c27024", + "0x1f402103c090ab82402201409009022014ab8050220141080901255c0284e", + "0xab80504c0140b00904c014ab8050420140a80901255c0280904802411005", + "0x2be90545541215704809c0482462e024138052ae0141380509c02413805", + "0x295700a0a802bea0125500295700a07802921012024ab8050120900482c", + "0x295400a4b40495500a55c0295500a5540495100a55c0295300afac04953", + "0x495700a024120092a2550aa81100a5440295700a54402bec01255002957", + "0x4bed00a024aa009066014ab80503c01410809062014ab805058014aa809", + "0x198052ae01411005042024188052ae014048052aa0240495700a02412009", + "0x4831012024ab805046014a880901255c0280904802404bed00a024aa009", + "0x483500a55c0283500a1380483500a55c0294e09c0901980929c014ab805", + "0x295700a04402821012024ab8050120900483600afb8049570480d402823", + "0x2815012024ab8050120900481c00afbca603804855c1201100a04804811", + "0x483d00a55c0283d00a1380483d00a55c0294d00a0580494d00a55c0294c", + "0x1c0050420240495700a02412009080015f803e296090ab82407a0241222a", + "0x495700a02412009212015f8843082090ab82407001409009070014ab805", + "0xab80508a0142700908a014ab80521e0140b00921e014ab8050860140a809", + "0x48092ae0140482401245402bf222811c12157048114a582445a02422805", + "0xab805094015f9809094014ab8052280f8122310121240295700a10402921", + "0x2480525a024238052ae014238052aa0248e8052ae0148d8057d60248d805", + "0xab8050120900491d09211c0880523a014ab80523a015f6009092014ab805", + "0xab80508201410809062014ab80522a014aa80901255c0283e00a64004809", + "0x48092ae0141f0053200240495700a02412009012fb4028092a802419805", + "0x48097da014049540120cc0295700a424028210120c40295700a52c02955", + "0x483300a55c0283800a0840483100a55c0284000a554048092ae01404824", + "0x28210120c40295700a02402955012024ab805012090048097da01404954", + "0x283600a544048092ae01404824012025f68050125500483300a55c0281c", + "0x292100afd00492100a55c0280929c0248f0052ae0140880524202404957", + "0x2bec0124780295700a4780292d0120240295700a0240295501248802957", + "0xab805012014aa80901255c028090480249111e0120440292200a55c02922", + "0x292500afd00492500a55c0280929c024198052ae0140a80504202418805", + "0x1881100a4980295700a49802bec0121440295700a0cc0292101249802957", + "0xab82402201409009022014ab8050480140880901255c0280923602493051", + "0xb00909c014ab80502a0140a80901255c028090480240b0057ea05409024", + "0xd8242ae0140d8050360240d8052ae0140d80509c0240d8052ae01427005", + "0x281b00a078048092ae0140482401207802bf601255c1202300a08c04823", + "0x130057ee088108242ae09009005024024090052ae0140900504202404957", + "0xaa8052ae0141380502c024138052ae0141100502a0240495700a02412009", + "0x495400afe01602a04855c121550120918b8092aa014ab8052aa01427009", + "0x495100a55c0282100a4840495300a55c0280500a098048092ae01404824", + "0xab805066544123fb0120cc0295700a0c402bfa0120c40295700a0b002bf9", + "0xa9805054024150052ae014150052aa0241a8052ae014a70057f8024a7005", + "0xab805012090048352a60a80880506a014ab80506a015fe8092a6014ab805", + "0x283600a0a80483800a55c0295400a5540483600a55c0280500a09804809", + "0xab805012090048097fc014049540120700295700a0840282101253002957", + "0x294d00a0a80483800a55c0280900a5540494d00a55c0280500a09804809", + "0xab805012090048097fc014049540120700295700a0980282101253002957", + "0x295700a0241880907a014ab8050240149080901255c0281e00a54404809", + "0x1f0050460241f0052ae0141f00509c0241f0052ae014a581b0480cc0494b", + "0x15009012014ab805012014aa80901255c02809048024200057fe024ab824", + "0xab80507a0140481156a0241e8052ae0141e80525a024028052ae01402805", + "0x48092ae0140482401211402c0021e014ab8242120155b00921210c20811", + "0x482401212402c0122a014ab8242280149480922811c1215700a43c02ab8", + "0x2bfa01246c0295700a45402c020121280295700a10c02826012024ab805", + "0x908052ae0148f0057f80248f0052ae0148e847048fec0491d00a55c0291b", + "0xab805242015fe809094014ab80509401415009082014ab805082014aa809", + "0x492200a55c0284300a098048092ae014048240124842504102201490805", + "0xab80524c015fe00924c014ab80524a11c123fb0124940295700a12402c03", + "0x288057fa024910052ae01491005054024208052ae014208052aa02428805", + "0x295700a11402c04012024ab80501209004851244104088050a2014ab805", + "0x280600aff40484300a55c0284300a0a80484100a55c0284100a55404806", + "0x48092ae014200052a20240495700a0241200900c10c2081100a01802957", + "0x968052ae01495805806024958052ae0140494e01214c0295700a01402826", + "0x280900a5540486800a55c0286900aff00486900a55c0292d07a091fd809", + "0x481100a1a00295700a1a002bfd01214c0295700a14c0282a01202402957", + "0xab805012014aa8090ce014ab80500a0141300901255c0280904802434053", + "0x280929c0240e0052ae0140b005042024a60052ae014338050540241c005", + "0x123fb0121580295700a070029210121540295700a4d002c030124d002957", + "0x1c0052ae0141c0052aa0249d0052ae0142c0057f80242c0052ae0142a856", + "0x493a2980e008805274014ab805274015fe809298014ab80529801415009", + "0x482401205402c0502404412157048090028120120900295700a01402811", + "0x284e0121380295700a058028160120580295700a04802815012024ab805", + "0x28090480240f00580c08c0d8242ae090270090488a80484e00a55c0284e", + "0x1300580e088108242ae09008805024024088052ae0140880504202404957", + "0xaa8052ae0141380502c024138052ae0141100502a0240495700a02412009", + "0x495400b0201602a04855c12155036091150092aa014ab8052aa01427009", + "0xa895304855c1202100a0480482100a55c0282100a084048092ae01404824", + "0x283300a0580483300a55c0295100a054048092ae014048240120c402c09", + "0x20503606a090ab82429c0a81222d0125380295700a5380284e01253802957", + "0x283605809118809298014ab8052a60149080901255c028090480241c005", + "0xaa80907a014ab80529a0160600929a014ab80503808c1240b01207002957", + "0x1e8052ae0141e80581a024a60052ae014a600525a0241a8052ae0141a805", + "0x118053200240495700a0b002990012024ab8050120900483d2980d408805", + "0x49540120f80295700a54c0282101252c0295700a0e002955012024ab805", + "0xab805046014c800901255c0282c00a640048092ae0140482401202607005", + "0x2070050125500483e00a55c0283100a0840494b00a55c0282a00a55404809", + "0xa58052ae014aa0052aa0240495700a08c02990012024ab80501209004809", + "0xc800901255c0280904802404c0e00a024aa00907c014ab80504201410809", + "0x483e00a55c0282600a0840494b00a55c0281b00a554048092ae01411805", + "0x282101252c0295700a07802955012024ab8050120900480981c01404954", + "0x280900a554048092ae01404824012026070050125500483e00a55c02811", + "0x2000581e024200052ae0140494e0120f80295700a0540282101252c02957", + "0x8805082014ab80508201606809086014ab80507c01490809082014ab805", + "0x2c1002404412157048090028120120900295700a014028110121042194b", + "0x295700a058028160120580295700a04802815012024ab80501209004815", + "0xf00582208c0d8242ae090270090480880484e00a55c0284e00a1380484e", + "0x108242ae09008805024024088052ae014088050420240495700a02412009", + "0x1380502c024138052ae0141100502a0240495700a0241200904c01609022", + "0x1602a04855c121550360918b8092aa014ab8052aa014270092aa014ab805", + "0x282a00a5540495300a55c0282100a484048092ae0140482401255002c13", + "0x198312a2044ab8052a60a81241401254c0295700a54c0292d0120a802957", + "0x294e00b05c048092ae014048240120d402c1629c014ab8240660160a809", + "0x281c0460920c809038014ab8052980e01b02c0250600494c0700d808957", + "0x292d0125440295700a544029550120f40295700a5340297201253402957", + "0x28090480241e8312a20440283d00a55c0283d00b0680483100a55c02831", + "0xab8050580160d80901255c0282300a348048092ae0141a80509402404957", + "0x294b00a0840483e00a55c0295100a5540494b00a55c0283100a04404809", + "0x495700a08c028d2012024ab805012090048098380140495401210002957", + "0x4c1d00a024aa009086014ab80504201410809082014ab8052a8014aa809", + "0x484100a55c0281b00a554048092ae014118051a40240495700a02412009", + "0x295700a10c02b100120f80295700a1040292601210c0295700a09802821", + "0x483e00a55c0281e00a554048092ae014048240120260e00501255004840", + "0x2955012024ab80501209004809838014049540121000295700a04402821", + "0x20f009212014ab8050125380484000a55c0281500a0840483e00a55c02809", + "0x878052ae01487805834024228052ae01420005242024878052ae01484805", + "0x28092360240495700a0254a809024014ab80501307c0490f08a0f808805", + "0xd8058401380b0242ae0900a8050240240a8052ae0141200502202404957", + "0x295700a04409024842024088052ae0142700502a0240495700a02412009", + "0x110058440840f0242ae090118090480880482300a55c0281100a05804811", + "0x130242ae0900b0050240240b0052ae0140b0050420240495700a02412009", + "0x1500502c024150052ae0141380502a0240495700a024120092aa01611827", + "0x295501254c0295700a098029210125500295700a02612009058014ab805", + "0x495300a55c0295300a4b40480500a55c0280500a0a80481e00a55c0281e", + "0xaa15300a0780ac250120b00295700a0b00284e0125500295700a55002971", + "0x28090480241a80584e538029570480cc02c260120cc1895102255c0282c", + "0xe005854530029570480e002c290120e01b0242ae014a700585002404957", + "0x1e8242ae014a6005856024a68052ae0141880504c0240495700a02412009", + "0x283e0420921680907c014ab8052960144000901255c0283d00b0b00494b", + "0x217809086014ab8050820d8121730121040295700a10002c2e01210002957", + "0xa68052ae014a6805054024a88052ae014a88052aa024848052ae01421805", + "0x28d2012024ab8050120900490929a54408805212014ab80521201618009", + "0x1500908a014ab8052a2014aa80921e014ab8050620141300901255c02821", + "0x8a8052ae0141b00525a0248a0052ae0140e0055ae024238052ae01487805", + "0x2c32012024ab8050420146900901255c0280904802404c3100a024aa009", + "0x483100a55c0283100a0a80495100a55c0295100a5540484900a55c02835", + "0x108051a40240495700a024120090920c4a881100a1240295700a12402c30", + "0xaa8052420248d8052ae0140494e0121280295700a01402826012024ab805", + "0x16b80908e014ab8050940141500908a014ab80503c014aa80923a014ab805", + "0x8f0052ae0148a0058660248a8052ae0148e80525a0248a0052ae0148d805", + "0x284500a5540492200a55c0292100b0bc0492100a55c0291e22a090b9809", + "0x2281100a4880295700a48802c3001211c0295700a11c0282a01211402957", + "0xab805044014aa80924a014ab80500a0141300901255c0280904802491047", + "0x28092a8024030052ae0140b005042024288052ae0149280505402493005", + "0x295700a01402826012024ab8050240161a80901255c0280904802404c34", + "0x281b00a0840485100a55c0285300a0a80492600a55c0280900a55404853", + "0x3005242024968052ae01495805866024958052ae0140494e01201802957", + "0x486700a55c0286800b0bc0486800a55c0292d0d2090b98090d2014ab805", + "0x295700a19c02c300121440295700a1440282a0124980295700a49802955", + "0x88242ae09012005024024120052ae014028050220243385124c04402867", + "0xb00502c0240b0052ae0140900502a0240495700a0241200902a0161b012", + "0x1181b04855c1204e0120901100909c014ab80509c0142700909c014ab805", + "0x1201100a0480481100a55c0281100a084048092ae0140482401207802c37", + "0x482700a55c0282200a054048092ae0140482401209802c3804408412157", + "0xab8242aa06c120220125540295700a5540284e0125540295700a09c02816", + "0xaa8092a6014ab8050420149080901255c02809048024aa0058720b015024", + "0x895700a54c15024874024a98052ae014a980525a024150052ae01415005", + "0x21e80901255c028090480241a805878538029570480cc02c3b0120cc18951", + "0x121700120700295700a5301c03605804a1f0092980e01b0112ae014a7005", + "0xa88052ae014a88052aa0241e8052ae014a680587e024a68052ae0140e023", + "0x483d0625440880507a014ab80507a01620009062014ab80506201496809", + "0x28d2012024ab8050460146900901255c0283500a128048092ae01404824", + "0x1080907c014ab8052a2014aa809296014ab8050620140880901255c0282c", + "0x118051a40240495700a02412009013104028092a8024200052ae014a5805", + "0x495401210c0295700a084028210121040295700a55002955012024ab805", + "0xab805036014aa80901255c0282300a348048092ae0140482401202621005", + "0x218056200241f0052ae0142080524c024218052ae0141300504202420805", + "0xab80503c014aa80901255c0280904802404c4100a024aa009080014ab805", + "0x495700a02412009013104028092a8024200052ae014088050420241f005", + "0x295700a024a7009080014ab80502a0141080907c014ab805012014aa809", + "0x290f00b1000484500a55c0284000a4840490f00a55c0290900b10c04909", + "0xab82404801409009048014ab80500a0140880921e1141f01100a43c02957", + "0xb00902c014ab8050240140a80901255c028090480240a80588804808824", + "0x121570481380482445a024270052ae0142700509c024270052ae0140b005", + "0x28120120440295700a04402821012024ab8050120900481e00b1141181b", + "0x295700a08802815012024ab8050120900482600b1181102104855c12011", + "0x295500a06c0495500a55c0295500a1380495500a55c0282700a05804827", + "0xf00901255c028090480241600588e024ab8240540141180905455412157", + "0xa995404855c1202100a0480482100a55c0282100a084048092ae014aa805", + "0x283100a0580483100a55c0295300a054048092ae0140482401254402c48", + "0x22483529c090ab82406606c123170120cc0295700a0cc0284e0120cc02957", + "0xab80506a01625009070014ab8052a80149080901255c028090480241b005", + "0x29550125340295700a0700296e0120700295700a53011824896024a6005", + "0x294d00a55c0294d00b1300483800a55c0283800a4b40494e00a55c0294e", + "0x283600a554048092ae014118052580240495700a0241200929a0e0a7011", + "0xab8050120900480989a0140495401252c0295700a550028210120f402957", + "0xab8052a20141080907a014ab805036014aa80901255c0282300a4b004809", + "0x48092ae014160052a20240495700a02412009013134028092a8024a5805", + "0x295700a1000284e0121000295700a0f8aa8240660241f0052ae01404831", + "0xab805012538048092ae0140482401210402c4e01255c1204000a08c04840", + "0x11824896024878052ae01410805242024848052ae0142180589e02421805", + "0x481b00a55c0281b00a5540484700a55c0284500a5b80484500a55c02909", + "0x1200908e43c0d81100a11c0295700a11c02c4c01243c0295700a43c0292d", + "0xd8052aa0240495700a08c0292c012024ab805082014a880901255c02809", + "0x280904802404c5000a024aa00922a014ab80504201410809228014ab805", + "0x282600a0840483d00a55c0281b00a554048092ae0141180525802404957", + "0x49540124540295700a52c02b100124500295700a0f40292601252c02957", + "0x281100a0840491400a55c0281e00a554048092ae0140482401202628005", + "0x295700a02402955012024ab805012090048098a00140495401245402957", + "0xab80509201628809092014ab8050125380491500a55c0281500a08404914", + "0x8d914022014250052ae014250058980248d8052ae0148a80524202425005", + "0x481500b1480901104855c1202400a0480482400a55c0280500a0440484a", + "0x484e00a55c0281600a0580481600a55c0281200a054048092ae01404824", + "0xab824036014118090361381215700a1380281b0121380295700a1380284e", + "0x281100a084048092ae0142700503c0240495700a0241200904601629809", + "0x48092ae0140482401208802c54042078121570480440281201204402957", + "0x295700a09c0284e01209c0295700a098028160120980295700a08402815", + "0x9080901255c02809048024160058aa0a8aa8242ae09013809048c5c04827", + "0xa88052ae014a98058ae024a98052ae014150058ac024aa0052ae0140f005", + "0xab8052a20162c0092a8014ab8052a8014968092aa014ab8052aa014aa809", + "0x483100a55c0282c00a554048092ae01404824012544aa155022014a8805", + "0x2955012024ab805012090048098b2014049540120cc0295700a07802821", + "0x48240120262c8050125500483300a55c0282200a0840483100a55c02809", + "0xa704e0480cc0494e00a55c028090620240495700a08c02951012024ab805", + "0x1b0058b4024ab82406a0141180906a014ab80506a0142700906a014ab805", + "0x1c0242ae09008805024024088052ae014088050420240495700a02412009", + "0xa680502c024a68052ae014a600502a0240495700a024120090380162d94c", + "0x1f14b04855c1203d0120911500907a014ab80507a0142700907a014ab805", + "0x283e00b1740484100a55c0283800a484048092ae0140482401210002c5c", + "0x292d01252c0295700a52c029550124240295700a10c02c5701210c02957", + "0x2809048024848412960440290900a55c0290900b1600484100a55c02841", + "0x28092a8024198052ae0141c005042024188052ae014200052aa02404957", + "0xab80503801410809062014ab805012014aa80901255c0280904802404c59", + "0x48092ae0141b0052a20240495700a02412009013164028092a802419805", + "0x238052ae014228058bc024228052ae0140494e01243c0295700a04402921", + "0xab80508e0162c00921e014ab80521e01496809012014ab805012014aa809", + "0x483100a55c0280900a554048092ae0140482401211c8780902201423805", + "0x8a8052ae0148a0058bc0248a0052ae0140494e0120cc0295700a05402821", + "0x49150920c40880522a014ab80522a0162c009092014ab80506601490809", + "0x480500a55c0280500a0a80480900a55c0280900a554048092ae0140491b", + "0x2ab60120540901102255c0282400a02408ab50120900295700a0900292d", + "0xd8242ae0140b0055700240495700a0241200909c0162f81600a55c12015", + "0xd8050220240495700a024120090420163001e00a55c1202300a4a404823", + "0x495700a024120092aa0163082704c090ab82404401409009044014ab805", + "0xab80505801427009058014ab8050540140b009054014ab80504e0140a809", + "0x48092ae0140482401254402c632a6550121570480b0088248c402416005", + "0xab8052a60781216d0120cc0295700a098029210120c40295700a04802826", + "0x2c660120d80295700a0d4198248ca0241a8052ae014a70058c8024a7005", + "0x483100a55c0283100a0a80495400a55c0295400a5540483800a55c02836", + "0xf00554c0240495700a024120090700c4aa01100a0e00295700a0e002c67", + "0x282a0120700295700a544029550125300295700a04802826012024ab805", + "0x4824012026340050125500483d00a55c0282600a0840494d00a55c0294c", + "0x88052aa024a58052ae0140900504c0240495700a07802aa6012024ab805", + "0xa700907a014ab8052aa0141080929a014ab80529601415009038014ab805", + "0x484100a55c0283d00a4840484000a55c0283e00b1a40483e00a55c02809", + "0xab805038014aa809212014ab80508601633009086014ab80508010412465", + "0xa681c022014848052ae014848058ce024a68052ae014a68050540240e005", + "0x295700a08402c6901243c0295700a04802826012024ab80501209004909", + "0x88052aa0248a0052ae014238058cc024238052ae0142281b04919404845", + "0x8805228014ab8052280163380921e014ab80521e01415009022014ab805", + "0x281100a5540491500a55c0284e00b1a8048092ae0140482401245087811", + "0x881100a4540295700a45402c670120480295700a0480282a01204402957", + "0xab82402201409009022014ab8050480140880901255c028092360248a812", + "0xb00909c014ab80502a0140a80901255c028090480240b0058d605409024", + "0x90242ae0140900574a024090052ae014090050420240d8052ae01427005", + "0xd8090485b00481b00a55c0281b00a1380481e00a55c0282300a48404823", + "0x138052ae014110058da0240495700a0241200904c01636022042090ab824", + "0x160058e20a802c702aa014ab82304e0163780904e014ab80504e01637009", + "0x2809048024a70058ee0cc02c760620163a95100b1d0a98058e655002c72", + "0xab8240240140900901255c0281e00a14c048092ae014aa80509402404957", + "0xb009298014ab80506c0140a80901255c028090480241c0058f00d81a824", + "0x121570480701082462e0240e0052ae0140e00509c0240e0052ae014a6005", + "0x29210120f80295700a01402826012024ab8050120900494b00b1e41e94d", + "0x484300a55c0284100acc00484100a55c0283d00b1e80484000a55c02835", + "0xab80529a014aa80921e014ab8052120163d809212014ab80508610012174", + "0x1f14d022014878052ae014878058f80241f0052ae0141f005054024a6805", + "0x295700a52c029550121140295700a01402826012024ab8050120900490f", + "0x23e8050125500491500a55c0283500a0840491400a55c0284500a0a804847", + "0x295700a084029550121240295700a01402826012024ab80501209004809", + "0x23e8050125500491500a55c0283800a0840491400a55c0284900a0a804847", + "0x48092ae0140f0050a60240495700a0a80284a012024ab80501209004809", + "0x291b00a054048092ae0140482401247402c7e2361281215704804802812", + "0x1222a0124840295700a4840284e0124840295700a4780281601247802957", + "0xab8050940141080901255c02809048024930058fe494910242ae09090821", + "0xa80901255c0280904802429805900018288242ae0902500502402425005", + "0x968052ae0149680509c024968052ae0149580502c024958052ae01403005", + "0x2826012024ab8050120900486700b2043406904855c1212d24409116809", + "0x2b0052ae014341250488c40485500a55c0285100a4840493400a55c02805", + "0x293a0aa090ba009274014ab8050b0015980090b0014ab8050ac01641009", + "0x282a0121a40295700a1a40295501216c0295700a50002c7b01250002957", + "0x28090480242d9340d20440285b00a55c0285b00b1f00493400a55c02934", + "0x286700a5540485c00a55c0280500a098048092ae0149280532002404957", + "0x49540124540295700a144028210124500295700a1700282a01211c02957", + "0xab80500a0141300901255c0292500a640048092ae014048240120263e805", + "0x298050420248a0052ae0142f005054024238052ae014910052aa0242f005", + "0xab80500a0141300901255c0280904802404c7d00a024aa00922a014ab805", + "0x250050420248a0052ae014a4805054024238052ae014930052aa024a4805", + "0xab80500a0141300901255c0280904802404c7d00a024aa00922a014ab805", + "0x8e8050420248a0052ae014a4005054024238052ae014108052aa024a4005", + "0xab8050580142500901255c0280904802404c7d00a024aa00922a014ab805", + "0xab80503c01496809042014ab805042014aa80901255c0281200a54c04809", + "0x24286600a55c1205900b2100485928c51c0895700a078108249060240f005", + "0xab8050cc01643009090014ab80500a0141300901255c0280904802435005", + "0x2c7b0125140295700a1b8a30242e8024370052ae0143600566002436005", + "0x484800a55c0284800a0a80494700a55c0294700a5540487100a55c02945", + "0x280504c0240495700a024120090e2120a381100a1c40295700a1c402c7c", + "0x16b8090ec014ab8050e6014150090e8014ab80528e014aa8090e6014ab805", + "0x1200901321c028092a8024a20052ae014a300525a024a08052ae01435005", + "0x90050240240495700a07802853012024ab8052a80142500901255c02809", + "0x3e8052ae0149e00502a0240495700a024120092760164413c0f2090ab824", + "0x1213804209116809270014ab80527001427009270014ab8050fa0140b009", + "0x487900a55c0287900a084048092ae014048240124dc02c8910420012157", + "0x288600a054048092ae0140482401222002c8a10c210121570481e402812", + "0x1222d01222c0295700a22c0284e01222c0295700a2240281601222402957", + "0xab80500a0141300901255c02809048024478059162349b0242ae09045880", + "0x2c8d0124cc0295700a23441024918024490052ae014420052420249a805", + "0x4c0052ae0144b0920485d00489600a55c0289500acc00489500a55c02933", + "0xab80526a0141500926c014ab80526c014aa809260014ab8051300163d809", + "0x48092ae014048240124c09a936022014980052ae014980058f80249a805", + "0x238052ae014478052aa0244d8052ae0140280504c0240495700a2080292c", + "0x4c7d00a024aa00922a014ab80510801410809228014ab80513601415009", + "0x492f00a55c0280500a098048092ae014410052580240495700a02412009", + "0x295700a220028210124500295700a4bc0282a01211c0295700a20002955", + "0x489e00a55c0280500a098048092ae014048240120263e80501255004915", + "0x295700a1e4028210124500295700a2780282a01211c0295700a4dc02955", + "0x48a000a55c0280500a098048092ae014048240120263e80501255004915", + "0x295700a4ec028210124500295700a2800282a01211c0295700a08402955", + "0x2980901255c0295300a128048092ae014048240120263e80501255004915", + "0xab805012090048a500b2385192e04855c1201200a048048092ae0140f005", + "0xab80501323c0498f00a55c0292c00a0580492c00a55c028a300a05404809", + "0x2805054024108052ae014108052aa024c80052ae0149700524202453805", + "0x2700914e014ab80514e01648009320014ab8053200149680900a014ab805", + "0x2490092542ac548112ae014c78a732001410815922024c78052ae014c7805", + "0x1215700a2b802c94012024ab805012090048ad00b24c570052ae09095005", + "0x2826012024ab8050120900492800b258590052ae0909480592a024948b0", + "0x48092ae014cf0059300245b19e04855c028b200b25c048b400a55c028ab", + "0x295700a49c02b3001249c0295700a2e002c9a0122e00295700a2d802c99", + "0x548052aa0245e8052ae0145d8058f60245d8052ae014920b00485d004924", + "0x880517a014ab80517a0163e009168014ab80516801415009152014ab805", + "0x28a900a5540492300a55c028ab00a098048092ae014048240122f45a0a9", + "0x292d0125040295700a4a002ad70121d80295700a48c0282a0121d002957", + "0x28ad00b26c048092ae01404824012026438050125500494400a55c028b0", + "0x2c7c0122ac0295700a2ac0282a0122a40295700a2a4029550122f802957", + "0xab80500a0141300901255c028090480245f0ab152044028be00a55c028be", + "0x282100a554048c200a55c028a500a4840492000a55c0280929c02460005", + "0x292d0125040295700a48002ad70121d80295700a3000282a0121d002957", + "0x295100a128048092ae01404824012026438050125500494400a55c028c2", + "0x48c600b2708f8c404855c1201200a048048092ae0140f0050a602404957", + "0x491c00a55c028c800a058048c800a55c0291f00a054048092ae01404824", + "0x1200922e0164e919196090ab8242380841222a0124700295700a4700284e", + "0x24f0d0096090ab82418801409009188014ab8051880141080901255c02809", + "0xab8053580140b009358014ab8051a00140a80901255c028090480248b005", + "0x8c9f1a8348121570486b4658244fc024d68052ae014d680509c024d6805", + "0x284b00a4840491000a55c0280500a098048092ae0140482401235c88912", + "0x1980093a0014ab80521c0165080921c014ab8051a8464124a001236402957", + "0x295700a37402c7b0123740295700a36c6c8242e80246d8052ae014e8005", + "0x290a00b1f00491000a55c0291000a0a8048d200a55c028d200a5540490a", + "0x48092ae014888055080240495700a024120092144406901100a42802957", + "0x48e100a55c0280500a098048092ae0148c8053200240495700a35c02a84", + "0x295700a12c028210124500295700a3840282a01211c0295700a44802955", + "0x1300901255c0291900a640048092ae014048240120263e80501255004915", + "0x8a0052ae01483005054024238052ae014658052aa024830052ae01402805", + "0x1300901255c0280904802404c7d00a024aa00922a014ab80522c01410809", + "0x8a0052ae0147f805054024238052ae0148b8052aa0247f8052ae01402805", + "0x1300901255c0280904802404c7d00a024aa00922a014ab80518801410809", + "0x8a0052ae0147e805054024238052ae014108052aa0247e8052ae01402805", + "0x2500901255c0280904802404c7d00a024aa00922a014ab80518c01410809", + "0x2510f71f8090ab8240240140900901255c0281e00a14c048092ae01418805", + "0xab8051f40140b0091f4014ab8051ee0140a80901255c028090480247a805", + "0x2823012000798242ae01479805036024798052ae0147980509c02479805", + "0x1080901255c028f300a078048092ae0140482401277402ca301255c12000", + "0x2809048024f0805948780ef0242ae0907e0050240247e0052ae0147e005", + "0xf300509c024f30052ae014f200502c024f20052ae014f000502a02404957", + "0xab805012090049ee00b294f51e704855c121e60420918b8093cc014ab805", + "0x29ea00b128049f200a55c029de00a484049ef00a55c0280500a09804809", + "0x121740127ec0295700a7d402b300127d40295700a7d002ca60127d002957", + "0xf38052ae014f38052aa024ff8052ae014fe0058f6024fe0052ae014fd9f2", + "0x49ff3de79c088053fe014ab8053fe0163e0093de014ab8053de01415009", + "0x4a0200a55c029ee00a55404a0100a55c0280500a098048092ae01404824", + "0x480994e014049540128240295700a778028210128140295700a8040282a", + "0x4a0200a55c0282100a55404a0a00a55c0280500a098048092ae01404824", + "0x480994e014049540128240295700a784028210128140295700a8280282a", + "0x120330128340295700a0241880901255c029dd00a544048092ae01404824", + "0x2540092ae09107805046025078052ae0150780509c025078052ae015068f3", + "0x295700a024a700942a014ab80500a0141300901255c0280904802508005", + "0x2a1800b29804a1900a55c028fc00a48404a1800a55c02a1600b13c04a16", + "0x23d80943c014ab8052ba864121740125740295700a87002b3001287002957", + "0x10a8052ae0150a805054024108052ae014108052aa025150052ae0150f005", + "0x2951012024ab80501209004a2a42a08408805454014ab8054540163e009", + "0x1500908e014ab805042014aa80945a014ab80500a0141300901255c02a10", + "0x120090131f4028092a80248a8052ae0147e0050420248a0052ae01516805", + "0x15009404014ab805042014aa809462014ab80500a0141300901255c02809", + "0x238052ae0150100524c025048052ae0147a805042025028052ae01518805", + "0x4c7d00a024aa00922a014ab80541201588009228014ab80540a01428809", + "0xaa80901255c0281200a54c048092ae014198050940240495700a02412009", + "0x895700a078108249520240f0052ae0140f00525a024108052ae01410805", + "0x1300901255c028090480251c0059568dc0295704857002caa01257119a32", + "0x11f0052ae0151e8056600251e8052ae0151b8059580251d8052ae01402805", + "0x2a3200a55404a4600a55c02a3f00b1ec04a3f00a55c02a3e466090ba009", + "0x11901100a9180295700a91802c7c0128ec0295700a8ec0282a0128c802957", + "0xab805464014aa80948e014ab80500a0141300901255c028090480252323b", + "0x11980525a024a08052ae0151c0055ae0243b0052ae015238050540243a005", + "0x4a4b00a55c0295e288090ba0092bc014ab8052820159c009288014ab805", + "0x295700a1d80282a0121d00295700a1d0029550129300295700a92c02c7b", + "0x2500901255c02809048025260760e804402a4c00a55c02a4c00b1f004876", + "0xa700949a014ab80500a0141300901255c0281200a54c048092ae014a7005", + "0x4a5200a55c02a4f00acc004a4f00a55c02a4e00b2b404a4e00a55c02809", + "0xab805042014aa8094aa014ab8054a60163d8094a6014ab8054a407812174", + "0x1268210220152a8052ae0152a8058f8025268052ae0152680505402410805", + "0x12b0052ae0140280504c0240495700a04802953012024ab80501209004a55", + "0xab8054b4078121740129680295700a56c02b3801256c0295700a024a7009", + "0x12b005054024130052ae014130052aa0252e0052ae0152d8058f60252d805", + "0xab80501209004a5c4ac098088054b8014ab8054b80163e0094ac014ab805", + "0x2a5d00a0a80484700a55c0280900a55404a5d00a55c0280500a09804809", + "0x12f0056700252f0052ae0140494e0124540295700a0580282101245002957", + "0x4a6300a55c0295a4be090ba0094be014ab80522a014908092b4014ab805", + "0x295700a4500282a01211c0295700a11c029550129900295700a98c02c7b", + "0x480500a55c028090820253211408e04402a6400a55c02a6400b1f004914", + "0xab805048044121760120440295700a02657009048014ab80501201412115", + "0x12005012024ab80501246c0481200a014090052ae0140900595e02409005", + "0x281200a06c048092ae0140482401206c270249600580a8242ae09002809", + "0xf00901255c028090480240f005962024ab8240460141180904604812157", + "0x482200a55c0281100ab4c0482100a55c0281600a098048092ae01409005", + "0xab80502a014aa80904e014ab80504c0165980904c014ab805044090124b2", + "0x10815022014138052ae01413805968024108052ae014108050540240a805", + "0xaa8052ae014120050220240495700a07802951012024ab80501209004827", + "0x1600502a0240495700a024120092a80165a82c054090ab8242aa01409009", + "0x18b8092a2014ab8052a2014270092a2014ab8052a60140b0092a6014ab805", + "0x281600a098048092ae0140482401253802cb60660c4121570485440a824", + "0x120330120e00295700a0241880906c014ab805066044124b70120d402957", + "0x188052ae014188052aa0240e0052ae01415005242024a60052ae0141c012", + "0xab80506c01566009038014ab8050380149680906a014ab80506a01415009", + "0xa68112ae014a60360380d41881559a024a60052ae014a600509c0241b005", + "0x25c00901255c0281200a078048092ae0140482401252c1e94d022014a583d", + "0x484000a55c0294e00a5540483e00a55c0281600a098048092ae01408805", + "0x48099720140495401210c0295700a0a8028210121040295700a0f80282a", + "0x2826012024ab8050220165c00901255c0281200a078048092ae01404824", + "0x484100a55c0290900a0a80484000a55c0281500a5540490900a55c02816", + "0x228052ae014878055b8024878052ae0140494e01210c0295700a55002821", + "0x291400b2cc0491400a55c0284508e0925900908e014ab80508601490809", + "0x2cb40121040295700a1040282a0121000295700a1000295501245402957", + "0xab8050240140f00901255c028090480248a8410800440291500a55c02915", + "0x248052ae0140492b012024ab8050480142980901255c0281100b2e004809", + "0xab8050360141500909c014ab80509c014aa809094014ab8050920165d009", + "0x90052ae01404c1f0121280d84e022014250052ae014250059680240d805", + "0x900902a014ab8050480140880901255c028092360240495700a0254a809", + "0xab80509c0140a80901255c028090480240d8059761380b0242ae0900a805", + "0x1222d01208c0295700a044028160120440295700a0440902484202408805", + "0xab80502c0141080901255c02809048024110059780840f0242ae09011809", + "0xa80901255c02809048024aa80597a09c130242ae0900b0050240240b005", + "0x495400a55c02809848024160052ae0141500502c024150052ae01413805", + "0x295700a0140282a0120780295700a0780295501254c0295700a09802921", + "0x282c00a1380495400a55c0295400a5c40495300a55c0295300a4b404805", + "0x1203300b098048330625440895700a0b0aa15300a0780ac250120b002957", + "0x483806c090ab80529c0161400901255c028090480241a80597c53802957", + "0xab8050620141300901255c028090480240e00597e530029570480e002c29", + "0x124c101252c0295700a0f402af70120f40295700a53010824980024a6805", + "0xa88052ae014a88052aa024200052ae0141f0059840241f0052ae014a5836", + "0x484029a54408805080014ab8050800166180929a014ab80529a01415009", + "0x2826012024ab8050420149600901255c0281c00a128048092ae01404824", + "0x490900a55c0295100a5540484300a55c0283600a0440484100a55c02831", + "0x4809988014049540121140295700a10c0282101243c0295700a1040282a", + "0xaa80908e014ab80506a0166280901255c0282100a4b0048092ae01404824", + "0x238052ae01423805986024188052ae01418805054024a88052ae014a8805", + "0x280504c0240495700a0840292c012024ab8050120900484706254408805", + "0x1080921e014ab80522801415009212014ab80503c014aa809228014ab805", + "0x484900a55c0284500a4840491500a55c0280929c024228052ae014aa805", + "0xab80523601661009236014ab805094124124c10121280295700a45402afe", + "0x8e805986024878052ae01487805054024848052ae014848052aa0248e805", + "0x295700a01402826012024ab8050120900491d21e4240880523a014ab805", + "0x281600a0840492200a55c0291e00a0a80492100a55c0282200a5540491e", + "0x495700a04802c35012024ab8050120900480998c0140495401249402957", + "0xab80524c01415009242014ab805012014aa80924c014ab80500a01413009", + "0x285100abf80485100a55c0280929c024928052ae0140d80504202491005", + "0x261009256014ab80500c14c124c101214c0295700a4940292101201802957", + "0x910052ae01491005054024908052ae014908052aa024968052ae01495805", + "0x12005012024ab80501246c0492d2444840880525a014ab80525a01661809", + "0x282400ad30048092ae014048240121380b02498e054090242ae09002809", + "0x48092ae0140482401208402cc903c08c1215704806c02cc801206c02957", + "0x295700a09802ccb0120980295700a07802cca0120880295700a05402826", + "0x2a840120a8aa8242ae0141380599a0241382604855c0282600b33004826", + "0x2668092a8014ab80505801546809058014ab8052aa0154600901255c0282a", + "0x188052ae014a88055180240495700a54c02a84012544a98242ae01413005", + "0x1994e0484540494e00a55c029540220908a809066014ab80506201546809", + "0x15009024014ab805024014aa80906c014ab8050460164c80906a014ab805", + "0x1a8052ae0141a8050920241b0052ae0141b00569e024110052ae01411005", + "0x28090480240e14c0700440281c2980e00895700a0d41b022024049a8009", + "0xab8050125380494d00a55c0281500a098048092ae0141080599c02404957", + "0x29550120f80295700a52c02ae401252c0295700a0f4088245c60241e805", + "0x283e00a55c0283e00a5900494d00a55c0294d00a0a80481200a55c02812", + "0x282400b33c048092ae0140880523c0240495700a0241200907c53409011", + "0x281600a5540484100a55c0284000ab980484000a55c0280925602404957", + "0xb01100a1040295700a104029640121380295700a1380282a01205802957", + "0xd84e0493400b01504855c120050120900280901255c028092360242084e", + "0x495704808c0282301208c090242ae014090050360240495700a02412009", + "0xab80502c0141300901255c0281200a078048092ae0140482401207802cd1", + "0x2cd40120980295700a088120249a6024110052ae014088059a402410805", + "0x482100a55c0282100a0a80481500a55c0281500a5540482700a55c02826", + "0xf0052a20240495700a0241200904e0840a81100a09c0295700a09c02cd5", + "0x2cd60580a812157048554028120125540295700a09002811012024ab805", + "0x295700a54c0281601254c0295700a0b002815012024ab80501209004954", + "0xa70059ae0cc188242ae090a88150480880495100a55c0295100a13804951", + "0x295700a0cc088249b00241a8052ae0140b00504c0240495700a02412009", + "0x282a00a4840494c00a55c0283802409019809070014ab8050120c404836", + "0x292d0120d40295700a0d40282a0120c40295700a0c40295501207002957", + "0x494c00a55c0294c00a1380483600a55c0283600ae500481c00a55c0281c", + "0x2809048024a583d29a0440294b07a5340895700a5301b01c06a0c40ab95", + "0xab80502c0141300901255c0281100b364048092ae0140900503c02404957", + "0x15005042024208052ae0141f005054024200052ae014a70052aa0241f005", + "0xab8050240140f00901255c0280904802404cda00a024aa009086014ab805", + "0xab80502a014aa809212014ab80502c0141300901255c0281100b36404809", + "0x280929c024218052ae014aa005042024208052ae0148480505402420005", + "0x124d301211c0295700a10c029210121140295700a43c02cdb01243c02957", + "0x200052ae014200052aa0248a8052ae0148a0059a80248a0052ae01422847", + "0x49150821000880522a014ab80522a0166a809082014ab80508201415009", + "0x2853012024ab8050220166c80901255c0281200a078048092ae01404824", + "0x29550121280295700a124029790121240295700a0249580901255c02824", + "0x284a00a55c0284a00b3540481b00a55c0281b00a0a80484e00a55c0284e", + "0xab80501246c048092ae01404a950120480295700a0260f80909406c27011", + "0x481b00b3702701604855c1201500a0480481500a55c0282400a04404809", + "0x88052ae014088120490840481100a55c0284e00a054048092ae01404824", + "0x482200b3741081e04855c1202301209011009046014ab8050220140b009", + "0x1382604855c1201600a0480481600a55c0281600a084048092ae01404824", + "0x282a00a0580482a00a55c0282700a054048092ae0140482401255402cde", + "0xf0052aa024a98052ae01413005242024aa0052ae01404b930120b002957", + "0x1ca0092a6014ab8052a60149680900a014ab80500a0141500903c014ab805", + "0x161542a60140f01572a024160052ae0141600509c024aa0052ae014aa005", + "0xab8050120900483500b37ca70052ae0901980572c024198312a2044ab805", + "0x481c00b380a60052ae0901c0057320241c03604855c0294e00ae6004809", + "0x1e8052ae014a60210493840494d00a55c0283100a098048092ae01404824", + "0x283e00b3900483e00a55c0294b06c09271809296014ab80507a01671009", + "0x2ce50125340295700a5340282a0125440295700a5440295501210002957", + "0xab8050380142500901255c028090480242014d2a20440284000a55c02840", + "0xab80506c01408809082014ab8050620141300901255c0282100a34804809", + "0x21805042024878052ae01420805054024848052ae014a88052aa02421805", + "0xab8050420146900901255c0280904802404ce600a024aa00908a014ab805", + "0x283100a0a80495100a55c0295100a5540484700a55c0283500a5e004809", + "0x495700a0241200908e0c4a881100a11c0295700a11c02ce50120c402957", + "0x295700a078029550124500295700a01402826012024ab80504201469009", + "0xab8050125380484500a55c0295500a0840490f00a55c0291400a0a804909", + "0x248249c6024250052ae0148a8059ce024248052ae014228052420248a805", + "0x490900a55c0290900a5540491d00a55c0291b00b3900491b00a55c0284a", + "0x1200923a43c8481100a4740295700a47402ce501243c0295700a43c0282a", + "0x15009242014ab805044014aa80923c014ab80500a0141300901255c02809", + "0x120090133a0028092a8024928052ae0140b005042024910052ae0148f005", + "0x29550124980295700a01402826012024ab8050240161a80901255c02809", + "0x492500a55c0281b00a0840492200a55c0292600a0a80492100a55c02809", + "0x298052ae01492805242024030052ae014288059ce024288052ae0140494e", + "0x292100a5540492d00a55c0292b00b3900492b00a55c028060a609271809", + "0x9081100a4b40295700a4b402ce50124880295700a4880282a01248402957", + "0xa8059d2048088242ae09012005024024120052ae0140280502202496922", + "0x270052ae0140b00502c0240b0052ae0140900502a0240495700a02412009", + "0x481e00b3a81181b04855c1204e0120901100909c014ab80509c01427009", + "0x1102104855c1201100a0480481100a55c0281100a084048092ae01404824", + "0x282700a0580482700a55c0282200a054048092ae0140482401209802ceb", + "0x27602c054090ab8242aa06c1222d0125540295700a5540284e01255402957", + "0xab82404201409009042014ab8050420141080901255c02809048024aa005", + "0xb009066014ab8052a20140a80901255c02809048024188059da544a9824", + "0x1215704853815024454024a70052ae014a700509c024a70052ae01419805", + "0x8cef0125300295700a54c02921012024ab8050120900483800b3b81b035", + "0x295700a0d4029550125340295700a07002cf00120700295700a0d816023", + "0xa694c06a0440294d00a55c0294d00b3c40494c00a55c0294c00a4b404835", + "0xaa80901255c0282c00a4b0048092ae014118051a40240495700a02412009", + "0x120090133c8028092a8024a58052ae014a98050420241e8052ae0141c005", + "0x150052aa0240495700a0b00292c012024ab8050460146900901255c02809", + "0x280904802404cf200a024aa009296014ab8050620141080907a014ab805", + "0x282100a0840483d00a55c0295400a554048092ae014118051a402404957", + "0x495700a08c028d2012024ab805012090048099e40140495401252c02957", + "0x4cf200a024aa009296014ab80504c0141080907a014ab805036014aa809", + "0xa58052ae014088050420241e8052ae0140f0052aa0240495700a02412009", + "0x1080907a014ab805012014aa80901255c0280904802404cf200a024aa009", + "0x484000a55c0283e00a5ec0483e00a55c0280929c024a58052ae0140a805", + "0x8d8090801041e81100a1000295700a10002cf10121040295700a52c02921", + "0x28090480240d84e0493cc0b01504855c120050120900280901255c02809", + "0x481e00b3d00495704808c0282301208c090242ae0140900503602404957", + "0x27a809042014ab80502c0141300901255c0281200a078048092ae01404824", + "0x295700a09802cf70120980295700a088120249ec024110052ae01408805", + "0x282700b3e00482100a55c0282100a0a80481500a55c0281500a55404827", + "0x48092ae0140f0052a20240495700a0241200904e0840a81100a09c02957", + "0x482401255002cf90580a812157048554028120125540295700a09002811", + "0x284e0125440295700a54c0281601254c0295700a0b002815012024ab805", + "0x2809048024a70059f40cc188242ae090a88150488b40495100a55c02951", + "0x48310120d80295700a0cc088242f40241a8052ae0140b00504c02404957", + "0x481c00a55c0282a00a4840494c00a55c0283802409019809070014ab805", + "0x295700a0700292d0120d40295700a0d40282a0120c40295700a0c402955", + "0x1a83102b0940494c00a55c0294c00a1380483600a55c0283600a5c40481c", + "0xf00901255c02809048024a583d29a0440294b07a5340895700a5301b01c", + "0xaa80907c014ab80502c0141300901255c0281100b0b0048092ae01409005", + "0x218052ae01415005042024208052ae0141f005054024200052ae014a7005", + "0x2c2c012024ab8050240140f00901255c0280904802404cfb00a024aa009", + "0x15009080014ab80502a014aa809212014ab80502c0141300901255c02811", + "0x490f00a55c0280929c024218052ae014aa005042024208052ae01484805", + "0xab80508a11c124f601211c0295700a10c029210121140295700a43c02cfc", + "0x20805054024200052ae014200052aa0248a8052ae0148a0059ee0248a005", + "0xab805012090049150821000880522a014ab80522a0167c009082014ab805", + "0x495700a09002853012024ab8050220161600901255c0281200a07804809", + "0x295700a138029550121280295700a12402cfd0121240295700a02495809", + "0x2501b09c0440284a00a55c0284a00b3e00481b00a55c0281b00a0a80484e", + "0x1200902a0167f012022090ab82404801409009048014ab80500a01408809", + "0x2700909c014ab80502c0140b00902c014ab8050240140a80901255c02809", + "0x482401207802cff04606c1215704813804824044024270052ae01427005", + "0x2d0004408412157048044028120120440295700a04402821012024ab805", + "0x295700a09c0281601209c0295700a08802815012024ab80501209004826", + "0xaa005a020b0150242ae090aa81b0480880495500a55c0295500a13804955", + "0xa98242ae09010805024024108052ae014108050420240495700a02412009", + "0x1980502c024198052ae014a880502a0240495700a0241200906201681151", + "0x1b03504855c1214e0540901100929c014ab80529c0142700929c014ab805", + "0x160230234100494c00a55c0295300a484048092ae014048240120e002d03", + "0x483500a55c0283500a5540494d00a55c0281c00b4140481c00a55c02836", + "0x1200929a5301a81100a5340295700a53402d060125300295700a5300292d", + "0x1c0052aa0240495700a0b0028d2012024ab8050460146900901255c02809", + "0x280904802404d0700a024aa009296014ab8052a60141080907a014ab805", + "0xab805054014aa80901255c0282c00a348048092ae014118051a402404957", + "0x495700a0241200901341c028092a8024a58052ae014188050420241e805", + "0x295700a084028210120f40295700a55002955012024ab80504601469009", + "0xaa80901255c0282300a348048092ae01404824012026838050125500494b", + "0x1200901341c028092a8024a58052ae014130050420241e8052ae0140d805", + "0xaa009296014ab8050220141080907a014ab80503c014aa80901255c02809", + "0xa8050420241e8052ae014048052aa0240495700a0241200901341c02809", + "0x29210121000295700a0f802d080120f80295700a024a7009296014ab805", + "0x28050220242004107a0440284000a55c0284000b4180484100a55c0294b", + "0x495700a0241200902a01684812022090ab82404801409009048014ab805", + "0xab80509c0142700909c014ab80502c0140b00902c014ab8050240140a809", + "0x482300b4280495704806c0282301206c270242ae0142700503602427005", + "0x9009022014ab8050220141080901255c0284e00a078048092ae01404824", + "0xab8050420140a80901255c0280904802411005a160840f0242ae09008805", + "0x4824454024138052ae0141380509c024138052ae0141300502c02413005", + "0x295700a07802821012024ab8050120900482c00b4301515504855c12027", + "0x2815012024ab8050120900495100b434a995404855c1201e00a0480481e", + "0x483300a55c0283300a1380483300a55c0283100a0580483100a55c02953", + "0xaa0052420240495700a0241200906c0168703529c090ab8240665541222d", + "0x481c00a55c0294c00b4400494c00a55c0283505409287809070014ab805", + "0x295700a0e00292d0125380295700a538029550125340295700a07002d11", + "0xc800901255c02809048024a683829c0440294d00a55c0294d00b44804838", + "0x494b00a55c0295400a0840483d00a55c0283600a554048092ae01415005", + "0xaa8052aa0240495700a0a802990012024ab80501209004809a2601404954", + "0x280904802404d1300a024aa009296014ab8052a20141080907a014ab805", + "0x28092a8024a58052ae0140f0050420241e8052ae014160052aa02404957", + "0xab8050440141080907a014ab805012014aa80901255c0280904802404d13", + "0x48092ae014118052a20240495700a0241200901344c028092a8024a5805", + "0x270242ae01427005036024200052ae014048310120f80295700a04402921", + "0x21805046024218052ae0142180509c024218052ae014200410480cc04841", + "0x494e012024ab80509c0140f00901255c0280904802484805a28024ab824", + "0xaa80908e014ab80508a0168880908a014ab80521e014bb80921e014ab805", + "0x238052ae01423805a240241f0052ae0141f00525a024048052ae01404805", + "0x28096840240495700a42402951012024ab8050120900484707c02408805", + "0x1180922a014ab80522a0142700922a014ab8052281381203301245002957", + "0x484a00a55c0280929c0240495700a024120090920168a8092ae0908a805", + "0x295700a024029550124740295700a46c02d1101246c0295700a12802d16", + "0x8e83e0120440291d00a55c0291d00b4480483e00a55c0283e00a4b404809", + "0x28b80923c014ab805012538048092ae014248052a20240495700a02412009", + "0x1f0052ae0141f00525a024048052ae014048052aa024908052ae0148f005", + "0x2955012024ab8050120900492107c02408805242014ab80524201689009", + "0x28b809244014ab8050125380494b00a55c0281500a0840483d00a55c02809", + "0x928052ae01492805a24024930052ae014a5805242024928052ae01491005", + "0x28c01602a090ab82400a02412005012024ab80501246c0492524c0f408805", + "0x118050460241181204855c0281200a06c048092ae0140482401206c27024", + "0x2826012024ab8050240140f00901255c028090480240f005a32024ab824", + "0x130052ae0141102404946c0482200a55c0281100b4680482100a55c02816", + "0xab8050420141500902a014ab80502a014aa80904e014ab80504c0168e009", + "0x48092ae0140482401209c10815022014138052ae014138052ea02410805", + "0x150242ae090aa805024024aa8052ae014120050220240495700a07802951", + "0xa980502c024a98052ae0141600502a0240495700a024120092a80168e82c", + "0x1983104855c1215102a0913f0092a2014ab8052a2014270092a2014ab805", + "0x28120120a80295700a0a802821012024ab8050120900483606a53808d1e", + "0x295700a53002815012024ab8050120900481c00b47ca603804855c1202a", + "0x1e8310489f80483d00a55c0283d00a1380483d00a55c0294d00a0580494d", + "0xab80502c0141300901255c02809048024218410800469003e296090ab824", + "0x1252201243c0295700a43c02ccb01243c0295700a0f819824a4202484805", + "0x8a0052ae014238120480cc0484700a55c02809062024228052ae01487811", + "0xab80521201415009296014ab805296014aa80922a014ab80507001490809", + "0x8a00509c024228052ae014228059200248a8052ae0148a80525a02484805", + "0x250490220148d84a092044ab8052281148a90929605648809228014ab805", + "0x48092ae014218055080240495700a10402a84012024ab8050120900491b", + "0x1300901255c0281100b260048092ae014198055080240495700a0480281e", + "0x908052ae0148e8050540248f0052ae014200052aa0248e8052ae0140b005", + "0xf00901255c0280904802404d2300a024aa009244014ab80507001410809", + "0x2826012024ab8050220164c00901255c0283300aa10048092ae01409005", + "0x492100a55c0292500a0a80491e00a55c0283100a5540492500a55c02816", + "0x2a84012024ab80501209004809a46014049540124880295700a07002821", + "0x88059300240495700a0480281e012024ab80506c0154200901255c02835", + "0x282a0124780295700a538029550124980295700a05802826012024ab805", + "0x4824012026918050125500492200a55c0282a00a0840492100a55c02926", + "0x281600a098048092ae014088059300240495700a0480281e012024ab805", + "0x28210124840295700a1440282a0124780295700a0540295501214402957", + "0x908090a6014ab80500c0169200900c014ab8050125380492200a55c02954", + "0x295700a4b402d1c0124b40295700a14c95824a36024958052ae01491005", + "0x286900a5d40492100a55c0292100a0a80491e00a55c0291e00a55404869", + "0x48092ae0140900503c0240495700a024120090d24848f01100a1a402957", + "0x2928090d0014ab8050124ac048092ae014120050a60240495700a04402c98", + "0xd8052ae0140d805054024270052ae014270052aa024338052ae01434005", + "0x482400a55c0280500a04404867036138088050ce014ab8050ce014ba809", + "0x281200a054048092ae0140482401205402d260240441215704809002812", + "0x281b0121380295700a1380284e0121380295700a0580281601205802957", + "0x495700a02412009046016938092ae0900d8050460240d84e04855c0284e", + "0x12157048044028120120440295700a04402821012024ab80509c0140f009", + "0x28160120980295700a08402815012024ab8050120900482200b4a01081e", + "0xaa8242ae090138090488b40482700a55c0282700a1380482700a55c02826", + "0x15005a54024aa0052ae0140f0052420240495700a024120090580169482a", + "0x968092aa014ab8052aa014aa8092a2014ab8052a6016958092a6014ab805", + "0x4824012544aa155022014a88052ae014a8805a58024aa0052ae014aa005", + "0x49540120cc0295700a078028210120c40295700a0b002955012024ab805", + "0x282200a0840483100a55c0280900a554048092ae0140482401202696805", + "0x495700a08c02951012024ab80501209004809a5a014049540120cc02957", + "0xab80506a0142700906a014ab80529c138120330125380295700a02418809", + "0x88050420240495700a0241200906c016970092ae0901a8050460241a805", + "0x495700a024120090380169794c070090ab82402201409009022014ab805", + "0xab80507a0142700907a014ab80529a0140b00929a014ab8052980140a809", + "0x48092ae0140482401210002d3007c52c121570480f4048244540241e805", + "0x295700a10c02d2b01210c0295700a0f802d310121040295700a0e002921", + "0x290900b4b00484100a55c0284100a4b40494b00a55c0294b00a55404909", + "0x188052ae014200052aa0240495700a02412009212104a581100a42402957", + "0xaa80901255c0280904802404d2d00a024aa009066014ab80507001410809", + "0x120090134b4028092a8024198052ae0140e005042024188052ae01404805", + "0x494e01243c0295700a04402921012024ab80506c014a880901255c02809", + "0x96809012014ab805012014aa80908e014ab80508a0169900908a014ab805", + "0x482401211c87809022014238052ae01423805a58024878052ae01487805", + "0x494e0120cc0295700a054028210120c40295700a02402955012024ab805", + "0x296009092014ab8050660149080922a014ab80522801699009228014ab805", + "0x7e0fd1e6024090221fa3cc0481228a454248310220148a8052ae0148a805", + "0x4812196044120050123f07e8f3012048110fd1e60240900902209002809", + "0x7e8f3012048110fd1e60240928c022090028091f83f4798090240887e8f3", + "0x948c022090028091f83f4798090240887e8f3012049cb011048014048fc", + "0x798090240887e8f301204a99811048014048fc1fa3cc048120443f479809", + "0x29a811048014048fc1fa3cc048120443f4798090254d00882400a0247e0fd", + "0x48120443f4798090254d80882400a0247e0fd1e6024090221fa3cc04812", + "0x882400a0247e0fd1e6024090221fa3cc04812a6e044120050123f07e8f3", + "0x90221fa3cc04812a72044120050123f07e8f3012048110fd1e602409538", + "0x120050123f07e8f3012048110fd1e60240953a022090028091f83f479809", + "0x110fd1e60240953c022090028091f83f4798090240887e8f301204a9d811", + "0x28091f83f4798090240887e8f301204a9e811048014048fc1fa3cc04812", + "0x7e8f301204a9f811048014048fc1fa3cc048120443f4798090254f808824", + "0x48fc1fa3cc048120443f4798090255000882400a0247e0fd1e602409022", + "0x798090255080882400a0247e0fd1e6024090221fa3cc04812a8204412005", + "0x7e0fd1e6024090221fa3cc04812a86044120050123f07e8f3012048110fd", + "0x4812a8a044120050123f07e8f3012048110fd1e60240954402209002809", + "0x7e8f3012048110fd1e602409546022090028091f83f4798090240887e8f3", + "0x9548022090028091f83f4798090240887e8f301204aa3811048014048fc", + "0x798090240887e8f301204aa4811048014048fc1fa3cc048120443f479809", + "0x2a5811048014048fc1fa3cc048120443f4798090255280882400a0247e0fd", + "0x48120443f4798090255300882400a0247e0fd1e6024090221fa3cc04812", + "0x882400a0247e0fd1e6024090221fa3cc04812a9a044120050123f07e8f3", + "0x490a1e6024088221e602408d5104e01404d5004e01404d4f04e01404d4e", + "0x481104402412553022090028092203cc0481103c4387980902554812005", + "0xf0861e602409555048014049121e6024088221e602408d5400a02488822", + "0x1100904955c0280922c0880481104402412556022090028092203cc04811", + "0x88221e602408d5900a0248c822012044110090495600280922e08804811", + "0xad5b022090028092203cc0481103c120798090255681200501247079809", + "0x481103c48079809025570090110480140491f1e60240881c17c08879809", + "0x9011048014049231e60240881c0920887980902b5740882400a024880f3", + "0x798090220887980902357c0882400a024880f30120440f1241e60240955e", + "0x110090495840882400a024880f30120440f1281e60240956004801404927", + "0x1100904958c120050124a879809022088798090235880280925208804811", + "0x48110440241256500a02497022012044110090495900280925808804811", + "0x481104402412567048014049301e6024088221e602408d6600a02497822", + "0x79809022088798090235a40280926a088048110440241256800a02499822", + "0x9c022012044110090495ac0280926e088048110440241256a04801404936", + "0x49411e6024088221e602408d6d00a0249d822012044110090495b002809", + "0xad7001209c0281c00b5bc1200501251479809022088798090235b812005", + "0x79809022088798090235c409011048014049491e60240881c0b608879809", + "0x7980902b5cc0882400a024880f30120440f0681e6024095720480140493a", + "0x49091e6024088221e602408d7402404412005012450798090220701f022", + "0x798090220701a8221e60240ad7600a024a5822012044110090495d412005", + "0x48110440241257800a024a7022012044110090495dc090110480140494c", + "0x1257a02404412005012554798090220700d8221e60240ad7900a024aa022", + "0x57b00a0242702201204411009" ], "sierra_program_debug_info": { "type_names": [ [0, "RangeCheck"], - [1, "core::panics::Panic"], - [2, "u16"], - [3, "Tuple"], - [4, "Unit"], - [5, "core::option::Option::<[core::integer::u16; 3]>"], - [6, "Array"], - [7, "core::option::Option::>"], - [8, "Array"], - [9, "Snapshot>"], - [10, "core::array::Span::"], - [ - 11, + [1, "Box"], + [2, "core::panics::Panic"], + [3, "u32"], + [4, "u64"], + [5, "core::result::Result::"], + [6, "Unit"], + [7, "core::option::Option::>"], + [8, "Array"], + [9, "core::option::Option::>"], + [10, "Array"], + [11, "Snapshot>"], + [12, "core::array::Span::"], + [ + 13, + "Tuple, core::option::Option::>>" + ], + [14, "Tuple>"], + [ + 15, + "core::panics::PanicResult::<(core::array::Span::, core::option::Option::>)>" + ], + [16, "Tuple"], + [17, "enums::StatusEnum"], + [18, "core::option::Option::"], + [19, "index_enum_type<9>"], + [20, "BoundedInt<0, 8>"], + [21, "u16"], + [22, "Tuple"], + [23, "core::option::Option::<[core::integer::u16; 3]>"], + [24, "Array"], + [25, "core::option::Option::>"], + [ + 26, "Tuple, core::option::Option::>>" ], - [12, "Tuple>"], [ - 13, + 27, "core::panics::PanicResult::<(core::array::Span::, core::option::Option::>)>" ], - [14, "felt252"], - [15, "Uninitialized"], - [16, "u32"], - [17, "u64"], - [18, "Tuple"], - [19, "core::option::Option::<(core::integer::u16, core::integer::u32, core::integer::u64)>"], - [20, "Array"], - [21, "Tuple>"], + [28, "felt252"], + [29, "Uninitialized"], + [30, "Tuple"], + [31, "core::option::Option::<(core::integer::u16, core::integer::u32, core::integer::u64)>"], + [32, "Array"], + [33, "Tuple>"], [ - 22, + 34, "core::option::Option::<(core::integer::u16, core::array::Array::)>" ], [ - 23, + 35, "Tuple, core::option::Option::<(core::integer::u16, core::array::Array::)>>" ], [ - 24, + 36, "core::panics::PanicResult::<(core::array::Span::, core::option::Option::<(core::integer::u16, core::array::Array::)>)>" ], - [25, "Box"], - [26, "core::option::Option::>"], + [37, "Box"], + [38, "core::option::Option::>"], [ - 27, + 39, "Tuple, core::option::Option::>>" ], [ - 28, + 40, "core::panics::PanicResult::<(core::array::Span::, core::option::Option::>)>" ], - [29, "Box>"], - [30, "Box"], - [31, "Tuple>"], - [ - 32, + [41, "Box"], + [42, "Array"], + [43, "Snapshot>"], + [44, "Uninitialized>>"], + [45, "Box>"], + [46, "Const"], + [47, "Const"], + [48, "Const"], + [49, "Const"], + [50, "Const"], + [51, "u128"], + [52, "core::integer::u256"], + [53, "Snapshot>"], + [54, "Const"], + [55, "Const"], + [56, "Tuple"], + [57, "core::array::Span::"], + [58, "Tuple"], + [59, "Box"], + [60, "Tuple>"], + [ + 61, "core::option::Option::<(core::integer::u32, core::array::Array::)>" ], [ - 33, + 62, "Tuple, core::option::Option::<(core::integer::u32, core::array::Array::)>>" ], [ - 34, + 63, "core::panics::PanicResult::<(core::array::Span::, core::option::Option::<(core::integer::u32, core::array::Array::)>)>" ], - [35, "Box"], - [36, "Array"], - [37, "core::option::Option::>"], + [64, "Box"], + [65, "Array"], + [66, "core::option::Option::>"], [ - 38, + 67, "Tuple, core::option::Option::>>" ], [ - 39, + 68, "core::panics::PanicResult::<(core::array::Span::, core::option::Option::>)>" ], - [40, "Const"], + [69, "Const"], [ - 41, + 70, "Const" ], - [42, "Const"], - [43, "u128"], - [44, "u8"], - [45, "core::result::Result::"], - [46, "enums::Destruction"], - [47, "core::option::Option::>"], - [48, "core::option::Option::"], - [49, "enums::Truck"], - [50, "core::option::Option::"], - [51, "Tuple"], - [52, "enums::Horse"], - [53, "core::option::Option::"], - [54, "Snapshot>"], - [55, "core::array::Span::"], - [56, "enums::Dog"], - [57, "core::option::Option::"], - [58, "Tuple, core::option::Option::>"], + [71, "Const"], + [72, "u8"], + [73, "enums::Point"], + [74, "core::option::Option::"], + [75, "enums::MyEnum"], + [76, "core::option::Option::"], + [77, "Tuple, core::option::Option::>"], [ - 59, + 78, + "core::panics::PanicResult::<(core::array::Span::, core::option::Option::)>" + ], + [79, "bytes31"], + [80, "enums::ExecutionReport"], + [81, "core::option::Option::"], + [ + 82, + "Tuple, core::option::Option::>" + ], + [ + 83, + "core::panics::PanicResult::<(core::array::Span::, core::option::Option::)>" + ], + [84, "Uninitialized"], + [85, "core::result::Result::"], + [86, "enums::Destruction"], + [87, "core::option::Option::>"], + [88, "enums::Truck"], + [89, "core::option::Option::"], + [90, "Tuple"], + [91, "enums::Horse"], + [92, "core::option::Option::"], + [93, "Snapshot>"], + [94, "core::array::Span::"], + [95, "enums::Dog"], + [96, "core::option::Option::"], + [97, "Tuple, core::option::Option::>"], + [ + 98, "core::panics::PanicResult::<(core::array::Span::, core::option::Option::)>" ], - [60, "Tuple"], - [61, "enums::Cat"], - [62, "core::option::Option::"], - [63, "enums::Point"], - [64, "enums::Point2"], - [65, "core::option::Option::"], - [66, "core::result::Result::"], - [67, "core::option::Option::>"], - [68, "core::option::Option::"], - [69, "core::result::Result::>"], + [99, "Tuple"], + [100, "enums::Cat"], + [101, "core::option::Option::"], + [102, "enums::Point2"], + [103, "core::option::Option::"], + [104, "core::result::Result::"], + [105, "core::option::Option::>"], [ - 70, + 106, + "Tuple, core::option::Option::>>" + ], + [ + 107, + "core::panics::PanicResult::<(core::array::Span::, core::option::Option::>)>" + ], + [108, "core::result::Result::"], + [109, "core::option::Option::>"], + [110, "core::option::Option::"], + [ + 111, + "core::result::Result::>" + ], + [ + 112, "core::option::Option::>>" ], - [71, "core::result::Result::"], + [113, "core::result::Result::"], [ - 72, + 114, "core::result::Result::, core::integer::u32>" ], [ - 73, + 115, "core::option::Option::, core::integer::u32>>" ], - [74, "Snapshot>>"], + [116, "Snapshot>>"], [ - 75, + 117, "core::result::Result::<(core::integer::u32, core::array::Array::), (core::integer::u16, core::array::Array::)>" ], [ - 76, + 118, "Snapshot), (core::integer::u16, core::array::Array::)>>" ], [ - 77, + 119, "core::option::Option::), (core::integer::u16, core::array::Array::)>>" ], [ - 78, + 120, "Tuple, core::option::Option::), (core::integer::u16, core::array::Array::)>>>" ], [ - 79, + 121, "core::panics::PanicResult::<(core::array::Span::, core::option::Option::), (core::integer::u16, core::array::Array::)>>)>" ], - [80, "Tuple"], - [81, "Tuple"], - [82, "core::result::Result::<[core::integer::u32; 3], [core::integer::u16; 2]>"], + [122, "Tuple"], + [123, "Tuple"], + [124, "core::result::Result::<[core::integer::u32; 3], [core::integer::u16; 2]>"], [ - 83, + 125, "core::option::Option::>" ], - [84, "Snapshot>"], - [85, "core::array::Span::"], + [126, "Snapshot>"], + [127, "core::array::Span::"], [ - 86, + 128, "core::result::Result::, core::array::Array::>" ], [ - 87, + 129, "Snapshot, core::array::Array::>>" ], [ - 88, + 130, "core::option::Option::, core::array::Array::>>" ], [ - 89, + 131, "Tuple, core::option::Option::, core::array::Array::>>>" ], [ - 90, + 132, "core::panics::PanicResult::<(core::array::Span::, core::option::Option::, core::array::Array::>>)>" ], - [91, "Array>"], - [92, "Snapshot>>"], - [93, "core::array::Span::>"], + [133, "core::array::Span::"], + [134, "core::option::Option::>"], [ - 94, + 135, + "Tuple, core::option::Option::>>" + ], + [ + 136, + "core::panics::PanicResult::<(core::array::Span::, core::option::Option::>)>" + ], + [137, "Array>"], + [138, "Snapshot>>"], + [139, "core::array::Span::>"], + [ + 140, "core::option::Option::>>" ], [ - 95, + 141, "Tuple, core::option::Option::>>>" ], [ - 96, + 142, "core::panics::PanicResult::<(core::array::Span::, core::option::Option::>>)>" ], - [97, "core::option::Option::"], - [98, "core::option::Option::>"], - [99, "core::option::Option::>"], - [100, "core::option::Option::"], - [101, "core::option::Option::>"], + [143, "core::option::Option::>"], [ - 102, + 144, + "Tuple, core::option::Option::>>" + ], + [ + 145, + "core::panics::PanicResult::<(core::array::Span::, core::option::Option::>)>" + ], + [146, "core::option::Option::"], + [147, "core::option::Option::>"], + [ + 148, + "core::option::Option::>" + ], + [149, "core::option::Option::"], + [150, "core::option::Option::>"], + [ + 151, "core::option::Option::>>" ], - [103, "Snapshot>>"], + [152, "Snapshot>>"], [ - 104, + 153, "Snapshot)>>" ], [ - 105, + 154, "core::option::Option::)>>" ], [ - 106, + 155, "Tuple, core::option::Option::)>>>" ], [ - 107, + 156, "core::panics::PanicResult::<(core::array::Span::, core::option::Option::)>>)>" ], - [108, "core::option::Option::<[core::integer::u32; 3]>"], - [109, "Tuple, Unit>"], - [110, "core::panics::PanicResult::<(core::array::Array::, ())>"], - [111, "Snapshot>"], - [112, "core::array::Span::"], - [113, "Snapshot>>"], + [157, "core::option::Option::<[core::integer::u32; 3]>"], + [158, "Tuple, Unit>"], + [159, "core::panics::PanicResult::<(core::array::Array::, ())>"], + [160, "Snapshot>"], + [161, "core::array::Span::"], + [162, "Snapshot>>"], [ - 114, + 163, "core::option::Option::>>" ], [ - 115, + 164, "Tuple, core::option::Option::>>>" ], [ - 116, + 165, "core::panics::PanicResult::<(core::array::Span::, core::option::Option::>>)>" ], - [117, "Tuple>"], - [118, "Const"], - [119, "BuiltinCosts"], - [120, "System"], - [121, "core::panics::PanicResult::<(core::array::Span::,)>"], - [122, "Const"], - [123, "NonZero"], - [124, "Box"], - [125, "GasBuiltin"] + [166, "Tuple>"], + [167, "Const"], + [168, "BuiltinCosts"], + [169, "System"], + [170, "core::panics::PanicResult::<(core::array::Span::,)>"], + [171, "Const"], + [172, "NonZero"], + [173, "Box"], + [174, "GasBuiltin"] ], "libfunc_names": [ [0, "revoke_ap_tracking"], @@ -3581,797 +4776,1113 @@ [116, "rename"], [117, "u64_to_felt252"], [118, "drop"], - [119, "array_new>"], - [120, "store_temp>>"], + [ + 119, + "function_call::deserialize>" + ], + [ + 120, + "enum_match, core::option::Option::>)>>" + ], [ 121, + "struct_deconstruct, core::option::Option::>>>" + ], + [122, "enum_match>>"], + [123, "drop>"], + [124, "snapshot_take>"], + [125, "enum_match>"], + [126, "store_temp"], + [127, "function_call"], + [128, "array_new>"], + [129, "store_temp>>"], + [ + 130, "function_call, core::option::OptionSerde::>, core::option::OptionDrop::>>" ], [ - 122, + 131, "enum_match, core::option::Option::>>)>>" ], [ - 123, + 132, "struct_deconstruct, core::option::Option::>>>>" ], [ - 124, + 133, "enum_match>>>" ], - [125, "drop>>"], - [126, "snapshot_take>>"], - [127, "dup>>>"], - [128, "array_len>"], - [129, "struct_construct>>"], - [130, "store_temp>>"], + [134, "drop>>"], + [135, "snapshot_take>>"], + [136, "dup>>>"], + [137, "array_len>"], + [138, "struct_construct>>"], + [139, "store_temp>>"], [ - 131, + 140, "function_call, core::option::OptionSerde::>, core::option::OptionDrop::>>" ], - [132, "drop"], - [133, "drop>"], - [134, "snapshot_take>"], + [141, "array_new"], + [142, "store_temp>"], [ - 135, + 143, + "function_call>" + ], + [ + 144, + "enum_match, core::option::Option::>)>>" + ], + [ + 145, + "struct_deconstruct, core::option::Option::>>>" + ], + [146, "enum_match>>"], + [147, "drop>"], + [148, "snapshot_take>"], + [149, "dup>>"], + [150, "array_len"], + [151, "struct_construct>"], + [152, "store_temp>"], + [ + 153, + "function_call>" + ], + [154, "drop"], + [155, "drop>"], + [156, "snapshot_take>"], + [ + 157, "function_call, core::array::Array::, core::array::ArraySerde::, core::integer::u8Drop>, core::array::ArraySerde::, core::integer::u16Drop>>::deserialize>" ], [ - 136, + 158, "enum_match, core::option::Option::, core::array::Array::>>)>>" ], [ - 137, + 159, "struct_deconstruct, core::option::Option::, core::array::Array::>>>>" ], [ - 138, + 160, "enum_match, core::array::Array::>>>" ], [ - 139, + 161, "drop, core::array::Array::>>" ], [ - 140, + 162, "snapshot_take, core::array::Array::>>" ], [ - 141, + 163, "enum_snapshot_match, core::array::Array::>>" ], - [142, "rename, ())>>"], - [143, "dup>>"], - [144, "array_len"], - [145, "struct_construct>"], - [146, "store_temp>"], + [164, "rename, ())>>"], + [165, "dup>>"], + [166, "array_len"], + [167, "struct_construct>"], + [168, "store_temp>"], [ - 147, + 169, "function_call, core::integer::u16Drop>>" ], [ - 148, + 170, "function_call, core::tuple::SerializeTupleNext::<[@core::integer::u32; 3], core::fixed_size_array::TupleSplitFixedSizedArraySized3::<@core::integer::u32>, core::tuple::SerdeBasedSerializeTuple::>, core::tuple::SerializeTupleNext::<[@core::integer::u32; 2], core::fixed_size_array::TupleSplitFixedSizedArraySized2::<@core::integer::u32>, core::tuple::SerdeBasedSerializeTuple::>, core::tuple::SerializeTupleNext::<[@core::integer::u32; 1], core::fixed_size_array::TupleSplitFixedSizedArraySized1::<@core::integer::u32>, core::tuple::SerdeBasedSerializeTuple::>, core::tuple::SerializeTupleBaseFixedSizedArray::, core::fixed_size_array::FixedSizedArrayDrop::<@core::integer::u32, core::traits::SnapshotDrop::, 0>>, core::fixed_size_array::FixedSizedArrayDrop::<@core::integer::u32, core::traits::SnapshotDrop::, 1>>, core::fixed_size_array::FixedSizedArrayDrop::<@core::integer::u32, core::traits::SnapshotDrop::, 2>>, core::tuple::DeserializeTupleNext::<[core::integer::u32; 3], core::fixed_size_array::TupleSplitFixedSizedArraySized3::, core::serde::into_felt252_based::SerdeImpl::, core::tuple::DeserializeTupleNext::<[core::integer::u32; 2], core::fixed_size_array::TupleSplitFixedSizedArraySized2::, core::serde::into_felt252_based::SerdeImpl::, core::tuple::DeserializeTupleNext::<[core::integer::u32; 1], core::fixed_size_array::TupleSplitFixedSizedArraySized1::, core::serde::into_felt252_based::SerdeImpl::, core::tuple::DeserializeTupleBaseFixedSizedArray::, core::integer::u32Drop>, core::integer::u32Drop>, core::integer::u32Drop>>, core::tuple::SerdeTuple::<[core::integer::u16; 2], core::fixed_size_array::TupleSnapForwardFixedSizedArraySized2::, core::tuple::SerializeTupleNext::<[@core::integer::u16; 2], core::fixed_size_array::TupleSplitFixedSizedArraySized2::<@core::integer::u16>, core::tuple::SerdeBasedSerializeTuple::>, core::tuple::SerializeTupleNext::<[@core::integer::u16; 1], core::fixed_size_array::TupleSplitFixedSizedArraySized1::<@core::integer::u16>, core::tuple::SerdeBasedSerializeTuple::>, core::tuple::SerializeTupleBaseFixedSizedArray::, core::fixed_size_array::FixedSizedArrayDrop::<@core::integer::u16, core::traits::SnapshotDrop::, 0>>, core::fixed_size_array::FixedSizedArrayDrop::<@core::integer::u16, core::traits::SnapshotDrop::, 1>>, core::tuple::DeserializeTupleNext::<[core::integer::u16; 2], core::fixed_size_array::TupleSplitFixedSizedArraySized2::, core::serde::into_felt252_based::SerdeImpl::, core::tuple::DeserializeTupleNext::<[core::integer::u16; 1], core::fixed_size_array::TupleSplitFixedSizedArraySized1::, core::serde::into_felt252_based::SerdeImpl::, core::tuple::DeserializeTupleBaseFixedSizedArray::, core::integer::u16Drop>, core::integer::u16Drop>>>::deserialize>" ], [ - 149, + 171, "enum_match>>" ], - [150, "drop>"], + [172, "drop>"], [ - 151, + 173, "snapshot_take>" ], - [152, "enum_match>"], - [153, "struct_deconstruct>"], + [174, "enum_match>"], + [175, "struct_deconstruct>"], [ - 154, + 176, "function_call), (core::integer::u16, core::array::Array::), core::tuple::SerdeTuple::<(core::integer::u32, core::array::Array::), core::tuple::TupleSnapForwardTupleSize2::>, core::tuple::SerializeTupleNext::<(@core::integer::u32, @core::array::Array::), core::tuple::TupleSplitTupleSize2::<@core::integer::u32, @core::array::Array::>, core::tuple::SerdeBasedSerializeTuple::>, core::tuple::SerializeTupleNext::<(@core::array::Array::,), core::tuple::TupleSplitTupleSize1::<@core::array::Array::>, core::tuple::SerdeBasedSerializeTuple::, core::array::ArraySerde::, core::integer::u32Drop>>, core::tuple::SerializeTupleBaseTuple, core::tuple::TupleSize0Drop>, core::tuple::TupleNextDrop::<(@core::array::Array::,), core::tuple::TupleSplitTupleSize1::<@core::array::Array::>, core::tuple::IsTupleTupleSize1::<@core::array::Array::>, core::traits::SnapshotDrop::>, core::tuple::TupleSize0Drop>>, core::tuple::DeserializeTupleNext::<(core::integer::u32, core::array::Array::), core::tuple::TupleSplitTupleSize2::>, core::serde::into_felt252_based::SerdeImpl::, core::tuple::DeserializeTupleNext::<(core::array::Array::,), core::tuple::TupleSplitTupleSize1::>, core::array::ArraySerde::, core::integer::u32Drop>, core::tuple::DeserializeTupleBaseTuple, core::array::ArrayDrop::>, core::integer::u32Drop>>, core::tuple::SerdeTuple::<(core::integer::u16, core::array::Array::), core::tuple::TupleSnapForwardTupleSize2::>, core::tuple::SerializeTupleNext::<(@core::integer::u16, @core::array::Array::), core::tuple::TupleSplitTupleSize2::<@core::integer::u16, @core::array::Array::>, core::tuple::SerdeBasedSerializeTuple::>, core::tuple::SerializeTupleNext::<(@core::array::Array::,), core::tuple::TupleSplitTupleSize1::<@core::array::Array::>, core::tuple::SerdeBasedSerializeTuple::, core::array::ArraySerde::, core::integer::u16Drop>>, core::tuple::SerializeTupleBaseTuple, core::tuple::TupleSize0Drop>, core::tuple::TupleNextDrop::<(@core::array::Array::,), core::tuple::TupleSplitTupleSize1::<@core::array::Array::>, core::tuple::IsTupleTupleSize1::<@core::array::Array::>, core::traits::SnapshotDrop::>, core::tuple::TupleSize0Drop>>, core::tuple::DeserializeTupleNext::<(core::integer::u16, core::array::Array::), core::tuple::TupleSplitTupleSize2::>, core::serde::into_felt252_based::SerdeImpl::, core::tuple::DeserializeTupleNext::<(core::array::Array::,), core::tuple::TupleSplitTupleSize1::>, core::array::ArraySerde::, core::integer::u16Drop>, core::tuple::DeserializeTupleBaseTuple, core::array::ArrayDrop::>, core::integer::u16Drop>>>::deserialize>" ], [ - 155, + 177, "enum_match, core::option::Option::), (core::integer::u16, core::array::Array::)>>)>>" ], [ - 156, + 178, "struct_deconstruct, core::option::Option::), (core::integer::u16, core::array::Array::)>>>>" ], [ - 157, + 179, "enum_match), (core::integer::u16, core::array::Array::)>>>" ], [ - 158, + 180, "drop), (core::integer::u16, core::array::Array::)>>" ], [ - 159, + 181, "snapshot_take), (core::integer::u16, core::array::Array::)>>" ], [ - 160, + 182, "enum_snapshot_match), (core::integer::u16, core::array::Array::)>>" ], - [161, "struct_snapshot_deconstruct>>"], + [183, "struct_snapshot_deconstruct>>"], [ - 162, + 184, "function_call, core::integer::u32, core::result::ResultSerde::, core::serde::into_felt252_based::SerdeImpl::>, core::serde::into_felt252_based::SerdeImpl::>::deserialize>" ], [ - 163, + 185, "enum_match, core::integer::u32>>>" ], [ - 164, + 186, "drop, core::integer::u32>>" ], [ - 165, + 187, "snapshot_take, core::integer::u32>>" ], [ - 166, + 188, "enum_match, core::integer::u32>>" ], [ - 167, + 189, "function_call, core::serde::into_felt252_based::SerdeImpl::, core::option::OptionSerde::>>::deserialize>" ], [ - 168, + 190, "enum_match>>>" ], [ - 169, + 191, "drop>>" ], [ - 170, + 192, "snapshot_take>>" ], [ - 171, + 193, "enum_match>>" ], - [172, "enum_match>"], + [194, "enum_match>"], [ - 173, + 195, "function_call, enums::PointSerde>::deserialize>" ], [ - 174, + 196, "enum_match>>" ], - [175, "drop>"], - [176, "snapshot_take>"], - [177, "enum_match>"], - [178, "u64_try_from_felt252"], - [179, "u32_try_from_felt252"], - [180, "struct_construct"], - [181, "snapshot_take"], - [182, "drop"], - [183, "store_temp"], - [184, "function_call"], - [185, "enum_match>"], - [186, "drop"], - [187, "snapshot_take"], - [188, "dup"], - [189, "struct_deconstruct"], - [190, "function_call"], - [191, "enum_match>"], - [192, "drop"], - [193, "snapshot_take"], - [194, "dup"], - [195, "struct_deconstruct"], - [196, "drop>"], - [197, "struct_deconstruct>"], - [198, "function_call"], - [ - 199, + [197, "drop>"], + [198, "snapshot_take>"], + [199, "enum_match>"], + [ + 200, + "function_call, enums::MyEnumSerde>::deserialize>" + ], + [ + 201, + "enum_match, core::option::Option::>)>>" + ], + [ + 202, + "struct_deconstruct, core::option::Option::>>>" + ], + [ + 203, + "enum_match>>" + ], + [204, "drop>"], + [205, "snapshot_take>"], + [206, "enum_match>"], + [207, "u64_try_from_felt252"], + [208, "u32_try_from_felt252"], + [209, "struct_construct"], + [210, "snapshot_take"], + [211, "drop"], + [212, "store_temp"], + [213, "function_call"], + [214, "enum_match>"], + [215, "drop"], + [216, "snapshot_take"], + [217, "dup"], + [218, "struct_deconstruct"], + [219, "function_call"], + [220, "enum_match>"], + [221, "drop"], + [222, "snapshot_take"], + [223, "dup"], + [224, "struct_deconstruct"], + [225, "drop>"], + [226, "struct_deconstruct>"], + [227, "function_call"], + [ + 228, "enum_match, core::option::Option::)>>" ], [ - 200, + 229, "struct_deconstruct, core::option::Option::>>" ], - [201, "enum_match>"], - [202, "drop"], - [203, "snapshot_take"], - [204, "dup"], - [205, "struct_deconstruct"], - [206, "drop>"], - [207, "dup>"], - [208, "rename>"], - [209, "struct_deconstruct>"], - [210, "function_call"], - [211, "enum_match>"], - [212, "drop"], - [213, "snapshot_take"], - [214, "dup"], - [215, "struct_deconstruct"], - [216, "drop>"], - [217, "struct_deconstruct>"], - [218, "function_call"], - [219, "enum_match>"], - [220, "drop"], - [221, "snapshot_take"], - [222, "dup"], - [223, "struct_deconstruct"], - [224, "drop>"], - [225, "enum_match>"], - [226, "u128s_from_felt252"], - [ - 227, + [230, "enum_match>"], + [231, "drop"], + [232, "snapshot_take"], + [233, "dup"], + [234, "struct_deconstruct"], + [235, "drop>"], + [236, "dup>"], + [237, "rename>"], + [238, "struct_deconstruct>"], + [239, "function_call"], + [240, "enum_match>"], + [241, "drop"], + [242, "snapshot_take"], + [243, "dup"], + [244, "struct_deconstruct"], + [245, "drop>"], + [246, "struct_deconstruct>"], + [247, "function_call"], + [248, "enum_match>"], + [249, "drop"], + [250, "snapshot_take"], + [251, "dup"], + [252, "struct_deconstruct"], + [253, "drop>"], + [254, "enum_match>"], + [255, "u128s_from_felt252"], + [ + 256, "function_call, core::serde::into_felt252_based::SerdeImpl::>::deserialize>" ], [ - 228, + 257, "enum_match>>" ], - [229, "drop"], - [230, "drop>"], - [231, "struct_construct"], - [232, "snapshot_take"], - [233, "drop"], - [234, "store_temp"], - [235, "dup"], - [236, "struct_deconstruct"], - [237, "rename"], - [238, "u128_to_felt252"], - [239, "enum_match>"], - [ - 240, + [258, "drop"], + [259, "drop>"], + [260, "struct_construct"], + [261, "snapshot_take"], + [262, "drop"], + [263, "store_temp"], + [264, "dup"], + [265, "struct_deconstruct"], + [266, "rename"], + [267, "u128_to_felt252"], + [268, "enum_match>"], + [269, "alloc_local"], + [270, "finalize_locals"], + [271, "function_call"], + [ + 272, + "enum_match, core::option::Option::)>>" + ], + [ + 273, + "struct_deconstruct, core::option::Option::>>" + ], + [274, "enum_match>"], + [275, "store_local"], + [276, "drop"], + [277, "snapshot_take"], + [278, "dup"], + [279, "struct_deconstruct"], + [280, "drop"], + [281, "drop"], + [282, "rename"], + [283, "bytes31_to_felt252"], + [284, "drop>"], + [285, "function_call"], + [ + 286, + "enum_match, core::option::Option::)>>" + ], + [ + 287, + "struct_deconstruct, core::option::Option::>>" + ], + [288, "snapshot_take"], + [ + 289, "const_as_immediate>" ], - [241, "function_call"], + [290, "function_call"], [ - 242, + 291, "const_as_immediate>" ], - [243, "const_as_immediate>"], - [244, "array_new"], - [245, "store_temp>"], + [292, "const_as_immediate>"], + [293, "array_new"], + [294, "store_temp>"], [ - 246, + 295, "function_call, core::integer::u8Drop>>" ], [ - 247, + 296, "enum_match, core::option::Option::>)>>" ], [ - 248, + 297, "struct_deconstruct, core::option::Option::>>>" ], - [249, "enum_match>>"], - [250, "enum_init>, 0>"], + [298, "enum_match>>"], + [299, "enum_init>, 0>"], [ - 251, + 300, "enum_init>>, 0>" ], [ - 252, + 301, "struct_construct, core::option::Option::>>>>" ], [ - 253, + 302, "enum_init, core::option::Option::>>)>, 0>" ], [ - 254, + 303, "store_temp, core::option::Option::>>)>>" ], - [255, "rename"], + [304, "rename"], [ - 256, + 305, "enum_init, core::option::Option::>>)>, 1>" ], [ - 257, + 306, "enum_init>>, 1>" ], - [258, "enum_init>, 1>"], - [259, "struct_deconstruct>"], - [260, "array_snapshot_pop_front"], - [261, "unbox"], - [262, "drop>>"], - [263, "struct_construct, Unit>>"], - [264, "enum_init, ())>, 0>"], - [265, "store_temp, ())>>"], - [266, "drop>"], - [267, "enum_init, ())>, 1>"], - [268, "struct_construct>"], - [ - 269, + [307, "enum_init>, 1>"], + [308, "struct_deconstruct>"], + [309, "array_snapshot_pop_front"], + [310, "unbox"], + [311, "drop>>"], + [312, "struct_construct, Unit>>"], + [313, "enum_init, ())>, 0>"], + [314, "store_temp, ())>>"], + [315, "drop>"], + [316, "enum_init, ())>, 1>"], + [317, "struct_construct>"], + [ + 318, "function_call), core::tuple::TupleSplitTupleSize2::>, core::serde::into_felt252_based::SerdeImpl::, core::tuple::DeserializeTupleNext::<(core::array::Array::,), core::tuple::TupleSplitTupleSize1::>, core::array::ArraySerde::, core::integer::u32Drop>, core::tuple::DeserializeTupleBaseTuple, core::array::ArrayDrop::>, core::integer::u32Drop>::deserialize>" ], [ - 270, + 319, "enum_match, core::option::Option::<(core::integer::u32, core::array::Array::)>)>>" ], [ - 271, + 320, "struct_deconstruct, core::option::Option::<(core::integer::u32, core::array::Array::)>>>" ], [ - 272, + 321, "enum_match)>>" ], [ - 273, + 322, "enum_init)>, 0>" ], [ - 274, + 323, "enum_init)>>, 0>" ], [ - 275, + 324, "struct_construct, core::option::Option::)>>>>" ], [ - 276, + 325, "enum_init, core::option::Option::)>>)>, 0>" ], [ - 277, + 326, "store_temp, core::option::Option::)>>)>>" ], [ - 278, + 327, "enum_init)>>, 1>" ], [ - 279, + 328, "enum_init, core::option::Option::)>>)>, 1>" ], [ - 280, + 329, "enum_init)>, 1>" ], - [281, "array_snapshot_pop_front"], - [282, "unbox"], - [283, "drop>>"], - [284, "enum_init>, 0>"], + [330, "array_snapshot_pop_front"], + [331, "unbox"], + [332, "drop>>"], + [333, "enum_init>, 0>"], [ - 285, + 334, "enum_init>>, 0>" ], [ - 286, + 335, "store_temp>>>" ], - [287, "rename>>"], - [288, "enum_init>, 1>"], + [336, "rename>>"], + [337, "enum_init>, 1>"], [ - 289, + 338, "enum_init>>, 1>" ], - [290, "u8_try_from_felt252"], - [291, "enum_init, 0>"], - [292, "enum_init, 1>"], - [293, "enum_init, 0>"], - [294, "enum_init>, 0>"], - [295, "store_temp>>"], - [296, "enum_init, 1>"], - [297, "enum_init>, 1>"], + [339, "u8_try_from_felt252"], + [340, "enum_init, 0>"], + [341, "enum_init, 1>"], + [342, "enum_init, 0>"], + [343, "enum_init>, 0>"], + [344, "store_temp>>"], + [345, "enum_init, 1>"], + [346, "enum_init>, 1>"], + [347, "enum_init, 0>"], + [348, "enum_init>, 0>"], + [ + 349, + "struct_construct, core::option::Option::>>>" + ], + [ + 350, + "enum_init, core::option::Option::>)>, 0>" + ], + [ + 351, + "store_temp, core::option::Option::>)>>" + ], + [352, "enum_init>, 1>"], [ - 298, + 353, + "enum_init, core::option::Option::>)>, 1>" + ], + [354, "enum_init, 1>"], + [355, "enum_match"], + [356, "const_as_immediate>"], + [357, "enum_match"], + [358, "struct_deconstruct>"], + [359, "rename>"], + [360, "struct_deconstruct>"], + [361, "const_as_immediate>"], + [362, "dup>"], + [363, "rename>"], + [364, "struct_deconstruct>"], + [365, "array_len"], + [366, "const_as_immediate>"], + [367, "store_temp>"], + [ + 368, + "function_call>" + ], + [369, "struct_deconstruct>"], + [370, "const_as_immediate>"], + [371, "const_as_immediate>"], + [372, "const_as_immediate>"], + [373, "enum_match>"], + [374, "const_as_immediate>"], + [ + 375, "enum_init>>, 0>" ], [ - 299, + 376, "struct_construct, core::option::Option::>>>>" ], [ - 300, + 377, "enum_init, core::option::Option::>>)>, 0>" ], [ - 301, + 378, "store_temp, core::option::Option::>>)>>" ], - [302, "array_append>"], + [379, "array_append>"], [ - 303, + 380, "enum_init>>, 1>" ], [ - 304, + 381, "enum_init, core::option::Option::>>)>, 1>" ], - [305, "struct_deconstruct>>"], - [306, "array_snapshot_pop_front>"], - [307, "unbox>"], - [308, "drop>>>"], - [309, "drop>>"], + [382, "struct_deconstruct>>"], + [383, "array_snapshot_pop_front>"], + [384, "unbox>"], + [385, "drop>>>"], + [386, "drop>>"], + [387, "enum_init>, 0>"], + [ + 388, + "struct_construct, core::option::Option::>>>" + ], [ - 310, + 389, + "enum_init, core::option::Option::>)>, 0>" + ], + [ + 390, + "store_temp, core::option::Option::>)>>" + ], + [391, "array_append"], + [392, "enum_init>, 1>"], + [ + 393, + "enum_init, core::option::Option::>)>, 1>" + ], + [394, "alloc_local>>"], + [395, "struct_deconstruct>"], + [396, "array_snapshot_pop_front"], + [397, "unbox"], + [398, "store_local>>"], + [399, "drop>>"], + [400, "drop>>>"], + [401, "drop>"], + [ + 402, "enum_init, core::array::Array::>, 0>" ], [ - 311, + 403, "enum_init, core::array::Array::>>, 0>" ], [ - 312, + 404, "struct_construct, core::option::Option::, core::array::Array::>>>>" ], [ - 313, + 405, "enum_init, core::option::Option::, core::array::Array::>>)>, 0>" ], [ - 314, + 406, "store_temp, core::option::Option::, core::array::Array::>>)>>" ], [ - 315, + 407, "enum_init, core::option::Option::, core::array::Array::>>)>, 1>" ], - [316, "array_new"], - [317, "store_temp>"], + [408, "array_new"], + [409, "store_temp>"], [ - 318, + 410, "function_call, core::integer::u16Drop>>" ], [ - 319, + 411, "enum_match, core::option::Option::>)>>" ], [ - 320, + 412, "struct_deconstruct, core::option::Option::>>>" ], - [321, "enum_match>>"], + [413, "enum_match>>"], [ - 322, + 414, "enum_init, core::array::Array::>, 1>" ], [ - 323, + 415, "enum_init, core::array::Array::>>, 1>" ], - [324, "struct_deconstruct>"], - [325, "array_snapshot_pop_front"], - [326, "unbox"], - [327, "drop>>"], - [328, "drop>"], - [329, "dup>>"], + [416, "struct_deconstruct>"], + [417, "array_snapshot_pop_front"], + [418, "unbox"], + [419, "drop>>"], + [420, "drop>"], + [421, "dup>>"], [ - 330, + 422, "enum_init, 0>" ], [ - 331, + 423, "enum_init>, 0>" ], [ - 332, + 424, "store_temp>>" ], [ - 333, + 425, "enum_init>, 1>" ], - [334, "struct_construct>"], + [426, "struct_construct>"], [ - 335, + 427, "enum_init, 1>" ], [ - 336, + 428, "enum_init), (core::integer::u16, core::array::Array::)>, 0>" ], [ - 337, + 429, "enum_init), (core::integer::u16, core::array::Array::)>>, 0>" ], [ - 338, + 430, "struct_construct, core::option::Option::), (core::integer::u16, core::array::Array::)>>>>" ], [ - 339, + 431, "enum_init, core::option::Option::), (core::integer::u16, core::array::Array::)>>)>, 0>" ], [ - 340, + 432, "store_temp, core::option::Option::), (core::integer::u16, core::array::Array::)>>)>>" ], [ - 341, + 433, "enum_init, core::option::Option::), (core::integer::u16, core::array::Array::)>>)>, 1>" ], [ - 342, + 434, "function_call), core::tuple::TupleSplitTupleSize2::>, core::serde::into_felt252_based::SerdeImpl::, core::tuple::DeserializeTupleNext::<(core::array::Array::,), core::tuple::TupleSplitTupleSize1::>, core::array::ArraySerde::, core::integer::u16Drop>, core::tuple::DeserializeTupleBaseTuple, core::array::ArrayDrop::>, core::integer::u16Drop>::deserialize>" ], [ - 343, + 435, "enum_match, core::option::Option::<(core::integer::u16, core::array::Array::)>)>>" ], [ - 344, + 436, "struct_deconstruct, core::option::Option::<(core::integer::u16, core::array::Array::)>>>" ], [ - 345, + 437, "enum_match)>>" ], [ - 346, + 438, "enum_init), (core::integer::u16, core::array::Array::)>, 1>" ], [ - 347, + 439, "enum_init), (core::integer::u16, core::array::Array::)>>, 1>" ], [ - 348, + 440, "enum_init, core::integer::u32>, 0>" ], [ - 349, + 441, "enum_init, core::integer::u32>>, 0>" ], [ - 350, + 442, "store_temp, core::integer::u32>>>" ], [ - 351, + 443, "enum_init, core::integer::u32>>, 1>" ], [ - 352, + 444, "enum_init, core::integer::u32>, 1>" ], [ - 353, + 445, "enum_init>, 0>" ], [ - 354, + 446, "enum_init>>, 0>" ], [ - 355, + 447, "store_temp>>>" ], - [356, "enum_init, 0>"], + [448, "enum_init, 0>"], [ - 357, + 449, "enum_init>, 1>" ], - [358, "enum_init, 1>"], + [450, "enum_init, 1>"], [ - 359, + 451, "enum_init>>, 1>" ], - [360, "enum_init, 0>"], + [452, "enum_init, 0>"], [ - 361, + 453, "enum_init>, 0>" ], [ - 362, + 454, "store_temp>>" ], - [363, "enum_init, 1>"], + [455, "enum_init, 1>"], [ - 364, + 456, "enum_init>, 1>" ], - [365, "struct_construct"], - [366, "enum_init, 0>"], - [367, "store_temp>"], - [368, "enum_init, 1>"], + [457, "enum_init, 0>"], + [ + 458, + "enum_init>, 0>" + ], + [ + 459, + "struct_construct, core::option::Option::>>>" + ], + [ + 460, + "enum_init, core::option::Option::>)>, 0>" + ], + [ + 461, + "store_temp, core::option::Option::>)>>" + ], + [462, "enum_init, 1>"], + [ + 463, + "enum_init>, 1>" + ], + [ + 464, + "enum_init, core::option::Option::>)>, 1>" + ], + [465, "struct_construct"], + [466, "enum_init, 0>"], + [467, "store_temp>"], + [468, "enum_init, 1>"], [ - 369, + 469, "function_call, core::serde::into_felt252_based::SerdeImpl::, core::tuple::DeserializeTupleNext::<(core::integer::u32, core::integer::u64), core::tuple::TupleSplitTupleSize2::, core::serde::into_felt252_based::SerdeImpl::, core::tuple::DeserializeTupleNext::<(core::integer::u64,), core::tuple::TupleSplitTupleSize1::, core::serde::into_felt252_based::SerdeImpl::, core::tuple::DeserializeTupleBaseTuple, core::integer::u64Drop>, core::integer::u32Drop>, core::integer::u16Drop>::deserialize>" ], [ - 370, + 470, "enum_match>" ], - [371, "struct_deconstruct>"], - [372, "struct_construct>"], - [373, "struct_construct"], - [374, "enum_init, 0>"], - [375, "store_temp>"], - [376, "drop"], - [377, "enum_init, 1>"], - [378, "alloc_local"], - [379, "finalize_locals"], - [380, "store_local"], - [381, "array_new"], - [382, "store_temp>"], - [ - 383, + [471, "struct_deconstruct>"], + [472, "struct_construct>"], + [473, "struct_construct"], + [474, "enum_init, 0>"], + [475, "store_temp>"], + [476, "drop"], + [477, "enum_init, 1>"], + [478, "alloc_local"], + [479, "store_local"], + [480, "array_new"], + [481, "store_temp>"], + [ + 482, "function_call, core::integer::u32Drop>>" ], [ - 384, + 483, "enum_match, core::option::Option::>)>>" ], [ - 385, + 484, "struct_deconstruct, core::option::Option::>>>" ], - [386, "enum_match>>"], - [387, "snapshot_take>"], - [388, "drop>"], - [389, "struct_construct"], - [390, "enum_init, 0>"], + [485, "enum_match>>"], + [486, "snapshot_take>"], + [487, "drop>"], + [488, "struct_construct"], + [489, "enum_init, 0>"], [ - 391, + 490, "struct_construct, core::option::Option::>>" ], [ - 392, + 491, "enum_init, core::option::Option::)>, 0>" ], [ - 393, + 492, "store_temp, core::option::Option::)>>" ], [ - 394, + 493, "enum_init, core::option::Option::)>, 1>" ], - [395, "enum_init, 1>"], - [396, "drop>"], + [494, "enum_init, 1>"], + [495, "drop>"], [ - 397, + 496, "function_call, core::serde::into_felt252_based::SerdeImpl::, core::tuple::DeserializeTupleNext::<[core::integer::u16; 2], core::fixed_size_array::TupleSplitFixedSizedArraySized2::, core::serde::into_felt252_based::SerdeImpl::, core::tuple::DeserializeTupleNext::<[core::integer::u16; 1], core::fixed_size_array::TupleSplitFixedSizedArraySized1::, core::serde::into_felt252_based::SerdeImpl::, core::tuple::DeserializeTupleBaseFixedSizedArray::, core::integer::u16Drop>, core::integer::u16Drop>, core::integer::u16Drop>::deserialize>" ], - [398, "enum_match>"], - [399, "struct_deconstruct>"], - [400, "struct_construct>"], - [401, "struct_construct"], - [402, "enum_init, 0>"], - [403, "store_temp>"], - [404, "enum_init, 1>"], - [405, "enum_init, 0>"], - [406, "struct_construct"], - [407, "enum_init, 0>"], - [408, "store_temp>"], - [409, "enum_init, 1>"], - [410, "enum_init, 1>"], - [411, "enum_init, 0>"], - [ - 412, + [497, "enum_match>"], + [498, "struct_deconstruct>"], + [499, "struct_construct>"], + [500, "struct_construct"], + [501, "enum_init, 0>"], + [502, "store_temp>"], + [503, "enum_init, 1>"], + [504, "enum_init, 0>"], + [505, "struct_construct"], + [506, "enum_init, 0>"], + [507, "store_temp>"], + [508, "enum_init, 1>"], + [509, "enum_init, 1>"], + [510, "enum_init, 0>"], + [ + 511, "enum_init>, 0>" ], [ - 413, + 512, "store_temp>>" ], - [414, "enum_init, 1>"], + [513, "enum_init, 1>"], [ - 415, + 514, "enum_init>, 1>" ], - [416, "struct_construct"], - [417, "struct_construct>>"], - [418, "store_temp>>"], + [515, "bytes31_try_from_felt252"], + [516, "struct_construct"], + [517, "enum_init, 0>"], + [ + 518, + "struct_construct, core::option::Option::>>" + ], + [ + 519, + "enum_init, core::option::Option::)>, 0>" + ], + [ + 520, + "store_temp, core::option::Option::)>>" + ], + [521, "enum_init, 1>"], + [ + 522, + "enum_init, core::option::Option::)>, 1>" + ], + [523, "downcast>"], + [524, "enum_from_bounded_int>"], + [525, "store_temp>"], + [526, "enum_match>"], + [527, "enum_init"], + [ + 528, + "struct_construct, core::option::Option::>>" + ], + [ + 529, + "enum_init, core::option::Option::)>, 0>" + ], + [ + 530, + "store_temp, core::option::Option::)>>" + ], + [531, "enum_init"], + [532, "function_call"], + [533, "enum_match>"], + [534, "enum_init"], + [535, "struct_construct>"], + [536, "enum_init"], + [537, "array_new"], + [538, "store_temp>"], + [ + 539, + "function_call>" + ], + [ + 540, + "enum_match, core::option::Option::>)>>" + ], + [ + 541, + "struct_deconstruct, core::option::Option::>>>" + ], + [542, "enum_match>>"], + [543, "snapshot_take>"], + [544, "drop>"], + [545, "struct_construct>"], + [546, "enum_init"], + [ + 547, + "enum_init, core::option::Option::)>, 1>" + ], + [548, "struct_construct>"], + [549, "enum_init"], + [550, "enum_init"], + [ + 551, + "function_call, core::serde::into_felt252_based::SerdeImpl::>::deserialize>" + ], + [ + 552, + "enum_match>>" + ], + [553, "enum_init"], + [554, "enum_init"], + [555, "struct_construct"], + [556, "struct_construct>>"], + [557, "store_temp>>"], [ - 419, + 558, "struct_construct, core::option::Option::>>>" ], [ - 420, + 559, "enum_init, core::option::Option::>)>, 0>" ], [ - 421, + 560, "store_temp, core::option::Option::>)>>" ], - [422, "array_append"], - [423, "drop>"], + [561, "array_append"], + [562, "drop>"], [ - 424, + 563, "enum_init, core::option::Option::>)>, 1>" ], - [425, "struct_construct>>"], + [564, "struct_construct>>"], [ - 426, + 565, "struct_construct, core::option::Option::<(core::integer::u32, core::array::Array::)>>>" ], [ - 427, + 566, "enum_init, core::option::Option::<(core::integer::u32, core::array::Array::)>)>, 0>" ], [ - 428, + 567, "store_temp, core::option::Option::<(core::integer::u32, core::array::Array::)>)>>" ], [ - 429, + 568, "enum_init, core::option::Option::<(core::integer::u32, core::array::Array::)>)>, 1>" ], - [430, "enum_init>, 0>"], + [569, "array_snapshot_pop_front"], + [570, "unbox"], + [571, "store_temp"], + [572, "dup"], + [573, "struct_deconstruct"], + [574, "drop>>"], + [575, "drop>"], + [576, "enum_init>, 0>"], [ - 431, + 577, "struct_construct, core::option::Option::>>>" ], [ - 432, + 578, "enum_init, core::option::Option::>)>, 0>" ], [ - 433, + 579, "store_temp, core::option::Option::>)>>" ], - [434, "array_append"], - [435, "drop>"], - [436, "enum_init>, 1>"], + [580, "array_append"], + [581, "drop>"], + [582, "enum_init>, 1>"], [ - 437, + 583, "enum_init, core::option::Option::>)>, 1>" ], - [438, "struct_construct>>"], + [584, "struct_construct>>"], [ - 439, + 585, "enum_init)>, 0>" ], [ - 440, + 586, "struct_construct, core::option::Option::<(core::integer::u16, core::array::Array::)>>>" ], [ - 441, + 587, "enum_init, core::option::Option::<(core::integer::u16, core::array::Array::)>)>, 0>" ], [ - 442, + 588, "store_temp, core::option::Option::<(core::integer::u16, core::array::Array::)>)>>" ], [ - 443, + 589, "enum_init, core::option::Option::<(core::integer::u16, core::array::Array::)>)>, 1>" ], [ - 444, + 590, "enum_init)>, 1>" ], - [445, "struct_construct>"], + [591, "struct_construct>"], [ - 446, + 592, "enum_init, 0>" ], [ - 447, + 593, "store_temp>" ], [ - 448, + 594, "enum_init, 1>" ], - [449, "enum_init>, 0>"], + [595, "enum_init>, 0>"], [ - 450, + 596, "struct_construct, core::option::Option::>>>" ], [ - 451, + 597, "enum_init, core::option::Option::>)>, 0>" ], [ - 452, + 598, "store_temp, core::option::Option::>)>>" ], - [453, "array_append"], - [454, "enum_init>, 1>"], + [599, "array_append"], + [600, "enum_init>, 1>"], [ - 455, + 601, "enum_init, core::option::Option::>)>, 1>" ], - [456, "struct_construct>"], - [457, "enum_init, 0>"], - [458, "store_temp>"], - [459, "enum_init, 1>"] + [602, "struct_construct>"], + [603, "enum_init, 0>"], + [604, "store_temp>"], + [605, "enum_init, 1>"], + [606, "struct_construct>"], + [607, "enum_init"], + [608, "enum_init, 0>"], + [609, "store_temp>"], + [610, "enum_init"], + [611, "enum_init"], + [612, "enum_init, 1>"], + [613, "enum_init>, 0>"], + [ + 614, + "struct_construct, core::option::Option::>>>" + ], + [ + 615, + "enum_init, core::option::Option::>)>, 0>" + ], + [ + 616, + "store_temp, core::option::Option::>)>>" + ], + [617, "struct_construct"], + [618, "array_append"], + [619, "enum_init>, 1>"], + [ + 620, + "enum_init, core::option::Option::>)>, 1>" + ], + [621, "enum_init, 0>"], + [ + 622, + "enum_init>, 0>" + ], + [ + 623, + "store_temp>>" + ], + [624, "enum_init, 1>"], + [ + 625, + "enum_init>, 1>" + ] ], "user_func_names": [ [0, "enums::test_enums::__wrapper__TestOption__option_bn"], @@ -4381,137 +5892,172 @@ [4, "enums::test_enums::__wrapper__TestOption__option_option_bn"], [5, "enums::test_enums::__wrapper__TestOption__option_result"], [6, "enums::test_enums::__wrapper__TestOption__option_struct"], - [7, "enums::test_enums::__wrapper__TestOption__array_option_bn"], - [8, "enums::test_enums::__wrapper__TestOption__write_option_bn"], - [9, "enums::test_enums::__wrapper__TestOption__option_point"], - [10, "enums::test_enums::__wrapper__TestOption__result_bn"], - [11, "enums::test_enums::__wrapper__TestOption__result_array"], - [12, "enums::test_enums::__wrapper__TestOption__result_fixed_array"], - [13, "enums::test_enums::__wrapper__TestOption__result_tuple"], - [14, "enums::test_enums::__wrapper__TestOption__result_result_bn"], - [15, "enums::test_enums::__wrapper__TestOption__result_option"], - [16, "enums::test_enums::__wrapper__TestOption__result_struct"], - [17, "enums::test_enums::__wrapper__TestOption__write_result_bn"], - [18, "enums::test_enums::__wrapper__TestOption__struct_point"], - [19, "enums::test_enums::__wrapper__TestOption__struct_point2"], - [20, "enums::test_enums::__wrapper__TestOption__struct_Empty"], - [21, "enums::test_enums::__wrapper__TestOption__struct_Cat"], - [22, "enums::test_enums::__wrapper__TestOption__struct_Dog"], - [23, "enums::test_enums::__wrapper__TestOption__struct_Horse"], - [24, "enums::test_enums::__wrapper__TestOption__struct_Truck"], - [25, "enums::test_enums::__wrapper__TestOption__struct_Destruction"], - [26, "enums::test_enums::__wrapper__TestOption__write_struct_point"], + [7, "enums::test_enums::__wrapper__TestOption__option_enum"], + [8, "enums::test_enums::__wrapper__TestOption__array_option_bn"], + [9, "enums::test_enums::__wrapper__TestOption__array_enum"], + [10, "enums::test_enums::__wrapper__TestOption__write_option_bn"], + [11, "enums::test_enums::__wrapper__TestOption__option_point"], + [12, "enums::test_enums::__wrapper__TestOption__result_bn"], + [13, "enums::test_enums::__wrapper__TestOption__result_array"], + [14, "enums::test_enums::__wrapper__TestOption__result_fixed_array"], + [15, "enums::test_enums::__wrapper__TestOption__result_tuple"], + [16, "enums::test_enums::__wrapper__TestOption__result_result_bn"], + [17, "enums::test_enums::__wrapper__TestOption__result_option"], + [18, "enums::test_enums::__wrapper__TestOption__result_struct"], + [19, "enums::test_enums::__wrapper__TestOption__result_enum"], + [20, "enums::test_enums::__wrapper__TestOption__write_result_bn"], + [21, "enums::test_enums::__wrapper__TestOption__struct_point"], + [22, "enums::test_enums::__wrapper__TestOption__struct_point2"], + [23, "enums::test_enums::__wrapper__TestOption__struct_Empty"], + [24, "enums::test_enums::__wrapper__TestOption__struct_Cat"], + [25, "enums::test_enums::__wrapper__TestOption__struct_Dog"], + [26, "enums::test_enums::__wrapper__TestOption__struct_Horse"], + [27, "enums::test_enums::__wrapper__TestOption__struct_Truck"], + [28, "enums::test_enums::__wrapper__TestOption__struct_Destruction"], + [29, "enums::test_enums::__wrapper__TestOption__struct_enum"], + [30, "enums::test_enums::__wrapper__TestOption__write_struct_point"], + [31, "enums::test_enums::__wrapper__TestOption__custom_enum"], + [32, "enums::test_enums::__wrapper__TestOption__write_custom_enum"], [ - 27, + 33, "core::panic_with_const_felt252::<7733229381460288120802334208475838166080759535023995805565484692595>" ], [ - 28, + 34, "core::panic_with_const_felt252::<485748461484230571791265682659113160264223489397539653310998840191492913>" ], - [29, "core::panic_with_const_felt252::<375233589013918064796019>"], + [35, "core::panic_with_const_felt252::<375233589013918064796019>"], [ - 30, + 36, "core::option::OptionSerde::, core::array::ArraySerde::, core::integer::u8Drop>>::deserialize" ], [ - 31, + 37, "core::array::serialize_array_helper::, core::integer::u8Drop>" ], [ - 32, + 38, "core::tuple::DeserializeTupleNext::<[core::integer::u32; 3], core::fixed_size_array::TupleSplitFixedSizedArraySized3::, core::serde::into_felt252_based::SerdeImpl::, core::tuple::DeserializeTupleNext::<[core::integer::u32; 2], core::fixed_size_array::TupleSplitFixedSizedArraySized2::, core::serde::into_felt252_based::SerdeImpl::, core::tuple::DeserializeTupleNext::<[core::integer::u32; 1], core::fixed_size_array::TupleSplitFixedSizedArraySized1::, core::serde::into_felt252_based::SerdeImpl::, core::tuple::DeserializeTupleBaseFixedSizedArray::, core::integer::u32Drop>, core::integer::u32Drop>, core::integer::u32Drop>::deserialize" ], [ - 33, + 39, "core::option::OptionSerde::<(core::integer::u32, core::array::Array::), core::tuple::SerdeTuple::<(core::integer::u32, core::array::Array::), core::tuple::TupleSnapForwardTupleSize2::>, core::tuple::SerializeTupleNext::<(@core::integer::u32, @core::array::Array::), core::tuple::TupleSplitTupleSize2::<@core::integer::u32, @core::array::Array::>, core::tuple::SerdeBasedSerializeTuple::>, core::tuple::SerializeTupleNext::<(@core::array::Array::,), core::tuple::TupleSplitTupleSize1::<@core::array::Array::>, core::tuple::SerdeBasedSerializeTuple::, core::array::ArraySerde::, core::integer::u32Drop>>, core::tuple::SerializeTupleBaseTuple, core::tuple::TupleSize0Drop>, core::tuple::TupleNextDrop::<(@core::array::Array::,), core::tuple::TupleSplitTupleSize1::<@core::array::Array::>, core::tuple::IsTupleTupleSize1::<@core::array::Array::>, core::traits::SnapshotDrop::>, core::tuple::TupleSize0Drop>>, core::tuple::DeserializeTupleNext::<(core::integer::u32, core::array::Array::), core::tuple::TupleSplitTupleSize2::>, core::serde::into_felt252_based::SerdeImpl::, core::tuple::DeserializeTupleNext::<(core::array::Array::,), core::tuple::TupleSplitTupleSize1::>, core::array::ArraySerde::, core::integer::u32Drop>, core::tuple::DeserializeTupleBaseTuple, core::array::ArrayDrop::>, core::integer::u32Drop>>>::deserialize" ], [ - 34, + 40, "core::array::serialize_array_helper::, core::integer::u32Drop>" ], [ - 35, + 41, "core::option::OptionSerde::, core::option::OptionSerde::>>::deserialize" ], [ - 36, + 42, "core::result::ResultSerde::, core::serde::into_felt252_based::SerdeImpl::>::deserialize" ], - [37, "core::option::OptionSerde::::deserialize"], + [43, "core::option::OptionSerde::::deserialize"], + [44, "core::option::OptionSerde::::deserialize"], + [45, "enums::MyEnumSerde::serialize"], [ - 38, + 46, "core::array::deserialize_array_helper::, core::option::OptionSerde::>, core::option::OptionDrop::>" ], [ - 39, + 47, "core::array::serialize_array_helper::, core::option::OptionSerde::>, core::option::OptionDrop::>" ], [ - 40, + 48, + "core::array::deserialize_array_helper::" + ], + [ + 49, + "core::array::serialize_array_helper::" + ], + [ + 50, "core::result::ResultSerde::, core::array::Array::, core::array::ArraySerde::, core::integer::u8Drop>, core::array::ArraySerde::, core::integer::u16Drop>>::deserialize" ], [ - 41, + 51, "core::array::serialize_array_helper::, core::integer::u16Drop>" ], [ - 42, + 52, "core::result::ResultSerde::<[core::integer::u32; 3], [core::integer::u16; 2], core::tuple::SerdeTuple::<[core::integer::u32; 3], core::fixed_size_array::TupleSnapForwardFixedSizedArraySized3::, core::tuple::SerializeTupleNext::<[@core::integer::u32; 3], core::fixed_size_array::TupleSplitFixedSizedArraySized3::<@core::integer::u32>, core::tuple::SerdeBasedSerializeTuple::>, core::tuple::SerializeTupleNext::<[@core::integer::u32; 2], core::fixed_size_array::TupleSplitFixedSizedArraySized2::<@core::integer::u32>, core::tuple::SerdeBasedSerializeTuple::>, core::tuple::SerializeTupleNext::<[@core::integer::u32; 1], core::fixed_size_array::TupleSplitFixedSizedArraySized1::<@core::integer::u32>, core::tuple::SerdeBasedSerializeTuple::>, core::tuple::SerializeTupleBaseFixedSizedArray::, core::fixed_size_array::FixedSizedArrayDrop::<@core::integer::u32, core::traits::SnapshotDrop::, 0>>, core::fixed_size_array::FixedSizedArrayDrop::<@core::integer::u32, core::traits::SnapshotDrop::, 1>>, core::fixed_size_array::FixedSizedArrayDrop::<@core::integer::u32, core::traits::SnapshotDrop::, 2>>, core::tuple::DeserializeTupleNext::<[core::integer::u32; 3], core::fixed_size_array::TupleSplitFixedSizedArraySized3::, core::serde::into_felt252_based::SerdeImpl::, core::tuple::DeserializeTupleNext::<[core::integer::u32; 2], core::fixed_size_array::TupleSplitFixedSizedArraySized2::, core::serde::into_felt252_based::SerdeImpl::, core::tuple::DeserializeTupleNext::<[core::integer::u32; 1], core::fixed_size_array::TupleSplitFixedSizedArraySized1::, core::serde::into_felt252_based::SerdeImpl::, core::tuple::DeserializeTupleBaseFixedSizedArray::, core::integer::u32Drop>, core::integer::u32Drop>, core::integer::u32Drop>>, core::tuple::SerdeTuple::<[core::integer::u16; 2], core::fixed_size_array::TupleSnapForwardFixedSizedArraySized2::, core::tuple::SerializeTupleNext::<[@core::integer::u16; 2], core::fixed_size_array::TupleSplitFixedSizedArraySized2::<@core::integer::u16>, core::tuple::SerdeBasedSerializeTuple::>, core::tuple::SerializeTupleNext::<[@core::integer::u16; 1], core::fixed_size_array::TupleSplitFixedSizedArraySized1::<@core::integer::u16>, core::tuple::SerdeBasedSerializeTuple::>, core::tuple::SerializeTupleBaseFixedSizedArray::, core::fixed_size_array::FixedSizedArrayDrop::<@core::integer::u16, core::traits::SnapshotDrop::, 0>>, core::fixed_size_array::FixedSizedArrayDrop::<@core::integer::u16, core::traits::SnapshotDrop::, 1>>, core::tuple::DeserializeTupleNext::<[core::integer::u16; 2], core::fixed_size_array::TupleSplitFixedSizedArraySized2::, core::serde::into_felt252_based::SerdeImpl::, core::tuple::DeserializeTupleNext::<[core::integer::u16; 1], core::fixed_size_array::TupleSplitFixedSizedArraySized1::, core::serde::into_felt252_based::SerdeImpl::, core::tuple::DeserializeTupleBaseFixedSizedArray::, core::integer::u16Drop>, core::integer::u16Drop>>>::deserialize" ], [ - 43, + 53, "core::result::ResultSerde::<(core::integer::u32, core::array::Array::), (core::integer::u16, core::array::Array::), core::tuple::SerdeTuple::<(core::integer::u32, core::array::Array::), core::tuple::TupleSnapForwardTupleSize2::>, core::tuple::SerializeTupleNext::<(@core::integer::u32, @core::array::Array::), core::tuple::TupleSplitTupleSize2::<@core::integer::u32, @core::array::Array::>, core::tuple::SerdeBasedSerializeTuple::>, core::tuple::SerializeTupleNext::<(@core::array::Array::,), core::tuple::TupleSplitTupleSize1::<@core::array::Array::>, core::tuple::SerdeBasedSerializeTuple::, core::array::ArraySerde::, core::integer::u32Drop>>, core::tuple::SerializeTupleBaseTuple, core::tuple::TupleSize0Drop>, core::tuple::TupleNextDrop::<(@core::array::Array::,), core::tuple::TupleSplitTupleSize1::<@core::array::Array::>, core::tuple::IsTupleTupleSize1::<@core::array::Array::>, core::traits::SnapshotDrop::>, core::tuple::TupleSize0Drop>>, core::tuple::DeserializeTupleNext::<(core::integer::u32, core::array::Array::), core::tuple::TupleSplitTupleSize2::>, core::serde::into_felt252_based::SerdeImpl::, core::tuple::DeserializeTupleNext::<(core::array::Array::,), core::tuple::TupleSplitTupleSize1::>, core::array::ArraySerde::, core::integer::u32Drop>, core::tuple::DeserializeTupleBaseTuple, core::array::ArrayDrop::>, core::integer::u32Drop>>, core::tuple::SerdeTuple::<(core::integer::u16, core::array::Array::), core::tuple::TupleSnapForwardTupleSize2::>, core::tuple::SerializeTupleNext::<(@core::integer::u16, @core::array::Array::), core::tuple::TupleSplitTupleSize2::<@core::integer::u16, @core::array::Array::>, core::tuple::SerdeBasedSerializeTuple::>, core::tuple::SerializeTupleNext::<(@core::array::Array::,), core::tuple::TupleSplitTupleSize1::<@core::array::Array::>, core::tuple::SerdeBasedSerializeTuple::, core::array::ArraySerde::, core::integer::u16Drop>>, core::tuple::SerializeTupleBaseTuple, core::tuple::TupleSize0Drop>, core::tuple::TupleNextDrop::<(@core::array::Array::,), core::tuple::TupleSplitTupleSize1::<@core::array::Array::>, core::tuple::IsTupleTupleSize1::<@core::array::Array::>, core::traits::SnapshotDrop::>, core::tuple::TupleSize0Drop>>, core::tuple::DeserializeTupleNext::<(core::integer::u16, core::array::Array::), core::tuple::TupleSplitTupleSize2::>, core::serde::into_felt252_based::SerdeImpl::, core::tuple::DeserializeTupleNext::<(core::array::Array::,), core::tuple::TupleSplitTupleSize1::>, core::array::ArraySerde::, core::integer::u16Drop>, core::tuple::DeserializeTupleBaseTuple, core::array::ArrayDrop::>, core::integer::u16Drop>>>::deserialize" ], [ - 44, + 54, "core::result::ResultSerde::, core::integer::u32, core::result::ResultSerde::, core::serde::into_felt252_based::SerdeImpl::>, core::serde::into_felt252_based::SerdeImpl::>::deserialize" ], [ - 45, + 55, "core::result::ResultSerde::, core::serde::into_felt252_based::SerdeImpl::, core::option::OptionSerde::>>::deserialize" ], [ - 46, + 56, "core::result::ResultSerde::, enums::PointSerde>::deserialize" ], - [47, "enums::Point2Serde::deserialize"], - [48, "enums::CatSerde::deserialize"], - [49, "enums::DogSerde::deserialize"], - [50, "enums::HorseSerde::deserialize"], - [51, "enums::TruckSerde::deserialize"], [ - 52, + 57, + "core::result::ResultSerde::, enums::MyEnumSerde>::deserialize" + ], + [58, "enums::Point2Serde::deserialize"], + [59, "enums::CatSerde::deserialize"], + [60, "enums::DogSerde::deserialize"], + [61, "enums::HorseSerde::deserialize"], + [62, "enums::TruckSerde::deserialize"], + [ + 63, "core::result::ResultSerde::, core::serde::into_felt252_based::SerdeImpl::>::deserialize" ], - [53, "core::panic_with_felt252"], + [64, "enums::ExecutionReportSerde::deserialize"], + [65, "enums::MyEnumSerde::deserialize"], + [66, "core::panic_with_felt252"], [ - 54, + 67, "core::array::deserialize_array_helper::, core::integer::u8Drop>" ], [ - 55, + 68, "core::tuple::DeserializeTupleNext::<(core::integer::u32, core::array::Array::), core::tuple::TupleSplitTupleSize2::>, core::serde::into_felt252_based::SerdeImpl::, core::tuple::DeserializeTupleNext::<(core::array::Array::,), core::tuple::TupleSplitTupleSize1::>, core::array::ArraySerde::, core::integer::u32Drop>, core::tuple::DeserializeTupleBaseTuple, core::array::ArrayDrop::>, core::integer::u32Drop>::deserialize" ], [ - 56, + 69, + "core::array::serialize_array_helper::" + ], + [ + 70, "core::array::deserialize_array_helper::, core::integer::u16Drop>" ], [ - 57, + 71, "core::tuple::DeserializeTupleNext::<(core::integer::u16, core::array::Array::), core::tuple::TupleSplitTupleSize2::>, core::serde::into_felt252_based::SerdeImpl::, core::tuple::DeserializeTupleNext::<(core::array::Array::,), core::tuple::TupleSplitTupleSize1::>, core::array::ArraySerde::, core::integer::u16Drop>, core::tuple::DeserializeTupleBaseTuple, core::array::ArrayDrop::>, core::integer::u16Drop>::deserialize" ], [ - 58, + 72, "core::tuple::DeserializeTupleNext::<(core::integer::u16, core::integer::u32, core::integer::u64), core::tuple::TupleSplitTupleSize3::, core::serde::into_felt252_based::SerdeImpl::, core::tuple::DeserializeTupleNext::<(core::integer::u32, core::integer::u64), core::tuple::TupleSplitTupleSize2::, core::serde::into_felt252_based::SerdeImpl::, core::tuple::DeserializeTupleNext::<(core::integer::u64,), core::tuple::TupleSplitTupleSize1::, core::serde::into_felt252_based::SerdeImpl::, core::tuple::DeserializeTupleBaseTuple, core::integer::u64Drop>, core::integer::u32Drop>, core::integer::u16Drop>::deserialize" ], [ - 59, + 73, "core::array::deserialize_array_helper::, core::integer::u32Drop>" ], [ - 60, + 74, "core::tuple::DeserializeTupleNext::<[core::integer::u16; 3], core::fixed_size_array::TupleSplitFixedSizedArraySized3::, core::serde::into_felt252_based::SerdeImpl::, core::tuple::DeserializeTupleNext::<[core::integer::u16; 2], core::fixed_size_array::TupleSplitFixedSizedArraySized2::, core::serde::into_felt252_based::SerdeImpl::, core::tuple::DeserializeTupleNext::<[core::integer::u16; 1], core::fixed_size_array::TupleSplitFixedSizedArraySized1::, core::serde::into_felt252_based::SerdeImpl::, core::tuple::DeserializeTupleBaseFixedSizedArray::, core::integer::u16Drop>, core::integer::u16Drop>, core::integer::u16Drop>::deserialize" + ], + [75, "enums::StatusEnumSerde::deserialize"], + [ + 76, + "core::array::deserialize_array_helper::" + ], + [ + 77, + "core::result::ResultSerde::, core::serde::into_felt252_based::SerdeImpl::>::deserialize" ] ] }, @@ -4524,7 +6070,7 @@ }, { "selector": "0x1feb29d0d6e8c4ba7a71db4cdaa24898ddd8bb350e724f844145997afee9c9", - "function_idx": 21 + "function_idx": 24 }, { "selector": "0x78664aa9f94155a6e6acf3aa0add2ce6fcf36349488671af774d676363e0c7", @@ -4532,59 +6078,67 @@ }, { "selector": "0xc5c709a3ffed9c578aa6ee00ce77e78a490d2c8aa971d1f6ccdd662da6f17b", - "function_idx": 16 + "function_idx": 18 }, { "selector": "0xe1eafdb08801cfc555a49e25dabfd7aa4ed7b2dd5c7e2c5a6930eac6d1b54c", - "function_idx": 19 + "function_idx": 22 }, { "selector": "0x106f418ef7e2ea39027bcde47d5f0a54ed68fe34aa69b24c3a162def52a841b", - "function_idx": 14 + "function_idx": 16 + }, + { + "selector": "0x11e332cf3fdb4f58a72be710217fdd238834524d13dae1c6131f3206b7c329a", + "function_idx": 31 }, { "selector": "0x11fdea672ded06956bdd64d89fd111661735e88595f88c1199f648fe3c2dd15", - "function_idx": 22 + "function_idx": 25 }, { "selector": "0x126587e6b203b756642ff0bd9f92e84ef609cf2a02b516fbf2d94f36a73b83e", - "function_idx": 7 + "function_idx": 8 }, { "selector": "0x1303ef00936936490ad20afec7fbe2bf74669665b2a2249945ff561debad733", - "function_idx": 8 + "function_idx": 10 }, { "selector": "0x13d3b1aae5fa65a483db7c67c98dca6aac27353970caa114d112c4b6de8ec73", - "function_idx": 12 + "function_idx": 14 }, { "selector": "0x145f0cd3e37db4233ce4d6b84935d9b32387d72eb53713e78e2ec56cc6fdf5d", - "function_idx": 18 + "function_idx": 21 }, { "selector": "0x147c0b24e5bfb625956c5a44d3fc84d509b789bf2e5335365c03b9be2d757d3", - "function_idx": 17 + "function_idx": 20 }, { "selector": "0x1785e0d94a5ba07a47865d69afdf914dad65466b25d38cb78cb741fac447ba8", - "function_idx": 24 + "function_idx": 27 }, { "selector": "0x1c7564da2ac3c0ee05570d52004d51604c5315131cafd67610b2e629bf4fd7c", - "function_idx": 15 + "function_idx": 17 }, { "selector": "0x1d39fadfe7e2621092d7d0a467672f0eb0ad03c5926829d40ceefa7bcd10b80", - "function_idx": 25 + "function_idx": 28 }, { "selector": "0x1ff9f9a5d04b7955383039cae30cd6c0d1cb3c0e04a579f393a7ac9cf39c7b3", "function_idx": 5 }, + { + "selector": "0x202cff97d5b709d201beabe103b284f8595094a25620c72dbbcb57d814d62fb", + "function_idx": 9 + }, { "selector": "0x208b88c80fabc1b03f3c78a09aaa1a693a5bb1366271a1c6b9e7971aa325116", - "function_idx": 20 + "function_idx": 23 }, { "selector": "0x21b020335325fcef65a03b765adaefcc9fb4eccceb8e0293516736095e8cceb", @@ -4594,33 +6148,49 @@ "selector": "0x242ba12536f9ac18cffcedd5588e2922a17c0f453a064a64e62df6d3f6f8dce", "function_idx": 4 }, + { + "selector": "0x24793ea78a1f64b05c541f9e92f63fa2a71ddb3a23e9ff16aac9ed7d178fa66", + "function_idx": 7 + }, + { + "selector": "0x24ee851566f42b478860ca46d2543852ef11c919efc4e114db8829520728305", + "function_idx": 19 + }, { "selector": "0x265cf503e1b425e68026a65eb872306eb863eb6ba526cddc50fd44d00d8e180", "function_idx": 0 }, + { + "selector": "0x284a2ddea630469ba82b6fbced35fa12c6504de7b50af7cda84bedbaae5e521", + "function_idx": 32 + }, { "selector": "0x29a68d48876fa0d864a616e212175e42824be1cdcb35bcd2e05b302042e491f", - "function_idx": 9 + "function_idx": 11 + }, + { + "selector": "0x2bf962c6ef0f8dddc516426e31a25831c882b7a1a5a47f2716a3d4403c5894c", + "function_idx": 29 }, { "selector": "0x31c18e21d8e75a5f2f6f1330c56da1f8b2fd93568002ef0d15bcce9c5644c2b", - "function_idx": 11 + "function_idx": 13 }, { "selector": "0x36d666ce4d4c894d5dcb35a06bb6ca9659358f5e9d7fe07519e7531ef44a6e2", - "function_idx": 26 + "function_idx": 30 }, { "selector": "0x36e432757f2854d382b66d849ed9a3edf35fdbf55a7c83296142cf7b89b0573", - "function_idx": 13 + "function_idx": 15 }, { "selector": "0x3bb1cf9f6b291f5c63c8ecbfcf8cd522642fdc7ec277c2fddb7dc069cd05ced", - "function_idx": 23 + "function_idx": 26 }, { "selector": "0x3c694eba4d500b140694d8f7da3f85031f4d4827b57da58cb5f2bd1ab74e5ab", - "function_idx": 10 + "function_idx": 12 }, { "selector": "0x3dbc7f289caba706d06644803f1db94983f3b8d8af334bfbf346aaa1b711d0c", @@ -4631,51 +6201,29 @@ "CONSTRUCTOR": [] }, "abi": [ - { - "type": "impl", - "name": "TestOption", - "interface_name": "enums::ITestOption" - }, + { "type": "impl", "name": "TestOption", "interface_name": "enums::ITestOption" }, { "type": "enum", "name": "core::option::Option::", "variants": [ - { - "name": "Some", - "type": "core::integer::u16" - }, - { - "name": "None", - "type": "()" - } + { "name": "Some", "type": "core::integer::u16" }, + { "name": "None", "type": "()" } ] }, { "type": "enum", "name": "core::option::Option::>", "variants": [ - { - "name": "Some", - "type": "core::array::Array::" - }, - { - "name": "None", - "type": "()" - } + { "name": "Some", "type": "core::array::Array::" }, + { "name": "None", "type": "()" } ] }, { "type": "enum", "name": "core::option::Option::<[core::integer::u32; 3]>", "variants": [ - { - "name": "Some", - "type": "[core::integer::u32; 3]" - }, - { - "name": "None", - "type": "()" - } + { "name": "Some", "type": "[core::integer::u32; 3]" }, + { "name": "None", "type": "()" } ] }, { @@ -4686,207 +6234,191 @@ "name": "Some", "type": "(core::integer::u32, core::array::Array::)" }, - { - "name": "None", - "type": "()" - } + { "name": "None", "type": "()" } ] }, { "type": "enum", "name": "core::option::Option::>", "variants": [ - { - "name": "Some", - "type": "core::option::Option::" - }, - { - "name": "None", - "type": "()" - } + { "name": "Some", "type": "core::option::Option::" }, + { "name": "None", "type": "()" } ] }, { "type": "enum", "name": "core::result::Result::", "variants": [ - { - "name": "Ok", - "type": "core::integer::u8" - }, - { - "name": "Err", - "type": "core::integer::u16" - } + { "name": "Ok", "type": "core::integer::u8" }, + { "name": "Err", "type": "core::integer::u16" } ] }, { "type": "enum", "name": "core::option::Option::>", "variants": [ - { - "name": "Some", - "type": "core::result::Result::" - }, - { - "name": "None", - "type": "()" - } + { "name": "Some", "type": "core::result::Result::" }, + { "name": "None", "type": "()" } ] }, { "type": "struct", "name": "enums::Point", "members": [ - { - "name": "x", - "type": "core::integer::u64" - }, - { - "name": "y", - "type": "core::integer::u32" - } + { "name": "x", "type": "core::integer::u64" }, + { "name": "y", "type": "core::integer::u32" } ] }, { "type": "enum", "name": "core::option::Option::", "variants": [ - { - "name": "Some", - "type": "enums::Point" - }, - { - "name": "None", - "type": "()" - } + { "name": "Some", "type": "enums::Point" }, + { "name": "None", "type": "()" } ] }, { "type": "enum", - "name": "core::result::Result::, core::array::Array::>", + "name": "enums::StatusEnum", + "variants": [ + { "name": "Success", "type": "(core::integer::u64, core::integer::u32)" }, + { "name": "NoAnswer", "type": "()" }, + { "name": "Error", "type": "()" } + ] + }, + { + "type": "struct", + "name": "core::integer::u256", + "members": [ + { "name": "low", "type": "core::integer::u128" }, + { "name": "high", "type": "core::integer::u128" } + ] + }, + { + "type": "struct", + "name": "core::array::Span::", + "members": [{ "name": "snapshot", "type": "@core::array::Array::" }] + }, + { + "type": "enum", + "name": "core::option::Option::", + "variants": [ + { "name": "Some", "type": "core::integer::u8" }, + { "name": "None", "type": "()" } + ] + }, + { + "type": "enum", + "name": "core::result::Result::", + "variants": [ + { "name": "Ok", "type": "core::integer::u32" }, + { "name": "Err", "type": "core::integer::u64" } + ] + }, + { + "type": "enum", + "name": "enums::MyEnum", "variants": [ + { "name": "Success", "type": "core::integer::u8" }, + { "name": "LocationError", "type": "enums::Point" }, + { "name": "Status", "type": "enums::StatusEnum" }, + { "name": "TwoErrors", "type": "[core::integer::u32; 2]" }, + { "name": "ErrorList", "type": "core::array::Span::" }, + { "name": "Parents", "type": "(core::integer::u64, core::integer::u128)" }, + { "name": "Damage", "type": "core::option::Option::" }, { - "name": "Ok", - "type": "core::array::Array::" + "name": "Report", + "type": "core::result::Result::" }, - { - "name": "Err", - "type": "core::array::Array::" - } + { "name": "Empty", "type": "()" } + ] + }, + { + "type": "enum", + "name": "core::option::Option::", + "variants": [ + { "name": "Some", "type": "enums::MyEnum" }, + { "name": "None", "type": "()" } + ] + }, + { + "type": "enum", + "name": "core::result::Result::, core::array::Array::>", + "variants": [ + { "name": "Ok", "type": "core::array::Array::" }, + { "name": "Err", "type": "core::array::Array::" } ] }, { "type": "enum", "name": "core::result::Result::<[core::integer::u32; 3], [core::integer::u16; 2]>", "variants": [ - { - "name": "Ok", - "type": "[core::integer::u32; 3]" - }, - { - "name": "Err", - "type": "[core::integer::u16; 2]" - } + { "name": "Ok", "type": "[core::integer::u32; 3]" }, + { "name": "Err", "type": "[core::integer::u16; 2]" } ] }, { "type": "enum", "name": "core::result::Result::<(core::integer::u32, core::array::Array::), (core::integer::u16, core::array::Array::)>", "variants": [ - { - "name": "Ok", - "type": "(core::integer::u32, core::array::Array::)" - }, - { - "name": "Err", - "type": "(core::integer::u16, core::array::Array::)" - } + { "name": "Ok", "type": "(core::integer::u32, core::array::Array::)" }, + { "name": "Err", "type": "(core::integer::u16, core::array::Array::)" } ] }, { "type": "enum", "name": "core::result::Result::, core::integer::u32>", "variants": [ - { - "name": "Ok", - "type": "core::result::Result::" - }, - { - "name": "Err", - "type": "core::integer::u32" - } + { "name": "Ok", "type": "core::result::Result::" }, + { "name": "Err", "type": "core::integer::u32" } ] }, { "type": "enum", "name": "core::option::Option::", "variants": [ - { - "name": "Some", - "type": "core::integer::u32" - }, - { - "name": "None", - "type": "()" - } + { "name": "Some", "type": "core::integer::u32" }, + { "name": "None", "type": "()" } ] }, { "type": "enum", "name": "core::result::Result::>", "variants": [ - { - "name": "Ok", - "type": "core::integer::u8" - }, - { - "name": "Err", - "type": "core::option::Option::" - } + { "name": "Ok", "type": "core::integer::u8" }, + { "name": "Err", "type": "core::option::Option::" } ] }, { "type": "enum", "name": "core::result::Result::", "variants": [ - { - "name": "Ok", - "type": "core::integer::u8" - }, - { - "name": "Err", - "type": "enums::Point" - } + { "name": "Ok", "type": "core::integer::u8" }, + { "name": "Err", "type": "enums::Point" } ] }, { - "type": "struct", - "name": "enums::Point2", - "members": [ - { - "name": "thickness", - "type": "core::integer::u64" - }, - { - "name": "location", - "type": "enums::Point" - } + "type": "enum", + "name": "core::result::Result::", + "variants": [ + { "name": "Ok", "type": "core::integer::u8" }, + { "name": "Err", "type": "enums::MyEnum" } ] }, { "type": "struct", - "name": "enums::Empty", - "members": [] + "name": "enums::Point2", + "members": [ + { "name": "thickness", "type": "core::integer::u64" }, + { "name": "location", "type": "enums::Point" } + ] }, + { "type": "struct", "name": "enums::Empty", "members": [] }, { "type": "struct", "name": "enums::Cat", "members": [ - { - "name": "age", - "type": "core::integer::u16" - }, + { "name": "age", "type": "core::integer::u16" }, { "name": "legs", "type": "(core::integer::u8, core::integer::u16, core::integer::u32, core::integer::u64)" @@ -4896,95 +6428,54 @@ { "type": "struct", "name": "core::array::Span::", - "members": [ - { - "name": "snapshot", - "type": "@core::array::Array::" - } - ] + "members": [{ "name": "snapshot", "type": "@core::array::Array::" }] }, { "type": "struct", "name": "enums::Dog", "members": [ - { - "name": "age", - "type": "core::integer::u16" - }, - { - "name": "colors", - "type": "core::array::Span::" - } + { "name": "age", "type": "core::integer::u16" }, + { "name": "colors", "type": "core::array::Span::" } ] }, { "type": "struct", "name": "enums::Horse", "members": [ - { - "name": "age", - "type": "core::integer::u16" - }, - { - "name": "legs_color", - "type": "[core::integer::u16; 4]" - } - ] - }, - { - "type": "enum", - "name": "core::option::Option::", - "variants": [ - { - "name": "Some", - "type": "core::integer::u8" - }, - { - "name": "None", - "type": "()" - } + { "name": "age", "type": "core::integer::u16" }, + { "name": "legs_color", "type": "[core::integer::u16; 4]" } ] }, { "type": "struct", "name": "enums::Truck", "members": [ - { - "name": "power", - "type": "core::integer::u32" - }, - { - "name": "turbo", - "type": "core::option::Option::" - } + { "name": "power", "type": "core::integer::u32" }, + { "name": "turbo", "type": "core::option::Option::" } ] }, { "type": "enum", "name": "core::result::Result::", "variants": [ - { - "name": "Ok", - "type": "core::integer::u8" - }, - { - "name": "Err", - "type": "core::integer::u64" - } + { "name": "Ok", "type": "core::integer::u8" }, + { "name": "Err", "type": "core::integer::u64" } ] }, { "type": "struct", "name": "enums::Destruction", "members": [ - { - "name": "area", - "type": "core::integer::u128" - }, - { - "name": "res", - "type": "core::result::Result::" - } + { "name": "area", "type": "core::integer::u128" }, + { "name": "res", "type": "core::result::Result::" } + ] + }, + { + "type": "struct", + "name": "enums::ExecutionReport", + "members": [ + { "name": "message", "type": "enums::MyEnum" }, + { "name": "description", "type": "core::bytes_31::bytes31" } ] }, { @@ -4994,17 +6485,8 @@ { "type": "function", "name": "option_bn", - "inputs": [ - { - "name": "x", - "type": "core::option::Option::" - } - ], - "outputs": [ - { - "type": "core::option::Option::" - } - ], + "inputs": [{ "name": "x", "type": "core::option::Option::" }], + "outputs": [{ "type": "core::option::Option::" }], "state_mutability": "view" }, { @@ -5017,26 +6499,15 @@ } ], "outputs": [ - { - "type": "core::option::Option::>" - } + { "type": "core::option::Option::>" } ], "state_mutability": "view" }, { "type": "function", "name": "option_fixed_array", - "inputs": [ - { - "name": "x", - "type": "core::option::Option::<[core::integer::u32; 3]>" - } - ], - "outputs": [ - { - "type": "core::option::Option::<[core::integer::u32; 3]>" - } - ], + "inputs": [{ "name": "x", "type": "core::option::Option::<[core::integer::u32; 3]>" }], + "outputs": [{ "type": "core::option::Option::<[core::integer::u32; 3]>" }], "state_mutability": "view" }, { @@ -5065,9 +6536,7 @@ } ], "outputs": [ - { - "type": "core::option::Option::>" - } + { "type": "core::option::Option::>" } ], "state_mutability": "view" }, @@ -5090,17 +6559,15 @@ { "type": "function", "name": "option_struct", - "inputs": [ - { - "name": "x", - "type": "core::option::Option::" - } - ], - "outputs": [ - { - "type": "core::option::Option::" - } - ], + "inputs": [{ "name": "x", "type": "core::option::Option::" }], + "outputs": [{ "type": "core::option::Option::" }], + "state_mutability": "view" + }, + { + "type": "function", + "name": "option_enum", + "inputs": [{ "name": "x", "type": "core::option::Option::" }], + "outputs": [{ "type": "core::option::Option::" }], "state_mutability": "view" }, { @@ -5113,54 +6580,38 @@ } ], "outputs": [ - { - "type": "core::array::Array::>" - } + { "type": "core::array::Array::>" } ], "state_mutability": "view" }, + { + "type": "function", + "name": "array_enum", + "inputs": [{ "name": "x", "type": "core::array::Array::" }], + "outputs": [{ "type": "core::array::Array::" }], + "state_mutability": "view" + }, { "type": "function", "name": "write_option_bn", - "inputs": [ - { - "name": "x", - "type": "core::option::Option::" - } - ], + "inputs": [{ "name": "x", "type": "core::option::Option::" }], "outputs": [], "state_mutability": "external" }, { "type": "function", "name": "option_point", - "inputs": [ - { - "name": "x", - "type": "core::option::Option::" - } - ], - "outputs": [ - { - "type": "core::option::Option::" - } - ], + "inputs": [{ "name": "x", "type": "core::option::Option::" }], + "outputs": [{ "type": "core::option::Option::" }], "state_mutability": "view" }, { "type": "function", "name": "result_bn", "inputs": [ - { - "name": "x", - "type": "core::result::Result::" - } - ], - "outputs": [ - { - "type": "core::result::Result::" - } + { "name": "x", "type": "core::result::Result::" } ], + "outputs": [{ "type": "core::result::Result::" }], "state_mutability": "view" }, { @@ -5189,9 +6640,7 @@ } ], "outputs": [ - { - "type": "core::result::Result::<[core::integer::u32; 3], [core::integer::u16; 2]>" - } + { "type": "core::result::Result::<[core::integer::u32; 3], [core::integer::u16; 2]>" } ], "state_mutability": "view" }, @@ -5247,26 +6696,25 @@ "type": "function", "name": "result_struct", "inputs": [ - { - "name": "x", - "type": "core::result::Result::" - } + { "name": "x", "type": "core::result::Result::" } ], - "outputs": [ - { - "type": "core::result::Result::" - } + "outputs": [{ "type": "core::result::Result::" }], + "state_mutability": "view" + }, + { + "type": "function", + "name": "result_enum", + "inputs": [ + { "name": "x", "type": "core::result::Result::" } ], + "outputs": [{ "type": "core::result::Result::" }], "state_mutability": "view" }, { "type": "function", "name": "write_result_bn", "inputs": [ - { - "name": "x", - "type": "core::result::Result::" - } + { "name": "x", "type": "core::result::Result::" } ], "outputs": [], "state_mutability": "external" @@ -5274,150 +6722,89 @@ { "type": "function", "name": "struct_point", - "inputs": [ - { - "name": "x", - "type": "enums::Point" - } - ], - "outputs": [ - { - "type": "enums::Point" - } - ], + "inputs": [{ "name": "x", "type": "enums::Point" }], + "outputs": [{ "type": "enums::Point" }], "state_mutability": "view" }, { "type": "function", "name": "struct_point2", - "inputs": [ - { - "name": "x", - "type": "enums::Point2" - } - ], - "outputs": [ - { - "type": "enums::Point2" - } - ], + "inputs": [{ "name": "x", "type": "enums::Point2" }], + "outputs": [{ "type": "enums::Point2" }], "state_mutability": "view" }, { "type": "function", "name": "struct_Empty", - "inputs": [ - { - "name": "x", - "type": "enums::Empty" - } - ], - "outputs": [ - { - "type": "enums::Empty" - } - ], + "inputs": [{ "name": "x", "type": "enums::Empty" }], + "outputs": [{ "type": "enums::Empty" }], "state_mutability": "view" }, { "type": "function", "name": "struct_Cat", - "inputs": [ - { - "name": "x", - "type": "enums::Cat" - } - ], - "outputs": [ - { - "type": "enums::Cat" - } - ], + "inputs": [{ "name": "x", "type": "enums::Cat" }], + "outputs": [{ "type": "enums::Cat" }], "state_mutability": "view" }, { "type": "function", "name": "struct_Dog", - "inputs": [ - { - "name": "x", - "type": "enums::Dog" - } - ], - "outputs": [ - { - "type": "enums::Dog" - } - ], + "inputs": [{ "name": "x", "type": "enums::Dog" }], + "outputs": [{ "type": "enums::Dog" }], "state_mutability": "view" }, { "type": "function", "name": "struct_Horse", - "inputs": [ - { - "name": "x", - "type": "enums::Horse" - } - ], - "outputs": [ - { - "type": "enums::Horse" - } - ], + "inputs": [{ "name": "x", "type": "enums::Horse" }], + "outputs": [{ "type": "enums::Horse" }], "state_mutability": "view" }, { "type": "function", "name": "struct_Truck", - "inputs": [ - { - "name": "x", - "type": "enums::Truck" - } - ], - "outputs": [ - { - "type": "enums::Truck" - } - ], + "inputs": [{ "name": "x", "type": "enums::Truck" }], + "outputs": [{ "type": "enums::Truck" }], "state_mutability": "view" }, { "type": "function", "name": "struct_Destruction", - "inputs": [ - { - "name": "x", - "type": "enums::Destruction" - } - ], - "outputs": [ - { - "type": "enums::Destruction" - } - ], + "inputs": [{ "name": "x", "type": "enums::Destruction" }], + "outputs": [{ "type": "enums::Destruction" }], + "state_mutability": "view" + }, + { + "type": "function", + "name": "struct_enum", + "inputs": [{ "name": "x", "type": "enums::ExecutionReport" }], + "outputs": [{ "type": "enums::ExecutionReport" }], "state_mutability": "view" }, { "type": "function", "name": "write_struct_point", - "inputs": [ - { - "name": "x", - "type": "enums::Point" - } - ], + "inputs": [{ "name": "x", "type": "enums::Point" }], + "outputs": [], + "state_mutability": "external" + }, + { + "type": "function", + "name": "custom_enum", + "inputs": [{ "name": "x", "type": "enums::MyEnum" }], + "outputs": [{ "type": "enums::MyEnum" }], + "state_mutability": "view" + }, + { + "type": "function", + "name": "write_custom_enum", + "inputs": [{ "name": "x", "type": "enums::MyEnum" }], "outputs": [], "state_mutability": "external" } ] }, - { - "type": "event", - "name": "enums::test_enums::Event", - "kind": "enum", - "variants": [] - } + { "type": "event", "name": "enums::test_enums::Event", "kind": "enum", "variants": [] } ] } diff --git a/__tests__/utils/cairoDataTypes/CairoStruct.test.ts b/__tests__/utils/cairoDataTypes/CairoStruct.test.ts index 5ef4b3b4e..14deb5b3c 100644 --- a/__tests__/utils/cairoDataTypes/CairoStruct.test.ts +++ b/__tests__/utils/cairoDataTypes/CairoStruct.test.ts @@ -21,14 +21,14 @@ describe('CairoStruct', () => { const myCallData = new CallData(contracts.TestCairoType.sierra.abi); const strategies = myCallData.parser.parsingStrategies as ParsingStrategy[]; const abiPoint: AbiStruct = contracts.TestCairoType.sierra.abi.find( - (item) => item.name === 'test_enums::Point' + (item) => item.name === 'enums::Point' ); const abiCat: AbiStruct = contracts.TestCairoType.sierra.abi.find( - (item) => item.name === 'test_enums::Cat' + (item) => item.name === 'enums::Cat' ); describe('constructor variant', () => { test('content is an object', () => { - const myCairoStruct = new CairoStruct({ x: 1, y: 2 }, abiPoint, strategies); + const myCairoStruct = new CairoStruct({ y: 2, x: 1 }, abiPoint, strategies); // wrong order of properties expect(myCairoStruct.toApiRequest()).toEqual(['0x1', '0x2']); expect(myCairoStruct.decompose(strategies)).toEqual({ x: 1n, y: 2n }); }); @@ -88,7 +88,7 @@ describe('CairoStruct', () => { test('CairoType: result of an array', () => { const abiDog: AbiStruct = contracts.TestCairoType.sierra.abi.find( - (item) => item.name === 'test_enums::Dog' + (item) => item.name === 'enums::Dog' ); const myStruct0 = new CairoStruct({ age: 2, colors: [1, 2, 3] }, abiDog, strategies); const myStruct1 = new CairoStruct( @@ -111,7 +111,7 @@ describe('CairoStruct', () => { test('CairoType: result of a fixed array', () => { const abiHorse: AbiStruct = contracts.TestCairoType.sierra.abi.find( - (item) => item.name === 'test_enums::Horse' + (item) => item.name === 'enums::Horse' ); const myResult0 = new CairoStruct({ age: 2, legs_color: [1, 2, 3, 4] }, abiHorse, strategies); const myResult1 = new CairoStruct( @@ -162,7 +162,7 @@ describe('CairoStruct', () => { test('CairoType: result of an option', () => { const abiTruck: AbiStruct = contracts.TestCairoType.sierra.abi.find( - (item) => item.name === 'test_enums::Truck' + (item) => item.name === 'enums::Truck' ); const option0 = new CairoOption(CairoOptionVariant.Some, 2n); const myTypeOption = new CairoTypeOption( @@ -181,7 +181,7 @@ describe('CairoStruct', () => { test('CairoType: result from a result', () => { const abiDestruction: AbiStruct = contracts.TestCairoType.sierra.abi.find( - (item) => item.name === 'test_enums::Destruction' + (item) => item.name === 'enums::Destruction' ); const result = new CairoResult(CairoResultVariant.Err, 5n); const typeResult = new CairoTypeResult( @@ -199,7 +199,7 @@ describe('CairoStruct', () => { test('CairoType: nested structs', () => { const abiPoint2: AbiStruct = contracts.TestCairoType.sierra.abi.find( - (item) => item.name === 'test_enums::Point2' + (item) => item.name === 'enums::Point2' ); const point1 = { x: 1, y: 2 }; const structPoint1 = new CairoStruct(point1, abiPoint, strategies); @@ -254,7 +254,7 @@ describe('CairoStruct', () => { test('should copy properties when constructed from another CairoStruct', () => { const original = new CairoStruct({ x: 1, y: 2 }, abiPoint, strategies); const abiPoint2: AbiStruct = contracts.TestCairoType.sierra.abi.find( - (item) => item.name === 'test_enums::Point2' + (item) => item.name === 'enums::Point2' ); const copy = new CairoStruct(original, abiPoint2, strategies); expect(copy.content).toEqual(original.content); diff --git a/__tests__/utils/cairoDataTypes/CairoTuple.test.ts b/__tests__/utils/cairoDataTypes/CairoTuple.test.ts index 30b5a50a8..8f74090a4 100644 --- a/__tests__/utils/cairoDataTypes/CairoTuple.test.ts +++ b/__tests__/utils/cairoDataTypes/CairoTuple.test.ts @@ -23,6 +23,10 @@ describe('CairoTuple class Unit test', () => { 'core::integer::u8', 'core::integer::u32', ]); + // missing space + expect(() => { + CairoTuple.getTupleElementTypes('(core::integer::u8,core::integer::u32)'); + }).toThrow(new Error('abc')); expect(CairoTuple.isAbiType('(core::integer::u8, core::integer::u32)')).toBe(true); expect(CairoTuple.isAbiType('(x:felt, y:felt)')).toBe(true); expect(CairoTuple.isAbiType('[core::integer::u8; 2]')).toBe(false); diff --git a/__tests__/utils/calldata/enum/CairoResult.test copy.ts b/__tests__/utils/calldata/enum/CairoResult.test copy.ts new file mode 100644 index 000000000..a039e5d28 --- /dev/null +++ b/__tests__/utils/calldata/enum/CairoResult.test copy.ts @@ -0,0 +1,49 @@ +import { CairoResult } from '../../../../src/utils/calldata/enum'; + +describe('CairoResult', () => { + describe('constructor', () => { + test('should set "Ok" if variant is 0', () => { + const cairoResult = new CairoResult(0, 'result_content'); + expect(cairoResult.Ok).toEqual('result_content'); + expect(cairoResult.Err).toBeUndefined(); + }); + + test('should set "Err" if variant is 1', () => { + const cairoResult = new CairoResult(1, 'result_content'); + expect(cairoResult.Err).toEqual('result_content'); + expect(cairoResult.Ok).toBeUndefined(); + }); + + test('should throw an error if wrong variant is provided', () => { + expect(() => new CairoResult(2, 'result_content')).toThrow( + new Error('Wrong variant! It should be CairoResultVariant.Ok or .Err.') + ); + }); + }); + + describe('unwrap', () => { + test('should return "Ok" value', () => { + const cairoResult = new CairoResult(0, 'result_content'); + expect(cairoResult.unwrap()).toEqual('result_content'); + }); + + test('should return "Err" value', () => { + const cairoResult = new CairoResult(1, 'result_content'); + expect(cairoResult.unwrap()).toEqual('result_content'); + }); + }); + + describe('isOk', () => { + test('should return true if "Ok" value is set', () => { + const cairoResult = new CairoResult(0, 'result_content'); + expect(cairoResult.isOk()).toEqual(true); + }); + }); + + describe('isErr', () => { + test('should return true if "Err" value is set', () => { + const cairoResult = new CairoResult(1, 'result_content'); + expect(cairoResult.isErr()).toEqual(true); + }); + }); +}); diff --git a/__tests__/utils/calldata/enum/CairoTypeResult.test.ts b/__tests__/utils/calldata/enum/CairoTypeResult.test.ts index 2c8095218..a10589a12 100644 --- a/__tests__/utils/calldata/enum/CairoTypeResult.test.ts +++ b/__tests__/utils/calldata/enum/CairoTypeResult.test.ts @@ -302,7 +302,7 @@ describe('CairoTypeResult', () => { ) ).toThrow( new Error( - '"variant" parameter is mandatory when creating a new Cairo Result from a CairoOption.' + '"variant" parameter is mandatory when creating a new Cairo Result from a Cairo Enum or raw data.' ) ); }); diff --git a/__tests__/utils/calldata/requestParser.test.ts b/__tests__/utils/calldata/requestParser.test.ts index 4c006d0c6..3cf598fad 100644 --- a/__tests__/utils/calldata/requestParser.test.ts +++ b/__tests__/utils/calldata/requestParser.test.ts @@ -8,6 +8,7 @@ import { ETH_ADDRESS, hdParsingStrategy, NON_ZERO_PREFIX, + type AbiEntry, } from '../../../src'; describe('requestParser', () => { @@ -30,7 +31,7 @@ describe('requestParser', () => { const argsIterator = args[Symbol.iterator](); const parsedField = parseCalldataField({ argsIterator, - input: getAbiEntry('core::array::Array::'), + input: getAbiEntry('core::array::Array::'), structs: getAbiStructs(), enums: getAbiEnums(), parser: new AbiParser1([getAbiEntry('core::array::Array::')], hdParsingStrategy), @@ -243,7 +244,7 @@ describe('requestParser', () => { enums: getAbiEnums(), parser: new AbiParser1([getAbiEntry('enum')], hdParsingStrategy), }) - ).toThrow(new Error(`Not find in abi : Enum has no 'test' variant.`)); + ).toThrow(new Error(`The type test_cairo is not a Cairo Enum. Needs impl::name.`)); }); test('should throw an error for CairoUint256 abi type when wrong arg is provided', () => { @@ -267,13 +268,14 @@ describe('requestParser', () => { test('should throw an error if provided tuple size do not match', () => { const args = [{ min: true }, { max: true }]; const argsIterator = args[Symbol.iterator](); + const abiItem: AbiEntry = getAbiEntry('(core::bool,core::bool)'); expect(() => parseCalldataField({ argsIterator, - input: getAbiEntry('(core::bool, core::bool)'), + input: abiItem, structs: getAbiStructs(), enums: getAbiEnums(), - parser: new AbiParser1([getAbiEntry('(core::bool, core::bool)')], hdParsingStrategy), + parser: new AbiParser1([abiItem], hdParsingStrategy), }) ).toThrow(new Error('"core::bool,core::bool" is not a valid Cairo type')); }); diff --git a/src/index.ts b/src/index.ts index 9e69c0c24..3652ce49a 100644 --- a/src/index.ts +++ b/src/index.ts @@ -40,28 +40,7 @@ export * as src5 from './utils/src5'; export * from './utils/resolve'; export * from './utils/batch'; export * from './utils/responseParser'; -export * from './utils/cairoDataTypes/uint8'; -export * from './utils/cairoDataTypes/uint16'; -export * from './utils/cairoDataTypes/uint64'; -export * from './utils/cairoDataTypes/uint96'; -export * from './utils/cairoDataTypes/uint128'; -export * from './utils/cairoDataTypes/uint256'; -export * from './utils/cairoDataTypes/uint512'; -export * from './utils/cairoDataTypes/int8'; -export * from './utils/cairoDataTypes/int16'; -export * from './utils/cairoDataTypes/int32'; -export * from './utils/cairoDataTypes/int64'; -export * from './utils/cairoDataTypes/int128'; -export * from './utils/cairoDataTypes/fixedArray'; -export * from './utils/cairoDataTypes/array'; -export * from './utils/cairoDataTypes/tuple'; -export * from './utils/cairoDataTypes/byteArray'; -export * from './utils/cairoDataTypes/secp256k1Point'; -export * from './utils/cairoDataTypes/cairoTypeOption'; -export * from './utils/cairoDataTypes/cairoTypeResult'; -export * from './utils/cairoDataTypes/cairoStruct'; -export * from './utils/cairoDataTypes/cairoTypeCustomEnum'; - +export * from './utils/cairoDataTypes'; export * from './utils/address'; export * from './utils/calldata'; export * from './utils/calldata/enum'; diff --git a/src/utils/cairoDataTypes/cairoStruct.ts b/src/utils/cairoDataTypes/cairoStruct.ts index 2efbffd84..8ba8e59aa 100644 --- a/src/utils/cairoDataTypes/cairoStruct.ts +++ b/src/utils/cairoDataTypes/cairoStruct.ts @@ -1,6 +1,7 @@ -import type { AbiStruct, AllowArray } from '../../types'; +import type { AbiEntry, AbiStruct, AllowArray } from '../../types'; import assert from '../assert'; import type { ParsingStrategy, VariantType } from '../calldata'; +import { isCairo1Type, isLen } from '../calldata/cairo'; import { addCompiledFlag } from '../helpers'; import { getNext } from '../num'; import { CairoType } from './cairoType.interface'; @@ -67,7 +68,7 @@ export class CairoStruct extends CairoType { } CairoStruct.validate(content, abiStruct); const structContentType: string[] = CairoStruct.getStructMembersTypes(abiStruct); - const resultContent: any[] = CairoStruct.extractValuesArray(content).map( + const resultContent: any[] = CairoStruct.extractValuesArray(content, abiStruct).map( (contentItem: any, index: number) => { // "content" is a CairoType if ( @@ -217,12 +218,30 @@ export class CairoStruct extends CairoType { * @param {unknown} input - Input data (array or object) * @returns {any[]} Array of values extracted from the input */ - private static extractValuesArray(input: unknown): any[] { + private static extractValuesArray(input: unknown, abiStruct: AbiStruct): any[] { if (Array.isArray(input)) { return input; } const inputObj = input as Record; - return Object.values(inputObj); + const orderedObject2 = abiStruct.members.reduce( + (orderedObject: Record, abiParam: AbiEntry) => { + const setProperty = (value?: any) => + Object.defineProperty(orderedObject, abiParam.name, { + enumerable: true, + value: value ?? inputObj[abiParam.name], + }); + + if (typeof inputObj[abiParam.name] === 'undefined') { + if (isCairo1Type(abiParam.type) || !isLen(abiParam.name)) { + throw Error(`Your object needs a property with key : ${abiParam.name} .`); + } + } + setProperty(inputObj[abiParam.name]); + return orderedObject; + }, + {} + ); + return Object.values(orderedObject2); } /** diff --git a/src/utils/cairoDataTypes/cairoTypeCustomEnum.ts b/src/utils/cairoDataTypes/cairoTypeCustomEnum.ts index 4bd9fc46d..9192c5f0b 100644 --- a/src/utils/cairoDataTypes/cairoTypeCustomEnum.ts +++ b/src/utils/cairoDataTypes/cairoTypeCustomEnum.ts @@ -32,7 +32,7 @@ import { CairoTypeResult } from './cairoTypeResult'; export class CairoTypeCustomEnum extends CairoType { public readonly dynamicSelector: string; - /* CairoType instance representing the content of a Cairo enum. */ + /* CairoType instance representing the content of the Cairo enum. */ public readonly content: CairoType; /** Cairo named custom enum type definition */ @@ -42,34 +42,32 @@ export class CairoTypeCustomEnum extends CairoType { public readonly enumVariant: number; /** - * CairoTypeResult provides a complete implementation for handling Cairo's result, - * which have the form "core::result::Result::" (e.g., "core::result::Result::"). + * CairoTypeCustomEnum provides a complete implementation for handling Cairo's enums, + * which have the form "my_contract::enum_name". + * * Internal usage class (users are using "CairoResult" class). + * * It supports nested types, type validation, encoding, and parsing from various sources. * @param {unknown} content - Input data (array, object, BigNumberish, * Iterator, CairoOption, CairoResult, CairoCustomEnum, or CairoType instance). - * @param {string} resultCairoType - Cairo result type string (e.g., "core::result::Result::"). - * @param {ParsingStrategy} strategy - Parsing strategy for element type handling (e.g. hdParsingStrategy). - * @param {CairoResultVariant | number} [variant] - (optional) variant of the result: CairoResultVariant.Ok (0), or CairoResultVariant.Err (1). If "content" is an iterator, this parameter must be omitted. + * @param {AbiEnum} abiEnum - Abi definition of the enum. + * @param {AllowArray} parsingStrategy - Parsing strategy for element type handling. + * @param {number} [variant] - (optional) variant number of the custom enum. If "content" is an iterator or a CairoCustomEnum, this parameter must be omitted. * @param {boolean} [subType=false] - optional default=false. Use "true" if called in nested CairoResult instances. * @example * ```typescript - * import { CairoTypeResult, hdParsingStrategy, CairoResultVariant } from 'starknet'; - * // Simple Result with Ok variant - * const myResult1 = new CairoTypeResult(7, "core::result::Result::", hdParsingStrategy, CairoResultVariant.Ok); - * console.log(myResult1.toApiRequest()); // ['0x01','0x7b'] - * console.log(myResult1.decompose(hdParsingStrategy)); // CairoResult instance with content 7n and Ok variant. - * // Simple Result with Err variant - * const myResult2 = new CairoTypeResult(11, "core::result::Result::", hdParsingStrategy, CairoResultVariant.Err); - * - * // Nested Cairo types - * const myTuple0 = new CairoTuple([234, [1, 2, 3]], "(core::integer::u8, core::array::Array::)", hdParsingStrategy); - * const myResult3 = new CairoTypeResult(myTuple0, "core::result::Result::<(core::integer::u8, core::array::Array::), core::integer::u16>", hdParsingStrategy, CairoResultVariant.Ok); - * console.log(CallData.compile([myResult3])); // [ "0", "234", "3", "1", "2", "3" ] + * import { CairoTypeCustomEnum } from 'starknet'; + * // from a CairoCustomEnum instance: + * const strategies = myTestContract.callData.parser.parsingStrategies; + * const abiMyEnum = myTestContract.abi.find((data: AbiEntry) => data.name == "enums::MyEnum") as AbiEnum; + * const myEnum = new CairoCustomEnum({ valid: 15n }); + * const myTypeEnum1 = new CairoTypeCustomEnum(myEnum, abiMyEnum, strategies); + * console.log(myTypeEnum1.toApiRequest()); // ['0x01','0xf'] + * console.log(myTypeEnum1.decompose(strategies)); // CairoCustomEnum instance with content 15n and `valid` variant. * - * // From API response - * const apiData = ['0x0', '0x20'][Symbol.iterator](); - * const fromApiResult = new CairoTypeResult(apiData, "core::result::Result::", hdParsingStrategy); // CairoResult instance with content 32n and Ok variant. + * // From API response: + * const apiData = ['0x1', '0x20'][Symbol.iterator](); + * const fromApiResult = new CairoTypeCustomEnum(apiData, abiMyEnum, strategies); // CairoTypeCustomEnum instance with content 32n and `valid` variant. * ``` */ @@ -95,7 +93,6 @@ export class CairoTypeCustomEnum extends CairoType { const variantFromIterator = Number(getNext(content as Iterator)); this.enumVariant = variantFromIterator; const elementTypes: string[] = CairoTypeCustomEnum.getVariantTypes(abiEnum); - const parsedContent: CairoType = CairoTypeCustomEnum.parser( content as Iterator, elementTypes[variantFromIterator], @@ -127,8 +124,8 @@ export class CairoTypeCustomEnum extends CairoType { return; } + // "content" is a CairoOption if (content instanceof CairoOption) { - // "content" is a CairoOption assert( !isUndefined(variant), '"variant" parameter is mandatory when creating a new Cairo custom enum from a CairoOption.' @@ -143,8 +140,9 @@ export class CairoTypeCustomEnum extends CairoType { this.enumVariant = variant; return; } + + // "content" is a CairoResult if (content instanceof CairoResult) { - // "content" is a CairoResult assert( !isUndefined(variant), '"variant" parameter is mandatory when creating a new Cairo custom enum from a CairoResult.' @@ -223,8 +221,8 @@ export class CairoTypeCustomEnum extends CairoType { * - Unknown types (stored as raw strings for later error handling) * * @param {Iterator} responseIterator - Iterator over string data to parse - * @param {string} elementType - The Cairo result type (e.g., "core::result::Result::") - * @param {ParsingStrategy} strategy - The parsing strategy containing constructors and selectors + * @param {string} variantCairoType - The Cairo type of the variant of the custom enum (e.g., "core::integer::u8") + * @param {ParsingStrategy[]} parsingStrategies - The parsing strategy containing constructors and selectors * @returns {CairoType} CairoType instance * @private */ @@ -263,37 +261,11 @@ export class CairoTypeCustomEnum extends CairoType { } /** - * Retrieve the Cairo content type from a Cairo Result type. - * @param {string} type - The Cairo Result type string. - * @returns {string[]} The Cairo types of the possible contents of the Cairo Result. - * @example - * ```typescript - * const result = CairoTypeResult.getVariantSomeType("core::result::Result::"); - * // result = [" core::integer::u8", "core::integer::u16"] - * ``` - */ - // static getVariantTypes(type: string): string[] { - // const matchArray = type.match(/(?<=<).+(?=>)/); - // if (matchArray === null) - // throw new Error(`ABI type ${type} do not includes 2 types enclosed in <>.`); - // const subTypes = CairoTuple.extractCairo1Tuple(`(${matchArray[0]})`) as string[]; - // assert( - // subTypes.length === 2, - // `ABI type ${type} is not including 2 sub types. Found ${subTypes.length}.` - // ); - // return subTypes; - // } - - /** - * Validate input data for CairoTypeResult creation. + * Validate input data for CairoTypeCustomEnum creation. * @param {unknown} input - Input data to validate - * @param {string} type - The Cairo Result type string (e.g., "core::result::Result::") + * @param {AbiEnum} abiEnum - The Abi definition of the enum + * @param {VariantType} variant - optional - The variant of the enum (0, "1", 2, ...) * @throws Error if input is invalid - * @example - * ```typescript - * CairoTypeResult.validate(200, "core::result::Result::", CairoResultVariant.Err); // passes - * CairoTypeResult.validate(200, "wrong", 3); // throws - * ``` */ static validate(_input: unknown, abiEnum: AbiEnum, variant: VariantType | undefined): void { assert( @@ -310,16 +282,11 @@ export class CairoTypeCustomEnum extends CairoType { } /** - * Check if input data is valid for CairoTypeResult creation. + * Check if input data is valid for CairoTypeCustomEnum creation. * @param {unknown} input - Input data to check - * @param {string} type - The Cairo Result type (e.g., "core::result::Result::") - * @param {VariantType} variant - The variant of the Result: CairoResultVariant.Ok (0), or CairoResultVariant.Err (1) + * @param {string} type - The Cairo Custom Enum type (e.g. "core::integer::u16") + * @param {VariantType} variant - The variant of the enum. * @returns {boolean} true if valid, false otherwise - * @example - * ```typescript - * const isValid1 = CairoTypeResult.is(200, "core::result::Result::", CairoResultVariant.Ok"); // true - * const isValid2 = CairoTypeResult.is(200, "wrong", 3); // false - * ``` */ static is(input: unknown, type: string, variant: VariantType): boolean { try { @@ -331,15 +298,13 @@ export class CairoTypeCustomEnum extends CairoType { } /** - * Checks if the given string represents a valid Cairo Result type format. - * - * A valid Cairo Result type must follow the pattern: "core::result::Result::" - * where type is any valid Cairo type. + * Checks if the given string represents a valid Cairo custom enum variant type format. + * Type is any valid Cairo type. * @param {string} type - The type string to validate - * @returns {boolean} `true` if the type is a valid Cairo Result format, `false` otherwise + * @returns {boolean} `true` if the type is a valid Cairo custom enum format, `false` otherwise * @example * ```typescript - * CairoTypeResult.isAbiType("core::result::Result::"); // true + * CairoTypeCustomEnum.isAbiType("my_contract::my_enum"); // true * ``` */ static isAbiType(type: string): boolean { @@ -350,6 +315,19 @@ export class CairoTypeCustomEnum extends CairoType { * Extract the Cairo type of each property of a named Cairo Enum * @param {AbiEnum} type - Abi definition of the enum * @returns {string[]} an array of Cairo types + * @example + * ```typescript + * const abiEnum: AbiEnum = { + * type: "enum", + * name: "my_enum", + * variants: [ + * { name: "variant1", type: "core::integer::u8" }, + * { name: "variant2", type: "core::integer::u16" } + * ] + * }; + * const types = CairoTypeCustomEnum.getVariantTypes(abiEnum); + * // types = ["core::integer::u8", "core::integer::u16"] + * ``` */ private static getVariantTypes(type: AbiEnum): string[] { return type.variants.map((member) => member.type); @@ -359,23 +337,40 @@ export class CairoTypeCustomEnum extends CairoType { *Extract the Cairo names of each property of a Cairo custom enum * @param {AbiStruct} type - Abi definition of the enum * @returns {string[]} an array of Cairo enum property names + * @example + * ```typescript + * const abiEnum: AbiEnum = { + * type: "enum", + * name: "my_enum", + * variants: [ + * { name: "variant1", type: "core::integer::u8" }, + * { name: "variant2", type: "core::integer::u16" } + * ] + * }; + * const variantList = CairoTypeCustomEnum.extractEnumMembersNames(abiEnum); + * // variantList = ["variant1", "variant2"] + * ``` */ public static extractEnumMembersNames(type: AbiEnum): string[] { return type.variants.map((member) => member.name); } /** - * Serialize the Cairo Result into hex strings for Starknet API requests. + * Serialize the Cairo custom enum into hex strings for Starknet API requests. * - * Converts all CairoType elements in this Cairo Result into their hex string representation - * by calling toApiRequest(). This is used when + * Converts all CairoType elements in this Cairo custom enum into their hex string representation + * by calling `toApiRequest()`. This is used when * sending data to the Starknet network. * * @returns {string[]} Array of hex strings ready for API requests * @example * ```typescript - * const myResult = new CairoTypeResult(8, "core::result::Result::", strategy, CairoResultVariant.Err); - * const result = myResult.toApiRequest(); // ['0x1', '0x8'] + * const strategies = myTestContract.callData.parser.parsingStrategies; + * const abiMyEnum = myTestContract.abi.find((data: AbiEntry) => data.name == "enums::MyEnum") as AbiEnum; + * const myEnum = new CairoCustomEnum({ valid: 15n }); + * const myTypeEnum1 = new CairoTypeCustomEnum(myEnum, abiMyEnum, strategies); + * const encoded = myTypeEnum1.toApiRequest()); + * // encoded = ['0x01','0xf'] * ``` */ public toApiRequest(): string[] { @@ -391,12 +386,16 @@ export class CairoTypeCustomEnum extends CairoType { * response parsers (e.g., CairoUint8 → BigInt). This method is used primarily for * parsing API responses into user-friendly formats. * - * @param {ParsingStrategy} strategy - Parsing strategy for response parsing - * @returns {CairoResult} a CairoResultInstance, with parsed variant (BigInt, numbers, nested arrays, etc.) + * @param {AllowArray} strategyDecompose - Parsing strategy for response parsing + * @returns {CairoCustomEnum} a CairoCustomEnum instance, with parsed variant (BigInt, numbers, nested arrays, etc.) * @example * ```typescript - * const myResult = new CairoTypedResult(3, "core::result::Result::", hdParsingStrategy, CairoResultVariant.Some); - * const parsed = myResult.decompose(hdParsingStrategy); // CairoResult{ Some: 3n } + * const strategies = myTestContract.callData.parser.parsingStrategies; + * const abiMyEnum = myTestContract.abi.find((data: AbiEntry) => data.name == "enums::MyEnum") as AbiEnum; + * const myEnum = new CairoCustomEnum({ valid: 15n }); + * const myTypeEnum1 = new CairoTypeCustomEnum(myEnum, abiMyEnum, strategies); + * const parsed = myTypeEnum1.decompose(strategies); + * // parsed = CairoCustomEnum{ valid: 15n } * ``` */ public decompose(strategyDecompose: AllowArray): CairoCustomEnum { diff --git a/src/utils/cairoDataTypes/cairoTypeResult.ts b/src/utils/cairoDataTypes/cairoTypeResult.ts index 5290ce863..60f6e5951 100644 --- a/src/utils/cairoDataTypes/cairoTypeResult.ts +++ b/src/utils/cairoDataTypes/cairoTypeResult.ts @@ -120,6 +120,10 @@ export class CairoTypeResult extends CairoType { if (content instanceof CairoResult) { // "content" is a CairoResult if (!subType) { + assert( + isUndefined(variant), + 'when "content" parameter is a CairoResult and subType is false, do not define "variant" parameter.' + ); const variantForResult = content.isOk() ? CairoResultVariant.Ok : CairoResultVariant.Err; const result = new CairoTypeResult( content.unwrap(), diff --git a/src/utils/cairoDataTypes/index.ts b/src/utils/cairoDataTypes/index.ts new file mode 100644 index 000000000..8afca1cb4 --- /dev/null +++ b/src/utils/cairoDataTypes/index.ts @@ -0,0 +1,25 @@ +export * from './uint8'; +export * from './uint16'; +export * from './uint64'; +export * from './uint96'; +export * from './uint128'; +export * from './uint256'; +export * from './uint512'; +export * from './int8'; +export * from './int16'; +export * from './int32'; +export * from './int64'; +export * from './int128'; +export * from './fixedArray'; +export * from './byteArray'; +export * from './bytes31'; +export * from './felt'; +export * from './uint32'; +export * from './tuple'; +export * from './array'; +export * from './secp256k1Point'; +export * from './cairoType.interface'; +export * from './cairoTypeOption'; +export * from './cairoTypeResult'; +export * from './cairoStruct'; +export * from './cairoTypeCustomEnum'; diff --git a/src/utils/cairoDataTypes/tuple.ts b/src/utils/cairoDataTypes/tuple.ts index 7261c3ab9..722ab9ad3 100644 --- a/src/utils/cairoDataTypes/tuple.ts +++ b/src/utils/cairoDataTypes/tuple.ts @@ -644,9 +644,11 @@ export class CairoTuple extends CairoType { const strategyDecomposeNum = strategies.findIndex( (strategy: ParsingStrategy) => strategy.response[parserName] ); - const responseParser = strategies[strategyDecomposeNum].response[parserName]; - if (responseParser) { - return responseParser(element, strategies); + if (strategyDecomposeNum >= 0) { + const responseParser = strategies[strategyDecomposeNum].response[parserName]; + if (responseParser) { + return responseParser(element, strategies); + } } // No response parser found - throw error instead of fallback magic throw new Error( diff --git a/src/utils/calldata/parser/parser-0-1.1.0.ts b/src/utils/calldata/parser/parser-0-1.1.0.ts index f52a001a1..0a02884f4 100644 --- a/src/utils/calldata/parser/parser-0-1.1.0.ts +++ b/src/utils/calldata/parser/parser-0-1.1.0.ts @@ -1,23 +1,50 @@ -import { Abi, AbiEntryType, FunctionAbi } from '../../../types'; -import { isLen } from '../cairo'; +import { Abi, AbiEntryType, FunctionAbi, type AbiStruct, type AllowArray } from '../../../types'; +import type { CairoType } from '../../cairoDataTypes'; +import { CairoStruct } from '../../cairoDataTypes/cairoStruct'; +import { isLen, isTypeArray } from '../cairo'; +import { getAbiStruct } from '../calldataUtils'; import { AbiParserInterface } from './interface'; import { ParsingStrategy } from './parsingStrategy.type'; export class AbiParser1 implements AbiParserInterface { abi: Abi; - parsingStrategies: ParsingStrategy; + parsingStrategies: ParsingStrategy[]; constructor(abi: Abi, parsingStrategy: ParsingStrategy) { this.abi = abi; - this.parsingStrategies = parsingStrategy; + // add structs & enums in strategy + const structs: AbiStruct[] = Object.values(getAbiStruct(abi)); + const structStrategy: ParsingStrategy = { + constructors: {}, + response: {}, + dynamicSelectors: {}, + }; + structs.forEach((struct: AbiStruct) => { + // Span are defined as Struct in Abi, but are useless here + if (!isTypeArray(struct.name)) { + structStrategy.constructors[struct.name] = (input: Iterator | unknown) => { + return new CairoStruct(input, struct, [parsingStrategy, structStrategy]); + }; + structStrategy.response[struct.name] = ( + instance: CairoType, + strategy: AllowArray + ) => (instance as CairoStruct).decompose(strategy); + structStrategy.dynamicSelectors[struct.name] = (_type: string) => true; + } + }); + + this.parsingStrategies = [parsingStrategy, structStrategy]; } public getRequestParser(abiType: AbiEntryType): (val: unknown, type?: string) => any { // Check direct constructors first - if (this.parsingStrategies.constructors[abiType]) { + const strategyConstructorNum = this.parsingStrategies.findIndex( + (strategy: ParsingStrategy) => strategy.constructors[abiType] + ); + if (strategyConstructorNum >= 0) { return (val: unknown, type?: string) => { - const instance = this.parsingStrategies.constructors[abiType]( + const instance = this.parsingStrategies[strategyConstructorNum].constructors[abiType]( val, this.parsingStrategies, type @@ -27,12 +54,20 @@ export class AbiParser1 implements AbiParserInterface { } // Check dynamic selectors - const dynamicSelectors = Object.entries(this.parsingStrategies.dynamicSelectors); - const matchingSelector = dynamicSelectors.find(([, selectorFn]) => selectorFn(abiType)); + const strategyDynamicNum = this.parsingStrategies.findIndex((strategy: ParsingStrategy) => { + const dynamicSelectors = Object.entries(strategy.dynamicSelectors); + return dynamicSelectors.find(([, selectorFn]) => selectorFn(abiType)); + }); + + if (strategyDynamicNum >= 0) { + const dynamicSelectors = Object.entries( + this.parsingStrategies[strategyDynamicNum].dynamicSelectors + ); + const matchingSelector = dynamicSelectors.find(([, selectorFn]) => selectorFn(abiType)); - if (matchingSelector) { - const [selectorName] = matchingSelector; - const dynamicConstructor = this.parsingStrategies.constructors[selectorName]; + const [selectorName] = matchingSelector as [string, (type: string) => boolean]; + const dynamicConstructor = + this.parsingStrategies[strategyDynamicNum].constructors[selectorName]; if (dynamicConstructor) { return (val: unknown, type?: string) => { const instance = dynamicConstructor(val, this.parsingStrategies, type || abiType); @@ -40,7 +75,6 @@ export class AbiParser1 implements AbiParserInterface { }; } } - throw new Error(`Parser for ${abiType} not found`); } @@ -48,25 +82,36 @@ export class AbiParser1 implements AbiParserInterface { abiType: AbiEntryType ): (responseIterator: Iterator, type?: string) => any { // Check direct constructors first - if (this.parsingStrategies.constructors[abiType] && this.parsingStrategies.response[abiType]) { + const strategyConstructorNum = this.parsingStrategies.findIndex( + (strategy: ParsingStrategy) => strategy.constructors[abiType] && strategy.response[abiType] + ); + if (strategyConstructorNum >= 0) { return (responseIterator: Iterator, type?: string) => { - const instance = this.parsingStrategies.constructors[abiType]( + const instance = this.parsingStrategies[strategyConstructorNum].constructors[abiType]( responseIterator, this.parsingStrategies, type ); - return this.parsingStrategies.response[abiType](instance, this.parsingStrategies); + return this.parsingStrategies[strategyConstructorNum].response[abiType]( + instance, + this.parsingStrategies + ); }; } - // Check dynamic selectors - const dynamicSelectors = Object.entries(this.parsingStrategies.dynamicSelectors); - const matchingSelector = dynamicSelectors.find(([, selectorFn]) => selectorFn(abiType)); - - if (matchingSelector) { - const [selectorName] = matchingSelector; - const dynamicConstructor = this.parsingStrategies.constructors[selectorName]; - const responseParser = this.parsingStrategies.response[selectorName]; + const strategyDynamicNum = this.parsingStrategies.findIndex((strategy: ParsingStrategy) => { + const dynamicSelectors = Object.entries(strategy.dynamicSelectors); + return dynamicSelectors.find(([, selectorFn]) => selectorFn(abiType)); + }); + if (strategyDynamicNum >= 0) { + const dynamicSelectors = Object.entries( + this.parsingStrategies[strategyDynamicNum].dynamicSelectors + ); + const matchingSelector = dynamicSelectors.find(([, selectorFn]) => selectorFn(abiType)); + const [selectorName] = matchingSelector as [string, (type: string) => boolean]; + const dynamicConstructor = + this.parsingStrategies[strategyDynamicNum].constructors[selectorName]; + const responseParser = this.parsingStrategies[strategyDynamicNum].response[selectorName]; if (dynamicConstructor && responseParser) { return (responseIterator: Iterator, type?: string) => { const instance = dynamicConstructor( diff --git a/src/utils/calldata/requestParser.ts b/src/utils/calldata/requestParser.ts index 43038a11e..9cf2845aa 100644 --- a/src/utils/calldata/requestParser.ts +++ b/src/utils/calldata/requestParser.ts @@ -47,6 +47,7 @@ import { CairoTypeOption } from '../cairoDataTypes/cairoTypeOption'; import { CairoTypeResult } from '../cairoDataTypes/cairoTypeResult'; import { CairoStruct } from '../cairoDataTypes/cairoStruct'; import { CairoTypeCustomEnum } from '../cairoDataTypes/cairoTypeCustomEnum'; +import { toHex } from '../num'; // TODO: cleanup implementations to work with unknown, instead of blind casting with 'as' @@ -144,7 +145,7 @@ function parseCalldataValue({ // value is Array if (Array.isArray(element)) { const result: string[] = []; - result.push(felt(element.length)); // Add length to array + result.push(toHex(felt(element.length))); // Add length to array const arrayType = getArrayType(type); return element.reduce((acc, it) => { From b25fabe75b755b825736826c60a3bfff7bd942cb Mon Sep 17 00:00:00 2001 From: PhilippeR26 Date: Fri, 3 Oct 2025 16:56:34 +0200 Subject: [PATCH 12/17] feat: add ethAddress, bool, classHash, contractAddress. toApiRequest is decimalString --- __tests__/cairo1v2.test.ts | 8 +- __tests__/cairov24onward.test.ts | 12 +- __tests__/contract.test.ts | 14 +- .../CairoArray.integration.test.ts | 12 +- .../utils/cairoDataTypes/CairoArray.test.ts | 60 ++- .../utils/cairoDataTypes/CairoBool.test.ts | 290 ++++++++++++ .../cairoDataTypes/CairoByteArray.test.ts | 34 +- .../utils/cairoDataTypes/CairoBytes31.test.ts | 10 +- .../cairoDataTypes/CairoEthAddress.test.ts | 448 ++++++++++++++++++ .../utils/cairoDataTypes/CairoFelt252.test.ts | 4 +- .../cairoDataTypes/CairoFixedArray.test.ts | 22 +- .../utils/cairoDataTypes/CairoInt128.test.ts | 10 +- .../utils/cairoDataTypes/CairoInt16.test.ts | 18 +- .../utils/cairoDataTypes/CairoInt32.test.ts | 18 +- .../utils/cairoDataTypes/CairoInt64.test.ts | 10 +- .../utils/cairoDataTypes/CairoInt8.test.ts | 18 +- .../utils/cairoDataTypes/CairoStruct.test.ts | 34 +- .../CairoTuple.integration.test.ts | 33 +- .../utils/cairoDataTypes/CairoTuple.test.ts | 35 +- .../utils/cairoDataTypes/CairoUint128.test.ts | 12 +- .../utils/cairoDataTypes/CairoUint16.test.ts | 12 +- .../utils/cairoDataTypes/CairoUint32.test.ts | 10 +- .../utils/cairoDataTypes/CairoUint64.test.ts | 12 +- .../utils/cairoDataTypes/CairoUint8.test.ts | 12 +- .../utils/cairoDataTypes/CairoUint96.test.ts | 12 +- ...st copy.ts => CairoTypeCustomEnum.test.ts} | 0 .../calldata/enum/CairoTypeOption.test.ts | 18 +- .../calldata/enum/CairoTypeResult.test.ts | 24 +- .../utils/calldata/requestParser.test.ts | 108 ++--- __tests__/utils/calldata/validate.test.ts | 2 +- src/global/constants.ts | 1 + src/utils/cairoDataTypes/array.ts | 4 +- src/utils/cairoDataTypes/bool.ts | 83 ++++ src/utils/cairoDataTypes/byteArray.ts | 6 +- src/utils/cairoDataTypes/bytes31.ts | 6 +- .../cairoDataTypes/cairoTypeCustomEnum.ts | 4 +- src/utils/cairoDataTypes/cairoTypeOption.ts | 2 +- src/utils/cairoDataTypes/cairoTypeResult.ts | 2 +- src/utils/cairoDataTypes/ethAddress.ts | 71 +++ src/utils/cairoDataTypes/felt.ts | 6 +- src/utils/cairoDataTypes/fixedArray.ts | 2 +- src/utils/cairoDataTypes/index.ts | 2 + src/utils/cairoDataTypes/int128.ts | 12 +- src/utils/cairoDataTypes/int16.ts | 12 +- src/utils/cairoDataTypes/int32.ts | 12 +- src/utils/cairoDataTypes/int64.ts | 12 +- src/utils/cairoDataTypes/int8.ts | 6 +- src/utils/cairoDataTypes/secp256k1Point.ts | 9 +- src/utils/cairoDataTypes/tuple.ts | 49 +- src/utils/cairoDataTypes/uint128.ts | 6 +- src/utils/cairoDataTypes/uint16.ts | 6 +- src/utils/cairoDataTypes/uint256.ts | 3 +- src/utils/cairoDataTypes/uint32.ts | 6 +- src/utils/cairoDataTypes/uint512.ts | 9 +- src/utils/cairoDataTypes/uint64.ts | 6 +- src/utils/cairoDataTypes/uint8.ts | 6 +- src/utils/cairoDataTypes/uint96.ts | 6 +- src/utils/calldata/index.ts | 4 +- src/utils/calldata/parser/parser-0-1.1.0.ts | 2 +- src/utils/calldata/parser/parser-2.0.0.ts | 11 +- src/utils/calldata/parser/parsingStrategy.ts | 43 +- src/utils/calldata/requestParser.ts | 10 +- src/utils/calldata/validate.ts | 18 +- 63 files changed, 1359 insertions(+), 390 deletions(-) create mode 100644 __tests__/utils/cairoDataTypes/CairoBool.test.ts create mode 100644 __tests__/utils/cairoDataTypes/CairoEthAddress.test.ts rename __tests__/utils/calldata/enum/{CairoResult.test copy.ts => CairoTypeCustomEnum.test.ts} (100%) create mode 100644 src/utils/cairoDataTypes/bool.ts create mode 100644 src/utils/cairoDataTypes/ethAddress.ts diff --git a/__tests__/cairo1v2.test.ts b/__tests__/cairo1v2.test.ts index d3130e9c7..87ba27e7e 100644 --- a/__tests__/cairo1v2.test.ts +++ b/__tests__/cairo1v2.test.ts @@ -696,21 +696,21 @@ describe('Cairo 1', () => { { address: 1193046n, is_claimed: true }, { address: 624485n, is_claimed: false }, ]); - const res4 = c1v2CallData.decodeParameters('core::integer::u8', ['0x123456']); - expect(res4).toBe(1193046n); + const res4 = c1v2CallData.decodeParameters('core::integer::u8', ['0x12']); + expect(res4).toBe(18n); const res5 = c1v2CallData.decodeParameters('core::bool', ['0x1']); expect(res5).toBe(true); const res6 = c1v2CallData.decodeParameters('core::felt252', ['0x123456']); expect(res6).toBe(1193046n); const res7 = c1v2CallData.decodeParameters('core::integer::u256', ['0x123456', '0x789']); expect(num.toHex(res7.toString())).toBe('0x78900000000000000000000000000123456'); - const res8 = c1v2CallData.decodeParameters('core::array::Array::', [ + const res8 = c1v2CallData.decodeParameters('core::array::Array::', [ '2', '0x123456', '0x789', ]); expect(res8).toEqual([1193046n, 1929n]); - const res9 = c1v2CallData.decodeParameters('core::array::Span::', [ + const res9 = c1v2CallData.decodeParameters('core::array::Span::', [ '2', '0x123456', '0x789', diff --git a/__tests__/cairov24onward.test.ts b/__tests__/cairov24onward.test.ts index 60c36557e..0cf267e51 100644 --- a/__tests__/cairov24onward.test.ts +++ b/__tests__/cairov24onward.test.ts @@ -59,14 +59,14 @@ describe('Cairo v2.4 onwards', () => { const myCallData = new CallData(contracts.C240.sierra.abi); const myCalldata1 = myCallData.compile('proceed_bytes31', [str]); - expect(myCalldata1).toEqual([encodeShortString(str)]); + expect(myCalldata1).toEqual([hexToDecimalString(encodeShortString(str))]); const myCalldata2 = myCallData.compile('proceed_bytes31', { str }); - expect(myCalldata2).toEqual([encodeShortString(str)]); + expect(myCalldata2).toEqual([hexToDecimalString(encodeShortString(str))]); const myCall1 = stringContract.populate('proceed_bytes31', [str]); - expect(myCall1.calldata).toEqual([encodeShortString(str)]); + expect(myCall1.calldata).toEqual([hexToDecimalString(encodeShortString(str))]); const myCall2 = stringContract.populate('proceed_bytes31', { str }); - expect(myCall2.calldata).toEqual([encodeShortString(str)]); + expect(myCall2.calldata).toEqual([hexToDecimalString(encodeShortString(str))]); }); test('bytes31 too long', async () => { @@ -143,7 +143,7 @@ describe('Cairo v2.4 onwards', () => { test('Tuple (EthAddress, u256)', async () => { const res4 = await tupleContract.call('get_tuple4', []); - expect(res4).toEqual({ '0': 123n, '1': 500n }); + expect(res4).toEqual({ '0': { address: 123n }, '1': 500n }); }); test('Tuple (Result, u8)', async () => { @@ -439,7 +439,7 @@ describe('Cairo v2.4 onwards', () => { describe('Cairo v2.9.2 fixed-array', () => { const myArray: number[] = [1, 2, 3, 4, 5, 6, 7, 8]; const myWrongArray = [...myArray, 9]; - const expectedCalldata = myArray.map((val) => `0x${val.toString(16)}`); + const expectedCalldata = myArray.map((val) => val.toString(10)); let fixedArrayContract: Contract; beforeAll(async () => { diff --git a/__tests__/contract.test.ts b/__tests__/contract.test.ts index b5094a74a..53e79fe25 100644 --- a/__tests__/contract.test.ts +++ b/__tests__/contract.test.ts @@ -930,21 +930,15 @@ describe('Complex interaction', () => { const res0 = myCallData.decodeParameters('core::felt252', ['474107654995566025798705']); expect(res0).toBe(474107654995566025798705n); const res1 = myCallData.decodeParameters('echo::StructY', [ - '474107654995566025798705', + '1844674407370955', '3534634645645', ]); - expect(res1).toEqual({ y1: 474107654995566025798705n, y2: 3534634645645n }); + expect(res1).toEqual({ y1: 1844674407370955n, y2: 3534634645645n }); const res2 = myCallData.decodeParameters('core::integer::u256', ['47410765', '35346645']); expect(res2).toBe(12027840023314154934885372750905072692667575885n); - const res3 = myCallData.decodeParameters('echo::Struct32', [ - '47410765', - '35346645', - '1', - '2', - '3', - ]); - expect(res3).toEqual({ b: 47410765n, c: { '0': 35346645n, '1': 1n, '2': 2n, '3': 3n } }); + const res3 = myCallData.decodeParameters('echo::Struct32', ['47410765', '45', '1', '2', '3']); + expect(res3).toEqual({ b: 47410765n, c: { '0': 45n, '1': 1n, '2': 2n, '3': 3n } }); const res4 = myCallData.decodeParameters( '(core::felt252, core::felt252, core::felt252, core::felt252)', diff --git a/__tests__/utils/cairoDataTypes/CairoArray.integration.test.ts b/__tests__/utils/cairoDataTypes/CairoArray.integration.test.ts index c915e7e32..6aebaa725 100644 --- a/__tests__/utils/cairoDataTypes/CairoArray.integration.test.ts +++ b/__tests__/utils/cairoDataTypes/CairoArray.integration.test.ts @@ -66,7 +66,7 @@ describe('CairoArray Integration Tests', () => { const requestParser = parser.getRequestParser('core::array::Array::'); const result = requestParser([1, 2, 3], 'core::array::Array::'); - expect(result).toEqual(['0x3', '0x1', '0x2', '0x3']); + expect(result).toEqual(['3', '1', '2', '3']); }); test('should work with AbiParser2 response parsing', () => { @@ -90,7 +90,7 @@ describe('CairoArray Integration Tests', () => { [[1, 2], [3]], 'core::array::Array::>' ); - expect(result).toEqual(['0x2', '0x2', '0x1', '0x2', '0x1', '0x3']); + expect(result).toEqual(['2', '2', '1', '2', '1', '3']); }); test('should handle empty arrays in AbiParser2', () => { @@ -98,7 +98,7 @@ describe('CairoArray Integration Tests', () => { const requestParser = parser.getRequestParser('core::array::Array::'); const result = requestParser([], 'core::array::Array::'); - expect(result).toEqual(['0x0']); + expect(result).toEqual(['0']); }); }); @@ -194,7 +194,7 @@ describe('CairoArray Integration Tests', () => { ); const serialized = array.toApiRequest(); - expect(serialized[0]).toBe('0x32'); // Length prefix + expect(serialized[0]).toBe('50'); // Length prefix expect(serialized.length).toBe(51); // 50 elements + 1 length prefix // Test just the serialization part, not roundtrip since large data has iterator issues @@ -231,7 +231,7 @@ describe('CairoArray Integration Tests', () => { ); const serialized = array.toApiRequest(); - expect(serialized[0]).toBe('0x4'); // Length prefix + expect(serialized[0]).toBe('4'); // Length prefix expect(serialized.length).toBe(5); // 4 elements + 1 length prefix }); @@ -254,7 +254,7 @@ describe('CairoArray Integration Tests', () => { // Both should serialize the same way expect(arraySerialized).toEqual(spanSerialized); - expect(arraySerialized).toEqual(['0x3', '0x1', '0x2', '0x3']); + expect(arraySerialized).toEqual(['3', '1', '2', '3']); }); }); diff --git a/__tests__/utils/cairoDataTypes/CairoArray.test.ts b/__tests__/utils/cairoDataTypes/CairoArray.test.ts index 3567c885b..18eef6c05 100644 --- a/__tests__/utils/cairoDataTypes/CairoArray.test.ts +++ b/__tests__/utils/cairoDataTypes/CairoArray.test.ts @@ -220,8 +220,7 @@ describe('CairoArray class Unit test', () => { hdParsingStrategy ); const result = array.toApiRequest(); - // Should have length prefix: ['0x3', '0x1', '0x2', '0x3'] - expect(result).toEqual(['0x3', '0x1', '0x2', '0x3']); + expect(result).toEqual(['3', '1', '2', '3']); }); test('should create and serialize from object input', () => { @@ -231,8 +230,7 @@ describe('CairoArray class Unit test', () => { hdParsingStrategy ); const result = array.toApiRequest(); - // Should have length prefix: ['0x3', '0x1', '0x2', '0x3'] - expect(result).toEqual(['0x3', '0x1', '0x2', '0x3']); + expect(result).toEqual(['3', '1', '2', '3']); }); test('should work with parsing strategy', () => { @@ -251,8 +249,8 @@ describe('CairoArray class Unit test', () => { const result2 = array2.toApiRequest(); // Unified parsing strategy approach for API serialization with length prefix - expect(result1).toEqual(['0x2', '0x1', '0x2']); - expect(result2).toEqual(['0x2', '0x1', '0x2']); + expect(result1).toEqual(['2', '1', '2']); + expect(result2).toEqual(['2', '1', '2']); }); test('should throw for invalid inputs', () => { @@ -277,7 +275,7 @@ describe('CairoArray class Unit test', () => { ); const result = array.toApiRequest(); // Outer length=2, first inner [length=2, 1, 2], second inner [length=2, 3, 4] - expect(result).toEqual(['0x2', '0x2', '0x1', '0x2', '0x2', '0x3', '0x4']); + expect(result).toEqual(['2', '2', '1', '2', '2', '3', '4']); }); test('should handle edge cases', () => { @@ -289,7 +287,7 @@ describe('CairoArray class Unit test', () => { ); const emptyResult = emptyArray.toApiRequest(); // Just the length prefix: ['0x0'] - expect(emptyResult).toEqual(['0x0']); + expect(emptyResult).toEqual(['0']); // Single element const singleArray = new CairoArray( @@ -298,7 +296,7 @@ describe('CairoArray class Unit test', () => { hdParsingStrategy ); const singleResult = singleArray.toApiRequest(); - expect(singleResult).toEqual(['0x1', '0x2a']); + expect(singleResult).toEqual(['1', '42']); }); }); @@ -311,7 +309,7 @@ describe('CairoArray class Unit test', () => { ); const result = array.toApiRequest(); // Length prefix + elements - expect(result).toEqual(['0x3', '0x1', '0x2', '0x3']); + expect(result).toEqual(['3', '1', '2', '3']); }); test('should work with hdParsingStrategy', () => { @@ -329,8 +327,8 @@ describe('CairoArray class Unit test', () => { const result1 = array1.toApiRequest(); const result2 = array2.toApiRequest(); - expect(result1).toEqual(['0x2', '0x64', '0xc8']); - expect(result2).toEqual(['0x2', '0x64', '0xc8']); + expect(result1).toEqual(['2', '100', '200']); + expect(result2).toEqual(['2', '100', '200']); }); test('should handle nested arrays with proper length prefixes', () => { @@ -344,7 +342,7 @@ describe('CairoArray class Unit test', () => { ); const result = nestedArray.toApiRequest(); // Outer array: length=2, then two inner arrays each with their own length prefixes - expect(result).toEqual(['0x2', '0x2', '0x1', '0x2', '0x2', '0x3', '0x4']); + expect(result).toEqual(['2', '2', '1', '2', '2', '3', '4']); }); test('should throw for unsupported element types', () => { @@ -373,7 +371,7 @@ describe('CairoArray class Unit test', () => { ); expect(emptyArray.content).toEqual([]); expect(CairoArray.getArrayElementType(emptyArray.arrayType)).toBe('core::integer::u8'); - expect(emptyArray.toApiRequest()).toEqual(['0x0']); // Just length prefix + expect(emptyArray.toApiRequest()).toEqual(['0']); // Just length prefix }); test('should handle large arrays', () => { @@ -386,7 +384,7 @@ describe('CairoArray class Unit test', () => { expect(largeArray.content.length).toBe(100); expect(CairoArray.getArrayElementType(largeArray.arrayType)).toBe('core::integer::u8'); const result = largeArray.toApiRequest(); - expect(result[0]).toBe('0x64'); // Length prefix + expect(result[0]).toBe('100'); // Length prefix expect(result.length).toBe(101); // 100 elements + 1 length prefix }); @@ -411,21 +409,21 @@ describe('CairoArray class Unit test', () => { // Expected: outer_len=2, first_mid_len=2, first_inner_len=2, 1, 2, second_inner_len=2, 3, 4, // second_mid_len=2, third_inner_len=2, 5, 6, fourth_inner_len=2, 7, 8 expect(result).toEqual([ - '0x2', - '0x2', - '0x2', - '0x1', - '0x2', - '0x2', - '0x3', - '0x4', - '0x2', - '0x2', - '0x5', - '0x6', - '0x2', - '0x7', - '0x8', + '2', + '2', + '2', + '1', + '2', + '2', + '3', + '4', + '2', + '2', + '5', + '6', + '2', + '7', + '8', ]); }); @@ -438,7 +436,7 @@ describe('CairoArray class Unit test', () => { ); const result = mixedArray.toApiRequest(); expect(result.length).toBe(5); // 1 length prefix + 4 elements - expect(result[0]).toBe('0x4'); // Length prefix + expect(result[0]).toBe('4'); // Length prefix }); test('should validate type format edge cases', () => { diff --git a/__tests__/utils/cairoDataTypes/CairoBool.test.ts b/__tests__/utils/cairoDataTypes/CairoBool.test.ts new file mode 100644 index 000000000..a7c510973 --- /dev/null +++ b/__tests__/utils/cairoDataTypes/CairoBool.test.ts @@ -0,0 +1,290 @@ +import { CairoBool } from '../../../src/utils/cairoDataTypes'; + +describe('CairoBool class Unit Tests', () => { + describe('constructor with different input types', () => { + test('should handle number input', () => { + const bool = new CairoBool(1); + expect(bool.data).toBe(true); + }); + + test('should handle bigint input', () => { + const bool = new CairoBool(1n); + expect(bool.data).toBe(true); + }); + + test('should handle zero values', () => { + const boolFromNumber = new CairoBool(0); + const boolFromBigint = new CairoBool(0n); + + expect(boolFromNumber.data).toBe(false); + expect(boolFromBigint.data).toBe(false); + }); + }); + + describe('validation', () => { + test('should reject negative values', () => { + expect(() => new CairoBool(-1)).toThrow('Only values 0 or 1 are possible in a core::bool'); + expect(() => new CairoBool(-100n)).toThrow('Only values 0 or 1 are possible in a core::bool'); + expect(() => new CairoBool('-1')).toThrow('Only values 0 or 1 are possible in a core::bool'); + }); + + test('should reject values greater than 1', () => { + expect(() => new CairoBool(256)).toThrow('Only values 0 or 1 are possible in a core::bool'); + expect(() => new CairoBool(1000n)).toThrow('Only values 0 or 1 are possible in a core::bool'); + expect(() => new CairoBool('300')).toThrow('Only values 0 or 1 are possible in a core::bool'); + }); + + test('should handle valid string inputs correctly', () => { + const boolFromDecString = new CairoBool('0'); + const boolFromHexString = new CairoBool('0x1'); + + expect(boolFromDecString.data).toBe(false); + expect(boolFromHexString.data).toBe(true); + }); + + test('should handle edge cases and invalid inputs', () => { + expect(() => CairoBool.validate(null as any)).toThrow('Invalid input: null or undefined'); + expect(() => CairoBool.validate(undefined as any)).toThrow( + 'Invalid input: null or undefined' + ); + expect(() => CairoBool.validate({} as any)).toThrow( + 'Invalid input: objects are not supported' + ); + expect(() => CairoBool.validate([] as any)).toThrow( + 'Invalid input: objects are not supported' + ); + }); + + test('should handle unknown data types properly', () => { + // Valid unknown data types that can be converted + expect(() => new CairoBool('1' as unknown)).not.toThrow(); + expect(() => new CairoBool(1 as unknown)).not.toThrow(); + expect(() => new CairoBool(1n as unknown)).not.toThrow(); + expect(() => new CairoBool(true as unknown)).not.toThrow(); + expect(() => new CairoBool(false as unknown)).not.toThrow(); + + // Invalid unknown data types + expect(() => new CairoBool({} as unknown)).toThrow( + 'Invalid input: objects are not supported' + ); + expect(() => new CairoBool([] as unknown)).toThrow( + 'Invalid input: objects are not supported' + ); + expect(() => new CairoBool(null as unknown)).toThrow('Invalid input: null or undefined'); + expect(() => new CairoBool(undefined as unknown)).toThrow('Invalid input: null or undefined'); + expect(() => new CairoBool(Symbol('test') as unknown)).toThrow(); + + // Out of range values as unknown + expect(() => new CairoBool(2 as unknown)).toThrow( + 'Only values 0 or 1 are possible in a core::bool' + ); + expect(() => new CairoBool(-1 as unknown)).toThrow( + 'Only values 0 or 1 are possible in a core::bool' + ); + }); + + test('should reject decimal numbers', () => { + expect(() => new CairoBool(42.5)).toThrow( + 'Invalid input: decimal numbers are not supported, only integers' + ); + expect(() => new CairoBool(1.1)).toThrow( + 'Invalid input: decimal numbers are not supported, only integers' + ); + }); + + test('should validate string inputs with out-of-range values', () => { + expect(() => new CairoBool('256')).toThrow('Only values 0 or 1 are possible in a core::bool'); + expect(() => new CairoBool('0x100')).toThrow( + 'Only values 0 or 1 are possible in a core::bool' + ); + }); + }); + + describe('toBoolean method', () => { + test('should return the stored boolean value', () => { + const values = [0, 1]; + values.forEach((val) => { + const bool = new CairoBool(val); + expect(bool.toBoolean()).toBe(Boolean(val)); + }); + }); + + test('should handle zero', () => { + const bool = new CairoBool(0); + expect(bool.toBoolean()).toBe(false); + }); + + test('should handle one', () => { + const bool = new CairoBool(1); + expect(bool.toBoolean()).toBe(true); + }); + }); + + describe('toHexString method', () => { + test('should convert zero to hex', () => { + const bool = new CairoBool(0); + expect(bool.toHexString()).toBe('0x0'); + }); + + test('should convert 1 value to hex', () => { + const bool = new CairoBool(1); + expect(bool.toHexString()).toBe('0x1'); + }); + + test('should handle bigint input', () => { + const bool = new CairoBool(1n); + expect(bool.toHexString()).toBe('0x1'); + }); + }); + + describe('toApiRequest method', () => { + test('should return hex string array for zero', () => { + const bool = new CairoBool(0); + const result = bool.toApiRequest(); + expect(result).toEqual(['0']); + expect(result).toHaveProperty('__compiled__', true); + }); + + test('should return hex string array for 1 number', () => { + const bool = new CairoBool(1); + const result = bool.toApiRequest(); + expect(result).toEqual(['1']); + expect(result).toHaveProperty('__compiled__', true); + }); + + test('should handle bigint input', () => { + const bool = new CairoBool(1n); + const result = bool.toApiRequest(); + expect(result).toEqual(['1']); + expect(result).toHaveProperty('__compiled__', true); + }); + }); + + describe('validate static method', () => { + test('should validate correct number inputs', () => { + expect(() => CairoBool.validate(0)).not.toThrow(); + expect(() => CairoBool.validate(1)).not.toThrow(); + }); + + test('should validate correct bigint inputs', () => { + expect(() => CairoBool.validate(0n)).not.toThrow(); + expect(() => CairoBool.validate(1n)).not.toThrow(); + }); + test('should validate correct bigint inputs', () => { + expect(() => CairoBool.validate(false)).not.toThrow(); + expect(() => CairoBool.validate(true)).not.toThrow(); + }); + + test('should reject invalid types', () => { + expect(() => CairoBool.validate(null as any)).toThrow('Invalid input: null or undefined'); + expect(() => CairoBool.validate(undefined as any)).toThrow( + 'Invalid input: null or undefined' + ); + expect(() => CairoBool.validate({} as any)).toThrow( + 'Invalid input: objects are not supported' + ); + expect(() => CairoBool.validate([] as any)).toThrow( + 'Invalid input: objects are not supported' + ); + }); + + test('should reject negative values', () => { + expect(() => CairoBool.validate(-1)).toThrow( + 'Only values 0 or 1 are possible in a core::bool' + ); + expect(() => CairoBool.validate(-100n)).toThrow( + 'Only values 0 or 1 are possible in a core::bool' + ); + }); + + test('should reject values exceeding bool range', () => { + expect(() => CairoBool.validate(2)).toThrow( + 'Only values 0 or 1 are possible in a core::bool' + ); + // eslint-disable-next-line no-underscore-dangle + expect(() => CairoBool.__processData(2)).toThrow('Invalid input for a core::bool'); + }); + + test('should reject decimal numbers', () => { + expect(() => CairoBool.validate(42.5)).toThrow( + 'Invalid input: decimal numbers are not supported, only integers' + ); + }); + }); + + describe('is static method', () => { + test('should return true for valid inputs', () => { + expect(CairoBool.is(0)).toBe(true); + expect(CairoBool.is(1)).toBe(true); + }); + + test('should return false for invalid inputs', () => { + expect(CairoBool.is(-1)).toBe(false); + expect(CairoBool.is(2)).toBe(false); + expect(CairoBool.is(null as any)).toBe(false); + expect(CairoBool.is(undefined as any)).toBe(false); + expect(CairoBool.is({} as any)).toBe(false); + expect(CairoBool.is(42.5)).toBe(false); + }); + + test('should handle unknown data types in is method', () => { + // Valid unknown types + expect(CairoBool.is(1 as unknown)).toBe(true); + expect(CairoBool.is('0' as unknown)).toBe(true); + expect(CairoBool.is(true as unknown)).toBe(true); + expect(CairoBool.is(false as unknown)).toBe(true); + + // Invalid unknown types + expect(CairoBool.is({} as unknown)).toBe(false); + expect(CairoBool.is([] as unknown)).toBe(false); + expect(CairoBool.is(null as unknown)).toBe(false); + expect(CairoBool.is(undefined as unknown)).toBe(false); + expect(CairoBool.is(Symbol('test') as unknown)).toBe(false); + expect(CairoBool.is(2 as unknown)).toBe(false); // out of range + expect(CairoBool.is(-1 as unknown)).toBe(false); // out of range + }); + }); + + describe('isAbiType static method', () => { + test('should identify correct ABI type', () => { + expect(CairoBool.isAbiType('core::bool')).toBe(true); + expect(CairoBool.isAbiType('core::integer::u16')).toBe(false); + expect(CairoBool.isAbiType('core::integer::u32')).toBe(false); + expect(CairoBool.isAbiType('felt252')).toBe(false); + }); + }); + + describe('Static methods', () => { + describe('factoryFromApiResponse method', () => { + test('should create CairoBool from API response iterator', () => { + const mockIterator = { + next: jest.fn().mockReturnValue({ value: '0x1', done: false }), + }; + const bool = CairoBool.factoryFromApiResponse(mockIterator as any); + expect(bool.data).toBe(true); + }); + }); + }); + + describe('Round-trip consistency', () => { + test('should maintain consistency between constructor types', () => { + const testValue = true; + const boolFromNumber = new CairoBool(testValue); + const boolFromBigint = new CairoBool(1n); + const boolFromString = new CairoBool('1'); + expect(boolFromNumber.toBoolean()).toBe(boolFromBigint.toBoolean()); + expect(boolFromNumber.toBoolean()).toBe(boolFromString.toBoolean()); + expect(boolFromBigint.toBoolean()).toBe(boolFromString.toBoolean()); + }); + + test('should handle string-to-bigint-to-string round trips', () => { + const originalValue = 1; + const bool = new CairoBool(originalValue); + const bigintValue = bool.toBoolean(); + const newBool = new CairoBool(bigintValue); + + expect(newBool.toBoolean()).toBe(true); + expect(newBool.data).toBe(bool.data); + }); + }); +}); diff --git a/__tests__/utils/cairoDataTypes/CairoByteArray.test.ts b/__tests__/utils/cairoDataTypes/CairoByteArray.test.ts index fea36dce9..d4b81b4e8 100644 --- a/__tests__/utils/cairoDataTypes/CairoByteArray.test.ts +++ b/__tests__/utils/cairoDataTypes/CairoByteArray.test.ts @@ -15,9 +15,9 @@ describe('CairoByteArray Unit Tests', () => { // Verify API request format const apiRequest = byteArray.toApiRequest(); - expect(apiRequest[0]).toBe('0x0'); // data length - expect(apiRequest[1]).toBe('0x48656c6c6f2c20576f726c6421'); // pending_word as hex - expect(apiRequest[2]).toBe('0xd'); // pending_word_len + expect(apiRequest[0]).toBe('0'); // data length + expect(apiRequest[1]).toBe('5735816763073854918203775149089'); + expect(apiRequest[2]).toBe('13'); // pending_word_len }); test('should handle exactly 31 bytes string', () => { @@ -30,7 +30,7 @@ describe('CairoByteArray Unit Tests', () => { // Verify API request format const apiRequest = byteArray.toApiRequest(); - expect(apiRequest[0]).toBe('0x1'); // data length + expect(apiRequest[0]).toBe('1'); // data length expect(apiRequest.length).toBe(4); // 1 (length) + 1 (chunk data) + 1 (pending_word) + 1 (pending_word_len) }); @@ -44,7 +44,7 @@ describe('CairoByteArray Unit Tests', () => { // Verify API request format const apiRequest = byteArray.toApiRequest(); - expect(apiRequest[0]).toBe('0x2'); // data length + expect(apiRequest[0]).toBe('2'); // data length expect(apiRequest.length).toBe(5); // 1 (length) + 2 (chunk data) + 1 (pending_word) + 1 (pending_word_len) }); @@ -57,9 +57,9 @@ describe('CairoByteArray Unit Tests', () => { // Verify API request format const apiRequest = byteArray.toApiRequest(); - expect(apiRequest[0]).toBe('0x0'); // data length - expect(apiRequest[1]).toBe('0x0'); // pending_word as hex - expect(apiRequest[2]).toBe('0x0'); // pending_word_len + expect(apiRequest[0]).toBe('0'); // data length + expect(apiRequest[1]).toBe('0'); // pending_word as hex + expect(apiRequest[2]).toBe('0'); // pending_word_len }); }); @@ -280,9 +280,9 @@ describe('CairoByteArray Unit Tests', () => { const byteArray = new CairoByteArray('Test'); const apiRequest = byteArray.toApiRequest(); - expect(apiRequest[0]).toBe('0x0'); // data length (0 chunks) - expect(apiRequest[1]).toBe('0x54657374'); // pending_word "Test" as hex - expect(apiRequest[2]).toBe('0x4'); // pending_word_len + expect(apiRequest[0]).toBe('0'); // data length (0 chunks) + expect(apiRequest[1]).toBe('1415934836'); // pending_word "Test" + expect(apiRequest[2]).toBe('4'); // pending_word_len }); test('should handle data with multiple chunks', () => { @@ -290,7 +290,7 @@ describe('CairoByteArray Unit Tests', () => { const byteArray = new CairoByteArray(longString); const apiRequest = byteArray.toApiRequest(); - expect(apiRequest[0]).toBe('0x1'); // data length (1 chunk) + expect(apiRequest[0]).toBe('1'); // data length (1 chunk) expect(apiRequest.length).toBe(4); // 1 (length) + 1 (chunk data) + 1 (pending_word) + 1 (pending_word_len) }); @@ -577,9 +577,9 @@ describe('CairoByteArray Unit Tests', () => { // Verify API request structure expect(apiRequest).toBeInstanceOf(Array); - expect(apiRequest[0]).toBe('0x0'); // data length (no complete chunks) + expect(apiRequest[0]).toBe('0'); // data length (no complete chunks) expect(typeof apiRequest[1]).toBe('string'); // pending_word as hex string - expect(apiRequest[2]).toBe('0x10'); // pending_word_len + expect(apiRequest[2]).toBe('16'); // pending_word_len // Deserialize from API response const iterator = apiRequest[Symbol.iterator](); @@ -622,9 +622,9 @@ describe('CairoByteArray Unit Tests', () => { // Verify API request structure expect(apiRequest).toBeInstanceOf(Array); - expect(apiRequest[0]).toBe('0x0'); // data length - expect(apiRequest[1]).toBe('0x0'); // pending_word - expect(apiRequest[2]).toBe('0x0'); // pending_word_len + expect(apiRequest[0]).toBe('0'); // data length + expect(apiRequest[1]).toBe('0'); // pending_word + expect(apiRequest[2]).toBe('0'); // pending_word_len // Deserialize from API response const iterator = apiRequest[Symbol.iterator](); diff --git a/__tests__/utils/cairoDataTypes/CairoBytes31.test.ts b/__tests__/utils/cairoDataTypes/CairoBytes31.test.ts index 7679d082b..0f4e1f715 100644 --- a/__tests__/utils/cairoDataTypes/CairoBytes31.test.ts +++ b/__tests__/utils/cairoDataTypes/CairoBytes31.test.ts @@ -215,29 +215,29 @@ describe('CairoBytes31 class Unit Tests', () => { describe('toApiRequest method', () => { test('should return hex string array for empty data', () => { const bytes31 = new CairoBytes31(''); - expect(bytes31.toApiRequest()).toEqual(['0x0']); + expect(bytes31.toApiRequest()).toEqual(['0']); }); test('should return hex string array for text data', () => { const bytes31 = new CairoBytes31('A'); // ASCII 65 - expect(bytes31.toApiRequest()).toEqual(['0x41']); + expect(bytes31.toApiRequest()).toEqual(['65']); }); test('should return hex string array for multi-byte data', () => { const bytes31 = new CairoBytes31('AB'); // 0x4142 = 16706 - expect(bytes31.toApiRequest()).toEqual(['0x4142']); + expect(bytes31.toApiRequest()).toEqual(['16706']); }); test('should return hex string array for Buffer input', () => { const buffer = Buffer.from([1, 0]); // 0x0100 = 256 const bytes31 = new CairoBytes31(buffer); - expect(bytes31.toApiRequest()).toEqual(['0x100']); + expect(bytes31.toApiRequest()).toEqual(['256']); }); test('should return hex string array for large values', () => { const array = new Uint8Array([222, 173, 190, 239]); // 0xdeadbeef const bytes31 = new CairoBytes31(array); - expect(bytes31.toApiRequest()).toEqual(['0xdeadbeef']); + expect(bytes31.toApiRequest()).toEqual(['3735928559']); }); }); diff --git a/__tests__/utils/cairoDataTypes/CairoEthAddress.test.ts b/__tests__/utils/cairoDataTypes/CairoEthAddress.test.ts new file mode 100644 index 000000000..929aed3c4 --- /dev/null +++ b/__tests__/utils/cairoDataTypes/CairoEthAddress.test.ts @@ -0,0 +1,448 @@ +import { ETH_ADDRESS } from '../../../src'; +import { RANGE_ETH_ADDRESS } from '../../../src/global/constants'; +import { CairoEthAddress } from '../../../src/utils/cairoDataTypes'; + +describe('CairoEthAddress class Unit Tests', () => { + describe('constructor with different input types', () => { + test('should handle number input', () => { + const ethAddr = new CairoEthAddress(42); + expect(ethAddr.data).toBe(42n); + }); + + test('should handle bigint input', () => { + const ethAddr = new CairoEthAddress(123n); + expect(ethAddr.data).toBe(123n); + }); + + test('should handle zero values', () => { + const ethAddrFromNumber = new CairoEthAddress(0); + const ethAddrFromBigint = new CairoEthAddress(0n); + + expect(ethAddrFromNumber.data).toBe(0n); + expect(ethAddrFromBigint.data).toBe(0n); + }); + + test('should handle maximum ethAddr value', () => { + const maxethAddr = RANGE_ETH_ADDRESS.max; + const ethAddr = new CairoEthAddress(maxethAddr); + expect(ethAddr.data).toBe(maxethAddr); + }); + + test('should convert number to bigint internally', () => { + const ethAddr = new CairoEthAddress(200); + expect(typeof ethAddr.data).toBe('bigint'); + expect(ethAddr.data).toBe(200n); + }); + }); + + describe('validation', () => { + test('should accept valid ethAddr values', () => { + expect(() => new CairoEthAddress(0)).not.toThrow(); + expect(() => new CairoEthAddress(128)).not.toThrow(); + expect(() => new CairoEthAddress(255)).not.toThrow(); + expect(() => new CairoEthAddress('100')).not.toThrow(); + expect(() => new CairoEthAddress(100n)).not.toThrow(); + }); + + test('should reject negative values', () => { + expect(() => new CairoEthAddress(-1)).toThrow( + 'Validate: arg should be in range [0, 2^160-1]' + ); + expect(() => new CairoEthAddress(-100n)).toThrow( + 'Validate: arg should be in range [0, 2^160-1]' + ); + expect(() => new CairoEthAddress('-1')).toThrow( + 'Validate: arg should be in range [0, 2^160-1]' + ); + }); + + test('should reject values greater than 255', () => { + expect(() => new CairoEthAddress(RANGE_ETH_ADDRESS.max + 1n)).toThrow( + 'Validate: arg should be in range [0, 2^160-1]' + ); + expect( + () => new CairoEthAddress('99999999999999999999999999999999999999999999999999999999999999') + ).toThrow('Validate: arg should be in range [0, 2^160-1]'); + }); + + test('should handle valid string inputs correctly', () => { + const ethAddrFromDecString = new CairoEthAddress('200'); + const ethAddrFromHexString = new CairoEthAddress('0xff'); + + expect(ethAddrFromDecString.data).toBe(200n); + expect(ethAddrFromHexString.data).toBe(255n); + }); + + test('should handle edge cases and invalid inputs', () => { + expect(() => CairoEthAddress.validate(null as any)).toThrow( + 'Invalid input: null or undefined' + ); + expect(() => CairoEthAddress.validate(undefined as any)).toThrow( + 'Invalid input: null or undefined' + ); + expect(() => CairoEthAddress.validate({} as any)).toThrow( + 'Invalid input: objects are not supported' + ); + expect(() => CairoEthAddress.validate([] as any)).toThrow( + 'Invalid input: objects are not supported' + ); + }); + + test('should handle unknown data types properly', () => { + // Valid unknown data types that can be converted + expect(() => new CairoEthAddress('100' as unknown)).not.toThrow(); + expect(() => new CairoEthAddress(100 as unknown)).not.toThrow(); + expect(() => new CairoEthAddress(100n as unknown)).not.toThrow(); + expect(() => new CairoEthAddress(true as unknown)).not.toThrow(); + expect(() => new CairoEthAddress(false as unknown)).not.toThrow(); + + // Invalid unknown data types + expect(() => new CairoEthAddress({} as unknown)).toThrow( + 'Invalid input: objects are not supported' + ); + expect(() => new CairoEthAddress([] as unknown)).toThrow( + 'Invalid input: objects are not supported' + ); + expect(() => new CairoEthAddress(null as unknown)).toThrow( + 'Invalid input: null or undefined' + ); + expect(() => new CairoEthAddress(undefined as unknown)).toThrow( + 'Invalid input: null or undefined' + ); + expect(() => new CairoEthAddress(Symbol('test') as unknown)).toThrow(); + + // Out of range values as unknown + expect(() => new CairoEthAddress((2n ** 161n) as unknown)).toThrow( + 'Validate: arg should be in range [0, 2^160-1]' + ); + expect(() => new CairoEthAddress(-1 as unknown)).toThrow( + 'Validate: arg should be in range [0, 2^160-1]' + ); + }); + + test('should reject decimal numbers', () => { + expect(() => new CairoEthAddress(42.5)).toThrow( + 'Invalid input: decimal numbers are not supported, only integers' + ); + expect(() => new CairoEthAddress(1.1)).toThrow( + 'Invalid input: decimal numbers are not supported, only integers' + ); + }); + + test('should validate string inputs with out-of-range values', () => { + expect(() => new CairoEthAddress((2n ** 162n).toString(10))).toThrow( + 'Validate: arg should be in range [0, 2^160-1]' + ); + expect(() => new CairoEthAddress('0xfffffffffffffffffffffffffffffffffffffffffff')).toThrow( + 'Validate: arg should be in range [0, 2^160-1]' + ); + }); + }); + + describe('toBigInt method', () => { + test('should return the stored bigint value', () => { + const values = [0, 1, 100, 200, 255]; + values.forEach((val) => { + const ethAddr = new CairoEthAddress(val); + expect(ethAddr.toBigInt()).toBe(BigInt(val)); + }); + }); + + test('should handle zero', () => { + const ethAddr = new CairoEthAddress(0); + expect(ethAddr.toBigInt()).toBe(0n); + }); + + test('should handle maximum ethAddr value', () => { + const ethAddr = new CairoEthAddress(255); + expect(ethAddr.toBigInt()).toBe(255n); + }); + + test('should handle large values', () => { + const ethAddr = new CairoEthAddress(200); + expect(ethAddr.toBigInt()).toBe(200n); + }); + }); + + describe('toHexString method', () => { + test('should convert zero to hex', () => { + const ethAddr = new CairoEthAddress(0); + expect(ethAddr.toHexString()).toBe('0x0'); + }); + + test('should convert maximum ethAddr value to hex', () => { + const ethAddr = new CairoEthAddress(RANGE_ETH_ADDRESS.max); + expect(ethAddr.toHexString()).toBe('0xffffffffffffffffffffffffffffffffffffffff'); + }); + + test('should handle bigint input', () => { + const ethAddr = new CairoEthAddress(170n); + expect(ethAddr.toHexString()).toBe('0xaa'); + }); + }); + + describe('toApiRequest method', () => { + test('should return hex string array for zero', () => { + const ethAddr = new CairoEthAddress(0); + const result = ethAddr.toApiRequest(); + expect(result).toEqual(['0']); + expect(result).toHaveProperty('__compiled__', true); + }); + + test('should handle bigint input', () => { + const ethAddr = new CairoEthAddress(128n); + const result = ethAddr.toApiRequest(); + expect(result).toEqual(['128']); + expect(result).toHaveProperty('__compiled__', true); + }); + }); + + describe('validate static method', () => { + test('should validate correct number inputs', () => { + expect(() => CairoEthAddress.validate(0)).not.toThrow(); + expect(() => CairoEthAddress.validate(255)).not.toThrow(); + }); + + test('should validate correct bigint inputs', () => { + expect(() => CairoEthAddress.validate(0n)).not.toThrow(); + expect(() => CairoEthAddress.validate(255n)).not.toThrow(); + }); + + test('should reject invalid types', () => { + expect(() => CairoEthAddress.validate(null as any)).toThrow( + 'Invalid input: null or undefined' + ); + expect(() => CairoEthAddress.validate(undefined as any)).toThrow( + 'Invalid input: null or undefined' + ); + expect(() => CairoEthAddress.validate({} as any)).toThrow( + 'Invalid input: objects are not supported' + ); + expect(() => CairoEthAddress.validate([] as any)).toThrow( + 'Invalid input: objects are not supported' + ); + }); + + test('should reject negative values', () => { + expect(() => CairoEthAddress.validate(-1)).toThrow( + 'Validate: arg should be in range [0, 2^160-1]' + ); + expect(() => CairoEthAddress.validate(-100n)).toThrow( + 'Validate: arg should be in range [0, 2^160-1]' + ); + }); + + test('should reject values exceeding ethAddr range', () => { + expect(() => CairoEthAddress.validate(RANGE_ETH_ADDRESS.max + 1n)).toThrow( + 'Validate: arg should be in range [0, 2^160-1]' + ); + }); + + test('should reject decimal numbers', () => { + expect(() => CairoEthAddress.validate(42.5)).toThrow( + 'Invalid input: decimal numbers are not supported, only integers' + ); + }); + }); + + describe('is static method', () => { + test('should return true for valid inputs', () => { + expect(CairoEthAddress.is(0)).toBe(true); + expect(CairoEthAddress.is(128)).toBe(true); + expect(CairoEthAddress.is(100n)).toBe(true); + expect(CairoEthAddress.is('200')).toBe(true); + }); + + test('should return false for invalid inputs', () => { + expect(CairoEthAddress.is(-1)).toBe(false); + expect(CairoEthAddress.is(RANGE_ETH_ADDRESS.max + 1n)).toBe(false); + expect(CairoEthAddress.is(null as any)).toBe(false); + expect(CairoEthAddress.is(undefined as any)).toBe(false); + expect(CairoEthAddress.is({} as any)).toBe(false); + expect(CairoEthAddress.is(42.5)).toBe(false); + }); + + test('should handle unknown data types in is method', () => { + // Valid unknown types + expect(CairoEthAddress.is(100 as unknown)).toBe(true); + expect(CairoEthAddress.is('200' as unknown)).toBe(true); + expect(CairoEthAddress.is(true as unknown)).toBe(true); + expect(CairoEthAddress.is(false as unknown)).toBe(true); + + // Invalid unknown types + expect(CairoEthAddress.is({} as unknown)).toBe(false); + expect(CairoEthAddress.is([] as unknown)).toBe(false); + expect(CairoEthAddress.is(null as unknown)).toBe(false); + expect(CairoEthAddress.is(undefined as unknown)).toBe(false); + expect(CairoEthAddress.is(Symbol('test') as unknown)).toBe(false); + expect(CairoEthAddress.is((RANGE_ETH_ADDRESS.max + 1n) as unknown)).toBe(false); // out of range + expect(CairoEthAddress.is(-1 as unknown)).toBe(false); // out of range + }); + }); + + describe('isAbiType static method', () => { + test('should identify correct ABI type', () => { + expect(CairoEthAddress.isAbiType(ETH_ADDRESS)).toBe(true); + expect(CairoEthAddress.isAbiType('core::integer::u16')).toBe(false); + expect(CairoEthAddress.isAbiType('core::integer::u32')).toBe(false); + expect(CairoEthAddress.isAbiType('felt252')).toBe(false); + }); + }); + + describe('edge cases and consistency checks', () => { + test('should handle boundary values correctly', () => { + const minethAddr = new CairoEthAddress(0); + const maxethAddr = new CairoEthAddress(RANGE_ETH_ADDRESS.max); + + expect(minethAddr.data).toBe(0n); + expect(maxethAddr.data).toBe(RANGE_ETH_ADDRESS.max); + expect(minethAddr.toBigInt()).toBe(0n); + expect(maxethAddr.toBigInt()).toBe(RANGE_ETH_ADDRESS.max); + }); + + test('should maintain consistency across methods', () => { + const values = [0, 1, 100, 200, 255]; + values.forEach((val) => { + const ethAddr = new CairoEthAddress(val); + const bigintVal = ethAddr.toBigInt(); + const apiRequest = ethAddr.toApiRequest(); + + expect(bigintVal).toBe(BigInt(val)); + expect(apiRequest[0]).toBe(val.toString(10)); + }); + }); + + test('should handle number and bigint inputs consistently', () => { + const testValues = [0, 50, 100, 200, 255]; + testValues.forEach((val) => { + const ethAddrFromNumber = new CairoEthAddress(val); + const ethAddrFromBigint = new CairoEthAddress(BigInt(val)); + + expect(ethAddrFromNumber.data).toBe(ethAddrFromBigint.data); + expect(ethAddrFromNumber.toBigInt()).toBe(ethAddrFromBigint.toBigInt()); + expect(ethAddrFromNumber.toHexString()).toBe(ethAddrFromBigint.toHexString()); + }); + }); + + test('should preserve exact values without precision loss', () => { + const ethAddr = new CairoEthAddress(255); + expect(ethAddr.toBigInt()).toBe(255n); + expect(Number(ethAddr.toBigInt())).toBe(255); + }); + }); + + describe('String handling', () => { + describe('Hex strings', () => { + test('should handle hex strings with 0x prefix', () => { + const ethAddr = new CairoEthAddress('0xff'); + expect(ethAddr.data).toBe(255n); + }); + }); + + describe('Decimal strings', () => { + test('should handle decimal strings', () => { + const ethAddr = new CairoEthAddress('200'); + expect(ethAddr.data).toBe(200n); + }); + + test('should handle zero as decimal string', () => { + const ethAddr = new CairoEthAddress('0'); + expect(ethAddr.data).toBe(0n); + }); + + test('should handle max ethAddr as decimal string', () => { + const ethAddr = new CairoEthAddress('255'); + expect(ethAddr.data).toBe(255n); + }); + }); + }); + + describe('Static methods', () => { + describe('validate method', () => { + test('should validate valid ethAddr range', () => { + expect(() => CairoEthAddress.validate(0)).not.toThrow(); + expect(() => CairoEthAddress.validate(255)).not.toThrow(); + expect(() => CairoEthAddress.validate(128)).not.toThrow(); + }); + + test('should reject out-of-range values', () => { + expect(() => CairoEthAddress.validate(-1)).toThrow(); + expect(() => CairoEthAddress.validate(RANGE_ETH_ADDRESS.max + 1n)).toThrow(); + }); + }); + + describe('is method', () => { + test('should return true for valid values', () => { + expect(CairoEthAddress.is(0)).toBe(true); + expect(CairoEthAddress.is(255)).toBe(true); + expect(CairoEthAddress.is('128')).toBe(true); + }); + + test('should return false for invalid values', () => { + expect(CairoEthAddress.is(-1)).toBe(false); + expect(CairoEthAddress.is(RANGE_ETH_ADDRESS.max + 1n)).toBe(false); + expect(CairoEthAddress.is(null as any)).toBe(false); + }); + }); + + describe('isAbiType method', () => { + test('should return true for correct ABI selector', () => { + expect(CairoEthAddress.isAbiType(ETH_ADDRESS)).toBe(true); + }); + + test('should return false for incorrect ABI selector', () => { + expect(CairoEthAddress.isAbiType('core::integer::u16')).toBe(false); + expect(CairoEthAddress.isAbiType('felt252')).toBe(false); + }); + }); + + describe('factoryFromApiResponse method', () => { + test('should create CairoEthAddress from API response iterator', () => { + const mockIterator = { + next: jest.fn().mockReturnValue({ value: '0x42', done: false }), + }; + const ethAddr = CairoEthAddress.factoryFromApiResponse(mockIterator as any); + expect(ethAddr.data).toBe(0x42n); + }); + + test('should handle hex string from API response', () => { + const mockIterator = { + next: jest.fn().mockReturnValue({ value: '0xff', done: false }), + }; + const ethAddr = CairoEthAddress.factoryFromApiResponse(mockIterator as any); + expect(ethAddr.data).toBe(255n); + }); + + test('should handle max ethAddr value from API response', () => { + const mockIterator = { + next: jest.fn().mockReturnValue({ value: '255', done: false }), + }; + const ethAddr = CairoEthAddress.factoryFromApiResponse(mockIterator as any); + expect(ethAddr.data).toBe(255n); + }); + }); + }); + + describe('Round-trip consistency', () => { + test('should maintain consistency between constructor types', () => { + const testValue = 200; + const ethAddrFromNumber = new CairoEthAddress(testValue); + const ethAddrFromBigint = new CairoEthAddress(BigInt(testValue)); + const ethAddrFromString = new CairoEthAddress(testValue.toString()); + + expect(ethAddrFromNumber.toBigInt()).toBe(ethAddrFromBigint.toBigInt()); + expect(ethAddrFromNumber.toBigInt()).toBe(ethAddrFromString.toBigInt()); + expect(ethAddrFromBigint.toBigInt()).toBe(ethAddrFromString.toBigInt()); + }); + + test('should handle string-to-bigint-to-string round trips', () => { + const originalValue = 200; + const ethAddr = new CairoEthAddress(originalValue); + const bigintValue = ethAddr.toBigInt(); + const newethAddr = new CairoEthAddress(bigintValue); + + expect(newethAddr.toBigInt()).toBe(BigInt(originalValue)); + expect(newethAddr.data).toBe(ethAddr.data); + }); + }); +}); diff --git a/__tests__/utils/cairoDataTypes/CairoFelt252.test.ts b/__tests__/utils/cairoDataTypes/CairoFelt252.test.ts index eaf006683..e80924d91 100644 --- a/__tests__/utils/cairoDataTypes/CairoFelt252.test.ts +++ b/__tests__/utils/cairoDataTypes/CairoFelt252.test.ts @@ -299,11 +299,11 @@ describe('CairoFelt252 class Unit Tests', () => { describe('toApiRequest method', () => { test('should return hex string array', () => { const felt = new CairoFelt252(123n); - expect(felt.toApiRequest()).toEqual(['0x7b']); + expect(felt.toApiRequest()).toEqual(['123']); const largeFelt = new CairoFelt252(2n ** 200n); expect(largeFelt.toApiRequest()).toEqual([ - '0x100000000000000000000000000000000000000000000000000', + '1606938044258990275541962092341162602522202993782792835301376', ]); }); }); diff --git a/__tests__/utils/cairoDataTypes/CairoFixedArray.test.ts b/__tests__/utils/cairoDataTypes/CairoFixedArray.test.ts index 88ac9abee..473a85b82 100644 --- a/__tests__/utils/cairoDataTypes/CairoFixedArray.test.ts +++ b/__tests__/utils/cairoDataTypes/CairoFixedArray.test.ts @@ -256,7 +256,7 @@ describe('CairoFixedArray class Unit test', () => { hdParsingStrategy ); const result = fixedArray.toApiRequest(); - expect(result).toEqual(['0x1', '0x2', '0x3']); + expect(result).toEqual(['1', '2', '3']); }); test('should create and serialize from object input', () => { @@ -266,7 +266,7 @@ describe('CairoFixedArray class Unit test', () => { hdParsingStrategy ); const result = fixedArray.toApiRequest(); - expect(result).toEqual(['0x1', '0x2', '0x3']); + expect(result).toEqual(['1', '2', '3']); }); test('should work with parsing strategy', () => { @@ -277,8 +277,8 @@ describe('CairoFixedArray class Unit test', () => { const result2 = array2.toApiRequest(); // Unified parsing strategy approach for API serialization - expect(result1).toEqual(['0x1', '0x2']); - expect(result2).toEqual(['0x1', '0x2']); + expect(result1).toEqual(['1', '2']); + expect(result2).toEqual(['1', '2']); }); test('should throw for invalid inputs', () => { @@ -303,7 +303,7 @@ describe('CairoFixedArray class Unit test', () => { hdParsingStrategy ); const result = fixedArray.toApiRequest(); - expect(result).toEqual(['0x1', '0x2', '0x3', '0x4']); + expect(result).toEqual(['1', '2', '3', '4']); }); test('should handle edge cases', () => { @@ -315,7 +315,7 @@ describe('CairoFixedArray class Unit test', () => { // Single element const singleArray = new CairoFixedArray([42], '[core::integer::u8; 1]', hdParsingStrategy); const singleResult = singleArray.toApiRequest(); - expect(singleResult).toEqual(['0x2a']); + expect(singleResult).toEqual(['42']); }); }); @@ -327,7 +327,7 @@ describe('CairoFixedArray class Unit test', () => { hdParsingStrategy ); const result = fixedArray.toApiRequest(); - expect(result).toEqual(['0x1', '0x2', '0x3']); + expect(result).toEqual(['1', '2', '3']); }); test('should work with hdParsingStrategy', () => { @@ -337,8 +337,8 @@ describe('CairoFixedArray class Unit test', () => { const result1 = array1.toApiRequest(); const result2 = array2.toApiRequest(); - expect(result1).toEqual(['0x64', '0xc8']); - expect(result2).toEqual(['0x64', '0xc8']); + expect(result1).toEqual(['100', '200']); + expect(result2).toEqual(['100', '200']); }); test('should handle nested arrays', () => { @@ -351,7 +351,7 @@ describe('CairoFixedArray class Unit test', () => { hdParsingStrategy ); const result = nestedArray.toApiRequest(); - expect(result).toEqual(['0x1', '0x2', '0x3', '0x4']); + expect(result).toEqual(['1', '2', '3', '4']); }); test('should throw for unsupported element types', () => { @@ -404,7 +404,7 @@ describe('CairoFixedArray class Unit test', () => { hdParsingStrategy ); const result = complexArray.toApiRequest(); - expect(result).toEqual(['0x1', '0x2', '0x3', '0x4', '0x5', '0x6', '0x7', '0x8']); + expect(result).toEqual(['1', '2', '3', '4', '5', '6', '7', '8']); }); test('should handle mixed data types in content', () => { diff --git a/__tests__/utils/cairoDataTypes/CairoInt128.test.ts b/__tests__/utils/cairoDataTypes/CairoInt128.test.ts index 5b5bb9282..33f13c450 100644 --- a/__tests__/utils/cairoDataTypes/CairoInt128.test.ts +++ b/__tests__/utils/cairoDataTypes/CairoInt128.test.ts @@ -223,14 +223,14 @@ describe('CairoInt128 class Unit Tests', () => { test('should return hex string array for zero', () => { const i128 = new CairoInt128(0); const result = i128.toApiRequest(); - expect(result).toEqual(['0x0']); + expect(result).toEqual(['0']); expect(result).toHaveProperty('__compiled__', true); }); test('should return hex string array for positive numbers', () => { const i128 = new CairoInt128(10000000000000000000n); const result = i128.toApiRequest(); - expect(result).toEqual(['0x8ac7230489e80000']); + expect(result).toEqual(['10000000000000000000']); expect(result).toHaveProperty('__compiled__', true); }); @@ -239,7 +239,7 @@ describe('CairoInt128 class Unit Tests', () => { const result = i128.toApiRequest(); // Negative value -10000000000000000000 becomes PRIME + (-10000000000000000000) = PRIME - 10000000000000000000 const fieldElement = PRIME - 10000000000000000000n; - const expectedValue = `0x${fieldElement.toString(16)}`; + const expectedValue = fieldElement.toString(10); expect(result).toEqual([expectedValue]); expect(result).toHaveProperty('__compiled__', true); }); @@ -248,8 +248,8 @@ describe('CairoInt128 class Unit Tests', () => { const minI128 = new CairoInt128(-(2n ** 127n)); const maxI128 = new CairoInt128(2n ** 127n - 1n); const minFieldElement = PRIME - 2n ** 127n; - const expectedMinValue = `0x${minFieldElement.toString(16)}`; - const expectedMaxValue = `0x${(2n ** 127n - 1n).toString(16)}`; + const expectedMinValue = minFieldElement.toString(10); + const expectedMaxValue = (2n ** 127n - 1n).toString(10); expect(minI128.toApiRequest()).toEqual([expectedMinValue]); expect(maxI128.toApiRequest()).toEqual([expectedMaxValue]); }); diff --git a/__tests__/utils/cairoDataTypes/CairoInt16.test.ts b/__tests__/utils/cairoDataTypes/CairoInt16.test.ts index cbbf8e054..f53aca48a 100644 --- a/__tests__/utils/cairoDataTypes/CairoInt16.test.ts +++ b/__tests__/utils/cairoDataTypes/CairoInt16.test.ts @@ -281,14 +281,14 @@ describe('CairoInt16 class Unit Tests', () => { test('should return hex string array for zero', () => { const i16 = new CairoInt16(0); const result = i16.toApiRequest(); - expect(result).toEqual(['0x0']); + expect(result).toEqual(['0']); expect(result).toHaveProperty('__compiled__', true); }); test('should return hex string array for positive numbers', () => { const i16 = new CairoInt16(1000); const result = i16.toApiRequest(); - expect(result).toEqual(['0x3e8']); + expect(result).toEqual(['1000']); expect(result).toHaveProperty('__compiled__', true); }); @@ -297,7 +297,7 @@ describe('CairoInt16 class Unit Tests', () => { const result = i16.toApiRequest(); // Negative value -1000 becomes PRIME + (-1000) = PRIME - 1000 const fieldElement = PRIME - 1000n; - const expectedValue = `0x${fieldElement.toString(16)}`; + const expectedValue = fieldElement.toString(10); expect(result).toEqual([expectedValue]); expect(result).toHaveProperty('__compiled__', true); }); @@ -306,9 +306,9 @@ describe('CairoInt16 class Unit Tests', () => { const minI16 = new CairoInt16(-32768); const maxI16 = new CairoInt16(32767); const minFieldElement = PRIME - 32768n; - const expectedMinValue = `0x${minFieldElement.toString(16)}`; + const expectedMinValue = minFieldElement.toString(10); expect(minI16.toApiRequest()).toEqual([expectedMinValue]); - expect(maxI16.toApiRequest()).toEqual(['0x7fff']); + expect(maxI16.toApiRequest()).toEqual(['32767']); }); }); @@ -377,19 +377,19 @@ describe('CairoInt16 class Unit Tests', () => { values.forEach((val) => { const i16 = new CairoInt16(val); const bigintVal = i16.toBigInt(); - const hexVal = i16.toHexString(); + const decimalVal = i16.toDecimalString(); const apiRequest = i16.toApiRequest(); expect(bigintVal).toBe(BigInt(val)); // For negative values, hex uses field element representation if (val < 0) { const fieldElement = PRIME + BigInt(val); - expect(hexVal).toBe(`0x${fieldElement.toString(16)}`); + expect(decimalVal).toBe(fieldElement.toString(10)); } else { - expect(hexVal).toBe(`0x${val.toString(16)}`); + expect(decimalVal).toBe(val.toString(10)); } // apiRequest should equal hexVal - expect(apiRequest[0]).toBe(hexVal); + expect(apiRequest[0]).toBe(decimalVal); }); }); diff --git a/__tests__/utils/cairoDataTypes/CairoInt32.test.ts b/__tests__/utils/cairoDataTypes/CairoInt32.test.ts index a53d90117..1c913d830 100644 --- a/__tests__/utils/cairoDataTypes/CairoInt32.test.ts +++ b/__tests__/utils/cairoDataTypes/CairoInt32.test.ts @@ -292,14 +292,14 @@ describe('CairoInt32 class Unit Tests', () => { test('should return hex string array for zero', () => { const i32 = new CairoInt32(0); const result = i32.toApiRequest(); - expect(result).toEqual(['0x0']); + expect(result).toEqual(['0']); expect(result).toHaveProperty('__compiled__', true); }); test('should return hex string array for positive numbers', () => { const i32 = new CairoInt32(1000000); const result = i32.toApiRequest(); - expect(result).toEqual(['0xf4240']); + expect(result).toEqual(['1000000']); expect(result).toHaveProperty('__compiled__', true); }); @@ -308,7 +308,7 @@ describe('CairoInt32 class Unit Tests', () => { const result = i32.toApiRequest(); // Negative value -1000000 becomes PRIME + (-1000000) = PRIME - 1000000 const fieldElement = PRIME - 1000000n; - const expectedValue = `0x${fieldElement.toString(16)}`; + const expectedValue = fieldElement.toString(10); expect(result).toEqual([expectedValue]); expect(result).toHaveProperty('__compiled__', true); }); @@ -317,8 +317,8 @@ describe('CairoInt32 class Unit Tests', () => { const minI32 = new CairoInt32(-2147483648); const maxI32 = new CairoInt32(2147483647); const minFieldElement = PRIME - 2147483648n; - const expectedMinValue = `0x${minFieldElement.toString(16)}`; - const expectedMaxValue = '0x7fffffff'; + const expectedMinValue = minFieldElement.toString(10); + const expectedMaxValue = '2147483647'; expect(minI32.toApiRequest()).toEqual([expectedMinValue]); expect(maxI32.toApiRequest()).toEqual([expectedMaxValue]); }); @@ -389,19 +389,19 @@ describe('CairoInt32 class Unit Tests', () => { values.forEach((val) => { const i32 = new CairoInt32(val); const bigintVal = i32.toBigInt(); - const hexVal = i32.toHexString(); + const decimalVal = i32.toDecimalString(); const apiRequest = i32.toApiRequest(); expect(bigintVal).toBe(BigInt(val)); // For negative values, hex uses field element representation if (val < 0) { const fieldElement = PRIME + BigInt(val); - expect(hexVal).toBe(`0x${fieldElement.toString(16)}`); + expect(decimalVal).toBe(fieldElement.toString(10)); } else { - expect(hexVal).toBe(`0x${val.toString(16)}`); + expect(decimalVal).toBe(val.toString(10)); } // apiRequest should equal hexVal - expect(apiRequest[0]).toBe(hexVal); + expect(apiRequest[0]).toBe(decimalVal); }); }); diff --git a/__tests__/utils/cairoDataTypes/CairoInt64.test.ts b/__tests__/utils/cairoDataTypes/CairoInt64.test.ts index b530eb25b..2ac4ef269 100644 --- a/__tests__/utils/cairoDataTypes/CairoInt64.test.ts +++ b/__tests__/utils/cairoDataTypes/CairoInt64.test.ts @@ -223,14 +223,14 @@ describe('CairoInt64 class Unit Tests', () => { test('should return hex string array for zero', () => { const i64 = new CairoInt64(0); const result = i64.toApiRequest(); - expect(result).toEqual(['0x0']); + expect(result).toEqual(['0']); expect(result).toHaveProperty('__compiled__', true); }); test('should return hex string array for positive numbers', () => { const i64 = new CairoInt64(1000000000n); const result = i64.toApiRequest(); - expect(result).toEqual(['0x3b9aca00']); + expect(result).toEqual(['1000000000']); expect(result).toHaveProperty('__compiled__', true); }); @@ -239,7 +239,7 @@ describe('CairoInt64 class Unit Tests', () => { const result = i64.toApiRequest(); // Negative value -1000000000 becomes PRIME + (-1000000000) = PRIME - 1000000000 const fieldElement = PRIME - 1000000000n; - const expectedValue = `0x${fieldElement.toString(16)}`; + const expectedValue = fieldElement.toString(10); expect(result).toEqual([expectedValue]); expect(result).toHaveProperty('__compiled__', true); }); @@ -248,8 +248,8 @@ describe('CairoInt64 class Unit Tests', () => { const minI64 = new CairoInt64(-(2n ** 63n)); const maxI64 = new CairoInt64(2n ** 63n - 1n); const minFieldElement = PRIME - 2n ** 63n; - const expectedMinValue = `0x${minFieldElement.toString(16)}`; - const expectedMaxValue = `0x${(2n ** 63n - 1n).toString(16)}`; + const expectedMinValue = minFieldElement.toString(10); + const expectedMaxValue = (2n ** 63n - 1n).toString(10); expect(minI64.toApiRequest()).toEqual([expectedMinValue]); expect(maxI64.toApiRequest()).toEqual([expectedMaxValue]); }); diff --git a/__tests__/utils/cairoDataTypes/CairoInt8.test.ts b/__tests__/utils/cairoDataTypes/CairoInt8.test.ts index 60f426978..75630ad01 100644 --- a/__tests__/utils/cairoDataTypes/CairoInt8.test.ts +++ b/__tests__/utils/cairoDataTypes/CairoInt8.test.ts @@ -306,14 +306,14 @@ describe('CairoInt8 class Unit Tests', () => { test('should return hex string array for zero', () => { const i8 = new CairoInt8(0); const result = i8.toApiRequest(); - expect(result).toEqual(['0x0']); + expect(result).toEqual(['0']); expect(result).toHaveProperty('__compiled__', true); }); test('should return hex string array for positive numbers', () => { const i8 = new CairoInt8(100); const result = i8.toApiRequest(); - expect(result).toEqual(['0x64']); + expect(result).toEqual(['100']); expect(result).toHaveProperty('__compiled__', true); }); @@ -322,7 +322,7 @@ describe('CairoInt8 class Unit Tests', () => { const result = i8.toApiRequest(); // Negative value -100 becomes PRIME + (-100) = PRIME - 100 const fieldElement = PRIME - 100n; - const expectedValue = `0x${fieldElement.toString(16)}`; + const expectedValue = fieldElement.toString(10); expect(result).toEqual([expectedValue]); expect(result).toHaveProperty('__compiled__', true); }); @@ -331,9 +331,9 @@ describe('CairoInt8 class Unit Tests', () => { const minI8 = new CairoInt8(-128); const maxI8 = new CairoInt8(127); const minFieldElement = PRIME - 128n; - const expectedMinValue = `0x${minFieldElement.toString(16)}`; + const expectedMinValue = minFieldElement.toString(10); expect(minI8.toApiRequest()).toEqual([expectedMinValue]); - expect(maxI8.toApiRequest()).toEqual(['0x7f']); + expect(maxI8.toApiRequest()).toEqual(['127']); }); }); @@ -402,19 +402,19 @@ describe('CairoInt8 class Unit Tests', () => { values.forEach((val) => { const i8 = new CairoInt8(val); const bigintVal = i8.toBigInt(); - const hexVal = i8.toHexString(); + const decimalVal = i8.toDecimalString(); const apiRequest = i8.toApiRequest(); expect(bigintVal).toBe(BigInt(val)); // For negative values, hex uses field element representation if (val < 0) { const fieldElement = PRIME + BigInt(val); - expect(hexVal).toBe(`0x${fieldElement.toString(16)}`); + expect(decimalVal).toBe(fieldElement.toString(10)); } else { - expect(hexVal).toBe(`0x${val.toString(16)}`); + expect(decimalVal).toBe(val.toString(10)); } // apiRequest should equal hexVal - expect(apiRequest[0]).toBe(hexVal); + expect(apiRequest[0]).toBe(decimalVal); }); }); diff --git a/__tests__/utils/cairoDataTypes/CairoStruct.test.ts b/__tests__/utils/cairoDataTypes/CairoStruct.test.ts index 14deb5b3c..030bea1ba 100644 --- a/__tests__/utils/cairoDataTypes/CairoStruct.test.ts +++ b/__tests__/utils/cairoDataTypes/CairoStruct.test.ts @@ -29,24 +29,24 @@ describe('CairoStruct', () => { describe('constructor variant', () => { test('content is an object', () => { const myCairoStruct = new CairoStruct({ y: 2, x: 1 }, abiPoint, strategies); // wrong order of properties - expect(myCairoStruct.toApiRequest()).toEqual(['0x1', '0x2']); + expect(myCairoStruct.toApiRequest()).toEqual(['1', '2']); expect(myCairoStruct.decompose(strategies)).toEqual({ x: 1n, y: 2n }); }); test('content is an array', () => { const myCairoStruct = new CairoStruct([1, 2], abiPoint, strategies); - expect(myCairoStruct.toApiRequest()).toEqual(['0x1', '0x2']); + expect(myCairoStruct.toApiRequest()).toEqual(['1', '2']); expect(myCairoStruct.decompose(strategies)).toEqual({ x: 1n, y: 2n }); }); test('content is an iterator', () => { const iter = ['0', '100'][Symbol.iterator](); const myCairoStruct = new CairoStruct(iter, abiPoint, strategies); - expect(myCairoStruct.toApiRequest()).toEqual(['0x0', '0x64']); + expect(myCairoStruct.toApiRequest()).toEqual(['0', '100']); expect(myCairoStruct.decompose(strategies)).toEqual({ x: 0n, y: 100n }); const iter2 = ['2', '11', '12', '13', '14'][Symbol.iterator](); const myCairoStruct2 = new CairoStruct(iter2, abiCat, strategies); - expect(myCairoStruct2.toApiRequest()).toEqual(['0x2', '0xb', '0xc', '0xd', '0xe']); + expect(myCairoStruct2.toApiRequest()).toEqual(['2', '11', '12', '13', '14']); expect(myCairoStruct2.decompose(strategies)).toEqual({ age: 2n, legs: { '0': 11n, '1': 12n, '2': 13n, '3': 14n }, @@ -69,7 +69,7 @@ describe('CairoStruct', () => { }, }; const myCairoStruct = new CairoStruct({ x: 1, y: 2 }, abiPoint, customStrategy); - expect(myCairoStruct.toApiRequest()).toEqual(['0x1', '0x2']); + expect(myCairoStruct.toApiRequest()).toEqual(['1', '2']); expect(myCairoStruct.decompose(customStrategy)).toEqual({ x: 1n, y: 2n }); }); }); @@ -103,9 +103,9 @@ describe('CairoStruct', () => { abiDog, strategies ); - expect(myStruct0.toApiRequest()).toEqual(['0x2', '0x3', '0x1', '0x2', '0x3']); + expect(myStruct0.toApiRequest()).toEqual(['2', '3', '1', '2', '3']); expect(myStruct0.decompose(hdParsingStrategy)).toEqual({ age: 2n, colors: [1n, 2n, 3n] }); - expect(myStruct1.toApiRequest()).toEqual(['0x2', '0x3', '0x1', '0x2', '0x3']); + expect(myStruct1.toApiRequest()).toEqual(['2', '3', '1', '2', '3']); expect(myStruct1.decompose(hdParsingStrategy)).toEqual({ age: 2n, colors: [1n, 2n, 3n] }); }); @@ -122,12 +122,12 @@ describe('CairoStruct', () => { abiHorse, strategies ); - expect(myResult0.toApiRequest()).toEqual(['0x2', '0x1', '0x2', '0x3', '0x4']); + expect(myResult0.toApiRequest()).toEqual(['2', '1', '2', '3', '4']); expect(myResult0.decompose(hdParsingStrategy)).toEqual({ age: 2n, legs_color: [1n, 2n, 3n, 4n], }); - expect(myResult1.toApiRequest()).toEqual(['0x2', '0x1', '0x2', '0x3', '0x4']); + expect(myResult1.toApiRequest()).toEqual(['2', '1', '2', '3', '4']); expect(myResult1.decompose(hdParsingStrategy)).toEqual({ age: 2n, legs_color: [1n, 2n, 3n, 4n], @@ -148,12 +148,12 @@ describe('CairoStruct', () => { abiCat, strategies ); - expect(myStruct0.toApiRequest()).toEqual(['0x2', '0x5', '0x6', '0x7', '0x8']); + expect(myStruct0.toApiRequest()).toEqual(['2', '5', '6', '7', '8']); expect(myStruct0.decompose(strategies)).toEqual({ age: 2n, legs: { '0': 5n, '1': 6n, '2': 7n, '3': 8n }, }); - expect(myStruct1.toApiRequest()).toEqual(['0x2', '0x5', '0x6', '0x7', '0x8']); + expect(myStruct1.toApiRequest()).toEqual(['2', '5', '6', '7', '8']); expect(myStruct1.decompose(strategies)).toEqual({ age: 2n, legs: { '0': 5n, '1': 6n, '2': 7n, '3': 8n }, @@ -173,9 +173,9 @@ describe('CairoStruct', () => { ); const myStruct0 = new CairoStruct({ power: 512, turbo: option0 }, abiTruck, strategies); const myStruct1 = new CairoStruct({ power: 512, turbo: myTypeOption }, abiTruck, strategies); - expect(myStruct0.toApiRequest()).toEqual(['0x200', '0x00', '0x2']); + expect(myStruct0.toApiRequest()).toEqual(['512', '0', '2']); expect(myStruct0.decompose(hdParsingStrategy)).toEqual({ power: 512n, turbo: option0 }); - expect(myStruct1.toApiRequest()).toEqual(['0x200', '0x00', '0x2']); + expect(myStruct1.toApiRequest()).toEqual(['512', '0', '2']); expect(myStruct1.decompose(hdParsingStrategy)).toEqual({ power: 512n, turbo: option0 }); }); @@ -191,9 +191,9 @@ describe('CairoStruct', () => { ); const myStruct0 = new CairoStruct({ area: 512, res: result }, abiDestruction, strategies); const myStruct1 = new CairoStruct({ area: 512, res: typeResult }, abiDestruction, strategies); - expect(myStruct0.toApiRequest()).toEqual(['0x200', '0x01', '0x5']); + expect(myStruct0.toApiRequest()).toEqual(['512', '1', '5']); expect(myStruct0.decompose(strategies)).toEqual({ area: 512n, res: result }); - expect(myStruct1.toApiRequest()).toEqual(['0x200', '0x01', '0x5']); + expect(myStruct1.toApiRequest()).toEqual(['512', '1', '5']); expect(myStruct1.decompose(strategies)).toEqual({ area: 512n, res: result }); }); @@ -211,12 +211,12 @@ describe('CairoStruct', () => { ); const struct0 = new CairoStruct(point2, abiPoint2, strategies); const struct2 = new CairoStruct(structPoint2, abiPoint2, strategies); - expect(struct0.toApiRequest()).toEqual(['0x3', '0x1', '0x2']); + expect(struct0.toApiRequest()).toEqual(['3', '1', '2']); expect(struct0.decompose(strategies)).toEqual({ thickness: 3n, location: { x: 1n, y: 2n }, }); - expect(struct2.toApiRequest()).toEqual(['0x3', '0x1', '0x2']); + expect(struct2.toApiRequest()).toEqual(['3', '1', '2']); expect(struct2.decompose(strategies)).toEqual({ thickness: 3n, location: { x: 1n, y: 2n }, diff --git a/__tests__/utils/cairoDataTypes/CairoTuple.integration.test.ts b/__tests__/utils/cairoDataTypes/CairoTuple.integration.test.ts index 359529824..f6419aad4 100644 --- a/__tests__/utils/cairoDataTypes/CairoTuple.integration.test.ts +++ b/__tests__/utils/cairoDataTypes/CairoTuple.integration.test.ts @@ -12,7 +12,7 @@ describe('CairoTuple integration tests', () => { // Convert to API request format const apiRequest = inputTuple.toApiRequest(); - expect(apiRequest).toEqual(['0x2a', '0x64']); + expect(apiRequest).toEqual(['42', '100']); // Simulate API response (same values back) const apiResponse = ['0x2a', '0x64']; @@ -29,14 +29,14 @@ describe('CairoTuple integration tests', () => { test('named tuple: user input → API request → response parsing', () => { // User provides named input const userInput = { x: 10, y: 20 }; - const namedTupleType = '(x:core::integer::u8, y:core::integer::u32)'; + const namedTupleType = '(x:felt, y:felt)'; // Create CairoTuple from named input const inputTuple = new CairoTuple(userInput, namedTupleType, hdParsingStrategy); // Convert to API request format (no length prefix) const apiRequest = inputTuple.toApiRequest(); - expect(apiRequest).toEqual(['0xa', '0x14']); + expect(apiRequest).toEqual(['10', '20']); // Simulate API response const apiResponse = ['0xa', '0x14']; @@ -60,7 +60,7 @@ describe('CairoTuple integration tests', () => { // Convert to API request (flattened, no length prefixes) const apiRequest = inputTuple.toApiRequest(); - expect(apiRequest).toEqual(['0x1', '0x2', '0x3']); + expect(apiRequest).toEqual(['1', '2', '3']); // Simulate API response const apiResponse = ['0x1', '0x2', '0x3']; @@ -107,11 +107,7 @@ describe('CairoTuple integration tests', () => { '(core::integer::u8, core::integer::u32)', hdParsingStrategy ); - const namedTuple = new CairoTuple( - { x: 3, y: 4 }, - '(x:core::integer::u8, y:core::integer::u32)', - hdParsingStrategy - ); + const namedTuple = new CairoTuple({ x: 3, y: 4 }, '(x:felt, y:felt)', hdParsingStrategy); const nestedTuple = new CairoTuple( [[5, 6], 7], '((core::integer::u8, core::integer::u8), core::integer::u32)', @@ -187,8 +183,8 @@ describe('CairoTuple integration tests', () => { // Expected: [felt_value, u8_value] expect(apiRequest).toHaveLength(2); - expect(apiRequest[0]).toBe('0x64'); // 100 in hex - expect(apiRequest[1]).toBe('0xc8'); // 200 in hex + expect(apiRequest[0]).toBe('100'); + expect(apiRequest[1]).toBe('200'); // Simulate API response and parse back const responseIterator = apiRequest[Symbol.iterator](); @@ -213,7 +209,7 @@ describe('CairoTuple integration tests', () => { // Should flatten completely const apiRequest = inputTuple.toApiRequest(); - expect(apiRequest).toEqual(['0x1', '0x2', '0x3', '0x4']); + expect(apiRequest).toEqual(['1', '2', '3', '4']); // Parse back and verify nesting is preserved const responseIterator = apiRequest[Symbol.iterator](); @@ -230,12 +226,7 @@ describe('CairoTuple integration tests', () => { expect(() => new CairoTuple([1, 2], tupleType, hdParsingStrategy)).not.toThrow(); expect(() => new CairoTuple({ 0: 1, 1: 2 }, tupleType, hdParsingStrategy)).not.toThrow(); expect( - () => - new CairoTuple( - { x: 1, y: 2 }, - '(x:core::integer::u8, y:core::integer::u32)', - hdParsingStrategy - ) + () => new CairoTuple({ x: 1, y: 2 }, '(x:felt, y:felt)', hdParsingStrategy) ).not.toThrow(); // Should fail - incorrect size @@ -258,8 +249,8 @@ describe('CairoTuple integration tests', () => { const apiRequest = largeTuple.toApiRequest(); expect(apiRequest).toHaveLength(50); - expect(apiRequest[0]).toBe('0x1'); - expect(apiRequest[49]).toBe('0x32'); // 50 in hex + expect(apiRequest[0]).toBe('1'); + expect(apiRequest[49]).toBe('50'); }); test('tuple with single element (not confused with primitive)', () => { @@ -270,7 +261,7 @@ describe('CairoTuple integration tests', () => { const apiRequest = singleTuple.toApiRequest(); // Should still be tuple format (no length prefix) - expect(apiRequest).toEqual(['0x2a']); + expect(apiRequest).toEqual(['42']); // Parse back const responseIterator = apiRequest[Symbol.iterator](); diff --git a/__tests__/utils/cairoDataTypes/CairoTuple.test.ts b/__tests__/utils/cairoDataTypes/CairoTuple.test.ts index 8f74090a4..87f75370e 100644 --- a/__tests__/utils/cairoDataTypes/CairoTuple.test.ts +++ b/__tests__/utils/cairoDataTypes/CairoTuple.test.ts @@ -23,10 +23,13 @@ describe('CairoTuple class Unit test', () => { 'core::integer::u8', 'core::integer::u32', ]); - // missing space expect(() => { CairoTuple.getTupleElementTypes('(core::integer::u8,core::integer::u32)'); - }).toThrow(new Error('abc')); + }).toThrow( + new Error( + '"(core::integer::u8,core::integer::u32)" is not a valid Cairo type (missing space after comma)' + ) + ); expect(CairoTuple.isAbiType('(core::integer::u8, core::integer::u32)')).toBe(true); expect(CairoTuple.isAbiType('(x:felt, y:felt)')).toBe(true); expect(CairoTuple.isAbiType('[core::integer::u8; 2]')).toBe(false); @@ -199,8 +202,8 @@ describe('CairoTuple class Unit test', () => { hdParsingStrategy ); const result = tuple.toApiRequest(); - // Should NOT have length prefix: ['0x1', '0x2', '0x3'] - expect(result).toEqual(['0x1', '0x2', '0x3']); + // Should NOT have length prefix: ['1', '2', '3'] + expect(result).toEqual(['1', '2', '3']); }); test('should create and serialize from object input', () => { @@ -210,8 +213,8 @@ describe('CairoTuple class Unit test', () => { hdParsingStrategy ); const result = tuple.toApiRequest(); - // Should NOT have length prefix: ['0x1', '0x2', '0x3'] - expect(result).toEqual(['0x1', '0x2', '0x3']); + // Should NOT have length prefix: ['1', '2', '3'] + expect(result).toEqual(['1', '2', '3']); }); test('should create and serialize from named object input', () => { @@ -221,8 +224,8 @@ describe('CairoTuple class Unit test', () => { hdParsingStrategy ); const result = tuple.toApiRequest(); - // Should NOT have length prefix: ['0x1', '0x2', '0x3'] - expect(result).toEqual(['0x1', '0x2', '0x3']); + // Should NOT have length prefix: ['1', '2', '3'] + expect(result).toEqual(['1', '2', '3']); }); test('should work with parsing strategy', () => { @@ -241,8 +244,8 @@ describe('CairoTuple class Unit test', () => { const result2 = tuple2.toApiRequest(); // Both should serialize the same way (no length prefix) - expect(result1).toEqual(['0x1', '0x2']); - expect(result2).toEqual(['0x1', '0x2']); + expect(result1).toEqual(['1', '2']); + expect(result2).toEqual(['1', '2']); }); test('should throw for invalid inputs', () => { @@ -260,7 +263,7 @@ describe('CairoTuple class Unit test', () => { ); const result = tuple.toApiRequest(); // Nested tuple should be flattened: [inner_elem1, inner_elem2, outer_elem] - expect(result).toEqual(['0x1', '0x2', '0x3']); + expect(result).toEqual(['1', '2', '3']); }); test('should handle tuple size mismatch', () => { @@ -280,7 +283,7 @@ describe('CairoTuple class Unit test', () => { ); const result = tuple.toApiRequest(); // No length prefix for tuples - expect(result).toEqual(['0x1', '0x2', '0x3']); + expect(result).toEqual(['1', '2', '3']); }); test('should work with hdParsingStrategy', () => { @@ -291,7 +294,7 @@ describe('CairoTuple class Unit test', () => { ); const result = tuple1.toApiRequest(); - expect(result).toEqual(['0x64', '0xc8']); + expect(result).toEqual(['100', '200']); }); test('should handle nested tuples with proper flattening', () => { @@ -305,7 +308,7 @@ describe('CairoTuple class Unit test', () => { ); const result = nestedTuple.toApiRequest(); // Should be completely flattened (no length prefixes anywhere) - expect(result).toEqual(['0x1', '0x2', '0x3', '0x4']); + expect(result).toEqual(['1', '2', '3', '4']); }); test('should throw for unsupported element types', () => { @@ -335,7 +338,7 @@ describe('CairoTuple class Unit test', () => { test('should handle single-element tuples', () => { const singleTuple = new CairoTuple([42], '(core::integer::u8)', hdParsingStrategy); expect(singleTuple.content.length).toBe(1); - expect(singleTuple.toApiRequest()).toEqual(['0x2a']); + expect(singleTuple.toApiRequest()).toEqual(['42']); }); test('should handle complex nested structures', () => { @@ -348,7 +351,7 @@ describe('CairoTuple class Unit test', () => { ); const result = complexTuple.toApiRequest(); // Expected: all flattened - expect(result).toEqual(['0x1', '0x2', '0x3', '0x4']); + expect(result).toEqual(['1', '2', '3', '4']); }); test('should handle mixed data types in content', () => { diff --git a/__tests__/utils/cairoDataTypes/CairoUint128.test.ts b/__tests__/utils/cairoDataTypes/CairoUint128.test.ts index fb631c2dd..95f70d6cb 100644 --- a/__tests__/utils/cairoDataTypes/CairoUint128.test.ts +++ b/__tests__/utils/cairoDataTypes/CairoUint128.test.ts @@ -195,14 +195,14 @@ describe('CairoUint128 class Unit Tests', () => { test('should return hex string array for zero', () => { const u128 = new CairoUint128(0); const result = u128.toApiRequest(); - expect(result).toEqual(['0x0']); + expect(result).toEqual(['0']); expect(result).toHaveProperty('__compiled__', true); }); test('should return hex string array for small numbers', () => { const u128 = new CairoUint128(42); const result = u128.toApiRequest(); - expect(result).toEqual(['0x2a']); + expect(result).toEqual(['42']); expect(result).toHaveProperty('__compiled__', true); }); @@ -210,14 +210,14 @@ describe('CairoUint128 class Unit Tests', () => { const maxU128 = 2n ** 128n - 1n; const u128 = new CairoUint128(maxU128); const result = u128.toApiRequest(); - expect(result).toEqual(['0xffffffffffffffffffffffffffffffff']); + expect(result).toEqual(['340282366920938463463374607431768211455']); expect(result).toHaveProperty('__compiled__', true); }); test('should handle bigint input', () => { const u128 = new CairoUint128(0x123456789abcdef0123456789abcdefn); const result = u128.toApiRequest(); - expect(result).toEqual(['0x123456789abcdef0123456789abcdef']); + expect(result).toEqual(['1512366075204170929049582354406559215']); expect(result).toHaveProperty('__compiled__', true); }); }); @@ -318,12 +318,10 @@ describe('CairoUint128 class Unit Tests', () => { values.forEach((val) => { const u128 = new CairoUint128(val); const bigintVal = u128.toBigInt(); - const hexVal = u128.toHexString(); const apiRequest = u128.toApiRequest(); expect(bigintVal).toBe(BigInt(val)); - expect(hexVal).toBe(`0x${val.toString(16)}`); - expect(apiRequest[0]).toBe(hexVal); + expect(apiRequest[0]).toBe(val.toString(10)); }); }); diff --git a/__tests__/utils/cairoDataTypes/CairoUint16.test.ts b/__tests__/utils/cairoDataTypes/CairoUint16.test.ts index 5de8c5527..1f014cd29 100644 --- a/__tests__/utils/cairoDataTypes/CairoUint16.test.ts +++ b/__tests__/utils/cairoDataTypes/CairoUint16.test.ts @@ -188,28 +188,28 @@ describe('CairoUint16 class Unit Tests', () => { test('should return hex string array for zero', () => { const u16 = new CairoUint16(0); const result = u16.toApiRequest(); - expect(result).toEqual(['0x0']); + expect(result).toEqual(['0']); expect(result).toHaveProperty('__compiled__', true); }); test('should return hex string array for small numbers', () => { const u16 = new CairoUint16(42); const result = u16.toApiRequest(); - expect(result).toEqual(['0x2a']); + expect(result).toEqual(['42']); expect(result).toHaveProperty('__compiled__', true); }); test('should return hex string array for large numbers', () => { const u16 = new CairoUint16(65535); const result = u16.toApiRequest(); - expect(result).toEqual(['0xffff']); + expect(result).toEqual(['65535']); expect(result).toHaveProperty('__compiled__', true); }); test('should handle bigint input', () => { const u16 = new CairoUint16(32768n); const result = u16.toApiRequest(); - expect(result).toEqual(['0x8000']); + expect(result).toEqual(['32768']); expect(result).toHaveProperty('__compiled__', true); }); }); @@ -301,12 +301,10 @@ describe('CairoUint16 class Unit Tests', () => { values.forEach((val) => { const u16 = new CairoUint16(val); const bigintVal = u16.toBigInt(); - const hexVal = u16.toHexString(); const apiRequest = u16.toApiRequest(); expect(bigintVal).toBe(BigInt(val)); - expect(hexVal).toBe(`0x${val.toString(16)}`); - expect(apiRequest[0]).toBe(hexVal); + expect(apiRequest[0]).toBe(val.toString(10)); }); }); diff --git a/__tests__/utils/cairoDataTypes/CairoUint32.test.ts b/__tests__/utils/cairoDataTypes/CairoUint32.test.ts index 2a13a8436..8a4f6b0ea 100644 --- a/__tests__/utils/cairoDataTypes/CairoUint32.test.ts +++ b/__tests__/utils/cairoDataTypes/CairoUint32.test.ts @@ -196,28 +196,28 @@ describe('CairoUint32 class Unit Tests', () => { describe('toApiRequest method', () => { test('should return hex string array for zero', () => { const u32 = new CairoUint32(0); - expect(u32.toApiRequest()).toEqual(['0x0']); + expect(u32.toApiRequest()).toEqual(['0']); }); test('should return hex string array for small numbers', () => { const u32 = new CairoUint32(42); - expect(u32.toApiRequest()).toEqual(['0x2a']); + expect(u32.toApiRequest()).toEqual(['42']); }); test('should return hex string array for large numbers', () => { const u32 = new CairoUint32(1000000); - expect(u32.toApiRequest()).toEqual(['0xf4240']); + expect(u32.toApiRequest()).toEqual(['1000000']); }); test('should return hex string array for maximum u32', () => { const maxU32 = 2n ** 32n - 1n; const u32 = new CairoUint32(maxU32); - expect(u32.toApiRequest()).toEqual(['0xffffffff']); + expect(u32.toApiRequest()).toEqual(['4294967295']); }); test('should handle bigint input', () => { const u32 = new CairoUint32(12345n); - expect(u32.toApiRequest()).toEqual(['0x3039']); + expect(u32.toApiRequest()).toEqual(['12345']); }); }); diff --git a/__tests__/utils/cairoDataTypes/CairoUint64.test.ts b/__tests__/utils/cairoDataTypes/CairoUint64.test.ts index 96514651b..015ea2002 100644 --- a/__tests__/utils/cairoDataTypes/CairoUint64.test.ts +++ b/__tests__/utils/cairoDataTypes/CairoUint64.test.ts @@ -194,14 +194,14 @@ describe('CairoUint64 class Unit Tests', () => { test('should return hex string array for zero', () => { const u64 = new CairoUint64(0); const result = u64.toApiRequest(); - expect(result).toEqual(['0x0']); + expect(result).toEqual(['0']); expect(result).toHaveProperty('__compiled__', true); }); test('should return hex string array for small numbers', () => { const u64 = new CairoUint64(42); const result = u64.toApiRequest(); - expect(result).toEqual(['0x2a']); + expect(result).toEqual(['42']); expect(result).toHaveProperty('__compiled__', true); }); @@ -209,14 +209,14 @@ describe('CairoUint64 class Unit Tests', () => { const maxU64 = 2n ** 64n - 1n; const u64 = new CairoUint64(maxU64); const result = u64.toApiRequest(); - expect(result).toEqual(['0xffffffffffffffff']); + expect(result).toEqual(['18446744073709551615']); expect(result).toHaveProperty('__compiled__', true); }); test('should handle bigint input', () => { const u64 = new CairoUint64(0x123456789abcdefn); const result = u64.toApiRequest(); - expect(result).toEqual(['0x123456789abcdef']); + expect(result).toEqual(['81985529216486895']); expect(result).toHaveProperty('__compiled__', true); }); }); @@ -316,12 +316,10 @@ describe('CairoUint64 class Unit Tests', () => { values.forEach((val) => { const u64 = new CairoUint64(val); const bigintVal = u64.toBigInt(); - const hexVal = u64.toHexString(); const apiRequest = u64.toApiRequest(); expect(bigintVal).toBe(BigInt(val)); - expect(hexVal).toBe(`0x${val.toString(16)}`); - expect(apiRequest[0]).toBe(hexVal); + expect(apiRequest[0]).toBe(val.toString(10)); }); }); diff --git a/__tests__/utils/cairoDataTypes/CairoUint8.test.ts b/__tests__/utils/cairoDataTypes/CairoUint8.test.ts index 9791dd285..3250e2d69 100644 --- a/__tests__/utils/cairoDataTypes/CairoUint8.test.ts +++ b/__tests__/utils/cairoDataTypes/CairoUint8.test.ts @@ -214,28 +214,28 @@ describe('CairoUint8 class Unit Tests', () => { test('should return hex string array for zero', () => { const u8 = new CairoUint8(0); const result = u8.toApiRequest(); - expect(result).toEqual(['0x0']); + expect(result).toEqual(['0']); expect(result).toHaveProperty('__compiled__', true); }); test('should return hex string array for small numbers', () => { const u8 = new CairoUint8(42); const result = u8.toApiRequest(); - expect(result).toEqual(['0x2a']); + expect(result).toEqual(['42']); expect(result).toHaveProperty('__compiled__', true); }); test('should return hex string array for large numbers', () => { const u8 = new CairoUint8(255); const result = u8.toApiRequest(); - expect(result).toEqual(['0xff']); + expect(result).toEqual(['255']); expect(result).toHaveProperty('__compiled__', true); }); test('should handle bigint input', () => { const u8 = new CairoUint8(128n); const result = u8.toApiRequest(); - expect(result).toEqual(['0x80']); + expect(result).toEqual(['128']); expect(result).toHaveProperty('__compiled__', true); }); }); @@ -344,12 +344,10 @@ describe('CairoUint8 class Unit Tests', () => { values.forEach((val) => { const u8 = new CairoUint8(val); const bigintVal = u8.toBigInt(); - const hexVal = u8.toHexString(); const apiRequest = u8.toApiRequest(); expect(bigintVal).toBe(BigInt(val)); - expect(hexVal).toBe(`0x${val.toString(16)}`); - expect(apiRequest[0]).toBe(hexVal); + expect(apiRequest[0]).toBe(val.toString(10)); }); }); diff --git a/__tests__/utils/cairoDataTypes/CairoUint96.test.ts b/__tests__/utils/cairoDataTypes/CairoUint96.test.ts index ca797585f..07490e208 100644 --- a/__tests__/utils/cairoDataTypes/CairoUint96.test.ts +++ b/__tests__/utils/cairoDataTypes/CairoUint96.test.ts @@ -194,14 +194,14 @@ describe('CairoUint96 class Unit Tests', () => { test('should return hex string array for zero', () => { const u96 = new CairoUint96(0); const result = u96.toApiRequest(); - expect(result).toEqual(['0x0']); + expect(result).toEqual(['0']); expect(result).toHaveProperty('__compiled__', true); }); test('should return hex string array for small numbers', () => { const u96 = new CairoUint96(42); const result = u96.toApiRequest(); - expect(result).toEqual(['0x2a']); + expect(result).toEqual(['42']); expect(result).toHaveProperty('__compiled__', true); }); @@ -209,14 +209,14 @@ describe('CairoUint96 class Unit Tests', () => { const maxU96 = 2n ** 96n - 1n; const u96 = new CairoUint96(maxU96); const result = u96.toApiRequest(); - expect(result).toEqual(['0xffffffffffffffffffffffff']); + expect(result).toEqual(['79228162514264337593543950335']); expect(result).toHaveProperty('__compiled__', true); }); test('should handle bigint input', () => { const u96 = new CairoUint96(0x123456789abcdef0123456n); const result = u96.toApiRequest(); - expect(result).toEqual(['0x123456789abcdef0123456']); + expect(result).toEqual(['22007822920628982378542166']); expect(result).toHaveProperty('__compiled__', true); }); }); @@ -316,12 +316,10 @@ describe('CairoUint96 class Unit Tests', () => { values.forEach((val) => { const u96 = new CairoUint96(val); const bigintVal = u96.toBigInt(); - const hexVal = u96.toHexString(); const apiRequest = u96.toApiRequest(); expect(bigintVal).toBe(BigInt(val)); - expect(hexVal).toBe(`0x${val.toString(16)}`); - expect(apiRequest[0]).toBe(hexVal); + expect(apiRequest[0]).toBe(val.toString(10)); }); }); diff --git a/__tests__/utils/calldata/enum/CairoResult.test copy.ts b/__tests__/utils/calldata/enum/CairoTypeCustomEnum.test.ts similarity index 100% rename from __tests__/utils/calldata/enum/CairoResult.test copy.ts rename to __tests__/utils/calldata/enum/CairoTypeCustomEnum.test.ts diff --git a/__tests__/utils/calldata/enum/CairoTypeOption.test.ts b/__tests__/utils/calldata/enum/CairoTypeOption.test.ts index 23461504d..33162bda5 100644 --- a/__tests__/utils/calldata/enum/CairoTypeOption.test.ts +++ b/__tests__/utils/calldata/enum/CairoTypeOption.test.ts @@ -138,7 +138,7 @@ describe('CairoTypeOption', () => { hdParsingStrategy, CairoOptionVariant.Some ); - expect(myOption.toApiRequest()).toEqual(['0x00', '0x3', '0x1', '0x2', '0x3']); + expect(myOption.toApiRequest()).toEqual(['0', '3', '1', '2', '3']); expect(myOption.decompose(hdParsingStrategy)).toEqual( new CairoOption>(CairoOptionVariant.Some, [1n, 2n, 3n]) ); @@ -151,7 +151,7 @@ describe('CairoTypeOption', () => { hdParsingStrategy, CairoOptionVariant.Some ); - expect(myOption.toApiRequest()).toEqual(['0x00', '0x1', '0x2', '0x3']); + expect(myOption.toApiRequest()).toEqual(['0', '1', '2', '3']); expect(myOption.decompose(hdParsingStrategy)).toEqual( new CairoOption>(CairoOptionVariant.Some, [1n, 2n, 3n]) ); @@ -164,7 +164,7 @@ describe('CairoTypeOption', () => { hdParsingStrategy, CairoOptionVariant.Some ); - expect(myOption.toApiRequest()).toEqual(['0x00', '0x5', '0x6']); + expect(myOption.toApiRequest()).toEqual(['0', '5', '6']); expect(myOption.decompose(hdParsingStrategy)).toEqual( new CairoOption(CairoOptionVariant.Some, { '0': 5n, '1': 6n }) ); @@ -189,11 +189,11 @@ describe('CairoTypeOption', () => { hdParsingStrategy, CairoOptionVariant.Some ); - expect(myOption0.toApiRequest()).toEqual(['0x00', '0x00', '0x6']); + expect(myOption0.toApiRequest()).toEqual(['0', '0', '6']); expect(myOption0.decompose(hdParsingStrategy)).toEqual( new CairoOption>(CairoOptionVariant.Some, myResult) ); - expect(myOption1.toApiRequest()).toEqual(['0x00', '0x00', '0x6']); + expect(myOption1.toApiRequest()).toEqual(['0', '0', '6']); expect(myOption1.decompose(hdParsingStrategy)).toEqual( new CairoOption>(CairoOptionVariant.Some, myResult) ); @@ -220,11 +220,11 @@ describe('CairoTypeOption', () => { strategies, CairoOptionVariant.Some ); - expect(myOption0.toApiRequest()).toEqual(['0x00', '0x4', '0x5']); + expect(myOption0.toApiRequest()).toEqual(['0', '4', '5']); expect(myOption0.decompose(strategies)).toEqual( new CairoOption(CairoOptionVariant.Some, { x: 4n, y: 5n }) ); - expect(myOption1.toApiRequest()).toEqual(['0x00', '0x4', '0x5']); + expect(myOption1.toApiRequest()).toEqual(['0', '4', '5']); expect(myOption1.decompose(strategies)).toEqual( new CairoOption(CairoOptionVariant.Some, { x: 4n, y: 5n }) ); @@ -243,7 +243,7 @@ describe('CairoTypeOption', () => { hdParsingStrategy, CairoOptionVariant.Some ); - expect(myOption.toApiRequest()).toEqual(['0x00', '0x00', '0x00', '0x5']); + expect(myOption.toApiRequest()).toEqual(['0', '0', '0', '5']); expect(myOption.decompose(hdParsingStrategy)).toEqual(option2); }); @@ -259,7 +259,7 @@ describe('CairoTypeOption', () => { hdParsingStrategy, CairoOptionVariant.Some ); - expect(myOption.toApiRequest()).toEqual(['0x00', '0x2', '0x7', '0x8']); + expect(myOption.toApiRequest()).toEqual(['0', '2', '7', '8']); expect(myOption.decompose(hdParsingStrategy)).toEqual( new CairoOption>(CairoOptionVariant.Some, [7n, 8n]) ); diff --git a/__tests__/utils/calldata/enum/CairoTypeResult.test.ts b/__tests__/utils/calldata/enum/CairoTypeResult.test.ts index a10589a12..e966a6779 100644 --- a/__tests__/utils/calldata/enum/CairoTypeResult.test.ts +++ b/__tests__/utils/calldata/enum/CairoTypeResult.test.ts @@ -145,7 +145,7 @@ describe('CairoTypeResult', () => { const iter1 = ['1', '100', '2'][Symbol.iterator](); const typeCairo1 = 'core::result::Result::'; const cairoTypeResult1 = new CairoTypeResult(iter1, typeCairo1, hdParsingStrategy); - expect(cairoTypeResult1.toApiRequest()).toEqual(['0x01', '0x64', '0x2']); + expect(cairoTypeResult1.toApiRequest()).toEqual(['1', '100', '2']); }); }); @@ -173,11 +173,11 @@ describe('CairoTypeResult', () => { hdParsingStrategy, CairoResultVariant.Ok ); - expect(myResult0.toApiRequest()).toEqual(['0x00', '0x3', '0x1', '0x2', '0x3']); + expect(myResult0.toApiRequest()).toEqual(['0', '3', '1', '2', '3']); expect(myResult0.decompose(hdParsingStrategy)).toEqual( new CairoResult, bigint>(CairoResultVariant.Ok, [1n, 2n, 3n]) ); - expect(myResult1.toApiRequest()).toEqual(['0x00', '0x3', '0x1', '0x2', '0x3']); + expect(myResult1.toApiRequest()).toEqual(['0', '3', '1', '2', '3']); expect(myResult1.decompose(hdParsingStrategy)).toEqual( new CairoResult, bigint>(CairoResultVariant.Ok, [1n, 2n, 3n]) ); @@ -208,11 +208,11 @@ describe('CairoTypeResult', () => { hdParsingStrategy, CairoResultVariant.Err ); - expect(myResult0.toApiRequest()).toEqual(['0x01', '0x1', '0x2', '0x3']); + expect(myResult0.toApiRequest()).toEqual(['1', '1', '2', '3']); expect(myResult0.decompose(hdParsingStrategy)).toEqual( new CairoResult>(CairoResultVariant.Err, [1n, 2n, 3n]) ); - expect(myResult1.toApiRequest()).toEqual(['0x01', '0x1', '0x2', '0x3']); + expect(myResult1.toApiRequest()).toEqual(['1', '1', '2', '3']); expect(myResult1.decompose(hdParsingStrategy)).toEqual( new CairoResult>(CairoResultVariant.Err, [1n, 2n, 3n]) ); @@ -243,11 +243,11 @@ describe('CairoTypeResult', () => { hdParsingStrategy, CairoResultVariant.Ok ); - expect(myResult0.toApiRequest()).toEqual(['0x00', '0x5', '0x6']); + expect(myResult0.toApiRequest()).toEqual(['0', '5', '6']); expect(myResult0.decompose(hdParsingStrategy)).toEqual( new CairoResult(CairoResultVariant.Ok, { '0': 5n, '1': 6n }) ); - expect(myResult1.toApiRequest()).toEqual(['0x00', '0x5', '0x6']); + expect(myResult1.toApiRequest()).toEqual(['0', '5', '6']); expect(myResult1.decompose(hdParsingStrategy)).toEqual( new CairoResult(CairoResultVariant.Ok, { '0': 5n, '1': 6n }) ); @@ -285,11 +285,11 @@ describe('CairoTypeResult', () => { hdParsingStrategy, CairoResultVariant.Err ); - expect(myResult0.toApiRequest()).toEqual(['0x01', '0x00', '0x5']); + expect(myResult0.toApiRequest()).toEqual(['1', '0', '5']); expect(myResult0.decompose(hdParsingStrategy)).toEqual( new CairoResult>(CairoResultVariant.Err, option0) ); - expect(myResult1.toApiRequest()).toEqual(['0x01', '0x00', '0x5']); + expect(myResult1.toApiRequest()).toEqual(['1', '0', '5']); expect(myResult1.decompose(hdParsingStrategy)).toEqual( new CairoResult>(CairoResultVariant.Err, option0) ); @@ -328,11 +328,11 @@ describe('CairoTypeResult', () => { strategies, CairoResultVariant.Err ); - expect(myResult1.toApiRequest()).toEqual(['0x01', '0x4', '0x5']); + expect(myResult1.toApiRequest()).toEqual(['1', '4', '5']); expect(myResult1.decompose(strategies)).toEqual( new CairoResult(CairoResultVariant.Err, { x: 4n, y: 5n }) ); - expect(myResult2.toApiRequest()).toEqual(['0x01', '0x4', '0x5']); + expect(myResult2.toApiRequest()).toEqual(['1', '4', '5']); expect(myResult2.decompose(strategies)).toEqual( new CairoResult(CairoResultVariant.Err, { x: 4n, y: 5n }) ); @@ -353,7 +353,7 @@ describe('CairoTypeResult', () => { 'core::result::Result::, core::integer::u16>>', hdParsingStrategy ); - expect(myResult.toApiRequest()).toEqual(['0x01', '0x00', '0x01', '0x5']); + expect(myResult.toApiRequest()).toEqual(['1', '0', '1', '5']); expect(myResult.decompose(hdParsingStrategy)).toEqual(result2); }); }); diff --git a/__tests__/utils/calldata/requestParser.test.ts b/__tests__/utils/calldata/requestParser.test.ts index 3cf598fad..bf2b31e69 100644 --- a/__tests__/utils/calldata/requestParser.test.ts +++ b/__tests__/utils/calldata/requestParser.test.ts @@ -2,14 +2,19 @@ import { parseCalldataField } from '../../../src/utils/calldata/requestParser'; import { getAbiEnums, getAbiStructs, getAbiEntry } from '../../factories/abi'; import { AbiParser1, + AbiParser2, CairoCustomEnum, CairoOption, + CairoOptionVariant, CairoResult, + CallData, ETH_ADDRESS, hdParsingStrategy, NON_ZERO_PREFIX, type AbiEntry, + type AbiEnum, } from '../../../src'; +import { contracts } from '../../config/fixtures'; describe('requestParser', () => { describe('parseCalldataField', () => { @@ -23,7 +28,7 @@ describe('requestParser', () => { enums: getAbiEnums(), parser: new AbiParser1([getAbiEntry('felt')], hdParsingStrategy), }); - expect(parsedField).toEqual(['0x100']); + expect(parsedField).toEqual(['256']); }); test('should return parsed calldata field for Array type', () => { @@ -34,9 +39,9 @@ describe('requestParser', () => { input: getAbiEntry('core::array::Array::'), structs: getAbiStructs(), enums: getAbiEnums(), - parser: new AbiParser1([getAbiEntry('core::array::Array::')], hdParsingStrategy), + parser: new AbiParser2([getAbiEntry('core::array::Array::')], hdParsingStrategy), }); - expect(parsedField).toEqual(['0x2', '0x100', '0x80']); + expect(parsedField).toEqual(['2', '256', '128']); }); test('should return parsed calldata field for Array type(string input)', () => { @@ -47,9 +52,9 @@ describe('requestParser', () => { input: getAbiEntry('core::array::Array::'), structs: getAbiStructs(), enums: getAbiEnums(), - parser: new AbiParser1([getAbiEntry('core::array::Array::')], hdParsingStrategy), + parser: new AbiParser2([getAbiEntry('core::array::Array::')], hdParsingStrategy), }); - expect(parsedField).toEqual(['0x1', '0x736f6d655f746573745f76616c7565']); + expect(parsedField).toEqual(['1', '599374153440608178282648329058547045']); }); test('should return parsed calldata field for NonZero type', () => { @@ -62,7 +67,7 @@ describe('requestParser', () => { enums: getAbiEnums(), parser: new AbiParser1([getAbiEntry(`${NON_ZERO_PREFIX}core::bool`)], hdParsingStrategy), }); - expect(parsedField).toEqual(['0x1']); + expect(parsedField).toEqual(['1']); }); test('should return parsed calldata field for EthAddress type', () => { @@ -75,7 +80,7 @@ describe('requestParser', () => { enums: getAbiEnums(), parser: new AbiParser1([getAbiEntry(`${ETH_ADDRESS}felt`)], hdParsingStrategy), }); - expect(parsedField).toEqual(['0x74657374']); + expect(parsedField).toEqual(['1952805748']); }); test('should return parsed calldata field for Struct type', () => { @@ -88,7 +93,7 @@ describe('requestParser', () => { enums: getAbiEnums(), parser: new AbiParser1([getAbiEntry('struct')], hdParsingStrategy), }); - expect(parsedField).toEqual(['0x74657374']); + expect(parsedField).toEqual(['1952805748']); }); test('should return parsed calldata field for Tuple type', () => { @@ -112,20 +117,20 @@ describe('requestParser', () => { input: getAbiEntry('core::integer::u256'), structs: getAbiStructs(), enums: getAbiEnums(), - parser: new AbiParser1([getAbiEntry('core::integer::u256')], hdParsingStrategy), + parser: new AbiParser2([getAbiEntry('core::integer::u256')], hdParsingStrategy), }); expect(parsedField).toEqual(['252', '0']); }); test('should return parsed calldata field for Enum Option type None', () => { - const args = [new CairoOption(1, 'content')]; + const args = [new CairoOption(CairoOptionVariant.None)]; const argsIterator = args[Symbol.iterator](); const parsedField = parseCalldataField({ argsIterator, input: getAbiEntry('core::option::Option::'), structs: getAbiStructs(), enums: { 'core::option::Option::': getAbiEnums().enum }, - parser: new AbiParser1( + parser: new AbiParser2( [getAbiEntry('core::option::Option::')], hdParsingStrategy ), @@ -134,7 +139,7 @@ describe('requestParser', () => { }); test('should return parsed calldata field for Enum Option type Some', () => { - const args = [new CairoOption(0, 'content')]; + const args = [new CairoOption(CairoOptionVariant.Some, 'content')]; const argsIterator = args[Symbol.iterator](); const abiEnum = getAbiEnums().enum; abiEnum.variants.push({ @@ -144,11 +149,11 @@ describe('requestParser', () => { }); const parsedField = parseCalldataField({ argsIterator, - input: getAbiEntry('core::option::Option::'), + input: getAbiEntry('core::option::Option::'), structs: getAbiStructs(), - enums: { 'core::option::Option::': abiEnum }, - parser: new AbiParser1( - [getAbiEntry('core::option::Option::')], + enums: { 'core::option::Option::': abiEnum }, + parser: new AbiParser2( + [getAbiEntry('core::option::Option::')], hdParsingStrategy ), }); @@ -164,7 +169,7 @@ describe('requestParser', () => { input: getAbiEntry('core::option::Option::core::bool'), structs: getAbiStructs(), enums: { 'core::option::Option::core::bool': getAbiEnums().enum }, - parser: new AbiParser1( + parser: new AbiParser2( [getAbiEntry('core::option::Option::core::bool')], hdParsingStrategy ), @@ -174,28 +179,6 @@ describe('requestParser', () => { ); }); - test('should return parsed calldata field for Enum Result type Ok', () => { - const args = [new CairoResult(0, 'Ok')]; - const argsIterator = args[Symbol.iterator](); - const abiEnum = getAbiEnums().enum; - abiEnum.variants.push({ - name: 'Ok', - type: 'cairo_struct_variant', - offset: 1, - }); - const parsedField = parseCalldataField({ - argsIterator, - input: getAbiEntry('core::result::Result::core::bool'), - structs: getAbiStructs(), - enums: { 'core::result::Result::core::bool': abiEnum }, - parser: new AbiParser1( - [getAbiEntry('core::result::Result::core::bool')], - hdParsingStrategy - ), - }); - expect(parsedField).toEqual(['0x0', '0x4f6b']); - }); - test('should throw an error for Enum Result has no "Ok" variant', () => { const args = [new CairoResult(0, 'Ok')]; const argsIterator = args[Symbol.iterator](); @@ -205,32 +188,35 @@ describe('requestParser', () => { input: getAbiEntry('core::result::Result::core::bool'), structs: getAbiStructs(), enums: { 'core::result::Result::core::bool': getAbiEnums().enum }, - parser: new AbiParser1( + parser: new AbiParser2( [getAbiEntry('core::result::Result::core::bool')], hdParsingStrategy ), }) - ).toThrow(new Error(`Error in abi : Result has no 'Ok' variant.`)); + ).toThrow( + new Error( + `ABI type core::result::Result::core::bool do not includes 2 types enclosed in <>.` + ) + ); }); test('should return parsed calldata field for Custom Enum type', () => { - const activeVariantName = 'custom_enum'; - const args = [new CairoCustomEnum({ [activeVariantName]: 'content' })]; + const { abi } = contracts.TestCairoType.sierra; + const abiOfEnum: AbiEnum = abi.find((item) => item.name === 'enums::MyEnum'); + const abiEnum = { name: abiOfEnum.type, type: abiOfEnum.name }; + const myCallData = new CallData(abi); + const activeVariantName = 'Success'; + const args = [new CairoCustomEnum({ [activeVariantName]: 100 })]; const argsIterator = args[Symbol.iterator](); - const abiEnum = getAbiEnums().enum; - abiEnum.variants.push({ - name: activeVariantName, - type: 'cairo_struct_variant', - offset: 1, - }); + const parsedField = parseCalldataField({ argsIterator, - input: getAbiEntry('enum'), - structs: getAbiStructs(), - enums: { enum: abiEnum }, - parser: new AbiParser1([getAbiEntry('enum')], hdParsingStrategy), + input: abiEnum, + structs: myCallData.structs, + enums: myCallData.enums, + parser: new AbiParser2(abi, hdParsingStrategy), }); - expect(parsedField).toEqual(['0x1', '0x636f6e74656e74']); + expect(parsedField).toEqual(['0', '100']); }); test('should throw an error for Custom Enum type when there is not active variant', () => { @@ -242,7 +228,7 @@ describe('requestParser', () => { input: getAbiEntry('enum'), structs: getAbiStructs(), enums: getAbiEnums(), - parser: new AbiParser1([getAbiEntry('enum')], hdParsingStrategy), + parser: new AbiParser2([getAbiEntry('enum')], hdParsingStrategy), }) ).toThrow(new Error(`The type test_cairo is not a Cairo Enum. Needs impl::name.`)); }); @@ -256,7 +242,7 @@ describe('requestParser', () => { input: getAbiEntry('core::integer::u256'), structs: getAbiStructs(), enums: getAbiEnums(), - parser: new AbiParser1([getAbiEntry('core::integer::u256')], hdParsingStrategy), + parser: new AbiParser2([getAbiEntry('core::integer::u256')], hdParsingStrategy), }) ).toThrow( new Error( @@ -275,9 +261,11 @@ describe('requestParser', () => { input: abiItem, structs: getAbiStructs(), enums: getAbiEnums(), - parser: new AbiParser1([abiItem], hdParsingStrategy), + parser: new AbiParser2([abiItem], hdParsingStrategy), }) - ).toThrow(new Error('"core::bool,core::bool" is not a valid Cairo type')); + ).toThrow( + new Error('"(core::bool,core::bool)" is not a valid Cairo type (missing space after comma)') + ); }); test('should throw an error if there is missing parameter for type Struct', () => { @@ -289,7 +277,7 @@ describe('requestParser', () => { input: getAbiEntry('struct'), structs: getAbiStructs(), enums: getAbiEnums(), - parser: new AbiParser1([getAbiEntry('struct')], hdParsingStrategy), + parser: new AbiParser2([getAbiEntry('struct')], hdParsingStrategy), }) ).toThrow(new Error('Missing parameter for type test_type')); }); @@ -303,7 +291,7 @@ describe('requestParser', () => { input: getAbiEntry('core::array::Array::'), structs: getAbiStructs(), enums: getAbiEnums(), - parser: new AbiParser1([getAbiEntry('core::array::Array::')], hdParsingStrategy), + parser: new AbiParser2([getAbiEntry('core::array::Array::')], hdParsingStrategy), }) ).toThrow(new Error('ABI expected parameter test to be array or long string, got 256')); }); diff --git a/__tests__/utils/calldata/validate.test.ts b/__tests__/utils/calldata/validate.test.ts index 0d1eb74b4..49c75a2fb 100644 --- a/__tests__/utils/calldata/validate.test.ts +++ b/__tests__/utils/calldata/validate.test.ts @@ -349,7 +349,7 @@ describe('validateFields', () => { }); test('should throw an error if tupple validation fails', () => { - const error = new Error(`Validate: arg test should be a tuple (defined as object)`); + const error = new Error(`Validate: arg test should be a tuple (defined as object or array)`); expect(() => validateFields( diff --git a/src/global/constants.ts b/src/global/constants.ts index b2308b4cb..3361ce147 100644 --- a/src/global/constants.ts +++ b/src/global/constants.ts @@ -32,6 +32,7 @@ export const RANGE_U32 = range(ZERO, 2n ** 32n - 1n); export const RANGE_U64 = range(ZERO, 2n ** 64n - 1n); export const RANGE_U96 = range(ZERO, 2n ** 96n - 1n); export const RANGE_U128 = range(ZERO, 2n ** 128n - 1n); +export const RANGE_ETH_ADDRESS = range(ZERO, 2n ** 160n - 1n); // Signed integer ranges export const RANGE_I8 = range(-(2n ** 7n), 2n ** 7n - 1n); diff --git a/src/utils/cairoDataTypes/array.ts b/src/utils/cairoDataTypes/array.ts index bbf7a997e..5c5d0f41c 100644 --- a/src/utils/cairoDataTypes/array.ts +++ b/src/utils/cairoDataTypes/array.ts @@ -1,6 +1,6 @@ import assert from '../assert'; import { addCompiledFlag } from '../helpers'; -import { getNext, toHex } from '../num'; +import { getNext } from '../num'; import { felt, getArrayType, isTypeArray } from '../calldata/cairo'; import { type ParsingStrategy } from '../calldata/parser/parsingStrategy.type'; import { CairoType } from './cairoType.interface'; @@ -330,7 +330,7 @@ export class CairoArray extends CairoType { */ public toApiRequest(): string[] { // Start with array length - const result = [toHex(felt(this.content.length))]; + const result = [felt(this.content.length)]; // Then add all elements (flattened) result.push(...this.content.flatMap((element) => element.toApiRequest())); diff --git a/src/utils/cairoDataTypes/bool.ts b/src/utils/cairoDataTypes/bool.ts new file mode 100644 index 000000000..b8eb7e216 --- /dev/null +++ b/src/utils/cairoDataTypes/bool.ts @@ -0,0 +1,83 @@ +/* eslint-disable no-underscore-dangle */ +import { BigNumberish } from '../../types'; +import { addHexPrefix } from '../encode'; +import { getNext, isBigNumberish } from '../num'; +import { isObject, isNumber } from '../typed'; +import assert from '../assert'; +import { addCompiledFlag } from '../helpers'; + +export class CairoBool { + data: boolean; + + static abiSelector = 'core::bool'; + + constructor(data: BigNumberish | boolean | unknown) { + CairoBool.validate(data); + this.data = CairoBool.__processData(data); + } + + static __processData(data: BigNumberish | boolean | unknown): boolean { + if (typeof data === 'boolean') { + return data; + } + if (isBigNumberish(data)) { + const numb = BigInt(data); + if (numb === 0n) return false; + if (numb === 1n) return true; + } + throw new Error('Invalid input for a core::bool'); + } + + toApiRequest(): string[] { + return addCompiledFlag([this.toDecimalString()]); + } + + toBoolean() { + return this.data; + } + + /** + * For negative values field element representation as positive hex string. + * @returns cairo field arithmetic hex string + */ + toHexString() { + return addHexPrefix(this.data ? '1' : '0'); + } + + toDecimalString() { + return this.data ? '1' : '0'; + } + + static validate(data: BigNumberish | boolean | unknown): void { + assert(data !== null && data !== undefined, 'Invalid input: null or undefined'); + assert(!isObject(data) && !Array.isArray(data), 'Invalid input: objects are not supported'); + assert( + !isNumber(data) || Number.isInteger(data), + 'Invalid input: decimal numbers are not supported, only integers or booleans' + ); + const value = BigInt(data as BigNumberish | boolean); + assert(value === 0n || value === 1n, `Only values 0 or 1 are possible in a core::bool`); + } + + static is(data: BigNumberish | boolean | unknown): boolean { + try { + CairoBool.validate(data); + return true; + } catch { + return false; + } + } + + /** + * Check if provided abi type is this data type + */ + static isAbiType(abiType: string): boolean { + return abiType === CairoBool.abiSelector; + } + + static factoryFromApiResponse(responseIterator: Iterator): CairoBool { + const response = getNext(responseIterator); + const value = BigInt(response); + return new CairoBool(value); + } +} diff --git a/src/utils/cairoDataTypes/byteArray.ts b/src/utils/cairoDataTypes/byteArray.ts index b79994de0..1f085bdaa 100644 --- a/src/utils/cairoDataTypes/byteArray.ts +++ b/src/utils/cairoDataTypes/byteArray.ts @@ -125,7 +125,7 @@ export class CairoByteArray extends CairoType { this.assertInitialized(); return addCompiledFlag([ - addHexPrefix(this.data.length.toString(16)), + this.data.length.toString(10), ...this.data.flatMap((bytes31) => bytes31.toApiRequest()), ...this.pending_word.toApiRequest(), ...this.pending_word_len.toApiRequest(), @@ -161,6 +161,10 @@ export class CairoByteArray extends CairoType { return addHexPrefix(this.toBigInt().toString(16)); } + toDecimalString() { + return addHexPrefix(this.toBigInt().toString(10)); + } + toBuffer() { // Note: toBuffer uses a slightly different byte reconstruction that filters out invalid bytes this.assertInitialized(); diff --git a/src/utils/cairoDataTypes/bytes31.ts b/src/utils/cairoDataTypes/bytes31.ts index a34b3c880..8bf803d87 100644 --- a/src/utils/cairoDataTypes/bytes31.ts +++ b/src/utils/cairoDataTypes/bytes31.ts @@ -33,7 +33,7 @@ export class CairoBytes31 extends CairoType { } toApiRequest(): string[] { - return addCompiledFlag([this.toHexString()]); + return addCompiledFlag([this.toDecimalString()]); } toBigInt() { @@ -48,6 +48,10 @@ export class CairoBytes31 extends CairoType { return addHexPrefix(this.toBigInt().toString(16)); } + toDecimalString() { + return this.toBigInt().toString(10); + } + static validate(data: Uint8Array | string | Buffer | unknown): void { const byteLength = CairoBytes31.__processData(data).length; assert( diff --git a/src/utils/cairoDataTypes/cairoTypeCustomEnum.ts b/src/utils/cairoDataTypes/cairoTypeCustomEnum.ts index 9192c5f0b..d0c1c2549 100644 --- a/src/utils/cairoDataTypes/cairoTypeCustomEnum.ts +++ b/src/utils/cairoDataTypes/cairoTypeCustomEnum.ts @@ -1,6 +1,6 @@ import assert from '../assert'; import { addCompiledFlag } from '../helpers'; -import { getNext, toHex } from '../num'; +import { getNext } from '../num'; import { type ParsingStrategy, type VariantType } from '../calldata/parser/parsingStrategy.type'; import { CairoType } from './cairoType.interface'; import { isCairo1Type } from '../calldata/cairo'; @@ -374,7 +374,7 @@ export class CairoTypeCustomEnum extends CairoType { * ``` */ public toApiRequest(): string[] { - const result = [toHex(this.enumVariant)]; + const result: string[] = [this.enumVariant.toString(10)]; result.push(this.content!.toApiRequest()); return addCompiledFlag(result.flat()); } diff --git a/src/utils/cairoDataTypes/cairoTypeOption.ts b/src/utils/cairoDataTypes/cairoTypeOption.ts index ccef9de84..7ffaae741 100644 --- a/src/utils/cairoDataTypes/cairoTypeOption.ts +++ b/src/utils/cairoDataTypes/cairoTypeOption.ts @@ -328,7 +328,7 @@ export class CairoTypeOption extends CairoType { * ``` */ public toApiRequest(): string[] { - const result = [this.isVariantSome ? '0x00' : '0x01']; + const result = [this.isVariantSome ? '0' : '1']; if (this.isVariantSome) { result.push(this.content!.toApiRequest()); } diff --git a/src/utils/cairoDataTypes/cairoTypeResult.ts b/src/utils/cairoDataTypes/cairoTypeResult.ts index 60f6e5951..75372ecc6 100644 --- a/src/utils/cairoDataTypes/cairoTypeResult.ts +++ b/src/utils/cairoDataTypes/cairoTypeResult.ts @@ -314,7 +314,7 @@ export class CairoTypeResult extends CairoType { * ``` */ public toApiRequest(): string[] { - const result = [this.isVariantOk ? '0x00' : '0x01']; + const result = [this.isVariantOk ? '0' : '1']; result.push(this.content!.toApiRequest()); return addCompiledFlag(result.flat()); } diff --git a/src/utils/cairoDataTypes/ethAddress.ts b/src/utils/cairoDataTypes/ethAddress.ts new file mode 100644 index 000000000..96161b54d --- /dev/null +++ b/src/utils/cairoDataTypes/ethAddress.ts @@ -0,0 +1,71 @@ +/* eslint-disable no-underscore-dangle */ +import { BigNumberish, ETH_ADDRESS } from '../../types'; +import { addHexPrefix } from '../encode'; +import { getNext } from '../num'; +import { isObject, isNumber } from '../typed'; +import assert from '../assert'; +import { RANGE_ETH_ADDRESS } from '../../global/constants'; +import { addCompiledFlag } from '../helpers'; + +export class CairoEthAddress { + data: bigint; + + static abiSelector = ETH_ADDRESS; + + constructor(data: BigNumberish | boolean | unknown) { + CairoEthAddress.validate(data); + this.data = BigInt(data as BigNumberish); + } + + toApiRequest(): string[] { + return addCompiledFlag([this.toDecimalString()]); + } + + toBigInt() { + return this.data; + } + + toHexString() { + return addHexPrefix(this.toBigInt().toString(16)); + } + + toDecimalString() { + return this.data.toString(10); + } + + static validate(data: BigNumberish | boolean | unknown): void { + assert(data !== null && data !== undefined, 'Invalid input: null or undefined'); + assert(!isObject(data) && !Array.isArray(data), 'Invalid input: objects are not supported'); + assert( + !isNumber(data) || Number.isInteger(data), + 'Invalid input: decimal numbers are not supported, only integers' + ); + + const value = BigInt(data as BigNumberish); + assert( + // from : https://github.com/starkware-libs/starknet-specs/blob/29bab650be6b1847c92d4461d4c33008b5e50b1a/api/starknet_api_openrpc.json#L1259 + value >= RANGE_ETH_ADDRESS.min && value <= RANGE_ETH_ADDRESS.max, + 'Validate: arg should be in range [0, 2^160-1]' + ); + } + + static is(data: BigNumberish | boolean | unknown): boolean { + try { + CairoEthAddress.validate(data); + return true; + } catch { + return false; + } + } + + /** + * Check if provided abi type is this data type + */ + static isAbiType(abiType: string): boolean { + return abiType === CairoEthAddress.abiSelector; + } + + static factoryFromApiResponse(responseIterator: Iterator): CairoEthAddress { + return new CairoEthAddress(getNext(responseIterator)); + } +} diff --git a/src/utils/cairoDataTypes/felt.ts b/src/utils/cairoDataTypes/felt.ts index 3f4b69b2b..6bda9837b 100644 --- a/src/utils/cairoDataTypes/felt.ts +++ b/src/utils/cairoDataTypes/felt.ts @@ -104,11 +104,15 @@ export class CairoFelt252 extends CairoType { return addHexPrefix(this.toBigInt().toString(16)); } + toDecimalString() { + return this.toBigInt().toString(10); + } + toApiRequest(): string[] { /** * HexString representation of the felt252 */ - return addCompiledFlag([this.toHexString()]); + return addCompiledFlag([this.toDecimalString()]); } static validate(data: BigNumberish | boolean | unknown): void { diff --git a/src/utils/cairoDataTypes/fixedArray.ts b/src/utils/cairoDataTypes/fixedArray.ts index 7444e27bc..4831a1284 100644 --- a/src/utils/cairoDataTypes/fixedArray.ts +++ b/src/utils/cairoDataTypes/fixedArray.ts @@ -379,7 +379,7 @@ export class CairoFixedArray extends CairoType { */ /** - * Create an object from a Cairo fixed array. + * Create an object from a array representing a Fixed Array. * Be sure to have an array length conform to the ABI. * To be used with CallData.compile(). * @param {Array} input JS array representing a Cairo fixed array. diff --git a/src/utils/cairoDataTypes/index.ts b/src/utils/cairoDataTypes/index.ts index 8afca1cb4..bfedd1722 100644 --- a/src/utils/cairoDataTypes/index.ts +++ b/src/utils/cairoDataTypes/index.ts @@ -23,3 +23,5 @@ export * from './cairoTypeOption'; export * from './cairoTypeResult'; export * from './cairoStruct'; export * from './cairoTypeCustomEnum'; +export * from './bool'; +export * from './ethAddress'; diff --git a/src/utils/cairoDataTypes/int128.ts b/src/utils/cairoDataTypes/int128.ts index f284ee1ba..f97913765 100644 --- a/src/utils/cairoDataTypes/int128.ts +++ b/src/utils/cairoDataTypes/int128.ts @@ -29,7 +29,7 @@ export class CairoInt128 { } toApiRequest(): string[] { - return addCompiledFlag([this.toHexString()]); + return addCompiledFlag([this.toDecimalString()]); } toBigInt() { @@ -56,6 +56,16 @@ export class CairoInt128 { return addHexPrefix(value.toString(16)); } + toDecimalString() { + const value = this.toBigInt(); + // For negative values, convert to field element representation + if (value < 0n) { + const fieldElement = PRIME + value; + return fieldElement.toString(10); + } + return BigInt(this.toHexString()).toString(10); + } + static validate(data: BigNumberish | boolean | unknown): void { assert(data !== null && data !== undefined, 'Invalid input: null or undefined'); assert(!isObject(data) && !Array.isArray(data), 'Invalid input: objects are not supported'); diff --git a/src/utils/cairoDataTypes/int16.ts b/src/utils/cairoDataTypes/int16.ts index ee193ae6f..5f49c7233 100644 --- a/src/utils/cairoDataTypes/int16.ts +++ b/src/utils/cairoDataTypes/int16.ts @@ -29,7 +29,7 @@ export class CairoInt16 { } toApiRequest(): string[] { - return addCompiledFlag([this.toHexString()]); + return addCompiledFlag([this.toDecimalString()]); } toBigInt() { @@ -56,6 +56,16 @@ export class CairoInt16 { return addHexPrefix(value.toString(16)); } + toDecimalString() { + const value = this.toBigInt(); + // For negative values, convert to field element representation + if (value < 0n) { + const fieldElement = PRIME + value; + return fieldElement.toString(10); + } + return BigInt(this.toHexString()).toString(10); + } + static validate(data: BigNumberish | boolean | unknown): void { assert(data !== null && data !== undefined, 'Invalid input: null or undefined'); assert(!isObject(data) && !Array.isArray(data), 'Invalid input: objects are not supported'); diff --git a/src/utils/cairoDataTypes/int32.ts b/src/utils/cairoDataTypes/int32.ts index 576c14b04..8a5d337c9 100644 --- a/src/utils/cairoDataTypes/int32.ts +++ b/src/utils/cairoDataTypes/int32.ts @@ -29,7 +29,7 @@ export class CairoInt32 { } toApiRequest(): string[] { - return addCompiledFlag([this.toHexString()]); + return addCompiledFlag([this.toDecimalString()]); } toBigInt() { @@ -56,6 +56,16 @@ export class CairoInt32 { return addHexPrefix(value.toString(16)); } + toDecimalString() { + const value = this.toBigInt(); + // For negative values, convert to field element representation + if (value < 0n) { + const fieldElement = PRIME + value; + return fieldElement.toString(10); + } + return BigInt(this.toHexString()).toString(10); + } + static validate(data: BigNumberish | boolean | unknown): void { assert(data !== null && data !== undefined, 'Invalid input: null or undefined'); assert(!isObject(data) && !Array.isArray(data), 'Invalid input: objects are not supported'); diff --git a/src/utils/cairoDataTypes/int64.ts b/src/utils/cairoDataTypes/int64.ts index 2ca48b639..7e2be3093 100644 --- a/src/utils/cairoDataTypes/int64.ts +++ b/src/utils/cairoDataTypes/int64.ts @@ -29,7 +29,7 @@ export class CairoInt64 { } toApiRequest(): string[] { - return addCompiledFlag([this.toHexString()]); + return addCompiledFlag([this.toDecimalString()]); } toBigInt() { @@ -56,6 +56,16 @@ export class CairoInt64 { return addHexPrefix(value.toString(16)); } + toDecimalString() { + const value = this.toBigInt(); + // For negative values, convert to field element representation + if (value < 0n) { + const fieldElement = PRIME + value; + return fieldElement.toString(10); + } + return BigInt(this.toHexString()).toString(10); + } + static validate(data: BigNumberish | boolean | unknown): void { assert(data !== null && data !== undefined, 'Invalid input: null or undefined'); assert(!isObject(data) && !Array.isArray(data), 'Invalid input: objects are not supported'); diff --git a/src/utils/cairoDataTypes/int8.ts b/src/utils/cairoDataTypes/int8.ts index e87b5f154..06dc7783e 100644 --- a/src/utils/cairoDataTypes/int8.ts +++ b/src/utils/cairoDataTypes/int8.ts @@ -29,7 +29,7 @@ export class CairoInt8 { } toApiRequest(): string[] { - return addCompiledFlag([this.toHexString()]); + return addCompiledFlag([this.toDecimalString()]); } toBigInt() { @@ -56,6 +56,10 @@ export class CairoInt8 { return addHexPrefix(value.toString(16)); } + toDecimalString() { + return BigInt(this.toHexString()).toString(10); + } + static validate(data: BigNumberish | boolean | unknown): void { assert(data !== null && data !== undefined, 'Invalid input: null or undefined'); assert(!isObject(data) && !Array.isArray(data), 'Invalid input: objects are not supported'); diff --git a/src/utils/cairoDataTypes/secp256k1Point.ts b/src/utils/cairoDataTypes/secp256k1Point.ts index 405b04ae9..003553fe1 100644 --- a/src/utils/cairoDataTypes/secp256k1Point.ts +++ b/src/utils/cairoDataTypes/secp256k1Point.ts @@ -10,7 +10,6 @@ import { BigNumberish } from '../../types'; import { addHexPrefix, removeHexPrefix } from '../encode'; -import { CairoFelt } from './felt'; import { UINT_128_MAX } from './uint256'; import { isObject } from '../typed'; import { getNext, isBigNumberish } from '../num'; @@ -220,10 +219,10 @@ export class CairoSecp256k1Point extends CairoType { */ toApiRequest(): string[] { const result = [ - CairoFelt(this.xLow), - CairoFelt(this.xHigh), - CairoFelt(this.yLow), - CairoFelt(this.yHigh), + this.xLow.toString(10), + this.xHigh.toString(10), + this.yLow.toString(10), + this.yHigh.toString(10), ]; return addCompiledFlag(result); } diff --git a/src/utils/cairoDataTypes/tuple.ts b/src/utils/cairoDataTypes/tuple.ts index 722ab9ad3..571649879 100644 --- a/src/utils/cairoDataTypes/tuple.ts +++ b/src/utils/cairoDataTypes/tuple.ts @@ -142,11 +142,7 @@ export class CairoTuple extends CairoType { const [selectorName] = matchingSelector as [string, (type: string) => boolean]; const dynamicConstructor = strategies[strategyDynamicNum].constructors[selectorName]; if (dynamicConstructor) { - return dynamicConstructor( - contentItem, - strategies[strategyDynamicNum], - tupleContentType[index] - ); + return dynamicConstructor(contentItem, strategies, tupleContentType[index]); } } throw new Error(`"${tupleContentType[index]}" is not a valid Cairo type`); @@ -424,29 +420,14 @@ export class CairoTuple extends CairoType { default: { const commaIndex = input.indexOf(',', currentIndex); limitIndex = commaIndex !== -1 ? commaIndex : Number.POSITIVE_INFINITY; + if (commaIndex !== -1 && input[commaIndex + 1] !== ' ') { + throw new Error(`"${type}" is not a valid Cairo type (missing space after comma)`); + } } } const elementString = input.slice(currentIndex, limitIndex); - - // Check if this element is named (contains a single colon not preceded by another colon) - const colonIndex = elementString.indexOf(':'); - const isNamedElement = - colonIndex !== -1 && - elementString.charAt(colonIndex - 1) !== ':' && - elementString.charAt(colonIndex + 1) !== ':' && - !elementString.includes('<'); - - if (isNamedElement) { - // This is a named tuple element - const name = elementString.substring(0, colonIndex); - const elementType = elementString.substring(colonIndex + 1); - result.push({ name, type: elementType }); - } else { - // This is an unnamed tuple element - result.push(elementString); - } - + result.push(elementString); currentIndex = limitIndex + 2; // +2 to skip ', ' } @@ -602,6 +583,26 @@ export class CairoTuple extends CairoType { return addCompiledFlag(result); } + /** + * Create an object from an array representing a Cairo tuple. + * Be sure to have an array length conform to the ABI. + * + * To be used with CallData.compile(). + * @param {Array} input JS array representing a Cairo Tuple. + * @returns {Object} a specific struct representing a Cairo Tuple. + * @example + * ```typescript + * const result = CairoTuple.compile([10,20,30]); + * // result = { '0': 10, '1': 20, '2': 30 } + * ``` + */ + static compile(input: Array): Object { + return input.reduce((acc: any, item: any, idx: number) => { + acc[idx] = item; + return acc; + }, {}); + } + /** * Decompose the tuple into final parsed values, in an object {0:value0, ...}. * diff --git a/src/utils/cairoDataTypes/uint128.ts b/src/utils/cairoDataTypes/uint128.ts index 92d5ad9b8..b3b9e21f3 100644 --- a/src/utils/cairoDataTypes/uint128.ts +++ b/src/utils/cairoDataTypes/uint128.ts @@ -29,7 +29,7 @@ export class CairoUint128 { } toApiRequest(): string[] { - return addCompiledFlag([this.toHexString()]); + return addCompiledFlag([this.toDecimalString()]); } toBigInt() { @@ -44,6 +44,10 @@ export class CairoUint128 { return addHexPrefix(this.toBigInt().toString(16)); } + toDecimalString() { + return this.data.toString(10); + } + static validate(data: BigNumberish | boolean | unknown): void { assert(data !== null && data !== undefined, 'Invalid input: null or undefined'); assert(!isObject(data) && !Array.isArray(data), 'Invalid input: objects are not supported'); diff --git a/src/utils/cairoDataTypes/uint16.ts b/src/utils/cairoDataTypes/uint16.ts index df0e3e084..cda4771c0 100644 --- a/src/utils/cairoDataTypes/uint16.ts +++ b/src/utils/cairoDataTypes/uint16.ts @@ -29,7 +29,7 @@ export class CairoUint16 { } toApiRequest(): string[] { - return addCompiledFlag([this.toHexString()]); + return addCompiledFlag([this.toDecimalString()]); } toBigInt() { @@ -44,6 +44,10 @@ export class CairoUint16 { return addHexPrefix(this.toBigInt().toString(16)); } + toDecimalString() { + return this.data.toString(10); + } + static validate(data: BigNumberish | boolean | unknown): void { assert(data !== null && data !== undefined, 'Invalid input: null or undefined'); assert(!isObject(data) && !Array.isArray(data), 'Invalid input: objects are not supported'); diff --git a/src/utils/cairoDataTypes/uint256.ts b/src/utils/cairoDataTypes/uint256.ts index 6d08bf2f8..691747d4e 100644 --- a/src/utils/cairoDataTypes/uint256.ts +++ b/src/utils/cairoDataTypes/uint256.ts @@ -5,7 +5,6 @@ import { BigNumberish, Uint256 } from '../../types'; import { addHexPrefix } from '../encode'; -import { CairoFelt } from './felt'; import { isObject } from '../typed'; import { getNext, isBigNumberish } from '../num'; import assert from '../assert'; @@ -146,6 +145,6 @@ export class CairoUint256 { * Return api requests representation witch is felt array */ toApiRequest() { - return [CairoFelt(this.low), CairoFelt(this.high)]; + return [this.low.toString(10), this.high.toString(10)]; } } diff --git a/src/utils/cairoDataTypes/uint32.ts b/src/utils/cairoDataTypes/uint32.ts index 8e4f323e9..74e42e4d3 100644 --- a/src/utils/cairoDataTypes/uint32.ts +++ b/src/utils/cairoDataTypes/uint32.ts @@ -28,7 +28,7 @@ export class CairoUint32 { } toApiRequest(): string[] { - return addCompiledFlag([this.toHexString()]); + return addCompiledFlag([this.toDecimalString()]); } toBigInt() { @@ -43,6 +43,10 @@ export class CairoUint32 { return addHexPrefix(this.toBigInt().toString(16)); } + toDecimalString() { + return this.data.toString(10); + } + static validate(data: BigNumberish | boolean | unknown): void { assert(data !== null && data !== undefined, 'Invalid input: null or undefined'); assert(!isObject(data) && !Array.isArray(data), 'Invalid input: objects are not supported'); diff --git a/src/utils/cairoDataTypes/uint512.ts b/src/utils/cairoDataTypes/uint512.ts index 431c88c40..6a83de841 100644 --- a/src/utils/cairoDataTypes/uint512.ts +++ b/src/utils/cairoDataTypes/uint512.ts @@ -5,7 +5,6 @@ import { BigNumberish, type Uint512 } from '../../types'; import { addHexPrefix } from '../encode'; -import { CairoFelt } from './felt'; import { UINT_128_MAX } from './uint256'; import { isObject } from '../typed'; import { getNext, isBigNumberish } from '../num'; @@ -180,10 +179,10 @@ export class CairoUint512 { toApiRequest(): string[] { // lower limb first : https://github.com/starkware-libs/cairo/blob/07484c52791b76abcc18fd86265756904557d0d2/corelib/src/test/integer_test.cairo#L767 return [ - CairoFelt(this.limb0), - CairoFelt(this.limb1), - CairoFelt(this.limb2), - CairoFelt(this.limb3), + this.limb0.toString(10), + this.limb1.toString(10), + this.limb2.toString(10), + this.limb3.toString(10), ]; } } diff --git a/src/utils/cairoDataTypes/uint64.ts b/src/utils/cairoDataTypes/uint64.ts index b38d0e1f4..b68d1d143 100644 --- a/src/utils/cairoDataTypes/uint64.ts +++ b/src/utils/cairoDataTypes/uint64.ts @@ -29,7 +29,7 @@ export class CairoUint64 { } toApiRequest(): string[] { - return addCompiledFlag([this.toHexString()]); + return addCompiledFlag([this.toDecimalString()]); } toBigInt() { @@ -44,6 +44,10 @@ export class CairoUint64 { return addHexPrefix(this.toBigInt().toString(16)); } + toDecimalString() { + return this.data.toString(10); + } + static validate(data: BigNumberish | boolean | unknown): void { assert(data !== null && data !== undefined, 'Invalid input: null or undefined'); assert(!isObject(data) && !Array.isArray(data), 'Invalid input: objects are not supported'); diff --git a/src/utils/cairoDataTypes/uint8.ts b/src/utils/cairoDataTypes/uint8.ts index 9a3abb33d..06c8a5604 100644 --- a/src/utils/cairoDataTypes/uint8.ts +++ b/src/utils/cairoDataTypes/uint8.ts @@ -29,7 +29,7 @@ export class CairoUint8 { } toApiRequest(): string[] { - return addCompiledFlag([this.toHexString()]); + return addCompiledFlag([this.toDecimalString()]); } toBigInt() { @@ -44,6 +44,10 @@ export class CairoUint8 { return addHexPrefix(this.toBigInt().toString(16)); } + toDecimalString() { + return this.data.toString(10); + } + static validate(data: BigNumberish | boolean | unknown): void { assert(data !== null && data !== undefined, 'Invalid input: null or undefined'); assert(!isObject(data) && !Array.isArray(data), 'Invalid input: objects are not supported'); diff --git a/src/utils/cairoDataTypes/uint96.ts b/src/utils/cairoDataTypes/uint96.ts index 4e4f8c9f7..917042572 100644 --- a/src/utils/cairoDataTypes/uint96.ts +++ b/src/utils/cairoDataTypes/uint96.ts @@ -29,7 +29,7 @@ export class CairoUint96 { } toApiRequest(): string[] { - return addCompiledFlag([this.toHexString()]); + return addCompiledFlag([this.toDecimalString()]); } toBigInt() { @@ -44,6 +44,10 @@ export class CairoUint96 { return addHexPrefix(this.toBigInt().toString(16)); } + toDecimalString() { + return this.data.toString(10); + } + static validate(data: BigNumberish | boolean | unknown): void { assert(data !== null && data !== undefined, 'Invalid input: null or undefined'); assert(!isObject(data) && !Array.isArray(data), 'Invalid input: objects are not supported'); diff --git a/src/utils/calldata/index.ts b/src/utils/calldata/index.ts index 5aaa79978..c4bbb2db4 100644 --- a/src/utils/calldata/index.ts +++ b/src/utils/calldata/index.ts @@ -55,9 +55,9 @@ export class CallData { parser: AbiParserInterface; - protected readonly structs: AbiStructs; + readonly structs: AbiStructs; - protected readonly enums: AbiEnums; + readonly enums: AbiEnums; constructor(abi: Abi, parsingStrategy: ParsingStrategy = hdParsingStrategy) { this.structs = CallData.getAbiStruct(abi); diff --git a/src/utils/calldata/parser/parser-0-1.1.0.ts b/src/utils/calldata/parser/parser-0-1.1.0.ts index 0a02884f4..f678cde67 100644 --- a/src/utils/calldata/parser/parser-0-1.1.0.ts +++ b/src/utils/calldata/parser/parser-0-1.1.0.ts @@ -30,7 +30,7 @@ export class AbiParser1 implements AbiParserInterface { instance: CairoType, strategy: AllowArray ) => (instance as CairoStruct).decompose(strategy); - structStrategy.dynamicSelectors[struct.name] = (_type: string) => true; + structStrategy.dynamicSelectors[struct.name] = (_type: string) => _type === struct.name; } }); diff --git a/src/utils/calldata/parser/parser-2.0.0.ts b/src/utils/calldata/parser/parser-2.0.0.ts index 21e2ec485..c8c87a91b 100644 --- a/src/utils/calldata/parser/parser-2.0.0.ts +++ b/src/utils/calldata/parser/parser-2.0.0.ts @@ -11,7 +11,7 @@ import { } from '../../../types'; import { CairoStruct } from '../../cairoDataTypes/cairoStruct'; import type { CairoType } from '../../cairoDataTypes/cairoType.interface'; -import { isTypeArray, isTypeOption, isTypeResult } from '../cairo'; +import { isTypeArray, isTypeEthAddress, isTypeOption, isTypeResult } from '../cairo'; import { AbiParserInterface } from './interface'; import { ParsingStrategy, type VariantType } from './parsingStrategy.type'; import { CairoTypeCustomEnum } from '../../cairoDataTypes/cairoTypeCustomEnum'; @@ -35,7 +35,7 @@ export class AbiParser2 implements AbiParserInterface { }; structs.forEach((struct: AbiStruct) => { // Span are defined as Struct in Abi, but are useless here - if (!isTypeArray(struct.name)) { + if (!isTypeArray(struct.name) && !isTypeEthAddress(struct.name)) { structAndEnumStrategy.constructors[struct.name] = (input: Iterator | unknown) => { return new CairoStruct(input, struct, [parsingStrategy, structAndEnumStrategy]); }; @@ -43,7 +43,8 @@ export class AbiParser2 implements AbiParserInterface { instance: CairoType, strategy: AllowArray ) => (instance as CairoStruct).decompose(strategy); - structAndEnumStrategy.dynamicSelectors[struct.name] = (_type: string) => true; + structAndEnumStrategy.dynamicSelectors[struct.name] = (_type: string) => + _type === struct.name; } }); enums.forEach((enumDef: AbiEnum) => { @@ -55,7 +56,6 @@ export class AbiParser2 implements AbiParserInterface { _type?: string, variant?: VariantType ) => { - // assert(!!variant, 'CairoTypeCustomEnum constructor requires "variant" parameter.'); assert(!(typeof variant === 'string'), 'variant needs to be an integer.'); return new CairoTypeCustomEnum( input, @@ -68,7 +68,8 @@ export class AbiParser2 implements AbiParserInterface { instance: CairoType, strategy: AllowArray ) => (instance as CairoTypeCustomEnum).decompose(strategy); - structAndEnumStrategy.dynamicSelectors[enumDef.name] = (_type: string) => true; + structAndEnumStrategy.dynamicSelectors[enumDef.name] = (_type: string) => + _type === enumDef.name; } }); this.parsingStrategies = [parsingStrategy, structAndEnumStrategy]; diff --git a/src/utils/calldata/parser/parsingStrategy.ts b/src/utils/calldata/parser/parsingStrategy.ts index df8078c21..6a69ae448 100644 --- a/src/utils/calldata/parser/parsingStrategy.ts +++ b/src/utils/calldata/parser/parsingStrategy.ts @@ -26,6 +26,8 @@ import { CairoTypeOption } from '../../cairoDataTypes/cairoTypeOption'; import { isUndefined } from '../../typed'; import { CairoTypeResult } from '../../cairoDataTypes/cairoTypeResult'; import type { ParsingStrategy, VariantType } from './parsingStrategy.type'; +import { CairoBool } from '../../cairoDataTypes'; +import { CairoEthAddress } from '../../cairoDataTypes/ethAddress'; /** * More robust parsing strategy @@ -53,6 +55,19 @@ export const hdParsingStrategy: ParsingStrategy = { } return new CairoFelt252(input); }, + 'core::starknet::class_hash::ClassHash': (input: Iterator | unknown) => { + if (input && typeof input === 'object' && 'next' in input) { + return CairoFelt252.factoryFromApiResponse(input as Iterator); + } + return new CairoFelt252(input); + }, + 'core::starknet::contract_address::ContractAddress': (input: Iterator | unknown) => { + if (input && typeof input === 'object' && 'next' in input) { + return CairoFelt252.factoryFromApiResponse(input as Iterator); + } + return new CairoFelt252(input); + }, + felt: (input: Iterator | unknown) => { if (input && typeof input === 'object' && 'next' in input) { return CairoFelt252.factoryFromApiResponse(input as Iterator); @@ -71,6 +86,19 @@ export const hdParsingStrategy: ParsingStrategy = { } return new CairoUint512(input); }, + [CairoBool.abiSelector]: (input: Iterator | unknown) => { + if (input && typeof input === 'object' && 'next' in input) { + return CairoBool.factoryFromApiResponse(input as Iterator); + } + return new CairoBool(input); + }, + [CairoEthAddress.abiSelector]: (input: Iterator | unknown) => { + if (input && typeof input === 'object' && 'next' in input) { + return CairoEthAddress.factoryFromApiResponse(input as Iterator); + } + return new CairoEthAddress(input); + }, + [CairoUint8.abiSelector]: (input: Iterator | unknown) => { if (input && typeof input === 'object' && 'next' in input) { return CairoUint8.factoryFromApiResponse(input as Iterator); @@ -192,19 +220,19 @@ export const hdParsingStrategy: ParsingStrategy = { }, }, dynamicSelectors: { - CairoFixedArray: (type: string) => { + [CairoFixedArray.dynamicSelector]: (type: string) => { return CairoFixedArray.isAbiType(type); }, [CairoArray.dynamicSelector]: (type: string) => { return isTypeArray(type); }, - CairoTuple: (type: string) => { + [CairoTuple.dynamicSelector]: (type: string) => { return isTypeTuple(type); }, - CairoTypeOption: (type: string) => { + [CairoTypeOption.dynamicSelector]: (type: string) => { return isTypeOption(type); }, - CairoTypeResult: (type: string) => { + [CairoTypeResult.dynamicSelector]: (type: string) => { return isTypeResult(type); }, // TODO: add more dynamic selectors here @@ -214,9 +242,16 @@ export const hdParsingStrategy: ParsingStrategy = { [CairoByteArray.abiSelector]: (instance: CairoType) => (instance as CairoByteArray).decodeUtf8(), [CairoFelt252.abiSelector]: (instance: CairoType) => (instance as CairoFelt252).toBigInt(), + 'core::starknet::class_hash::ClassHash': (instance: CairoType) => + (instance as CairoFelt252).toBigInt(), + 'core::starknet::contract_address::ContractAddress': (instance: CairoType) => + (instance as CairoFelt252).toBigInt(), felt: (instance: CairoType) => (instance as CairoFelt252).toBigInt(), [CairoUint256.abiSelector]: (instance: CairoType) => (instance as CairoUint256).toBigInt(), [CairoUint512.abiSelector]: (instance: CairoType) => (instance as CairoUint512).toBigInt(), + [CairoBool.abiSelector]: (instance: CairoType) => (instance as CairoBool).toBoolean(), + [CairoEthAddress.abiSelector]: (instance: CairoType) => + (instance as CairoEthAddress).toBigInt(), [CairoUint8.abiSelector]: (instance: CairoType) => (instance as CairoUint8).toBigInt(), [CairoUint16.abiSelector]: (instance: CairoType) => (instance as CairoUint16).toBigInt(), [CairoUint32.abiSelector]: (instance: CairoType) => (instance as CairoUint32).toBigInt(), diff --git a/src/utils/calldata/requestParser.ts b/src/utils/calldata/requestParser.ts index 9cf2845aa..64c36d56c 100644 --- a/src/utils/calldata/requestParser.ts +++ b/src/utils/calldata/requestParser.ts @@ -47,7 +47,6 @@ import { CairoTypeOption } from '../cairoDataTypes/cairoTypeOption'; import { CairoTypeResult } from '../cairoDataTypes/cairoTypeResult'; import { CairoStruct } from '../cairoDataTypes/cairoStruct'; import { CairoTypeCustomEnum } from '../cairoDataTypes/cairoTypeCustomEnum'; -import { toHex } from '../num'; // TODO: cleanup implementations to work with unknown, instead of blind casting with 'as' @@ -145,7 +144,7 @@ function parseCalldataValue({ // value is Array if (Array.isArray(element)) { const result: string[] = []; - result.push(toHex(felt(element.length))); // Add length to array + result.push(felt(element.length)); // Add length to array const arrayType = getArrayType(type); return element.reduce((acc, it) => { @@ -209,12 +208,7 @@ function parseCalldataValue({ if (isTypeOption(type)) { let myOption: CairoTypeOption; if (element instanceof CairoOption) { - myOption = new CairoTypeOption( - element, - type, - parser.parsingStrategies, - element.isSome() ? CairoOptionVariant.Some : CairoOptionVariant.None - ); + myOption = new CairoTypeOption(element, type, parser.parsingStrategies); } else { myOption = element as CairoTypeOption; } diff --git a/src/utils/calldata/validate.ts b/src/utils/calldata/validate.ts index 7999d0890..f604d75c9 100644 --- a/src/utils/calldata/validate.ts +++ b/src/utils/calldata/validate.ts @@ -23,7 +23,7 @@ import { CairoUint512 } from '../cairoDataTypes/uint512'; import { CairoSecp256k1Point } from '../cairoDataTypes/secp256k1Point'; import { isHex, toBigInt } from '../num'; import { isLongText } from '../shortString'; -import { isBoolean, isNumber, isString, isBigInt, isObject } from '../typed'; +import { isNumber, isString, isBigInt, isObject } from '../typed'; import { getArrayType, isLen, @@ -45,6 +45,8 @@ import { CairoCustomEnum, CairoOption, CairoResult } from './enum'; import { CairoTypeResult } from '../cairoDataTypes/cairoTypeResult'; import { CairoStruct } from '../cairoDataTypes/cairoStruct'; import { CairoTypeCustomEnum } from '../cairoDataTypes/cairoTypeCustomEnum'; +import { CairoBool } from '../cairoDataTypes'; +import { CairoEthAddress } from '../cairoDataTypes/ethAddress'; // TODO: separate validate is redundant as CairoTypes are validated during construction. // TODO: This validate should provide added valie method base validate poiniting to incorect value for method, opt. using color coding @@ -180,7 +182,7 @@ const validateUint = (parameter: any, input: AbiEntry) => { const validateBool = (parameter: any, input: AbiEntry) => { assert( - isBoolean(parameter), + CairoBool.is(parameter), `Validate: arg ${input.name} of cairo type ${input.type} should be type (Boolean)` ); }; @@ -193,12 +195,9 @@ const validateStruct = (parameter: any, input: AbiEntry, structs: AbiStructs) => } if (isTypeEthAddress(input.type)) { - assert(!isObject(parameter), `EthAddress type is waiting a BigNumberish. Got "${parameter}"`); - const param = BigInt(parameter.toString(10)); assert( - // from : https://github.com/starkware-libs/starknet-specs/blob/29bab650be6b1847c92d4461d4c33008b5e50b1a/api/starknet_api_openrpc.json#L1259 - param >= 0n && param <= 2n ** 160n - 1n, - `Validate: arg ${input.name} cairo typed ${input.type} should be in range [0, 2^160-1]` + CairoEthAddress.is(parameter), + `EthAddress type is waiting a BigNumberish < (2 ** 160 - 1). Got "${parameter}"` ); return; } @@ -262,7 +261,10 @@ const validateTuple = (parameter: any, input: AbiEntry) => { return; } - assert(isObject(parameter), `Validate: arg ${input.name} should be a tuple (defined as object)`); + assert( + isObject(parameter) || Array.isArray(parameter), + `Validate: arg ${input.name} should be a tuple (defined as object or array)` + ); // todo: skip tuple structural validation for now }; From f467a894830ebdf3dfba2f9538419b0940ff95c7 Mon Sep 17 00:00:00 2001 From: PhilippeR26 Date: Wed, 8 Oct 2025 15:34:26 +0200 Subject: [PATCH 13/17] build: nonZero, contractAddress, classHash --- __tests__/cairo1v2_typed.test.ts | 8 +- __tests__/cairov24onward.test.ts | 2 +- .../cairoDataTypes/CairoEthAddress.test.ts | 24 +- .../utils/cairoDataTypes/CairoNonZero.test.ts | 205 +++++++++++ .../calldata/enum/CairoTypeCustomEnum.test.ts | 338 ++++++++++++++++-- .../calldata/enum/CairoTypeOption.test.ts | 51 +++ .../calldata/enum/CairoTypeResult.test.ts | 45 +++ __tests__/utils/calldata/validate.test.ts | 10 +- src/utils/cairoDataTypes/array.ts | 10 +- src/utils/cairoDataTypes/cairoStruct.ts | 4 +- .../cairoDataTypes/cairoTypeCustomEnum.ts | 36 +- src/utils/cairoDataTypes/cairoTypeOption.ts | 8 +- src/utils/cairoDataTypes/cairoTypeResult.ts | 8 +- src/utils/cairoDataTypes/ethAddress.ts | 7 +- src/utils/cairoDataTypes/fixedArray.ts | 10 +- src/utils/cairoDataTypes/index.ts | 1 + src/utils/cairoDataTypes/nonZero.ts | 315 ++++++++++++++++ src/utils/cairoDataTypes/tuple.ts | 8 +- src/utils/calldata/index.ts | 4 + src/utils/calldata/parser/parsingStrategy.ts | 44 ++- src/utils/calldata/propertyOrder.ts | 2 +- src/utils/calldata/requestParser.ts | 4 +- src/utils/calldata/responseParser.ts | 8 +- src/utils/calldata/validate.ts | 59 +-- 24 files changed, 1041 insertions(+), 170 deletions(-) create mode 100644 __tests__/utils/cairoDataTypes/CairoNonZero.test.ts create mode 100644 src/utils/cairoDataTypes/nonZero.ts diff --git a/__tests__/cairo1v2_typed.test.ts b/__tests__/cairo1v2_typed.test.ts index e552289c1..f21ef3c3c 100644 --- a/__tests__/cairo1v2_typed.test.ts +++ b/__tests__/cairo1v2_typed.test.ts @@ -964,13 +964,13 @@ describe('Cairo 1', () => { expect(callD2).toEqual([hexToDecimalString(encodeShortString(str))]); const myCallData = new CallData(contracts.C240.sierra.abi); const myCalldata1 = myCallData.compile('proceed_bytes31', [str]); - expect(myCalldata1).toEqual([encodeShortString(str)]); + expect(myCalldata1).toEqual([hexToDecimalString(encodeShortString(str))]); const myCalldata2 = myCallData.compile('proceed_bytes31', { str }); - expect(myCalldata2).toEqual([encodeShortString(str)]); + expect(myCalldata2).toEqual([hexToDecimalString(encodeShortString(str))]); const myCall1 = stringContract.populate('proceed_bytes31', [str]); - expect(myCall1.calldata).toEqual([encodeShortString(str)]); + expect(myCall1.calldata).toEqual([hexToDecimalString(encodeShortString(str))]); const myCall2 = stringContract.populate('proceed_bytes31', { str }); - expect(myCall2.calldata).toEqual([encodeShortString(str)]); + expect(myCall2.calldata).toEqual([hexToDecimalString(encodeShortString(str))]); }); test('bytes31 too long', async () => { diff --git a/__tests__/cairov24onward.test.ts b/__tests__/cairov24onward.test.ts index 0cf267e51..201bb0b72 100644 --- a/__tests__/cairov24onward.test.ts +++ b/__tests__/cairov24onward.test.ts @@ -143,7 +143,7 @@ describe('Cairo v2.4 onwards', () => { test('Tuple (EthAddress, u256)', async () => { const res4 = await tupleContract.call('get_tuple4', []); - expect(res4).toEqual({ '0': { address: 123n }, '1': 500n }); + expect(res4).toEqual({ '0': 123n, '1': 500n }); }); test('Tuple (Result, u8)', async () => { diff --git a/__tests__/utils/cairoDataTypes/CairoEthAddress.test.ts b/__tests__/utils/cairoDataTypes/CairoEthAddress.test.ts index 929aed3c4..6a90f2e86 100644 --- a/__tests__/utils/cairoDataTypes/CairoEthAddress.test.ts +++ b/__tests__/utils/cairoDataTypes/CairoEthAddress.test.ts @@ -46,23 +46,23 @@ describe('CairoEthAddress class Unit Tests', () => { test('should reject negative values', () => { expect(() => new CairoEthAddress(-1)).toThrow( - 'Validate: arg should be in range [0, 2^160-1]' + 'Validate: EthAddress arg should be in range [0, 2^160-1]' ); expect(() => new CairoEthAddress(-100n)).toThrow( - 'Validate: arg should be in range [0, 2^160-1]' + 'Validate: EthAddress arg should be in range [0, 2^160-1]' ); expect(() => new CairoEthAddress('-1')).toThrow( - 'Validate: arg should be in range [0, 2^160-1]' + 'Validate: EthAddress arg should be in range [0, 2^160-1]' ); }); test('should reject values greater than 255', () => { expect(() => new CairoEthAddress(RANGE_ETH_ADDRESS.max + 1n)).toThrow( - 'Validate: arg should be in range [0, 2^160-1]' + 'Validate: EthAddress arg should be in range [0, 2^160-1]' ); expect( () => new CairoEthAddress('99999999999999999999999999999999999999999999999999999999999999') - ).toThrow('Validate: arg should be in range [0, 2^160-1]'); + ).toThrow('Validate: EthAddress arg should be in range [0, 2^160-1]'); }); test('should handle valid string inputs correctly', () => { @@ -113,10 +113,10 @@ describe('CairoEthAddress class Unit Tests', () => { // Out of range values as unknown expect(() => new CairoEthAddress((2n ** 161n) as unknown)).toThrow( - 'Validate: arg should be in range [0, 2^160-1]' + 'Validate: EthAddress arg should be in range [0, 2^160-1]' ); expect(() => new CairoEthAddress(-1 as unknown)).toThrow( - 'Validate: arg should be in range [0, 2^160-1]' + 'Validate: EthAddress arg should be in range [0, 2^160-1]' ); }); @@ -131,10 +131,10 @@ describe('CairoEthAddress class Unit Tests', () => { test('should validate string inputs with out-of-range values', () => { expect(() => new CairoEthAddress((2n ** 162n).toString(10))).toThrow( - 'Validate: arg should be in range [0, 2^160-1]' + 'Validate: EthAddress arg should be in range [0, 2^160-1]' ); expect(() => new CairoEthAddress('0xfffffffffffffffffffffffffffffffffffffffffff')).toThrow( - 'Validate: arg should be in range [0, 2^160-1]' + 'Validate: EthAddress arg should be in range [0, 2^160-1]' ); }); }); @@ -225,16 +225,16 @@ describe('CairoEthAddress class Unit Tests', () => { test('should reject negative values', () => { expect(() => CairoEthAddress.validate(-1)).toThrow( - 'Validate: arg should be in range [0, 2^160-1]' + 'Validate: EthAddress arg should be in range [0, 2^160-1]' ); expect(() => CairoEthAddress.validate(-100n)).toThrow( - 'Validate: arg should be in range [0, 2^160-1]' + 'Validate: EthAddress arg should be in range [0, 2^160-1]' ); }); test('should reject values exceeding ethAddr range', () => { expect(() => CairoEthAddress.validate(RANGE_ETH_ADDRESS.max + 1n)).toThrow( - 'Validate: arg should be in range [0, 2^160-1]' + 'Validate: EthAddress arg should be in range [0, 2^160-1]' ); }); diff --git a/__tests__/utils/cairoDataTypes/CairoNonZero.test.ts b/__tests__/utils/cairoDataTypes/CairoNonZero.test.ts new file mode 100644 index 000000000..3ce52a94d --- /dev/null +++ b/__tests__/utils/cairoDataTypes/CairoNonZero.test.ts @@ -0,0 +1,205 @@ +import { + CairoUint8, + hdParsingStrategy, + cairo, + CairoUint256, + CallData, + CairoNonZero, +} from '../../../src'; + +describe('CairoNonZero', () => { + describe('constructor types', () => { + const typeCairo = 'core::zeroable::NonZero::'; + const iter = ['9'][Symbol.iterator](); + + test('content is a BigNumberish', () => { + const cairoNonZero0 = new CairoNonZero(8, typeCairo, hdParsingStrategy); + expect(cairoNonZero0.content).toEqual(new CairoUint8(8)); + expect(cairoNonZero0.contentType).toBe('core::zeroable::NonZero::'); + expect(cairoNonZero0.toApiRequest()).toEqual(['8']); + expect(cairoNonZero0.decompose(hdParsingStrategy)).toBe(8n); + }); + + test('content is an iterator', () => { + const cairoNonZero0 = new CairoNonZero(iter, typeCairo, hdParsingStrategy); + expect(cairoNonZero0.content).toEqual(new CairoUint8(9)); + expect(cairoNonZero0.contentType).toBe('core::zeroable::NonZero::'); + expect(cairoNonZero0.toApiRequest()).toEqual(['9']); + expect(cairoNonZero0.decompose(hdParsingStrategy)).toBe(9n); + }); + + test('content is a CairoType', () => { + const value = new CairoUint8(7); + const cairoNonZero0 = new CairoNonZero(value, typeCairo, hdParsingStrategy); + expect(cairoNonZero0.content).toEqual(value); + expect(cairoNonZero0.contentType).toBe('core::zeroable::NonZero::'); + expect(cairoNonZero0.toApiRequest()).toEqual(['7']); + expect(cairoNonZero0.decompose(hdParsingStrategy)).toBe(7n); + }); + + test('content is a u256', () => { + const value = cairo.uint256(1000); + const valType = new CairoUint256(1000); + const cairoNonZero0 = new CairoNonZero( + value, + 'core::zeroable::NonZero::', + hdParsingStrategy + ); + expect(cairoNonZero0.content).toEqual(valType); + expect(cairoNonZero0.contentType).toBe('core::zeroable::NonZero::'); + expect(cairoNonZero0.toApiRequest()).toEqual(['1000', '0']); + expect(cairoNonZero0.decompose(hdParsingStrategy)).toBe(1000n); + const cairoNonZero1 = new CairoNonZero( + valType, + 'core::zeroable::NonZero::', + hdParsingStrategy + ); + expect(cairoNonZero1.content).toEqual(valType); + expect(cairoNonZero1.contentType).toBe('core::zeroable::NonZero::'); + const cairoNonZero2 = new CairoNonZero( + 1000, + 'core::zeroable::NonZero::', + hdParsingStrategy + ); + expect(cairoNonZero2.content).toEqual(valType); + expect(cairoNonZero2.contentType).toBe('core::zeroable::NonZero::'); + const cairoNonZero3 = new CairoNonZero( + cairoNonZero2, + 'core::zeroable::NonZero::', + hdParsingStrategy + ); + expect(cairoNonZero3.content).toEqual(valType); + expect(cairoNonZero3.contentType).toBe('core::zeroable::NonZero::'); + }); + }); + + describe('zero values', () => { + test('content is a u8', () => { + expect( + () => new CairoNonZero(0, 'core::zeroable::NonZero::', hdParsingStrategy) + ).toThrow(new Error('ValidateValue: value 0 is not authorized in NonZero type.')); + }); + test('content is a u16', () => { + expect( + () => + new CairoNonZero(0, 'core::zeroable::NonZero::', hdParsingStrategy) + ).toThrow(new Error('ValidateValue: value 0 is not authorized in NonZero type.')); + }); + test('content is a u32', () => { + expect( + () => + new CairoNonZero(0, 'core::zeroable::NonZero::', hdParsingStrategy) + ).toThrow(new Error('ValidateValue: value 0 is not authorized in NonZero type.')); + }); + test('content is a u64', () => { + expect( + () => + new CairoNonZero(0, 'core::zeroable::NonZero::', hdParsingStrategy) + ).toThrow(new Error('ValidateValue: value 0 is not authorized in NonZero type.')); + }); + test('content is a u96', () => { + expect( + () => + new CairoNonZero(0, 'core::zeroable::NonZero::', hdParsingStrategy) + ).toThrow(new Error('ValidateValue: value 0 is not authorized in NonZero type.')); + }); + test('content is a u128', () => { + expect( + () => + new CairoNonZero(0, 'core::zeroable::NonZero::', hdParsingStrategy) + ).toThrow(new Error('ValidateValue: value 0 is not authorized in NonZero type.')); + }); + test('content is a u256', () => { + expect( + () => + new CairoNonZero(0, 'core::zeroable::NonZero::', hdParsingStrategy) + ).toThrow(new Error('ValidateValue: value 0 is not authorized in NonZero type.')); + }); + }); + + describe('invalid types', () => { + test('content is a u512', () => { + expect( + () => + new CairoNonZero(8, 'core::zeroable::NonZero::', hdParsingStrategy) + ).toThrow( + new Error('Validate: core::integer::u512 type is not authorized for NonZero type.') + ); + }); + + test('content is a i8', () => { + expect( + () => new CairoNonZero(8, 'core::zeroable::NonZero::', hdParsingStrategy) + ).toThrow(new Error('Validate: core::integer::i8 type is not authorized for NonZero type.')); + }); + + test('content is an array', () => { + expect( + () => + new CairoNonZero( + [8, 9], + 'core::zeroable::NonZero::>', + hdParsingStrategy + ) + ).toThrow( + new Error( + 'Validate: core::array::Array:: type is not authorized for NonZero type.' + ) + ); + }); + }); + + describe('static methods', () => { + test('is', () => { + expect(CairoNonZero.is(200, 'core::zeroable::NonZero::')).toBe(true); + expect(CairoNonZero.is(100, 'core::zeroable::NonZero::')).toBe(false); + }); + + test('isAbiType', () => { + expect(CairoNonZero.isAbiType('core::zeroable::NonZero::')).toBe(true); + expect(CairoNonZero.isAbiType('core::wrong::')).toBe(false); + }); + + test('validate', () => { + expect(() => + CairoNonZero.validate(200, 'core::zeroable::NonZero::') + ).not.toThrow(); + expect(() => + CairoNonZero.validate( + 200, + 'core::zeroable::NonZero::>' + ) + ).toThrow( + new Error( + 'Validate: core::array::Array:: type is not authorized for NonZero type.' + ) + ); + }); + + test('getNonZeroType', () => { + expect(CairoNonZero.getNonZeroType('core::zeroable::NonZero::')).toBe( + 'core::integer::u16' + ); + }); + }); + + describe('encoding without Abi', () => { + test('number', () => { + expect( + CallData.compile([ + new CairoNonZero(7, 'core::zeroable::NonZero::', hdParsingStrategy), + ]) + ).toEqual(['7']); + + expect( + CallData.compile({ + input: new CairoNonZero( + 7, + 'core::zeroable::NonZero::', + hdParsingStrategy + ), + }) + ).toEqual(['7']); + }); + }); +}); diff --git a/__tests__/utils/calldata/enum/CairoTypeCustomEnum.test.ts b/__tests__/utils/calldata/enum/CairoTypeCustomEnum.test.ts index a039e5d28..10d59088d 100644 --- a/__tests__/utils/calldata/enum/CairoTypeCustomEnum.test.ts +++ b/__tests__/utils/calldata/enum/CairoTypeCustomEnum.test.ts @@ -1,49 +1,329 @@ -import { CairoResult } from '../../../../src/utils/calldata/enum'; +/* eslint-disable @typescript-eslint/no-unused-vars */ +import { + CairoTypeCustomEnum, + type ParsingStrategy, + type AbiEnum, + createAbiParser, + type AllowArray, + type BigNumberish, + CairoCustomEnum, + CairoStruct, + type AbiStruct, + CairoFixedArray, + cairo, + CairoArray, + hdParsingStrategy, + CairoTuple, + CairoOption, + CairoOptionVariant, + CairoTypeOption, + CairoResult, + CairoResultVariant, + CairoTypeResult, + CallData, +} from '../../../../src'; +import { contracts } from '../../../config/fixtures'; -describe('CairoResult', () => { - describe('constructor', () => { - test('should set "Ok" if variant is 0', () => { - const cairoResult = new CairoResult(0, 'result_content'); - expect(cairoResult.Ok).toEqual('result_content'); - expect(cairoResult.Err).toBeUndefined(); +describe('CairoTypeCustomEnum', () => { + const { abi } = contracts.TestCairoType.sierra; + const enumAbi = abi.find((item) => item.name === 'enums::MyEnum') as AbiEnum; + const pointAbi = abi.find((item) => item.name === 'enums::Point') as AbiStruct; + const parser = createAbiParser(abi, hdParsingStrategy); + const strategies: AllowArray = parser.parsingStrategies; + const iter = ['1', '100', '200'][Symbol.iterator](); + type Point = { x: BigNumberish; y: BigNumberish }; + const myPoint: Point = { y: 200, x: 100 }; + const point = new CairoStruct(myPoint, pointAbi, strategies); + + describe('constructor variant', () => { + const r = new CairoTypeCustomEnum(myPoint, enumAbi, strategies, 1); + test('should throw an error if wrong variant is provided', () => { + expect(() => new CairoTypeCustomEnum(myPoint, enumAbi, strategies, 100)).toThrow( + new Error( + 'The custom enum enums::MyEnum variant must be in the range 0..8. You requested variant #100' + ) + ); }); - test('should set "Err" if variant is 1', () => { - const cairoResult = new CairoResult(1, 'result_content'); - expect(cairoResult.Err).toEqual('result_content'); - expect(cairoResult.Ok).toBeUndefined(); + test('should throw an error if content is undefined', () => { + expect(() => new CairoTypeCustomEnum(undefined, enumAbi, strategies)).toThrow( + new Error('"content" parameter has to be defined.') + ); + expect(() => new CairoTypeCustomEnum(null, enumAbi, strategies)).toThrow( + new Error('"content" parameter has to be defined.') + ); }); - test('should throw an error if wrong variant is provided', () => { - expect(() => new CairoResult(2, 'result_content')).toThrow( - new Error('Wrong variant! It should be CairoResultVariant.Ok or .Err.') + test('accept optional array of parsing strategies', () => { + const mergedStrategy: ParsingStrategy = { + ...(strategies as ParsingStrategy[])[0], + ...(strategies as ParsingStrategy[])[1], + }; + expect(() => new CairoTypeCustomEnum(myPoint, enumAbi, strategies, 1)).not.toThrow(); + expect(() => new CairoTypeCustomEnum(myPoint, enumAbi, mergedStrategy, 1)).not.toThrow(); + }); + + test('if content is an iterator, no variant is authorized', () => { + expect(() => new CairoTypeCustomEnum(iter, enumAbi, strategies, 1)).toThrow( + new Error('when "content" parameter is an iterator, do not define "variant" parameter.') ); }); }); - describe('unwrap', () => { - test('should return "Ok" value', () => { - const cairoResult = new CairoResult(0, 'result_content'); - expect(cairoResult.unwrap()).toEqual('result_content'); + describe('constructor content', () => { + test('content is a CairoCustomEnum', () => { + const myCairoCustomEnum = new CairoCustomEnum({ LocationError: myPoint }); + const cairoTypeCustomEnum0 = new CairoTypeCustomEnum(myCairoCustomEnum, enumAbi, strategies); + expect(cairoTypeCustomEnum0.enumVariant).toBe(1); + expect(cairoTypeCustomEnum0.content).toEqual(point); + expect(cairoTypeCustomEnum0.abiEnum).toEqual(enumAbi); }); - test('should return "Err" value', () => { - const cairoResult = new CairoResult(1, 'result_content'); - expect(cairoResult.unwrap()).toEqual('result_content'); + test('content is a CairoTypeCustomEnum', () => { + const cairoTypeCustomEnum0 = new CairoTypeCustomEnum(myPoint, enumAbi, strategies, 1); + const cairoTypeCustomEnum1 = new CairoTypeCustomEnum( + cairoTypeCustomEnum0, + enumAbi, + strategies + ); + expect(cairoTypeCustomEnum1.enumVariant).toBe(1); + expect(cairoTypeCustomEnum1.content).toEqual(point); + expect(cairoTypeCustomEnum1.abiEnum).toEqual(enumAbi); + expect(() => new CairoTypeCustomEnum(cairoTypeCustomEnum0, enumAbi, strategies, 1)).toThrow( + new Error( + 'when "content" parameter is a CairoTypeCustomEnum do not define "variant" parameter.' + ) + ); + }); + + test('content is an iterator', () => { + const cairoTypeCustomEnum0 = new CairoTypeCustomEnum(iter, enumAbi, strategies); + expect(cairoTypeCustomEnum0.enumVariant).toBe(1); + expect(cairoTypeCustomEnum0.content).toEqual(point); + expect(cairoTypeCustomEnum0.abiEnum).toEqual(enumAbi); + expect(cairoTypeCustomEnum0.toApiRequest()).toEqual(['1', '100', '200']); + const iter1 = ['3', '10', '11'][Symbol.iterator](); + const cairoTypeCustomEnum1 = new CairoTypeCustomEnum(iter1, enumAbi, strategies); + expect(cairoTypeCustomEnum1.enumVariant).toBe(3); + expect(cairoTypeCustomEnum1.abiEnum).toEqual(enumAbi); + expect(cairoTypeCustomEnum1.toApiRequest()).toEqual(['3', '10', '11']); }); }); - describe('isOk', () => { - test('should return true if "Ok" value is set', () => { - const cairoResult = new CairoResult(0, 'result_content'); - expect(cairoResult.isOk()).toEqual(true); + describe('constructor custom enum CairoType', () => { + test('customEnumCairoType: enum of an array', () => { + const myEnum0 = new CairoTypeCustomEnum([1, 2, 3], enumAbi, strategies, 4); + const myEnum1 = new CairoTypeCustomEnum( + new CairoArray([1, 2, 3], 'core::array::Span::', strategies), + enumAbi, + strategies, + 4 + ); + expect(myEnum0.toApiRequest()).toEqual(['4', '3', '1', '0', '2', '0', '3', '0']); + expect(myEnum0.decompose(strategies)).toEqual( + new CairoCustomEnum({ ErrorList: [1n, 2n, 3n] }) + ); + expect(myEnum1.toApiRequest()).toEqual(['4', '3', '1', '0', '2', '0', '3', '0']); + expect(myEnum1.decompose(strategies)).toEqual( + new CairoCustomEnum({ ErrorList: [1n, 2n, 3n] }) + ); + expect(() => new CairoTypeCustomEnum([1, 2, 3], enumAbi, strategies)).toThrow( + new Error( + '"variant" parameter is mandatory when creating a new Cairo custom enum from a Cairo Enum or raw data.' + ) + ); + }); + + test('customEnumCairoType: enum of a fixed array', () => { + const myEnum0 = new CairoTypeCustomEnum([1, 2], enumAbi, strategies, 3); + const myEnum1 = new CairoTypeCustomEnum( + new CairoFixedArray([1, 2], '[core::integer::u32; 2]', strategies), + enumAbi, + strategies, + 3 + ); + expect(myEnum0.toApiRequest()).toEqual(['3', '1', '2']); + const empty = { + Damage: undefined, + Empty: undefined, + ErrorList: undefined, + LocationError: undefined, + Parents: undefined, + Report: undefined, + Status: undefined, + Success: undefined, + }; + const enRes = { TwoErrors: [1n, 2n] }; + expect(myEnum0.decompose(strategies)).toEqual(new CairoCustomEnum({ ...empty, ...enRes })); + expect(myEnum1.toApiRequest()).toEqual(['3', '1', '2']); + expect(myEnum1.decompose(strategies)).toEqual(new CairoCustomEnum({ TwoErrors: [1n, 2n] })); + expect(() => new CairoTypeCustomEnum([1, 2], enumAbi, strategies)).toThrow( + new Error( + '"variant" parameter is mandatory when creating a new Cairo custom enum from a Cairo Enum or raw data.' + ) + ); + }); + + test('customEnumCairoType: enum of a tuple', () => { + const myEnum0 = new CairoTypeCustomEnum([5, 6], enumAbi, strategies, 5); + const myEnum1 = new CairoTypeCustomEnum( + new CairoTuple([5, 6], '(core::integer::u64, core::integer::u128)', strategies), + enumAbi, + strategies, + 5 + ); + expect(myEnum0.toApiRequest()).toEqual(['5', '5', '6']); + expect(myEnum0.decompose(strategies)).toEqual( + new CairoCustomEnum({ Parents: { '0': 5n, '1': 6n } }) + ); + expect(myEnum1.toApiRequest()).toEqual(['5', '5', '6']); + expect(myEnum1.decompose(strategies)).toEqual( + new CairoCustomEnum({ Parents: { '0': 5n, '1': 6n } }) + ); + expect(() => new CairoTypeCustomEnum([5, 6], enumAbi, strategies)).toThrow( + new Error( + '"variant" parameter is mandatory when creating a new Cairo custom enum from a Cairo Enum or raw data.' + ) + ); + }); + + test('customEnumCairoType: enum of an option', () => { + const option0 = new CairoOption(CairoOptionVariant.Some, 5n); + const myTypeOption = new CairoTypeOption( + 5, + 'core::option::Option::', + strategies, + CairoOptionVariant.Some + ); + const myEnum0 = new CairoTypeCustomEnum(option0, enumAbi, strategies, 6); + const myEnum1 = new CairoTypeCustomEnum(myTypeOption, enumAbi, strategies, 6); + expect(myEnum0.toApiRequest()).toEqual(['6', '0', '5']); + expect(myEnum0.decompose(strategies)).toEqual(new CairoCustomEnum({ Damage: option0 })); + expect(myEnum1.toApiRequest()).toEqual(['6', '0', '5']); + expect(myEnum1.decompose(strategies)).toEqual(new CairoCustomEnum({ Damage: option0 })); + expect(() => new CairoTypeCustomEnum(option0, enumAbi, strategies)).toThrow( + new Error( + '"variant" parameter is mandatory when creating a new Cairo custom enum from a CairoOption.' + ) + ); + }); + + test('customEnumCairoType: enum of a result', () => { + const result0 = new CairoResult(CairoResultVariant.Ok, 5n); + const myTypeResult = new CairoTypeResult( + 5, + 'core::result::Result::', + strategies, + CairoResultVariant.Ok + ); + const myEnum0 = new CairoTypeCustomEnum(result0, enumAbi, strategies, 7); + const myEnum1 = new CairoTypeCustomEnum(myTypeResult, enumAbi, strategies, 7); + expect(myEnum0.toApiRequest()).toEqual(['7', '0', '5']); + expect(myEnum0.decompose(strategies)).toEqual(new CairoCustomEnum({ Report: result0 })); + expect(myEnum1.toApiRequest()).toEqual(['7', '0', '5']); + expect(myEnum1.decompose(strategies)).toEqual(new CairoCustomEnum({ Report: result0 })); + expect(() => new CairoTypeCustomEnum(result0, enumAbi, strategies)).toThrow( + new Error( + '"variant" parameter is mandatory when creating a new Cairo custom enum from a CairoResult.' + ) + ); + }); + + test('customEnumCairoType: enum of a struct', () => { + const struct0: Point = { x: 4, y: 5 }; + const myEnum0 = new CairoTypeCustomEnum(struct0, enumAbi, strategies, 1); + const myTypeStruct0 = new CairoStruct(struct0, pointAbi, strategies); + const myEnum1 = new CairoTypeCustomEnum(myEnum0, enumAbi, strategies); + const myEnum2 = new CairoTypeCustomEnum(myTypeStruct0, enumAbi, strategies, 1); + expect(myEnum1.toApiRequest()).toEqual(['1', '4', '5']); + expect(myEnum1.decompose(strategies)).toEqual( + new CairoCustomEnum({ LocationError: { x: 4n, y: 5n } }) + ); + expect(myEnum2.toApiRequest()).toEqual(['1', '4', '5']); + expect(myEnum2.decompose(strategies)).toEqual( + new CairoCustomEnum({ LocationError: { x: 4n, y: 5n } }) + ); + }); + + test('customEnumCairoType: nested enums', () => { + const enum0 = new CairoCustomEnum({ Success: cairo.tuple(10, 20) }); + const enum1 = new CairoCustomEnum({ Status: enum0 }); + const myEnum = new CairoTypeCustomEnum(enum1, enumAbi, strategies); + expect(myEnum.toApiRequest()).toEqual(['2', '0', '10', '20']); + const empty = { + Damage: undefined, + Empty: undefined, + ErrorList: undefined, + LocationError: undefined, + Parents: undefined, + Report: undefined, + Success: undefined, + TwoErrors: undefined, + }; + const empty2 = { Error: undefined, NoAnswer: undefined }; + const enRes2 = { Success: cairo.tuple(10n, 20n) }; + const res2 = new CairoCustomEnum({ ...empty2, ...enRes2 }); + const enRes = { Status: res2 }; + expect(myEnum.decompose(strategies)).toEqual(new CairoCustomEnum({ ...empty, ...enRes })); }); }); - describe('isErr', () => { - test('should return true if "Err" value is set', () => { - const cairoResult = new CairoResult(1, 'result_content'); - expect(cairoResult.isErr()).toEqual(true); + describe('static methods', () => { + test('is', () => { + expect(CairoTypeCustomEnum.is(200, 'enum::MyEnum', 0)).toBe(true); + }); + + test('isAbiType', () => { + expect(CairoTypeCustomEnum.isAbiType('enum::MyEnum')).toBe(true); + expect(CairoTypeCustomEnum.isAbiType('felt')).toBe(false); + }); + + test('validate', () => { + expect(() => CairoTypeCustomEnum.validate(200, 'enum::MyEnum', 0)).not.toThrow(); + expect(() => CairoTypeCustomEnum.validate(200, 'MyEnum', 0)).toThrow( + new Error('The type MyEnum is not a Cairo Enum. Needs impl::name.') + ); + }); + + test('getVariantTypes', () => { + expect(CairoTypeCustomEnum.extractEnumMembersNames(enumAbi)).toEqual([ + 'Success', + 'LocationError', + 'Status', + 'TwoErrors', + 'ErrorList', + 'Parents', + 'Damage', + 'Report', + 'Empty', + ]); + }); + }); + + describe('copy constructor behavior', () => { + test('should copy properties when constructed from another Cairo Result', () => { + const fakeAbi = abi.find((item) => item.name === 'enums::StatusEnum') as AbiEnum; + const original = new CairoTypeCustomEnum(10, enumAbi, strategies, 0); + + const copy = new CairoTypeCustomEnum(original, fakeAbi, (strategies as ParsingStrategy[])[0]); + expect(copy.content).toBe(original.content); + expect(copy.enumVariant).toBe(original.enumVariant); + expect(copy.abiEnum).toEqual(original.abiEnum); + }); + }); + + describe('encoding without Abi', () => { + test('number', () => { + expect(CallData.compile([new CairoTypeCustomEnum(7, enumAbi, strategies, 0)])).toEqual([ + '0', + '7', + ]); + + expect( + CallData.compile({ + input: new CairoTypeCustomEnum(7, enumAbi, strategies, CairoResultVariant.Ok), + }) + ).toEqual(['0', '7']); }); }); }); diff --git a/__tests__/utils/calldata/enum/CairoTypeOption.test.ts b/__tests__/utils/calldata/enum/CairoTypeOption.test.ts index 33162bda5..836ff6525 100644 --- a/__tests__/utils/calldata/enum/CairoTypeOption.test.ts +++ b/__tests__/utils/calldata/enum/CairoTypeOption.test.ts @@ -13,6 +13,9 @@ import { type AbiStruct, type ParsingStrategy, CairoStruct, + type AbiEnum, + CairoTypeCustomEnum, + CairoCustomEnum, } from '../../../../src'; import { contracts } from '../../../config/fixtures'; @@ -230,6 +233,54 @@ describe('CairoTypeOption', () => { ); }); + test('optionCairoType: option of an enum', () => { + const abiEnum: AbiEnum = contracts.TestCairoType.sierra.abi.find( + (item) => item.name === 'enums::MyEnum' + ); + const myCallData = new CallData(contracts.TestCairoType.sierra.abi); + const strategies = myCallData.parser.parsingStrategies as ParsingStrategy[]; + const myEnum0 = new CairoCustomEnum({ Success: 5 }); + const myTypeEnum0 = new CairoTypeCustomEnum(myEnum0, abiEnum, strategies); + const myOption0 = new CairoTypeOption( + myEnum0, + 'core::option::Option::', + strategies, + CairoOptionVariant.Some + ); + const myOption1 = new CairoTypeOption( + myTypeEnum0, + 'core::option::Option::', + strategies, + CairoOptionVariant.Some + ); + expect(myOption0.toApiRequest()).toEqual(['0', '0', '5']); + const empty = { + Damage: undefined, + Empty: undefined, + ErrorList: undefined, + LocationError: undefined, + Parents: undefined, + Report: undefined, + Status: undefined, + Success: undefined, + TwoErrors: undefined, + }; + const enRes = { Success: 5n }; + expect(myOption0.decompose(strategies)).toEqual( + new CairoOption( + CairoOptionVariant.Some, + new CairoCustomEnum({ ...empty, ...enRes }) + ) + ); + expect(myOption1.toApiRequest()).toEqual(['0', '0', '5']); + expect(myOption1.decompose(strategies)).toEqual( + new CairoOption( + CairoOptionVariant.Some, + new CairoCustomEnum({ ...empty, ...enRes }) + ) + ); + }); + test('optionCairoType: nested options', () => { const option0 = new CairoOption(CairoOptionVariant.Some, 5n); const option1 = new CairoOption>(CairoOptionVariant.Some, option0); diff --git a/__tests__/utils/calldata/enum/CairoTypeResult.test.ts b/__tests__/utils/calldata/enum/CairoTypeResult.test.ts index e966a6779..c7fd80464 100644 --- a/__tests__/utils/calldata/enum/CairoTypeResult.test.ts +++ b/__tests__/utils/calldata/enum/CairoTypeResult.test.ts @@ -16,6 +16,9 @@ import { type ParsingStrategy, CairoStruct, type AbiStruct, + CairoCustomEnum, + CairoTypeCustomEnum, + type AbiEnum, } from '../../../../src'; import { contracts } from '../../../config/fixtures'; @@ -265,6 +268,48 @@ describe('CairoTypeResult', () => { ); }); + test('resultCairoType: result of an enum', () => { + const abiEnum: AbiEnum = contracts.TestCairoType.sierra.abi.find( + (item) => item.name === 'enums::MyEnum' + ); + const myCallData = new CallData(contracts.TestCairoType.sierra.abi); + const strategies = myCallData.parser.parsingStrategies as ParsingStrategy[]; + const enum0 = new CairoCustomEnum({ Success: 5n }); + const myTypeEnum = new CairoTypeCustomEnum(enum0, abiEnum, strategies); + const myResult0 = new CairoTypeResult( + enum0, + 'core::result::Result::', + strategies, + CairoResultVariant.Err + ); + const myResult1 = new CairoTypeResult( + myTypeEnum, + 'core::result::Result::', + strategies, + CairoResultVariant.Err + ); + expect(myResult0.toApiRequest()).toEqual(['1', '0', '5']); + expect(myResult0.decompose(strategies)).toEqual( + new CairoResult(CairoResultVariant.Err, enum0) + ); + expect(myResult1.toApiRequest()).toEqual(['1', '0', '5']); + expect(myResult1.decompose(strategies)).toEqual( + new CairoResult(CairoResultVariant.Err, enum0) + ); + expect( + () => + new CairoTypeResult( + enum0, + 'core::result::Result::>', + hdParsingStrategy + ) + ).toThrow( + new Error( + '"variant" parameter is mandatory when creating a new Cairo Result from a Cairo Enum or raw data.' + ) + ); + }); + test('resultCairoType: result of an option', () => { const option0 = new CairoOption(CairoOptionVariant.Some, 5n); const myTypeOption = new CairoTypeOption( diff --git a/__tests__/utils/calldata/validate.test.ts b/__tests__/utils/calldata/validate.test.ts index 49c75a2fb..e5c4d6b96 100644 --- a/__tests__/utils/calldata/validate.test.ts +++ b/__tests__/utils/calldata/validate.test.ts @@ -409,7 +409,7 @@ describe('validateFields', () => { }); test('should throw an error for EthAddress struct if type is not a BigNumberish', () => { - const error = new Error('EthAddress type is waiting a BigNumberish. Got "[object Object]"'); + const error = new Error('Invalid input: objects are not supported for EthAddress'); expect(() => { const abiStructs = { @@ -421,9 +421,7 @@ describe('validateFields', () => { }); test('should throw an error for EthAddress struct if it is not in range', () => { - const error = new Error( - `Validate: arg test cairo typed ${ETH_ADDRESS} should be in range [0, 2^160-1]` - ); + const error = new Error(`Validate: EthAddress arg should be in range [0, 2^160-1]`); expect(() => { const abiStructs = { @@ -552,7 +550,7 @@ describe('validateFields', () => { }); test('should throw an error if type is not authorized', () => { - const error = new Error('Validate: test type is not authorized for NonZero type.'); + const error = new Error('Validate: core::bool type is not authorized for NonZero type.'); expect(() => validateFields( @@ -591,7 +589,7 @@ describe('validateFields', () => { }); test('should throw an error if value 0 iz provided for any uint type', () => { - const error = new Error('Validate: value 0 is not authorized in NonZero uint type.'); + const error = new Error('Validate: value 0 is not authorized in NonZero uint8 type.'); expect(() => validateFields( diff --git a/src/utils/cairoDataTypes/array.ts b/src/utils/cairoDataTypes/array.ts index 5c5d0f41c..2b615fca7 100644 --- a/src/utils/cairoDataTypes/array.ts +++ b/src/utils/cairoDataTypes/array.ts @@ -29,7 +29,7 @@ import type { AllowArray } from '../../types'; * * // Simple dynamic array * const simple = new CairoArray([1, 2, 3], 'core::array::Array::', hdParsingStrategy); - * console.log(simple.toApiRequest()); // ['0x3', '0x1', '0x2', '0x3'] (length first) + * console.log(simple.toApiRequest()); // ['3', '1', '2', '3'] (length first) * console.log(simple.decompose(hdParsingStrategy)); // [1n, 2n, 3n] * * // Nested dynamic arrays @@ -308,21 +308,21 @@ export class CairoArray extends CairoType { } /** - * Serialize the Cairo dynamic array into hex strings for Starknet API requests. + * Serialize the Cairo dynamic array into decimal strings for Starknet API requests. * * Converts the array into a length-prefixed format: [length, element1, element2, ...] * by calling toApiRequest() on each element and flattening the results. This follows * the Cairo ABI standard for dynamic arrays. * - * @returns Array of hex strings ready for API requests (length-prefixed) + * @returns Array of decimal strings ready for API requests (length-prefixed) * @example * ```typescript * const dynArray = new CairoArray([1, 2, 3], "core::array::Array::", strategy); - * const result = dynArray.toApiRequest(); // ['0x3', '0x1', '0x2', '0x3'] + * const result = dynArray.toApiRequest(); // ['3', '1', '2', '3'] * * // Nested arrays include nested length prefixes * const nested = new CairoArray([[1, 2], [3]], "core::array::Array::>", strategy); - * const flatResult = nested.toApiRequest(); // ['0x2', '0x2', '0x1', '0x2', '0x1', '0x3'] + * const flatResult = nested.toApiRequest(); // ['2', '2', '1', '2', '1', '3'] * // ^^^^ ^^^^ --------- ^^^^ -------- * // outer inner [1,2] inner [3] * // length length length diff --git a/src/utils/cairoDataTypes/cairoStruct.ts b/src/utils/cairoDataTypes/cairoStruct.ts index 8ba8e59aa..9cd47d7a0 100644 --- a/src/utils/cairoDataTypes/cairoStruct.ts +++ b/src/utils/cairoDataTypes/cairoStruct.ts @@ -263,12 +263,12 @@ export class CairoStruct extends CairoType { } /** - * Serialize the CairoStruct into hex strings for Starknet API requests. + * Serialize the CairoStruct into decimal strings for Starknet API requests. * @returns {string[]} Array of hex strings ready for API requests * ```typescript * // for a struct {x:1, y:2} * const result = myStruct.toApiRequest(); - * // result = ['0x1', '0x2'] + * // result = ['1', '2'] * ``` */ toApiRequest(): string[] { diff --git a/src/utils/cairoDataTypes/cairoTypeCustomEnum.ts b/src/utils/cairoDataTypes/cairoTypeCustomEnum.ts index d0c1c2549..d739e3406 100644 --- a/src/utils/cairoDataTypes/cairoTypeCustomEnum.ts +++ b/src/utils/cairoDataTypes/cairoTypeCustomEnum.ts @@ -62,7 +62,7 @@ export class CairoTypeCustomEnum extends CairoType { * const abiMyEnum = myTestContract.abi.find((data: AbiEntry) => data.name == "enums::MyEnum") as AbiEnum; * const myEnum = new CairoCustomEnum({ valid: 15n }); * const myTypeEnum1 = new CairoTypeCustomEnum(myEnum, abiMyEnum, strategies); - * console.log(myTypeEnum1.toApiRequest()); // ['0x01','0xf'] + * console.log(myTypeEnum1.toApiRequest()); // ['1','15'] * console.log(myTypeEnum1.decompose(strategies)); // CairoCustomEnum instance with content 15n and `valid` variant. * * // From API response: @@ -112,7 +112,7 @@ export class CairoTypeCustomEnum extends CairoType { this.abiEnum = content.abiEnum; return; } - CairoTypeCustomEnum.validate(content, abiEnum, variant); + CairoTypeCustomEnum.validate(content, abiEnum.name, variant); // "content" is a CairoType if (content && typeof content === 'object' && content !== null && 'toApiRequest' in content) { assert( @@ -186,6 +186,11 @@ export class CairoTypeCustomEnum extends CairoType { !isUndefined(variant), '"variant" parameter is mandatory when creating a new Cairo custom enum from a Cairo Enum or raw data.' ); + const numberVariant = Number(variant); + assert( + numberVariant < abiEnum.variants.length && numberVariant >= 0, + `The custom enum ${abiEnum.name} variant must be in the range 0..${abiEnum.variants.length - 1}. You requested variant #${numberVariant}` + ); this.enumVariant = variant; const elementType = CairoTypeCustomEnum.getVariantTypes(abiEnum)[variant]; const strategyConstructorNum = strategies.findIndex( @@ -262,23 +267,16 @@ export class CairoTypeCustomEnum extends CairoType { /** * Validate input data for CairoTypeCustomEnum creation. - * @param {unknown} input - Input data to validate - * @param {AbiEnum} abiEnum - The Abi definition of the enum - * @param {VariantType} variant - optional - The variant of the enum (0, "1", 2, ...) + * @param {unknown} _input - Input data to validate + * @param {string} type - The Abi definition of the enum + * @param {VariantType} _variant - The variant of the enum (0, "1", 2, ...) * @throws Error if input is invalid */ - static validate(_input: unknown, abiEnum: AbiEnum, variant: VariantType | undefined): void { + static validate(_input: unknown, type: string, _variant: VariantType | undefined): void { assert( - CairoTypeCustomEnum.isAbiType(abiEnum.name), - `The type ${abiEnum.name} is not a Cairo Enum. Needs impl::name.` + CairoTypeCustomEnum.isAbiType(type), + `The type ${type} is not a Cairo Enum. Needs impl::name.` ); - if (!isUndefined(variant)) { - const numberVariant = Number(variant); - assert( - numberVariant < abiEnum.variants.length && numberVariant >= 0, - `The custom enum ${abiEnum.name} variant must be in the range 0..${abiEnum.variants.length - 1}. You requested variant #${numberVariant}` - ); - } } /** @@ -290,7 +288,7 @@ export class CairoTypeCustomEnum extends CairoType { */ static is(input: unknown, type: string, variant: VariantType): boolean { try { - CairoTypeResult.validate(input, type, variant); + CairoTypeCustomEnum.validate(input, type, variant); return true; } catch { return false; @@ -356,13 +354,13 @@ export class CairoTypeCustomEnum extends CairoType { } /** - * Serialize the Cairo custom enum into hex strings for Starknet API requests. + * Serialize the Cairo custom enum into decimal strings for Starknet API requests. * * Converts all CairoType elements in this Cairo custom enum into their hex string representation * by calling `toApiRequest()`. This is used when * sending data to the Starknet network. * - * @returns {string[]} Array of hex strings ready for API requests + * @returns {string[]} Array of decimal strings ready for API requests * @example * ```typescript * const strategies = myTestContract.callData.parser.parsingStrategies; @@ -370,7 +368,7 @@ export class CairoTypeCustomEnum extends CairoType { * const myEnum = new CairoCustomEnum({ valid: 15n }); * const myTypeEnum1 = new CairoTypeCustomEnum(myEnum, abiMyEnum, strategies); * const encoded = myTypeEnum1.toApiRequest()); - * // encoded = ['0x01','0xf'] + * // encoded = ['1','15'] * ``` */ public toApiRequest(): string[] { diff --git a/src/utils/cairoDataTypes/cairoTypeOption.ts b/src/utils/cairoDataTypes/cairoTypeOption.ts index 7ffaae741..c7e61039a 100644 --- a/src/utils/cairoDataTypes/cairoTypeOption.ts +++ b/src/utils/cairoDataTypes/cairoTypeOption.ts @@ -51,7 +51,7 @@ export class CairoTypeOption extends CairoType { * import { CairoTypeOption, hdParsingStrategy, CairoOptionVariant } from 'starknet'; * // Simple Option with Some variant * const myOption1 = new CairoTypeOption(7, "core::option::Option::", hdParsingStrategy, CairoOptionVariant.Some); - * console.log(myOption1.toApiRequest()); // ['0x00', '0x7'] + * console.log(myOption1.toApiRequest()); // ['0', '7'] * console.log(myOption1.decompose(hdParsingStrategy)); // CairoOption instance with content 7n and Some variant. * // Simple Option with None variant * const myOption2 = new CairoTypeOption(undefined, "core::option::Option::", hdParsingStrategy, CairoOptionVariant.None); @@ -314,17 +314,17 @@ export class CairoTypeOption extends CairoType { } /** - * Serialize the Cairo option into hex strings for Starknet API requests. + * Serialize the Cairo option into decimal strings for Starknet API requests. * * Converts all CairoType elements in this Cairo option into their hex string representation * by calling toApiRequest(). This is used when * sending data to the Starknet network. * - * @returns {string[]} Array of hex strings ready for API requests + * @returns {string[]} Array of decimal strings ready for API requests * @example * ```typescript * const myOption = new CairoTypeOption(8, "core::option::Option::", strategy, CairoOptionVariant.Some); - * const result = myOption.toApiRequest(); // ['0x0', '0x8'] + * const result = myOption.toApiRequest(); // ['0', '8'] * ``` */ public toApiRequest(): string[] { diff --git a/src/utils/cairoDataTypes/cairoTypeResult.ts b/src/utils/cairoDataTypes/cairoTypeResult.ts index 75372ecc6..6b08b033c 100644 --- a/src/utils/cairoDataTypes/cairoTypeResult.ts +++ b/src/utils/cairoDataTypes/cairoTypeResult.ts @@ -51,7 +51,7 @@ export class CairoTypeResult extends CairoType { * import { CairoTypeResult, hdParsingStrategy, CairoResultVariant } from 'starknet'; * // Simple Result with Ok variant * const myResult1 = new CairoTypeResult(7, "core::result::Result::", hdParsingStrategy, CairoResultVariant.Ok); - * console.log(myResult1.toApiRequest()); // ['0x01','0x7b'] + * console.log(myResult1.toApiRequest()); // ['1','7'] * console.log(myResult1.decompose(hdParsingStrategy)); // CairoResult instance with content 7n and Ok variant. * // Simple Result with Err variant * const myResult2 = new CairoTypeResult(11, "core::result::Result::", hdParsingStrategy, CairoResultVariant.Err); @@ -300,17 +300,17 @@ export class CairoTypeResult extends CairoType { } /** - * Serialize the Cairo Result into hex strings for Starknet API requests. + * Serialize the Cairo Result into decimal strings for Starknet API requests. * * Converts all CairoType elements in this Cairo Result into their hex string representation * by calling toApiRequest(). This is used when * sending data to the Starknet network. * - * @returns {string[]} Array of hex strings ready for API requests + * @returns {string[]} Array of decimal strings ready for API requests * @example * ```typescript * const myResult = new CairoTypeResult(8, "core::result::Result::", strategy, CairoResultVariant.Err); - * const result = myResult.toApiRequest(); // ['0x1', '0x8'] + * const result = myResult.toApiRequest(); // ['1', '8'] * ``` */ public toApiRequest(): string[] { diff --git a/src/utils/cairoDataTypes/ethAddress.ts b/src/utils/cairoDataTypes/ethAddress.ts index 96161b54d..8ee7cd15f 100644 --- a/src/utils/cairoDataTypes/ethAddress.ts +++ b/src/utils/cairoDataTypes/ethAddress.ts @@ -35,7 +35,10 @@ export class CairoEthAddress { static validate(data: BigNumberish | boolean | unknown): void { assert(data !== null && data !== undefined, 'Invalid input: null or undefined'); - assert(!isObject(data) && !Array.isArray(data), 'Invalid input: objects are not supported'); + assert( + !isObject(data) && !Array.isArray(data), + 'Invalid input: objects are not supported for EthAddress' + ); assert( !isNumber(data) || Number.isInteger(data), 'Invalid input: decimal numbers are not supported, only integers' @@ -45,7 +48,7 @@ export class CairoEthAddress { assert( // from : https://github.com/starkware-libs/starknet-specs/blob/29bab650be6b1847c92d4461d4c33008b5e50b1a/api/starknet_api_openrpc.json#L1259 value >= RANGE_ETH_ADDRESS.min && value <= RANGE_ETH_ADDRESS.max, - 'Validate: arg should be in range [0, 2^160-1]' + 'Validate: EthAddress arg should be in range [0, 2^160-1]' ); } diff --git a/src/utils/cairoDataTypes/fixedArray.ts b/src/utils/cairoDataTypes/fixedArray.ts index 4831a1284..6f9d57872 100644 --- a/src/utils/cairoDataTypes/fixedArray.ts +++ b/src/utils/cairoDataTypes/fixedArray.ts @@ -26,7 +26,7 @@ import type { AllowArray } from '../../types'; * * // Simple fixed array * const simple = new CairoFixedArray([1, 2, 3], '[core::integer::u8; 3]', hdParsingStrategy); - * console.log(simple.toApiRequest()); // ['0x1', '0x2', '0x3'] + * console.log(simple.toApiRequest()); // ['1', '2', '3'] * console.log(simple.decompose(hdParsingStrategy)); // [1n, 2n, 3n] * * // Nested fixed arrays @@ -339,21 +339,21 @@ export class CairoFixedArray extends CairoType { } /** - * Serialize the Cairo fixed array into hex strings for Starknet API requests. + * Serialize the Cairo fixed array into decimal strings for Starknet API requests. * * Converts all CairoType elements in this fixed array into their hex string representation * by calling toApiRequest() on each element and flattening the results. This is used when * sending data to the Starknet network. * - * @returns Array of hex strings ready for API requests + * @returns Array of decimal strings ready for API requests * @example * ```typescript * const fArray = new CairoFixedArray([1, 2, 3], "[core::integer::u8; 3]", strategy); - * const result = fArray.toApiRequest(); // ['0x1', '0x2', '0x3'] + * const result = fArray.toApiRequest(); // ['1', '2', '3'] * * // Nested arrays are flattened * const nested = new CairoFixedArray([[1, 2], [3, 4]], "[[core::integer::u8; 2]; 2]", strategy); - * const flatResult = nested.toApiRequest(); // ['0x1', '0x2', '0x3', '0x4'] + * const flatResult = nested.toApiRequest(); // ['1', '2', '3', '4'] * ``` */ public toApiRequest(): string[] { diff --git a/src/utils/cairoDataTypes/index.ts b/src/utils/cairoDataTypes/index.ts index bfedd1722..96c9aae6a 100644 --- a/src/utils/cairoDataTypes/index.ts +++ b/src/utils/cairoDataTypes/index.ts @@ -25,3 +25,4 @@ export * from './cairoStruct'; export * from './cairoTypeCustomEnum'; export * from './bool'; export * from './ethAddress'; +export * from './nonZero'; diff --git a/src/utils/cairoDataTypes/nonZero.ts b/src/utils/cairoDataTypes/nonZero.ts new file mode 100644 index 000000000..3a617c187 --- /dev/null +++ b/src/utils/cairoDataTypes/nonZero.ts @@ -0,0 +1,315 @@ +import assert from '../assert'; +import { addCompiledFlag, isInstanceOf } from '../helpers'; +import { getNext } from '../num'; +import { getArrayType, isTypeFelt, isTypeNonZero, isTypeUint } from '../calldata/cairo'; +import { type ParsingStrategy } from '../calldata/parser/parsingStrategy.type'; +import { CairoType } from './cairoType.interface'; +import { type AllowArray } from '../../types'; +import { CairoUint512 } from './uint512'; +import { CairoUint8 } from './uint8'; +import { CairoUint16 } from './uint16'; +import { CairoUint32 } from './uint32'; +import { CairoUint64 } from './uint64'; +import { CairoUint96 } from './uint96'; +import { CairoUint128 } from './uint128'; +import { CairoUint256 } from './uint256'; +import { CairoFelt252 } from './felt'; + +/** + * Represents a Cairo Non Zero type. + * + * Internal usage class (users are using BigNumberish). + */ +export class CairoNonZero extends CairoType { + static dynamicSelector = 'CairoNonZero' as const; + + public readonly dynamicSelector = CairoNonZero.dynamicSelector; + + /** + * CairoType instance representing a Cairo dynamic non zero. + */ + public readonly content: CairoType; + + /** + * Cairo dynamic type. + */ + public readonly contentType: string; + + /** + * Create a CairoNonZero instance. + * + * @param {unknown} content - Input data (BigNumberish, Iterator\, CairoType) + * @param {string} type - Type string (e.g. core::zeroable::NonZero::\) + * @param {AllowArray} parsingStrategy - Parsing strategy for element type handling + * @example + * ```typescript + * const val1 = new CairoNonZero(3, 'core::zeroable::NonZero::', hdParsingStrategy); + * ``` + */ + constructor(content: unknown, type: string, parsingStrategy: AllowArray) { + super(); + this.contentType = type; + const strategies = Array.isArray(parsingStrategy) ? parsingStrategy : [parsingStrategy]; + if (content && typeof content === 'object' && 'next' in content) { + // "content" is an iterator + const parsedContent: CairoType = CairoNonZero.parser( + content as Iterator, + type, + strategies + ); + this.content = parsedContent; + return; + } + if (content instanceof CairoNonZero) { + this.content = content.content; + this.contentType = content.contentType; + return; + } + CairoNonZero.validate(content, type); + const contentType = CairoNonZero.getNonZeroType(type); + + if (content && typeof content === 'object' && content !== null && 'toApiRequest' in content) { + // "content" is a CairoType + this.content = content as CairoType; + return; + } + // not an iterator, not an CairoType -> so is low level data (BigNumberish, array, object, Cairo Enums) + + const strategyConstructorNum = strategies.findIndex( + (strategy: ParsingStrategy) => strategy.constructors[contentType] + ); + if (strategyConstructorNum >= 0) { + const constructor = strategies[strategyConstructorNum].constructors[contentType]; + const cairoInstance = constructor(content, strategies, contentType); + this.validateValue(cairoInstance); + this.content = cairoInstance; + return; + } + const strategyDynamicNum = strategies.findIndex((strategy: ParsingStrategy) => { + const dynamicSelectors = Object.entries(strategy.dynamicSelectors); + return dynamicSelectors.find(([, selectorFn]) => selectorFn(contentType)); + }); + if (strategyDynamicNum >= 0) { + const dynamicSelectors = Object.entries(strategies[strategyDynamicNum].dynamicSelectors); + const matchingSelector = dynamicSelectors.find(([, selectorFn]) => selectorFn(contentType)); + const [selectorName] = matchingSelector as [string, (type: string) => boolean]; + const dynamicConstructor = strategies[strategyDynamicNum].constructors[selectorName]; + if (dynamicConstructor) { + const cairoInstance = dynamicConstructor(content, strategies, contentType); + this.validateValue(cairoInstance); + this.content = cairoInstance; + return; + } + } + throw new Error(`"${contentType}" is not a valid Cairo type`); + } + + /** + * Parse data from iterator into CairoType instances using the provided parsing strategy. + * + * @param {Iterator} responseIterator - Iterator over string data to parse + * @param {string} nonZeroType - The dynamic NonZero type (e.g., "core::zeroable::NonZero::\") + * @param {ParsingStrategy[]} parsingStrategies - The parsing strategy containing constructors and selectors + * @returns NonZero CairoType instance + * @private + */ + private static parser( + responseIterator: Iterator, + nonZeroType: string, + parsingStrategies: ParsingStrategy[] + ): CairoType { + const elementType = getArrayType(nonZeroType); // Extract T from core::zeroable::NonZero:: + + // First check direct constructors + const strategyConstructorNum = parsingStrategies.findIndex( + (strategy: ParsingStrategy) => strategy.constructors[elementType] + ); + if (strategyConstructorNum >= 0) { + const constructor = parsingStrategies[strategyConstructorNum].constructors[elementType]; + return constructor(responseIterator, parsingStrategies, elementType); + } + + // Check dynamic selectors (includes CairoFixedArray, future: tuples, structs, etc.) + const strategyDynamicNum = parsingStrategies.findIndex((strategy: ParsingStrategy) => { + const dynamicSelectors = Object.entries(strategy.dynamicSelectors); + return dynamicSelectors.find(([, selectorFn]) => selectorFn(elementType)); + }); + if (strategyDynamicNum >= 0) { + const dynamicSelectors = Object.entries( + parsingStrategies[strategyDynamicNum].dynamicSelectors + ); + const matchingSelector = dynamicSelectors.find(([, selectorFn]) => selectorFn(elementType)); + const [selectorName] = matchingSelector as [string, (type: string) => boolean]; + const dynamicConstructor = parsingStrategies[strategyDynamicNum].constructors[selectorName]; + if (dynamicConstructor) { + return dynamicConstructor(responseIterator, parsingStrategies, elementType); + } + } + // Unknown type - collect raw values, defer error + const rawValues = getNext(responseIterator); + return rawValues as unknown as CairoType; + } + + /** + * Retrieves the Non Zero element type from the given dynamic string. + * @param {string} type - The Cairo dynamic type. + * @returns {string} The element type. + * @example + * ```typescript + * const result = CairoNonZero.getNonZeroType("core::zeroable::NonZero::"); + * // result = "core::integer::u8" + * ``` + */ + static getNonZeroType = (type: string): string => { + return getArrayType(type); + }; + + /** + * Validate input data for Cairo Non Zero creation. + * @param input - Input data to validate + * @param type - The dynamic type (e.g., "core::zeroable::NonZero::\") + * @throws Error if input is invalid + * @example + * ```typescript + * CairoArray.validate(1, "core::zeroable::NonZero::"); // passes + * ``` + */ + static validate(input: unknown, type: string): void { + // Validate the type format first + assert( + CairoNonZero.isAbiType(type), + `The type ${type} is not a Cairo Non Zero. Needs core::zeroable::NonZero::.` + ); + // Telegram : https://t.me/sncorestars/11902/45433 + // Author : Ori Ziv (08/apr/2024) + // "NonZero is only supported for purely numeric types (u*, i* and felt252) and EcPoint." + // + // As EcPoint do not includes trait Serde, it can't be seen in an ABI. + // u512 is not compatible. + // core::zeroable::NonZero:: seems not to work in Cairo 2.6.3. + // so, are authorized here : u8, u16, u32, u64, u128, u256 and felt252. + const baseType = getArrayType(type); + assert( + (isTypeUint(baseType) && baseType !== CairoUint512.abiSelector) || isTypeFelt(baseType), + `Validate: ${baseType} type is not authorized for NonZero type.` + ); + } + + /** + * Validate that the CairoType instance has a non-zero value. + * @param {CairoType} cairoInstance - The CairoType instance to validate + * @throws Error if the value is zero or type is not authorized + * @private + */ + validateValue(cairoInstance: CairoType): void { + const nonZeroUints = [ + CairoUint8, + CairoUint16, + CairoUint32, + CairoUint64, + CairoUint96, + CairoUint128, + CairoUint256, + CairoFelt252, + ]; + if (isInstanceOf(cairoInstance, nonZeroUints)) { + assert( + (cairoInstance as CairoUint8).toBigInt() > 0n, // TODO: find a more elegant way to access to .toBigInt() property + 'ValidateValue: value 0 is not authorized in NonZero type.' + ); + return; + } + throw new Error(`ValidateValue: ${cairoInstance} is not authorized for NonZero type.`); + } + + /** + * Check if input data is valid for CairoNonZero creation. + * @param input - Input data to check + * @param type - The dynamic type (e.g. "core::zeroable::NonZero::\") + * @returns true if valid, false otherwise + * @example + * ```typescript + * const isValid1 = CairoArray.is(1, "core::zeroable::NonZero::"); // true + * ``` + */ + static is(input: unknown, type: string): boolean { + try { + CairoNonZero.validate(input, type); + return true; + } catch { + return false; + } + } + + /** + * Checks if the given string represents a valid Cairo dynamic Non Zero type format. + * + * A valid dynamic type must follow the pattern: `core::zeroable::NonZero::` + * where T is a restricted list of Cairo types. + * + * @param type - The type string to validate + * @returns `true` if the type is a valid dynamic format, `false` otherwise + * @example + * ```typescript + * CairoArray.isAbiType("core::zeroable::NonZero::"); // true + * ``` + */ + static isAbiType(type: string): boolean { + return isTypeNonZero(type); + } + + /** + * Serialize the Cairo dynamic NonZero into decimal string for Starknet API requests. + * + * @returns {string[]} Array of decimal strings ready for API requests + * @example + * ```typescript + * const dynArray = new CairoNonZero(2, "core::zeroable::NonZero::", strategy); + * const result = dynArray.toApiRequest(); // ['2'] + * ``` + */ + public toApiRequest(): string[] { + // Start with array length + const result = this.content.toApiRequest(); + return addCompiledFlag(result); + } + + /** + * Decompose the dynamic NonZero into final parsed value. + * + * @param {AllowArray} strategyDecompose - Parsing strategy for response parsing + * @returns A value (BigInt) + * @example + * ```typescript + * const dynArray = new CairoNonZero(2, 'core::zeroable::NonZero::', hdParsingStrategy); + * const parsed = dynArray.decompose(hdParsingStrategy); // 2n + * ``` + */ + public decompose(strategyDecompose: AllowArray): any[] { + // Use response parsers to get final parsed values (for API response parsing) + const strategies = Array.isArray(strategyDecompose) ? strategyDecompose : [strategyDecompose]; + const elementType = getArrayType(this.contentType); + // For raw string values (unsupported types), throw error + if (typeof this.content === 'string') { + throw new Error(`No parser found for element type: ${elementType} in parsing strategy`); + } + let parserName: string = elementType; + if (this.content instanceof CairoType) { + if ('dynamicSelector' in this.content) { + // dynamic recursive CairoType + parserName = (this.content as any).dynamicSelector; + } + } + const strategyDecomposeNum = strategies.findIndex( + (strategy: ParsingStrategy) => strategy.response[parserName] + ); + const responseParser = strategies[strategyDecomposeNum].response[parserName]; + if (responseParser) { + return responseParser(this.content, strategies); + } + + throw new Error( + `No response parser found for element type: ${elementType} in parsing strategy` + ); + } +} diff --git a/src/utils/cairoDataTypes/tuple.ts b/src/utils/cairoDataTypes/tuple.ts index 571649879..081a4a436 100644 --- a/src/utils/cairoDataTypes/tuple.ts +++ b/src/utils/cairoDataTypes/tuple.ts @@ -28,7 +28,7 @@ import type { AllowArray } from '../../types'; * * // Simple tuple * const simple = new CairoTuple([1, 2], '(core::integer::u8, core::integer::u32)', hdParsingStrategy); - * console.log(simple.toApiRequest()); // ['0x1', '0x2'] (no length prefix) + * console.log(simple.toApiRequest()); // ['1', '2'] (no length prefix) * console.log(simple.decompose(hdParsingStrategy)); // [1n, 2n] * * // Named tuple @@ -564,17 +564,17 @@ export class CairoTuple extends CairoType { } /** - * Serialize the Cairo tuple into hex strings for Starknet API requests. + * Serialize the Cairo tuple into decimal strings for Starknet API requests. * * Converts the tuple into a flat array of hex strings WITHOUT a length prefix. * This follows the Cairo ABI standard for tuples which are serialized as * consecutive elements without length information. * - * @returns {string[]} Array of hex strings ready for API requests (no length prefix) + * @returns {string[]} Array of decimal strings ready for API requests (no length prefix) * @example * ```typescript * const tuple = new CairoTuple([1, 2], "(core::integer::u8, core::integer::u32)", strategy); - * const result = tuple.toApiRequest(); // ['0x1', '0x2'] + * const result = tuple.toApiRequest(); // '1', '2'] * ``` */ public toApiRequest(): string[] { diff --git a/src/utils/calldata/index.ts b/src/utils/calldata/index.ts index c4bbb2db4..d1a402901 100644 --- a/src/utils/calldata/index.ts +++ b/src/utils/calldata/index.ts @@ -45,6 +45,8 @@ import { CairoStruct } from '../cairoDataTypes/cairoStruct'; import { getAbiEnum, getAbiStruct } from './calldataUtils'; import { CairoTypeCustomEnum } from '../cairoDataTypes/cairoTypeCustomEnum'; import { isInstanceOf as isInstanceOfClasses } from '../helpers'; +import { CairoNonZero } from '../cairoDataTypes/nonZero'; +import { CairoEthAddress } from '../cairoDataTypes'; export * as cairo from './cairo'; export { parseCalldataField } from './requestParser'; @@ -240,6 +242,8 @@ export class CallData { CairoTuple, CairoArray, CairoFixedArray, + CairoNonZero, + CairoEthAddress, ]) ) { const apiRequest = value.toApiRequest(); diff --git a/src/utils/calldata/parser/parsingStrategy.ts b/src/utils/calldata/parser/parsingStrategy.ts index 6a69ae448..4bc9bed7b 100644 --- a/src/utils/calldata/parser/parsingStrategy.ts +++ b/src/utils/calldata/parser/parsingStrategy.ts @@ -21,13 +21,14 @@ import { CairoTuple } from '../../cairoDataTypes/tuple'; import { CairoSecp256k1Point } from '../../cairoDataTypes/secp256k1Point'; import { CairoType } from '../../cairoDataTypes/cairoType.interface'; import assert from '../../assert'; -import { isTypeArray, isTypeOption, isTypeResult, isTypeTuple } from '../cairo'; +import { isTypeArray, isTypeNonZero, isTypeOption, isTypeResult, isTypeTuple } from '../cairo'; import { CairoTypeOption } from '../../cairoDataTypes/cairoTypeOption'; import { isUndefined } from '../../typed'; import { CairoTypeResult } from '../../cairoDataTypes/cairoTypeResult'; import type { ParsingStrategy, VariantType } from './parsingStrategy.type'; import { CairoBool } from '../../cairoDataTypes'; import { CairoEthAddress } from '../../cairoDataTypes/ethAddress'; +import { CairoNonZero } from '../../cairoDataTypes/nonZero'; /** * More robust parsing strategy @@ -171,7 +172,7 @@ export const hdParsingStrategy: ParsingStrategy = { } return new CairoSecp256k1Point(input); }, - CairoFixedArray: ( + [CairoFixedArray.dynamicSelector]: ( input: Iterator | unknown, strategy: AllowArray, type?: string @@ -189,7 +190,7 @@ export const hdParsingStrategy: ParsingStrategy = { // Always use constructor - it handles both iterator and user input internally return new CairoArray(input, type, strategy); }, - CairoTuple: ( + [CairoTuple.dynamicSelector]: ( input: Iterator | unknown, strategy: AllowArray, type?: string @@ -198,7 +199,7 @@ export const hdParsingStrategy: ParsingStrategy = { // Always use constructor - it handles both iterator and user input internally return new CairoTuple(input, type, strategy); }, - CairoTypeOption: ( + [CairoTypeOption.dynamicSelector]: ( input: Iterator | unknown, strategy: AllowArray, type?: string, @@ -208,7 +209,7 @@ export const hdParsingStrategy: ParsingStrategy = { const variantNumber = isUndefined(variant) ? undefined : Number(variant); return new CairoTypeOption(input, type, strategy, variantNumber); }, - CairoTypeResult: ( + [CairoTypeResult.dynamicSelector]: ( input: Iterator | unknown, strategy: AllowArray, type?: string, @@ -218,6 +219,14 @@ export const hdParsingStrategy: ParsingStrategy = { const variantNumber = isUndefined(variant) ? undefined : Number(variant); return new CairoTypeResult(input, type, strategy, variantNumber); }, + [CairoNonZero.dynamicSelector]: ( + input: Iterator | unknown, + strategy: AllowArray, + type?: string + ) => { + assert(!!type, 'CairoNonZero constructor requires "type" parameter.'); + return new CairoNonZero(input, type, strategy); + }, }, dynamicSelectors: { [CairoFixedArray.dynamicSelector]: (type: string) => { @@ -235,6 +244,9 @@ export const hdParsingStrategy: ParsingStrategy = { [CairoTypeResult.dynamicSelector]: (type: string) => { return isTypeResult(type); }, + [CairoNonZero.dynamicSelector]: (type: string) => { + return isTypeNonZero(type); + }, // TODO: add more dynamic selectors here }, response: { @@ -265,15 +277,23 @@ export const hdParsingStrategy: ParsingStrategy = { [CairoInt128.abiSelector]: (instance: CairoType) => (instance as CairoInt128).toBigInt(), [CairoSecp256k1Point.abiSelector]: (instance: CairoType) => (instance as CairoSecp256k1Point).toBigInt(), - CairoFixedArray: (instance: CairoType, strategy: AllowArray) => - (instance as CairoFixedArray).decompose(strategy), + [CairoFixedArray.dynamicSelector]: ( + instance: CairoType, + strategy: AllowArray + ) => (instance as CairoFixedArray).decompose(strategy), [CairoArray.dynamicSelector]: (instance: CairoType, strategy: AllowArray) => (instance as CairoArray).decompose(strategy), - CairoTuple: (instance: CairoType, strategy: AllowArray) => + [CairoTuple.dynamicSelector]: (instance: CairoType, strategy: AllowArray) => (instance as CairoTuple).decompose(strategy), - CairoTypeOption: (instance: CairoType, strategy: AllowArray) => - (instance as CairoTypeOption).decompose(strategy), - CairoTypeResult: (instance: CairoType, strategy: AllowArray) => - (instance as CairoTypeResult).decompose(strategy), + [CairoTypeOption.dynamicSelector]: ( + instance: CairoType, + strategy: AllowArray + ) => (instance as CairoTypeOption).decompose(strategy), + [CairoTypeResult.dynamicSelector]: ( + instance: CairoType, + strategy: AllowArray + ) => (instance as CairoTypeResult).decompose(strategy), + [CairoNonZero.dynamicSelector]: (instance: CairoType, strategy: AllowArray) => + (instance as CairoNonZero).decompose(strategy), }, } as const; diff --git a/src/utils/calldata/propertyOrder.ts b/src/utils/calldata/propertyOrder.ts index 82dc70fe5..ea43ad058 100644 --- a/src/utils/calldata/propertyOrder.ts +++ b/src/utils/calldata/propertyOrder.ts @@ -243,7 +243,7 @@ export default function orderPropsByAbi( // none(()) return new CairoTypeOption( undefined, - abiObject.type, + abiObject.name, parseStrategy, CairoOptionVariant.None ); diff --git a/src/utils/calldata/requestParser.ts b/src/utils/calldata/requestParser.ts index 64c36d56c..2b0373d65 100644 --- a/src/utils/calldata/requestParser.ts +++ b/src/utils/calldata/requestParser.ts @@ -47,6 +47,7 @@ import { CairoTypeOption } from '../cairoDataTypes/cairoTypeOption'; import { CairoTypeResult } from '../cairoDataTypes/cairoTypeResult'; import { CairoStruct } from '../cairoDataTypes/cairoStruct'; import { CairoTypeCustomEnum } from '../cairoDataTypes/cairoTypeCustomEnum'; +import { CairoNonZero } from '../cairoDataTypes/nonZero'; // TODO: cleanup implementations to work with unknown, instead of blind casting with 'as' @@ -247,7 +248,8 @@ function parseCalldataValue({ } if (isTypeNonZero(type)) { - return parseBaseTypes({ type: getArrayType(type), val: element, parser }); + const nonZero = new CairoNonZero(element, type, parser.parsingStrategies); + return nonZero.toApiRequest(); } if (typeof element === 'object') { diff --git a/src/utils/calldata/responseParser.ts b/src/utils/calldata/responseParser.ts index 968adb4dc..1bf2b22cf 100644 --- a/src/utils/calldata/responseParser.ts +++ b/src/utils/calldata/responseParser.ts @@ -31,7 +31,6 @@ import { isCairo1Type, isLen, isTypeArray, - isTypeBool, isTypeEnum, isTypeEthAddress, isTypeNonZero, @@ -46,6 +45,7 @@ import type { CairoStruct } from '../cairoDataTypes/cairoStruct'; import { CairoTypeCustomEnum } from '../cairoDataTypes/cairoTypeCustomEnum'; import { CairoTypeOption } from '../cairoDataTypes/cairoTypeOption'; import { CairoTypeResult } from '../cairoDataTypes/cairoTypeResult'; +import { CairoBool } from '../cairoDataTypes'; /** * Parse base types @@ -56,9 +56,9 @@ import { CairoTypeResult } from '../cairoDataTypes/cairoTypeResult'; function parseBaseTypes(type: string, it: Iterator, parser: AbiParserInterface) { let temp; switch (true) { - case isTypeBool(type): - temp = it.next().value; - return Boolean(BigInt(temp)); + case CairoBool.isAbiType(type): + const bool = CairoBool.factoryFromApiResponse(it); + return bool.toBoolean(); case CairoUint256.isAbiType(type): return parser.getResponseParser(type)(it); case CairoUint512.isAbiType(type): diff --git a/src/utils/calldata/validate.ts b/src/utils/calldata/validate.ts index f604d75c9..9ae90adbf 100644 --- a/src/utils/calldata/validate.ts +++ b/src/utils/calldata/validate.ts @@ -33,7 +33,6 @@ import { isTypeEthAddress, isTypeFelt, isTypeLiteral, - isTypeNonZero, isTypeOption, isTypeResult, isTypeStruct, @@ -47,6 +46,7 @@ import { CairoStruct } from '../cairoDataTypes/cairoStruct'; import { CairoTypeCustomEnum } from '../cairoDataTypes/cairoTypeCustomEnum'; import { CairoBool } from '../cairoDataTypes'; import { CairoEthAddress } from '../cairoDataTypes/ethAddress'; +import { CairoNonZero } from '../cairoDataTypes/nonZero'; // TODO: separate validate is redundant as CairoTypes are validated during construction. // TODO: This validate should provide added valie method base validate poiniting to incorect value for method, opt. using color coding @@ -195,10 +195,7 @@ const validateStruct = (parameter: any, input: AbiEntry, structs: AbiStructs) => } if (isTypeEthAddress(input.type)) { - assert( - CairoEthAddress.is(parameter), - `EthAddress type is waiting a BigNumberish < (2 ** 160 - 1). Got "${parameter}"` - ); + CairoEthAddress.validate(parameter); return; } @@ -345,54 +342,6 @@ const validateArray = ( } }; -const validateNonZero = (parameter: any, input: AbiEntry) => { - // Telegram : https://t.me/sncorestars/11902/45433 - // Author : Ori Ziv (08/apr/2024) - // "NonZero is only supported for purely numeric types (u*, i* and felt252) and EcPoint." - // - // As EcPoint do not includes trait Serde, it can't be seen in an ABI. - // u512 is not compatible. - // i* are not currently handled by Starknet.js (and core::zeroable::NonZero:: seems not to work in Cairo 2.6.3). - // so, are authorized here : u8, u16, u32, u64, u128, u256 and felt252. - - const baseType = getArrayType(input.type); - - assert( - (isTypeUint(baseType) && baseType !== CairoUint512.abiSelector) || isTypeFelt(baseType), - `Validate: ${input.name} type is not authorized for NonZero type.` - ); - switch (true) { - case isTypeFelt(baseType): - validateFelt(parameter, input); - assert( - BigInt(parameter.toString(10)) > 0, - 'Validate: value 0 is not authorized in NonZero felt252 type.' - ); - break; - case isTypeUint(baseType): - validateUint(parameter, { name: '', type: baseType }); - - switch (baseType) { - case Uint.u256: - assert( - new CairoUint256(parameter).toBigInt() > 0, - 'Validate: value 0 is not authorized in NonZero uint256 type.' - ); - break; - default: - assert( - toBigInt(parameter) > 0, - 'Validate: value 0 is not authorized in NonZero uint type.' - ); - } - break; - default: - throw new Error( - `Validate Unhandled: argument ${input.name}, type ${input.type}, value "${parameter}"` - ); - } -}; - /** * Validate cairo contract method arguments * Flow: Determine type from abi and than validate against parameter @@ -499,8 +448,8 @@ export default function validateFields( case isTypeTuple(input.type): validateTuple(parameter, input); break; - case isTypeNonZero(input.type): - validateNonZero(parameter, input); + case CairoNonZero.isAbiType(input.type): + CairoNonZero.validate(parameter, input.type); break; default: throw new Error( From bc82c990c7c9f86ca0d6d09cfedee24057fe7bde Mon Sep 17 00:00:00 2001 From: PhilippeR26 Date: Mon, 13 Oct 2025 10:36:43 +0200 Subject: [PATCH 14/17] chore: correct problems in u96, array. Remove request and responseParser files. adapt parseEvent --- __tests__/cairo1v2_typed.test.ts | 6 +- __tests__/cairov24onward.test.ts | 6 +- __tests__/contract.test.ts | 4 +- .../CairoArray.integration.test.ts | 26 +- .../utils/cairoDataTypes/CairoArray.test.ts | 27 ++ .../utils/cairoDataTypes/CairoNonZero.test.ts | 6 +- .../utils/cairoDataTypes/CairoUint96.test.ts | 6 +- __tests__/utils/calldata/byteArray.test.ts | 23 -- .../utils/calldata/requestParser.test.ts | 299 -------------- __tests__/utils/calldata/validate.test.ts | 12 +- __tests__/utils/ethSigner.test.ts | 2 +- __tests__/utils/events.test.ts | 208 ++++------ __tests__/utils/shortString.test.ts | 127 +++--- src/types/calldata.ts | 2 +- src/utils/cairoDataTypes/array.ts | 82 ++-- src/utils/cairoDataTypes/byteArray.ts | 14 + .../cairoDataTypes/cairoType.interface.ts | 2 +- .../cairoDataTypes/cairoTypeCustomEnum.ts | 2 +- src/utils/cairoDataTypes/cairoTypeOption.ts | 4 +- src/utils/cairoDataTypes/cairoTypeResult.ts | 4 +- src/utils/cairoDataTypes/nonZero.ts | 2 +- src/utils/cairoDataTypes/uint96.ts | 3 +- src/utils/calldata/cairo.ts | 27 +- src/utils/calldata/index.ts | 40 +- src/utils/calldata/parser/interface.ts | 6 +- src/utils/calldata/parser/parser-0-1.1.0.ts | 59 ++- src/utils/calldata/parser/parser-2.0.0.ts | 59 ++- src/utils/calldata/requestParser.ts | 381 ------------------ src/utils/calldata/responseParser.ts | 315 --------------- src/utils/calldata/validate.ts | 7 +- src/utils/events/index.ts | 19 +- src/utils/num.ts | 2 +- src/utils/typedData.ts | 7 +- 33 files changed, 345 insertions(+), 1444 deletions(-) delete mode 100644 __tests__/utils/calldata/byteArray.test.ts delete mode 100644 __tests__/utils/calldata/requestParser.test.ts delete mode 100644 src/utils/calldata/requestParser.ts delete mode 100644 src/utils/calldata/responseParser.ts diff --git a/__tests__/cairo1v2_typed.test.ts b/__tests__/cairo1v2_typed.test.ts index 8b36f4f12..4c8a8880c 100644 --- a/__tests__/cairo1v2_typed.test.ts +++ b/__tests__/cairo1v2_typed.test.ts @@ -980,7 +980,7 @@ describe('Cairo 1', () => { test('ByteArray', async () => { const message = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ12345AAADEFGHIJKLMNOPQRSTUVWXYZ12345A'; - const callD = CallData.compile([message]); + const callD = CallData.compile([new CairoByteArray(message).toObject()]); const expectedResult = [ '2', hexToDecimalString('0x4142434445464748494a4b4c4d4e4f505152535455565758595a3132333435'), @@ -989,9 +989,9 @@ describe('Cairo 1', () => { '1', ]; expect(callD).toEqual(expectedResult); - const callD2 = CallData.compile({ mess: message }); + const callD2 = CallData.compile({ mess: new CairoByteArray(message).toObject() }); expect(callD2).toEqual(expectedResult); - const callD3 = CallData.compile({ mess: new CairoByteArray('Take care.') }); + const callD3 = CallData.compile({ mess: new CairoByteArray('Take care.').toObject() }); expect(callD3).toEqual(['0', '398475857363345939260718', '10']); const str1 = await stringContract.get_string(); expect(str1).toBe( diff --git a/__tests__/cairov24onward.test.ts b/__tests__/cairov24onward.test.ts index 78cece733..354b88b12 100644 --- a/__tests__/cairov24onward.test.ts +++ b/__tests__/cairov24onward.test.ts @@ -76,7 +76,7 @@ describe('Cairo v2.4 onwards', () => { test('ByteArray', async () => { const message = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ12345AAADEFGHIJKLMNOPQRSTUVWXYZ12345A'; - const callD = CallData.compile([message]); + const callD = CallData.compile([cairo.byteArray(message)]); const expectedResult = [ '2', hexToDecimalString('0x4142434445464748494a4b4c4d4e4f505152535455565758595a3132333435'), @@ -85,9 +85,9 @@ describe('Cairo v2.4 onwards', () => { '1', ]; expect(callD).toEqual(expectedResult); - const callD2 = CallData.compile({ mess: message }); + const callD2 = CallData.compile({ mess: cairo.byteArray(message) }); expect(callD2).toEqual(expectedResult); - const callD3 = CallData.compile({ mess: new CairoByteArray('Take care.') }); + const callD3 = CallData.compile({ mess: new CairoByteArray('Take care.').toObject() }); expect(callD3).toEqual(['0', '398475857363345939260718', '10']); const str1 = await stringContract.get_string(); expect(str1).toBe( diff --git a/__tests__/contract.test.ts b/__tests__/contract.test.ts index 2bdf2f22d..d14a8bc0d 100644 --- a/__tests__/contract.test.ts +++ b/__tests__/contract.test.ts @@ -455,8 +455,8 @@ describe('Complex interaction', () => { classHash, account, constructorCalldata: CallData.compile({ - name: new CairoByteArray('Token'), - symbol: new CairoByteArray('ERC20'), + name: new CairoByteArray('Token').toObject(), + symbol: new CairoByteArray('ERC20').toObject(), amount: cairo.uint256('1000000000'), recipient: account.address, owner: '0x823d5a0c0eefdc9a6a1cb0e064079a6284f3b26566b677a32c71bbe7bf9f8c', diff --git a/__tests__/utils/cairoDataTypes/CairoArray.integration.test.ts b/__tests__/utils/cairoDataTypes/CairoArray.integration.test.ts index 6aebaa725..8dccc33bb 100644 --- a/__tests__/utils/cairoDataTypes/CairoArray.integration.test.ts +++ b/__tests__/utils/cairoDataTypes/CairoArray.integration.test.ts @@ -63,30 +63,23 @@ describe('CairoArray Integration Tests', () => { test('should work with AbiParser2 request parsing', () => { const parser = new AbiParser2(mockAbi, hdParsingStrategy); - const requestParser = parser.getRequestParser('core::array::Array::'); - - const result = requestParser([1, 2, 3], 'core::array::Array::'); + const result = parser.parseRequestField([1, 2, 3], 'core::array::Array::'); expect(result).toEqual(['3', '1', '2', '3']); }); test('should work with AbiParser2 response parsing', () => { const parser = new AbiParser2(mockAbi, hdParsingStrategy); - const responseParser = parser.getResponseParser('core::array::Array::'); const mockResponse = ['0x2', '0xa', '0xb']; // length=2, elements=[10, 11] const iterator = mockResponse[Symbol.iterator](); - const result = responseParser(iterator, 'core::array::Array::'); + const result = parser.parseResponse(iterator, 'core::array::Array::'); expect(result).toEqual([10n, 11n]); }); test('should handle nested arrays in AbiParser2', () => { const parser = new AbiParser2(mockAbi, hdParsingStrategy); - const requestParser = parser.getRequestParser( - 'core::array::Array::>' - ); - - const result = requestParser( + const result = parser.parseRequestField( [[1, 2], [3]], 'core::array::Array::>' ); @@ -95,9 +88,7 @@ describe('CairoArray Integration Tests', () => { test('should handle empty arrays in AbiParser2', () => { const parser = new AbiParser2(mockAbi, hdParsingStrategy); - const requestParser = parser.getRequestParser('core::array::Array::'); - - const result = requestParser([], 'core::array::Array::'); + const result = parser.parseRequestField([], 'core::array::Array::'); expect(result).toEqual(['0']); }); }); @@ -170,13 +161,14 @@ describe('CairoArray Integration Tests', () => { const originalData = [100, 200, 300]; // Request parsing (serialize) - const requestParser = parser.getRequestParser('core::array::Array::'); - const serialized = requestParser(originalData, 'core::array::Array::'); + const serialized = parser.parseRequestField( + originalData, + 'core::array::Array::' + ); // Response parsing (deserialize) - const responseParser = parser.getResponseParser('core::array::Array::'); const iterator = serialized[Symbol.iterator](); - const result = responseParser(iterator, 'core::array::Array::'); + const result = parser.parseResponse(iterator, 'core::array::Array::'); expect(result).toEqual([100n, 200n, 300n]); }); diff --git a/__tests__/utils/cairoDataTypes/CairoArray.test.ts b/__tests__/utils/cairoDataTypes/CairoArray.test.ts index 18eef6c05..1a4f4d80b 100644 --- a/__tests__/utils/cairoDataTypes/CairoArray.test.ts +++ b/__tests__/utils/cairoDataTypes/CairoArray.test.ts @@ -253,6 +253,33 @@ describe('CairoArray class Unit test', () => { expect(result2).toEqual(['2', '1', '2']); }); + test('Long string to array', () => { + const arr0 = new CairoArray( + 'Bug is back, for ever, here and everywhere', + 'core::array::Array::', + hdParsingStrategy + ).toApiRequest(); + const expectedResponse = [ + '2', + '117422190885827407409664260607192623408641871979684112605616397634538401380', + '39164769268277364419555941', + ]; + expect(arr0).toEqual(expectedResponse); + const arr1 = new CairoArray( + 'Bug is back, for ever, here and everywhere', + 'core::array::Array::', + hdParsingStrategy + ).toApiRequest(); + expect(arr1).toEqual(expectedResponse); + expect(() => + new CairoArray( + 'Bug is back, for ever, here and everywhere', + 'core::array::Array::', + hdParsingStrategy + ).toApiRequest() + ).toThrow(new Error('Invalid input: expected Array or Object, got string')); + }); + test('should throw for invalid inputs', () => { expect(() => { // eslint-disable-next-line @typescript-eslint/no-unused-vars diff --git a/__tests__/utils/cairoDataTypes/CairoNonZero.test.ts b/__tests__/utils/cairoDataTypes/CairoNonZero.test.ts index 3ce52a94d..286e9793e 100644 --- a/__tests__/utils/cairoDataTypes/CairoNonZero.test.ts +++ b/__tests__/utils/cairoDataTypes/CairoNonZero.test.ts @@ -100,7 +100,11 @@ describe('CairoNonZero', () => { test('content is a u96', () => { expect( () => - new CairoNonZero(0, 'core::zeroable::NonZero::', hdParsingStrategy) + new CairoNonZero( + 0, + 'core::zeroable::NonZero::>', + hdParsingStrategy + ) ).toThrow(new Error('ValidateValue: value 0 is not authorized in NonZero type.')); }); test('content is a u128', () => { diff --git a/__tests__/utils/cairoDataTypes/CairoUint96.test.ts b/__tests__/utils/cairoDataTypes/CairoUint96.test.ts index 14d812c6d..c5a022b59 100644 --- a/__tests__/utils/cairoDataTypes/CairoUint96.test.ts +++ b/__tests__/utils/cairoDataTypes/CairoUint96.test.ts @@ -293,7 +293,11 @@ describe('CairoUint96 class Unit Tests', () => { describe('isAbiType static method', () => { test('should identify correct ABI type', () => { - expect(CairoUint96.isAbiType('core::integer::u96')).toBe(true); + expect( + CairoUint96.isAbiType( + 'core::internal::bounded_int::BoundedInt::<0, 79228162514264337593543950335>' + ) + ).toBe(true); expect(CairoUint96.isAbiType('core::integer::u64')).toBe(false); expect(CairoUint96.isAbiType('core::integer::u128')).toBe(false); expect(CairoUint96.isAbiType('felt252')).toBe(false); diff --git a/__tests__/utils/calldata/byteArray.test.ts b/__tests__/utils/calldata/byteArray.test.ts deleted file mode 100644 index c94c80852..000000000 --- a/__tests__/utils/calldata/byteArray.test.ts +++ /dev/null @@ -1,23 +0,0 @@ -import { CairoByteArray } from '../../../src/utils/cairoDataTypes/byteArray'; - -describe('CairoByteArray.stringFromByteArray', () => { - test('should return string from Cairo byte array', () => { - const str = new CairoByteArray({ - data: [], - pending_word: '0x414243444546474849', - pending_word_len: 9, - }); - expect(str).toEqual('ABCDEFGHI'); - }); -}); - -describe('CairoByteArray.byteArrayFromString', () => { - test('should return Cairo byte array from string', () => { - const byteArray = new CairoByteArray('ABCDEFGHI'); - expect(byteArray).toEqual({ - data: [], - pending_word: '0x414243444546474849', - pending_word_len: 9, - }); - }); -}); diff --git a/__tests__/utils/calldata/requestParser.test.ts b/__tests__/utils/calldata/requestParser.test.ts deleted file mode 100644 index bf2b31e69..000000000 --- a/__tests__/utils/calldata/requestParser.test.ts +++ /dev/null @@ -1,299 +0,0 @@ -import { parseCalldataField } from '../../../src/utils/calldata/requestParser'; -import { getAbiEnums, getAbiStructs, getAbiEntry } from '../../factories/abi'; -import { - AbiParser1, - AbiParser2, - CairoCustomEnum, - CairoOption, - CairoOptionVariant, - CairoResult, - CallData, - ETH_ADDRESS, - hdParsingStrategy, - NON_ZERO_PREFIX, - type AbiEntry, - type AbiEnum, -} from '../../../src'; -import { contracts } from '../../config/fixtures'; - -describe('requestParser', () => { - describe('parseCalldataField', () => { - test('should return parsed calldata field for base type', () => { - const args = [256n, 128n]; - const argsIterator = args[Symbol.iterator](); - const parsedField = parseCalldataField({ - argsIterator, - input: getAbiEntry('felt'), - structs: getAbiStructs(), - enums: getAbiEnums(), - parser: new AbiParser1([getAbiEntry('felt')], hdParsingStrategy), - }); - expect(parsedField).toEqual(['256']); - }); - - test('should return parsed calldata field for Array type', () => { - const args = [[256n, 128n]]; - const argsIterator = args[Symbol.iterator](); - const parsedField = parseCalldataField({ - argsIterator, - input: getAbiEntry('core::array::Array::'), - structs: getAbiStructs(), - enums: getAbiEnums(), - parser: new AbiParser2([getAbiEntry('core::array::Array::')], hdParsingStrategy), - }); - expect(parsedField).toEqual(['2', '256', '128']); - }); - - test('should return parsed calldata field for Array type(string input)', () => { - const args = ['some_test_value']; - const argsIterator = args[Symbol.iterator](); - const parsedField = parseCalldataField({ - argsIterator, - input: getAbiEntry('core::array::Array::'), - structs: getAbiStructs(), - enums: getAbiEnums(), - parser: new AbiParser2([getAbiEntry('core::array::Array::')], hdParsingStrategy), - }); - expect(parsedField).toEqual(['1', '599374153440608178282648329058547045']); - }); - - test('should return parsed calldata field for NonZero type', () => { - const args = [true]; - const argsIterator = args[Symbol.iterator](); - const parsedField = parseCalldataField({ - argsIterator, - input: getAbiEntry(`${NON_ZERO_PREFIX}core::bool`), - structs: getAbiStructs(), - enums: getAbiEnums(), - parser: new AbiParser1([getAbiEntry(`${NON_ZERO_PREFIX}core::bool`)], hdParsingStrategy), - }); - expect(parsedField).toEqual(['1']); - }); - - test('should return parsed calldata field for EthAddress type', () => { - const args = ['test']; - const argsIterator = args[Symbol.iterator](); - const parsedField = parseCalldataField({ - argsIterator, - input: getAbiEntry(`${ETH_ADDRESS}felt`), - structs: getAbiStructs(), - enums: getAbiEnums(), - parser: new AbiParser1([getAbiEntry(`${ETH_ADDRESS}felt`)], hdParsingStrategy), - }); - expect(parsedField).toEqual(['1952805748']); - }); - - test('should return parsed calldata field for Struct type', () => { - const args = [{ test_name: 'test' }]; - const argsIterator = args[Symbol.iterator](); - const parsedField = parseCalldataField({ - argsIterator, - input: getAbiEntry('struct'), - structs: getAbiStructs(), - enums: getAbiEnums(), - parser: new AbiParser1([getAbiEntry('struct')], hdParsingStrategy), - }); - expect(parsedField).toEqual(['1952805748']); - }); - - test('should return parsed calldata field for Tuple type', () => { - const args = [{ min: true, max: true }]; - const argsIterator = args[Symbol.iterator](); - const parsedField = parseCalldataField({ - argsIterator, - input: getAbiEntry('(core::bool, core::bool)'), - structs: getAbiStructs(), - enums: getAbiEnums(), - parser: new AbiParser1([getAbiEntry('(core::bool, core::bool)')], hdParsingStrategy), - }); - expect(parsedField).toEqual(['1', '1']); - }); - - test('should return parsed calldata field for CairoUint256 abi type', () => { - const args = [252n]; - const argsIterator = args[Symbol.iterator](); - const parsedField = parseCalldataField({ - argsIterator, - input: getAbiEntry('core::integer::u256'), - structs: getAbiStructs(), - enums: getAbiEnums(), - parser: new AbiParser2([getAbiEntry('core::integer::u256')], hdParsingStrategy), - }); - expect(parsedField).toEqual(['252', '0']); - }); - - test('should return parsed calldata field for Enum Option type None', () => { - const args = [new CairoOption(CairoOptionVariant.None)]; - const argsIterator = args[Symbol.iterator](); - const parsedField = parseCalldataField({ - argsIterator, - input: getAbiEntry('core::option::Option::'), - structs: getAbiStructs(), - enums: { 'core::option::Option::': getAbiEnums().enum }, - parser: new AbiParser2( - [getAbiEntry('core::option::Option::')], - hdParsingStrategy - ), - }); - expect(parsedField).toEqual('1'); - }); - - test('should return parsed calldata field for Enum Option type Some', () => { - const args = [new CairoOption(CairoOptionVariant.Some, 'content')]; - const argsIterator = args[Symbol.iterator](); - const abiEnum = getAbiEnums().enum; - abiEnum.variants.push({ - name: 'Some', - type: 'cairo_struct_variant', - offset: 1, - }); - const parsedField = parseCalldataField({ - argsIterator, - input: getAbiEntry('core::option::Option::'), - structs: getAbiStructs(), - enums: { 'core::option::Option::': abiEnum }, - parser: new AbiParser2( - [getAbiEntry('core::option::Option::')], - hdParsingStrategy - ), - }); - expect(parsedField).toEqual(['0', '27988542884245108']); - }); - - test('should throw an error for Enum Option has no "Some" variant', () => { - const args = [new CairoOption(0, 'content')]; - const argsIterator = args[Symbol.iterator](); - expect(() => - parseCalldataField({ - argsIterator, - input: getAbiEntry('core::option::Option::core::bool'), - structs: getAbiStructs(), - enums: { 'core::option::Option::core::bool': getAbiEnums().enum }, - parser: new AbiParser2( - [getAbiEntry('core::option::Option::core::bool')], - hdParsingStrategy - ), - }) - ).toThrow( - new Error(`ABI type core::option::Option::core::bool do not includes a valid type of data.`) - ); - }); - - test('should throw an error for Enum Result has no "Ok" variant', () => { - const args = [new CairoResult(0, 'Ok')]; - const argsIterator = args[Symbol.iterator](); - expect(() => - parseCalldataField({ - argsIterator, - input: getAbiEntry('core::result::Result::core::bool'), - structs: getAbiStructs(), - enums: { 'core::result::Result::core::bool': getAbiEnums().enum }, - parser: new AbiParser2( - [getAbiEntry('core::result::Result::core::bool')], - hdParsingStrategy - ), - }) - ).toThrow( - new Error( - `ABI type core::result::Result::core::bool do not includes 2 types enclosed in <>.` - ) - ); - }); - - test('should return parsed calldata field for Custom Enum type', () => { - const { abi } = contracts.TestCairoType.sierra; - const abiOfEnum: AbiEnum = abi.find((item) => item.name === 'enums::MyEnum'); - const abiEnum = { name: abiOfEnum.type, type: abiOfEnum.name }; - const myCallData = new CallData(abi); - const activeVariantName = 'Success'; - const args = [new CairoCustomEnum({ [activeVariantName]: 100 })]; - const argsIterator = args[Symbol.iterator](); - - const parsedField = parseCalldataField({ - argsIterator, - input: abiEnum, - structs: myCallData.structs, - enums: myCallData.enums, - parser: new AbiParser2(abi, hdParsingStrategy), - }); - expect(parsedField).toEqual(['0', '100']); - }); - - test('should throw an error for Custom Enum type when there is not active variant', () => { - const args = [new CairoCustomEnum({ test: 'content' })]; - const argsIterator = args[Symbol.iterator](); - expect(() => - parseCalldataField({ - argsIterator, - input: getAbiEntry('enum'), - structs: getAbiStructs(), - enums: getAbiEnums(), - parser: new AbiParser2([getAbiEntry('enum')], hdParsingStrategy), - }) - ).toThrow(new Error(`The type test_cairo is not a Cairo Enum. Needs impl::name.`)); - }); - - test('should throw an error for CairoUint256 abi type when wrong arg is provided', () => { - const args = ['test']; - const argsIterator = args[Symbol.iterator](); - expect(() => - parseCalldataField({ - argsIterator, - input: getAbiEntry('core::integer::u256'), - structs: getAbiStructs(), - enums: getAbiEnums(), - parser: new AbiParser2([getAbiEntry('core::integer::u256')], hdParsingStrategy), - }) - ).toThrow( - new Error( - "Unsupported data type 'string' for u256. Expected string, number, bigint, or Uint256 object" - ) - ); - }); - - test('should throw an error if provided tuple size do not match', () => { - const args = [{ min: true }, { max: true }]; - const argsIterator = args[Symbol.iterator](); - const abiItem: AbiEntry = getAbiEntry('(core::bool,core::bool)'); - expect(() => - parseCalldataField({ - argsIterator, - input: abiItem, - structs: getAbiStructs(), - enums: getAbiEnums(), - parser: new AbiParser2([abiItem], hdParsingStrategy), - }) - ).toThrow( - new Error('"(core::bool,core::bool)" is not a valid Cairo type (missing space after comma)') - ); - }); - - test('should throw an error if there is missing parameter for type Struct', () => { - const args = ['test']; - const argsIterator = args[Symbol.iterator](); - expect(() => - parseCalldataField({ - argsIterator, - input: getAbiEntry('struct'), - structs: getAbiStructs(), - enums: getAbiEnums(), - parser: new AbiParser2([getAbiEntry('struct')], hdParsingStrategy), - }) - ).toThrow(new Error('Missing parameter for type test_type')); - }); - - test('should throw an error if args for array type are not valid', () => { - const args = [256n, 128n]; - const argsIterator = args[Symbol.iterator](); - expect(() => - parseCalldataField({ - argsIterator, - input: getAbiEntry('core::array::Array::'), - structs: getAbiStructs(), - enums: getAbiEnums(), - parser: new AbiParser2([getAbiEntry('core::array::Array::')], hdParsingStrategy), - }) - ).toThrow(new Error('ABI expected parameter test to be array or long string, got 256')); - }); - }); -}); diff --git a/__tests__/utils/calldata/validate.test.ts b/__tests__/utils/calldata/validate.test.ts index e5c4d6b96..86c22484c 100644 --- a/__tests__/utils/calldata/validate.test.ts +++ b/__tests__/utils/calldata/validate.test.ts @@ -562,8 +562,8 @@ describe('validateFields', () => { ).toThrow(error); }); - test('should throw an error if value 0 iz provided for felt252 type', () => { - const error = new Error('Validate: value 0 is not authorized in NonZero felt252 type.'); + test('should throw an error if value 0 is provided for felt252 type', () => { + const error = new Error('ValidateValue: value 0 is not authorized in NonZero type.'); expect(() => validateFields( @@ -575,8 +575,8 @@ describe('validateFields', () => { ).toThrow(error); }); - test('should throw an error if value 0 iz provided for uint256 type', () => { - const error = new Error('Validate: value 0 is not authorized in NonZero uint256 type.'); + test('should throw an error if value 0 is provided for uint256 type', () => { + const error = new Error('ValidateValue: value 0 is not authorized in NonZero type.'); expect(() => validateFields( @@ -588,8 +588,8 @@ describe('validateFields', () => { ).toThrow(error); }); - test('should throw an error if value 0 iz provided for any uint type', () => { - const error = new Error('Validate: value 0 is not authorized in NonZero uint8 type.'); + test('should throw an error if value 0 is provided for any uint type', () => { + const error = new Error('ValidateValue: value 0 is not authorized in NonZero type.'); expect(() => validateFields( diff --git a/__tests__/utils/ethSigner.test.ts b/__tests__/utils/ethSigner.test.ts index ed31230ae..527f411fe 100644 --- a/__tests__/utils/ethSigner.test.ts +++ b/__tests__/utils/ethSigner.test.ts @@ -84,7 +84,7 @@ describe('Ethereum signer', () => { test('secp256k1', async () => { const myCallData = new CallData(ethPubKContract.abi); - const ethPubKey = + const ethPubKey: string = '0x8c7aea7d673a5858bdca128d124fb0765cceb2c16f198f4c14b328aa571331e6f6c87f51d5224d73d118765cb19d7565212f80be5048bff926ba791c17541c92'; const resp3 = await ethPubKContract.test_public_key(ethPubKey); expect(num.toHex(resp3)).toBe(ethPubKey); diff --git a/__tests__/utils/events.test.ts b/__tests__/utils/events.test.ts index 15c1f7f41..4031fd9f6 100644 --- a/__tests__/utils/events.test.ts +++ b/__tests__/utils/events.test.ts @@ -4,6 +4,7 @@ import { type AbiEvent, type AbiStructs, type CairoEventVariant, + CallData, type InvokeTransactionReceiptResponse, type RPC, events, @@ -141,173 +142,100 @@ describe('getAbiEvents', () => { describe('parseEvents', () => { test('should return parsed events', () => { - const abiEventAndVariantName = 'cairo_event_struct'; - const abiCairoEventStruct: AbiEvent = { - kind: 'struct', - members: [ - { - name: 'test_name', - type: 'test_type', - kind: 'data', - }, - ], - name: abiEventAndVariantName, - type: 'event', - }; - - const abiCairoEventEnum: CairoEventVariant = { - kind: 'enum', - variants: [ - { - name: 'test_name', - type: abiEventAndVariantName, - kind: 'data', - }, + const event: RPC.EmittedEvent = { + data: [ + '0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43', + '0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8', + '0x5615d4fedf6800', + '0x0', ], - name: 'test_cairo_event', - type: 'event', + from_address: '0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d', + keys: ['0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9'], + block_hash: '0x1234', + block_number: 567, + transaction_hash: '0x789', }; - const abiEvents = getAbiEvents([getInterfaceAbi(), abiCairoEventStruct, abiCairoEventEnum]); - - const abiStructs: AbiStructs = { - abi_structs: { + const abi = [ + { + type: 'impl', + name: 'ERC20Impl', + interface_name: 'openzeppelin::token::erc20::interface::IERC20', + }, + { + type: 'interface', + name: 'openzeppelin::token::erc20::interface::IERC20', + items: [], + }, + { + type: 'event', + name: 'src::strk::erc20_lockable::ERC20Lockable::Transfer', + kind: 'struct', members: [ { - name: 'test_name', - type: 'test_type', - offset: 1, + name: 'from', + type: 'core::starknet::contract_address::ContractAddress', + kind: 'data', }, - ], - size: 2, - name: 'cairo_event_struct', - type: 'struct', - }, - }; - - const abiEnums: AbiEnums = { - abi_enums: { - variants: [ { - name: 'test_name', - type: 'cairo_event_struct_variant', - offset: 1, + name: 'to', + type: 'core::starknet::contract_address::ContractAddress', + kind: 'data', + }, + { + name: 'value', + type: 'core::integer::u256', + kind: 'data', }, ], - size: 2, - name: 'test_cairo_event', - type: 'enum', }, - }; - - const event: RPC.EmittedEvent = { - from_address: 'test_address', - keys: ['0x3c719ce4f57dd2d9059b9ffed65417d694a29982d35b188574144d6ae6c3f87'], - data: ['0x3c719ce4f57dd2d9059b9ffed65417d694a29982d35b188574144d6ae6c3f87'], - block_hash: '0x1234', - block_number: 567, - transaction_hash: '0x789', - }; - - const abi = [getInterfaceAbi(), abiCairoEventStruct, abiCairoEventEnum]; - const parser = createAbiParser(abi); - const parsedEvents = parseEvents([event], abiEvents, abiStructs, abiEnums, parser); - - const result = [ { - cairo_event_struct: { - test_name: 1708719217404197029088109386680815809747762070431461851150711916567020191623n, - }, - block_hash: '0x1234', - block_number: 567, - transaction_hash: '0x789', - }, - ]; - - expect(parsedEvents).toStrictEqual(result); - }); - - test('should return parsed emitted events', () => { - const abiEventAndVariantName = 'cairo_event_struct'; - const abiCairoEventStruct: AbiEvent = { - kind: 'struct', - members: [ - { - name: 'test_name', - type: 'test_type', - kind: 'data', - }, - ], - name: abiEventAndVariantName, - type: 'event', - }; - - const abiCairoEventEnum: CairoEventVariant = { - kind: 'enum', - variants: [ - { - name: 'test_name', - type: abiEventAndVariantName, - kind: 'data', - }, - ], - name: 'test_cairo_event', - type: 'event', - }; - - const abiEvents = getAbiEvents([getInterfaceAbi(), abiCairoEventStruct, abiCairoEventEnum]); - - const abiStructs: AbiStructs = { - abi_structs: { + type: 'struct', + name: 'core::integer::u256', members: [ { - name: 'test_name', - type: 'test_type', - offset: 1, + name: 'low', + type: 'core::integer::u128', + }, + { + name: 'high', + type: 'core::integer::u128', }, ], - size: 2, - name: 'cairo_event_struct', - type: 'struct', }, - }; - - const abiEnums: AbiEnums = { - abi_enums: { + { + type: 'event', + name: 'src::strk::erc20_lockable::ERC20Lockable::Event', + kind: 'enum', variants: [ { - name: 'test_name', - type: 'cairo_event_struct_variant', - offset: 1, + name: 'Transfer', + type: 'src::strk::erc20_lockable::ERC20Lockable::Transfer', + kind: 'nested', }, ], - size: 2, - name: 'test_cairo_event', - type: 'enum', }, - }; - - const event: RPC.EmittedEvent = { - from_address: 'test_address', - keys: ['0x3c719ce4f57dd2d9059b9ffed65417d694a29982d35b188574144d6ae6c3f87'], - data: ['0x3c719ce4f57dd2d9059b9ffed65417d694a29982d35b188574144d6ae6c3f87'], - block_hash: '0x26b160f10156dea0639bec90696772c640b9706a47f5b8c52ea1abe5858b34d', - block_number: 1, - transaction_hash: '0x26b160f10156dea0639bec90696772c640b9706a47f5b8c52ea1abe5858b34c', - }; + ]; - const abi = [getInterfaceAbi(), abiCairoEventStruct, abiCairoEventEnum]; const parser = createAbiParser(abi); - const parsedEvents = parseEvents([event], abiEvents, abiStructs, abiEnums, parser); + const parsedEvents = parseEvents( + [event], + getAbiEvents(abi), + CallData.getAbiStruct(abi), + CallData.getAbiEnum(abi), + parser + ); const result = [ { - cairo_event_struct: { - test_name: 1708719217404197029088109386680815809747762070431461851150711916567020191623n, + 'src::strk::erc20_lockable::ERC20Lockable::Transfer': { + from: 101335501307061673760165623468268869343867322091122131773587832584929156931n, + to: 493682666880028149457439048758834463666448583632766410742816449610329486296n, + value: 24230852550420480n, }, - block_hash: '0x26b160f10156dea0639bec90696772c640b9706a47f5b8c52ea1abe5858b34d', - block_number: 1, - transaction_hash: '0x26b160f10156dea0639bec90696772c640b9706a47f5b8c52ea1abe5858b34c', + block_hash: '0x1234', + block_number: 567, + transaction_hash: '0x789', }, ]; diff --git a/__tests__/utils/shortString.test.ts b/__tests__/utils/shortString.test.ts index eb1a7aadc..c68cfc911 100644 --- a/__tests__/utils/shortString.test.ts +++ b/__tests__/utils/shortString.test.ts @@ -53,89 +53,72 @@ describe('shortString', () => { test('convert string to ByteArray', () => { expect( - new CairoByteArray('ABCDEFGHIJKLMNOPQRSTUVWXYZ12345AAADEFGHIJKLMNOPQRSTUVWXYZ12345A') - ).toEqual({ - data: [ - '0x4142434445464748494a4b4c4d4e4f505152535455565758595a3132333435', - '0x4141414445464748494a4b4c4d4e4f505152535455565758595a3132333435', - ], - pending_word: '0x41', - pending_word_len: 1, - }); - expect(new CairoByteArray('ABCDEFGHIJKLMNOPQRSTUVWXYZ12345')).toEqual({ - data: ['0x4142434445464748494a4b4c4d4e4f505152535455565758595a3132333435'], - pending_word: '0x00', - pending_word_len: 0, - }); - expect(new CairoByteArray('ABCDEFGHIJKLMNOPQRSTUVWXYZ1234')).toEqual({ - data: [], - pending_word: '0x4142434445464748494a4b4c4d4e4f505152535455565758595a31323334', - pending_word_len: 30, - }); - expect(new CairoByteArray('')).toEqual({ - data: [], - pending_word: '0x00', - pending_word_len: 0, - }); + new CairoByteArray( + 'ABCDEFGHIJKLMNOPQRSTUVWXYZ12345AAADEFGHIJKLMNOPQRSTUVWXYZ12345A' + ).toApiRequest() + ).toEqual([ + '2', + '115302387975643577911206786302384344998065844015382184106956994275072750645', + '115295432309403453046139762212491893933352045632121168639256869543628452917', + '65', + '1', + ]); + expect(new CairoByteArray('ABCDEFGHIJKLMNOPQRSTUVWXYZ12345').toApiRequest()).toEqual([ + '1', + '115302387975643577911206786302384344998065844015382184106956994275072750645', + '0', + '0', + ]); + expect(new CairoByteArray('ABCDEFGHIJKLMNOPQRSTUVWXYZ1234').toApiRequest()).toEqual([ + '0', + '450399953029857726215651508993688847648694703185086656667800758887002932', + '30', + ]); + expect(new CairoByteArray('').toApiRequest()).toEqual(['0', '0', '0']); }); test('convert ByteArray to string', () => { expect( - new CairoByteArray({ - data: [ - '0x4142434445464748494a4b4c4d4e4f505152535455565758595a3132333435', - '0x4141414445464748494a4b4c4d4e4f505152535455565758595a3132333435', - ], - pending_word: '0x41', - pending_word_len: 1, - }) + new CairoByteArray( + 'ABCDEFGHIJKLMNOPQRSTUVWXYZ12345AAADEFGHIJKLMNOPQRSTUVWXYZ12345A' + ).decodeUtf8() ).toBe('ABCDEFGHIJKLMNOPQRSTUVWXYZ12345AAADEFGHIJKLMNOPQRSTUVWXYZ12345A'); + expect(new CairoByteArray('ABCDEFGHIJKLMNOPQRSTUVWXYZ1234').decodeUtf8()).toBe( + 'ABCDEFGHIJKLMNOPQRSTUVWXYZ1234' + ); + expect(new CairoByteArray('').decodeUtf8()).toBe(''); }); - expect( - new CairoByteArray({ - data: [], - pending_word: '0x4142434445464748494a4b4c4d4e4f505152535455565758595a31323334', - pending_word_len: 30, - }) - ).toBe('ABCDEFGHIJKLMNOPQRSTUVWXYZ1234'); - expect( - new CairoByteArray({ - data: [], - pending_word: '0x00', - pending_word_len: 0, - }) - ).toBe(''); -}); -describe('isShortString', () => { - test('should return true for short strings', () => { - const shortStr = '1234567890123456789012345678901'; - expect(isShortString(shortStr)).toBe(true); - }); + describe('isShortString', () => { + test('should return true for short strings', () => { + const shortStr = '1234567890123456789012345678901'; + expect(isShortString(shortStr)).toBe(true); + }); - test('should return true for short strings', () => { - // TODO: IMPORTANT: This pass even though it's 31 chars long, but each char is 2 bytes, so it's 62 bytes long - // TODO: felt can store 31 bytes + 4 bits. - // TODO: This is a bug, we need to fix it. - // TODO: We need to check if the string is 31 bytes long or less, not by character number. - const shortStr = '☥☥☥☥☥☥☥☥☥☥☥☥☥☥☥☥☥☥☥☥☥☥☥☥☥☥☥☥☥☥☥'; - expect(isShortString(shortStr)).toBe(true); - }); + test('should return true for short strings', () => { + // TODO: IMPORTANT: This pass even though it's 31 chars long, but each char is 2 bytes, so it's 62 bytes long + // TODO: felt can store 31 bytes + 4 bits. + // TODO: This is a bug, we need to fix it. + // TODO: We need to check if the string is 31 bytes long or less, not by character number. + const shortStr = '☥☥☥☥☥☥☥☥☥☥☥☥☥☥☥☥☥☥☥☥☥☥☥☥☥☥☥☥☥☥☥'; + expect(isShortString(shortStr)).toBe(true); + }); - test('should return false for long strings', () => { - const longStr = '12345678901234567890123456789012'; - expect(isShortString(longStr)).toBe(false); + test('should return false for long strings', () => { + const longStr = '12345678901234567890123456789012'; + expect(isShortString(longStr)).toBe(false); + }); }); -}); -describe('isDecimalString', () => { - test('should return true for decimal strings', () => { - expect(isDecimalString('1234567890')).toBe(true); - }); + describe('isDecimalString', () => { + test('should return true for decimal strings', () => { + expect(isDecimalString('1234567890')).toBe(true); + }); - test('should return false for non-decimal strings', () => { - expect(isDecimalString('123A')).toBe(false); - expect(isDecimalString('ABCDE')).toBe(false); - expect(isDecimalString('123.456')).toBe(false); + test('should return false for non-decimal strings', () => { + expect(isDecimalString('123A')).toBe(false); + expect(isDecimalString('ABCDE')).toBe(false); + expect(isDecimalString('123.456')).toBe(false); + }); }); }); diff --git a/src/types/calldata.ts b/src/types/calldata.ts index 9e5494208..05b20f5ed 100644 --- a/src/types/calldata.ts +++ b/src/types/calldata.ts @@ -13,7 +13,7 @@ export const Uint = { u16: 'core::integer::u16', u32: 'core::integer::u32', u64: 'core::integer::u64', - u96: 'core::integer::u96', + u96: 'core::internal::bounded_int::BoundedInt::<0, 79228162514264337593543950335>', u128: 'core::integer::u128', u256: 'core::integer::u256', // This one is struct u512: 'core::integer::u512', // This one is struct diff --git a/src/utils/cairoDataTypes/array.ts b/src/utils/cairoDataTypes/array.ts index 2b615fca7..b35c05d07 100644 --- a/src/utils/cairoDataTypes/array.ts +++ b/src/utils/cairoDataTypes/array.ts @@ -1,10 +1,13 @@ import assert from '../assert'; import { addCompiledFlag } from '../helpers'; -import { getNext } from '../num'; +import { getNext, isBigNumberish } from '../num'; import { felt, getArrayType, isTypeArray } from '../calldata/cairo'; import { type ParsingStrategy } from '../calldata/parser/parsingStrategy.type'; import { CairoType } from './cairoType.interface'; import type { AllowArray } from '../../types'; +import { CairoFelt252 } from './felt'; +import { CairoBytes31 } from './bytes31'; +import { splitLongString } from '../shortString'; /** * Represents a Cairo dynamic array with runtime-determined length. @@ -105,44 +108,55 @@ export class CairoArray extends CairoType { this.arrayType = content.arrayType; return; } - CairoArray.validate(content, arrayType); const arrayContentType = CairoArray.getArrayElementType(arrayType); - const resultContent: any[] = CairoArray.extractValuesArray(content).map((contentItem: any) => { - if ( - contentItem && - typeof contentItem === 'object' && - contentItem !== null && - 'toApiRequest' in contentItem - ) { - // "content" is a CairoType - return contentItem as CairoType; - } - // not an iterator, not an CairoType -> so is low level data (BigNumberish, array, object, Cairo Enums) + let processedContent = content; + if ( + typeof content === 'string' && + !isBigNumberish(content) && + (arrayContentType === CairoFelt252.abiSelector || + arrayContentType === CairoBytes31.abiSelector) + ) { + processedContent = splitLongString(content); + } + CairoArray.validate(processedContent, arrayType); + const resultContent: any[] = CairoArray.extractValuesArray(processedContent).map( + (contentItem: any) => { + if ( + contentItem && + typeof contentItem === 'object' && + contentItem !== null && + 'toApiRequest' in contentItem + ) { + // "content" is a CairoType + return contentItem as CairoType; + } + // not an iterator, not an CairoType -> so is low level data (BigNumberish, array, object, Cairo Enums) - const strategyConstructorNum = strategies.findIndex( - (strategy: ParsingStrategy) => strategy.constructors[arrayContentType] - ); - if (strategyConstructorNum >= 0) { - const constructor = strategies[strategyConstructorNum].constructors[arrayContentType]; - return constructor(contentItem, strategies, arrayContentType); - } - const strategyDynamicNum = strategies.findIndex((strategy: ParsingStrategy) => { - const dynamicSelectors = Object.entries(strategy.dynamicSelectors); - return dynamicSelectors.find(([, selectorFn]) => selectorFn(arrayContentType)); - }); - if (strategyDynamicNum >= 0) { - const dynamicSelectors = Object.entries(strategies[strategyDynamicNum].dynamicSelectors); - const matchingSelector = dynamicSelectors.find(([, selectorFn]) => - selectorFn(arrayContentType) + const strategyConstructorNum = strategies.findIndex( + (strategy: ParsingStrategy) => strategy.constructors[arrayContentType] ); - const [selectorName] = matchingSelector as [string, (type: string) => boolean]; - const dynamicConstructor = strategies[strategyDynamicNum].constructors[selectorName]; - if (dynamicConstructor) { - return dynamicConstructor(contentItem, strategies, arrayContentType); + if (strategyConstructorNum >= 0) { + const constructor = strategies[strategyConstructorNum].constructors[arrayContentType]; + return constructor(contentItem, strategies, arrayContentType); + } + const strategyDynamicNum = strategies.findIndex((strategy: ParsingStrategy) => { + const dynamicSelectors = Object.entries(strategy.dynamicSelectors); + return dynamicSelectors.find(([, selectorFn]) => selectorFn(arrayContentType)); + }); + if (strategyDynamicNum >= 0) { + const dynamicSelectors = Object.entries(strategies[strategyDynamicNum].dynamicSelectors); + const matchingSelector = dynamicSelectors.find(([, selectorFn]) => + selectorFn(arrayContentType) + ); + const [selectorName] = matchingSelector as [string, (type: string) => boolean]; + const dynamicConstructor = strategies[strategyDynamicNum].constructors[selectorName]; + if (dynamicConstructor) { + return dynamicConstructor(contentItem, strategies, arrayContentType); + } } + throw new Error(`"${arrayContentType}" is not a valid Cairo type`); } - throw new Error(`"${arrayContentType}" is not a valid Cairo type`); - }); + ); this.content = resultContent; } diff --git a/src/utils/cairoDataTypes/byteArray.ts b/src/utils/cairoDataTypes/byteArray.ts index aa282e41b..cf01fcdb6 100644 --- a/src/utils/cairoDataTypes/byteArray.ts +++ b/src/utils/cairoDataTypes/byteArray.ts @@ -199,6 +199,20 @@ export class CairoByteArray extends CairoType { return allChunks; } + /** + * Converts the encoded ByteArray into a plain object representation. + * @returns {Record} plain object representation of the CairoByteArray instance. + * @example + * ```ts + * const byteArray = new CairoByteArray("Token").toObject(); + * // byteArray = { '0': '0', '1': '362646562158', '2': '5' } + * ``` + */ + toObject(): Record { + this.assertInitialized(); + return { ...this.toApiRequest() }; + } + /** * Private helper to check if the CairoByteArray is properly initialized */ diff --git a/src/utils/cairoDataTypes/cairoType.interface.ts b/src/utils/cairoDataTypes/cairoType.interface.ts index 40187f285..a394d509d 100644 --- a/src/utils/cairoDataTypes/cairoType.interface.ts +++ b/src/utils/cairoDataTypes/cairoType.interface.ts @@ -38,5 +38,5 @@ export abstract class CairoType { /** * Convert the CairoType to the API request format */ - abstract toApiRequest(): any; + abstract toApiRequest(): string[]; } diff --git a/src/utils/cairoDataTypes/cairoTypeCustomEnum.ts b/src/utils/cairoDataTypes/cairoTypeCustomEnum.ts index d739e3406..ff671959c 100644 --- a/src/utils/cairoDataTypes/cairoTypeCustomEnum.ts +++ b/src/utils/cairoDataTypes/cairoTypeCustomEnum.ts @@ -373,7 +373,7 @@ export class CairoTypeCustomEnum extends CairoType { */ public toApiRequest(): string[] { const result: string[] = [this.enumVariant.toString(10)]; - result.push(this.content!.toApiRequest()); + result.push(...this.content!.toApiRequest()); return addCompiledFlag(result.flat()); } diff --git a/src/utils/cairoDataTypes/cairoTypeOption.ts b/src/utils/cairoDataTypes/cairoTypeOption.ts index c7e61039a..a3d1ae615 100644 --- a/src/utils/cairoDataTypes/cairoTypeOption.ts +++ b/src/utils/cairoDataTypes/cairoTypeOption.ts @@ -328,9 +328,9 @@ export class CairoTypeOption extends CairoType { * ``` */ public toApiRequest(): string[] { - const result = [this.isVariantSome ? '0' : '1']; + const result: string[] = [this.isVariantSome ? '0' : '1']; if (this.isVariantSome) { - result.push(this.content!.toApiRequest()); + result.push(...this.content!.toApiRequest()); } return addCompiledFlag(result.flat()); } diff --git a/src/utils/cairoDataTypes/cairoTypeResult.ts b/src/utils/cairoDataTypes/cairoTypeResult.ts index 6b08b033c..8f82f4f12 100644 --- a/src/utils/cairoDataTypes/cairoTypeResult.ts +++ b/src/utils/cairoDataTypes/cairoTypeResult.ts @@ -314,8 +314,8 @@ export class CairoTypeResult extends CairoType { * ``` */ public toApiRequest(): string[] { - const result = [this.isVariantOk ? '0' : '1']; - result.push(this.content!.toApiRequest()); + const result: string[] = [this.isVariantOk ? '0' : '1']; + result.push(...this.content!.toApiRequest()); return addCompiledFlag(result.flat()); } diff --git a/src/utils/cairoDataTypes/nonZero.ts b/src/utils/cairoDataTypes/nonZero.ts index 3a617c187..6558d7739 100644 --- a/src/utils/cairoDataTypes/nonZero.ts +++ b/src/utils/cairoDataTypes/nonZero.ts @@ -214,7 +214,7 @@ export class CairoNonZero extends CairoType { ]; if (isInstanceOf(cairoInstance, nonZeroUints)) { assert( - (cairoInstance as CairoUint8).toBigInt() > 0n, // TODO: find a more elegant way to access to .toBigInt() property + (cairoInstance as CairoType & { toBigInt: Function }).toBigInt() > 0n, 'ValidateValue: value 0 is not authorized in NonZero type.' ); return; diff --git a/src/utils/cairoDataTypes/uint96.ts b/src/utils/cairoDataTypes/uint96.ts index 917042572..fb355837e 100644 --- a/src/utils/cairoDataTypes/uint96.ts +++ b/src/utils/cairoDataTypes/uint96.ts @@ -11,7 +11,8 @@ import { addCompiledFlag } from '../helpers'; export class CairoUint96 { data: bigint; - static abiSelector = 'core::integer::u96'; + static abiSelector = + 'core::internal::bounded_int::BoundedInt::<0, 79228162514264337593543950335>'; constructor(data: BigNumberish | boolean | unknown) { CairoUint96.validate(data); diff --git a/src/utils/calldata/cairo.ts b/src/utils/calldata/cairo.ts index a8c6c93da..e17eecf3c 100644 --- a/src/utils/calldata/cairo.ts +++ b/src/utils/calldata/cairo.ts @@ -12,6 +12,7 @@ import { Uint256, Uint512, } from '../../types'; +import { CairoByteArray } from '../cairoDataTypes/byteArray'; import { CairoFelt } from '../cairoDataTypes/felt'; import { CairoUint256 } from '../cairoDataTypes/uint256'; import { CairoUint512 } from '../cairoDataTypes/uint512'; @@ -231,6 +232,9 @@ export function getAbiContractVersion(abi: Abi): ContractVersion { /** * Create Uint256 Cairo type (helper for common struct type) + * Useful for CallData.compile() method. + * @param it BigNumberish representation of a 256 bits unsigned number + * @returns Uint256 struct * @example * ```typescript * uint256('892349863487563453485768723498'); @@ -242,6 +246,7 @@ export const uint256 = (it: BigNumberish): Uint256 => { /** * Create Uint512 Cairo type (helper for common struct type) + * Useful for CallData.compile() method. * @param it BigNumberish representation of a 512 bits unsigned number * @returns Uint512 struct * @example @@ -254,10 +259,13 @@ export const uint512 = (it: BigNumberish): Uint512 => { }; /** - * Create unnamed tuple Cairo type (helper same as common struct type) + * Create unnamed tuple Cairo type (helper same as common struct type). + * Useful for CallData.compile() method. + * @param args BigNumberish, JS tuple or object representation of the tuple elements. * @example * ```typescript - * tuple(1, '0x101', 16); + * const calldata = CallData.compile({ a1: cairo.tuple(1, '0x10', 9)}); + * // calldata = ['1', '16', '9'] * ``` */ export const tuple = ( @@ -266,8 +274,23 @@ export const tuple = ( /** * Create felt Cairo type (cairo type helper) + * @param it BigNumberish representation of a felt * @returns format: felt-string */ export function felt(it: BigNumberish): string { return CairoFelt(it); } + +/** + * Converts a string into a plain object representation of a ByteArray. + * Useful for CallData.compile() method. + * @returns {Record} plain object representation of a CairoByteArray instance. + * @example + * ```ts + * const calldata = CallData.compile({ a1: cairo.byteArray("Token")}); + * // calldata = ['0', '362646562158', '5'] + * ``` + */ +export function byteArray(it: string): Record { + return new CairoByteArray(it).toObject(); +} diff --git a/src/utils/calldata/index.ts b/src/utils/calldata/index.ts index 279451e3d..9b9a08454 100644 --- a/src/utils/calldata/index.ts +++ b/src/utils/calldata/index.ts @@ -15,7 +15,7 @@ import { ValidateType, } from '../../types'; import assert from '../assert'; -import { toHex } from '../num'; +import { getNext, toHex } from '../num'; import { isBigInt } from '../typed'; import { getSelectorFromName } from '../hash/selector'; import { isLongText } from '../shortString'; @@ -36,8 +36,7 @@ import { createAbiParser, isNoConstructorValid, type ParsingStrategy } from './p import { hdParsingStrategy } from './parser/parsingStrategy'; import { AbiParserInterface } from './parser/interface'; import orderPropsByAbi from './propertyOrder'; -import { parseCalldataField } from './requestParser'; -import responseParser from './responseParser'; +// import { parseCalldataField } from './requestParser'; import validateFields from './validate'; import { CairoTypeOption } from '../cairoDataTypes/cairoTypeOption'; import { CairoTypeResult } from '../cairoDataTypes/cairoTypeResult'; @@ -49,7 +48,7 @@ import { CairoNonZero } from '../cairoDataTypes/nonZero'; import { CairoEthAddress } from '../cairoDataTypes'; export * as cairo from './cairo'; -export { parseCalldataField } from './requestParser'; +// export { parseCalldataField } from './requestParser'; export * from './parser'; export class CallData { @@ -162,15 +161,7 @@ export class CallData { (acc, input) => isLen(input.name) && !isCairo1Type(input.type) ? acc - : acc.concat( - parseCalldataField({ - argsIterator, - input, - structs: this.structs, - enums: this.enums, - parser: this.parser, - }) - ), + : acc.concat(this.parser.parseRequestField(getNext(argsIterator), input.type)), [] as Calldata ); @@ -297,17 +288,7 @@ export class CallData { const parsed = outputs.flat().reduce((acc, output, idx) => { const propName = output.name ?? idx; - acc[propName] = responseParser({ - responseIterator, - output, - structs: this.structs, - enums: this.enums, - parsedResult: acc, - parser: this.parser, - }); - if (acc[propName] && acc[`${propName}_len`]) { - delete acc[`${propName}_len`]; - } + acc[propName] = this.parser.parseResponse(responseIterator, output.type); return acc; }, {} as Args); @@ -380,15 +361,8 @@ export class CallData { ): AllowArray { const typeCairoArray = Array.isArray(typeCairo) ? typeCairo : [typeCairo]; const responseIterator = response.flat()[Symbol.iterator](); - const decodedArray = typeCairoArray.map( - (typeParam) => - responseParser({ - responseIterator, - output: { name: '', type: typeParam }, - parser: this.parser, - structs: this.structs, - enums: this.enums, - }) as CallResult + const decodedArray = typeCairoArray.map((typeParam) => + this.parser.parseResponse(responseIterator, typeParam) ); return decodedArray.length === 1 ? decodedArray[0] : decodedArray; } diff --git a/src/utils/calldata/parser/interface.ts b/src/utils/calldata/parser/interface.ts index 429ebadd4..19ab463f6 100644 --- a/src/utils/calldata/parser/interface.ts +++ b/src/utils/calldata/parser/interface.ts @@ -32,14 +32,12 @@ export abstract class AbiParserInterface { * @param abiType AbiEntryType * @returns Parser function */ - public abstract getRequestParser(abiType: AbiEntryType): (val: unknown, type?: string) => any; + public abstract parseRequestField(requestContent: any, abiType: AbiEntryType): string[]; /** * Get response parser for the given abi type * @param abiType AbiEntryType * @returns Parser function */ - public abstract getResponseParser( - abiType: AbiEntryType - ): (responseIterator: Iterator, type?: string) => any; + public abstract parseResponse(responseIterator: Iterator, abiType: string): any; } diff --git a/src/utils/calldata/parser/parser-0-1.1.0.ts b/src/utils/calldata/parser/parser-0-1.1.0.ts index f678cde67..bef7c1479 100644 --- a/src/utils/calldata/parser/parser-0-1.1.0.ts +++ b/src/utils/calldata/parser/parser-0-1.1.0.ts @@ -37,22 +37,19 @@ export class AbiParser1 implements AbiParserInterface { this.parsingStrategies = [parsingStrategy, structStrategy]; } - public getRequestParser(abiType: AbiEntryType): (val: unknown, type?: string) => any { + public parseRequestField(requestData: any, abiType: AbiEntryType): string[] { // Check direct constructors first const strategyConstructorNum = this.parsingStrategies.findIndex( (strategy: ParsingStrategy) => strategy.constructors[abiType] ); if (strategyConstructorNum >= 0) { - return (val: unknown, type?: string) => { - const instance = this.parsingStrategies[strategyConstructorNum].constructors[abiType]( - val, - this.parsingStrategies, - type - ); - return instance.toApiRequest(); - }; + const instance = this.parsingStrategies[strategyConstructorNum].constructors[abiType]( + requestData, + this.parsingStrategies, + abiType + ); + return instance.toApiRequest(); } - // Check dynamic selectors const strategyDynamicNum = this.parsingStrategies.findIndex((strategy: ParsingStrategy) => { const dynamicSelectors = Object.entries(strategy.dynamicSelectors); @@ -69,34 +66,26 @@ export class AbiParser1 implements AbiParserInterface { const dynamicConstructor = this.parsingStrategies[strategyDynamicNum].constructors[selectorName]; if (dynamicConstructor) { - return (val: unknown, type?: string) => { - const instance = dynamicConstructor(val, this.parsingStrategies, type || abiType); - return instance.toApiRequest(); - }; + const instance = dynamicConstructor(requestData, this.parsingStrategies, abiType); + return instance.toApiRequest(); } } throw new Error(`Parser for ${abiType} not found`); } - public getResponseParser( - abiType: AbiEntryType - ): (responseIterator: Iterator, type?: string) => any { + public parseResponse(responseIterator: Iterator, abiType: string): any { // Check direct constructors first const strategyConstructorNum = this.parsingStrategies.findIndex( (strategy: ParsingStrategy) => strategy.constructors[abiType] && strategy.response[abiType] ); if (strategyConstructorNum >= 0) { - return (responseIterator: Iterator, type?: string) => { - const instance = this.parsingStrategies[strategyConstructorNum].constructors[abiType]( - responseIterator, - this.parsingStrategies, - type - ); - return this.parsingStrategies[strategyConstructorNum].response[abiType]( - instance, - this.parsingStrategies - ); - }; + const instance: CairoType = this.parsingStrategies[strategyConstructorNum].constructors[ + abiType + ](responseIterator, this.parsingStrategies); + return this.parsingStrategies[strategyConstructorNum].response[abiType]( + instance, + this.parsingStrategies + ); } // Check dynamic selectors const strategyDynamicNum = this.parsingStrategies.findIndex((strategy: ParsingStrategy) => { @@ -113,14 +102,12 @@ export class AbiParser1 implements AbiParserInterface { this.parsingStrategies[strategyDynamicNum].constructors[selectorName]; const responseParser = this.parsingStrategies[strategyDynamicNum].response[selectorName]; if (dynamicConstructor && responseParser) { - return (responseIterator: Iterator, type?: string) => { - const instance = dynamicConstructor( - responseIterator, - this.parsingStrategies, - type || abiType - ); - return responseParser(instance, this.parsingStrategies); - }; + const instance: CairoType = dynamicConstructor( + responseIterator, + this.parsingStrategies, + abiType + ); + return responseParser(instance, this.parsingStrategies); } } diff --git a/src/utils/calldata/parser/parser-2.0.0.ts b/src/utils/calldata/parser/parser-2.0.0.ts index c8c87a91b..f7b545de2 100644 --- a/src/utils/calldata/parser/parser-2.0.0.ts +++ b/src/utils/calldata/parser/parser-2.0.0.ts @@ -75,20 +75,18 @@ export class AbiParser2 implements AbiParserInterface { this.parsingStrategies = [parsingStrategy, structAndEnumStrategy]; } - public getRequestParser(abiType: AbiEntryType): (val: unknown, type?: string) => any { + public parseRequestField(requestData: any, abiType: AbiEntryType): string[] { // Check direct constructors first const strategyConstructorNum = this.parsingStrategies.findIndex( (strategy: ParsingStrategy) => strategy.constructors[abiType] ); if (strategyConstructorNum >= 0) { - return (val: unknown, type?: string) => { - const instance = this.parsingStrategies[strategyConstructorNum].constructors[abiType]( - val, - this.parsingStrategies, - type - ); - return instance.toApiRequest(); - }; + const instance = this.parsingStrategies[strategyConstructorNum].constructors[abiType]( + requestData, + this.parsingStrategies, + abiType + ); + return instance.toApiRequest(); } // Check dynamic selectors const strategyDynamicNum = this.parsingStrategies.findIndex((strategy: ParsingStrategy) => { @@ -106,35 +104,26 @@ export class AbiParser2 implements AbiParserInterface { const dynamicConstructor = this.parsingStrategies[strategyDynamicNum].constructors[selectorName]; if (dynamicConstructor) { - return (val: unknown, type?: string) => { - const instance = dynamicConstructor(val, this.parsingStrategies, type || abiType); - return instance.toApiRequest(); - }; + const instance = dynamicConstructor(requestData, this.parsingStrategies, abiType); + return instance.toApiRequest(); } } - throw new Error(`Parser for ${abiType} not found`); } - public getResponseParser( - abiType: AbiEntryType - ): (responseIterator: Iterator, type?: string) => any { + public parseResponse(responseIterator: Iterator, abiType: string): any { // Check direct constructors first const strategyConstructorNum = this.parsingStrategies.findIndex( (strategy: ParsingStrategy) => strategy.constructors[abiType] && strategy.response[abiType] ); if (strategyConstructorNum >= 0) { - return (responseIterator: Iterator, type?: string) => { - const instance = this.parsingStrategies[strategyConstructorNum].constructors[abiType]( - responseIterator, - this.parsingStrategies, - type - ); - return this.parsingStrategies[strategyConstructorNum].response[abiType]( - instance, - this.parsingStrategies - ); - }; + const instance: CairoType = this.parsingStrategies[strategyConstructorNum].constructors[ + abiType + ](responseIterator, this.parsingStrategies); + return this.parsingStrategies[strategyConstructorNum].response[abiType]( + instance, + this.parsingStrategies + ); } // Check dynamic selectors const strategyDynamicNum = this.parsingStrategies.findIndex((strategy: ParsingStrategy) => { @@ -151,14 +140,12 @@ export class AbiParser2 implements AbiParserInterface { this.parsingStrategies[strategyDynamicNum].constructors[selectorName]; const responseParser = this.parsingStrategies[strategyDynamicNum].response[selectorName]; if (dynamicConstructor && responseParser) { - return (responseIterator: Iterator, type?: string) => { - const instance = dynamicConstructor( - responseIterator, - this.parsingStrategies, - type || abiType - ); - return responseParser(instance, this.parsingStrategies); - }; + const instance: CairoType = dynamicConstructor( + responseIterator, + this.parsingStrategies, + abiType + ); + return responseParser(instance, this.parsingStrategies); } } diff --git a/src/utils/calldata/requestParser.ts b/src/utils/calldata/requestParser.ts deleted file mode 100644 index 2b0373d65..000000000 --- a/src/utils/calldata/requestParser.ts +++ /dev/null @@ -1,381 +0,0 @@ -import { - AbiEntry, - AbiEnums, - AbiStructs, - AllowArray, - BigNumberish, - CairoEnum, - ParsedStruct, - type CairoTypeEnum, -} from '../../types'; -import { CairoByteArray } from '../cairoDataTypes/byteArray'; -import { CairoBytes31 } from '../cairoDataTypes/bytes31'; -import { CairoFelt252 } from '../cairoDataTypes/felt'; -import { CairoFixedArray } from '../cairoDataTypes/fixedArray'; -import { CairoArray } from '../cairoDataTypes/array'; -import { CairoTuple } from '../cairoDataTypes/tuple'; -import { CairoUint256 } from '../cairoDataTypes/uint256'; -import { CairoUint512 } from '../cairoDataTypes/uint512'; -import { CairoUint8 } from '../cairoDataTypes/uint8'; -import { CairoUint16 } from '../cairoDataTypes/uint16'; -import { CairoUint64 } from '../cairoDataTypes/uint64'; -import { CairoUint96 } from '../cairoDataTypes/uint96'; -import { CairoUint128 } from '../cairoDataTypes/uint128'; -import { CairoInt8 } from '../cairoDataTypes/int8'; -import { CairoInt16 } from '../cairoDataTypes/int16'; -import { CairoInt32 } from '../cairoDataTypes/int32'; -import { CairoInt64 } from '../cairoDataTypes/int64'; -import { CairoInt128 } from '../cairoDataTypes/int128'; -import { isText, splitLongString } from '../shortString'; -import { isUndefined, isString } from '../typed'; -import { - felt, - getArrayType, - isTypeArray, - isTypeEnum, - isTypeEthAddress, - isTypeNonZero, - isTypeOption, - isTypeResult, - isTypeSecp256k1Point, - isTypeStruct, - isTypeTuple, -} from './cairo'; -import { CairoCustomEnum, CairoOption, CairoOptionVariant, CairoResult } from './enum'; -import { AbiParserInterface } from './parser'; -import { CairoTypeOption } from '../cairoDataTypes/cairoTypeOption'; -import { CairoTypeResult } from '../cairoDataTypes/cairoTypeResult'; -import { CairoStruct } from '../cairoDataTypes/cairoStruct'; -import { CairoTypeCustomEnum } from '../cairoDataTypes/cairoTypeCustomEnum'; -import { CairoNonZero } from '../cairoDataTypes/nonZero'; - -// TODO: cleanup implementations to work with unknown, instead of blind casting with 'as' - -/** - * parse base types - * @param type type from abi - * @param val value provided - * @returns string | string[] - */ -function parseBaseTypes({ - type, - val, - parser, -}: { - type: string; - val: unknown; - parser: AbiParserInterface; -}): AllowArray { - switch (true) { - case CairoUint256.isAbiType(type): - return parser.getRequestParser(type)(val); - case CairoUint512.isAbiType(type): - return parser.getRequestParser(type)(val); - case CairoUint8.isAbiType(type): - return parser.getRequestParser(type)(val); - case CairoUint16.isAbiType(type): - return parser.getRequestParser(type)(val); - case CairoUint64.isAbiType(type): - return parser.getRequestParser(type)(val); - case CairoUint96.isAbiType(type): - return parser.getRequestParser(type)(val); - case CairoUint128.isAbiType(type): - return parser.getRequestParser(type)(val); - case CairoInt8.isAbiType(type): - return parser.getRequestParser(type)(val); - case CairoInt16.isAbiType(type): - return parser.getRequestParser(type)(val); - case CairoInt32.isAbiType(type): - return parser.getRequestParser(type)(val); - case CairoInt64.isAbiType(type): - return parser.getRequestParser(type)(val); - case CairoInt128.isAbiType(type): - return parser.getRequestParser(type)(val); - case CairoBytes31.isAbiType(type): - return parser.getRequestParser(type)(val); - case isTypeSecp256k1Point(type): - return parser.getRequestParser(type)(val); - default: - // TODO: check but u32 should land here with rest of the simple types, at the moment handle as felt - return parser.getRequestParser(CairoFelt252.abiSelector)(val); - } -} - -/** - * Deep parse of the object that has been passed to the method - * - * @param element - element that needs to be parsed - * @param type - name of the method - * @param structs - structs from abi - * @param enums - enums from abi - * @return {string | string[]} - parsed arguments in format that contract is expecting - */ -function parseCalldataValue({ - element, - type, - structs, - enums, - parser, -}: { - element: unknown; - type: string; - structs: AbiStructs; - enums: AbiEnums; - parser: AbiParserInterface; -}): string | string[] { - if (element === undefined) { - throw Error(`Missing parameter for type ${type}`); - } - - // value is fixed array - if (CairoFixedArray.isAbiType(type)) { - return parser.getRequestParser(CairoFixedArray.dynamicSelector)(element, type); - } - - // value is CairoArray instance - if (element instanceof CairoArray) { - return element.toApiRequest(); - } - - // value is CairoTuple instance - if (element instanceof CairoTuple) { - return element.toApiRequest(); - } - - // value is Array - if (Array.isArray(element)) { - const result: string[] = []; - result.push(felt(element.length)); // Add length to array - const arrayType = getArrayType(type); - - return element.reduce((acc, it) => { - return acc.concat( - parseCalldataValue({ element: it, type: arrayType, structs, enums, parser }) - ); - }, result); - } - - // check if u256 C1v0 - if (CairoUint256.isAbiType(type)) { - return parser.getRequestParser(type)(element); - } - // check if u512 - if (CairoUint512.isAbiType(type)) { - return parser.getRequestParser(type)(element); - } - - // checking if the passed element is struct - if (structs[type]) { - if (isTypeEthAddress(type)) { - return parseBaseTypes({ type, val: element as BigNumberish, parser }); - } - - if (CairoByteArray.isAbiType(type)) { - return parser.getRequestParser(type)(element); - } - - // value is CairoStruct instance - if (element instanceof CairoStruct) { - return element.toApiRequest(); - } - - const { members } = structs[type]; - const subElement = element as any; - - return members.reduce((acc, it: AbiEntry) => { - return acc.concat( - parseCalldataValue({ - element: subElement[it.name], - type: it.type, - structs, - enums, - parser, - }) - ); - }, [] as string[]); - } - - // check if abi element is tuple - if (isTypeTuple(type)) { - // Create CairoTuple instance and use its toApiRequest method - const tuple = new CairoTuple(element, type, parser.parsingStrategies); - return tuple.toApiRequest(); - } - - // check if Enum - if (isTypeEnum(type, enums)) { - const { variants } = enums[type]; - // Option Enum - if (isTypeOption(type)) { - let myOption: CairoTypeOption; - if (element instanceof CairoOption) { - myOption = new CairoTypeOption(element, type, parser.parsingStrategies); - } else { - myOption = element as CairoTypeOption; - } - if (myOption.isVariantSome) { - const listTypeVariant = variants.find((variant) => variant.name === 'Some'); - if (isUndefined(listTypeVariant)) { - throw Error(`Error in abi : Option has no 'Some' variant.`); - } - return myOption.toApiRequest(); - } - return CairoOptionVariant.None.toString(); - } - // Result Enum - if (isTypeResult(type)) { - let myResult: CairoTypeResult; - if (element instanceof CairoResult) { - myResult = new CairoTypeResult(element, type, parser.parsingStrategies); - } else { - myResult = element as CairoTypeResult; - } - const variantName = myResult.isVariantOk ? 'Ok' : 'Err'; - const listTypeVariant = variants.find((variant) => variant.name === variantName); - if (isUndefined(listTypeVariant)) { - throw Error(`Error in abi : Result has no '${variantName}' variant.`); - } - return myResult.toApiRequest(); - } - // Custom Enum - let myEnum: CairoTypeCustomEnum; - if (element instanceof CairoCustomEnum) { - myEnum = new CairoTypeCustomEnum(element, enums[type], parser.parsingStrategies); - } else { - myEnum = element as CairoTypeCustomEnum; - } - return myEnum.toApiRequest(); - } - - if (isTypeNonZero(type)) { - const nonZero = new CairoNonZero(element, type, parser.parsingStrategies); - return nonZero.toApiRequest(); - } - - if (typeof element === 'object') { - throw Error(`Parameter ${element} do not align with abi parameter ${type}`); - } - return parseBaseTypes({ type, val: element, parser }); -} - -/** - * Parse one field of the calldata by using input field from the abi for that method - * - * @param argsIterator - Iterator for value of the field - * @param input - input(field) information from the abi that will be used to parse the data - * @param structs - structs from abi - * @param enums - enums from abi - * @return {string | string[]} - parsed arguments in format that contract is expecting - * - * @example - * const abiEntry = { name: 'test', type: 'struct' }; - * const abiStructs: AbiStructs = { - * struct: { - * members: [ - * { - * name: 'test_name', - * type: 'test_type', - * offset: 1, - * }, - * ], - * size: 2, - * name: 'cairo__struct', - * type: 'struct', - * }, - * }; - * - * const abiEnums: AbiEnums = { - * enum: { - * variants: [ - * { - * name: 'test_name', - * type: 'cairo_struct_variant', - * offset: 1, - * }, - * ], - * size: 2, - * name: 'test_cairo', - * type: 'enum', - * }, - * }; - * - * const args = [{ test_name: 'test' }]; - * const argsIterator = args[Symbol.iterator](); - * const parsedField = parseCalldataField( - * argsIterator, - * abiEntry, - * abiStructs, - * abiEnums - * ); - * // parsedField === ['1952805748'] - */ -export function parseCalldataField({ - argsIterator, - input, - structs, - enums, - parser, -}: { - argsIterator: Iterator; - input: AbiEntry; - structs: AbiStructs; - enums: AbiEnums; - parser: AbiParserInterface; -}): string | string[] { - const { name, type } = input; - let { value } = argsIterator.next(); - - switch (true) { - // Fixed array - case CairoFixedArray.isAbiType(type): - return parseCalldataValue({ element: value, type: input.type, structs, enums, parser }); - // Normal Array - case isTypeArray(type): - if (value instanceof CairoArray) { - return value.toApiRequest(); - } - if (!Array.isArray(value) && !isText(value)) { - throw Error(`ABI expected parameter ${name} to be array or long string, got ${value}`); - } - if (isString(value)) { - // long string match cairo felt* - value = splitLongString(value); - } - return parseCalldataValue({ element: value, type: input.type, structs, enums, parser }); - case isTypeNonZero(type): - return parseBaseTypes({ type: getArrayType(type), val: value, parser }); - case isTypeEthAddress(type): - return parseBaseTypes({ type, val: value, parser }); - // CairoTuple instance - case value instanceof CairoTuple: - return value.toApiRequest(); - // Tuple type - create CairoTuple from raw input - case isTypeTuple(type): { - const tuple = new CairoTuple(value, type, parser.parsingStrategies); - return tuple.toApiRequest(); - } - // Struct - case isTypeStruct(type, structs) || CairoUint256.isAbiType(type): - return parseCalldataValue({ - element: value as ParsedStruct | BigNumberish[] | CairoStruct, - type, - structs, - enums, - parser, - }); - - // Enums - case isTypeEnum(type, enums): - return parseCalldataValue({ - element: value as CairoTypeEnum | CairoEnum, - type, - structs, - enums, - parser, - }); - - // Felt or unhandled - default: - return parseBaseTypes({ type, val: value, parser }); - } -} diff --git a/src/utils/calldata/responseParser.ts b/src/utils/calldata/responseParser.ts deleted file mode 100644 index 1bf2b22cf..000000000 --- a/src/utils/calldata/responseParser.ts +++ /dev/null @@ -1,315 +0,0 @@ -/* eslint-disable no-case-declarations */ -import { - AbiEntry, - AbiEnums, - AbiStructs, - Args, - BigNumberish, - CairoEnum, - EventEntry, - ParsedStruct, -} from '../../types'; -import { CairoByteArray } from '../cairoDataTypes/byteArray'; -import { CairoBytes31 } from '../cairoDataTypes/bytes31'; -import { CairoFelt252 } from '../cairoDataTypes/felt'; -import { CairoFixedArray } from '../cairoDataTypes/fixedArray'; -import { CairoTuple } from '../cairoDataTypes/tuple'; -import { CairoUint256 } from '../cairoDataTypes/uint256'; -import { CairoUint512 } from '../cairoDataTypes/uint512'; -import { CairoUint8 } from '../cairoDataTypes/uint8'; -import { CairoUint16 } from '../cairoDataTypes/uint16'; -import { CairoUint64 } from '../cairoDataTypes/uint64'; -import { CairoUint96 } from '../cairoDataTypes/uint96'; -import { CairoUint128 } from '../cairoDataTypes/uint128'; -import { CairoInt8 } from '../cairoDataTypes/int8'; -import { CairoInt16 } from '../cairoDataTypes/int16'; -import { CairoInt32 } from '../cairoDataTypes/int32'; -import { CairoInt64 } from '../cairoDataTypes/int64'; -import { CairoInt128 } from '../cairoDataTypes/int128'; -import { - getArrayType, - isCairo1Type, - isLen, - isTypeArray, - isTypeEnum, - isTypeEthAddress, - isTypeNonZero, - isTypeOption, - isTypeResult, - isTypeSecp256k1Point, - isTypeTuple, -} from './cairo'; -import { CairoCustomEnum, CairoOption, CairoResult } from './enum'; -import { AbiParserInterface } from './parser/interface'; -import type { CairoStruct } from '../cairoDataTypes/cairoStruct'; -import { CairoTypeCustomEnum } from '../cairoDataTypes/cairoTypeCustomEnum'; -import { CairoTypeOption } from '../cairoDataTypes/cairoTypeOption'; -import { CairoTypeResult } from '../cairoDataTypes/cairoTypeResult'; -import { CairoBool } from '../cairoDataTypes'; - -/** - * Parse base types - * @param type type of element - * @param it iterator - * @returns bigint | boolean - */ -function parseBaseTypes(type: string, it: Iterator, parser: AbiParserInterface) { - let temp; - switch (true) { - case CairoBool.isAbiType(type): - const bool = CairoBool.factoryFromApiResponse(it); - return bool.toBoolean(); - case CairoUint256.isAbiType(type): - return parser.getResponseParser(type)(it); - case CairoUint512.isAbiType(type): - return parser.getResponseParser(type)(it); - case CairoUint8.isAbiType(type): - return parser.getResponseParser(type)(it); - case CairoUint16.isAbiType(type): - return parser.getResponseParser(type)(it); - case CairoUint64.isAbiType(type): - return parser.getResponseParser(type)(it); - case CairoUint96.isAbiType(type): - return parser.getResponseParser(type)(it); - case CairoUint128.isAbiType(type): - return parser.getResponseParser(type)(it); - case CairoInt8.isAbiType(type): - return parser.getResponseParser(type)(it); - case CairoInt16.isAbiType(type): - return parser.getResponseParser(type)(it); - case CairoInt32.isAbiType(type): - return parser.getResponseParser(type)(it); - case CairoInt64.isAbiType(type): - return parser.getResponseParser(type)(it); - case CairoInt128.isAbiType(type): - return parser.getResponseParser(type)(it); - case isTypeEthAddress(type): - temp = it.next().value; - return BigInt(temp); - case CairoBytes31.isAbiType(type): - return parser.getResponseParser(type)(it); - case isTypeSecp256k1Point(type): - return parser.getResponseParser(type)(it); - default: - // TODO: this is for all simple types felt and rest to BN, at the moment handle as felt - return parser.getResponseParser(CairoFelt252.abiSelector)(it); - } -} - -/** - * Parse of the response elements that are converted to Object (Struct) by using the abi - * - * @param responseIterator - iterator of the response - * @param element - element of the field {name: string, type: string} - * @param structs - structs from abi - * @param enums - * @return {any} - parsed arguments in format that contract is expecting - */ -function parseResponseValue( - responseIterator: Iterator, - element: { name: string; type: string }, - parser: AbiParserInterface, - structs?: AbiStructs, - enums?: AbiEnums -): BigNumberish | ParsedStruct | boolean | any[] | CairoEnum | CairoStruct { - if (element.type === '()') { - return {}; - } - // type uint256 struct (c1v2) - if (CairoUint256.isAbiType(element.type)) { - return parser.getResponseParser(element.type)(responseIterator); - } - // type uint512 struct - if (CairoUint512.isAbiType(element.type)) { - return parser.getResponseParser(element.type)(responseIterator); - } - // type ByteArray struct - if (CairoByteArray.isAbiType(element.type)) { - return parser.getResponseParser(element.type)(responseIterator); - } - - // type fixed-array - if (CairoFixedArray.isAbiType(element.type)) { - return parser.getResponseParser(CairoFixedArray.dynamicSelector)( - responseIterator, - element.type - ); - } - - // type c1 array - if (isTypeArray(element.type)) { - // eslint-disable-next-line no-case-declarations - const parsedDataArr: ( - | BigNumberish - | ParsedStruct - | boolean - | any[] - | CairoEnum - | CairoStruct - )[] = []; - const el: AbiEntry = { name: '', type: getArrayType(element.type) }; - const len = BigInt(responseIterator.next().value); // get length - while (parsedDataArr.length < len) { - parsedDataArr.push(parseResponseValue(responseIterator, el, parser, structs, enums)); - } - return parsedDataArr; - } - - // type NonZero - if (isTypeNonZero(element.type)) { - // eslint-disable-next-line no-case-declarations - // const parsedDataArr: (BigNumberish | ParsedStruct | boolean | any[] | CairoEnum)[] = []; - const el: AbiEntry = { name: '', type: getArrayType(element.type) }; - // parsedDataArr.push(); - return parseResponseValue(responseIterator, el, parser, structs, enums); - } - - // type struct - if (structs && element.type in structs && structs[element.type]) { - if (isTypeEthAddress(element.type)) { - return parseBaseTypes(element.type, responseIterator, parser); - } - return structs[element.type].members.reduce((acc, el) => { - acc[el.name] = parseResponseValue(responseIterator, el, parser, structs, enums); - return acc; - }, {} as any); - } - - // type Enum (only CustomEnum) - if (enums && element.type in enums && enums[element.type]) { - // Option - if (isTypeOption(element.type)) { - const myOption = new CairoTypeOption( - responseIterator, - element.type, - parser.parsingStrategies - ); - return myOption.decompose(parser.parsingStrategies) as CairoOption; - } - // Result - if (isTypeResult(element.type)) { - const myResult = new CairoTypeResult( - responseIterator, - element.type, - parser.parsingStrategies - ); - return myResult.decompose(parser.parsingStrategies) as CairoResult; - } - // Cairo custom Enum - const customEnum = new CairoTypeCustomEnum( - responseIterator, - enums[element.type], - parser.parsingStrategies - ); - return customEnum.decompose(parser.parsingStrategies) as CairoCustomEnum; - } - - // type tuple - if (isTypeTuple(element.type)) { - const tuple = new CairoTuple(responseIterator, element.type, parser.parsingStrategies); - return tuple.decompose(parser.parsingStrategies) as ParsedStruct; - } - - // TODO: duplicated, investigate why and what was an issue then de-duplicate - // type c1 array - if (isTypeArray(element.type)) { - // eslint-disable-next-line no-case-declarations - const parsedDataArr: ( - | BigNumberish - | ParsedStruct - | boolean - | any[] - | CairoEnum - | CairoStruct - )[] = []; - const el = { name: '', type: getArrayType(element.type) }; - const len = BigInt(responseIterator.next().value); // get length - while (parsedDataArr.length < len) { - parsedDataArr.push(parseResponseValue(responseIterator, el, parser, structs, enums)); - } - return parsedDataArr; - } - - // base type - return parseBaseTypes(element.type, responseIterator, parser); -} - -/** - * Parse elements of the response and structuring them into one field by using output property from the abi for that method - * - * @param responseIterator - iterator of the response - * @param output - output(field) information from the abi that will be used to parse the data - * @param structs - structs from abi - * @param parsedResult - * @return - parsed response corresponding to the abi structure of the field - */ -export default function responseParser({ - responseIterator, - output, - structs, - enums, - parsedResult, - parser, -}: { - responseIterator: Iterator; - output: AbiEntry | EventEntry; - structs: AbiStructs; - enums: AbiEnums; - parsedResult?: Args | ParsedStruct; - parser: AbiParserInterface; -}): any { - const { name, type } = output; - let temp; - - switch (true) { - case isLen(name): - temp = responseIterator.next().value; - return BigInt(temp); - - case (structs && type in structs) || isTypeTuple(type): - return parseResponseValue(responseIterator, output, parser, structs, enums); - - case enums && isTypeEnum(type, enums): - return parseResponseValue(responseIterator, output, parser, structs, enums); - - case CairoFixedArray.isAbiType(type): - return parseResponseValue(responseIterator, output, parser, structs, enums); - - case isTypeArray(type): - // C1 Array - if (isCairo1Type(type)) { - return parseResponseValue(responseIterator, output, parser, structs, enums); - } - // C0 Array - // eslint-disable-next-line no-case-declarations - const parsedDataArr: ( - | BigNumberish - | ParsedStruct - | boolean - | any[] - | CairoEnum - | CairoStruct - )[] = []; - if (parsedResult && parsedResult[`${name}_len`]) { - const arrLen = parsedResult[`${name}_len`] as number; - while (parsedDataArr.length < arrLen) { - parsedDataArr.push( - parseResponseValue( - responseIterator, - { name, type: output.type.replace('*', '') }, - parser, - structs, - enums - ) - ); - } - } - return parsedDataArr; - - case isTypeNonZero(type): - return parseResponseValue(responseIterator, output, parser, structs, enums); - - default: - return parseBaseTypes(type, responseIterator, parser); - } -} diff --git a/src/utils/calldata/validate.ts b/src/utils/calldata/validate.ts index 9ae90adbf..ed7a754ad 100644 --- a/src/utils/calldata/validate.ts +++ b/src/utils/calldata/validate.ts @@ -47,6 +47,7 @@ import { CairoTypeCustomEnum } from '../cairoDataTypes/cairoTypeCustomEnum'; import { CairoBool } from '../cairoDataTypes'; import { CairoEthAddress } from '../cairoDataTypes/ethAddress'; import { CairoNonZero } from '../cairoDataTypes/nonZero'; +import { hdParsingStrategy } from './parser'; // TODO: separate validate is redundant as CairoTypes are validated during construction. // TODO: This validate should provide added valie method base validate poiniting to incorect value for method, opt. using color coding @@ -448,9 +449,11 @@ export default function validateFields( case isTypeTuple(input.type): validateTuple(parameter, input); break; - case CairoNonZero.isAbiType(input.type): - CairoNonZero.validate(parameter, input.type); + case CairoNonZero.isAbiType(input.type): { + // eslint-disable-next-line @typescript-eslint/no-unused-vars + const tmp = new CairoNonZero(parameter, input.type, hdParsingStrategy); break; + } default: throw new Error( `Validate Unhandled: argument ${input.name}, type ${input.type}, value ${parameter}` diff --git a/src/utils/events/index.ts b/src/utils/events/index.ts index 18d72b9bf..b511cc006 100644 --- a/src/utils/events/index.ts +++ b/src/utils/events/index.ts @@ -16,7 +16,6 @@ import { import assert from '../assert'; import { isCairo1Abi } from '../calldata/cairo'; import { AbiParserInterface } from '../calldata/parser/interface'; -import responseParser from '../calldata/responseParser'; import { starkCurve } from '../ec'; import { addHexPrefix, utf8ToArray } from '../encode'; import { isUndefined, isObject } from '../typed'; @@ -229,25 +228,11 @@ export function parseEvents( (abiEvent as LegacyEvent).data; abiEventKeys.forEach((key) => { - parsedEvent[abiEvent.name as string][key.name] = responseParser({ - responseIterator: keysIter, - output: key, - structs: abiStructs, - enums: abiEnums, - parser, - parsedResult: parsedEvent[abiEvent.name as string], - }); + parsedEvent[abiEvent.name as string][key.name] = parser.parseResponse(keysIter, key.type); }); abiEventData.forEach((data) => { - parsedEvent[abiEvent.name as string][data.name] = responseParser({ - responseIterator: dataIter, - output: data, - structs: abiStructs, - enums: abiEnums, - parser, - parsedResult: parsedEvent[abiEvent.name as string], - }); + parsedEvent[abiEvent.name as string][data.name] = parser.parseResponse(dataIter, data.type); }); if ('block_hash' in currentEvent) parsedEvent.block_hash = currentEvent.block_hash; if ('block_number' in currentEvent) parsedEvent.block_number = currentEvent.block_number; diff --git a/src/utils/num.ts b/src/utils/num.ts index f03c32d31..0801d9761 100644 --- a/src/utils/num.ts +++ b/src/utils/num.ts @@ -403,7 +403,7 @@ export function isBigNumberish(input: unknown): input is BigNumberish { * @returns The next value from the iterator. * @throws Error if the iterator is done. */ -export function getNext(iterator: Iterator): string { +export function getNext(iterator: Iterator): any { const it = iterator.next(); if (it.done) throw new Error('Unexpected end of response'); return it.value; diff --git a/src/utils/typedData.ts b/src/utils/typedData.ts index 43c51b656..60e7f4194 100644 --- a/src/utils/typedData.ts +++ b/src/utils/typedData.ts @@ -404,12 +404,7 @@ export function encodeValue( case 'string': { if (revision === Revision.ACTIVE) { const byteArray = new CairoByteArray(data as string); - const elements = [ - byteArray.data.length, - ...byteArray.data, - byteArray.pending_word, - byteArray.pending_word_len, - ]; + const elements = byteArray.toApiRequest(); return [type, revisionConfiguration[revision].hashMethod(elements as BigNumberish[])]; } // else fall through to default return [type, getHex(data as string)]; From b2ce744a34b70b122bb33d9bc0696ab2ac27bfec Mon Sep 17 00:00:00 2001 From: PhilippeR26 Date: Mon, 13 Oct 2025 11:31:19 +0200 Subject: [PATCH 15/17] chore: remove validateFields --- __tests__/utils/calldata/validate.test.ts | 674 ------------------ __tests__/utils/secp256k1Point.test.ts | 4 +- src/utils/calldata/index.ts | 6 - src/utils/calldata/validate.ts | 465 ------------ .../guides/contracts/define_call_message.md | 4 +- 5 files changed, 3 insertions(+), 1150 deletions(-) delete mode 100644 __tests__/utils/calldata/validate.test.ts delete mode 100644 src/utils/calldata/validate.ts diff --git a/__tests__/utils/calldata/validate.test.ts b/__tests__/utils/calldata/validate.test.ts deleted file mode 100644 index 86c22484c..000000000 --- a/__tests__/utils/calldata/validate.test.ts +++ /dev/null @@ -1,674 +0,0 @@ -import validateFields from '../../../src/utils/calldata/validate'; -import { - CairoOption, - CairoResult, - ETH_ADDRESS, - Literal, - NON_ZERO_PREFIX, - Uint, -} from '../../../src'; -import { getFunctionAbi, getAbiEnums, getAbiStructs } from '../../factories/abi'; - -describe('validateFields', () => { - test('should throw an error if validation is unhandled', () => { - expect(() => { - validateFields(getFunctionAbi('test_test'), [true], getAbiStructs(), getAbiEnums()); - }).toThrow(new Error('Validate Unhandled: argument test, type test_test, value true')); - }); - - describe('felt validation', () => { - test('should return void if felt validation passes', () => { - const result = validateFields( - getFunctionAbi('felt'), - ['test'], - getAbiStructs(), - getAbiEnums() - ); - expect(result).toBeUndefined(); - }); - - test('should throw an error if felt is not the type of string, number or big int', () => { - const validateFelt = (params: unknown[]) => - validateFields(getFunctionAbi('felt'), params, getAbiStructs(), getAbiEnums()); - - const error = new Error( - 'Validate: arg test should be a felt typed as (String, Number or BigInt)' - ); - expect(() => validateFelt([{}])).toThrow(error); - expect(() => validateFelt([new Map()])).toThrow(error); - expect(() => validateFelt([true])).toThrow(error); - expect(() => validateFelt([])).toThrow(error); - expect(() => validateFelt([Symbol('test')])).toThrow(error); - }); - - test('should throw an error if felt is not in the range', () => { - const validateFelt = (params: unknown[]) => - validateFields(getFunctionAbi('felt'), params, getAbiStructs(), getAbiEnums()); - - const error = new Error( - 'Validate: arg test cairo typed felt should be in range [0, 2^252-1]' - ); - expect(() => validateFelt([-1])).toThrow(error); - expect(() => validateFelt([2n ** 252n])).toThrow(error); - }); - }); - - describe('bytes31 validation', () => { - test('should return void if bytes31 validation passes', () => { - const result = validateFields( - getFunctionAbi('core::bytes_31::bytes31'), - ['test'], - getAbiStructs(), - getAbiEnums() - ); - expect(result).toBeUndefined(); - }); - }); - - describe('Uint validation', () => { - test('should return void if Uint "u8" validation passes', () => { - const result = validateFields( - getFunctionAbi(Uint.u8), - [255n], - getAbiStructs(), - getAbiEnums() - ); - expect(result).toBeUndefined(); - }); - - test('should return void if Uint "u16" validation passes', () => { - const result = validateFields( - getFunctionAbi(Uint.u16), - [65535n], - getAbiStructs(), - getAbiEnums() - ); - expect(result).toBeUndefined(); - }); - - test('should return void if Uint "u32" validation passes', () => { - const result = validateFields( - getFunctionAbi(Uint.u32), - [4294967295n], - getAbiStructs(), - getAbiEnums() - ); - expect(result).toBeUndefined(); - }); - - test('should return void if Uint "u64" validation passes', () => { - const result = validateFields( - getFunctionAbi(Uint.u64), - [2n ** 64n - 1n], - getAbiStructs(), - getAbiEnums() - ); - expect(result).toBeUndefined(); - }); - - test('should return void if Uint "u128" validation passes', () => { - const result = validateFields( - getFunctionAbi(Uint.u128), - [2n ** 128n - 1n], - getAbiStructs(), - getAbiEnums() - ); - expect(result).toBeUndefined(); - }); - - test('should return void if Uint "u256" validation passes', () => { - const result = validateFields( - getFunctionAbi(Uint.u256), - [2n ** 256n - 1n], - getAbiStructs(), - getAbiEnums() - ); - expect(result).toBeUndefined(); - }); - - test('should return void if Uint "u512" validation passes', () => { - const result = validateFields( - getFunctionAbi(Uint.u512), - [2n ** 512n - 1n], - getAbiStructs(), - getAbiEnums() - ); - expect(result).toBeUndefined(); - }); - - test('should throw an error if parameter is too large', () => { - const validateUint = (params: unknown[]) => - validateFields(getFunctionAbi(Uint.u8), params, getAbiStructs(), getAbiEnums()); - - const error = new Error( - 'Validation: Parameter is too large to be typed as Number use (BigInt or String)' - ); - - expect(() => validateUint([Number.MAX_SAFE_INTEGER + 1])).toThrow(error); - }); - - test('should throw an error if parameter type is not valid', () => { - const validateUint = (params: unknown[]) => - validateFields(getFunctionAbi(Uint.u8), params, getAbiStructs(), getAbiEnums()); - - const getError = (param: any) => - new Error( - `Validate: arg test of cairo type ${Uint.u8} should be type (String, Number or BigInt), but is ${typeof param} ${param}.` - ); - - expect(() => validateUint([new Map()])).toThrow(getError(new Map())); - expect(() => validateUint([true])).toThrow(getError(true)); - expect(() => validateUint([{ test: 'test' }])).toThrow(getError({ test: 'test' })); - }); - - test('should throw an error if Uint "u8" is not in range', () => { - const validateUint = (params: unknown[]) => - validateFields(getFunctionAbi(Uint.u8), params, getAbiStructs(), getAbiEnums()); - - const error = new Error( - `Validate: arg test cairo typed ${Uint.u8} should be in range [0 - 255]` - ); - - expect(() => validateUint([-1])).toThrow(error); - expect(() => validateUint([256n])).toThrow(error); - }); - - test('should throw an error if Uint "u16" is not in range', () => { - const validateUint = (params: unknown[]) => - validateFields(getFunctionAbi(Uint.u16), params, getAbiStructs(), getAbiEnums()); - - const error = new Error( - `Validate: arg test cairo typed ${Uint.u16} should be in range [0, 65535]` - ); - - expect(() => validateUint([65536n])).toThrow(error); - }); - - test('should throw an error if Uint "u32" is not in range', () => { - const validateUint = (params: unknown[]) => - validateFields(getFunctionAbi(Uint.u32), params, getAbiStructs(), getAbiEnums()); - - const error = new Error( - `Validate: arg test cairo typed ${Uint.u32} should be in range [0, 4294967295]` - ); - - expect(() => validateUint([4294967296n])).toThrow(error); - }); - - test('should throw an error if Uint "u64" is not in range', () => { - const validateUint = (params: unknown[]) => - validateFields(getFunctionAbi(Uint.u64), params, getAbiStructs(), getAbiEnums()); - - const error = new Error( - `Validate: arg test cairo typed ${Uint.u64} should be in range [0, 2^64-1]` - ); - - expect(() => validateUint([2n ** 64n])).toThrow(error); - }); - - test('should throw an error if Uint "u128" is not in range', () => { - const validateUint = (params: unknown[]) => - validateFields(getFunctionAbi(Uint.u128), params, getAbiStructs(), getAbiEnums()); - - const error = new Error( - `Validate: arg test cairo typed ${Uint.u128} should be in range [0, 2^128-1]` - ); - - expect(() => validateUint([2n ** 128n])).toThrow(error); - }); - - test('should throw an error if Uint "u256" is not in range', () => { - const validateUint = (params: unknown[]) => - validateFields(getFunctionAbi(Uint.u256), params, getAbiStructs(), getAbiEnums()); - - const error = new Error('bigNumberish is bigger than UINT_256_MAX'); - - expect(() => validateUint([2n ** 256n])).toThrow(error); - }); - - test('should throw an error if Uint "u512" is not in range', () => { - const validateUint = (params: unknown[]) => - validateFields(getFunctionAbi(Uint.u512), params, getAbiStructs(), getAbiEnums()); - - const error = new Error('bigNumberish is bigger than UINT_512_MAX.'); - - expect(() => validateUint([2n ** 512n])).toThrow(error); - }); - - test('should throw an error if "Literal.ClassHash" is not in range', () => { - const validateUint = (params: unknown[]) => - validateFields(getFunctionAbi(Literal.ClassHash), params, getAbiStructs(), getAbiEnums()); - - const error = new Error( - `Validate: arg test cairo typed ${Literal.ClassHash} should be in range [0, 2^252-1]` - ); - - expect(() => validateUint([2n ** 252n])).toThrow(error); - }); - - test('should throw an error if "Literal.ContractAddress" is not in range', () => { - const validateUint = (params: unknown[]) => - validateFields( - getFunctionAbi(Literal.ContractAddress), - params, - getAbiStructs(), - getAbiEnums() - ); - - const error = new Error( - `Validate: arg test cairo typed ${Literal.ContractAddress} should be in range [0, 2^252-1]` - ); - - expect(() => validateUint([2n ** 252n])).toThrow(error); - }); - - test('should throw an error if "Literal.Secp256k1Point" is not in range', () => { - const validateUint = (params: unknown[]) => - validateFields( - getFunctionAbi(Literal.Secp256k1Point), - params, - getAbiStructs(), - getAbiEnums() - ); - - const error = new Error( - `Validate: arg test must be ${Literal.Secp256k1Point} : a valid 512 bits secp256k1 point.` - ); - - expect(() => validateUint([2n ** 512n])).toThrow(error); - }); - }); - - describe('Boolean validation', () => { - test('should return void if boolean validation passes', () => { - const result = validateFields( - getFunctionAbi('core::bool'), - [true], - getAbiStructs(), - getAbiEnums() - ); - expect(result).toBeUndefined(); - }); - - test('should throw an error if boolean validation fails', () => { - const validateBool = (params: unknown[]) => - validateFields(getFunctionAbi('core::bool'), params, getAbiStructs(), getAbiEnums()); - - const error = new Error( - `Validate: arg test of cairo type core::bool should be type (Boolean)` - ); - - expect(() => validateBool(['bool', 22, Symbol('test'), BigInt(2)])).toThrow(error); - }); - }); - - describe('Boolean validation', () => { - test('should return void if boolean validation passes', () => { - const result = validateFields( - getFunctionAbi('core::bool'), - [true], - getAbiStructs(), - getAbiEnums() - ); - expect(result).toBeUndefined(); - }); - - test('should throw an error if boolean validation fails', () => { - const validateBool = (params: unknown[]) => - validateFields(getFunctionAbi('core::bool'), params, getAbiStructs(), getAbiEnums()); - - const error = new Error( - `Validate: arg test of cairo type core::bool should be type (Boolean)` - ); - - expect(() => validateBool(['bool'])).toThrow(error); - }); - }); - - describe('ByteArray validation', () => { - test('should return void if byte array validation passes', () => { - const result = validateFields( - getFunctionAbi('core::byte_array::ByteArray'), - ['byte_array'], - getAbiStructs(), - getAbiEnums() - ); - expect(result).toBeUndefined(); - }); - }); - - describe('Tuple validation', () => { - test('should return void if tuple validation passes', () => { - const result = validateFields( - getFunctionAbi('(core::bool, core::bool)'), - [{ min: true, max: true }], - getAbiStructs(), - getAbiEnums() - ); - expect(result).toBeUndefined(); - }); - - test('should throw an error if tupple validation fails', () => { - const error = new Error(`Validate: arg test should be a tuple (defined as object or array)`); - - expect(() => - validateFields( - getFunctionAbi('(core::bool, core::bool)'), - [], - getAbiStructs(), - getAbiEnums() - ) - ).toThrow(error); - }); - }); - - describe('Struct validation', () => { - test('should return void if struct validation passes for common struct', () => { - const result = validateFields( - getFunctionAbi('struct'), - [{ test_name: 'test' }], - getAbiStructs(), - getAbiEnums() - ); - - expect(result).toBeUndefined(); - }); - - test('should return void if struct validation passes for Uint 256 or 512', () => { - const abiStructs256 = { - [Uint.u256]: getAbiStructs().struct, - }; - const result256 = validateFields( - getFunctionAbi(Uint.u256), - [2n ** 256n - 1n], - abiStructs256, - getAbiEnums() - ); - - const abiStructs512 = { - [Uint.u512]: getAbiStructs().struct, - }; - const result512 = validateFields( - getFunctionAbi(Uint.u512), - [2n ** 512n - 1n], - abiStructs512, - getAbiEnums() - ); - - expect(result256).toBeUndefined(); - expect(result512).toBeUndefined(); - }); - - test('should return void if struct validation passes for EthAddress', () => { - const abiStructs = { - [ETH_ADDRESS]: getAbiStructs().struct, - }; - const result = validateFields(getFunctionAbi(ETH_ADDRESS), [1n], abiStructs, getAbiEnums()); - - expect(result).toBeUndefined(); - }); - - test('should throw an error for EthAddress struct if type is not a BigNumberish', () => { - const error = new Error('Invalid input: objects are not supported for EthAddress'); - - expect(() => { - const abiStructs = { - [ETH_ADDRESS]: getAbiStructs().struct, - }; - - validateFields(getFunctionAbi(ETH_ADDRESS), [{ test: 1 }], abiStructs, getAbiEnums()); - }).toThrow(error); - }); - - test('should throw an error for EthAddress struct if it is not in range', () => { - const error = new Error(`Validate: EthAddress arg should be in range [0, 2^160-1]`); - - expect(() => { - const abiStructs = { - [ETH_ADDRESS]: getAbiStructs().struct, - }; - - validateFields(getFunctionAbi(ETH_ADDRESS), [2n ** 160n], abiStructs, getAbiEnums()); - }).toThrow(error); - }); - - test('should throw an error if arg is not an JS object', () => { - const error = new Error( - 'Validate: arg test is cairo type struct (struct), and should be defined as a js object (not array)' - ); - - expect(() => - validateFields(getFunctionAbi('struct'), [2], getAbiStructs(), getAbiEnums()) - ).toThrow(error); - }); - - test('should throw an error if arg property name does not exist in the struct members', () => { - const error = new Error('Validate: arg test should have a property test_name'); - - expect(() => - validateFields( - getFunctionAbi('struct'), - [{ example: 'test' }], - getAbiStructs(), - getAbiEnums() - ) - ).toThrow(error); - }); - }); - - describe('Enum validation', () => { - test('should return void if enum validation passes for custom enum', () => { - const result = validateFields( - getFunctionAbi('enum'), - [{ variant: 'test', activeVariant: 'test' }], - getAbiStructs(), - getAbiEnums() - ); - - expect(result).toBeUndefined(); - }); - - test('should return void if enum validation passes for type option', () => { - const enumOption = 'core::option::Option::core::bool'; - - const abiEnums = { - [enumOption]: getAbiEnums().enum, - }; - const result = validateFields( - getFunctionAbi(enumOption), - [new CairoOption(0, 'content')], - getAbiStructs(), - abiEnums - ); - - expect(result).toBeUndefined(); - }); - - test('should return void if enum validation passes for type result', () => { - const enumResult = 'core::result::Result::bool'; - - const abiEnums = { - [enumResult]: getAbiEnums().enum, - }; - const result = validateFields( - getFunctionAbi(enumResult), - [new CairoResult(0, 'content')], - getAbiStructs(), - abiEnums - ); - - expect(result).toBeUndefined(); - }); - - test('should throw an error if arg is not an JS object', () => { - const error = new Error( - 'Validate: arg test is cairo type Enum (enum), and should be defined as a js object (not array)' - ); - - expect(() => - validateFields(getFunctionAbi('enum'), [2], getAbiStructs(), getAbiEnums()) - ).toThrow(error); - }); - - test('should throw an error if arg is not an enum', () => { - const error = new Error( - 'Validate Enum: argument test, type enum, value received "[object Object]", is not an Enum.' - ); - - expect(() => - validateFields( - getFunctionAbi('enum'), - [{ example: 'test' }], - getAbiStructs(), - getAbiEnums() - ) - ).toThrow(error); - }); - }); - - describe('NonZero validation', () => { - test('should return void if non zero validation passes for felt', () => { - const result = validateFields( - getFunctionAbi(`${NON_ZERO_PREFIX}`), - [1n], - getAbiStructs(), - getAbiEnums() - ); - - expect(result).toBeUndefined(); - }); - - test('should return void if non zero validation passes for Uint', () => { - const result = validateFields( - getFunctionAbi(`${NON_ZERO_PREFIX}<${Uint.u8}>`), - [1n], - getAbiStructs(), - getAbiEnums() - ); - - expect(result).toBeUndefined(); - }); - - test('should throw an error if type is not authorized', () => { - const error = new Error('Validate: core::bool type is not authorized for NonZero type.'); - - expect(() => - validateFields( - getFunctionAbi(`${NON_ZERO_PREFIX}`), - [true], - getAbiStructs(), - getAbiEnums() - ) - ).toThrow(error); - }); - - test('should throw an error if value 0 is provided for felt252 type', () => { - const error = new Error('ValidateValue: value 0 is not authorized in NonZero type.'); - - expect(() => - validateFields( - getFunctionAbi(`${NON_ZERO_PREFIX}`), - [0], - getAbiStructs(), - getAbiEnums() - ) - ).toThrow(error); - }); - - test('should throw an error if value 0 is provided for uint256 type', () => { - const error = new Error('ValidateValue: value 0 is not authorized in NonZero type.'); - - expect(() => - validateFields( - getFunctionAbi(`${NON_ZERO_PREFIX}<${Uint.u256}>`), - [0], - getAbiStructs(), - getAbiEnums() - ) - ).toThrow(error); - }); - - test('should throw an error if value 0 is provided for any uint type', () => { - const error = new Error('ValidateValue: value 0 is not authorized in NonZero type.'); - - expect(() => - validateFields( - getFunctionAbi(`${NON_ZERO_PREFIX}<${Uint.u8}>`), - [0], - getAbiStructs(), - getAbiEnums() - ) - ).toThrow(error); - }); - }); - - describe('Array validation', () => { - test('should return void if array validation passes for each type', () => { - const validateArray = (type: string, param: unknown) => - validateFields(getFunctionAbi(type), [[param]], getAbiStructs(), getAbiEnums()); - - expect(validateArray('core::array::Array::', true)).toBeUndefined(); - expect(validateArray('core::array::Array::', 'test')).toBeUndefined(); - expect(validateArray('core::array::Span::', true)).toBeUndefined(); - expect(validateArray('core::array::Array::', 'felt')).toBeUndefined(); - expect(validateArray(`core::array::Array::<${Uint.u8}>`, 2n)).toBeUndefined(); - expect(validateArray('core::array::Array::', 'felt')).toBeUndefined(); - expect( - validateArray('core::array::Array::<(core::bool, core::bool)>', { min: true, max: true }) - ).toBeUndefined(); - expect( - validateArray('core::array::Array::>', [true]) - ).toBeUndefined(); - - const enumArrayResult = 'core::array::Array::'; - - const abiEnums = { 'core::result::Result::core::bool': getAbiEnums().enum }; - const validatedArrayEnum = validateFields( - getFunctionAbi(enumArrayResult), - [[new CairoResult(0, 'content')]], - getAbiStructs(), - abiEnums - ); - - expect(validatedArrayEnum).toBeUndefined(); - - const structArrayEth = `core::array::Array::<${ETH_ADDRESS}>`; - const abiStructs = { [ETH_ADDRESS]: getAbiStructs().struct }; - - const validatedArrayStruct = validateFields( - getFunctionAbi(structArrayEth), - [[1n]], - abiStructs, - getAbiEnums() - ); - - expect(validatedArrayStruct).toBeUndefined(); - }); - - test('should throw an error if parameter is not an array', () => { - expect(() => { - validateFields( - getFunctionAbi('core::array::Span::'), - [true], - getAbiStructs(), - getAbiEnums() - ); - }).toThrow(new Error('Validate: arg test should be an Array')); - }); - - test('should throw an error if array validation is unhandled', () => { - expect(() => { - validateFields( - getFunctionAbi('core::array::Span::'), - [[true]], - getAbiStructs(), - getAbiEnums() - ); - }).toThrow( - new Error( - 'Validate Unhandled: argument test, type core::array::Span::, value true' - ) - ); - }); - }); -}); diff --git a/__tests__/utils/secp256k1Point.test.ts b/__tests__/utils/secp256k1Point.test.ts index 2df6bb24e..73c0251c9 100644 --- a/__tests__/utils/secp256k1Point.test.ts +++ b/__tests__/utils/secp256k1Point.test.ts @@ -14,9 +14,7 @@ describe('secp256k1Point cairo type test', () => { myCallDataAccount.compile('constructor', { public_key: point, }); - }).toThrow( - 'Validate: arg public_key must be core::starknet::secp256k1::Secp256k1Point : a valid 512 bits secp256k1 point.' - ); + }).toThrow('input is bigger than SECP256K1_POINT_MAX'); }); test('secp256k1Point compile', () => { diff --git a/src/utils/calldata/index.ts b/src/utils/calldata/index.ts index 9b9a08454..89381817e 100644 --- a/src/utils/calldata/index.ts +++ b/src/utils/calldata/index.ts @@ -37,7 +37,6 @@ import { hdParsingStrategy } from './parser/parsingStrategy'; import { AbiParserInterface } from './parser/interface'; import orderPropsByAbi from './propertyOrder'; // import { parseCalldataField } from './requestParser'; -import validateFields from './validate'; import { CairoTypeOption } from '../cairoDataTypes/cairoTypeOption'; import { CairoTypeResult } from '../cairoDataTypes/cairoTypeResult'; import { CairoStruct } from '../cairoDataTypes/cairoStruct'; @@ -107,9 +106,6 @@ export class CallData { `Invalid number of arguments, expected ${inputsLength} arguments, but got ${args.length}` ); } - - // validate parameters - validateFields(abiMethod, args, this.structs, this.enums); } /** @@ -151,8 +147,6 @@ export class CallData { parserStrategy ); args = Object.values(orderedObject); - // // validate array elements to abi - validateFields(abiMethod, args, this.structs, this.enums); } const argsIterator = args[Symbol.iterator](); diff --git a/src/utils/calldata/validate.ts b/src/utils/calldata/validate.ts deleted file mode 100644 index ed7a754ad..000000000 --- a/src/utils/calldata/validate.ts +++ /dev/null @@ -1,465 +0,0 @@ -import { - AbiEntry, - AbiEnums, - AbiStructs, - BigNumberish, - FunctionAbi, - Literal, - Uint, -} from '../../types'; -import assert from '../assert'; -import { CairoByteArray } from '../cairoDataTypes/byteArray'; -import { CairoBytes31 } from '../cairoDataTypes/bytes31'; -import { CairoFixedArray } from '../cairoDataTypes/fixedArray'; -import { CairoArray } from '../cairoDataTypes/array'; -import { CairoTuple } from '../cairoDataTypes/tuple'; -import { CairoInt8 } from '../cairoDataTypes/int8'; -import { CairoInt16 } from '../cairoDataTypes/int16'; -import { CairoInt32 } from '../cairoDataTypes/int32'; -import { CairoInt64 } from '../cairoDataTypes/int64'; -import { CairoInt128 } from '../cairoDataTypes/int128'; -import { CairoUint256 } from '../cairoDataTypes/uint256'; -import { CairoUint512 } from '../cairoDataTypes/uint512'; -import { CairoSecp256k1Point } from '../cairoDataTypes/secp256k1Point'; -import { isHex, toBigInt } from '../num'; -import { isLongText } from '../shortString'; -import { isNumber, isString, isBigInt, isObject } from '../typed'; -import { - getArrayType, - isLen, - isTypeArray, - isTypeBool, - isTypeEnum, - isTypeEthAddress, - isTypeFelt, - isTypeLiteral, - isTypeOption, - isTypeResult, - isTypeStruct, - isTypeTuple, - isTypeUint, -} from './cairo'; -import { CairoTypeOption } from '../cairoDataTypes/cairoTypeOption'; -import { CairoCustomEnum, CairoOption, CairoResult } from './enum'; -import { CairoTypeResult } from '../cairoDataTypes/cairoTypeResult'; -import { CairoStruct } from '../cairoDataTypes/cairoStruct'; -import { CairoTypeCustomEnum } from '../cairoDataTypes/cairoTypeCustomEnum'; -import { CairoBool } from '../cairoDataTypes'; -import { CairoEthAddress } from '../cairoDataTypes/ethAddress'; -import { CairoNonZero } from '../cairoDataTypes/nonZero'; -import { hdParsingStrategy } from './parser'; - -// TODO: separate validate is redundant as CairoTypes are validated during construction. -// TODO: This validate should provide added valie method base validate poiniting to incorect value for method, opt. using color coding -// TODO: Something like: store_message(a -> *INVALID JS TYPE*, b, c -> *MISSING REQUIRED ARG*) - -const validateFelt = (parameter: any, input: AbiEntry) => { - assert( - isString(parameter) || isNumber(parameter) || isBigInt(parameter), - `Validate: arg ${input.name} should be a felt typed as (String, Number or BigInt)` - ); - if (isString(parameter) && !isHex(parameter)) return; // shortstring - const param = BigInt(parameter.toString(10)); - assert( - // from : https://github.com/starkware-libs/starknet-specs/blob/29bab650be6b1847c92d4461d4c33008b5e50b1a/api/starknet_api_openrpc.json#L1266 - param >= 0n && param <= 2n ** 252n - 1n, - `Validate: arg ${input.name} cairo typed ${input.type} should be in range [0, 2^252-1]` - ); -}; - -const validateUint = (parameter: any, input: AbiEntry) => { - if (isNumber(parameter)) { - assert( - parameter <= Number.MAX_SAFE_INTEGER, - 'Validation: Parameter is too large to be typed as Number use (BigInt or String)' - ); - } - assert( - isString(parameter) || - isNumber(parameter) || - isBigInt(parameter) || - (isObject(parameter) && 'low' in parameter && 'high' in parameter) || - (isObject(parameter) && - ['limb0', 'limb1', 'limb2', 'limb3'].every((key) => key in parameter)), - `Validate: arg ${input.name} of cairo type ${ - input.type - } should be type (String, Number or BigInt), but is ${typeof parameter} ${parameter}.` - ); - let param: bigint; - switch (input.type) { - case Uint.u256: - param = new CairoUint256(parameter as BigNumberish).toBigInt(); - break; - case Uint.u512: - param = new CairoUint512(parameter as BigNumberish).toBigInt(); - break; - default: - param = toBigInt(parameter as BigNumberish); - } - switch (input.type) { - case Uint.u8: - assert( - param >= 0n && param <= 255n, - `Validate: arg ${input.name} cairo typed ${input.type} should be in range [0 - 255]` - ); - break; - - case Uint.u16: - assert( - param >= 0n && param <= 65535n, - `Validate: arg ${input.name} cairo typed ${input.type} should be in range [0, 65535]` - ); - break; - - case Uint.u32: - assert( - param >= 0n && param <= 4294967295n, - `Validate: arg ${input.name} cairo typed ${input.type} should be in range [0, 4294967295]` - ); - break; - - case Uint.u64: - assert( - param >= 0n && param <= 2n ** 64n - 1n, - `Validate: arg ${input.name} cairo typed ${input.type} should be in range [0, 2^64-1]` - ); - break; - - case Uint.u128: - assert( - param >= 0n && param <= 2n ** 128n - 1n, - `Validate: arg ${input.name} cairo typed ${input.type} should be in range [0, 2^128-1]` - ); - break; - - case Uint.u256: - assert( - param >= 0n && param <= 2n ** 256n - 1n, - `Validate: arg ${input.name} is ${input.type} should be in range 0 - 2^256-1` - ); - break; - - case Uint.u512: - assert( - CairoUint512.is(param), - `Validate: arg ${input.name} is ${input.type} should be in range 0 - 2^512-1` - ); - break; - - case Literal.ClassHash: - assert( - // from : https://github.com/starkware-libs/starknet-specs/blob/29bab650be6b1847c92d4461d4c33008b5e50b1a/api/starknet_api_openrpc.json#L1670 - param >= 0n && param <= 2n ** 252n - 1n, - `Validate: arg ${input.name} cairo typed ${input.type} should be in range [0, 2^252-1]` - ); - break; - - case Literal.ContractAddress: - assert( - // from : https://github.com/starkware-libs/starknet-specs/blob/29bab650be6b1847c92d4461d4c33008b5e50b1a/api/starknet_api_openrpc.json#L1245 - param >= 0n && param <= 2n ** 252n - 1n, - `Validate: arg ${input.name} cairo typed ${input.type} should be in range [0, 2^252-1]` - ); - break; - case Literal.Secp256k1Point: { - assert( - CairoSecp256k1Point.is(param), - `Validate: arg ${input.name} must be ${input.type} : a valid 512 bits secp256k1 point.` - ); - break; - } - case Literal.U96: { - assert( - param >= 0n && param <= 2n ** 96n - 1n, - `Validate: arg ${input.name} must be ${input.type} : a 96 bits number.` - ); - break; - } - - default: - break; - } -}; - -const validateBool = (parameter: any, input: AbiEntry) => { - assert( - CairoBool.is(parameter), - `Validate: arg ${input.name} of cairo type ${input.type} should be type (Boolean)` - ); -}; - -const validateStruct = (parameter: any, input: AbiEntry, structs: AbiStructs) => { - // c1v2 uint256 or u512 in struct - if (input.type === Uint.u256 || input.type === Uint.u512) { - validateUint(parameter, input); - return; - } - - if (isTypeEthAddress(input.type)) { - CairoEthAddress.validate(parameter); - return; - } - - if (isTypeStruct(input.type, structs) && parameter instanceof CairoStruct) { - return; // CairoStruct - } - - assert( - isObject(parameter), - `Validate: arg ${input.name} is cairo type struct (${input.type}), and should be defined as a js object (not array)` - ); - - // shallow struct validation, only first depth level - structs[input.type].members.forEach(({ name }) => { - assert( - Object.keys(parameter).includes(name), - `Validate: arg ${input.name} should have a property ${name}` - ); - }); -}; - -const validateEnum = (parameter: any, input: AbiEntry) => { - // If parameter is a CairoTypeCustomEnum instance, skip validation (it's already validated) - if (parameter instanceof CairoTypeCustomEnum) { - return; - } - assert( - isObject(parameter), - `Validate: arg ${input.name} is cairo type Enum (${input.type}), and should be defined as a js object (not array)` - ); - - const methodsKeys = Object.getOwnPropertyNames(Object.getPrototypeOf(parameter)); - const keys = [...Object.getOwnPropertyNames(parameter), ...methodsKeys]; - if (isTypeOption(input.type) && parameter instanceof CairoTypeOption) { - return; // CairoTypeOption Enum - } - if (isTypeOption(input.type) && parameter instanceof CairoOption) { - return; // CairoOption Enum - } - if (isTypeResult(input.type) && parameter instanceof CairoTypeResult) { - return; // CairoTypeOption Enum - } - if (isTypeResult(input.type) && parameter instanceof CairoResult) { - return; // CairoResult Enum - } - if (parameter instanceof CairoCustomEnum) { - return; - } - if (keys.includes('variant') && keys.includes('activeVariant')) { - return; // Custom Enum - } - throw new Error( - `Validate Enum: argument ${input.name}, type ${input.type}, value received "${parameter}", is not an Enum.` - ); -}; - -const validateTuple = (parameter: any, input: AbiEntry) => { - // If parameter is a CairoTuple instance, skip validation (it's already validated) - if (parameter instanceof CairoTuple) { - return; - } - - assert( - isObject(parameter) || Array.isArray(parameter), - `Validate: arg ${input.name} should be a tuple (defined as object or array)` - ); - // todo: skip tuple structural validation for now -}; - -const validateArray = ( - parameterArray: Array | Record | CairoFixedArray | CairoArray | CairoTuple, - input: AbiEntry, - structs: AbiStructs, - enums: AbiEnums -) => { - // If parameterArray is a CairoFixedArray, CairoArray, or CairoTuple instance, skip validation (it's already validated) - if ( - parameterArray instanceof CairoFixedArray || - parameterArray instanceof CairoArray || - parameterArray instanceof CairoTuple - ) { - return; - } - - const isNormalArray = isTypeArray(input.type); - const baseType = isNormalArray - ? getArrayType(input.type) - : CairoFixedArray.getFixedArrayType(input.type); - - // Long text (special case when parameter is not an array but long text) - if (isNormalArray && isTypeFelt(baseType) && isLongText(parameterArray)) { - return; - } - let parameter: Array = []; - if (isNormalArray) { - assert(Array.isArray(parameterArray), `Validate: arg ${input.name} should be an Array`); - parameter = parameterArray; - } else { - // fixedArray - switch (true) { - case Array.isArray(parameterArray): - // the type cast is just for the documentation generation, TS narrowing works as expected - parameter = parameterArray as any; - break; - case typeof parameterArray === 'object': - parameter = Object.values(parameterArray); - break; - default: - throw new Error(`Validate: arg ${input.name} should be an Array or an object.`); - } - } - - switch (true) { - case isTypeFelt(baseType): - parameter.forEach((param: BigNumberish) => validateFelt(param, input)); - break; - case isTypeTuple(baseType): - parameter.forEach((it: any) => validateTuple(it, { name: input.name, type: baseType })); - break; - - case isTypeArray(baseType): - parameter.forEach((param: any) => - validateArray(param, { name: '', type: baseType }, structs, enums) - ); - break; - case isTypeStruct(baseType, structs): - parameter.forEach((it: any) => - validateStruct(it, { name: input.name, type: baseType }, structs) - ); - break; - case isTypeEnum(baseType, enums): - parameter.forEach((it: any) => validateEnum(it, { name: input.name, type: baseType })); - break; - case isTypeUint(baseType) || isTypeLiteral(baseType): - parameter.forEach((param: BigNumberish) => validateUint(param, { name: '', type: baseType })); - break; - case isTypeBool(baseType): - parameter.forEach((param: BigNumberish) => validateBool(param, input)); - break; - default: - throw new Error( - `Validate Unhandled: argument ${input.name}, type ${input.type}, value ${parameter}` - ); - } -}; - -/** - * Validate cairo contract method arguments - * Flow: Determine type from abi and than validate against parameter - * - * @param {FunctionAbi} abiMethod - Abi method. - * @param {any[]} args - Arguments. - * @param {AbiStructs} structs - ABI structs. - * @param {AbiEnums} enums - ABI enums. - * @returns {void} - Return void if validation passes - * - * @example - * const functionAbi: FunctionAbi = { - * inputs: [{ name: 'test', type: 'felt' }], - * name: 'test', - * outputs: [{ name: 'test', type: 'felt' }], - * stateMutability: 'view', - * type: 'function', - * }; - * - * const abiStructs: AbiStructs = { - * abi_structs: { - * members: [ - * { - * name: 'test_name', - * type: 'test_type', - * offset: 1, - * }, - * ], - * size: 2, - * name: 'cairo_event_struct', - * type: 'struct', - * }, - * }; - * - * const abiEnums: AbiEnums = { - * abi_enums: { - * variants: [ - * { - * name: 'test_name', - * type: 'cairo_event_struct_variant', - * offset: 1, - * }, - * ], - * size: 2, - * name: 'test_cairo_event', - * type: 'enum', - * }, - * }; - * - * validateFields(functionAbi, [1n], abiStructs, abiEnums); // Returns void since validation passes - * validateFields(functionAbi, [{}], abiStructs, abiEnums); // Throw an error because parameters are not valid - */ -export default function validateFields( - abiMethod: FunctionAbi, - args: any[], - structs: AbiStructs, - enums: AbiEnums -): void { - abiMethod.inputs.reduce((acc, input) => { - const parameter = args[acc]; - - switch (true) { - case isLen(input.name): - return acc; - case isTypeFelt(input.type): - validateFelt(parameter, input); - break; - case CairoBytes31.isAbiType(input.type): - CairoBytes31.validate(parameter); - break; - case isTypeUint(input.type) || isTypeLiteral(input.type): - validateUint(parameter, input); - break; - case isTypeBool(input.type): - validateBool(parameter, input); - break; - case CairoByteArray.isAbiType(input.type): - CairoByteArray.validate(parameter); - break; - case CairoInt8.isAbiType(input.type): - CairoInt8.validate(parameter); - break; - case CairoInt16.isAbiType(input.type): - CairoInt16.validate(parameter); - break; - case CairoInt32.isAbiType(input.type): - CairoInt32.validate(parameter); - break; - case CairoInt64.isAbiType(input.type): - CairoInt64.validate(parameter); - break; - case CairoInt128.isAbiType(input.type): - CairoInt128.validate(parameter); - break; - case isTypeArray(input.type) || CairoFixedArray.isAbiType(input.type): - validateArray(parameter, input, structs, enums); - break; - case isTypeStruct(input.type, structs): - validateStruct(parameter, input, structs); - break; - case isTypeEnum(input.type, enums): - validateEnum(parameter, input); - break; - case isTypeTuple(input.type): - validateTuple(parameter, input); - break; - case CairoNonZero.isAbiType(input.type): { - // eslint-disable-next-line @typescript-eslint/no-unused-vars - const tmp = new CairoNonZero(parameter, input.type, hdParsingStrategy); - break; - } - default: - throw new Error( - `Validate Unhandled: argument ${input.name}, type ${input.type}, value ${parameter}` - ); - } - - return acc + 1; - }, 0); -} diff --git a/www/docs/guides/contracts/define_call_message.md b/www/docs/guides/contracts/define_call_message.md index 7924b90bd..6f330c01d 100644 --- a/www/docs/guides/contracts/define_call_message.md +++ b/www/docs/guides/contracts/define_call_message.md @@ -163,7 +163,7 @@ await myContract.my_function('http://addressOfMyERC721pictures/image1.jpg'); To force to send a shortString as a ByteArray with `CallData.compile()`: ```typescript -const myCalldata = Calldata.compile([byteArray.byteArrayFromString('Take care.')]); +const myCalldata = Calldata.compile([cairo.byteArray('Take care.')]); ``` If you want to split yourself your longString in 31 chars substrings: @@ -185,7 +185,7 @@ const longString: string[] = shortString ### tuple Starknet is waiting for a list of felts. -You can send it to Starknet.js methods: `cairo.tuple()`, object. +You can send it to Starknet.js methods: `cairo.tuple()`, object, array. ```typescript const myTpl = cairo.tuple('0x0a', 200); From 3f40f3eb89c768c445a02952849fd8bb97d5989d Mon Sep 17 00:00:00 2001 From: PhilippeR26 Date: Wed, 15 Oct 2025 10:39:14 +0200 Subject: [PATCH 16/17] fix: byteArray toDecimalString --- __tests__/utils/cairoDataTypes/CairoByteArray.test.ts | 7 +++++++ src/utils/cairoDataTypes/byteArray.ts | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/__tests__/utils/cairoDataTypes/CairoByteArray.test.ts b/__tests__/utils/cairoDataTypes/CairoByteArray.test.ts index 53099ed24..6c68a9e61 100644 --- a/__tests__/utils/cairoDataTypes/CairoByteArray.test.ts +++ b/__tests__/utils/cairoDataTypes/CairoByteArray.test.ts @@ -441,6 +441,13 @@ describe('CairoByteArray Unit Tests', () => { expect(byteArray.toBigInt()).toBe(expected); }); + describe('toDecimalString method', () => { + test('should convert short string to bigint', () => { + const byteArray = new CairoByteArray('Test'); + expect(byteArray.toDecimalString()).toBe('1415934836'); + }); + }); + test('should convert long string with multiple chunks to bigint', () => { const str = 'This is a very long string that exceeds 31 bytes limit for testing'; const byteArray = new CairoByteArray(str); diff --git a/src/utils/cairoDataTypes/byteArray.ts b/src/utils/cairoDataTypes/byteArray.ts index cf01fcdb6..65abb6871 100644 --- a/src/utils/cairoDataTypes/byteArray.ts +++ b/src/utils/cairoDataTypes/byteArray.ts @@ -169,7 +169,7 @@ export class CairoByteArray extends CairoType { } toDecimalString() { - return addHexPrefix(this.toBigInt().toString(10)); + return this.toBigInt().toString(10); } toBuffer() { From b232a3b3b91d79ee8eb91a96a12feb7cd62ca661 Mon Sep 17 00:00:00 2001 From: PhilippeR26 Date: Wed, 29 Oct 2025 16:23:29 +0100 Subject: [PATCH 17/17] fix: problems of cairo0 decoding --- package-lock.json | 24 ++++++++++++++++++++ src/utils/calldata/index.ts | 4 ++-- src/utils/calldata/parser/interface.ts | 6 ++++- src/utils/calldata/parser/parser-0-1.1.0.ts | 9 +++++++- src/utils/calldata/parser/parser-2.0.0.ts | 6 ++++- src/utils/calldata/parser/parsingStrategy.ts | 7 ++++++ src/utils/events/index.ts | 12 ++++++++-- 7 files changed, 61 insertions(+), 7 deletions(-) diff --git a/package-lock.json b/package-lock.json index db42c73c1..cfa225198 100644 --- a/package-lock.json +++ b/package-lock.json @@ -119,6 +119,7 @@ "integrity": "sha512-2BCOP7TN8M+gVDj7/ht3hsaO/B/n5oDbiAyyvnRlNOs+u1o+JWNYTQrmpuNp1/Wq2gcFrI01JAW+paEKDMx/CA==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@babel/code-frame": "^7.27.1", "@babel/generator": "^7.28.3", @@ -984,6 +985,7 @@ } ], "license": "MIT", + "peer": true, "engines": { "node": ">=18" }, @@ -1007,6 +1009,7 @@ } ], "license": "MIT", + "peer": true, "engines": { "node": ">=18" } @@ -2592,6 +2595,7 @@ "integrity": "sha512-oNXsh2ywth5aowwIa7RKtawnkdH6LgU1ztfP9AIUCQCvzysB+WeU8o2kyyosDPwBZutPpjZDKPQGIzzrfTWweQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@octokit/auth-token": "^6.0.0", "@octokit/graphql": "^9.0.1", @@ -3855,6 +3859,7 @@ "dev": true, "hasInstallScript": true, "license": "Apache-2.0", + "peer": true, "dependencies": { "@swc/counter": "^0.1.3", "@swc/types": "^0.1.24" @@ -4298,6 +4303,7 @@ "integrity": "sha512-3vXmQDXy+woz+gnrTvuvNrPzekOi+Ds0ReMxw0LzBiK3a+1k0kQn9f2NWk+lgD4rJehFUmYy2gMhJ2ZI+7YP9g==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "undici-types": "~7.10.0" } @@ -4353,6 +4359,7 @@ "integrity": "sha512-94EQTWZ40mzBc42ATNIBimBEDltSJ9RQHCC8vc/PDbxi4k8dVwUAv4o98dk50M1zB+JGFxp43FP7f8+FP8R6Sw==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@eslint-community/regexpp": "^4.10.0", "@typescript-eslint/scope-manager": "7.18.0", @@ -4387,6 +4394,7 @@ "integrity": "sha512-4Z+L8I2OqhZV8qA132M4wNL30ypZGYOQVBfMgxDH/K5UX0PNqTu1c6za9ST5r9+tavvHiTWmBnKzpCJ/GlVFtg==", "dev": true, "license": "BSD-2-Clause", + "peer": true, "dependencies": { "@typescript-eslint/scope-manager": "7.18.0", "@typescript-eslint/types": "7.18.0", @@ -4851,6 +4859,7 @@ "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", "dev": true, "license": "MIT", + "peer": true, "bin": { "acorn": "bin/acorn" }, @@ -4911,6 +4920,7 @@ "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "fast-deep-equal": "^3.1.3", "fast-uri": "^3.0.1", @@ -5419,6 +5429,7 @@ } ], "license": "MIT", + "peer": true, "dependencies": { "caniuse-lite": "^1.0.30001737", "electron-to-chromium": "^1.5.211", @@ -6283,6 +6294,7 @@ "integrity": "sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "env-paths": "^2.2.1", "import-fresh": "^3.3.0", @@ -7073,6 +7085,7 @@ "dev": true, "hasInstallScript": true, "license": "MIT", + "peer": true, "bin": { "esbuild": "bin/esbuild" }, @@ -7137,6 +7150,7 @@ "deprecated": "This version is no longer supported. Please see https://eslint.org/version-support for other options.", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", @@ -7238,6 +7252,7 @@ "integrity": "sha512-iI1f+D2ViGn+uvv5HuHVUamg8ll4tN+JRHGc6IJi4TP9Kl976C57fzPXgseXNs8v0iA8aSJpHsTWjDb9QJamGQ==", "dev": true, "license": "MIT", + "peer": true, "bin": { "eslint-config-prettier": "bin/cli.js" }, @@ -7301,6 +7316,7 @@ "integrity": "sha512-whOE1HFo/qJDyX4SnXzP4N6zOWn79WhnCUY/iDR0mPfQZO8wcYE4JClzI2oZrhBnnMUCBCHZhO6VQyoBU95mZA==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@rtsao/scc": "^1.1.0", "array-includes": "^3.1.9", @@ -11010,6 +11026,7 @@ "integrity": "sha512-Cvc9WUhxSMEo4McES3P7oK3QaXldCfNWp7pl2NNeiIFlCoLr3kfq9kb1fxftiwk1FLV7CvpvDfonxtzUDeSOPg==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "cssstyle": "^4.2.1", "data-urls": "^5.0.0", @@ -11707,6 +11724,7 @@ "integrity": "sha512-8dD6FusOQSrpv9Z1rdNMdlSgQOIP880DHqnohobOmYLElGEqAL/JvxvuxZO16r4HtjTlfPRDC1hbvxC9dPN2nA==", "dev": true, "license": "MIT", + "peer": true, "bin": { "marked": "bin/marked.js" }, @@ -14532,6 +14550,7 @@ "dev": true, "inBundle": true, "license": "MIT", + "peer": true, "engines": { "node": ">=12" }, @@ -15574,6 +15593,7 @@ "integrity": "sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ==", "dev": true, "license": "MIT", + "peer": true, "bin": { "prettier": "bin/prettier.cjs" }, @@ -16288,6 +16308,7 @@ "integrity": "sha512-g7RssbTAbir1k/S7uSwSVZFfFXwpomUB9Oas0+xi9KStSCmeDXcA7rNhiskjLqvUe/Evhx8fVCT16OSa34eM5g==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@semantic-release/commit-analyzer": "^13.0.0-beta.1", "@semantic-release/error": "^4.0.0", @@ -17723,6 +17744,7 @@ "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">=12" }, @@ -17851,6 +17873,7 @@ "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@cspotcode/source-map-support": "^0.8.0", "@tsconfig/node10": "^1.0.7", @@ -18243,6 +18266,7 @@ "integrity": "sha512-84MVSjMEHP+FQRPy3pX9sTVV/INIex71s9TL2Gm5FG/WG1SqXeKyZ0k7/blY/4FdOzI12CBy1vGc4og/eus0fw==", "dev": true, "license": "Apache-2.0", + "peer": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" diff --git a/src/utils/calldata/index.ts b/src/utils/calldata/index.ts index 89381817e..f52b0d3f6 100644 --- a/src/utils/calldata/index.ts +++ b/src/utils/calldata/index.ts @@ -282,7 +282,7 @@ export class CallData { const parsed = outputs.flat().reduce((acc, output, idx) => { const propName = output.name ?? idx; - acc[propName] = this.parser.parseResponse(responseIterator, output.type); + acc[propName] = this.parser.parseResponse(responseIterator, output.name, output.type); return acc; }, {} as Args); @@ -356,7 +356,7 @@ export class CallData { const typeCairoArray = Array.isArray(typeCairo) ? typeCairo : [typeCairo]; const responseIterator = response.flat()[Symbol.iterator](); const decodedArray = typeCairoArray.map((typeParam) => - this.parser.parseResponse(responseIterator, typeParam) + this.parser.parseResponse(responseIterator, '', typeParam) ); return decodedArray.length === 1 ? decodedArray[0] : decodedArray; } diff --git a/src/utils/calldata/parser/interface.ts b/src/utils/calldata/parser/interface.ts index 19ab463f6..edbbce4ac 100644 --- a/src/utils/calldata/parser/interface.ts +++ b/src/utils/calldata/parser/interface.ts @@ -39,5 +39,9 @@ export abstract class AbiParserInterface { * @param abiType AbiEntryType * @returns Parser function */ - public abstract parseResponse(responseIterator: Iterator, abiType: string): any; + public abstract parseResponse( + responseIterator: Iterator, + fieldName: string, + abiType: string + ): any; } diff --git a/src/utils/calldata/parser/parser-0-1.1.0.ts b/src/utils/calldata/parser/parser-0-1.1.0.ts index bef7c1479..52a4d946d 100644 --- a/src/utils/calldata/parser/parser-0-1.1.0.ts +++ b/src/utils/calldata/parser/parser-0-1.1.0.ts @@ -73,7 +73,14 @@ export class AbiParser1 implements AbiParserInterface { throw new Error(`Parser for ${abiType} not found`); } - public parseResponse(responseIterator: Iterator, abiType: string): any { + public parseResponse( + responseIterator: Iterator, + fieldName: string, + abiType: string + ): any { + if (isLen(fieldName)) { + return undefined; + } // Check direct constructors first const strategyConstructorNum = this.parsingStrategies.findIndex( (strategy: ParsingStrategy) => strategy.constructors[abiType] && strategy.response[abiType] diff --git a/src/utils/calldata/parser/parser-2.0.0.ts b/src/utils/calldata/parser/parser-2.0.0.ts index f7b545de2..400369b3a 100644 --- a/src/utils/calldata/parser/parser-2.0.0.ts +++ b/src/utils/calldata/parser/parser-2.0.0.ts @@ -111,7 +111,11 @@ export class AbiParser2 implements AbiParserInterface { throw new Error(`Parser for ${abiType} not found`); } - public parseResponse(responseIterator: Iterator, abiType: string): any { + public parseResponse( + responseIterator: Iterator, + _fieldName: string, + abiType: string + ): any { // Check direct constructors first const strategyConstructorNum = this.parsingStrategies.findIndex( (strategy: ParsingStrategy) => strategy.constructors[abiType] && strategy.response[abiType] diff --git a/src/utils/calldata/parser/parsingStrategy.ts b/src/utils/calldata/parser/parsingStrategy.ts index 4bc9bed7b..e697d7055 100644 --- a/src/utils/calldata/parser/parsingStrategy.ts +++ b/src/utils/calldata/parser/parsingStrategy.ts @@ -81,6 +81,12 @@ export const hdParsingStrategy: ParsingStrategy = { } return new CairoUint256(input); }, + Uint256: (input: Iterator | unknown) => { + if (input && typeof input === 'object' && 'next' in input) { + return CairoUint256.factoryFromApiResponse(input as Iterator); + } + return new CairoUint256(input); + }, [CairoUint512.abiSelector]: (input: Iterator | unknown) => { if (input && typeof input === 'object' && 'next' in input) { return CairoUint512.factoryFromApiResponse(input as Iterator); @@ -260,6 +266,7 @@ export const hdParsingStrategy: ParsingStrategy = { (instance as CairoFelt252).toBigInt(), felt: (instance: CairoType) => (instance as CairoFelt252).toBigInt(), [CairoUint256.abiSelector]: (instance: CairoType) => (instance as CairoUint256).toBigInt(), + Uint256: (instance: CairoType) => (instance as CairoUint256).toBigInt(), [CairoUint512.abiSelector]: (instance: CairoType) => (instance as CairoUint512).toBigInt(), [CairoBool.abiSelector]: (instance: CairoType) => (instance as CairoBool).toBoolean(), [CairoEthAddress.abiSelector]: (instance: CairoType) => diff --git a/src/utils/events/index.ts b/src/utils/events/index.ts index b511cc006..5ec4cf72d 100644 --- a/src/utils/events/index.ts +++ b/src/utils/events/index.ts @@ -228,11 +228,19 @@ export function parseEvents( (abiEvent as LegacyEvent).data; abiEventKeys.forEach((key) => { - parsedEvent[abiEvent.name as string][key.name] = parser.parseResponse(keysIter, key.type); + parsedEvent[abiEvent.name as string][key.name] = parser.parseResponse( + keysIter, + key.name, + key.type + ); }); abiEventData.forEach((data) => { - parsedEvent[abiEvent.name as string][data.name] = parser.parseResponse(dataIter, data.type); + parsedEvent[abiEvent.name as string][data.name] = parser.parseResponse( + dataIter, + data.name, + data.type + ); }); if ('block_hash' in currentEvent) parsedEvent.block_hash = currentEvent.block_hash; if ('block_number' in currentEvent) parsedEvent.block_number = currentEvent.block_number;