summaryrefslogtreecommitdiffstats
path: root/testing/web-platform/mozilla/tests/webgpu/common/util/util.js.map
blob: 4a8ad3bd504071bcc7ef292816f0ab5983ab6860 (plain)
1
{"version":3,"file":"util.js","names":["Float16Array","globalTestConfig","Logger","keysOf","timeout","ErrorWithExtra","Error","constructor","baseOrMessage","newExtra","message","oldExtras","extra","globalDebugMode","omitted","assert","condition","msg","assertOK","value","assertReject","p","unreachable","ex","perf","performance","require","now","resolveOnTimeout","ms","Promise","resolve","PromiseTimeoutError","rejectOnTimeout","_resolve","reject","raceWithRejectOnTimeout","noRaceWithRejectOnTimeout","timeoutPromise","handle","finally","clearTimeout","race","assertNotSettledWithinTime","rejectWhenSettled","then","undefined","rejectWithoutUncaught","err","catch","sortObjectByKey","v","sortedObject","k","Object","keys","sort","objectEquals","x","y","Number","isNaN","Function","RegExp","valueOf","Array","isArray","length","Date","x1","y1","every","i","indexOf","range","n","fn","map","_","iterRange","mapLazy","xs","f","Symbol","iterator","TypedArrayBufferViewInstances","Uint8Array","Uint8ClampedArray","Uint16Array","Uint32Array","Int8Array","Int16Array","Int32Array","Float32Array","Float64Array","kTypedArrayBufferViews","result","name","kTypedArrayBufferViewKeys","kTypedArrayBufferViewConstructors","values","subarrayAsU8","buf","start","ArrayBuffer","byteLength","byteOffset","BYTES_PER_ELEMENT","buffer","memcpy","src","dst","set"],"sources":["../../../src/common/util/util.ts"],"sourcesContent":["import { Float16Array } from '../../external/petamoriken/float16/float16.js';\nimport { globalTestConfig } from '../framework/test_config.js';\nimport { Logger } from '../internal/logging/logger.js';\n\nimport { keysOf } from './data_tables.js';\nimport { timeout } from './timeout.js';\n\n/**\n * Error with arbitrary `extra` data attached, for debugging.\n * The extra data is omitted if not running the test in debug mode (`?debug=1`).\n */\nexport class ErrorWithExtra extends Error {\n  readonly extra: { [k: string]: unknown };\n\n  /**\n   * `extra` function is only called if in debug mode.\n   * If an `ErrorWithExtra` is passed, its message is used and its extras are passed through.\n   */\n  constructor(message: string, extra: () => {});\n  constructor(base: ErrorWithExtra, newExtra: () => {});\n  constructor(baseOrMessage: string | ErrorWithExtra, newExtra: () => {}) {\n    const message = typeof baseOrMessage === 'string' ? baseOrMessage : baseOrMessage.message;\n    super(message);\n\n    const oldExtras = baseOrMessage instanceof ErrorWithExtra ? baseOrMessage.extra : {};\n    this.extra = Logger.globalDebugMode\n      ? { ...oldExtras, ...newExtra() }\n      : { omitted: 'pass ?debug=1' };\n  }\n}\n\n/**\n * Asserts `condition` is true. Otherwise, throws an `Error` with the provided message.\n */\nexport function assert(condition: boolean, msg?: string | (() => string)): asserts condition {\n  if (!condition) {\n    throw new Error(msg && (typeof msg === 'string' ? msg : msg()));\n  }\n}\n\n/** If the argument is an Error, throw it. Otherwise, pass it back. */\nexport function assertOK<T>(value: Error | T): T {\n  if (value instanceof Error) {\n    throw value;\n  }\n  return value;\n}\n\n/**\n * Resolves if the provided promise rejects; rejects if it does not.\n */\nexport async function assertReject(p: Promise<unknown>, msg?: string): Promise<void> {\n  try {\n    await p;\n    unreachable(msg);\n  } catch (ex) {\n    // Assertion OK\n  }\n}\n\n/**\n * Assert this code is unreachable. Unconditionally throws an `Error`.\n */\nexport function unreachable(msg?: string): never {\n  throw new Error(msg);\n}\n\n/**\n * The `performance` interface.\n * It is available in all browsers, but it is not in scope by default in Node.\n */\nconst perf = typeof performance !== 'undefined' ? performance : require('perf_hooks').performance;\n\n/**\n * Calls the appropriate `performance.now()` depending on whether running in a browser or Node.\n */\nexport function now(): number {\n  return perf.now();\n}\n\n/**\n * Returns a promise which resolves after the specified time.\n */\nexport function resolveOnTimeout(ms: number): Promise<void> {\n  return new Promise(resolve => {\n    timeout(() => {\n      resolve();\n    }, ms);\n  });\n}\n\nexport class PromiseTimeoutError extends Error {}\n\n/**\n * Returns a promise which rejects after the specified time.\n */\nexport function rejectOnTimeout(ms: number, msg: string): Promise<never> {\n  return new Promise((_resolve, reject) => {\n    timeout(() => {\n      reject(new PromiseTimeoutError(msg));\n    }, ms);\n  });\n}\n\n/**\n * Takes a promise `p`, and returns a new one which rejects if `p` takes too long,\n * and otherwise passes the result through.\n */\nexport function raceWithRejectOnTimeout<T>(p: Promise<T>, ms: number, msg: string): Promise<T> {\n  if (globalTestConfig.noRaceWithRejectOnTimeout) {\n    return p;\n  }\n  // Setup a promise that will reject after `ms` milliseconds. We cancel this timeout when\n  // `p` is finalized, so the JavaScript VM doesn't hang around waiting for the timer to\n  // complete, once the test runner has finished executing the tests.\n  const timeoutPromise = new Promise((_resolve, reject) => {\n    const handle = timeout(() => {\n      reject(new PromiseTimeoutError(msg));\n    }, ms);\n    p = p.finally(() => clearTimeout(handle));\n  });\n  return Promise.race([p, timeoutPromise]) as Promise<T>;\n}\n\n/**\n * Takes a promise `p` and returns a new one which rejects if `p` resolves or rejects,\n * and otherwise resolves after the specified time.\n */\nexport function assertNotSettledWithinTime(\n  p: Promise<unknown>,\n  ms: number,\n  msg: string\n): Promise<undefined> {\n  // Rejects regardless of whether p resolves or rejects.\n  const rejectWhenSettled = p.then(() => Promise.reject(new Error(msg)));\n  // Resolves after `ms` milliseconds.\n  const timeoutPromise = new Promise<undefined>(resolve => {\n    const handle = timeout(() => {\n      resolve(undefined);\n    }, ms);\n    p.finally(() => clearTimeout(handle));\n  });\n  return Promise.race([rejectWhenSettled, timeoutPromise]);\n}\n\n/**\n * Returns a `Promise.reject()`, but also registers a dummy `.catch()` handler so it doesn't count\n * as an uncaught promise rejection in the runtime.\n */\nexport function rejectWithoutUncaught<T>(err: unknown): Promise<T> {\n  const p = Promise.reject(err);\n  // Suppress uncaught promise rejection.\n  p.catch(() => {});\n  return p;\n}\n\n/**\n * Makes a copy of a JS `object`, with the keys reordered into sorted order.\n */\nexport function sortObjectByKey(v: { [k: string]: unknown }): { [k: string]: unknown } {\n  const sortedObject: { [k: string]: unknown } = {};\n  for (const k of Object.keys(v).sort()) {\n    sortedObject[k] = v[k];\n  }\n  return sortedObject;\n}\n\n/**\n * Determines whether two JS values are equal, recursing into objects and arrays.\n * NaN is treated specially, such that `objectEquals(NaN, NaN)`.\n */\nexport function objectEquals(x: unknown, y: unknown): boolean {\n  if (typeof x !== 'object' || typeof y !== 'object') {\n    if (typeof x === 'number' && typeof y === 'number' && Number.isNaN(x) && Number.isNaN(y)) {\n      return true;\n    }\n    return x === y;\n  }\n  if (x === null || y === null) return x === y;\n  if (x.constructor !== y.constructor) return false;\n  if (x instanceof Function) return x === y;\n  if (x instanceof RegExp) return x === y;\n  if (x === y || x.valueOf() === y.valueOf()) return true;\n  if (Array.isArray(x) && Array.isArray(y) && x.length !== y.length) return false;\n  if (x instanceof Date) return false;\n  if (!(x instanceof Object)) return false;\n  if (!(y instanceof Object)) return false;\n\n  const x1 = x as { [k: string]: unknown };\n  const y1 = y as { [k: string]: unknown };\n  const p = Object.keys(x);\n  return Object.keys(y).every(i => p.indexOf(i) !== -1) && p.every(i => objectEquals(x1[i], y1[i]));\n}\n\n/**\n * Generates a range of values `fn(0)..fn(n-1)`.\n */\nexport function range<T>(n: number, fn: (i: number) => T): T[] {\n  return [...new Array(n)].map((_, i) => fn(i));\n}\n\n/**\n * Generates a range of values `fn(0)..fn(n-1)`.\n */\nexport function* iterRange<T>(n: number, fn: (i: number) => T): Iterable<T> {\n  for (let i = 0; i < n; ++i) {\n    yield fn(i);\n  }\n}\n\n/** Creates a (reusable) iterable object that maps `f` over `xs`, lazily. */\nexport function mapLazy<T, R>(xs: Iterable<T>, f: (x: T) => R): Iterable<R> {\n  return {\n    *[Symbol.iterator]() {\n      for (const x of xs) {\n        yield f(x);\n      }\n    },\n  };\n}\n\nconst TypedArrayBufferViewInstances = [\n  new Uint8Array(),\n  new Uint8ClampedArray(),\n  new Uint16Array(),\n  new Uint32Array(),\n  new Int8Array(),\n  new Int16Array(),\n  new Int32Array(),\n  new Float16Array(),\n  new Float32Array(),\n  new Float64Array(),\n] as const;\n\nexport type TypedArrayBufferView = typeof TypedArrayBufferViewInstances[number];\n\nexport type TypedArrayBufferViewConstructor<\n  A extends TypedArrayBufferView = TypedArrayBufferView\n> = {\n  // Interface copied from Uint8Array, and made generic.\n  readonly prototype: A;\n  readonly BYTES_PER_ELEMENT: number;\n\n  new (): A;\n  new (elements: Iterable<number>): A;\n  new (array: ArrayLike<number> | ArrayBufferLike): A;\n  new (buffer: ArrayBufferLike, byteOffset?: number, length?: number): A;\n  new (length: number): A;\n\n  from(arrayLike: ArrayLike<number>): A;\n  /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n  from(arrayLike: Iterable<number>, mapfn?: (v: number, k: number) => number, thisArg?: any): A;\n  /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n  from<T>(arrayLike: ArrayLike<T>, mapfn: (v: T, k: number) => number, thisArg?: any): A;\n  of(...items: number[]): A;\n};\n\nexport const kTypedArrayBufferViews: {\n  readonly [k: string]: TypedArrayBufferViewConstructor;\n} = {\n  ...(() => {\n    /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n    const result: { [k: string]: any } = {};\n    for (const v of TypedArrayBufferViewInstances) {\n      result[v.constructor.name] = v.constructor;\n    }\n    return result;\n  })(),\n};\nexport const kTypedArrayBufferViewKeys = keysOf(kTypedArrayBufferViews);\nexport const kTypedArrayBufferViewConstructors = Object.values(kTypedArrayBufferViews);\n\nfunction subarrayAsU8(\n  buf: ArrayBuffer | TypedArrayBufferView,\n  { start = 0, length }: { start?: number; length?: number }\n): Uint8Array | Uint8ClampedArray {\n  if (buf instanceof ArrayBuffer) {\n    return new Uint8Array(buf, start, length);\n  } else if (buf instanceof Uint8Array || buf instanceof Uint8ClampedArray) {\n    // Don't wrap in new views if we don't need to.\n    if (start === 0 && (length === undefined || length === buf.byteLength)) {\n      return buf;\n    }\n  }\n  const byteOffset = buf.byteOffset + start * buf.BYTES_PER_ELEMENT;\n  const byteLength =\n    length !== undefined\n      ? length * buf.BYTES_PER_ELEMENT\n      : buf.byteLength - (byteOffset - buf.byteOffset);\n  return new Uint8Array(buf.buffer, byteOffset, byteLength);\n}\n\n/**\n * Copy a range of bytes from one ArrayBuffer or TypedArray to another.\n *\n * `start`/`length` are in elements (or in bytes, if ArrayBuffer).\n */\nexport function memcpy(\n  src: { src: ArrayBuffer | TypedArrayBufferView; start?: number; length?: number },\n  dst: { dst: ArrayBuffer | TypedArrayBufferView; start?: number }\n): void {\n  subarrayAsU8(dst.dst, dst).set(subarrayAsU8(src.src, src));\n}\n"],"mappings":";AAAA;AAAA,GAAA,SAASA,YAAY,QAAQ,+CAA+C,CAC5E,SAASC,gBAAgB,QAAQ,6BAA6B,CAC9D,SAASC,MAAM,QAAQ,+BAA+B;;AAEtD,SAASC,MAAM,QAAQ,kBAAkB;AACzC,SAASC,OAAO,QAAQ,cAAc;;AAEtC;AACA;AACA;AACA;AACA,OAAO,MAAMC,cAAc,SAASC,KAAK,CAAC;;;EAGxC;AACF;AACA;AACA;;;EAGEC,WAAW,CAACC,aAAsC,EAAEC,QAAkB,EAAE;IACtE,MAAMC,OAAO,GAAG,OAAOF,aAAa,KAAK,QAAQ,GAAGA,aAAa,GAAGA,aAAa,CAACE,OAAO;IACzF,KAAK,CAACA,OAAO,CAAC;;IAEd,MAAMC,SAAS,GAAGH,aAAa,YAAYH,cAAc,GAAGG,aAAa,CAACI,KAAK,GAAG,CAAC,CAAC;IACpF,IAAI,CAACA,KAAK,GAAGV,MAAM,CAACW,eAAe;IAC/B,EAAE,GAAGF,SAAS,EAAE,GAAGF,QAAQ,EAAE,CAAC,CAAC;IAC/B,EAAEK,OAAO,EAAE,eAAe,CAAC,CAAC;EAClC;AACF;;AAEA;AACA;AACA;AACA,OAAO,SAASC,MAAM,CAACC,SAAkB,EAAEC,GAA6B,EAAqB;EAC3F,IAAI,CAACD,SAAS,EAAE;IACd,MAAM,IAAIV,KAAK,CAACW,GAAG,KAAK,OAAOA,GAAG,KAAK,QAAQ,GAAGA,GAAG,GAAGA,GAAG,EAAE,CAAC,CAAC;EACjE;AACF;;AAEA;AACA,OAAO,SAASC,QAAQ,CAAIC,KAAgB,EAAK;EAC/C,IAAIA,KAAK,YAAYb,KAAK,EAAE;IAC1B,MAAMa,KAAK;EACb;EACA,OAAOA,KAAK;AACd;;AAEA;AACA;AACA;AACA,OAAO,eAAeC,YAAY,CAACC,CAAmB,EAAEJ,GAAY,EAAiB;EACnF,IAAI;IACF,MAAMI,CAAC;IACPC,WAAW,CAACL,GAAG,CAAC;EAClB,CAAC,CAAC,OAAOM,EAAE,EAAE;;IACX;EAAA,CAEJ;;AAEA;AACA;AACA;AACA,OAAO,SAASD,WAAW,CAACL,GAAY,EAAS;EAC/C,MAAM,IAAIX,KAAK,CAACW,GAAG,CAAC;AACtB;;AAEA;AACA;AACA;AACA;AACA,MAAMO,IAAI,GAAG,OAAOC,WAAW,KAAK,WAAW,GAAGA,WAAW,GAAGC,OAAO,CAAC,YAAY,CAAC,CAACD,WAAW;;AAEjG;AACA;AACA;AACA,OAAO,SAASE,GAAG,GAAW;EAC5B,OAAOH,IAAI,CAACG,GAAG,EAAE;AACnB;;AAEA;AACA;AACA;AACA,OAAO,SAASC,gBAAgB,CAACC,EAAU,EAAiB;EAC1D,OAAO,IAAIC,OAAO,CAAC,CAAAC,OAAO,KAAI;IAC5B3B,OAAO,CAAC,MAAM;MACZ2B,OAAO,EAAE;IACX,CAAC,EAAEF,EAAE,CAAC;EACR,CAAC,CAAC;AACJ;;AAEA,OAAO,MAAMG,mBAAmB,SAAS1B,KAAK,CAAC;;AAE/C;AACA;AACA;AACA,OAAO,SAAS2B,eAAe,CAACJ,EAAU,EAAEZ,GAAW,EAAkB;EACvE,OAAO,IAAIa,OAAO,CAAC,CAACI,QAAQ,EAAEC,MAAM,KAAK;IACvC/B,OAAO,CAAC,MAAM;MACZ+B,MAAM,CAAC,IAAIH,mBAAmB,CAACf,GAAG,CAAC,CAAC;IACtC,CAAC,EAAEY,EAAE,CAAC;EACR,CAAC,CAAC;AACJ;;AAEA;AACA;AACA;AACA;AACA,OAAO,SAASO,uBAAuB,CAAIf,CAAa,EAAEQ,EAAU,EAAEZ,GAAW,EAAc;EAC7F,IAAIhB,gBAAgB,CAACoC,yBAAyB,EAAE;IAC9C,OAAOhB,CAAC;EACV;EACA;EACA;EACA;EACA,MAAMiB,cAAc,GAAG,IAAIR,OAAO,CAAC,CAACI,QAAQ,EAAEC,MAAM,KAAK;IACvD,MAAMI,MAAM,GAAGnC,OAAO,CAAC,MAAM;MAC3B+B,MAAM,CAAC,IAAIH,mBAAmB,CAACf,GAAG,CAAC,CAAC;IACtC,CAAC,EAAEY,EAAE,CAAC;IACNR,CAAC,GAAGA,CAAC,CAACmB,OAAO,CAAC,MAAMC,YAAY,CAACF,MAAM,CAAC,CAAC;EAC3C,CAAC,CAAC;EACF,OAAOT,OAAO,CAACY,IAAI,CAAC,CAACrB,CAAC,EAAEiB,cAAc,CAAC,CAAC;AAC1C;;AAEA;AACA;AACA;AACA;AACA,OAAO,SAASK,0BAA0B;AACxCtB,CAAmB;AACnBQ,EAAU;AACVZ,GAAW;AACS;EACpB;EACA,MAAM2B,iBAAiB,GAAGvB,CAAC,CAACwB,IAAI,CAAC,MAAMf,OAAO,CAACK,MAAM,CAAC,IAAI7B,KAAK,CAACW,GAAG,CAAC,CAAC,CAAC;EACtE;EACA,MAAMqB,cAAc,GAAG,IAAIR,OAAO,CAAY,CAAAC,OAAO,KAAI;IACvD,MAAMQ,MAAM,GAAGnC,OAAO,CAAC,MAAM;MAC3B2B,OAAO,CAACe,SAAS,CAAC;IACpB,CAAC,EAAEjB,EAAE,CAAC;IACNR,CAAC,CAACmB,OAAO,CAAC,MAAMC,YAAY,CAACF,MAAM,CAAC,CAAC;EACvC,CAAC,CAAC;EACF,OAAOT,OAAO,CAACY,IAAI,CAAC,CAACE,iBAAiB,EAAEN,cAAc,CAAC,CAAC;AAC1D;;AAEA;AACA;AACA;AACA;AACA,OAAO,SAASS,qBAAqB,CAAIC,GAAY,EAAc;EACjE,MAAM3B,CAAC,GAAGS,OAAO,CAACK,MAAM,CAACa,GAAG,CAAC;EAC7B;EACA3B,CAAC,CAAC4B,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;EACjB,OAAO5B,CAAC;AACV;;AAEA;AACA;AACA;AACA,OAAO,SAAS6B,eAAe,CAACC,CAA2B,EAA4B;EACrF,MAAMC,YAAsC,GAAG,CAAC,CAAC;EACjD,KAAK,MAAMC,CAAC,IAAIC,MAAM,CAACC,IAAI,CAACJ,CAAC,CAAC,CAACK,IAAI,EAAE,EAAE;IACrCJ,YAAY,CAACC,CAAC,CAAC,GAAGF,CAAC,CAACE,CAAC,CAAC;EACxB;EACA,OAAOD,YAAY;AACrB;;AAEA;AACA;AACA;AACA;AACA,OAAO,SAASK,YAAY,CAACC,CAAU,EAAEC,CAAU,EAAW;EAC5D,IAAI,OAAOD,CAAC,KAAK,QAAQ,IAAI,OAAOC,CAAC,KAAK,QAAQ,EAAE;IAClD,IAAI,OAAOD,CAAC,KAAK,QAAQ,IAAI,OAAOC,CAAC,KAAK,QAAQ,IAAIC,MAAM,CAACC,KAAK,CAACH,CAAC,CAAC,IAAIE,MAAM,CAACC,KAAK,CAACF,CAAC,CAAC,EAAE;MACxF,OAAO,IAAI;IACb;IACA,OAAOD,CAAC,KAAKC,CAAC;EAChB;EACA,IAAID,CAAC,KAAK,IAAI,IAAIC,CAAC,KAAK,IAAI,EAAE,OAAOD,CAAC,KAAKC,CAAC;EAC5C,IAAID,CAAC,CAACnD,WAAW,KAAKoD,CAAC,CAACpD,WAAW,EAAE,OAAO,KAAK;EACjD,IAAImD,CAAC,YAAYI,QAAQ,EAAE,OAAOJ,CAAC,KAAKC,CAAC;EACzC,IAAID,CAAC,YAAYK,MAAM,EAAE,OAAOL,CAAC,KAAKC,CAAC;EACvC,IAAID,CAAC,KAAKC,CAAC,IAAID,CAAC,CAACM,OAAO,EAAE,KAAKL,CAAC,CAACK,OAAO,EAAE,EAAE,OAAO,IAAI;EACvD,IAAIC,KAAK,CAACC,OAAO,CAACR,CAAC,CAAC,IAAIO,KAAK,CAACC,OAAO,CAACP,CAAC,CAAC,IAAID,CAAC,CAACS,MAAM,KAAKR,CAAC,CAACQ,MAAM,EAAE,OAAO,KAAK;EAC/E,IAAIT,CAAC,YAAYU,IAAI,EAAE,OAAO,KAAK;EACnC,IAAI,EAAEV,CAAC,YAAYJ,MAAM,CAAC,EAAE,OAAO,KAAK;EACxC,IAAI,EAAEK,CAAC,YAAYL,MAAM,CAAC,EAAE,OAAO,KAAK;;EAExC,MAAMe,EAAE,GAAGX,CAA6B;EACxC,MAAMY,EAAE,GAAGX,CAA6B;EACxC,MAAMtC,CAAC,GAAGiC,MAAM,CAACC,IAAI,CAACG,CAAC,CAAC;EACxB,OAAOJ,MAAM,CAACC,IAAI,CAACI,CAAC,CAAC,CAACY,KAAK,CAAC,CAAAC,CAAC,KAAInD,CAAC,CAACoD,OAAO,CAACD,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAInD,CAAC,CAACkD,KAAK,CAAC,CAAAC,CAAC,KAAIf,YAAY,CAACY,EAAE,CAACG,CAAC,CAAC,EAAEF,EAAE,CAACE,CAAC,CAAC,CAAC,CAAC;AACnG;;AAEA;AACA;AACA;AACA,OAAO,SAASE,KAAK,CAAIC,CAAS,EAAEC,EAAoB,EAAO;EAC7D,OAAO,CAAC,GAAG,IAAIX,KAAK,CAACU,CAAC,CAAC,CAAC,CAACE,GAAG,CAAC,CAACC,CAAC,EAAEN,CAAC,KAAKI,EAAE,CAACJ,CAAC,CAAC,CAAC;AAC/C;;AAEA;AACA;AACA;AACA,OAAO,UAAUO,SAAS,CAAIJ,CAAS,EAAEC,EAAoB,EAAe;EAC1E,KAAK,IAAIJ,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGG,CAAC,EAAE,EAAEH,CAAC,EAAE;IAC1B,MAAMI,EAAE,CAACJ,CAAC,CAAC;EACb;AACF;;AAEA;AACA,OAAO,SAASQ,OAAO,CAAOC,EAAe,EAAEC,CAAc,EAAe;EAC1E,OAAO;IACL,EAAEC,MAAM,CAACC,QAAQ,IAAI;MACnB,KAAK,MAAM1B,CAAC,IAAIuB,EAAE,EAAE;QAClB,MAAMC,CAAC,CAACxB,CAAC,CAAC;MACZ;IACF;EACF,CAAC;AACH;;AAEA,MAAM2B,6BAA6B,GAAG;AACpC,IAAIC,UAAU,EAAE;AAChB,IAAIC,iBAAiB,EAAE;AACvB,IAAIC,WAAW,EAAE;AACjB,IAAIC,WAAW,EAAE;AACjB,IAAIC,SAAS,EAAE;AACf,IAAIC,UAAU,EAAE;AAChB,IAAIC,UAAU,EAAE;AAChB,IAAI5F,YAAY,EAAE;AAClB,IAAI6F,YAAY,EAAE;AAClB,IAAIC,YAAY,EAAE,CACV;;;;;;;;;;;;;;;;;;;;;;;;;;AAyBV,OAAO,MAAMC,sBAEZ;;AAAG;EACF,GAAG,CAAC,MAAM;;IAER,MAAMC,MAA4B,GAAG,CAAC,CAAC;IACvC,KAAK,MAAM7C,CAAC,IAAIkC,6BAA6B,EAAE;MAC7CW,MAAM,CAAC7C,CAAC,CAAC5C,WAAW,CAAC0F,IAAI,CAAC,GAAG9C,CAAC,CAAC5C,WAAW;IAC5C;IACA,OAAOyF,MAAM;EACf,CAAC;AACH,CAAC;AACD,OAAO,MAAME,yBAAyB,GAAG/F,MAAM,CAAC4F,sBAAsB,CAAC;AACvE,OAAO,MAAMI,iCAAiC,GAAG7C,MAAM,CAAC8C,MAAM,CAACL,sBAAsB,CAAC;;AAEtF,SAASM,YAAY;AACnBC,GAAuC;AACvC,EAAEC,KAAK,GAAG,CAAC,EAAEpC,MAAM,CAAsC,CAAC;AAC1B;EAChC,IAAImC,GAAG,YAAYE,WAAW,EAAE;IAC9B,OAAO,IAAIlB,UAAU,CAACgB,GAAG,EAAEC,KAAK,EAAEpC,MAAM,CAAC;EAC3C,CAAC,MAAM,IAAImC,GAAG,YAAYhB,UAAU,IAAIgB,GAAG,YAAYf,iBAAiB,EAAE;IACxE;IACA,IAAIgB,KAAK,KAAK,CAAC,KAAKpC,MAAM,KAAKrB,SAAS,IAAIqB,MAAM,KAAKmC,GAAG,CAACG,UAAU,CAAC,EAAE;MACtE,OAAOH,GAAG;IACZ;EACF;EACA,MAAMI,UAAU,GAAGJ,GAAG,CAACI,UAAU,GAAGH,KAAK,GAAGD,GAAG,CAACK,iBAAiB;EACjE,MAAMF,UAAU;EACdtC,MAAM,KAAKrB,SAAS;EAChBqB,MAAM,GAAGmC,GAAG,CAACK,iBAAiB;EAC9BL,GAAG,CAACG,UAAU,IAAIC,UAAU,GAAGJ,GAAG,CAACI,UAAU,CAAC;EACpD,OAAO,IAAIpB,UAAU,CAACgB,GAAG,CAACM,MAAM,EAAEF,UAAU,EAAED,UAAU,CAAC;AAC3D;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASI,MAAM;AACpBC,GAAiF;AACjFC,GAAgE;AAC1D;EACNV,YAAY,CAACU,GAAG,CAACA,GAAG,EAAEA,GAAG,CAAC,CAACC,GAAG,CAACX,YAAY,CAACS,GAAG,CAACA,GAAG,EAAEA,GAAG,CAAC,CAAC;AAC5D"}