{"version":3,"file":"spc-parser.js","sources":["../lib-esm/types.js","../lib-esm/utility/headerUtils.js","../lib-esm/fileHeader.js","../lib-esm/utility/getDataShape.js","../lib-esm/utility/guessSpectraType.js","../node_modules/iobuffer/lib-esm/text.js","../node_modules/iobuffer/lib-esm/IOBuffer.js","../node_modules/ml-spectra-processing/lib-esm/utils/createFromToArray.js","../lib-esm/dataBlock/utility/ensureIncreasingXValues.js","../lib-esm/dataBlock/shared.js","../lib-esm/dataBlock/newDataBlock.js","../lib-esm/dataBlock/oldDataBlock.js","../lib-esm/logBlock.js","../lib-esm/parse.js"],"sourcesContent":["/**\n * Gives meaning to type codes.\n * @param  xzwType x, z or w type code.\n * @return  String corresponding to the code.\n */\nexport function xzwTypes(xzwType) {\n    switch (xzwType) {\n        case 1:\n            return 'Wavenumber (cm-1)';\n        case 2:\n            return 'Micrometers (um)';\n        case 3:\n            return 'Nanometers (nm)';\n        case 4:\n            return 'Seconds';\n        case 5:\n            return 'Minutes';\n        case 6:\n            return 'Hertz (Hz)';\n        case 7:\n            return 'Kilohertz (KHz)';\n        case 8:\n            return 'Megahertz (MHz)';\n        case 9:\n            return 'Mass (M/z)';\n        case 10:\n            return 'Parts per million (PPM)';\n        case 11:\n            return 'Days';\n        case 12:\n            return 'Years';\n        case 13:\n            return 'Raman Shift (cm-1)';\n        case 14:\n            return 'eV';\n        case 15:\n            return 0;\n        case 16:\n            return 'Diode Number';\n        case 17:\n            return 'Channel ';\n        case 18:\n            return 'Degrees';\n        case 19:\n            return 'Temperature (F)';\n        case 20:\n            return 'Temperature (C)';\n        case 21:\n            return 'Temperature (K)';\n        case 22:\n            return 'Data Points';\n        case 23:\n            return 'Milliseconds (mSec)';\n        case 24:\n            return 'Microseconds (uSec)';\n        case 25:\n            return 'Nanoseconds (nSec)';\n        case 26:\n            return 'Gigahertz (GHz)';\n        case 27:\n            return 'Centimeters (cm)';\n        case 28:\n            return 'Meters (m)';\n        case 29:\n            return 'Millimeters (mm)';\n        case 30:\n            return 'Hours';\n        case 255:\n            return 'Double interferogram';\n        default:\n            return 'Arbitrary';\n    }\n}\n/**\n * Gives meaning to y type codes\n * @param  yType y type code\n * @return  String corresponding to the code\n */\nexport function yTypes(yType) {\n    switch (yType) {\n        case 0:\n            return 'Arbitrary Intensity';\n        case 1:\n            return 'Interferogram';\n        case 2:\n            return 'Absorbance';\n        case 3:\n            return 'Kubelka-Monk';\n        case 4:\n            return 'Counts';\n        case 5:\n            return 'Volts';\n        case 6:\n            return 'Degrees';\n        case 7:\n            return 'Milliamps';\n        case 8:\n            return 'Millimeters';\n        case 9:\n            return 'Millivolts';\n        case 10:\n            return 'Log(1/R)';\n        case 11:\n            return 'Percent';\n        case 12:\n            return 'Intensity';\n        case 13:\n            return 'Relative Intensity';\n        case 14:\n            return 'Energy';\n        case 16:\n            return 'Decibel';\n        case 19:\n            return 'Temperature (F)';\n        case 20:\n            return 'Temperature (C)';\n        case 21:\n            return 'Temperature (K)';\n        case 22:\n            return 'Index of Refraction [N]';\n        case 23:\n            return 'Extinction Coeff. [K]';\n        case 24:\n            return 'Real';\n        case 25:\n            return 'Imaginary';\n        case 26:\n            return 'Complex';\n        case 128:\n            return 'Transmission';\n        case 129:\n            return 'Reflectance';\n        case 130:\n            return 'Arbitrary or Single Beam with Valley Peaks';\n        case 131:\n            return 'Emission';\n        default:\n            return 'Reference Arbitrary Energy';\n    }\n}\n/**\n * Convert code to experiment type\n * @param code\n * @returns type of experiment carried out.\n */\nexport function experimentSettings(code) {\n    switch (code) {\n        case 1:\n            return 'Gas Chromatogram';\n        case 2:\n            return 'General Chromatogram (same as SPCGEN with TCGRAM)';\n        case 3:\n            return 'HPLC Chromatogram';\n        case 4:\n            return 'FT-IR, FT-NIR, FT-Raman Spectrum or Igram (Can also be used for scanning IR.)';\n        case 5:\n            return 'NIR Spectrum (Usually multi-spectral data sets for calibration.)';\n        case 7:\n            return 'UV-VIS Spectrum (Can be used for single scanning UV-VIS-NIR.)';\n        case 8:\n            return 'X-ray Diffraction Spectrum';\n        case 9:\n            return 'Mass Spectrum  (Can be single, GC-MS, Continuum, Centroid or TOF.)';\n        case 10:\n            return 'NMR Spectrum or FID';\n        case 11:\n            return 'Raman Spectrum (Usually Diode Array, CCD, etc. use SPCFTIR for FT-Raman.)';\n        case 12:\n            return 'Fluorescence Spectrum';\n        case 13:\n            return 'Atomic Spectrum';\n        case 14:\n            return 'Chromatography Diode Array Spectra';\n        default:\n            return 'General SPC (could be anything)';\n    }\n}\n//# sourceMappingURL=types.js.map","/**\n * Gets the parameter in each bit of the flag\n *\n * @param  flag First byte of the main header.\n * @returns  The parameters.\n */\nexport class FlagParameters {\n    constructor(flag) {\n        this.y16BitPrecision = (flag & 1) !== 0; //Y values are 16 bits instead of 32\n        this.useExperimentExtension = (flag & 2) !== 0; //Enable experiment mode\n        this.multiFile = (flag & 4) !== 0; //Multiple spectra (multifile)\n        this.zValuesRandom = (flag & 8) !== 0; //Z values in random order if multiFile\n        this.zValuesUneven = (flag & 16) !== 0; //Z values ordered but unevenly spaced if multi\n        this.customAxisLabels = (flag & 32) !== 0; //Custom labels\n        this.xyxy = (flag & 64) !== 0; //One X array per subfile, for discontinuous curves\n        this.xy = (flag & 128) !== 0; // Non-evenly spaced X, X before Y\n    }\n}\n/**\n * Gets the date encoded in binary in a long number.\n * @param  long Binary date.\n * @return  Date formatted to ISO 8601:2019 convention.\n */\nexport function longToDate(long) {\n    if (long === 0) {\n        return '0000-00-00T00:00:00.00Z';\n    }\n    const date = new Date();\n    date.setUTCFullYear(long >> 20);\n    date.setUTCMonth(((long >> 16) & 0x0f) - 1);\n    date.setUTCDate((long >> 11) & 0x1f);\n    date.setUTCHours((long >> 6) & 0x1f);\n    date.setUTCMinutes(long & 0x3f);\n    date.setUTCSeconds(0);\n    date.setUTCMilliseconds(0);\n    return date.toISOString();\n}\n//# sourceMappingURL=headerUtils.js.map","import { xzwTypes, yTypes, experimentSettings } from './types';\nimport { FlagParameters, longToDate } from './utility/headerUtils';\n/**\n * Old-format File-header parsing.\n * @param buffer spc buffer.\n * @param  prev `{parameters,fileversion}`\n * @return  file metadata\n */\nexport class TheOldHeader {\n    constructor(buffer, prev) {\n        this.fileVersion = prev.fileVersion; //Each bit contains a parameter\n        this.parameters = prev.parameters; //4B => New format; 4D => LabCalc format\n        this.exponentY = buffer.readInt16(); //Word (16 bits) instead of byte\n        this.numberPoints = buffer.readFloat32();\n        this.startingX = buffer.readFloat32();\n        this.endingX = buffer.readFloat32();\n        this.xUnitsType = xzwTypes(buffer.readUint8());\n        this.yUnitsType = yTypes(buffer.readUint8());\n        const date = new Date();\n        const zTypeYear = buffer.readUint16(); //Unrelated to Z axis\n        date.setUTCFullYear(zTypeYear % 4096); // TODO: might be wrong\n        date.setUTCMonth(Math.max(buffer.readUint8() - 1, 0));\n        date.setUTCDate(buffer.readUint8());\n        date.setUTCHours(buffer.readUint8());\n        date.setUTCMinutes(buffer.readUint8());\n        this.date = date.toISOString();\n        this.resolutionDescription = buffer\n            .readChars(8)\n            .replace(/\\x00/g, '')\n            .trim();\n        this.peakPointNumber = buffer.readUint16();\n        this.scans = buffer.readUint16();\n        this.spare = [];\n        for (let i = 0; i < 7; i++) {\n            this.spare.push(buffer.readFloat32());\n        }\n        this.memo = buffer.readChars(130).replace(/\\x00/g, '').trim();\n        this.xyzLabels = buffer.readChars(30).replace(/\\x00/g, '').trim();\n    }\n}\n/**\n * New format file-header parsing.\n * @param buffer spc buffer.\n * @param  prev `{parameters,fileversion}`\n * @return  file metadata\n */\nexport class TheNewHeader {\n    constructor(buffer, prev) {\n        this.fileVersion = prev.fileVersion; //Each bit contains a parameter\n        this.parameters = prev.parameters; //4B => New format; 4D => LabCalc format\n        this.experimentType = experimentSettings(buffer.readUint8()); //Experiment type code (See SPC.h)\n        this.exponentY = buffer.readInt8(); //Exponent for Y values (80h = floating point): FloatY = (2^Exp)*IntY/(2^32) 32-bit; FloatY = (2^Exp)*IntY/(2^16) 32-bit\n        this.numberPoints = buffer.readUint32(); //Number of points (if not XYXY)\n        this.startingX = buffer.readFloat64(); //First X coordinate\n        this.endingX = buffer.readFloat64(); //Last X coordinate\n        this.spectra = buffer.readUint32(); //Number of spectrums\n        this.xUnitsType = xzwTypes(buffer.readUint8()); //X Units type code (See types.js)\n        this.yUnitsType = yTypes(buffer.readUint8()); //Y \"\"\n        this.zUnitsType = xzwTypes(buffer.readUint8()); //Z \"\"\n        this.postingDisposition = buffer.readUint8(); //Posting disposition (See GRAMSDDE.H)\n        this.date = longToDate(buffer.readUint32()); //Date: minutes = first 6 bits, hours = 5 next bits, days = 5 next, months = 4 next, years = 12 last\n        this.resolutionDescription = buffer\n            .readChars(9)\n            .replace(/\\x00/g, '')\n            .trim(); //Resolution description text\n        this.sourceInstrumentDescription = buffer\n            .readChars(9)\n            .replace(/\\x00/g, '')\n            .trim(); // Source Instrument description text\n        this.peakPointNumber = buffer.readUint16(); //Peak point number for interferograms\n        this.spare = [];\n        for (let i = 0; i < 8; i++) {\n            this.spare.push(buffer.readFloat32());\n        }\n        if (this.fileVersion === 0x4c) {\n            //Untested case because no test files\n            this.spare.reverse();\n        }\n        this.memo = buffer.readChars(130).replace(/\\x00/g, '').trim();\n        this.xyzLabels = buffer.readChars(30).replace(/\\x00/g, '').trim();\n        this.logOffset = buffer.readUint32(); //Byte offset to Log Block\n        this.modifiedFlag = buffer.readUint32(); //File modification flag (See values in SPC.H)\n        this.processingCode = buffer.readUint8(); //Processing code (See GRAMSDDE.H)\n        this.calibrationLevel = buffer.readUint8(); //Calibration level + 1\n        this.subMethodSampleInjectionNumber = buffer.readUint16(); //Sub-method sample injection number\n        this.concentrationFactor = buffer.readFloat32(); //Floating data multiplier concentration factor\n        this.methodFile = buffer.readChars(48).replace(/\\x00/g, '').trim(); //Method file\n        this.zSubIncrement = buffer.readFloat32(); //Z subfile increment for even Z Multifiles\n        this.wPlanes = buffer.readUint32();\n        this.wPlaneIncrement = buffer.readFloat32();\n        this.wAxisUnits = xzwTypes(buffer.readUint8()); //W axis units code\n        this.reserved = buffer.readChars(187).replace(/\\x00/g, '').trim(); //Reserved space (Must be zero)\n        if (this.xUnitsType === 0) {\n            this.xUnitsType = this.xyzLabels.substring(0, 10);\n        }\n        if (this.zUnitsType === 0) {\n            this.zUnitsType = this.xyzLabels.substring(20, 30);\n        }\n    }\n}\n/**\n * File-header parsing - First 512/256 bytes (new/old format).\n * @param buffer SPC buffer.\n * @return File-header object\n */\nexport function fileHeader(buffer) {\n    const parameters = new FlagParameters(buffer.readUint8()); //Each bit contains a parameter\n    const fileVersion = buffer.readUint8(); //4B => New format; 4D => LabCalc format\n    const headerOpts = { parameters, fileVersion };\n    switch (fileVersion) {\n        case 0x4b: // new format\n            break;\n        case 0x4c:\n            buffer.setBigEndian();\n            break;\n        case 0x4d: {\n            // old LabCalc format\n            return new TheOldHeader(buffer, headerOpts);\n        }\n        default:\n            throw new Error('Unrecognized file format: byte 01 must be either 4B, 4C or 4D');\n    }\n    return new TheNewHeader(buffer, headerOpts);\n}\n//# sourceMappingURL=fileHeader.js.map","/** Get how the data was stored\n * @param multiFile - whether there are multiple spectra (subfiles) or not.\n * @param xy - uneven x values\n * @param xyxy - multifile with separate x axis\n * @return the shape of the data as a string\n */\nexport function getDataShape({ multiFile, xy, xyxy, }) {\n    /* single file */\n    if (!multiFile) {\n        // Y or XY,\n        return !xy ? 'Y' : xyxy ? 'exception' : 'XY';\n    }\n    /* then multifile */\n    if (!xy) {\n        /* even X - equidistant */\n        return 'YY';\n    }\n    else {\n        // uneven x\n        return !xyxy ? 'XYY' : 'XYXY';\n    }\n}\n//# sourceMappingURL=getDataShape.js.map","import { TheNewHeader } from '../fileHeader';\nimport { getDataShape } from './getDataShape';\n/**\n * Inspects properties and tries to classify the spectra\n * For the most common spectra types\n * @param data the parsed data\n * @returns string describing the type of spectra ([[`SpectraType`]]) or \"General\" if unsure.\n */\nexport function guessSpectraType(meta) {\n    //function tested with the `fileHeader.test.ts`\n    const { xUnitsType: xU, yUnitsType: yU } = meta;\n    // for the new file header they define a \"experiment type\"\n    if (meta instanceof TheNewHeader) {\n        // \"General SPC\" does not give any information\n        if (!meta.experimentType.startsWith('General SPC')) {\n            const id = meta.experimentType.split(' ')[0];\n            switch (id //find all possible ids in `types.ts` file\n            ) {\n                case 'FT-IR,':\n                    return 'ir';\n                case 'NIR':\n                    return 'ir';\n                case 'UV-VIS':\n                    return 'uv';\n                case 'Mass':\n                    return 'mass';\n                case 'Raman':\n                    return 'raman';\n                default:\n                    return 'other';\n            }\n        }\n    }\n    // for old header or General SPC\n    switch (xU) {\n        case 'Mass (M/z)':\n            return 'mass';\n        case 'Raman Shift (cm-1)':\n            return 'raman';\n        case 'Micrometers (um)':\n            return uvOrIR(meta, 'micrometer');\n        case 'Wavenumber (cm-1)': {\n            return uvOrIR(meta, 'wavenumber');\n        }\n        case 'Nanometers (nm)':\n            if ([/*'Kubelka-Monk'*/ 'Absorbance', 'Log(1/R)', 'Transmission'].includes(yU)) {\n                return uvOrIR(meta, 'nanometer');\n            }\n            return 'other';\n        default:\n            return 'other';\n    }\n}\n/**\n * Further classify an X axis that is using \"wavenumber\" as uv or ir.\n * @param data - the parsed file (a jsonlike object)\n * @returns\n */\nexport function uvOrIR(meta, xUnit) {\n    //tested in \"parse\" because of the input\n    const dataShape = getDataShape(meta.parameters);\n    //xyxy and exception won't normally get here anyways (raman or ms normally.)\n    const analyze = ['Y', 'YY', 'XY', 'XYY'].includes(dataShape);\n    if (analyze) {\n        let sX = meta.startingX;\n        let eX = meta.endingX;\n        if (xUnit !== 'nanometer') {\n            sX = unitToNano(sX, xUnit);\n            eX = unitToNano(eX, xUnit);\n        }\n        const lowerBound = sX <= eX ? sX : eX;\n        return getRegion(lowerBound);\n    }\n    return 'other';\n}\n/**\n * @param lb -  lower boundary in _nanometers_\n * @return type of spectra\n */\nexport function getRegion(lb) {\n    return lb < 150 ? 'other' : lb < 700 ? 'uv' : 'ir';\n}\n/**\n * Converts micrometers or wavenumber units to nanometers\n * This allows a unique way to determine the spectra region (using nanometers).\n * @param x - value\n * @param from - input unit to convert\n * @return equivalent in nanometers\n */\nexport function unitToNano(x, from) {\n    return from === 'micrometer' ? x * 1000 : (1 / x) * 10 ** 7;\n}\n//# sourceMappingURL=guessSpectraType.js.map","import { TextDecoder, TextEncoder } from 'util';\nexport function decode(bytes, encoding = 'utf8') {\n    const decoder = new TextDecoder(encoding);\n    return decoder.decode(bytes);\n}\nconst encoder = new TextEncoder();\nexport function encode(str) {\n    return encoder.encode(str);\n}\n//# sourceMappingURL=text.js.map","import { decode, encode } from './text';\nconst defaultByteLength = 1024 * 8;\nexport class IOBuffer {\n    /**\n     * @param data - The data to construct the IOBuffer with.\n     * If data is a number, it will be the new buffer's length<br>\n     * If data is `undefined`, the buffer will be initialized with a default length of 8Kb<br>\n     * If data is an ArrayBuffer, SharedArrayBuffer, an ArrayBufferView (Typed Array), an IOBuffer instance,\n     * or a Node.js Buffer, a view will be created over the underlying ArrayBuffer.\n     * @param options\n     */\n    constructor(data = defaultByteLength, options = {}) {\n        let dataIsGiven = false;\n        if (typeof data === 'number') {\n            data = new ArrayBuffer(data);\n        }\n        else {\n            dataIsGiven = true;\n            this.lastWrittenByte = data.byteLength;\n        }\n        const offset = options.offset ? options.offset >>> 0 : 0;\n        const byteLength = data.byteLength - offset;\n        let dvOffset = offset;\n        if (ArrayBuffer.isView(data) || data instanceof IOBuffer) {\n            if (data.byteLength !== data.buffer.byteLength) {\n                dvOffset = data.byteOffset + offset;\n            }\n            data = data.buffer;\n        }\n        if (dataIsGiven) {\n            this.lastWrittenByte = byteLength;\n        }\n        else {\n            this.lastWrittenByte = 0;\n        }\n        this.buffer = data;\n        this.length = byteLength;\n        this.byteLength = byteLength;\n        this.byteOffset = dvOffset;\n        this.offset = 0;\n        this.littleEndian = true;\n        this._data = new DataView(this.buffer, dvOffset, byteLength);\n        this._mark = 0;\n        this._marks = [];\n    }\n    /**\n     * Checks if the memory allocated to the buffer is sufficient to store more\n     * bytes after the offset.\n     * @param byteLength - The needed memory in bytes.\n     * @returns `true` if there is sufficient space and `false` otherwise.\n     */\n    available(byteLength = 1) {\n        return this.offset + byteLength <= this.length;\n    }\n    /**\n     * Check if little-endian mode is used for reading and writing multi-byte\n     * values.\n     * @returns `true` if little-endian mode is used, `false` otherwise.\n     */\n    isLittleEndian() {\n        return this.littleEndian;\n    }\n    /**\n     * Set little-endian mode for reading and writing multi-byte values.\n     */\n    setLittleEndian() {\n        this.littleEndian = true;\n        return this;\n    }\n    /**\n     * Check if big-endian mode is used for reading and writing multi-byte values.\n     * @returns `true` if big-endian mode is used, `false` otherwise.\n     */\n    isBigEndian() {\n        return !this.littleEndian;\n    }\n    /**\n     * Switches to big-endian mode for reading and writing multi-byte values.\n     */\n    setBigEndian() {\n        this.littleEndian = false;\n        return this;\n    }\n    /**\n     * Move the pointer n bytes forward.\n     * @param n - Number of bytes to skip.\n     */\n    skip(n = 1) {\n        this.offset += n;\n        return this;\n    }\n    /**\n     * Move the pointer n bytes backward.\n     * @param n - Number of bytes to move back.\n     */\n    back(n = 1) {\n        this.offset -= n;\n        return this;\n    }\n    /**\n     * Move the pointer to the given offset.\n     * @param offset\n     */\n    seek(offset) {\n        this.offset = offset;\n        return this;\n    }\n    /**\n     * Store the current pointer offset.\n     * @see {@link IOBuffer#reset}\n     */\n    mark() {\n        this._mark = this.offset;\n        return this;\n    }\n    /**\n     * Move the pointer back to the last pointer offset set by mark.\n     * @see {@link IOBuffer#mark}\n     */\n    reset() {\n        this.offset = this._mark;\n        return this;\n    }\n    /**\n     * Push the current pointer offset to the mark stack.\n     * @see {@link IOBuffer#popMark}\n     */\n    pushMark() {\n        this._marks.push(this.offset);\n        return this;\n    }\n    /**\n     * Pop the last pointer offset from the mark stack, and set the current\n     * pointer offset to the popped value.\n     * @see {@link IOBuffer#pushMark}\n     */\n    popMark() {\n        const offset = this._marks.pop();\n        if (offset === undefined) {\n            throw new Error('Mark stack empty');\n        }\n        this.seek(offset);\n        return this;\n    }\n    /**\n     * Move the pointer offset back to 0.\n     */\n    rewind() {\n        this.offset = 0;\n        return this;\n    }\n    /**\n     * Make sure the buffer has sufficient memory to write a given byteLength at\n     * the current pointer offset.\n     * If the buffer's memory is insufficient, this method will create a new\n     * buffer (a copy) with a length that is twice (byteLength + current offset).\n     * @param byteLength\n     */\n    ensureAvailable(byteLength = 1) {\n        if (!this.available(byteLength)) {\n            const lengthNeeded = this.offset + byteLength;\n            const newLength = lengthNeeded * 2;\n            const newArray = new Uint8Array(newLength);\n            newArray.set(new Uint8Array(this.buffer));\n            this.buffer = newArray.buffer;\n            this.length = this.byteLength = newLength;\n            this._data = new DataView(this.buffer);\n        }\n        return this;\n    }\n    /**\n     * Read a byte and return false if the byte's value is 0, or true otherwise.\n     * Moves pointer forward by one byte.\n     */\n    readBoolean() {\n        return this.readUint8() !== 0;\n    }\n    /**\n     * Read a signed 8-bit integer and move pointer forward by 1 byte.\n     */\n    readInt8() {\n        return this._data.getInt8(this.offset++);\n    }\n    /**\n     * Read an unsigned 8-bit integer and move pointer forward by 1 byte.\n     */\n    readUint8() {\n        return this._data.getUint8(this.offset++);\n    }\n    /**\n     * Alias for {@link IOBuffer#readUint8}.\n     */\n    readByte() {\n        return this.readUint8();\n    }\n    /**\n     * Read `n` bytes and move pointer forward by `n` bytes.\n     */\n    readBytes(n = 1) {\n        const bytes = new Uint8Array(n);\n        for (let i = 0; i < n; i++) {\n            bytes[i] = this.readByte();\n        }\n        return bytes;\n    }\n    /**\n     * Read a 16-bit signed integer and move pointer forward by 2 bytes.\n     */\n    readInt16() {\n        const value = this._data.getInt16(this.offset, this.littleEndian);\n        this.offset += 2;\n        return value;\n    }\n    /**\n     * Read a 16-bit unsigned integer and move pointer forward by 2 bytes.\n     */\n    readUint16() {\n        const value = this._data.getUint16(this.offset, this.littleEndian);\n        this.offset += 2;\n        return value;\n    }\n    /**\n     * Read a 32-bit signed integer and move pointer forward by 4 bytes.\n     */\n    readInt32() {\n        const value = this._data.getInt32(this.offset, this.littleEndian);\n        this.offset += 4;\n        return value;\n    }\n    /**\n     * Read a 32-bit unsigned integer and move pointer forward by 4 bytes.\n     */\n    readUint32() {\n        const value = this._data.getUint32(this.offset, this.littleEndian);\n        this.offset += 4;\n        return value;\n    }\n    /**\n     * Read a 32-bit floating number and move pointer forward by 4 bytes.\n     */\n    readFloat32() {\n        const value = this._data.getFloat32(this.offset, this.littleEndian);\n        this.offset += 4;\n        return value;\n    }\n    /**\n     * Read a 64-bit floating number and move pointer forward by 8 bytes.\n     */\n    readFloat64() {\n        const value = this._data.getFloat64(this.offset, this.littleEndian);\n        this.offset += 8;\n        return value;\n    }\n    /**\n     * Read a 64-bit signed integer number and move pointer forward by 8 bytes.\n     */\n    readBigInt64() {\n        const value = this._data.getBigInt64(this.offset, this.littleEndian);\n        this.offset += 8;\n        return value;\n    }\n    /**\n     * Read a 64-bit unsigned integer number and move pointer forward by 8 bytes.\n     */\n    readBigUint64() {\n        const value = this._data.getBigUint64(this.offset, this.littleEndian);\n        this.offset += 8;\n        return value;\n    }\n    /**\n     * Read a 1-byte ASCII character and move pointer forward by 1 byte.\n     */\n    readChar() {\n        return String.fromCharCode(this.readInt8());\n    }\n    /**\n     * Read `n` 1-byte ASCII characters and move pointer forward by `n` bytes.\n     */\n    readChars(n = 1) {\n        let result = '';\n        for (let i = 0; i < n; i++) {\n            result += this.readChar();\n        }\n        return result;\n    }\n    /**\n     * Read the next `n` bytes, return a UTF-8 decoded string and move pointer\n     * forward by `n` bytes.\n     */\n    readUtf8(n = 1) {\n        return decode(this.readBytes(n));\n    }\n    /**\n     * Read the next `n` bytes, return a string decoded with `encoding` and move pointer\n     * forward by `n` bytes.\n     * If no encoding is passed, the function is equivalent to @see {@link IOBuffer#readUtf8}\n     */\n    decodeText(n = 1, encoding = 'utf-8') {\n        return decode(this.readBytes(n), encoding);\n    }\n    /**\n     * Write 0xff if the passed value is truthy, 0x00 otherwise and move pointer\n     * forward by 1 byte.\n     */\n    writeBoolean(value) {\n        this.writeUint8(value ? 0xff : 0x00);\n        return this;\n    }\n    /**\n     * Write `value` as an 8-bit signed integer and move pointer forward by 1 byte.\n     */\n    writeInt8(value) {\n        this.ensureAvailable(1);\n        this._data.setInt8(this.offset++, value);\n        this._updateLastWrittenByte();\n        return this;\n    }\n    /**\n     * Write `value` as an 8-bit unsigned integer and move pointer forward by 1\n     * byte.\n     */\n    writeUint8(value) {\n        this.ensureAvailable(1);\n        this._data.setUint8(this.offset++, value);\n        this._updateLastWrittenByte();\n        return this;\n    }\n    /**\n     * An alias for {@link IOBuffer#writeUint8}.\n     */\n    writeByte(value) {\n        return this.writeUint8(value);\n    }\n    /**\n     * Write all elements of `bytes` as uint8 values and move pointer forward by\n     * `bytes.length` bytes.\n     */\n    writeBytes(bytes) {\n        this.ensureAvailable(bytes.length);\n        for (let i = 0; i < bytes.length; i++) {\n            this._data.setUint8(this.offset++, bytes[i]);\n        }\n        this._updateLastWrittenByte();\n        return this;\n    }\n    /**\n     * Write `value` as a 16-bit signed integer and move pointer forward by 2\n     * bytes.\n     */\n    writeInt16(value) {\n        this.ensureAvailable(2);\n        this._data.setInt16(this.offset, value, this.littleEndian);\n        this.offset += 2;\n        this._updateLastWrittenByte();\n        return this;\n    }\n    /**\n     * Write `value` as a 16-bit unsigned integer and move pointer forward by 2\n     * bytes.\n     */\n    writeUint16(value) {\n        this.ensureAvailable(2);\n        this._data.setUint16(this.offset, value, this.littleEndian);\n        this.offset += 2;\n        this._updateLastWrittenByte();\n        return this;\n    }\n    /**\n     * Write `value` as a 32-bit signed integer and move pointer forward by 4\n     * bytes.\n     */\n    writeInt32(value) {\n        this.ensureAvailable(4);\n        this._data.setInt32(this.offset, value, this.littleEndian);\n        this.offset += 4;\n        this._updateLastWrittenByte();\n        return this;\n    }\n    /**\n     * Write `value` as a 32-bit unsigned integer and move pointer forward by 4\n     * bytes.\n     */\n    writeUint32(value) {\n        this.ensureAvailable(4);\n        this._data.setUint32(this.offset, value, this.littleEndian);\n        this.offset += 4;\n        this._updateLastWrittenByte();\n        return this;\n    }\n    /**\n     * Write `value` as a 32-bit floating number and move pointer forward by 4\n     * bytes.\n     */\n    writeFloat32(value) {\n        this.ensureAvailable(4);\n        this._data.setFloat32(this.offset, value, this.littleEndian);\n        this.offset += 4;\n        this._updateLastWrittenByte();\n        return this;\n    }\n    /**\n     * Write `value` as a 64-bit floating number and move pointer forward by 8\n     * bytes.\n     */\n    writeFloat64(value) {\n        this.ensureAvailable(8);\n        this._data.setFloat64(this.offset, value, this.littleEndian);\n        this.offset += 8;\n        this._updateLastWrittenByte();\n        return this;\n    }\n    /**\n     * Write `value` as a 64-bit signed bigint and move pointer forward by 8\n     * bytes.\n     */\n    writeBigInt64(value) {\n        this.ensureAvailable(8);\n        this._data.setBigInt64(this.offset, value, this.littleEndian);\n        this.offset += 8;\n        this._updateLastWrittenByte();\n        return this;\n    }\n    /**\n     * Write `value` as a 64-bit unsigned bigint and move pointer forward by 8\n     * bytes.\n     */\n    writeBigUint64(value) {\n        this.ensureAvailable(8);\n        this._data.setBigUint64(this.offset, value, this.littleEndian);\n        this.offset += 8;\n        this._updateLastWrittenByte();\n        return this;\n    }\n    /**\n     * Write the charCode of `str`'s first character as an 8-bit unsigned integer\n     * and move pointer forward by 1 byte.\n     */\n    writeChar(str) {\n        return this.writeUint8(str.charCodeAt(0));\n    }\n    /**\n     * Write the charCodes of all `str`'s characters as 8-bit unsigned integers\n     * and move pointer forward by `str.length` bytes.\n     */\n    writeChars(str) {\n        for (let i = 0; i < str.length; i++) {\n            this.writeUint8(str.charCodeAt(i));\n        }\n        return this;\n    }\n    /**\n     * UTF-8 encode and write `str` to the current pointer offset and move pointer\n     * forward according to the encoded length.\n     */\n    writeUtf8(str) {\n        return this.writeBytes(encode(str));\n    }\n    /**\n     * Export a Uint8Array view of the internal buffer.\n     * The view starts at the byte offset and its length\n     * is calculated to stop at the last written byte or the original length.\n     */\n    toArray() {\n        return new Uint8Array(this.buffer, this.byteOffset, this.lastWrittenByte);\n    }\n    /**\n     * Update the last written byte offset\n     * @private\n     */\n    _updateLastWrittenByte() {\n        if (this.offset > this.lastWrittenByte) {\n            this.lastWrittenByte = this.offset;\n        }\n    }\n}\n//# sourceMappingURL=IOBuffer.js.map","/**\n * Create an array with numbers between \"from\" and \"to\" of length \"length\"\n *\n * @param options - options\n * @return - array of distributed numbers between \"from\" and \"to\"\n */\nexport function createFromToArray(options = {}) {\n    let { from = 0, to = 1, length = 1000, includeFrom = true, includeTo = true, distribution = 'uniform', } = options;\n    const array = new Float64Array(length);\n    let div = length;\n    if (includeFrom && includeTo) {\n        div = length - 1;\n    }\n    else if ((!includeFrom && includeTo) || (includeFrom && !includeTo)) {\n        div = length;\n    }\n    else if (!includeFrom && !includeTo) {\n        div = length + 1;\n    }\n    let delta = (to - from) / div;\n    if (distribution === 'uniform') {\n        if (includeFrom) {\n            let index = 0;\n            while (index < length) {\n                array[index] = from + delta * index;\n                index++;\n            }\n        }\n        else {\n            let index = 0;\n            while (index < length) {\n                array[index] = from + delta * (index + 1);\n                index++;\n            }\n        }\n    }\n    else if (distribution === 'log') {\n        let base = (to / from) ** (1 / div);\n        let firstExponent = Math.log(from) / Math.log(base);\n        if (includeFrom) {\n            let index = 0;\n            while (index < length) {\n                array[index] = base ** (firstExponent + index);\n                index++;\n            }\n        }\n        else {\n            let index = 0;\n            while (index < length) {\n                array[index] = base ** (firstExponent + index + 1);\n                index++;\n            }\n        }\n    }\n    else {\n        throw new Error('Please choose for the distribution either uniform or log. By default the distribution chosen is uniform.');\n    }\n    return array;\n}\n//# sourceMappingURL=createFromToArray.js.map","/** Ensures x-values are increasing in magnitude. It reverses y if x was reversed.\n *\n * * Does not mutate arrays\n * * Assumes that X is either increasing or decreasing, not any random order.\n * * Expects x and y to be the same length\n * @param x - array of x values\n * @param y - array of y values\n * @returns [x,y] tuple\n */\nexport function ensureIncreasingXValues(x, y) {\n    const xL = x.length;\n    if (xL !== 0) {\n        if (y.length !== xL) {\n            //wouldn't really make sense for x and y to be !==\n            throw new RangeError('x and y length must be the same');\n        }\n        const firstX = x[0];\n        const lastX = x[x.length - 1];\n        if (firstX > lastX) {\n            //apparently slice(0) faster than slice()\n            return [x.slice(0).reverse(), y.slice(0).reverse()];\n        }\n    }\n    return [x, y];\n}\n//# sourceMappingURL=ensureIncreasingXValues.js.map","import { ensureIncreasingXValues } from './utility/ensureIncreasingXValues';\n/**\n * Gets the Subfile flags.\n *\n * @param  flag First byte of the subheader.\n * @return The parameters.\n */\nexport class SubFlagParameters {\n    constructor(flag) {\n        this.changed = (flag & 1) !== 0;\n        this.noPeakTable = (flag & 8) !== 0;\n        this.modifiedArithmetic = (flag & 128) !== 0;\n    }\n}\n/**\n * Parses the subheader (header of the subfile)\n *\n * @param buffer SPC buffer.\n * @return subheader object\n */\nexport class SubHeader {\n    constructor(buffer) {\n        this.parameters = new SubFlagParameters(buffer.readUint8());\n        this.exponentY = buffer.readInt8();\n        this.indexNumber = buffer.readUint16();\n        this.startingZ = buffer.readFloat32();\n        this.endingZ = buffer.readFloat32();\n        this.noiseValue = buffer.readFloat32();\n        this.numberPoints = buffer.readUint32();\n        this.numberCoAddedScans = buffer.readUint32();\n        this.wAxisValue = buffer.readFloat32();\n        this.reserved = buffer.readChars(4).replace(/\\x00/g, '').trim();\n    }\n}\n/**\n * Set the X and Y axis (object with labels, values etc.)\n * @param x\n * @param y\n * @param fileHeader\n * @return object with x and y as axis.\n */\nexport function setXYAxis(x, y, fileHeader) {\n    var _a, _b, _c, _d;\n    const xAxis = /(?<label>.*?) ?[([](?<units>.*)[)\\]]/.exec(fileHeader.xUnitsType);\n    const yAxis = /(?<label>.*?) ?[([](?<units>.*)[)\\]]/.exec(fileHeader.yUnitsType);\n    const [oX, oY] = ensureIncreasingXValues(x, y);\n    const variables = {\n        x: {\n            symbol: 'x',\n            label: ((_a = xAxis === null || xAxis === void 0 ? void 0 : xAxis.groups) === null || _a === void 0 ? void 0 : _a.label) || fileHeader.xUnitsType,\n            units: ((_b = xAxis === null || xAxis === void 0 ? void 0 : xAxis.groups) === null || _b === void 0 ? void 0 : _b.units) || '',\n            data: oX,\n            isDependent: false,\n        },\n        y: {\n            symbol: 'y',\n            label: ((_c = yAxis === null || yAxis === void 0 ? void 0 : yAxis.groups) === null || _c === void 0 ? void 0 : _c.label) || fileHeader.yUnitsType,\n            units: ((_d = yAxis === null || yAxis === void 0 ? void 0 : yAxis.groups) === null || _d === void 0 ? void 0 : _d.units) || '',\n            data: oY,\n            isDependent: true,\n        },\n    };\n    return variables;\n}\n//# sourceMappingURL=shared.js.map","import { createFromToArray } from 'ml-spectra-processing';\nimport { getDataShape } from '../utility/getDataShape';\nimport { SubHeader, setXYAxis } from './shared';\n/**\n * Reads the data block of the SPC file.\n *\n * @param buffer spc buffer.\n * @param fileHeader main header.\n * @return Array containing the spectra.\n */\nexport function newDataBlock(buffer, fileHeader) {\n    let x;\n    let spectra = [];\n    const dataShape = getDataShape(fileHeader.parameters);\n    if (dataShape === 'XY' || dataShape === 'XYY') {\n        //for these ones, X axis comes before subheader !!\n        x = new Float64Array(fileHeader.numberPoints);\n        for (let i = 0; i < fileHeader.numberPoints; i++) {\n            x[i] = buffer.readFloat32();\n        }\n    }\n    else if (dataShape === 'YY' || dataShape === 'Y') {\n        //for these ones, no X axis, we create it as we have all parameters\n        x = createFromToArray({\n            from: fileHeader.startingX,\n            to: fileHeader.endingX,\n            length: fileHeader.numberPoints,\n        });\n    }\n    for (let i = 0; i < fileHeader.spectra; i++) {\n        // here Y is set (runs only once for a single spectra.)\n        const subFileHeader = new SubHeader(buffer);\n        // set X for the remaining cases if neccesary\n        if (dataShape === 'XYXY' || dataShape === 'exception') {\n            x = new Float64Array(subFileHeader.numberPoints);\n            for (let j = 0; j < x.length; j++) {\n                x[j] = buffer.readFloat32();\n            }\n        }\n        const y = getNewY(new Float64Array(x.length), subFileHeader, fileHeader, buffer);\n        const variables = setXYAxis(x, y, fileHeader);\n        spectra.push({ meta: subFileHeader, variables });\n    }\n    return spectra;\n}\nexport function getNewY(y, subHeader, fileHeader, buffer) {\n    const { exponentY, parameters: { y16BitPrecision }, } = fileHeader;\n    if (subHeader.exponentY === 0) {\n        subHeader.exponentY = exponentY;\n    }\n    const yFactor = Math.pow(2, subHeader.exponentY - (y16BitPrecision ? 16 : 32));\n    if (y16BitPrecision) {\n        for (let j = 0; j < y.length; j++) {\n            y[j] = buffer.readInt16() * yFactor;\n        }\n    }\n    else {\n        for (let j = 0; j < y.length; j++) {\n            if (subHeader.exponentY !== -128) {\n                y[j] = buffer.readInt32() * yFactor;\n            }\n            else {\n                y[j] = buffer.readFloat32();\n            }\n        }\n    }\n    return y;\n}\n//# sourceMappingURL=newDataBlock.js.map","import { createFromToArray } from 'ml-spectra-processing';\nimport { SubHeader, setXYAxis } from './shared';\n/**\n * Reads a file's data block (old SPC format)\n *\n * @param buffer spc buffer.\n * @param fileHeader header.\n * @return Array containing the spectra.\n */\nexport function oldDataBlock(buffer, fileHeader) {\n    // either Y or YY fall on the for loop\n    let spectra = [];\n    // old format uses always equidistant arrays\n    const x = createFromToArray({\n        from: fileHeader.startingX,\n        to: fileHeader.endingX,\n        length: fileHeader.numberPoints,\n    });\n    for (let i = 0; buffer.offset + fileHeader.numberPoints < buffer.length; i++) {\n        const subFileHeader = new SubHeader(buffer);\n        const y = getOldY(new Float64Array(x.length), subFileHeader, fileHeader, buffer);\n        const variables = setXYAxis(x, y, fileHeader);\n        spectra.push({ meta: subFileHeader, variables });\n    }\n    return spectra;\n}\n/**\n *\n *\n * @export\n * @param {Float64Array} y\n * @param {SubHeader} subHeader\n * @param {TheOldHeader} fileHeader\n * @param {IOBuffer} buffer\n * @return {*}\n */\nexport function getOldY(y, subHeader, fileHeader, buffer) {\n    const { fileVersion, exponentY, parameters: { y16BitPrecision }, } = fileHeader;\n    if (subHeader.exponentY === 0) {\n        subHeader.exponentY = exponentY;\n    }\n    const yFactor = Math.pow(2, subHeader.exponentY - (y16BitPrecision ? 16 : 32));\n    if (y16BitPrecision) {\n        for (let j = 0; j < y.length; j++) {\n            y[j] = buffer.readInt16() * yFactor;\n        }\n    }\n    else {\n        for (let j = 0; j < y.length; j++) {\n            if (fileVersion === 0x4d) {\n                y[j] =\n                    ((buffer.readUint8() << 16) +\n                        (buffer.readInt8() << 24) +\n                        (buffer.readUint8() << 0) +\n                        (buffer.readUint8() << 8)) *\n                        yFactor;\n            }\n        }\n    }\n    return y;\n}\n//# sourceMappingURL=oldDataBlock.js.map","/**\n *\n * @param  buffer SPC buffer.\n * @param  logOffset Offset of the log (from mainHeader).\n * @return  Object containing log meta, data and text.\n */\nexport function readLogBlock(buffer, logOffset) {\n    let logHeader = {\n        size: buffer.readUint32(),\n        memorySize: buffer.readUint32(),\n        textOffset: buffer.readUint32(),\n        binarySize: buffer.readUint32(),\n        diskArea: buffer.readUint32(),\n        reserved: buffer.readChars(44).trim().replace(/\\x00/g, ''), //Reserved space\n    };\n    const logData = buffer.readChars(logHeader.binarySize);\n    buffer.offset = logOffset + logHeader.textOffset;\n    const logASCII = buffer\n        .readChars(logHeader.size - logHeader.textOffset)\n        .trim()\n        .replace(/\\x00/g, '');\n    return { meta: logHeader, data: logData, text: logASCII };\n}\n//# sourceMappingURL=logBlock.js.map","import { IOBuffer } from 'iobuffer';\nimport { newDataBlock } from './dataBlock/newDataBlock';\nimport { oldDataBlock } from './dataBlock/oldDataBlock';\nimport { fileHeader, TheNewHeader } from './fileHeader';\nimport { readLogBlock } from './logBlock';\n/**\n * Parses an SPC file.\n *\n * @param  buffer SPC file buffer.\n * @return JSON-like object with information contained in the SPC file.\n */\nexport function parse(buffer) {\n    const ioBuffer = new IOBuffer(buffer);\n    const meta = fileHeader(ioBuffer);\n    if (meta instanceof TheNewHeader) {\n        //new format\n        const spectra = newDataBlock(ioBuffer, meta);\n        const logs = meta.logOffset !== 0 ? readLogBlock(ioBuffer, meta.logOffset) : null;\n        return { meta, spectra, logs };\n    }\n    else {\n        //old format\n        return {\n            meta,\n            spectra: oldDataBlock(ioBuffer, meta),\n        };\n    }\n}\n//# sourceMappingURL=parse.js.map"],"names":["xzwTypes","xzwType","yTypes","yType","experimentSettings","code","FlagParameters","constructor","flag","y16BitPrecision","useExperimentExtension","multiFile","zValuesRandom","zValuesUneven","customAxisLabels","xyxy","xy","longToDate","long","date","Date","setUTCFullYear","setUTCMonth","setUTCDate","setUTCHours","setUTCMinutes","setUTCSeconds","setUTCMilliseconds","toISOString","TheOldHeader","buffer","prev","fileVersion","parameters","exponentY","readInt16","numberPoints","readFloat32","startingX","endingX","xUnitsType","readUint8","yUnitsType","zTypeYear","readUint16","Math","max","resolutionDescription","readChars","replace","trim","peakPointNumber","scans","spare","i","push","memo","xyzLabels","TheNewHeader","experimentType","readInt8","readUint32","readFloat64","spectra","zUnitsType","postingDisposition","sourceInstrumentDescription","reverse","logOffset","modifiedFlag","processingCode","calibrationLevel","subMethodSampleInjectionNumber","concentrationFactor","methodFile","zSubIncrement","wPlanes","wPlaneIncrement","wAxisUnits","reserved","substring","fileHeader","headerOpts","setBigEndian","Error","getDataShape","guessSpectraType","meta","xU","yU","startsWith","id","split","uvOrIR","includes","xUnit","dataShape","analyze","sX","eX","unitToNano","lowerBound","getRegion","lb","x","from","decode","bytes","encoding","decoder","TextDecoder","encoder","TextEncoder","encode","str","defaultByteLength","IOBuffer","data","options","dataIsGiven","ArrayBuffer","lastWrittenByte","byteLength","offset","dvOffset","isView","byteOffset","length","littleEndian","_data","DataView","_mark","_marks","available","isLittleEndian","setLittleEndian","isBigEndian","skip","n","back","seek","mark","reset","pushMark","popMark","pop","undefined","rewind","ensureAvailable","lengthNeeded","newLength","newArray","Uint8Array","set","readBoolean","getInt8","getUint8","readByte","readBytes","value","getInt16","getUint16","readInt32","getInt32","getUint32","getFloat32","getFloat64","readBigInt64","getBigInt64","readBigUint64","getBigUint64","readChar","String","fromCharCode","result","readUtf8","decodeText","writeBoolean","writeUint8","writeInt8","setInt8","_updateLastWrittenByte","setUint8","writeByte","writeBytes","writeInt16","setInt16","writeUint16","setUint16","writeInt32","setInt32","writeUint32","setUint32","writeFloat32","setFloat32","writeFloat64","setFloat64","writeBigInt64","setBigInt64","writeBigUint64","setBigUint64","writeChar","charCodeAt","writeChars","writeUtf8","toArray","createFromToArray","to","includeFrom","includeTo","distribution","array","Float64Array","div","delta","index","base","firstExponent","log","ensureIncreasingXValues","y","xL","RangeError","firstX","lastX","slice","SubFlagParameters","changed","noPeakTable","modifiedArithmetic","SubHeader","indexNumber","startingZ","endingZ","noiseValue","numberCoAddedScans","wAxisValue","setXYAxis","xAxis","exec","yAxis","oX","oY","variables","symbol","label","groups","_a","units","_b","isDependent","_c","_d","newDataBlock","subFileHeader","j","getNewY","subHeader","yFactor","pow","oldDataBlock","getOldY","readLogBlock","logHeader","size","memorySize","textOffset","binarySize","diskArea","logData","logASCII","text","parse","ioBuffer","logs"],"mappings":";;;;;;;;;;;;IAAA;;;;;IAKM,SAAUA,QAAV,CAAmBC,OAAnB,EAAkC;IACtC,EAAA,QAAQA,OAAR;IACE,IAAA,KAAK,CAAL;IACE,MAAA,OAAO,mBAAP,CAAA;;IACF,IAAA,KAAK,CAAL;IACE,MAAA,OAAO,kBAAP,CAAA;;IACF,IAAA,KAAK,CAAL;IACE,MAAA,OAAO,iBAAP,CAAA;;IACF,IAAA,KAAK,CAAL;IACE,MAAA,OAAO,SAAP,CAAA;;IACF,IAAA,KAAK,CAAL;IACE,MAAA,OAAO,SAAP,CAAA;;IACF,IAAA,KAAK,CAAL;IACE,MAAA,OAAO,YAAP,CAAA;;IACF,IAAA,KAAK,CAAL;IACE,MAAA,OAAO,iBAAP,CAAA;;IACF,IAAA,KAAK,CAAL;IACE,MAAA,OAAO,iBAAP,CAAA;;IACF,IAAA,KAAK,CAAL;IACE,MAAA,OAAO,YAAP,CAAA;;IACF,IAAA,KAAK,EAAL;IACE,MAAA,OAAO,yBAAP,CAAA;;IACF,IAAA,KAAK,EAAL;IACE,MAAA,OAAO,MAAP,CAAA;;IACF,IAAA,KAAK,EAAL;IACE,MAAA,OAAO,OAAP,CAAA;;IACF,IAAA,KAAK,EAAL;IACE,MAAA,OAAO,oBAAP,CAAA;;IACF,IAAA,KAAK,EAAL;IACE,MAAA,OAAO,IAAP,CAAA;;IACF,IAAA,KAAK,EAAL;IACE,MAAA,OAAO,CAAP,CAAA;;IACF,IAAA,KAAK,EAAL;IACE,MAAA,OAAO,cAAP,CAAA;;IACF,IAAA,KAAK,EAAL;IACE,MAAA,OAAO,UAAP,CAAA;;IACF,IAAA,KAAK,EAAL;IACE,MAAA,OAAO,SAAP,CAAA;;IACF,IAAA,KAAK,EAAL;IACE,MAAA,OAAO,iBAAP,CAAA;;IACF,IAAA,KAAK,EAAL;IACE,MAAA,OAAO,iBAAP,CAAA;;IACF,IAAA,KAAK,EAAL;IACE,MAAA,OAAO,iBAAP,CAAA;;IACF,IAAA,KAAK,EAAL;IACE,MAAA,OAAO,aAAP,CAAA;;IACF,IAAA,KAAK,EAAL;IACE,MAAA,OAAO,qBAAP,CAAA;;IACF,IAAA,KAAK,EAAL;IACE,MAAA,OAAO,qBAAP,CAAA;;IACF,IAAA,KAAK,EAAL;IACE,MAAA,OAAO,oBAAP,CAAA;;IACF,IAAA,KAAK,EAAL;IACE,MAAA,OAAO,iBAAP,CAAA;;IACF,IAAA,KAAK,EAAL;IACE,MAAA,OAAO,kBAAP,CAAA;;IACF,IAAA,KAAK,EAAL;IACE,MAAA,OAAO,YAAP,CAAA;;IACF,IAAA,KAAK,EAAL;IACE,MAAA,OAAO,kBAAP,CAAA;;IACF,IAAA,KAAK,EAAL;IACE,MAAA,OAAO,OAAP,CAAA;;IACF,IAAA,KAAK,GAAL;IACE,MAAA,OAAO,sBAAP,CAAA;;IACF,IAAA;IACE,MAAA,OAAO,WAAP,CAAA;IAhEJ,GAAA;IAkED,CAAA;IACD;;;;;;IAKM,SAAUC,MAAV,CAAiBC,KAAjB,EAA8B;IAClC,EAAA,QAAQA,KAAR;IACE,IAAA,KAAK,CAAL;IACE,MAAA,OAAO,qBAAP,CAAA;;IACF,IAAA,KAAK,CAAL;IACE,MAAA,OAAO,eAAP,CAAA;;IACF,IAAA,KAAK,CAAL;IACE,MAAA,OAAO,YAAP,CAAA;;IACF,IAAA,KAAK,CAAL;IACE,MAAA,OAAO,cAAP,CAAA;;IACF,IAAA,KAAK,CAAL;IACE,MAAA,OAAO,QAAP,CAAA;;IACF,IAAA,KAAK,CAAL;IACE,MAAA,OAAO,OAAP,CAAA;;IACF,IAAA,KAAK,CAAL;IACE,MAAA,OAAO,SAAP,CAAA;;IACF,IAAA,KAAK,CAAL;IACE,MAAA,OAAO,WAAP,CAAA;;IACF,IAAA,KAAK,CAAL;IACE,MAAA,OAAO,aAAP,CAAA;;IACF,IAAA,KAAK,CAAL;IACE,MAAA,OAAO,YAAP,CAAA;;IACF,IAAA,KAAK,EAAL;IACE,MAAA,OAAO,UAAP,CAAA;;IACF,IAAA,KAAK,EAAL;IACE,MAAA,OAAO,SAAP,CAAA;;IACF,IAAA,KAAK,EAAL;IACE,MAAA,OAAO,WAAP,CAAA;;IACF,IAAA,KAAK,EAAL;IACE,MAAA,OAAO,oBAAP,CAAA;;IACF,IAAA,KAAK,EAAL;IACE,MAAA,OAAO,QAAP,CAAA;;IACF,IAAA,KAAK,EAAL;IACE,MAAA,OAAO,SAAP,CAAA;;IACF,IAAA,KAAK,EAAL;IACE,MAAA,OAAO,iBAAP,CAAA;;IACF,IAAA,KAAK,EAAL;IACE,MAAA,OAAO,iBAAP,CAAA;;IACF,IAAA,KAAK,EAAL;IACE,MAAA,OAAO,iBAAP,CAAA;;IACF,IAAA,KAAK,EAAL;IACE,MAAA,OAAO,yBAAP,CAAA;;IACF,IAAA,KAAK,EAAL;IACE,MAAA,OAAO,uBAAP,CAAA;;IACF,IAAA,KAAK,EAAL;IACE,MAAA,OAAO,MAAP,CAAA;;IACF,IAAA,KAAK,EAAL;IACE,MAAA,OAAO,WAAP,CAAA;;IACF,IAAA,KAAK,EAAL;IACE,MAAA,OAAO,SAAP,CAAA;;IACF,IAAA,KAAK,GAAL;IACE,MAAA,OAAO,cAAP,CAAA;;IACF,IAAA,KAAK,GAAL;IACE,MAAA,OAAO,aAAP,CAAA;;IACF,IAAA,KAAK,GAAL;IACE,MAAA,OAAO,4CAAP,CAAA;;IACF,IAAA,KAAK,GAAL;IACE,MAAA,OAAO,UAAP,CAAA;;IACF,IAAA;IACE,MAAA,OAAO,4BAAP,CAAA;IA1DJ,GAAA;IA4DD,CAAA;IAED;;;;;;IAKM,SAAUC,kBAAV,CAA6BC,IAA7B,EAAyC;IAC7C,EAAA,QAAQA,IAAR;IACE,IAAA,KAAK,CAAL;IACE,MAAA,OAAO,kBAAP,CAAA;;IACF,IAAA,KAAK,CAAL;IACE,MAAA,OAAO,mDAAP,CAAA;;IACF,IAAA,KAAK,CAAL;IACE,MAAA,OAAO,mBAAP,CAAA;;IACF,IAAA,KAAK,CAAL;IACE,MAAA,OAAO,+EAAP,CAAA;;IACF,IAAA,KAAK,CAAL;IACE,MAAA,OAAO,kEAAP,CAAA;;IACF,IAAA,KAAK,CAAL;IACE,MAAA,OAAO,+DAAP,CAAA;;IACF,IAAA,KAAK,CAAL;IACE,MAAA,OAAO,4BAAP,CAAA;;IACF,IAAA,KAAK,CAAL;IACE,MAAA,OAAO,oEAAP,CAAA;;IACF,IAAA,KAAK,EAAL;IACE,MAAA,OAAO,qBAAP,CAAA;;IACF,IAAA,KAAK,EAAL;IACE,MAAA,OAAO,2EAAP,CAAA;;IACF,IAAA,KAAK,EAAL;IACE,MAAA,OAAO,uBAAP,CAAA;;IACF,IAAA,KAAK,EAAL;IACE,MAAA,OAAO,iBAAP,CAAA;;IACF,IAAA,KAAK,EAAL;IACE,MAAA,OAAO,oCAAP,CAAA;;IACF,IAAA;IACE,MAAA,OAAO,iCAAP,CAAA;IA5BJ,GAAA;IA8BD;;ICjLD;;;;;;IAMM,MAAOC,cAAP,CAAqB;IASzBC,EAAAA,WAAAA,CAAYC,IAAZ,EAAwB;QACtB,IAAKC,CAAAA,eAAL,GAAuB,CAACD,IAAI,GAAG,CAAR,MAAe,CAAtC,CADsB;;QAEtB,IAAKE,CAAAA,sBAAL,GAA8B,CAACF,IAAI,GAAG,CAAR,MAAe,CAA7C,CAFsB;;QAGtB,IAAKG,CAAAA,SAAL,GAAiB,CAACH,IAAI,GAAG,CAAR,MAAe,CAAhC,CAHsB;;QAItB,IAAKI,CAAAA,aAAL,GAAqB,CAACJ,IAAI,GAAG,CAAR,MAAe,CAApC,CAJsB;;QAKtB,IAAKK,CAAAA,aAAL,GAAqB,CAACL,IAAI,GAAG,EAAR,MAAgB,CAArC,CALsB;;QAMtB,IAAKM,CAAAA,gBAAL,GAAwB,CAACN,IAAI,GAAG,EAAR,MAAgB,CAAxC,CANsB;;QAOtB,IAAKO,CAAAA,IAAL,GAAY,CAACP,IAAI,GAAG,EAAR,MAAgB,CAA5B,CAPsB;;QAQtB,IAAKQ,CAAAA,EAAL,GAAU,CAACR,IAAI,GAAG,GAAR,MAAiB,CAA3B,CARsB;IASvB,GAAA;;IAlBwB,CAAA;IAqB3B;;;;;;IAKM,SAAUS,UAAV,CAAqBC,IAArB,EAAiC;MACrC,IAAIA,IAAI,KAAK,CAAb,EAAgB;IACd,IAAA,OAAO,yBAAP,CAAA;IACD,GAAA;;IACD,EAAA,MAAMC,IAAI,GAAG,IAAIC,IAAJ,EAAb,CAAA;IACAD,EAAAA,IAAI,CAACE,cAAL,CAAoBH,IAAI,IAAI,EAA5B,CAAA,CAAA;MACAC,IAAI,CAACG,WAAL,CAAiB,CAAEJ,IAAI,IAAI,EAAT,GAAe,IAAhB,IAAwB,CAAzC,CAAA,CAAA;IACAC,EAAAA,IAAI,CAACI,UAAL,CAAiBL,IAAI,IAAI,EAAT,GAAe,IAA/B,CAAA,CAAA;IACAC,EAAAA,IAAI,CAACK,WAAL,CAAkBN,IAAI,IAAI,CAAT,GAAc,IAA/B,CAAA,CAAA;IACAC,EAAAA,IAAI,CAACM,aAAL,CAAmBP,IAAI,GAAG,IAA1B,CAAA,CAAA;MACAC,IAAI,CAACO,aAAL,CAAmB,CAAnB,CAAA,CAAA;MACAP,IAAI,CAACQ,kBAAL,CAAwB,CAAxB,CAAA,CAAA;MACA,OAAOR,IAAI,CAACS,WAAL,EAAP,CAAA;IACD;;ICxCD;;;;;;;IAMM,MAAOC,YAAP,CAAmB;MAgBvBtB,WACEuB,CAAAA,MADF,EAEEC,IAFF,EAE2D;IAEzD,IAAA,IAAA,CAAKC,WAAL,GAAmBD,IAAI,CAACC,WAAxB,CAFyD;;IAGzD,IAAA,IAAA,CAAKC,UAAL,GAAkBF,IAAI,CAACE,UAAvB,CAHyD;;IAIzD,IAAA,IAAA,CAAKC,SAAL,GAAiBJ,MAAM,CAACK,SAAP,EAAjB,CAJyD;;IAKzD,IAAA,IAAA,CAAKC,YAAL,GAAoBN,MAAM,CAACO,WAAP,EAApB,CAAA;IACA,IAAA,IAAA,CAAKC,SAAL,GAAiBR,MAAM,CAACO,WAAP,EAAjB,CAAA;IACA,IAAA,IAAA,CAAKE,OAAL,GAAeT,MAAM,CAACO,WAAP,EAAf,CAAA;QACA,IAAKG,CAAAA,UAAL,GAAkBxC,QAAQ,CAAC8B,MAAM,CAACW,SAAP,EAAD,CAA1B,CAAA;QACA,IAAKC,CAAAA,UAAL,GAAkBxC,MAAM,CAAC4B,MAAM,CAACW,SAAP,EAAD,CAAxB,CAAA;IACA,IAAA,MAAMtB,IAAI,GAAG,IAAIC,IAAJ,EAAb,CAAA;IACA,IAAA,MAAMuB,SAAS,GAAGb,MAAM,CAACc,UAAP,EAAlB,CAXyD;;IAYzDzB,IAAAA,IAAI,CAACE,cAAL,CAAoBsB,SAAS,GAAG,IAAhC,EAZyD;;IAazDxB,IAAAA,IAAI,CAACG,WAAL,CAAiBuB,IAAI,CAACC,GAAL,CAAShB,MAAM,CAACW,SAAP,EAAA,GAAqB,CAA9B,EAAiC,CAAjC,CAAjB,CAAA,CAAA;IACAtB,IAAAA,IAAI,CAACI,UAAL,CAAgBO,MAAM,CAACW,SAAP,EAAhB,CAAA,CAAA;IACAtB,IAAAA,IAAI,CAACK,WAAL,CAAiBM,MAAM,CAACW,SAAP,EAAjB,CAAA,CAAA;IACAtB,IAAAA,IAAI,CAACM,aAAL,CAAmBK,MAAM,CAACW,SAAP,EAAnB,CAAA,CAAA;IACA,IAAA,IAAA,CAAKtB,IAAL,GAAYA,IAAI,CAACS,WAAL,EAAZ,CAAA;IACA,IAAA,IAAA,CAAKmB,qBAAL,GAA6BjB,MAAM,CAChCkB,SAD0B,CAChB,CADgB,CAE1BC,CAAAA,OAF0B,CAElB,OAFkB,EAET,EAFS,CAAA,CAG1BC,IAH0B,EAA7B,CAAA;IAIA,IAAA,IAAA,CAAKC,eAAL,GAAuBrB,MAAM,CAACc,UAAP,EAAvB,CAAA;IACA,IAAA,IAAA,CAAKQ,KAAL,GAAatB,MAAM,CAACc,UAAP,EAAb,CAAA;QACA,IAAKS,CAAAA,KAAL,GAAa,EAAb,CAAA;;QACA,KAAK,IAAIC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,CAApB,EAAuBA,CAAC,EAAxB,EAA4B;IAC1B,MAAA,IAAA,CAAKD,KAAL,CAAWE,IAAX,CAAgBzB,MAAM,CAACO,WAAP,EAAhB,CAAA,CAAA;IACD,KAAA;;IACD,IAAA,IAAA,CAAKmB,IAAL,GAAY1B,MAAM,CAACkB,SAAP,CAAiB,GAAjB,CAAsBC,CAAAA,OAAtB,CAA8B,OAA9B,EAAuC,EAAvC,CAAA,CAA2CC,IAA3C,EAAZ,CAAA;IACA,IAAA,IAAA,CAAKO,SAAL,GAAiB3B,MAAM,CAACkB,SAAP,CAAiB,EAAjB,CAAqBC,CAAAA,OAArB,CAA6B,OAA7B,EAAsC,EAAtC,CAAA,CAA0CC,IAA1C,EAAjB,CAAA;IACD,GAAA;;IAhDsB,CAAA;IAmDzB;;;;;;;IAMM,MAAOQ,YAAP,CAAmB;MAiCvBnD,WACEuB,CAAAA,MADF,EAEEC,IAFF,EAE2D;IAEzD,IAAA,IAAA,CAAKC,WAAL,GAAmBD,IAAI,CAACC,WAAxB,CAFyD;;IAGzD,IAAA,IAAA,CAAKC,UAAL,GAAkBF,IAAI,CAACE,UAAvB,CAHyD;;QAIzD,IAAK0B,CAAAA,cAAL,GAAsBvD,kBAAkB,CAAC0B,MAAM,CAACW,SAAP,EAAD,CAAxC,CAJyD;;IAKzD,IAAA,IAAA,CAAKP,SAAL,GAAiBJ,MAAM,CAAC8B,QAAP,EAAjB,CALyD;;IAMzD,IAAA,IAAA,CAAKxB,YAAL,GAAoBN,MAAM,CAAC+B,UAAP,EAApB,CANyD;;IAOzD,IAAA,IAAA,CAAKvB,SAAL,GAAiBR,MAAM,CAACgC,WAAP,EAAjB,CAPyD;;IAQzD,IAAA,IAAA,CAAKvB,OAAL,GAAeT,MAAM,CAACgC,WAAP,EAAf,CARyD;;IASzD,IAAA,IAAA,CAAKC,OAAL,GAAejC,MAAM,CAAC+B,UAAP,EAAf,CATyD;;QAUzD,IAAKrB,CAAAA,UAAL,GAAkBxC,QAAQ,CAAC8B,MAAM,CAACW,SAAP,EAAD,CAA1B,CAVyD;;QAWzD,IAAKC,CAAAA,UAAL,GAAkBxC,MAAM,CAAC4B,MAAM,CAACW,SAAP,EAAD,CAAxB,CAXyD;;QAYzD,IAAKuB,CAAAA,UAAL,GAAkBhE,QAAQ,CAAC8B,MAAM,CAACW,SAAP,EAAD,CAA1B,CAZyD;;IAazD,IAAA,IAAA,CAAKwB,kBAAL,GAA0BnC,MAAM,CAACW,SAAP,EAA1B,CAbyD;;QAczD,IAAKtB,CAAAA,IAAL,GAAYF,UAAU,CAACa,MAAM,CAAC+B,UAAP,EAAD,CAAtB,CAdyD;;IAezD,IAAA,IAAA,CAAKd,qBAAL,GAA6BjB,MAAM,CAChCkB,SAD0B,CAChB,CADgB,CAAA,CAE1BC,OAF0B,CAElB,OAFkB,EAET,EAFS,EAG1BC,IAH0B,EAA7B,CAfyD;;IAmBzD,IAAA,IAAA,CAAKgB,2BAAL,GAAmCpC,MAAM,CACtCkB,SADgC,CACtB,CADsB,CAAA,CAEhCC,OAFgC,CAExB,OAFwB,EAEf,EAFe,EAGhCC,IAHgC,EAAnC,CAnByD;;IAuBzD,IAAA,IAAA,CAAKC,eAAL,GAAuBrB,MAAM,CAACc,UAAP,EAAvB,CAvByD;;QAwBzD,IAAKS,CAAAA,KAAL,GAAa,EAAb,CAAA;;QACA,KAAK,IAAIC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,CAApB,EAAuBA,CAAC,EAAxB,EAA4B;IAC1B,MAAA,IAAA,CAAKD,KAAL,CAAWE,IAAX,CAAgBzB,MAAM,CAACO,WAAP,EAAhB,CAAA,CAAA;IACD,KAAA;;IACD,IAAA,IAAI,IAAKL,CAAAA,WAAL,KAAqB,IAAzB,EAA+B;IAC7B;UACA,IAAKqB,CAAAA,KAAL,CAAWc,OAAX,EAAA,CAAA;IACD,KAAA;;IACD,IAAA,IAAA,CAAKX,IAAL,GAAY1B,MAAM,CAACkB,SAAP,CAAiB,GAAjB,CAAsBC,CAAAA,OAAtB,CAA8B,OAA9B,EAAuC,EAAvC,CAAA,CAA2CC,IAA3C,EAAZ,CAAA;IACA,IAAA,IAAA,CAAKO,SAAL,GAAiB3B,MAAM,CAACkB,SAAP,CAAiB,EAAjB,CAAqBC,CAAAA,OAArB,CAA6B,OAA7B,EAAsC,EAAtC,CAAA,CAA0CC,IAA1C,EAAjB,CAAA;IACA,IAAA,IAAA,CAAKkB,SAAL,GAAiBtC,MAAM,CAAC+B,UAAP,EAAjB,CAlCyD;;IAmCzD,IAAA,IAAA,CAAKQ,YAAL,GAAoBvC,MAAM,CAAC+B,UAAP,EAApB,CAnCyD;;IAoCzD,IAAA,IAAA,CAAKS,cAAL,GAAsBxC,MAAM,CAACW,SAAP,EAAtB,CApCyD;;IAqCzD,IAAA,IAAA,CAAK8B,gBAAL,GAAwBzC,MAAM,CAACW,SAAP,EAAxB,CArCyD;;IAsCzD,IAAA,IAAA,CAAK+B,8BAAL,GAAsC1C,MAAM,CAACc,UAAP,EAAtC,CAtCyD;;IAuCzD,IAAA,IAAA,CAAK6B,mBAAL,GAA2B3C,MAAM,CAACO,WAAP,EAA3B,CAvCyD;;IAwCzD,IAAA,IAAA,CAAKqC,UAAL,GAAkB5C,MAAM,CAACkB,SAAP,CAAiB,EAAjB,CAAA,CAAqBC,OAArB,CAA6B,OAA7B,EAAsC,EAAtC,EAA0CC,IAA1C,EAAlB,CAxCyD;;IAyCzD,IAAA,IAAA,CAAKyB,aAAL,GAAqB7C,MAAM,CAACO,WAAP,EAArB,CAzCyD;;IA0CzD,IAAA,IAAA,CAAKuC,OAAL,GAAe9C,MAAM,CAAC+B,UAAP,EAAf,CAAA;IACA,IAAA,IAAA,CAAKgB,eAAL,GAAuB/C,MAAM,CAACO,WAAP,EAAvB,CAAA;QACA,IAAKyC,CAAAA,UAAL,GAAkB9E,QAAQ,CAAC8B,MAAM,CAACW,SAAP,EAAD,CAA1B,CA5CyD;;IA6CzD,IAAA,IAAA,CAAKsC,QAAL,GAAgBjD,MAAM,CAACkB,SAAP,CAAiB,GAAjB,CAAA,CAAsBC,OAAtB,CAA8B,OAA9B,EAAuC,EAAvC,EAA2CC,IAA3C,EAAhB,CA7CyD;;IA8CzD,IAAA,IAAI,IAAKV,CAAAA,UAAL,KAAoB,CAAxB,EAA2B;UACzB,IAAKA,CAAAA,UAAL,GAAkB,IAAA,CAAKiB,SAAL,CAAeuB,SAAf,CAAyB,CAAzB,EAA4B,EAA5B,CAAlB,CAAA;IACD,KAAA;;IACD,IAAA,IAAI,IAAKhB,CAAAA,UAAL,KAAoB,CAAxB,EAA2B;UACzB,IAAKA,CAAAA,UAAL,GAAkB,IAAA,CAAKP,SAAL,CAAeuB,SAAf,CAAyB,EAAzB,EAA6B,EAA7B,CAAlB,CAAA;IACD,KAAA;IACF,GAAA;;IAvFsB,CAAA;IA4FzB;;;;;;IAKM,SAAUC,UAAV,CAAqBnD,MAArB,EAAqC;MACzC,MAAMG,UAAU,GAAG,IAAI3B,cAAJ,CAAmBwB,MAAM,CAACW,SAAP,EAAnB,CAAnB,CADyC;;IAEzC,EAAA,MAAMT,WAAW,GAAGF,MAAM,CAACW,SAAP,EAApB,CAFyC;;IAGzC,EAAA,MAAMyC,UAAU,GAAG;QAAEjD,UAAF;IAAcD,IAAAA,WAAAA;OAAjC,CAAA;;IAEA,EAAA,QAAQA,WAAR;IACE,IAAA,KAAK,IAAL;IAAW;IACT,MAAA,MAAA;;IACF,IAAA,KAAK,IAAL;IACEF,MAAAA,MAAM,CAACqD,YAAP,EAAA,CAAA;IACA,MAAA,MAAA;;IACF,IAAA,KAAK,IAAL;IAAW,MAAA;IACT;IACA,QAAA,OAAO,IAAItD,YAAJ,CAAiBC,MAAjB,EAAyBoD,UAAzB,CAAP,CAAA;IACD,OAAA;;IACD,IAAA;IACE,MAAA,MAAM,IAAIE,KAAJ,CACJ,+DADI,CAAN,CAAA;IAXJ,GAAA;;IAeA,EAAA,OAAO,IAAI1B,YAAJ,CAAiB5B,MAAjB,EAAyBoD,UAAzB,CAAP,CAAA;IACD;;IC7KD;;;;;;IAMM,SAAUG,YAAV,CAIW,IAAA,EAAA;MAAA,IAJY;QAC3B1E,SAD2B;QAE3BK,EAF2B;IAG3BD,IAAAA,IAAAA;OACe,GAAA,IAAA,CAAA;;IACf;MACA,IAAI,CAACJ,SAAL,EAAgB;IACd;QACA,OAAO,CAACK,EAAD,GAAM,GAAN,GAAYD,IAAI,GAAG,WAAH,GAAiB,IAAxC,CAAA;IACD,GAAA;IAED;;;MACA,IAAI,CAACC,EAAL,EAAS;IACP;IACA,IAAA,OAAO,IAAP,CAAA;IACD,GAHD,MAGO;IACL;IACA,IAAA,OAAO,CAACD,IAAD,GAAQ,KAAR,GAAgB,MAAvB,CAAA;IACD,GAAA;IACF;;IC5BD;;;;;;;IAMM,SAAUuE,gBAAV,CAA2BC,IAA3B,EAAuC;IAC3C;MACA,MAAM;IAAE/C,IAAAA,UAAU,EAAEgD,EAAd;IAAkB9C,IAAAA,UAAU,EAAE+C,EAAAA;OAAOF,GAAAA,IAA3C,CAF2C;;MAI3C,IAAIA,IAAI,YAAY7B,YAApB,EAAkC;IAChC;QACA,IAAI,CAAC6B,IAAI,CAAC5B,cAAL,CAAoB+B,UAApB,CAA+B,aAA/B,CAAL,EAAoD;UAClD,MAAMC,EAAE,GAAGJ,IAAI,CAAC5B,cAAL,CAAoBiC,KAApB,CAA0B,GAA1B,CAA+B,CAAA,CAA/B,CAAX,CAAA;;IACA,MAAA,QACED,EADF;IAAA;IAGE,QAAA,KAAK,QAAL;IACE,UAAA,OAAO,IAAP,CAAA;;IACF,QAAA,KAAK,KAAL;IACE,UAAA,OAAO,IAAP,CAAA;;IACF,QAAA,KAAK,QAAL;IACE,UAAA,OAAO,IAAP,CAAA;;IACF,QAAA,KAAK,MAAL;IACE,UAAA,OAAO,MAAP,CAAA;;IACF,QAAA,KAAK,OAAL;IACE,UAAA,OAAO,OAAP,CAAA;;IACF,QAAA;IACE,UAAA,OAAO,OAAP,CAAA;IAdJ,OAAA;IAgBD,KAAA;IACF,GAzB0C;;;IA2B3C,EAAA,QAAQH,EAAR;IACE,IAAA,KAAK,YAAL;IACE,MAAA,OAAO,MAAP,CAAA;;IACF,IAAA,KAAK,oBAAL;IACE,MAAA,OAAO,OAAP,CAAA;;IACF,IAAA,KAAK,kBAAL;IACE,MAAA,OAAOK,MAAM,CAACN,IAAD,EAAO,YAAP,CAAb,CAAA;;IACF,IAAA,KAAK,mBAAL;IAA0B,MAAA;IACxB,QAAA,OAAOM,MAAM,CAACN,IAAD,EAAO,YAAP,CAAb,CAAA;IACD,OAAA;;IACD,IAAA,KAAK,iBAAL;UACE,IACE;IAAC;UAAmB,YAApB,EAAkC,UAAlC,EAA8C,cAA9C,EAA8DO,QAA9D,CACEL,EADF,CADF,EAIE;IACA,QAAA,OAAOI,MAAM,CAACN,IAAD,EAAO,WAAP,CAAb,CAAA;IACD,OAAA;;IACD,MAAA,OAAO,OAAP,CAAA;;IACF,IAAA;IACE,MAAA,OAAO,OAAP,CAAA;IApBJ,GAAA;IAsBD,CAAA;IAGD;;;;;;IAKM,SAAUM,MAAV,CACJN,IADI,EAEJQ,KAFI,EAE4C;IAEhD;MACA,MAAMC,SAAS,GAAGX,YAAY,CAACE,IAAI,CAACtD,UAAN,CAA9B,CAHgD;;IAMhD,EAAA,MAAMgE,OAAO,GAAG,CAAC,GAAD,EAAM,IAAN,EAAY,IAAZ,EAAkB,KAAlB,CAAA,CAAyBH,QAAzB,CAAkCE,SAAlC,CAAhB,CAAA;;IAEA,EAAA,IAAIC,OAAJ,EAAa;IACX,IAAA,IAAIC,EAAE,GAAGX,IAAI,CAACjD,SAAd,CAAA;IACA,IAAA,IAAI6D,EAAE,GAAGZ,IAAI,CAAChD,OAAd,CAAA;;QACA,IAAIwD,KAAK,KAAK,WAAd,EAA2B;IACzBG,MAAAA,EAAE,GAAGE,UAAU,CAACF,EAAD,EAAKH,KAAL,CAAf,CAAA;IACAI,MAAAA,EAAE,GAAGC,UAAU,CAACD,EAAD,EAAKJ,KAAL,CAAf,CAAA;IACD,KAAA;;QACD,MAAMM,UAAU,GAAGH,EAAE,IAAIC,EAAN,GAAWD,EAAX,GAAgBC,EAAnC,CAAA;QACA,OAAOG,SAAS,CAACD,UAAD,CAAhB,CAAA;IACD,GAAA;;IAED,EAAA,OAAO,OAAP,CAAA;IACD,CAAA;IAED;;;;;IAIM,SAAUC,SAAV,CAAoBC,EAApB,EAA8B;IAClC,EAAA,OAAOA,EAAE,GAAG,GAAL,GAAW,OAAX,GAAqBA,EAAE,GAAG,GAAL,GAAW,IAAX,GAAkB,IAA9C,CAAA;IACD,CAAA;IAED;;;;;;;;IAOM,SAAUH,UAAV,CAAqBI,CAArB,EAAgCC,IAAhC,EAAiE;IACrE,EAAA,OAAOA,IAAI,KAAK,YAAT,GAAwBD,CAAC,GAAG,IAA5B,GAAoC,CAAIA,GAAAA,CAAL,GAAU,EAAA,IAAM,CAA1D,CAAA;IACD;;IChHK,SAAUE,MAAV,CAAiBC,KAAjB,EAAqD;MAAA,IAAjBC,QAAiB,uEAAN,MAAM,CAAA;IACzD,EAAA,MAAMC,OAAO,GAAG,IAAIC,gBAAJ,CAAgBF,QAAhB,CAAhB,CAAA;IACA,EAAA,OAAOC,OAAO,CAACH,MAAR,CAAeC,KAAf,CAAP,CAAA;IACD,CAAA;IAED,MAAMI,OAAO,GAAG,IAAIC,gBAAJ,EAAhB,CAAA;IAEM,SAAUC,MAAV,CAAiBC,GAAjB,EAA4B;IAChC,EAAA,OAAOH,OAAO,CAACE,MAAR,CAAeC,GAAf,CAAP,CAAA;IACD;;ICTD,MAAMC,iBAAiB,GAAG,IAAA,GAAO,CAAjC,CAAA;IAWM,MAAOC,QAAP,CAAe;IAiCnB;;;;;;;;MAQA7G,WAE+B,GAAA;QAAA,IAD7B8G,IAC6B,uEADXF,iBACW,CAAA;QAAA,IAA7BG,OAA6B,uEAAF,EAAE,CAAA;QAE7B,IAAIC,WAAW,GAAG,KAAlB,CAAA;;IACA,IAAA,IAAI,OAAOF,IAAP,KAAgB,QAApB,EAA8B;IAC5BA,MAAAA,IAAI,GAAG,IAAIG,WAAJ,CAAgBH,IAAhB,CAAP,CAAA;IACD,KAFD,MAEO;IACLE,MAAAA,WAAW,GAAG,IAAd,CAAA;IACA,MAAA,IAAA,CAAKE,eAAL,GAAuBJ,IAAI,CAACK,UAA5B,CAAA;IACD,KAAA;;IAED,IAAA,MAAMC,MAAM,GAAGL,OAAO,CAACK,MAAR,GAAiBL,OAAO,CAACK,MAAR,KAAmB,CAApC,GAAwC,CAAvD,CAAA;IACA,IAAA,MAAMD,UAAU,GAAGL,IAAI,CAACK,UAAL,GAAkBC,MAArC,CAAA;QACA,IAAIC,QAAQ,GAAGD,MAAf,CAAA;;QACA,IAAIH,WAAW,CAACK,MAAZ,CAAmBR,IAAnB,CAA4BA,IAAAA,IAAI,YAAYD,QAAhD,EAA0D;UACxD,IAAIC,IAAI,CAACK,UAAL,KAAoBL,IAAI,CAACvF,MAAL,CAAY4F,UAApC,EAAgD;IAC9CE,QAAAA,QAAQ,GAAGP,IAAI,CAACS,UAAL,GAAkBH,MAA7B,CAAA;IACD,OAAA;;UACDN,IAAI,GAAGA,IAAI,CAACvF,MAAZ,CAAA;IACD,KAAA;;IACD,IAAA,IAAIyF,WAAJ,EAAiB;UACf,IAAKE,CAAAA,eAAL,GAAuBC,UAAvB,CAAA;IACD,KAFD,MAEO;UACL,IAAKD,CAAAA,eAAL,GAAuB,CAAvB,CAAA;IACD,KAAA;;QACD,IAAK3F,CAAAA,MAAL,GAAcuF,IAAd,CAAA;QACA,IAAKU,CAAAA,MAAL,GAAcL,UAAd,CAAA;QACA,IAAKA,CAAAA,UAAL,GAAkBA,UAAlB,CAAA;QACA,IAAKI,CAAAA,UAAL,GAAkBF,QAAlB,CAAA;QACA,IAAKD,CAAAA,MAAL,GAAc,CAAd,CAAA;QACA,IAAKK,CAAAA,YAAL,GAAoB,IAApB,CAAA;QACA,IAAKC,CAAAA,KAAL,GAAa,IAAIC,QAAJ,CAAa,IAAKpG,CAAAA,MAAlB,EAA0B8F,QAA1B,EAAoCF,UAApC,CAAb,CAAA;QACA,IAAKS,CAAAA,KAAL,GAAa,CAAb,CAAA;QACA,IAAKC,CAAAA,MAAL,GAAc,EAAd,CAAA;IACD,GAAA;IAED;;;;;;;;IAMOC,EAAAA,SAAS,GAAe;QAAA,IAAdX,UAAc,uEAAD,CAAC,CAAA;IAC7B,IAAA,OAAO,KAAKC,MAAL,GAAcD,UAAd,IAA4B,KAAKK,MAAxC,CAAA;IACD,GAAA;IAED;;;;;;;MAKOO,cAAc,GAAA;IACnB,IAAA,OAAO,KAAKN,YAAZ,CAAA;IACD,GAAA;IAED;;;;;MAGOO,eAAe,GAAA;QACpB,IAAKP,CAAAA,YAAL,GAAoB,IAApB,CAAA;IACA,IAAA,OAAO,IAAP,CAAA;IACD,GAAA;IAED;;;;;;MAIOQ,WAAW,GAAA;QAChB,OAAO,CAAC,KAAKR,YAAb,CAAA;IACD,GAAA;IAED;;;;;MAGO7C,YAAY,GAAA;QACjB,IAAK6C,CAAAA,YAAL,GAAoB,KAApB,CAAA;IACA,IAAA,OAAO,IAAP,CAAA;IACD,GAAA;IAED;;;;;;IAIOS,EAAAA,IAAI,GAAM;QAAA,IAALC,CAAK,uEAAD,CAAC,CAAA;QACf,IAAKf,CAAAA,MAAL,IAAee,CAAf,CAAA;IACA,IAAA,OAAO,IAAP,CAAA;IACD,GAAA;IAED;;;;;;IAIOC,EAAAA,IAAI,GAAM;QAAA,IAALD,CAAK,uEAAD,CAAC,CAAA;QACf,IAAKf,CAAAA,MAAL,IAAee,CAAf,CAAA;IACA,IAAA,OAAO,IAAP,CAAA;IACD,GAAA;IAED;;;;;;MAIOE,IAAI,CAACjB,MAAD,EAAe;QACxB,IAAKA,CAAAA,MAAL,GAAcA,MAAd,CAAA;IACA,IAAA,OAAO,IAAP,CAAA;IACD,GAAA;IAED;;;;;;MAIOkB,IAAI,GAAA;QACT,IAAKV,CAAAA,KAAL,GAAa,IAAA,CAAKR,MAAlB,CAAA;IACA,IAAA,OAAO,IAAP,CAAA;IACD,GAAA;IAED;;;;;;MAIOmB,KAAK,GAAA;QACV,IAAKnB,CAAAA,MAAL,GAAc,IAAA,CAAKQ,KAAnB,CAAA;IACA,IAAA,OAAO,IAAP,CAAA;IACD,GAAA;IAED;;;;;;MAIOY,QAAQ,GAAA;IACb,IAAA,IAAA,CAAKX,MAAL,CAAY7E,IAAZ,CAAiB,KAAKoE,MAAtB,CAAA,CAAA;;IACA,IAAA,OAAO,IAAP,CAAA;IACD,GAAA;IAED;;;;;;;MAKOqB,OAAO,GAAA;IACZ,IAAA,MAAMrB,MAAM,GAAG,IAAA,CAAKS,MAAL,CAAYa,GAAZ,EAAf,CAAA;;QACA,IAAItB,MAAM,KAAKuB,SAAf,EAA0B;IACxB,MAAA,MAAM,IAAI9D,KAAJ,CAAU,kBAAV,CAAN,CAAA;IACD,KAAA;;QACD,IAAKwD,CAAAA,IAAL,CAAUjB,MAAV,CAAA,CAAA;IACA,IAAA,OAAO,IAAP,CAAA;IACD,GAAA;IAED;;;;;MAGOwB,MAAM,GAAA;QACX,IAAKxB,CAAAA,MAAL,GAAc,CAAd,CAAA;IACA,IAAA,OAAO,IAAP,CAAA;IACD,GAAA;IAED;;;;;;;;;IAOOyB,EAAAA,eAAe,GAAe;QAAA,IAAd1B,UAAc,uEAAD,CAAC,CAAA;;IACnC,IAAA,IAAI,CAAC,IAAKW,CAAAA,SAAL,CAAeX,UAAf,CAAL,EAAiC;IAC/B,MAAA,MAAM2B,YAAY,GAAG,IAAK1B,CAAAA,MAAL,GAAcD,UAAnC,CAAA;IACA,MAAA,MAAM4B,SAAS,GAAGD,YAAY,GAAG,CAAjC,CAAA;IACA,MAAA,MAAME,QAAQ,GAAG,IAAIC,UAAJ,CAAeF,SAAf,CAAjB,CAAA;UACAC,QAAQ,CAACE,GAAT,CAAa,IAAID,UAAJ,CAAe,IAAA,CAAK1H,MAApB,CAAb,CAAA,CAAA;IACA,MAAA,IAAA,CAAKA,MAAL,GAAcyH,QAAQ,CAACzH,MAAvB,CAAA;IACA,MAAA,IAAA,CAAKiG,MAAL,GAAc,IAAKL,CAAAA,UAAL,GAAkB4B,SAAhC,CAAA;IACA,MAAA,IAAA,CAAKrB,KAAL,GAAa,IAAIC,QAAJ,CAAa,IAAA,CAAKpG,MAAlB,CAAb,CAAA;IACD,KAAA;;IACD,IAAA,OAAO,IAAP,CAAA;IACD,GAAA;IAED;;;;;;MAIO4H,WAAW,GAAA;QAChB,OAAO,IAAA,CAAKjH,SAAL,EAAA,KAAqB,CAA5B,CAAA;IACD,GAAA;IAED;;;;;MAGOmB,QAAQ,GAAA;QACb,OAAO,IAAA,CAAKqE,KAAL,CAAW0B,OAAX,CAAmB,IAAKhC,CAAAA,MAAL,EAAnB,CAAP,CAAA;IACD,GAAA;IAED;;;;;MAGOlF,SAAS,GAAA;QACd,OAAO,IAAA,CAAKwF,KAAL,CAAW2B,QAAX,CAAoB,IAAKjC,CAAAA,MAAL,EAApB,CAAP,CAAA;IACD,GAAA;IAED;;;;;MAGOkC,QAAQ,GAAA;QACb,OAAO,IAAA,CAAKpH,SAAL,EAAP,CAAA;IACD,GAAA;IAED;;;;;IAGOqH,EAAAA,SAAS,GAAM;QAAA,IAALpB,CAAK,uEAAD,CAAC,CAAA;IACpB,IAAA,MAAM/B,KAAK,GAAG,IAAI6C,UAAJ,CAAed,CAAf,CAAd,CAAA;;QACA,KAAK,IAAIpF,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGoF,CAApB,EAAuBpF,CAAC,EAAxB,EAA4B;IAC1BqD,MAAAA,KAAK,CAACrD,CAAD,CAAL,GAAW,IAAA,CAAKuG,QAAL,EAAX,CAAA;IACD,KAAA;;IACD,IAAA,OAAOlD,KAAP,CAAA;IACD,GAAA;IAED;;;;;MAGOxE,SAAS,GAAA;IACd,IAAA,MAAM4H,KAAK,GAAG,IAAK9B,CAAAA,KAAL,CAAW+B,QAAX,CAAoB,IAAA,CAAKrC,MAAzB,EAAiC,IAAKK,CAAAA,YAAtC,CAAd,CAAA;;QACA,IAAKL,CAAAA,MAAL,IAAe,CAAf,CAAA;IACA,IAAA,OAAOoC,KAAP,CAAA;IACD,GAAA;IAED;;;;;MAGOnH,UAAU,GAAA;IACf,IAAA,MAAMmH,KAAK,GAAG,IAAK9B,CAAAA,KAAL,CAAWgC,SAAX,CAAqB,IAAA,CAAKtC,MAA1B,EAAkC,IAAKK,CAAAA,YAAvC,CAAd,CAAA;;QACA,IAAKL,CAAAA,MAAL,IAAe,CAAf,CAAA;IACA,IAAA,OAAOoC,KAAP,CAAA;IACD,GAAA;IAED;;;;;MAGOG,SAAS,GAAA;IACd,IAAA,MAAMH,KAAK,GAAG,IAAK9B,CAAAA,KAAL,CAAWkC,QAAX,CAAoB,IAAA,CAAKxC,MAAzB,EAAiC,IAAKK,CAAAA,YAAtC,CAAd,CAAA;;QACA,IAAKL,CAAAA,MAAL,IAAe,CAAf,CAAA;IACA,IAAA,OAAOoC,KAAP,CAAA;IACD,GAAA;IAED;;;;;MAGOlG,UAAU,GAAA;IACf,IAAA,MAAMkG,KAAK,GAAG,IAAK9B,CAAAA,KAAL,CAAWmC,SAAX,CAAqB,IAAA,CAAKzC,MAA1B,EAAkC,IAAKK,CAAAA,YAAvC,CAAd,CAAA;;QACA,IAAKL,CAAAA,MAAL,IAAe,CAAf,CAAA;IACA,IAAA,OAAOoC,KAAP,CAAA;IACD,GAAA;IAED;;;;;MAGO1H,WAAW,GAAA;IAChB,IAAA,MAAM0H,KAAK,GAAG,IAAK9B,CAAAA,KAAL,CAAWoC,UAAX,CAAsB,IAAA,CAAK1C,MAA3B,EAAmC,IAAKK,CAAAA,YAAxC,CAAd,CAAA;;QACA,IAAKL,CAAAA,MAAL,IAAe,CAAf,CAAA;IACA,IAAA,OAAOoC,KAAP,CAAA;IACD,GAAA;IAED;;;;;MAGOjG,WAAW,GAAA;IAChB,IAAA,MAAMiG,KAAK,GAAG,IAAK9B,CAAAA,KAAL,CAAWqC,UAAX,CAAsB,IAAA,CAAK3C,MAA3B,EAAmC,IAAKK,CAAAA,YAAxC,CAAd,CAAA;;QACA,IAAKL,CAAAA,MAAL,IAAe,CAAf,CAAA;IACA,IAAA,OAAOoC,KAAP,CAAA;IACD,GAAA;IAED;;;;;MAGOQ,YAAY,GAAA;IACjB,IAAA,MAAMR,KAAK,GAAG,IAAK9B,CAAAA,KAAL,CAAWuC,WAAX,CAAuB,IAAA,CAAK7C,MAA5B,EAAoC,IAAKK,CAAAA,YAAzC,CAAd,CAAA;;QACA,IAAKL,CAAAA,MAAL,IAAe,CAAf,CAAA;IACA,IAAA,OAAOoC,KAAP,CAAA;IACD,GAAA;IAED;;;;;MAGOU,aAAa,GAAA;IAClB,IAAA,MAAMV,KAAK,GAAG,IAAK9B,CAAAA,KAAL,CAAWyC,YAAX,CAAwB,IAAA,CAAK/C,MAA7B,EAAqC,IAAKK,CAAAA,YAA1C,CAAd,CAAA;;QACA,IAAKL,CAAAA,MAAL,IAAe,CAAf,CAAA;IACA,IAAA,OAAOoC,KAAP,CAAA;IACD,GAAA;IAED;;;;;MAGOY,QAAQ,GAAA;IACb,IAAA,OAAOC,MAAM,CAACC,YAAP,CAAoB,IAAKjH,CAAAA,QAAL,EAApB,CAAP,CAAA;IACD,GAAA;IAED;;;;;IAGOZ,EAAAA,SAAS,GAAM;QAAA,IAAL0F,CAAK,uEAAD,CAAC,CAAA;QACpB,IAAIoC,MAAM,GAAG,EAAb,CAAA;;QACA,KAAK,IAAIxH,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGoF,CAApB,EAAuBpF,CAAC,EAAxB,EAA4B;UAC1BwH,MAAM,IAAI,IAAKH,CAAAA,QAAL,EAAV,CAAA;IACD,KAAA;;IACD,IAAA,OAAOG,MAAP,CAAA;IACD,GAAA;IAED;;;;;;IAIOC,EAAAA,QAAQ,GAAM;QAAA,IAALrC,CAAK,uEAAD,CAAC,CAAA;IACnB,IAAA,OAAOhC,MAAM,CAAC,IAAA,CAAKoD,SAAL,CAAepB,CAAf,CAAD,CAAb,CAAA;IACD,GAAA;IAED;;;;;;;IAKOsC,EAAAA,UAAU,GAA0B;QAAA,IAAzBtC,CAAyB,uEAArB,CAAqB,CAAA;QAAA,IAAlB9B,QAAkB,uEAAP,OAAO,CAAA;QACzC,OAAOF,MAAM,CAAC,IAAKoD,CAAAA,SAAL,CAAepB,CAAf,CAAD,EAAoB9B,QAApB,CAAb,CAAA;IACD,GAAA;IAED;;;;;;MAIOqE,YAAY,CAAClB,KAAD,EAAe;IAChC,IAAA,IAAA,CAAKmB,UAAL,CAAgBnB,KAAK,GAAG,IAAH,GAAU,IAA/B,CAAA,CAAA;IACA,IAAA,OAAO,IAAP,CAAA;IACD,GAAA;IAED;;;;;MAGOoB,SAAS,CAACpB,KAAD,EAAc;QAC5B,IAAKX,CAAAA,eAAL,CAAqB,CAArB,CAAA,CAAA;;QACA,IAAKnB,CAAAA,KAAL,CAAWmD,OAAX,CAAmB,KAAKzD,MAAL,EAAnB,EAAkCoC,KAAlC,CAAA,CAAA;;IACA,IAAA,IAAA,CAAKsB,sBAAL,EAAA,CAAA;;IACA,IAAA,OAAO,IAAP,CAAA;IACD,GAAA;IAED;;;;;;MAIOH,UAAU,CAACnB,KAAD,EAAc;QAC7B,IAAKX,CAAAA,eAAL,CAAqB,CAArB,CAAA,CAAA;;QACA,IAAKnB,CAAAA,KAAL,CAAWqD,QAAX,CAAoB,KAAK3D,MAAL,EAApB,EAAmCoC,KAAnC,CAAA,CAAA;;IACA,IAAA,IAAA,CAAKsB,sBAAL,EAAA,CAAA;;IACA,IAAA,OAAO,IAAP,CAAA;IACD,GAAA;IAED;;;;;MAGOE,SAAS,CAACxB,KAAD,EAAc;IAC5B,IAAA,OAAO,IAAKmB,CAAAA,UAAL,CAAgBnB,KAAhB,CAAP,CAAA;IACD,GAAA;IAED;;;;;;MAIOyB,UAAU,CAAC7E,KAAD,EAAyB;IACxC,IAAA,IAAA,CAAKyC,eAAL,CAAqBzC,KAAK,CAACoB,MAA3B,CAAA,CAAA;;IACA,IAAA,KAAK,IAAIzE,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGqD,KAAK,CAACoB,MAA1B,EAAkCzE,CAAC,EAAnC,EAAuC;UACrC,IAAK2E,CAAAA,KAAL,CAAWqD,QAAX,CAAoB,IAAA,CAAK3D,MAAL,EAApB,EAAmChB,KAAK,CAACrD,CAAD,CAAxC,CAAA,CAAA;IACD,KAAA;;IACD,IAAA,IAAA,CAAK+H,sBAAL,EAAA,CAAA;;IACA,IAAA,OAAO,IAAP,CAAA;IACD,GAAA;IAED;;;;;;MAIOI,UAAU,CAAC1B,KAAD,EAAc;QAC7B,IAAKX,CAAAA,eAAL,CAAqB,CAArB,CAAA,CAAA;;QACA,IAAKnB,CAAAA,KAAL,CAAWyD,QAAX,CAAoB,IAAA,CAAK/D,MAAzB,EAAiCoC,KAAjC,EAAwC,IAAA,CAAK/B,YAA7C,CAAA,CAAA;;QACA,IAAKL,CAAAA,MAAL,IAAe,CAAf,CAAA;;IACA,IAAA,IAAA,CAAK0D,sBAAL,EAAA,CAAA;;IACA,IAAA,OAAO,IAAP,CAAA;IACD,GAAA;IAED;;;;;;MAIOM,WAAW,CAAC5B,KAAD,EAAc;QAC9B,IAAKX,CAAAA,eAAL,CAAqB,CAArB,CAAA,CAAA;;QACA,IAAKnB,CAAAA,KAAL,CAAW2D,SAAX,CAAqB,IAAA,CAAKjE,MAA1B,EAAkCoC,KAAlC,EAAyC,IAAA,CAAK/B,YAA9C,CAAA,CAAA;;QACA,IAAKL,CAAAA,MAAL,IAAe,CAAf,CAAA;;IACA,IAAA,IAAA,CAAK0D,sBAAL,EAAA,CAAA;;IACA,IAAA,OAAO,IAAP,CAAA;IACD,GAAA;IAED;;;;;;MAIOQ,UAAU,CAAC9B,KAAD,EAAc;QAC7B,IAAKX,CAAAA,eAAL,CAAqB,CAArB,CAAA,CAAA;;QACA,IAAKnB,CAAAA,KAAL,CAAW6D,QAAX,CAAoB,IAAA,CAAKnE,MAAzB,EAAiCoC,KAAjC,EAAwC,IAAA,CAAK/B,YAA7C,CAAA,CAAA;;QACA,IAAKL,CAAAA,MAAL,IAAe,CAAf,CAAA;;IACA,IAAA,IAAA,CAAK0D,sBAAL,EAAA,CAAA;;IACA,IAAA,OAAO,IAAP,CAAA;IACD,GAAA;IAED;;;;;;MAIOU,WAAW,CAAChC,KAAD,EAAc;QAC9B,IAAKX,CAAAA,eAAL,CAAqB,CAArB,CAAA,CAAA;;QACA,IAAKnB,CAAAA,KAAL,CAAW+D,SAAX,CAAqB,IAAA,CAAKrE,MAA1B,EAAkCoC,KAAlC,EAAyC,IAAA,CAAK/B,YAA9C,CAAA,CAAA;;QACA,IAAKL,CAAAA,MAAL,IAAe,CAAf,CAAA;;IACA,IAAA,IAAA,CAAK0D,sBAAL,EAAA,CAAA;;IACA,IAAA,OAAO,IAAP,CAAA;IACD,GAAA;IAED;;;;;;MAIOY,YAAY,CAAClC,KAAD,EAAc;QAC/B,IAAKX,CAAAA,eAAL,CAAqB,CAArB,CAAA,CAAA;;QACA,IAAKnB,CAAAA,KAAL,CAAWiE,UAAX,CAAsB,IAAA,CAAKvE,MAA3B,EAAmCoC,KAAnC,EAA0C,IAAA,CAAK/B,YAA/C,CAAA,CAAA;;QACA,IAAKL,CAAAA,MAAL,IAAe,CAAf,CAAA;;IACA,IAAA,IAAA,CAAK0D,sBAAL,EAAA,CAAA;;IACA,IAAA,OAAO,IAAP,CAAA;IACD,GAAA;IAED;;;;;;MAIOc,YAAY,CAACpC,KAAD,EAAc;QAC/B,IAAKX,CAAAA,eAAL,CAAqB,CAArB,CAAA,CAAA;;QACA,IAAKnB,CAAAA,KAAL,CAAWmE,UAAX,CAAsB,IAAA,CAAKzE,MAA3B,EAAmCoC,KAAnC,EAA0C,IAAA,CAAK/B,YAA/C,CAAA,CAAA;;QACA,IAAKL,CAAAA,MAAL,IAAe,CAAf,CAAA;;IACA,IAAA,IAAA,CAAK0D,sBAAL,EAAA,CAAA;;IACA,IAAA,OAAO,IAAP,CAAA;IACD,GAAA;IAED;;;;;;MAIOgB,aAAa,CAACtC,KAAD,EAAc;QAChC,IAAKX,CAAAA,eAAL,CAAqB,CAArB,CAAA,CAAA;;QACA,IAAKnB,CAAAA,KAAL,CAAWqE,WAAX,CAAuB,IAAA,CAAK3E,MAA5B,EAAoCoC,KAApC,EAA2C,IAAA,CAAK/B,YAAhD,CAAA,CAAA;;QACA,IAAKL,CAAAA,MAAL,IAAe,CAAf,CAAA;;IACA,IAAA,IAAA,CAAK0D,sBAAL,EAAA,CAAA;;IACA,IAAA,OAAO,IAAP,CAAA;IACD,GAAA;IAED;;;;;;MAIOkB,cAAc,CAACxC,KAAD,EAAc;QACjC,IAAKX,CAAAA,eAAL,CAAqB,CAArB,CAAA,CAAA;;QACA,IAAKnB,CAAAA,KAAL,CAAWuE,YAAX,CAAwB,IAAA,CAAK7E,MAA7B,EAAqCoC,KAArC,EAA4C,IAAA,CAAK/B,YAAjD,CAAA,CAAA;;QACA,IAAKL,CAAAA,MAAL,IAAe,CAAf,CAAA;;IACA,IAAA,IAAA,CAAK0D,sBAAL,EAAA,CAAA;;IACA,IAAA,OAAO,IAAP,CAAA;IACD,GAAA;IAED;;;;;;MAIOoB,SAAS,CAACvF,GAAD,EAAY;QAC1B,OAAO,IAAA,CAAKgE,UAAL,CAAgBhE,GAAG,CAACwF,UAAJ,CAAe,CAAf,CAAhB,CAAP,CAAA;IACD,GAAA;IAED;;;;;;MAIOC,UAAU,CAACzF,GAAD,EAAY;IAC3B,IAAA,KAAK,IAAI5D,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG4D,GAAG,CAACa,MAAxB,EAAgCzE,CAAC,EAAjC,EAAqC;IACnC,MAAA,IAAA,CAAK4H,UAAL,CAAgBhE,GAAG,CAACwF,UAAJ,CAAepJ,CAAf,CAAhB,CAAA,CAAA;IACD,KAAA;;IACD,IAAA,OAAO,IAAP,CAAA;IACD,GAAA;IAED;;;;;;MAIOsJ,SAAS,CAAC1F,GAAD,EAAY;IAC1B,IAAA,OAAO,KAAKsE,UAAL,CAAgBvE,MAAM,CAACC,GAAD,CAAtB,CAAP,CAAA;IACD,GAAA;IAED;;;;;;;MAKO2F,OAAO,GAAA;QACZ,OAAO,IAAIrD,UAAJ,CAAe,IAAK1H,CAAAA,MAApB,EAA4B,IAAA,CAAKgG,UAAjC,EAA6C,IAAKL,CAAAA,eAAlD,CAAP,CAAA;IACD,GAAA;IAED;;;;;;MAIQ4D,sBAAsB,GAAA;IAC5B,IAAA,IAAI,IAAK1D,CAAAA,MAAL,GAAc,IAAA,CAAKF,eAAvB,EAAwC;UACtC,IAAKA,CAAAA,eAAL,GAAuB,IAAA,CAAKE,MAA5B,CAAA;IACD,KAAA;IACF,GAAA;;IA1iBkB;;ICbrB;;;;;;IAMM,SAAUmF,iBAAV,GA0BE;MAAA,IAzBNxF,OAyBM,uEAAF,EAAE,CAAA;MAEN,IAAI;IACFb,IAAAA,IAAI,GAAG,CADL;IAEFsG,IAAAA,EAAE,GAAG,CAFH;IAGFhF,IAAAA,MAAM,GAAG,IAHP;IAIFiF,IAAAA,WAAW,GAAG,IAJZ;IAKFC,IAAAA,SAAS,GAAG,IALV;IAMFC,IAAAA,YAAY,GAAG,SAAA;IANb,GAAA,GAOA5F,OAPJ,CAAA;IASA,EAAA,MAAM6F,KAAK,GAAG,IAAIC,YAAJ,CAAiBrF,MAAjB,CAAd,CAAA;MAEA,IAAIsF,GAAG,GAAGtF,MAAV,CAAA;;MACA,IAAIiF,WAAW,IAAIC,SAAnB,EAA8B;QAC5BI,GAAG,GAAGtF,MAAM,GAAG,CAAf,CAAA;OADF,MAEO,IAAK,CAACiF,WAAD,IAAgBC,SAAjB,IAAgCD,WAAW,IAAI,CAACC,SAApD,EAAgE;IACrEI,IAAAA,GAAG,GAAGtF,MAAN,CAAA;IACD,GAFM,MAEA,IAAI,CAACiF,WAAD,IAAgB,CAACC,SAArB,EAAgC;QACrCI,GAAG,GAAGtF,MAAM,GAAG,CAAf,CAAA;IACD,GAAA;;IAED,EAAA,IAAIuF,KAAK,GAAG,CAACP,EAAE,GAAGtG,IAAN,IAAc4G,GAA1B,CAAA;;MACA,IAAIH,YAAY,KAAK,SAArB,EAAgC;IAC9B,IAAA,IAAIF,WAAJ,EAAiB;UACf,IAAIO,KAAK,GAAG,CAAZ,CAAA;;UACA,OAAOA,KAAK,GAAGxF,MAAf,EAAuB;YACrBoF,KAAK,CAACI,KAAD,CAAL,GAAe9G,IAAI,GAAG6G,KAAK,GAAGC,KAA9B,CAAA;YACAA,KAAK,EAAA,CAAA;IACN,OAAA;IACF,KAND,MAMO;UACL,IAAIA,KAAK,GAAG,CAAZ,CAAA;;UACA,OAAOA,KAAK,GAAGxF,MAAf,EAAuB;YACrBoF,KAAK,CAACI,KAAD,CAAL,GAAe9G,IAAI,GAAG6G,KAAK,IAAIC,KAAK,GAAG,CAAZ,CAA3B,CAAA;YACAA,KAAK,EAAA,CAAA;IACN,OAAA;IACF,KAAA;IACF,GAdD,MAcO,IAAIL,YAAY,KAAK,KAArB,EAA4B;QACjC,IAAIM,IAAI,GAAG,CAACT,EAAE,GAAGtG,IAAN,MAAgB,CAAI4G,GAAAA,GAApB,CAAX,CAAA;IACA,IAAA,IAAII,aAAa,GAAG5K,IAAI,CAAC6K,GAAL,CAASjH,IAAT,CAAA,GAAiB5D,IAAI,CAAC6K,GAAL,CAASF,IAAT,CAArC,CAAA;;IAEA,IAAA,IAAIR,WAAJ,EAAiB;UACf,IAAIO,KAAK,GAAG,CAAZ,CAAA;;UACA,OAAOA,KAAK,GAAGxF,MAAf,EAAuB;YACrBoF,KAAK,CAACI,KAAD,CAAL,GAAeC,IAAI,KAAKC,aAAa,GAAGF,KAArB,CAAnB,CAAA;YACAA,KAAK,EAAA,CAAA;IACN,OAAA;IACF,KAND,MAMO;UACL,IAAIA,KAAK,GAAG,CAAZ,CAAA;;UACA,OAAOA,KAAK,GAAGxF,MAAf,EAAuB;YACrBoF,KAAK,CAACI,KAAD,CAAL,GAAeC,IAAI,KAAKC,aAAa,GAAGF,KAAhB,GAAwB,CAA7B,CAAnB,CAAA;YACAA,KAAK,EAAA,CAAA;IACN,OAAA;IACF,KAAA;IACF,GAjBM,MAiBA;IACL,IAAA,MAAM,IAAInI,KAAJ,CACJ,0GADI,CAAN,CAAA;IAGD,GAAA;;IAED,EAAA,OAAO+H,KAAP,CAAA;IACD;;IC7FD;;;;;;;;;IASM,SAAUQ,uBAAV,CACJnH,CADI,EAEJoH,CAFI,EAEW;IAEf,EAAA,MAAMC,EAAE,GAAGrH,CAAC,CAACuB,MAAb,CAAA;;MACA,IAAI8F,EAAE,KAAK,CAAX,EAAc;IACZ,IAAA,IAAID,CAAC,CAAC7F,MAAF,KAAa8F,EAAjB,EAAqB;IACnB;IACA,MAAA,MAAM,IAAIC,UAAJ,CAAe,iCAAf,CAAN,CAAA;IACD,KAAA;;IAED,IAAA,MAAMC,MAAM,GAAGvH,CAAC,CAAC,CAAD,CAAhB,CAAA;QACA,MAAMwH,KAAK,GAAGxH,CAAC,CAACA,CAAC,CAACuB,MAAF,GAAW,CAAZ,CAAf,CAAA;;QAEA,IAAIgG,MAAM,GAAGC,KAAb,EAAoB;IAClB;IACA,MAAA,OAAO,CAACxH,CAAC,CAACyH,KAAF,CAAQ,CAAR,EAAW9J,OAAX,EAAD,EAAuByJ,CAAC,CAACK,KAAF,CAAQ,CAAR,CAAW9J,CAAAA,OAAX,EAAvB,CAAP,CAAA;IACD,KAAA;IACF,GAAA;;IACD,EAAA,OAAO,CAACqC,CAAD,EAAIoH,CAAJ,CAAP,CAAA;IACD;;ICjBD;;;;;;;IAMM,MAAOM,iBAAP,CAAwB;IAI5B3N,EAAAA,WAAAA,CAAYC,IAAZ,EAAwB;IACtB,IAAA,IAAA,CAAK2N,OAAL,GAAe,CAAC3N,IAAI,GAAG,CAAR,MAAe,CAA9B,CAAA;IACA,IAAA,IAAA,CAAK4N,WAAL,GAAmB,CAAC5N,IAAI,GAAG,CAAR,MAAe,CAAlC,CAAA;IACA,IAAA,IAAA,CAAK6N,kBAAL,GAA0B,CAAC7N,IAAI,GAAG,GAAR,MAAiB,CAA3C,CAAA;IACD,GAAA;;IAR2B,CAAA;IAW9B;;;;;;;IAMM,MAAO8N,SAAP,CAAgB;IAapB/N,EAAAA,WAAAA,CAAYuB,MAAZ,EAA4B;QAC1B,IAAKG,CAAAA,UAAL,GAAkB,IAAIiM,iBAAJ,CAAsBpM,MAAM,CAACW,SAAP,EAAtB,CAAlB,CAAA;IACA,IAAA,IAAA,CAAKP,SAAL,GAAiBJ,MAAM,CAAC8B,QAAP,EAAjB,CAAA;IACA,IAAA,IAAA,CAAK2K,WAAL,GAAmBzM,MAAM,CAACc,UAAP,EAAnB,CAAA;IACA,IAAA,IAAA,CAAK4L,SAAL,GAAiB1M,MAAM,CAACO,WAAP,EAAjB,CAAA;IACA,IAAA,IAAA,CAAKoM,OAAL,GAAe3M,MAAM,CAACO,WAAP,EAAf,CAAA;IACA,IAAA,IAAA,CAAKqM,UAAL,GAAkB5M,MAAM,CAACO,WAAP,EAAlB,CAAA;IACA,IAAA,IAAA,CAAKD,YAAL,GAAoBN,MAAM,CAAC+B,UAAP,EAApB,CAAA;IACA,IAAA,IAAA,CAAK8K,kBAAL,GAA0B7M,MAAM,CAAC+B,UAAP,EAA1B,CAAA;IACA,IAAA,IAAA,CAAK+K,UAAL,GAAkB9M,MAAM,CAACO,WAAP,EAAlB,CAAA;IACA,IAAA,IAAA,CAAK0C,QAAL,GAAgBjD,MAAM,CAACkB,SAAP,CAAiB,CAAjB,CAAoBC,CAAAA,OAApB,CAA4B,OAA5B,EAAqC,EAArC,CAAA,CAAyCC,IAAzC,EAAhB,CAAA;IACD,GAAA;;IAxBmB,CAAA;IA2BtB;;;;;;;;IAOM,SAAU2L,SAAV,CACJrI,CADI,EAEJoH,CAFI,EAGJ3I,UAHI,EAGc;;;MAElB,MAAM6J,KAAK,GAAG,sCAAuCC,CAAAA,IAAvC,CACZ9J,UAAU,CAACzC,UADC,CAAd,CAAA;MAGA,MAAMwM,KAAK,GAAG,sCAAuCD,CAAAA,IAAvC,CACZ9J,UAAU,CAACvC,UADC,CAAd,CAAA;MAIA,MAAM,CAACuM,EAAD,EAAKC,EAAL,CAAA,GAAyCvB,uBAAuB,CAACnH,CAAD,EAAIoH,CAAJ,CAAtE,CAAA;IAEA,EAAA,MAAMuB,SAAS,GAA2B;IACxC3I,IAAAA,CAAC,EAAE;IACD4I,MAAAA,MAAM,EAAE,GADP;UAEDC,KAAK,EAAE,YAAK,KAAL,IAAA,IAAA,KAAK,WAAL,GAAK,KAAA,CAAL,GAAK,KAAA,CAAEC,MAAP,MAAa,IAAb,IAAaC,EAAAA,KAAAA,KAAAA,CAAb,GAAa,KAAb,CAAA,GAAaA,GAAEF,KAAf,KAAyBpK,UAAU,CAACzC,UAF1C;UAGDgN,KAAK,EAAE,YAAK,KAAL,IAAA,IAAA,KAAK,WAAL,GAAK,KAAA,CAAL,QAAK,CAAEF,MAAP,MAAa,IAAb,IAAaG,aAAb,GAAa,KAAA,CAAb,GAAaA,EAAED,CAAAA,KAAf,KAAwB,EAH9B;IAIDnI,MAAAA,IAAI,EAAE4H,EAJL;IAKDS,MAAAA,WAAW,EAAE,KAAA;SANyB;IAQxC9B,IAAAA,CAAC,EAAE;IACDwB,MAAAA,MAAM,EAAE,GADP;UAEDC,KAAK,EAAE,YAAK,KAAL,IAAA,IAAA,KAAK,WAAL,GAAK,KAAA,CAAL,GAAK,KAAA,CAAEC,MAAP,MAAa,IAAb,IAAaK,EAAAA,KAAAA,KAAAA,CAAb,GAAa,KAAb,CAAA,GAAaA,GAAEN,KAAf,KAAwBpK,UAAU,CAACvC,UAFzC;UAGD8M,KAAK,EAAE,YAAK,KAAL,IAAA,IAAA,KAAK,WAAL,GAAK,KAAA,CAAL,QAAK,CAAEF,MAAP,MAAa,IAAb,IAAaM,aAAb,GAAa,KAAA,CAAb,GAAaA,EAAEJ,CAAAA,KAAf,KAAwB,EAH9B;IAIDnI,MAAAA,IAAI,EAAE6H,EAJL;IAKDQ,MAAAA,WAAW,EAAE,IAAA;IALZ,KAAA;OARL,CAAA;IAgBA,EAAA,OAAOP,SAAP,CAAA;IACD;;IC5FD;;;;;;;;IAOM,SAAUU,YAAV,CACJ/N,MADI,EAEJmD,UAFI,EAEoB;IAExB,EAAA,IAAIuB,CAAJ,CAAA;MACA,IAAIzC,OAAO,GAAe,EAA1B,CAAA;IAEA,EAAA,MAAMiC,SAAS,GAAGX,YAAY,CAACJ,UAAU,CAAChD,UAAZ,CAA9B,CAAA;;IAEA,EAAA,IAAI+D,SAAS,KAAK,IAAd,IAAsBA,SAAS,KAAK,KAAxC,EAA+C;IAC7C;IACAQ,IAAAA,CAAC,GAAG,IAAI4G,YAAJ,CAAiBnI,UAAU,CAAC7C,YAA5B,CAAJ,CAAA;;IACA,IAAA,KAAK,IAAIkB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG2B,UAAU,CAAC7C,YAA/B,EAA6CkB,CAAC,EAA9C,EAAkD;IAChDkD,MAAAA,CAAC,CAAClD,CAAD,CAAD,GAAOxB,MAAM,CAACO,WAAP,EAAP,CAAA;IACD,KAAA;OALH,MAMO,IAAI2D,SAAS,KAAK,IAAd,IAAsBA,SAAS,KAAK,GAAxC,EAA6C;IAClD;QACAQ,CAAC,GAAGsG,iBAAiB,CAAC;UACpBrG,IAAI,EAAExB,UAAU,CAAC3C,SADG;UAEpByK,EAAE,EAAE9H,UAAU,CAAC1C,OAFK;UAGpBwF,MAAM,EAAE9C,UAAU,CAAC7C,YAAAA;IAHC,KAAD,CAArB,CAAA;IAKD,GAAA;;IAED,EAAA,KAAK,IAAIkB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG2B,UAAU,CAAClB,OAA/B,EAAwCT,CAAC,EAAzC,EAA6C;IAC3C;QACA,MAAMwM,aAAa,GAAG,IAAIxB,SAAJ,CAAcxM,MAAd,CAAtB,CAF2C;;IAK3C,IAAA,IAAIkE,SAAS,KAAK,MAAd,IAAwBA,SAAS,KAAK,WAA1C,EAAuD;IACrDQ,MAAAA,CAAC,GAAG,IAAI4G,YAAJ,CAAiB0C,aAAa,CAAC1N,YAA/B,CAAJ,CAAA;;IACA,MAAA,KAAK,IAAI2N,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGvJ,CAAC,CAACuB,MAAtB,EAA8BgI,CAAC,EAA/B,EAAmC;IACjCvJ,QAAAA,CAAC,CAACuJ,CAAD,CAAD,GAAOjO,MAAM,CAACO,WAAP,EAAP,CAAA;IACD,OAAA;IACF,KAAA;;IAED,IAAA,MAAMuL,CAAC,GAAGoC,OAAO,CACf,IAAI5C,YAAJ,CAAkB5G,CAAkB,CAACuB,MAArC,CADe,EAEf+H,aAFe,EAGf7K,UAHe,EAIfnD,MAJe,CAAjB,CAAA;QAOA,MAAMqN,SAAS,GAAGN,SAAS,CAACrI,CAAD,EAAoBoH,CAApB,EAAuB3I,UAAvB,CAA3B,CAAA;QAEAlB,OAAO,CAACR,IAAR,CAAa;IAAEgC,MAAAA,IAAI,EAAEuK,aAAR;IAAuBX,MAAAA,SAAAA;SAApC,CAAA,CAAA;IACD,GAAA;;IACD,EAAA,OAAOpL,OAAP,CAAA;IACD,CAAA;IAEK,SAAUiM,OAAV,CACJpC,CADI,EAEJqC,SAFI,EAGJhL,UAHI,EAIJnD,MAJI,EAIY;MAEhB,MAAM;QACJI,SADI;IAEJD,IAAAA,UAAU,EAAE;IAAExB,MAAAA,eAAAA;IAAF,KAAA;IAFR,GAAA,GAGFwE,UAHJ,CAAA;;IAKA,EAAA,IAAIgL,SAAS,CAAC/N,SAAV,KAAwB,CAA5B,EAA+B;QAC7B+N,SAAS,CAAC/N,SAAV,GAAsBA,SAAtB,CAAA;IACD,GAAA;;IACD,EAAA,MAAMgO,OAAO,GAAGrN,IAAI,CAACsN,GAAL,CACd,CADc,EAEdF,SAAS,CAAC/N,SAAV,IAAuBzB,eAAe,GAAG,EAAH,GAAQ,EAA9C,CAFc,CAAhB,CAAA;;IAKA,EAAA,IAAIA,eAAJ,EAAqB;IACnB,IAAA,KAAK,IAAIsP,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGnC,CAAC,CAAC7F,MAAtB,EAA8BgI,CAAC,EAA/B,EAAmC;UACjCnC,CAAC,CAACmC,CAAD,CAAD,GAAOjO,MAAM,CAACK,SAAP,KAAqB+N,OAA5B,CAAA;IACD,KAAA;IACF,GAJD,MAIO;IACL,IAAA,KAAK,IAAIH,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGnC,CAAC,CAAC7F,MAAtB,EAA8BgI,CAAC,EAA/B,EAAmC;IACjC,MAAA,IAAIE,SAAS,CAAC/N,SAAV,KAAwB,CAAC,GAA7B,EAAkC;YAChC0L,CAAC,CAACmC,CAAD,CAAD,GAAOjO,MAAM,CAACoI,SAAP,KAAqBgG,OAA5B,CAAA;IACD,OAFD,MAEO;IACLtC,QAAAA,CAAC,CAACmC,CAAD,CAAD,GAAOjO,MAAM,CAACO,WAAP,EAAP,CAAA;IACD,OAAA;IACF,KAAA;IACF,GAAA;;IACD,EAAA,OAAOuL,CAAP,CAAA;IACD;;IC3FD;;;;;;;;IAOM,SAAUwC,YAAV,CACJtO,MADI,EAEJmD,UAFI,EAEoB;IAExB;IACA,EAAA,IAAIlB,OAAO,GAAe,EAA1B,CAHwB;;MAMxB,MAAMyC,CAAC,GAAiBsG,iBAAiB,CAAC;QACxCrG,IAAI,EAAExB,UAAU,CAAC3C,SADuB;QAExCyK,EAAE,EAAE9H,UAAU,CAAC1C,OAFyB;QAGxCwF,MAAM,EAAE9C,UAAU,CAAC7C,YAAAA;IAHqB,GAAD,CAAzC,CAAA;;IAMA,EAAA,KACE,IAAIkB,CAAC,GAAG,CADV,EAEExB,MAAM,CAAC6F,MAAP,GAAgB1C,UAAU,CAAC7C,YAA3B,GAA0CN,MAAM,CAACiG,MAFnD,EAGEzE,CAAC,EAHH,EAIE;IACA,IAAA,MAAMwM,aAAa,GAAG,IAAIxB,SAAJ,CAAcxM,MAAd,CAAtB,CAAA;IACA,IAAA,MAAM8L,CAAC,GAAGyC,OAAO,CACf,IAAIjD,YAAJ,CAAiB5G,CAAC,CAACuB,MAAnB,CADe,EAEf+H,aAFe,EAGf7K,UAHe,EAIfnD,MAJe,CAAjB,CAAA;QAMA,MAAMqN,SAAS,GAAGN,SAAS,CAACrI,CAAD,EAAIoH,CAAJ,EAAO3I,UAAP,CAA3B,CAAA;QAEAlB,OAAO,CAACR,IAAR,CAAa;IAAEgC,MAAAA,IAAI,EAAEuK,aAAR;IAAuBX,MAAAA,SAAAA;SAApC,CAAA,CAAA;IACD,GAAA;;IAED,EAAA,OAAOpL,OAAP,CAAA;IACD,CAAA;IAED;;;;;;;;;;;IAUM,SAAUsM,OAAV,CACJzC,CADI,EAEJqC,SAFI,EAGJhL,UAHI,EAIJnD,MAJI,EAIY;MAEhB,MAAM;QACJE,WADI;QAEJE,SAFI;IAGJD,IAAAA,UAAU,EAAE;IAAExB,MAAAA,eAAAA;IAAF,KAAA;IAHR,GAAA,GAIFwE,UAJJ,CAAA;;IAMA,EAAA,IAAIgL,SAAS,CAAC/N,SAAV,KAAwB,CAA5B,EAA+B;QAC7B+N,SAAS,CAAC/N,SAAV,GAAsBA,SAAtB,CAAA;IACD,GAAA;;IACD,EAAA,MAAMgO,OAAO,GAAGrN,IAAI,CAACsN,GAAL,CACd,CADc,EAEdF,SAAS,CAAC/N,SAAV,IAAuBzB,eAAe,GAAG,EAAH,GAAQ,EAA9C,CAFc,CAAhB,CAAA;;IAKA,EAAA,IAAIA,eAAJ,EAAqB;IACnB,IAAA,KAAK,IAAIsP,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGnC,CAAC,CAAC7F,MAAtB,EAA8BgI,CAAC,EAA/B,EAAmC;UACjCnC,CAAC,CAACmC,CAAD,CAAD,GAAOjO,MAAM,CAACK,SAAP,KAAqB+N,OAA5B,CAAA;IACD,KAAA;IACF,GAJD,MAIO;IACL,IAAA,KAAK,IAAIH,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGnC,CAAC,CAAC7F,MAAtB,EAA8BgI,CAAC,EAA/B,EAAmC;UACjC,IAAI/N,WAAW,KAAK,IAApB,EAA0B;IACxB4L,QAAAA,CAAC,CAACmC,CAAD,CAAD,GACE,CAAC,CAACjO,MAAM,CAACW,SAAP,EAAA,IAAsB,EAAvB,KACEX,MAAM,CAAC8B,QAAP,EAAqB,IAAA,EADvB,CAEE9B,IAAAA,MAAM,CAACW,SAAP,MAAsB,CAFxB,CAAA,IAGEX,MAAM,CAACW,SAAP,EAAA,IAAsB,CAHxB,CAAD,IAIAyN,OALF,CAAA;IAMD,OAAA;IACF,KAAA;IACF,GAAA;;IACD,EAAA,OAAOtC,CAAP,CAAA;IACD;;IC9ED;;;;;;IAMM,SAAU0C,YAAV,CAAuBxO,MAAvB,EAAyCsC,SAAzC,EAA0D;IAC9D,EAAA,IAAImM,SAAS,GAAa;IACxBC,IAAAA,IAAI,EAAE1O,MAAM,CAAC+B,UAAP,EADkB;IAExB4M,IAAAA,UAAU,EAAE3O,MAAM,CAAC+B,UAAP,EAFY;IAGxB6M,IAAAA,UAAU,EAAE5O,MAAM,CAAC+B,UAAP,EAHY;IAIxB8M,IAAAA,UAAU,EAAE7O,MAAM,CAAC+B,UAAP,EAJY;IAKxB+M,IAAAA,QAAQ,EAAE9O,MAAM,CAAC+B,UAAP,EALc;IAMxBkB,IAAAA,QAAQ,EAAEjD,MAAM,CAACkB,SAAP,CAAiB,EAAjB,CAAA,CAAqBE,IAArB,EAAA,CAA4BD,OAA5B,CAAoC,OAApC,EAA6C,EAA7C,CANc;;OAA1B,CAAA;MAQA,MAAM4N,OAAO,GAAG/O,MAAM,CAACkB,SAAP,CAAiBuN,SAAS,CAACI,UAA3B,CAAhB,CAAA;IACA7O,EAAAA,MAAM,CAAC6F,MAAP,GAAgBvD,SAAS,GAAGmM,SAAS,CAACG,UAAtC,CAAA;MACA,MAAMI,QAAQ,GAAGhP,MAAM,CACpBkB,SADc,CACJuN,SAAS,CAACC,IAAV,GAAiBD,SAAS,CAACG,UADvB,EAEdxN,IAFc,EAAA,CAGdD,OAHc,CAGN,OAHM,EAGG,EAHH,CAAjB,CAAA;MAIA,OAAO;IAAEsC,IAAAA,IAAI,EAAEgL,SAAR;IAAmBlJ,IAAAA,IAAI,EAAEwJ,OAAzB;IAAkCE,IAAAA,IAAI,EAAED,QAAAA;OAA/C,CAAA;IACD;;ICvBD;;;;;;;IAMM,SAAUE,KAAV,CAAgBlP,MAAhB,EAAiC;IACrC,EAAA,MAAMmP,QAAQ,GAAG,IAAI7J,QAAJ,CAAatF,MAAb,CAAjB,CAAA;IACA,EAAA,MAAMyD,IAAI,GAAGN,UAAU,CAACgM,QAAD,CAAvB,CAAA;;MAEA,IAAI1L,IAAI,YAAY7B,YAApB,EAAkC;IAChC;IACA,IAAA,MAAMK,OAAO,GAAG8L,YAAY,CAACoB,QAAD,EAAW1L,IAAX,CAA5B,CAAA;IACA,IAAA,MAAM2L,IAAI,GACR3L,IAAI,CAACnB,SAAL,KAAmB,CAAnB,GAAuBkM,YAAY,CAACW,QAAD,EAAW1L,IAAI,CAACnB,SAAhB,CAAnC,GAAgE,IADlE,CAAA;QAEA,OAAO;UAAEmB,IAAF;UAAQxB,OAAR;IAAiBmN,MAAAA,IAAAA;SAAxB,CAAA;IACD,GAND,MAMO;IACL;QACA,OAAO;UACL3L,IADK;IAELxB,MAAAA,OAAO,EAAEqM,YAAY,CAACa,QAAD,EAAW1L,IAAX,CAAA;SAFvB,CAAA;IAID,GAAA;IACF;;;;;;;;;;;"}