@lottiefiles/dotlottie-web 0.30.2 → 0.30.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/animation-frame-manager.ts","../src/constants.ts","../src/core/dotlottie-player.js","../src/core/dotlottie-wasm-loader.ts","../src/event-manager.ts","../src/utils.ts","../src/dotlottie.ts","inline-worker:/home/runner/work/dotlottie-web/dotlottie-web/packages/web/src/worker/dotlottie.worker","../src/worker/worker-manager.ts","../src/worker/dotlottie.ts"],"names":["WebAnimationFrameStrategy","callback","id","NodeAnimationFrameStrategy","__publicField","_id","AnimationFrameManager","IS_BROWSER","ZIP_SIGNATURE","LOTTIE_JSON_MANDATORY_FIELDS","PACKAGE_VERSION","PACKAGE_NAME","createDotLottiePlayerModule","_scriptDir","moduleArg","k","aa","ba","readyPromise","a","b","ca","da","t","ea","w","x","fa","ha","y","A","B","C","E","F","ja","ka","la","ma","na","oa","pa","G","H","ra","sa","I","ta","ua","va","wa","c","d","xa","e","ya","za","J","f","Aa","Ba","Da","Ea","Fa","Ga","K","L","M","Ha","Ia","P","h","n","O","Ja","Q","R","Ka","La","Ma","Oa","Pa","Qa","Ra","Sa","Ta","Ua","Va","Xa","Wa","Ya","Za","$a","ab","bb","cb","db","eb","fb","gb","hb","ib","jb","m","p","kb","S","lb","mb","T","nb","pb","ob","U","qb","rb","sb","tb","u","v","g","q","r","z","ub","vb","V","wb","yb","zb","Ab","Bb","Cb","Db","Eb","Fb","Gb","Hb","Ib","Jb","Kb","Lb","Mb","Nb","Ob","Pb","Rb","Qb","Sb","Tb","Ub","Vb","Wb","Xb","Yb","Zb","N","$b","ac","mc","Ca","D","Na","xb","ia","bc","cc","dc","ec","fc","gc","hc","ic","jc","kc","lc","W","qa","X","Y","Z","nc","oc","pc","qc","dotlottie_player_default","DotLottieWasmLoader","url","initialError","backupUrl","backupError","EventManager","type","listener","listeners","event","isHexColor","color","hexStringToRGBAInt","colorHex","hex","isDotLottie","fileData","fileSignature","isLottieJSON","json","field","isLottie","createCoreMode","mode","module","createCoreFit","fit","createCoreAlign","align","coreAlign","createCoreSegment","segment","coresegment","_DotLottie","config","error","message","src","response","data","width","height","loaded","layout","manifest","manifestJson","buffer","clampedBuffer","imageData","nextFrame","frame","speed","loop","useFrameInterpolation","dpr","clientHeight","clientWidth","startFrame","endFrame","animationId","marker","markers","result","i","themeId","themeData","stateMachineId","started","stopped","rect","scaleX","scaleY","devicePixelRatio","rt","listenersVector","stateMachineData","name","value","DotLottie","InlinedWorker","WorkerManager","workerId","transfer","worker","getCanvasSize","canvas","generateUniqueId","_DotLottieWorker","rpcResponse","offscreen","instanceId","start","end","renderConfig","backgroundColor","method","params","rpcRequest","resolve","reject","onMessage","DotLottieWorker"],"mappings":"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","file":"index.cjs","sourcesContent":["/* eslint-disable max-classes-per-file */\n\ninterface AnimationFrameStrategy {\n cancelAnimationFrame(id: number): void;\n requestAnimationFrame(callback: (time: number) => void): number;\n}\n\nclass WebAnimationFrameStrategy implements AnimationFrameStrategy {\n public requestAnimationFrame(callback: (time: number) => void): number {\n return requestAnimationFrame(callback);\n }\n\n public cancelAnimationFrame(id: number): void {\n cancelAnimationFrame(id);\n }\n}\n\nclass NodeAnimationFrameStrategy implements AnimationFrameStrategy {\n private _lastHandleId: number = 0;\n\n private _lastImmediate: NodeJS.Immediate | null = null;\n\n public requestAnimationFrame(callback: (time: number) => void): number {\n if (this._lastHandleId >= Number.MAX_SAFE_INTEGER) {\n this._lastHandleId = 0;\n }\n\n this._lastHandleId += 1;\n\n this._lastImmediate = setImmediate(() => {\n callback(Date.now());\n });\n\n return this._lastHandleId;\n }\n\n public cancelAnimationFrame(_id: number): void {\n if (this._lastImmediate) {\n clearImmediate(this._lastImmediate);\n }\n }\n}\n\nexport class AnimationFrameManager {\n private readonly _strategy: AnimationFrameStrategy;\n\n public constructor() {\n this._strategy =\n typeof requestAnimationFrame === 'function' ? new WebAnimationFrameStrategy() : new NodeAnimationFrameStrategy();\n }\n\n public requestAnimationFrame(callback: (time: number) => void): number {\n return this._strategy.requestAnimationFrame(callback);\n }\n\n public cancelAnimationFrame(id: number): void {\n this._strategy.cancelAnimationFrame(id);\n }\n}\n","export const IS_BROWSER = typeof window !== 'undefined' && typeof window.document !== 'undefined';\nexport const MS_TO_SEC_FACTOR = 1000;\nexport const DEFAULT_BG_COLOR = '#00000000';\nexport const ZIP_SIGNATURE = new Uint8Array([0x50, 0x4b, 0x03, 0x04]);\nexport const LOTTIE_JSON_MANDATORY_FIELDS = ['v', 'ip', 'op', 'layers', 'fr', 'w', 'h'];\n\n// These values are replace during the build process with the package version and name\nexport const PACKAGE_VERSION = '0.30.2';\nexport const PACKAGE_NAME = '@lottiefiles/dotlottie-web';\n","var createDotLottiePlayerModule = (() => {\n var _scriptDir = typeof document != 'undefined' ? document.currentScript?.src : undefined;\n\n return function (moduleArg = {}) {\n var k = moduleArg,\n aa,\n ba,\n readyPromise = new Promise((a, b) => {\n aa = a;\n ba = b;\n }),\n ca = Object.assign({}, k),\n da = './this.program',\n t = '';\n 'undefined' != typeof document && document.currentScript && (t = document.currentScript.src);\n _scriptDir && (t = _scriptDir);\n t.startsWith('blob:') ? (t = '') : (t = t.substr(0, t.replace(/[?#].*/, '').lastIndexOf('/') + 1));\n var ea = k.print || console.log.bind(console),\n w = k.printErr || console.error.bind(console);\n Object.assign(k, ca);\n ca = null;\n k.thisProgram && (da = k.thisProgram);\n var x;\n k.wasmBinary && (x = k.wasmBinary);\n var fa,\n ha = !1,\n y,\n A,\n B,\n C,\n E,\n F,\n ja,\n ka;\n function la() {\n var a = fa.buffer;\n k.HEAP8 = y = new Int8Array(a);\n k.HEAP16 = B = new Int16Array(a);\n k.HEAPU8 = A = new Uint8Array(a);\n k.HEAPU16 = C = new Uint16Array(a);\n k.HEAP32 = E = new Int32Array(a);\n k.HEAPU32 = F = new Uint32Array(a);\n k.HEAPF32 = ja = new Float32Array(a);\n k.HEAPF64 = ka = new Float64Array(a);\n }\n var ma = [],\n na = [],\n oa = [];\n function pa() {\n var a = k.preRun.shift();\n ma.unshift(a);\n }\n var G = 0,\n qa = null,\n H = null;\n function ra(a) {\n k.onAbort?.(a);\n a = 'Aborted(' + a + ')';\n w(a);\n ha = !0;\n a = new WebAssembly.RuntimeError(a + '. Build with -sASSERTIONS for more info.');\n ba(a);\n throw a;\n }\n var sa = (a) => a.startsWith('data:application/octet-stream;base64,'),\n I;\n I = 'DotLottiePlayer.wasm';\n if (!sa(I)) {\n var ta = I;\n I = k.locateFile ? k.locateFile(ta, t) : t + ta;\n }\n function ua(a) {\n if (a == I && x) return new Uint8Array(x);\n throw 'both async and sync fetching of the wasm failed';\n }\n function va(a) {\n return x || 'function' != typeof fetch\n ? Promise.resolve().then(() => ua(a))\n : fetch(a, { credentials: 'same-origin' })\n .then((b) => {\n if (!b.ok) throw `failed to load wasm binary file at '${a}'`;\n return b.arrayBuffer();\n })\n .catch(() => ua(a));\n }\n function wa(a, b, c) {\n return va(a)\n .then((d) => WebAssembly.instantiate(d, b))\n .then(c, (d) => {\n w(`failed to asynchronously prepare wasm: ${d}`);\n ra(d);\n });\n }\n function xa(a, b) {\n var c = I;\n return x || 'function' != typeof WebAssembly.instantiateStreaming || sa(c) || 'function' != typeof fetch\n ? wa(c, a, b)\n : fetch(c, { credentials: 'same-origin' }).then((d) =>\n WebAssembly.instantiateStreaming(d, a).then(b, function (e) {\n w(`wasm streaming compile failed: ${e}`);\n w('falling back to ArrayBuffer instantiation');\n return wa(c, a, b);\n }),\n );\n }\n var ya = (a) => {\n for (; 0 < a.length; ) a.shift()(k);\n },\n za = 'undefined' != typeof TextDecoder ? new TextDecoder('utf8') : void 0,\n J = (a, b, c) => {\n var d = b + c;\n for (c = b; a[c] && !(c >= d); ) ++c;\n if (16 < c - b && a.buffer && za) return za.decode(a.subarray(b, c));\n for (d = ''; b < c; ) {\n var e = a[b++];\n if (e & 128) {\n var f = a[b++] & 63;\n if (192 == (e & 224)) d += String.fromCharCode(((e & 31) << 6) | f);\n else {\n var l = a[b++] & 63;\n e =\n 224 == (e & 240)\n ? ((e & 15) << 12) | (f << 6) | l\n : ((e & 7) << 18) | (f << 12) | (l << 6) | (a[b++] & 63);\n 65536 > e\n ? (d += String.fromCharCode(e))\n : ((e -= 65536), (d += String.fromCharCode(55296 | (e >> 10), 56320 | (e & 1023))));\n }\n } else d += String.fromCharCode(e);\n }\n return d;\n };\n class Aa {\n constructor(a) {\n this.ya = a - 24;\n }\n }\n var Ba = 0,\n Ca = 0,\n Da = (a) => {\n for (var b = 0, c = 0; c < a.length; ++c) {\n var d = a.charCodeAt(c);\n 127 >= d ? b++ : 2047 >= d ? (b += 2) : 55296 <= d && 57343 >= d ? ((b += 4), ++c) : (b += 3);\n }\n return b;\n },\n Ea = (a, b, c, d) => {\n if (0 < d) {\n d = c + d - 1;\n for (var e = 0; e < a.length; ++e) {\n var f = a.charCodeAt(e);\n if (55296 <= f && 57343 >= f) {\n var l = a.charCodeAt(++e);\n f = (65536 + ((f & 1023) << 10)) | (l & 1023);\n }\n if (127 >= f) {\n if (c >= d) break;\n b[c++] = f;\n } else {\n if (2047 >= f) {\n if (c + 1 >= d) break;\n b[c++] = 192 | (f >> 6);\n } else {\n if (65535 >= f) {\n if (c + 2 >= d) break;\n b[c++] = 224 | (f >> 12);\n } else {\n if (c + 3 >= d) break;\n b[c++] = 240 | (f >> 18);\n b[c++] = 128 | ((f >> 12) & 63);\n }\n b[c++] = 128 | ((f >> 6) & 63);\n }\n b[c++] = 128 | (f & 63);\n }\n }\n b[c] = 0;\n }\n },\n Fa = {},\n Ga = (a) => {\n for (; a.length; ) {\n var b = a.pop();\n a.pop()(b);\n }\n };\n function K(a) {\n return this.fromWireType(F[a >> 2]);\n }\n var L = {},\n M = {},\n Ha = {},\n Ia,\n P = (a, b, c) => {\n function d(h) {\n h = c(h);\n if (h.length !== a.length) throw new Ia('Mismatched type converter count');\n for (var n = 0; n < a.length; ++n) O(a[n], h[n]);\n }\n a.forEach(function (h) {\n Ha[h] = b;\n });\n var e = Array(b.length),\n f = [],\n l = 0;\n b.forEach((h, n) => {\n M.hasOwnProperty(h)\n ? (e[n] = M[h])\n : (f.push(h),\n L.hasOwnProperty(h) || (L[h] = []),\n L[h].push(() => {\n e[n] = M[h];\n ++l;\n l === f.length && d(e);\n }));\n });\n 0 === f.length && d(e);\n },\n Ja,\n Q = (a) => {\n for (var b = ''; A[a]; ) b += Ja[A[a++]];\n return b;\n },\n R;\n function Ka(a, b, c = {}) {\n var d = b.name;\n if (!a) throw new R(`type \"${d}\" must have a positive integer typeid pointer`);\n if (M.hasOwnProperty(a)) {\n if (c.ib) return;\n throw new R(`Cannot register type '${d}' twice`);\n }\n M[a] = b;\n delete Ha[a];\n L.hasOwnProperty(a) && ((b = L[a]), delete L[a], b.forEach((e) => e()));\n }\n function O(a, b, c = {}) {\n if (!('argPackAdvance' in b)) throw new TypeError('registerType registeredInstance requires argPackAdvance');\n return Ka(a, b, c);\n }\n var La = (a) => {\n throw new R(a.ma.za.xa.name + ' instance already deleted');\n },\n Ma = !1,\n Oa = () => {},\n Pa = (a, b, c) => {\n if (b === c) return a;\n if (void 0 === c.Ca) return null;\n a = Pa(a, b, c.Ca);\n return null === a ? null : c.ab(a);\n },\n Qa = {},\n Ra = [],\n Sa = () => {\n for (; Ra.length; ) {\n var a = Ra.pop();\n a.ma.Ka = !1;\n a['delete']();\n }\n },\n Ta,\n Ua = {},\n Va = (a, b) => {\n if (void 0 === b) throw new R('ptr should not be undefined');\n for (; a.Ca; ) (b = a.Na(b)), (a = a.Ca);\n return Ua[b];\n },\n Xa = (a, b) => {\n if (!b.za || !b.ya) throw new Ia('makeClassHandle requires ptr and ptrType');\n if (!!b.Da !== !!b.Aa) throw new Ia('Both smartPtrType and smartPtr must be specified');\n b.count = { value: 1 };\n return Wa(Object.create(a, { ma: { value: b, writable: !0 } }));\n },\n Wa = (a) => {\n if ('undefined' === typeof FinalizationRegistry) return (Wa = (b) => b), a;\n Ma = new FinalizationRegistry((b) => {\n b = b.ma;\n --b.count.value;\n 0 === b.count.value && (b.Aa ? b.Da.Fa(b.Aa) : b.za.xa.Fa(b.ya));\n });\n Wa = (b) => {\n var c = b.ma;\n c.Aa && Ma.register(b, { ma: c }, b);\n return b;\n };\n Oa = (b) => {\n Ma.unregister(b);\n };\n return Wa(a);\n };\n function Ya() {}\n var Za = (a, b) => Object.defineProperty(b, 'name', { value: a }),\n $a = (a, b, c) => {\n if (void 0 === a[b].Ba) {\n var d = a[b];\n a[b] = function (...e) {\n if (!a[b].Ba.hasOwnProperty(e.length))\n throw new R(\n `Function '${c}' called with an invalid number of arguments (${e.length}) - expects one of (${a[b].Ba})!`,\n );\n return a[b].Ba[e.length].apply(this, e);\n };\n a[b].Ba = [];\n a[b].Ba[d.Oa] = d;\n }\n },\n ab = (a, b, c) => {\n if (k.hasOwnProperty(a)) {\n if (void 0 === c || (void 0 !== k[a].Ba && void 0 !== k[a].Ba[c]))\n throw new R(`Cannot register public name '${a}' twice`);\n $a(k, a, a);\n if (k.hasOwnProperty(c))\n throw new R(`Cannot register multiple overloads of a function with the same number of arguments (${c})!`);\n k[a].Ba[c] = b;\n } else (k[a] = b), void 0 !== c && (k[a].vb = c);\n },\n bb = (a) => {\n if (void 0 === a) return '_unknown';\n a = a.replace(/[^a-zA-Z0-9_]/g, '$');\n var b = a.charCodeAt(0);\n return 48 <= b && 57 >= b ? `_${a}` : a;\n };\n function cb(a, b, c, d, e, f, l, h) {\n this.name = a;\n this.constructor = b;\n this.La = c;\n this.Fa = d;\n this.Ca = e;\n this.cb = f;\n this.Na = l;\n this.ab = h;\n this.kb = [];\n }\n var db = (a, b, c) => {\n for (; b !== c; ) {\n if (!b.Na) throw new R(`Expected null or instance of ${c.name}, got an instance of ${b.name}`);\n a = b.Na(a);\n b = b.Ca;\n }\n return a;\n };\n function eb(a, b) {\n if (null === b) {\n if (this.Ta) throw new R(`null is not a valid ${this.name}`);\n return 0;\n }\n if (!b.ma) throw new R(`Cannot pass \"${fb(b)}\" as a ${this.name}`);\n if (!b.ma.ya) throw new R(`Cannot pass deleted object as a pointer of type ${this.name}`);\n return db(b.ma.ya, b.ma.za.xa, this.xa);\n }\n function gb(a, b) {\n if (null === b) {\n if (this.Ta) throw new R(`null is not a valid ${this.name}`);\n if (this.Qa) {\n var c = this.Ua();\n null !== a && a.push(this.Fa, c);\n return c;\n }\n return 0;\n }\n if (!b || !b.ma) throw new R(`Cannot pass \"${fb(b)}\" as a ${this.name}`);\n if (!b.ma.ya) throw new R(`Cannot pass deleted object as a pointer of type ${this.name}`);\n if (!this.Pa && b.ma.za.Pa)\n throw new R(\n `Cannot convert argument of type ${b.ma.Da ? b.ma.Da.name : b.ma.za.name} to parameter type ${this.name}`,\n );\n c = db(b.ma.ya, b.ma.za.xa, this.xa);\n if (this.Qa) {\n if (void 0 === b.ma.Aa) throw new R('Passing raw pointer to smart pointer is illegal');\n switch (this.pb) {\n case 0:\n if (b.ma.Da === this) c = b.ma.Aa;\n else\n throw new R(\n `Cannot convert argument of type ${b.ma.Da ? b.ma.Da.name : b.ma.za.name} to parameter type ${\n this.name\n }`,\n );\n break;\n case 1:\n c = b.ma.Aa;\n break;\n case 2:\n if (b.ma.Da === this) c = b.ma.Aa;\n else {\n var d = b.clone();\n c = this.lb(\n c,\n hb(() => d['delete']()),\n );\n null !== a && a.push(this.Fa, c);\n }\n break;\n default:\n throw new R('Unsupporting sharing policy');\n }\n }\n return c;\n }\n function ib(a, b) {\n if (null === b) {\n if (this.Ta) throw new R(`null is not a valid ${this.name}`);\n return 0;\n }\n if (!b.ma) throw new R(`Cannot pass \"${fb(b)}\" as a ${this.name}`);\n if (!b.ma.ya) throw new R(`Cannot pass deleted object as a pointer of type ${this.name}`);\n if (b.ma.za.Pa) throw new R(`Cannot convert argument of type ${b.ma.za.name} to parameter type ${this.name}`);\n return db(b.ma.ya, b.ma.za.xa, this.xa);\n }\n function jb(a, b, c, d, e, f, l, h, n, m, p) {\n this.name = a;\n this.xa = b;\n this.Ta = c;\n this.Pa = d;\n this.Qa = e;\n this.jb = f;\n this.pb = l;\n this.Za = h;\n this.Ua = n;\n this.lb = m;\n this.Fa = p;\n e || void 0 !== b.Ca ? (this.toWireType = gb) : ((this.toWireType = d ? eb : ib), (this.Ea = null));\n }\n var kb = (a, b, c) => {\n if (!k.hasOwnProperty(a)) throw new Ia('Replacing nonexistent public symbol');\n void 0 !== k[a].Ba && void 0 !== c ? (k[a].Ba[c] = b) : ((k[a] = b), (k[a].Oa = c));\n },\n S,\n lb = (a, b, c = []) => {\n a.includes('j') ? ((a = a.replace(/p/g, 'i')), (b = (0, k['dynCall_' + a])(b, ...c))) : (b = S.get(b)(...c));\n return b;\n },\n mb =\n (a, b) =>\n (...c) =>\n lb(a, b, c),\n T = (a, b) => {\n a = Q(a);\n var c = a.includes('j') ? mb(a, b) : S.get(b);\n if ('function' != typeof c) throw new R(`unknown function pointer with signature ${a}: ${b}`);\n return c;\n },\n nb,\n pb = (a) => {\n a = ob(a);\n var b = Q(a);\n U(a);\n return b;\n },\n qb = (a, b) => {\n function c(f) {\n e[f] || M[f] || (Ha[f] ? Ha[f].forEach(c) : (d.push(f), (e[f] = !0)));\n }\n var d = [],\n e = {};\n b.forEach(c);\n throw new nb(`${a}: ` + d.map(pb).join([', ']));\n },\n rb = (a, b) => {\n for (var c = [], d = 0; d < a; d++) c.push(F[(b + 4 * d) >> 2]);\n return c;\n };\n function sb(a) {\n for (var b = 1; b < a.length; ++b) if (null !== a[b] && void 0 === a[b].Ea) return !0;\n return !1;\n }\n function tb(a, b, c, d, e) {\n var f = b.length;\n if (2 > f) throw new R(\"argTypes array size mismatch! Must at least get return value and 'this' types!\");\n var l = null !== b[1] && null !== c,\n h = sb(b),\n n = 'void' !== b[0].name,\n m = f - 2,\n p = Array(m),\n u = [],\n v = [];\n return Za(a, function (...g) {\n if (g.length !== m) throw new R(`function ${a} called with ${g.length} arguments, expected ${m}`);\n v.length = 0;\n u.length = l ? 2 : 1;\n u[0] = e;\n if (l) {\n var q = b[1].toWireType(v, this);\n u[1] = q;\n }\n for (var r = 0; r < m; ++r) (p[r] = b[r + 2].toWireType(v, g[r])), u.push(p[r]);\n g = d(...u);\n if (h) Ga(v);\n else\n for (r = l ? 1 : 2; r < b.length; r++) {\n var z = 1 === r ? q : p[r - 2];\n null !== b[r].Ea && b[r].Ea(z);\n }\n q = n ? b[0].fromWireType(g) : void 0;\n return q;\n });\n }\n var ub = (a) => {\n a = a.trim();\n const b = a.indexOf('(');\n return -1 !== b ? a.substr(0, b) : a;\n },\n vb = [],\n V = [],\n wb = (a) => {\n 9 < a && 0 === --V[a + 1] && ((V[a] = void 0), vb.push(a));\n },\n yb = (a) => {\n if (!a) throw new R('Cannot use deleted val. handle = ' + a);\n return V[a];\n },\n hb = (a) => {\n switch (a) {\n case void 0:\n return 2;\n case null:\n return 4;\n case !0:\n return 6;\n case !1:\n return 8;\n default:\n const b = vb.pop() || V.length;\n V[b] = a;\n V[b + 1] = 1;\n return b;\n }\n },\n zb = {\n name: 'emscripten::val',\n fromWireType: (a) => {\n var b = yb(a);\n wb(a);\n return b;\n },\n toWireType: (a, b) => hb(b),\n argPackAdvance: 8,\n readValueFromPointer: K,\n Ea: null,\n },\n Ab = (a, b, c) => {\n switch (b) {\n case 1:\n return c\n ? function (d) {\n return this.fromWireType(y[d]);\n }\n : function (d) {\n return this.fromWireType(A[d]);\n };\n case 2:\n return c\n ? function (d) {\n return this.fromWireType(B[d >> 1]);\n }\n : function (d) {\n return this.fromWireType(C[d >> 1]);\n };\n case 4:\n return c\n ? function (d) {\n return this.fromWireType(E[d >> 2]);\n }\n : function (d) {\n return this.fromWireType(F[d >> 2]);\n };\n default:\n throw new TypeError(`invalid integer width (${b}): ${a}`);\n }\n },\n Bb = (a, b) => {\n var c = M[a];\n if (void 0 === c) throw ((a = `${b} has unknown type ${pb(a)}`), new R(a));\n return c;\n },\n fb = (a) => {\n if (null === a) return 'null';\n var b = typeof a;\n return 'object' === b || 'array' === b || 'function' === b ? a.toString() : '' + a;\n },\n Cb = (a, b) => {\n switch (b) {\n case 4:\n return function (c) {\n return this.fromWireType(ja[c >> 2]);\n };\n case 8:\n return function (c) {\n return this.fromWireType(ka[c >> 3]);\n };\n default:\n throw new TypeError(`invalid float width (${b}): ${a}`);\n }\n },\n Db = (a, b, c) => {\n switch (b) {\n case 1:\n return c ? (d) => y[d] : (d) => A[d];\n case 2:\n return c ? (d) => B[d >> 1] : (d) => C[d >> 1];\n case 4:\n return c ? (d) => E[d >> 2] : (d) => F[d >> 2];\n default:\n throw new TypeError(`invalid integer width (${b}): ${a}`);\n }\n },\n Eb = 'undefined' != typeof TextDecoder ? new TextDecoder('utf-16le') : void 0,\n Fb = (a, b) => {\n var c = a >> 1;\n for (var d = c + b / 2; !(c >= d) && C[c]; ) ++c;\n c <<= 1;\n if (32 < c - a && Eb) return Eb.decode(A.subarray(a, c));\n c = '';\n for (d = 0; !(d >= b / 2); ++d) {\n var e = B[(a + 2 * d) >> 1];\n if (0 == e) break;\n c += String.fromCharCode(e);\n }\n return c;\n },\n Gb = (a, b, c) => {\n c ??= 2147483647;\n if (2 > c) return 0;\n c -= 2;\n var d = b;\n c = c < 2 * a.length ? c / 2 : a.length;\n for (var e = 0; e < c; ++e) (B[b >> 1] = a.charCodeAt(e)), (b += 2);\n B[b >> 1] = 0;\n return b - d;\n },\n Hb = (a) => 2 * a.length,\n Ib = (a, b) => {\n for (var c = 0, d = ''; !(c >= b / 4); ) {\n var e = E[(a + 4 * c) >> 2];\n if (0 == e) break;\n ++c;\n 65536 <= e\n ? ((e -= 65536), (d += String.fromCharCode(55296 | (e >> 10), 56320 | (e & 1023))))\n : (d += String.fromCharCode(e));\n }\n return d;\n },\n Jb = (a, b, c) => {\n c ??= 2147483647;\n if (4 > c) return 0;\n var d = b;\n c = d + c - 4;\n for (var e = 0; e < a.length; ++e) {\n var f = a.charCodeAt(e);\n if (55296 <= f && 57343 >= f) {\n var l = a.charCodeAt(++e);\n f = (65536 + ((f & 1023) << 10)) | (l & 1023);\n }\n E[b >> 2] = f;\n b += 4;\n if (b + 4 > c) break;\n }\n E[b >> 2] = 0;\n return b - d;\n },\n Kb = (a) => {\n for (var b = 0, c = 0; c < a.length; ++c) {\n var d = a.charCodeAt(c);\n 55296 <= d && 57343 >= d && ++c;\n b += 4;\n }\n return b;\n },\n Lb = [],\n Mb = (a) => {\n var b = Lb.length;\n Lb.push(a);\n return b;\n },\n Nb = (a, b) => {\n for (var c = Array(a), d = 0; d < a; ++d) c[d] = Bb(F[(b + 4 * d) >> 2], 'parameter ' + d);\n return c;\n },\n Ob = Reflect.construct,\n Pb = {},\n Rb = () => {\n if (!Qb) {\n var a = {\n USER: 'web_user',\n LOGNAME: 'web_user',\n PATH: '/',\n PWD: '/',\n HOME: '/home/web_user',\n LANG:\n (('object' == typeof navigator && navigator.languages && navigator.languages[0]) || 'C').replace(\n '-',\n '_',\n ) + '.UTF-8',\n _: da || './this.program',\n },\n b;\n for (b in Pb) void 0 === Pb[b] ? delete a[b] : (a[b] = Pb[b]);\n var c = [];\n for (b in a) c.push(`${b}=${a[b]}`);\n Qb = c;\n }\n return Qb;\n },\n Qb,\n Sb = [null, [], []],\n Tb = () => {\n if ('object' == typeof crypto && 'function' == typeof crypto.getRandomValues)\n return (a) => crypto.getRandomValues(a);\n ra('initRandomDevice');\n },\n Ub = (a) => (Ub = Tb())(a),\n Vb = (a) => 0 === a % 4 && (0 !== a % 100 || 0 === a % 400),\n Wb = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31],\n Xb = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];\n function Yb(a) {\n var b = Array(Da(a) + 1);\n Ea(a, b, 0, b.length);\n return b;\n }\n var Zb = (a, b, c, d) => {\n function e(g, q, r) {\n for (g = 'number' == typeof g ? g.toString() : g || ''; g.length < q; ) g = r[0] + g;\n return g;\n }\n function f(g, q) {\n return e(g, q, '0');\n }\n function l(g, q) {\n function r(N) {\n return 0 > N ? -1 : 0 < N ? 1 : 0;\n }\n var z;\n 0 === (z = r(g.getFullYear() - q.getFullYear())) &&\n 0 === (z = r(g.getMonth() - q.getMonth())) &&\n (z = r(g.getDate() - q.getDate()));\n return z;\n }\n function h(g) {\n switch (g.getDay()) {\n case 0:\n return new Date(g.getFullYear() - 1, 11, 29);\n case 1:\n return g;\n case 2:\n return new Date(g.getFullYear(), 0, 3);\n case 3:\n return new Date(g.getFullYear(), 0, 2);\n case 4:\n return new Date(g.getFullYear(), 0, 1);\n case 5:\n return new Date(g.getFullYear() - 1, 11, 31);\n case 6:\n return new Date(g.getFullYear() - 1, 11, 30);\n }\n }\n function n(g) {\n var q = g.Ia;\n for (g = new Date(new Date(g.Ja + 1900, 0, 1).getTime()); 0 < q; ) {\n var r = g.getMonth(),\n z = (Vb(g.getFullYear()) ? Wb : Xb)[r];\n if (q > z - g.getDate())\n (q -= z - g.getDate() + 1),\n g.setDate(1),\n 11 > r ? g.setMonth(r + 1) : (g.setMonth(0), g.setFullYear(g.getFullYear() + 1));\n else {\n g.setDate(g.getDate() + q);\n break;\n }\n }\n r = new Date(g.getFullYear() + 1, 0, 4);\n q = h(new Date(g.getFullYear(), 0, 4));\n r = h(r);\n return 0 >= l(q, g) ? (0 >= l(r, g) ? g.getFullYear() + 1 : g.getFullYear()) : g.getFullYear() - 1;\n }\n var m = F[(d + 40) >> 2];\n d = {\n sb: E[d >> 2],\n rb: E[(d + 4) >> 2],\n Ra: E[(d + 8) >> 2],\n Va: E[(d + 12) >> 2],\n Sa: E[(d + 16) >> 2],\n Ja: E[(d + 20) >> 2],\n Ga: E[(d + 24) >> 2],\n Ia: E[(d + 28) >> 2],\n wb: E[(d + 32) >> 2],\n qb: E[(d + 36) >> 2],\n tb: m ? (m ? J(A, m) : '') : '',\n };\n c = c ? J(A, c) : '';\n m = {\n '%c': '%a %b %d %H:%M:%S %Y',\n '%D': '%m/%d/%y',\n '%F': '%Y-%m-%d',\n '%h': '%b',\n '%r': '%I:%M:%S %p',\n '%R': '%H:%M',\n '%T': '%H:%M:%S',\n '%x': '%m/%d/%y',\n '%X': '%H:%M:%S',\n '%Ec': '%c',\n '%EC': '%C',\n '%Ex': '%m/%d/%y',\n '%EX': '%H:%M:%S',\n '%Ey': '%y',\n '%EY': '%Y',\n '%Od': '%d',\n '%Oe': '%e',\n '%OH': '%H',\n '%OI': '%I',\n '%Om': '%m',\n '%OM': '%M',\n '%OS': '%S',\n '%Ou': '%u',\n '%OU': '%U',\n '%OV': '%V',\n '%Ow': '%w',\n '%OW': '%W',\n '%Oy': '%y',\n };\n for (var p in m) c = c.replace(new RegExp(p, 'g'), m[p]);\n var u = 'Sunday Monday Tuesday Wednesday Thursday Friday Saturday'.split(' '),\n v = 'January February March April May June July August September October November December'.split(' ');\n m = {\n '%a': (g) => u[g.Ga].substring(0, 3),\n '%A': (g) => u[g.Ga],\n '%b': (g) => v[g.Sa].substring(0, 3),\n '%B': (g) => v[g.Sa],\n '%C': (g) => f(((g.Ja + 1900) / 100) | 0, 2),\n '%d': (g) => f(g.Va, 2),\n '%e': (g) => e(g.Va, 2, ' '),\n '%g': (g) => n(g).toString().substring(2),\n '%G': n,\n '%H': (g) => f(g.Ra, 2),\n '%I': (g) => {\n g = g.Ra;\n 0 == g ? (g = 12) : 12 < g && (g -= 12);\n return f(g, 2);\n },\n '%j': (g) => {\n for (var q = 0, r = 0; r <= g.Sa - 1; q += (Vb(g.Ja + 1900) ? Wb : Xb)[r++]);\n return f(g.Va + q, 3);\n },\n '%m': (g) => f(g.Sa + 1, 2),\n '%M': (g) => f(g.rb, 2),\n '%n': () => '\\n',\n '%p': (g) => (0 <= g.Ra && 12 > g.Ra ? 'AM' : 'PM'),\n '%S': (g) => f(g.sb, 2),\n '%t': () => '\\t',\n '%u': (g) => g.Ga || 7,\n '%U': (g) => f(Math.floor((g.Ia + 7 - g.Ga) / 7), 2),\n '%V': (g) => {\n var q = Math.floor((g.Ia + 7 - ((g.Ga + 6) % 7)) / 7);\n 2 >= (g.Ga + 371 - g.Ia - 2) % 7 && q++;\n if (q) 53 == q && ((r = (g.Ga + 371 - g.Ia) % 7), 4 == r || (3 == r && Vb(g.Ja)) || (q = 1));\n else {\n q = 52;\n var r = (g.Ga + 7 - g.Ia - 1) % 7;\n (4 == r || (5 == r && Vb((g.Ja % 400) - 1))) && q++;\n }\n return f(q, 2);\n },\n '%w': (g) => g.Ga,\n '%W': (g) => f(Math.floor((g.Ia + 7 - ((g.Ga + 6) % 7)) / 7), 2),\n '%y': (g) => (g.Ja + 1900).toString().substring(2),\n '%Y': (g) => g.Ja + 1900,\n '%z': (g) => {\n g = g.qb;\n var q = 0 <= g;\n g = Math.abs(g) / 60;\n return (q ? '+' : '-') + String('0000' + ((g / 60) * 100 + (g % 60))).slice(-4);\n },\n '%Z': (g) => g.tb,\n '%%': () => '%',\n };\n c = c.replace(/%%/g, '\\x00\\x00');\n for (p in m) c.includes(p) && (c = c.replace(new RegExp(p, 'g'), m[p](d)));\n c = c.replace(/\\0\\0/g, '%');\n p = Yb(c);\n if (p.length > b) return 0;\n y.set(p, a);\n return p.length - 1;\n };\n Ia = k.InternalError = class extends Error {\n constructor(a) {\n super(a);\n this.name = 'InternalError';\n }\n };\n for (var $b = Array(256), ac = 0; 256 > ac; ++ac) $b[ac] = String.fromCharCode(ac);\n Ja = $b;\n R = k.BindingError = class extends Error {\n constructor(a) {\n super(a);\n this.name = 'BindingError';\n }\n };\n Object.assign(Ya.prototype, {\n isAliasOf: function (a) {\n if (!(this instanceof Ya && a instanceof Ya)) return !1;\n var b = this.ma.za.xa,\n c = this.ma.ya;\n a.ma = a.ma;\n var d = a.ma.za.xa;\n for (a = a.ma.ya; b.Ca; ) (c = b.Na(c)), (b = b.Ca);\n for (; d.Ca; ) (a = d.Na(a)), (d = d.Ca);\n return b === d && c === a;\n },\n clone: function () {\n this.ma.ya || La(this);\n if (this.ma.Ma) return (this.ma.count.value += 1), this;\n var a = Wa,\n b = Object,\n c = b.create,\n d = Object.getPrototypeOf(this),\n e = this.ma;\n a = a(\n c.call(b, d, {\n ma: { value: { count: e.count, Ka: e.Ka, Ma: e.Ma, ya: e.ya, za: e.za, Aa: e.Aa, Da: e.Da } },\n }),\n );\n a.ma.count.value += 1;\n a.ma.Ka = !1;\n return a;\n },\n ['delete']() {\n this.ma.ya || La(this);\n if (this.ma.Ka && !this.ma.Ma) throw new R('Object already scheduled for deletion');\n Oa(this);\n var a = this.ma;\n --a.count.value;\n 0 === a.count.value && (a.Aa ? a.Da.Fa(a.Aa) : a.za.xa.Fa(a.ya));\n this.ma.Ma || ((this.ma.Aa = void 0), (this.ma.ya = void 0));\n },\n isDeleted: function () {\n return !this.ma.ya;\n },\n deleteLater: function () {\n this.ma.ya || La(this);\n if (this.ma.Ka && !this.ma.Ma) throw new R('Object already scheduled for deletion');\n Ra.push(this);\n 1 === Ra.length && Ta && Ta(Sa);\n this.ma.Ka = !0;\n return this;\n },\n });\n k.getInheritedInstanceCount = () => Object.keys(Ua).length;\n k.getLiveInheritedInstances = () => {\n var a = [],\n b;\n for (b in Ua) Ua.hasOwnProperty(b) && a.push(Ua[b]);\n return a;\n };\n k.flushPendingDeletes = Sa;\n k.setDelayFunction = (a) => {\n Ta = a;\n Ra.length && Ta && Ta(Sa);\n };\n Object.assign(jb.prototype, {\n eb(a) {\n this.Za && (a = this.Za(a));\n return a;\n },\n Xa(a) {\n this.Fa?.(a);\n },\n argPackAdvance: 8,\n readValueFromPointer: K,\n fromWireType: function (a) {\n function b() {\n return this.Qa\n ? Xa(this.xa.La, { za: this.jb, ya: c, Da: this, Aa: a })\n : Xa(this.xa.La, { za: this, ya: a });\n }\n var c = this.eb(a);\n if (!c) return this.Xa(a), null;\n var d = Va(this.xa, c);\n if (void 0 !== d) {\n if (0 === d.ma.count.value) return (d.ma.ya = c), (d.ma.Aa = a), d.clone();\n d = d.clone();\n this.Xa(a);\n return d;\n }\n d = this.xa.cb(c);\n d = Qa[d];\n if (!d) return b.call(this);\n d = this.Pa ? d.$a : d.pointerType;\n var e = Pa(c, this.xa, d.xa);\n return null === e\n ? b.call(this)\n : this.Qa\n ? Xa(d.xa.La, { za: d, ya: e, Da: this, Aa: a })\n : Xa(d.xa.La, { za: d, ya: e });\n },\n });\n nb = k.UnboundTypeError = ((a, b) => {\n var c = Za(b, function (d) {\n this.name = b;\n this.message = d;\n d = Error(d).stack;\n void 0 !== d && (this.stack = this.toString() + '\\n' + d.replace(/^Error(:[^\\n]*)?\\n/, ''));\n });\n c.prototype = Object.create(a.prototype);\n c.prototype.constructor = c;\n c.prototype.toString = function () {\n return void 0 === this.message ? this.name : `${this.name}: ${this.message}`;\n };\n return c;\n })(Error, 'UnboundTypeError');\n V.push(0, 1, void 0, 1, null, 1, !0, 1, !1, 1);\n k.count_emval_handles = () => V.length / 2 - 5 - vb.length;\n var mc = {\n c: (a, b, c, d) => {\n ra(\n `Assertion failed: ${a ? J(A, a) : ''}, at: ` +\n [b ? (b ? J(A, b) : '') : 'unknown filename', c, d ? (d ? J(A, d) : '') : 'unknown function'],\n );\n },\n m: (a, b, c) => {\n var d = new Aa(a);\n F[(d.ya + 16) >> 2] = 0;\n F[(d.ya + 4) >> 2] = b;\n F[(d.ya + 8) >> 2] = c;\n Ba = a;\n Ca++;\n throw Ba;\n },\n B: function () {\n return 0;\n },\n P: () => {},\n M: () => {},\n R: function () {\n return 0;\n },\n N: () => {},\n A: function () {},\n O: () => {},\n v: (a) => {\n var b = Fa[a];\n delete Fa[a];\n var c = b.Ua,\n d = b.Fa,\n e = b.Ya,\n f = e.map((l) => l.hb).concat(e.map((l) => l.nb));\n P([a], f, (l) => {\n var h = {};\n e.forEach((n, m) => {\n var p = l[m],\n u = n.fb,\n v = n.gb,\n g = l[m + e.length],\n q = n.mb,\n r = n.ob;\n h[n.bb] = {\n read: (z) => p.fromWireType(u(v, z)),\n write: (z, N) => {\n var D = [];\n q(r, z, g.toWireType(D, N));\n Ga(D);\n },\n };\n });\n return [\n {\n name: b.name,\n fromWireType: (n) => {\n var m = {},\n p;\n for (p in h) m[p] = h[p].read(n);\n d(n);\n return m;\n },\n toWireType: (n, m) => {\n for (var p in h) if (!(p in m)) throw new TypeError(`Missing field: \"${p}\"`);\n var u = c();\n for (p in h) h[p].write(u, m[p]);\n null !== n && n.push(d, u);\n return u;\n },\n argPackAdvance: 8,\n readValueFromPointer: K,\n Ea: d,\n },\n ];\n });\n },\n I: () => {},\n Y: (a, b, c, d) => {\n b = Q(b);\n O(a, {\n name: b,\n fromWireType: function (e) {\n return !!e;\n },\n toWireType: function (e, f) {\n return f ? c : d;\n },\n argPackAdvance: 8,\n readValueFromPointer: function (e) {\n return this.fromWireType(A[e]);\n },\n Ea: null,\n });\n },\n r: (a, b, c, d, e, f, l, h, n, m, p, u, v) => {\n p = Q(p);\n f = T(e, f);\n h &&= T(l, h);\n m &&= T(n, m);\n v = T(u, v);\n var g = bb(p);\n ab(g, function () {\n qb(`Cannot construct ${p} due to unbound types`, [d]);\n });\n P([a, b, c], d ? [d] : [], (q) => {\n q = q[0];\n if (d) {\n var r = q.xa;\n var z = r.La;\n } else z = Ya.prototype;\n q = Za(p, function (...Na) {\n if (Object.getPrototypeOf(this) !== N) throw new R(\"Use 'new' to construct \" + p);\n if (void 0 === D.Ha) throw new R(p + ' has no accessible constructor');\n var xb = D.Ha[Na.length];\n if (void 0 === xb)\n throw new R(\n `Tried to invoke ctor of ${p} with invalid number of parameters (${\n Na.length\n }) - expected (${Object.keys(D.Ha).toString()}) parameters instead!`,\n );\n return xb.apply(this, Na);\n });\n var N = Object.create(z, { constructor: { value: q } });\n q.prototype = N;\n var D = new cb(p, q, N, v, r, f, h, m);\n if (D.Ca) {\n var ia;\n (ia = D.Ca).Wa ?? (ia.Wa = []);\n D.Ca.Wa.push(D);\n }\n r = new jb(p, D, !0, !1, !1);\n ia = new jb(p + '*', D, !1, !1, !1);\n z = new jb(p + ' const*', D, !1, !0, !1);\n Qa[a] = { pointerType: ia, $a: z };\n kb(g, q);\n return [r, ia, z];\n });\n },\n q: (a, b, c, d, e, f) => {\n var l = rb(b, c);\n e = T(d, e);\n P([], [a], (h) => {\n h = h[0];\n var n = `constructor ${h.name}`;\n void 0 === h.xa.Ha && (h.xa.Ha = []);\n if (void 0 !== h.xa.Ha[b - 1])\n throw new R(\n `Cannot register multiple constructors with identical number of parameters (${b - 1}) for class '${\n h.name\n }'! Overload resolution is currently only performed using the parameter count, not actual type info!`,\n );\n h.xa.Ha[b - 1] = () => {\n qb(`Cannot construct ${h.name} due to unbound types`, l);\n };\n P([], l, (m) => {\n m.splice(1, 0, null);\n h.xa.Ha[b - 1] = tb(n, m, null, e, f);\n return [];\n });\n return [];\n });\n },\n f: (a, b, c, d, e, f, l, h) => {\n var n = rb(c, d);\n b = Q(b);\n b = ub(b);\n f = T(e, f);\n P([], [a], (m) => {\n function p() {\n qb(`Cannot call ${u} due to unbound types`, n);\n }\n m = m[0];\n var u = `${m.name}.${b}`;\n b.startsWith('@@') && (b = Symbol[b.substring(2)]);\n h && m.xa.kb.push(b);\n var v = m.xa.La,\n g = v[b];\n void 0 === g || (void 0 === g.Ba && g.className !== m.name && g.Oa === c - 2)\n ? ((p.Oa = c - 2), (p.className = m.name), (v[b] = p))\n : ($a(v, b, u), (v[b].Ba[c - 2] = p));\n P([], n, (q) => {\n q = tb(u, q, m, f, l);\n void 0 === v[b].Ba ? ((q.Oa = c - 2), (v[b] = q)) : (v[b].Ba[c - 2] = q);\n return [];\n });\n return [];\n });\n },\n X: (a) => O(a, zb),\n x: (a, b, c, d) => {\n function e() {}\n b = Q(b);\n e.values = {};\n O(a, {\n name: b,\n constructor: e,\n fromWireType: function (f) {\n return this.constructor.values[f];\n },\n toWireType: (f, l) => l.value,\n argPackAdvance: 8,\n readValueFromPointer: Ab(b, c, d),\n Ea: null,\n });\n ab(b, e);\n },\n k: (a, b, c) => {\n var d = Bb(a, 'enum');\n b = Q(b);\n a = d.constructor;\n d = Object.create(d.constructor.prototype, {\n value: { value: c },\n constructor: { value: Za(`${d.name}_${b}`, function () {}) },\n });\n a.values[c] = d;\n a[b] = d;\n },\n C: (a, b, c) => {\n b = Q(b);\n O(a, {\n name: b,\n fromWireType: (d) => d,\n toWireType: (d, e) => e,\n argPackAdvance: 8,\n readValueFromPointer: Cb(b, c),\n Ea: null,\n });\n },\n E: (a, b, c, d, e, f) => {\n var l = rb(b, c);\n a = Q(a);\n a = ub(a);\n e = T(d, e);\n ab(\n a,\n function () {\n qb(`Cannot call ${a} due to unbound types`, l);\n },\n b - 1,\n );\n P([], l, (h) => {\n kb(a, tb(a, [h[0], null].concat(h.slice(1)), null, e, f), b - 1);\n return [];\n });\n },\n l: (a, b, c, d, e) => {\n b = Q(b);\n -1 === e && (e = 4294967295);\n e = (h) => h;\n if (0 === d) {\n var f = 32 - 8 * c;\n e = (h) => (h << f) >>> f;\n }\n var l = b.includes('unsigned')\n ? function (h, n) {\n return n >>> 0;\n }\n : function (h, n) {\n return n;\n };\n O(a, {\n name: b,\n fromWireType: e,\n toWireType: l,\n argPackAdvance: 8,\n readValueFromPointer: Db(b, c, 0 !== d),\n Ea: null,\n });\n },\n g: (a, b, c) => {\n function d(f) {\n return new e(y.buffer, F[(f + 4) >> 2], F[f >> 2]);\n }\n var e = [Int8Array, Uint8Array, Int16Array, Uint16Array, Int32Array, Uint32Array, Float32Array, Float64Array][\n b\n ];\n c = Q(c);\n O(a, { name: c, fromWireType: d, argPackAdvance: 8, readValueFromPointer: d }, { ib: !0 });\n },\n w: (a) => {\n O(a, zb);\n },\n ca: (a, b, c, d, e, f, l, h, n, m, p, u) => {\n c = Q(c);\n f = T(e, f);\n h = T(l, h);\n m = T(n, m);\n u = T(p, u);\n P([a], [b], (v) => {\n v = v[0];\n return [new jb(c, v.xa, !1, !1, !0, v, d, f, h, m, u)];\n });\n },\n D: (a, b) => {\n b = Q(b);\n var c = 'std::string' === b;\n O(a, {\n name: b,\n fromWireType: function (d) {\n var e = F[d >> 2],\n f = d + 4;\n if (c)\n for (var l = f, h = 0; h <= e; ++h) {\n var n = f + h;\n if (h == e || 0 == A[n]) {\n l = l ? J(A, l, n - l) : '';\n if (void 0 === m) var m = l;\n else (m += String.fromCharCode(0)), (m += l);\n l = n + 1;\n }\n }\n else {\n m = Array(e);\n for (h = 0; h < e; ++h) m[h] = String.fromCharCode(A[f + h]);\n m = m.join('');\n }\n U(d);\n return m;\n },\n toWireType: function (d, e) {\n e instanceof ArrayBuffer && (e = new Uint8Array(e));\n var f = 'string' == typeof e;\n if (!(f || e instanceof Uint8Array || e instanceof Uint8ClampedArray || e instanceof Int8Array))\n throw new R('Cannot pass non-string to std::string');\n var l = c && f ? Da(e) : e.length;\n var h = bc(4 + l + 1),\n n = h + 4;\n F[h >> 2] = l;\n if (c && f) Ea(e, A, n, l + 1);\n else if (f)\n for (f = 0; f < l; ++f) {\n var m = e.charCodeAt(f);\n if (255 < m) throw (U(n), new R('String has UTF-16 code units that do not fit in 8 bits'));\n A[n + f] = m;\n }\n else for (f = 0; f < l; ++f) A[n + f] = e[f];\n null !== d && d.push(U, h);\n return h;\n },\n argPackAdvance: 8,\n readValueFromPointer: K,\n Ea(d) {\n U(d);\n },\n });\n },\n u: (a, b, c) => {\n c = Q(c);\n if (2 === b) {\n var d = Fb;\n var e = Gb;\n var f = Hb;\n var l = (h) => C[h >> 1];\n } else 4 === b && ((d = Ib), (e = Jb), (f = Kb), (l = (h) => F[h >> 2]));\n O(a, {\n name: c,\n fromWireType: (h) => {\n for (var n = F[h >> 2], m, p = h + 4, u = 0; u <= n; ++u) {\n var v = h + 4 + u * b;\n if (u == n || 0 == l(v))\n (p = d(p, v - p)), void 0 === m ? (m = p) : ((m += String.fromCharCode(0)), (m += p)), (p = v + b);\n }\n U(h);\n return m;\n },\n toWireType: (h, n) => {\n if ('string' != typeof n) throw new R(`Cannot pass non-string to C++ string type ${c}`);\n var m = f(n),\n p = bc(4 + m + b);\n F[p >> 2] = m / b;\n e(n, p + 4, m + b);\n null !== h && h.push(U, p);\n return p;\n },\n argPackAdvance: 8,\n readValueFromPointer: K,\n Ea(h) {\n U(h);\n },\n });\n },\n s: (a, b, c, d, e, f) => {\n Fa[a] = { name: Q(b), Ua: T(c, d), Fa: T(e, f), Ya: [] };\n },\n j: (a, b, c, d, e, f, l, h, n, m) => {\n Fa[a].Ya.push({ bb: Q(b), hb: c, fb: T(d, e), gb: f, nb: l, mb: T(h, n), ob: m });\n },\n Z: (a, b) => {\n b = Q(b);\n O(a, { ub: !0, name: b, argPackAdvance: 0, fromWireType: () => {}, toWireType: () => {} });\n },\n J: () => {\n throw Infinity;\n },\n aa: (a, b, c, d) => {\n a = Lb[a];\n b = yb(b);\n return a(null, b, c, d);\n },\n F: wb,\n $: (a, b, c) => {\n var d = Nb(a, b),\n e = d.shift();\n a--;\n var f = Array(a);\n b = `methodCaller<(${d.map((l) => l.name).join(', ')}) => ${e.name}>`;\n return Mb(\n Za(b, (l, h, n, m) => {\n for (var p = 0, u = 0; u < a; ++u) (f[u] = d[u].readValueFromPointer(m + p)), (p += d[u].argPackAdvance);\n h = 1 === c ? Ob(h, f) : h.apply(l, f);\n l = [];\n h = e.toWireType(l, h);\n l.length && (F[n >> 2] = hb(l));\n return h;\n }),\n );\n },\n ba: (a) => {\n 9 < a && (V[a + 1] += 1);\n },\n _: (a) => {\n var b = yb(a);\n Ga(b);\n wb(a);\n },\n o: (a, b) => {\n a = Bb(a, '_emval_take_value');\n a = a.readValueFromPointer(b);\n return hb(a);\n },\n W: () => {\n ra('');\n },\n V: () => performance.now(),\n L: (a) => {\n var b = A.length;\n a >>>= 0;\n if (2147483648 < a) return !1;\n for (var c = 1; 4 >= c; c *= 2) {\n var d = b * (1 + 0.2 / c);\n d = Math.min(d, a + 100663296);\n var e = Math;\n d = Math.max(a, d);\n a: {\n e =\n (e.min.call(e, 2147483648, d + ((65536 - (d % 65536)) % 65536)) - fa.buffer.byteLength + 65535) / 65536;\n try {\n fa.grow(e);\n la();\n var f = 1;\n break a;\n } catch (l) {}\n f = void 0;\n }\n if (f) return !0;\n }\n return !1;\n },\n S: (a, b) => {\n var c = 0;\n Rb().forEach((d, e) => {\n var f = b + c;\n e = F[(a + 4 * e) >> 2] = f;\n for (f = 0; f < d.length; ++f) y[e++] = d.charCodeAt(f);\n y[e] = 0;\n c += d.length + 1;\n });\n return 0;\n },\n T: (a, b) => {\n var c = Rb();\n F[a >> 2] = c.length;\n var d = 0;\n c.forEach((e) => (d += e.length + 1));\n F[b >> 2] = d;\n return 0;\n },\n t: () => 52,\n z: () => 52,\n H: function () {\n return 70;\n },\n Q: (a, b, c, d) => {\n for (var e = 0, f = 0; f < c; f++) {\n var l = F[b >> 2],\n h = F[(b + 4) >> 2];\n b += 8;\n for (var n = 0; n < h; n++) {\n var m = A[l + n],\n p = Sb[a];\n 0 === m || 10 === m ? ((1 === a ? ea : w)(J(p, 0)), (p.length = 0)) : p.push(m);\n }\n e += h;\n }\n F[d >> 2] = e;\n return 0;\n },\n U: (a, b) => {\n Ub(A.subarray(a, a + b));\n return 0;\n },\n i: cc,\n d: dc,\n e: ec,\n p: fc,\n y: gc,\n b: hc,\n a: ic,\n h: jc,\n n: kc,\n G: lc,\n K: (a, b, c, d) => Zb(a, b, c, d),\n },\n W = (function () {\n function a(c) {\n W = c.exports;\n fa = W.da;\n la();\n S = W.ha;\n na.unshift(W.ea);\n G--;\n k.monitorRunDependencies?.(G);\n 0 == G && (null !== qa && (clearInterval(qa), (qa = null)), H && ((c = H), (H = null), c()));\n return W;\n }\n var b = { a: mc };\n G++;\n k.monitorRunDependencies?.(G);\n if (k.instantiateWasm)\n try {\n return k.instantiateWasm(b, a);\n } catch (c) {\n w(`Module.instantiateWasm callback failed with error: ${c}`), ba(c);\n }\n xa(b, function (c) {\n a(c.instance);\n }).catch(ba);\n return {};\n })(),\n bc = (a) => (bc = W.fa)(a),\n ob = (a) => (ob = W.ga)(a),\n U = (a) => (U = W.ia)(a),\n X = (a, b) => (X = W.ja)(a, b),\n Y = (a) => (Y = W.ka)(a),\n Z = () => (Z = W.la)();\n k.dynCall_iijj = (a, b, c, d, e, f) => (k.dynCall_iijj = W.na)(a, b, c, d, e, f);\n k.dynCall_vijj = (a, b, c, d, e, f) => (k.dynCall_vijj = W.oa)(a, b, c, d, e, f);\n k.dynCall_jiii = (a, b, c, d) => (k.dynCall_jiii = W.pa)(a, b, c, d);\n k.dynCall_jii = (a, b, c) => (k.dynCall_jii = W.qa)(a, b, c);\n var nc = (k.dynCall_viiij = (a, b, c, d, e, f) => (nc = k.dynCall_viiij = W.ra)(a, b, c, d, e, f));\n k.dynCall_jiji = (a, b, c, d, e) => (k.dynCall_jiji = W.sa)(a, b, c, d, e);\n k.dynCall_viijii = (a, b, c, d, e, f, l) => (k.dynCall_viijii = W.ta)(a, b, c, d, e, f, l);\n k.dynCall_iiiiij = (a, b, c, d, e, f, l) => (k.dynCall_iiiiij = W.ua)(a, b, c, d, e, f, l);\n k.dynCall_iiiiijj = (a, b, c, d, e, f, l, h, n) => (k.dynCall_iiiiijj = W.va)(a, b, c, d, e, f, l, h, n);\n k.dynCall_iiiiiijj = (a, b, c, d, e, f, l, h, n, m) => (k.dynCall_iiiiiijj = W.wa)(a, b, c, d, e, f, l, h, n, m);\n function hc(a, b) {\n var c = Z();\n try {\n S.get(a)(b);\n } catch (d) {\n Y(c);\n if (d !== d + 0) throw d;\n X(1, 0);\n }\n }\n function ic(a, b, c) {\n var d = Z();\n try {\n S.get(a)(b, c);\n } catch (e) {\n Y(d);\n if (e !== e + 0) throw e;\n X(1, 0);\n }\n }\n function ec(a, b, c, d) {\n var e = Z();\n try {\n return S.get(a)(b, c, d);\n } catch (f) {\n Y(e);\n if (f !== f + 0) throw f;\n X(1, 0);\n }\n }\n function dc(a, b, c) {\n var d = Z();\n try {\n return S.get(a)(b, c);\n } catch (e) {\n Y(d);\n if (e !== e + 0) throw e;\n X(1, 0);\n }\n }\n function cc(a, b) {\n var c = Z();\n try {\n return S.get(a)(b);\n } catch (d) {\n Y(c);\n if (d !== d + 0) throw d;\n X(1, 0);\n }\n }\n function fc(a, b, c, d, e, f) {\n var l = Z();\n try {\n return S.get(a)(b, c, d, e, f);\n } catch (h) {\n Y(l);\n if (h !== h + 0) throw h;\n X(1, 0);\n }\n }\n function kc(a, b, c, d, e) {\n var f = Z();\n try {\n S.get(a)(b, c, d, e);\n } catch (l) {\n Y(f);\n if (l !== l + 0) throw l;\n X(1, 0);\n }\n }\n function jc(a, b, c, d) {\n var e = Z();\n try {\n S.get(a)(b, c, d);\n } catch (f) {\n Y(e);\n if (f !== f + 0) throw f;\n X(1, 0);\n }\n }\n function gc(a) {\n var b = Z();\n try {\n S.get(a)();\n } catch (c) {\n Y(b);\n if (c !== c + 0) throw c;\n X(1, 0);\n }\n }\n function lc(a, b, c, d, e, f) {\n var l = Z();\n try {\n nc(a, b, c, d, e, f);\n } catch (h) {\n Y(l);\n if (h !== h + 0) throw h;\n X(1, 0);\n }\n }\n var oc;\n H = function pc() {\n oc || qc();\n oc || (H = pc);\n };\n function qc() {\n function a() {\n if (!oc && ((oc = !0), (k.calledRun = !0), !ha)) {\n ya(na);\n aa(k);\n if (k.onRuntimeInitialized) k.onRuntimeInitialized();\n if (k.postRun)\n for ('function' == typeof k.postRun && (k.postRun = [k.postRun]); k.postRun.length; ) {\n var b = k.postRun.shift();\n oa.unshift(b);\n }\n ya(oa);\n }\n }\n if (!(0 < G)) {\n if (k.preRun) for ('function' == typeof k.preRun && (k.preRun = [k.preRun]); k.preRun.length; ) pa();\n ya(ma);\n 0 < G ||\n (k.setStatus\n ? (k.setStatus('Running...'),\n setTimeout(function () {\n setTimeout(function () {\n k.setStatus('');\n }, 1);\n a();\n }, 1))\n : a());\n }\n }\n if (k.preInit)\n for ('function' == typeof k.preInit && (k.preInit = [k.preInit]); 0 < k.preInit.length; ) k.preInit.pop()();\n qc();\n\n return readyPromise;\n };\n})();\nexport default createDotLottiePlayerModule;\n","import { PACKAGE_NAME, PACKAGE_VERSION } from '../constants';\n\nimport createDotLottiePlayerModule from './dotlottie-player';\nimport type { MainModule } from './dotlottie-player.types';\n\n// eslint-disable-next-line @typescript-eslint/no-extraneous-class\nexport class DotLottieWasmLoader {\n // eslint-disable-next-line @typescript-eslint/naming-convention\n private static _ModulePromise: Promise<MainModule> | null = null;\n\n // URL for the WASM file, constructed using package information\n private static _wasmURL = `https://cdn.jsdelivr.net/npm/${PACKAGE_NAME}@${PACKAGE_VERSION}/dist/dotlottie-player.wasm`;\n\n private constructor() {\n throw new Error('RendererLoader is a static class and cannot be instantiated.');\n }\n\n private static async _tryLoad(url: string): Promise<MainModule> {\n const module = await createDotLottiePlayerModule({ locateFile: () => url });\n\n return module;\n }\n\n /**\n * Tries to load the WASM module from the primary URL, falling back to a backup URL if necessary.\n * Throws an error if both URLs fail to load the module.\n * @returns Promise<Module> - A promise that resolves to the loaded module.\n */\n private static async _loadWithBackup(): Promise<MainModule> {\n if (!this._ModulePromise) {\n this._ModulePromise = this._tryLoad(this._wasmURL).catch(async (initialError): Promise<MainModule> => {\n const backupUrl = `https://unpkg.com/${PACKAGE_NAME}@${PACKAGE_VERSION}/dist/dotlottie-player.wasm`;\n\n console.warn(`Primary WASM load failed from ${this._wasmURL}. Error: ${(initialError as Error).message}`);\n console.warn(`Attempting to load WASM from backup URL: ${backupUrl}`);\n\n try {\n return await this._tryLoad(backupUrl);\n } catch (backupError) {\n console.error(`Primary WASM URL failed: ${(initialError as Error).message}`);\n console.error(`Backup WASM URL failed: ${(backupError as Error).message}`);\n throw new Error('WASM loading failed from all sources.');\n }\n });\n }\n\n return this._ModulePromise;\n }\n\n /**\n * Public method to load the WebAssembly module.\n * Utilizes a primary and backup URL for robustness.\n * @returns Promise<Module> - A promise that resolves to the loaded module.\n */\n public static async load(): Promise<MainModule> {\n return this._loadWithBackup();\n }\n\n /**\n * Sets a new URL for the WASM file and invalidates the current module promise.\n *\n * @param string - The new URL for the WASM file.\n */\n public static setWasmUrl(url: string): void {\n this._wasmURL = url;\n // Invalidate current module promise\n this._ModulePromise = null;\n }\n}\n","/**\n * Represents the different types of events that can be dispatched.\n */\nexport type EventType =\n | 'complete'\n | 'frame'\n | 'load'\n | 'loadError'\n | 'loop'\n | 'pause'\n | 'play'\n | 'stop'\n | 'destroy'\n | 'freeze'\n | 'unfreeze'\n | 'render'\n | 'ready';\n\n/**\n * Maps an event type string to its respective event interface.\n */\ntype EventByType<T> = T extends 'complete'\n ? CompleteEvent\n : T extends 'frame'\n ? FrameEvent\n : T extends 'load'\n ? LoadEvent\n : T extends 'loadError'\n ? LoadErrorEvent\n : T extends 'loop'\n ? LoopEvent\n : T extends 'pause'\n ? PauseEvent\n : T extends 'play'\n ? PlayEvent\n : T extends 'stop'\n ? StopEvent\n : T extends 'destroy'\n ? DestroyEvent\n : T extends 'freeze'\n ? FreezeEvent\n : T extends 'unfreeze'\n ? UnfreezeEvent\n : T extends 'render'\n ? RenderEvent\n : T extends 'ready'\n ? ReadyEvent\n : never;\n\n/**\n * Base interface for all events.\n */\nexport interface BaseEvent {\n type: EventType;\n}\n\nexport interface RenderEvent extends BaseEvent {\n currentFrame: number;\n type: 'render';\n}\n\nexport interface FreezeEvent extends BaseEvent {\n type: 'freeze';\n}\n\nexport interface UnfreezeEvent extends BaseEvent {\n type: 'unfreeze';\n}\n\n/*\n * Event fired when a destroy action occurs.\n */\nexport interface DestroyEvent extends BaseEvent {\n type: 'destroy';\n}\n\n/**\n * Event fired when a loop action occurs.\n */\nexport interface LoopEvent extends BaseEvent {\n loopCount: number;\n type: 'loop';\n}\n\n/**\n * Event fired during frame changes.\n */\nexport interface FrameEvent extends BaseEvent {\n currentFrame: number;\n type: 'frame';\n}\n\n/**\n * Event fired when a load action occurs.\n */\nexport interface LoadEvent extends BaseEvent {\n type: 'load';\n}\n\n/**\n * Event fired when a loading error occurs.\n */\nexport interface LoadErrorEvent extends BaseEvent {\n error: Error;\n type: 'loadError';\n}\n\n/**\n * Event fired when a completion action occurs.\n */\nexport interface CompleteEvent extends BaseEvent {\n type: 'complete';\n}\n\n/**\n * Event fired when a pause action occurs.\n */\nexport interface PauseEvent extends BaseEvent {\n type: 'pause';\n}\n\n/**\n * Event fired when a play action occurs.\n */\nexport interface PlayEvent extends BaseEvent {\n type: 'play';\n}\n\n/**\n * Event fired when a stop action occurs.\n */\nexport interface StopEvent extends BaseEvent {\n type: 'stop';\n}\n\n/**\n * Event fired when a WASM module is initialized and ready.\n */\nexport interface ReadyEvent extends BaseEvent {\n type: 'ready';\n}\n\n/**\n * Type representing all possible event types.\n */\nexport type Event =\n | LoopEvent\n | FrameEvent\n | LoadEvent\n | LoadErrorEvent\n | CompleteEvent\n | PauseEvent\n | PlayEvent\n | StopEvent\n | DestroyEvent\n | FreezeEvent\n | UnfreezeEvent\n | RenderEvent\n | ReadyEvent;\n\nexport interface EventListener<T extends EventType> {\n (event: EventByType<T>): void;\n}\n\n/**\n * Manages registration and dispatching of event listeners.\n */\nexport class EventManager {\n private readonly _eventListeners: Map<EventType, Set<EventListener<EventType>>> = new Map();\n\n public addEventListener<T extends EventType>(type: T, listener: EventListener<T>): void {\n let listeners = this._eventListeners.get(type);\n\n if (!listeners) {\n listeners = new Set<EventListener<T>>();\n this._eventListeners.set(type, listeners);\n }\n\n listeners.add(listener);\n }\n\n public removeEventListener<T extends EventType>(type: T, listener?: EventListener<T>): void {\n const listeners = this._eventListeners.get(type);\n\n if (!listeners) return;\n\n if (listener) {\n listeners.delete(listener);\n\n if (listeners.size === 0) {\n this._eventListeners.delete(type);\n }\n } else {\n this._eventListeners.delete(type);\n }\n }\n\n public dispatch<T extends EventType>(event: EventByType<T>): void {\n const listeners = this._eventListeners.get(event.type);\n\n listeners?.forEach((listener) => listener(event));\n }\n\n public removeAllEventListeners(): void {\n this._eventListeners.clear();\n }\n}\n","import { LOTTIE_JSON_MANDATORY_FIELDS, ZIP_SIGNATURE } from './constants';\n\nexport function isHexColor(color: string): boolean {\n return /^#([\\da-f]{6}|[\\da-f]{8})$/iu.test(color);\n}\n\nexport function hexStringToRGBAInt(colorHex: string): number {\n if (!isHexColor(colorHex)) {\n return 0;\n }\n\n let hex = colorHex.replace('#', '');\n\n // Add alpha if it's not included\n hex = hex.length === 6 ? `${hex}ff` : hex;\n\n return parseInt(hex, 16);\n}\n\nexport function isDotLottie(fileData: ArrayBuffer): boolean {\n if (fileData.byteLength < 4) {\n return false;\n }\n\n const fileSignature = new Uint8Array(fileData.slice(0, ZIP_SIGNATURE.byteLength));\n\n for (let i = 0; i < ZIP_SIGNATURE.length; i += 1) {\n if (ZIP_SIGNATURE[i] !== fileSignature[i]) {\n return false;\n }\n }\n\n return true;\n}\n\n/**\n * Returns whether the given object looks like a valid Lottie JSON structure.\n */\nexport function isLottieJSON(json: Record<string, unknown>): boolean {\n return LOTTIE_JSON_MANDATORY_FIELDS.every((field) => Object.prototype.hasOwnProperty.call(json, field));\n}\n\nexport function isLottie(fileData: string | Record<string, unknown>): boolean {\n if (typeof fileData === 'string') {\n try {\n return isLottieJSON(JSON.parse(fileData));\n } catch (_e) {\n return false;\n }\n } else {\n return isLottieJSON(fileData);\n }\n}\n","import { AnimationFrameManager } from './animation-frame-manager';\nimport { IS_BROWSER } from './constants';\nimport type { DotLottiePlayer, MainModule, Mode as CoreMode, VectorFloat, Marker, Fit as CoreFit } from './core';\nimport { DotLottieWasmLoader } from './core';\nimport type { EventListener, EventType } from './event-manager';\nimport { EventManager } from './event-manager';\nimport type { Mode, Fit, Config, Layout, Manifest, RenderConfig, Data } from './types';\nimport { hexStringToRGBAInt, isDotLottie, isLottie } from './utils';\n\nconst createCoreMode = (mode: Mode, module: MainModule): CoreMode => {\n if (mode === 'reverse') {\n return module.Mode.Reverse;\n } else if (mode === 'bounce') {\n return module.Mode.Bounce;\n } else if (mode === 'reverse-bounce') {\n return module.Mode.ReverseBounce;\n } else {\n return module.Mode.Forward;\n }\n};\n\nconst createCoreFit = (fit: Fit, module: MainModule): CoreFit => {\n if (fit === 'contain') {\n return module.Fit.Contain;\n } else if (fit === 'cover') {\n return module.Fit.Cover;\n } else if (fit === 'fill') {\n return module.Fit.Fill;\n } else if (fit === 'fit-height') {\n return module.Fit.FitHeight;\n } else if (fit === 'fit-width') {\n return module.Fit.FitWidth;\n } else {\n return module.Fit.None;\n }\n};\n\nconst createCoreAlign = (align: [number, number], module: MainModule): VectorFloat => {\n const coreAlign = new module.VectorFloat();\n\n coreAlign.push_back(align[0]);\n coreAlign.push_back(align[1]);\n\n return coreAlign;\n};\n\nconst createCoreSegment = (segment: number[], module: MainModule): VectorFloat => {\n const coresegment = new module.VectorFloat();\n\n if (segment.length !== 2) return coresegment;\n\n coresegment.push_back(segment[0] as number);\n coresegment.push_back(segment[1] as number);\n\n return coresegment;\n};\n\nexport class DotLottie {\n private readonly _canvas: HTMLCanvasElement | OffscreenCanvas;\n\n private _context: CanvasRenderingContext2D | OffscreenCanvasRenderingContext2D | null = null;\n\n private readonly _eventManager: EventManager;\n\n private _animationFrameId: number | null = null;\n\n private readonly _frameManager: AnimationFrameManager;\n\n private _dotLottieCore: DotLottiePlayer | null = null;\n\n private static _wasmModule: MainModule | null = null;\n\n private _renderConfig: RenderConfig = {};\n\n private _isFrozen: boolean = false;\n\n private _backgroundColor: string | null = null;\n\n private readonly _pointerUpMethod: (event: PointerEvent) => void;\n\n private readonly _pointerDownMethod: (event: PointerEvent) => void;\n\n private readonly _pointerMoveMethod: (event: PointerEvent) => void;\n\n private readonly _pointerEnterMethod: (event: PointerEvent) => void;\n\n private readonly _pointerExitMethod: (event: PointerEvent) => void;\n\n private readonly _onCompleteMethod: EventListener<'complete'>;\n\n public constructor(config: Config) {\n this._canvas = config.canvas;\n this._context = this._canvas.getContext('2d');\n\n this._eventManager = new EventManager();\n this._frameManager = new AnimationFrameManager();\n this._renderConfig = config.renderConfig ?? {};\n\n DotLottieWasmLoader.load()\n .then((module) => {\n DotLottie._wasmModule = module;\n\n this._dotLottieCore = new module.DotLottiePlayer({\n autoplay: config.autoplay ?? false,\n backgroundColor: 0,\n loopAnimation: config.loop ?? false,\n mode: createCoreMode(config.mode ?? 'forward', module),\n segment: createCoreSegment(config.segment ?? [], module),\n speed: config.speed ?? 1,\n useFrameInterpolation: config.useFrameInterpolation ?? true,\n marker: config.marker ?? '',\n layout: config.layout\n ? {\n align: createCoreAlign(config.layout.align, module),\n fit: createCoreFit(config.layout.fit, module),\n }\n : module.createDefaultLayout(),\n });\n\n this._eventManager.dispatch({ type: 'ready' });\n\n if (config.data) {\n this._loadFromData(config.data);\n } else if (config.src) {\n this._loadFromSrc(config.src);\n }\n\n if (config.backgroundColor) {\n this.setBackgroundColor(config.backgroundColor);\n }\n })\n .catch((error) => {\n this._eventManager.dispatch({\n type: 'loadError',\n error: new Error(`Failed to load wasm module: ${error}`),\n });\n });\n\n this._pointerUpMethod = this._onPointerUp.bind(this);\n\n this._pointerDownMethod = this._onPointerDown.bind(this);\n\n this._pointerMoveMethod = this._onPointerMove.bind(this);\n\n this._pointerEnterMethod = this._onPointerEnter.bind(this);\n\n this._pointerExitMethod = this._onPointerLeave.bind(this);\n\n this._onCompleteMethod = this._onComplete.bind(this);\n }\n\n private _dispatchError(message: string): void {\n console.error(message);\n this._eventManager.dispatch({ type: 'loadError', error: new Error(message) });\n }\n\n private async _fetchData(src: string): Promise<string | ArrayBuffer> {\n const response = await fetch(src);\n\n if (!response.ok) {\n throw new Error(`Failed to fetch animation data from URL: ${src}. ${response.status}: ${response.statusText}`);\n }\n\n const data = await response.arrayBuffer();\n\n if (isDotLottie(data)) {\n return data;\n }\n\n // eslint-disable-next-line node/no-unsupported-features/node-builtins\n return new TextDecoder().decode(data);\n }\n\n private _loadFromData(data: Data): void {\n if (this._dotLottieCore === null) return;\n\n const width = this._canvas.width;\n const height = this._canvas.height;\n\n let loaded = false;\n\n if (typeof data === 'string') {\n if (!isLottie(data)) {\n this._dispatchError(\n 'Invalid Lottie JSON string: The provided string does not conform to the Lottie JSON format.',\n );\n\n return;\n }\n loaded = this._dotLottieCore.loadAnimationData(data, width, height);\n } else if (data instanceof ArrayBuffer) {\n if (!isDotLottie(data)) {\n this._dispatchError(\n 'Invalid dotLottie ArrayBuffer: The provided ArrayBuffer does not conform to the dotLottie format.',\n );\n\n return;\n }\n loaded = this._dotLottieCore.loadDotLottieData(data, width, height);\n } else if (typeof data === 'object') {\n if (!isLottie(data as Record<string, unknown>)) {\n this._dispatchError(\n 'Invalid Lottie JSON object: The provided object does not conform to the Lottie JSON format.',\n );\n\n return;\n }\n loaded = this._dotLottieCore.loadAnimationData(JSON.stringify(data), width, height);\n } else {\n this._dispatchError(\n `Unsupported data type for animation data. Expected: \n - string (Lottie JSON),\n - ArrayBuffer (dotLottie),\n - object (Lottie JSON). \n Received: ${typeof data}`,\n );\n\n return;\n }\n\n if (loaded) {\n this._eventManager.dispatch({ type: 'load' });\n\n if (IS_BROWSER) {\n this.resize();\n }\n\n this._eventManager.dispatch({\n type: 'frame',\n currentFrame: this._dotLottieCore.currentFrame(),\n });\n\n this._render();\n\n if (this._dotLottieCore.config().autoplay) {\n this._dotLottieCore.play();\n if (this._dotLottieCore.isPlaying()) {\n this._eventManager.dispatch({ type: 'play' });\n this._animationFrameId = this._frameManager.requestAnimationFrame(this._draw.bind(this));\n } else {\n console.error('something went wrong, the animation was suppose to autoplay');\n }\n }\n } else {\n this._dispatchError('Failed to load animation data');\n }\n }\n\n private _loadFromSrc(src: string): void {\n this._fetchData(src)\n .then((data) => this._loadFromData(data))\n .catch((error) => this._dispatchError(`Failed to load animation data from URL: ${src}. ${error}`));\n }\n\n public get activeAnimationId(): string | undefined {\n return this._dotLottieCore?.activeAnimationId();\n }\n\n public get activeThemeId(): string | undefined {\n return this._dotLottieCore?.activeThemeId();\n }\n\n public get layout(): Layout | undefined {\n const layout = this._dotLottieCore?.config().layout;\n\n if (layout) {\n return {\n align: [layout.align.get(0) as number, layout.align.get(1) as number],\n fit: ((): Fit => {\n switch (layout.fit) {\n case DotLottie._wasmModule?.Fit.Contain:\n return 'contain';\n\n case DotLottie._wasmModule?.Fit.Cover:\n return 'cover';\n\n case DotLottie._wasmModule?.Fit.Fill:\n return 'fill';\n\n case DotLottie._wasmModule?.Fit.FitHeight:\n return 'fit-height';\n\n case DotLottie._wasmModule?.Fit.FitWidth:\n return 'fit-width';\n\n case DotLottie._wasmModule?.Fit.None:\n return 'none';\n\n default:\n return 'contain';\n }\n })(),\n };\n }\n\n return undefined;\n }\n\n public get marker(): string | undefined {\n const marker = this._dotLottieCore?.config().marker as string | undefined;\n\n return marker;\n }\n\n public get manifest(): Manifest | null {\n try {\n const manifest = this._dotLottieCore?.manifestString();\n\n if (this._dotLottieCore === null || !manifest) return null;\n\n const manifestJson = JSON.parse(manifest);\n\n if (Object.keys(manifestJson).length === 0) return null;\n\n return manifestJson as Manifest;\n } catch (_err) {\n return null;\n }\n }\n\n public get renderConfig(): RenderConfig {\n return this._renderConfig;\n }\n\n public get segment(): [number, number] | undefined {\n const segment = this._dotLottieCore?.config().segment;\n\n if (segment && segment.size() === 2) {\n return [segment.get(0) as number, segment.get(1) as number];\n }\n\n return undefined;\n }\n\n public get loop(): boolean {\n return this._dotLottieCore?.config().loopAnimation ?? false;\n }\n\n public get mode(): Mode {\n const mode = this._dotLottieCore?.config().mode;\n\n if (mode === DotLottie._wasmModule?.Mode.Reverse) {\n return 'reverse';\n } else if (mode === DotLottie._wasmModule?.Mode.Bounce) {\n return 'bounce';\n } else if (mode === DotLottie._wasmModule?.Mode.ReverseBounce) {\n return 'reverse-bounce';\n } else {\n return 'forward';\n }\n }\n\n public get isFrozen(): boolean {\n return this._isFrozen;\n }\n\n public get backgroundColor(): string {\n return this._backgroundColor ?? '';\n }\n\n public get autoplay(): boolean {\n return this._dotLottieCore?.config().autoplay ?? false;\n }\n\n public get useFrameInterpolation(): boolean {\n return this._dotLottieCore?.config().useFrameInterpolation ?? false;\n }\n\n public get speed(): number {\n return this._dotLottieCore?.config().speed ?? 0;\n }\n\n public get isReady(): boolean {\n return this._dotLottieCore !== null;\n }\n\n public get isLoaded(): boolean {\n return this._dotLottieCore?.isLoaded() ?? false;\n }\n\n public get isPlaying(): boolean {\n return this._dotLottieCore?.isPlaying() ?? false;\n }\n\n public get isPaused(): boolean {\n return this._dotLottieCore?.isPaused() ?? false;\n }\n\n public get isStopped(): boolean {\n return this._dotLottieCore?.isStopped() ?? false;\n }\n\n public get currentFrame(): number {\n return this._dotLottieCore?.currentFrame() ?? 0;\n }\n\n public get loopCount(): number {\n return this._dotLottieCore?.loopCount() ?? 0;\n }\n\n public get totalFrames(): number {\n return this._dotLottieCore?.totalFrames() ?? 0;\n }\n\n public get duration(): number {\n return this._dotLottieCore?.duration() ?? 0;\n }\n\n public get segmentDuration(): number {\n return this._dotLottieCore?.segmentDuration() ?? 0;\n }\n\n public get canvas(): HTMLCanvasElement | OffscreenCanvas {\n return this._canvas;\n }\n\n public load(config: Omit<Config, 'canvas'>): void {\n if (this._dotLottieCore === null || DotLottie._wasmModule === null) return;\n\n this._dotLottieCore.setConfig({\n autoplay: config.autoplay ?? false,\n backgroundColor: 0,\n loopAnimation: config.loop ?? false,\n mode: createCoreMode(config.mode ?? 'forward', DotLottie._wasmModule),\n segment: createCoreSegment(config.segment ?? [], DotLottie._wasmModule),\n speed: config.speed ?? 1,\n useFrameInterpolation: config.useFrameInterpolation ?? true,\n marker: config.marker ?? '',\n layout: config.layout\n ? {\n align: createCoreAlign(config.layout.align, DotLottie._wasmModule),\n fit: createCoreFit(config.layout.fit, DotLottie._wasmModule),\n }\n : DotLottie._wasmModule.createDefaultLayout(),\n });\n\n if (config.data) {\n this._loadFromData(config.data);\n } else if (config.src) {\n this._loadFromSrc(config.src);\n }\n\n this.setBackgroundColor(config.backgroundColor ?? '');\n }\n\n private _render(): boolean {\n if (this._dotLottieCore === null || this._context === null) return false;\n\n const rendered = this._dotLottieCore.render();\n\n if (rendered) {\n const buffer = this._dotLottieCore.buffer() as Uint8Array;\n const clampedBuffer = new Uint8ClampedArray(buffer, 0, this._canvas.width * this._canvas.height * 4);\n\n let imageData = null;\n\n /* \n In Node.js, the ImageData constructor is not available. \n You can use createImageData function in the canvas context to create ImageData object.\n */\n if (typeof ImageData === 'undefined') {\n imageData = this._context.createImageData(this._canvas.width, this._canvas.height);\n imageData.data.set(clampedBuffer);\n } else {\n imageData = new ImageData(clampedBuffer, this._canvas.width, this._canvas.height);\n }\n\n this._context.putImageData(imageData, 0, 0);\n\n this._eventManager.dispatch({\n type: 'render',\n currentFrame: this._dotLottieCore.currentFrame(),\n });\n\n return true;\n }\n\n return false;\n }\n\n private _draw(): void {\n if (this._dotLottieCore === null || this._context === null || !this._dotLottieCore.isPlaying()) return;\n\n const nextFrame = this._dotLottieCore.requestFrame();\n\n const updated = this._dotLottieCore.setFrame(nextFrame);\n\n if (updated) {\n this._eventManager.dispatch({\n type: 'frame',\n currentFrame: this._dotLottieCore.currentFrame(),\n });\n\n const rendered = this._render();\n\n if (rendered) {\n // handle loop or complete\n if (this._dotLottieCore.isComplete()) {\n if (this._dotLottieCore.config().loopAnimation) {\n this._eventManager.dispatch({\n type: 'loop',\n loopCount: this._dotLottieCore.loopCount(),\n });\n } else {\n this._eventManager.dispatch({ type: 'complete' });\n }\n }\n }\n }\n\n this._animationFrameId = this._frameManager.requestAnimationFrame(this._draw.bind(this));\n }\n\n public play(): void {\n if (this._dotLottieCore === null) return;\n\n const ok = this._dotLottieCore.play();\n\n if (ok || this._dotLottieCore.isPlaying()) {\n this._isFrozen = false;\n this._eventManager.dispatch({ type: 'play' });\n this._animationFrameId = this._frameManager.requestAnimationFrame(this._draw.bind(this));\n }\n }\n\n public pause(): void {\n if (this._dotLottieCore === null) return;\n\n const ok = this._dotLottieCore.pause();\n\n if (ok || this._dotLottieCore.isPaused()) {\n this._eventManager.dispatch({ type: 'pause' });\n }\n }\n\n public stop(): void {\n if (this._dotLottieCore === null) return;\n\n const ok = this._dotLottieCore.stop();\n\n if (ok) {\n this._eventManager.dispatch({ type: 'frame', currentFrame: this._dotLottieCore.currentFrame() });\n\n this._render();\n\n this._eventManager.dispatch({ type: 'stop' });\n }\n }\n\n public setFrame(frame: number): void {\n if (this._dotLottieCore === null) return;\n\n if (frame < 0 || frame > this._dotLottieCore.totalFrames()) return;\n\n const ok = this._dotLottieCore.seek(frame);\n\n if (ok) {\n this._eventManager.dispatch({ type: 'frame', currentFrame: this._dotLottieCore.currentFrame() });\n\n this._render();\n }\n }\n\n public setSpeed(speed: number): void {\n if (this._dotLottieCore === null) return;\n\n this._dotLottieCore.setConfig({\n ...this._dotLottieCore.config(),\n speed,\n });\n }\n\n public setBackgroundColor(color: string): void {\n if (this._dotLottieCore === null) return;\n\n if (IS_BROWSER && this._canvas instanceof HTMLCanvasElement) {\n this._canvas.style.backgroundColor = color;\n } else {\n this._dotLottieCore.setConfig({\n ...this._dotLottieCore.config(),\n backgroundColor: hexStringToRGBAInt(color),\n });\n }\n\n this._backgroundColor = color;\n }\n\n public setLoop(loop: boolean): void {\n if (this._dotLottieCore === null) return;\n\n this._dotLottieCore.setConfig({\n ...this._dotLottieCore.config(),\n loopAnimation: loop,\n });\n }\n\n public setUseFrameInterpolation(useFrameInterpolation: boolean): void {\n if (this._dotLottieCore === null) return;\n\n this._dotLottieCore.setConfig({\n ...this._dotLottieCore.config(),\n useFrameInterpolation,\n });\n }\n\n public addEventListener<T extends EventType>(type: T, listener: EventListener<T>): void {\n this._eventManager.addEventListener(type, listener);\n }\n\n public removeEventListener<T extends EventType>(type: T, listener?: EventListener<T>): void {\n this._eventManager.removeEventListener(type, listener);\n }\n\n public destroy(): void {\n this._dotLottieCore?.delete();\n this._dotLottieCore = null;\n this._context = null;\n\n this._eventManager.dispatch({\n type: 'destroy',\n });\n\n this._eventManager.removeAllEventListeners();\n this._cleanupStateMachineListeners();\n }\n\n public freeze(): void {\n if (this._animationFrameId === null) return;\n\n this._frameManager.cancelAnimationFrame(this._animationFrameId);\n this._animationFrameId = null;\n\n this._isFrozen = true;\n\n this._eventManager.dispatch({ type: 'freeze' });\n }\n\n public unfreeze(): void {\n if (this._animationFrameId !== null) return;\n\n this._animationFrameId = this._frameManager.requestAnimationFrame(this._draw.bind(this));\n\n this._isFrozen = false;\n\n this._eventManager.dispatch({ type: 'unfreeze' });\n }\n\n public resize(): void {\n if (IS_BROWSER && this._canvas instanceof HTMLCanvasElement) {\n const dpr = this._renderConfig.devicePixelRatio || window.devicePixelRatio || 1;\n\n const { height: clientHeight, width: clientWidth } = this._canvas.getBoundingClientRect();\n\n this._canvas.width = clientWidth * dpr;\n this._canvas.height = clientHeight * dpr;\n }\n\n const ok = this._dotLottieCore?.resize(this._canvas.width, this._canvas.height);\n\n if (ok) {\n this._render();\n }\n }\n\n public setSegment(startFrame: number, endFrame: number): void {\n if (this._dotLottieCore === null || DotLottie._wasmModule === null) return;\n\n this._dotLottieCore.setConfig({\n ...this._dotLottieCore.config(),\n segment: createCoreSegment([startFrame, endFrame], DotLottie._wasmModule),\n });\n }\n\n public setMode(mode: Mode): void {\n if (this._dotLottieCore === null || DotLottie._wasmModule === null) return;\n\n this._dotLottieCore.setConfig({\n ...this._dotLottieCore.config(),\n mode: createCoreMode(mode, DotLottie._wasmModule),\n });\n }\n\n public setRenderConfig(config: RenderConfig): void {\n this._renderConfig = config;\n }\n\n public loadAnimation(animationId: string): void {\n if (this._dotLottieCore === null || this._dotLottieCore.activeAnimationId() === animationId) return;\n\n const loaded = this._dotLottieCore.loadAnimation(animationId, this._canvas.width, this._canvas.height);\n\n if (loaded) {\n this._eventManager.dispatch({ type: 'load' });\n this.resize();\n } else {\n this._eventManager.dispatch({\n type: 'loadError',\n error: new Error(`Failed to animation :${animationId}`),\n });\n }\n }\n\n public setMarker(marker: string): void {\n if (this._dotLottieCore === null) return;\n\n this._dotLottieCore.setConfig({\n ...this._dotLottieCore.config(),\n marker,\n });\n }\n\n public markers(): Marker[] {\n const markers = this._dotLottieCore?.markers();\n\n if (markers) {\n const result: Marker[] = [];\n\n for (let i = 0; i < markers.size(); i += 1) {\n const marker = markers.get(i) as Marker;\n\n result.push({\n name: marker.name,\n time: marker.time,\n duration: marker.duration,\n });\n }\n\n return result;\n }\n\n return [];\n }\n\n public loadTheme(themeId: string): boolean {\n if (this._dotLottieCore === null) return false;\n\n const loaded = this._dotLottieCore.loadTheme(themeId);\n\n this._render();\n\n return loaded;\n }\n\n public loadThemeData(themeData: string): boolean {\n if (this._dotLottieCore === null) return false;\n\n const loaded = this._dotLottieCore.loadThemeData(themeData);\n\n this._render();\n\n return loaded;\n }\n\n public setLayout(layout: Layout): void {\n if (this._dotLottieCore === null || DotLottie._wasmModule === null) return;\n\n this._dotLottieCore.setConfig({\n ...this._dotLottieCore.config(),\n layout: {\n align: createCoreAlign(layout.align, DotLottie._wasmModule),\n fit: createCoreFit(layout.fit, DotLottie._wasmModule),\n },\n });\n }\n\n public setViewport(x: number, y: number, width: number, height: number): boolean {\n if (this._dotLottieCore === null) return false;\n\n return this._dotLottieCore.setViewport(x, y, width, height);\n }\n\n public static setWasmUrl(url: string): void {\n DotLottieWasmLoader.setWasmUrl(url);\n }\n\n public loadStateMachine(stateMachineId: string): boolean {\n return this._dotLottieCore?.loadStateMachine(stateMachineId) ?? false;\n }\n\n public startStateMachine(): boolean {\n const started = this._dotLottieCore?.startStateMachine() ?? false;\n\n if (started) {\n this._setupStateMachineListeners();\n }\n\n return started;\n }\n\n public stopStateMachine(): boolean {\n const stopped = this._dotLottieCore?.stopStateMachine() ?? false;\n\n if (stopped) {\n this._cleanupStateMachineListeners();\n }\n\n return stopped;\n }\n\n private _getPointerPosition(event: PointerEvent): { x: number; y: number } {\n const rect = (this._canvas as HTMLCanvasElement).getBoundingClientRect();\n const scaleX = this._canvas.width / rect.width;\n const scaleY = this._canvas.height / rect.height;\n\n const devicePixelRatio = this._renderConfig.devicePixelRatio || window.devicePixelRatio || 1;\n const x = ((event.clientX - rect.left) * scaleX) / devicePixelRatio;\n const y = ((event.clientY - rect.top) * scaleY) / devicePixelRatio;\n\n return {\n x,\n y,\n };\n }\n\n private _onPointerUp(event: PointerEvent): void {\n const { x, y } = this._getPointerPosition(event);\n\n this.postStateMachineEvent(`OnPointerUp: ${x} ${y}`);\n }\n\n private _onPointerDown(event: PointerEvent): void {\n const { x, y } = this._getPointerPosition(event);\n\n this.postStateMachineEvent(`OnPointerDown: ${x} ${y}`);\n }\n\n private _onPointerMove(event: PointerEvent): void {\n const { x, y } = this._getPointerPosition(event);\n\n this.postStateMachineEvent(`OnPointerMove: ${x} ${y}`);\n }\n\n private _onPointerEnter(event: PointerEvent): void {\n const { x, y } = this._getPointerPosition(event);\n\n this.postStateMachineEvent(`OnPointerEnter: ${x} ${y}`);\n }\n\n private _onPointerLeave(event: PointerEvent): void {\n const { x, y } = this._getPointerPosition(event);\n\n this.postStateMachineEvent(`OnPointerExit: ${x} ${y}`);\n }\n\n private _onComplete(): void {\n this.postStateMachineEvent('OnComplete');\n }\n\n /**\n * @experimental\n * @param event - The event to be posted to the state machine\n * @returns boolean - true if the event was posted successfully, false otherwise\n */\n public postStateMachineEvent(event: string): number {\n const rt = this._dotLottieCore?.postEventPayload(event) ?? 1;\n\n if (rt === 2) {\n this.play();\n } else if (rt === 3) {\n this.pause();\n } else if (rt === 4) {\n this._render();\n }\n\n return rt;\n }\n\n public getStateMachineListeners(): string[] {\n if (!this._dotLottieCore) return [];\n\n const listenersVector = this._dotLottieCore.stateMachineFrameworkSetup();\n\n const listeners = [];\n\n for (let i = 0; i < listenersVector.size(); i += 1) {\n listeners.push(listenersVector.get(i) as string);\n }\n\n return listeners;\n }\n\n private _setupStateMachineListeners(): void {\n if (IS_BROWSER && this._canvas instanceof HTMLCanvasElement && this._dotLottieCore !== null && this.isLoaded) {\n const listeners = this.getStateMachineListeners();\n\n if (listeners.includes('PointerUp')) {\n this._canvas.addEventListener('pointerup', this._pointerUpMethod);\n }\n\n if (listeners.includes('PointerDown')) {\n this._canvas.addEventListener('pointerdown', this._pointerDownMethod);\n }\n\n if (listeners.includes('PointerMove')) {\n this._canvas.addEventListener('pointermove', this._pointerMoveMethod);\n }\n\n if (listeners.includes('PointerEnter')) {\n this._canvas.addEventListener('pointerenter', this._pointerEnterMethod);\n }\n\n if (listeners.includes('PointerExit')) {\n this._canvas.addEventListener('pointerleave', this._pointerExitMethod);\n }\n\n if (listeners.includes('Complete')) {\n this.addEventListener('complete', this._onCompleteMethod);\n }\n }\n }\n\n private _cleanupStateMachineListeners(): void {\n if (IS_BROWSER && this._canvas instanceof HTMLCanvasElement) {\n this._canvas.removeEventListener('pointerup', this._pointerUpMethod);\n this._canvas.removeEventListener('pointerdown', this._pointerDownMethod);\n this._canvas.removeEventListener('pointermove', this._pointerMoveMethod);\n this._canvas.removeEventListener('pointerenter', this._pointerEnterMethod);\n this._canvas.removeEventListener('pointerleave', this._pointerExitMethod);\n this.removeEventListener('complete', this._onCompleteMethod);\n }\n }\n\n public loadStateMachineData(stateMachineData: string): boolean {\n return this._dotLottieCore?.loadStateMachineData(stateMachineData) ?? false;\n }\n\n public animationSize(): { height: number; width: number } {\n const width = this._dotLottieCore?.animationSize().get(0) ?? 0;\n const height = this._dotLottieCore?.animationSize().get(1) ?? 0;\n\n return {\n width,\n height,\n };\n }\n\n public setStateMachineBooleanContext(name: string, value: boolean): boolean {\n return this._dotLottieCore?.setStateMachineBooleanContext(name, value) ?? false;\n }\n\n public setStateMachineNumericContext(name: string, value: number): boolean {\n return this._dotLottieCore?.setStateMachineNumericContext(name, value) ?? false;\n }\n\n public setStateMachineStringContext(name: string, value: string): boolean {\n return this._dotLottieCore?.setStateMachineStringContext(name, value) ?? false;\n }\n}\n","\n export default class InlinedWorker extends Worker {\n constructor() {\n super('data:application/javascript;base64,InVzZSBzdHJpY3QiOwooKCkgPT4gewogIHZhciBfX2RlZlByb3AgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7CiAgdmFyIF9fZGVmTm9ybWFsUHJvcCA9IChvYmosIGtleSwgdmFsdWUpID0+IGtleSBpbiBvYmogPyBfX2RlZlByb3Aob2JqLCBrZXksIHsgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSwgdmFsdWUgfSkgOiBvYmpba2V5XSA9IHZhbHVlOwogIHZhciBfX3B1YmxpY0ZpZWxkID0gKG9iaiwga2V5LCB2YWx1ZSkgPT4gX19kZWZOb3JtYWxQcm9wKG9iaiwgdHlwZW9mIGtleSAhPT0gInN5bWJvbCIgPyBrZXkgKyAiIiA6IGtleSwgdmFsdWUpOwoKICAvLyBzcmMvYW5pbWF0aW9uLWZyYW1lLW1hbmFnZXIudHMKICB2YXIgV2ViQW5pbWF0aW9uRnJhbWVTdHJhdGVneSA9IGNsYXNzIHsKICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZShjYWxsYmFjaykgewogICAgICByZXR1cm4gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKGNhbGxiYWNrKTsKICAgIH0KICAgIGNhbmNlbEFuaW1hdGlvbkZyYW1lKGlkKSB7CiAgICAgIGNhbmNlbEFuaW1hdGlvbkZyYW1lKGlkKTsKICAgIH0KICB9OwogIHZhciBOb2RlQW5pbWF0aW9uRnJhbWVTdHJhdGVneSA9IGNsYXNzIHsKICAgIGNvbnN0cnVjdG9yKCkgewogICAgICBfX3B1YmxpY0ZpZWxkKHRoaXMsICJfbGFzdEhhbmRsZUlkIiwgMCk7CiAgICAgIF9fcHVibGljRmllbGQodGhpcywgIl9sYXN0SW1tZWRpYXRlIiwgbnVsbCk7CiAgICB9CiAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoY2FsbGJhY2spIHsKICAgICAgaWYgKHRoaXMuX2xhc3RIYW5kbGVJZCA+PSBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUikgewogICAgICAgIHRoaXMuX2xhc3RIYW5kbGVJZCA9IDA7CiAgICAgIH0KICAgICAgdGhpcy5fbGFzdEhhbmRsZUlkICs9IDE7CiAgICAgIHRoaXMuX2xhc3RJbW1lZGlhdGUgPSBzZXRJbW1lZGlhdGUoKCkgPT4gewogICAgICAgIGNhbGxiYWNrKERhdGUubm93KCkpOwogICAgICB9KTsKICAgICAgcmV0dXJuIHRoaXMuX2xhc3RIYW5kbGVJZDsKICAgIH0KICAgIGNhbmNlbEFuaW1hdGlvbkZyYW1lKF9pZCkgewogICAgICBpZiAodGhpcy5fbGFzdEltbWVkaWF0ZSkgewogICAgICAgIGNsZWFySW1tZWRpYXRlKHRoaXMuX2xhc3RJbW1lZGlhdGUpOwogICAgICB9CiAgICB9CiAgfTsKICB2YXIgQW5pbWF0aW9uRnJhbWVNYW5hZ2VyID0gY2xhc3MgewogICAgY29uc3RydWN0b3IoKSB7CiAgICAgIF9fcHVibGljRmllbGQodGhpcywgIl9zdHJhdGVneSIpOwogICAgICB0aGlzLl9zdHJhdGVneSA9IHR5cGVvZiByZXF1ZXN0QW5pbWF0aW9uRnJhbWUgPT09ICJmdW5jdGlvbiIgPyBuZXcgV2ViQW5pbWF0aW9uRnJhbWVTdHJhdGVneSgpIDogbmV3IE5vZGVBbmltYXRpb25GcmFtZVN0cmF0ZWd5KCk7CiAgICB9CiAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoY2FsbGJhY2spIHsKICAgICAgcmV0dXJuIHRoaXMuX3N0cmF0ZWd5LnJlcXVlc3RBbmltYXRpb25GcmFtZShjYWxsYmFjayk7CiAgICB9CiAgICBjYW5jZWxBbmltYXRpb25GcmFtZShpZCkgewogICAgICB0aGlzLl9zdHJhdGVneS5jYW5jZWxBbmltYXRpb25GcmFtZShpZCk7CiAgICB9CiAgfTsKCiAgLy8gc3JjL2NvbnN0YW50cy50cwogIHZhciBJU19CUk9XU0VSID0gdHlwZW9mIHdpbmRvdyAhPT0gInVuZGVmaW5lZCIgJiYgdHlwZW9mIHdpbmRvdy5kb2N1bWVudCAhPT0gInVuZGVmaW5lZCI7CiAgdmFyIFpJUF9TSUdOQVRVUkUgPSBuZXcgVWludDhBcnJheShbODAsIDc1LCAzLCA0XSk7CiAgdmFyIExPVFRJRV9KU09OX01BTkRBVE9SWV9GSUVMRFMgPSBbInYiLCAiaXAiLCAib3AiLCAibGF5ZXJzIiwgImZyIiwgInciLCAiaCJdOwogIHZhciBQQUNLQUdFX1ZFUlNJT04gPSAiMC4zMC4yIjsKICB2YXIgUEFDS0FHRV9OQU1FID0gIkBsb3R0aWVmaWxlcy9kb3Rsb3R0aWUtd2ViIjsKCiAgLy8gc3JjL2NvcmUvZG90bG90dGllLXBsYXllci5qcwogIHZhciBjcmVhdGVEb3RMb3R0aWVQbGF5ZXJNb2R1bGUgPSAoKCkgPT4gewogICAgdmFyIF9zY3JpcHREaXIgPSB0eXBlb2YgZG9jdW1lbnQgIT0gInVuZGVmaW5lZCIgPyBkb2N1bWVudC5jdXJyZW50U2NyaXB0Py5zcmMgOiB2b2lkIDA7CiAgICByZXR1cm4gZnVuY3Rpb24obW9kdWxlQXJnID0ge30pIHsKICAgICAgdmFyIGsgPSBtb2R1bGVBcmcsIGFhLCBiYSwgcmVhZHlQcm9taXNlID0gbmV3IFByb21pc2UoKGEsIGIpID0+IHsKICAgICAgICBhYSA9IGE7CiAgICAgICAgYmEgPSBiOwogICAgICB9KSwgY2EgPSBPYmplY3QuYXNzaWduKHt9LCBrKSwgZGEgPSAiLi90aGlzLnByb2dyYW0iLCB0ID0gIiI7CiAgICAgICJ1bmRlZmluZWQiICE9IHR5cGVvZiBkb2N1bWVudCAmJiBkb2N1bWVudC5jdXJyZW50U2NyaXB0ICYmICh0ID0gZG9jdW1lbnQuY3VycmVudFNjcmlwdC5zcmMpOwogICAgICBfc2NyaXB0RGlyICYmICh0ID0gX3NjcmlwdERpcik7CiAgICAgIHQuc3RhcnRzV2l0aCgiYmxvYjoiKSA/IHQgPSAiIiA6IHQgPSB0LnN1YnN0cigwLCB0LnJlcGxhY2UoL1s/I10uKi8sICIiKS5sYXN0SW5kZXhPZigiLyIpICsgMSk7CiAgICAgIHZhciBlYSA9IGsucHJpbnQgfHwgY29uc29sZS5sb2cuYmluZChjb25zb2xlKSwgdyA9IGsucHJpbnRFcnIgfHwgY29uc29sZS5lcnJvci5iaW5kKGNvbnNvbGUpOwogICAgICBPYmplY3QuYXNzaWduKGssIGNhKTsKICAgICAgY2EgPSBudWxsOwogICAgICBrLnRoaXNQcm9ncmFtICYmIChkYSA9IGsudGhpc1Byb2dyYW0pOwogICAgICB2YXIgeDsKICAgICAgay53YXNtQmluYXJ5ICYmICh4ID0gay53YXNtQmluYXJ5KTsKICAgICAgdmFyIGZhLCBoYSA9IGZhbHNlLCB5LCBBLCBCLCBDLCBFLCBGLCBqYSwga2E7CiAgICAgIGZ1bmN0aW9uIGxhKCkgewogICAgICAgIHZhciBhID0gZmEuYnVmZmVyOwogICAgICAgIGsuSEVBUDggPSB5ID0gbmV3IEludDhBcnJheShhKTsKICAgICAgICBrLkhFQVAxNiA9IEIgPSBuZXcgSW50MTZBcnJheShhKTsKICAgICAgICBrLkhFQVBVOCA9IEEgPSBuZXcgVWludDhBcnJheShhKTsKICAgICAgICBrLkhFQVBVMTYgPSBDID0gbmV3IFVpbnQxNkFycmF5KGEpOwogICAgICAgIGsuSEVBUDMyID0gRSA9IG5ldyBJbnQzMkFycmF5KGEpOwogICAgICAgIGsuSEVBUFUzMiA9IEYgPSBuZXcgVWludDMyQXJyYXkoYSk7CiAgICAgICAgay5IRUFQRjMyID0gamEgPSBuZXcgRmxvYXQzMkFycmF5KGEpOwogICAgICAgIGsuSEVBUEY2NCA9IGthID0gbmV3IEZsb2F0NjRBcnJheShhKTsKICAgICAgfQogICAgICB2YXIgbWEgPSBbXSwgbmEgPSBbXSwgb2EgPSBbXTsKICAgICAgZnVuY3Rpb24gcGEoKSB7CiAgICAgICAgdmFyIGEgPSBrLnByZVJ1bi5zaGlmdCgpOwogICAgICAgIG1hLnVuc2hpZnQoYSk7CiAgICAgIH0KICAgICAgdmFyIEcgPSAwLCBxYSA9IG51bGwsIEggPSBudWxsOwogICAgICBmdW5jdGlvbiByYShhKSB7CiAgICAgICAgay5vbkFib3J0Py4oYSk7CiAgICAgICAgYSA9ICJBYm9ydGVkKCIgKyBhICsgIikiOwogICAgICAgIHcoYSk7CiAgICAgICAgaGEgPSB0cnVlOwogICAgICAgIGEgPSBuZXcgV2ViQXNzZW1ibHkuUnVudGltZUVycm9yKGEgKyAiLiBCdWlsZCB3aXRoIC1zQVNTRVJUSU9OUyBmb3IgbW9yZSBpbmZvLiIpOwogICAgICAgIGJhKGEpOwogICAgICAgIHRocm93IGE7CiAgICAgIH0KICAgICAgdmFyIHNhID0gKGEpID0+IGEuc3RhcnRzV2l0aCgiZGF0YTphcHBsaWNhdGlvbi9vY3RldC1zdHJlYW07YmFzZTY0LCIpLCBJOwogICAgICBJID0gIkRvdExvdHRpZVBsYXllci53YXNtIjsKICAgICAgaWYgKCFzYShJKSkgewogICAgICAgIHZhciB0YSA9IEk7CiAgICAgICAgSSA9IGsubG9jYXRlRmlsZSA/IGsubG9jYXRlRmlsZSh0YSwgdCkgOiB0ICsgdGE7CiAgICAgIH0KICAgICAgZnVuY3Rpb24gdWEoYSkgewogICAgICAgIGlmIChhID09IEkgJiYgeCkgcmV0dXJuIG5ldyBVaW50OEFycmF5KHgpOwogICAgICAgIHRocm93ICJib3RoIGFzeW5jIGFuZCBzeW5jIGZldGNoaW5nIG9mIHRoZSB3YXNtIGZhaWxlZCI7CiAgICAgIH0KICAgICAgZnVuY3Rpb24gdmEoYSkgewogICAgICAgIHJldHVybiB4IHx8ICJmdW5jdGlvbiIgIT0gdHlwZW9mIGZldGNoID8gUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKSA9PiB1YShhKSkgOiBmZXRjaChhLCB7IGNyZWRlbnRpYWxzOiAic2FtZS1vcmlnaW4iIH0pLnRoZW4oKGIpID0+IHsKICAgICAgICAgIGlmICghYi5vaykgdGhyb3cgYGZhaWxlZCB0byBsb2FkIHdhc20gYmluYXJ5IGZpbGUgYXQgJyR7YX0nYDsKICAgICAgICAgIHJldHVybiBiLmFycmF5QnVmZmVyKCk7CiAgICAgICAgfSkuY2F0Y2goKCkgPT4gdWEoYSkpOwogICAgICB9CiAgICAgIGZ1bmN0aW9uIHdhKGEsIGIsIGMpIHsKICAgICAgICByZXR1cm4gdmEoYSkudGhlbigoZCkgPT4gV2ViQXNzZW1ibHkuaW5zdGFudGlhdGUoZCwgYikpLnRoZW4oYywgKGQpID0+IHsKICAgICAgICAgIHcoYGZhaWxlZCB0byBhc3luY2hyb25vdXNseSBwcmVwYXJlIHdhc206ICR7ZH1gKTsKICAgICAgICAgIHJhKGQpOwogICAgICAgIH0pOwogICAgICB9CiAgICAgIGZ1bmN0aW9uIHhhKGEsIGIpIHsKICAgICAgICB2YXIgYyA9IEk7CiAgICAgICAgcmV0dXJuIHggfHwgImZ1bmN0aW9uIiAhPSB0eXBlb2YgV2ViQXNzZW1ibHkuaW5zdGFudGlhdGVTdHJlYW1pbmcgfHwgc2EoYykgfHwgImZ1bmN0aW9uIiAhPSB0eXBlb2YgZmV0Y2ggPyB3YShjLCBhLCBiKSA6IGZldGNoKGMsIHsgY3JlZGVudGlhbHM6ICJzYW1lLW9yaWdpbiIgfSkudGhlbigKICAgICAgICAgIChkKSA9PiBXZWJBc3NlbWJseS5pbnN0YW50aWF0ZVN0cmVhbWluZyhkLCBhKS50aGVuKGIsIGZ1bmN0aW9uKGUpIHsKICAgICAgICAgICAgdyhgd2FzbSBzdHJlYW1pbmcgY29tcGlsZSBmYWlsZWQ6ICR7ZX1gKTsKICAgICAgICAgICAgdygiZmFsbGluZyBiYWNrIHRvIEFycmF5QnVmZmVyIGluc3RhbnRpYXRpb24iKTsKICAgICAgICAgICAgcmV0dXJuIHdhKGMsIGEsIGIpOwogICAgICAgICAgfSkKICAgICAgICApOwogICAgICB9CiAgICAgIHZhciB5YSA9IChhKSA9PiB7CiAgICAgICAgZm9yICg7IDAgPCBhLmxlbmd0aDsgKSBhLnNoaWZ0KCkoayk7CiAgICAgIH0sIHphID0gInVuZGVmaW5lZCIgIT0gdHlwZW9mIFRleHREZWNvZGVyID8gbmV3IFRleHREZWNvZGVyKCJ1dGY4IikgOiB2b2lkIDAsIEogPSAoYSwgYiwgYykgPT4gewogICAgICAgIHZhciBkID0gYiArIGM7CiAgICAgICAgZm9yIChjID0gYjsgYVtjXSAmJiAhKGMgPj0gZCk7ICkgKytjOwogICAgICAgIGlmICgxNiA8IGMgLSBiICYmIGEuYnVmZmVyICYmIHphKSByZXR1cm4gemEuZGVjb2RlKGEuc3ViYXJyYXkoYiwgYykpOwogICAgICAgIGZvciAoZCA9ICIiOyBiIDwgYzsgKSB7CiAgICAgICAgICB2YXIgZSA9IGFbYisrXTsKICAgICAgICAgIGlmIChlICYgMTI4KSB7CiAgICAgICAgICAgIHZhciBmID0gYVtiKytdICYgNjM7CiAgICAgICAgICAgIGlmICgxOTIgPT0gKGUgJiAyMjQpKSBkICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoKGUgJiAzMSkgPDwgNiB8IGYpOwogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICB2YXIgbCA9IGFbYisrXSAmIDYzOwogICAgICAgICAgICAgIGUgPSAyMjQgPT0gKGUgJiAyNDApID8gKGUgJiAxNSkgPDwgMTIgfCBmIDw8IDYgfCBsIDogKGUgJiA3KSA8PCAxOCB8IGYgPDwgMTIgfCBsIDw8IDYgfCBhW2IrK10gJiA2MzsKICAgICAgICAgICAgICA2NTUzNiA+IGUgPyBkICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoZSkgOiAoZSAtPSA2NTUzNiwgZCArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKDU1Mjk2IHwgZSA+PiAxMCwgNTYzMjAgfCBlICYgMTAyMykpOwogICAgICAgICAgICB9CiAgICAgICAgICB9IGVsc2UgZCArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGUpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gZDsKICAgICAgfTsKICAgICAgY2xhc3MgQWEgewogICAgICAgIGNvbnN0cnVjdG9yKGEpIHsKICAgICAgICAgIHRoaXMueWEgPSBhIC0gMjQ7CiAgICAgICAgfQogICAgICB9CiAgICAgIHZhciBCYSA9IDAsIENhID0gMCwgRGEgPSAoYSkgPT4gewogICAgICAgIGZvciAodmFyIGIgPSAwLCBjID0gMDsgYyA8IGEubGVuZ3RoOyArK2MpIHsKICAgICAgICAgIHZhciBkID0gYS5jaGFyQ29kZUF0KGMpOwogICAgICAgICAgMTI3ID49IGQgPyBiKysgOiAyMDQ3ID49IGQgPyBiICs9IDIgOiA1NTI5NiA8PSBkICYmIDU3MzQzID49IGQgPyAoYiArPSA0LCArK2MpIDogYiArPSAzOwogICAgICAgIH0KICAgICAgICByZXR1cm4gYjsKICAgICAgfSwgRWEgPSAoYSwgYiwgYywgZCkgPT4gewogICAgICAgIGlmICgwIDwgZCkgewogICAgICAgICAgZCA9IGMgKyBkIC0gMTsKICAgICAgICAgIGZvciAodmFyIGUgPSAwOyBlIDwgYS5sZW5ndGg7ICsrZSkgewogICAgICAgICAgICB2YXIgZiA9IGEuY2hhckNvZGVBdChlKTsKICAgICAgICAgICAgaWYgKDU1Mjk2IDw9IGYgJiYgNTczNDMgPj0gZikgewogICAgICAgICAgICAgIHZhciBsID0gYS5jaGFyQ29kZUF0KCsrZSk7CiAgICAgICAgICAgICAgZiA9IDY1NTM2ICsgKChmICYgMTAyMykgPDwgMTApIHwgbCAmIDEwMjM7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKDEyNyA+PSBmKSB7CiAgICAgICAgICAgICAgaWYgKGMgPj0gZCkgYnJlYWs7CiAgICAgICAgICAgICAgYltjKytdID0gZjsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICBpZiAoMjA0NyA+PSBmKSB7CiAgICAgICAgICAgICAgICBpZiAoYyArIDEgPj0gZCkgYnJlYWs7CiAgICAgICAgICAgICAgICBiW2MrK10gPSAxOTIgfCBmID4+IDY7CiAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIGlmICg2NTUzNSA+PSBmKSB7CiAgICAgICAgICAgICAgICAgIGlmIChjICsgMiA+PSBkKSBicmVhazsKICAgICAgICAgICAgICAgICAgYltjKytdID0gMjI0IHwgZiA+PiAxMjsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgIGlmIChjICsgMyA+PSBkKSBicmVhazsKICAgICAgICAgICAgICAgICAgYltjKytdID0gMjQwIHwgZiA+PiAxODsKICAgICAgICAgICAgICAgICAgYltjKytdID0gMTI4IHwgZiA+PiAxMiAmIDYzOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgYltjKytdID0gMTI4IHwgZiA+PiA2ICYgNjM7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGJbYysrXSA9IDEyOCB8IGYgJiA2MzsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgYltjXSA9IDA7CiAgICAgICAgfQogICAgICB9LCBGYSA9IHt9LCBHYSA9IChhKSA9PiB7CiAgICAgICAgZm9yICg7IGEubGVuZ3RoOyApIHsKICAgICAgICAgIHZhciBiID0gYS5wb3AoKTsKICAgICAgICAgIGEucG9wKCkoYik7CiAgICAgICAgfQogICAgICB9OwogICAgICBmdW5jdGlvbiBLKGEpIHsKICAgICAgICByZXR1cm4gdGhpcy5mcm9tV2lyZVR5cGUoRlthID4+IDJdKTsKICAgICAgfQogICAgICB2YXIgTCA9IHt9LCBNID0ge30sIEhhID0ge30sIElhLCBQID0gKGEsIGIsIGMpID0+IHsKICAgICAgICBmdW5jdGlvbiBkKGgpIHsKICAgICAgICAgIGggPSBjKGgpOwogICAgICAgICAgaWYgKGgubGVuZ3RoICE9PSBhLmxlbmd0aCkgdGhyb3cgbmV3IElhKCJNaXNtYXRjaGVkIHR5cGUgY29udmVydGVyIGNvdW50Iik7CiAgICAgICAgICBmb3IgKHZhciBuID0gMDsgbiA8IGEubGVuZ3RoOyArK24pIE8oYVtuXSwgaFtuXSk7CiAgICAgICAgfQogICAgICAgIGEuZm9yRWFjaChmdW5jdGlvbihoKSB7CiAgICAgICAgICBIYVtoXSA9IGI7CiAgICAgICAgfSk7CiAgICAgICAgdmFyIGUgPSBBcnJheShiLmxlbmd0aCksIGYgPSBbXSwgbCA9IDA7CiAgICAgICAgYi5mb3JFYWNoKChoLCBuKSA9PiB7CiAgICAgICAgICBNLmhhc093blByb3BlcnR5KGgpID8gZVtuXSA9IE1baF0gOiAoZi5wdXNoKGgpLCBMLmhhc093blByb3BlcnR5KGgpIHx8IChMW2hdID0gW10pLCBMW2hdLnB1c2goKCkgPT4gewogICAgICAgICAgICBlW25dID0gTVtoXTsKICAgICAgICAgICAgKytsOwogICAgICAgICAgICBsID09PSBmLmxlbmd0aCAmJiBkKGUpOwogICAgICAgICAgfSkpOwogICAgICAgIH0pOwogICAgICAgIDAgPT09IGYubGVuZ3RoICYmIGQoZSk7CiAgICAgIH0sIEphLCBRID0gKGEpID0+IHsKICAgICAgICBmb3IgKHZhciBiID0gIiI7IEFbYV07ICkgYiArPSBKYVtBW2ErK11dOwogICAgICAgIHJldHVybiBiOwogICAgICB9LCBSOwogICAgICBmdW5jdGlvbiBLYShhLCBiLCBjID0ge30pIHsKICAgICAgICB2YXIgZCA9IGIubmFtZTsKICAgICAgICBpZiAoIWEpIHRocm93IG5ldyBSKGB0eXBlICIke2R9IiBtdXN0IGhhdmUgYSBwb3NpdGl2ZSBpbnRlZ2VyIHR5cGVpZCBwb2ludGVyYCk7CiAgICAgICAgaWYgKE0uaGFzT3duUHJvcGVydHkoYSkpIHsKICAgICAgICAgIGlmIChjLmliKSByZXR1cm47CiAgICAgICAgICB0aHJvdyBuZXcgUihgQ2Fubm90IHJlZ2lzdGVyIHR5cGUgJyR7ZH0nIHR3aWNlYCk7CiAgICAgICAgfQogICAgICAgIE1bYV0gPSBiOwogICAgICAgIGRlbGV0ZSBIYVthXTsKICAgICAgICBMLmhhc093blByb3BlcnR5KGEpICYmIChiID0gTFthXSwgZGVsZXRlIExbYV0sIGIuZm9yRWFjaCgoZSkgPT4gZSgpKSk7CiAgICAgIH0KICAgICAgZnVuY3Rpb24gTyhhLCBiLCBjID0ge30pIHsKICAgICAgICBpZiAoISgiYXJnUGFja0FkdmFuY2UiIGluIGIpKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJyZWdpc3RlclR5cGUgcmVnaXN0ZXJlZEluc3RhbmNlIHJlcXVpcmVzIGFyZ1BhY2tBZHZhbmNlIik7CiAgICAgICAgcmV0dXJuIEthKGEsIGIsIGMpOwogICAgICB9CiAgICAgIHZhciBMYSA9IChhKSA9PiB7CiAgICAgICAgdGhyb3cgbmV3IFIoYS5tYS56YS54YS5uYW1lICsgIiBpbnN0YW5jZSBhbHJlYWR5IGRlbGV0ZWQiKTsKICAgICAgfSwgTWEgPSBmYWxzZSwgT2EgPSAoKSA9PiB7CiAgICAgIH0sIFBhID0gKGEsIGIsIGMpID0+IHsKICAgICAgICBpZiAoYiA9PT0gYykgcmV0dXJuIGE7CiAgICAgICAgaWYgKHZvaWQgMCA9PT0gYy5DYSkgcmV0dXJuIG51bGw7CiAgICAgICAgYSA9IFBhKGEsIGIsIGMuQ2EpOwogICAgICAgIHJldHVybiBudWxsID09PSBhID8gbnVsbCA6IGMuYWIoYSk7CiAgICAgIH0sIFFhID0ge30sIFJhID0gW10sIFNhID0gKCkgPT4gewogICAgICAgIGZvciAoOyBSYS5sZW5ndGg7ICkgewogICAgICAgICAgdmFyIGEgPSBSYS5wb3AoKTsKICAgICAgICAgIGEubWEuS2EgPSBmYWxzZTsKICAgICAgICAgIGFbImRlbGV0ZSJdKCk7CiAgICAgICAgfQogICAgICB9LCBUYSwgVWEgPSB7fSwgVmEgPSAoYSwgYikgPT4gewogICAgICAgIGlmICh2b2lkIDAgPT09IGIpIHRocm93IG5ldyBSKCJwdHIgc2hvdWxkIG5vdCBiZSB1bmRlZmluZWQiKTsKICAgICAgICBmb3IgKDsgYS5DYTsgKSBiID0gYS5OYShiKSwgYSA9IGEuQ2E7CiAgICAgICAgcmV0dXJuIFVhW2JdOwogICAgICB9LCBYYSA9IChhLCBiKSA9PiB7CiAgICAgICAgaWYgKCFiLnphIHx8ICFiLnlhKSB0aHJvdyBuZXcgSWEoIm1ha2VDbGFzc0hhbmRsZSByZXF1aXJlcyBwdHIgYW5kIHB0clR5cGUiKTsKICAgICAgICBpZiAoISFiLkRhICE9PSAhIWIuQWEpIHRocm93IG5ldyBJYSgiQm90aCBzbWFydFB0clR5cGUgYW5kIHNtYXJ0UHRyIG11c3QgYmUgc3BlY2lmaWVkIik7CiAgICAgICAgYi5jb3VudCA9IHsgdmFsdWU6IDEgfTsKICAgICAgICByZXR1cm4gV2EoT2JqZWN0LmNyZWF0ZShhLCB7IG1hOiB7IHZhbHVlOiBiLCB3cml0YWJsZTogdHJ1ZSB9IH0pKTsKICAgICAgfSwgV2EgPSAoYSkgPT4gewogICAgICAgIGlmICgidW5kZWZpbmVkIiA9PT0gdHlwZW9mIEZpbmFsaXphdGlvblJlZ2lzdHJ5KSByZXR1cm4gV2EgPSAoYikgPT4gYiwgYTsKICAgICAgICBNYSA9IG5ldyBGaW5hbGl6YXRpb25SZWdpc3RyeSgoYikgPT4gewogICAgICAgICAgYiA9IGIubWE7CiAgICAgICAgICAtLWIuY291bnQudmFsdWU7CiAgICAgICAgICAwID09PSBiLmNvdW50LnZhbHVlICYmIChiLkFhID8gYi5EYS5GYShiLkFhKSA6IGIuemEueGEuRmEoYi55YSkpOwogICAgICAgIH0pOwogICAgICAgIFdhID0gKGIpID0+IHsKICAgICAgICAgIHZhciBjID0gYi5tYTsKICAgICAgICAgIGMuQWEgJiYgTWEucmVnaXN0ZXIoYiwgeyBtYTogYyB9LCBiKTsKICAgICAgICAgIHJldHVybiBiOwogICAgICAgIH07CiAgICAgICAgT2EgPSAoYikgPT4gewogICAgICAgICAgTWEudW5yZWdpc3RlcihiKTsKICAgICAgICB9OwogICAgICAgIHJldHVybiBXYShhKTsKICAgICAgfTsKICAgICAgZnVuY3Rpb24gWWEoKSB7CiAgICAgIH0KICAgICAgdmFyIFphID0gKGEsIGIpID0+IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShiLCAibmFtZSIsIHsgdmFsdWU6IGEgfSksICRhID0gKGEsIGIsIGMpID0+IHsKICAgICAgICBpZiAodm9pZCAwID09PSBhW2JdLkJhKSB7CiAgICAgICAgICB2YXIgZCA9IGFbYl07CiAgICAgICAgICBhW2JdID0gZnVuY3Rpb24oLi4uZSkgewogICAgICAgICAgICBpZiAoIWFbYl0uQmEuaGFzT3duUHJvcGVydHkoZS5sZW5ndGgpKQogICAgICAgICAgICAgIHRocm93IG5ldyBSKAogICAgICAgICAgICAgICAgYEZ1bmN0aW9uICcke2N9JyBjYWxsZWQgd2l0aCBhbiBpbnZhbGlkIG51bWJlciBvZiBhcmd1bWVudHMgKCR7ZS5sZW5ndGh9KSAtIGV4cGVjdHMgb25lIG9mICgke2FbYl0uQmF9KSFgCiAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuIGFbYl0uQmFbZS5sZW5ndGhdLmFwcGx5KHRoaXMsIGUpOwogICAgICAgICAgfTsKICAgICAgICAgIGFbYl0uQmEgPSBbXTsKICAgICAgICAgIGFbYl0uQmFbZC5PYV0gPSBkOwogICAgICAgIH0KICAgICAgfSwgYWIgPSAoYSwgYiwgYykgPT4gewogICAgICAgIGlmIChrLmhhc093blByb3BlcnR5KGEpKSB7CiAgICAgICAgICBpZiAodm9pZCAwID09PSBjIHx8IHZvaWQgMCAhPT0ga1thXS5CYSAmJiB2b2lkIDAgIT09IGtbYV0uQmFbY10pCiAgICAgICAgICAgIHRocm93IG5ldyBSKGBDYW5ub3QgcmVnaXN0ZXIgcHVibGljIG5hbWUgJyR7YX0nIHR3aWNlYCk7CiAgICAgICAgICAkYShrLCBhLCBhKTsKICAgICAgICAgIGlmIChrLmhhc093blByb3BlcnR5KGMpKQogICAgICAgICAgICB0aHJvdyBuZXcgUihgQ2Fubm90IHJlZ2lzdGVyIG11bHRpcGxlIG92ZXJsb2FkcyBvZiBhIGZ1bmN0aW9uIHdpdGggdGhlIHNhbWUgbnVtYmVyIG9mIGFyZ3VtZW50cyAoJHtjfSkhYCk7CiAgICAgICAgICBrW2FdLkJhW2NdID0gYjsKICAgICAgICB9IGVsc2Uga1thXSA9IGIsIHZvaWQgMCAhPT0gYyAmJiAoa1thXS52YiA9IGMpOwogICAgICB9LCBiYiA9IChhKSA9PiB7CiAgICAgICAgaWYgKHZvaWQgMCA9PT0gYSkgcmV0dXJuICJfdW5rbm93biI7CiAgICAgICAgYSA9IGEucmVwbGFjZSgvW15hLXpBLVowLTlfXS9nLCAiJCIpOwogICAgICAgIHZhciBiID0gYS5jaGFyQ29kZUF0KDApOwogICAgICAgIHJldHVybiA0OCA8PSBiICYmIDU3ID49IGIgPyBgXyR7YX1gIDogYTsKICAgICAgfTsKICAgICAgZnVuY3Rpb24gY2IoYSwgYiwgYywgZCwgZSwgZiwgbCwgaCkgewogICAgICAgIHRoaXMubmFtZSA9IGE7CiAgICAgICAgdGhpcy5jb25zdHJ1Y3RvciA9IGI7CiAgICAgICAgdGhpcy5MYSA9IGM7CiAgICAgICAgdGhpcy5GYSA9IGQ7CiAgICAgICAgdGhpcy5DYSA9IGU7CiAgICAgICAgdGhpcy5jYiA9IGY7CiAgICAgICAgdGhpcy5OYSA9IGw7CiAgICAgICAgdGhpcy5hYiA9IGg7CiAgICAgICAgdGhpcy5rYiA9IFtdOwogICAgICB9CiAgICAgIHZhciBkYiA9IChhLCBiLCBjKSA9PiB7CiAgICAgICAgZm9yICg7IGIgIT09IGM7ICkgewogICAgICAgICAgaWYgKCFiLk5hKSB0aHJvdyBuZXcgUihgRXhwZWN0ZWQgbnVsbCBvciBpbnN0YW5jZSBvZiAke2MubmFtZX0sIGdvdCBhbiBpbnN0YW5jZSBvZiAke2IubmFtZX1gKTsKICAgICAgICAgIGEgPSBiLk5hKGEpOwogICAgICAgICAgYiA9IGIuQ2E7CiAgICAgICAgfQogICAgICAgIHJldHVybiBhOwogICAgICB9OwogICAgICBmdW5jdGlvbiBlYihhLCBiKSB7CiAgICAgICAgaWYgKG51bGwgPT09IGIpIHsKICAgICAgICAgIGlmICh0aGlzLlRhKSB0aHJvdyBuZXcgUihgbnVsbCBpcyBub3QgYSB2YWxpZCAke3RoaXMubmFtZX1gKTsKICAgICAgICAgIHJldHVybiAwOwogICAgICAgIH0KICAgICAgICBpZiAoIWIubWEpIHRocm93IG5ldyBSKGBDYW5ub3QgcGFzcyAiJHtmYihiKX0iIGFzIGEgJHt0aGlzLm5hbWV9YCk7CiAgICAgICAgaWYgKCFiLm1hLnlhKSB0aHJvdyBuZXcgUihgQ2Fubm90IHBhc3MgZGVsZXRlZCBvYmplY3QgYXMgYSBwb2ludGVyIG9mIHR5cGUgJHt0aGlzLm5hbWV9YCk7CiAgICAgICAgcmV0dXJuIGRiKGIubWEueWEsIGIubWEuemEueGEsIHRoaXMueGEpOwogICAgICB9CiAgICAgIGZ1bmN0aW9uIGdiKGEsIGIpIHsKICAgICAgICBpZiAobnVsbCA9PT0gYikgewogICAgICAgICAgaWYgKHRoaXMuVGEpIHRocm93IG5ldyBSKGBudWxsIGlzIG5vdCBhIHZhbGlkICR7dGhpcy5uYW1lfWApOwogICAgICAgICAgaWYgKHRoaXMuUWEpIHsKICAgICAgICAgICAgdmFyIGMgPSB0aGlzLlVhKCk7CiAgICAgICAgICAgIG51bGwgIT09IGEgJiYgYS5wdXNoKHRoaXMuRmEsIGMpOwogICAgICAgICAgICByZXR1cm4gYzsKICAgICAgICAgIH0KICAgICAgICAgIHJldHVybiAwOwogICAgICAgIH0KICAgICAgICBpZiAoIWIgfHwgIWIubWEpIHRocm93IG5ldyBSKGBDYW5ub3QgcGFzcyAiJHtmYihiKX0iIGFzIGEgJHt0aGlzLm5hbWV9YCk7CiAgICAgICAgaWYgKCFiLm1hLnlhKSB0aHJvdyBuZXcgUihgQ2Fubm90IHBhc3MgZGVsZXRlZCBvYmplY3QgYXMgYSBwb2ludGVyIG9mIHR5cGUgJHt0aGlzLm5hbWV9YCk7CiAgICAgICAgaWYgKCF0aGlzLlBhICYmIGIubWEuemEuUGEpCiAgICAgICAgICB0aHJvdyBuZXcgUigKICAgICAgICAgICAgYENhbm5vdCBjb252ZXJ0IGFyZ3VtZW50IG9mIHR5cGUgJHtiLm1hLkRhID8gYi5tYS5EYS5uYW1lIDogYi5tYS56YS5uYW1lfSB0byBwYXJhbWV0ZXIgdHlwZSAke3RoaXMubmFtZX1gCiAgICAgICAgICApOwogICAgICAgIGMgPSBkYihiLm1hLnlhLCBiLm1hLnphLnhhLCB0aGlzLnhhKTsKICAgICAgICBpZiAodGhpcy5RYSkgewogICAgICAgICAgaWYgKHZvaWQgMCA9PT0gYi5tYS5BYSkgdGhyb3cgbmV3IFIoIlBhc3NpbmcgcmF3IHBvaW50ZXIgdG8gc21hcnQgcG9pbnRlciBpcyBpbGxlZ2FsIik7CiAgICAgICAgICBzd2l0Y2ggKHRoaXMucGIpIHsKICAgICAgICAgICAgY2FzZSAwOgogICAgICAgICAgICAgIGlmIChiLm1hLkRhID09PSB0aGlzKSBjID0gYi5tYS5BYTsKICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUigKICAgICAgICAgICAgICAgICAgYENhbm5vdCBjb252ZXJ0IGFyZ3VtZW50IG9mIHR5cGUgJHtiLm1hLkRhID8gYi5tYS5EYS5uYW1lIDogYi5tYS56YS5uYW1lfSB0byBwYXJhbWV0ZXIgdHlwZSAke3RoaXMubmFtZX1gCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlIDE6CiAgICAgICAgICAgICAgYyA9IGIubWEuQWE7CiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgMjoKICAgICAgICAgICAgICBpZiAoYi5tYS5EYSA9PT0gdGhpcykgYyA9IGIubWEuQWE7CiAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICB2YXIgZCA9IGIuY2xvbmUoKTsKICAgICAgICAgICAgICAgIGMgPSB0aGlzLmxiKAogICAgICAgICAgICAgICAgICBjLAogICAgICAgICAgICAgICAgICBoYigoKSA9PiBkWyJkZWxldGUiXSgpKQogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIG51bGwgIT09IGEgJiYgYS5wdXNoKHRoaXMuRmEsIGMpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICB0aHJvdyBuZXcgUigiVW5zdXBwb3J0aW5nIHNoYXJpbmcgcG9saWN5Iik7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiBjOwogICAgICB9CiAgICAgIGZ1bmN0aW9uIGliKGEsIGIpIHsKICAgICAgICBpZiAobnVsbCA9PT0gYikgewogICAgICAgICAgaWYgKHRoaXMuVGEpIHRocm93IG5ldyBSKGBudWxsIGlzIG5vdCBhIHZhbGlkICR7dGhpcy5uYW1lfWApOwogICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgfQogICAgICAgIGlmICghYi5tYSkgdGhyb3cgbmV3IFIoYENhbm5vdCBwYXNzICIke2ZiKGIpfSIgYXMgYSAke3RoaXMubmFtZX1gKTsKICAgICAgICBpZiAoIWIubWEueWEpIHRocm93IG5ldyBSKGBDYW5ub3QgcGFzcyBkZWxldGVkIG9iamVjdCBhcyBhIHBvaW50ZXIgb2YgdHlwZSAke3RoaXMubmFtZX1gKTsKICAgICAgICBpZiAoYi5tYS56YS5QYSkgdGhyb3cgbmV3IFIoYENhbm5vdCBjb252ZXJ0IGFyZ3VtZW50IG9mIHR5cGUgJHtiLm1hLnphLm5hbWV9IHRvIHBhcmFtZXRlciB0eXBlICR7dGhpcy5uYW1lfWApOwogICAgICAgIHJldHVybiBkYihiLm1hLnlhLCBiLm1hLnphLnhhLCB0aGlzLnhhKTsKICAgICAgfQogICAgICBmdW5jdGlvbiBqYihhLCBiLCBjLCBkLCBlLCBmLCBsLCBoLCBuLCBtLCBwKSB7CiAgICAgICAgdGhpcy5uYW1lID0gYTsKICAgICAgICB0aGlzLnhhID0gYjsKICAgICAgICB0aGlzLlRhID0gYzsKICAgICAgICB0aGlzLlBhID0gZDsKICAgICAgICB0aGlzLlFhID0gZTsKICAgICAgICB0aGlzLmpiID0gZjsKICAgICAgICB0aGlzLnBiID0gbDsKICAgICAgICB0aGlzLlphID0gaDsKICAgICAgICB0aGlzLlVhID0gbjsKICAgICAgICB0aGlzLmxiID0gbTsKICAgICAgICB0aGlzLkZhID0gcDsKICAgICAgICBlIHx8IHZvaWQgMCAhPT0gYi5DYSA/IHRoaXMudG9XaXJlVHlwZSA9IGdiIDogKHRoaXMudG9XaXJlVHlwZSA9IGQgPyBlYiA6IGliLCB0aGlzLkVhID0gbnVsbCk7CiAgICAgIH0KICAgICAgdmFyIGtiID0gKGEsIGIsIGMpID0+IHsKICAgICAgICBpZiAoIWsuaGFzT3duUHJvcGVydHkoYSkpIHRocm93IG5ldyBJYSgiUmVwbGFjaW5nIG5vbmV4aXN0ZW50IHB1YmxpYyBzeW1ib2wiKTsKICAgICAgICB2b2lkIDAgIT09IGtbYV0uQmEgJiYgdm9pZCAwICE9PSBjID8ga1thXS5CYVtjXSA9IGIgOiAoa1thXSA9IGIsIGtbYV0uT2EgPSBjKTsKICAgICAgfSwgUywgbGIgPSAoYSwgYiwgYyA9IFtdKSA9PiB7CiAgICAgICAgYS5pbmNsdWRlcygiaiIpID8gKGEgPSBhLnJlcGxhY2UoL3AvZywgImkiKSwgYiA9ICgwLCBrWyJkeW5DYWxsXyIgKyBhXSkoYiwgLi4uYykpIDogYiA9IFMuZ2V0KGIpKC4uLmMpOwogICAgICAgIHJldHVybiBiOwogICAgICB9LCBtYiA9IChhLCBiKSA9PiAoLi4uYykgPT4gbGIoYSwgYiwgYyksIFQgPSAoYSwgYikgPT4gewogICAgICAgIGEgPSBRKGEpOwogICAgICAgIHZhciBjID0gYS5pbmNsdWRlcygiaiIpID8gbWIoYSwgYikgOiBTLmdldChiKTsKICAgICAgICBpZiAoImZ1bmN0aW9uIiAhPSB0eXBlb2YgYykgdGhyb3cgbmV3IFIoYHVua25vd24gZnVuY3Rpb24gcG9pbnRlciB3aXRoIHNpZ25hdHVyZSAke2F9OiAke2J9YCk7CiAgICAgICAgcmV0dXJuIGM7CiAgICAgIH0sIG5iLCBwYiA9IChhKSA9PiB7CiAgICAgICAgYSA9IG9iKGEpOwogICAgICAgIHZhciBiID0gUShhKTsKICAgICAgICBVKGEpOwogICAgICAgIHJldHVybiBiOwogICAgICB9LCBxYiA9IChhLCBiKSA9PiB7CiAgICAgICAgZnVuY3Rpb24gYyhmKSB7CiAgICAgICAgICBlW2ZdIHx8IE1bZl0gfHwgKEhhW2ZdID8gSGFbZl0uZm9yRWFjaChjKSA6IChkLnB1c2goZiksIGVbZl0gPSB0cnVlKSk7CiAgICAgICAgfQogICAgICAgIHZhciBkID0gW10sIGUgPSB7fTsKICAgICAgICBiLmZvckVhY2goYyk7CiAgICAgICAgdGhyb3cgbmV3IG5iKGAke2F9OiBgICsgZC5tYXAocGIpLmpvaW4oWyIsICJdKSk7CiAgICAgIH0sIHJiID0gKGEsIGIpID0+IHsKICAgICAgICBmb3IgKHZhciBjID0gW10sIGQgPSAwOyBkIDwgYTsgZCsrKSBjLnB1c2goRltiICsgNCAqIGQgPj4gMl0pOwogICAgICAgIHJldHVybiBjOwogICAgICB9OwogICAgICBmdW5jdGlvbiBzYihhKSB7CiAgICAgICAgZm9yICh2YXIgYiA9IDE7IGIgPCBhLmxlbmd0aDsgKytiKSBpZiAobnVsbCAhPT0gYVtiXSAmJiB2b2lkIDAgPT09IGFbYl0uRWEpIHJldHVybiB0cnVlOwogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgfQogICAgICBmdW5jdGlvbiB0YihhLCBiLCBjLCBkLCBlKSB7CiAgICAgICAgdmFyIGYgPSBiLmxlbmd0aDsKICAgICAgICBpZiAoMiA+IGYpIHRocm93IG5ldyBSKCJhcmdUeXBlcyBhcnJheSBzaXplIG1pc21hdGNoISBNdXN0IGF0IGxlYXN0IGdldCByZXR1cm4gdmFsdWUgYW5kICd0aGlzJyB0eXBlcyEiKTsKICAgICAgICB2YXIgbCA9IG51bGwgIT09IGJbMV0gJiYgbnVsbCAhPT0gYywgaCA9IHNiKGIpLCBuID0gInZvaWQiICE9PSBiWzBdLm5hbWUsIG0gPSBmIC0gMiwgcCA9IEFycmF5KG0pLCB1ID0gW10sIHYgPSBbXTsKICAgICAgICByZXR1cm4gWmEoYSwgZnVuY3Rpb24oLi4uZykgewogICAgICAgICAgaWYgKGcubGVuZ3RoICE9PSBtKSB0aHJvdyBuZXcgUihgZnVuY3Rpb24gJHthfSBjYWxsZWQgd2l0aCAke2cubGVuZ3RofSBhcmd1bWVudHMsIGV4cGVjdGVkICR7bX1gKTsKICAgICAgICAgIHYubGVuZ3RoID0gMDsKICAgICAgICAgIHUubGVuZ3RoID0gbCA/IDIgOiAxOwogICAgICAgICAgdVswXSA9IGU7CiAgICAgICAgICBpZiAobCkgewogICAgICAgICAgICB2YXIgcSA9IGJbMV0udG9XaXJlVHlwZSh2LCB0aGlzKTsKICAgICAgICAgICAgdVsxXSA9IHE7CiAgICAgICAgICB9CiAgICAgICAgICBmb3IgKHZhciByID0gMDsgciA8IG07ICsrcikgcFtyXSA9IGJbciArIDJdLnRvV2lyZVR5cGUodiwgZ1tyXSksIHUucHVzaChwW3JdKTsKICAgICAgICAgIGcgPSBkKC4uLnUpOwogICAgICAgICAgaWYgKGgpIEdhKHYpOwogICAgICAgICAgZWxzZQogICAgICAgICAgICBmb3IgKHIgPSBsID8gMSA6IDI7IHIgPCBiLmxlbmd0aDsgcisrKSB7CiAgICAgICAgICAgICAgdmFyIHogPSAxID09PSByID8gcSA6IHBbciAtIDJdOwogICAgICAgICAgICAgIG51bGwgIT09IGJbcl0uRWEgJiYgYltyXS5FYSh6KTsKICAgICAgICAgICAgfQogICAgICAgICAgcSA9IG4gPyBiWzBdLmZyb21XaXJlVHlwZShnKSA6IHZvaWQgMDsKICAgICAgICAgIHJldHVybiBxOwogICAgICAgIH0pOwogICAgICB9CiAgICAgIHZhciB1YiA9IChhKSA9PiB7CiAgICAgICAgYSA9IGEudHJpbSgpOwogICAgICAgIGNvbnN0IGIgPSBhLmluZGV4T2YoIigiKTsKICAgICAgICByZXR1cm4gLTEgIT09IGIgPyBhLnN1YnN0cigwLCBiKSA6IGE7CiAgICAgIH0sIHZiID0gW10sIFYgPSBbXSwgd2IgPSAoYSkgPT4gewogICAgICAgIDkgPCBhICYmIDAgPT09IC0tVlthICsgMV0gJiYgKFZbYV0gPSB2b2lkIDAsIHZiLnB1c2goYSkpOwogICAgICB9LCB5YiA9IChhKSA9PiB7CiAgICAgICAgaWYgKCFhKSB0aHJvdyBuZXcgUigiQ2Fubm90IHVzZSBkZWxldGVkIHZhbC4gaGFuZGxlID0gIiArIGEpOwogICAgICAgIHJldHVybiBWW2FdOwogICAgICB9LCBoYiA9IChhKSA9PiB7CiAgICAgICAgc3dpdGNoIChhKSB7CiAgICAgICAgICBjYXNlIHZvaWQgMDoKICAgICAgICAgICAgcmV0dXJuIDI7CiAgICAgICAgICBjYXNlIG51bGw6CiAgICAgICAgICAgIHJldHVybiA0OwogICAgICAgICAgY2FzZSB0cnVlOgogICAgICAgICAgICByZXR1cm4gNjsKICAgICAgICAgIGNhc2UgZmFsc2U6CiAgICAgICAgICAgIHJldHVybiA4OwogICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgY29uc3QgYiA9IHZiLnBvcCgpIHx8IFYubGVuZ3RoOwogICAgICAgICAgICBWW2JdID0gYTsKICAgICAgICAgICAgVltiICsgMV0gPSAxOwogICAgICAgICAgICByZXR1cm4gYjsKICAgICAgICB9CiAgICAgIH0sIHpiID0gewogICAgICAgIG5hbWU6ICJlbXNjcmlwdGVuOjp2YWwiLAogICAgICAgIGZyb21XaXJlVHlwZTogKGEpID0+IHsKICAgICAgICAgIHZhciBiID0geWIoYSk7CiAgICAgICAgICB3YihhKTsKICAgICAgICAgIHJldHVybiBiOwogICAgICAgIH0sCiAgICAgICAgdG9XaXJlVHlwZTogKGEsIGIpID0+IGhiKGIpLAogICAgICAgIGFyZ1BhY2tBZHZhbmNlOiA4LAogICAgICAgIHJlYWRWYWx1ZUZyb21Qb2ludGVyOiBLLAogICAgICAgIEVhOiBudWxsCiAgICAgIH0sIEFiID0gKGEsIGIsIGMpID0+IHsKICAgICAgICBzd2l0Y2ggKGIpIHsKICAgICAgICAgIGNhc2UgMToKICAgICAgICAgICAgcmV0dXJuIGMgPyBmdW5jdGlvbihkKSB7CiAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZnJvbVdpcmVUeXBlKHlbZF0pOwogICAgICAgICAgICB9IDogZnVuY3Rpb24oZCkgewogICAgICAgICAgICAgIHJldHVybiB0aGlzLmZyb21XaXJlVHlwZShBW2RdKTsKICAgICAgICAgICAgfTsKICAgICAgICAgIGNhc2UgMjoKICAgICAgICAgICAgcmV0dXJuIGMgPyBmdW5jdGlvbihkKSB7CiAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZnJvbVdpcmVUeXBlKEJbZCA+PiAxXSk7CiAgICAgICAgICAgIH0gOiBmdW5jdGlvbihkKSB7CiAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZnJvbVdpcmVUeXBlKENbZCA+PiAxXSk7CiAgICAgICAgICAgIH07CiAgICAgICAgICBjYXNlIDQ6CiAgICAgICAgICAgIHJldHVybiBjID8gZnVuY3Rpb24oZCkgewogICAgICAgICAgICAgIHJldHVybiB0aGlzLmZyb21XaXJlVHlwZShFW2QgPj4gMl0pOwogICAgICAgICAgICB9IDogZnVuY3Rpb24oZCkgewogICAgICAgICAgICAgIHJldHVybiB0aGlzLmZyb21XaXJlVHlwZShGW2QgPj4gMl0pOwogICAgICAgICAgICB9OwogICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgaW52YWxpZCBpbnRlZ2VyIHdpZHRoICgke2J9KTogJHthfWApOwogICAgICAgIH0KICAgICAgfSwgQmIgPSAoYSwgYikgPT4gewogICAgICAgIHZhciBjID0gTVthXTsKICAgICAgICBpZiAodm9pZCAwID09PSBjKSB0aHJvdyBhID0gYCR7Yn0gaGFzIHVua25vd24gdHlwZSAke3BiKGEpfWAsIG5ldyBSKGEpOwogICAgICAgIHJldHVybiBjOwogICAgICB9LCBmYiA9IChhKSA9PiB7CiAgICAgICAgaWYgKG51bGwgPT09IGEpIHJldHVybiAibnVsbCI7CiAgICAgICAgdmFyIGIgPSB0eXBlb2YgYTsKICAgICAgICByZXR1cm4gIm9iamVjdCIgPT09IGIgfHwgImFycmF5IiA9PT0gYiB8fCAiZnVuY3Rpb24iID09PSBiID8gYS50b1N0cmluZygpIDogIiIgKyBhOwogICAgICB9LCBDYiA9IChhLCBiKSA9PiB7CiAgICAgICAgc3dpdGNoIChiKSB7CiAgICAgICAgICBjYXNlIDQ6CiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbihjKSB7CiAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZnJvbVdpcmVUeXBlKGphW2MgPj4gMl0pOwogICAgICAgICAgICB9OwogICAgICAgICAgY2FzZSA4OgogICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24oYykgewogICAgICAgICAgICAgIHJldHVybiB0aGlzLmZyb21XaXJlVHlwZShrYVtjID4+IDNdKTsKICAgICAgICAgICAgfTsKICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYGludmFsaWQgZmxvYXQgd2lkdGggKCR7Yn0pOiAke2F9YCk7CiAgICAgICAgfQogICAgICB9LCBEYiA9IChhLCBiLCBjKSA9PiB7CiAgICAgICAgc3dpdGNoIChiKSB7CiAgICAgICAgICBjYXNlIDE6CiAgICAgICAgICAgIHJldHVybiBjID8gKGQpID0+IHlbZF0gOiAoZCkgPT4gQVtkXTsKICAgICAgICAgIGNhc2UgMjoKICAgICAgICAgICAgcmV0dXJuIGMgPyAoZCkgPT4gQltkID4+IDFdIDogKGQpID0+IENbZCA+PiAxXTsKICAgICAgICAgIGNhc2UgNDoKICAgICAgICAgICAgcmV0dXJuIGMgPyAoZCkgPT4gRVtkID4+IDJdIDogKGQpID0+IEZbZCA+PiAyXTsKICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYGludmFsaWQgaW50ZWdlciB3aWR0aCAoJHtifSk6ICR7YX1gKTsKICAgICAgICB9CiAgICAgIH0sIEViID0gInVuZGVmaW5lZCIgIT0gdHlwZW9mIFRleHREZWNvZGVyID8gbmV3IFRleHREZWNvZGVyKCJ1dGYtMTZsZSIpIDogdm9pZCAwLCBGYiA9IChhLCBiKSA9PiB7CiAgICAgICAgdmFyIGMgPSBhID4+IDE7CiAgICAgICAgZm9yICh2YXIgZCA9IGMgKyBiIC8gMjsgIShjID49IGQpICYmIENbY107ICkgKytjOwogICAgICAgIGMgPDw9IDE7CiAgICAgICAgaWYgKDMyIDwgYyAtIGEgJiYgRWIpIHJldHVybiBFYi5kZWNvZGUoQS5zdWJhcnJheShhLCBjKSk7CiAgICAgICAgYyA9ICIiOwogICAgICAgIGZvciAoZCA9IDA7ICEoZCA+PSBiIC8gMik7ICsrZCkgewogICAgICAgICAgdmFyIGUgPSBCW2EgKyAyICogZCA+PiAxXTsKICAgICAgICAgIGlmICgwID09IGUpIGJyZWFrOwogICAgICAgICAgYyArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGUpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gYzsKICAgICAgfSwgR2IgPSAoYSwgYiwgYykgPT4gewogICAgICAgIGMgPz8gKGMgPSAyMTQ3NDgzNjQ3KTsKICAgICAgICBpZiAoMiA+IGMpIHJldHVybiAwOwogICAgICAgIGMgLT0gMjsKICAgICAgICB2YXIgZCA9IGI7CiAgICAgICAgYyA9IGMgPCAyICogYS5sZW5ndGggPyBjIC8gMiA6IGEubGVuZ3RoOwogICAgICAgIGZvciAodmFyIGUgPSAwOyBlIDwgYzsgKytlKSBCW2IgPj4gMV0gPSBhLmNoYXJDb2RlQXQoZSksIGIgKz0gMjsKICAgICAgICBCW2IgPj4gMV0gPSAwOwogICAgICAgIHJldHVybiBiIC0gZDsKICAgICAgfSwgSGIgPSAoYSkgPT4gMiAqIGEubGVuZ3RoLCBJYiA9IChhLCBiKSA9PiB7CiAgICAgICAgZm9yICh2YXIgYyA9IDAsIGQgPSAiIjsgIShjID49IGIgLyA0KTsgKSB7CiAgICAgICAgICB2YXIgZSA9IEVbYSArIDQgKiBjID4+IDJdOwogICAgICAgICAgaWYgKDAgPT0gZSkgYnJlYWs7CiAgICAgICAgICArK2M7CiAgICAgICAgICA2NTUzNiA8PSBlID8gKGUgLT0gNjU1MzYsIGQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZSg1NTI5NiB8IGUgPj4gMTAsIDU2MzIwIHwgZSAmIDEwMjMpKSA6IGQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShlKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGQ7CiAgICAgIH0sIEpiID0gKGEsIGIsIGMpID0+IHsKICAgICAgICBjID8/IChjID0gMjE0NzQ4MzY0Nyk7CiAgICAgICAgaWYgKDQgPiBjKSByZXR1cm4gMDsKICAgICAgICB2YXIgZCA9IGI7CiAgICAgICAgYyA9IGQgKyBjIC0gNDsKICAgICAgICBmb3IgKHZhciBlID0gMDsgZSA8IGEubGVuZ3RoOyArK2UpIHsKICAgICAgICAgIHZhciBmID0gYS5jaGFyQ29kZUF0KGUpOwogICAgICAgICAgaWYgKDU1Mjk2IDw9IGYgJiYgNTczNDMgPj0gZikgewogICAgICAgICAgICB2YXIgbCA9IGEuY2hhckNvZGVBdCgrK2UpOwogICAgICAgICAgICBmID0gNjU1MzYgKyAoKGYgJiAxMDIzKSA8PCAxMCkgfCBsICYgMTAyMzsKICAgICAgICAgIH0KICAgICAgICAgIEVbYiA+PiAyXSA9IGY7CiAgICAgICAgICBiICs9IDQ7CiAgICAgICAgICBpZiAoYiArIDQgPiBjKSBicmVhazsKICAgICAgICB9CiAgICAgICAgRVtiID4+IDJdID0gMDsKICAgICAgICByZXR1cm4gYiAtIGQ7CiAgICAgIH0sIEtiID0gKGEpID0+IHsKICAgICAgICBmb3IgKHZhciBiID0gMCwgYyA9IDA7IGMgPCBhLmxlbmd0aDsgKytjKSB7CiAgICAgICAgICB2YXIgZCA9IGEuY2hhckNvZGVBdChjKTsKICAgICAgICAgIDU1Mjk2IDw9IGQgJiYgNTczNDMgPj0gZCAmJiArK2M7CiAgICAgICAgICBiICs9IDQ7CiAgICAgICAgfQogICAgICAgIHJldHVybiBiOwogICAgICB9LCBMYiA9IFtdLCBNYiA9IChhKSA9PiB7CiAgICAgICAgdmFyIGIgPSBMYi5sZW5ndGg7CiAgICAgICAgTGIucHVzaChhKTsKICAgICAgICByZXR1cm4gYjsKICAgICAgfSwgTmIgPSAoYSwgYikgPT4gewogICAgICAgIGZvciAodmFyIGMgPSBBcnJheShhKSwgZCA9IDA7IGQgPCBhOyArK2QpIGNbZF0gPSBCYihGW2IgKyA0ICogZCA+PiAyXSwgInBhcmFtZXRlciAiICsgZCk7CiAgICAgICAgcmV0dXJuIGM7CiAgICAgIH0sIE9iID0gUmVmbGVjdC5jb25zdHJ1Y3QsIFBiID0ge30sIFJiID0gKCkgPT4gewogICAgICAgIGlmICghUWIpIHsKICAgICAgICAgIHZhciBhID0gewogICAgICAgICAgICBVU0VSOiAid2ViX3VzZXIiLAogICAgICAgICAgICBMT0dOQU1FOiAid2ViX3VzZXIiLAogICAgICAgICAgICBQQVRIOiAiLyIsCiAgICAgICAgICAgIFBXRDogIi8iLAogICAgICAgICAgICBIT01FOiAiL2hvbWUvd2ViX3VzZXIiLAogICAgICAgICAgICBMQU5HOiAoIm9iamVjdCIgPT0gdHlwZW9mIG5hdmlnYXRvciAmJiBuYXZpZ2F0b3IubGFuZ3VhZ2VzICYmIG5hdmlnYXRvci5sYW5ndWFnZXNbMF0gfHwgIkMiKS5yZXBsYWNlKAogICAgICAgICAgICAgICItIiwKICAgICAgICAgICAgICAiXyIKICAgICAgICAgICAgKSArICIuVVRGLTgiLAogICAgICAgICAgICBfOiBkYSB8fCAiLi90aGlzLnByb2dyYW0iCiAgICAgICAgICB9LCBiOwogICAgICAgICAgZm9yIChiIGluIFBiKSB2b2lkIDAgPT09IFBiW2JdID8gZGVsZXRlIGFbYl0gOiBhW2JdID0gUGJbYl07CiAgICAgICAgICB2YXIgYyA9IFtdOwogICAgICAgICAgZm9yIChiIGluIGEpIGMucHVzaChgJHtifT0ke2FbYl19YCk7CiAgICAgICAgICBRYiA9IGM7CiAgICAgICAgfQogICAgICAgIHJldHVybiBRYjsKICAgICAgfSwgUWIsIFNiID0gW251bGwsIFtdLCBbXV0sIFRiID0gKCkgPT4gewogICAgICAgIGlmICgib2JqZWN0IiA9PSB0eXBlb2YgY3J5cHRvICYmICJmdW5jdGlvbiIgPT0gdHlwZW9mIGNyeXB0by5nZXRSYW5kb21WYWx1ZXMpCiAgICAgICAgICByZXR1cm4gKGEpID0+IGNyeXB0by5nZXRSYW5kb21WYWx1ZXMoYSk7CiAgICAgICAgcmEoImluaXRSYW5kb21EZXZpY2UiKTsKICAgICAgfSwgVWIgPSAoYSkgPT4gKFViID0gVGIoKSkoYSksIFZiID0gKGEpID0+IDAgPT09IGEgJSA0ICYmICgwICE9PSBhICUgMTAwIHx8IDAgPT09IGEgJSA0MDApLCBXYiA9IFszMSwgMjksIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzEsIDMwLCAzMSwgMzAsIDMxXSwgWGIgPSBbMzEsIDI4LCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMxLCAzMCwgMzEsIDMwLCAzMV07CiAgICAgIGZ1bmN0aW9uIFliKGEpIHsKICAgICAgICB2YXIgYiA9IEFycmF5KERhKGEpICsgMSk7CiAgICAgICAgRWEoYSwgYiwgMCwgYi5sZW5ndGgpOwogICAgICAgIHJldHVybiBiOwogICAgICB9CiAgICAgIHZhciBaYiA9IChhLCBiLCBjLCBkKSA9PiB7CiAgICAgICAgZnVuY3Rpb24gZShnLCBxLCByKSB7CiAgICAgICAgICBmb3IgKGcgPSAibnVtYmVyIiA9PSB0eXBlb2YgZyA/IGcudG9TdHJpbmcoKSA6IGcgfHwgIiI7IGcubGVuZ3RoIDwgcTsgKSBnID0gclswXSArIGc7CiAgICAgICAgICByZXR1cm4gZzsKICAgICAgICB9CiAgICAgICAgZnVuY3Rpb24gZihnLCBxKSB7CiAgICAgICAgICByZXR1cm4gZShnLCBxLCAiMCIpOwogICAgICAgIH0KICAgICAgICBmdW5jdGlvbiBsKGcsIHEpIHsKICAgICAgICAgIGZ1bmN0aW9uIHIoTikgewogICAgICAgICAgICByZXR1cm4gMCA+IE4gPyAtMSA6IDAgPCBOID8gMSA6IDA7CiAgICAgICAgICB9CiAgICAgICAgICB2YXIgejsKICAgICAgICAgIDAgPT09ICh6ID0gcihnLmdldEZ1bGxZZWFyKCkgLSBxLmdldEZ1bGxZZWFyKCkpKSAmJiAwID09PSAoeiA9IHIoZy5nZXRNb250aCgpIC0gcS5nZXRNb250aCgpKSkgJiYgKHogPSByKGcuZ2V0RGF0ZSgpIC0gcS5nZXREYXRlKCkpKTsKICAgICAgICAgIHJldHVybiB6OwogICAgICAgIH0KICAgICAgICBmdW5jdGlvbiBoKGcpIHsKICAgICAgICAgIHN3aXRjaCAoZy5nZXREYXkoKSkgewogICAgICAgICAgICBjYXNlIDA6CiAgICAgICAgICAgICAgcmV0dXJuIG5ldyBEYXRlKGcuZ2V0RnVsbFllYXIoKSAtIDEsIDExLCAyOSk7CiAgICAgICAgICAgIGNhc2UgMToKICAgICAgICAgICAgICByZXR1cm4gZzsKICAgICAgICAgICAgY2FzZSAyOgogICAgICAgICAgICAgIHJldHVybiBuZXcgRGF0ZShnLmdldEZ1bGxZZWFyKCksIDAsIDMpOwogICAgICAgICAgICBjYXNlIDM6CiAgICAgICAgICAgICAgcmV0dXJuIG5ldyBEYXRlKGcuZ2V0RnVsbFllYXIoKSwgMCwgMik7CiAgICAgICAgICAgIGNhc2UgNDoKICAgICAgICAgICAgICByZXR1cm4gbmV3IERhdGUoZy5nZXRGdWxsWWVhcigpLCAwLCAxKTsKICAgICAgICAgICAgY2FzZSA1OgogICAgICAgICAgICAgIHJldHVybiBuZXcgRGF0ZShnLmdldEZ1bGxZZWFyKCkgLSAxLCAxMSwgMzEpOwogICAgICAgICAgICBjYXNlIDY6CiAgICAgICAgICAgICAgcmV0dXJuIG5ldyBEYXRlKGcuZ2V0RnVsbFllYXIoKSAtIDEsIDExLCAzMCk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGZ1bmN0aW9uIG4oZykgewogICAgICAgICAgdmFyIHEgPSBnLklhOwogICAgICAgICAgZm9yIChnID0gbmV3IERhdGUobmV3IERhdGUoZy5KYSArIDE5MDAsIDAsIDEpLmdldFRpbWUoKSk7IDAgPCBxOyApIHsKICAgICAgICAgICAgdmFyIHIgPSBnLmdldE1vbnRoKCksIHogPSAoVmIoZy5nZXRGdWxsWWVhcigpKSA/IFdiIDogWGIpW3JdOwogICAgICAgICAgICBpZiAocSA+IHogLSBnLmdldERhdGUoKSkKICAgICAgICAgICAgICBxIC09IHogLSBnLmdldERhdGUoKSArIDEsIGcuc2V0RGF0ZSgxKSwgMTEgPiByID8gZy5zZXRNb250aChyICsgMSkgOiAoZy5zZXRNb250aCgwKSwgZy5zZXRGdWxsWWVhcihnLmdldEZ1bGxZZWFyKCkgKyAxKSk7CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgIGcuc2V0RGF0ZShnLmdldERhdGUoKSArIHEpOwogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICByID0gbmV3IERhdGUoZy5nZXRGdWxsWWVhcigpICsgMSwgMCwgNCk7CiAgICAgICAgICBxID0gaChuZXcgRGF0ZShnLmdldEZ1bGxZZWFyKCksIDAsIDQpKTsKICAgICAgICAgIHIgPSBoKHIpOwogICAgICAgICAgcmV0dXJuIDAgPj0gbChxLCBnKSA/IDAgPj0gbChyLCBnKSA/IGcuZ2V0RnVsbFllYXIoKSArIDEgOiBnLmdldEZ1bGxZZWFyKCkgOiBnLmdldEZ1bGxZZWFyKCkgLSAxOwogICAgICAgIH0KICAgICAgICB2YXIgbSA9IEZbZCArIDQwID4+IDJdOwogICAgICAgIGQgPSB7CiAgICAgICAgICBzYjogRVtkID4+IDJdLAogICAgICAgICAgcmI6IEVbZCArIDQgPj4gMl0sCiAgICAgICAgICBSYTogRVtkICsgOCA+PiAyXSwKICAgICAgICAgIFZhOiBFW2QgKyAxMiA+PiAyXSwKICAgICAgICAgIFNhOiBFW2QgKyAxNiA+PiAyXSwKICAgICAgICAgIEphOiBFW2QgKyAyMCA+PiAyXSwKICAgICAgICAgIEdhOiBFW2QgKyAyNCA+PiAyXSwKICAgICAgICAgIElhOiBFW2QgKyAyOCA+PiAyXSwKICAgICAgICAgIHdiOiBFW2QgKyAzMiA+PiAyXSwKICAgICAgICAgIHFiOiBFW2QgKyAzNiA+PiAyXSwKICAgICAgICAgIHRiOiBtID8gbSA/IEooQSwgbSkgOiAiIiA6ICIiCiAgICAgICAgfTsKICAgICAgICBjID0gYyA/IEooQSwgYykgOiAiIjsKICAgICAgICBtID0gewogICAgICAgICAgIiVjIjogIiVhICViICVkICVIOiVNOiVTICVZIiwKICAgICAgICAgICIlRCI6ICIlbS8lZC8leSIsCiAgICAgICAgICAiJUYiOiAiJVktJW0tJWQiLAogICAgICAgICAgIiVoIjogIiViIiwKICAgICAgICAgICIlciI6ICIlSTolTTolUyAlcCIsCiAgICAgICAgICAiJVIiOiAiJUg6JU0iLAogICAgICAgICAgIiVUIjogIiVIOiVNOiVTIiwKICAgICAgICAgICIleCI6ICIlbS8lZC8leSIsCiAgICAgICAgICAiJVgiOiAiJUg6JU06JVMiLAogICAgICAgICAgIiVFYyI6ICIlYyIsCiAgICAgICAgICAiJUVDIjogIiVDIiwKICAgICAgICAgICIlRXgiOiAiJW0vJWQvJXkiLAogICAgICAgICAgIiVFWCI6ICIlSDolTTolUyIsCiAgICAgICAgICAiJUV5IjogIiV5IiwKICAgICAgICAgICIlRVkiOiAiJVkiLAogICAgICAgICAgIiVPZCI6ICIlZCIsCiAgICAgICAgICAiJU9lIjogIiVlIiwKICAgICAgICAgICIlT0giOiAiJUgiLAogICAgICAgICAgIiVPSSI6ICIlSSIsCiAgICAgICAgICAiJU9tIjogIiVtIiwKICAgICAgICAgICIlT00iOiAiJU0iLAogICAgICAgICAgIiVPUyI6ICIlUyIsCiAgICAgICAgICAiJU91IjogIiV1IiwKICAgICAgICAgICIlT1UiOiAiJVUiLAogICAgICAgICAgIiVPViI6ICIlViIsCiAgICAgICAgICAiJU93IjogIiV3IiwKICAgICAgICAgICIlT1ciOiAiJVciLAogICAgICAgICAgIiVPeSI6ICIleSIKICAgICAgICB9OwogICAgICAgIGZvciAodmFyIHAgaW4gbSkgYyA9IGMucmVwbGFjZShuZXcgUmVnRXhwKHAsICJnIiksIG1bcF0pOwogICAgICAgIHZhciB1ID0gIlN1bmRheSBNb25kYXkgVHVlc2RheSBXZWRuZXNkYXkgVGh1cnNkYXkgRnJpZGF5IFNhdHVyZGF5Ii5zcGxpdCgiICIpLCB2ID0gIkphbnVhcnkgRmVicnVhcnkgTWFyY2ggQXByaWwgTWF5IEp1bmUgSnVseSBBdWd1c3QgU2VwdGVtYmVyIE9jdG9iZXIgTm92ZW1iZXIgRGVjZW1iZXIiLnNwbGl0KCIgIik7CiAgICAgICAgbSA9IHsKICAgICAgICAgICIlYSI6IChnKSA9PiB1W2cuR2FdLnN1YnN0cmluZygwLCAzKSwKICAgICAgICAgICIlQSI6IChnKSA9PiB1W2cuR2FdLAogICAgICAgICAgIiViIjogKGcpID0+IHZbZy5TYV0uc3Vic3RyaW5nKDAsIDMpLAogICAgICAgICAgIiVCIjogKGcpID0+IHZbZy5TYV0sCiAgICAgICAgICAiJUMiOiAoZykgPT4gZigoZy5KYSArIDE5MDApIC8gMTAwIHwgMCwgMiksCiAgICAgICAgICAiJWQiOiAoZykgPT4gZihnLlZhLCAyKSwKICAgICAgICAgICIlZSI6IChnKSA9PiBlKGcuVmEsIDIsICIgIiksCiAgICAgICAgICAiJWciOiAoZykgPT4gbihnKS50b1N0cmluZygpLnN1YnN0cmluZygyKSwKICAgICAgICAgICIlRyI6IG4sCiAgICAgICAgICAiJUgiOiAoZykgPT4gZihnLlJhLCAyKSwKICAgICAgICAgICIlSSI6IChnKSA9PiB7CiAgICAgICAgICAgIGcgPSBnLlJhOwogICAgICAgICAgICAwID09IGcgPyBnID0gMTIgOiAxMiA8IGcgJiYgKGcgLT0gMTIpOwogICAgICAgICAgICByZXR1cm4gZihnLCAyKTsKICAgICAgICAgIH0sCiAgICAgICAgICAiJWoiOiAoZykgPT4gewogICAgICAgICAgICBmb3IgKHZhciBxID0gMCwgciA9IDA7IHIgPD0gZy5TYSAtIDE7IHEgKz0gKFZiKGcuSmEgKyAxOTAwKSA/IFdiIDogWGIpW3IrK10pIDsKICAgICAgICAgICAgcmV0dXJuIGYoZy5WYSArIHEsIDMpOwogICAgICAgICAgfSwKICAgICAgICAgICIlbSI6IChnKSA9PiBmKGcuU2EgKyAxLCAyKSwKICAgICAgICAgICIlTSI6IChnKSA9PiBmKGcucmIsIDIpLAogICAgICAgICAgIiVuIjogKCkgPT4gIlxuIiwKICAgICAgICAgICIlcCI6IChnKSA9PiAwIDw9IGcuUmEgJiYgMTIgPiBnLlJhID8gIkFNIiA6ICJQTSIsCiAgICAgICAgICAiJVMiOiAoZykgPT4gZihnLnNiLCAyKSwKICAgICAgICAgICIldCI6ICgpID0+ICIJIiwKICAgICAgICAgICIldSI6IChnKSA9PiBnLkdhIHx8IDcsCiAgICAgICAgICAiJVUiOiAoZykgPT4gZihNYXRoLmZsb29yKChnLklhICsgNyAtIGcuR2EpIC8gNyksIDIpLAogICAgICAgICAgIiVWIjogKGcpID0+IHsKICAgICAgICAgICAgdmFyIHEgPSBNYXRoLmZsb29yKChnLklhICsgNyAtIChnLkdhICsgNikgJSA3KSAvIDcpOwogICAgICAgICAgICAyID49IChnLkdhICsgMzcxIC0gZy5JYSAtIDIpICUgNyAmJiBxKys7CiAgICAgICAgICAgIGlmIChxKSA1MyA9PSBxICYmIChyID0gKGcuR2EgKyAzNzEgLSBnLklhKSAlIDcsIDQgPT0gciB8fCAzID09IHIgJiYgVmIoZy5KYSkgfHwgKHEgPSAxKSk7CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgIHEgPSA1MjsKICAgICAgICAgICAgICB2YXIgciA9IChnLkdhICsgNyAtIGcuSWEgLSAxKSAlIDc7CiAgICAgICAgICAgICAgKDQgPT0gciB8fCA1ID09IHIgJiYgVmIoZy5KYSAlIDQwMCAtIDEpKSAmJiBxKys7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuIGYocSwgMik7CiAgICAgICAgICB9LAogICAgICAgICAgIiV3IjogKGcpID0+IGcuR2EsCiAgICAgICAgICAiJVciOiAoZykgPT4gZihNYXRoLmZsb29yKChnLklhICsgNyAtIChnLkdhICsgNikgJSA3KSAvIDcpLCAyKSwKICAgICAgICAgICIleSI6IChnKSA9PiAoZy5KYSArIDE5MDApLnRvU3RyaW5nKCkuc3Vic3RyaW5nKDIpLAogICAgICAgICAgIiVZIjogKGcpID0+IGcuSmEgKyAxOTAwLAogICAgICAgICAgIiV6IjogKGcpID0+IHsKICAgICAgICAgICAgZyA9IGcucWI7CiAgICAgICAgICAgIHZhciBxID0gMCA8PSBnOwogICAgICAgICAgICBnID0gTWF0aC5hYnMoZykgLyA2MDsKICAgICAgICAgICAgcmV0dXJuIChxID8gIisiIDogIi0iKSArIFN0cmluZygiMDAwMCIgKyAoZyAvIDYwICogMTAwICsgZyAlIDYwKSkuc2xpY2UoLTQpOwogICAgICAgICAgfSwKICAgICAgICAgICIlWiI6IChnKSA9PiBnLnRiLAogICAgICAgICAgIiUlIjogKCkgPT4gIiUiCiAgICAgICAgfTsKICAgICAgICBjID0gYy5yZXBsYWNlKC8lJS9nLCAiXDBcMCIpOwogICAgICAgIGZvciAocCBpbiBtKSBjLmluY2x1ZGVzKHApICYmIChjID0gYy5yZXBsYWNlKG5ldyBSZWdFeHAocCwgImciKSwgbVtwXShkKSkpOwogICAgICAgIGMgPSBjLnJlcGxhY2UoL1wwXDAvZywgIiUiKTsKICAgICAgICBwID0gWWIoYyk7CiAgICAgICAgaWYgKHAubGVuZ3RoID4gYikgcmV0dXJuIDA7CiAgICAgICAgeS5zZXQocCwgYSk7CiAgICAgICAgcmV0dXJuIHAubGVuZ3RoIC0gMTsKICAgICAgfTsKICAgICAgSWEgPSBrLkludGVybmFsRXJyb3IgPSBjbGFzcyBleHRlbmRzIEVycm9yIHsKICAgICAgICBjb25zdHJ1Y3RvcihhKSB7CiAgICAgICAgICBzdXBlcihhKTsKICAgICAgICAgIHRoaXMubmFtZSA9ICJJbnRlcm5hbEVycm9yIjsKICAgICAgICB9CiAgICAgIH07CiAgICAgIGZvciAodmFyICRiID0gQXJyYXkoMjU2KSwgYWMgPSAwOyAyNTYgPiBhYzsgKythYykgJGJbYWNdID0gU3RyaW5nLmZyb21DaGFyQ29kZShhYyk7CiAgICAgIEphID0gJGI7CiAgICAgIFIgPSBrLkJpbmRpbmdFcnJvciA9IGNsYXNzIGV4dGVuZHMgRXJyb3IgewogICAgICAgIGNvbnN0cnVjdG9yKGEpIHsKICAgICAgICAgIHN1cGVyKGEpOwogICAgICAgICAgdGhpcy5uYW1lID0gIkJpbmRpbmdFcnJvciI7CiAgICAgICAgfQogICAgICB9OwogICAgICBPYmplY3QuYXNzaWduKFlhLnByb3RvdHlwZSwgewogICAgICAgIGlzQWxpYXNPZjogZnVuY3Rpb24oYSkgewogICAgICAgICAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFlhICYmIGEgaW5zdGFuY2VvZiBZYSkpIHJldHVybiBmYWxzZTsKICAgICAgICAgIHZhciBiID0gdGhpcy5tYS56YS54YSwgYyA9IHRoaXMubWEueWE7CiAgICAgICAgICBhLm1hID0gYS5tYTsKICAgICAgICAgIHZhciBkID0gYS5tYS56YS54YTsKICAgICAgICAgIGZvciAoYSA9IGEubWEueWE7IGIuQ2E7ICkgYyA9IGIuTmEoYyksIGIgPSBiLkNhOwogICAgICAgICAgZm9yICg7IGQuQ2E7ICkgYSA9IGQuTmEoYSksIGQgPSBkLkNhOwogICAgICAgICAgcmV0dXJuIGIgPT09IGQgJiYgYyA9PT0gYTsKICAgICAgICB9LAogICAgICAgIGNsb25lOiBmdW5jdGlvbigpIHsKICAgICAgICAgIHRoaXMubWEueWEgfHwgTGEodGhpcyk7CiAgICAgICAgICBpZiAodGhpcy5tYS5NYSkgcmV0dXJuIHRoaXMubWEuY291bnQudmFsdWUgKz0gMSwgdGhpczsKICAgICAgICAgIHZhciBhID0gV2EsIGIgPSBPYmplY3QsIGMgPSBiLmNyZWF0ZSwgZCA9IE9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKSwgZSA9IHRoaXMubWE7CiAgICAgICAgICBhID0gYSgKICAgICAgICAgICAgYy5jYWxsKGIsIGQsIHsKICAgICAgICAgICAgICBtYTogeyB2YWx1ZTogeyBjb3VudDogZS5jb3VudCwgS2E6IGUuS2EsIE1hOiBlLk1hLCB5YTogZS55YSwgemE6IGUuemEsIEFhOiBlLkFhLCBEYTogZS5EYSB9IH0KICAgICAgICAgICAgfSkKICAgICAgICAgICk7CiAgICAgICAgICBhLm1hLmNvdW50LnZhbHVlICs9IDE7CiAgICAgICAgICBhLm1hLkthID0gZmFsc2U7CiAgICAgICAgICByZXR1cm4gYTsKICAgICAgICB9LAogICAgICAgIFsiZGVsZXRlIl0oKSB7CiAgICAgICAgICB0aGlzLm1hLnlhIHx8IExhKHRoaXMpOwogICAgICAgICAgaWYgKHRoaXMubWEuS2EgJiYgIXRoaXMubWEuTWEpIHRocm93IG5ldyBSKCJPYmplY3QgYWxyZWFkeSBzY2hlZHVsZWQgZm9yIGRlbGV0aW9uIik7CiAgICAgICAgICBPYSh0aGlzKTsKICAgICAgICAgIHZhciBhID0gdGhpcy5tYTsKICAgICAgICAgIC0tYS5jb3VudC52YWx1ZTsKICAgICAgICAgIDAgPT09IGEuY291bnQudmFsdWUgJiYgKGEuQWEgPyBhLkRhLkZhKGEuQWEpIDogYS56YS54YS5GYShhLnlhKSk7CiAgICAgICAgICB0aGlzLm1hLk1hIHx8ICh0aGlzLm1hLkFhID0gdm9pZCAwLCB0aGlzLm1hLnlhID0gdm9pZCAwKTsKICAgICAgICB9LAogICAgICAgIGlzRGVsZXRlZDogZnVuY3Rpb24oKSB7CiAgICAgICAgICByZXR1cm4gIXRoaXMubWEueWE7CiAgICAgICAgfSwKICAgICAgICBkZWxldGVMYXRlcjogZnVuY3Rpb24oKSB7CiAgICAgICAgICB0aGlzLm1hLnlhIHx8IExhKHRoaXMpOwogICAgICAgICAgaWYgKHRoaXMubWEuS2EgJiYgIXRoaXMubWEuTWEpIHRocm93IG5ldyBSKCJPYmplY3QgYWxyZWFkeSBzY2hlZHVsZWQgZm9yIGRlbGV0aW9uIik7CiAgICAgICAgICBSYS5wdXNoKHRoaXMpOwogICAgICAgICAgMSA9PT0gUmEubGVuZ3RoICYmIFRhICYmIFRhKFNhKTsKICAgICAgICAgIHRoaXMubWEuS2EgPSB0cnVlOwogICAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgICAgfQogICAgICB9KTsKICAgICAgay5nZXRJbmhlcml0ZWRJbnN0YW5jZUNvdW50ID0gKCkgPT4gT2JqZWN0LmtleXMoVWEpLmxlbmd0aDsKICAgICAgay5nZXRMaXZlSW5oZXJpdGVkSW5zdGFuY2VzID0gKCkgPT4gewogICAgICAgIHZhciBhID0gW10sIGI7CiAgICAgICAgZm9yIChiIGluIFVhKSBVYS5oYXNPd25Qcm9wZXJ0eShiKSAmJiBhLnB1c2goVWFbYl0pOwogICAgICAgIHJldHVybiBhOwogICAgICB9OwogICAgICBrLmZsdXNoUGVuZGluZ0RlbGV0ZXMgPSBTYTsKICAgICAgay5zZXREZWxheUZ1bmN0aW9uID0gKGEpID0+IHsKICAgICAgICBUYSA9IGE7CiAgICAgICAgUmEubGVuZ3RoICYmIFRhICYmIFRhKFNhKTsKICAgICAgfTsKICAgICAgT2JqZWN0LmFzc2lnbihqYi5wcm90b3R5cGUsIHsKICAgICAgICBlYihhKSB7CiAgICAgICAgICB0aGlzLlphICYmIChhID0gdGhpcy5aYShhKSk7CiAgICAgICAgICByZXR1cm4gYTsKICAgICAgICB9LAogICAgICAgIFhhKGEpIHsKICAgICAgICAgIHRoaXMuRmE/LihhKTsKICAgICAgICB9LAogICAgICAgIGFyZ1BhY2tBZHZhbmNlOiA4LAogICAgICAgIHJlYWRWYWx1ZUZyb21Qb2ludGVyOiBLLAogICAgICAgIGZyb21XaXJlVHlwZTogZnVuY3Rpb24oYSkgewogICAgICAgICAgZnVuY3Rpb24gYigpIHsKICAgICAgICAgICAgcmV0dXJuIHRoaXMuUWEgPyBYYSh0aGlzLnhhLkxhLCB7IHphOiB0aGlzLmpiLCB5YTogYywgRGE6IHRoaXMsIEFhOiBhIH0pIDogWGEodGhpcy54YS5MYSwgeyB6YTogdGhpcywgeWE6IGEgfSk7CiAgICAgICAgICB9CiAgICAgICAgICB2YXIgYyA9IHRoaXMuZWIoYSk7CiAgICAgICAgICBpZiAoIWMpIHJldHVybiB0aGlzLlhhKGEpLCBudWxsOwogICAgICAgICAgdmFyIGQgPSBWYSh0aGlzLnhhLCBjKTsKICAgICAgICAgIGlmICh2b2lkIDAgIT09IGQpIHsKICAgICAgICAgICAgaWYgKDAgPT09IGQubWEuY291bnQudmFsdWUpIHJldHVybiBkLm1hLnlhID0gYywgZC5tYS5BYSA9IGEsIGQuY2xvbmUoKTsKICAgICAgICAgICAgZCA9IGQuY2xvbmUoKTsKICAgICAgICAgICAgdGhpcy5YYShhKTsKICAgICAgICAgICAgcmV0dXJuIGQ7CiAgICAgICAgICB9CiAgICAgICAgICBkID0gdGhpcy54YS5jYihjKTsKICAgICAgICAgIGQgPSBRYVtkXTsKICAgICAgICAgIGlmICghZCkgcmV0dXJuIGIuY2FsbCh0aGlzKTsKICAgICAgICAgIGQgPSB0aGlzLlBhID8gZC4kYSA6IGQucG9pbnRlclR5cGU7CiAgICAgICAgICB2YXIgZSA9IFBhKGMsIHRoaXMueGEsIGQueGEpOwogICAgICAgICAgcmV0dXJuIG51bGwgPT09IGUgPyBiLmNhbGwodGhpcykgOiB0aGlzLlFhID8gWGEoZC54YS5MYSwgeyB6YTogZCwgeWE6IGUsIERhOiB0aGlzLCBBYTogYSB9KSA6IFhhKGQueGEuTGEsIHsgemE6IGQsIHlhOiBlIH0pOwogICAgICAgIH0KICAgICAgfSk7CiAgICAgIG5iID0gay5VbmJvdW5kVHlwZUVycm9yID0gKChhLCBiKSA9PiB7CiAgICAgICAgdmFyIGMgPSBaYShiLCBmdW5jdGlvbihkKSB7CiAgICAgICAgICB0aGlzLm5hbWUgPSBiOwogICAgICAgICAgdGhpcy5tZXNzYWdlID0gZDsKICAgICAgICAgIGQgPSBFcnJvcihkKS5zdGFjazsKICAgICAgICAgIHZvaWQgMCAhPT0gZCAmJiAodGhpcy5zdGFjayA9IHRoaXMudG9TdHJpbmcoKSArICJcbiIgKyBkLnJlcGxhY2UoL15FcnJvcig6W15cbl0qKT9cbi8sICIiKSk7CiAgICAgICAgfSk7CiAgICAgICAgYy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGEucHJvdG90eXBlKTsKICAgICAgICBjLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IGM7CiAgICAgICAgYy5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbigpIHsKICAgICAgICAgIHJldHVybiB2b2lkIDAgPT09IHRoaXMubWVzc2FnZSA/IHRoaXMubmFtZSA6IGAke3RoaXMubmFtZX06ICR7dGhpcy5tZXNzYWdlfWA7CiAgICAgICAgfTsKICAgICAgICByZXR1cm4gYzsKICAgICAgfSkoRXJyb3IsICJVbmJvdW5kVHlwZUVycm9yIik7CiAgICAgIFYucHVzaCgwLCAxLCB2b2lkIDAsIDEsIG51bGwsIDEsIHRydWUsIDEsIGZhbHNlLCAxKTsKICAgICAgay5jb3VudF9lbXZhbF9oYW5kbGVzID0gKCkgPT4gVi5sZW5ndGggLyAyIC0gNSAtIHZiLmxlbmd0aDsKICAgICAgdmFyIG1jID0gewogICAgICAgIGM6IChhLCBiLCBjLCBkKSA9PiB7CiAgICAgICAgICByYSgKICAgICAgICAgICAgYEFzc2VydGlvbiBmYWlsZWQ6ICR7YSA/IEooQSwgYSkgOiAiIn0sIGF0OiBgICsgW2IgPyBiID8gSihBLCBiKSA6ICIiIDogInVua25vd24gZmlsZW5hbWUiLCBjLCBkID8gZCA/IEooQSwgZCkgOiAiIiA6ICJ1bmtub3duIGZ1bmN0aW9uIl0KICAgICAgICAgICk7CiAgICAgICAgfSwKICAgICAgICBtOiAoYSwgYiwgYykgPT4gewogICAgICAgICAgdmFyIGQgPSBuZXcgQWEoYSk7CiAgICAgICAgICBGW2QueWEgKyAxNiA+PiAyXSA9IDA7CiAgICAgICAgICBGW2QueWEgKyA0ID4+IDJdID0gYjsKICAgICAgICAgIEZbZC55YSArIDggPj4gMl0gPSBjOwogICAgICAgICAgQmEgPSBhOwogICAgICAgICAgQ2ErKzsKICAgICAgICAgIHRocm93IEJhOwogICAgICAgIH0sCiAgICAgICAgQjogZnVuY3Rpb24oKSB7CiAgICAgICAgICByZXR1cm4gMDsKICAgICAgICB9LAogICAgICAgIFA6ICgpID0+IHsKICAgICAgICB9LAogICAgICAgIE06ICgpID0+IHsKICAgICAgICB9LAogICAgICAgIFI6IGZ1bmN0aW9uKCkgewogICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgfSwKICAgICAgICBOOiAoKSA9PiB7CiAgICAgICAgfSwKICAgICAgICBBOiBmdW5jdGlvbigpIHsKICAgICAgICB9LAogICAgICAgIE86ICgpID0+IHsKICAgICAgICB9LAogICAgICAgIHY6IChhKSA9PiB7CiAgICAgICAgICB2YXIgYiA9IEZhW2FdOwogICAgICAgICAgZGVsZXRlIEZhW2FdOwogICAgICAgICAgdmFyIGMgPSBiLlVhLCBkID0gYi5GYSwgZSA9IGIuWWEsIGYgPSBlLm1hcCgobCkgPT4gbC5oYikuY29uY2F0KGUubWFwKChsKSA9PiBsLm5iKSk7CiAgICAgICAgICBQKFthXSwgZiwgKGwpID0+IHsKICAgICAgICAgICAgdmFyIGggPSB7fTsKICAgICAgICAgICAgZS5mb3JFYWNoKChuLCBtKSA9PiB7CiAgICAgICAgICAgICAgdmFyIHAgPSBsW21dLCB1ID0gbi5mYiwgdiA9IG4uZ2IsIGcgPSBsW20gKyBlLmxlbmd0aF0sIHEgPSBuLm1iLCByID0gbi5vYjsKICAgICAgICAgICAgICBoW24uYmJdID0gewogICAgICAgICAgICAgICAgcmVhZDogKHopID0+IHAuZnJvbVdpcmVUeXBlKHUodiwgeikpLAogICAgICAgICAgICAgICAgd3JpdGU6ICh6LCBOKSA9PiB7CiAgICAgICAgICAgICAgICAgIHZhciBEID0gW107CiAgICAgICAgICAgICAgICAgIHEociwgeiwgZy50b1dpcmVUeXBlKEQsIE4pKTsKICAgICAgICAgICAgICAgICAgR2EoRCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIHJldHVybiBbCiAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgbmFtZTogYi5uYW1lLAogICAgICAgICAgICAgICAgZnJvbVdpcmVUeXBlOiAobikgPT4gewogICAgICAgICAgICAgICAgICB2YXIgbSA9IHt9LCBwOwogICAgICAgICAgICAgICAgICBmb3IgKHAgaW4gaCkgbVtwXSA9IGhbcF0ucmVhZChuKTsKICAgICAgICAgICAgICAgICAgZChuKTsKICAgICAgICAgICAgICAgICAgcmV0dXJuIG07CiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgdG9XaXJlVHlwZTogKG4sIG0pID0+IHsKICAgICAgICAgICAgICAgICAgZm9yICh2YXIgcCBpbiBoKSBpZiAoIShwIGluIG0pKSB0aHJvdyBuZXcgVHlwZUVycm9yKGBNaXNzaW5nIGZpZWxkOiAiJHtwfSJgKTsKICAgICAgICAgICAgICAgICAgdmFyIHUgPSBjKCk7CiAgICAgICAgICAgICAgICAgIGZvciAocCBpbiBoKSBoW3BdLndyaXRlKHUsIG1bcF0pOwogICAgICAgICAgICAgICAgICBudWxsICE9PSBuICYmIG4ucHVzaChkLCB1KTsKICAgICAgICAgICAgICAgICAgcmV0dXJuIHU7CiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgYXJnUGFja0FkdmFuY2U6IDgsCiAgICAgICAgICAgICAgICByZWFkVmFsdWVGcm9tUG9pbnRlcjogSywKICAgICAgICAgICAgICAgIEVhOiBkCiAgICAgICAgICAgICAgfQogICAgICAgICAgICBdOwogICAgICAgICAgfSk7CiAgICAgICAgfSwKICAgICAgICBJOiAoKSA9PiB7CiAgICAgICAgfSwKICAgICAgICBZOiAoYSwgYiwgYywgZCkgPT4gewogICAgICAgICAgYiA9IFEoYik7CiAgICAgICAgICBPKGEsIHsKICAgICAgICAgICAgbmFtZTogYiwKICAgICAgICAgICAgZnJvbVdpcmVUeXBlOiBmdW5jdGlvbihlKSB7CiAgICAgICAgICAgICAgcmV0dXJuICEhZTsKICAgICAgICAgICAgfSwKICAgICAgICAgICAgdG9XaXJlVHlwZTogZnVuY3Rpb24oZSwgZikgewogICAgICAgICAgICAgIHJldHVybiBmID8gYyA6IGQ7CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIGFyZ1BhY2tBZHZhbmNlOiA4LAogICAgICAgICAgICByZWFkVmFsdWVGcm9tUG9pbnRlcjogZnVuY3Rpb24oZSkgewogICAgICAgICAgICAgIHJldHVybiB0aGlzLmZyb21XaXJlVHlwZShBW2VdKTsKICAgICAgICAgICAgfSwKICAgICAgICAgICAgRWE6IG51bGwKICAgICAgICAgIH0pOwogICAgICAgIH0sCiAgICAgICAgcjogKGEsIGIsIGMsIGQsIGUsIGYsIGwsIGgsIG4sIG0sIHAsIHUsIHYpID0+IHsKICAgICAgICAgIHAgPSBRKHApOwogICAgICAgICAgZiA9IFQoZSwgZik7CiAgICAgICAgICBoICYmIChoID0gVChsLCBoKSk7CiAgICAgICAgICBtICYmIChtID0gVChuLCBtKSk7CiAgICAgICAgICB2ID0gVCh1LCB2KTsKICAgICAgICAgIHZhciBnID0gYmIocCk7CiAgICAgICAgICBhYihnLCBmdW5jdGlvbigpIHsKICAgICAgICAgICAgcWIoYENhbm5vdCBjb25zdHJ1Y3QgJHtwfSBkdWUgdG8gdW5ib3VuZCB0eXBlc2AsIFtkXSk7CiAgICAgICAgICB9KTsKICAgICAgICAgIFAoW2EsIGIsIGNdLCBkID8gW2RdIDogW10sIChxKSA9PiB7CiAgICAgICAgICAgIHEgPSBxWzBdOwogICAgICAgICAgICBpZiAoZCkgewogICAgICAgICAgICAgIHZhciByID0gcS54YTsKICAgICAgICAgICAgICB2YXIgeiA9IHIuTGE7CiAgICAgICAgICAgIH0gZWxzZSB6ID0gWWEucHJvdG90eXBlOwogICAgICAgICAgICBxID0gWmEocCwgZnVuY3Rpb24oLi4uTmEpIHsKICAgICAgICAgICAgICBpZiAoT2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpICE9PSBOKSB0aHJvdyBuZXcgUigiVXNlICduZXcnIHRvIGNvbnN0cnVjdCAiICsgcCk7CiAgICAgICAgICAgICAgaWYgKHZvaWQgMCA9PT0gRC5IYSkgdGhyb3cgbmV3IFIocCArICIgaGFzIG5vIGFjY2Vzc2libGUgY29uc3RydWN0b3IiKTsKICAgICAgICAgICAgICB2YXIgeGIgPSBELkhhW05hLmxlbmd0aF07CiAgICAgICAgICAgICAgaWYgKHZvaWQgMCA9PT0geGIpCiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUigKICAgICAgICAgICAgICAgICAgYFRyaWVkIHRvIGludm9rZSBjdG9yIG9mICR7cH0gd2l0aCBpbnZhbGlkIG51bWJlciBvZiBwYXJhbWV0ZXJzICgke05hLmxlbmd0aH0pIC0gZXhwZWN0ZWQgKCR7T2JqZWN0LmtleXMoRC5IYSkudG9TdHJpbmcoKX0pIHBhcmFtZXRlcnMgaW5zdGVhZCFgCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgIHJldHVybiB4Yi5hcHBseSh0aGlzLCBOYSk7CiAgICAgICAgICAgIH0pOwogICAgICAgICAgICB2YXIgTiA9IE9iamVjdC5jcmVhdGUoeiwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogcSB9IH0pOwogICAgICAgICAgICBxLnByb3RvdHlwZSA9IE47CiAgICAgICAgICAgIHZhciBEID0gbmV3IGNiKHAsIHEsIE4sIHYsIHIsIGYsIGgsIG0pOwogICAgICAgICAgICBpZiAoRC5DYSkgewogICAgICAgICAgICAgIHZhciBpYTsKICAgICAgICAgICAgICAoaWEgPSBELkNhKS5XYSA/PyAoaWEuV2EgPSBbXSk7CiAgICAgICAgICAgICAgRC5DYS5XYS5wdXNoKEQpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHIgPSBuZXcgamIocCwgRCwgdHJ1ZSwgZmFsc2UsIGZhbHNlKTsKICAgICAgICAgICAgaWEgPSBuZXcgamIocCArICIqIiwgRCwgZmFsc2UsIGZhbHNlLCBmYWxzZSk7CiAgICAgICAgICAgIHogPSBuZXcgamIocCArICIgY29uc3QqIiwgRCwgZmFsc2UsIHRydWUsIGZhbHNlKTsKICAgICAgICAgICAgUWFbYV0gPSB7IHBvaW50ZXJUeXBlOiBpYSwgJGE6IHogfTsKICAgICAgICAgICAga2IoZywgcSk7CiAgICAgICAgICAgIHJldHVybiBbciwgaWEsIHpdOwogICAgICAgICAgfSk7CiAgICAgICAgfSwKICAgICAgICBxOiAoYSwgYiwgYywgZCwgZSwgZikgPT4gewogICAgICAgICAgdmFyIGwgPSByYihiLCBjKTsKICAgICAgICAgIGUgPSBUKGQsIGUpOwogICAgICAgICAgUChbXSwgW2FdLCAoaCkgPT4gewogICAgICAgICAgICBoID0gaFswXTsKICAgICAgICAgICAgdmFyIG4gPSBgY29uc3RydWN0b3IgJHtoLm5hbWV9YDsKICAgICAgICAgICAgdm9pZCAwID09PSBoLnhhLkhhICYmIChoLnhhLkhhID0gW10pOwogICAgICAgICAgICBpZiAodm9pZCAwICE9PSBoLnhhLkhhW2IgLSAxXSkKICAgICAgICAgICAgICB0aHJvdyBuZXcgUigKICAgICAgICAgICAgICAgIGBDYW5ub3QgcmVnaXN0ZXIgbXVsdGlwbGUgY29uc3RydWN0b3JzIHdpdGggaWRlbnRpY2FsIG51bWJlciBvZiBwYXJhbWV0ZXJzICgke2IgLSAxfSkgZm9yIGNsYXNzICcke2gubmFtZX0nISBPdmVybG9hZCByZXNvbHV0aW9uIGlzIGN1cnJlbnRseSBvbmx5IHBlcmZvcm1lZCB1c2luZyB0aGUgcGFyYW1ldGVyIGNvdW50LCBub3QgYWN0dWFsIHR5cGUgaW5mbyFgCiAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgaC54YS5IYVtiIC0gMV0gPSAoKSA9PiB7CiAgICAgICAgICAgICAgcWIoYENhbm5vdCBjb25zdHJ1Y3QgJHtoLm5hbWV9IGR1ZSB0byB1bmJvdW5kIHR5cGVzYCwgbCk7CiAgICAgICAgICAgIH07CiAgICAgICAgICAgIFAoW10sIGwsIChtKSA9PiB7CiAgICAgICAgICAgICAgbS5zcGxpY2UoMSwgMCwgbnVsbCk7CiAgICAgICAgICAgICAgaC54YS5IYVtiIC0gMV0gPSB0YihuLCBtLCBudWxsLCBlLCBmKTsKICAgICAgICAgICAgICByZXR1cm4gW107CiAgICAgICAgICAgIH0pOwogICAgICAgICAgICByZXR1cm4gW107CiAgICAgICAgICB9KTsKICAgICAgICB9LAogICAgICAgIGY6IChhLCBiLCBjLCBkLCBlLCBmLCBsLCBoKSA9PiB7CiAgICAgICAgICB2YXIgbiA9IHJiKGMsIGQpOwogICAgICAgICAgYiA9IFEoYik7CiAgICAgICAgICBiID0gdWIoYik7CiAgICAgICAgICBmID0gVChlLCBmKTsKICAgICAgICAgIFAoW10sIFthXSwgKG0pID0+IHsKICAgICAgICAgICAgZnVuY3Rpb24gcCgpIHsKICAgICAgICAgICAgICBxYihgQ2Fubm90IGNhbGwgJHt1fSBkdWUgdG8gdW5ib3VuZCB0eXBlc2AsIG4pOwogICAgICAgICAgICB9CiAgICAgICAgICAgIG0gPSBtWzBdOwogICAgICAgICAgICB2YXIgdSA9IGAke20ubmFtZX0uJHtifWA7CiAgICAgICAgICAgIGIuc3RhcnRzV2l0aCgiQEAiKSAmJiAoYiA9IFN5bWJvbFtiLnN1YnN0cmluZygyKV0pOwogICAgICAgICAgICBoICYmIG0ueGEua2IucHVzaChiKTsKICAgICAgICAgICAgdmFyIHYgPSBtLnhhLkxhLCBnID0gdltiXTsKICAgICAgICAgICAgdm9pZCAwID09PSBnIHx8IHZvaWQgMCA9PT0gZy5CYSAmJiBnLmNsYXNzTmFtZSAhPT0gbS5uYW1lICYmIGcuT2EgPT09IGMgLSAyID8gKHAuT2EgPSBjIC0gMiwgcC5jbGFzc05hbWUgPSBtLm5hbWUsIHZbYl0gPSBwKSA6ICgkYSh2LCBiLCB1KSwgdltiXS5CYVtjIC0gMl0gPSBwKTsKICAgICAgICAgICAgUChbXSwgbiwgKHEpID0+IHsKICAgICAgICAgICAgICBxID0gdGIodSwgcSwgbSwgZiwgbCk7CiAgICAgICAgICAgICAgdm9pZCAwID09PSB2W2JdLkJhID8gKHEuT2EgPSBjIC0gMiwgdltiXSA9IHEpIDogdltiXS5CYVtjIC0gMl0gPSBxOwogICAgICAgICAgICAgIHJldHVybiBbXTsKICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIHJldHVybiBbXTsKICAgICAgICAgIH0pOwogICAgICAgIH0sCiAgICAgICAgWDogKGEpID0+IE8oYSwgemIpLAogICAgICAgIHg6IChhLCBiLCBjLCBkKSA9PiB7CiAgICAgICAgICBmdW5jdGlvbiBlKCkgewogICAgICAgICAgfQogICAgICAgICAgYiA9IFEoYik7CiAgICAgICAgICBlLnZhbHVlcyA9IHt9OwogICAgICAgICAgTyhhLCB7CiAgICAgICAgICAgIG5hbWU6IGIsCiAgICAgICAgICAgIGNvbnN0cnVjdG9yOiBlLAogICAgICAgICAgICBmcm9tV2lyZVR5cGU6IGZ1bmN0aW9uKGYpIHsKICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jb25zdHJ1Y3Rvci52YWx1ZXNbZl07CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHRvV2lyZVR5cGU6IChmLCBsKSA9PiBsLnZhbHVlLAogICAgICAgICAgICBhcmdQYWNrQWR2YW5jZTogOCwKICAgICAgICAgICAgcmVhZFZhbHVlRnJvbVBvaW50ZXI6IEFiKGIsIGMsIGQpLAogICAgICAgICAgICBFYTogbnVsbAogICAgICAgICAgfSk7CiAgICAgICAgICBhYihiLCBlKTsKICAgICAgICB9LAogICAgICAgIGs6IChhLCBiLCBjKSA9PiB7CiAgICAgICAgICB2YXIgZCA9IEJiKGEsICJlbnVtIik7CiAgICAgICAgICBiID0gUShiKTsKICAgICAgICAgIGEgPSBkLmNvbnN0cnVjdG9yOwogICAgICAgICAgZCA9IE9iamVjdC5jcmVhdGUoZC5jb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHsKICAgICAgICAgICAgdmFsdWU6IHsgdmFsdWU6IGMgfSwKICAgICAgICAgICAgY29uc3RydWN0b3I6IHsgdmFsdWU6IFphKGAke2QubmFtZX1fJHtifWAsIGZ1bmN0aW9uKCkgewogICAgICAgICAgICB9KSB9CiAgICAgICAgICB9KTsKICAgICAgICAgIGEudmFsdWVzW2NdID0gZDsKICAgICAgICAgIGFbYl0gPSBkOwogICAgICAgIH0sCiAgICAgICAgQzogKGEsIGIsIGMpID0+IHsKICAgICAgICAgIGIgPSBRKGIpOwogICAgICAgICAgTyhhLCB7CiAgICAgICAgICAgIG5hbWU6IGIsCiAgICAgICAgICAgIGZyb21XaXJlVHlwZTogKGQpID0+IGQsCiAgICAgICAgICAgIHRvV2lyZVR5cGU6IChkLCBlKSA9PiBlLAogICAgICAgICAgICBhcmdQYWNrQWR2YW5jZTogOCwKICAgICAgICAgICAgcmVhZFZhbHVlRnJvbVBvaW50ZXI6IENiKGIsIGMpLAogICAgICAgICAgICBFYTogbnVsbAogICAgICAgICAgfSk7CiAgICAgICAgfSwKICAgICAgICBFOiAoYSwgYiwgYywgZCwgZSwgZikgPT4gewogICAgICAgICAgdmFyIGwgPSByYihiLCBjKTsKICAgICAgICAgIGEgPSBRKGEpOwogICAgICAgICAgYSA9IHViKGEpOwogICAgICAgICAgZSA9IFQoZCwgZSk7CiAgICAgICAgICBhYigKICAgICAgICAgICAgYSwKICAgICAgICAgICAgZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgcWIoYENhbm5vdCBjYWxsICR7YX0gZHVlIHRvIHVuYm91bmQgdHlwZXNgLCBsKTsKICAgICAgICAgICAgfSwKICAgICAgICAgICAgYiAtIDEKICAgICAgICAgICk7CiAgICAgICAgICBQKFtdLCBsLCAoaCkgPT4gewogICAgICAgICAgICBrYihhLCB0YihhLCBbaFswXSwgbnVsbF0uY29uY2F0KGguc2xpY2UoMSkpLCBudWxsLCBlLCBmKSwgYiAtIDEpOwogICAgICAgICAgICByZXR1cm4gW107CiAgICAgICAgICB9KTsKICAgICAgICB9LAogICAgICAgIGw6IChhLCBiLCBjLCBkLCBlKSA9PiB7CiAgICAgICAgICBiID0gUShiKTsKICAgICAgICAgIC0xID09PSBlICYmIChlID0gNDI5NDk2NzI5NSk7CiAgICAgICAgICBlID0gKGgpID0+IGg7CiAgICAgICAgICBpZiAoMCA9PT0gZCkgewogICAgICAgICAgICB2YXIgZiA9IDMyIC0gOCAqIGM7CiAgICAgICAgICAgIGUgPSAoaCkgPT4gaCA8PCBmID4+PiBmOwogICAgICAgICAgfQogICAgICAgICAgdmFyIGwgPSBiLmluY2x1ZGVzKCJ1bnNpZ25lZCIpID8gZnVuY3Rpb24oaCwgbikgewogICAgICAgICAgICByZXR1cm4gbiA+Pj4gMDsKICAgICAgICAgIH0gOiBmdW5jdGlvbihoLCBuKSB7CiAgICAgICAgICAgIHJldHVybiBuOwogICAgICAgICAgfTsKICAgICAgICAgIE8oYSwgewogICAgICAgICAgICBuYW1lOiBiLAogICAgICAgICAgICBmcm9tV2lyZVR5cGU6IGUsCiAgICAgICAgICAgIHRvV2lyZVR5cGU6IGwsCiAgICAgICAgICAgIGFyZ1BhY2tBZHZhbmNlOiA4LAogICAgICAgICAgICByZWFkVmFsdWVGcm9tUG9pbnRlcjogRGIoYiwgYywgMCAhPT0gZCksCiAgICAgICAgICAgIEVhOiBudWxsCiAgICAgICAgICB9KTsKICAgICAgICB9LAogICAgICAgIGc6IChhLCBiLCBjKSA9PiB7CiAgICAgICAgICBmdW5jdGlvbiBkKGYpIHsKICAgICAgICAgICAgcmV0dXJuIG5ldyBlKHkuYnVmZmVyLCBGW2YgKyA0ID4+IDJdLCBGW2YgPj4gMl0pOwogICAgICAgICAgfQogICAgICAgICAgdmFyIGUgPSBbSW50OEFycmF5LCBVaW50OEFycmF5LCBJbnQxNkFycmF5LCBVaW50MTZBcnJheSwgSW50MzJBcnJheSwgVWludDMyQXJyYXksIEZsb2F0MzJBcnJheSwgRmxvYXQ2NEFycmF5XVtiXTsKICAgICAgICAgIGMgPSBRKGMpOwogICAgICAgICAgTyhhLCB7IG5hbWU6IGMsIGZyb21XaXJlVHlwZTogZCwgYXJnUGFja0FkdmFuY2U6IDgsIHJlYWRWYWx1ZUZyb21Qb2ludGVyOiBkIH0sIHsgaWI6IHRydWUgfSk7CiAgICAgICAgfSwKICAgICAgICB3OiAoYSkgPT4gewogICAgICAgICAgTyhhLCB6Yik7CiAgICAgICAgfSwKICAgICAgICBjYTogKGEsIGIsIGMsIGQsIGUsIGYsIGwsIGgsIG4sIG0sIHAsIHUpID0+IHsKICAgICAgICAgIGMgPSBRKGMpOwogICAgICAgICAgZiA9IFQoZSwgZik7CiAgICAgICAgICBoID0gVChsLCBoKTsKICAgICAgICAgIG0gPSBUKG4sIG0pOwogICAgICAgICAgdSA9IFQocCwgdSk7CiAgICAgICAgICBQKFthXSwgW2JdLCAodikgPT4gewogICAgICAgICAgICB2ID0gdlswXTsKICAgICAgICAgICAgcmV0dXJuIFtuZXcgamIoYywgdi54YSwgZmFsc2UsIGZhbHNlLCB0cnVlLCB2LCBkLCBmLCBoLCBtLCB1KV07CiAgICAgICAgICB9KTsKICAgICAgICB9LAogICAgICAgIEQ6IChhLCBiKSA9PiB7CiAgICAgICAgICBiID0gUShiKTsKICAgICAgICAgIHZhciBjID0gInN0ZDo6c3RyaW5nIiA9PT0gYjsKICAgICAgICAgIE8oYSwgewogICAgICAgICAgICBuYW1lOiBiLAogICAgICAgICAgICBmcm9tV2lyZVR5cGU6IGZ1bmN0aW9uKGQpIHsKICAgICAgICAgICAgICB2YXIgZSA9IEZbZCA+PiAyXSwgZiA9IGQgKyA0OwogICAgICAgICAgICAgIGlmIChjKQogICAgICAgICAgICAgICAgZm9yICh2YXIgbCA9IGYsIGggPSAwOyBoIDw9IGU7ICsraCkgewogICAgICAgICAgICAgICAgICB2YXIgbiA9IGYgKyBoOwogICAgICAgICAgICAgICAgICBpZiAoaCA9PSBlIHx8IDAgPT0gQVtuXSkgewogICAgICAgICAgICAgICAgICAgIGwgPSBsID8gSihBLCBsLCBuIC0gbCkgOiAiIjsKICAgICAgICAgICAgICAgICAgICBpZiAodm9pZCAwID09PSBtKSB2YXIgbSA9IGw7CiAgICAgICAgICAgICAgICAgICAgZWxzZSBtICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoMCksIG0gKz0gbDsKICAgICAgICAgICAgICAgICAgICBsID0gbiArIDE7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgIG0gPSBBcnJheShlKTsKICAgICAgICAgICAgICAgIGZvciAoaCA9IDA7IGggPCBlOyArK2gpIG1baF0gPSBTdHJpbmcuZnJvbUNoYXJDb2RlKEFbZiArIGhdKTsKICAgICAgICAgICAgICAgIG0gPSBtLmpvaW4oIiIpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBVKGQpOwogICAgICAgICAgICAgIHJldHVybiBtOwogICAgICAgICAgICB9LAogICAgICAgICAgICB0b1dpcmVUeXBlOiBmdW5jdGlvbihkLCBlKSB7CiAgICAgICAgICAgICAgZSBpbnN0YW5jZW9mIEFycmF5QnVmZmVyICYmIChlID0gbmV3IFVpbnQ4QXJyYXkoZSkpOwogICAgICAgICAgICAgIHZhciBmID0gInN0cmluZyIgPT0gdHlwZW9mIGU7CiAgICAgICAgICAgICAgaWYgKCEoZiB8fCBlIGluc3RhbmNlb2YgVWludDhBcnJheSB8fCBlIGluc3RhbmNlb2YgVWludDhDbGFtcGVkQXJyYXkgfHwgZSBpbnN0YW5jZW9mIEludDhBcnJheSkpCiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUigiQ2Fubm90IHBhc3Mgbm9uLXN0cmluZyB0byBzdGQ6OnN0cmluZyIpOwogICAgICAgICAgICAgIHZhciBsID0gYyAmJiBmID8gRGEoZSkgOiBlLmxlbmd0aDsKICAgICAgICAgICAgICB2YXIgaCA9IGJjKDQgKyBsICsgMSksIG4gPSBoICsgNDsKICAgICAgICAgICAgICBGW2ggPj4gMl0gPSBsOwogICAgICAgICAgICAgIGlmIChjICYmIGYpIEVhKGUsIEEsIG4sIGwgKyAxKTsKICAgICAgICAgICAgICBlbHNlIGlmIChmKQogICAgICAgICAgICAgICAgZm9yIChmID0gMDsgZiA8IGw7ICsrZikgewogICAgICAgICAgICAgICAgICB2YXIgbSA9IGUuY2hhckNvZGVBdChmKTsKICAgICAgICAgICAgICAgICAgaWYgKDI1NSA8IG0pIHRocm93IFUobiksIG5ldyBSKCJTdHJpbmcgaGFzIFVURi0xNiBjb2RlIHVuaXRzIHRoYXQgZG8gbm90IGZpdCBpbiA4IGJpdHMiKTsKICAgICAgICAgICAgICAgICAgQVtuICsgZl0gPSBtOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGVsc2UgZm9yIChmID0gMDsgZiA8IGw7ICsrZikgQVtuICsgZl0gPSBlW2ZdOwogICAgICAgICAgICAgIG51bGwgIT09IGQgJiYgZC5wdXNoKFUsIGgpOwogICAgICAgICAgICAgIHJldHVybiBoOwogICAgICAgICAgICB9LAogICAgICAgICAgICBhcmdQYWNrQWR2YW5jZTogOCwKICAgICAgICAgICAgcmVhZFZhbHVlRnJvbVBvaW50ZXI6IEssCiAgICAgICAgICAgIEVhKGQpIHsKICAgICAgICAgICAgICBVKGQpOwogICAgICAgICAgICB9CiAgICAgICAgICB9KTsKICAgICAgICB9LAogICAgICAgIHU6IChhLCBiLCBjKSA9PiB7CiAgICAgICAgICBjID0gUShjKTsKICAgICAgICAgIGlmICgyID09PSBiKSB7CiAgICAgICAgICAgIHZhciBkID0gRmI7CiAgICAgICAgICAgIHZhciBlID0gR2I7CiAgICAgICAgICAgIHZhciBmID0gSGI7CiAgICAgICAgICAgIHZhciBsID0gKGgpID0+IENbaCA+PiAxXTsKICAgICAgICAgIH0gZWxzZSA0ID09PSBiICYmIChkID0gSWIsIGUgPSBKYiwgZiA9IEtiLCBsID0gKGgpID0+IEZbaCA+PiAyXSk7CiAgICAgICAgICBPKGEsIHsKICAgICAgICAgICAgbmFtZTogYywKICAgICAgICAgICAgZnJvbVdpcmVUeXBlOiAoaCkgPT4gewogICAgICAgICAgICAgIGZvciAodmFyIG4gPSBGW2ggPj4gMl0sIG0sIHAgPSBoICsgNCwgdSA9IDA7IHUgPD0gbjsgKyt1KSB7CiAgICAgICAgICAgICAgICB2YXIgdiA9IGggKyA0ICsgdSAqIGI7CiAgICAgICAgICAgICAgICBpZiAodSA9PSBuIHx8IDAgPT0gbCh2KSkKICAgICAgICAgICAgICAgICAgcCA9IGQocCwgdiAtIHApLCB2b2lkIDAgPT09IG0gPyBtID0gcCA6IChtICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoMCksIG0gKz0gcCksIHAgPSB2ICsgYjsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgVShoKTsKICAgICAgICAgICAgICByZXR1cm4gbTsKICAgICAgICAgICAgfSwKICAgICAgICAgICAgdG9XaXJlVHlwZTogKGgsIG4pID0+IHsKICAgICAgICAgICAgICBpZiAoInN0cmluZyIgIT0gdHlwZW9mIG4pIHRocm93IG5ldyBSKGBDYW5ub3QgcGFzcyBub24tc3RyaW5nIHRvIEMrKyBzdHJpbmcgdHlwZSAke2N9YCk7CiAgICAgICAgICAgICAgdmFyIG0gPSBmKG4pLCBwID0gYmMoNCArIG0gKyBiKTsKICAgICAgICAgICAgICBGW3AgPj4gMl0gPSBtIC8gYjsKICAgICAgICAgICAgICBlKG4sIHAgKyA0LCBtICsgYik7CiAgICAgICAgICAgICAgbnVsbCAhPT0gaCAmJiBoLnB1c2goVSwgcCk7CiAgICAgICAgICAgICAgcmV0dXJuIHA7CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIGFyZ1BhY2tBZHZhbmNlOiA4LAogICAgICAgICAgICByZWFkVmFsdWVGcm9tUG9pbnRlcjogSywKICAgICAgICAgICAgRWEoaCkgewogICAgICAgICAgICAgIFUoaCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0pOwogICAgICAgIH0sCiAgICAgICAgczogKGEsIGIsIGMsIGQsIGUsIGYpID0+IHsKICAgICAgICAgIEZhW2FdID0geyBuYW1lOiBRKGIpLCBVYTogVChjLCBkKSwgRmE6IFQoZSwgZiksIFlhOiBbXSB9OwogICAgICAgIH0sCiAgICAgICAgajogKGEsIGIsIGMsIGQsIGUsIGYsIGwsIGgsIG4sIG0pID0+IHsKICAgICAgICAgIEZhW2FdLllhLnB1c2goeyBiYjogUShiKSwgaGI6IGMsIGZiOiBUKGQsIGUpLCBnYjogZiwgbmI6IGwsIG1iOiBUKGgsIG4pLCBvYjogbSB9KTsKICAgICAgICB9LAogICAgICAgIFo6IChhLCBiKSA9PiB7CiAgICAgICAgICBiID0gUShiKTsKICAgICAgICAgIE8oYSwgeyB1YjogdHJ1ZSwgbmFtZTogYiwgYXJnUGFja0FkdmFuY2U6IDAsIGZyb21XaXJlVHlwZTogKCkgPT4gewogICAgICAgICAgfSwgdG9XaXJlVHlwZTogKCkgPT4gewogICAgICAgICAgfSB9KTsKICAgICAgICB9LAogICAgICAgIEo6ICgpID0+IHsKICAgICAgICAgIHRocm93IEluZmluaXR5OwogICAgICAgIH0sCiAgICAgICAgYWE6IChhLCBiLCBjLCBkKSA9PiB7CiAgICAgICAgICBhID0gTGJbYV07CiAgICAgICAgICBiID0geWIoYik7CiAgICAgICAgICByZXR1cm4gYShudWxsLCBiLCBjLCBkKTsKICAgICAgICB9LAogICAgICAgIEY6IHdiLAogICAgICAgICQ6IChhLCBiLCBjKSA9PiB7CiAgICAgICAgICB2YXIgZCA9IE5iKGEsIGIpLCBlID0gZC5zaGlmdCgpOwogICAgICAgICAgYS0tOwogICAgICAgICAgdmFyIGYgPSBBcnJheShhKTsKICAgICAgICAgIGIgPSBgbWV0aG9kQ2FsbGVyPCgke2QubWFwKChsKSA9PiBsLm5hbWUpLmpvaW4oIiwgIil9KSA9PiAke2UubmFtZX0+YDsKICAgICAgICAgIHJldHVybiBNYigKICAgICAgICAgICAgWmEoYiwgKGwsIGgsIG4sIG0pID0+IHsKICAgICAgICAgICAgICBmb3IgKHZhciBwID0gMCwgdSA9IDA7IHUgPCBhOyArK3UpIGZbdV0gPSBkW3VdLnJlYWRWYWx1ZUZyb21Qb2ludGVyKG0gKyBwKSwgcCArPSBkW3VdLmFyZ1BhY2tBZHZhbmNlOwogICAgICAgICAgICAgIGggPSAxID09PSBjID8gT2IoaCwgZikgOiBoLmFwcGx5KGwsIGYpOwogICAgICAgICAgICAgIGwgPSBbXTsKICAgICAgICAgICAgICBoID0gZS50b1dpcmVUeXBlKGwsIGgpOwogICAgICAgICAgICAgIGwubGVuZ3RoICYmIChGW24gPj4gMl0gPSBoYihsKSk7CiAgICAgICAgICAgICAgcmV0dXJuIGg7CiAgICAgICAgICAgIH0pCiAgICAgICAgICApOwogICAgICAgIH0sCiAgICAgICAgYmE6IChhKSA9PiB7CiAgICAgICAgICA5IDwgYSAmJiAoVlthICsgMV0gKz0gMSk7CiAgICAgICAgfSwKICAgICAgICBfOiAoYSkgPT4gewogICAgICAgICAgdmFyIGIgPSB5YihhKTsKICAgICAgICAgIEdhKGIpOwogICAgICAgICAgd2IoYSk7CiAgICAgICAgfSwKICAgICAgICBvOiAoYSwgYikgPT4gewogICAgICAgICAgYSA9IEJiKGEsICJfZW12YWxfdGFrZV92YWx1ZSIpOwogICAgICAgICAgYSA9IGEucmVhZFZhbHVlRnJvbVBvaW50ZXIoYik7CiAgICAgICAgICByZXR1cm4gaGIoYSk7CiAgICAgICAgfSwKICAgICAgICBXOiAoKSA9PiB7CiAgICAgICAgICByYSgiIik7CiAgICAgICAgfSwKICAgICAgICBWOiAoKSA9PiBwZXJmb3JtYW5jZS5ub3coKSwKICAgICAgICBMOiAoYSkgPT4gewogICAgICAgICAgdmFyIGIgPSBBLmxlbmd0aDsKICAgICAgICAgIGEgPj4+PSAwOwogICAgICAgICAgaWYgKDIxNDc0ODM2NDggPCBhKSByZXR1cm4gZmFsc2U7CiAgICAgICAgICBmb3IgKHZhciBjID0gMTsgNCA+PSBjOyBjICo9IDIpIHsKICAgICAgICAgICAgdmFyIGQgPSBiICogKDEgKyAwLjIgLyBjKTsKICAgICAgICAgICAgZCA9IE1hdGgubWluKGQsIGEgKyAxMDA2NjMyOTYpOwogICAgICAgICAgICB2YXIgZSA9IE1hdGg7CiAgICAgICAgICAgIGQgPSBNYXRoLm1heChhLCBkKTsKICAgICAgICAgICAgYTogewogICAgICAgICAgICAgIGUgPSAoZS5taW4uY2FsbChlLCAyMTQ3NDgzNjQ4LCBkICsgKDY1NTM2IC0gZCAlIDY1NTM2KSAlIDY1NTM2KSAtIGZhLmJ1ZmZlci5ieXRlTGVuZ3RoICsgNjU1MzUpIC8gNjU1MzY7CiAgICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgIGZhLmdyb3coZSk7CiAgICAgICAgICAgICAgICBsYSgpOwogICAgICAgICAgICAgICAgdmFyIGYgPSAxOwogICAgICAgICAgICAgICAgYnJlYWsgYTsKICAgICAgICAgICAgICB9IGNhdGNoIChsKSB7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGYgPSB2b2lkIDA7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKGYpIHJldHVybiB0cnVlOwogICAgICAgICAgfQogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0sCiAgICAgICAgUzogKGEsIGIpID0+IHsKICAgICAgICAgIHZhciBjID0gMDsKICAgICAgICAgIFJiKCkuZm9yRWFjaCgoZCwgZSkgPT4gewogICAgICAgICAgICB2YXIgZiA9IGIgKyBjOwogICAgICAgICAgICBlID0gRlthICsgNCAqIGUgPj4gMl0gPSBmOwogICAgICAgICAgICBmb3IgKGYgPSAwOyBmIDwgZC5sZW5ndGg7ICsrZikgeVtlKytdID0gZC5jaGFyQ29kZUF0KGYpOwogICAgICAgICAgICB5W2VdID0gMDsKICAgICAgICAgICAgYyArPSBkLmxlbmd0aCArIDE7CiAgICAgICAgICB9KTsKICAgICAgICAgIHJldHVybiAwOwogICAgICAgIH0sCiAgICAgICAgVDogKGEsIGIpID0+IHsKICAgICAgICAgIHZhciBjID0gUmIoKTsKICAgICAgICAgIEZbYSA+PiAyXSA9IGMubGVuZ3RoOwogICAgICAgICAgdmFyIGQgPSAwOwogICAgICAgICAgYy5mb3JFYWNoKChlKSA9PiBkICs9IGUubGVuZ3RoICsgMSk7CiAgICAgICAgICBGW2IgPj4gMl0gPSBkOwogICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgfSwKICAgICAgICB0OiAoKSA9PiA1MiwKICAgICAgICB6OiAoKSA9PiA1MiwKICAgICAgICBIOiBmdW5jdGlvbigpIHsKICAgICAgICAgIHJldHVybiA3MDsKICAgICAgICB9LAogICAgICAgIFE6IChhLCBiLCBjLCBkKSA9PiB7CiAgICAgICAgICBmb3IgKHZhciBlID0gMCwgZiA9IDA7IGYgPCBjOyBmKyspIHsKICAgICAgICAgICAgdmFyIGwgPSBGW2IgPj4gMl0sIGggPSBGW2IgKyA0ID4+IDJdOwogICAgICAgICAgICBiICs9IDg7CiAgICAgICAgICAgIGZvciAodmFyIG4gPSAwOyBuIDwgaDsgbisrKSB7CiAgICAgICAgICAgICAgdmFyIG0gPSBBW2wgKyBuXSwgcCA9IFNiW2FdOwogICAgICAgICAgICAgIDAgPT09IG0gfHwgMTAgPT09IG0gPyAoKDEgPT09IGEgPyBlYSA6IHcpKEoocCwgMCkpLCBwLmxlbmd0aCA9IDApIDogcC5wdXNoKG0pOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGUgKz0gaDsKICAgICAgICAgIH0KICAgICAgICAgIEZbZCA+PiAyXSA9IGU7CiAgICAgICAgICByZXR1cm4gMDsKICAgICAgICB9LAogICAgICAgIFU6IChhLCBiKSA9PiB7CiAgICAgICAgICBVYihBLnN1YmFycmF5KGEsIGEgKyBiKSk7CiAgICAgICAgICByZXR1cm4gMDsKICAgICAgICB9LAogICAgICAgIGk6IGNjLAogICAgICAgIGQ6IGRjLAogICAgICAgIGU6IGVjLAogICAgICAgIHA6IGZjLAogICAgICAgIHk6IGdjLAogICAgICAgIGI6IGhjLAogICAgICAgIGE6IGljLAogICAgICAgIGg6IGpjLAogICAgICAgIG46IGtjLAogICAgICAgIEc6IGxjLAogICAgICAgIEs6IChhLCBiLCBjLCBkKSA9PiBaYihhLCBiLCBjLCBkKQogICAgICB9LCBXID0gZnVuY3Rpb24oKSB7CiAgICAgICAgZnVuY3Rpb24gYShjKSB7CiAgICAgICAgICBXID0gYy5leHBvcnRzOwogICAgICAgICAgZmEgPSBXLmRhOwogICAgICAgICAgbGEoKTsKICAgICAgICAgIFMgPSBXLmhhOwogICAgICAgICAgbmEudW5zaGlmdChXLmVhKTsKICAgICAgICAgIEctLTsKICAgICAgICAgIGsubW9uaXRvclJ1bkRlcGVuZGVuY2llcz8uKEcpOwogICAgICAgICAgMCA9PSBHICYmIChudWxsICE9PSBxYSAmJiAoY2xlYXJJbnRlcnZhbChxYSksIHFhID0gbnVsbCksIEggJiYgKGMgPSBILCBIID0gbnVsbCwgYygpKSk7CiAgICAgICAgICByZXR1cm4gVzsKICAgICAgICB9CiAgICAgICAgdmFyIGIgPSB7IGE6IG1jIH07CiAgICAgICAgRysrOwogICAgICAgIGsubW9uaXRvclJ1bkRlcGVuZGVuY2llcz8uKEcpOwogICAgICAgIGlmIChrLmluc3RhbnRpYXRlV2FzbSkKICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgIHJldHVybiBrLmluc3RhbnRpYXRlV2FzbShiLCBhKTsKICAgICAgICAgIH0gY2F0Y2ggKGMpIHsKICAgICAgICAgICAgdyhgTW9kdWxlLmluc3RhbnRpYXRlV2FzbSBjYWxsYmFjayBmYWlsZWQgd2l0aCBlcnJvcjogJHtjfWApLCBiYShjKTsKICAgICAgICAgIH0KICAgICAgICB4YShiLCBmdW5jdGlvbihjKSB7CiAgICAgICAgICBhKGMuaW5zdGFuY2UpOwogICAgICAgIH0pLmNhdGNoKGJhKTsKICAgICAgICByZXR1cm4ge307CiAgICAgIH0oKSwgYmMgPSAoYSkgPT4gKGJjID0gVy5mYSkoYSksIG9iID0gKGEpID0+IChvYiA9IFcuZ2EpKGEpLCBVID0gKGEpID0+IChVID0gVy5pYSkoYSksIFggPSAoYSwgYikgPT4gKFggPSBXLmphKShhLCBiKSwgWSA9IChhKSA9PiAoWSA9IFcua2EpKGEpLCBaID0gKCkgPT4gKFogPSBXLmxhKSgpOwogICAgICBrLmR5bkNhbGxfaWlqaiA9IChhLCBiLCBjLCBkLCBlLCBmKSA9PiAoay5keW5DYWxsX2lpamogPSBXLm5hKShhLCBiLCBjLCBkLCBlLCBmKTsKICAgICAgay5keW5DYWxsX3ZpamogPSAoYSwgYiwgYywgZCwgZSwgZikgPT4gKGsuZHluQ2FsbF92aWpqID0gVy5vYSkoYSwgYiwgYywgZCwgZSwgZik7CiAgICAgIGsuZHluQ2FsbF9qaWlpID0gKGEsIGIsIGMsIGQpID0+IChrLmR5bkNhbGxfamlpaSA9IFcucGEpKGEsIGIsIGMsIGQpOwogICAgICBrLmR5bkNhbGxfamlpID0gKGEsIGIsIGMpID0+IChrLmR5bkNhbGxfamlpID0gVy5xYSkoYSwgYiwgYyk7CiAgICAgIHZhciBuYyA9IGsuZHluQ2FsbF92aWlpaiA9IChhLCBiLCBjLCBkLCBlLCBmKSA9PiAobmMgPSBrLmR5bkNhbGxfdmlpaWogPSBXLnJhKShhLCBiLCBjLCBkLCBlLCBmKTsKICAgICAgay5keW5DYWxsX2ppamkgPSAoYSwgYiwgYywgZCwgZSkgPT4gKGsuZHluQ2FsbF9qaWppID0gVy5zYSkoYSwgYiwgYywgZCwgZSk7CiAgICAgIGsuZHluQ2FsbF92aWlqaWkgPSAoYSwgYiwgYywgZCwgZSwgZiwgbCkgPT4gKGsuZHluQ2FsbF92aWlqaWkgPSBXLnRhKShhLCBiLCBjLCBkLCBlLCBmLCBsKTsKICAgICAgay5keW5DYWxsX2lpaWlpaiA9IChhLCBiLCBjLCBkLCBlLCBmLCBsKSA9PiAoay5keW5DYWxsX2lpaWlpaiA9IFcudWEpKGEsIGIsIGMsIGQsIGUsIGYsIGwpOwogICAgICBrLmR5bkNhbGxfaWlpaWlqaiA9IChhLCBiLCBjLCBkLCBlLCBmLCBsLCBoLCBuKSA9PiAoay5keW5DYWxsX2lpaWlpamogPSBXLnZhKShhLCBiLCBjLCBkLCBlLCBmLCBsLCBoLCBuKTsKICAgICAgay5keW5DYWxsX2lpaWlpaWpqID0gKGEsIGIsIGMsIGQsIGUsIGYsIGwsIGgsIG4sIG0pID0+IChrLmR5bkNhbGxfaWlpaWlpamogPSBXLndhKShhLCBiLCBjLCBkLCBlLCBmLCBsLCBoLCBuLCBtKTsKICAgICAgZnVuY3Rpb24gaGMoYSwgYikgewogICAgICAgIHZhciBjID0gWigpOwogICAgICAgIHRyeSB7CiAgICAgICAgICBTLmdldChhKShiKTsKICAgICAgICB9IGNhdGNoIChkKSB7CiAgICAgICAgICBZKGMpOwogICAgICAgICAgaWYgKGQgIT09IGQgKyAwKSB0aHJvdyBkOwogICAgICAgICAgWCgxLCAwKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgZnVuY3Rpb24gaWMoYSwgYiwgYykgewogICAgICAgIHZhciBkID0gWigpOwogICAgICAgIHRyeSB7CiAgICAgICAgICBTLmdldChhKShiLCBjKTsKICAgICAgICB9IGNhdGNoIChlKSB7CiAgICAgICAgICBZKGQpOwogICAgICAgICAgaWYgKGUgIT09IGUgKyAwKSB0aHJvdyBlOwogICAgICAgICAgWCgxLCAwKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgZnVuY3Rpb24gZWMoYSwgYiwgYywgZCkgewogICAgICAgIHZhciBlID0gWigpOwogICAgICAgIHRyeSB7CiAgICAgICAgICByZXR1cm4gUy5nZXQoYSkoYiwgYywgZCk7CiAgICAgICAgfSBjYXRjaCAoZikgewogICAgICAgICAgWShlKTsKICAgICAgICAgIGlmIChmICE9PSBmICsgMCkgdGhyb3cgZjsKICAgICAgICAgIFgoMSwgMCk7CiAgICAgICAgfQogICAgICB9CiAgICAgIGZ1bmN0aW9uIGRjKGEsIGIsIGMpIHsKICAgICAgICB2YXIgZCA9IFooKTsKICAgICAgICB0cnkgewogICAgICAgICAgcmV0dXJuIFMuZ2V0KGEpKGIsIGMpOwogICAgICAgIH0gY2F0Y2ggKGUpIHsKICAgICAgICAgIFkoZCk7CiAgICAgICAgICBpZiAoZSAhPT0gZSArIDApIHRocm93IGU7CiAgICAgICAgICBYKDEsIDApOwogICAgICAgIH0KICAgICAgfQogICAgICBmdW5jdGlvbiBjYyhhLCBiKSB7CiAgICAgICAgdmFyIGMgPSBaKCk7CiAgICAgICAgdHJ5IHsKICAgICAgICAgIHJldHVybiBTLmdldChhKShiKTsKICAgICAgICB9IGNhdGNoIChkKSB7CiAgICAgICAgICBZKGMpOwogICAgICAgICAgaWYgKGQgIT09IGQgKyAwKSB0aHJvdyBkOwogICAgICAgICAgWCgxLCAwKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgZnVuY3Rpb24gZmMoYSwgYiwgYywgZCwgZSwgZikgewogICAgICAgIHZhciBsID0gWigpOwogICAgICAgIHRyeSB7CiAgICAgICAgICByZXR1cm4gUy5nZXQoYSkoYiwgYywgZCwgZSwgZik7CiAgICAgICAgfSBjYXRjaCAoaCkgewogICAgICAgICAgWShsKTsKICAgICAgICAgIGlmIChoICE9PSBoICsgMCkgdGhyb3cgaDsKICAgICAgICAgIFgoMSwgMCk7CiAgICAgICAgfQogICAgICB9CiAgICAgIGZ1bmN0aW9uIGtjKGEsIGIsIGMsIGQsIGUpIHsKICAgICAgICB2YXIgZiA9IFooKTsKICAgICAgICB0cnkgewogICAgICAgICAgUy5nZXQoYSkoYiwgYywgZCwgZSk7CiAgICAgICAgfSBjYXRjaCAobCkgewogICAgICAgICAgWShmKTsKICAgICAgICAgIGlmIChsICE9PSBsICsgMCkgdGhyb3cgbDsKICAgICAgICAgIFgoMSwgMCk7CiAgICAgICAgfQogICAgICB9CiAgICAgIGZ1bmN0aW9uIGpjKGEsIGIsIGMsIGQpIHsKICAgICAgICB2YXIgZSA9IFooKTsKICAgICAgICB0cnkgewogICAgICAgICAgUy5nZXQoYSkoYiwgYywgZCk7CiAgICAgICAgfSBjYXRjaCAoZikgewogICAgICAgICAgWShlKTsKICAgICAgICAgIGlmIChmICE9PSBmICsgMCkgdGhyb3cgZjsKICAgICAgICAgIFgoMSwgMCk7CiAgICAgICAgfQogICAgICB9CiAgICAgIGZ1bmN0aW9uIGdjKGEpIHsKICAgICAgICB2YXIgYiA9IFooKTsKICAgICAgICB0cnkgewogICAgICAgICAgUy5nZXQoYSkoKTsKICAgICAgICB9IGNhdGNoIChjKSB7CiAgICAgICAgICBZKGIpOwogICAgICAgICAgaWYgKGMgIT09IGMgKyAwKSB0aHJvdyBjOwogICAgICAgICAgWCgxLCAwKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgZnVuY3Rpb24gbGMoYSwgYiwgYywgZCwgZSwgZikgewogICAgICAgIHZhciBsID0gWigpOwogICAgICAgIHRyeSB7CiAgICAgICAgICBuYyhhLCBiLCBjLCBkLCBlLCBmKTsKICAgICAgICB9IGNhdGNoIChoKSB7CiAgICAgICAgICBZKGwpOwogICAgICAgICAgaWYgKGggIT09IGggKyAwKSB0aHJvdyBoOwogICAgICAgICAgWCgxLCAwKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgdmFyIG9jOwogICAgICBIID0gZnVuY3Rpb24gcGMoKSB7CiAgICAgICAgb2MgfHwgcWMoKTsKICAgICAgICBvYyB8fCAoSCA9IHBjKTsKICAgICAgfTsKICAgICAgZnVuY3Rpb24gcWMoKSB7CiAgICAgICAgZnVuY3Rpb24gYSgpIHsKICAgICAgICAgIGlmICghb2MgJiYgKG9jID0gdHJ1ZSwgay5jYWxsZWRSdW4gPSB0cnVlLCAhaGEpKSB7CiAgICAgICAgICAgIHlhKG5hKTsKICAgICAgICAgICAgYWEoayk7CiAgICAgICAgICAgIGlmIChrLm9uUnVudGltZUluaXRpYWxpemVkKSBrLm9uUnVudGltZUluaXRpYWxpemVkKCk7CiAgICAgICAgICAgIGlmIChrLnBvc3RSdW4pCiAgICAgICAgICAgICAgZm9yICgiZnVuY3Rpb24iID09IHR5cGVvZiBrLnBvc3RSdW4gJiYgKGsucG9zdFJ1biA9IFtrLnBvc3RSdW5dKTsgay5wb3N0UnVuLmxlbmd0aDsgKSB7CiAgICAgICAgICAgICAgICB2YXIgYiA9IGsucG9zdFJ1bi5zaGlmdCgpOwogICAgICAgICAgICAgICAgb2EudW5zaGlmdChiKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIHlhKG9hKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKCEoMCA8IEcpKSB7CiAgICAgICAgICBpZiAoay5wcmVSdW4pIGZvciAoImZ1bmN0aW9uIiA9PSB0eXBlb2Ygay5wcmVSdW4gJiYgKGsucHJlUnVuID0gW2sucHJlUnVuXSk7IGsucHJlUnVuLmxlbmd0aDsgKSBwYSgpOwogICAgICAgICAgeWEobWEpOwogICAgICAgICAgMCA8IEcgfHwgKGsuc2V0U3RhdHVzID8gKGsuc2V0U3RhdHVzKCJSdW5uaW5nLi4uIiksIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgay5zZXRTdGF0dXMoIiIpOwogICAgICAgICAgICB9LCAxKTsKICAgICAgICAgICAgYSgpOwogICAgICAgICAgfSwgMSkpIDogYSgpKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgaWYgKGsucHJlSW5pdCkKICAgICAgICBmb3IgKCJmdW5jdGlvbiIgPT0gdHlwZW9mIGsucHJlSW5pdCAmJiAoay5wcmVJbml0ID0gW2sucHJlSW5pdF0pOyAwIDwgay5wcmVJbml0Lmxlbmd0aDsgKSBrLnByZUluaXQucG9wKCkoKTsKICAgICAgcWMoKTsKICAgICAgcmV0dXJuIHJlYWR5UHJvbWlzZTsKICAgIH07CiAgfSkoKTsKICB2YXIgZG90bG90dGllX3BsYXllcl9kZWZhdWx0ID0gY3JlYXRlRG90TG90dGllUGxheWVyTW9kdWxlOwoKICAvLyBzcmMvY29yZS9kb3Rsb3R0aWUtd2FzbS1sb2FkZXIudHMKICB2YXIgRG90TG90dGllV2FzbUxvYWRlciA9IGNsYXNzIHsKICAgIGNvbnN0cnVjdG9yKCkgewogICAgICB0aHJvdyBuZXcgRXJyb3IoIlJlbmRlcmVyTG9hZGVyIGlzIGEgc3RhdGljIGNsYXNzIGFuZCBjYW5ub3QgYmUgaW5zdGFudGlhdGVkLiIpOwogICAgfQogICAgc3RhdGljIGFzeW5jIF90cnlMb2FkKHVybCkgewogICAgICBjb25zdCBtb2R1bGUgPSBhd2FpdCBkb3Rsb3R0aWVfcGxheWVyX2RlZmF1bHQoeyBsb2NhdGVGaWxlOiAoKSA9PiB1cmwgfSk7CiAgICAgIHJldHVybiBtb2R1bGU7CiAgICB9CiAgICAvKioKICAgICAqIFRyaWVzIHRvIGxvYWQgdGhlIFdBU00gbW9kdWxlIGZyb20gdGhlIHByaW1hcnkgVVJMLCBmYWxsaW5nIGJhY2sgdG8gYSBiYWNrdXAgVVJMIGlmIG5lY2Vzc2FyeS4KICAgICAqIFRocm93cyBhbiBlcnJvciBpZiBib3RoIFVSTHMgZmFpbCB0byBsb2FkIHRoZSBtb2R1bGUuCiAgICAgKiBAcmV0dXJucyBQcm9taXNlPE1vZHVsZT4gLSBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB0byB0aGUgbG9hZGVkIG1vZHVsZS4KICAgICAqLwogICAgc3RhdGljIGFzeW5jIF9sb2FkV2l0aEJhY2t1cCgpIHsKICAgICAgaWYgKCF0aGlzLl9Nb2R1bGVQcm9taXNlKSB7CiAgICAgICAgdGhpcy5fTW9kdWxlUHJvbWlzZSA9IHRoaXMuX3RyeUxvYWQodGhpcy5fd2FzbVVSTCkuY2F0Y2goYXN5bmMgKGluaXRpYWxFcnJvcikgPT4gewogICAgICAgICAgY29uc3QgYmFja3VwVXJsID0gYGh0dHBzOi8vdW5wa2cuY29tLyR7UEFDS0FHRV9OQU1FfUAke1BBQ0tBR0VfVkVSU0lPTn0vZGlzdC9kb3Rsb3R0aWUtcGxheWVyLndhc21gOwogICAgICAgICAgY29uc29sZS53YXJuKGBQcmltYXJ5IFdBU00gbG9hZCBmYWlsZWQgZnJvbSAke3RoaXMuX3dhc21VUkx9LiBFcnJvcjogJHtpbml0aWFsRXJyb3IubWVzc2FnZX1gKTsKICAgICAgICAgIGNvbnNvbGUud2FybihgQXR0ZW1wdGluZyB0byBsb2FkIFdBU00gZnJvbSBiYWNrdXAgVVJMOiAke2JhY2t1cFVybH1gKTsKICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgIHJldHVybiBhd2FpdCB0aGlzLl90cnlMb2FkKGJhY2t1cFVybCk7CiAgICAgICAgICB9IGNhdGNoIChiYWNrdXBFcnJvcikgewogICAgICAgICAgICBjb25zb2xlLmVycm9yKGBQcmltYXJ5IFdBU00gVVJMIGZhaWxlZDogJHtpbml0aWFsRXJyb3IubWVzc2FnZX1gKTsKICAgICAgICAgICAgY29uc29sZS5lcnJvcihgQmFja3VwIFdBU00gVVJMIGZhaWxlZDogJHtiYWNrdXBFcnJvci5tZXNzYWdlfWApOwogICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIldBU00gbG9hZGluZyBmYWlsZWQgZnJvbSBhbGwgc291cmNlcy4iKTsKICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgfQogICAgICByZXR1cm4gdGhpcy5fTW9kdWxlUHJvbWlzZTsKICAgIH0KICAgIC8qKgogICAgICogUHVibGljIG1ldGhvZCB0byBsb2FkIHRoZSBXZWJBc3NlbWJseSBtb2R1bGUuCiAgICAgKiBVdGlsaXplcyBhIHByaW1hcnkgYW5kIGJhY2t1cCBVUkwgZm9yIHJvYnVzdG5lc3MuCiAgICAgKiBAcmV0dXJucyBQcm9taXNlPE1vZHVsZT4gLSBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB0byB0aGUgbG9hZGVkIG1vZHVsZS4KICAgICAqLwogICAgc3RhdGljIGFzeW5jIGxvYWQoKSB7CiAgICAgIHJldHVybiB0aGlzLl9sb2FkV2l0aEJhY2t1cCgpOwogICAgfQogICAgLyoqCiAgICAgKiBTZXRzIGEgbmV3IFVSTCBmb3IgdGhlIFdBU00gZmlsZSBhbmQgaW52YWxpZGF0ZXMgdGhlIGN1cnJlbnQgbW9kdWxlIHByb21pc2UuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAtICBUaGUgbmV3IFVSTCBmb3IgdGhlIFdBU00gZmlsZS4KICAgICAqLwogICAgc3RhdGljIHNldFdhc21VcmwodXJsKSB7CiAgICAgIHRoaXMuX3dhc21VUkwgPSB1cmw7CiAgICAgIHRoaXMuX01vZHVsZVByb21pc2UgPSBudWxsOwogICAgfQogIH07CiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uYW1pbmctY29udmVudGlvbgogIF9fcHVibGljRmllbGQoRG90TG90dGllV2FzbUxvYWRlciwgIl9Nb2R1bGVQcm9taXNlIiwgbnVsbCk7CiAgLy8gVVJMIGZvciB0aGUgV0FTTSBmaWxlLCBjb25zdHJ1Y3RlZCB1c2luZyBwYWNrYWdlIGluZm9ybWF0aW9uCiAgX19wdWJsaWNGaWVsZChEb3RMb3R0aWVXYXNtTG9hZGVyLCAiX3dhc21VUkwiLCBgaHR0cHM6Ly9jZG4uanNkZWxpdnIubmV0L25wbS8ke1BBQ0tBR0VfTkFNRX1AJHtQQUNLQUdFX1ZFUlNJT059L2Rpc3QvZG90bG90dGllLXBsYXllci53YXNtYCk7CgogIC8vIHNyYy9ldmVudC1tYW5hZ2VyLnRzCiAgdmFyIEV2ZW50TWFuYWdlciA9IGNsYXNzIHsKICAgIGNvbnN0cnVjdG9yKCkgewogICAgICBfX3B1YmxpY0ZpZWxkKHRoaXMsICJfZXZlbnRMaXN0ZW5lcnMiLCAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpKTsKICAgIH0KICAgIGFkZEV2ZW50TGlzdGVuZXIodHlwZSwgbGlzdGVuZXIpIHsKICAgICAgbGV0IGxpc3RlbmVycyA9IHRoaXMuX2V2ZW50TGlzdGVuZXJzLmdldCh0eXBlKTsKICAgICAgaWYgKCFsaXN0ZW5lcnMpIHsKICAgICAgICBsaXN0ZW5lcnMgPSAvKiBAX19QVVJFX18gKi8gbmV3IFNldCgpOwogICAgICAgIHRoaXMuX2V2ZW50TGlzdGVuZXJzLnNldCh0eXBlLCBsaXN0ZW5lcnMpOwogICAgICB9CiAgICAgIGxpc3RlbmVycy5hZGQobGlzdGVuZXIpOwogICAgfQogICAgcmVtb3ZlRXZlbnRMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lcikgewogICAgICBjb25zdCBsaXN0ZW5lcnMgPSB0aGlzLl9ldmVudExpc3RlbmVycy5nZXQodHlwZSk7CiAgICAgIGlmICghbGlzdGVuZXJzKSByZXR1cm47CiAgICAgIGlmIChsaXN0ZW5lcikgewogICAgICAgIGxpc3RlbmVycy5kZWxldGUobGlzdGVuZXIpOwogICAgICAgIGlmIChsaXN0ZW5lcnMuc2l6ZSA9PT0gMCkgewogICAgICAgICAgdGhpcy5fZXZlbnRMaXN0ZW5lcnMuZGVsZXRlKHR5cGUpOwogICAgICAgIH0KICAgICAgfSBlbHNlIHsKICAgICAgICB0aGlzLl9ldmVudExpc3RlbmVycy5kZWxldGUodHlwZSk7CiAgICAgIH0KICAgIH0KICAgIGRpc3BhdGNoKGV2ZW50KSB7CiAgICAgIGNvbnN0IGxpc3RlbmVycyA9IHRoaXMuX2V2ZW50TGlzdGVuZXJzLmdldChldmVudC50eXBlKTsKICAgICAgbGlzdGVuZXJzPy5mb3JFYWNoKChsaXN0ZW5lcikgPT4gbGlzdGVuZXIoZXZlbnQpKTsKICAgIH0KICAgIHJlbW92ZUFsbEV2ZW50TGlzdGVuZXJzKCkgewogICAgICB0aGlzLl9ldmVudExpc3RlbmVycy5jbGVhcigpOwogICAgfQogIH07CgogIC8vIHNyYy91dGlscy50cwogIGZ1bmN0aW9uIGlzSGV4Q29sb3IoY29sb3IpIHsKICAgIHJldHVybiAvXiMoW1xkYS1mXXs2fXxbXGRhLWZdezh9KSQvaXUudGVzdChjb2xvcik7CiAgfQogIGZ1bmN0aW9uIGhleFN0cmluZ1RvUkdCQUludChjb2xvckhleCkgewogICAgaWYgKCFpc0hleENvbG9yKGNvbG9ySGV4KSkgewogICAgICByZXR1cm4gMDsKICAgIH0KICAgIGxldCBoZXggPSBjb2xvckhleC5yZXBsYWNlKCIjIiwgIiIpOwogICAgaGV4ID0gaGV4Lmxlbmd0aCA9PT0gNiA/IGAke2hleH1mZmAgOiBoZXg7CiAgICByZXR1cm4gcGFyc2VJbnQoaGV4LCAxNik7CiAgfQogIGZ1bmN0aW9uIGlzRG90TG90dGllKGZpbGVEYXRhKSB7CiAgICBpZiAoZmlsZURhdGEuYnl0ZUxlbmd0aCA8IDQpIHsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogICAgY29uc3QgZmlsZVNpZ25hdHVyZSA9IG5ldyBVaW50OEFycmF5KGZpbGVEYXRhLnNsaWNlKDAsIFpJUF9TSUdOQVRVUkUuYnl0ZUxlbmd0aCkpOwogICAgZm9yIChsZXQgaSA9IDA7IGkgPCBaSVBfU0lHTkFUVVJFLmxlbmd0aDsgaSArPSAxKSB7CiAgICAgIGlmIChaSVBfU0lHTkFUVVJFW2ldICE9PSBmaWxlU2lnbmF0dXJlW2ldKSB7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gdHJ1ZTsKICB9CiAgZnVuY3Rpb24gaXNMb3R0aWVKU09OKGpzb24pIHsKICAgIHJldHVybiBMT1RUSUVfSlNPTl9NQU5EQVRPUllfRklFTERTLmV2ZXJ5KChmaWVsZCkgPT4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGpzb24sIGZpZWxkKSk7CiAgfQogIGZ1bmN0aW9uIGlzTG90dGllKGZpbGVEYXRhKSB7CiAgICBpZiAodHlwZW9mIGZpbGVEYXRhID09PSAic3RyaW5nIikgewogICAgICB0cnkgewogICAgICAgIHJldHVybiBpc0xvdHRpZUpTT04oSlNPTi5wYXJzZShmaWxlRGF0YSkpOwogICAgICB9IGNhdGNoIChfZSkgewogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIGlzTG90dGllSlNPTihmaWxlRGF0YSk7CiAgICB9CiAgfQoKICAvLyBzcmMvZG90bG90dGllLnRzCiAgdmFyIGNyZWF0ZUNvcmVNb2RlID0gKG1vZGUsIG1vZHVsZSkgPT4gewogICAgaWYgKG1vZGUgPT09ICJyZXZlcnNlIikgewogICAgICByZXR1cm4gbW9kdWxlLk1vZGUuUmV2ZXJzZTsKICAgIH0gZWxzZSBpZiAobW9kZSA9PT0gImJvdW5jZSIpIHsKICAgICAgcmV0dXJuIG1vZHVsZS5Nb2RlLkJvdW5jZTsKICAgIH0gZWxzZSBpZiAobW9kZSA9PT0gInJldmVyc2UtYm91bmNlIikgewogICAgICByZXR1cm4gbW9kdWxlLk1vZGUuUmV2ZXJzZUJvdW5jZTsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiBtb2R1bGUuTW9kZS5Gb3J3YXJkOwogICAgfQogIH07CiAgdmFyIGNyZWF0ZUNvcmVGaXQgPSAoZml0LCBtb2R1bGUpID0+IHsKICAgIGlmIChmaXQgPT09ICJjb250YWluIikgewogICAgICByZXR1cm4gbW9kdWxlLkZpdC5Db250YWluOwogICAgfSBlbHNlIGlmIChmaXQgPT09ICJjb3ZlciIpIHsKICAgICAgcmV0dXJuIG1vZHVsZS5GaXQuQ292ZXI7CiAgICB9IGVsc2UgaWYgKGZpdCA9PT0gImZpbGwiKSB7CiAgICAgIHJldHVybiBtb2R1bGUuRml0LkZpbGw7CiAgICB9IGVsc2UgaWYgKGZpdCA9PT0gImZpdC1oZWlnaHQiKSB7CiAgICAgIHJldHVybiBtb2R1bGUuRml0LkZpdEhlaWdodDsKICAgIH0gZWxzZSBpZiAoZml0ID09PSAiZml0LXdpZHRoIikgewogICAgICByZXR1cm4gbW9kdWxlLkZpdC5GaXRXaWR0aDsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiBtb2R1bGUuRml0Lk5vbmU7CiAgICB9CiAgfTsKICB2YXIgY3JlYXRlQ29yZUFsaWduID0gKGFsaWduLCBtb2R1bGUpID0+IHsKICAgIGNvbnN0IGNvcmVBbGlnbiA9IG5ldyBtb2R1bGUuVmVjdG9yRmxvYXQoKTsKICAgIGNvcmVBbGlnbi5wdXNoX2JhY2soYWxpZ25bMF0pOwogICAgY29yZUFsaWduLnB1c2hfYmFjayhhbGlnblsxXSk7CiAgICByZXR1cm4gY29yZUFsaWduOwogIH07CiAgdmFyIGNyZWF0ZUNvcmVTZWdtZW50ID0gKHNlZ21lbnQsIG1vZHVsZSkgPT4gewogICAgY29uc3QgY29yZXNlZ21lbnQgPSBuZXcgbW9kdWxlLlZlY3RvckZsb2F0KCk7CiAgICBpZiAoc2VnbWVudC5sZW5ndGggIT09IDIpIHJldHVybiBjb3Jlc2VnbWVudDsKICAgIGNvcmVzZWdtZW50LnB1c2hfYmFjayhzZWdtZW50WzBdKTsKICAgIGNvcmVzZWdtZW50LnB1c2hfYmFjayhzZWdtZW50WzFdKTsKICAgIHJldHVybiBjb3Jlc2VnbWVudDsKICB9OwogIHZhciBfRG90TG90dGllID0gY2xhc3MgX0RvdExvdHRpZSB7CiAgICBjb25zdHJ1Y3Rvcihjb25maWcpIHsKICAgICAgX19wdWJsaWNGaWVsZCh0aGlzLCAiX2NhbnZhcyIpOwogICAgICBfX3B1YmxpY0ZpZWxkKHRoaXMsICJfY29udGV4dCIsIG51bGwpOwogICAgICBfX3B1YmxpY0ZpZWxkKHRoaXMsICJfZXZlbnRNYW5hZ2VyIik7CiAgICAgIF9fcHVibGljRmllbGQodGhpcywgIl9hbmltYXRpb25GcmFtZUlkIiwgbnVsbCk7CiAgICAgIF9fcHVibGljRmllbGQodGhpcywgIl9mcmFtZU1hbmFnZXIiKTsKICAgICAgX19wdWJsaWNGaWVsZCh0aGlzLCAiX2RvdExvdHRpZUNvcmUiLCBudWxsKTsKICAgICAgX19wdWJsaWNGaWVsZCh0aGlzLCAiX3JlbmRlckNvbmZpZyIsIHt9KTsKICAgICAgX19wdWJsaWNGaWVsZCh0aGlzLCAiX2lzRnJvemVuIiwgZmFsc2UpOwogICAgICBfX3B1YmxpY0ZpZWxkKHRoaXMsICJfYmFja2dyb3VuZENvbG9yIiwgbnVsbCk7CiAgICAgIF9fcHVibGljRmllbGQodGhpcywgIl9wb2ludGVyVXBNZXRob2QiKTsKICAgICAgX19wdWJsaWNGaWVsZCh0aGlzLCAiX3BvaW50ZXJEb3duTWV0aG9kIik7CiAgICAgIF9fcHVibGljRmllbGQodGhpcywgIl9wb2ludGVyTW92ZU1ldGhvZCIpOwogICAgICBfX3B1YmxpY0ZpZWxkKHRoaXMsICJfcG9pbnRlckVudGVyTWV0aG9kIik7CiAgICAgIF9fcHVibGljRmllbGQodGhpcywgIl9wb2ludGVyRXhpdE1ldGhvZCIpOwogICAgICBfX3B1YmxpY0ZpZWxkKHRoaXMsICJfb25Db21wbGV0ZU1ldGhvZCIpOwogICAgICB0aGlzLl9jYW52YXMgPSBjb25maWcuY2FudmFzOwogICAgICB0aGlzLl9jb250ZXh0ID0gdGhpcy5fY2FudmFzLmdldENvbnRleHQoIjJkIik7CiAgICAgIHRoaXMuX2V2ZW50TWFuYWdlciA9IG5ldyBFdmVudE1hbmFnZXIoKTsKICAgICAgdGhpcy5fZnJhbWVNYW5hZ2VyID0gbmV3IEFuaW1hdGlvbkZyYW1lTWFuYWdlcigpOwogICAgICB0aGlzLl9yZW5kZXJDb25maWcgPSBjb25maWcucmVuZGVyQ29uZmlnID8/IHt9OwogICAgICBEb3RMb3R0aWVXYXNtTG9hZGVyLmxvYWQoKS50aGVuKChtb2R1bGUpID0+IHsKICAgICAgICBfRG90TG90dGllLl93YXNtTW9kdWxlID0gbW9kdWxlOwogICAgICAgIHRoaXMuX2RvdExvdHRpZUNvcmUgPSBuZXcgbW9kdWxlLkRvdExvdHRpZVBsYXllcih7CiAgICAgICAgICBhdXRvcGxheTogY29uZmlnLmF1dG9wbGF5ID8/IGZhbHNlLAogICAgICAgICAgYmFja2dyb3VuZENvbG9yOiAwLAogICAgICAgICAgbG9vcEFuaW1hdGlvbjogY29uZmlnLmxvb3AgPz8gZmFsc2UsCiAgICAgICAgICBtb2RlOiBjcmVhdGVDb3JlTW9kZShjb25maWcubW9kZSA/PyAiZm9yd2FyZCIsIG1vZHVsZSksCiAgICAgICAgICBzZWdtZW50OiBjcmVhdGVDb3JlU2VnbWVudChjb25maWcuc2VnbWVudCA/PyBbXSwgbW9kdWxlKSwKICAgICAgICAgIHNwZWVkOiBjb25maWcuc3BlZWQgPz8gMSwKICAgICAgICAgIHVzZUZyYW1lSW50ZXJwb2xhdGlvbjogY29uZmlnLnVzZUZyYW1lSW50ZXJwb2xhdGlvbiA/PyB0cnVlLAogICAgICAgICAgbWFya2VyOiBjb25maWcubWFya2VyID8/ICIiLAogICAgICAgICAgbGF5b3V0OiBjb25maWcubGF5b3V0ID8gewogICAgICAgICAgICBhbGlnbjogY3JlYXRlQ29yZUFsaWduKGNvbmZpZy5sYXlvdXQuYWxpZ24sIG1vZHVsZSksCiAgICAgICAgICAgIGZpdDogY3JlYXRlQ29yZUZpdChjb25maWcubGF5b3V0LmZpdCwgbW9kdWxlKQogICAgICAgICAgfSA6IG1vZHVsZS5jcmVhdGVEZWZhdWx0TGF5b3V0KCkKICAgICAgICB9KTsKICAgICAgICB0aGlzLl9ldmVudE1hbmFnZXIuZGlzcGF0Y2goeyB0eXBlOiAicmVhZHkiIH0pOwogICAgICAgIGlmIChjb25maWcuZGF0YSkgewogICAgICAgICAgdGhpcy5fbG9hZEZyb21EYXRhKGNvbmZpZy5kYXRhKTsKICAgICAgICB9IGVsc2UgaWYgKGNvbmZpZy5zcmMpIHsKICAgICAgICAgIHRoaXMuX2xvYWRGcm9tU3JjKGNvbmZpZy5zcmMpOwogICAgICAgIH0KICAgICAgICBpZiAoY29uZmlnLmJhY2tncm91bmRDb2xvcikgewogICAgICAgICAgdGhpcy5zZXRCYWNrZ3JvdW5kQ29sb3IoY29uZmlnLmJhY2tncm91bmRDb2xvcik7CiAgICAgICAgfQogICAgICB9KS5jYXRjaCgoZXJyb3IpID0+IHsKICAgICAgICB0aGlzLl9ldmVudE1hbmFnZXIuZGlzcGF0Y2goewogICAgICAgICAgdHlwZTogImxvYWRFcnJvciIsCiAgICAgICAgICBlcnJvcjogbmV3IEVycm9yKGBGYWlsZWQgdG8gbG9hZCB3YXNtIG1vZHVsZTogJHtlcnJvcn1gKQogICAgICAgIH0pOwogICAgICB9KTsKICAgICAgdGhpcy5fcG9pbnRlclVwTWV0aG9kID0gdGhpcy5fb25Qb2ludGVyVXAuYmluZCh0aGlzKTsKICAgICAgdGhpcy5fcG9pbnRlckRvd25NZXRob2QgPSB0aGlzLl9vblBvaW50ZXJEb3duLmJpbmQodGhpcyk7CiAgICAgIHRoaXMuX3BvaW50ZXJNb3ZlTWV0aG9kID0gdGhpcy5fb25Qb2ludGVyTW92ZS5iaW5kKHRoaXMpOwogICAgICB0aGlzLl9wb2ludGVyRW50ZXJNZXRob2QgPSB0aGlzLl9vblBvaW50ZXJFbnRlci5iaW5kKHRoaXMpOwogICAgICB0aGlzLl9wb2ludGVyRXhpdE1ldGhvZCA9IHRoaXMuX29uUG9pbnRlckxlYXZlLmJpbmQodGhpcyk7CiAgICAgIHRoaXMuX29uQ29tcGxldGVNZXRob2QgPSB0aGlzLl9vbkNvbXBsZXRlLmJpbmQodGhpcyk7CiAgICB9CiAgICBfZGlzcGF0Y2hFcnJvcihtZXNzYWdlKSB7CiAgICAgIGNvbnNvbGUuZXJyb3IobWVzc2FnZSk7CiAgICAgIHRoaXMuX2V2ZW50TWFuYWdlci5kaXNwYXRjaCh7IHR5cGU6ICJsb2FkRXJyb3IiLCBlcnJvcjogbmV3IEVycm9yKG1lc3NhZ2UpIH0pOwogICAgfQogICAgYXN5bmMgX2ZldGNoRGF0YShzcmMpIHsKICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChzcmMpOwogICAgICBpZiAoIXJlc3BvbnNlLm9rKSB7CiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gZmV0Y2ggYW5pbWF0aW9uIGRhdGEgZnJvbSBVUkw6ICR7c3JjfS4gJHtyZXNwb25zZS5zdGF0dXN9OiAke3Jlc3BvbnNlLnN0YXR1c1RleHR9YCk7CiAgICAgIH0KICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlc3BvbnNlLmFycmF5QnVmZmVyKCk7CiAgICAgIGlmIChpc0RvdExvdHRpZShkYXRhKSkgewogICAgICAgIHJldHVybiBkYXRhOwogICAgICB9CiAgICAgIHJldHVybiBuZXcgVGV4dERlY29kZXIoKS5kZWNvZGUoZGF0YSk7CiAgICB9CiAgICBfbG9hZEZyb21EYXRhKGRhdGEpIHsKICAgICAgaWYgKHRoaXMuX2RvdExvdHRpZUNvcmUgPT09IG51bGwpIHJldHVybjsKICAgICAgY29uc3Qgd2lkdGggPSB0aGlzLl9jYW52YXMud2lkdGg7CiAgICAgIGNvbnN0IGhlaWdodCA9IHRoaXMuX2NhbnZhcy5oZWlnaHQ7CiAgICAgIGxldCBsb2FkZWQgPSBmYWxzZTsKICAgICAgaWYgKHR5cGVvZiBkYXRhID09PSAic3RyaW5nIikgewogICAgICAgIGlmICghaXNMb3R0aWUoZGF0YSkpIHsKICAgICAgICAgIHRoaXMuX2Rpc3BhdGNoRXJyb3IoCiAgICAgICAgICAgICJJbnZhbGlkIExvdHRpZSBKU09OIHN0cmluZzogVGhlIHByb3ZpZGVkIHN0cmluZyBkb2VzIG5vdCBjb25mb3JtIHRvIHRoZSBMb3R0aWUgSlNPTiBmb3JtYXQuIgogICAgICAgICAgKTsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgbG9hZGVkID0gdGhpcy5fZG90TG90dGllQ29yZS5sb2FkQW5pbWF0aW9uRGF0YShkYXRhLCB3aWR0aCwgaGVpZ2h0KTsKICAgICAgfSBlbHNlIGlmIChkYXRhIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpIHsKICAgICAgICBpZiAoIWlzRG90TG90dGllKGRhdGEpKSB7CiAgICAgICAgICB0aGlzLl9kaXNwYXRjaEVycm9yKAogICAgICAgICAgICAiSW52YWxpZCBkb3RMb3R0aWUgQXJyYXlCdWZmZXI6IFRoZSBwcm92aWRlZCBBcnJheUJ1ZmZlciBkb2VzIG5vdCBjb25mb3JtIHRvIHRoZSBkb3RMb3R0aWUgZm9ybWF0LiIKICAgICAgICAgICk7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIGxvYWRlZCA9IHRoaXMuX2RvdExvdHRpZUNvcmUubG9hZERvdExvdHRpZURhdGEoZGF0YSwgd2lkdGgsIGhlaWdodCk7CiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGRhdGEgPT09ICJvYmplY3QiKSB7CiAgICAgICAgaWYgKCFpc0xvdHRpZShkYXRhKSkgewogICAgICAgICAgdGhpcy5fZGlzcGF0Y2hFcnJvcigKICAgICAgICAgICAgIkludmFsaWQgTG90dGllIEpTT04gb2JqZWN0OiBUaGUgcHJvdmlkZWQgb2JqZWN0IGRvZXMgbm90IGNvbmZvcm0gdG8gdGhlIExvdHRpZSBKU09OIGZvcm1hdC4iCiAgICAgICAgICApOwogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICBsb2FkZWQgPSB0aGlzLl9kb3RMb3R0aWVDb3JlLmxvYWRBbmltYXRpb25EYXRhKEpTT04uc3RyaW5naWZ5KGRhdGEpLCB3aWR0aCwgaGVpZ2h0KTsKICAgICAgfSBlbHNlIHsKICAgICAgICB0aGlzLl9kaXNwYXRjaEVycm9yKAogICAgICAgICAgYFVuc3VwcG9ydGVkIGRhdGEgdHlwZSBmb3IgYW5pbWF0aW9uIGRhdGEuIEV4cGVjdGVkOiAKICAgICAgICAgIC0gc3RyaW5nIChMb3R0aWUgSlNPTiksCiAgICAgICAgICAtIEFycmF5QnVmZmVyIChkb3RMb3R0aWUpLAogICAgICAgICAgLSBvYmplY3QgKExvdHRpZSBKU09OKS4gCiAgICAgICAgICBSZWNlaXZlZDogJHt0eXBlb2YgZGF0YX1gCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgaWYgKGxvYWRlZCkgewogICAgICAgIHRoaXMuX2V2ZW50TWFuYWdlci5kaXNwYXRjaCh7IHR5cGU6ICJsb2FkIiB9KTsKICAgICAgICBpZiAoSVNfQlJPV1NFUikgewogICAgICAgICAgdGhpcy5yZXNpemUoKTsKICAgICAgICB9CiAgICAgICAgdGhpcy5fZXZlbnRNYW5hZ2VyLmRpc3BhdGNoKHsKICAgICAgICAgIHR5cGU6ICJmcmFtZSIsCiAgICAgICAgICBjdXJyZW50RnJhbWU6IHRoaXMuX2RvdExvdHRpZUNvcmUuY3VycmVudEZyYW1lKCkKICAgICAgICB9KTsKICAgICAgICB0aGlzLl9yZW5kZXIoKTsKICAgICAgICBpZiAodGhpcy5fZG90TG90dGllQ29yZS5jb25maWcoKS5hdXRvcGxheSkgewogICAgICAgICAgdGhpcy5fZG90TG90dGllQ29yZS5wbGF5KCk7CiAgICAgICAgICBpZiAodGhpcy5fZG90TG90dGllQ29yZS5pc1BsYXlpbmcoKSkgewogICAgICAgICAgICB0aGlzLl9ldmVudE1hbmFnZXIuZGlzcGF0Y2goeyB0eXBlOiAicGxheSIgfSk7CiAgICAgICAgICAgIHRoaXMuX2FuaW1hdGlvbkZyYW1lSWQgPSB0aGlzLl9mcmFtZU1hbmFnZXIucmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRoaXMuX2RyYXcuYmluZCh0aGlzKSk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBjb25zb2xlLmVycm9yKCJzb21ldGhpbmcgd2VudCB3cm9uZywgdGhlIGFuaW1hdGlvbiB3YXMgc3VwcG9zZSB0byBhdXRvcGxheSIpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfSBlbHNlIHsKICAgICAgICB0aGlzLl9kaXNwYXRjaEVycm9yKCJGYWlsZWQgdG8gbG9hZCBhbmltYXRpb24gZGF0YSIpOwogICAgICB9CiAgICB9CiAgICBfbG9hZEZyb21TcmMoc3JjKSB7CiAgICAgIHRoaXMuX2ZldGNoRGF0YShzcmMpLnRoZW4oKGRhdGEpID0+IHRoaXMuX2xvYWRGcm9tRGF0YShkYXRhKSkuY2F0Y2goKGVycm9yKSA9PiB0aGlzLl9kaXNwYXRjaEVycm9yKGBGYWlsZWQgdG8gbG9hZCBhbmltYXRpb24gZGF0YSBmcm9tIFVSTDogJHtzcmN9LiAke2Vycm9yfWApKTsKICAgIH0KICAgIGdldCBhY3RpdmVBbmltYXRpb25JZCgpIHsKICAgICAgcmV0dXJuIHRoaXMuX2RvdExvdHRpZUNvcmU/LmFjdGl2ZUFuaW1hdGlvbklkKCk7CiAgICB9CiAgICBnZXQgYWN0aXZlVGhlbWVJZCgpIHsKICAgICAgcmV0dXJuIHRoaXMuX2RvdExvdHRpZUNvcmU/LmFjdGl2ZVRoZW1lSWQoKTsKICAgIH0KICAgIGdldCBsYXlvdXQoKSB7CiAgICAgIGNvbnN0IGxheW91dCA9IHRoaXMuX2RvdExvdHRpZUNvcmU/LmNvbmZpZygpLmxheW91dDsKICAgICAgaWYgKGxheW91dCkgewogICAgICAgIHJldHVybiB7CiAgICAgICAgICBhbGlnbjogW2xheW91dC5hbGlnbi5nZXQoMCksIGxheW91dC5hbGlnbi5nZXQoMSldLAogICAgICAgICAgZml0OiAoKCkgPT4gewogICAgICAgICAgICBzd2l0Y2ggKGxheW91dC5maXQpIHsKICAgICAgICAgICAgICBjYXNlIF9Eb3RMb3R0aWUuX3dhc21Nb2R1bGU/LkZpdC5Db250YWluOgogICAgICAgICAgICAgICAgcmV0dXJuICJjb250YWluIjsKICAgICAgICAgICAgICBjYXNlIF9Eb3RMb3R0aWUuX3dhc21Nb2R1bGU/LkZpdC5Db3ZlcjoKICAgICAgICAgICAgICAgIHJldHVybiAiY292ZXIiOwogICAgICAgICAgICAgIGNhc2UgX0RvdExvdHRpZS5fd2FzbU1vZHVsZT8uRml0LkZpbGw6CiAgICAgICAgICAgICAgICByZXR1cm4gImZpbGwiOwogICAgICAgICAgICAgIGNhc2UgX0RvdExvdHRpZS5fd2FzbU1vZHVsZT8uRml0LkZpdEhlaWdodDoKICAgICAgICAgICAgICAgIHJldHVybiAiZml0LWhlaWdodCI7CiAgICAgICAgICAgICAgY2FzZSBfRG90TG90dGllLl93YXNtTW9kdWxlPy5GaXQuRml0V2lkdGg6CiAgICAgICAgICAgICAgICByZXR1cm4gImZpdC13aWR0aCI7CiAgICAgICAgICAgICAgY2FzZSBfRG90TG90dGllLl93YXNtTW9kdWxlPy5GaXQuTm9uZToKICAgICAgICAgICAgICAgIHJldHVybiAibm9uZSI7CiAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgIHJldHVybiAiY29udGFpbiI7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0pKCkKICAgICAgICB9OwogICAgICB9CiAgICAgIHJldHVybiB2b2lkIDA7CiAgICB9CiAgICBnZXQgbWFya2VyKCkgewogICAgICBjb25zdCBtYXJrZXIgPSB0aGlzLl9kb3RMb3R0aWVDb3JlPy5jb25maWcoKS5tYXJrZXI7CiAgICAgIHJldHVybiBtYXJrZXI7CiAgICB9CiAgICBnZXQgbWFuaWZlc3QoKSB7CiAgICAgIHRyeSB7CiAgICAgICAgY29uc3QgbWFuaWZlc3QgPSB0aGlzLl9kb3RMb3R0aWVDb3JlPy5tYW5pZmVzdFN0cmluZygpOwogICAgICAgIGlmICh0aGlzLl9kb3RMb3R0aWVDb3JlID09PSBudWxsIHx8ICFtYW5pZmVzdCkgcmV0dXJuIG51bGw7CiAgICAgICAgY29uc3QgbWFuaWZlc3RKc29uID0gSlNPTi5wYXJzZShtYW5pZmVzdCk7CiAgICAgICAgaWYgKE9iamVjdC5rZXlzKG1hbmlmZXN0SnNvbikubGVuZ3RoID09PSAwKSByZXR1cm4gbnVsbDsKICAgICAgICByZXR1cm4gbWFuaWZlc3RKc29uOwogICAgICB9IGNhdGNoIChfZXJyKSB7CiAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgIH0KICAgIH0KICAgIGdldCByZW5kZXJDb25maWcoKSB7CiAgICAgIHJldHVybiB0aGlzLl9yZW5kZXJDb25maWc7CiAgICB9CiAgICBnZXQgc2VnbWVudCgpIHsKICAgICAgY29uc3Qgc2VnbWVudCA9IHRoaXMuX2RvdExvdHRpZUNvcmU/LmNvbmZpZygpLnNlZ21lbnQ7CiAgICAgIGlmIChzZWdtZW50ICYmIHNlZ21lbnQuc2l6ZSgpID09PSAyKSB7CiAgICAgICAgcmV0dXJuIFtzZWdtZW50LmdldCgwKSwgc2VnbWVudC5nZXQoMSldOwogICAgICB9CiAgICAgIHJldHVybiB2b2lkIDA7CiAgICB9CiAgICBnZXQgbG9vcCgpIHsKICAgICAgcmV0dXJuIHRoaXMuX2RvdExvdHRpZUNvcmU/LmNvbmZpZygpLmxvb3BBbmltYXRpb24gPz8gZmFsc2U7CiAgICB9CiAgICBnZXQgbW9kZSgpIHsKICAgICAgY29uc3QgbW9kZSA9IHRoaXMuX2RvdExvdHRpZUNvcmU/LmNvbmZpZygpLm1vZGU7CiAgICAgIGlmIChtb2RlID09PSBfRG90TG90dGllLl93YXNtTW9kdWxlPy5Nb2RlLlJldmVyc2UpIHsKICAgICAgICByZXR1cm4gInJldmVyc2UiOwogICAgICB9IGVsc2UgaWYgKG1vZGUgPT09IF9Eb3RMb3R0aWUuX3dhc21Nb2R1bGU/Lk1vZGUuQm91bmNlKSB7CiAgICAgICAgcmV0dXJuICJib3VuY2UiOwogICAgICB9IGVsc2UgaWYgKG1vZGUgPT09IF9Eb3RMb3R0aWUuX3dhc21Nb2R1bGU/Lk1vZGUuUmV2ZXJzZUJvdW5jZSkgewogICAgICAgIHJldHVybiAicmV2ZXJzZS1ib3VuY2UiOwogICAgICB9IGVsc2UgewogICAgICAgIHJldHVybiAiZm9yd2FyZCI7CiAgICAgIH0KICAgIH0KICAgIGdldCBpc0Zyb3plbigpIHsKICAgICAgcmV0dXJuIHRoaXMuX2lzRnJvemVuOwogICAgfQogICAgZ2V0IGJhY2tncm91bmRDb2xvcigpIHsKICAgICAgcmV0dXJuIHRoaXMuX2JhY2tncm91bmRDb2xvciA/PyAiIjsKICAgIH0KICAgIGdldCBhdXRvcGxheSgpIHsKICAgICAgcmV0dXJuIHRoaXMuX2RvdExvdHRpZUNvcmU/LmNvbmZpZygpLmF1dG9wbGF5ID8/IGZhbHNlOwogICAgfQogICAgZ2V0IHVzZUZyYW1lSW50ZXJwb2xhdGlvbigpIHsKICAgICAgcmV0dXJuIHRoaXMuX2RvdExvdHRpZUNvcmU/LmNvbmZpZygpLnVzZUZyYW1lSW50ZXJwb2xhdGlvbiA/PyBmYWxzZTsKICAgIH0KICAgIGdldCBzcGVlZCgpIHsKICAgICAgcmV0dXJuIHRoaXMuX2RvdExvdHRpZUNvcmU/LmNvbmZpZygpLnNwZWVkID8/IDA7CiAgICB9CiAgICBnZXQgaXNSZWFkeSgpIHsKICAgICAgcmV0dXJuIHRoaXMuX2RvdExvdHRpZUNvcmUgIT09IG51bGw7CiAgICB9CiAgICBnZXQgaXNMb2FkZWQoKSB7CiAgICAgIHJldHVybiB0aGlzLl9kb3RMb3R0aWVDb3JlPy5pc0xvYWRlZCgpID8/IGZhbHNlOwogICAgfQogICAgZ2V0IGlzUGxheWluZygpIHsKICAgICAgcmV0dXJuIHRoaXMuX2RvdExvdHRpZUNvcmU/LmlzUGxheWluZygpID8/IGZhbHNlOwogICAgfQogICAgZ2V0IGlzUGF1c2VkKCkgewogICAgICByZXR1cm4gdGhpcy5fZG90TG90dGllQ29yZT8uaXNQYXVzZWQoKSA/PyBmYWxzZTsKICAgIH0KICAgIGdldCBpc1N0b3BwZWQoKSB7CiAgICAgIHJldHVybiB0aGlzLl9kb3RMb3R0aWVDb3JlPy5pc1N0b3BwZWQoKSA/PyBmYWxzZTsKICAgIH0KICAgIGdldCBjdXJyZW50RnJhbWUoKSB7CiAgICAgIHJldHVybiB0aGlzLl9kb3RMb3R0aWVDb3JlPy5jdXJyZW50RnJhbWUoKSA/PyAwOwogICAgfQogICAgZ2V0IGxvb3BDb3VudCgpIHsKICAgICAgcmV0dXJuIHRoaXMuX2RvdExvdHRpZUNvcmU/Lmxvb3BDb3VudCgpID8/IDA7CiAgICB9CiAgICBnZXQgdG90YWxGcmFtZXMoKSB7CiAgICAgIHJldHVybiB0aGlzLl9kb3RMb3R0aWVDb3JlPy50b3RhbEZyYW1lcygpID8/IDA7CiAgICB9CiAgICBnZXQgZHVyYXRpb24oKSB7CiAgICAgIHJldHVybiB0aGlzLl9kb3RMb3R0aWVDb3JlPy5kdXJhdGlvbigpID8/IDA7CiAgICB9CiAgICBnZXQgc2VnbWVudER1cmF0aW9uKCkgewogICAgICByZXR1cm4gdGhpcy5fZG90TG90dGllQ29yZT8uc2VnbWVudER1cmF0aW9uKCkgPz8gMDsKICAgIH0KICAgIGdldCBjYW52YXMoKSB7CiAgICAgIHJldHVybiB0aGlzLl9jYW52YXM7CiAgICB9CiAgICBsb2FkKGNvbmZpZykgewogICAgICBpZiAodGhpcy5fZG90TG90dGllQ29yZSA9PT0gbnVsbCB8fCBfRG90TG90dGllLl93YXNtTW9kdWxlID09PSBudWxsKSByZXR1cm47CiAgICAgIHRoaXMuX2RvdExvdHRpZUNvcmUuc2V0Q29uZmlnKHsKICAgICAgICBhdXRvcGxheTogY29uZmlnLmF1dG9wbGF5ID8/IGZhbHNlLAogICAgICAgIGJhY2tncm91bmRDb2xvcjogMCwKICAgICAgICBsb29wQW5pbWF0aW9uOiBjb25maWcubG9vcCA/PyBmYWxzZSwKICAgICAgICBtb2RlOiBjcmVhdGVDb3JlTW9kZShjb25maWcubW9kZSA/PyAiZm9yd2FyZCIsIF9Eb3RMb3R0aWUuX3dhc21Nb2R1bGUpLAogICAgICAgIHNlZ21lbnQ6IGNyZWF0ZUNvcmVTZWdtZW50KGNvbmZpZy5zZWdtZW50ID8/IFtdLCBfRG90TG90dGllLl93YXNtTW9kdWxlKSwKICAgICAgICBzcGVlZDogY29uZmlnLnNwZWVkID8/IDEsCiAgICAgICAgdXNlRnJhbWVJbnRlcnBvbGF0aW9uOiBjb25maWcudXNlRnJhbWVJbnRlcnBvbGF0aW9uID8/IHRydWUsCiAgICAgICAgbWFya2VyOiBjb25maWcubWFya2VyID8/ICIiLAogICAgICAgIGxheW91dDogY29uZmlnLmxheW91dCA/IHsKICAgICAgICAgIGFsaWduOiBjcmVhdGVDb3JlQWxpZ24oY29uZmlnLmxheW91dC5hbGlnbiwgX0RvdExvdHRpZS5fd2FzbU1vZHVsZSksCiAgICAgICAgICBmaXQ6IGNyZWF0ZUNvcmVGaXQoY29uZmlnLmxheW91dC5maXQsIF9Eb3RMb3R0aWUuX3dhc21Nb2R1bGUpCiAgICAgICAgfSA6IF9Eb3RMb3R0aWUuX3dhc21Nb2R1bGUuY3JlYXRlRGVmYXVsdExheW91dCgpCiAgICAgIH0pOwogICAgICBpZiAoY29uZmlnLmRhdGEpIHsKICAgICAgICB0aGlzLl9sb2FkRnJvbURhdGEoY29uZmlnLmRhdGEpOwogICAgICB9IGVsc2UgaWYgKGNvbmZpZy5zcmMpIHsKICAgICAgICB0aGlzLl9sb2FkRnJvbVNyYyhjb25maWcuc3JjKTsKICAgICAgfQogICAgICB0aGlzLnNldEJhY2tncm91bmRDb2xvcihjb25maWcuYmFja2dyb3VuZENvbG9yID8/ICIiKTsKICAgIH0KICAgIF9yZW5kZXIoKSB7CiAgICAgIGlmICh0aGlzLl9kb3RMb3R0aWVDb3JlID09PSBudWxsIHx8IHRoaXMuX2NvbnRleHQgPT09IG51bGwpIHJldHVybiBmYWxzZTsKICAgICAgY29uc3QgcmVuZGVyZWQgPSB0aGlzLl9kb3RMb3R0aWVDb3JlLnJlbmRlcigpOwogICAgICBpZiAocmVuZGVyZWQpIHsKICAgICAgICBjb25zdCBidWZmZXIgPSB0aGlzLl9kb3RMb3R0aWVDb3JlLmJ1ZmZlcigpOwogICAgICAgIGNvbnN0IGNsYW1wZWRCdWZmZXIgPSBuZXcgVWludDhDbGFtcGVkQXJyYXkoYnVmZmVyLCAwLCB0aGlzLl9jYW52YXMud2lkdGggKiB0aGlzLl9jYW52YXMuaGVpZ2h0ICogNCk7CiAgICAgICAgbGV0IGltYWdlRGF0YSA9IG51bGw7CiAgICAgICAgaWYgKHR5cGVvZiBJbWFnZURhdGEgPT09ICJ1bmRlZmluZWQiKSB7CiAgICAgICAgICBpbWFnZURhdGEgPSB0aGlzLl9jb250ZXh0LmNyZWF0ZUltYWdlRGF0YSh0aGlzLl9jYW52YXMud2lkdGgsIHRoaXMuX2NhbnZhcy5oZWlnaHQpOwogICAgICAgICAgaW1hZ2VEYXRhLmRhdGEuc2V0KGNsYW1wZWRCdWZmZXIpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBpbWFnZURhdGEgPSBuZXcgSW1hZ2VEYXRhKGNsYW1wZWRCdWZmZXIsIHRoaXMuX2NhbnZhcy53aWR0aCwgdGhpcy5fY2FudmFzLmhlaWdodCk7CiAgICAgICAgfQogICAgICAgIHRoaXMuX2NvbnRleHQucHV0SW1hZ2VEYXRhKGltYWdlRGF0YSwgMCwgMCk7CiAgICAgICAgdGhpcy5fZXZlbnRNYW5hZ2VyLmRpc3BhdGNoKHsKICAgICAgICAgIHR5cGU6ICJyZW5kZXIiLAogICAgICAgICAgY3VycmVudEZyYW1lOiB0aGlzLl9kb3RMb3R0aWVDb3JlLmN1cnJlbnRGcmFtZSgpCiAgICAgICAgfSk7CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgIH0KICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogICAgX2RyYXcoKSB7CiAgICAgIGlmICh0aGlzLl9kb3RMb3R0aWVDb3JlID09PSBudWxsIHx8IHRoaXMuX2NvbnRleHQgPT09IG51bGwgfHwgIXRoaXMuX2RvdExvdHRpZUNvcmUuaXNQbGF5aW5nKCkpIHJldHVybjsKICAgICAgY29uc3QgbmV4dEZyYW1lID0gdGhpcy5fZG90TG90dGllQ29yZS5yZXF1ZXN0RnJhbWUoKTsKICAgICAgY29uc3QgdXBkYXRlZCA9IHRoaXMuX2RvdExvdHRpZUNvcmUuc2V0RnJhbWUobmV4dEZyYW1lKTsKICAgICAgaWYgKHVwZGF0ZWQpIHsKICAgICAgICB0aGlzLl9ldmVudE1hbmFnZXIuZGlzcGF0Y2goewogICAgICAgICAgdHlwZTogImZyYW1lIiwKICAgICAgICAgIGN1cnJlbnRGcmFtZTogdGhpcy5fZG90TG90dGllQ29yZS5jdXJyZW50RnJhbWUoKQogICAgICAgIH0pOwogICAgICAgIGNvbnN0IHJlbmRlcmVkID0gdGhpcy5fcmVuZGVyKCk7CiAgICAgICAgaWYgKHJlbmRlcmVkKSB7CiAgICAgICAgICBpZiAodGhpcy5fZG90TG90dGllQ29yZS5pc0NvbXBsZXRlKCkpIHsKICAgICAgICAgICAgaWYgKHRoaXMuX2RvdExvdHRpZUNvcmUuY29uZmlnKCkubG9vcEFuaW1hdGlvbikgewogICAgICAgICAgICAgIHRoaXMuX2V2ZW50TWFuYWdlci5kaXNwYXRjaCh7CiAgICAgICAgICAgICAgICB0eXBlOiAibG9vcCIsCiAgICAgICAgICAgICAgICBsb29wQ291bnQ6IHRoaXMuX2RvdExvdHRpZUNvcmUubG9vcENvdW50KCkKICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICB0aGlzLl9ldmVudE1hbmFnZXIuZGlzcGF0Y2goeyB0eXBlOiAiY29tcGxldGUiIH0pOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICAgIHRoaXMuX2FuaW1hdGlvbkZyYW1lSWQgPSB0aGlzLl9mcmFtZU1hbmFnZXIucmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRoaXMuX2RyYXcuYmluZCh0aGlzKSk7CiAgICB9CiAgICBwbGF5KCkgewogICAgICBpZiAodGhpcy5fZG90TG90dGllQ29yZSA9PT0gbnVsbCkgcmV0dXJuOwogICAgICBjb25zdCBvayA9IHRoaXMuX2RvdExvdHRpZUNvcmUucGxheSgpOwogICAgICBpZiAob2sgfHwgdGhpcy5fZG90TG90dGllQ29yZS5pc1BsYXlpbmcoKSkgewogICAgICAgIHRoaXMuX2lzRnJvemVuID0gZmFsc2U7CiAgICAgICAgdGhpcy5fZXZlbnRNYW5hZ2VyLmRpc3BhdGNoKHsgdHlwZTogInBsYXkiIH0pOwogICAgICAgIHRoaXMuX2FuaW1hdGlvbkZyYW1lSWQgPSB0aGlzLl9mcmFtZU1hbmFnZXIucmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRoaXMuX2RyYXcuYmluZCh0aGlzKSk7CiAgICAgIH0KICAgIH0KICAgIHBhdXNlKCkgewogICAgICBpZiAodGhpcy5fZG90TG90dGllQ29yZSA9PT0gbnVsbCkgcmV0dXJuOwogICAgICBjb25zdCBvayA9IHRoaXMuX2RvdExvdHRpZUNvcmUucGF1c2UoKTsKICAgICAgaWYgKG9rIHx8IHRoaXMuX2RvdExvdHRpZUNvcmUuaXNQYXVzZWQoKSkgewogICAgICAgIHRoaXMuX2V2ZW50TWFuYWdlci5kaXNwYXRjaCh7IHR5cGU6ICJwYXVzZSIgfSk7CiAgICAgIH0KICAgIH0KICAgIHN0b3AoKSB7CiAgICAgIGlmICh0aGlzLl9kb3RMb3R0aWVDb3JlID09PSBudWxsKSByZXR1cm47CiAgICAgIGNvbnN0IG9rID0gdGhpcy5fZG90TG90dGllQ29yZS5zdG9wKCk7CiAgICAgIGlmIChvaykgewogICAgICAgIHRoaXMuX2V2ZW50TWFuYWdlci5kaXNwYXRjaCh7IHR5cGU6ICJmcmFtZSIsIGN1cnJlbnRGcmFtZTogdGhpcy5fZG90TG90dGllQ29yZS5jdXJyZW50RnJhbWUoKSB9KTsKICAgICAgICB0aGlzLl9yZW5kZXIoKTsKICAgICAgICB0aGlzLl9ldmVudE1hbmFnZXIuZGlzcGF0Y2goeyB0eXBlOiAic3RvcCIgfSk7CiAgICAgIH0KICAgIH0KICAgIHNldEZyYW1lKGZyYW1lKSB7CiAgICAgIGlmICh0aGlzLl9kb3RMb3R0aWVDb3JlID09PSBudWxsKSByZXR1cm47CiAgICAgIGlmIChmcmFtZSA8IDAgfHwgZnJhbWUgPiB0aGlzLl9kb3RMb3R0aWVDb3JlLnRvdGFsRnJhbWVzKCkpIHJldHVybjsKICAgICAgY29uc3Qgb2sgPSB0aGlzLl9kb3RMb3R0aWVDb3JlLnNlZWsoZnJhbWUpOwogICAgICBpZiAob2spIHsKICAgICAgICB0aGlzLl9ldmVudE1hbmFnZXIuZGlzcGF0Y2goeyB0eXBlOiAiZnJhbWUiLCBjdXJyZW50RnJhbWU6IHRoaXMuX2RvdExvdHRpZUNvcmUuY3VycmVudEZyYW1lKCkgfSk7CiAgICAgICAgdGhpcy5fcmVuZGVyKCk7CiAgICAgIH0KICAgIH0KICAgIHNldFNwZWVkKHNwZWVkKSB7CiAgICAgIGlmICh0aGlzLl9kb3RMb3R0aWVDb3JlID09PSBudWxsKSByZXR1cm47CiAgICAgIHRoaXMuX2RvdExvdHRpZUNvcmUuc2V0Q29uZmlnKHsKICAgICAgICAuLi50aGlzLl9kb3RMb3R0aWVDb3JlLmNvbmZpZygpLAogICAgICAgIHNwZWVkCiAgICAgIH0pOwogICAgfQogICAgc2V0QmFja2dyb3VuZENvbG9yKGNvbG9yKSB7CiAgICAgIGlmICh0aGlzLl9kb3RMb3R0aWVDb3JlID09PSBudWxsKSByZXR1cm47CiAgICAgIGlmIChJU19CUk9XU0VSICYmIHRoaXMuX2NhbnZhcyBpbnN0YW5jZW9mIEhUTUxDYW52YXNFbGVtZW50KSB7CiAgICAgICAgdGhpcy5fY2FudmFzLnN0eWxlLmJhY2tncm91bmRDb2xvciA9IGNvbG9yOwogICAgICB9IGVsc2UgewogICAgICAgIHRoaXMuX2RvdExvdHRpZUNvcmUuc2V0Q29uZmlnKHsKICAgICAgICAgIC4uLnRoaXMuX2RvdExvdHRpZUNvcmUuY29uZmlnKCksCiAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IGhleFN0cmluZ1RvUkdCQUludChjb2xvcikKICAgICAgICB9KTsKICAgICAgfQogICAgICB0aGlzLl9iYWNrZ3JvdW5kQ29sb3IgPSBjb2xvcjsKICAgIH0KICAgIHNldExvb3AobG9vcCkgewogICAgICBpZiAodGhpcy5fZG90TG90dGllQ29yZSA9PT0gbnVsbCkgcmV0dXJuOwogICAgICB0aGlzLl9kb3RMb3R0aWVDb3JlLnNldENvbmZpZyh7CiAgICAgICAgLi4udGhpcy5fZG90TG90dGllQ29yZS5jb25maWcoKSwKICAgICAgICBsb29wQW5pbWF0aW9uOiBsb29wCiAgICAgIH0pOwogICAgfQogICAgc2V0VXNlRnJhbWVJbnRlcnBvbGF0aW9uKHVzZUZyYW1lSW50ZXJwb2xhdGlvbikgewogICAgICBpZiAodGhpcy5fZG90TG90dGllQ29yZSA9PT0gbnVsbCkgcmV0dXJuOwogICAgICB0aGlzLl9kb3RMb3R0aWVDb3JlLnNldENvbmZpZyh7CiAgICAgICAgLi4udGhpcy5fZG90TG90dGllQ29yZS5jb25maWcoKSwKICAgICAgICB1c2VGcmFtZUludGVycG9sYXRpb24KICAgICAgfSk7CiAgICB9CiAgICBhZGRFdmVudExpc3RlbmVyKHR5cGUsIGxpc3RlbmVyKSB7CiAgICAgIHRoaXMuX2V2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKHR5cGUsIGxpc3RlbmVyKTsKICAgIH0KICAgIHJlbW92ZUV2ZW50TGlzdGVuZXIodHlwZSwgbGlzdGVuZXIpIHsKICAgICAgdGhpcy5fZXZlbnRNYW5hZ2VyLnJlbW92ZUV2ZW50TGlzdGVuZXIodHlwZSwgbGlzdGVuZXIpOwogICAgfQogICAgZGVzdHJveSgpIHsKICAgICAgdGhpcy5fZG90TG90dGllQ29yZT8uZGVsZXRlKCk7CiAgICAgIHRoaXMuX2RvdExvdHRpZUNvcmUgPSBudWxsOwogICAgICB0aGlzLl9jb250ZXh0ID0gbnVsbDsKICAgICAgdGhpcy5fZXZlbnRNYW5hZ2VyLmRpc3BhdGNoKHsKICAgICAgICB0eXBlOiAiZGVzdHJveSIKICAgICAgfSk7CiAgICAgIHRoaXMuX2V2ZW50TWFuYWdlci5yZW1vdmVBbGxFdmVudExpc3RlbmVycygpOwogICAgICB0aGlzLl9jbGVhbnVwU3RhdGVNYWNoaW5lTGlzdGVuZXJzKCk7CiAgICB9CiAgICBmcmVlemUoKSB7CiAgICAgIGlmICh0aGlzLl9hbmltYXRpb25GcmFtZUlkID09PSBudWxsKSByZXR1cm47CiAgICAgIHRoaXMuX2ZyYW1lTWFuYWdlci5jYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLl9hbmltYXRpb25GcmFtZUlkKTsKICAgICAgdGhpcy5fYW5pbWF0aW9uRnJhbWVJZCA9IG51bGw7CiAgICAgIHRoaXMuX2lzRnJvemVuID0gdHJ1ZTsKICAgICAgdGhpcy5fZXZlbnRNYW5hZ2VyLmRpc3BhdGNoKHsgdHlwZTogImZyZWV6ZSIgfSk7CiAgICB9CiAgICB1bmZyZWV6ZSgpIHsKICAgICAgaWYgKHRoaXMuX2FuaW1hdGlvbkZyYW1lSWQgIT09IG51bGwpIHJldHVybjsKICAgICAgdGhpcy5fYW5pbWF0aW9uRnJhbWVJZCA9IHRoaXMuX2ZyYW1lTWFuYWdlci5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGhpcy5fZHJhdy5iaW5kKHRoaXMpKTsKICAgICAgdGhpcy5faXNGcm96ZW4gPSBmYWxzZTsKICAgICAgdGhpcy5fZXZlbnRNYW5hZ2VyLmRpc3BhdGNoKHsgdHlwZTogInVuZnJlZXplIiB9KTsKICAgIH0KICAgIHJlc2l6ZSgpIHsKICAgICAgaWYgKElTX0JST1dTRVIgJiYgdGhpcy5fY2FudmFzIGluc3RhbmNlb2YgSFRNTENhbnZhc0VsZW1lbnQpIHsKICAgICAgICBjb25zdCBkcHIgPSB0aGlzLl9yZW5kZXJDb25maWcuZGV2aWNlUGl4ZWxSYXRpbyB8fCB3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbyB8fCAxOwogICAgICAgIGNvbnN0IHsgaGVpZ2h0OiBjbGllbnRIZWlnaHQsIHdpZHRoOiBjbGllbnRXaWR0aCB9ID0gdGhpcy5fY2FudmFzLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOwogICAgICAgIHRoaXMuX2NhbnZhcy53aWR0aCA9IGNsaWVudFdpZHRoICogZHByOwogICAgICAgIHRoaXMuX2NhbnZhcy5oZWlnaHQgPSBjbGllbnRIZWlnaHQgKiBkcHI7CiAgICAgIH0KICAgICAgY29uc3Qgb2sgPSB0aGlzLl9kb3RMb3R0aWVDb3JlPy5yZXNpemUodGhpcy5fY2FudmFzLndpZHRoLCB0aGlzLl9jYW52YXMuaGVpZ2h0KTsKICAgICAgaWYgKG9rKSB7CiAgICAgICAgdGhpcy5fcmVuZGVyKCk7CiAgICAgIH0KICAgIH0KICAgIHNldFNlZ21lbnQoc3RhcnRGcmFtZSwgZW5kRnJhbWUpIHsKICAgICAgaWYgKHRoaXMuX2RvdExvdHRpZUNvcmUgPT09IG51bGwgfHwgX0RvdExvdHRpZS5fd2FzbU1vZHVsZSA9PT0gbnVsbCkgcmV0dXJuOwogICAgICB0aGlzLl9kb3RMb3R0aWVDb3JlLnNldENvbmZpZyh7CiAgICAgICAgLi4udGhpcy5fZG90TG90dGllQ29yZS5jb25maWcoKSwKICAgICAgICBzZWdtZW50OiBjcmVhdGVDb3JlU2VnbWVudChbc3RhcnRGcmFtZSwgZW5kRnJhbWVdLCBfRG90TG90dGllLl93YXNtTW9kdWxlKQogICAgICB9KTsKICAgIH0KICAgIHNldE1vZGUobW9kZSkgewogICAgICBpZiAodGhpcy5fZG90TG90dGllQ29yZSA9PT0gbnVsbCB8fCBfRG90TG90dGllLl93YXNtTW9kdWxlID09PSBudWxsKSByZXR1cm47CiAgICAgIHRoaXMuX2RvdExvdHRpZUNvcmUuc2V0Q29uZmlnKHsKICAgICAgICAuLi50aGlzLl9kb3RMb3R0aWVDb3JlLmNvbmZpZygpLAogICAgICAgIG1vZGU6IGNyZWF0ZUNvcmVNb2RlKG1vZGUsIF9Eb3RMb3R0aWUuX3dhc21Nb2R1bGUpCiAgICAgIH0pOwogICAgfQogICAgc2V0UmVuZGVyQ29uZmlnKGNvbmZpZykgewogICAgICB0aGlzLl9yZW5kZXJDb25maWcgPSBjb25maWc7CiAgICB9CiAgICBsb2FkQW5pbWF0aW9uKGFuaW1hdGlvbklkKSB7CiAgICAgIGlmICh0aGlzLl9kb3RMb3R0aWVDb3JlID09PSBudWxsIHx8IHRoaXMuX2RvdExvdHRpZUNvcmUuYWN0aXZlQW5pbWF0aW9uSWQoKSA9PT0gYW5pbWF0aW9uSWQpIHJldHVybjsKICAgICAgY29uc3QgbG9hZGVkID0gdGhpcy5fZG90TG90dGllQ29yZS5sb2FkQW5pbWF0aW9uKGFuaW1hdGlvbklkLCB0aGlzLl9jYW52YXMud2lkdGgsIHRoaXMuX2NhbnZhcy5oZWlnaHQpOwogICAgICBpZiAobG9hZGVkKSB7CiAgICAgICAgdGhpcy5fZXZlbnRNYW5hZ2VyLmRpc3BhdGNoKHsgdHlwZTogImxvYWQiIH0pOwogICAgICAgIHRoaXMucmVzaXplKCk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdGhpcy5fZXZlbnRNYW5hZ2VyLmRpc3BhdGNoKHsKICAgICAgICAgIHR5cGU6ICJsb2FkRXJyb3IiLAogICAgICAgICAgZXJyb3I6IG5ldyBFcnJvcihgRmFpbGVkIHRvIGFuaW1hdGlvbiA6JHthbmltYXRpb25JZH1gKQogICAgICAgIH0pOwogICAgICB9CiAgICB9CiAgICBzZXRNYXJrZXIobWFya2VyKSB7CiAgICAgIGlmICh0aGlzLl9kb3RMb3R0aWVDb3JlID09PSBudWxsKSByZXR1cm47CiAgICAgIHRoaXMuX2RvdExvdHRpZUNvcmUuc2V0Q29uZmlnKHsKICAgICAgICAuLi50aGlzLl9kb3RMb3R0aWVDb3JlLmNvbmZpZygpLAogICAgICAgIG1hcmtlcgogICAgICB9KTsKICAgIH0KICAgIG1hcmtlcnMoKSB7CiAgICAgIGNvbnN0IG1hcmtlcnMgPSB0aGlzLl9kb3RMb3R0aWVDb3JlPy5tYXJrZXJzKCk7CiAgICAgIGlmIChtYXJrZXJzKSB7CiAgICAgICAgY29uc3QgcmVzdWx0ID0gW107CiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtYXJrZXJzLnNpemUoKTsgaSArPSAxKSB7CiAgICAgICAgICBjb25zdCBtYXJrZXIgPSBtYXJrZXJzLmdldChpKTsKICAgICAgICAgIHJlc3VsdC5wdXNoKHsKICAgICAgICAgICAgbmFtZTogbWFya2VyLm5hbWUsCiAgICAgICAgICAgIHRpbWU6IG1hcmtlci50aW1lLAogICAgICAgICAgICBkdXJhdGlvbjogbWFya2VyLmR1cmF0aW9uCiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgfQogICAgICByZXR1cm4gW107CiAgICB9CiAgICBsb2FkVGhlbWUodGhlbWVJZCkgewogICAgICBpZiAodGhpcy5fZG90TG90dGllQ29yZSA9PT0gbnVsbCkgcmV0dXJuIGZhbHNlOwogICAgICBjb25zdCBsb2FkZWQgPSB0aGlzLl9kb3RMb3R0aWVDb3JlLmxvYWRUaGVtZSh0aGVtZUlkKTsKICAgICAgdGhpcy5fcmVuZGVyKCk7CiAgICAgIHJldHVybiBsb2FkZWQ7CiAgICB9CiAgICBsb2FkVGhlbWVEYXRhKHRoZW1lRGF0YSkgewogICAgICBpZiAodGhpcy5fZG90TG90dGllQ29yZSA9PT0gbnVsbCkgcmV0dXJuIGZhbHNlOwogICAgICBjb25zdCBsb2FkZWQgPSB0aGlzLl9kb3RMb3R0aWVDb3JlLmxvYWRUaGVtZURhdGEodGhlbWVEYXRhKTsKICAgICAgdGhpcy5fcmVuZGVyKCk7CiAgICAgIHJldHVybiBsb2FkZWQ7CiAgICB9CiAgICBzZXRMYXlvdXQobGF5b3V0KSB7CiAgICAgIGlmICh0aGlzLl9kb3RMb3R0aWVDb3JlID09PSBudWxsIHx8IF9Eb3RMb3R0aWUuX3dhc21Nb2R1bGUgPT09IG51bGwpIHJldHVybjsKICAgICAgdGhpcy5fZG90TG90dGllQ29yZS5zZXRDb25maWcoewogICAgICAgIC4uLnRoaXMuX2RvdExvdHRpZUNvcmUuY29uZmlnKCksCiAgICAgICAgbGF5b3V0OiB7CiAgICAgICAgICBhbGlnbjogY3JlYXRlQ29yZUFsaWduKGxheW91dC5hbGlnbiwgX0RvdExvdHRpZS5fd2FzbU1vZHVsZSksCiAgICAgICAgICBmaXQ6IGNyZWF0ZUNvcmVGaXQobGF5b3V0LmZpdCwgX0RvdExvdHRpZS5fd2FzbU1vZHVsZSkKICAgICAgICB9CiAgICAgIH0pOwogICAgfQogICAgc2V0Vmlld3BvcnQoeCwgeSwgd2lkdGgsIGhlaWdodCkgewogICAgICBpZiAodGhpcy5fZG90TG90dGllQ29yZSA9PT0gbnVsbCkgcmV0dXJuIGZhbHNlOwogICAgICByZXR1cm4gdGhpcy5fZG90TG90dGllQ29yZS5zZXRWaWV3cG9ydCh4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKICAgIH0KICAgIHN0YXRpYyBzZXRXYXNtVXJsKHVybCkgewogICAgICBEb3RMb3R0aWVXYXNtTG9hZGVyLnNldFdhc21VcmwodXJsKTsKICAgIH0KICAgIGxvYWRTdGF0ZU1hY2hpbmUoc3RhdGVNYWNoaW5lSWQpIHsKICAgICAgcmV0dXJuIHRoaXMuX2RvdExvdHRpZUNvcmU/LmxvYWRTdGF0ZU1hY2hpbmUoc3RhdGVNYWNoaW5lSWQpID8/IGZhbHNlOwogICAgfQogICAgc3RhcnRTdGF0ZU1hY2hpbmUoKSB7CiAgICAgIGNvbnN0IHN0YXJ0ZWQgPSB0aGlzLl9kb3RMb3R0aWVDb3JlPy5zdGFydFN0YXRlTWFjaGluZSgpID8/IGZhbHNlOwogICAgICBpZiAoc3RhcnRlZCkgewogICAgICAgIHRoaXMuX3NldHVwU3RhdGVNYWNoaW5lTGlzdGVuZXJzKCk7CiAgICAgIH0KICAgICAgcmV0dXJuIHN0YXJ0ZWQ7CiAgICB9CiAgICBzdG9wU3RhdGVNYWNoaW5lKCkgewogICAgICBjb25zdCBzdG9wcGVkID0gdGhpcy5fZG90TG90dGllQ29yZT8uc3RvcFN0YXRlTWFjaGluZSgpID8/IGZhbHNlOwogICAgICBpZiAoc3RvcHBlZCkgewogICAgICAgIHRoaXMuX2NsZWFudXBTdGF0ZU1hY2hpbmVMaXN0ZW5lcnMoKTsKICAgICAgfQogICAgICByZXR1cm4gc3RvcHBlZDsKICAgIH0KICAgIF9nZXRQb2ludGVyUG9zaXRpb24oZXZlbnQpIHsKICAgICAgY29uc3QgcmVjdCA9IHRoaXMuX2NhbnZhcy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKICAgICAgY29uc3Qgc2NhbGVYID0gdGhpcy5fY2FudmFzLndpZHRoIC8gcmVjdC53aWR0aDsKICAgICAgY29uc3Qgc2NhbGVZID0gdGhpcy5fY2FudmFzLmhlaWdodCAvIHJlY3QuaGVpZ2h0OwogICAgICBjb25zdCBkZXZpY2VQaXhlbFJhdGlvID0gdGhpcy5fcmVuZGVyQ29uZmlnLmRldmljZVBpeGVsUmF0aW8gfHwgd2luZG93LmRldmljZVBpeGVsUmF0aW8gfHwgMTsKICAgICAgY29uc3QgeCA9IChldmVudC5jbGllbnRYIC0gcmVjdC5sZWZ0KSAqIHNjYWxlWCAvIGRldmljZVBpeGVsUmF0aW87CiAgICAgIGNvbnN0IHkgPSAoZXZlbnQuY2xpZW50WSAtIHJlY3QudG9wKSAqIHNjYWxlWSAvIGRldmljZVBpeGVsUmF0aW87CiAgICAgIHJldHVybiB7CiAgICAgICAgeCwKICAgICAgICB5CiAgICAgIH07CiAgICB9CiAgICBfb25Qb2ludGVyVXAoZXZlbnQpIHsKICAgICAgY29uc3QgeyB4LCB5IH0gPSB0aGlzLl9nZXRQb2ludGVyUG9zaXRpb24oZXZlbnQpOwogICAgICB0aGlzLnBvc3RTdGF0ZU1hY2hpbmVFdmVudChgT25Qb2ludGVyVXA6ICR7eH0gJHt5fWApOwogICAgfQogICAgX29uUG9pbnRlckRvd24oZXZlbnQpIHsKICAgICAgY29uc3QgeyB4LCB5IH0gPSB0aGlzLl9nZXRQb2ludGVyUG9zaXRpb24oZXZlbnQpOwogICAgICB0aGlzLnBvc3RTdGF0ZU1hY2hpbmVFdmVudChgT25Qb2ludGVyRG93bjogJHt4fSAke3l9YCk7CiAgICB9CiAgICBfb25Qb2ludGVyTW92ZShldmVudCkgewogICAgICBjb25zdCB7IHgsIHkgfSA9IHRoaXMuX2dldFBvaW50ZXJQb3NpdGlvbihldmVudCk7CiAgICAgIHRoaXMucG9zdFN0YXRlTWFjaGluZUV2ZW50KGBPblBvaW50ZXJNb3ZlOiAke3h9ICR7eX1gKTsKICAgIH0KICAgIF9vblBvaW50ZXJFbnRlcihldmVudCkgewogICAgICBjb25zdCB7IHgsIHkgfSA9IHRoaXMuX2dldFBvaW50ZXJQb3NpdGlvbihldmVudCk7CiAgICAgIHRoaXMucG9zdFN0YXRlTWFjaGluZUV2ZW50KGBPblBvaW50ZXJFbnRlcjogJHt4fSAke3l9YCk7CiAgICB9CiAgICBfb25Qb2ludGVyTGVhdmUoZXZlbnQpIHsKICAgICAgY29uc3QgeyB4LCB5IH0gPSB0aGlzLl9nZXRQb2ludGVyUG9zaXRpb24oZXZlbnQpOwogICAgICB0aGlzLnBvc3RTdGF0ZU1hY2hpbmVFdmVudChgT25Qb2ludGVyRXhpdDogJHt4fSAke3l9YCk7CiAgICB9CiAgICBfb25Db21wbGV0ZSgpIHsKICAgICAgdGhpcy5wb3N0U3RhdGVNYWNoaW5lRXZlbnQoIk9uQ29tcGxldGUiKTsKICAgIH0KICAgIC8qKgogICAgICogQGV4cGVyaW1lbnRhbAogICAgICogQHBhcmFtIGV2ZW50IC0gVGhlIGV2ZW50IHRvIGJlIHBvc3RlZCB0byB0aGUgc3RhdGUgbWFjaGluZQogICAgICogQHJldHVybnMgYm9vbGVhbiAtIHRydWUgaWYgdGhlIGV2ZW50IHdhcyBwb3N0ZWQgc3VjY2Vzc2Z1bGx5LCBmYWxzZSBvdGhlcndpc2UKICAgICAqLwogICAgcG9zdFN0YXRlTWFjaGluZUV2ZW50KGV2ZW50KSB7CiAgICAgIGNvbnN0IHJ0ID0gdGhpcy5fZG90TG90dGllQ29yZT8ucG9zdEV2ZW50UGF5bG9hZChldmVudCkgPz8gMTsKICAgICAgaWYgKHJ0ID09PSAyKSB7CiAgICAgICAgdGhpcy5wbGF5KCk7CiAgICAgIH0gZWxzZSBpZiAocnQgPT09IDMpIHsKICAgICAgICB0aGlzLnBhdXNlKCk7CiAgICAgIH0gZWxzZSBpZiAocnQgPT09IDQpIHsKICAgICAgICB0aGlzLl9yZW5kZXIoKTsKICAgICAgfQogICAgICByZXR1cm4gcnQ7CiAgICB9CiAgICBnZXRTdGF0ZU1hY2hpbmVMaXN0ZW5lcnMoKSB7CiAgICAgIGlmICghdGhpcy5fZG90TG90dGllQ29yZSkgcmV0dXJuIFtdOwogICAgICBjb25zdCBsaXN0ZW5lcnNWZWN0b3IgPSB0aGlzLl9kb3RMb3R0aWVDb3JlLnN0YXRlTWFjaGluZUZyYW1ld29ya1NldHVwKCk7CiAgICAgIGNvbnN0IGxpc3RlbmVycyA9IFtdOwogICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxpc3RlbmVyc1ZlY3Rvci5zaXplKCk7IGkgKz0gMSkgewogICAgICAgIGxpc3RlbmVycy5wdXNoKGxpc3RlbmVyc1ZlY3Rvci5nZXQoaSkpOwogICAgICB9CiAgICAgIHJldHVybiBsaXN0ZW5lcnM7CiAgICB9CiAgICBfc2V0dXBTdGF0ZU1hY2hpbmVMaXN0ZW5lcnMoKSB7CiAgICAgIGlmIChJU19CUk9XU0VSICYmIHRoaXMuX2NhbnZhcyBpbnN0YW5jZW9mIEhUTUxDYW52YXNFbGVtZW50ICYmIHRoaXMuX2RvdExvdHRpZUNvcmUgIT09IG51bGwgJiYgdGhpcy5pc0xvYWRlZCkgewogICAgICAgIGNvbnN0IGxpc3RlbmVycyA9IHRoaXMuZ2V0U3RhdGVNYWNoaW5lTGlzdGVuZXJzKCk7CiAgICAgICAgaWYgKGxpc3RlbmVycy5pbmNsdWRlcygiUG9pbnRlclVwIikpIHsKICAgICAgICAgIHRoaXMuX2NhbnZhcy5hZGRFdmVudExpc3RlbmVyKCJwb2ludGVydXAiLCB0aGlzLl9wb2ludGVyVXBNZXRob2QpOwogICAgICAgIH0KICAgICAgICBpZiAobGlzdGVuZXJzLmluY2x1ZGVzKCJQb2ludGVyRG93biIpKSB7CiAgICAgICAgICB0aGlzLl9jYW52YXMuYWRkRXZlbnRMaXN0ZW5lcigicG9pbnRlcmRvd24iLCB0aGlzLl9wb2ludGVyRG93bk1ldGhvZCk7CiAgICAgICAgfQogICAgICAgIGlmIChsaXN0ZW5lcnMuaW5jbHVkZXMoIlBvaW50ZXJNb3ZlIikpIHsKICAgICAgICAgIHRoaXMuX2NhbnZhcy5hZGRFdmVudExpc3RlbmVyKCJwb2ludGVybW92ZSIsIHRoaXMuX3BvaW50ZXJNb3ZlTWV0aG9kKTsKICAgICAgICB9CiAgICAgICAgaWYgKGxpc3RlbmVycy5pbmNsdWRlcygiUG9pbnRlckVudGVyIikpIHsKICAgICAgICAgIHRoaXMuX2NhbnZhcy5hZGRFdmVudExpc3RlbmVyKCJwb2ludGVyZW50ZXIiLCB0aGlzLl9wb2ludGVyRW50ZXJNZXRob2QpOwogICAgICAgIH0KICAgICAgICBpZiAobGlzdGVuZXJzLmluY2x1ZGVzKCJQb2ludGVyRXhpdCIpKSB7CiAgICAgICAgICB0aGlzLl9jYW52YXMuYWRkRXZlbnRMaXN0ZW5lcigicG9pbnRlcmxlYXZlIiwgdGhpcy5fcG9pbnRlckV4aXRNZXRob2QpOwogICAgICAgIH0KICAgICAgICBpZiAobGlzdGVuZXJzLmluY2x1ZGVzKCJDb21wbGV0ZSIpKSB7CiAgICAgICAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoImNvbXBsZXRlIiwgdGhpcy5fb25Db21wbGV0ZU1ldGhvZCk7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICBfY2xlYW51cFN0YXRlTWFjaGluZUxpc3RlbmVycygpIHsKICAgICAgaWYgKElTX0JST1dTRVIgJiYgdGhpcy5fY2FudmFzIGluc3RhbmNlb2YgSFRNTENhbnZhc0VsZW1lbnQpIHsKICAgICAgICB0aGlzLl9jYW52YXMucmVtb3ZlRXZlbnRMaXN0ZW5lcigicG9pbnRlcnVwIiwgdGhpcy5fcG9pbnRlclVwTWV0aG9kKTsKICAgICAgICB0aGlzLl9jYW52YXMucmVtb3ZlRXZlbnRMaXN0ZW5lcigicG9pbnRlcmRvd24iLCB0aGlzLl9wb2ludGVyRG93bk1ldGhvZCk7CiAgICAgICAgdGhpcy5fY2FudmFzLnJlbW92ZUV2ZW50TGlzdGVuZXIoInBvaW50ZXJtb3ZlIiwgdGhpcy5fcG9pbnRlck1vdmVNZXRob2QpOwogICAgICAgIHRoaXMuX2NhbnZhcy5yZW1vdmVFdmVudExpc3RlbmVyKCJwb2ludGVyZW50ZXIiLCB0aGlzLl9wb2ludGVyRW50ZXJNZXRob2QpOwogICAgICAgIHRoaXMuX2NhbnZhcy5yZW1vdmVFdmVudExpc3RlbmVyKCJwb2ludGVybGVhdmUiLCB0aGlzLl9wb2ludGVyRXhpdE1ldGhvZCk7CiAgICAgICAgdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKCJjb21wbGV0ZSIsIHRoaXMuX29uQ29tcGxldGVNZXRob2QpOwogICAgICB9CiAgICB9CiAgICBsb2FkU3RhdGVNYWNoaW5lRGF0YShzdGF0ZU1hY2hpbmVEYXRhKSB7CiAgICAgIHJldHVybiB0aGlzLl9kb3RMb3R0aWVDb3JlPy5sb2FkU3RhdGVNYWNoaW5lRGF0YShzdGF0ZU1hY2hpbmVEYXRhKSA/PyBmYWxzZTsKICAgIH0KICAgIGFuaW1hdGlvblNpemUoKSB7CiAgICAgIGNvbnN0IHdpZHRoID0gdGhpcy5fZG90TG90dGllQ29yZT8uYW5pbWF0aW9uU2l6ZSgpLmdldCgwKSA/PyAwOwogICAgICBjb25zdCBoZWlnaHQgPSB0aGlzLl9kb3RMb3R0aWVDb3JlPy5hbmltYXRpb25TaXplKCkuZ2V0KDEpID8/IDA7CiAgICAgIHJldHVybiB7CiAgICAgICAgd2lkdGgsCiAgICAgICAgaGVpZ2h0CiAgICAgIH07CiAgICB9CiAgICBzZXRTdGF0ZU1hY2hpbmVCb29sZWFuQ29udGV4dChuYW1lLCB2YWx1ZSkgewogICAgICByZXR1cm4gdGhpcy5fZG90TG90dGllQ29yZT8uc2V0U3RhdGVNYWNoaW5lQm9vbGVhbkNvbnRleHQobmFtZSwgdmFsdWUpID8/IGZhbHNlOwogICAgfQogICAgc2V0U3RhdGVNYWNoaW5lTnVtZXJpY0NvbnRleHQobmFtZSwgdmFsdWUpIHsKICAgICAgcmV0dXJuIHRoaXMuX2RvdExvdHRpZUNvcmU/LnNldFN0YXRlTWFjaGluZU51bWVyaWNDb250ZXh0KG5hbWUsIHZhbHVlKSA/PyBmYWxzZTsKICAgIH0KICAgIHNldFN0YXRlTWFjaGluZVN0cmluZ0NvbnRleHQobmFtZSwgdmFsdWUpIHsKICAgICAgcmV0dXJuIHRoaXMuX2RvdExvdHRpZUNvcmU/LnNldFN0YXRlTWFjaGluZVN0cmluZ0NvbnRleHQobmFtZSwgdmFsdWUpID8/IGZhbHNlOwogICAgfQogIH07CiAgX19wdWJsaWNGaWVsZChfRG90TG90dGllLCAiX3dhc21Nb2R1bGUiLCBudWxsKTsKICB2YXIgRG90TG90dGllID0gX0RvdExvdHRpZTsKCiAgLy8gc3JjL3dvcmtlci9kb3Rsb3R0aWUud29ya2VyLnRzCiAgdmFyIGluc3RhbmNlc01hcCA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7CiAgdmFyIGV2ZW50SGFuZGxlck1hcCA9IHsKICAgIHJlYWR5OiAoaW5zdGFuY2VJZCkgPT4gKGV2ZW50KSA9PiB7CiAgICAgIGNvbnN0IHJlc3BvbnNlID0gewogICAgICAgIGlkOiAiIiwKICAgICAgICBtZXRob2Q6ICJvblJlYWR5IiwKICAgICAgICByZXN1bHQ6IHsKICAgICAgICAgIGluc3RhbmNlSWQsCiAgICAgICAgICBldmVudAogICAgICAgIH0KICAgICAgfTsKICAgICAgc2VsZi5wb3N0TWVzc2FnZShyZXNwb25zZSk7CiAgICB9LAogICAgY29tcGxldGU6IChpbnN0YW5jZUlkKSA9PiAoZXZlbnQpID0+IHsKICAgICAgY29uc3QgcmVzcG9uc2UgPSB7CiAgICAgICAgaWQ6ICIiLAogICAgICAgIG1ldGhvZDogIm9uQ29tcGxldGUiLAogICAgICAgIHJlc3VsdDogewogICAgICAgICAgaW5zdGFuY2VJZCwKICAgICAgICAgIGV2ZW50CiAgICAgICAgfQogICAgICB9OwogICAgICBzZWxmLnBvc3RNZXNzYWdlKHJlc3BvbnNlKTsKICAgIH0sCiAgICBsb2FkOiAoaW5zdGFuY2VJZCkgPT4gKGV2ZW50KSA9PiB7CiAgICAgIGNvbnN0IGxvYWRFdmVudCA9IGV2ZW50OwogICAgICBjb25zdCByZXNwb25zZSA9IHsKICAgICAgICBpZDogIiIsCiAgICAgICAgbWV0aG9kOiAib25Mb2FkIiwKICAgICAgICByZXN1bHQ6IHsKICAgICAgICAgIGluc3RhbmNlSWQsCiAgICAgICAgICBldmVudDogbG9hZEV2ZW50CiAgICAgICAgfQogICAgICB9OwogICAgICBzZWxmLnBvc3RNZXNzYWdlKHJlc3BvbnNlKTsKICAgIH0sCiAgICBsb2FkRXJyb3I6IChpbnN0YW5jZUlkKSA9PiAoZXZlbnQpID0+IHsKICAgICAgY29uc3QgbG9hZEVycm9yRXZlbnQgPSBldmVudDsKICAgICAgY29uc3QgcmVzcG9uc2UgPSB7CiAgICAgICAgaWQ6ICIiLAogICAgICAgIG1ldGhvZDogIm9uTG9hZEVycm9yIiwKICAgICAgICByZXN1bHQ6IHsKICAgICAgICAgIGluc3RhbmNlSWQsCiAgICAgICAgICBldmVudDogbG9hZEVycm9yRXZlbnQKICAgICAgICB9CiAgICAgIH07CiAgICAgIHNlbGYucG9zdE1lc3NhZ2UocmVzcG9uc2UpOwogICAgfSwKICAgIGxvb3A6IChpbnN0YW5jZUlkKSA9PiAoZXZlbnQpID0+IHsKICAgICAgY29uc3QgbG9vcEV2ZW50ID0gZXZlbnQ7CiAgICAgIGNvbnN0IHJlc3BvbnNlID0gewogICAgICAgIGlkOiAiIiwKICAgICAgICBtZXRob2Q6ICJvbkxvb3AiLAogICAgICAgIHJlc3VsdDogewogICAgICAgICAgaW5zdGFuY2VJZCwKICAgICAgICAgIGV2ZW50OiBsb29wRXZlbnQKICAgICAgICB9CiAgICAgIH07CiAgICAgIHNlbGYucG9zdE1lc3NhZ2UocmVzcG9uc2UpOwogICAgfSwKICAgIHBsYXk6IChpbnN0YW5jZUlkKSA9PiAoZXZlbnQpID0+IHsKICAgICAgY29uc3QgcGxheUV2ZW50ID0gZXZlbnQ7CiAgICAgIGNvbnN0IHJlc3BvbnNlID0gewogICAgICAgIGlkOiAiIiwKICAgICAgICBtZXRob2Q6ICJvblBsYXkiLAogICAgICAgIHJlc3VsdDogewogICAgICAgICAgaW5zdGFuY2VJZCwKICAgICAgICAgIGV2ZW50OiBwbGF5RXZlbnQKICAgICAgICB9CiAgICAgIH07CiAgICAgIHNlbGYucG9zdE1lc3NhZ2UocmVzcG9uc2UpOwogICAgfSwKICAgIHBhdXNlOiAoaW5zdGFuY2VJZCkgPT4gKGV2ZW50KSA9PiB7CiAgICAgIGNvbnN0IHBhdXNlRXZlbnQgPSBldmVudDsKICAgICAgY29uc3QgcmVzcG9uc2UgPSB7CiAgICAgICAgaWQ6ICIiLAogICAgICAgIG1ldGhvZDogIm9uUGF1c2UiLAogICAgICAgIHJlc3VsdDogewogICAgICAgICAgaW5zdGFuY2VJZCwKICAgICAgICAgIGV2ZW50OiBwYXVzZUV2ZW50CiAgICAgICAgfQogICAgICB9OwogICAgICBzZWxmLnBvc3RNZXNzYWdlKHJlc3BvbnNlKTsKICAgIH0sCiAgICBzdG9wOiAoaW5zdGFuY2VJZCkgPT4gKGV2ZW50KSA9PiB7CiAgICAgIGNvbnN0IHN0b3BFdmVudCA9IGV2ZW50OwogICAgICBjb25zdCByZXNwb25zZSA9IHsKICAgICAgICBpZDogIiIsCiAgICAgICAgbWV0aG9kOiAib25TdG9wIiwKICAgICAgICByZXN1bHQ6IHsKICAgICAgICAgIGluc3RhbmNlSWQsCiAgICAgICAgICBldmVudDogc3RvcEV2ZW50CiAgICAgICAgfQogICAgICB9OwogICAgICBzZWxmLnBvc3RNZXNzYWdlKHJlc3BvbnNlKTsKICAgIH0sCiAgICBmcmFtZTogKGluc3RhbmNlSWQpID0+IChldmVudCkgPT4gewogICAgICBjb25zdCBmcmFtZUV2ZW50ID0gZXZlbnQ7CiAgICAgIGNvbnN0IHJlc3BvbnNlID0gewogICAgICAgIGlkOiAiIiwKICAgICAgICBtZXRob2Q6ICJvbkZyYW1lIiwKICAgICAgICByZXN1bHQ6IHsKICAgICAgICAgIGluc3RhbmNlSWQsCiAgICAgICAgICBldmVudDogZnJhbWVFdmVudAogICAgICAgIH0KICAgICAgfTsKICAgICAgc2VsZi5wb3N0TWVzc2FnZShyZXNwb25zZSk7CiAgICB9LAogICAgcmVuZGVyOiAoaW5zdGFuY2VJZCkgPT4gKGV2ZW50KSA9PiB7CiAgICAgIGNvbnN0IHJlbmRlckV2ZW50ID0gZXZlbnQ7CiAgICAgIGNvbnN0IHJlc3BvbnNlID0gewogICAgICAgIGlkOiAiIiwKICAgICAgICBtZXRob2Q6ICJvblJlbmRlciIsCiAgICAgICAgcmVzdWx0OiB7CiAgICAgICAgICBpbnN0YW5jZUlkLAogICAgICAgICAgZXZlbnQ6IHJlbmRlckV2ZW50CiAgICAgICAgfQogICAgICB9OwogICAgICBzZWxmLnBvc3RNZXNzYWdlKHJlc3BvbnNlKTsKICAgIH0sCiAgICBmcmVlemU6IChpbnN0YW5jZUlkKSA9PiAoZXZlbnQpID0+IHsKICAgICAgY29uc3QgZnJlZXplRXZlbnQgPSBldmVudDsKICAgICAgY29uc3QgcmVzcG9uc2UgPSB7CiAgICAgICAgaWQ6ICIiLAogICAgICAgIG1ldGhvZDogIm9uRnJlZXplIiwKICAgICAgICByZXN1bHQ6IHsKICAgICAgICAgIGluc3RhbmNlSWQsCiAgICAgICAgICBldmVudDogZnJlZXplRXZlbnQKICAgICAgICB9CiAgICAgIH07CiAgICAgIHNlbGYucG9zdE1lc3NhZ2UocmVzcG9uc2UpOwogICAgfSwKICAgIHVuZnJlZXplOiAoaW5zdGFuY2VJZCkgPT4gKGV2ZW50KSA9PiB7CiAgICAgIGNvbnN0IHVuZnJlZXplRXZlbnQgPSBldmVudDsKICAgICAgY29uc3QgcmVzcG9uc2UgPSB7CiAgICAgICAgaWQ6ICIiLAogICAgICAgIG1ldGhvZDogIm9uVW5mcmVlemUiLAogICAgICAgIHJlc3VsdDogewogICAgICAgICAgaW5zdGFuY2VJZCwKICAgICAgICAgIGV2ZW50OiB1bmZyZWV6ZUV2ZW50CiAgICAgICAgfQogICAgICB9OwogICAgICBzZWxmLnBvc3RNZXNzYWdlKHJlc3BvbnNlKTsKICAgIH0sCiAgICBkZXN0cm95OiAoaW5zdGFuY2VJZCkgPT4gKGV2ZW50KSA9PiB7CiAgICAgIGNvbnN0IGRlc3Ryb3lFdmVudCA9IGV2ZW50OwogICAgICBjb25zdCByZXNwb25zZSA9IHsKICAgICAgICBpZDogIiIsCiAgICAgICAgbWV0aG9kOiAib25EZXN0cm95IiwKICAgICAgICByZXN1bHQ6IHsKICAgICAgICAgIGluc3RhbmNlSWQsCiAgICAgICAgICBldmVudDogZGVzdHJveUV2ZW50CiAgICAgICAgfQogICAgICB9OwogICAgICBzZWxmLnBvc3RNZXNzYWdlKHJlc3BvbnNlKTsKICAgIH0KICB9OwogIHZhciBjb21tYW5kcyA9IHsKICAgIGdldERvdExvdHRpZUluc3RhbmNlU3RhdGUocmVxdWVzdCkgewogICAgICBjb25zdCBpbnN0YW5jZUlkID0gcmVxdWVzdC5wYXJhbXMuaW5zdGFuY2VJZDsKICAgICAgY29uc3QgaW5zdGFuY2UgPSBpbnN0YW5jZXNNYXAuZ2V0KGluc3RhbmNlSWQpOwogICAgICBpZiAoIWluc3RhbmNlKSB7CiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnN0YW5jZSB3aXRoIGlkICR7aW5zdGFuY2VJZH0gZG9lcyBub3QgZXhpc3QuYCk7CiAgICAgIH0KICAgICAgY29uc3Qgc3RhdGUgPSB7CiAgICAgICAgaXNMb2FkZWQ6IGluc3RhbmNlLmlzTG9hZGVkLAogICAgICAgIGlzUGF1c2VkOiBpbnN0YW5jZS5pc1BhdXNlZCwKICAgICAgICBpc1BsYXlpbmc6IGluc3RhbmNlLmlzUGxheWluZywKICAgICAgICBpc1N0b3BwZWQ6IGluc3RhbmNlLmlzU3RvcHBlZCwKICAgICAgICBpc0Zyb3plbjogaW5zdGFuY2UuaXNGcm96ZW4sCiAgICAgICAgbG9vcDogaW5zdGFuY2UubG9vcCwKICAgICAgICBtb2RlOiBpbnN0YW5jZS5tb2RlLAogICAgICAgIHNwZWVkOiBpbnN0YW5jZS5zcGVlZCwKICAgICAgICBjdXJyZW50RnJhbWU6IGluc3RhbmNlLmN1cnJlbnRGcmFtZSwKICAgICAgICB0b3RhbEZyYW1lczogaW5zdGFuY2UudG90YWxGcmFtZXMsCiAgICAgICAgZHVyYXRpb246IGluc3RhbmNlLmR1cmF0aW9uLAogICAgICAgIHVzZUZyYW1lSW50ZXJwb2xhdGlvbjogaW5zdGFuY2UudXNlRnJhbWVJbnRlcnBvbGF0aW9uLAogICAgICAgIHJlbmRlckNvbmZpZzogaW5zdGFuY2UucmVuZGVyQ29uZmlnLAogICAgICAgIG1hcmtlcjogaW5zdGFuY2UubWFya2VyLAogICAgICAgIGJhY2tncm91bmRDb2xvcjogaW5zdGFuY2UuYmFja2dyb3VuZENvbG9yLAogICAgICAgIG1hcmtlcnM6IGluc3RhbmNlLm1hcmtlcnMoKSwKICAgICAgICBhY3RpdmVBbmltYXRpb25JZDogaW5zdGFuY2UuYWN0aXZlQW5pbWF0aW9uSWQsCiAgICAgICAgYWN0aXZlVGhlbWVJZDogaW5zdGFuY2UuYWN0aXZlVGhlbWVJZCwKICAgICAgICBhdXRvcGxheTogaW5zdGFuY2UuYXV0b3BsYXksCiAgICAgICAgc2VnbWVudDogaW5zdGFuY2Uuc2VnbWVudCwKICAgICAgICBsYXlvdXQ6IGluc3RhbmNlLmxheW91dCwKICAgICAgICBzZWdtZW50RHVyYXRpb246IGluc3RhbmNlLnNlZ21lbnREdXJhdGlvbiwKICAgICAgICBpc1JlYWR5OiBpbnN0YW5jZS5pc1JlYWR5LAogICAgICAgIG1hbmlmZXN0OiBpbnN0YW5jZS5tYW5pZmVzdAogICAgICB9OwogICAgICByZXR1cm4gewogICAgICAgIHN0YXRlCiAgICAgIH07CiAgICB9LAogICAgc2V0TGF5b3V0KHJlcXVlc3QpIHsKICAgICAgY29uc3QgaW5zdGFuY2VJZCA9IHJlcXVlc3QucGFyYW1zLmluc3RhbmNlSWQ7CiAgICAgIGNvbnN0IGxheW91dCA9IHJlcXVlc3QucGFyYW1zLmxheW91dDsKICAgICAgY29uc3QgaW5zdGFuY2UgPSBpbnN0YW5jZXNNYXAuZ2V0KGluc3RhbmNlSWQpOwogICAgICBpZiAoIWluc3RhbmNlKSB7CiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnN0YW5jZSB3aXRoIGlkICR7aW5zdGFuY2VJZH0gZG9lcyBub3QgZXhpc3QuYCk7CiAgICAgIH0KICAgICAgaW5zdGFuY2Uuc2V0TGF5b3V0KGxheW91dCk7CiAgICAgIHJldHVybiB7CiAgICAgICAgc3VjY2VzczogdHJ1ZQogICAgICB9OwogICAgfSwKICAgIGdldFN0YXRlTWFjaGluZUxpc3RlbmVycyhyZXF1ZXN0KSB7CiAgICAgIGNvbnN0IGluc3RhbmNlSWQgPSByZXF1ZXN0LnBhcmFtcy5pbnN0YW5jZUlkOwogICAgICBjb25zdCBpbnN0YW5jZSA9IGluc3RhbmNlc01hcC5nZXQoaW5zdGFuY2VJZCk7CiAgICAgIGlmICghaW5zdGFuY2UpIHsKICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEluc3RhbmNlIHdpdGggaWQgJHtpbnN0YW5jZUlkfSBkb2VzIG5vdCBleGlzdC5gKTsKICAgICAgfQogICAgICByZXR1cm4gaW5zdGFuY2UuZ2V0U3RhdGVNYWNoaW5lTGlzdGVuZXJzKCk7CiAgICB9LAogICAgcG9zdFN0YXRlTWFjaGluZUV2ZW50KHJlcXVlc3QpIHsKICAgICAgY29uc3QgaW5zdGFuY2VJZCA9IHJlcXVlc3QucGFyYW1zLmluc3RhbmNlSWQ7CiAgICAgIGNvbnN0IGV2ZW50ID0gcmVxdWVzdC5wYXJhbXMuZXZlbnQ7CiAgICAgIGNvbnN0IGluc3RhbmNlID0gaW5zdGFuY2VzTWFwLmdldChpbnN0YW5jZUlkKTsKICAgICAgaWYgKCFpbnN0YW5jZSkgewogICAgICAgIHRocm93IG5ldyBFcnJvcihgSW5zdGFuY2Ugd2l0aCBpZCAke2luc3RhbmNlSWR9IGRvZXMgbm90IGV4aXN0LmApOwogICAgICB9CiAgICAgIHJldHVybiBpbnN0YW5jZS5wb3N0U3RhdGVNYWNoaW5lRXZlbnQoZXZlbnQpOwogICAgfSwKICAgIHN0YXJ0U3RhdGVNYWNoaW5lKHJlcXVlc3QpIHsKICAgICAgY29uc3QgaW5zdGFuY2VJZCA9IHJlcXVlc3QucGFyYW1zLmluc3RhbmNlSWQ7CiAgICAgIGNvbnN0IGluc3RhbmNlID0gaW5zdGFuY2VzTWFwLmdldChpbnN0YW5jZUlkKTsKICAgICAgaWYgKCFpbnN0YW5jZSkgewogICAgICAgIHRocm93IG5ldyBFcnJvcihgSW5zdGFuY2Ugd2l0aCBpZCAke2luc3RhbmNlSWR9IGRvZXMgbm90IGV4aXN0LmApOwogICAgICB9CiAgICAgIHJldHVybiBpbnN0YW5jZS5zdGFydFN0YXRlTWFjaGluZSgpOwogICAgfSwKICAgIHN0b3BTdGF0ZU1hY2hpbmUocmVxdWVzdCkgewogICAgICBjb25zdCBpbnN0YW5jZUlkID0gcmVxdWVzdC5wYXJhbXMuaW5zdGFuY2VJZDsKICAgICAgY29uc3QgaW5zdGFuY2UgPSBpbnN0YW5jZXNNYXAuZ2V0KGluc3RhbmNlSWQpOwogICAgICBpZiAoIWluc3RhbmNlKSB7CiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnN0YW5jZSB3aXRoIGlkICR7aW5zdGFuY2VJZH0gZG9lcyBub3QgZXhpc3QuYCk7CiAgICAgIH0KICAgICAgcmV0dXJuIGluc3RhbmNlLnN0b3BTdGF0ZU1hY2hpbmUoKTsKICAgIH0sCiAgICBsb2FkU3RhdGVNYWNoaW5lKHJlcXVlc3QpIHsKICAgICAgY29uc3QgaW5zdGFuY2VJZCA9IHJlcXVlc3QucGFyYW1zLmluc3RhbmNlSWQ7CiAgICAgIGNvbnN0IHN0YXRlTWFjaGluZUlkID0gcmVxdWVzdC5wYXJhbXMuc3RhdGVNYWNoaW5lSWQ7CiAgICAgIGNvbnN0IGluc3RhbmNlID0gaW5zdGFuY2VzTWFwLmdldChpbnN0YW5jZUlkKTsKICAgICAgaWYgKCFpbnN0YW5jZSkgewogICAgICAgIHRocm93IG5ldyBFcnJvcihgSW5zdGFuY2Ugd2l0aCBpZCAke2luc3RhbmNlSWR9IGRvZXMgbm90IGV4aXN0LmApOwogICAgICB9CiAgICAgIHJldHVybiBpbnN0YW5jZS5sb2FkU3RhdGVNYWNoaW5lKHN0YXRlTWFjaGluZUlkKTsKICAgIH0sCiAgICBsb2FkU3RhdGVNYWNoaW5lRGF0YShyZXF1ZXN0KSB7CiAgICAgIGNvbnN0IGluc3RhbmNlSWQgPSByZXF1ZXN0LnBhcmFtcy5pbnN0YW5jZUlkOwogICAgICBjb25zdCBzdGF0ZU1hY2hpbmVEYXRhID0gcmVxdWVzdC5wYXJhbXMuc3RhdGVNYWNoaW5lRGF0YTsKICAgICAgY29uc3QgaW5zdGFuY2UgPSBpbnN0YW5jZXNNYXAuZ2V0KGluc3RhbmNlSWQpOwogICAgICBpZiAoIWluc3RhbmNlKSB7CiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnN0YW5jZSB3aXRoIGlkICR7aW5zdGFuY2VJZH0gZG9lcyBub3QgZXhpc3QuYCk7CiAgICAgIH0KICAgICAgcmV0dXJuIGluc3RhbmNlLmxvYWRTdGF0ZU1hY2hpbmVEYXRhKHN0YXRlTWFjaGluZURhdGEpOwogICAgfSwKICAgIGNyZWF0ZTogKHJlcXVlc3QpID0+IHsKICAgICAgY29uc3QgaW5zdGFuY2VJZCA9IHJlcXVlc3QucGFyYW1zLmluc3RhbmNlSWQ7CiAgICAgIGNvbnN0IGNvbmZpZyA9IHJlcXVlc3QucGFyYW1zLmNvbmZpZzsKICAgICAgY29uc3Qgd2lkdGggPSByZXF1ZXN0LnBhcmFtcy53aWR0aDsKICAgICAgY29uc3QgaGVpZ2h0ID0gcmVxdWVzdC5wYXJhbXMuaGVpZ2h0OwogICAgICBpZiAoaW5zdGFuY2VzTWFwLmhhcyhpbnN0YW5jZUlkKSkgewogICAgICAgIHRocm93IG5ldyBFcnJvcihgSW5zdGFuY2Ugd2l0aCBpZCAke2luc3RhbmNlSWR9IGFscmVhZHkgZXhpc3RzLmApOwogICAgICB9CiAgICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IERvdExvdHRpZShjb25maWcpOwogICAgICBpbnN0YW5jZS5jYW52YXMuaGVpZ2h0ID0gaGVpZ2h0OwogICAgICBpbnN0YW5jZS5jYW52YXMud2lkdGggPSB3aWR0aDsKICAgICAgaW5zdGFuY2VzTWFwLnNldChpbnN0YW5jZUlkLCBpbnN0YW5jZSk7CiAgICAgIGNvbnN0IGV2ZW50cyA9IFsKICAgICAgICAiY29tcGxldGUiLAogICAgICAgICJmcmFtZSIsCiAgICAgICAgImxvYWQiLAogICAgICAgICJsb2FkRXJyb3IiLAogICAgICAgICJsb29wIiwKICAgICAgICAicGF1c2UiLAogICAgICAgICJwbGF5IiwKICAgICAgICAic3RvcCIsCiAgICAgICAgImRlc3Ryb3kiLAogICAgICAgICJmcmVlemUiLAogICAgICAgICJ1bmZyZWV6ZSIsCiAgICAgICAgInJlbmRlciIsCiAgICAgICAgInJlYWR5IgogICAgICBdOwogICAgICBldmVudHMuZm9yRWFjaCgoZXZlbnQpID0+IHsKICAgICAgICBpbnN0YW5jZS5hZGRFdmVudExpc3RlbmVyKGV2ZW50LCBldmVudEhhbmRsZXJNYXBbZXZlbnRdKGluc3RhbmNlSWQpKTsKICAgICAgfSk7CiAgICAgIHJldHVybiB7CiAgICAgICAgaW5zdGFuY2VJZAogICAgICB9OwogICAgfSwKICAgIGRlc3Ryb3k6IChyZXF1ZXN0KSA9PiB7CiAgICAgIGNvbnN0IGluc3RhbmNlSWQgPSByZXF1ZXN0LnBhcmFtcy5pbnN0YW5jZUlkOwogICAgICBjb25zdCBpbnN0YW5jZSA9IGluc3RhbmNlc01hcC5nZXQoaW5zdGFuY2VJZCk7CiAgICAgIGlmICghaW5zdGFuY2UpIHJldHVybjsKICAgICAgaW5zdGFuY2UuZGVzdHJveSgpOwogICAgICBpbnN0YW5jZXNNYXAuZGVsZXRlKGluc3RhbmNlSWQpOwogICAgfSwKICAgIGZyZWV6ZTogKHJlcXVlc3QpID0+IHsKICAgICAgY29uc3QgaW5zdGFuY2VJZCA9IHJlcXVlc3QucGFyYW1zLmluc3RhbmNlSWQ7CiAgICAgIGNvbnN0IGluc3RhbmNlID0gaW5zdGFuY2VzTWFwLmdldChpbnN0YW5jZUlkKTsKICAgICAgaWYgKCFpbnN0YW5jZSkgewogICAgICAgIHRocm93IG5ldyBFcnJvcihgSW5zdGFuY2Ugd2l0aCBpZCAke2luc3RhbmNlSWR9IGRvZXMgbm90IGV4aXN0LmApOwogICAgICB9CiAgICAgIGluc3RhbmNlLmZyZWV6ZSgpOwogICAgfSwKICAgIGxvYWQ6IChyZXF1ZXN0KSA9PiB7CiAgICAgIGNvbnN0IGluc3RhbmNlSWQgPSByZXF1ZXN0LnBhcmFtcy5pbnN0YW5jZUlkOwogICAgICBjb25zdCBjb25maWcgPSByZXF1ZXN0LnBhcmFtcy5jb25maWc7CiAgICAgIGNvbnN0IGluc3RhbmNlID0gaW5zdGFuY2VzTWFwLmdldChpbnN0YW5jZUlkKTsKICAgICAgaWYgKCFpbnN0YW5jZSkgewogICAgICAgIHRocm93IG5ldyBFcnJvcihgSW5zdGFuY2Ugd2l0aCBpZCAke2luc3RhbmNlSWR9IGRvZXMgbm90IGV4aXN0LmApOwogICAgICB9CiAgICAgIGluc3RhbmNlLmxvYWQoY29uZmlnKTsKICAgIH0sCiAgICBsb2FkQW5pbWF0aW9uOiAocmVxdWVzdCkgPT4gewogICAgICBjb25zdCBpbnN0YW5jZUlkID0gcmVxdWVzdC5wYXJhbXMuaW5zdGFuY2VJZDsKICAgICAgY29uc3QgYW5pbWF0aW9uSWQgPSByZXF1ZXN0LnBhcmFtcy5hbmltYXRpb25JZDsKICAgICAgY29uc3QgaW5zdGFuY2UgPSBpbnN0YW5jZXNNYXAuZ2V0KGluc3RhbmNlSWQpOwogICAgICBpZiAoIWluc3RhbmNlKSB7CiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnN0YW5jZSB3aXRoIGlkICR7aW5zdGFuY2VJZH0gZG9lcyBub3QgZXhpc3QuYCk7CiAgICAgIH0KICAgICAgaW5zdGFuY2UubG9hZEFuaW1hdGlvbihhbmltYXRpb25JZCk7CiAgICB9LAogICAgbG9hZFRoZW1lOiAocmVxdWVzdCkgPT4gewogICAgICBjb25zdCBpbnN0YW5jZUlkID0gcmVxdWVzdC5wYXJhbXMuaW5zdGFuY2VJZDsKICAgICAgY29uc3QgdGhlbWVJZCA9IHJlcXVlc3QucGFyYW1zLnRoZW1lSWQ7CiAgICAgIGNvbnN0IGluc3RhbmNlID0gaW5zdGFuY2VzTWFwLmdldChpbnN0YW5jZUlkKTsKICAgICAgaWYgKCFpbnN0YW5jZSkgewogICAgICAgIHRocm93IG5ldyBFcnJvcihgSW5zdGFuY2Ugd2l0aCBpZCAke2luc3RhbmNlSWR9IGRvZXMgbm90IGV4aXN0LmApOwogICAgICB9CiAgICAgIHJldHVybiBpbnN0YW5jZS5sb2FkVGhlbWUodGhlbWVJZCk7CiAgICB9LAogICAgbG9hZFRoZW1lRGF0YTogKHJlcXVlc3QpID0+IHsKICAgICAgY29uc3QgaW5zdGFuY2VJZCA9IHJlcXVlc3QucGFyYW1zLmluc3RhbmNlSWQ7CiAgICAgIGNvbnN0IHRoZW1lRGF0YSA9IHJlcXVlc3QucGFyYW1zLnRoZW1lRGF0YTsKICAgICAgY29uc3QgaW5zdGFuY2UgPSBpbnN0YW5jZXNNYXAuZ2V0KGluc3RhbmNlSWQpOwogICAgICBpZiAoIWluc3RhbmNlKSB7CiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnN0YW5jZSB3aXRoIGlkICR7aW5zdGFuY2VJZH0gZG9lcyBub3QgZXhpc3QuYCk7CiAgICAgIH0KICAgICAgcmV0dXJuIGluc3RhbmNlLmxvYWRUaGVtZURhdGEodGhlbWVEYXRhKTsKICAgIH0sCiAgICBwYXVzZTogKHJlcXVlc3QpID0+IHsKICAgICAgY29uc3QgaW5zdGFuY2VJZCA9IHJlcXVlc3QucGFyYW1zLmluc3RhbmNlSWQ7CiAgICAgIGNvbnN0IGluc3RhbmNlID0gaW5zdGFuY2VzTWFwLmdldChpbnN0YW5jZUlkKTsKICAgICAgaWYgKCFpbnN0YW5jZSkgewogICAgICAgIHRocm93IG5ldyBFcnJvcihgSW5zdGFuY2Ugd2l0aCBpZCAke2luc3RhbmNlSWR9IGRvZXMgbm90IGV4aXN0LmApOwogICAgICB9CiAgICAgIHJldHVybiBpbnN0YW5jZS5wYXVzZSgpOwogICAgfSwKICAgIHBsYXk6IChyZXF1ZXN0KSA9PiB7CiAgICAgIGNvbnN0IGluc3RhbmNlSWQgPSByZXF1ZXN0LnBhcmFtcy5pbnN0YW5jZUlkOwogICAgICBjb25zdCBpbnN0YW5jZSA9IGluc3RhbmNlc01hcC5nZXQoaW5zdGFuY2VJZCk7CiAgICAgIGlmICghaW5zdGFuY2UpIHsKICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEluc3RhbmNlIHdpdGggaWQgJHtpbnN0YW5jZUlkfSBkb2VzIG5vdCBleGlzdC5gKTsKICAgICAgfQogICAgICByZXR1cm4gaW5zdGFuY2UucGxheSgpOwogICAgfSwKICAgIHJlc2l6ZTogKHJlcXVlc3QpID0+IHsKICAgICAgY29uc3QgaW5zdGFuY2VJZCA9IHJlcXVlc3QucGFyYW1zLmluc3RhbmNlSWQ7CiAgICAgIGNvbnN0IHdpZHRoID0gcmVxdWVzdC5wYXJhbXMud2lkdGg7CiAgICAgIGNvbnN0IGhlaWdodCA9IHJlcXVlc3QucGFyYW1zLmhlaWdodDsKICAgICAgY29uc3QgaW5zdGFuY2UgPSBpbnN0YW5jZXNNYXAuZ2V0KGluc3RhbmNlSWQpOwogICAgICBpZiAoIWluc3RhbmNlKSB7CiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnN0YW5jZSB3aXRoIGlkICR7aW5zdGFuY2VJZH0gZG9lcyBub3QgZXhpc3QuYCk7CiAgICAgIH0KICAgICAgaW5zdGFuY2UuY2FudmFzLmhlaWdodCA9IGhlaWdodDsKICAgICAgaW5zdGFuY2UuY2FudmFzLndpZHRoID0gd2lkdGg7CiAgICAgIGluc3RhbmNlLnJlc2l6ZSgpOwogICAgICByZXR1cm4gewogICAgICAgIHN1Y2Nlc3M6IHRydWUKICAgICAgfTsKICAgIH0sCiAgICBzZXRCYWNrZ3JvdW5kQ29sb3I6IChyZXF1ZXN0KSA9PiB7CiAgICAgIGNvbnN0IGluc3RhbmNlSWQgPSByZXF1ZXN0LnBhcmFtcy5pbnN0YW5jZUlkOwogICAgICBjb25zdCBiYWNrZ3JvdW5kQ29sb3IgPSByZXF1ZXN0LnBhcmFtcy5iYWNrZ3JvdW5kQ29sb3I7CiAgICAgIGNvbnN0IGluc3RhbmNlID0gaW5zdGFuY2VzTWFwLmdldChpbnN0YW5jZUlkKTsKICAgICAgaWYgKCFpbnN0YW5jZSkgewogICAgICAgIHRocm93IG5ldyBFcnJvcihgSW5zdGFuY2Ugd2l0aCBpZCAke2luc3RhbmNlSWR9IGRvZXMgbm90IGV4aXN0LmApOwogICAgICB9CiAgICAgIGluc3RhbmNlLnNldEJhY2tncm91bmRDb2xvcihiYWNrZ3JvdW5kQ29sb3IpOwogICAgfSwKICAgIHNldEZyYW1lOiAocmVxdWVzdCkgPT4gewogICAgICBjb25zdCBpbnN0YW5jZUlkID0gcmVxdWVzdC5wYXJhbXMuaW5zdGFuY2VJZDsKICAgICAgY29uc3QgZnJhbWUgPSByZXF1ZXN0LnBhcmFtcy5mcmFtZTsKICAgICAgY29uc3QgaW5zdGFuY2UgPSBpbnN0YW5jZXNNYXAuZ2V0KGluc3RhbmNlSWQpOwogICAgICBpZiAoIWluc3RhbmNlKSB7CiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnN0YW5jZSB3aXRoIGlkICR7aW5zdGFuY2VJZH0gZG9lcyBub3QgZXhpc3QuYCk7CiAgICAgIH0KICAgICAgaW5zdGFuY2Uuc2V0RnJhbWUoZnJhbWUpOwogICAgfSwKICAgIHNldE1vZGU6IChyZXF1ZXN0KSA9PiB7CiAgICAgIGNvbnN0IGluc3RhbmNlSWQgPSByZXF1ZXN0LnBhcmFtcy5pbnN0YW5jZUlkOwogICAgICBjb25zdCBtb2RlID0gcmVxdWVzdC5wYXJhbXMubW9kZTsKICAgICAgY29uc3QgaW5zdGFuY2UgPSBpbnN0YW5jZXNNYXAuZ2V0KGluc3RhbmNlSWQpOwogICAgICBpZiAoIWluc3RhbmNlKSB7CiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnN0YW5jZSB3aXRoIGlkICR7aW5zdGFuY2VJZH0gZG9lcyBub3QgZXhpc3QuYCk7CiAgICAgIH0KICAgICAgaW5zdGFuY2Uuc2V0TW9kZShtb2RlKTsKICAgIH0sCiAgICBzZXRSZW5kZXJDb25maWc6IChyZXF1ZXN0KSA9PiB7CiAgICAgIGNvbnN0IGluc3RhbmNlSWQgPSByZXF1ZXN0LnBhcmFtcy5pbnN0YW5jZUlkOwogICAgICBjb25zdCByZW5kZXJDb25maWcgPSByZXF1ZXN0LnBhcmFtcy5yZW5kZXJDb25maWc7CiAgICAgIGNvbnN0IGluc3RhbmNlID0gaW5zdGFuY2VzTWFwLmdldChpbnN0YW5jZUlkKTsKICAgICAgaWYgKCFpbnN0YW5jZSkgewogICAgICAgIHRocm93IG5ldyBFcnJvcihgSW5zdGFuY2Ugd2l0aCBpZCAke2luc3RhbmNlSWR9IGRvZXMgbm90IGV4aXN0LmApOwogICAgICB9CiAgICAgIGluc3RhbmNlLnNldFJlbmRlckNvbmZpZyhyZW5kZXJDb25maWcpOwogICAgfSwKICAgIHNldFNlZ21lbnQ6IChyZXF1ZXN0KSA9PiB7CiAgICAgIGNvbnN0IGluc3RhbmNlSWQgPSByZXF1ZXN0LnBhcmFtcy5pbnN0YW5jZUlkOwogICAgICBjb25zdCBzZWdtZW50ID0gcmVxdWVzdC5wYXJhbXMuc2VnbWVudDsKICAgICAgY29uc3QgaW5zdGFuY2UgPSBpbnN0YW5jZXNNYXAuZ2V0KGluc3RhbmNlSWQpOwogICAgICBpZiAoIWluc3RhbmNlKSB7CiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnN0YW5jZSB3aXRoIGlkICR7aW5zdGFuY2VJZH0gZG9lcyBub3QgZXhpc3QuYCk7CiAgICAgIH0KICAgICAgaW5zdGFuY2Uuc2V0U2VnbWVudChzZWdtZW50WzBdLCBzZWdtZW50WzFdKTsKICAgIH0sCiAgICBzZXRTcGVlZDogKHJlcXVlc3QpID0+IHsKICAgICAgY29uc3QgaW5zdGFuY2VJZCA9IHJlcXVlc3QucGFyYW1zLmluc3RhbmNlSWQ7CiAgICAgIGNvbnN0IHNwZWVkID0gcmVxdWVzdC5wYXJhbXMuc3BlZWQ7CiAgICAgIGNvbnN0IGluc3RhbmNlID0gaW5zdGFuY2VzTWFwLmdldChpbnN0YW5jZUlkKTsKICAgICAgaWYgKCFpbnN0YW5jZSkgewogICAgICAgIHRocm93IG5ldyBFcnJvcihgSW5zdGFuY2Ugd2l0aCBpZCAke2luc3RhbmNlSWR9IGRvZXMgbm90IGV4aXN0LmApOwogICAgICB9CiAgICAgIGluc3RhbmNlLnNldFNwZWVkKHNwZWVkKTsKICAgIH0sCiAgICBzZXRVc2VGcmFtZUludGVycG9sYXRpb246IChyZXF1ZXN0KSA9PiB7CiAgICAgIGNvbnN0IGluc3RhbmNlSWQgPSByZXF1ZXN0LnBhcmFtcy5pbnN0YW5jZUlkOwogICAgICBjb25zdCB1c2VGcmFtZUludGVycG9sYXRpb24gPSByZXF1ZXN0LnBhcmFtcy51c2VGcmFtZUludGVycG9sYXRpb247CiAgICAgIGNvbnN0IGluc3RhbmNlID0gaW5zdGFuY2VzTWFwLmdldChpbnN0YW5jZUlkKTsKICAgICAgaWYgKCFpbnN0YW5jZSkgewogICAgICAgIHRocm93IG5ldyBFcnJvcihgSW5zdGFuY2Ugd2l0aCBpZCAke2luc3RhbmNlSWR9IGRvZXMgbm90IGV4aXN0LmApOwogICAgICB9CiAgICAgIGluc3RhbmNlLnNldFVzZUZyYW1lSW50ZXJwb2xhdGlvbih1c2VGcmFtZUludGVycG9sYXRpb24pOwogICAgfSwKICAgIHNldFdhc21Vcmw6IChyZXF1ZXN0KSA9PiB7CiAgICAgIERvdExvdHRpZS5zZXRXYXNtVXJsKHJlcXVlc3QucGFyYW1zLnVybCk7CiAgICB9LAogICAgc3RvcDogKHJlcXVlc3QpID0+IHsKICAgICAgY29uc3QgaW5zdGFuY2VJZCA9IHJlcXVlc3QucGFyYW1zLmluc3RhbmNlSWQ7CiAgICAgIGNvbnN0IGluc3RhbmNlID0gaW5zdGFuY2VzTWFwLmdldChpbnN0YW5jZUlkKTsKICAgICAgaWYgKCFpbnN0YW5jZSkgewogICAgICAgIHRocm93IG5ldyBFcnJvcihgSW5zdGFuY2Ugd2l0aCBpZCAke2luc3RhbmNlSWR9IGRvZXMgbm90IGV4aXN0LmApOwogICAgICB9CiAgICAgIGluc3RhbmNlLnN0b3AoKTsKICAgIH0sCiAgICB1bmZyZWV6ZTogKHJlcXVlc3QpID0+IHsKICAgICAgY29uc3QgaW5zdGFuY2VJZCA9IHJlcXVlc3QucGFyYW1zLmluc3RhbmNlSWQ7CiAgICAgIGNvbnN0IGluc3RhbmNlID0gaW5zdGFuY2VzTWFwLmdldChpbnN0YW5jZUlkKTsKICAgICAgaWYgKCFpbnN0YW5jZSkgewogICAgICAgIHRocm93IG5ldyBFcnJvcihgSW5zdGFuY2Ugd2l0aCBpZCAke2luc3RhbmNlSWR9IGRvZXMgbm90IGV4aXN0LmApOwogICAgICB9CiAgICAgIGluc3RhbmNlLnVuZnJlZXplKCk7CiAgICB9LAogICAgc2V0Vmlld3BvcnQocmVxdWVzdCkgewogICAgICBjb25zdCBpbnN0YW5jZUlkID0gcmVxdWVzdC5wYXJhbXMuaW5zdGFuY2VJZDsKICAgICAgY29uc3QgeCA9IHJlcXVlc3QucGFyYW1zLng7CiAgICAgIGNvbnN0IHkgPSByZXF1ZXN0LnBhcmFtcy55OwogICAgICBjb25zdCB3aWR0aCA9IHJlcXVlc3QucGFyYW1zLndpZHRoOwogICAgICBjb25zdCBoZWlnaHQgPSByZXF1ZXN0LnBhcmFtcy5oZWlnaHQ7CiAgICAgIGNvbnN0IGluc3RhbmNlID0gaW5zdGFuY2VzTWFwLmdldChpbnN0YW5jZUlkKTsKICAgICAgaWYgKCFpbnN0YW5jZSkgewogICAgICAgIHRocm93IG5ldyBFcnJvcihgSW5zdGFuY2Ugd2l0aCBpZCAke2luc3RhbmNlSWR9IGRvZXMgbm90IGV4aXN0LmApOwogICAgICB9CiAgICAgIHJldHVybiBpbnN0YW5jZS5zZXRWaWV3cG9ydCh4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKICAgIH0sCiAgICBzZXRNYXJrZXIocmVxdWVzdCkgewogICAgICBjb25zdCBpbnN0YW5jZUlkID0gcmVxdWVzdC5wYXJhbXMuaW5zdGFuY2VJZDsKICAgICAgY29uc3QgbWFya2VyID0gcmVxdWVzdC5wYXJhbXMubWFya2VyOwogICAgICBjb25zdCBpbnN0YW5jZSA9IGluc3RhbmNlc01hcC5nZXQoaW5zdGFuY2VJZCk7CiAgICAgIGlmICghaW5zdGFuY2UpIHsKICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEluc3RhbmNlIHdpdGggaWQgJHtpbnN0YW5jZUlkfSBkb2VzIG5vdCBleGlzdC5gKTsKICAgICAgfQogICAgICBpbnN0YW5jZS5zZXRNYXJrZXIobWFya2VyKTsKICAgICAgcmV0dXJuIHsKICAgICAgICBzdWNjZXNzOiB0cnVlCiAgICAgIH07CiAgICB9LAogICAgc2V0TG9vcChyZXF1ZXN0KSB7CiAgICAgIGNvbnN0IGluc3RhbmNlSWQgPSByZXF1ZXN0LnBhcmFtcy5pbnN0YW5jZUlkOwogICAgICBjb25zdCBsb29wID0gcmVxdWVzdC5wYXJhbXMubG9vcDsKICAgICAgY29uc3QgaW5zdGFuY2UgPSBpbnN0YW5jZXNNYXAuZ2V0KGluc3RhbmNlSWQpOwogICAgICBpZiAoIWluc3RhbmNlKSB7CiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnN0YW5jZSB3aXRoIGlkICR7aW5zdGFuY2VJZH0gZG9lcyBub3QgZXhpc3QuYCk7CiAgICAgIH0KICAgICAgaW5zdGFuY2Uuc2V0TG9vcChsb29wKTsKICAgICAgcmV0dXJuIHsKICAgICAgICBzdWNjZXNzOiB0cnVlCiAgICAgIH07CiAgICB9CiAgfTsKICBmdW5jdGlvbiBleGVjdXRlQ29tbWFuZChycGNSZXF1ZXN0KSB7CiAgICBjb25zdCBtZXRob2QgPSBycGNSZXF1ZXN0Lm1ldGhvZDsKICAgIGlmICh0eXBlb2YgY29tbWFuZHNbbWV0aG9kXSA9PT0gImZ1bmN0aW9uIikgewogICAgICByZXR1cm4gY29tbWFuZHNbbWV0aG9kXShycGNSZXF1ZXN0KTsKICAgIH0gZWxzZSB7CiAgICAgIHRocm93IG5ldyBFcnJvcihgTWV0aG9kICR7bWV0aG9kfSBpcyBub3QgaW1wbGVtZW50ZWQgaW4gY29tbWFuZHMuYCk7CiAgICB9CiAgfQogIHNlbGYub25tZXNzYWdlID0gKGV2ZW50KSA9PiB7CiAgICB0cnkgewogICAgICBjb25zdCByZXN1bHQgPSBleGVjdXRlQ29tbWFuZChldmVudC5kYXRhKTsKICAgICAgY29uc3QgcmVzcG9uc2UgPSB7CiAgICAgICAgaWQ6IGV2ZW50LmRhdGEuaWQsCiAgICAgICAgbWV0aG9kOiBldmVudC5kYXRhLm1ldGhvZCwKICAgICAgICByZXN1bHQKICAgICAgfTsKICAgICAgc2VsZi5wb3N0TWVzc2FnZShyZXNwb25zZSk7CiAgICB9IGNhdGNoIChlcnJvcikgewogICAgICBjb25zdCBlcnJvclJlc3BvbnNlID0gewogICAgICAgIGlkOiBldmVudC5kYXRhLmlkLAogICAgICAgIG1ldGhvZDogZXZlbnQuZGF0YS5tZXRob2QsCiAgICAgICAgZXJyb3I6IGVycm9yLm1lc3NhZ2UKICAgICAgfTsKICAgICAgc2VsZi5wb3N0TWVzc2FnZShlcnJvclJlc3BvbnNlKTsKICAgIH0KICB9OwogIHZhciBkdW1teSA9ICIiOwogIHZhciBkb3Rsb3R0aWVfd29ya2VyX2RlZmF1bHQgPSBkdW1teTsKfSkoKTsK', {\n type: 'classic'\n });\n }\n }\n ","// resolved to a Worker constructor by plugin-inline-worker\nimport DotLottieWebWorker from './dotlottie.worker?worker&inline';\nimport type { MethodParamsMap, RpcRequest } from './types';\n\nexport class WorkerManager {\n private readonly _workers = new Map<string, Worker>();\n\n private readonly _animationWorkerMap = new Map<string, string>();\n\n public getWorker(workerId: string): Worker {\n if (!this._workers.has(workerId)) {\n this._workers.set(workerId, new DotLottieWebWorker());\n }\n\n return this._workers.get(workerId) as Worker;\n }\n\n public assignAnimationToWorker(animationId: string, workerId: string): void {\n this._animationWorkerMap.set(animationId, workerId);\n }\n\n public unassignAnimationFromWorker(animationId: string): void {\n this._animationWorkerMap.delete(animationId);\n }\n\n public sendMessage(workerId: string, message: RpcRequest<keyof MethodParamsMap>, transfer?: Transferable[]): void {\n this.getWorker(workerId).postMessage(message, transfer || []);\n }\n\n public terminateWorker(workerId: string): void {\n const worker = this._workers.get(workerId);\n\n if (worker) {\n worker.terminate();\n this._workers.delete(workerId);\n }\n }\n}\n","import { IS_BROWSER } from '../constants';\nimport type { Marker } from '../core';\nimport type { EventType, EventListener, FrameEvent } from '../event-manager';\nimport { EventManager } from '../event-manager';\nimport type { Config, Layout, Manifest, Mode, RenderConfig } from '../types';\n\nimport type { MethodParamsMap, MethodResultMap, RpcRequest, RpcResponse } from './types';\nimport { WorkerManager } from './worker-manager';\n\nfunction getCanvasSize(canvas: HTMLCanvasElement | OffscreenCanvas): { height: number; width: number } {\n if (canvas instanceof OffscreenCanvas) {\n return { width: canvas.width, height: canvas.height };\n }\n\n const { height, width } = canvas.getBoundingClientRect();\n\n return { width: width * window.devicePixelRatio, height: height * window.devicePixelRatio };\n}\n\nfunction generateUniqueId(): string {\n return Date.now().toString(36) + Math.random().toString(36).substr(2, 9);\n}\n\nexport interface DotLottieInstanceState {\n activeAnimationId: string | undefined;\n activeThemeId: string | undefined;\n autoplay: boolean;\n backgroundColor: string;\n currentFrame: number;\n duration: number;\n isFrozen: boolean;\n isLoaded: boolean;\n isPaused: boolean;\n isPlaying: boolean;\n isReady: boolean;\n isStopped: boolean;\n layout: Layout | undefined;\n loop: boolean;\n manifest: Manifest | null;\n marker: string | undefined;\n markers: Marker[];\n mode: Mode;\n renderConfig: RenderConfig;\n segment: [number, number] | undefined;\n segmentDuration: number;\n speed: number;\n totalFrames: number;\n useFrameInterpolation: boolean;\n}\n\nexport class DotLottieWorker {\n private static readonly _workerManager = new WorkerManager();\n\n private readonly _eventManager = new EventManager();\n\n private readonly _id: string;\n\n private readonly _worker: Worker;\n\n private readonly _canvas: HTMLCanvasElement;\n\n private _dotLottieInstanceState: DotLottieInstanceState = {\n markers: [],\n autoplay: false,\n backgroundColor: '',\n currentFrame: 0,\n duration: 0,\n loop: false,\n mode: 'forward',\n segment: [0, 0],\n segmentDuration: 0,\n speed: 1,\n totalFrames: 0,\n isLoaded: false,\n isPlaying: false,\n isPaused: false,\n isStopped: true,\n isFrozen: false,\n useFrameInterpolation: false,\n renderConfig: {\n devicePixelRatio: window.devicePixelRatio,\n },\n activeAnimationId: '',\n activeThemeId: '',\n layout: undefined,\n marker: undefined,\n isReady: false,\n manifest: null,\n };\n\n private static _wasmUrl: string = '';\n\n private _created: boolean = false;\n\n private readonly _pointerUpMethod: (event: PointerEvent) => void;\n\n private readonly _pointerDownMethod: (event: PointerEvent) => void;\n\n private readonly _pointerMoveMethod: (event: PointerEvent) => void;\n\n private readonly _pointerEnterMethod: (event: PointerEvent) => void;\n\n private readonly _pointerExitMethod: (event: PointerEvent) => void;\n\n private readonly _onCompleteMethod: EventListener<'complete'>;\n\n public constructor(config: Config & { workerId?: string }) {\n this._canvas = config.canvas;\n\n this._id = `dotlottie-${generateUniqueId()}`;\n const workerId = config.workerId || 'defaultWorker';\n\n // creates or gets the worker\n this._worker = DotLottieWorker._workerManager.getWorker(workerId);\n\n DotLottieWorker._workerManager.assignAnimationToWorker(this._id, workerId);\n\n if (DotLottieWorker._wasmUrl) {\n this._sendMessage('setWasmUrl', { url: DotLottieWorker._wasmUrl });\n }\n\n this._create(config);\n\n // eslint-disable-next-line @typescript-eslint/no-misused-promises\n this._worker.addEventListener('message', this._handleWorkerEvent.bind(this));\n\n this._pointerUpMethod = this._onPointerUp.bind(this);\n\n this._pointerDownMethod = this._onPointerDown.bind(this);\n\n this._pointerMoveMethod = this._onPointerMove.bind(this);\n\n this._pointerEnterMethod = this._onPointerEnter.bind(this);\n\n this._pointerExitMethod = this._onPointerLeave.bind(this);\n\n this._onCompleteMethod = this._onComplete.bind(this);\n }\n\n private async _handleWorkerEvent(event: MessageEvent): Promise<void> {\n const rpcResponse: RpcResponse<\n | 'onComplete'\n | 'onLoad'\n | 'onDestroy'\n | 'onUnfreeze'\n | 'onFrame'\n | 'onRender'\n | 'onFreeze'\n | 'onPause'\n | 'onPlay'\n | 'onStop'\n | 'onLoadError'\n | 'onReady'\n > = event.data;\n\n if (!rpcResponse.id) {\n if (rpcResponse.method === 'onLoad' && rpcResponse.result.instanceId === this._id) {\n await this._updateDotLottieInstanceState();\n this._eventManager.dispatch(rpcResponse.result.event);\n }\n\n if (rpcResponse.method === 'onComplete' && rpcResponse.result.instanceId === this._id) {\n await this._updateDotLottieInstanceState();\n this._eventManager.dispatch(rpcResponse.result.event);\n }\n\n if (rpcResponse.method === 'onDestroy' && rpcResponse.result.instanceId === this._id) {\n this._eventManager.dispatch(rpcResponse.result.event);\n }\n\n if (rpcResponse.method === 'onUnfreeze' && rpcResponse.result.instanceId === this._id) {\n await this._updateDotLottieInstanceState();\n this._dotLottieInstanceState.isFrozen = false;\n this._eventManager.dispatch(rpcResponse.result.event);\n }\n\n if (rpcResponse.method === 'onFrame' && rpcResponse.result.instanceId === this._id) {\n this._dotLottieInstanceState.currentFrame = (rpcResponse.result.event as FrameEvent).currentFrame;\n this._eventManager.dispatch(rpcResponse.result.event);\n }\n\n if (rpcResponse.method === 'onRender' && rpcResponse.result.instanceId === this._id) {\n this._eventManager.dispatch(rpcResponse.result.event);\n }\n\n if (rpcResponse.method === 'onFreeze' && rpcResponse.result.instanceId === this._id) {\n await this._updateDotLottieInstanceState();\n this._eventManager.dispatch(rpcResponse.result.event);\n }\n\n if (rpcResponse.method === 'onPause' && rpcResponse.result.instanceId === this._id) {\n await this._updateDotLottieInstanceState();\n this._eventManager.dispatch(rpcResponse.result.event);\n }\n\n if (rpcResponse.method === 'onPlay' && rpcResponse.result.instanceId === this._id) {\n await this._updateDotLottieInstanceState();\n this._eventManager.dispatch(rpcResponse.result.event);\n }\n\n if (rpcResponse.method === 'onStop' && rpcResponse.result.instanceId === this._id) {\n await this._updateDotLottieInstanceState();\n this._eventManager.dispatch(rpcResponse.result.event);\n }\n\n if (rpcResponse.method === 'onLoadError' && rpcResponse.result.instanceId === this._id) {\n await this._updateDotLottieInstanceState();\n this._eventManager.dispatch(rpcResponse.result.event);\n }\n\n if (rpcResponse.method === 'onReady' && rpcResponse.result.instanceId === this._id) {\n await this._updateDotLottieInstanceState();\n this._eventManager.dispatch(rpcResponse.result.event);\n }\n }\n }\n\n private async _create(config: Config): Promise<void> {\n let offscreen: OffscreenCanvas;\n\n if (this._canvas instanceof HTMLCanvasElement) {\n offscreen = this._canvas.transferControlToOffscreen();\n } else {\n offscreen = this._canvas;\n }\n\n const { instanceId } = await this._sendMessage(\n 'create',\n {\n instanceId: this._id,\n config: {\n ...config,\n // @ts-ignore\n canvas: offscreen,\n },\n ...getCanvasSize(this._canvas),\n },\n [offscreen],\n );\n\n if (instanceId !== this._id) {\n throw new Error('Instance ID mismatch');\n }\n\n this._created = true;\n\n await this._updateDotLottieInstanceState();\n }\n\n public get isLoaded(): boolean {\n return this._dotLottieInstanceState.isLoaded;\n }\n\n public get isPlaying(): boolean {\n return this._dotLottieInstanceState.isPlaying;\n }\n\n public get isPaused(): boolean {\n return this._dotLottieInstanceState.isPaused;\n }\n\n public get isStopped(): boolean {\n return this._dotLottieInstanceState.isStopped;\n }\n\n public get currentFrame(): number {\n return this._dotLottieInstanceState.currentFrame;\n }\n\n public get isFrozen(): boolean {\n return this._dotLottieInstanceState.isFrozen;\n }\n\n public get segmentDuration(): number {\n return this._dotLottieInstanceState.segmentDuration;\n }\n\n public get totalFrames(): number {\n return this._dotLottieInstanceState.totalFrames;\n }\n\n public get segment(): [number, number] | undefined {\n return this._dotLottieInstanceState.segment;\n }\n\n public get speed(): number {\n return this._dotLottieInstanceState.speed;\n }\n\n public get duration(): number {\n return this._dotLottieInstanceState.duration;\n }\n\n public get isReady(): boolean {\n return this._dotLottieInstanceState.isReady;\n }\n\n public get mode(): Mode {\n return this._dotLottieInstanceState.mode;\n }\n\n public get canvas(): HTMLCanvasElement | null {\n return this._canvas;\n }\n\n public get autoplay(): boolean {\n return this._dotLottieInstanceState.autoplay;\n }\n\n public get backgroundColor(): string {\n return this._dotLottieInstanceState.backgroundColor;\n }\n\n public get loop(): boolean {\n return this._dotLottieInstanceState.loop;\n }\n\n public get useFrameInterpolation(): boolean {\n return this._dotLottieInstanceState.useFrameInterpolation;\n }\n\n public get renderConfig(): RenderConfig {\n return this._dotLottieInstanceState.renderConfig;\n }\n\n public get manifest(): Manifest | null {\n return this._dotLottieInstanceState.manifest;\n }\n\n public get activeAnimationId(): string | undefined {\n return this._dotLottieInstanceState.activeAnimationId;\n }\n\n public get marker(): string | undefined {\n return this._dotLottieInstanceState.marker;\n }\n\n public get activeThemeId(): string | undefined {\n return this._dotLottieInstanceState.activeThemeId;\n }\n\n public get layout(): Layout | undefined {\n return this._dotLottieInstanceState.layout;\n }\n\n public async play(): Promise<void> {\n if (!this._created) return;\n\n await this._sendMessage('play', { instanceId: this._id });\n await this._updateDotLottieInstanceState();\n }\n\n public async pause(): Promise<void> {\n if (!this._created) return;\n\n await this._sendMessage('pause', { instanceId: this._id });\n await this._updateDotLottieInstanceState();\n }\n\n public async stop(): Promise<void> {\n if (!this._created) return;\n\n await this._sendMessage('stop', { instanceId: this._id });\n await this._updateDotLottieInstanceState();\n }\n\n public async setSpeed(speed: number): Promise<void> {\n if (!this._created) return;\n\n await this._sendMessage('setSpeed', { instanceId: this._id, speed });\n await this._updateDotLottieInstanceState();\n }\n\n public async setMode(mode: Mode): Promise<void> {\n if (!this._created) return;\n\n await this._sendMessage('setMode', { instanceId: this._id, mode });\n await this._updateDotLottieInstanceState();\n }\n\n public async setFrame(frame: number): Promise<void> {\n if (!this._created) return;\n\n await this._sendMessage('setFrame', { frame, instanceId: this._id });\n await this._updateDotLottieInstanceState();\n }\n\n public async setSegment(start: number, end: number): Promise<void> {\n if (!this._created) return;\n\n await this._sendMessage('setSegment', { instanceId: this._id, segment: [start, end] });\n await this._updateDotLottieInstanceState();\n }\n\n public async setRenderConfig(renderConfig: RenderConfig): Promise<void> {\n if (!this._created) return;\n\n await this._sendMessage('setRenderConfig', { instanceId: this._id, renderConfig });\n await this._updateDotLottieInstanceState();\n }\n\n public async setUseFrameInterpolation(useFrameInterpolation: boolean): Promise<void> {\n if (!this._created) return;\n\n await this._sendMessage('setUseFrameInterpolation', { instanceId: this._id, useFrameInterpolation });\n await this._updateDotLottieInstanceState();\n }\n\n public async loadTheme(themeId: string): Promise<boolean> {\n if (!this._created) return false;\n\n const result = this._sendMessage('loadTheme', { instanceId: this._id, themeId });\n\n await this._updateDotLottieInstanceState();\n\n return result;\n }\n\n public async load(config: Omit<Config, 'canvas'>): Promise<void> {\n if (!this._created) return;\n\n await this._sendMessage('load', { config, instanceId: this._id });\n await this._updateDotLottieInstanceState();\n }\n\n public async setLoop(loop: boolean): Promise<void> {\n if (!this._created) return;\n\n await this._sendMessage('setLoop', { instanceId: this._id, loop });\n await this._updateDotLottieInstanceState();\n }\n\n public async resize(): Promise<void> {\n if (!this._created) return;\n\n const { height, width } = getCanvasSize(this._canvas);\n\n this._canvas.width = width;\n this._canvas.height = height;\n\n await this._sendMessage('resize', { height, instanceId: this._id, width });\n await this._updateDotLottieInstanceState();\n }\n\n public async destroy(): Promise<void> {\n if (!this._created) return;\n\n this._created = false;\n\n await this._sendMessage('destroy', { instanceId: this._id });\n\n this._cleanupStateMachineListeners();\n\n DotLottieWorker._workerManager.unassignAnimationFromWorker(this._id);\n this._eventManager.removeAllEventListeners();\n }\n\n public async freeze(): Promise<void> {\n if (!this._created) return;\n\n await this._sendMessage('freeze', { instanceId: this._id });\n await this._updateDotLottieInstanceState();\n }\n\n public async unfreeze(): Promise<void> {\n if (!this._created) return;\n\n await this._sendMessage('unfreeze', { instanceId: this._id });\n await this._updateDotLottieInstanceState();\n }\n\n public async setBackgroundColor(backgroundColor: string): Promise<void> {\n if (!this._created) return;\n\n await this._sendMessage('setBackgroundColor', { instanceId: this._id, backgroundColor });\n await this._updateDotLottieInstanceState();\n }\n\n public async loadAnimation(animationId: string): Promise<void> {\n if (!this._created) return;\n\n await this._sendMessage('loadAnimation', { animationId, instanceId: this._id });\n await this._updateDotLottieInstanceState();\n }\n\n public async setLayout(layout: Layout): Promise<void> {\n if (!this._created) return;\n\n await this._sendMessage('setLayout', { instanceId: this._id, layout });\n await this._updateDotLottieInstanceState();\n }\n\n private async _updateDotLottieInstanceState(): Promise<void> {\n if (!this._created) return;\n\n const result = await this._sendMessage('getDotLottieInstanceState', { instanceId: this._id });\n\n this._dotLottieInstanceState = result.state;\n }\n\n public markers(): Marker[] {\n return this._dotLottieInstanceState.markers;\n }\n\n public async setMarker(marker: string): Promise<void> {\n if (!this._created) return;\n\n await this._sendMessage('setMarker', { instanceId: this._id, marker });\n await this._updateDotLottieInstanceState();\n }\n\n public async loadThemeData(themeData: string): Promise<boolean> {\n if (!this._created) return false;\n\n const loaded = await this._sendMessage('loadThemeData', { instanceId: this._id, themeData });\n\n await this._updateDotLottieInstanceState();\n\n return loaded;\n }\n\n public async setViewport(x: number, y: number, width: number, height: number): Promise<boolean> {\n if (!this._created) return false;\n\n return this._sendMessage('setViewport', { x, y, width, height, instanceId: this._id });\n }\n\n private async _sendMessage<T extends keyof MethodParamsMap>(\n method: T,\n params: MethodParamsMap[T],\n transfer?: Transferable[],\n ): Promise<MethodResultMap[T]> {\n const rpcRequest: RpcRequest<T> = {\n id: `dotlottie-request-${generateUniqueId()}`,\n method,\n params,\n };\n\n this._worker.postMessage(rpcRequest, transfer || []);\n\n return new Promise((resolve, reject) => {\n const onMessage = (event: MessageEvent): void => {\n const rpcResponse: RpcResponse<T> = event.data;\n\n // Check if the response corresponds to the request\n if (rpcResponse.id === rpcRequest.id) {\n this._worker.removeEventListener('message', onMessage);\n\n if (rpcResponse.error) {\n reject(new Error(`Failed to execute method ${method}: ${rpcResponse.error}`));\n } else {\n resolve(rpcResponse.result);\n }\n }\n };\n\n this._worker.addEventListener('message', onMessage);\n });\n }\n\n public addEventListener<T extends EventType>(type: T, listener: EventListener<T>): void {\n this._eventManager.addEventListener(type, listener);\n }\n\n public removeEventListener<T extends EventType>(type: T, listener?: EventListener<T>): void {\n this._eventManager.removeEventListener(type, listener);\n }\n\n public static setWasmUrl(url: string): void {\n DotLottieWorker._wasmUrl = url;\n }\n\n public async loadStateMachine(stateMachineId: string): Promise<boolean> {\n if (!this._created) return false;\n\n const result = await this._sendMessage('loadStateMachine', { instanceId: this._id, stateMachineId });\n\n await this._updateDotLottieInstanceState();\n\n return result;\n }\n\n public async loadStateMachineData(stateMachineData: string): Promise<boolean> {\n if (!this._created) return false;\n\n const result = await this._sendMessage('loadStateMachineData', { instanceId: this._id, stateMachineData });\n\n await this._updateDotLottieInstanceState();\n\n return result;\n }\n\n public async startStateMachine(): Promise<boolean> {\n if (!this._created) return false;\n\n this._setupStateMachineListeners();\n\n const result = await this._sendMessage('startStateMachine', { instanceId: this._id });\n\n await this._updateDotLottieInstanceState();\n\n return result;\n }\n\n public async stopStateMachine(): Promise<boolean> {\n if (!this._created) return false;\n\n this._cleanupStateMachineListeners();\n\n return this._sendMessage('stopStateMachine', { instanceId: this._id });\n }\n\n public async postStateMachineEvent(event: string): Promise<number> {\n if (!this._created) return 1;\n\n return this._sendMessage('postStateMachineEvent', { event, instanceId: this._id });\n }\n\n public async getStateMachineListeners(): Promise<string[]> {\n if (!this._created) return [];\n\n return this._sendMessage('getStateMachineListeners', { instanceId: this._id });\n }\n\n private _getPointerPosition(event: PointerEvent): { x: number; y: number } {\n const rect = (this._canvas as HTMLCanvasElement).getBoundingClientRect();\n const scaleX = this._canvas.width / rect.width;\n const scaleY = this._canvas.height / rect.height;\n\n const devicePixelRatio = this._dotLottieInstanceState.renderConfig.devicePixelRatio || window.devicePixelRatio || 1;\n const x = ((event.clientX - rect.left) * scaleX) / devicePixelRatio;\n const y = ((event.clientY - rect.top) * scaleY) / devicePixelRatio;\n\n return {\n x,\n y,\n };\n }\n\n private _onPointerUp(event: PointerEvent): void {\n const { x, y } = this._getPointerPosition(event);\n\n this.postStateMachineEvent(`OnPointerUp: ${x} ${y}`);\n }\n\n private _onPointerDown(event: PointerEvent): void {\n const { x, y } = this._getPointerPosition(event);\n\n this.postStateMachineEvent(`OnPointerDown: ${x} ${y}`);\n }\n\n private _onPointerMove(event: PointerEvent): void {\n const { x, y } = this._getPointerPosition(event);\n\n this.postStateMachineEvent(`OnPointerMove: ${x} ${y}`);\n }\n\n private _onPointerEnter(event: PointerEvent): void {\n const { x, y } = this._getPointerPosition(event);\n\n this.postStateMachineEvent(`OnPointerEnter: ${x} ${y}`);\n }\n\n private _onPointerLeave(event: PointerEvent): void {\n const { x, y } = this._getPointerPosition(event);\n\n this.postStateMachineEvent(`OnPointerExit: ${x} ${y}`);\n }\n\n private _onComplete(): void {\n this.postStateMachineEvent('OnComplete');\n }\n\n private async _setupStateMachineListeners(): Promise<void> {\n if (IS_BROWSER && this._canvas instanceof HTMLCanvasElement && this.isLoaded) {\n const listeners = await this._sendMessage('getStateMachineListeners', { instanceId: this._id });\n\n if (listeners.includes('PointerUp')) {\n this._canvas.addEventListener('pointerup', this._pointerUpMethod);\n }\n\n if (listeners.includes('PointerDown')) {\n this._canvas.addEventListener('pointerdown', this._pointerDownMethod);\n }\n\n if (listeners.includes('PointerMove')) {\n this._canvas.addEventListener('pointermove', this._pointerMoveMethod);\n }\n\n if (listeners.includes('PointerEnter')) {\n this._canvas.addEventListener('pointerenter', this._pointerEnterMethod);\n }\n\n if (listeners.includes('PointerExit')) {\n this._canvas.addEventListener('pointerleave', this._pointerExitMethod);\n }\n\n if (listeners.includes('Complete')) {\n this.addEventListener('complete', this._onCompleteMethod);\n }\n }\n }\n\n private _cleanupStateMachineListeners(): void {\n if (IS_BROWSER && this._canvas instanceof HTMLCanvasElement) {\n this._canvas.removeEventListener('pointerup', this._pointerUpMethod);\n this._canvas.removeEventListener('pointerdown', this._pointerDownMethod);\n this._canvas.removeEventListener('pointermove', this._pointerMoveMethod);\n this._canvas.removeEventListener('pointerenter', this._pointerEnterMethod);\n this._canvas.removeEventListener('pointerleave', this._pointerExitMethod);\n this.removeEventListener('complete', this._onCompleteMethod);\n }\n }\n}\n"]}
1
+ {"version":3,"sources":["../src/animation-frame-manager.ts","../src/constants.ts","../src/core/dotlottie-player.js","../src/core/dotlottie-wasm-loader.ts","../src/event-manager.ts","../src/utils.ts","../src/dotlottie.ts","inline-worker:/home/runner/work/dotlottie-web/dotlottie-web/packages/web/src/worker/dotlottie.worker","../src/worker/worker-manager.ts","../src/worker/dotlottie.ts"],"names":["WebAnimationFrameStrategy","callback","id","NodeAnimationFrameStrategy","__publicField","_id","AnimationFrameManager","IS_BROWSER","ZIP_SIGNATURE","LOTTIE_JSON_MANDATORY_FIELDS","PACKAGE_VERSION","PACKAGE_NAME","createDotLottiePlayerModule","_scriptDir","moduleArg","k","aa","ba","readyPromise","a","b","ca","da","t","ea","w","x","fa","ha","y","A","B","C","E","F","ja","ka","la","ma","na","oa","pa","G","H","ra","sa","I","ta","ua","va","wa","c","d","xa","e","ya","za","J","f","Aa","Ba","Da","Ea","Fa","Ga","K","L","M","Ha","Ia","P","h","n","O","Ja","Q","R","Ka","La","Ma","Oa","Pa","Qa","Ra","Sa","Ta","Ua","Va","Xa","Wa","Ya","Za","$a","ab","bb","cb","db","eb","fb","gb","hb","ib","jb","m","p","kb","S","lb","mb","T","nb","pb","ob","U","qb","rb","sb","tb","u","v","g","q","r","z","ub","vb","V","wb","yb","zb","Ab","Bb","Cb","Db","Eb","Fb","Gb","Hb","Ib","Jb","Kb","Lb","Mb","Nb","Ob","Pb","Rb","Qb","Sb","Tb","Ub","Vb","Wb","Xb","Yb","Zb","N","$b","ac","mc","Ca","D","Na","xb","ia","bc","cc","dc","ec","fc","gc","hc","ic","jc","kc","lc","W","qa","X","Y","Z","nc","oc","pc","qc","dotlottie_player_default","DotLottieWasmLoader","url","initialError","backupUrl","backupError","EventManager","type","listener","listeners","event","isHexColor","color","hexStringToRGBAInt","colorHex","hex","isDotLottie","fileData","fileSignature","isLottieJSON","json","field","isLottie","createCoreMode","mode","module","createCoreFit","fit","createCoreAlign","align","coreAlign","createCoreSegment","segment","coresegment","_DotLottie","config","error","message","src","response","data","width","height","loaded","layout","manifest","manifestJson","buffer","clampedBuffer","imageData","nextFrame","frame","speed","loop","useFrameInterpolation","dpr","clientHeight","clientWidth","startFrame","endFrame","animationId","marker","markers","result","i","themeId","themeData","stateMachineId","started","stopped","rect","scaleX","scaleY","devicePixelRatio","rt","listenersVector","stateMachineData","name","value","DotLottie","InlinedWorker","WorkerManager","workerId","transfer","worker","getCanvasSize","canvas","generateUniqueId","_DotLottieWorker","rpcResponse","offscreen","instanceId","start","end","renderConfig","backgroundColor","method","params","rpcRequest","resolve","reject","onMessage","DotLottieWorker"],"mappings":";;AAOA,IAAA,EAAA,CAAA,MAAA,CAAA,cAAA,CAAA,IAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,GAAA,CAAA,IAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,UAAA,CAAA,CAAA,CAAA,CAAA,YAAA,CAAA,CAAA,CAAA,CAAA,QAAA,CAAA,CAAA,CAAA,CAAA,KAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,IAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,GAAA,EAAA,CAAA,CAAA,CAAA,OAAA,CAAA,EAAA,QAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,IAAMA,EAAN,CAAA,KAAkE,CACzD,qBAAA,CAAsBC,CAA0C,CAAA,CACrE,OAAO,qBAAA,CAAsBA,CAAQ,CACvC,CAEO,oBAAA,CAAqBC,CAAkB,CAAA,CAC5C,oBAAqBA,CAAAA,CAAE,EACzB,CACF,CAEMC,CAAAA,EAAAA,CAAN,KAAmE,CAAnE,WACEC,EAAAA,CAAAA,CAAAA,CAAA,IAAQ,CAAA,eAAA,CAAwB,CAEhCA,CAAAA,CAAAA,CAAAA,CAAA,IAAQ,CAAA,gBAAA,CAA0C,IAE3C,EAAA,CAAA,qBAAA,CAAsBH,CAA0C,CAAA,CACrE,OAAI,IAAA,CAAK,aAAiB,EAAA,MAAA,CAAO,gBAC/B,GAAA,IAAA,CAAK,aAAgB,CAAA,CAAA,CAAA,CAGvB,IAAK,CAAA,aAAA,EAAiB,CAEtB,CAAA,IAAA,CAAK,cAAiB,CAAA,YAAA,CAAa,IAAM,CACvCA,CAAS,CAAA,IAAA,CAAK,GAAI,EAAC,EACrB,CAAC,CAEM,CAAA,IAAA,CAAK,aACd,CAEO,qBAAqBI,CAAmB,CAAA,CACzC,IAAK,CAAA,cAAA,EACP,cAAe,CAAA,IAAA,CAAK,cAAc,EAEtC,CACF,CAAA,CAEaC,EAAN,CAAA,KAA4B,CAG1B,WAAA,EAAc,CAFrBF,CAAAA,CAAA,IAAiB,CAAA,WAAA,CAAA,CAGf,IAAK,CAAA,SAAA,CACH,OAAO,qBAAA,EAA0B,UAAa,CAAA,IAAIJ,EAA8B,CAAA,IAAIG,GACxF,CAEO,qBAAsBF,CAAAA,CAAAA,CAA0C,CACrE,OAAO,IAAK,CAAA,SAAA,CAAU,qBAAsBA,CAAAA,CAAQ,CACtD,CAEO,oBAAqBC,CAAAA,CAAAA,CAAkB,CAC5C,IAAA,CAAK,SAAU,CAAA,oBAAA,CAAqBA,CAAE,EACxC,CACF,CAAA,CC1DO,IAAMK,CAAAA,CAAa,OAAO,MAAA,CAAW,GAAe,EAAA,OAAO,MAAO,CAAA,QAAA,CAAa,GAG/E,CAAA,IAAMC,EAAgB,CAAA,IAAI,UAAW,CAAA,CAAC,EAAM,CAAA,EAAA,CAAM,EAAM,CAAI,CAAC,CACvDC,CAAAA,EAAAA,CAA+B,CAAC,GAAA,CAAK,IAAM,CAAA,IAAA,CAAM,QAAU,CAAA,IAAA,CAAM,GAAK,CAAA,GAAG,CAGzEC,CAAAA,EAAAA,CAAkB,QAClBC,CAAAA,EAAAA,CAAe,4BCR5B,CAAA,IAAIC,EAA+B,CAAA,CAAA,IAAM,CACvC,IAAIC,CAAa,CAAA,OAAO,QAAY,CAAA,GAAA,CAAc,QAAS,CAAA,aAAA,EAAe,GAAM,CAAA,KAAA,CAAA,CAEhF,OAAO,SAAUC,CAAY,CAAA,EAAI,CAAA,CAC/B,IAAIC,CAAAA,CAAID,CACNE,CAAAA,CAAAA,CACAC,CACAC,CAAAA,CAAAA,CAAe,IAAI,OAAA,CAAQ,CAACC,CAAAA,CAAGC,CAAM,GAAA,CACnCJ,CAAKG,CAAAA,CAAAA,CACLF,CAAKG,CAAAA,EACP,CAAC,CAAA,CACDC,CAAK,CAAA,MAAA,CAAO,MAAO,CAAA,EAAIN,CAAAA,CAAC,CACxBO,CAAAA,CAAAA,CAAK,gBACLC,CAAAA,CAAAA,CAAI,GACS,OAAO,QAAA,CAAtB,GAAkC,EAAA,QAAA,CAAS,aAAkBA,GAAAA,CAAAA,CAAI,QAAS,CAAA,aAAA,CAAc,GACxFV,CAAAA,CAAAA,CAAAA,GAAeU,CAAIV,CAAAA,CAAAA,CAAAA,CACnBU,CAAE,CAAA,UAAA,CAAW,OAAO,CAAA,CAAKA,CAAI,CAAA,EAAA,CAAOA,CAAIA,CAAAA,CAAAA,CAAE,MAAO,CAAA,CAAA,CAAGA,CAAE,CAAA,OAAA,CAAQ,QAAU,CAAA,EAAE,CAAE,CAAA,WAAA,CAAY,GAAG,CAAA,CAAI,CAAC,CAAA,CAChG,IAAIC,CAAKT,CAAAA,CAAAA,CAAE,KAAS,EAAA,OAAA,CAAQ,GAAI,CAAA,IAAA,CAAK,OAAO,CAAA,CAC1CU,CAAIV,CAAAA,CAAAA,CAAE,QAAY,EAAA,OAAA,CAAQ,KAAM,CAAA,IAAA,CAAK,OAAO,CAAA,CAC9C,MAAO,CAAA,MAAA,CAAOA,CAAGM,CAAAA,CAAE,CACnBA,CAAAA,CAAAA,CAAK,IACLN,CAAAA,CAAAA,CAAE,WAAgBO,GAAAA,CAAAA,CAAKP,CAAE,CAAA,WAAA,CAAA,CACzB,IAAIW,EAAAA,CACJX,CAAE,CAAA,UAAA,GAAeW,GAAIX,CAAE,CAAA,UAAA,CAAA,CACvB,IAAIY,EAAAA,CACFC,EAAK,CAAA,CAAA,CAAA,CACLC,CACAC,CAAAA,CAAAA,CACAC,EACAC,CAAAA,EAAAA,CACAC,CACAC,CAAAA,CAAAA,CACAC,EACAC,CAAAA,EAAAA,CACF,SAASC,EAAAA,EAAK,CACZ,IAAIlB,CAAIQ,CAAAA,EAAAA,CAAG,MACXZ,CAAAA,CAAAA,CAAE,KAAQc,CAAAA,CAAAA,CAAI,IAAI,SAAA,CAAUV,CAAC,CAAA,CAC7BJ,CAAE,CAAA,MAAA,CAASgB,EAAI,CAAA,IAAI,UAAWZ,CAAAA,CAAC,CAC/BJ,CAAAA,CAAAA,CAAE,MAASe,CAAAA,CAAAA,CAAI,IAAI,UAAA,CAAWX,CAAC,CAAA,CAC/BJ,CAAE,CAAA,OAAA,CAAUiB,EAAI,CAAA,IAAI,WAAYb,CAAAA,CAAC,CACjCJ,CAAAA,CAAAA,CAAE,MAASkB,CAAAA,CAAAA,CAAI,IAAI,UAAA,CAAWd,CAAC,CAAA,CAC/BJ,CAAE,CAAA,OAAA,CAAUmB,CAAI,CAAA,IAAI,WAAYf,CAAAA,CAAC,CACjCJ,CAAAA,CAAAA,CAAE,QAAUoB,EAAK,CAAA,IAAI,YAAahB,CAAAA,CAAC,CACnCJ,CAAAA,CAAAA,CAAE,OAAUqB,CAAAA,EAAAA,CAAK,IAAI,YAAA,CAAajB,CAAC,EACrC,CACA,IAAImB,EAAK,CAAA,EACPC,CAAAA,EAAAA,CAAK,EAAC,CACNC,EAAK,CAAA,EACP,CAAA,SAASC,EAAK,EAAA,CACZ,IAAItB,CAAAA,CAAIJ,CAAE,CAAA,MAAA,CAAO,KAAM,EAAA,CACvBuB,EAAG,CAAA,OAAA,CAAQnB,CAAC,EACd,CACA,IAAIuB,CAAI,CAAA,CAAA,CAENC,EAAI,CAAA,KACN,SAASC,EAAAA,CAAGzB,CAAG,CAAA,CACb,MAAAJ,CAAAA,CAAE,OAAUI,GAAAA,CAAC,CACbA,CAAAA,CAAAA,CAAI,UAAaA,CAAAA,CAAAA,CAAI,GACrBM,CAAAA,CAAAA,CAAEN,CAAC,CAAA,CACHS,EAAK,CAAA,CAAA,CAAA,CACLT,CAAI,CAAA,IAAI,YAAY,YAAaA,CAAAA,CAAAA,CAAI,0CAA0C,CAAA,CAC/EF,CAAGE,CAAAA,CAAC,CACEA,CAAAA,CACR,CACA,IAAI0B,EAAM1B,CAAAA,CAAAA,EAAMA,CAAE,CAAA,UAAA,CAAW,uCAAuC,CAAA,CAClE2B,EAEF,CAAA,GADAA,EAAI,CAAA,sBAAA,CACA,CAACD,EAAAA,CAAGC,EAAC,CAAA,CAAG,CACV,IAAIC,EAAKD,CAAAA,EAAAA,CACTA,EAAI/B,CAAAA,CAAAA,CAAE,UAAaA,CAAAA,CAAAA,CAAE,UAAWgC,CAAAA,EAAAA,CAAIxB,CAAC,CAAA,CAAIA,CAAIwB,CAAAA,GAC/C,CACA,SAASC,EAAG7B,CAAAA,CAAAA,CAAG,CACb,GAAIA,CAAK2B,EAAAA,EAAAA,EAAKpB,EAAG,CAAA,OAAO,IAAI,UAAA,CAAWA,EAAC,CAAA,CACxC,MAAM,iDACR,CACA,SAASuB,EAAG9B,CAAAA,CAAAA,CAAG,CACb,OAAOO,EAAmB,EAAA,OAAO,KAArB,EAAA,UAAA,CACR,QAAQ,OAAQ,EAAA,CAAE,IAAK,CAAA,IAAMsB,EAAG7B,CAAAA,CAAC,CAAC,CAAA,CAClC,KAAMA,CAAAA,CAAAA,CAAG,CAAE,WAAA,CAAa,aAAc,CAAC,CACpC,CAAA,IAAA,CAAMC,CAAM,EAAA,CACX,GAAI,CAACA,CAAE,CAAA,EAAA,CAAI,MAAM,CAAA,oCAAA,EAAuCD,CAAC,CAAA,CAAA,CAAA,CACzD,OAAOC,CAAAA,CAAE,WAAY,EACvB,CAAC,CAAA,CACA,MAAM,IAAM4B,EAAAA,CAAG7B,CAAC,CAAC,CAC1B,CACA,SAAS+B,EAAAA,CAAG/B,CAAGC,CAAAA,CAAAA,CAAG+B,CAAG,CAAA,CACnB,OAAOF,EAAAA,CAAG9B,CAAC,CAAA,CACR,IAAMiC,CAAAA,CAAAA,EAAM,WAAY,CAAA,WAAA,CAAYA,CAAGhC,CAAAA,CAAC,CAAC,CAAA,CACzC,IAAK+B,CAAAA,CAAAA,CAAIC,CAAM,EAAA,CACd3B,CAAE,CAAA,CAAA,uCAAA,EAA0C2B,CAAC,CAAA,CAAE,EAC/CR,EAAGQ,CAAAA,CAAC,EACN,CAAC,CACL,CACA,SAASC,EAAAA,CAAGlC,CAAGC,CAAAA,CAAAA,CAAG,CAChB,IAAI+B,CAAIL,CAAAA,EAAAA,CACR,OAAOpB,EAAAA,EAAmB,OAAO,WAAA,CAAY,oBAAjC,EAAA,UAAA,EAAyDmB,EAAGM,CAAAA,CAAC,CAAmB,EAAA,OAAO,KAArB,EAAA,UAAA,CAC1ED,EAAGC,CAAAA,CAAAA,CAAGhC,CAAGC,CAAAA,CAAC,CACV,CAAA,KAAA,CAAM+B,CAAG,CAAA,CAAE,WAAa,CAAA,aAAc,CAAC,CAAA,CAAE,IAAMC,CAAAA,CAAAA,EAC7C,WAAY,CAAA,oBAAA,CAAqBA,CAAGjC,CAAAA,CAAC,CAAE,CAAA,IAAA,CAAKC,CAAG,CAAA,SAAUkC,CAAG,CAAA,CAC1D,OAAA7B,CAAAA,CAAE,CAAkC6B,+BAAAA,EAAAA,CAAC,CAAE,CAAA,CAAA,CACvC7B,CAAE,CAAA,2CAA2C,CACtCyB,CAAAA,EAAAA,CAAGC,CAAGhC,CAAAA,CAAAA,CAAGC,CAAC,CACnB,CAAC,CACH,CACN,CACA,IAAImC,EAAMpC,CAAAA,CAAAA,EAAM,CACZ,KAAO,CAAIA,CAAAA,CAAAA,CAAE,MAAUA,EAAAA,CAAAA,CAAE,KAAM,EAAA,CAAEJ,CAAC,EACpC,CACAyC,CAAAA,EAAAA,CAAoB,OAAO,WAAA,CAAtB,GAAoC,CAAA,IAAI,WAAY,CAAA,MAAM,CAAI,CAAA,KAAA,CAAA,CACnEC,CAAI,CAAA,CAACtC,CAAGC,CAAAA,CAAAA,CAAG+B,CAAM,GAAA,CACf,IAAIC,CAAAA,CAAIhC,CAAI+B,CAAAA,CAAAA,CACZ,IAAKA,CAAAA,CAAI/B,CAAGD,CAAAA,CAAAA,CAAEgC,CAAC,CAAA,EAAK,EAAEA,CAAAA,EAAKC,CAAM,CAAA,EAAA,EAAED,CACnC,CAAA,GAAI,EAAKA,CAAAA,CAAAA,CAAI/B,CAAKD,EAAAA,CAAAA,CAAE,MAAUqC,EAAAA,EAAAA,CAAI,OAAOA,EAAAA,CAAG,MAAOrC,CAAAA,CAAAA,CAAE,QAASC,CAAAA,CAAAA,CAAG+B,CAAC,CAAC,CACnE,CAAA,IAAKC,EAAI,EAAIhC,CAAAA,CAAAA,CAAI+B,CAAK,EAAA,CACpB,IAAIG,CAAAA,CAAInC,CAAEC,CAAAA,CAAAA,EAAG,CACb,CAAA,GAAIkC,CAAI,CAAA,GAAA,CAAK,CACX,IAAII,CAAIvC,CAAAA,CAAAA,CAAEC,CAAG,EAAA,CAAA,CAAI,EACjB,CAAA,GAAA,CAAYkC,CAAI,CAAA,GAAA,GAAZ,GAAkBF,CAAAA,CAAAA,EAAK,MAAO,CAAA,YAAA,CAAA,CAAeE,CAAI,CAAA,EAAA,GAAO,CAAKI,CAAAA,CAAC,CAC7D,CAAA,KAAA,CACH,IAAI,CAAA,CAAIvC,CAAEC,CAAAA,CAAAA,EAAG,CAAI,CAAA,EAAA,CACjBkC,CACUA,CAAAA,CAAAA,CAAAA,CAAI,GAAZ,GAAA,GAAA,CAAA,CACMA,CAAI,CAAA,EAAA,GAAO,EAAOI,CAAAA,CAAAA,EAAK,CAAK,CAAA,CAAA,CAAA,CAC5BJ,CAAI,CAAA,CAAA,GAAM,EAAOI,CAAAA,CAAAA,EAAK,EAAO,CAAA,CAAA,EAAK,CAAMvC,CAAAA,CAAAA,CAAEC,CAAG,EAAA,CAAA,CAAI,EACzD,CAAA,KAAA,CAAQkC,CACHF,CAAAA,CAAAA,EAAK,MAAO,CAAA,YAAA,CAAaE,CAAC,CACzBA,EAAAA,CAAAA,EAAK,KAASF,CAAAA,CAAAA,EAAK,MAAO,CAAA,YAAA,CAAa,KAASE,CAAAA,CAAAA,EAAK,EAAK,CAAA,KAAA,CAASA,CAAI,CAAA,IAAK,CACpF,EAAA,CACF,CAAOF,KAAAA,CAAAA,EAAK,MAAO,CAAA,YAAA,CAAaE,CAAC,EACnC,CACA,OAAOF,CACT,CAAA,CACF,MAAMO,EAAG,CACP,WAAA,CAAYxC,CAAG,CAAA,CACb,IAAK,CAAA,EAAA,CAAKA,EAAI,GAChB,CACF,CACA,IAAIyC,EAAK,CAAA,CAAA,CAEPC,EAAM1C,CAAAA,CAAAA,EAAM,CACV,IAAA,IAASC,CAAI,CAAA,CAAA,CAAG+B,CAAI,CAAA,CAAA,CAAGA,CAAIhC,CAAAA,CAAAA,CAAE,MAAQ,CAAA,EAAEgC,CAAG,CAAA,CACxC,IAAIC,CAAAA,CAAIjC,CAAE,CAAA,UAAA,CAAWgC,CAAC,CAAA,CACtB,GAAOC,EAAAA,CAAAA,CAAIhC,CAAM,EAAA,CAAA,IAAA,EAAQgC,EAAKhC,CAAK,EAAA,CAAA,CAAK,KAASgC,EAAAA,CAAAA,EAAK,KAASA,EAAAA,CAAAA,EAAMhC,CAAK,EAAA,CAAA,CAAI,EAAE+B,CAAAA,EAAM/B,CAAK,EAAA,EAC7F,CACA,OAAOA,CACT,CAAA,CACA0C,EAAK,CAAA,CAAC3C,CAAGC,CAAAA,CAAAA,CAAG+B,CAAGC,CAAAA,CAAAA,GAAM,CACnB,GAAI,CAAIA,CAAAA,CAAAA,CAAG,CACTA,CAAAA,CAAID,CAAIC,CAAAA,CAAAA,CAAI,CACZ,CAAA,IAAA,IAASE,CAAI,CAAA,CAAA,CAAGA,CAAInC,CAAAA,CAAAA,CAAE,MAAQ,CAAA,EAAEmC,CAAG,CAAA,CACjC,IAAII,CAAAA,CAAIvC,CAAE,CAAA,UAAA,CAAWmC,CAAC,CAAA,CACtB,GAAI,KAAA,EAASI,CAAK,EAAA,KAAA,EAASA,CAAG,CAAA,CAC5B,IAAI,CAAA,CAAIvC,CAAE,CAAA,UAAA,CAAW,EAAEmC,CAAC,CACxBI,CAAAA,CAAAA,CAAK,KAAUA,EAAAA,CAAAA,CAAAA,CAAI,IAAS,GAAA,EAAA,CAAA,CAAQ,EAAI,KAC1C,CACA,GAAI,GAAA,EAAOA,CAAG,CAAA,CACZ,GAAIP,CAAAA,EAAKC,CAAG,CAAA,MACZhC,CAAE+B,CAAAA,CAAAA,EAAG,CAAIO,CAAAA,EACX,CAAO,KAAA,CACL,GAAI,IAAA,EAAQA,CAAG,CAAA,CACb,GAAIP,CAAAA,CAAI,CAAKC,EAAAA,CAAAA,CAAG,MAChBhC,CAAAA,CAAE+B,CAAG,EAAA,CAAA,CAAI,GAAOO,CAAAA,CAAAA,EAAK,EACvB,CAAA,KAAO,CACL,GAAI,KAASA,EAAAA,CAAAA,CAAG,CACd,GAAIP,CAAI,CAAA,CAAA,EAAKC,CAAG,CAAA,MAChBhC,CAAE+B,CAAAA,CAAAA,EAAG,CAAI,CAAA,GAAA,CAAOO,CAAK,EAAA,GACvB,CAAO,KAAA,CACL,GAAIP,CAAAA,CAAI,CAAKC,EAAAA,CAAAA,CAAG,MAChBhC,CAAAA,CAAE+B,CAAG,EAAA,CAAA,CAAI,GAAOO,CAAAA,CAAAA,EAAK,EACrBtC,CAAAA,CAAAA,CAAE+B,CAAG,EAAA,CAAA,CAAI,IAAQO,CAAK,EAAA,EAAA,CAAM,GAC9B,CACAtC,CAAE+B,CAAAA,CAAAA,EAAG,CAAI,CAAA,GAAA,CAAQO,CAAK,EAAA,CAAA,CAAK,GAC7B,CACAtC,CAAE+B,CAAAA,CAAAA,EAAG,CAAI,CAAA,GAAA,CAAOO,CAAI,CAAA,GACtB,CACF,CACAtC,CAAE+B,CAAAA,CAAC,CAAI,CAAA,EACT,CACF,CAAA,CACAY,EAAK,CAAA,EACLC,CAAAA,EAAAA,CAAM7C,CAAM,EAAA,CACV,KAAOA,CAAAA,CAAE,MAAU,EAAA,CACjB,IAAIC,CAAAA,CAAID,CAAE,CAAA,GAAA,EACVA,CAAAA,CAAAA,CAAE,GAAI,EAAA,CAAEC,CAAC,EACX,CACF,EACF,SAAS6C,EAAAA,CAAE9C,CAAG,CAAA,CACZ,OAAO,IAAA,CAAK,YAAae,CAAAA,CAAAA,CAAEf,CAAK,EAAA,CAAC,CAAC,CACpC,CACA,IAAI+C,EAAI,CAAA,GACNC,CAAI,CAAA,EACJC,CAAAA,EAAAA,CAAK,EAAC,CACNC,EACAC,CAAAA,CAAAA,CAAI,CAACnD,CAAAA,CAAGC,CAAG+B,CAAAA,CAAAA,GAAM,CACf,SAASC,CAAEmB,CAAAA,CAAAA,CAAG,CAEZ,GADAA,CAAIpB,CAAAA,CAAAA,CAAEoB,CAAC,CAAA,CACHA,CAAE,CAAA,MAAA,GAAWpD,CAAE,CAAA,MAAA,CAAQ,MAAM,IAAIkD,EAAG,CAAA,iCAAiC,CACzE,CAAA,IAAA,IAASG,EAAI,CAAGA,CAAAA,CAAAA,CAAIrD,CAAE,CAAA,MAAA,CAAQ,EAAEqD,CAAAA,CAAGC,CAAEtD,CAAAA,CAAAA,CAAEqD,CAAC,CAAA,CAAGD,CAAEC,CAAAA,CAAC,CAAC,EACjD,CACArD,CAAAA,CAAE,OAAQ,CAAA,SAAUoD,CAAG,CAAA,CACrBH,EAAGG,CAAAA,CAAC,CAAInD,CAAAA,EACV,CAAC,CAAA,CACD,IAAIkC,CAAAA,CAAI,KAAMlC,CAAAA,CAAAA,CAAE,MAAM,CAAA,CACpBsC,EAAI,EAAC,CACL,CAAI,CAAA,CAAA,CACNtC,CAAE,CAAA,OAAA,CAAQ,CAACmD,CAAAA,CAAGC,CAAM,GAAA,CAClBL,CAAE,CAAA,cAAA,CAAeI,CAAC,CAAA,CACbjB,CAAEkB,CAAAA,CAAC,CAAIL,CAAAA,CAAAA,CAAEI,CAAC,CAAA,EACVb,CAAE,CAAA,IAAA,CAAKa,CAAC,CAAA,CACTL,EAAE,CAAA,cAAA,CAAeK,CAAC,CAAA,GAAML,EAAEK,CAAAA,CAAC,CAAI,CAAA,EAC/BL,CAAAA,CAAAA,EAAAA,CAAEK,CAAC,CAAA,CAAE,IAAK,CAAA,IAAM,CACdjB,CAAAA,CAAEkB,CAAC,CAAA,CAAIL,CAAEI,CAAAA,CAAC,CACV,CAAA,EAAE,CACF,CAAA,CAAA,GAAMb,CAAE,CAAA,MAAA,EAAUN,CAAEE,CAAAA,CAAC,EACvB,CAAC,CACP,EAAA,CAAC,CACKI,CAAAA,CAAAA,CAAE,MAAR,GAAA,CAAA,EAAkBN,CAAEE,CAAAA,CAAC,EACvB,CAAA,CACAoB,GACAC,CAAKxD,CAAAA,CAAAA,EAAM,CACT,IAAA,IAASC,CAAI,CAAA,EAAA,CAAIU,CAAEX,CAAAA,CAAC,CAAKC,EAAAA,CAAAA,EAAKsD,EAAG5C,CAAAA,CAAAA,CAAEX,CAAG,EAAA,CAAC,CACvC,CAAA,OAAOC,CACT,CAAA,CACAwD,CACF,CAAA,SAASC,EAAG1D,CAAAA,CAAAA,CAAGC,CAAG+B,CAAAA,CAAAA,CAAI,EAAC,CAAG,CACxB,IAAIC,CAAIhC,CAAAA,CAAAA,CAAE,IACV,CAAA,GAAI,CAACD,CAAAA,CAAG,MAAM,IAAIyD,CAAE,CAAA,CAAA,MAAA,EAASxB,CAAC,CAAA,6CAAA,CAA+C,CAC7E,CAAA,GAAIe,CAAE,CAAA,cAAA,CAAehD,CAAC,CAAA,CAAG,CACvB,GAAIgC,CAAE,CAAA,EAAA,CAAI,OACV,MAAM,IAAIyB,CAAAA,CAAE,CAAyBxB,sBAAAA,EAAAA,CAAC,CAAS,OAAA,CAAA,CACjD,CACAe,CAAAA,CAAEhD,CAAC,CAAA,CAAIC,CACP,CAAA,OAAOgD,GAAGjD,CAAC,CAAA,CACX+C,EAAE,CAAA,cAAA,CAAe/C,CAAC,CAAA,GAAOC,CAAI8C,CAAAA,EAAAA,CAAE/C,CAAC,CAAA,CAAI,OAAO+C,EAAAA,CAAE/C,CAAC,CAAA,CAAGC,CAAE,CAAA,OAAA,CAASkC,CAAMA,EAAAA,CAAAA,EAAG,CAAA,EACvE,CACA,SAASmB,CAAEtD,CAAAA,CAAAA,CAAGC,CAAG+B,CAAAA,CAAAA,CAAI,EAAC,CAAG,CACvB,GAAI,EAAE,gBAAA,GAAoB/B,CAAI,CAAA,CAAA,MAAM,IAAI,SAAA,CAAU,yDAAyD,CAAA,CAC3G,OAAOyD,EAAAA,CAAG1D,CAAGC,CAAAA,CAAAA,CAAG+B,CAAC,CACnB,CACA,IAAI2B,EAAM3D,CAAAA,CAAAA,EAAM,CACZ,MAAM,IAAIyD,CAAAA,CAAEzD,CAAE,CAAA,EAAA,CAAG,EAAG,CAAA,EAAA,CAAG,IAAO,CAAA,2BAA2B,CAC3D,CAAA,CACA4D,EAAK,CAAA,CAAA,CAAA,CACLC,EAAK,CAAA,IAAM,EACXC,CAAAA,EAAAA,CAAK,CAAC9D,CAAAA,CAAGC,CAAG+B,CAAAA,CAAAA,GACN/B,CAAM+B,GAAAA,CAAAA,CAAUhC,CACLgC,CAAAA,CAAAA,CAAE,EAAb,GAAA,KAAA,CAAA,CAAwB,IAC5BhC,EAAAA,CAAAA,CAAI8D,EAAG9D,CAAAA,CAAAA,CAAGC,CAAG+B,CAAAA,CAAAA,CAAE,EAAE,CAAA,CACDhC,CAAT,GAAA,IAAA,CAAa,IAAOgC,CAAAA,CAAAA,CAAE,EAAGhC,CAAAA,CAAC,CAEnC+D,CAAAA,CAAAA,EAAAA,CAAK,EAAC,CACNC,EAAK,CAAA,GACLC,EAAK,CAAA,IAAM,CACT,KAAOD,EAAG,CAAA,MAAA,EAAU,CAClB,IAAIhE,CAAIgE,CAAAA,EAAAA,CAAG,GAAI,EAAA,CACfhE,CAAE,CAAA,EAAA,CAAG,EAAK,CAAA,CAAA,CAAA,CACVA,CAAE,CAAA,MAAA,GACJ,CACF,CACAkE,CAAAA,EAAAA,CACAC,EAAK,CAAA,EACLC,CAAAA,EAAAA,CAAK,CAACpE,CAAAA,CAAGC,CAAM,GAAA,CACb,GAAeA,CAAAA,GAAX,OAAc,MAAM,IAAIwD,CAAE,CAAA,6BAA6B,CAC3D,CAAA,KAAOzD,CAAE,CAAA,EAAA,EAAOC,CAAID,CAAAA,CAAAA,CAAE,EAAGC,CAAAA,CAAC,CAAKD,CAAAA,CAAAA,CAAIA,CAAE,CAAA,EAAA,CACrC,OAAOmE,EAAAA,CAAGlE,CAAC,CACb,CACAoE,CAAAA,EAAAA,CAAK,CAACrE,CAAAA,CAAGC,CAAM,GAAA,CACb,GAAI,CAACA,CAAE,CAAA,EAAA,EAAM,CAACA,CAAAA,CAAE,EAAI,CAAA,MAAM,IAAIiD,EAAAA,CAAG,0CAA0C,CAAA,CAC3E,GAAI,CAAC,CAACjD,CAAAA,CAAE,EAAO,EAAA,CAAC,CAACA,CAAAA,CAAE,EAAI,CAAA,MAAM,IAAIiD,EAAAA,CAAG,kDAAkD,CAAA,CACtF,OAAAjD,CAAAA,CAAE,KAAQ,CAAA,CAAE,KAAO,CAAA,CAAE,CACdqE,CAAAA,EAAAA,CAAG,MAAO,CAAA,MAAA,CAAOtE,CAAG,CAAA,CAAE,GAAI,CAAE,KAAA,CAAOC,CAAG,CAAA,QAAA,CAAU,CAAG,CAAA,CAAE,CAAC,CAAC,CAChE,CAAA,CACAqE,EAAMtE,CAAAA,CAAAA,EACgB,OAAO,oBAAA,CAAvB,GAAqDsE,EAAAA,EAAAA,CAAMrE,CAAMA,EAAAA,CAAAA,CAAID,CACzE4D,GAAAA,EAAAA,CAAK,IAAI,oBAAA,CAAsB3D,CAAM,EAAA,CACnCA,CAAIA,CAAAA,CAAAA,CAAE,EACN,CAAA,EAAEA,CAAE,CAAA,KAAA,CAAM,KACJA,CAAAA,CAAAA,CAAE,KAAM,CAAA,KAAA,GAAd,CAAwBA,GAAAA,CAAAA,CAAE,EAAKA,CAAAA,CAAAA,CAAE,EAAG,CAAA,EAAA,CAAGA,CAAE,CAAA,EAAE,CAAIA,CAAAA,CAAAA,CAAE,EAAG,CAAA,EAAA,CAAG,EAAGA,CAAAA,CAAAA,CAAE,EAAE,CAAA,EAChE,CAAC,CAAA,CACDqE,EAAMrE,CAAAA,CAAAA,EAAM,CACV,IAAI+B,CAAI/B,CAAAA,CAAAA,CAAE,EACV,CAAA,OAAA+B,CAAE,CAAA,EAAA,EAAM4B,EAAG,CAAA,QAAA,CAAS3D,EAAG,CAAE,EAAA,CAAI+B,CAAE,CAAA,CAAG/B,CAAC,CAAA,CAC5BA,CACT,CAAA,CACA4D,EAAM5D,CAAAA,CAAAA,EAAM,CACV2D,EAAAA,CAAG,UAAW3D,CAAAA,CAAC,EACjB,CAAA,CACOqE,EAAGtE,CAAAA,CAAC,CAEf,CAAA,CAAA,SAASuE,EAAK,EAAA,EACd,IAAIC,EAAK,CAAA,CAACxE,CAAGC,CAAAA,CAAAA,GAAM,MAAO,CAAA,cAAA,CAAeA,CAAG,CAAA,MAAA,CAAQ,CAAE,KAAA,CAAOD,CAAE,CAAC,CAC9DyE,CAAAA,EAAAA,CAAK,CAACzE,CAAAA,CAAGC,CAAG+B,CAAAA,CAAAA,GAAM,CAChB,GAAehC,CAAEC,CAAAA,CAAC,CAAE,CAAA,EAAA,GAAhB,KAAoB,CAAA,CAAA,CACtB,IAAIgC,CAAAA,CAAIjC,CAAEC,CAAAA,CAAC,CACXD,CAAAA,CAAAA,CAAEC,CAAC,CAAA,CAAI,SAAakC,GAAAA,CAAAA,CAAG,CACrB,GAAI,CAACnC,CAAAA,CAAEC,CAAC,CAAE,CAAA,EAAA,CAAG,cAAekC,CAAAA,CAAAA,CAAE,MAAM,CAAA,CAClC,MAAM,IAAIsB,CACR,CAAA,CAAA,UAAA,EAAazB,CAAC,CAAA,8CAAA,EAAiDG,CAAE,CAAA,MAAM,CAAuBnC,oBAAAA,EAAAA,CAAAA,CAAEC,CAAC,CAAA,CAAE,EAAE,CAAA,EAAA,CACvG,CACF,CAAA,OAAOD,CAAEC,CAAAA,CAAC,CAAE,CAAA,EAAA,CAAGkC,CAAE,CAAA,MAAM,CAAE,CAAA,KAAA,CAAM,IAAMA,CAAAA,CAAC,CACxC,CACAnC,CAAAA,CAAAA,CAAEC,CAAC,CAAA,CAAE,EAAK,CAAA,EACVD,CAAAA,CAAAA,CAAEC,CAAC,CAAA,CAAE,EAAGgC,CAAAA,CAAAA,CAAE,EAAE,CAAA,CAAIA,EAClB,CACF,CACAyC,CAAAA,EAAAA,CAAK,CAAC1E,CAAAA,CAAGC,CAAG+B,CAAAA,CAAAA,GAAM,CAChB,GAAIpC,CAAE,CAAA,cAAA,CAAeI,CAAC,CAAA,CAAG,CACvB,GAAegC,CAAX,GAAA,KAAA,CAAA,EAA4BpC,EAAEI,CAAC,CAAA,CAAE,EAAhB,GAAA,KAAA,CAAA,EAAiCJ,CAAEI,CAAAA,CAAC,CAAE,CAAA,EAAA,CAAGgC,CAAC,CAAA,GAApB,KACzC,CAAA,CAAA,MAAM,IAAIyB,CAAAA,CAAE,CAAgCzD,6BAAAA,EAAAA,CAAC,CAAS,OAAA,CAAA,CAAA,CAExD,GADAyE,EAAAA,CAAG7E,CAAGI,CAAAA,CAAAA,CAAGA,CAAC,CAAA,CACNJ,CAAE,CAAA,cAAA,CAAeoC,CAAC,CAAA,CACpB,MAAM,IAAIyB,CAAE,CAAA,CAAA,oFAAA,EAAuFzB,CAAC,CAAA,EAAA,CAAI,CAC1GpC,CAAAA,CAAAA,CAAEI,CAAC,CAAA,CAAE,EAAGgC,CAAAA,CAAC,CAAI/B,CAAAA,EACf,CAAQL,KAAAA,CAAAA,CAAEI,CAAC,CAAA,CAAIC,CAAe+B,CAAAA,CAAAA,GAAX,KAAiBpC,CAAAA,GAAAA,CAAAA,CAAEI,CAAC,CAAA,CAAE,EAAKgC,CAAAA,CAAAA,EAChD,CACA2C,CAAAA,EAAAA,CAAM3E,CAAM,EAAA,CACV,GAAeA,CAAAA,GAAX,KAAc,CAAA,CAAA,OAAO,UACzBA,CAAAA,CAAAA,CAAIA,EAAE,OAAQ,CAAA,gBAAA,CAAkB,GAAG,CAAA,CACnC,IAAIC,CAAAA,CAAID,CAAE,CAAA,UAAA,CAAW,CAAC,CAAA,CACtB,OAAO,EAAA,EAAMC,CAAK,EAAA,EAAA,EAAMA,CAAI,CAAA,CAAA,CAAA,EAAID,CAAC,CAAA,CAAA,CAAKA,CACxC,CAAA,CACF,SAAS4E,EAAAA,CAAG5E,CAAGC,CAAAA,CAAAA,CAAG+B,CAAGC,CAAAA,CAAAA,CAAGE,CAAGI,CAAAA,CAAAA,CAAG,CAAGa,CAAAA,CAAAA,CAAG,CAClC,IAAA,CAAK,IAAOpD,CAAAA,CAAAA,CACZ,IAAK,CAAA,WAAA,CAAcC,CACnB,CAAA,IAAA,CAAK,EAAK+B,CAAAA,CAAAA,CACV,IAAK,CAAA,EAAA,CAAKC,CACV,CAAA,IAAA,CAAK,EAAKE,CAAAA,CAAAA,CACV,IAAK,CAAA,EAAA,CAAKI,CACV,CAAA,IAAA,CAAK,EAAK,CAAA,CAAA,CACV,IAAK,CAAA,EAAA,CAAKa,CACV,CAAA,IAAA,CAAK,EAAK,CAAA,GACZ,CACA,IAAIyB,EAAAA,CAAK,CAAC7E,CAAAA,CAAGC,EAAG+B,CAAM,GAAA,CACpB,KAAO/B,CAAAA,GAAM+B,CAAK,EAAA,CAChB,GAAI,CAAC/B,CAAE,CAAA,EAAA,CAAI,MAAM,IAAIwD,CAAE,CAAA,CAAA,6BAAA,EAAgCzB,CAAE,CAAA,IAAI,CAAwB/B,qBAAAA,EAAAA,CAAAA,CAAE,IAAI,CAAA,CAAE,CAC7FD,CAAAA,CAAAA,CAAIC,CAAE,CAAA,EAAA,CAAGD,CAAC,CAAA,CACVC,CAAIA,CAAAA,CAAAA,CAAE,GACR,CACA,OAAOD,CACT,CACA,CAAA,SAAS8E,EAAG9E,CAAAA,CAAAA,CAAGC,CAAG,CAAA,CAChB,GAAaA,CAAAA,GAAT,IAAY,CAAA,CACd,GAAI,IAAA,CAAK,EAAI,CAAA,MAAM,IAAIwD,CAAAA,CAAE,CAAuB,oBAAA,EAAA,IAAA,CAAK,IAAI,CAAA,CAAE,CAC3D,CAAA,OACF,CAAA,CACA,GAAI,CAACxD,CAAE,CAAA,EAAA,CAAI,MAAM,IAAIwD,CAAE,CAAA,CAAA,aAAA,EAAgBsB,GAAG9E,CAAC,CAAC,CAAU,OAAA,EAAA,IAAA,CAAK,IAAI,CAAA,CAAE,CACjE,CAAA,GAAI,CAACA,CAAAA,CAAE,EAAG,CAAA,EAAA,CAAI,MAAM,IAAIwD,CAAE,CAAA,CAAA,gDAAA,EAAmD,IAAK,CAAA,IAAI,CAAE,CAAA,CAAA,CACxF,OAAOoB,EAAAA,CAAG5E,CAAE,CAAA,EAAA,CAAG,EAAIA,CAAAA,CAAAA,CAAE,EAAG,CAAA,EAAA,CAAG,EAAI,CAAA,IAAA,CAAK,EAAE,CACxC,CACA,SAAS+E,EAAAA,CAAGhF,CAAGC,CAAAA,CAAAA,CAAG,CAChB,GAAaA,CAAT,GAAA,IAAA,CAAY,CACd,GAAI,IAAK,CAAA,EAAA,CAAI,MAAM,IAAIwD,CAAE,CAAA,CAAA,oBAAA,EAAuB,IAAK,CAAA,IAAI,CAAE,CAAA,CAAA,CAC3D,GAAI,IAAA,CAAK,EAAI,CAAA,CACX,IAAIzB,CAAAA,CAAI,IAAK,CAAA,EAAA,EACb,CAAA,OAAShC,CAAT,GAAA,IAAA,EAAcA,EAAE,IAAK,CAAA,IAAA,CAAK,EAAIgC,CAAAA,CAAC,CACxBA,CAAAA,CACT,CACA,OACF,CAAA,CACA,GAAI,CAAC/B,CAAK,EAAA,CAACA,CAAE,CAAA,EAAA,CAAI,MAAM,IAAIwD,CAAE,CAAA,CAAA,aAAA,EAAgBsB,EAAG9E,CAAAA,CAAC,CAAC,CAAA,OAAA,EAAU,IAAK,CAAA,IAAI,CAAE,CAAA,CAAA,CACvE,GAAI,CAACA,CAAE,CAAA,EAAA,CAAG,EAAI,CAAA,MAAM,IAAIwD,CAAAA,CAAE,CAAmD,gDAAA,EAAA,IAAA,CAAK,IAAI,CAAA,CAAE,CACxF,CAAA,GAAI,CAAC,IAAA,CAAK,EAAMxD,EAAAA,CAAAA,CAAE,EAAG,CAAA,EAAA,CAAG,EACtB,CAAA,MAAM,IAAIwD,CAAAA,CACR,CAAmCxD,gCAAAA,EAAAA,CAAAA,CAAE,EAAG,CAAA,EAAA,CAAKA,CAAE,CAAA,EAAA,CAAG,EAAG,CAAA,IAAA,CAAOA,CAAE,CAAA,EAAA,CAAG,EAAG,CAAA,IAAI,sBAAsB,IAAK,CAAA,IAAI,CACzG,CAAA,CAAA,CAEF,GADA+B,CAAAA,CAAI6C,EAAG5E,CAAAA,CAAAA,CAAE,EAAG,CAAA,EAAA,CAAIA,CAAE,CAAA,EAAA,CAAG,EAAG,CAAA,EAAA,CAAI,IAAK,CAAA,EAAE,CAC/B,CAAA,IAAA,CAAK,EAAI,CAAA,CACX,GAAeA,CAAAA,CAAE,EAAG,CAAA,EAAA,GAAhB,KAAoB,CAAA,CAAA,MAAM,IAAIwD,CAAAA,CAAE,iDAAiD,CAAA,CACrF,OAAQ,IAAA,CAAK,EAAI,EACf,KAAK,CAAA,CACH,GAAIxD,CAAAA,CAAE,EAAG,CAAA,EAAA,GAAO,IAAM+B,CAAAA,CAAAA,CAAI/B,CAAE,CAAA,EAAA,CAAG,EAE7B,CAAA,KAAA,MAAM,IAAIwD,CAAAA,CACR,CAAmCxD,gCAAAA,EAAAA,CAAAA,CAAE,EAAG,CAAA,EAAA,CAAKA,CAAE,CAAA,EAAA,CAAG,EAAG,CAAA,IAAA,CAAOA,CAAE,CAAA,EAAA,CAAG,EAAG,CAAA,IAAI,CACtE,mBAAA,EAAA,IAAA,CAAK,IACP,CAAA,CACF,EACF,MACF,KACE+B,CAAAA,CAAAA,CAAAA,CAAI/B,CAAE,CAAA,EAAA,CAAG,EACT,CAAA,MACF,KAAK,CAAA,CACH,GAAIA,CAAAA,CAAE,EAAG,CAAA,EAAA,GAAO,IAAM+B,CAAAA,CAAAA,CAAI/B,CAAE,CAAA,EAAA,CAAG,EAC1B,CAAA,KAAA,CACH,IAAIgC,CAAAA,CAAIhC,CAAE,CAAA,KAAA,EACV+B,CAAAA,CAAAA,CAAI,IAAK,CAAA,EAAA,CACPA,CACAiD,CAAAA,EAAAA,CAAG,IAAMhD,CAAAA,CAAE,MAAU,EAAC,CACxB,CAAA,CACSjC,CAAT,GAAA,IAAA,EAAcA,CAAE,CAAA,IAAA,CAAK,IAAK,CAAA,EAAA,CAAIgC,CAAC,EACjC,CACA,MACF,QACE,MAAM,IAAIyB,CAAAA,CAAE,6BAA6B,CAC7C,CACF,CACA,OAAOzB,CACT,CACA,SAASkD,EAAGlF,CAAAA,CAAAA,CAAGC,CAAG,CAAA,CAChB,GAAaA,CAAAA,GAAT,KAAY,CACd,GAAI,IAAK,CAAA,EAAA,CAAI,MAAM,IAAIwD,CAAE,CAAA,CAAA,oBAAA,EAAuB,IAAK,CAAA,IAAI,CAAE,CAAA,CAAA,CAC3D,OAAO,CACT,CACA,GAAI,CAACxD,CAAAA,CAAE,EAAI,CAAA,MAAM,IAAIwD,CAAAA,CAAE,CAAgBsB,aAAAA,EAAAA,EAAAA,CAAG9E,CAAC,CAAC,CAAU,OAAA,EAAA,IAAA,CAAK,IAAI,CAAA,CAAE,CACjE,CAAA,GAAI,CAACA,CAAE,CAAA,EAAA,CAAG,EAAI,CAAA,MAAM,IAAIwD,CAAAA,CAAE,CAAmD,gDAAA,EAAA,IAAA,CAAK,IAAI,CAAA,CAAE,CACxF,CAAA,GAAIxD,CAAE,CAAA,EAAA,CAAG,EAAG,CAAA,EAAA,CAAI,MAAM,IAAIwD,CAAE,CAAA,CAAA,gCAAA,EAAmCxD,CAAE,CAAA,EAAA,CAAG,EAAG,CAAA,IAAI,CAAsB,mBAAA,EAAA,IAAA,CAAK,IAAI,CAAA,CAAE,CAC5G,CAAA,OAAO4E,EAAG5E,CAAAA,CAAAA,CAAE,GAAG,EAAIA,CAAAA,CAAAA,CAAE,EAAG,CAAA,EAAA,CAAG,EAAI,CAAA,IAAA,CAAK,EAAE,CACxC,CACA,SAASkF,EAAGnF,CAAAA,CAAAA,CAAGC,CAAG+B,CAAAA,CAAAA,CAAGC,CAAGE,CAAAA,CAAAA,CAAGI,CAAG,CAAA,CAAA,CAAGa,CAAGC,CAAAA,CAAAA,CAAG+B,CAAGC,CAAAA,CAAAA,CAAG,CAC3C,IAAA,CAAK,IAAOrF,CAAAA,CAAAA,CACZ,IAAK,CAAA,EAAA,CAAKC,CACV,CAAA,IAAA,CAAK,EAAK+B,CAAAA,CAAAA,CACV,IAAK,CAAA,EAAA,CAAKC,CACV,CAAA,IAAA,CAAK,EAAKE,CAAAA,CAAAA,CACV,IAAK,CAAA,EAAA,CAAKI,CACV,CAAA,IAAA,CAAK,EAAK,CAAA,CAAA,CACV,IAAK,CAAA,EAAA,CAAKa,CACV,CAAA,IAAA,CAAK,EAAKC,CAAAA,CAAAA,CACV,IAAK,CAAA,EAAA,CAAK+B,CACV,CAAA,IAAA,CAAK,EAAKC,CAAAA,CAAAA,CACVlD,CAAgBlC,EAAAA,CAAAA,CAAE,EAAb,GAAA,KAAA,CAAA,CAAmB,IAAK,CAAA,UAAA,CAAa+E,EAAQ,EAAA,IAAA,CAAK,WAAa/C,CAAI6C,CAAAA,EAAAA,CAAKI,EAAM,CAAA,IAAA,CAAK,EAAK,CAAA,IAAA,EAC/F,CACA,IAAII,EAAK,CAAA,CAACtF,CAAGC,CAAAA,CAAAA,CAAG+B,CAAM,GAAA,CAClB,GAAI,CAACpC,CAAE,CAAA,cAAA,CAAeI,CAAC,CAAA,CAAG,MAAM,IAAIkD,EAAG,CAAA,qCAAqC,CACjEtD,CAAAA,CAAAA,CAAEI,CAAC,CAAA,CAAE,EAAhB,GAAA,KAAA,CAAA,EAAiCgC,CAAX,GAAA,KAAA,CAAA,CAAgBpC,CAAEI,CAAAA,CAAC,CAAE,CAAA,EAAA,CAAGgC,CAAC,CAAA,CAAI/B,CAAOL,EAAAA,CAAAA,CAAEI,CAAC,CAAA,CAAIC,CAAKL,CAAAA,CAAAA,CAAEI,CAAC,CAAA,CAAE,EAAKgC,CAAAA,CAAAA,EAClF,CACAuD,CAAAA,CAAAA,CACAC,EAAK,CAAA,CAACxF,CAAGC,CAAAA,CAAAA,CAAG+B,CAAI,CAAA,EACdhC,IAAAA,CAAAA,CAAE,QAAS,CAAA,GAAG,CAAMA,EAAAA,CAAAA,CAAIA,CAAE,CAAA,OAAA,CAAQ,KAAM,GAAG,CAAA,CAAKC,CAAQL,CAAAA,IAAAA,CAAAA,CAAE,UAAaI,CAAAA,CAAC,CAAGC,EAAAA,CAAAA,CAAG,GAAG+B,CAAC,CAAO/B,EAAAA,CAAAA,CAAIsF,CAAE,CAAA,GAAA,CAAItF,CAAC,CAAA,CAAE,GAAG+B,CAAC,CACnG/B,CAAAA,CAAAA,CAAAA,CAETwF,EACE,CAAA,CAACzF,CAAGC,CAAAA,CAAAA,GACJ,CAAI+B,GAAAA,CAAAA,GACFwD,EAAGxF,CAAAA,CAAAA,CAAGC,CAAG+B,CAAAA,CAAC,CACd0D,CAAAA,CAAAA,CAAI,CAAC1F,CAAAA,CAAGC,CAAM,GAAA,CACZD,CAAIwD,CAAAA,CAAAA,CAAExD,CAAC,CAAA,CACP,IAAIgC,CAAAA,CAAIhC,CAAE,CAAA,QAAA,CAAS,GAAG,CAAA,CAAIyF,EAAGzF,CAAAA,CAAAA,CAAGC,CAAC,CAAA,CAAIsF,CAAE,CAAA,GAAA,CAAItF,CAAC,CAAA,CAC5C,GAAkB,OAAO+B,CAArB,EAAA,UAAA,CAAwB,MAAM,IAAIyB,CAAE,CAAA,CAAA,wCAAA,EAA2CzD,CAAC,CAAA,EAAA,EAAKC,CAAC,CAAE,CAAA,CAAA,CAC5F,OAAO+B,CACT,CACA2D,CAAAA,EAAAA,CACAC,EAAM5F,CAAAA,CAAAA,EAAM,CACVA,CAAAA,CAAI6F,EAAG7F,CAAAA,CAAC,CACR,CAAA,IAAIC,CAAIuD,CAAAA,CAAAA,CAAExD,CAAC,CAAA,CACX,OAAA8F,CAAAA,CAAE9F,CAAC,CAAA,CACIC,CACT,CAAA,CACA8F,EAAK,CAAA,CAAC/F,CAAGC,CAAAA,CAAAA,GAAM,CACb,SAAS+B,CAAEO,CAAAA,CAAAA,CAAG,CACZJ,CAAEI,CAAAA,CAAC,CAAKS,EAAAA,CAAAA,CAAET,CAAC,CAAA,GAAMU,EAAGV,CAAAA,CAAC,CAAIU,CAAAA,EAAAA,CAAGV,CAAC,CAAA,CAAE,OAAQP,CAAAA,CAAC,CAAKC,EAAAA,CAAAA,CAAE,IAAKM,CAAAA,CAAC,CAAIJ,CAAAA,CAAAA,CAAEI,CAAC,CAAA,CAAI,CAClE,CAAA,CAAA,EAAA,CACA,IAAIN,CAAAA,CAAI,EAAC,CACPE,CAAI,CAAA,EACN,CAAA,MAAAlC,EAAE,OAAQ+B,CAAAA,CAAC,CACL,CAAA,IAAI2D,EAAG,CAAA,CAAA,EAAG3F,CAAC,CAAA,EAAA,CAAA,CAAOiC,CAAE,CAAA,GAAA,CAAI2D,EAAE,CAAA,CAAE,IAAK,CAAA,CAAC,IAAI,CAAC,CAAC,CAChD,CACAI,CAAAA,EAAAA,CAAK,CAAChG,CAAAA,CAAGC,CAAM,GAAA,CACb,IAAS+B,IAAAA,CAAAA,CAAI,EAAC,CAAGC,CAAI,CAAA,CAAA,CAAGA,CAAIjC,CAAAA,CAAAA,CAAGiC,CAAKD,EAAAA,CAAAA,CAAAA,CAAE,IAAKjB,CAAAA,CAAAA,CAAGd,CAAI,CAAA,CAAA,CAAIgC,CAAM,EAAA,CAAC,CAAC,CAAA,CAC9D,OAAOD,CACT,CACF,CAAA,SAASiE,EAAGjG,CAAAA,CAAAA,CAAG,CACb,IAAA,IAASC,CAAI,CAAA,CAAA,CAAGA,CAAID,CAAAA,CAAAA,CAAE,MAAQ,CAAA,EAAEC,CAAG,CAAA,GAAaD,CAAEC,CAAAA,CAAC,CAAZ,GAAA,IAAA,EAA4BD,CAAEC,CAAAA,CAAC,EAAE,EAAhB,GAAA,KAAA,CAAA,CAAoB,OAAO,CAAA,CAAA,CACnF,OAAO,CAAA,CACT,CACA,SAASiG,EAAGlG,CAAAA,CAAAA,CAAGC,CAAG+B,CAAAA,CAAAA,CAAGC,CAAGE,CAAAA,CAAAA,CAAG,CACzB,IAAII,CAAItC,CAAAA,CAAAA,CAAE,MACV,CAAA,GAAI,CAAIsC,CAAAA,CAAAA,CAAG,MAAM,IAAIkB,CAAE,CAAA,gFAAgF,CACvG,CAAA,IAAI,CAAaxD,CAAAA,CAAAA,CAAE,CAAC,CAAA,GAAZ,IAA0B+B,EAAAA,CAAAA,GAAT,IACvBoB,CAAAA,CAAAA,CAAI6C,EAAGhG,CAAAA,CAAC,CACRoD,CAAAA,CAAAA,CAAepD,CAAE,CAAA,CAAC,CAAE,CAAA,IAAA,GAAhB,MACJmF,CAAAA,CAAAA,CAAI7C,CAAI,CAAA,CAAA,CACR8C,CAAI,CAAA,KAAA,CAAMD,CAAC,CAAA,CACXe,CAAI,CAAA,EACJC,CAAAA,CAAAA,CAAI,EAAC,CACP,OAAO5B,EAAAA,CAAGxE,CAAG,CAAA,SAAA,GAAaqG,CAAG,CAAA,CAC3B,GAAIA,CAAE,CAAA,MAAA,GAAWjB,CAAG,CAAA,MAAM,IAAI3B,CAAAA,CAAE,CAAYzD,SAAAA,EAAAA,CAAC,CAAgBqG,aAAAA,EAAAA,CAAAA,CAAE,MAAM,CAAA,qBAAA,EAAwBjB,CAAC,CAAA,CAAE,CAIhG,CAAA,GAHAgB,CAAE,CAAA,MAAA,CAAS,CACXD,CAAAA,CAAAA,CAAE,MAAS,CAAA,CAAA,CAAI,CAAI,CAAA,CAAA,CACnBA,CAAE,CAAA,CAAC,CAAIhE,CAAAA,CAAAA,CACH,CAAG,CAAA,CACL,IAAImE,CAAAA,CAAIrG,CAAE,CAAA,CAAC,CAAE,CAAA,UAAA,CAAWmG,CAAG,CAAA,IAAI,CAC/BD,CAAAA,CAAAA,CAAE,CAAC,CAAA,CAAIG,EACT,CACA,IAASC,IAAAA,CAAAA,CAAI,CAAGA,CAAAA,CAAAA,CAAInB,CAAG,CAAA,EAAEmB,CAAIlB,CAAAA,CAAAA,CAAEkB,CAAC,CAAA,CAAItG,CAAEsG,CAAAA,CAAAA,CAAI,CAAC,CAAA,CAAE,UAAWH,CAAAA,CAAAA,CAAGC,CAAEE,CAAAA,CAAC,CAAC,CAAA,CAAIJ,EAAE,IAAKd,CAAAA,CAAAA,CAAEkB,CAAC,CAAC,CAE9E,CAAA,GADAF,CAAIpE,CAAAA,CAAAA,CAAE,GAAGkE,CAAC,CACN/C,CAAAA,CAAAA,CAAGP,EAAGuD,CAAAA,CAAC,CAET,CAAA,KAAA,IAAKG,CAAI,CAAA,CAAA,CAAI,CAAI,CAAA,CAAA,CAAGA,CAAItG,CAAAA,CAAAA,CAAE,MAAQsG,CAAAA,CAAAA,EAAAA,CAAK,CACrC,IAAIC,CAAUD,CAAAA,CAAAA,GAAN,CAAUD,CAAAA,CAAAA,CAAIjB,CAAEkB,CAAAA,CAAAA,CAAI,CAAC,CACpBtG,CAAAA,CAAAA,CAAEsG,CAAC,CAAA,CAAE,EAAd,GAAA,IAAA,EAAoBtG,CAAEsG,CAAAA,CAAC,CAAE,CAAA,EAAA,CAAGC,CAAC,EAC/B,CACF,OAAAF,CAAIjD,CAAAA,CAAAA,CAAIpD,CAAE,CAAA,CAAC,CAAE,CAAA,YAAA,CAAaoG,CAAC,CAAA,CAAI,KACxBC,CAAAA,CAAAA,CACT,CAAC,CACH,CACA,IAAIG,EAAMzG,CAAAA,CAAAA,EAAM,CACZA,CAAAA,CAAIA,EAAE,IAAK,EAAA,CACX,IAAMC,CAAAA,CAAID,CAAE,CAAA,OAAA,CAAQ,GAAG,CAAA,CACvB,OAAcC,CAAAA,GAAP,CAAWD,CAAAA,CAAAA,CAAAA,CAAE,MAAO,CAAA,CAAA,CAAGC,CAAC,CAAA,CAAID,CACrC,CAAA,CACA0G,EAAK,CAAA,EACLC,CAAAA,CAAAA,CAAI,EAAC,CACLC,EAAM5G,CAAAA,CAAAA,EAAM,CACV,CAAA,CAAIA,CAAW,EAAA,EAAE2G,CAAE3G,CAAAA,CAAAA,CAAI,CAAC,CAAA,GAAf,CAAsB2G,GAAAA,CAAAA,CAAE3G,CAAC,CAAA,CAAI,KAAS0G,CAAAA,CAAAA,EAAAA,CAAG,IAAK1G,CAAAA,CAAC,CAC1D,EAAA,CAAA,CACA6G,EAAM7G,CAAAA,CAAAA,EAAM,CACV,GAAI,CAACA,CAAAA,CAAG,MAAM,IAAIyD,CAAE,CAAA,mCAAA,CAAsCzD,CAAC,CAAA,CAC3D,OAAO2G,CAAAA,CAAE3G,CAAC,CACZ,CACAiF,CAAAA,EAAAA,CAAMjF,CAAM,EAAA,CACV,OAAQA,CAAG,EACT,KAAK,KAAA,CAAA,CACH,OAAO,CAAA,CACT,KAAK,IAAA,CACH,OAAO,CAAA,CACT,IAAK,CAAA,CAAA,CACH,OAAO,CAAA,CACT,IAAK,CAAA,CAAA,CACH,OAAO,CAAA,CACT,QACE,IAAMC,CAAIyG,CAAAA,EAAAA,CAAG,GAAI,EAAA,EAAKC,CAAE,CAAA,MAAA,CACxB,OAAAA,CAAAA,CAAE1G,CAAC,CAAA,CAAID,CACP2G,CAAAA,CAAAA,CAAE1G,CAAI,CAAA,CAAC,CAAI,CAAA,CAAA,CACJA,CACX,CACF,CACA6G,CAAAA,EAAAA,CAAK,CACH,IAAA,CAAM,iBACN,CAAA,YAAA,CAAe9G,CAAM,EAAA,CACnB,IAAIC,CAAAA,CAAI4G,EAAG7G,CAAAA,CAAC,CACZ,CAAA,OAAA4G,EAAG5G,CAAAA,CAAC,CACGC,CAAAA,CACT,CACA,CAAA,UAAA,CAAY,CAACD,CAAAA,CAAGC,CAAMgF,GAAAA,EAAAA,CAAGhF,CAAC,CAAA,CAC1B,eAAgB,CAChB,CAAA,oBAAA,CAAsB6C,EACtB,CAAA,EAAA,CAAI,IACN,CAAA,CACAiE,EAAK,CAAA,CAAC/G,CAAGC,CAAAA,CAAAA,CAAG+B,CAAM,GAAA,CAChB,OAAQ/B,CAAAA,EACN,KACE,CAAA,CAAA,OAAO+B,CACH,CAAA,SAAUC,CAAG,CAAA,CACX,OAAO,IAAA,CAAK,YAAavB,CAAAA,CAAAA,CAAEuB,CAAC,CAAC,CAC/B,CAAA,CACA,SAAUA,CAAAA,CAAG,CACX,OAAO,IAAK,CAAA,YAAA,CAAatB,CAAEsB,CAAAA,CAAC,CAAC,CAC/B,CACN,CAAA,KACE,CAAA,CAAA,OAAOD,CACH,CAAA,SAAUC,CAAG,CAAA,CACX,OAAO,IAAA,CAAK,YAAarB,CAAAA,EAAAA,CAAEqB,CAAK,EAAA,CAAC,CAAC,CACpC,CACA,CAAA,SAAUA,CAAG,CAAA,CACX,OAAO,IAAA,CAAK,YAAapB,CAAAA,EAAAA,CAAEoB,GAAK,CAAC,CAAC,CACpC,CAAA,CACN,KAAK,CAAA,CACH,OAAOD,CAAAA,CACH,SAAUC,CAAAA,CAAG,CACX,OAAO,IAAK,CAAA,YAAA,CAAanB,CAAEmB,CAAAA,CAAAA,EAAK,CAAC,CAAC,CACpC,CAAA,CACA,SAAUA,CAAAA,CAAG,CACX,OAAO,IAAK,CAAA,YAAA,CAAalB,CAAEkB,CAAAA,CAAAA,EAAK,CAAC,CAAC,CACpC,CAAA,CACN,QACE,MAAM,IAAI,SAAU,CAAA,CAAA,uBAAA,EAA0BhC,CAAC,CAAA,GAAA,EAAMD,CAAC,CAAA,CAAE,CAC5D,CACF,CACAgH,CAAAA,EAAAA,CAAK,CAAChH,CAAAA,CAAGC,CAAM,GAAA,CACb,IAAI+B,CAAAA,CAAIgB,CAAEhD,CAAAA,CAAC,CACX,CAAA,GAAegC,CAAX,GAAA,KAAA,CAAA,CAAc,MAAQhC,CAAAA,CAAI,CAAGC,EAAAA,CAAC,CAAqB2F,kBAAAA,EAAAA,EAAAA,CAAG5F,CAAC,CAAC,GAAK,IAAIyD,CAAAA,CAAEzD,CAAC,CAAA,CACxE,OAAOgC,CACT,CACA+C,CAAAA,EAAAA,CAAM/E,CAAM,EAAA,CACV,GAAaA,CAAAA,GAAT,IAAY,CAAA,OAAO,MACvB,CAAA,IAAIC,CAAI,CAAA,OAAOD,CACf,CAAA,OAAoBC,CAAb,GAAA,QAAA,EAA8BA,CAAZ,GAAA,OAAA,EAAgCA,CAAf,GAAA,UAAA,CAAmBD,CAAE,CAAA,QAAA,EAAa,CAAA,EAAA,CAAKA,CACnF,CAAA,CACAiH,EAAK,CAAA,CAACjH,CAAGC,CAAAA,CAAAA,GAAM,CACb,OAAQA,CAAG,EACT,KAAK,CAAA,CACH,OAAO,SAAU+B,CAAG,CAAA,CAClB,OAAO,IAAA,CAAK,YAAahB,CAAAA,EAAAA,CAAGgB,CAAK,EAAA,CAAC,CAAC,CACrC,CACF,CAAA,KACE,CAAA,CAAA,OAAO,SAAUA,CAAAA,CAAG,CAClB,OAAO,IAAK,CAAA,YAAA,CAAaf,GAAGe,CAAK,EAAA,CAAC,CAAC,CACrC,CACF,CAAA,QACE,MAAM,IAAI,SAAU,CAAA,CAAA,qBAAA,EAAwB/B,CAAC,CAAA,GAAA,EAAMD,CAAC,CAAA,CAAE,CAC1D,CACF,CACAkH,CAAAA,EAAAA,CAAK,CAAClH,CAAAA,CAAGC,CAAG+B,CAAAA,CAAAA,GAAM,CAChB,OAAQ/B,CAAG,EACT,KAAK,CAAA,CACH,OAAO+B,CAAAA,CAAKC,CAAMvB,EAAAA,CAAAA,CAAEuB,CAAC,CAAA,CAAKA,CAAMtB,EAAAA,CAAAA,CAAEsB,CAAC,CAAA,CACrC,KAAK,CAAA,CACH,OAAOD,CAAAA,CAAKC,CAAMrB,EAAAA,EAAAA,CAAEqB,CAAK,EAAA,CAAC,CAAKA,CAAAA,CAAAA,EAAMpB,EAAEoB,CAAAA,CAAAA,EAAK,CAAC,CAAA,CAC/C,KAAK,CAAA,CACH,OAAOD,CAAAA,CAAKC,CAAMnB,EAAAA,CAAAA,CAAEmB,CAAK,EAAA,CAAC,CAAKA,CAAAA,CAAAA,EAAMlB,CAAEkB,CAAAA,CAAAA,EAAK,CAAC,CAC/C,CAAA,QACE,MAAM,IAAI,SAAU,CAAA,CAAA,uBAAA,EAA0BhC,CAAC,CAAA,GAAA,EAAMD,CAAC,CAAA,CAAE,CAC5D,CACF,CACAmH,CAAAA,EAAAA,CAAoB,OAAO,WAAA,CAAtB,GAAoC,CAAA,IAAI,WAAY,CAAA,UAAU,CAAI,CAAA,KAAA,CAAA,CACvEC,EAAK,CAAA,CAACpH,CAAGC,CAAAA,CAAAA,GAAM,CAEb,IAAA,IADI+B,CAAIhC,CAAAA,CAAAA,EAAK,CACJiC,CAAAA,CAAAA,CAAID,CAAI/B,CAAAA,CAAAA,CAAI,CAAG,CAAA,EAAE+B,CAAKC,EAAAA,CAAAA,CAAAA,EAAMpB,EAAEmB,CAAAA,CAAC,CAAK,EAAA,EAAEA,CAE/C,CAAA,GADAA,CAAM,GAAA,CAAA,CACF,EAAKA,CAAAA,CAAAA,CAAIhC,CAAKmH,EAAAA,EAAAA,CAAI,OAAOA,EAAAA,CAAG,MAAOxG,CAAAA,CAAAA,CAAE,QAASX,CAAAA,CAAAA,CAAGgC,CAAC,CAAC,CAEvD,CAAA,IADAA,CAAI,CAAA,EAAA,CACCC,CAAI,CAAA,CAAA,CAAG,EAAEA,CAAKhC,EAAAA,CAAAA,CAAI,CAAI,CAAA,CAAA,EAAEgC,CAAG,CAAA,CAC9B,IAAIE,CAAAA,CAAIvB,EAAGZ,CAAAA,CAAAA,CAAI,CAAIiC,CAAAA,CAAAA,EAAM,CAAC,CAAA,CAC1B,GAASE,CAAAA,EAAL,CAAQ,CAAA,MACZH,CAAK,EAAA,MAAA,CAAO,YAAaG,CAAAA,CAAC,EAC5B,CACA,OAAOH,CACT,CACAqF,CAAAA,EAAAA,CAAK,CAACrH,CAAAA,CAAGC,CAAG+B,CAAAA,CAAAA,GAAM,CAEhB,GADAA,CAAAA,GAAAA,CAAAA,CAAM,UACF,CAAA,CAAA,CAAA,CAAIA,CAAG,CAAA,OACXA,CAAAA,CAAAA,CAAAA,EAAK,CACL,CAAA,IAAIC,CAAIhC,CAAAA,CAAAA,CACR+B,CAAIA,CAAAA,CAAAA,CAAI,CAAIhC,CAAAA,CAAAA,CAAE,MAASgC,CAAAA,CAAAA,CAAI,CAAIhC,CAAAA,CAAAA,CAAE,MACjC,CAAA,IAAA,IAASmC,CAAI,CAAA,CAAA,CAAGA,CAAIH,CAAAA,CAAAA,CAAG,EAAEG,CAAAA,CAAIvB,EAAEX,CAAAA,CAAAA,EAAK,CAAC,CAAA,CAAID,EAAE,UAAWmC,CAAAA,CAAC,CAAKlC,CAAAA,CAAAA,EAAK,CACjE,CAAA,OAAAW,EAAEX,CAAAA,CAAAA,EAAK,CAAC,CAAA,CAAI,CACLA,CAAAA,CAAAA,CAAIgC,CACb,CAAA,CACAqF,EAAMtH,CAAAA,CAAAA,EAAM,CAAIA,CAAAA,CAAAA,CAAE,MAClBuH,CAAAA,EAAAA,CAAK,CAACvH,CAAAA,CAAGC,CAAM,GAAA,CACb,IAAS+B,IAAAA,CAAAA,CAAI,CAAGC,CAAAA,CAAAA,CAAI,EAAI,CAAA,EAAED,CAAK/B,EAAAA,CAAAA,CAAI,CAAM,CAAA,EAAA,CACvC,IAAIkC,CAAAA,CAAIrB,CAAGd,CAAAA,CAAAA,CAAI,CAAIgC,CAAAA,CAAAA,EAAM,CAAC,CAAA,CAC1B,GAASG,CAAAA,EAAL,CAAQ,CAAA,MACZ,EAAEH,CAAAA,CACF,KAASG,EAAAA,CAAAA,EACHA,CAAK,EAAA,KAAA,CAASF,CAAK,EAAA,MAAA,CAAO,YAAa,CAAA,KAAA,CAASE,CAAK,EAAA,EAAA,CAAK,KAASA,CAAAA,CAAAA,CAAI,IAAK,CAAA,EAC7EF,CAAK,EAAA,MAAA,CAAO,aAAaE,CAAC,EACjC,CACA,OAAOF,CACT,CAAA,CACAuF,EAAK,CAAA,CAACxH,CAAGC,CAAAA,CAAAA,CAAG+B,CAAM,GAAA,CAEhB,GADAA,CAAAA,GAAAA,CAAAA,CAAM,UACF,CAAA,CAAA,CAAA,CAAIA,CAAG,CAAA,OACX,CAAA,CAAA,IAAIC,CAAIhC,CAAAA,CAAAA,CACR+B,CAAIC,CAAAA,CAAAA,CAAID,CAAI,CAAA,CAAA,CACZ,IAASG,IAAAA,CAAAA,CAAI,CAAGA,CAAAA,CAAAA,CAAInC,CAAE,CAAA,MAAA,CAAQ,EAAEmC,CAAAA,CAAG,CACjC,IAAII,CAAIvC,CAAAA,CAAAA,CAAE,UAAWmC,CAAAA,CAAC,CACtB,CAAA,GAAI,KAASI,EAAAA,CAAAA,EAAK,KAASA,EAAAA,CAAAA,CAAG,CAC5B,IAAI,CAAIvC,CAAAA,CAAAA,CAAE,UAAW,CAAA,EAAEmC,CAAC,CAAA,CACxBI,CAAK,CAAA,KAAA,EAAA,CAAUA,CAAI,CAAA,IAAA,GAAS,EAAQ,CAAA,CAAA,CAAA,CAAI,KAC1C,CAGA,GAFAzB,CAAAA,CAAEb,GAAK,CAAC,CAAA,CAAIsC,CACZtC,CAAAA,CAAAA,EAAK,CACDA,CAAAA,CAAAA,CAAI,CAAI+B,CAAAA,CAAAA,CAAG,KACjB,CACA,OAAAlB,CAAAA,CAAEb,CAAK,EAAA,CAAC,CAAI,CAAA,CAAA,CACLA,CAAIgC,CAAAA,CACb,CACAwF,CAAAA,EAAAA,CAAMzH,CAAM,EAAA,CACV,IAASC,IAAAA,CAAAA,CAAI,CAAG+B,CAAAA,CAAAA,CAAI,CAAGA,CAAAA,CAAAA,CAAIhC,CAAE,CAAA,MAAA,CAAQ,EAAEgC,CAAAA,CAAG,CACxC,IAAIC,CAAIjC,CAAAA,CAAAA,CAAE,UAAWgC,CAAAA,CAAC,CACtB,CAAA,KAAA,EAASC,CAAK,EAAA,KAAA,EAASA,CAAK,EAAA,EAAED,CAC9B/B,CAAAA,CAAAA,EAAK,EACP,CACA,OAAOA,CACT,CACAyH,CAAAA,EAAAA,CAAK,EAAC,CACNC,EAAM3H,CAAAA,CAAAA,EAAM,CACV,IAAIC,CAAIyH,CAAAA,EAAAA,CAAG,MACX,CAAA,OAAAA,EAAG,CAAA,IAAA,CAAK1H,CAAC,CACFC,CAAAA,CACT,CACA2H,CAAAA,EAAAA,CAAK,CAAC5H,CAAAA,CAAGC,CAAM,GAAA,CACb,IAAS+B,IAAAA,CAAAA,CAAI,KAAMhC,CAAAA,CAAC,CAAGiC,CAAAA,CAAAA,CAAI,CAAGA,CAAAA,CAAAA,CAAIjC,CAAG,CAAA,EAAEiC,CAAGD,CAAAA,CAAAA,CAAEC,CAAC,CAAA,CAAI+E,EAAGjG,CAAAA,CAAAA,CAAGd,CAAI,CAAA,CAAA,CAAIgC,CAAM,EAAA,CAAC,CAAG,CAAA,YAAA,CAAeA,CAAC,CAAA,CACzF,OAAOD,CACT,CAAA,CACA6F,EAAK,CAAA,OAAA,CAAQ,SACbC,CAAAA,EAAAA,CAAK,EAAC,CACNC,EAAK,CAAA,IAAM,CACT,GAAI,CAACC,EAAAA,CAAI,CACP,IAAIhI,CAAI,CAAA,CACJ,IAAM,CAAA,UAAA,CACN,OAAS,CAAA,UAAA,CACT,IAAM,CAAA,GAAA,CACN,GAAK,CAAA,GAAA,CACL,IAAM,CAAA,gBAAA,CACN,IACgB,CAAA,CAAA,OAAO,SAAnB,EAAA,QAAA,EAAgC,UAAU,SAAa,EAAA,SAAA,CAAU,SAAU,CAAA,CAAC,CAAM,EAAA,GAAA,EAAK,OACvF,CAAA,GAAA,CACA,GACF,CAAA,CAAI,QACN,CAAA,CAAA,CAAGG,CAAM,EAAA,gBACX,CACAF,CAAAA,CAAAA,CACF,IAAKA,CAAAA,IAAK6H,EAAeA,CAAAA,EAAAA,CAAG7H,CAAC,CAAA,GAAf,KAAmB,CAAA,CAAA,OAAOD,CAAEC,CAAAA,CAAC,CAAKD,CAAAA,CAAAA,CAAEC,CAAC,CAAA,CAAI6H,EAAG7H,CAAAA,CAAC,CAC3D,CAAA,IAAI+B,CAAI,CAAA,EACR,CAAA,IAAK/B,CAAKD,IAAAA,CAAAA,CAAGgC,CAAE,CAAA,IAAA,CAAK,CAAG/B,EAAAA,CAAC,CAAID,CAAAA,EAAAA,CAAAA,CAAEC,CAAC,CAAC,CAAE,CAAA,CAAA,CAClC+H,EAAKhG,CAAAA,EACP,CACA,OAAOgG,EACT,CAAA,CACAA,EACAC,CAAAA,EAAAA,CAAK,CAAC,IAAA,CAAM,EAAC,CAAG,EAAE,EAClBC,EAAK,CAAA,IAAM,CACT,GAAgB,OAAO,MAAA,EAAnB,QAA2C,EAAA,OAAO,MAAO,CAAA,eAAA,EAA5B,UAC/B,CAAA,OAAQlI,CAAM,EAAA,MAAA,CAAO,eAAgBA,CAAAA,CAAC,CACxCyB,CAAAA,EAAAA,CAAG,kBAAkB,EACvB,CACA0G,CAAAA,EAAAA,CAAMnI,CAAOmI,EAAAA,CAAAA,EAAAA,CAAKD,EAAG,EAAA,EAAGlI,CAAC,CAAA,CACzBoI,EAAMpI,CAAAA,CAAAA,EAAYA,CAAI,CAAA,CAAA,GAAV,CAAsBA,GAAAA,CAAAA,CAAI,GAAV,GAAA,CAAA,EAAuBA,CAAI,CAAA,GAAA,GAAV,CAC7CqI,CAAAA,CAAAA,EAAAA,CAAK,CAAC,EAAA,CAAI,EAAI,CAAA,EAAA,CAAI,EAAI,CAAA,EAAA,CAAI,EAAI,CAAA,EAAA,CAAI,EAAI,CAAA,EAAA,CAAI,EAAI,CAAA,EAAA,CAAI,EAAE,CAAA,CACpDC,EAAK,CAAA,CAAC,EAAI,CAAA,EAAA,CAAI,EAAI,CAAA,EAAA,CAAI,EAAI,CAAA,EAAA,CAAI,EAAI,CAAA,EAAA,CAAI,GAAI,EAAI,CAAA,EAAA,CAAI,EAAE,CAAA,CACtD,SAASC,EAAAA,CAAGvI,CAAG,CAAA,CACb,IAAIC,CAAAA,CAAI,KAAMyC,CAAAA,EAAAA,CAAG1C,CAAC,CAAA,CAAI,CAAC,CAAA,CACvB,OAAA2C,EAAAA,CAAG3C,CAAGC,CAAAA,CAAAA,CAAG,CAAGA,CAAAA,CAAAA,CAAE,MAAM,CAAA,CACbA,CACT,CACA,IAAIuI,EAAAA,CAAK,CAACxI,CAAAA,CAAGC,CAAG+B,CAAAA,CAAAA,CAAGC,CAAM,GAAA,CACvB,SAASE,CAAAA,CAAEkE,CAAGC,CAAAA,CAAAA,CAAGC,CAAG,CAAA,CAClB,IAAKF,CAAAA,CAAgB,OAAOA,CAAAA,EAAnB,QAAuBA,CAAAA,CAAAA,CAAE,QAAS,EAAA,CAAIA,CAAK,EAAA,EAAA,CAAIA,CAAE,CAAA,MAAA,CAASC,CAAKD,EAAAA,CAAAA,CAAIE,CAAE,CAAA,CAAC,CAAIF,CAAAA,CAAAA,CACnF,OAAOA,CACT,CACA,SAAS9D,CAAE8D,CAAAA,CAAAA,CAAGC,EAAG,CACf,OAAOnE,CAAEkE,CAAAA,CAAAA,CAAGC,CAAG,CAAA,GAAG,CACpB,CACA,SAAS,CAAA,CAAED,CAAGC,CAAAA,CAAAA,CAAG,CACf,SAASC,CAAEkC,CAAAA,CAAAA,CAAG,CACZ,OAAWA,CAAAA,CAAAA,CAAAA,CAAI,CAAK,CAAA,CAAA,CAAA,CAAIA,CAAI,CAAA,CAAA,CAAI,CAClC,CACA,IAAIjC,CAAAA,CACJ,OAAOA,CAAAA,CAAAA,CAAID,CAAEF,CAAAA,CAAAA,CAAE,aAAgBC,CAAAA,CAAAA,CAAE,WAAY,EAAC,CAA9C,IAAA,CAAA,EAAA,CACSE,CAAID,CAAAA,CAAAA,CAAEF,CAAE,CAAA,QAAA,EAAaC,CAAAA,CAAAA,CAAE,QAAS,EAAC,CAAxC,IAAA,CAAA,GACCE,CAAID,CAAAA,CAAAA,CAAEF,CAAE,CAAA,OAAA,EAAYC,CAAAA,CAAAA,CAAE,OAAQ,EAAC,CAC3BE,CAAAA,CAAAA,CACT,CACA,SAASpD,CAAEiD,CAAAA,CAAAA,CAAG,CACZ,OAAQA,EAAE,MAAO,EAAA,EACf,KACE,CAAA,CAAA,OAAO,IAAI,IAAA,CAAKA,CAAE,CAAA,WAAA,EAAgB,CAAA,CAAA,CAAG,EAAI,CAAA,EAAE,CAC7C,CAAA,KACE,CAAA,CAAA,OAAOA,CACT,CAAA,KACE,CAAA,CAAA,OAAO,IAAI,IAAA,CAAKA,CAAE,CAAA,WAAA,EAAe,CAAA,CAAA,CAAG,CAAC,CAAA,CACvC,KAAK,CAAA,CACH,OAAO,IAAI,IAAKA,CAAAA,CAAAA,CAAE,WAAY,EAAA,CAAG,CAAG,CAAA,CAAC,CACvC,CAAA,KACE,CAAA,CAAA,OAAO,IAAI,IAAA,CAAKA,CAAE,CAAA,WAAA,EAAe,CAAA,CAAA,CAAG,CAAC,CAAA,CACvC,KAAK,CAAA,CACH,OAAO,IAAI,IAAKA,CAAAA,CAAAA,CAAE,WAAY,EAAA,CAAI,CAAG,CAAA,EAAA,CAAI,EAAE,CAAA,CAC7C,KACE,CAAA,CAAA,OAAO,IAAI,IAAA,CAAKA,CAAE,CAAA,WAAA,EAAgB,CAAA,CAAA,CAAG,EAAI,CAAA,EAAE,CAC/C,CACF,CACA,SAAShD,CAAEgD,CAAAA,CAAAA,CAAG,CACZ,IAAIC,CAAID,CAAAA,CAAAA,CAAE,EACV,CAAA,IAAKA,CAAI,CAAA,IAAI,IAAK,CAAA,IAAI,IAAKA,CAAAA,CAAAA,CAAE,EAAK,CAAA,IAAA,CAAM,CAAG,CAAA,CAAC,CAAE,CAAA,OAAA,EAAS,CAAA,CAAG,CAAIC,CAAAA,CAAAA,EAAK,CACjE,IAAIC,CAAIF,CAAAA,CAAAA,CAAE,QAAS,EAAA,CACjBG,CAAK4B,CAAAA,CAAAA,EAAAA,CAAG/B,CAAE,CAAA,WAAA,EAAa,CAAA,CAAIgC,EAAKC,CAAAA,EAAAA,EAAI/B,CAAC,CAAA,CACvC,GAAID,CAAAA,CAAIE,CAAIH,CAAAA,CAAAA,CAAE,OAAQ,EAAA,CACnBC,CAAKE,EAAAA,CAAAA,CAAIH,CAAE,CAAA,OAAA,GAAY,CACtBA,CAAAA,CAAAA,CAAE,OAAQ,CAAA,CAAC,CACX,CAAA,EAAA,CAAKE,CAAIF,CAAAA,CAAAA,CAAE,QAASE,CAAAA,CAAAA,CAAI,CAAC,CAAA,EAAKF,CAAE,CAAA,QAAA,CAAS,CAAC,CAAA,CAAGA,CAAE,CAAA,WAAA,CAAYA,CAAE,CAAA,WAAA,EAAgB,CAAA,CAAC,CAC7E,CAAA,CAAA,KAAA,CACHA,CAAE,CAAA,OAAA,CAAQA,CAAE,CAAA,OAAA,EAAYC,CAAAA,CAAC,CACzB,CAAA,KACF,CACF,CACA,OAAAC,CAAAA,CAAI,IAAI,IAAA,CAAKF,CAAE,CAAA,WAAA,EAAgB,CAAA,CAAA,CAAG,CAAG,CAAA,CAAC,CACtCC,CAAAA,CAAAA,CAAIlD,CAAE,CAAA,IAAI,IAAKiD,CAAAA,CAAAA,CAAE,WAAY,EAAA,CAAG,CAAG,CAAA,CAAC,CAAC,CAAA,CACrCE,CAAInD,CAAAA,CAAAA,CAAEmD,CAAC,CAAA,CACA,CAAK,EAAA,CAAA,CAAED,CAAGD,CAAAA,CAAC,EAAK,CAAK,EAAA,CAAA,CAAEE,CAAGF,CAAAA,CAAC,CAAIA,CAAAA,CAAAA,CAAE,WAAY,EAAA,CAAI,CAAIA,CAAAA,CAAAA,CAAE,WAAY,EAAA,CAAKA,CAAE,CAAA,WAAA,EAAgB,CAAA,CACnG,CACA,IAAIjB,CAAIrE,CAAAA,CAAAA,CAAGkB,CAAI,CAAA,EAAA,EAAO,CAAC,CAAA,CACvBA,CAAI,CAAA,CACF,EAAInB,CAAAA,CAAAA,CAAEmB,CAAK,EAAA,CAAC,CACZ,CAAA,EAAA,CAAInB,EAAGmB,CAAI,CAAA,CAAA,EAAM,CAAC,CAAA,CAClB,EAAInB,CAAAA,CAAAA,CAAGmB,CAAI,CAAA,CAAA,EAAM,CAAC,CAAA,CAClB,EAAInB,CAAAA,CAAAA,CAAGmB,CAAI,CAAA,EAAA,EAAO,CAAC,CAAA,CACnB,EAAInB,CAAAA,CAAAA,CAAGmB,CAAI,CAAA,EAAA,EAAO,CAAC,CAAA,CACnB,EAAInB,CAAAA,CAAAA,CAAGmB,CAAI,CAAA,EAAA,EAAO,CAAC,CAAA,CACnB,EAAInB,CAAAA,CAAAA,CAAGmB,CAAI,CAAA,EAAA,EAAO,CAAC,CACnB,CAAA,EAAA,CAAInB,CAAGmB,CAAAA,CAAAA,CAAI,EAAO,EAAA,CAAC,CACnB,CAAA,EAAA,CAAInB,CAAGmB,CAAAA,CAAAA,CAAI,EAAO,EAAA,CAAC,CACnB,CAAA,EAAA,CAAInB,CAAGmB,CAAAA,CAAAA,CAAI,EAAO,EAAA,CAAC,CACnB,CAAA,EAAA,CAAImD,CAAKA,EAAAA,CAAAA,CAAI9C,CAAE3B,CAAAA,CAAAA,CAAGyE,CAAC,CAAA,CAAU,EAC/B,CAAA,CACApD,CAAIA,CAAAA,CAAAA,CAAIM,CAAE3B,CAAAA,CAAAA,CAAGqB,CAAC,CAAA,CAAI,EAClBoD,CAAAA,CAAAA,CAAI,CACF,IAAA,CAAM,sBACN,CAAA,IAAA,CAAM,UACN,CAAA,IAAA,CAAM,UACN,CAAA,IAAA,CAAM,IACN,CAAA,IAAA,CAAM,aACN,CAAA,IAAA,CAAM,OACN,CAAA,IAAA,CAAM,UACN,CAAA,IAAA,CAAM,UACN,CAAA,IAAA,CAAM,UACN,CAAA,KAAA,CAAO,IACP,CAAA,KAAA,CAAO,IACP,CAAA,KAAA,CAAO,UACP,CAAA,KAAA,CAAO,UACP,CAAA,KAAA,CAAO,KACP,KAAO,CAAA,IAAA,CACP,KAAO,CAAA,IAAA,CACP,KAAO,CAAA,IAAA,CACP,KAAO,CAAA,IAAA,CACP,KAAO,CAAA,IAAA,CACP,KAAO,CAAA,IAAA,CACP,KAAO,CAAA,IAAA,CACP,KAAO,CAAA,IAAA,CACP,KAAO,CAAA,IAAA,CACP,KAAO,CAAA,IAAA,CACP,KAAO,CAAA,IAAA,CACP,KAAO,CAAA,IAAA,CACP,KAAO,CAAA,IAAA,CACP,KAAO,CAAA,IACT,CACA,CAAA,IAAA,IAASC,CAAKD,IAAAA,CAAAA,CAAGpD,EAAIA,CAAE,CAAA,OAAA,CAAQ,IAAI,MAAA,CAAOqD,CAAG,CAAA,GAAG,CAAGD,CAAAA,CAAAA,CAAEC,CAAC,CAAC,CACvD,CAAA,IAAIc,CAAI,CAAA,0DAAA,CAA2D,KAAM,CAAA,GAAG,CAC1EC,CAAAA,CAAAA,CAAI,uFAAwF,CAAA,KAAA,CAAM,GAAG,CAAA,CACvGhB,CAAI,CAAA,CACF,IAAOiB,CAAAA,CAAAA,EAAMF,CAAEE,CAAAA,CAAAA,CAAE,EAAE,CAAA,CAAE,SAAU,CAAA,CAAA,CAAG,CAAC,CACnC,CAAA,IAAA,CAAOA,CAAMF,EAAAA,CAAAA,CAAEE,CAAE,CAAA,EAAE,CACnB,CAAA,IAAA,CAAOA,CAAMD,EAAAA,CAAAA,CAAEC,CAAE,CAAA,EAAE,CAAE,CAAA,SAAA,CAAU,CAAG,CAAA,CAAC,CACnC,CAAA,IAAA,CAAOA,CAAMD,EAAAA,CAAAA,CAAEC,CAAE,CAAA,EAAE,CACnB,CAAA,IAAA,CAAOA,CAAM9D,EAAAA,CAAAA,CAAAA,CAAI8D,CAAE,CAAA,EAAA,CAAK,IAAQ,EAAA,GAAA,CAAO,CAAG,CAAA,CAAC,CAC3C,CAAA,IAAA,CAAOA,CAAM9D,EAAAA,CAAAA,CAAE8D,CAAE,CAAA,EAAA,CAAI,CAAC,CAAA,CACtB,IAAOA,CAAAA,CAAAA,EAAMlE,CAAEkE,CAAAA,CAAAA,CAAE,EAAI,CAAA,CAAA,CAAG,GAAG,CAAA,CAC3B,IAAOA,CAAAA,CAAAA,EAAMhD,CAAEgD,CAAAA,CAAC,CAAE,CAAA,QAAA,EAAW,CAAA,SAAA,CAAU,CAAC,CAAA,CACxC,IAAMhD,CAAAA,CAAAA,CACN,IAAOgD,CAAAA,CAAAA,EAAM9D,CAAE8D,CAAAA,CAAAA,CAAE,GAAI,CAAC,CAAA,CACtB,IAAOA,CAAAA,CAAAA,GACLA,CAAIA,CAAAA,CAAAA,CAAE,EACDA,CAAAA,CAAAA,EAAL,CAAUA,CAAAA,CAAAA,CAAI,EAAM,CAAA,EAAA,CAAKA,CAAMA,GAAAA,CAAAA,EAAK,EAC7B9D,CAAAA,CAAAA,CAAAA,CAAE8D,CAAG,CAAA,CAAC,CAEf,CAAA,CAAA,IAAA,CAAOA,CAAM,EAAA,CACX,IAASC,IAAAA,CAAAA,CAAI,CAAGC,CAAAA,CAAAA,CAAI,CAAGA,CAAAA,CAAAA,EAAKF,CAAE,CAAA,EAAA,CAAK,CAAGC,CAAAA,CAAAA,EAAAA,CAAM8B,GAAG/B,CAAE,CAAA,EAAA,CAAK,IAAI,CAAA,CAAIgC,EAAKC,CAAAA,EAAAA,EAAI/B,CAAG,EAAA,CAAA,CAAE,CAC5E,OAAOhE,CAAE8D,CAAAA,CAAAA,CAAE,EAAKC,CAAAA,CAAAA,CAAG,CAAC,CACtB,CACA,CAAA,IAAA,CAAOD,CAAM9D,EAAAA,CAAAA,CAAE8D,CAAE,CAAA,EAAA,CAAK,CAAG,CAAA,CAAC,CAC1B,CAAA,IAAA,CAAOA,CAAM9D,EAAAA,CAAAA,CAAE8D,CAAE,CAAA,EAAA,CAAI,CAAC,CAAA,CACtB,KAAM,IAAM,CAAA;AAAA,CACZ,CAAA,IAAA,CAAOA,GAAO,CAAKA,EAAAA,CAAAA,CAAE,IAAM,EAAKA,CAAAA,CAAAA,CAAE,EAAK,CAAA,IAAA,CAAO,IAC9C,CAAA,IAAA,CAAOA,GAAM9D,CAAE8D,CAAAA,CAAAA,CAAE,GAAI,CAAC,CAAA,CACtB,KAAM,IAAM,GAAA,CACZ,IAAOA,CAAAA,CAAAA,EAAMA,CAAE,CAAA,EAAA,EAAM,EACrB,IAAOA,CAAAA,CAAAA,EAAM9D,EAAE,IAAK,CAAA,KAAA,CAAA,CAAO8D,EAAE,EAAK,CAAA,CAAA,CAAIA,CAAE,CAAA,EAAA,EAAM,CAAC,CAAA,CAAG,CAAC,CACnD,CAAA,IAAA,CAAOA,GAAM,CACX,IAAIC,EAAI,IAAK,CAAA,KAAA,CAAA,CAAOD,CAAE,CAAA,EAAA,CAAK,CAAMA,CAAAA,CAAAA,CAAAA,CAAE,GAAK,CAAK,EAAA,CAAA,EAAM,CAAC,CAEpD,CAAA,GADA,IAAMA,CAAE,CAAA,EAAA,CAAK,GAAMA,CAAAA,CAAAA,CAAE,EAAK,CAAA,CAAA,EAAK,GAAKC,CAChCA,EAAAA,CAAAA,CAAAA,CAASA,GAAN,EAAaC,GAAAA,CAAAA,CAAAA,CAAKF,EAAE,EAAK,CAAA,GAAA,CAAMA,CAAE,CAAA,EAAA,EAAM,CAASE,CAAAA,CAAAA,EAAL,GAAgBA,CAAL,EAAA,CAAA,EAAU6B,GAAG/B,CAAE,CAAA,EAAE,IAAOC,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,KACpF,CACHA,CAAAA,CAAI,EACJ,CAAA,IAAIC,GAAKF,CAAE,CAAA,EAAA,CAAK,EAAIA,CAAE,CAAA,EAAA,CAAK,GAAK,CAC1BE,CAAAA,CAAAA,CAAAA,EAAL,CAAgBA,EAAAA,CAAAA,EAAL,CAAU6B,EAAAA,EAAAA,CAAI/B,EAAE,EAAK,CAAA,GAAA,CAAO,CAAC,CAAOC,GAAAA,CAAAA,GAClD,CACA,OAAO/D,CAAAA,CAAE+D,CAAG,CAAA,CAAC,CACf,CAAA,CACA,KAAOD,CAAMA,EAAAA,CAAAA,CAAE,GACf,IAAOA,CAAAA,CAAAA,EAAM9D,EAAE,IAAK,CAAA,KAAA,CAAA,CAAO8D,CAAE,CAAA,EAAA,CAAK,CAAMA,CAAAA,CAAAA,CAAAA,CAAE,GAAK,CAAK,EAAA,CAAA,EAAM,CAAC,CAAG,CAAA,CAAC,EAC/D,IAAOA,CAAAA,CAAAA,EAAAA,CAAOA,CAAE,CAAA,EAAA,CAAK,IAAM,EAAA,QAAA,GAAW,SAAU,CAAA,CAAC,EACjD,IAAOA,CAAAA,CAAAA,EAAMA,EAAE,EAAK,CAAA,IAAA,CACpB,IAAOA,CAAAA,CAAAA,EAAM,CACXA,CAAAA,CAAIA,EAAE,EACN,CAAA,IAAIC,EAAI,CAAKD,EAAAA,CAAAA,CACb,OAAAA,CAAI,CAAA,IAAA,CAAK,GAAIA,CAAAA,CAAC,CAAI,CAAA,EAAA,CAAA,CACVC,EAAI,GAAM,CAAA,GAAA,EAAA,CAAc,QAAWD,CAAI,CAAA,EAAA,CAAM,IAAOA,CAAI,CAAA,EAAA,CAAA,EAAM,KAAM,CAAA,CAAA,CAAE,CAChF,CAAA,CACA,KAAOA,CAAMA,EAAAA,CAAAA,CAAE,GACf,IAAM,CAAA,IAAM,GACd,CACArE,CAAAA,CAAAA,CAAIA,CAAE,CAAA,OAAA,CAAQ,KAAO,CAAA,MAAU,EAC/B,IAAKqD,CAAAA,IAAKD,EAAGpD,CAAE,CAAA,QAAA,CAASqD,CAAC,CAAMrD,GAAAA,CAAAA,CAAIA,CAAE,CAAA,OAAA,CAAQ,IAAI,MAAA,CAAOqD,EAAG,GAAG,CAAA,CAAGD,EAAEC,CAAC,CAAA,CAAEpD,CAAC,CAAC,CAAA,CAAA,CAGxE,OAFAD,CAAAA,CAAIA,CAAE,CAAA,OAAA,CAAQ,QAAS,GAAG,CAAA,CAC1BqD,EAAIkD,EAAGvG,CAAAA,CAAC,EACJqD,CAAE,CAAA,MAAA,CAASpF,CAAU,CAAA,CAAA,EACzBS,CAAE,CAAA,GAAA,CAAI2E,EAAGrF,CAAC,CAAA,CACHqF,EAAE,MAAS,CAAA,CAAA,CACpB,EACAnC,EAAKtD,CAAAA,CAAAA,CAAE,aAAgB,CAAA,cAAc,KAAM,CACzC,YAAYI,CAAG,CAAA,CACb,MAAMA,CAAC,CAAA,CACP,KAAK,IAAO,CAAA,gBACd,CACF,CAAA,CACA,IAAS0I,IAAAA,EAAAA,CAAK,MAAM,GAAG,CAAA,CAAGC,GAAK,CAAG,CAAA,GAAA,CAAMA,GAAI,EAAEA,EAAAA,CAAID,EAAGC,CAAAA,EAAE,CAAI,CAAA,MAAA,CAAO,aAAaA,EAAE,CAAA,CACjFpF,GAAKmF,EACLjF,CAAAA,CAAAA,CAAI7D,EAAE,YAAe,CAAA,cAAc,KAAM,CACvC,WAAYI,CAAAA,CAAAA,CAAG,CACb,KAAMA,CAAAA,CAAC,EACP,IAAK,CAAA,IAAA,CAAO,eACd,CACF,CAAA,CACA,MAAO,CAAA,MAAA,CAAOuE,EAAG,CAAA,SAAA,CAAW,CAC1B,SAAW,CAAA,SAAUvE,EAAG,CACtB,GAAI,EAAE,IAAgBuE,YAAAA,EAAAA,EAAMvE,CAAauE,YAAAA,EAAAA,CAAAA,CAAK,OAAO,CAAA,CAAA,CACrD,IAAItE,CAAI,CAAA,IAAA,CAAK,GAAG,EAAG,CAAA,EAAA,CACjB+B,EAAI,IAAK,CAAA,EAAA,CAAG,EACdhC,CAAAA,CAAAA,CAAE,EAAKA,CAAAA,CAAAA,CAAE,GACT,IAAIiC,CAAAA,CAAIjC,EAAE,EAAG,CAAA,EAAA,CAAG,GAChB,IAAKA,CAAAA,CAAIA,CAAE,CAAA,EAAA,CAAG,EAAIC,CAAAA,CAAAA,CAAE,IAAO+B,CAAI/B,CAAAA,CAAAA,CAAE,GAAG+B,CAAC,CAAA,CAAK/B,EAAIA,CAAE,CAAA,EAAA,CAChD,KAAOgC,CAAAA,CAAE,EAAOjC,EAAAA,CAAAA,CAAIiC,EAAE,EAAGjC,CAAAA,CAAC,EAAKiC,CAAIA,CAAAA,CAAAA,CAAE,GACrC,OAAOhC,CAAAA,GAAMgC,CAAKD,EAAAA,CAAAA,GAAMhC,CAC1B,CAAA,CACA,MAAO,UAAY,CAEjB,GADA,IAAK,CAAA,EAAA,CAAG,IAAM2D,EAAG,CAAA,IAAI,CACjB,CAAA,IAAA,CAAK,EAAG,CAAA,EAAA,CAAI,OAAQ,IAAK,CAAA,EAAA,CAAG,MAAM,KAAS,EAAA,CAAA,CAAI,KACnD,IAAI3D,CAAAA,CAAIsE,EACNrE,CAAAA,CAAAA,CAAI,MACJ+B,CAAAA,CAAAA,CAAI/B,EAAE,MACNgC,CAAAA,CAAAA,CAAI,OAAO,cAAe,CAAA,IAAI,EAC9BE,CAAI,CAAA,IAAA,CAAK,EACX,CAAA,OAAAnC,CAAIA,CAAAA,CAAAA,CACFgC,EAAE,IAAK/B,CAAAA,CAAAA,CAAGgC,CAAG,CAAA,CACX,EAAI,CAAA,CAAE,MAAO,CAAE,KAAA,CAAOE,CAAE,CAAA,KAAA,CAAO,EAAIA,CAAAA,CAAAA,CAAE,GAAI,EAAIA,CAAAA,CAAAA,CAAE,GAAI,EAAIA,CAAAA,CAAAA,CAAE,GAAI,EAAIA,CAAAA,CAAAA,CAAE,EAAI,CAAA,EAAA,CAAIA,CAAE,CAAA,EAAA,CAAI,GAAIA,CAAE,CAAA,EAAG,CAAE,CAC9F,CAAC,CACH,CACAnC,CAAAA,CAAAA,CAAE,EAAG,CAAA,KAAA,CAAM,KAAS,EAAA,CAAA,CACpBA,EAAE,EAAG,CAAA,EAAA,CAAK,GACHA,CACT,CAAA,CACC,QAAY,CAEX,GADA,IAAK,CAAA,EAAA,CAAG,EAAM2D,EAAAA,EAAAA,CAAG,IAAI,CACjB,CAAA,IAAA,CAAK,GAAG,EAAM,EAAA,CAAC,KAAK,EAAG,CAAA,EAAA,CAAI,MAAM,IAAIF,CAAE,CAAA,uCAAuC,EAClFI,EAAG,CAAA,IAAI,EACP,IAAI7D,CAAAA,CAAI,KAAK,EACb,CAAA,EAAEA,CAAE,CAAA,KAAA,CAAM,KACJA,CAAAA,CAAAA,CAAE,MAAM,KAAd,GAAA,CAAA,GAAwBA,EAAE,EAAKA,CAAAA,CAAAA,CAAE,GAAG,EAAGA,CAAAA,CAAAA,CAAE,EAAE,CAAA,CAAIA,CAAE,CAAA,EAAA,CAAG,GAAG,EAAGA,CAAAA,CAAAA,CAAE,EAAE,CAC9D,CAAA,CAAA,IAAA,CAAK,GAAG,EAAQ,GAAA,IAAA,CAAK,EAAG,CAAA,EAAA,CAAK,KAAU,CAAA,CAAA,IAAA,CAAK,GAAG,EAAK,CAAA,KAAA,CAAA,EACtD,EACA,SAAW,CAAA,UAAY,CACrB,OAAO,CAAC,IAAK,CAAA,EAAA,CAAG,EAClB,CAAA,CACA,YAAa,UAAY,CAEvB,GADA,IAAK,CAAA,EAAA,CAAG,IAAM2D,EAAG,CAAA,IAAI,CACjB,CAAA,IAAA,CAAK,EAAG,CAAA,EAAA,EAAM,CAAC,IAAK,CAAA,EAAA,CAAG,GAAI,MAAM,IAAIF,EAAE,uCAAuC,CAAA,CAClF,OAAAO,EAAAA,CAAG,IAAK,CAAA,IAAI,EACNA,EAAG,CAAA,MAAA,GAAT,GAAmBE,EAAMA,EAAAA,EAAAA,CAAGD,EAAE,CAC9B,CAAA,IAAA,CAAK,EAAG,CAAA,EAAA,CAAK,CACN,CAAA,CAAA,IACT,CACF,CAAC,CAAA,CACDrE,EAAE,yBAA4B,CAAA,IAAM,OAAO,IAAKuE,CAAAA,EAAE,CAAE,CAAA,MAAA,CACpDvE,CAAE,CAAA,yBAAA,CAA4B,IAAM,CAClC,IAAII,EAAI,EAAC,CACPC,EACF,IAAKA,CAAAA,IAAKkE,EAAIA,CAAAA,EAAAA,CAAG,cAAelE,CAAAA,CAAC,GAAKD,CAAE,CAAA,IAAA,CAAKmE,GAAGlE,CAAC,CAAC,EAClD,OAAOD,CACT,CACAJ,CAAAA,CAAAA,CAAE,mBAAsBqE,CAAAA,EAAAA,CACxBrE,EAAE,gBAAoBI,CAAAA,CAAAA,EAAM,CAC1BkE,EAAKlE,CAAAA,CAAAA,CACLgE,GAAG,MAAUE,EAAAA,EAAAA,EAAMA,EAAGD,CAAAA,EAAE,EAC1B,CAAA,CACA,OAAO,MAAOkB,CAAAA,EAAAA,CAAG,SAAW,CAAA,CAC1B,EAAGnF,CAAAA,CAAAA,CAAG,CACJ,OAAK,IAAA,CAAA,EAAA,GAAOA,CAAI,CAAA,IAAA,CAAK,EAAGA,CAAAA,CAAC,GAClBA,CACT,CAAA,CACA,GAAGA,CAAG,CAAA,CACJ,KAAK,EAAKA,GAAAA,CAAC,EACb,CAAA,CACA,cAAgB,CAAA,CAAA,CAChB,qBAAsB8C,EACtB,CAAA,YAAA,CAAc,SAAU9C,CAAG,CAAA,CACzB,SAASC,CAAI,EAAA,CACX,OAAO,IAAA,CAAK,EACRoE,CAAAA,EAAAA,CAAG,KAAK,EAAG,CAAA,EAAA,CAAI,CAAE,EAAI,CAAA,IAAA,CAAK,GAAI,EAAIrC,CAAAA,CAAAA,CAAG,EAAI,CAAA,IAAA,CAAM,EAAIhC,CAAAA,CAAE,CAAC,CACtDqE,CAAAA,EAAAA,CAAG,KAAK,EAAG,CAAA,EAAA,CAAI,CAAE,EAAI,CAAA,IAAA,CAAM,EAAIrE,CAAAA,CAAE,CAAC,CACxC,CACA,IAAIgC,CAAAA,CAAI,KAAK,EAAGhC,CAAAA,CAAC,EACjB,GAAI,CAACgC,CAAG,CAAA,OAAO,IAAK,CAAA,EAAA,CAAGhC,CAAC,CAAG,CAAA,IAAA,CAC3B,IAAIiC,CAAImC,CAAAA,EAAAA,CAAG,KAAK,EAAIpC,CAAAA,CAAC,CACrB,CAAA,GAAeC,CAAX,GAAA,KAAA,CAAA,CACF,OAAUA,CAAE,CAAA,EAAA,CAAG,MAAM,KAAjB,GAAA,CAAA,EAAgCA,EAAE,EAAG,CAAA,EAAA,CAAKD,CAAKC,CAAAA,CAAAA,CAAE,EAAG,CAAA,EAAA,CAAKjC,EAAIiC,CAAE,CAAA,KAAA,KACnEA,CAAIA,CAAAA,CAAAA,CAAE,OACN,CAAA,IAAA,CAAK,EAAGjC,CAAAA,CAAC,CACFiC,CAAAA,CAAAA,CAAAA,CAIT,GAFAA,CAAI,CAAA,IAAA,CAAK,GAAG,EAAGD,CAAAA,CAAC,EAChBC,CAAI8B,CAAAA,EAAAA,CAAG9B,CAAC,CAAA,CACJ,CAACA,CAAAA,CAAG,OAAOhC,CAAE,CAAA,IAAA,CAAK,IAAI,CAC1BgC,CAAAA,CAAAA,CAAI,KAAK,EAAKA,CAAAA,CAAAA,CAAE,EAAKA,CAAAA,CAAAA,CAAE,WACvB,CAAA,IAAIE,EAAI2B,EAAG9B,CAAAA,CAAAA,CAAG,KAAK,EAAIC,CAAAA,CAAAA,CAAE,EAAE,CAC3B,CAAA,OAAgBE,CAAT,GAAA,IAAA,CACHlC,CAAE,CAAA,IAAA,CAAK,IAAI,CACX,CAAA,IAAA,CAAK,GACLoE,EAAGpC,CAAAA,CAAAA,CAAE,GAAG,EAAI,CAAA,CAAE,EAAIA,CAAAA,CAAAA,CAAG,EAAIE,CAAAA,CAAAA,CAAG,GAAI,IAAM,CAAA,EAAA,CAAInC,CAAE,CAAC,CAAA,CAC7CqE,GAAGpC,CAAE,CAAA,EAAA,CAAG,EAAI,CAAA,CAAE,EAAIA,CAAAA,CAAAA,CAAG,GAAIE,CAAE,CAAC,CAClC,CACF,CAAC,EACDwD,EAAK/F,CAAAA,CAAAA,CAAE,gBAAoB,CAAA,CAAA,CAACI,CAAGC,CAAAA,CAAAA,GAAM,CACnC,IAAI+B,CAAAA,CAAIwC,GAAGvE,CAAG,CAAA,SAAUgC,EAAG,CACzB,IAAA,CAAK,IAAOhC,CAAAA,CAAAA,CACZ,IAAK,CAAA,OAAA,CAAUgC,EACfA,CAAI,CAAA,KAAA,CAAMA,CAAC,CAAA,CAAE,KACFA,CAAAA,CAAAA,GAAX,SAAiB,IAAK,CAAA,KAAA,CAAQ,IAAK,CAAA,QAAA,EAAa,CAAA,CAAA;AAAA,CAAA,CAAOA,CAAE,CAAA,OAAA,CAAQ,oBAAsB,CAAA,EAAE,CAC3F,EAAA,CAAC,CACD,CAAA,OAAAD,CAAE,CAAA,SAAA,CAAY,MAAO,CAAA,MAAA,CAAOhC,CAAE,CAAA,SAAS,CACvCgC,CAAAA,CAAAA,CAAE,SAAU,CAAA,WAAA,CAAcA,CAC1BA,CAAAA,CAAAA,CAAE,SAAU,CAAA,QAAA,CAAW,UAAY,CACjC,OAAkB,IAAA,CAAK,OAAhB,GAAA,KAAA,CAAA,CAA0B,KAAK,IAAO,CAAA,CAAA,EAAG,IAAK,CAAA,IAAI,CAAK,EAAA,EAAA,IAAA,CAAK,OAAO,CAAA,CAC5E,CACOA,CAAAA,CACT,CAAG,EAAA,KAAA,CAAO,kBAAkB,CAAA,CAC5B2E,CAAE,CAAA,IAAA,CAAK,CAAG,CAAA,CAAA,CAAG,KAAQ,CAAA,CAAA,CAAA,CAAG,IAAM,CAAA,CAAA,CAAG,CAAI,CAAA,CAAA,CAAA,CAAG,CAAI,CAAA,CAAA,CAAC,CAC7C/G,CAAAA,CAAAA,CAAE,mBAAsB,CAAA,IAAM+G,CAAE,CAAA,MAAA,CAAS,EAAI,CAAID,CAAAA,EAAAA,CAAG,MACpD,CAAA,IAAIkC,EAAK,CAAA,CACL,CAAG,CAAA,CAAC5I,CAAGC,CAAAA,CAAAA,CAAG+B,CAAGC,CAAAA,CAAAA,GAAM,CACjBR,EAAAA,CACE,CAAqBzB,kBAAAA,EAAAA,CAAAA,CAAIsC,CAAE3B,CAAAA,CAAAA,CAAGX,CAAC,CAAA,CAAI,EAAE,CAAA,MAAA,CAAA,CACnC,CAACC,CAAAA,CAAKA,CAAIqC,CAAAA,CAAAA,CAAE3B,CAAGV,CAAAA,CAAC,CAAI,CAAA,EAAA,CAAM,kBAAoB+B,CAAAA,CAAAA,CAAGC,EAAKA,CAAIK,CAAAA,CAAAA,CAAE3B,CAAGsB,CAAAA,CAAC,CAAI,CAAA,EAAA,CAAM,kBAAkB,CAChG,EACF,CAAA,CACA,CAAG,CAAA,CAACjC,CAAGC,CAAAA,CAAAA,CAAG+B,CAAM,GAAA,CACd,IAAIC,CAAAA,CAAI,IAAIO,EAAAA,CAAGxC,CAAC,CAAA,CAChB,MAAAe,CAAAA,CAAGkB,CAAE,CAAA,EAAA,CAAK,EAAO,EAAA,CAAC,CAAI,CAAA,CAAA,CACtBlB,CAAGkB,CAAAA,CAAAA,CAAE,GAAK,CAAM,EAAA,CAAC,CAAIhC,CAAAA,CAAAA,CACrBc,CAAGkB,CAAAA,CAAAA,CAAE,EAAK,CAAA,CAAA,EAAM,CAAC,CAAA,CAAID,CACrBS,CAAAA,EAAAA,CAAKzC,CACL6I,CACMpG,EACR,CAAA,CACA,CAAG,CAAA,UAAY,CACb,OACF,CAAA,CAAA,CACA,CAAG,CAAA,IAAM,EAAC,CACV,CAAG,CAAA,IAAM,EAAC,CACV,CAAG,CAAA,UAAY,CACb,OAAO,CACT,CACA,CAAA,CAAA,CAAG,IAAM,EACT,CAAA,CAAA,CAAG,UAAY,EACf,CAAA,CAAA,CAAG,IAAM,EACT,CAAA,CAAA,CAAIzC,CAAM,EAAA,CACR,IAAIC,CAAAA,CAAI2C,EAAG5C,CAAAA,CAAC,CACZ,CAAA,OAAO4C,EAAG5C,CAAAA,CAAC,CACX,CAAA,IAAIgC,CAAI/B,CAAAA,CAAAA,CAAE,EACRgC,CAAAA,CAAAA,CAAIhC,EAAE,EACNkC,CAAAA,CAAAA,CAAIlC,CAAE,CAAA,EAAA,CACNsC,CAAIJ,CAAAA,CAAAA,CAAE,GAAK,CAAA,CAAA,EAAM,CAAE,CAAA,EAAE,CAAE,CAAA,MAAA,CAAOA,CAAE,CAAA,GAAA,CAAK,CAAM,EAAA,CAAA,CAAE,EAAE,CAAC,CAClDgB,CAAAA,CAAAA,CAAE,CAACnD,CAAC,CAAGuC,CAAAA,CAAAA,CAAI,CAAM,EAAA,CACf,IAAIa,CAAAA,CAAI,EAAC,CACT,OAAAjB,CAAAA,CAAE,QAAQ,CAACkB,CAAAA,CAAG+B,CAAM,GAAA,CAClB,IAAIC,CAAAA,CAAI,CAAED,CAAAA,CAAC,CACTe,CAAAA,CAAAA,CAAI9C,CAAE,CAAA,EAAA,CACN+C,CAAI/C,CAAAA,CAAAA,CAAE,EACNgD,CAAAA,CAAAA,CAAI,CAAEjB,CAAAA,CAAAA,CAAIjD,CAAE,CAAA,MAAM,CAClBmE,CAAAA,CAAAA,CAAIjD,CAAE,CAAA,EAAA,CACNkD,CAAIlD,CAAAA,CAAAA,CAAE,EACRD,CAAAA,CAAAA,CAAEC,CAAE,CAAA,EAAE,CAAI,CAAA,CACR,KAAOmD,CAAMnB,EAAAA,CAAAA,CAAE,YAAac,CAAAA,CAAAA,CAAEC,CAAGI,CAAAA,CAAC,CAAC,CAAA,CACnC,KAAO,CAAA,CAACA,CAAGiC,CAAAA,CAAAA,GAAM,CACf,IAAIK,CAAI,CAAA,EACRxC,CAAAA,CAAAA,CAAEC,CAAGC,CAAAA,CAAAA,CAAGH,CAAE,CAAA,UAAA,CAAWyC,CAAGL,CAAAA,CAAC,CAAC,CAAA,CAC1B5F,EAAGiG,CAAAA,CAAC,EACN,CACF,EACF,CAAC,EACM,CACL,CACE,IAAM7I,CAAAA,CAAAA,CAAE,IACR,CAAA,YAAA,CAAeoD,CAAM,EAAA,CACnB,IAAI+B,CAAAA,CAAI,EAAC,CACPC,CACF,CAAA,IAAKA,CAAKjC,IAAAA,CAAAA,CAAGgC,CAAEC,CAAAA,CAAC,CAAIjC,CAAAA,CAAAA,CAAEiC,CAAC,CAAA,CAAE,IAAKhC,CAAAA,CAAC,CAC/B,CAAA,OAAApB,CAAEoB,CAAAA,CAAC,CACI+B,CAAAA,CACT,CACA,CAAA,UAAA,CAAY,CAAC/B,CAAG+B,CAAAA,CAAAA,GAAM,CACpB,IAAA,IAASC,CAAKjC,IAAAA,CAAAA,CAAG,GAAI,EAAEiC,CAAKD,IAAAA,CAAAA,CAAAA,CAAI,MAAM,IAAI,SAAU,CAAA,CAAA,gBAAA,EAAmBC,CAAC,CAAA,CAAA,CAAG,CAC3E,CAAA,IAAIc,CAAInE,CAAAA,CAAAA,EACR,CAAA,IAAKqD,CAAKjC,IAAAA,CAAAA,CAAGA,CAAEiC,CAAAA,CAAC,CAAE,CAAA,KAAA,CAAMc,CAAGf,CAAAA,CAAAA,CAAEC,CAAC,CAAC,EAC/B,OAAShC,CAAAA,GAAT,IAAcA,EAAAA,CAAAA,CAAE,IAAKpB,CAAAA,CAAAA,CAAGkE,CAAC,CAAA,CAClBA,CACT,CAAA,CACA,cAAgB,CAAA,CAAA,CAChB,oBAAsBrD,CAAAA,EAAAA,CACtB,EAAIb,CAAAA,CACN,CACF,CACF,CAAC,EACH,CACA,CAAA,CAAA,CAAG,IAAM,EACT,CAAA,CAAA,CAAG,CAACjC,CAAAA,CAAGC,CAAG+B,CAAAA,CAAAA,CAAGC,CAAM,GAAA,CACjBhC,EAAIuD,CAAEvD,CAAAA,CAAC,CACPqD,CAAAA,CAAAA,CAAEtD,CAAG,CAAA,CACH,IAAMC,CAAAA,CAAAA,CACN,YAAc,CAAA,SAAUkC,CAAG,CAAA,CACzB,OAAO,CAAC,CAACA,CACX,CACA,CAAA,UAAA,CAAY,SAAUA,CAAAA,CAAGI,CAAG,CAAA,CAC1B,OAAOA,CAAAA,CAAIP,CAAIC,CAAAA,CACjB,CACA,CAAA,cAAA,CAAgB,CAChB,CAAA,oBAAA,CAAsB,SAAUE,CAAAA,CAAG,CACjC,OAAO,IAAA,CAAK,YAAaxB,CAAAA,CAAAA,CAAEwB,CAAC,CAAC,CAC/B,CAAA,CACA,EAAI,CAAA,IACN,CAAC,EACH,CACA,CAAA,CAAA,CAAG,CAACnC,CAAAA,CAAGC,CAAG+B,CAAAA,CAAAA,CAAGC,CAAGE,CAAAA,CAAAA,CAAGI,CAAG,CAAA,CAAA,CAAGa,CAAGC,CAAAA,CAAAA,CAAG+B,CAAGC,CAAAA,CAAAA,CAAGc,CAAGC,CAAAA,CAAAA,GAAM,CAC5Cf,CAAAA,CAAI7B,CAAE6B,CAAAA,CAAC,EACP9C,CAAImD,CAAAA,CAAAA,CAAEvD,CAAGI,CAAAA,CAAC,CACVa,CAAAA,CAAAA,GAAAA,CAAAA,CAAMsC,CAAE,CAAA,CAAA,CAAGtC,CAAC,CAAA,CAAA,CACZgC,CAAMM,GAAAA,CAAAA,CAAAA,CAAAA,CAAErC,CAAG+B,CAAAA,CAAC,CACZgB,CAAAA,CAAAA,CAAAA,CAAIV,CAAES,CAAAA,CAAAA,CAAGC,CAAC,CAAA,CACV,IAAIC,CAAAA,CAAI1B,EAAGU,CAAAA,CAAC,CACZX,CAAAA,EAAAA,CAAG2B,CAAG,CAAA,UAAY,CAChBN,EAAAA,CAAG,CAAoBV,iBAAAA,EAAAA,CAAC,wBAAyB,CAACpD,CAAC,CAAC,EACtD,CAAC,CAAA,CACDkB,CAAE,CAAA,CAACnD,CAAGC,CAAAA,CAAAA,CAAG+B,CAAC,CAAA,CAAGC,CAAI,CAAA,CAACA,CAAC,CAAA,CAAI,EAAKqE,CAAAA,CAAAA,EAAM,CAEhC,GADAA,CAAIA,CAAAA,CAAAA,CAAE,CAAC,CAAA,CACHrE,CACF,CAAA,IAAIsE,CAAID,CAAAA,CAAAA,CAAE,EACNE,CAAAA,CAAAA,CAAID,CAAE,CAAA,EAAA,CAAA,KACLC,EAAIjC,EAAG,CAAA,SAAA,CACd+B,CAAI9B,CAAAA,EAAAA,CAAGa,CAAG,CAAA,SAAA,GAAa0D,EAAI,CAAA,CACzB,GAAI,MAAA,CAAO,cAAe,CAAA,IAAI,CAAMN,GAAAA,CAAAA,CAAG,MAAM,IAAIhF,CAAE,CAAA,yBAAA,CAA4B4B,CAAC,CAAA,CAChF,GAAeyD,CAAAA,CAAE,EAAb,GAAA,KAAA,CAAA,CAAiB,MAAM,IAAIrF,CAAE4B,CAAAA,CAAAA,CAAI,gCAAgC,CAAA,CACrE,IAAI2D,EAAAA,CAAKF,EAAE,EAAGC,CAAAA,EAAAA,CAAG,MAAM,CAAA,CACvB,GAAeC,EAAAA,GAAX,KACF,CAAA,CAAA,MAAM,IAAIvF,CAAAA,CACR,CAA2B4B,wBAAAA,EAAAA,CAAC,CAC1B0D,oCAAAA,EAAAA,EAAAA,CAAG,MACL,CAAA,cAAA,EAAiB,MAAO,CAAA,IAAA,CAAKD,CAAE,CAAA,EAAE,CAAE,CAAA,QAAA,EAAU,CAAA,qBAAA,CAC/C,CACF,CAAA,OAAOE,EAAG,CAAA,KAAA,CAAM,IAAMD,CAAAA,EAAE,CAC1B,CAAC,EACD,IAAIN,CAAAA,CAAI,MAAO,CAAA,MAAA,CAAOjC,CAAG,CAAA,CAAE,WAAa,CAAA,CAAE,KAAOF,CAAAA,CAAE,CAAE,CAAC,CACtDA,CAAAA,CAAAA,CAAE,SAAYmC,CAAAA,CAAAA,CACd,IAAIK,CAAAA,CAAI,IAAIlE,EAAAA,CAAGS,CAAGiB,CAAAA,CAAAA,CAAGmC,CAAGrC,CAAAA,CAAAA,CAAGG,CAAGhE,CAAAA,CAAAA,CAAGa,CAAGgC,CAAAA,CAAC,CACrC,CAAA,GAAI0D,CAAE,CAAA,EAAA,CAAI,CACR,IAAIG,EAAAA,CAAAA,CACHA,EAAKH,CAAAA,CAAAA,CAAE,EAAI,EAAA,EAAA,GAAOG,EAAG,CAAA,EAAA,CAAK,EAAC,CAAA,CAC5BH,CAAE,CAAA,EAAA,CAAG,EAAG,CAAA,IAAA,CAAKA,CAAC,EAChB,CACA,OAAAvC,CAAI,CAAA,IAAIpB,EAAGE,CAAAA,CAAAA,CAAGyD,CAAG,CAAA,CAAA,CAAA,CAAI,CAAI,CAAA,CAAA,CAAA,CAAE,CAC3BG,CAAAA,EAAAA,CAAK,IAAI9D,EAAAA,CAAGE,CAAI,CAAA,GAAA,CAAKyD,EAAG,CAAI,CAAA,CAAA,CAAA,CAAA,CAAI,CAAE,CAAA,CAAA,CAClCtC,CAAI,CAAA,IAAIrB,EAAGE,CAAAA,CAAAA,CAAI,SAAWyD,CAAAA,CAAAA,CAAG,CAAI,CAAA,CAAA,CAAA,CAAA,CAAI,CAAE,CAAA,CAAA,CACvC/E,EAAG/D,CAAAA,CAAC,CAAI,CAAA,CAAE,WAAaiJ,CAAAA,EAAAA,CAAI,EAAIzC,CAAAA,CAAE,CACjClB,CAAAA,EAAAA,CAAGe,CAAGC,CAAAA,CAAC,CACA,CAAA,CAACC,CAAG0C,CAAAA,EAAAA,CAAIzC,CAAC,CAClB,CAAC,EACH,CAAA,CACA,CAAG,CAAA,CAACxG,CAAGC,CAAAA,CAAAA,CAAG+B,CAAGC,CAAAA,CAAAA,CAAGE,CAAGI,CAAAA,CAAAA,GAAM,CACvB,IAAI,CAAIyD,CAAAA,EAAAA,CAAG/F,CAAG+B,CAAAA,CAAC,CACfG,CAAAA,CAAAA,CAAIuD,CAAEzD,CAAAA,CAAAA,CAAGE,CAAC,CAAA,CACVgB,CAAE,CAAA,EAAI,CAAA,CAACnD,CAAC,CAAA,CAAIoD,CAAM,EAAA,CAChBA,CAAIA,CAAAA,CAAAA,CAAE,CAAC,CACP,CAAA,IAAIC,CAAI,CAAA,CAAA,YAAA,EAAeD,CAAE,CAAA,IAAI,CAE7B,CAAA,CAAA,GADWA,CAAE,CAAA,EAAA,CAAG,EAAhB,GAAA,KAAA,CAAA,GAAuBA,CAAE,CAAA,EAAA,CAAG,EAAK,CAAA,EAClBA,CAAAA,CAAAA,CAAAA,CAAE,EAAG,CAAA,EAAA,CAAGnD,CAAI,CAAA,CAAC,CAAxB,GAAA,KAAA,CAAA,CACF,MAAM,IAAIwD,CACR,CAAA,CAAA,2EAAA,EAA8ExD,CAAI,CAAA,CAAC,CACjFmD,aAAAA,EAAAA,CAAAA,CAAE,IACJ,CACF,mGAAA,CAAA,CAAA,CACF,OAAAA,CAAAA,CAAE,EAAG,CAAA,EAAA,CAAGnD,CAAI,CAAA,CAAC,CAAI,CAAA,IAAM,CACrB8F,EAAAA,CAAG,CAAoB3C,iBAAAA,EAAAA,CAAAA,CAAE,IAAI,CAAA,qBAAA,CAAA,CAAyB,CAAC,EACzD,CACAD,CAAAA,CAAAA,CAAE,EAAC,CAAG,CAAIiC,CAAAA,CAAAA,GACRA,CAAE,CAAA,MAAA,CAAO,CAAG,CAAA,CAAA,CAAG,IAAI,CAAA,CACnBhC,CAAE,CAAA,EAAA,CAAG,GAAGnD,CAAI,CAAA,CAAC,CAAIiG,CAAAA,EAAAA,CAAG7C,CAAG+B,CAAAA,CAAAA,CAAG,IAAMjD,CAAAA,CAAAA,CAAGI,CAAC,CAAA,CAC7B,EAAC,CACT,CACM,CAAA,EACT,CAAC,EACH,CAAA,CACA,CAAG,CAAA,CAACvC,CAAGC,CAAAA,CAAAA,CAAG+B,CAAGC,CAAAA,CAAAA,CAAGE,CAAGI,CAAAA,CAAAA,CAAG,CAAGa,CAAAA,CAAAA,GAAM,CAC7B,IAAIC,CAAI2C,CAAAA,EAAAA,CAAGhE,EAAGC,CAAC,CAAA,CACfhC,CAAIuD,CAAAA,CAAAA,CAAEvD,CAAC,CAAA,CACPA,CAAIwG,CAAAA,EAAAA,CAAGxG,CAAC,CAAA,CACRsC,CAAImD,CAAAA,CAAAA,CAAEvD,CAAGI,CAAAA,CAAC,CACVY,CAAAA,CAAAA,CAAE,EAAC,CAAG,CAACnD,CAAC,CAAIoF,CAAAA,CAAAA,EAAM,CAChB,SAASC,CAAI,EAAA,CACXU,EAAG,CAAA,CAAA,YAAA,EAAeI,CAAC,CAAA,qBAAA,CAAA,CAAyB9C,CAAC,EAC/C,CACA+B,CAAIA,CAAAA,CAAAA,CAAE,CAAC,CAAA,CACP,IAAIe,CAAAA,CAAI,CAAGf,EAAAA,CAAAA,CAAE,IAAI,CAAA,CAAA,EAAInF,CAAC,CAAA,CAAA,CACtBA,CAAE,CAAA,UAAA,CAAW,IAAI,CAAA,GAAMA,CAAI,CAAA,MAAA,CAAOA,CAAE,CAAA,SAAA,CAAU,CAAC,CAAC,CAChDmD,CAAAA,CAAAA,CAAAA,EAAKgC,CAAE,CAAA,EAAA,CAAG,EAAG,CAAA,IAAA,CAAKnF,CAAC,CAAA,CACnB,IAAImG,CAAAA,CAAIhB,EAAE,EAAG,CAAA,EAAA,CACXiB,CAAID,CAAAA,CAAAA,CAAEnG,CAAC,CAAA,CACT,OAAWoG,CAAAA,GAAX,KAA4BA,CAAAA,EAAAA,CAAAA,CAAE,EAAb,GAAA,KAAA,CAAA,EAAmBA,CAAE,CAAA,SAAA,GAAcjB,CAAE,CAAA,IAAA,EAAQiB,CAAE,CAAA,EAAA,GAAOrE,CAAI,CAAA,CAAA,EACrEqD,CAAE,CAAA,EAAA,CAAKrD,CAAI,CAAA,CAAA,CAAKqD,CAAE,CAAA,SAAA,CAAYD,CAAE,CAAA,IAAA,CAAQgB,CAAEnG,CAAAA,CAAC,CAAIoF,CAAAA,CAAAA,GAChDZ,GAAG2B,CAAGnG,CAAAA,CAAAA,CAAGkG,CAAC,CAAA,CAAIC,CAAEnG,CAAAA,CAAC,CAAE,CAAA,EAAA,CAAG+B,CAAI,CAAA,CAAC,CAAIqD,CAAAA,CAAAA,CAAAA,CACpClC,CAAE,CAAA,EAAIE,CAAAA,CAAAA,CAAIiD,CACRA,GAAAA,CAAAA,CAAIJ,EAAGC,CAAAA,CAAAA,CAAGG,CAAGlB,CAAAA,CAAAA,CAAG7C,CAAG,CAAA,CAAC,CACT6D,CAAAA,CAAAA,CAAEnG,CAAC,CAAA,CAAE,EAAhB,GAAA,KAAA,CAAA,EAAuBqG,CAAE,CAAA,EAAA,CAAKtE,EAAI,CAAKoE,CAAAA,CAAAA,CAAEnG,CAAC,CAAA,CAAIqG,CAAOF,EAAAA,CAAAA,CAAEnG,CAAC,CAAA,CAAE,EAAG+B,CAAAA,CAAAA,CAAI,CAAC,CAAA,CAAIsE,CAC/D,CAAA,EACR,CAAA,CAAA,CACM,EACT,CAAC,EACH,CACA,CAAA,CAAA,CAAItG,CAAMsD,EAAAA,CAAAA,CAAEtD,CAAG8G,CAAAA,EAAE,CACjB,CAAA,CAAA,CAAG,CAAC9G,CAAAA,CAAGC,CAAG+B,CAAAA,CAAAA,CAAGC,IAAM,CACjB,SAASE,CAAI,EAAA,EACblC,CAAAA,CAAIuD,CAAEvD,CAAAA,CAAC,CACPkC,CAAAA,CAAAA,CAAE,MAAS,CAAA,EACXmB,CAAAA,CAAAA,CAAEtD,CAAG,CAAA,CACH,IAAMC,CAAAA,CAAAA,CACN,WAAakC,CAAAA,CAAAA,CACb,YAAc,CAAA,SAAUI,CAAG,CAAA,CACzB,OAAO,IAAA,CAAK,WAAY,CAAA,MAAA,CAAOA,CAAC,CAClC,CACA,CAAA,UAAA,CAAY,CAACA,CAAG,CAAA,CAAA,GAAM,CAAE,CAAA,KAAA,CACxB,cAAgB,CAAA,CAAA,CAChB,oBAAsBwE,CAAAA,EAAAA,CAAG9G,CAAG+B,CAAAA,CAAAA,CAAGC,CAAC,CAAA,CAChC,EAAI,CAAA,IACN,CAAC,CAAA,CACDyC,GAAGzE,CAAGkC,CAAAA,CAAC,EACT,CAAA,CACA,CAAG,CAAA,CAACnC,CAAGC,CAAAA,CAAAA,CAAG+B,CAAM,GAAA,CACd,IAAIC,CAAAA,CAAI+E,EAAGhH,CAAAA,CAAAA,CAAG,MAAM,CAAA,CACpBC,EAAIuD,CAAEvD,CAAAA,CAAC,CACPD,CAAAA,CAAAA,CAAIiC,CAAE,CAAA,WAAA,CACNA,CAAI,CAAA,MAAA,CAAO,MAAOA,CAAAA,CAAAA,CAAE,WAAY,CAAA,SAAA,CAAW,CACzC,KAAA,CAAO,CAAE,KAAA,CAAOD,CAAE,CAAA,CAClB,WAAa,CAAA,CAAE,KAAOwC,CAAAA,EAAAA,CAAG,CAAGvC,EAAAA,CAAAA,CAAE,IAAI,CAAA,CAAA,EAAIhC,CAAC,CAAA,CAAA,CAAI,UAAY,EAAE,CAAE,CAC7D,CAAC,CAAA,CACDD,CAAE,CAAA,MAAA,CAAOgC,CAAC,CAAA,CAAIC,CACdjC,CAAAA,CAAAA,CAAEC,CAAC,CAAA,CAAIgC,EACT,CAAA,CACA,CAAG,CAAA,CAACjC,CAAGC,CAAAA,CAAAA,CAAG+B,CAAM,GAAA,CACd/B,CAAIuD,CAAAA,CAAAA,CAAEvD,CAAC,CAAA,CACPqD,CAAEtD,CAAAA,CAAAA,CAAG,CACH,IAAA,CAAMC,CACN,CAAA,YAAA,CAAegC,CAAMA,EAAAA,CAAAA,CACrB,UAAY,CAAA,CAACA,EAAGE,CAAMA,GAAAA,CAAAA,CACtB,cAAgB,CAAA,CAAA,CAChB,oBAAsB8E,CAAAA,EAAAA,CAAGhH,CAAG+B,CAAAA,CAAC,CAC7B,CAAA,EAAA,CAAI,IACN,CAAC,EACH,CAAA,CACA,CAAG,CAAA,CAAChC,CAAGC,CAAAA,CAAAA,CAAG+B,CAAGC,CAAAA,CAAAA,CAAGE,CAAGI,CAAAA,CAAAA,GAAM,CACvB,IAAI,CAAIyD,CAAAA,EAAAA,CAAG/F,CAAG+B,CAAAA,CAAC,CACfhC,CAAAA,CAAAA,CAAIwD,CAAExD,CAAAA,CAAC,EACPA,CAAIyG,CAAAA,EAAAA,CAAGzG,CAAC,CAAA,CACRmC,CAAIuD,CAAAA,CAAAA,CAAEzD,CAAGE,CAAAA,CAAC,CACVuC,CAAAA,EAAAA,CACE1E,CACA,CAAA,UAAY,CACV+F,EAAAA,CAAG,CAAe/F,YAAAA,EAAAA,CAAC,CAAyB,qBAAA,CAAA,CAAA,CAAC,EAC/C,CAAA,CACAC,CAAI,CAAA,CACN,CACAkD,CAAAA,CAAAA,CAAE,EAAC,CAAG,CAAIC,CAAAA,CAAAA,GACRkC,EAAGtF,CAAAA,CAAAA,CAAGkG,EAAGlG,CAAAA,CAAAA,CAAG,CAACoD,CAAE,CAAA,CAAC,CAAG,CAAA,IAAI,CAAE,CAAA,MAAA,CAAOA,CAAE,CAAA,KAAA,CAAM,CAAC,CAAC,CAAG,CAAA,IAAA,CAAMjB,CAAGI,CAAAA,CAAC,CAAGtC,CAAAA,CAAAA,CAAI,CAAC,CAAA,CACxD,EAAC,CACT,EACH,CAAA,CACA,CAAG,CAAA,CAACD,CAAGC,CAAAA,CAAAA,CAAG+B,CAAGC,CAAAA,CAAAA,CAAGE,CAAM,GAAA,CAIpB,GAHAlC,CAAAA,CAAIuD,EAAEvD,CAAC,CAAA,CACAkC,CAAP,GAAA,CAAA,CAAA,GAAaA,CAAI,CAAA,UAAA,CAAA,CACjBA,CAAKiB,CAAAA,CAAAA,EAAMA,CACDnB,CAAAA,CAAAA,GAAN,CAAS,CAAA,CACX,IAAIM,CAAAA,CAAI,EAAK,CAAA,CAAA,CAAIP,CACjBG,CAAAA,CAAAA,CAAKiB,CAAOA,EAAAA,CAAAA,EAAKb,CAAOA,GAAAA,EAC1B,CACA,IAAI,CAAItC,CAAAA,CAAAA,CAAE,QAAS,CAAA,UAAU,CACzB,CAAA,SAAUmD,CAAGC,CAAAA,CAAAA,CAAG,CACd,OAAOA,CAAAA,GAAM,CACf,CAAA,CACA,SAAUD,CAAAA,CAAGC,CAAG,CAAA,CACd,OAAOA,CACT,CACJC,CAAAA,CAAAA,CAAEtD,CAAG,CAAA,CACH,IAAMC,CAAAA,CAAAA,CACN,YAAckC,CAAAA,CAAAA,CACd,UAAY,CAAA,CAAA,CACZ,cAAgB,CAAA,CAAA,CAChB,oBAAsB+E,CAAAA,EAAAA,CAAGjH,CAAG+B,CAAAA,CAAAA,CAASC,CAAN,GAAA,CAAO,CACtC,CAAA,EAAA,CAAI,IACN,CAAC,EACH,CACA,CAAA,CAAA,CAAG,CAACjC,CAAAA,CAAGC,CAAG+B,CAAAA,CAAAA,GAAM,CACd,SAASC,CAAEM,CAAAA,CAAAA,CAAG,CACZ,OAAO,IAAIJ,CAAAA,CAAEzB,CAAE,CAAA,MAAA,CAAQK,CAAGwB,CAAAA,CAAAA,CAAI,CAAM,EAAA,CAAC,CAAGxB,CAAAA,CAAAA,CAAEwB,CAAK,EAAA,CAAC,CAAC,CACnD,CACA,IAAIJ,CAAI,CAAA,CAAC,SAAW,CAAA,UAAA,CAAY,WAAY,WAAa,CAAA,UAAA,CAAY,WAAa,CAAA,YAAA,CAAc,YAAY,CAAA,CAC1GlC,CACF,CAAA,CACA+B,CAAIwB,CAAAA,CAAAA,CAAExB,CAAC,CAAA,CACPsB,CAAEtD,CAAAA,CAAAA,CAAG,CAAE,IAAA,CAAMgC,CAAG,CAAA,YAAA,CAAcC,CAAG,CAAA,cAAA,CAAgB,CAAG,CAAA,oBAAA,CAAsBA,CAAE,CAAA,CAAG,CAAE,EAAA,CAAI,CAAG,CAAA,CAAC,EAC3F,CAAA,CACA,CAAIjC,CAAAA,CAAAA,EAAM,CACRsD,CAAEtD,CAAAA,CAAAA,CAAG8G,EAAE,EACT,CACA,CAAA,EAAA,CAAI,CAAC9G,CAAAA,CAAGC,CAAG+B,CAAAA,CAAAA,CAAGC,CAAGE,CAAAA,CAAAA,CAAGI,CAAG,CAAA,CAAA,CAAGa,CAAGC,CAAAA,CAAAA,CAAG+B,CAAGC,CAAAA,CAAAA,CAAGc,CAAM,GAAA,CAC1CnE,CAAIwB,CAAAA,CAAAA,CAAExB,CAAC,CAAA,CACPO,CAAImD,CAAAA,CAAAA,CAAEvD,CAAGI,CAAAA,CAAC,CACVa,CAAAA,CAAAA,CAAIsC,CAAE,CAAA,CAAA,CAAGtC,CAAC,CACVgC,CAAAA,CAAAA,CAAIM,CAAErC,CAAAA,CAAAA,CAAG+B,CAAC,CAAA,CACVe,CAAIT,CAAAA,CAAAA,CAAEL,CAAGc,CAAAA,CAAC,CACVhD,CAAAA,CAAAA,CAAE,CAACnD,CAAC,CAAG,CAAA,CAACC,CAAC,CAAA,CAAImG,CACXA,GAAAA,CAAAA,CAAIA,CAAE,CAAA,CAAC,CACA,CAAA,CAAC,IAAIjB,EAAAA,CAAGnD,CAAGoE,CAAAA,CAAAA,CAAE,EAAI,CAAA,CAAA,CAAA,CAAI,CAAI,CAAA,CAAA,CAAA,CAAA,CAAIA,EAAGnE,CAAGM,CAAAA,CAAAA,CAAGa,CAAGgC,CAAAA,CAAAA,CAAGe,CAAC,CAAC,CACtD,CAAA,EACH,CACA,CAAA,CAAA,CAAG,CAACnG,CAAAA,CAAGC,CAAM,GAAA,CACXA,CAAIuD,CAAAA,CAAAA,CAAEvD,CAAC,CAAA,CACP,IAAI+B,CAAAA,CAAsB/B,CAAlB,GAAA,aAAA,CACRqD,CAAEtD,CAAAA,CAAAA,CAAG,CACH,IAAA,CAAMC,CACN,CAAA,YAAA,CAAc,SAAUgC,CAAAA,CAAG,CACzB,IAAIE,EAAIpB,CAAEkB,CAAAA,CAAAA,EAAK,CAAC,CAAA,CACdM,CAAIN,CAAAA,CAAAA,CAAI,CACV,CAAA,GAAID,CACF,CAAA,IAAA,IAAS,CAAIO,CAAAA,CAAAA,CAAGa,CAAI,CAAA,CAAA,CAAGA,CAAKjB,EAAAA,CAAAA,CAAG,EAAEiB,CAAAA,CAAG,CAClC,IAAIC,CAAId,CAAAA,CAAAA,CAAIa,CACZ,CAAA,GAAIA,CAAKjB,EAAAA,CAAAA,EAAUxB,CAAE0C,CAAAA,CAAC,CAAR,EAAA,CAAA,CAAW,CAEvB,GADA,EAAI,CAAIf,CAAAA,CAAAA,CAAE3B,CAAG,CAAA,CAAA,CAAG0C,CAAI,CAAA,CAAC,CAAI,CAAA,EAAA,CACV+B,CAAX,GAAA,KAAA,CAAA,CAAc,IAAIA,CAAAA,CAAI,CACpBA,CAAAA,KAAAA,CAAAA,EAAK,IAA0BA,CAAAA,CAAAA,EAAK,CAC1C,CAAA,CAAA,CAAI/B,CAAI,CAAA,EACV,CACF,CAAA,KACG,CAEH,IADA+B,CAAI,CAAA,KAAA,CAAMjD,CAAC,CAAA,CACNiB,CAAI,CAAA,CAAA,CAAGA,CAAIjB,CAAAA,CAAAA,CAAG,EAAEiB,CAAGgC,CAAAA,CAAAA,CAAEhC,CAAC,CAAA,CAAI,MAAO,CAAA,YAAA,CAAazC,CAAE4B,CAAAA,CAAAA,CAAIa,CAAC,CAAC,CAC3DgC,CAAAA,CAAAA,CAAIA,CAAE,CAAA,IAAA,CAAK,EAAE,EACf,CACA,OAAAU,CAAE7D,CAAAA,CAAC,CACImD,CAAAA,CACT,CACA,CAAA,UAAA,CAAY,SAAUnD,CAAAA,CAAGE,CAAG,CAAA,CAC1BA,CAAa,YAAA,WAAA,GAAgBA,CAAI,CAAA,IAAI,WAAWA,CAAC,CAAA,CAAA,CACjD,IAAII,CAAAA,CAAgB,OAAOJ,CAAAA,EAAnB,QACR,CAAA,GAAI,EAAEI,CAAAA,EAAKJ,CAAa,YAAA,UAAA,EAAcA,CAAa,YAAA,iBAAA,EAAqBA,CAAa,YAAA,SAAA,CAAA,CACnF,MAAM,IAAIsB,CAAAA,CAAE,uCAAuC,CAAA,CACrD,IAAI,CAAA,CAAIzB,CAAKO,EAAAA,CAAAA,CAAIG,EAAGP,CAAAA,CAAC,CAAIA,CAAAA,CAAAA,CAAE,MACvBiB,CAAAA,CAAAA,CAAI8F,EAAG,CAAA,CAAA,CAAI,EAAI,CAAC,CAAA,CAClB7F,CAAID,CAAAA,CAAAA,CAAI,CAEV,CAAA,GADArC,CAAEqC,CAAAA,CAAAA,EAAK,CAAC,CAAA,CAAI,CACRpB,CAAAA,CAAAA,EAAKO,CAAGI,CAAAA,EAAAA,CAAGR,CAAGxB,CAAAA,CAAAA,CAAG0C,CAAG,CAAA,CAAA,CAAI,CAAC,CAAA,CAAA,KAAA,GACpBd,CACP,CAAA,IAAKA,CAAI,CAAA,CAAA,CAAGA,CAAI,CAAA,CAAA,CAAG,EAAEA,CAAAA,CAAG,CACtB,IAAI6C,CAAIjD,CAAAA,CAAAA,CAAE,WAAWI,CAAC,CAAA,CACtB,GAAI,GAAA,CAAM6C,CAAG,CAAA,MAAOU,CAAEzC,CAAAA,CAAC,CAAG,CAAA,IAAII,CAAE,CAAA,wDAAwD,CACxF9C,CAAAA,CAAAA,CAAE0C,CAAId,CAAAA,CAAC,CAAI6C,CAAAA,EACb,CACG,KAAA,IAAK7C,CAAI,CAAA,CAAA,CAAGA,CAAI,CAAA,CAAA,CAAG,EAAEA,CAAAA,CAAG5B,CAAE0C,CAAAA,CAAAA,CAAId,CAAC,CAAA,CAAIJ,CAAEI,CAAAA,CAAC,EAC3C,OAASN,CAAAA,GAAT,IAAcA,EAAAA,CAAAA,CAAE,IAAK6D,CAAAA,CAAAA,CAAG1C,CAAC,CAAA,CAClBA,CACT,CAAA,CACA,cAAgB,CAAA,CAAA,CAChB,oBAAsBN,CAAAA,EAAAA,CACtB,EAAGb,CAAAA,CAAAA,CAAG,CACJ6D,CAAAA,CAAE7D,CAAC,EACL,CACF,CAAC,EACH,CAAA,CACA,CAAG,CAAA,CAACjC,CAAGC,CAAAA,CAAAA,CAAG+B,CAAM,GAAA,CAEd,GADAA,CAAAA,CAAIwB,EAAExB,CAAC,CAAA,CACG/B,CAAN,GAAA,CAAA,CACF,IAAIgC,CAAAA,CAAImF,EACJjF,CAAAA,CAAAA,CAAIkF,EACJ9E,CAAAA,CAAAA,CAAI+E,EACJ,CAAA,CAAA,CAAKlE,CAAMvC,EAAAA,EAAAA,CAAEuC,CAAK,EAAA,CAAC,CACZnD,CAAAA,KAAAA,CAAAA,GAAN,CAAagC,GAAAA,CAAAA,CAAIsF,EAAMpF,CAAAA,CAAAA,CAAIqF,EAAMjF,CAAAA,CAAAA,CAAIkF,EAAM,CAAA,CAAA,CAAKrE,CAAMrC,EAAAA,CAAAA,CAAEqC,CAAK,EAAA,CAAC,CACrEE,CAAAA,CAAAA,CAAAA,CAAEtD,EAAG,CACH,IAAA,CAAMgC,CACN,CAAA,YAAA,CAAeoB,CAAM,EAAA,CACnB,IAASC,IAAAA,CAAAA,CAAItC,CAAEqC,CAAAA,CAAAA,EAAK,CAAC,CAAA,CAAGgC,CAAGC,CAAAA,CAAAA,CAAIjC,CAAI,CAAA,CAAA,CAAG+C,CAAI,CAAA,CAAA,CAAGA,CAAK9C,EAAAA,CAAAA,CAAG,EAAE8C,CAAAA,CAAG,CACxD,IAAIC,CAAIhD,CAAAA,CAAAA,CAAI,CAAI+C,CAAAA,CAAAA,CAAIlG,CAChBkG,CAAAA,CAAAA,CAAAA,EAAK9C,CAAU,EAAA,CAAA,CAAE+C,CAAC,CAAR,EAAA,CAAA,IACXf,CAAIpD,CAAAA,CAAAA,CAAEoD,CAAGe,CAAAA,CAAAA,CAAIf,CAAC,CAAA,CAAeD,CAAX,GAAA,KAAA,CAAA,CAAgBA,CAAIC,CAAAA,CAAAA,EAAOD,CAAK,EAAA,IAAA,CAA0BA,CAAKC,EAAAA,CAAAA,CAAAA,CAAMA,CAAIe,CAAAA,CAAAA,CAAInG,CACpG,EAAA,CACA,OAAA6F,CAAAA,CAAE1C,CAAC,CAAA,CACIgC,CACT,CAAA,CACA,UAAY,CAAA,CAAChC,CAAGC,CAAAA,CAAAA,GAAM,CACpB,GAAgB,OAAOA,CAAnB,EAAA,QAAA,CAAsB,MAAM,IAAII,CAAE,CAAA,CAAA,0CAAA,EAA6CzB,CAAC,CAAA,CAAE,CACtF,CAAA,IAAIoD,CAAI7C,CAAAA,CAAAA,CAAEc,CAAC,CAAA,CACTgC,CAAI6D,CAAAA,EAAAA,CAAG,CAAI9D,CAAAA,CAAAA,CAAInF,CAAC,CAAA,CAClB,OAAAc,CAAAA,CAAEsE,CAAK,EAAA,CAAC,CAAID,CAAAA,CAAAA,CAAInF,CAChBkC,CAAAA,CAAAA,CAAEkB,CAAGgC,CAAAA,CAAAA,CAAI,CAAGD,CAAAA,CAAAA,CAAInF,CAAC,CACRmD,CAAAA,CAAAA,GAAT,IAAcA,EAAAA,CAAAA,CAAE,IAAK0C,CAAAA,CAAAA,CAAGT,CAAC,CAAA,CAClBA,CACT,CAAA,CACA,cAAgB,CAAA,CAAA,CAChB,oBAAsBvC,CAAAA,EAAAA,CACtB,EAAGM,CAAAA,CAAAA,CAAG,CACJ0C,CAAAA,CAAE1C,CAAC,EACL,CACF,CAAC,EACH,CAAA,CACA,CAAG,CAAA,CAACpD,CAAGC,CAAAA,CAAAA,CAAG+B,CAAGC,CAAAA,CAAAA,CAAGE,CAAGI,CAAAA,CAAAA,GAAM,CACvBK,EAAG5C,CAAAA,CAAC,CAAI,CAAA,CAAE,IAAMwD,CAAAA,CAAAA,CAAEvD,CAAC,CAAA,CAAG,EAAIyF,CAAAA,CAAAA,CAAE1D,CAAGC,CAAAA,CAAC,CAAG,CAAA,EAAA,CAAIyD,CAAEvD,CAAAA,CAAAA,CAAGI,CAAC,CAAA,CAAG,EAAI,CAAA,EAAG,EACzD,CACA,CAAA,CAAA,CAAG,CAACvC,CAAAA,CAAGC,CAAG+B,CAAAA,CAAAA,CAAGC,CAAGE,CAAAA,CAAAA,CAAGI,CAAG,CAAA,CAAA,CAAGa,EAAGC,CAAG+B,CAAAA,CAAAA,GAAM,CACnCxC,EAAAA,CAAG5C,CAAC,CAAA,CAAE,EAAG,CAAA,IAAA,CAAK,CAAE,EAAA,CAAIwD,CAAEvD,CAAAA,CAAC,CAAG,CAAA,EAAA,CAAI+B,CAAG,CAAA,EAAA,CAAI0D,CAAEzD,CAAAA,CAAAA,CAAGE,CAAC,CAAA,CAAG,EAAII,CAAAA,CAAAA,CAAG,EAAI,CAAA,CAAA,CAAG,EAAImD,CAAAA,CAAAA,CAAEtC,CAAGC,CAAAA,CAAC,CAAG,CAAA,EAAA,CAAI+B,CAAE,CAAC,EAClF,CACA,CAAA,CAAA,CAAG,CAACpF,CAAAA,CAAGC,CAAM,GAAA,CACXA,CAAIuD,CAAAA,CAAAA,CAAEvD,CAAC,CAAA,CACPqD,CAAEtD,CAAAA,CAAAA,CAAG,CAAE,EAAA,CAAI,CAAI,CAAA,CAAA,IAAA,CAAMC,CAAG,CAAA,cAAA,CAAgB,CAAG,CAAA,YAAA,CAAc,IAAM,EAAI,CAAA,UAAA,CAAY,IAAM,EAAG,CAAC,EAC3F,CAAA,CACA,CAAG,CAAA,IAAM,CACP,MAAM,CAAA,CAAA,CACR,CACA,CAAA,EAAA,CAAI,CAACD,CAAAA,CAAGC,CAAG+B,CAAAA,CAAAA,CAAGC,CACZjC,IAAAA,CAAAA,CAAI0H,EAAG1H,CAAAA,CAAC,CACRC,CAAAA,CAAAA,CAAI4G,EAAG5G,CAAAA,CAAC,CACDD,CAAAA,CAAAA,CAAE,IAAMC,CAAAA,CAAAA,CAAG+B,CAAGC,CAAAA,CAAC,CAExB,CAAA,CAAA,CAAA,CAAG2E,EACH,CAAA,CAAA,CAAG,CAAC5G,CAAAA,CAAGC,CAAG+B,CAAAA,CAAAA,GAAM,CACd,IAAIC,EAAI2F,EAAG5H,CAAAA,CAAAA,CAAGC,CAAC,CAAA,CACbkC,CAAIF,CAAAA,CAAAA,CAAE,KAAM,EAAA,CACdjC,CACA,EAAA,CAAA,IAAIuC,CAAI,CAAA,KAAA,CAAMvC,CAAC,CAAA,CACf,OAAAC,CAAAA,CAAI,CAAiBgC,cAAAA,EAAAA,CAAAA,CAAE,GAAK,CAAA,CAAA,EAAM,CAAE,CAAA,IAAI,CAAE,CAAA,IAAA,CAAK,IAAI,CAAC,CAAQE,KAAAA,EAAAA,CAAAA,CAAE,IAAI,CAAA,CAAA,CAAA,CAC3DwF,EACLnD,CAAAA,EAAAA,CAAGvE,EAAG,CAAC,CAAA,CAAGmD,CAAGC,CAAAA,CAAAA,CAAG+B,CAAM,GAAA,CACpB,IAASC,IAAAA,CAAAA,CAAI,CAAGc,CAAAA,CAAAA,CAAI,CAAGA,CAAAA,CAAAA,CAAInG,CAAG,CAAA,EAAEmG,CAAI5D,CAAAA,CAAAA,CAAE4D,CAAC,CAAA,CAAIlE,CAAEkE,CAAAA,CAAC,CAAE,CAAA,oBAAA,CAAqBf,CAAIC,CAAAA,CAAC,CAAKA,CAAAA,CAAAA,EAAKpD,CAAEkE,CAAAA,CAAC,CAAE,CAAA,cAAA,CACzF,OAAA/C,CAAAA,CAAUpB,IAAN,CAAU6F,CAAAA,EAAAA,CAAGzE,CAAGb,CAAAA,CAAC,CAAIa,CAAAA,CAAAA,CAAE,KAAM,CAAA,CAAA,CAAGb,CAAC,CAAA,CACrC,CAAI,CAAA,EACJa,CAAAA,CAAAA,CAAIjB,CAAE,CAAA,UAAA,CAAW,CAAGiB,CAAAA,CAAC,CACrB,CAAA,CAAA,CAAE,MAAWrC,GAAAA,CAAAA,CAAEsC,CAAK,EAAA,CAAC,CAAI4B,CAAAA,EAAAA,CAAG,CAAC,CAAA,CAAA,CACtB7B,CACT,CAAC,CACH,CACF,EACA,EAAKpD,CAAAA,CAAAA,EAAM,CACT,CAAA,CAAIA,CAAM2G,GAAAA,CAAAA,CAAE3G,CAAI,CAAA,CAAC,CAAK,EAAA,CAAA,EACxB,CACA,CAAA,CAAA,CAAIA,CAAM,EAAA,CACR,IAAIC,CAAAA,CAAI4G,GAAG7G,CAAC,CAAA,CACZ6C,EAAG5C,CAAAA,CAAC,CACJ2G,CAAAA,EAAAA,CAAG5G,CAAC,EACN,CACA,CAAA,CAAA,CAAG,CAACA,CAAAA,CAAGC,CACLD,IAAAA,CAAAA,CAAIgH,EAAGhH,CAAAA,CAAAA,CAAG,mBAAmB,CAC7BA,CAAAA,CAAAA,CAAIA,CAAE,CAAA,oBAAA,CAAqBC,CAAC,CAAA,CACrBgF,EAAGjF,CAAAA,CAAC,CAEb,CAAA,CAAA,CAAA,CAAG,IAAM,CACPyB,EAAG,CAAA,EAAE,EACP,CAAA,CACA,CAAG,CAAA,IAAM,WAAY,CAAA,GAAA,EACrB,CAAA,CAAA,CAAIzB,CAAM,EAAA,CACR,IAAIC,CAAAA,CAAIU,CAAE,CAAA,MAAA,CAEV,GADAX,CAAAA,IAAO,CACH,CAAA,UAAA,CAAaA,EAAG,OAAO,CAAA,CAAA,CAC3B,IAASgC,IAAAA,CAAAA,CAAI,CAAG,CAAA,CAAA,EAAKA,CAAGA,CAAAA,CAAAA,EAAK,CAAG,CAAA,CAC9B,IAAIC,CAAAA,CAAIhC,CAAK,EAAA,CAAA,CAAI,EAAM+B,CAAAA,CAAAA,CAAAA,CACvBC,CAAI,CAAA,IAAA,CAAK,GAAIA,CAAAA,CAAAA,CAAGjC,CAAI,CAAA,SAAS,CAC7B,CAAA,IAAImC,CAAI,CAAA,IAAA,CACRF,CAAI,CAAA,IAAA,CAAK,GAAIjC,CAAAA,CAAAA,CAAGiC,CAAC,CAAA,CACjBjC,EAAG,CACDmC,CAAAA,CAAAA,CACGA,CAAE,CAAA,GAAA,CAAI,IAAKA,CAAAA,CAAAA,CAAG,UAAYF,CAAAA,CAAAA,CAAAA,CAAM,KAASA,CAAAA,CAAAA,CAAI,KAAU,EAAA,KAAM,CAAIzB,CAAAA,EAAAA,CAAG,MAAO,CAAA,UAAA,CAAa,KAAS,EAAA,KAAA,CACpG,GAAI,CACFA,EAAG,CAAA,IAAA,CAAK2B,CAAC,CAAA,CACTjB,EAAG,EAAA,CACH,IAAIqB,CAAAA,CAAI,CACR,CAAA,MAAMvC,CACR,CAAA,KAAY,EACZuC,CAAAA,CAAI,KACN,EAAA,CACA,GAAIA,CAAAA,CAAG,OAAO,CAAA,CAChB,CACA,OAAO,CACT,CAAA,CAAA,CACA,CAAG,CAAA,CAACvC,CAAGC,CAAAA,CAAAA,GAAM,CACX,IAAI+B,CAAI,CAAA,CAAA,CACR,OAAA+F,EAAAA,EAAK,CAAA,OAAA,CAAQ,CAAC9F,CAAAA,CAAGE,CAAM,GAAA,CACrB,IAAII,CAAAA,CAAItC,CAAI+B,CAAAA,CAAAA,CAEZ,IADAG,CAAIpB,CAAAA,CAAAA,CAAGf,CAAI,CAAA,CAAA,CAAImC,CAAM,EAAA,CAAC,CAAII,CAAAA,CAAAA,CACrBA,CAAI,CAAA,CAAA,CAAGA,CAAIN,CAAAA,CAAAA,CAAE,MAAQ,CAAA,EAAEM,CAAG7B,CAAAA,CAAAA,CAAEyB,CAAG,EAAA,CAAA,CAAIF,CAAE,CAAA,UAAA,CAAWM,CAAC,CAAA,CACtD7B,CAAEyB,CAAAA,CAAC,CAAI,CAAA,CAAA,CACPH,CAAKC,EAAAA,CAAAA,CAAE,MAAS,CAAA,EAClB,CAAC,CAAA,CACM,CACT,CACA,CAAA,CAAA,CAAG,CAACjC,CAAAA,CAAGC,CAAM,GAAA,CACX,IAAI+B,CAAAA,CAAI+F,EAAG,EAAA,CACXhH,CAAEf,CAAAA,CAAAA,EAAK,CAAC,CAAA,CAAIgC,CAAE,CAAA,MAAA,CACd,IAAIC,CAAAA,CAAI,CACR,CAAA,OAAAD,CAAE,CAAA,OAAA,CAASG,CAAOF,EAAAA,CAAAA,EAAKE,CAAE,CAAA,MAAA,CAAS,CAAE,CAAA,CACpCpB,CAAEd,CAAAA,CAAAA,EAAK,CAAC,CAAA,CAAIgC,EACL,CACT,CAAA,CACA,CAAG,CAAA,IAAM,EACT,CAAA,CAAA,CAAG,IAAM,EAAA,CACT,CAAG,CAAA,UAAY,CACb,OACF,EAAA,CAAA,CACA,CAAG,CAAA,CAACjC,CAAGC,CAAAA,CAAAA,CAAG+B,CAAGC,CAAAA,CAAAA,GAAM,CACjB,IAAA,IAASE,CAAI,CAAA,CAAA,CAAGI,CAAI,CAAA,CAAA,CAAGA,CAAIP,CAAAA,CAAAA,CAAGO,CAAK,EAAA,CAAA,CACjC,IAAI,CAAA,CAAIxB,EAAEd,CAAK,EAAA,CAAC,CACdmD,CAAAA,CAAAA,CAAIrC,CAAGd,CAAAA,CAAAA,CAAI,CAAM,EAAA,CAAC,CACpBA,CAAAA,CAAAA,EAAK,CACL,CAAA,IAAA,IAASoD,CAAI,CAAA,CAAA,CAAGA,CAAID,CAAAA,CAAAA,CAAGC,CAAK,EAAA,CAAA,CAC1B,IAAI+B,CAAAA,CAAIzE,CAAE,CAAA,CAAA,CAAI0C,CAAC,CAAA,CACbgC,CAAI4C,CAAAA,EAAAA,CAAGjI,CAAC,CAAA,CACJoF,CAAN,GAAA,CAAA,EAAkBA,CAAP,GAAA,EAAA,EAAA,CAAmBpF,IAAN,CAAUK,CAAAA,CAAAA,CAAKC,CAAGgC,EAAAA,CAAAA,CAAE+C,CAAG,CAAA,CAAC,CAAC,CAAA,CAAIA,CAAE,CAAA,MAAA,CAAS,CAAMA,EAAAA,CAAAA,CAAE,IAAKD,CAAAA,CAAC,EAChF,CACAjD,CAAKiB,EAAAA,EACP,CACA,OAAArC,CAAEkB,CAAAA,CAAAA,EAAK,CAAC,CAAA,CAAIE,CACL,CAAA,CACT,CACA,CAAA,CAAA,CAAG,CAACnC,CAAAA,CAAGC,CACLkI,IAAAA,EAAAA,CAAGxH,EAAE,QAASX,CAAAA,CAAAA,CAAGA,CAAIC,CAAAA,CAAC,CAAC,CAAA,CAChB,CAET,CAAA,CAAA,CAAA,CAAGkJ,EACH,CAAA,CAAA,CAAGC,EACH,CAAA,CAAA,CAAGC,EACH,CAAA,CAAA,CAAGC,EACH,CAAA,CAAA,CAAGC,EACH,CAAA,CAAA,CAAGC,EACH,CAAA,CAAA,CAAGC,EACH,CAAA,CAAA,CAAGC,EACH,CAAA,CAAA,CAAGC,EACH,CAAA,CAAA,CAAGC,EACH,CAAA,CAAA,CAAG,CAAC5J,CAAAA,CAAGC,CAAG+B,CAAAA,CAAAA,CAAGC,IAAMuG,EAAGxI,CAAAA,CAAAA,CAAGC,CAAG+B,CAAAA,CAAAA,CAAGC,CAAC,CAClC,CACA4H,CAAAA,CAAAA,CAAK,UAAY,CACf,SAAS7J,CAAAA,CAAEgC,CAAG,CAAA,CACZ,OAAA6H,CAAAA,CAAI7H,CAAE,CAAA,OAAA,CACNxB,EAAKqJ,CAAAA,CAAAA,CAAE,EACP3I,CAAAA,EAAAA,EACAqE,CAAAA,CAAAA,CAAIsE,CAAE,CAAA,EAAA,CACNzI,EAAG,CAAA,OAAA,CAAQyI,CAAE,CAAA,EAAE,CACftI,CAAAA,CAAAA,EAAAA,CACA3B,EAAE,sBAAyB2B,GAAAA,CAAC,CACvBA,CAAAA,CAAAA,EAAL,CAAoBuI,GAAwCtI,EAAOQ,GAAAA,CAAAA,CAAIR,EAAKA,CAAAA,EAAAA,CAAI,IAAOQ,CAAAA,CAAAA,EAChF6H,CAAAA,CAAAA,CAAAA,CACT,CACA,IAAI5J,CAAI,CAAA,CAAE,CAAG2I,CAAAA,EAAG,CAGhB,CAAA,GAFArH,CACA3B,EAAAA,CAAAA,CAAAA,CAAE,sBAAyB2B,GAAAA,CAAC,EACxB3B,CAAE,CAAA,eAAA,CACJ,GAAI,CACF,OAAOA,CAAAA,CAAE,eAAgBK,CAAAA,CAAAA,CAAGD,CAAC,CAC/B,CAASgC,MAAAA,CAAAA,CAAG,CACV1B,CAAAA,CAAE,CAAsD0B,mDAAAA,EAAAA,CAAC,CAAE,CAAA,CAAA,CAAGlC,CAAGkC,CAAAA,CAAC,EACpE,CACF,OAAAE,EAAAA,CAAGjC,CAAG,CAAA,SAAU+B,CAAG,CAAA,CACjBhC,CAAEgC,CAAAA,CAAAA,CAAE,QAAQ,EACd,CAAC,CAAE,CAAA,KAAA,CAAMlC,CAAE,CAAA,CACJ,EACT,CAAG,EAAA,CACHoJ,EAAMlJ,CAAAA,CAAAA,EAAAA,CAAOkJ,EAAKW,CAAAA,CAAAA,CAAE,EAAI7J,EAAAA,CAAC,CACzB6F,CAAAA,EAAAA,CAAM7F,CAAO6F,EAAAA,CAAAA,EAAAA,CAAKgE,CAAE,CAAA,EAAA,EAAI7J,CAAC,CAAA,CACzB8F,CAAK9F,CAAAA,CAAAA,EAAAA,CAAO8F,CAAI+D,CAAAA,CAAAA,CAAE,EAAI7J,EAAAA,CAAC,CACvB+J,CAAAA,CAAAA,CAAI,CAAC/J,CAAAA,CAAGC,KAAO8J,CAAIF,CAAAA,CAAAA,CAAE,EAAI7J,EAAAA,CAAAA,CAAGC,CAAC,CAAA,CAC7B+J,CAAKhK,CAAAA,CAAAA,EAAAA,CAAOgK,CAAIH,CAAAA,CAAAA,CAAE,EAAI7J,EAAAA,CAAC,CACvBiK,CAAAA,CAAAA,CAAI,IAAOA,CAAAA,CAAAA,CAAIJ,CAAE,CAAA,EAAA,GACnBjK,CAAAA,CAAAA,CAAE,YAAe,CAAA,CAACI,CAAGC,CAAAA,CAAAA,CAAG+B,CAAGC,CAAAA,CAAAA,CAAGE,CAAGI,CAAAA,CAAAA,GAAAA,CAAO3C,CAAE,CAAA,YAAA,CAAeiK,CAAE,CAAA,EAAA,EAAI7J,EAAGC,CAAG+B,CAAAA,CAAAA,CAAGC,CAAGE,CAAAA,CAAAA,CAAGI,CAAC,CAAA,CAC/E3C,CAAE,CAAA,YAAA,CAAe,CAACI,CAAAA,CAAGC,CAAG+B,CAAAA,CAAAA,CAAGC,CAAGE,CAAAA,CAAAA,CAAGI,CAAO3C,GAAAA,CAAAA,CAAAA,CAAE,aAAeiK,CAAE,CAAA,EAAA,EAAI7J,CAAGC,CAAAA,CAAAA,CAAG+B,CAAGC,CAAAA,CAAAA,CAAGE,CAAGI,CAAAA,CAAC,CAC/E3C,CAAAA,CAAAA,CAAE,YAAe,CAAA,CAACI,CAAGC,CAAAA,CAAAA,CAAG+B,CAAGC,CAAAA,CAAAA,GAAAA,CAAOrC,EAAE,YAAeiK,CAAAA,CAAAA,CAAE,EAAI7J,EAAAA,CAAAA,CAAGC,CAAG+B,CAAAA,CAAAA,CAAGC,CAAC,CAAA,CACnErC,CAAE,CAAA,WAAA,CAAc,CAACI,CAAAA,CAAGC,CAAG+B,CAAAA,CAAAA,GAAAA,CAAOpC,CAAE,CAAA,WAAA,CAAciK,CAAE,CAAA,EAAA,EAAI7J,CAAGC,CAAAA,CAAAA,CAAG+B,CAAC,CAAA,CAC3D,IAAIkI,EAAAA,CAAMtK,CAAE,CAAA,aAAA,CAAgB,CAACI,CAAAA,CAAGC,CAAG+B,CAAAA,CAAAA,CAAGC,CAAGE,CAAAA,CAAAA,CAAGI,KAAO2H,EAAKtK,CAAAA,CAAAA,CAAE,aAAgBiK,CAAAA,CAAAA,CAAE,EAAI7J,EAAAA,CAAAA,CAAGC,CAAG+B,CAAAA,CAAAA,CAAGC,CAAGE,CAAAA,CAAAA,CAAGI,CAAC,CAAA,CAChG3C,CAAE,CAAA,YAAA,CAAe,CAACI,CAAAA,CAAGC,CAAG+B,CAAAA,CAAAA,CAAGC,CAAGE,CAAAA,CAAAA,GAAAA,CAAOvC,CAAE,CAAA,YAAA,CAAeiK,CAAE,CAAA,EAAA,EAAI7J,CAAGC,CAAAA,CAAAA,CAAG+B,CAAGC,CAAAA,CAAAA,CAAGE,CAAC,CAAA,CACzEvC,CAAE,CAAA,cAAA,CAAiB,CAACI,CAAGC,CAAAA,CAAAA,CAAG+B,CAAGC,CAAAA,CAAAA,CAAGE,CAAGI,CAAAA,CAAAA,CAAG,CAAO3C,GAAAA,CAAAA,CAAAA,CAAE,cAAiBiK,CAAAA,CAAAA,CAAE,EAAI7J,EAAAA,CAAAA,CAAGC,CAAG+B,CAAAA,CAAAA,CAAGC,CAAGE,CAAAA,CAAAA,CAAGI,CAAG,CAAA,CAAC,CACzF3C,CAAAA,CAAAA,CAAE,cAAiB,CAAA,CAACI,CAAGC,CAAAA,CAAAA,CAAG+B,CAAGC,CAAAA,CAAAA,CAAGE,CAAGI,CAAAA,CAAAA,CAAG,CAAO3C,GAAAA,CAAAA,CAAAA,CAAE,cAAiBiK,CAAAA,CAAAA,CAAE,IAAI7J,CAAGC,CAAAA,CAAAA,CAAG+B,CAAGC,CAAAA,CAAAA,CAAGE,CAAGI,CAAAA,CAAAA,CAAG,CAAC,CAAA,CACzF3C,CAAE,CAAA,eAAA,CAAkB,CAACI,CAAAA,CAAGC,CAAG+B,CAAAA,CAAAA,CAAGC,CAAGE,CAAAA,CAAAA,CAAGI,CAAG,CAAA,CAAA,CAAGa,CAAGC,CAAAA,CAAAA,GAAAA,CAAOzD,CAAE,CAAA,eAAA,CAAkBiK,CAAE,CAAA,EAAA,EAAI7J,CAAGC,CAAAA,CAAAA,CAAG+B,CAAGC,CAAAA,CAAAA,CAAGE,CAAGI,CAAAA,CAAAA,CAAG,CAAGa,CAAAA,CAAAA,CAAGC,CAAC,CACvGzD,CAAAA,CAAAA,CAAE,gBAAmB,CAAA,CAACI,CAAGC,CAAAA,CAAAA,CAAG+B,CAAGC,CAAAA,CAAAA,CAAGE,CAAGI,CAAAA,CAAAA,CAAG,CAAGa,CAAAA,CAAAA,CAAGC,CAAG+B,CAAAA,CAAAA,GAAAA,CAAOxF,CAAE,CAAA,gBAAA,CAAmBiK,CAAE,CAAA,EAAA,EAAI7J,CAAGC,CAAAA,CAAAA,CAAG+B,CAAGC,CAAAA,CAAAA,CAAGE,CAAGI,CAAAA,CAAAA,CAAG,CAAGa,CAAAA,CAAAA,CAAGC,CAAG+B,CAAAA,CAAC,CAC/G,CAAA,SAASoE,EAAGxJ,CAAAA,CAAAA,CAAGC,EAAG,CAChB,IAAI+B,CAAIiI,CAAAA,CAAAA,EACR,CAAA,GAAI,CACF1E,CAAAA,CAAE,GAAIvF,CAAAA,CAAC,CAAEC,CAAAA,CAAC,EACZ,CAAA,MAASgC,CAAG,CAAA,CAEV,GADA+H,CAAAA,CAAEhI,CAAC,CAAA,CACCC,CAAMA,GAAAA,CAAAA,CAAI,CAAG,CAAA,MAAMA,CACvB8H,CAAAA,CAAAA,CAAE,CAAG,CAAA,CAAC,EACR,CACF,CACA,SAASN,GAAGzJ,CAAGC,CAAAA,CAAAA,CAAG+B,CAAG,CAAA,CACnB,IAAIC,CAAAA,CAAIgI,CAAE,EAAA,CACV,GAAI,CACF1E,CAAE,CAAA,GAAA,CAAIvF,CAAC,CAAA,CAAEC,CAAG+B,CAAAA,CAAC,EACf,CAAA,MAASG,CAAG,CAAA,CAEV,GADA6H,CAAAA,CAAE/H,CAAC,CAAA,CACCE,CAAMA,GAAAA,CAAAA,CAAI,CAAG,CAAA,MAAMA,CACvB4H,CAAAA,CAAAA,CAAE,CAAG,CAAA,CAAC,EACR,CACF,CACA,SAASV,EAAAA,CAAGrJ,CAAGC,CAAAA,CAAAA,CAAG+B,CAAGC,CAAAA,CAAAA,CAAG,CACtB,IAAIE,CAAI8H,CAAAA,CAAAA,EACR,CAAA,GAAI,CACF,OAAO1E,CAAE,CAAA,GAAA,CAAIvF,CAAC,CAAA,CAAEC,CAAG+B,CAAAA,CAAAA,CAAGC,CAAC,CACzB,CAASM,MAAAA,CAAAA,CAAG,CAEV,GADAyH,CAAE7H,CAAAA,CAAC,CACCI,CAAAA,CAAAA,GAAMA,EAAI,CAAG,CAAA,MAAMA,CACvBwH,CAAAA,CAAAA,CAAE,CAAG,CAAA,CAAC,EACR,CACF,CACA,SAASX,EAAGpJ,CAAAA,CAAAA,CAAGC,CAAG+B,CAAAA,CAAAA,CAAG,CACnB,IAAIC,CAAIgI,CAAAA,CAAAA,EACR,CAAA,GAAI,CACF,OAAO1E,CAAE,CAAA,GAAA,CAAIvF,CAAC,CAAA,CAAEC,CAAG+B,CAAAA,CAAC,CACtB,CAAA,MAASG,CAAG,CAAA,CAEV,GADA6H,CAAE/H,CAAAA,CAAC,CACCE,CAAAA,CAAAA,GAAMA,CAAI,CAAA,CAAA,CAAG,MAAMA,CAAAA,CACvB4H,CAAE,CAAA,CAAA,CAAG,CAAC,EACR,CACF,CACA,SAASZ,EAAAA,CAAGnJ,CAAGC,CAAAA,CAAAA,CAAG,CAChB,IAAI+B,CAAIiI,CAAAA,CAAAA,EACR,CAAA,GAAI,CACF,OAAO1E,CAAE,CAAA,GAAA,CAAIvF,CAAC,CAAA,CAAEC,CAAC,CACnB,OAASgC,CAAG,CAAA,CAEV,GADA+H,CAAAA,CAAEhI,CAAC,CAAA,CACCC,CAAMA,GAAAA,CAAAA,CAAI,CAAG,CAAA,MAAMA,CACvB8H,CAAAA,CAAAA,CAAE,CAAG,CAAA,CAAC,EACR,CACF,CACA,SAAST,EAAGtJ,CAAAA,CAAAA,CAAGC,CAAG+B,CAAAA,CAAAA,CAAGC,CAAGE,CAAAA,CAAAA,CAAGI,CAAG,CAAA,CAC5B,IAAI,CAAA,CAAI0H,CAAE,EAAA,CACV,GAAI,CACF,OAAO1E,CAAE,CAAA,GAAA,CAAIvF,CAAC,CAAA,CAAEC,CAAG+B,CAAAA,CAAAA,CAAGC,CAAGE,CAAAA,CAAAA,CAAGI,CAAC,CAC/B,CAASa,MAAAA,CAAAA,CAAG,CAEV,GADA4G,CAAE,CAAA,CAAC,CACC5G,CAAAA,CAAAA,GAAMA,CAAI,CAAA,CAAA,CAAG,MAAMA,CAAAA,CACvB2G,CAAE,CAAA,CAAA,CAAG,CAAC,EACR,CACF,CACA,SAASJ,EAAAA,CAAG3J,CAAGC,CAAAA,CAAAA,CAAG+B,EAAGC,CAAGE,CAAAA,CAAAA,CAAG,CACzB,IAAII,CAAI0H,CAAAA,CAAAA,EACR,CAAA,GAAI,CACF1E,CAAAA,CAAE,GAAIvF,CAAAA,CAAC,CAAEC,CAAAA,CAAAA,CAAG+B,CAAGC,CAAAA,CAAAA,CAAGE,CAAC,EACrB,CAAS,MAAA,CAAA,CAAG,CAEV,GADA6H,CAAEzH,CAAAA,CAAC,CACC,CAAA,CAAA,GAAM,CAAI,CAAA,CAAA,CAAG,MAAM,CAAA,CACvBwH,CAAE,CAAA,CAAA,CAAG,CAAC,EACR,CACF,CACA,SAASL,EAAG1J,CAAAA,CAAAA,CAAGC,CAAG+B,CAAAA,CAAAA,CAAGC,CAAG,CAAA,CACtB,IAAIE,CAAAA,CAAI8H,CAAE,EAAA,CACV,GAAI,CACF1E,CAAE,CAAA,GAAA,CAAIvF,CAAC,CAAA,CAAEC,CAAG+B,CAAAA,CAAAA,CAAGC,CAAC,EAClB,CAASM,MAAAA,CAAAA,CAAG,CAEV,GADAyH,CAAE7H,CAAAA,CAAC,CACCI,CAAAA,CAAAA,GAAMA,EAAI,CAAG,CAAA,MAAMA,CACvBwH,CAAAA,CAAAA,CAAE,CAAG,CAAA,CAAC,EACR,CACF,CACA,SAASR,EAAGvJ,CAAAA,CAAAA,CAAG,CACb,IAAIC,CAAIgK,CAAAA,CAAAA,EACR,CAAA,GAAI,CACF1E,CAAAA,CAAE,GAAIvF,CAAAA,CAAC,CAAE,GACX,CAASgC,MAAAA,CAAAA,CAAG,CAEV,GADAgI,CAAE/J,CAAAA,CAAC,CACC+B,CAAAA,CAAAA,GAAMA,EAAI,CAAG,CAAA,MAAMA,CACvB+H,CAAAA,CAAAA,CAAE,CAAG,CAAA,CAAC,EACR,CACF,CACA,SAASH,EAAG5J,CAAAA,CAAAA,CAAGC,CAAG+B,CAAAA,CAAAA,CAAGC,CAAGE,CAAAA,CAAAA,CAAGI,EAAG,CAC5B,IAAI,CAAI0H,CAAAA,CAAAA,EACR,CAAA,GAAI,CACFC,EAAAA,CAAGlK,CAAGC,CAAAA,CAAAA,CAAG+B,CAAGC,CAAAA,CAAAA,CAAGE,CAAGI,CAAAA,CAAC,EACrB,CAAA,MAASa,EAAG,CAEV,GADA4G,CAAE,CAAA,CAAC,CACC5G,CAAAA,CAAAA,GAAMA,CAAI,CAAA,CAAA,CAAG,MAAMA,CAAAA,CACvB2G,CAAE,CAAA,CAAA,CAAG,CAAC,EACR,CACF,CACA,IAAII,EAAAA,CACJ3I,EAAI,CAAA,SAAS4I,CAAK,EAAA,CAChBD,EAAME,EAAAA,EAAAA,EACNF,CAAAA,EAAAA,GAAO3I,EAAI4I,CAAAA,CAAAA,EACb,CACA,CAAA,SAASC,EAAK,EAAA,CACZ,SAASrK,CAAI,EAAA,CACX,GAAI,CAACmK,EAAQA,GAAAA,EAAAA,CAAK,CAAMvK,CAAAA,CAAAA,CAAAA,CAAE,SAAY,CAAA,CAAA,CAAA,CAAK,CAACa,EAAAA,CAAAA,CAAK,CAI/C,GAHA2B,EAAGhB,CAAAA,EAAE,CACLvB,CAAAA,CAAAA,CAAGD,CAAC,CAAA,CACAA,CAAE,CAAA,oBAAA,EAAsBA,CAAE,CAAA,oBAAA,EAC1BA,CAAAA,CAAAA,CAAE,OACJ,CAAA,IAAmB,OAAOA,CAAAA,CAAE,OAAvB,EAAA,UAAA,GAAmCA,EAAE,OAAU,CAAA,CAACA,CAAE,CAAA,OAAO,CAAIA,CAAAA,CAAAA,CAAAA,CAAE,OAAQ,CAAA,MAAA,EAAU,CACpF,IAAIK,CAAIL,CAAAA,CAAAA,CAAE,OAAQ,CAAA,KAAA,EAClByB,CAAAA,EAAAA,CAAG,OAAQpB,CAAAA,CAAC,EACd,CACFmC,EAAGf,CAAAA,EAAE,EACP,CACF,CACA,GAAI,EAAE,CAAA,CAAIE,CAAI,CAAA,CAAA,CACZ,GAAI3B,CAAAA,CAAE,OAAQ,IAAmB,OAAOA,CAAE,CAAA,MAAA,EAAvB,UAAkCA,GAAAA,CAAAA,CAAE,MAAS,CAAA,CAACA,CAAE,CAAA,MAAM,CAAIA,CAAAA,CAAAA,CAAAA,CAAE,MAAO,CAAA,MAAA,EAAU0B,EAAG,EAAA,CACnGc,EAAGjB,CAAAA,EAAE,CACL,CAAA,CAAA,CAAII,CACD3B,GAAAA,CAAAA,CAAE,SACEA,EAAAA,CAAAA,CAAE,SAAU,CAAA,YAAY,CACzB,CAAA,UAAA,CAAW,UAAY,CACrB,UAAW,CAAA,UAAY,CACrBA,CAAE,CAAA,SAAA,CAAU,EAAE,EAChB,CAAG,CAAA,CAAC,CACJI,CAAAA,CAAAA,GACF,CAAA,CAAG,CAAC,CAAA,EACJA,CAAE,EAAA,EACV,CACF,CACA,GAAIJ,CAAAA,CAAE,OACJ,CAAA,IAAmB,OAAOA,CAAAA,CAAE,OAAvB,EAAA,UAAA,GAAmCA,CAAE,CAAA,OAAA,CAAU,CAACA,CAAAA,CAAE,OAAO,CAAA,CAAA,CAAI,CAAIA,CAAAA,CAAAA,CAAE,QAAQ,MAAUA,EAAAA,CAAAA,CAAE,OAAQ,CAAA,GAAA,EAAM,EAAA,CAC5G,OAAAyK,EAAAA,EAEOtK,CAAAA,CACT,CACF,CAAA,GACOuK,CAAAA,EAAAA,CAAQ7K,ECnqDR,CAAA,IAAM8K,CAAN,CAAA,KAA0B,CAOvB,WAAA,EAAc,CACpB,MAAM,IAAI,KAAA,CAAM,8DAA8D,CAChF,CAEA,aAAqB,QAASC,CAAAA,CAAAA,CAAkC,CAG9D,OAFe,MAAMF,EAA4B,CAAA,CAAE,UAAY,CAAA,IAAME,CAAI,CAAC,CAG5E,CAOA,aAAqB,eAAA,EAAuC,CAC1D,OAAK,IAAK,CAAA,cAAA,GACR,IAAK,CAAA,cAAA,CAAiB,IAAK,CAAA,QAAA,CAAS,IAAK,CAAA,QAAQ,CAAE,CAAA,KAAA,CAAM,MAAOC,CAAAA,EAAsC,CACpG,IAAMC,CAAY,CAAA,CAAA,kBAAA,EAAqBlL,EAAY,CAAA,CAAA,EAAID,EAAe,CAAA,2BAAA,CAAA,CAEtE,QAAQ,IAAK,CAAA,CAAA,8BAAA,EAAiC,IAAK,CAAA,QAAQ,CAAakL,SAAAA,EAAAA,CAAAA,CAAuB,OAAO,CAAA,CAAE,CACxG,CAAA,OAAA,CAAQ,IAAK,CAAA,CAAA,yCAAA,EAA4CC,CAAS,CAAA,CAAE,CAEpE,CAAA,GAAI,CACF,OAAO,MAAM,IAAA,CAAK,QAASA,CAAAA,CAAS,CACtC,CAAA,MAASC,CAAa,CAAA,CACpB,MAAQ,OAAA,CAAA,KAAA,CAAM,CAA6BF,yBAAAA,EAAAA,CAAAA,CAAuB,OAAO,CAAA,CAAE,EAC3E,OAAQ,CAAA,KAAA,CAAM,CAA4BE,wBAAAA,EAAAA,CAAAA,CAAsB,OAAO,CAAA,CAAE,CACnE,CAAA,IAAI,KAAM,CAAA,uCAAuC,CACzD,CACF,CAAC,CAAA,CAAA,CAGI,IAAK,CAAA,cACd,CAOA,aAAoB,IAA4B,EAAA,CAC9C,OAAO,IAAA,CAAK,eAAgB,EAC9B,CAOA,OAAc,UAAWH,CAAAA,CAAAA,CAAmB,CAC1C,IAAA,CAAK,QAAWA,CAAAA,CAAAA,CAEhB,KAAK,cAAiB,CAAA,KACxB,CACF,CAAA,CA5DEvL,CAFWsL,CAAAA,CAAAA,CAEI,gBAA6C,CAAA,IAAA,CAAA,CAG5DtL,CALWsL,CAAAA,CAAAA,CAKI,UAAW,CAAA,CAAA,6BAAA,EAAgC/K,EAAY,CAAA,CAAA,EAAID,EAAe,CAAA,2BAAA,CAAA,CAAA,CC4JpF,IAAMqL,EAAAA,CAAN,KAAmB,CAAnB,WACL3L,EAAAA,CAAAA,CAAAA,CAAA,IAAiB,CAAA,iBAAA,CAAiE,IAAI,GAAA,EAAA,CAE/E,gBAAsC4L,CAAAA,CAAAA,CAASC,CAAkC,CAAA,CACtF,IAAIC,CAAAA,CAAY,KAAK,eAAgB,CAAA,GAAA,CAAIF,CAAI,CAAA,CAExCE,CACHA,GAAAA,CAAAA,CAAY,IAAI,GAAA,CAChB,IAAK,CAAA,eAAA,CAAgB,GAAIF,CAAAA,CAAAA,CAAME,CAAS,CAAA,CAAA,CAG1CA,CAAU,CAAA,GAAA,CAAID,CAAQ,EACxB,CAEO,mBAAA,CAAyCD,CAASC,CAAAA,CAAAA,CAAmC,CAC1F,IAAMC,CAAY,CAAA,IAAA,CAAK,eAAgB,CAAA,GAAA,CAAIF,CAAI,CAAA,CAE1CE,CAEDD,GAAAA,CAAAA,EACFC,EAAU,MAAOD,CAAAA,CAAQ,CAErBC,CAAAA,CAAAA,CAAU,IAAS,GAAA,CAAA,EACrB,IAAK,CAAA,eAAA,CAAgB,MAAOF,CAAAA,CAAI,CAGlC,EAAA,IAAA,CAAK,eAAgB,CAAA,MAAA,CAAOA,CAAI,CAAA,EAEpC,CAEO,QAAA,CAA8BG,CAA6B,CAAA,CAC9C,IAAK,CAAA,eAAA,CAAgB,GAAIA,CAAAA,CAAAA,CAAM,IAAI,CAAA,EAE1C,OAASF,CAAAA,CAAAA,EAAaA,CAASE,CAAAA,CAAK,CAAC,EAClD,CAEO,uBAAgC,EAAA,CACrC,IAAK,CAAA,eAAA,CAAgB,KAAM,GAC7B,CACF,CAAA,CC5MO,SAASC,EAAAA,CAAWC,CAAwB,CAAA,CACjD,OAAO,8BAAA,CAA+B,IAAKA,CAAAA,CAAK,CAClD,CAEO,SAASC,EAAAA,CAAmBC,CAA0B,CAAA,CAC3D,GAAI,CAACH,EAAWG,CAAAA,CAAQ,CACtB,CAAA,OAGF,CAAA,CAAA,IAAIC,CAAMD,CAAAA,CAAAA,CAAS,QAAQ,GAAK,CAAA,EAAE,CAGlC,CAAA,OAAAC,CAAMA,CAAAA,CAAAA,CAAI,MAAW,GAAA,CAAA,CAAI,CAAGA,EAAAA,CAAG,CAAOA,EAAAA,CAAAA,CAAAA,CAAAA,CAE/B,QAASA,CAAAA,CAAAA,CAAK,EAAE,CACzB,CAEO,SAASC,EAAYC,CAAAA,CAAAA,CAAgC,CAC1D,GAAIA,CAAS,CAAA,UAAA,CAAa,CACxB,CAAA,OAAO,CAGT,CAAA,CAAA,IAAMC,CAAgB,CAAA,IAAI,UAAWD,CAAAA,CAAAA,CAAS,MAAM,CAAGlM,CAAAA,EAAAA,CAAc,UAAU,CAAC,CAEhF,CAAA,IAAA,IAAS,CAAI,CAAA,CAAA,CAAG,CAAIA,CAAAA,EAAAA,CAAc,MAAQ,CAAA,CAAA,EAAK,CAC7C,CAAA,GAAIA,EAAc,CAAA,CAAC,CAAMmM,GAAAA,CAAAA,CAAc,CAAC,CAAA,CACtC,OAAO,CAAA,CAAA,CAIX,OAAO,CAAA,CACT,CAKO,SAASC,EAAaC,CAAAA,CAAAA,CAAwC,CACnE,OAAOpM,EAA6B,CAAA,KAAA,CAAOqM,GAAU,MAAO,CAAA,SAAA,CAAU,cAAe,CAAA,IAAA,CAAKD,CAAMC,CAAAA,CAAK,CAAC,CACxG,CAEO,SAASC,EAASL,CAAAA,CAAAA,CAAqD,CAC5E,GAAI,OAAOA,CAAAA,EAAa,SACtB,GAAI,CACF,OAAOE,EAAAA,CAAa,IAAK,CAAA,KAAA,CAAMF,CAAQ,CAAC,CAC1C,CAAA,KAAa,CACX,OAAO,CACT,CAAA,CAAA,KAEOE,OAAAA,EAAAA,CAAaF,CAAQ,CAEhC,CC3CA,IAAMM,EAAAA,CAAiB,CAACC,CAAAA,CAAYC,CAC9BD,GAAAA,CAAAA,GAAS,SACJC,CAAAA,CAAAA,CAAO,IAAK,CAAA,OAAA,CACVD,CAAS,GAAA,QAAA,CACXC,CAAO,CAAA,IAAA,CAAK,MACVD,CAAAA,CAAAA,GAAS,gBACXC,CAAAA,CAAAA,CAAO,IAAK,CAAA,aAAA,CAEZA,CAAO,CAAA,IAAA,CAAK,OAIjBC,CAAAA,EAAAA,CAAgB,CAACC,CAAAA,CAAUF,CAC3BE,GAAAA,CAAAA,GAAQ,SACHF,CAAAA,CAAAA,CAAO,IAAI,OACTE,CAAAA,CAAAA,GAAQ,OACVF,CAAAA,CAAAA,CAAO,GAAI,CAAA,KAAA,CACTE,CAAQ,GAAA,MAAA,CACVF,CAAO,CAAA,GAAA,CAAI,IACTE,CAAAA,CAAAA,GAAQ,YACVF,CAAAA,CAAAA,CAAO,GAAI,CAAA,SAAA,CACTE,CAAQ,GAAA,WAAA,CACVF,CAAO,CAAA,GAAA,CAAI,QAEXA,CAAAA,CAAAA,CAAO,GAAI,CAAA,IAAA,CAIhBG,EAAkB,CAAA,CAACC,CAAyBJ,CAAAA,CAAAA,GAAoC,CACpF,IAAMK,CAAY,CAAA,IAAIL,EAAO,WAE7B,CAAA,OAAAK,CAAU,CAAA,SAAA,CAAUD,CAAM,CAAA,CAAC,CAAC,CAAA,CAC5BC,CAAU,CAAA,SAAA,CAAUD,CAAM,CAAA,CAAC,CAAC,CAAA,CAErBC,CACT,CAAA,CAEMC,EAAoB,CAAA,CAACC,CAAmBP,CAAAA,CAAAA,GAAoC,CAChF,IAAMQ,CAAc,CAAA,IAAIR,CAAO,CAAA,WAAA,CAE/B,OAAIO,CAAAA,CAAQ,MAAW,GAAA,CAAA,GAEvBC,CAAY,CAAA,SAAA,CAAUD,EAAQ,CAAC,CAAW,CAC1CC,CAAAA,CAAAA,CAAY,SAAUD,CAAAA,CAAAA,CAAQ,CAAC,CAAW,CAEnCC,CAAAA,CAAAA,CACT,CAEaC,CAAAA,CAAAA,CAAN,MAAMA,CAAU,CAiCd,WAAA,CAAYC,CAAgB,CAAA,CAhCnCxN,CAAA,CAAA,IAAA,CAAiB,SAEjBA,CAAAA,CAAAA,CAAAA,CAAA,IAAQ,CAAA,UAAA,CAAgF,IAExFA,CAAAA,CAAAA,CAAAA,CAAA,IAAiB,CAAA,eAAA,CAAA,CAEjBA,CAAA,CAAA,IAAA,CAAQ,mBAAmC,CAAA,IAAA,CAAA,CAE3CA,EAAA,IAAiB,CAAA,eAAA,CAAA,CAEjBA,CAAA,CAAA,IAAA,CAAQ,gBAAyC,CAAA,IAAA,CAAA,CAIjDA,CAAA,CAAA,IAAA,CAAQ,eAA8B,CAAA,EAEtCA,CAAAA,CAAAA,CAAAA,CAAA,IAAQ,CAAA,WAAA,CAAqB,CAE7BA,CAAAA,CAAAA,CAAAA,CAAAA,CAAA,IAAQ,CAAA,kBAAA,CAAkC,IAE1CA,CAAAA,CAAAA,CAAAA,CAAA,IAAiB,CAAA,kBAAA,CAAA,CAEjBA,CAAA,CAAA,IAAA,CAAiB,oBAEjBA,CAAAA,CAAAA,CAAAA,CAAA,IAAiB,CAAA,oBAAA,CAAA,CAEjBA,CAAA,CAAA,IAAA,CAAiB,qBAEjBA,CAAAA,CAAAA,CAAAA,CAAA,KAAiB,oBAEjBA,CAAAA,CAAAA,CAAAA,CAAA,IAAiB,CAAA,mBAAA,CAAA,CAGf,IAAK,CAAA,OAAA,CAAUwN,CAAO,CAAA,MAAA,CACtB,IAAK,CAAA,QAAA,CAAW,IAAK,CAAA,OAAA,CAAQ,UAAW,CAAA,IAAI,CAE5C,CAAA,IAAA,CAAK,aAAgB,CAAA,IAAI7B,EACzB,CAAA,IAAA,CAAK,aAAgB,CAAA,IAAIzL,EACzB,CAAA,IAAA,CAAK,aAAgBsN,CAAAA,CAAAA,CAAO,YAAgB,EAAA,EAE5ClC,CAAAA,CAAAA,CAAoB,IAAK,EAAA,CACtB,KAAMwB,CAAW,EAAA,CAChBS,CAAU,CAAA,WAAA,CAAcT,CAExB,CAAA,IAAA,CAAK,cAAiB,CAAA,IAAIA,CAAO,CAAA,eAAA,CAAgB,CAC/C,QAAA,CAAUU,CAAO,CAAA,QAAA,EAAY,CAC7B,CAAA,CAAA,eAAA,CAAiB,CACjB,CAAA,aAAA,CAAeA,CAAO,CAAA,IAAA,EAAQ,CAC9B,CAAA,CAAA,IAAA,CAAMZ,EAAeY,CAAAA,CAAAA,CAAO,IAAQ,EAAA,SAAA,CAAWV,CAAM,CAAA,CACrD,OAASM,CAAAA,EAAAA,CAAkBI,CAAO,CAAA,OAAA,EAAW,EAAIV,CAAAA,CAAM,CACvD,CAAA,KAAA,CAAOU,CAAO,CAAA,KAAA,EAAS,CACvB,CAAA,qBAAA,CAAuBA,CAAO,CAAA,qBAAA,EAAyB,CACvD,CAAA,CAAA,MAAA,CAAQA,CAAO,CAAA,MAAA,EAAU,EACzB,CAAA,MAAA,CAAQA,CAAO,CAAA,MAAA,CACX,CACE,KAAA,CAAOP,EAAgBO,CAAAA,CAAAA,CAAO,MAAO,CAAA,KAAA,CAAOV,CAAM,CAAA,CAClD,GAAKC,CAAAA,EAAAA,CAAcS,CAAO,CAAA,MAAA,CAAO,GAAKV,CAAAA,CAAM,CAC9C,CACAA,CAAAA,CAAAA,CAAO,mBAAoB,EACjC,CAAC,CAAA,CAED,IAAK,CAAA,aAAA,CAAc,QAAS,CAAA,CAAE,IAAM,CAAA,OAAQ,CAAC,CAAA,CAEzCU,CAAO,CAAA,IAAA,CACT,IAAK,CAAA,aAAA,CAAcA,CAAO,CAAA,IAAI,CACrBA,CAAAA,CAAAA,CAAO,GAChB,EAAA,IAAA,CAAK,YAAaA,CAAAA,CAAAA,CAAO,GAAG,CAAA,CAG1BA,CAAO,CAAA,eAAA,EACT,IAAK,CAAA,kBAAA,CAAmBA,EAAO,eAAe,EAElD,CAAC,CAAA,CACA,KAAOC,CAAAA,CAAAA,EAAU,CAChB,IAAA,CAAK,aAAc,CAAA,QAAA,CAAS,CAC1B,IAAA,CAAM,WACN,CAAA,KAAA,CAAO,IAAI,KAAA,CAAM,CAA+BA,4BAAAA,EAAAA,CAAK,CAAE,CAAA,CACzD,CAAC,EACH,CAAC,CAAA,CAEH,IAAK,CAAA,gBAAA,CAAmB,IAAK,CAAA,YAAA,CAAa,IAAK,CAAA,IAAI,CAEnD,CAAA,IAAA,CAAK,mBAAqB,IAAK,CAAA,cAAA,CAAe,IAAK,CAAA,IAAI,CAEvD,CAAA,IAAA,CAAK,kBAAqB,CAAA,IAAA,CAAK,cAAe,CAAA,IAAA,CAAK,IAAI,CAAA,CAEvD,IAAK,CAAA,mBAAA,CAAsB,IAAK,CAAA,eAAA,CAAgB,IAAK,CAAA,IAAI,CAEzD,CAAA,IAAA,CAAK,kBAAqB,CAAA,IAAA,CAAK,eAAgB,CAAA,IAAA,CAAK,IAAI,CAAA,CAExD,IAAK,CAAA,iBAAA,CAAoB,IAAK,CAAA,WAAA,CAAY,IAAK,CAAA,IAAI,EACrD,CAEQ,cAAA,CAAeC,CAAuB,CAAA,CAC5C,OAAQ,CAAA,KAAA,CAAMA,CAAO,CAAA,CACrB,IAAK,CAAA,aAAA,CAAc,QAAS,CAAA,CAAE,IAAM,CAAA,WAAA,CAAa,KAAO,CAAA,IAAI,KAAMA,CAAAA,CAAO,CAAE,CAAC,EAC9E,CAEA,MAAc,UAAA,CAAWC,CAA4C,CAAA,CACnE,IAAMC,CAAAA,CAAW,MAAM,KAAA,CAAMD,CAAG,CAAA,CAEhC,GAAI,CAACC,CAAAA,CAAS,EACZ,CAAA,MAAM,IAAI,KAAA,CAAM,CAA4CD,yCAAAA,EAAAA,CAAG,CAAKC,EAAAA,EAAAA,CAAAA,CAAS,MAAM,CAAA,EAAA,EAAKA,CAAS,CAAA,UAAU,CAAE,CAAA,CAAA,CAG/G,IAAMC,CAAAA,CAAO,MAAMD,CAAAA,CAAS,WAAY,EAAA,CAExC,OAAIvB,EAAAA,CAAYwB,CAAI,CAAA,CACXA,CAIF,CAAA,IAAI,WAAY,EAAA,CAAE,MAAOA,CAAAA,CAAI,CACtC,CAEQ,aAAA,CAAcA,CAAkB,CAAA,CACtC,GAAI,IAAA,CAAK,cAAmB,GAAA,IAAA,CAAM,OAElC,IAAMC,CAAQ,CAAA,IAAA,CAAK,OAAQ,CAAA,KAAA,CACrBC,CAAS,CAAA,IAAA,CAAK,OAAQ,CAAA,MAAA,CAExBC,CAAS,CAAA,CAAA,CAAA,CAEb,GAAI,OAAOH,CAAS,EAAA,QAAA,CAAU,CAC5B,GAAI,CAAClB,EAAAA,CAASkB,CAAI,CAAA,CAAG,CACnB,IAAA,CAAK,eACH,6FACF,CAAA,CAEA,MACF,CACAG,CAAS,CAAA,IAAA,CAAK,cAAe,CAAA,iBAAA,CAAkBH,CAAMC,CAAAA,CAAAA,CAAOC,CAAM,EACpE,CAAWF,KAAAA,GAAAA,CAAAA,YAAgB,WAAa,CAAA,CACtC,GAAI,CAACxB,EAAYwB,CAAAA,CAAI,CAAG,CAAA,CACtB,IAAK,CAAA,cAAA,CACH,mGACF,CAAA,CAEA,MACF,CACAG,CAAS,CAAA,IAAA,CAAK,cAAe,CAAA,iBAAA,CAAkBH,EAAMC,CAAOC,CAAAA,CAAM,EACpE,CAAA,KAAA,GAAW,OAAOF,CAAAA,EAAS,QAAU,CAAA,CACnC,GAAI,CAAClB,EAASkB,CAAAA,CAA+B,CAAG,CAAA,CAC9C,IAAK,CAAA,cAAA,CACH,6FACF,CAEA,CAAA,MACF,CACAG,CAAAA,CAAS,IAAK,CAAA,cAAA,CAAe,iBAAkB,CAAA,IAAA,CAAK,SAAUH,CAAAA,CAAI,CAAGC,CAAAA,CAAAA,CAAOC,CAAM,EACpF,CAAO,KAAA,CACL,KAAK,cACH,CAAA,CAAA;AAAA;AAAA;AAAA;AAAA,oBAIc,EAAA,OAAOF,CAAI,CAAA,CAC3B,CAEA,CAAA,MACF,CAEIG,CAAAA,EACF,IAAK,CAAA,aAAA,CAAc,QAAS,CAAA,CAAE,IAAM,CAAA,MAAO,CAAC,CAAA,CAExC7N,CACF,EAAA,IAAA,CAAK,MAAO,EAAA,CAGd,IAAK,CAAA,aAAA,CAAc,QAAS,CAAA,CAC1B,IAAM,CAAA,OAAA,CACN,YAAc,CAAA,IAAA,CAAK,cAAe,CAAA,YAAA,EACpC,CAAC,CAAA,CAED,IAAK,CAAA,OAAA,EAED,CAAA,IAAA,CAAK,cAAe,CAAA,MAAA,EAAS,CAAA,QAAA,GAC/B,IAAK,CAAA,cAAA,CAAe,IAAK,EAAA,CACrB,IAAK,CAAA,cAAA,CAAe,SAAU,EAAA,EAChC,IAAK,CAAA,aAAA,CAAc,QAAS,CAAA,CAAE,IAAM,CAAA,MAAO,CAAC,CAAA,CAC5C,IAAK,CAAA,iBAAA,CAAoB,IAAK,CAAA,aAAA,CAAc,sBAAsB,IAAK,CAAA,KAAA,CAAM,IAAK,CAAA,IAAI,CAAC,CAAA,EAEvF,OAAQ,CAAA,KAAA,CAAM,6DAA6D,CAAA,CAAA,EAI/E,IAAK,CAAA,cAAA,CAAe,+BAA+B,EAEvD,CAEQ,YAAA,CAAawN,CAAmB,CAAA,CACtC,IAAK,CAAA,UAAA,CAAWA,CAAG,CAAA,CAChB,IAAME,CAAAA,CAAAA,EAAS,IAAK,CAAA,aAAA,CAAcA,CAAI,CAAC,CACvC,CAAA,KAAA,CAAOJ,GAAU,IAAK,CAAA,cAAA,CAAe,CAA2CE,wCAAAA,EAAAA,CAAG,CAAKF,EAAAA,EAAAA,CAAK,CAAE,CAAA,CAAC,EACrG,CAEA,IAAW,iBAAA,EAAwC,CACjD,OAAO,IAAK,CAAA,cAAA,EAAgB,iBAAkB,EAChD,CAEA,IAAW,aAAoC,EAAA,CAC7C,OAAO,IAAA,CAAK,cAAgB,EAAA,aAAA,EAC9B,CAEA,IAAW,MAAA,EAA6B,CACtC,IAAMQ,CAAAA,CAAS,IAAK,CAAA,cAAA,EAAgB,MAAO,EAAA,CAAE,MAE7C,CAAA,GAAIA,CACF,CAAA,OAAO,CACL,KAAA,CAAO,CAACA,CAAAA,CAAO,KAAM,CAAA,GAAA,CAAI,CAAC,CAAA,CAAaA,CAAO,CAAA,KAAA,CAAM,GAAI,CAAA,CAAC,CAAW,CAAA,CACpE,GAAM,CAAA,CAAA,IAAW,CACf,OAAQA,CAAO,CAAA,GAAA,EACb,KAAKV,CAAAA,CAAU,WAAa,EAAA,GAAA,CAAI,OAC9B,CAAA,OAAO,SAET,CAAA,KAAKA,CAAU,CAAA,WAAA,EAAa,GAAI,CAAA,KAAA,CAC9B,OAAO,OAAA,CAET,KAAKA,CAAAA,CAAU,WAAa,EAAA,GAAA,CAAI,IAC9B,CAAA,OAAO,MAET,CAAA,KAAKA,CAAU,CAAA,WAAA,EAAa,GAAI,CAAA,SAAA,CAC9B,OAAO,YAAA,CAET,KAAKA,CAAAA,CAAU,aAAa,GAAI,CAAA,QAAA,CAC9B,OAAO,WAAA,CAET,KAAKA,CAAAA,CAAU,WAAa,EAAA,GAAA,CAAI,IAC9B,CAAA,OAAO,MAET,CAAA,QACE,OAAO,SACX,CACF,CAAA,GACF,CAIJ,CAEA,IAAW,MAA6B,EAAA,CAGtC,OAFe,IAAA,CAAK,cAAgB,EAAA,MAAA,EAAS,CAAA,MAG/C,CAEA,IAAW,UAA4B,CACrC,GAAI,CACF,IAAMW,CAAW,CAAA,IAAA,CAAK,cAAgB,EAAA,cAAA,EAEtC,CAAA,GAAI,IAAK,CAAA,cAAA,GAAmB,IAAQ,EAAA,CAACA,CAAU,CAAA,OAAO,IAEtD,CAAA,IAAMC,CAAe,CAAA,IAAA,CAAK,KAAMD,CAAAA,CAAQ,CAExC,CAAA,OAAI,MAAO,CAAA,IAAA,CAAKC,CAAY,CAAA,CAAE,MAAW,GAAA,CAAA,CAAU,KAE5CA,CACT,CAAA,KAAe,CACb,OAAO,IACT,CACF,CAEA,IAAW,YAA6B,EAAA,CACtC,OAAO,IAAA,CAAK,aACd,CAEA,IAAW,OAAA,EAAwC,CACjD,IAAMd,CAAU,CAAA,IAAA,CAAK,cAAgB,EAAA,MAAA,EAAS,CAAA,OAAA,CAE9C,GAAIA,CAAAA,EAAWA,CAAQ,CAAA,IAAA,EAAW,GAAA,CAAA,CAChC,OAAO,CAACA,CAAAA,CAAQ,GAAI,CAAA,CAAC,CAAaA,CAAAA,CAAAA,CAAQ,GAAI,CAAA,CAAC,CAAW,CAI9D,CAEA,IAAW,IAAgB,EAAA,CACzB,OAAO,IAAA,CAAK,cAAgB,EAAA,MAAA,EAAS,CAAA,aAAA,EAAiB,CACxD,CAAA,CAEA,IAAW,IAAA,EAAa,CACtB,IAAMR,CAAO,CAAA,IAAA,CAAK,cAAgB,EAAA,MAAA,GAAS,IAE3C,CAAA,OAAIA,CAASU,GAAAA,CAAAA,CAAU,WAAa,EAAA,IAAA,CAAK,OAChC,CAAA,SAAA,CACEV,CAASU,GAAAA,CAAAA,CAAU,WAAa,EAAA,IAAA,CAAK,MACvC,CAAA,QAAA,CACEV,CAASU,GAAAA,CAAAA,CAAU,WAAa,EAAA,IAAA,CAAK,aACvC,CAAA,gBAAA,CAEA,SAEX,CAEA,IAAW,QAAA,EAAoB,CAC7B,OAAO,IAAK,CAAA,SACd,CAEA,IAAW,iBAA0B,CACnC,OAAO,IAAK,CAAA,gBAAA,EAAoB,EAClC,CAEA,IAAW,QAAA,EAAoB,CAC7B,OAAO,IAAK,CAAA,cAAA,EAAgB,MAAO,EAAA,CAAE,QAAY,EAAA,CAAA,CACnD,CAEA,IAAW,qBAAiC,EAAA,CAC1C,OAAO,IAAA,CAAK,cAAgB,EAAA,MAAA,EAAS,CAAA,qBAAA,EAAyB,CAChE,CAAA,CAEA,IAAW,KAAA,EAAgB,CACzB,OAAO,IAAA,CAAK,cAAgB,EAAA,MAAA,EAAS,CAAA,KAAA,EAAS,CAChD,CAEA,IAAW,OAAA,EAAmB,CAC5B,OAAO,IAAK,CAAA,cAAA,GAAmB,IACjC,CAEA,IAAW,QAAA,EAAoB,CAC7B,OAAO,IAAK,CAAA,cAAA,EAAgB,QAAS,EAAA,EAAK,CAC5C,CAAA,CAEA,IAAW,SAAA,EAAqB,CAC9B,OAAO,KAAK,cAAgB,EAAA,SAAA,EAAe,EAAA,CAAA,CAC7C,CAEA,IAAW,QAAoB,EAAA,CAC7B,OAAO,IAAA,CAAK,cAAgB,EAAA,QAAA,EAAc,EAAA,CAAA,CAC5C,CAEA,IAAW,SAAqB,EAAA,CAC9B,OAAO,IAAA,CAAK,cAAgB,EAAA,SAAA,EAAe,EAAA,CAAA,CAC7C,CAEA,IAAW,YAAuB,EAAA,CAChC,OAAO,IAAA,CAAK,gBAAgB,YAAa,EAAA,EAAK,CAChD,CAEA,IAAW,SAAA,EAAoB,CAC7B,OAAO,IAAK,CAAA,cAAA,EAAgB,SAAU,EAAA,EAAK,CAC7C,CAEA,IAAW,WAAA,EAAsB,CAC/B,OAAO,IAAK,CAAA,cAAA,EAAgB,WAAY,EAAA,EAAK,CAC/C,CAEA,IAAW,QAAA,EAAmB,CAC5B,OAAO,IAAK,CAAA,cAAA,EAAgB,QAAS,EAAA,EAAK,CAC5C,CAEA,IAAW,eAAA,EAA0B,CACnC,OAAO,IAAK,CAAA,cAAA,EAAgB,eAAgB,EAAA,EAAK,CACnD,CAEA,IAAW,MAAA,EAA8C,CACvD,OAAO,IAAK,CAAA,OACd,CAEO,IAAA,CAAKC,CAAsC,CAAA,CAC5C,IAAK,CAAA,cAAA,GAAmB,IAAQD,EAAAA,CAAAA,CAAU,WAAgB,GAAA,IAAA,GAE9D,IAAK,CAAA,cAAA,CAAe,UAAU,CAC5B,QAAA,CAAUC,CAAO,CAAA,QAAA,EAAY,CAC7B,CAAA,CAAA,eAAA,CAAiB,CACjB,CAAA,aAAA,CAAeA,CAAO,CAAA,IAAA,EAAQ,CAC9B,CAAA,CAAA,IAAA,CAAMZ,EAAeY,CAAAA,CAAAA,CAAO,IAAQ,EAAA,SAAA,CAAWD,CAAU,CAAA,WAAW,CACpE,CAAA,OAAA,CAASH,EAAkBI,CAAAA,CAAAA,CAAO,OAAW,EAAA,EAAID,CAAAA,CAAAA,CAAU,WAAW,CAAA,CACtE,KAAOC,CAAAA,CAAAA,CAAO,OAAS,CACvB,CAAA,qBAAA,CAAuBA,CAAO,CAAA,qBAAA,EAAyB,CACvD,CAAA,CAAA,MAAA,CAAQA,CAAO,CAAA,MAAA,EAAU,EACzB,CAAA,MAAA,CAAQA,CAAO,CAAA,MAAA,CACX,CACE,KAAA,CAAOP,EAAgBO,CAAAA,CAAAA,CAAO,MAAO,CAAA,KAAA,CAAOD,CAAU,CAAA,WAAW,CACjE,CAAA,GAAA,CAAKR,EAAcS,CAAAA,CAAAA,CAAO,MAAO,CAAA,GAAA,CAAKD,CAAU,CAAA,WAAW,CAC7D,CAAA,CACAA,EAAU,WAAY,CAAA,mBAAA,EAC5B,CAAC,CAEGC,CAAAA,CAAAA,CAAO,IACT,CAAA,IAAA,CAAK,aAAcA,CAAAA,CAAAA,CAAO,IAAI,CAAA,CACrBA,CAAO,CAAA,GAAA,EAChB,IAAK,CAAA,YAAA,CAAaA,CAAO,CAAA,GAAG,CAG9B,CAAA,IAAA,CAAK,kBAAmBA,CAAAA,CAAAA,CAAO,eAAmB,EAAA,EAAE,CACtD,EAAA,CAEQ,OAAmB,EAAA,CACzB,GAAI,IAAA,CAAK,iBAAmB,IAAQ,EAAA,IAAA,CAAK,QAAa,GAAA,IAAA,CAAM,OAAO,CAAA,CAAA,CAInE,GAFiB,IAAA,CAAK,cAAe,CAAA,MAAA,EAEvB,CAAA,CACZ,IAAMY,CAAAA,CAAS,IAAK,CAAA,cAAA,CAAe,MAAO,EAAA,CACpCC,CAAgB,CAAA,IAAI,iBAAkBD,CAAAA,CAAAA,CAAQ,CAAG,CAAA,IAAA,CAAK,OAAQ,CAAA,KAAA,CAAQ,IAAK,CAAA,OAAA,CAAQ,MAAS,CAAA,CAAC,EAE/FE,CAAY,CAAA,IAAA,CAMhB,OAAI,OAAO,SAAc,CAAA,GAAA,EACvBA,CAAY,CAAA,IAAA,CAAK,QAAS,CAAA,eAAA,CAAgB,IAAK,CAAA,OAAA,CAAQ,KAAO,CAAA,IAAA,CAAK,OAAQ,CAAA,MAAM,CACjFA,CAAAA,CAAAA,CAAU,IAAK,CAAA,GAAA,CAAID,CAAa,CAAA,EAEhCC,CAAY,CAAA,IAAI,SAAUD,CAAAA,CAAAA,CAAe,IAAK,CAAA,OAAA,CAAQ,KAAO,CAAA,IAAA,CAAK,QAAQ,MAAM,CAAA,CAGlF,IAAK,CAAA,QAAA,CAAS,YAAaC,CAAAA,CAAAA,CAAW,CAAG,CAAA,CAAC,CAE1C,CAAA,IAAA,CAAK,aAAc,CAAA,QAAA,CAAS,CAC1B,IAAA,CAAM,QACN,CAAA,YAAA,CAAc,IAAK,CAAA,cAAA,CAAe,YAAa,EACjD,CAAC,CAAA,CAEM,CACT,CAAA,CAEA,OAAO,CAAA,CACT,CAEQ,KAAA,EAAc,CACpB,GAAI,KAAK,cAAmB,GAAA,IAAA,EAAQ,IAAK,CAAA,QAAA,GAAa,IAAQ,EAAA,CAAC,IAAK,CAAA,cAAA,CAAe,SAAU,EAAA,CAAG,OAEhG,IAAMC,CAAY,CAAA,IAAA,CAAK,cAAe,CAAA,YAAA,EAEtB,CAAA,IAAA,CAAK,cAAe,CAAA,QAAA,CAASA,CAAS,CAAA,GAGpD,IAAK,CAAA,aAAA,CAAc,QAAS,CAAA,CAC1B,IAAM,CAAA,OAAA,CACN,YAAc,CAAA,IAAA,CAAK,eAAe,YAAa,EACjD,CAAC,CAAA,CAEgB,IAAK,CAAA,OAAA,EAIhB,EAAA,IAAA,CAAK,cAAe,CAAA,UAAA,EAClB,GAAA,IAAA,CAAK,cAAe,CAAA,MAAA,EAAS,CAAA,aAAA,CAC/B,IAAK,CAAA,aAAA,CAAc,QAAS,CAAA,CAC1B,IAAM,CAAA,MAAA,CACN,SAAW,CAAA,IAAA,CAAK,cAAe,CAAA,SAAA,EACjC,CAAC,CAED,CAAA,IAAA,CAAK,cAAc,QAAS,CAAA,CAAE,IAAM,CAAA,UAAW,CAAC,CAAA,CAAA,CAAA,CAMxD,IAAK,CAAA,iBAAA,CAAoB,IAAK,CAAA,aAAA,CAAc,qBAAsB,CAAA,IAAA,CAAK,KAAM,CAAA,IAAA,CAAK,IAAI,CAAC,EACzF,CAEO,IAAa,EAAA,CAClB,GAAI,IAAA,CAAK,cAAmB,GAAA,IAAA,CAAM,OAEvB,CAAA,IAAA,CAAK,cAAe,CAAA,IAAA,EAErB,EAAA,IAAA,CAAK,eAAe,SAAU,EAAA,IACtC,IAAK,CAAA,SAAA,CAAY,CACjB,CAAA,CAAA,IAAA,CAAK,aAAc,CAAA,QAAA,CAAS,CAAE,IAAA,CAAM,MAAO,CAAC,CAC5C,CAAA,IAAA,CAAK,iBAAoB,CAAA,IAAA,CAAK,aAAc,CAAA,qBAAA,CAAsB,IAAK,CAAA,KAAA,CAAM,IAAK,CAAA,IAAI,CAAC,CAAA,EAE3F,CAEO,KAAA,EAAc,CACnB,GAAI,IAAK,CAAA,cAAA,GAAmB,KAAM,OAEvB,CAAA,IAAA,CAAK,cAAe,CAAA,KAAA,EAErB,EAAA,IAAA,CAAK,cAAe,CAAA,QAAA,EAC5B,GAAA,IAAA,CAAK,aAAc,CAAA,QAAA,CAAS,CAAE,IAAA,CAAM,OAAQ,CAAC,EAEjD,CAEO,IAAa,EAAA,CAClB,GAAI,IAAA,CAAK,cAAmB,GAAA,IAAA,CAAM,OAEvB,IAAA,CAAK,cAAe,CAAA,IAAA,EAG7B,GAAA,IAAA,CAAK,cAAc,QAAS,CAAA,CAAE,IAAM,CAAA,OAAA,CAAS,YAAc,CAAA,IAAA,CAAK,cAAe,CAAA,YAAA,EAAe,CAAC,CAE/F,CAAA,IAAA,CAAK,OAAQ,EAAA,CAEb,IAAK,CAAA,aAAA,CAAc,QAAS,CAAA,CAAE,IAAM,CAAA,MAAO,CAAC,CAAA,EAEhD,CAEO,QAAA,CAASC,CAAqB,CAAA,CAGnC,GAFI,IAAA,CAAK,cAAmB,GAAA,IAAA,EAExBA,EAAQ,CAAKA,EAAAA,CAAAA,CAAQ,IAAK,CAAA,cAAA,CAAe,WAAY,EAAA,CAAG,OAEjD,IAAA,CAAK,cAAe,CAAA,IAAA,CAAKA,CAAK,CAAA,GAGvC,IAAK,CAAA,aAAA,CAAc,QAAS,CAAA,CAAE,IAAM,CAAA,OAAA,CAAS,YAAc,CAAA,IAAA,CAAK,cAAe,CAAA,YAAA,EAAe,CAAC,CAE/F,CAAA,IAAA,CAAK,OAAQ,EAAA,EAEjB,CAEO,QAAA,CAASC,EAAqB,CAC/B,IAAA,CAAK,cAAmB,GAAA,IAAA,EAE5B,IAAK,CAAA,cAAA,CAAe,SAAU,CAAA,CAC5B,GAAG,IAAA,CAAK,cAAe,CAAA,MAAA,EACvB,CAAA,KAAA,CAAAA,CACF,CAAC,EACH,CAEO,kBAAmBxC,CAAAA,CAAAA,CAAqB,CACzC,IAAA,CAAK,cAAmB,GAAA,IAAA,GAExB9L,CAAc,EAAA,IAAA,CAAK,OAAmB,YAAA,iBAAA,CACxC,IAAK,CAAA,OAAA,CAAQ,MAAM,eAAkB8L,CAAAA,CAAAA,CAErC,IAAK,CAAA,cAAA,CAAe,SAAU,CAAA,CAC5B,GAAG,IAAA,CAAK,cAAe,CAAA,MAAA,EACvB,CAAA,eAAA,CAAiBC,EAAmBD,CAAAA,CAAK,CAC3C,CAAC,CAGH,CAAA,IAAA,CAAK,gBAAmBA,CAAAA,CAAAA,EAC1B,CAEO,OAAA,CAAQyC,CAAqB,CAAA,CAC9B,IAAK,CAAA,cAAA,GAAmB,IAE5B,EAAA,IAAA,CAAK,cAAe,CAAA,SAAA,CAAU,CAC5B,GAAG,IAAK,CAAA,cAAA,CAAe,MAAO,EAAA,CAC9B,aAAeA,CAAAA,CACjB,CAAC,EACH,CAEO,wBAAA,CAAyBC,CAAsC,CAAA,CAChE,IAAK,CAAA,cAAA,GAAmB,IAE5B,EAAA,IAAA,CAAK,cAAe,CAAA,SAAA,CAAU,CAC5B,GAAG,IAAK,CAAA,cAAA,CAAe,MAAO,EAAA,CAC9B,qBAAAA,CAAAA,CACF,CAAC,EACH,CAEO,gBAAA,CAAsC/C,EAASC,CAAkC,CAAA,CACtF,IAAK,CAAA,aAAA,CAAc,gBAAiBD,CAAAA,CAAAA,CAAMC,CAAQ,EACpD,CAEO,mBAAA,CAAyCD,CAASC,CAAAA,CAAAA,CAAmC,CAC1F,IAAA,CAAK,aAAc,CAAA,mBAAA,CAAoBD,CAAMC,CAAAA,CAAQ,EACvD,CAEO,OAAgB,EAAA,CACrB,IAAK,CAAA,cAAA,EAAgB,MAAO,EAAA,CAC5B,IAAK,CAAA,cAAA,CAAiB,IACtB,CAAA,IAAA,CAAK,SAAW,IAEhB,CAAA,IAAA,CAAK,aAAc,CAAA,QAAA,CAAS,CAC1B,IAAA,CAAM,SACR,CAAC,CAED,CAAA,IAAA,CAAK,aAAc,CAAA,uBAAA,EACnB,CAAA,IAAA,CAAK,6BAA8B,GACrC,CAEO,MAAA,EAAe,CAChB,IAAA,CAAK,iBAAsB,GAAA,IAAA,GAE/B,IAAK,CAAA,aAAA,CAAc,oBAAqB,CAAA,IAAA,CAAK,iBAAiB,CAAA,CAC9D,IAAK,CAAA,iBAAA,CAAoB,KAEzB,IAAK,CAAA,SAAA,CAAY,CAEjB,CAAA,CAAA,IAAA,CAAK,aAAc,CAAA,QAAA,CAAS,CAAE,IAAA,CAAM,QAAS,CAAC,CAChD,EAAA,CAEO,QAAiB,EAAA,CAClB,IAAK,CAAA,iBAAA,GAAsB,IAE/B,GAAA,IAAA,CAAK,iBAAoB,CAAA,IAAA,CAAK,aAAc,CAAA,qBAAA,CAAsB,IAAK,CAAA,KAAA,CAAM,IAAK,CAAA,IAAI,CAAC,CAAA,CAEvF,IAAK,CAAA,SAAA,CAAY,GAEjB,IAAK,CAAA,aAAA,CAAc,QAAS,CAAA,CAAE,IAAM,CAAA,UAAW,CAAC,CAAA,EAClD,CAEO,MAAA,EAAe,CACpB,GAAI1L,CAAc,EAAA,IAAA,CAAK,OAAmB,YAAA,iBAAA,CAAmB,CAC3D,IAAMyO,CAAM,CAAA,IAAA,CAAK,aAAc,CAAA,gBAAA,EAAoB,MAAO,CAAA,gBAAA,EAAoB,CAExE,CAAA,CAAE,MAAQC,CAAAA,CAAAA,CAAc,KAAOC,CAAAA,CAAY,EAAI,IAAK,CAAA,OAAA,CAAQ,qBAAsB,EAAA,CAExF,IAAK,CAAA,OAAA,CAAQ,KAAQA,CAAAA,CAAAA,CAAcF,CACnC,CAAA,IAAA,CAAK,OAAQ,CAAA,MAAA,CAASC,CAAeD,CAAAA,EACvC,CAEW,IAAA,CAAK,cAAgB,EAAA,MAAA,CAAO,IAAK,CAAA,OAAA,CAAQ,KAAO,CAAA,IAAA,CAAK,OAAQ,CAAA,MAAM,CAG5E,EAAA,IAAA,CAAK,OAAQ,GAEjB,CAEO,UAAA,CAAWG,EAAoBC,CAAwB,CAAA,CACxD,IAAK,CAAA,cAAA,GAAmB,IAAQzB,EAAAA,CAAAA,CAAU,WAAgB,GAAA,IAAA,EAE9D,IAAK,CAAA,cAAA,CAAe,SAAU,CAAA,CAC5B,GAAG,IAAA,CAAK,cAAe,CAAA,MAAA,EACvB,CAAA,OAAA,CAASH,EAAkB,CAAA,CAAC2B,CAAYC,CAAAA,CAAQ,CAAGzB,CAAAA,CAAAA,CAAU,WAAW,CAC1E,CAAC,EACH,CAEO,OAAA,CAAQV,EAAkB,CAC3B,IAAA,CAAK,cAAmB,GAAA,IAAA,EAAQU,CAAU,CAAA,WAAA,GAAgB,IAE9D,EAAA,IAAA,CAAK,cAAe,CAAA,SAAA,CAAU,CAC5B,GAAG,IAAK,CAAA,cAAA,CAAe,MAAO,EAAA,CAC9B,IAAMX,CAAAA,EAAAA,CAAeC,CAAMU,CAAAA,CAAAA,CAAU,WAAW,CAClD,CAAC,EACH,CAEO,eAAA,CAAgBC,CAA4B,CAAA,CACjD,IAAK,CAAA,aAAA,CAAgBA,EACvB,CAEO,aAAA,CAAcyB,CAA2B,CAAA,CAC9C,GAAI,IAAA,CAAK,cAAmB,GAAA,IAAA,EAAQ,IAAK,CAAA,cAAA,CAAe,iBAAkB,EAAA,GAAMA,CAAa,CAAA,OAE9E,IAAK,CAAA,cAAA,CAAe,aAAcA,CAAAA,CAAAA,CAAa,IAAK,CAAA,OAAA,CAAQ,KAAO,CAAA,IAAA,CAAK,OAAQ,CAAA,MAAM,CAGnG,EAAA,IAAA,CAAK,aAAc,CAAA,QAAA,CAAS,CAAE,IAAA,CAAM,MAAO,CAAC,CAAA,CAC5C,IAAK,CAAA,MAAA,EAEL,EAAA,IAAA,CAAK,aAAc,CAAA,QAAA,CAAS,CAC1B,IAAA,CAAM,WACN,CAAA,KAAA,CAAO,IAAI,KAAA,CAAM,CAAwBA,qBAAAA,EAAAA,CAAW,CAAE,CAAA,CACxD,CAAC,EAEL,CAEO,SAAA,CAAUC,CAAsB,CAAA,CACjC,IAAK,CAAA,cAAA,GAAmB,IAE5B,EAAA,IAAA,CAAK,cAAe,CAAA,SAAA,CAAU,CAC5B,GAAG,IAAA,CAAK,cAAe,CAAA,MAAA,EACvB,CAAA,MAAA,CAAAA,CACF,CAAC,EACH,CAEO,OAAoB,EAAA,CACzB,IAAMC,CAAAA,CAAU,IAAK,CAAA,cAAA,EAAgB,OAAQ,EAAA,CAE7C,GAAIA,CAAAA,CAAS,CACX,IAAMC,CAAmB,CAAA,EAEzB,CAAA,IAAA,IAASC,CAAI,CAAA,CAAA,CAAGA,CAAIF,CAAAA,CAAAA,CAAQ,MAAQE,CAAAA,CAAAA,EAAK,CAAG,CAAA,CAC1C,IAAMH,CAAAA,CAASC,CAAQ,CAAA,GAAA,CAAIE,CAAC,CAAA,CAE5BD,CAAO,CAAA,IAAA,CAAK,CACV,IAAA,CAAMF,CAAO,CAAA,IAAA,CACb,IAAMA,CAAAA,CAAAA,CAAO,IACb,CAAA,QAAA,CAAUA,CAAO,CAAA,QACnB,CAAC,EACH,CAEA,OAAOE,CACT,CAEA,OAAO,EACT,CAEO,SAAA,CAAUE,CAA0B,CAAA,CACzC,GAAI,IAAA,CAAK,cAAmB,GAAA,IAAA,CAAM,OAAO,CAAA,CAAA,CAEzC,IAAMtB,CAAAA,CAAS,IAAK,CAAA,cAAA,CAAe,SAAUsB,CAAAA,CAAO,CAEpD,CAAA,OAAA,IAAA,CAAK,OAAQ,EAAA,CAENtB,CACT,CAEO,aAAcuB,CAAAA,CAAAA,CAA4B,CAC/C,GAAI,IAAK,CAAA,cAAA,GAAmB,IAAM,CAAA,OAAO,GAEzC,IAAMvB,CAAAA,CAAS,IAAK,CAAA,cAAA,CAAe,aAAcuB,CAAAA,CAAS,CAE1D,CAAA,OAAA,IAAA,CAAK,OAAQ,EAAA,CAENvB,CACT,CAEO,SAAUC,CAAAA,CAAAA,CAAsB,CACjC,IAAA,CAAK,cAAmB,GAAA,IAAA,EAAQV,CAAU,CAAA,WAAA,GAAgB,IAE9D,EAAA,IAAA,CAAK,cAAe,CAAA,SAAA,CAAU,CAC5B,GAAG,IAAK,CAAA,cAAA,CAAe,MAAO,EAAA,CAC9B,OAAQ,CACN,KAAA,CAAON,EAAgBgB,CAAAA,CAAAA,CAAO,KAAOV,CAAAA,CAAAA,CAAU,WAAW,CAAA,CAC1D,GAAKR,CAAAA,EAAAA,CAAckB,CAAO,CAAA,GAAA,CAAKV,CAAU,CAAA,WAAW,CACtD,CACF,CAAC,EACH,CAEO,WAAA,CAAYjM,CAAWG,CAAAA,CAAAA,CAAWqM,CAAeC,CAAAA,CAAAA,CAAyB,CAC/E,OAAI,IAAK,CAAA,cAAA,GAAmB,IAAa,CAAA,CAAA,CAAA,CAElC,KAAK,cAAe,CAAA,WAAA,CAAYzM,CAAGG,CAAAA,CAAAA,CAAGqM,CAAOC,CAAAA,CAAM,CAC5D,CAEA,OAAc,UAAA,CAAWxC,CAAmB,CAAA,CAC1CD,CAAoB,CAAA,UAAA,CAAWC,CAAG,EACpC,CAEO,gBAAA,CAAiBiE,CAAiC,CAAA,CACvD,OAAO,IAAA,CAAK,cAAgB,EAAA,gBAAA,CAAiBA,CAAc,CAAA,EAAK,CAClE,CAAA,CAEO,iBAA6B,EAAA,CAClC,IAAMC,CAAAA,CAAU,IAAK,CAAA,cAAA,EAAgB,iBAAkB,EAAA,EAAK,CAE5D,CAAA,CAAA,OAAIA,CACF,EAAA,IAAA,CAAK,2BAA4B,EAAA,CAG5BA,CACT,CAEO,gBAA4B,EAAA,CACjC,IAAMC,CAAAA,CAAU,IAAK,CAAA,cAAA,EAAgB,gBAAiB,EAAA,EAAK,CAE3D,CAAA,CAAA,OAAIA,CACF,EAAA,IAAA,CAAK,6BAA8B,EAAA,CAG9BA,CACT,CAEQ,mBAAoB3D,CAAAA,CAAAA,CAA+C,CACzE,IAAM4D,CAAAA,CAAQ,IAAK,CAAA,OAAA,CAA8B,qBAAsB,EAAA,CACjEC,CAAS,CAAA,IAAA,CAAK,OAAQ,CAAA,KAAA,CAAQD,CAAK,CAAA,KAAA,CACnCE,CAAS,CAAA,IAAA,CAAK,OAAQ,CAAA,MAAA,CAASF,CAAK,CAAA,MAAA,CAEpCG,CAAmB,CAAA,IAAA,CAAK,aAAc,CAAA,gBAAA,EAAoB,MAAO,CAAA,gBAAA,EAAoB,CACrFxO,CAAAA,CAAAA,CAAAA,CAAMyK,CAAM,CAAA,OAAA,CAAU4D,CAAK,CAAA,IAAA,EAAQC,EAAUE,CAC7CrO,CAAAA,CAAAA,CAAAA,CAAMsK,CAAM,CAAA,OAAA,CAAU4D,CAAK,CAAA,GAAA,EAAOE,CAAUC,CAAAA,CAAAA,CAElD,OAAO,CACL,CAAAxO,CAAAA,CAAAA,CACA,CAAAG,CAAAA,CACF,CACF,CAEQ,YAAasK,CAAAA,CAAAA,CAA2B,CAC9C,GAAM,CAAE,CAAA,CAAAzK,CAAG,CAAA,CAAA,CAAAG,CAAE,CAAA,CAAI,IAAK,CAAA,mBAAA,CAAoBsK,CAAK,CAAA,CAE/C,KAAK,qBAAsB,CAAA,CAAA,aAAA,EAAgBzK,CAAC,CAAA,CAAA,EAAIG,CAAC,CAAA,CAAE,EACrD,CAEQ,cAAesK,CAAAA,CAAAA,CAA2B,CAChD,GAAM,CAAE,CAAA,CAAAzK,CAAG,CAAA,CAAA,CAAAG,CAAE,CAAA,CAAI,IAAK,CAAA,mBAAA,CAAoBsK,CAAK,CAAA,CAE/C,IAAK,CAAA,qBAAA,CAAsB,CAAkBzK,eAAAA,EAAAA,CAAC,CAAIG,CAAAA,EAAAA,CAAC,CAAE,CAAA,EACvD,CAEQ,cAAesK,CAAAA,CAAAA,CAA2B,CAChD,GAAM,CAAE,CAAA,CAAAzK,CAAG,CAAA,CAAA,CAAAG,CAAE,CAAA,CAAI,IAAK,CAAA,mBAAA,CAAoBsK,CAAK,CAAA,CAE/C,IAAK,CAAA,qBAAA,CAAsB,CAAkBzK,eAAAA,EAAAA,CAAC,CAAIG,CAAAA,EAAAA,CAAC,CAAE,CAAA,EACvD,CAEQ,eAAA,CAAgBsK,CAA2B,CAAA,CACjD,GAAM,CAAE,CAAAzK,CAAAA,CAAAA,CAAG,EAAAG,CAAE,CAAA,CAAI,IAAK,CAAA,mBAAA,CAAoBsK,CAAK,CAAA,CAE/C,IAAK,CAAA,qBAAA,CAAsB,CAAmBzK,gBAAAA,EAAAA,CAAC,CAAIG,CAAAA,EAAAA,CAAC,CAAE,CAAA,EACxD,CAEQ,eAAA,CAAgBsK,CAA2B,CAAA,CACjD,GAAM,CAAE,CAAAzK,CAAAA,CAAAA,CAAG,CAAAG,CAAAA,CAAE,CAAI,CAAA,IAAA,CAAK,mBAAoBsK,CAAAA,CAAK,CAE/C,CAAA,IAAA,CAAK,sBAAsB,CAAkBzK,eAAAA,EAAAA,CAAC,CAAIG,CAAAA,EAAAA,CAAC,CAAE,CAAA,EACvD,CAEQ,WAAA,EAAoB,CAC1B,IAAA,CAAK,qBAAsB,CAAA,YAAY,EACzC,CAOO,qBAAsBsK,CAAAA,CAAAA,CAAuB,CAClD,IAAMgE,CAAK,CAAA,IAAA,CAAK,cAAgB,EAAA,gBAAA,CAAiBhE,CAAK,CAAA,EAAK,CAE3D,CAAA,OAAIgE,CAAO,GAAA,CAAA,CACT,IAAK,CAAA,IAAA,GACIA,CAAO,GAAA,CAAA,CAChB,IAAK,CAAA,KAAA,EACIA,CAAAA,CAAAA,GAAO,CAChB,EAAA,IAAA,CAAK,OAAQ,EAAA,CAGRA,CACT,CAEO,wBAAqC,EAAA,CAC1C,GAAI,CAAC,IAAK,CAAA,cAAA,CAAgB,OAAO,EAEjC,CAAA,IAAMC,CAAkB,CAAA,IAAA,CAAK,cAAe,CAAA,0BAAA,EAEtClE,CAAAA,CAAAA,CAAY,EAAC,CAEnB,IAASuD,IAAAA,CAAAA,CAAI,CAAGA,CAAAA,CAAAA,CAAIW,CAAgB,CAAA,IAAA,EAAQX,CAAAA,CAAAA,EAAK,CAC/CvD,CAAAA,CAAAA,CAAU,IAAKkE,CAAAA,CAAAA,CAAgB,GAAIX,CAAAA,CAAC,CAAW,CAAA,CAGjD,OAAOvD,CACT,CAEQ,2BAAA,EAAoC,CAC1C,GAAI3L,CAAc,EAAA,IAAA,CAAK,OAAmB,YAAA,iBAAA,EAAqB,IAAK,CAAA,cAAA,GAAmB,IAAQ,EAAA,IAAA,CAAK,QAAU,CAAA,CAC5G,IAAM2L,CAAY,CAAA,IAAA,CAAK,wBAAyB,EAAA,CAE5CA,CAAU,CAAA,QAAA,CAAS,WAAW,CAAA,EAChC,IAAK,CAAA,OAAA,CAAQ,gBAAiB,CAAA,WAAA,CAAa,IAAK,CAAA,gBAAgB,CAG9DA,CAAAA,CAAAA,CAAU,QAAS,CAAA,aAAa,CAClC,EAAA,IAAA,CAAK,OAAQ,CAAA,gBAAA,CAAiB,aAAe,CAAA,IAAA,CAAK,kBAAkB,CAAA,CAGlEA,CAAU,CAAA,QAAA,CAAS,aAAa,CAAA,EAClC,KAAK,OAAQ,CAAA,gBAAA,CAAiB,aAAe,CAAA,IAAA,CAAK,kBAAkB,CAAA,CAGlEA,CAAU,CAAA,QAAA,CAAS,cAAc,CAAA,EACnC,IAAK,CAAA,OAAA,CAAQ,gBAAiB,CAAA,cAAA,CAAgB,IAAK,CAAA,mBAAmB,CAGpEA,CAAAA,CAAAA,CAAU,QAAS,CAAA,aAAa,CAClC,EAAA,IAAA,CAAK,OAAQ,CAAA,gBAAA,CAAiB,cAAgB,CAAA,IAAA,CAAK,kBAAkB,CAAA,CAGnEA,CAAU,CAAA,QAAA,CAAS,UAAU,CAC/B,EAAA,IAAA,CAAK,gBAAiB,CAAA,UAAA,CAAY,IAAK,CAAA,iBAAiB,EAE5D,CACF,CAEQ,6BAAA,EAAsC,CACxC3L,CAAAA,EAAc,IAAK,CAAA,OAAA,YAAmB,iBACxC,GAAA,IAAA,CAAK,OAAQ,CAAA,mBAAA,CAAoB,WAAa,CAAA,IAAA,CAAK,gBAAgB,CAAA,CACnE,IAAK,CAAA,OAAA,CAAQ,mBAAoB,CAAA,aAAA,CAAe,IAAK,CAAA,kBAAkB,CACvE,CAAA,IAAA,CAAK,QAAQ,mBAAoB,CAAA,aAAA,CAAe,IAAK,CAAA,kBAAkB,CACvE,CAAA,IAAA,CAAK,OAAQ,CAAA,mBAAA,CAAoB,cAAgB,CAAA,IAAA,CAAK,mBAAmB,CAAA,CACzE,IAAK,CAAA,OAAA,CAAQ,mBAAoB,CAAA,cAAA,CAAgB,IAAK,CAAA,kBAAkB,CACxE,CAAA,IAAA,CAAK,mBAAoB,CAAA,UAAA,CAAY,IAAK,CAAA,iBAAiB,CAE/D,EAAA,CAEO,oBAAqB8P,CAAAA,CAAAA,CAAmC,CAC7D,OAAO,KAAK,cAAgB,EAAA,oBAAA,CAAqBA,CAAgB,CAAA,EAAK,CACxE,CAAA,CAEO,aAAmD,EAAA,CACxD,IAAMnC,CAAAA,CAAQ,IAAK,CAAA,cAAA,EAAgB,aAAc,EAAA,CAAE,GAAI,CAAA,CAAC,CAAK,EAAA,CAAA,CACvDC,CAAS,CAAA,IAAA,CAAK,cAAgB,EAAA,aAAA,EAAgB,CAAA,GAAA,CAAI,CAAC,CAAA,EAAK,CAE9D,CAAA,OAAO,CACL,KAAA,CAAAD,EACA,MAAAC,CAAAA,CACF,CACF,CAEO,6BAA8BmC,CAAAA,CAAAA,CAAcC,CAAyB,CAAA,CAC1E,OAAO,IAAA,CAAK,cAAgB,EAAA,6BAAA,CAA8BD,CAAMC,CAAAA,CAAK,CAAK,EAAA,CAAA,CAC5E,CAEO,6BAAA,CAA8BD,CAAcC,CAAAA,CAAAA,CAAwB,CACzE,OAAO,IAAK,CAAA,cAAA,EAAgB,6BAA8BD,CAAAA,CAAAA,CAAMC,CAAK,CAAA,EAAK,CAC5E,CAAA,CAEO,6BAA6BD,CAAcC,CAAAA,CAAAA,CAAwB,CACxE,OAAO,IAAK,CAAA,cAAA,EAAgB,4BAA6BD,CAAAA,CAAAA,CAAMC,CAAK,CAAA,EAAK,CAC3E,CAAA,CACF,CA72BEnQ,CAAAA,CAAAA,CAbWuN,CAaI,CAAA,aAAA,CAAiC,IAb3C,CAAA,CAAA,IAAM6C,EAAN7C,CAAAA,ECvDK,IAAqB8C,EAAAA,CAArB,KAAmC,CACjC,WAAc,EAAA,CACZ,GAAI,OAAO,MAAW,CAAA,GAAA,CACpB,MAAM,IAAI,KAAM,CAAA,8CAA8C,CAEhE,CAAA,OAAO,IAAI,MAAA,CAAO,ioiIAAmoiI,CAAA,CACnpiI,IAAM,CAAA,SACR,CAAC,CACH,CACF,CAAA,CCPL,IAAMC,EAAAA,CAAN,KAAoB,CAApB,WACLtQ,EAAAA,CAAAA,CAAAA,CAAA,IAAiB,CAAA,UAAA,CAAW,IAAI,GAAA,CAAA,CAEhCA,CAAA,CAAA,IAAA,CAAiB,qBAAsB,CAAA,IAAI,GAEpC,EAAA,CAAA,SAAA,CAAUuQ,EAA0B,CACzC,OAAK,IAAK,CAAA,QAAA,CAAS,GAAIA,CAAAA,CAAQ,CAC7B,EAAA,IAAA,CAAK,QAAS,CAAA,GAAA,CAAIA,CAAU,CAAA,IAAIF,EAAoB,CAAA,CAG/C,IAAK,CAAA,QAAA,CAAS,GAAIE,CAAAA,CAAQ,CACnC,CAEO,uBAAwBtB,CAAAA,CAAAA,CAAqBsB,CAAwB,CAAA,CAC1E,IAAK,CAAA,mBAAA,CAAoB,GAAItB,CAAAA,CAAAA,CAAasB,CAAQ,EACpD,CAEO,2BAA4BtB,CAAAA,CAAAA,CAA2B,CAC5D,IAAA,CAAK,mBAAoB,CAAA,MAAA,CAAOA,CAAW,EAC7C,CAEO,WAAA,CAAYsB,CAAkB7C,CAAAA,CAAAA,CAA4C8C,CAAiC,CAAA,CAChH,IAAK,CAAA,SAAA,CAAUD,CAAQ,CAAA,CAAE,WAAY7C,CAAAA,CAAAA,CAAS8C,CAAY,EAAA,EAAE,EAC9D,CAEO,eAAA,CAAgBD,CAAwB,CAAA,CAC7C,IAAME,CAAAA,CAAS,KAAK,QAAS,CAAA,GAAA,CAAIF,CAAQ,CAAA,CAErCE,CACFA,GAAAA,CAAAA,CAAO,SAAU,EAAA,CACjB,IAAK,CAAA,QAAA,CAAS,MAAOF,CAAAA,CAAQ,CAEjC,EAAA,CACF,CC5BA,CAAA,SAASG,EAAcC,CAAAA,CAAAA,CAAgF,CACrG,GAAIA,CAAkB,YAAA,eAAA,CACpB,OAAO,CAAE,KAAOA,CAAAA,CAAAA,CAAO,KAAO,CAAA,MAAA,CAAQA,CAAO,CAAA,MAAO,EAGtD,GAAM,CAAE,MAAA5C,CAAAA,CAAAA,CAAQ,KAAAD,CAAAA,CAAM,CAAI6C,CAAAA,CAAAA,CAAO,qBAAsB,EAAA,CAEvD,OAAO,CAAE,KAAO7C,CAAAA,CAAAA,CAAQ,MAAO,CAAA,gBAAA,CAAkB,MAAQC,CAAAA,CAAAA,CAAS,MAAO,CAAA,gBAAiB,CAC5F,CAEA,SAAS6C,EAAAA,EAA2B,CAClC,OAAO,IAAK,CAAA,GAAA,EAAM,CAAA,QAAA,CAAS,EAAE,CAAI,CAAA,IAAA,CAAK,MAAO,EAAA,CAAE,QAAS,CAAA,EAAE,CAAE,CAAA,MAAA,CAAO,CAAG,CAAA,CAAC,CACzE,CA6BO,IAAMC,CAAAA,CAAN,MAAMA,CAAgB,CAwDpB,WAAA,CAAYrD,CAAwC,CAAA,CArD3DxN,CAAA,CAAA,IAAA,CAAiB,eAAgB,CAAA,IAAI2L,EAErC3L,CAAAA,CAAAA,CAAAA,CAAA,IAAiB,CAAA,KAAA,CAAA,CAEjBA,CAAA,CAAA,IAAA,CAAiB,WAEjBA,CAAA,CAAA,IAAA,CAAiB,SAEjBA,CAAAA,CAAAA,CAAAA,CAAA,IAAQ,CAAA,yBAAA,CAAkD,CACxD,OAAA,CAAS,EAAC,CACV,QAAU,CAAA,CAAA,CAAA,CACV,eAAiB,CAAA,EAAA,CACjB,YAAc,CAAA,CAAA,CACd,QAAU,CAAA,CAAA,CACV,IAAM,CAAA,CAAA,CAAA,CACN,IAAM,CAAA,SAAA,CACN,OAAS,CAAA,CAAC,CAAG,CAAA,CAAC,CACd,CAAA,eAAA,CAAiB,CACjB,CAAA,KAAA,CAAO,EACP,WAAa,CAAA,CAAA,CACb,QAAU,CAAA,CAAA,CAAA,CACV,SAAW,CAAA,CAAA,CAAA,CACX,QAAU,CAAA,CAAA,CAAA,CACV,SAAW,CAAA,CAAA,CAAA,CACX,QAAU,CAAA,CAAA,CAAA,CACV,qBAAuB,CAAA,CAAA,CAAA,CACvB,YAAc,CAAA,CACZ,gBAAkB,CAAA,MAAA,CAAO,gBAC3B,CAAA,CACA,iBAAmB,CAAA,EAAA,CACnB,aAAe,CAAA,EAAA,CACf,MAAQ,CAAA,KAAA,CAAA,CACR,MAAQ,CAAA,KAAA,CAAA,CACR,OAAS,CAAA,CAAA,CAAA,CACT,SAAU,IACZ,CAAA,CAAA,CAIAA,CAAA,CAAA,IAAA,CAAQ,UAAoB,CAAA,CAAA,CAAA,CAAA,CAE5BA,CAAA,CAAA,IAAA,CAAiB,kBAEjBA,CAAAA,CAAAA,CAAAA,CAAA,IAAiB,CAAA,oBAAA,CAAA,CAEjBA,CAAA,CAAA,IAAA,CAAiB,oBAEjBA,CAAAA,CAAAA,CAAAA,CAAA,IAAiB,CAAA,qBAAA,CAAA,CAEjBA,CAAA,CAAA,IAAA,CAAiB,oBAEjBA,CAAAA,CAAAA,CAAAA,CAAA,IAAiB,CAAA,mBAAA,CAAA,CAGf,IAAK,CAAA,OAAA,CAAUwN,CAAO,CAAA,MAAA,CAEtB,IAAK,CAAA,GAAA,CAAM,aAAaoD,EAAiB,EAAC,CAC1C,CAAA,CAAA,IAAML,CAAW/C,CAAAA,CAAAA,CAAO,QAAY,EAAA,eAAA,CAGpC,IAAK,CAAA,OAAA,CAAUqD,CAAgB,CAAA,cAAA,CAAe,SAAUN,CAAAA,CAAQ,CAEhEM,CAAAA,CAAAA,CAAgB,cAAe,CAAA,uBAAA,CAAwB,IAAK,CAAA,GAAA,CAAKN,CAAQ,CAAA,CAErEM,CAAgB,CAAA,QAAA,EAClB,IAAK,CAAA,YAAA,CAAa,YAAc,CAAA,CAAE,GAAKA,CAAAA,CAAAA,CAAgB,QAAS,CAAC,CAAA,CAGnE,IAAK,CAAA,OAAA,CAAQrD,CAAM,CAAA,CAGnB,IAAK,CAAA,OAAA,CAAQ,gBAAiB,CAAA,SAAA,CAAW,IAAK,CAAA,kBAAA,CAAmB,IAAK,CAAA,IAAI,CAAC,CAAA,CAE3E,IAAK,CAAA,gBAAA,CAAmB,IAAK,CAAA,YAAA,CAAa,IAAK,CAAA,IAAI,CAEnD,CAAA,IAAA,CAAK,kBAAqB,CAAA,IAAA,CAAK,cAAe,CAAA,IAAA,CAAK,IAAI,CAAA,CAEvD,KAAK,kBAAqB,CAAA,IAAA,CAAK,cAAe,CAAA,IAAA,CAAK,IAAI,CAAA,CAEvD,IAAK,CAAA,mBAAA,CAAsB,IAAK,CAAA,eAAA,CAAgB,IAAK,CAAA,IAAI,CAEzD,CAAA,IAAA,CAAK,kBAAqB,CAAA,IAAA,CAAK,eAAgB,CAAA,IAAA,CAAK,IAAI,CAAA,CAExD,IAAK,CAAA,iBAAA,CAAoB,IAAK,CAAA,WAAA,CAAY,IAAK,CAAA,IAAI,EACrD,CAEA,MAAc,kBAAA,CAAmBzB,EAAoC,CACnE,IAAM+E,CAaF/E,CAAAA,CAAAA,CAAM,IAEL+E,CAAAA,CAAAA,CAAY,EACXA,GAAAA,CAAAA,CAAY,MAAW,GAAA,QAAA,EAAYA,CAAY,CAAA,MAAA,CAAO,UAAe,GAAA,IAAA,CAAK,GAC5E,GAAA,MAAM,IAAK,CAAA,6BAAA,EACX,CAAA,IAAA,CAAK,aAAc,CAAA,QAAA,CAASA,CAAY,CAAA,MAAA,CAAO,KAAK,CAAA,CAAA,CAGlDA,CAAY,CAAA,MAAA,GAAW,YAAgBA,EAAAA,CAAAA,CAAY,OAAO,UAAe,GAAA,IAAA,CAAK,GAChF,GAAA,MAAM,IAAK,CAAA,6BAAA,EACX,CAAA,IAAA,CAAK,aAAc,CAAA,QAAA,CAASA,CAAY,CAAA,MAAA,CAAO,KAAK,CAAA,CAAA,CAGlDA,CAAY,CAAA,MAAA,GAAW,WAAeA,EAAAA,CAAAA,CAAY,MAAO,CAAA,UAAA,GAAe,IAAK,CAAA,GAAA,EAC/E,IAAK,CAAA,aAAA,CAAc,QAASA,CAAAA,CAAAA,CAAY,MAAO,CAAA,KAAK,CAGlDA,CAAAA,CAAAA,CAAY,SAAW,YAAgBA,EAAAA,CAAAA,CAAY,MAAO,CAAA,UAAA,GAAe,IAAK,CAAA,GAAA,GAChF,MAAM,IAAA,CAAK,6BAA8B,EAAA,CACzC,IAAK,CAAA,uBAAA,CAAwB,QAAW,CAAA,CAAA,CAAA,CACxC,IAAK,CAAA,aAAA,CAAc,QAASA,CAAAA,CAAAA,CAAY,MAAO,CAAA,KAAK,CAGlDA,CAAAA,CAAAA,CAAAA,CAAY,MAAW,GAAA,SAAA,EAAaA,CAAY,CAAA,MAAA,CAAO,UAAe,GAAA,IAAA,CAAK,GAC7E,GAAA,IAAA,CAAK,wBAAwB,YAAgBA,CAAAA,CAAAA,CAAY,MAAO,CAAA,KAAA,CAAqB,YACrF,CAAA,IAAA,CAAK,aAAc,CAAA,QAAA,CAASA,CAAY,CAAA,MAAA,CAAO,KAAK,CAAA,CAAA,CAGlDA,CAAY,CAAA,MAAA,GAAW,UAAcA,EAAAA,CAAAA,CAAY,MAAO,CAAA,UAAA,GAAe,IAAK,CAAA,GAAA,EAC9E,IAAK,CAAA,aAAA,CAAc,QAASA,CAAAA,CAAAA,CAAY,MAAO,CAAA,KAAK,CAGlDA,CAAAA,CAAAA,CAAY,MAAW,GAAA,UAAA,EAAcA,CAAY,CAAA,MAAA,CAAO,UAAe,GAAA,IAAA,CAAK,GAC9E,GAAA,MAAM,IAAK,CAAA,6BAAA,EACX,CAAA,IAAA,CAAK,aAAc,CAAA,QAAA,CAASA,CAAY,CAAA,MAAA,CAAO,KAAK,CAAA,CAAA,CAGlDA,CAAY,CAAA,MAAA,GAAW,SAAaA,EAAAA,CAAAA,CAAY,MAAO,CAAA,UAAA,GAAe,IAAK,CAAA,GAAA,GAC7E,MAAM,IAAA,CAAK,6BAA8B,EAAA,CACzC,IAAK,CAAA,aAAA,CAAc,QAASA,CAAAA,CAAAA,CAAY,OAAO,KAAK,CAAA,CAAA,CAGlDA,CAAY,CAAA,MAAA,GAAW,QAAYA,EAAAA,CAAAA,CAAY,MAAO,CAAA,UAAA,GAAe,IAAK,CAAA,GAAA,GAC5E,MAAM,IAAA,CAAK,6BAA8B,EAAA,CACzC,IAAK,CAAA,aAAA,CAAc,QAASA,CAAAA,CAAAA,CAAY,MAAO,CAAA,KAAK,CAGlDA,CAAAA,CAAAA,CAAAA,CAAY,MAAW,GAAA,QAAA,EAAYA,CAAY,CAAA,MAAA,CAAO,UAAe,GAAA,IAAA,CAAK,GAC5E,GAAA,MAAM,KAAK,6BAA8B,EAAA,CACzC,IAAK,CAAA,aAAA,CAAc,QAASA,CAAAA,CAAAA,CAAY,MAAO,CAAA,KAAK,CAGlDA,CAAAA,CAAAA,CAAAA,CAAY,MAAW,GAAA,aAAA,EAAiBA,CAAY,CAAA,MAAA,CAAO,UAAe,GAAA,IAAA,CAAK,GACjF,GAAA,MAAM,IAAK,CAAA,6BAAA,EACX,CAAA,IAAA,CAAK,aAAc,CAAA,QAAA,CAASA,CAAY,CAAA,MAAA,CAAO,KAAK,CAAA,CAAA,CAGlDA,CAAY,CAAA,MAAA,GAAW,WAAaA,CAAY,CAAA,MAAA,CAAO,UAAe,GAAA,IAAA,CAAK,GAC7E,GAAA,MAAM,IAAK,CAAA,6BAAA,EACX,CAAA,IAAA,CAAK,aAAc,CAAA,QAAA,CAASA,CAAY,CAAA,MAAA,CAAO,KAAK,CAAA,CAAA,EAG1D,CAEA,MAAc,OAAQtD,CAAAA,CAAAA,CAA+B,CACnD,IAAIuD,CAEA,CAAA,IAAA,CAAK,OAAmB,YAAA,iBAAA,CAC1BA,CAAY,CAAA,IAAA,CAAK,OAAQ,CAAA,0BAAA,GAEzBA,CAAY,CAAA,IAAA,CAAK,OAGnB,CAAA,GAAM,CAAE,UAAA,CAAAC,CAAW,CAAA,CAAI,MAAM,IAAA,CAAK,YAChC,CAAA,QAAA,CACA,CACE,UAAA,CAAY,IAAK,CAAA,GAAA,CACjB,MAAQ,CAAA,CACN,GAAGxD,CAAAA,CAEH,MAAQuD,CAAAA,CACV,CACA,CAAA,GAAGL,EAAc,CAAA,IAAA,CAAK,OAAO,CAC/B,CACA,CAAA,CAACK,CAAS,CACZ,CAAA,CAEA,GAAIC,CAAAA,GAAe,IAAK,CAAA,GAAA,CACtB,MAAM,IAAI,KAAM,CAAA,sBAAsB,CAGxC,CAAA,IAAA,CAAK,QAAW,CAAA,CAAA,CAAA,CAEhB,MAAM,IAAA,CAAK,6BAA8B,GAC3C,CAEA,IAAW,QAAoB,EAAA,CAC7B,OAAO,IAAA,CAAK,uBAAwB,CAAA,QACtC,CAEA,IAAW,SAAqB,EAAA,CAC9B,OAAO,IAAK,CAAA,uBAAA,CAAwB,SACtC,CAEA,IAAW,QAAA,EAAoB,CAC7B,OAAO,IAAK,CAAA,uBAAA,CAAwB,QACtC,CAEA,IAAW,SAAA,EAAqB,CAC9B,OAAO,IAAK,CAAA,uBAAA,CAAwB,SACtC,CAEA,IAAW,YAAA,EAAuB,CAChC,OAAO,IAAK,CAAA,uBAAA,CAAwB,YACtC,CAEA,IAAW,QAAA,EAAoB,CAC7B,OAAO,IAAA,CAAK,uBAAwB,CAAA,QACtC,CAEA,IAAW,eAA0B,EAAA,CACnC,OAAO,IAAA,CAAK,uBAAwB,CAAA,eACtC,CAEA,IAAW,WAAsB,EAAA,CAC/B,OAAO,IAAA,CAAK,uBAAwB,CAAA,WACtC,CAEA,IAAW,OAAwC,EAAA,CACjD,OAAO,IAAA,CAAK,uBAAwB,CAAA,OACtC,CAEA,IAAW,KAAgB,EAAA,CACzB,OAAO,IAAA,CAAK,uBAAwB,CAAA,KACtC,CAEA,IAAW,QAAmB,EAAA,CAC5B,OAAO,IAAA,CAAK,uBAAwB,CAAA,QACtC,CAEA,IAAW,OAAmB,EAAA,CAC5B,OAAO,IAAA,CAAK,uBAAwB,CAAA,OACtC,CAEA,IAAW,IAAa,EAAA,CACtB,OAAO,IAAA,CAAK,uBAAwB,CAAA,IACtC,CAEA,IAAW,QAAmC,CAC5C,OAAO,IAAK,CAAA,OACd,CAEA,IAAW,QAAoB,EAAA,CAC7B,OAAO,IAAA,CAAK,uBAAwB,CAAA,QACtC,CAEA,IAAW,eAA0B,EAAA,CACnC,OAAO,IAAA,CAAK,uBAAwB,CAAA,eACtC,CAEA,IAAW,IAAgB,EAAA,CACzB,OAAO,IAAA,CAAK,uBAAwB,CAAA,IACtC,CAEA,IAAW,uBAAiC,CAC1C,OAAO,IAAK,CAAA,uBAAA,CAAwB,qBACtC,CAEA,IAAW,YAAA,EAA6B,CACtC,OAAO,IAAK,CAAA,uBAAA,CAAwB,YACtC,CAEA,IAAW,QAAA,EAA4B,CACrC,OAAO,IAAK,CAAA,uBAAA,CAAwB,QACtC,CAEA,IAAW,iBAAA,EAAwC,CACjD,OAAO,IAAK,CAAA,uBAAA,CAAwB,iBACtC,CAEA,IAAW,MAA6B,EAAA,CACtC,OAAO,IAAA,CAAK,uBAAwB,CAAA,MACtC,CAEA,IAAW,aAAoC,EAAA,CAC7C,OAAO,IAAA,CAAK,uBAAwB,CAAA,aACtC,CAEA,IAAW,MAA6B,EAAA,CACtC,OAAO,IAAA,CAAK,uBAAwB,CAAA,MACtC,CAEA,MAAa,IAAsB,EAAA,CAC5B,IAAK,CAAA,QAAA,GAEV,MAAM,IAAA,CAAK,aAAa,MAAQ,CAAA,CAAE,UAAY,CAAA,IAAA,CAAK,GAAI,CAAC,CACxD,CAAA,MAAM,IAAK,CAAA,6BAAA,EACb,EAAA,CAEA,MAAa,KAAA,EAAuB,CAC7B,IAAA,CAAK,QAEV,GAAA,MAAM,IAAK,CAAA,YAAA,CAAa,OAAS,CAAA,CAAE,UAAY,CAAA,IAAA,CAAK,GAAI,CAAC,CACzD,CAAA,MAAM,IAAK,CAAA,6BAAA,IACb,CAEA,MAAa,IAAsB,EAAA,CAC5B,IAAK,CAAA,QAAA,GAEV,MAAM,IAAA,CAAK,YAAa,CAAA,MAAA,CAAQ,CAAE,UAAA,CAAY,IAAK,CAAA,GAAI,CAAC,CAAA,CACxD,MAAM,IAAA,CAAK,6BAA8B,EAAA,EAC3C,CAEA,MAAa,QAASvC,CAAAA,CAAAA,CAA8B,CAC7C,IAAA,CAAK,QAEV,GAAA,MAAM,IAAK,CAAA,YAAA,CAAa,WAAY,CAAE,UAAA,CAAY,IAAK,CAAA,GAAA,CAAK,KAAAA,CAAAA,CAAM,CAAC,CAAA,CACnE,MAAM,IAAA,CAAK,6BAA8B,EAAA,EAC3C,CAEA,MAAa,OAAQ5B,CAAAA,CAAAA,CAA2B,CACzC,IAAA,CAAK,QAEV,GAAA,MAAM,IAAK,CAAA,YAAA,CAAa,SAAW,CAAA,CAAE,UAAY,CAAA,IAAA,CAAK,GAAK,CAAA,IAAA,CAAAA,CAAK,CAAC,EACjE,MAAM,IAAA,CAAK,6BAA8B,EAAA,EAC3C,CAEA,MAAa,QAAS2B,CAAAA,CAAAA,CAA8B,CAC7C,IAAA,CAAK,QAEV,GAAA,MAAM,IAAK,CAAA,YAAA,CAAa,UAAY,CAAA,CAAE,KAAAA,CAAAA,CAAAA,CAAO,UAAY,CAAA,IAAA,CAAK,GAAI,CAAC,CACnE,CAAA,MAAM,IAAK,CAAA,6BAAA,EACb,EAAA,CAEA,MAAa,UAAA,CAAWyC,CAAeC,CAAAA,CAAAA,CAA4B,CAC5D,IAAA,CAAK,QAEV,GAAA,MAAM,IAAK,CAAA,YAAA,CAAa,YAAc,CAAA,CAAE,UAAY,CAAA,IAAA,CAAK,GAAK,CAAA,OAAA,CAAS,CAACD,CAAAA,CAAOC,CAAG,CAAE,CAAC,CAAA,CACrF,MAAM,IAAA,CAAK,6BAA8B,EAAA,EAC3C,CAEA,MAAa,eAAgBC,CAAAA,CAAAA,CAA2C,CACjE,IAAA,CAAK,QAEV,GAAA,MAAM,KAAK,YAAa,CAAA,iBAAA,CAAmB,CAAE,UAAA,CAAY,IAAK,CAAA,GAAA,CAAK,YAAAA,CAAAA,CAAa,CAAC,CAAA,CACjF,MAAM,IAAA,CAAK,6BAA8B,EAAA,EAC3C,CAEA,MAAa,wBAAyBxC,CAAAA,CAAAA,CAA+C,CAC9E,IAAA,CAAK,QAEV,GAAA,MAAM,IAAK,CAAA,YAAA,CAAa,0BAA4B,CAAA,CAAE,UAAY,CAAA,IAAA,CAAK,GAAK,CAAA,qBAAA,CAAAA,CAAsB,CAAC,CAAA,CACnG,MAAM,IAAA,CAAK,6BAA8B,EAAA,EAC3C,CAEA,MAAa,SAAUW,CAAAA,CAAAA,CAAmC,CACxD,GAAI,CAAC,IAAA,CAAK,QAAU,CAAA,OAAO,CAE3B,CAAA,CAAA,IAAMF,CAAS,CAAA,IAAA,CAAK,YAAa,CAAA,WAAA,CAAa,CAAE,UAAA,CAAY,IAAK,CAAA,GAAA,CAAK,OAAAE,CAAAA,CAAQ,CAAC,CAAA,CAE/E,aAAM,IAAK,CAAA,6BAAA,EAEJF,CAAAA,CACT,CAEA,MAAa,IAAK5B,CAAAA,CAAAA,CAA+C,CAC1D,IAAA,CAAK,QAEV,GAAA,MAAM,IAAK,CAAA,YAAA,CAAa,MAAQ,CAAA,CAAE,MAAAA,CAAAA,CAAAA,CAAQ,UAAY,CAAA,IAAA,CAAK,GAAI,CAAC,CAChE,CAAA,MAAM,IAAK,CAAA,6BAAA,EACb,EAAA,CAEA,MAAa,OAAA,CAAQkB,EAA8B,CAC5C,IAAA,CAAK,QAEV,GAAA,MAAM,IAAK,CAAA,YAAA,CAAa,SAAW,CAAA,CAAE,UAAY,CAAA,IAAA,CAAK,GAAK,CAAA,IAAA,CAAAA,CAAK,CAAC,CACjE,CAAA,MAAM,IAAK,CAAA,6BAAA,EACb,EAAA,CAEA,MAAa,MAAA,EAAwB,CACnC,GAAI,CAAC,IAAA,CAAK,QAAU,CAAA,OAEpB,GAAM,CAAE,OAAAX,CAAQ,CAAA,KAAA,CAAAD,CAAM,CAAA,CAAI4C,EAAc,CAAA,IAAA,CAAK,OAAO,CAAA,CAEpD,IAAK,CAAA,OAAA,CAAQ,KAAQ5C,CAAAA,CAAAA,CACrB,IAAK,CAAA,OAAA,CAAQ,MAASC,CAAAA,CAAAA,CAEtB,MAAM,IAAA,CAAK,YAAa,CAAA,QAAA,CAAU,CAAE,MAAA,CAAAA,CAAQ,CAAA,UAAA,CAAY,IAAK,CAAA,GAAA,CAAK,KAAAD,CAAAA,CAAM,CAAC,CAAA,CACzE,MAAM,IAAK,CAAA,6BAAA,GACb,CAEA,MAAa,OAAA,EAAyB,CAC/B,IAAA,CAAK,QAEV,GAAA,IAAA,CAAK,QAAW,CAAA,CAAA,CAAA,CAEhB,MAAM,IAAA,CAAK,YAAa,CAAA,SAAA,CAAW,CAAE,UAAA,CAAY,IAAK,CAAA,GAAI,CAAC,CAAA,CAE3D,IAAK,CAAA,6BAAA,EAEL+C,CAAAA,CAAAA,CAAgB,cAAe,CAAA,2BAAA,CAA4B,IAAK,CAAA,GAAG,EACnE,IAAK,CAAA,aAAA,CAAc,uBAAwB,EAAA,EAC7C,CAEA,MAAa,MAAwB,EAAA,CAC9B,IAAK,CAAA,QAAA,GAEV,MAAM,IAAA,CAAK,YAAa,CAAA,QAAA,CAAU,CAAE,UAAA,CAAY,IAAK,CAAA,GAAI,CAAC,CAAA,CAC1D,MAAM,IAAA,CAAK,6BAA8B,EAAA,EAC3C,CAEA,MAAa,QAA0B,EAAA,CAChC,IAAK,CAAA,QAAA,GAEV,MAAM,IAAK,CAAA,YAAA,CAAa,UAAY,CAAA,CAAE,UAAY,CAAA,IAAA,CAAK,GAAI,CAAC,CAC5D,CAAA,MAAM,IAAK,CAAA,6BAAA,EACb,EAAA,CAEA,MAAa,kBAAA,CAAmBO,CAAwC,CAAA,CACjE,IAAK,CAAA,QAAA,GAEV,MAAM,IAAA,CAAK,YAAa,CAAA,oBAAA,CAAsB,CAAE,UAAA,CAAY,IAAK,CAAA,GAAA,CAAK,eAAAA,CAAAA,CAAgB,CAAC,CACvF,CAAA,MAAM,IAAK,CAAA,6BAAA,EACb,EAAA,CAEA,MAAa,aAAA,CAAcnC,CAAoC,CAAA,CACxD,IAAK,CAAA,QAAA,GAEV,MAAM,IAAA,CAAK,YAAa,CAAA,eAAA,CAAiB,CAAE,WAAA,CAAAA,CAAa,CAAA,UAAA,CAAY,IAAK,CAAA,GAAI,CAAC,CAAA,CAC9E,MAAM,IAAA,CAAK,6BAA8B,EAAA,EAC3C,CAEA,MAAa,UAAUhB,CAA+B,CAAA,CAC/C,IAAK,CAAA,QAAA,GAEV,MAAM,IAAA,CAAK,YAAa,CAAA,WAAA,CAAa,CAAE,UAAA,CAAY,IAAK,CAAA,GAAA,CAAK,MAAAA,CAAAA,CAAO,CAAC,CAAA,CACrE,MAAM,IAAA,CAAK,6BAA8B,EAAA,EAC3C,CAEA,MAAc,6BAA+C,EAAA,CAC3D,GAAI,CAAC,IAAK,CAAA,QAAA,CAAU,OAEpB,IAAMmB,EAAS,MAAM,IAAA,CAAK,YAAa,CAAA,2BAAA,CAA6B,CAAE,UAAA,CAAY,IAAK,CAAA,GAAI,CAAC,CAAA,CAE5F,IAAK,CAAA,uBAAA,CAA0BA,CAAO,CAAA,MACxC,CAEO,OAAA,EAAoB,CACzB,OAAO,IAAK,CAAA,uBAAA,CAAwB,OACtC,CAEA,MAAa,SAAA,CAAUF,CAA+B,CAAA,CAC/C,IAAK,CAAA,QAAA,GAEV,MAAM,IAAA,CAAK,aAAa,WAAa,CAAA,CAAE,UAAY,CAAA,IAAA,CAAK,GAAK,CAAA,MAAA,CAAAA,CAAO,CAAC,CACrE,CAAA,MAAM,IAAK,CAAA,6BAAA,EACb,EAAA,CAEA,MAAa,aAAA,CAAcK,CAAqC,CAAA,CAC9D,GAAI,CAAC,IAAK,CAAA,QAAA,CAAU,OAAO,CAAA,CAAA,CAE3B,IAAMvB,CAAAA,CAAS,MAAM,IAAA,CAAK,YAAa,CAAA,eAAA,CAAiB,CAAE,UAAY,CAAA,IAAA,CAAK,GAAK,CAAA,SAAA,CAAAuB,CAAU,CAAC,CAE3F,CAAA,OAAA,MAAM,IAAK,CAAA,6BAAA,EAEJvB,CAAAA,CACT,CAEA,MAAa,WAAY1M,CAAAA,CAAAA,CAAWG,CAAWqM,CAAAA,CAAAA,CAAeC,CAAkC,CAAA,CAC9F,OAAK,IAAA,CAAK,QAEH,CAAA,IAAA,CAAK,YAAa,CAAA,aAAA,CAAe,CAAE,CAAA,CAAAzM,CAAG,CAAA,CAAA,CAAAG,EAAG,KAAAqM,CAAAA,CAAAA,CAAO,MAAAC,CAAAA,CAAAA,CAAQ,UAAY,CAAA,IAAA,CAAK,GAAI,CAAC,CAF1D,CAAA,CAAA,CAG7B,CAEA,MAAc,YACZsD,CAAAA,CAAAA,CACAC,CACAd,CAAAA,CAAAA,CAC6B,CAC7B,IAAMe,CAA4B,CAAA,CAChC,EAAI,CAAA,CAAA,kBAAA,EAAqBX,EAAiB,EAAC,CAC3C,CAAA,CAAA,MAAA,CAAAS,CACA,CAAA,MAAA,CAAAC,CACF,CAAA,CAEA,YAAK,OAAQ,CAAA,WAAA,CAAYC,CAAYf,CAAAA,CAAAA,EAAY,EAAE,CAE5C,CAAA,IAAI,OAAQ,CAAA,CAACgB,CAASC,CAAAA,CAAAA,GAAW,CACtC,IAAMC,CAAa3F,CAAAA,CAAAA,EAA8B,CAC/C,IAAM+E,CAA8B/E,CAAAA,CAAAA,CAAM,IAGtC+E,CAAAA,CAAAA,CAAY,EAAOS,GAAAA,CAAAA,CAAW,EAChC,GAAA,IAAA,CAAK,OAAQ,CAAA,mBAAA,CAAoB,SAAWG,CAAAA,CAAS,CAEjDZ,CAAAA,CAAAA,CAAY,KACdW,CAAAA,CAAAA,CAAO,IAAI,KAAA,CAAM,CAA4BJ,yBAAAA,EAAAA,CAAM,CAAKP,EAAAA,EAAAA,CAAAA,CAAY,KAAK,CAAA,CAAE,CAAC,CAAA,CAE5EU,CAAQV,CAAAA,CAAAA,CAAY,MAAM,CAAA,EAGhC,CAEA,CAAA,IAAA,CAAK,OAAQ,CAAA,gBAAA,CAAiB,SAAWY,CAAAA,CAAS,EACpD,CAAC,CACH,CAEO,gBAAsC9F,CAAAA,CAAAA,CAASC,CAAkC,CAAA,CACtF,KAAK,aAAc,CAAA,gBAAA,CAAiBD,CAAMC,CAAAA,CAAQ,EACpD,CAEO,mBAAyCD,CAAAA,CAAAA,CAASC,CAAmC,CAAA,CAC1F,IAAK,CAAA,aAAA,CAAc,mBAAoBD,CAAAA,CAAAA,CAAMC,CAAQ,EACvD,CAEA,OAAc,UAAWN,CAAAA,CAAAA,CAAmB,CAC1CsF,CAAAA,CAAgB,QAAWtF,CAAAA,EAC7B,CAEA,MAAa,gBAAiBiE,CAAAA,CAAAA,CAA0C,CACtE,GAAI,CAAC,IAAK,CAAA,QAAA,CAAU,OAAO,CAAA,CAAA,CAE3B,IAAMJ,CAAAA,CAAS,MAAM,IAAA,CAAK,YAAa,CAAA,kBAAA,CAAoB,CAAE,UAAA,CAAY,IAAK,CAAA,GAAA,CAAK,cAAAI,CAAAA,CAAe,CAAC,CAAA,CAEnG,OAAM,MAAA,IAAA,CAAK,6BAA8B,EAAA,CAElCJ,CACT,CAEA,MAAa,oBAAA,CAAqBa,CAA4C,CAAA,CAC5E,GAAI,CAAC,KAAK,QAAU,CAAA,OAAO,CAE3B,CAAA,CAAA,IAAMb,CAAS,CAAA,MAAM,IAAK,CAAA,YAAA,CAAa,sBAAwB,CAAA,CAAE,UAAY,CAAA,IAAA,CAAK,GAAK,CAAA,gBAAA,CAAAa,CAAiB,CAAC,CAEzG,CAAA,OAAA,MAAM,IAAK,CAAA,6BAAA,EAEJb,CAAAA,CACT,CAEA,MAAa,iBAAsC,EAAA,CACjD,GAAI,CAAC,IAAK,CAAA,QAAA,CAAU,OAAO,CAE3B,CAAA,CAAA,IAAA,CAAK,2BAA4B,EAAA,CAEjC,IAAMA,CAAAA,CAAS,MAAM,IAAA,CAAK,YAAa,CAAA,mBAAA,CAAqB,CAAE,UAAA,CAAY,IAAK,CAAA,GAAI,CAAC,CAAA,CAEpF,OAAM,MAAA,IAAA,CAAK,6BAA8B,EAAA,CAElCA,CACT,CAEA,MAAa,gBAAA,EAAqC,CAChD,OAAK,IAAK,CAAA,QAAA,EAEV,IAAK,CAAA,6BAAA,GAEE,IAAK,CAAA,YAAA,CAAa,kBAAoB,CAAA,CAAE,UAAY,CAAA,IAAA,CAAK,GAAI,CAAC,CAJ1C,EAAA,CAAA,CAK7B,CAEA,MAAa,qBAAsBrD,CAAAA,CAAAA,CAAgC,CACjE,OAAK,IAAK,CAAA,QAAA,CAEH,IAAK,CAAA,YAAA,CAAa,uBAAyB,CAAA,CAAE,KAAAA,CAAAA,CAAAA,CAAO,UAAY,CAAA,IAAA,CAAK,GAAI,CAAC,CAFtD,CAAA,CAG7B,CAEA,MAAa,wBAAA,EAA8C,CACzD,OAAK,IAAK,CAAA,QAAA,CAEH,IAAK,CAAA,YAAA,CAAa,0BAA4B,CAAA,CAAE,UAAY,CAAA,IAAA,CAAK,GAAI,CAAC,CAFlD,CAAA,EAG7B,CAEQ,mBAAoBA,CAAAA,CAAAA,CAA+C,CACzE,IAAM4D,CAAQ,CAAA,IAAA,CAAK,OAA8B,CAAA,qBAAA,EAC3CC,CAAAA,CAAAA,CAAS,IAAK,CAAA,OAAA,CAAQ,MAAQD,CAAK,CAAA,KAAA,CACnCE,CAAS,CAAA,IAAA,CAAK,OAAQ,CAAA,MAAA,CAASF,CAAK,CAAA,MAAA,CAEpCG,CAAmB,CAAA,IAAA,CAAK,uBAAwB,CAAA,YAAA,CAAa,gBAAoB,EAAA,MAAA,CAAO,gBAAoB,EAAA,CAAA,CAC5GxO,CAAMyK,CAAAA,CAAAA,CAAAA,CAAM,OAAU4D,CAAAA,CAAAA,CAAK,IAAQC,EAAAA,CAAAA,CAAUE,CAC7CrO,CAAAA,CAAAA,CAAAA,CAAMsK,CAAM,CAAA,OAAA,CAAU4D,CAAK,CAAA,GAAA,EAAOE,CAAUC,CAAAA,CAAAA,CAElD,OAAO,CACL,CAAAxO,CAAAA,CAAAA,CACA,CAAAG,CAAAA,CACF,CACF,CAEQ,YAAasK,CAAAA,CAAAA,CAA2B,CAC9C,GAAM,CAAE,CAAA,CAAAzK,CAAG,CAAA,CAAA,CAAAG,CAAE,CAAA,CAAI,IAAK,CAAA,mBAAA,CAAoBsK,CAAK,CAAA,CAE/C,IAAK,CAAA,qBAAA,CAAsB,CAAgBzK,aAAAA,EAAAA,CAAC,CAAIG,CAAAA,EAAAA,CAAC,CAAE,CAAA,EACrD,CAEQ,cAAA,CAAesK,EAA2B,CAChD,GAAM,CAAE,CAAA,CAAAzK,CAAG,CAAA,CAAA,CAAAG,CAAE,CAAA,CAAI,IAAK,CAAA,mBAAA,CAAoBsK,CAAK,CAAA,CAE/C,IAAK,CAAA,qBAAA,CAAsB,CAAkBzK,eAAAA,EAAAA,CAAC,CAAIG,CAAAA,EAAAA,CAAC,CAAE,CAAA,EACvD,CAEQ,cAAA,CAAesK,CAA2B,CAAA,CAChD,GAAM,CAAE,CAAAzK,CAAAA,CAAAA,CAAG,CAAAG,CAAAA,CAAE,EAAI,IAAK,CAAA,mBAAA,CAAoBsK,CAAK,CAAA,CAE/C,IAAK,CAAA,qBAAA,CAAsB,CAAkBzK,eAAAA,EAAAA,CAAC,CAAIG,CAAAA,EAAAA,CAAC,CAAE,CAAA,EACvD,CAEQ,eAAA,CAAgBsK,CAA2B,CAAA,CACjD,GAAM,CAAE,CAAAzK,CAAAA,CAAAA,CAAG,CAAAG,CAAAA,CAAE,CAAI,CAAA,IAAA,CAAK,mBAAoBsK,CAAAA,CAAK,CAE/C,CAAA,IAAA,CAAK,qBAAsB,CAAA,CAAA,gBAAA,EAAmBzK,CAAC,CAAIG,CAAAA,EAAAA,CAAC,CAAE,CAAA,EACxD,CAEQ,eAAA,CAAgBsK,CAA2B,CAAA,CACjD,GAAM,CAAE,CAAAzK,CAAAA,CAAAA,CAAG,CAAAG,CAAAA,CAAE,CAAI,CAAA,IAAA,CAAK,mBAAoBsK,CAAAA,CAAK,CAE/C,CAAA,IAAA,CAAK,qBAAsB,CAAA,CAAA,eAAA,EAAkBzK,CAAC,CAAA,CAAA,EAAIG,CAAC,CAAA,CAAE,EACvD,CAEQ,WAAoB,EAAA,CAC1B,KAAK,qBAAsB,CAAA,YAAY,EACzC,CAEA,MAAc,2BAAA,EAA6C,CACzD,GAAItB,CAAc,EAAA,IAAA,CAAK,OAAmB,YAAA,iBAAA,EAAqB,IAAK,CAAA,QAAA,CAAU,CAC5E,IAAM2L,CAAY,CAAA,MAAM,IAAK,CAAA,YAAA,CAAa,0BAA4B,CAAA,CAAE,UAAY,CAAA,IAAA,CAAK,GAAI,CAAC,CAE1FA,CAAAA,CAAAA,CAAU,QAAS,CAAA,WAAW,GAChC,IAAK,CAAA,OAAA,CAAQ,gBAAiB,CAAA,WAAA,CAAa,IAAK,CAAA,gBAAgB,CAG9DA,CAAAA,CAAAA,CAAU,QAAS,CAAA,aAAa,CAClC,EAAA,IAAA,CAAK,OAAQ,CAAA,gBAAA,CAAiB,aAAe,CAAA,IAAA,CAAK,kBAAkB,CAAA,CAGlEA,CAAU,CAAA,QAAA,CAAS,aAAa,CAAA,EAClC,IAAK,CAAA,OAAA,CAAQ,gBAAiB,CAAA,aAAA,CAAe,IAAK,CAAA,kBAAkB,CAGlEA,CAAAA,CAAAA,CAAU,SAAS,cAAc,CAAA,EACnC,IAAK,CAAA,OAAA,CAAQ,gBAAiB,CAAA,cAAA,CAAgB,IAAK,CAAA,mBAAmB,CAGpEA,CAAAA,CAAAA,CAAU,QAAS,CAAA,aAAa,CAClC,EAAA,IAAA,CAAK,OAAQ,CAAA,gBAAA,CAAiB,cAAgB,CAAA,IAAA,CAAK,kBAAkB,CAAA,CAGnEA,CAAU,CAAA,QAAA,CAAS,UAAU,CAAA,EAC/B,IAAK,CAAA,gBAAA,CAAiB,UAAY,CAAA,IAAA,CAAK,iBAAiB,EAE5D,CACF,CAEQ,6BAAA,EAAsC,CACxC3L,CAAAA,EAAc,IAAK,CAAA,OAAA,YAAmB,iBACxC,GAAA,IAAA,CAAK,OAAQ,CAAA,mBAAA,CAAoB,WAAa,CAAA,IAAA,CAAK,gBAAgB,CAAA,CACnE,IAAK,CAAA,OAAA,CAAQ,mBAAoB,CAAA,aAAA,CAAe,IAAK,CAAA,kBAAkB,CACvE,CAAA,IAAA,CAAK,OAAQ,CAAA,mBAAA,CAAoB,aAAe,CAAA,IAAA,CAAK,kBAAkB,CAAA,CACvE,IAAK,CAAA,OAAA,CAAQ,mBAAoB,CAAA,cAAA,CAAgB,IAAK,CAAA,mBAAmB,CACzE,CAAA,IAAA,CAAK,OAAQ,CAAA,mBAAA,CAAoB,cAAgB,CAAA,IAAA,CAAK,kBAAkB,CAAA,CACxE,IAAK,CAAA,mBAAA,CAAoB,UAAY,CAAA,IAAA,CAAK,iBAAiB,CAAA,EAE/D,CACF,CAAA,CAtpBEH,CADW6Q,CAAAA,CAAAA,CACa,gBAAiB,CAAA,IAAIP,EAuC7CtQ,CAAAA,CAAAA,CAAAA,CAxCW6Q,CAwCI,CAAA,UAAA,CAAmB,EAxC7B,CAAA,CAAA,IAAMc,EAANd,CAAAA","file":"index.cjs","sourcesContent":["/* eslint-disable max-classes-per-file */\n\ninterface AnimationFrameStrategy {\n cancelAnimationFrame(id: number): void;\n requestAnimationFrame(callback: (time: number) => void): number;\n}\n\nclass WebAnimationFrameStrategy implements AnimationFrameStrategy {\n public requestAnimationFrame(callback: (time: number) => void): number {\n return requestAnimationFrame(callback);\n }\n\n public cancelAnimationFrame(id: number): void {\n cancelAnimationFrame(id);\n }\n}\n\nclass NodeAnimationFrameStrategy implements AnimationFrameStrategy {\n private _lastHandleId: number = 0;\n\n private _lastImmediate: NodeJS.Immediate | null = null;\n\n public requestAnimationFrame(callback: (time: number) => void): number {\n if (this._lastHandleId >= Number.MAX_SAFE_INTEGER) {\n this._lastHandleId = 0;\n }\n\n this._lastHandleId += 1;\n\n this._lastImmediate = setImmediate(() => {\n callback(Date.now());\n });\n\n return this._lastHandleId;\n }\n\n public cancelAnimationFrame(_id: number): void {\n if (this._lastImmediate) {\n clearImmediate(this._lastImmediate);\n }\n }\n}\n\nexport class AnimationFrameManager {\n private readonly _strategy: AnimationFrameStrategy;\n\n public constructor() {\n this._strategy =\n typeof requestAnimationFrame === 'function' ? new WebAnimationFrameStrategy() : new NodeAnimationFrameStrategy();\n }\n\n public requestAnimationFrame(callback: (time: number) => void): number {\n return this._strategy.requestAnimationFrame(callback);\n }\n\n public cancelAnimationFrame(id: number): void {\n this._strategy.cancelAnimationFrame(id);\n }\n}\n","export const IS_BROWSER = typeof window !== 'undefined' && typeof window.document !== 'undefined';\nexport const MS_TO_SEC_FACTOR = 1000;\nexport const DEFAULT_BG_COLOR = '#00000000';\nexport const ZIP_SIGNATURE = new Uint8Array([0x50, 0x4b, 0x03, 0x04]);\nexport const LOTTIE_JSON_MANDATORY_FIELDS = ['v', 'ip', 'op', 'layers', 'fr', 'w', 'h'];\n\n// These values are replace during the build process with the package version and name\nexport const PACKAGE_VERSION = '0.30.3';\nexport const PACKAGE_NAME = '@lottiefiles/dotlottie-web';\n","var createDotLottiePlayerModule = (() => {\n var _scriptDir = typeof document != 'undefined' ? document.currentScript?.src : undefined;\n\n return function (moduleArg = {}) {\n var k = moduleArg,\n aa,\n ba,\n readyPromise = new Promise((a, b) => {\n aa = a;\n ba = b;\n }),\n ca = Object.assign({}, k),\n da = './this.program',\n t = '';\n 'undefined' != typeof document && document.currentScript && (t = document.currentScript.src);\n _scriptDir && (t = _scriptDir);\n t.startsWith('blob:') ? (t = '') : (t = t.substr(0, t.replace(/[?#].*/, '').lastIndexOf('/') + 1));\n var ea = k.print || console.log.bind(console),\n w = k.printErr || console.error.bind(console);\n Object.assign(k, ca);\n ca = null;\n k.thisProgram && (da = k.thisProgram);\n var x;\n k.wasmBinary && (x = k.wasmBinary);\n var fa,\n ha = !1,\n y,\n A,\n B,\n C,\n E,\n F,\n ja,\n ka;\n function la() {\n var a = fa.buffer;\n k.HEAP8 = y = new Int8Array(a);\n k.HEAP16 = B = new Int16Array(a);\n k.HEAPU8 = A = new Uint8Array(a);\n k.HEAPU16 = C = new Uint16Array(a);\n k.HEAP32 = E = new Int32Array(a);\n k.HEAPU32 = F = new Uint32Array(a);\n k.HEAPF32 = ja = new Float32Array(a);\n k.HEAPF64 = ka = new Float64Array(a);\n }\n var ma = [],\n na = [],\n oa = [];\n function pa() {\n var a = k.preRun.shift();\n ma.unshift(a);\n }\n var G = 0,\n qa = null,\n H = null;\n function ra(a) {\n k.onAbort?.(a);\n a = 'Aborted(' + a + ')';\n w(a);\n ha = !0;\n a = new WebAssembly.RuntimeError(a + '. Build with -sASSERTIONS for more info.');\n ba(a);\n throw a;\n }\n var sa = (a) => a.startsWith('data:application/octet-stream;base64,'),\n I;\n I = 'DotLottiePlayer.wasm';\n if (!sa(I)) {\n var ta = I;\n I = k.locateFile ? k.locateFile(ta, t) : t + ta;\n }\n function ua(a) {\n if (a == I && x) return new Uint8Array(x);\n throw 'both async and sync fetching of the wasm failed';\n }\n function va(a) {\n return x || 'function' != typeof fetch\n ? Promise.resolve().then(() => ua(a))\n : fetch(a, { credentials: 'same-origin' })\n .then((b) => {\n if (!b.ok) throw `failed to load wasm binary file at '${a}'`;\n return b.arrayBuffer();\n })\n .catch(() => ua(a));\n }\n function wa(a, b, c) {\n return va(a)\n .then((d) => WebAssembly.instantiate(d, b))\n .then(c, (d) => {\n w(`failed to asynchronously prepare wasm: ${d}`);\n ra(d);\n });\n }\n function xa(a, b) {\n var c = I;\n return x || 'function' != typeof WebAssembly.instantiateStreaming || sa(c) || 'function' != typeof fetch\n ? wa(c, a, b)\n : fetch(c, { credentials: 'same-origin' }).then((d) =>\n WebAssembly.instantiateStreaming(d, a).then(b, function (e) {\n w(`wasm streaming compile failed: ${e}`);\n w('falling back to ArrayBuffer instantiation');\n return wa(c, a, b);\n }),\n );\n }\n var ya = (a) => {\n for (; 0 < a.length; ) a.shift()(k);\n },\n za = 'undefined' != typeof TextDecoder ? new TextDecoder('utf8') : void 0,\n J = (a, b, c) => {\n var d = b + c;\n for (c = b; a[c] && !(c >= d); ) ++c;\n if (16 < c - b && a.buffer && za) return za.decode(a.subarray(b, c));\n for (d = ''; b < c; ) {\n var e = a[b++];\n if (e & 128) {\n var f = a[b++] & 63;\n if (192 == (e & 224)) d += String.fromCharCode(((e & 31) << 6) | f);\n else {\n var l = a[b++] & 63;\n e =\n 224 == (e & 240)\n ? ((e & 15) << 12) | (f << 6) | l\n : ((e & 7) << 18) | (f << 12) | (l << 6) | (a[b++] & 63);\n 65536 > e\n ? (d += String.fromCharCode(e))\n : ((e -= 65536), (d += String.fromCharCode(55296 | (e >> 10), 56320 | (e & 1023))));\n }\n } else d += String.fromCharCode(e);\n }\n return d;\n };\n class Aa {\n constructor(a) {\n this.ya = a - 24;\n }\n }\n var Ba = 0,\n Ca = 0,\n Da = (a) => {\n for (var b = 0, c = 0; c < a.length; ++c) {\n var d = a.charCodeAt(c);\n 127 >= d ? b++ : 2047 >= d ? (b += 2) : 55296 <= d && 57343 >= d ? ((b += 4), ++c) : (b += 3);\n }\n return b;\n },\n Ea = (a, b, c, d) => {\n if (0 < d) {\n d = c + d - 1;\n for (var e = 0; e < a.length; ++e) {\n var f = a.charCodeAt(e);\n if (55296 <= f && 57343 >= f) {\n var l = a.charCodeAt(++e);\n f = (65536 + ((f & 1023) << 10)) | (l & 1023);\n }\n if (127 >= f) {\n if (c >= d) break;\n b[c++] = f;\n } else {\n if (2047 >= f) {\n if (c + 1 >= d) break;\n b[c++] = 192 | (f >> 6);\n } else {\n if (65535 >= f) {\n if (c + 2 >= d) break;\n b[c++] = 224 | (f >> 12);\n } else {\n if (c + 3 >= d) break;\n b[c++] = 240 | (f >> 18);\n b[c++] = 128 | ((f >> 12) & 63);\n }\n b[c++] = 128 | ((f >> 6) & 63);\n }\n b[c++] = 128 | (f & 63);\n }\n }\n b[c] = 0;\n }\n },\n Fa = {},\n Ga = (a) => {\n for (; a.length; ) {\n var b = a.pop();\n a.pop()(b);\n }\n };\n function K(a) {\n return this.fromWireType(F[a >> 2]);\n }\n var L = {},\n M = {},\n Ha = {},\n Ia,\n P = (a, b, c) => {\n function d(h) {\n h = c(h);\n if (h.length !== a.length) throw new Ia('Mismatched type converter count');\n for (var n = 0; n < a.length; ++n) O(a[n], h[n]);\n }\n a.forEach(function (h) {\n Ha[h] = b;\n });\n var e = Array(b.length),\n f = [],\n l = 0;\n b.forEach((h, n) => {\n M.hasOwnProperty(h)\n ? (e[n] = M[h])\n : (f.push(h),\n L.hasOwnProperty(h) || (L[h] = []),\n L[h].push(() => {\n e[n] = M[h];\n ++l;\n l === f.length && d(e);\n }));\n });\n 0 === f.length && d(e);\n },\n Ja,\n Q = (a) => {\n for (var b = ''; A[a]; ) b += Ja[A[a++]];\n return b;\n },\n R;\n function Ka(a, b, c = {}) {\n var d = b.name;\n if (!a) throw new R(`type \"${d}\" must have a positive integer typeid pointer`);\n if (M.hasOwnProperty(a)) {\n if (c.ib) return;\n throw new R(`Cannot register type '${d}' twice`);\n }\n M[a] = b;\n delete Ha[a];\n L.hasOwnProperty(a) && ((b = L[a]), delete L[a], b.forEach((e) => e()));\n }\n function O(a, b, c = {}) {\n if (!('argPackAdvance' in b)) throw new TypeError('registerType registeredInstance requires argPackAdvance');\n return Ka(a, b, c);\n }\n var La = (a) => {\n throw new R(a.ma.za.xa.name + ' instance already deleted');\n },\n Ma = !1,\n Oa = () => {},\n Pa = (a, b, c) => {\n if (b === c) return a;\n if (void 0 === c.Ca) return null;\n a = Pa(a, b, c.Ca);\n return null === a ? null : c.ab(a);\n },\n Qa = {},\n Ra = [],\n Sa = () => {\n for (; Ra.length; ) {\n var a = Ra.pop();\n a.ma.Ka = !1;\n a['delete']();\n }\n },\n Ta,\n Ua = {},\n Va = (a, b) => {\n if (void 0 === b) throw new R('ptr should not be undefined');\n for (; a.Ca; ) (b = a.Na(b)), (a = a.Ca);\n return Ua[b];\n },\n Xa = (a, b) => {\n if (!b.za || !b.ya) throw new Ia('makeClassHandle requires ptr and ptrType');\n if (!!b.Da !== !!b.Aa) throw new Ia('Both smartPtrType and smartPtr must be specified');\n b.count = { value: 1 };\n return Wa(Object.create(a, { ma: { value: b, writable: !0 } }));\n },\n Wa = (a) => {\n if ('undefined' === typeof FinalizationRegistry) return (Wa = (b) => b), a;\n Ma = new FinalizationRegistry((b) => {\n b = b.ma;\n --b.count.value;\n 0 === b.count.value && (b.Aa ? b.Da.Fa(b.Aa) : b.za.xa.Fa(b.ya));\n });\n Wa = (b) => {\n var c = b.ma;\n c.Aa && Ma.register(b, { ma: c }, b);\n return b;\n };\n Oa = (b) => {\n Ma.unregister(b);\n };\n return Wa(a);\n };\n function Ya() {}\n var Za = (a, b) => Object.defineProperty(b, 'name', { value: a }),\n $a = (a, b, c) => {\n if (void 0 === a[b].Ba) {\n var d = a[b];\n a[b] = function (...e) {\n if (!a[b].Ba.hasOwnProperty(e.length))\n throw new R(\n `Function '${c}' called with an invalid number of arguments (${e.length}) - expects one of (${a[b].Ba})!`,\n );\n return a[b].Ba[e.length].apply(this, e);\n };\n a[b].Ba = [];\n a[b].Ba[d.Oa] = d;\n }\n },\n ab = (a, b, c) => {\n if (k.hasOwnProperty(a)) {\n if (void 0 === c || (void 0 !== k[a].Ba && void 0 !== k[a].Ba[c]))\n throw new R(`Cannot register public name '${a}' twice`);\n $a(k, a, a);\n if (k.hasOwnProperty(c))\n throw new R(`Cannot register multiple overloads of a function with the same number of arguments (${c})!`);\n k[a].Ba[c] = b;\n } else (k[a] = b), void 0 !== c && (k[a].vb = c);\n },\n bb = (a) => {\n if (void 0 === a) return '_unknown';\n a = a.replace(/[^a-zA-Z0-9_]/g, '$');\n var b = a.charCodeAt(0);\n return 48 <= b && 57 >= b ? `_${a}` : a;\n };\n function cb(a, b, c, d, e, f, l, h) {\n this.name = a;\n this.constructor = b;\n this.La = c;\n this.Fa = d;\n this.Ca = e;\n this.cb = f;\n this.Na = l;\n this.ab = h;\n this.kb = [];\n }\n var db = (a, b, c) => {\n for (; b !== c; ) {\n if (!b.Na) throw new R(`Expected null or instance of ${c.name}, got an instance of ${b.name}`);\n a = b.Na(a);\n b = b.Ca;\n }\n return a;\n };\n function eb(a, b) {\n if (null === b) {\n if (this.Ta) throw new R(`null is not a valid ${this.name}`);\n return 0;\n }\n if (!b.ma) throw new R(`Cannot pass \"${fb(b)}\" as a ${this.name}`);\n if (!b.ma.ya) throw new R(`Cannot pass deleted object as a pointer of type ${this.name}`);\n return db(b.ma.ya, b.ma.za.xa, this.xa);\n }\n function gb(a, b) {\n if (null === b) {\n if (this.Ta) throw new R(`null is not a valid ${this.name}`);\n if (this.Qa) {\n var c = this.Ua();\n null !== a && a.push(this.Fa, c);\n return c;\n }\n return 0;\n }\n if (!b || !b.ma) throw new R(`Cannot pass \"${fb(b)}\" as a ${this.name}`);\n if (!b.ma.ya) throw new R(`Cannot pass deleted object as a pointer of type ${this.name}`);\n if (!this.Pa && b.ma.za.Pa)\n throw new R(\n `Cannot convert argument of type ${b.ma.Da ? b.ma.Da.name : b.ma.za.name} to parameter type ${this.name}`,\n );\n c = db(b.ma.ya, b.ma.za.xa, this.xa);\n if (this.Qa) {\n if (void 0 === b.ma.Aa) throw new R('Passing raw pointer to smart pointer is illegal');\n switch (this.pb) {\n case 0:\n if (b.ma.Da === this) c = b.ma.Aa;\n else\n throw new R(\n `Cannot convert argument of type ${b.ma.Da ? b.ma.Da.name : b.ma.za.name} to parameter type ${\n this.name\n }`,\n );\n break;\n case 1:\n c = b.ma.Aa;\n break;\n case 2:\n if (b.ma.Da === this) c = b.ma.Aa;\n else {\n var d = b.clone();\n c = this.lb(\n c,\n hb(() => d['delete']()),\n );\n null !== a && a.push(this.Fa, c);\n }\n break;\n default:\n throw new R('Unsupporting sharing policy');\n }\n }\n return c;\n }\n function ib(a, b) {\n if (null === b) {\n if (this.Ta) throw new R(`null is not a valid ${this.name}`);\n return 0;\n }\n if (!b.ma) throw new R(`Cannot pass \"${fb(b)}\" as a ${this.name}`);\n if (!b.ma.ya) throw new R(`Cannot pass deleted object as a pointer of type ${this.name}`);\n if (b.ma.za.Pa) throw new R(`Cannot convert argument of type ${b.ma.za.name} to parameter type ${this.name}`);\n return db(b.ma.ya, b.ma.za.xa, this.xa);\n }\n function jb(a, b, c, d, e, f, l, h, n, m, p) {\n this.name = a;\n this.xa = b;\n this.Ta = c;\n this.Pa = d;\n this.Qa = e;\n this.jb = f;\n this.pb = l;\n this.Za = h;\n this.Ua = n;\n this.lb = m;\n this.Fa = p;\n e || void 0 !== b.Ca ? (this.toWireType = gb) : ((this.toWireType = d ? eb : ib), (this.Ea = null));\n }\n var kb = (a, b, c) => {\n if (!k.hasOwnProperty(a)) throw new Ia('Replacing nonexistent public symbol');\n void 0 !== k[a].Ba && void 0 !== c ? (k[a].Ba[c] = b) : ((k[a] = b), (k[a].Oa = c));\n },\n S,\n lb = (a, b, c = []) => {\n a.includes('j') ? ((a = a.replace(/p/g, 'i')), (b = (0, k['dynCall_' + a])(b, ...c))) : (b = S.get(b)(...c));\n return b;\n },\n mb =\n (a, b) =>\n (...c) =>\n lb(a, b, c),\n T = (a, b) => {\n a = Q(a);\n var c = a.includes('j') ? mb(a, b) : S.get(b);\n if ('function' != typeof c) throw new R(`unknown function pointer with signature ${a}: ${b}`);\n return c;\n },\n nb,\n pb = (a) => {\n a = ob(a);\n var b = Q(a);\n U(a);\n return b;\n },\n qb = (a, b) => {\n function c(f) {\n e[f] || M[f] || (Ha[f] ? Ha[f].forEach(c) : (d.push(f), (e[f] = !0)));\n }\n var d = [],\n e = {};\n b.forEach(c);\n throw new nb(`${a}: ` + d.map(pb).join([', ']));\n },\n rb = (a, b) => {\n for (var c = [], d = 0; d < a; d++) c.push(F[(b + 4 * d) >> 2]);\n return c;\n };\n function sb(a) {\n for (var b = 1; b < a.length; ++b) if (null !== a[b] && void 0 === a[b].Ea) return !0;\n return !1;\n }\n function tb(a, b, c, d, e) {\n var f = b.length;\n if (2 > f) throw new R(\"argTypes array size mismatch! Must at least get return value and 'this' types!\");\n var l = null !== b[1] && null !== c,\n h = sb(b),\n n = 'void' !== b[0].name,\n m = f - 2,\n p = Array(m),\n u = [],\n v = [];\n return Za(a, function (...g) {\n if (g.length !== m) throw new R(`function ${a} called with ${g.length} arguments, expected ${m}`);\n v.length = 0;\n u.length = l ? 2 : 1;\n u[0] = e;\n if (l) {\n var q = b[1].toWireType(v, this);\n u[1] = q;\n }\n for (var r = 0; r < m; ++r) (p[r] = b[r + 2].toWireType(v, g[r])), u.push(p[r]);\n g = d(...u);\n if (h) Ga(v);\n else\n for (r = l ? 1 : 2; r < b.length; r++) {\n var z = 1 === r ? q : p[r - 2];\n null !== b[r].Ea && b[r].Ea(z);\n }\n q = n ? b[0].fromWireType(g) : void 0;\n return q;\n });\n }\n var ub = (a) => {\n a = a.trim();\n const b = a.indexOf('(');\n return -1 !== b ? a.substr(0, b) : a;\n },\n vb = [],\n V = [],\n wb = (a) => {\n 9 < a && 0 === --V[a + 1] && ((V[a] = void 0), vb.push(a));\n },\n yb = (a) => {\n if (!a) throw new R('Cannot use deleted val. handle = ' + a);\n return V[a];\n },\n hb = (a) => {\n switch (a) {\n case void 0:\n return 2;\n case null:\n return 4;\n case !0:\n return 6;\n case !1:\n return 8;\n default:\n const b = vb.pop() || V.length;\n V[b] = a;\n V[b + 1] = 1;\n return b;\n }\n },\n zb = {\n name: 'emscripten::val',\n fromWireType: (a) => {\n var b = yb(a);\n wb(a);\n return b;\n },\n toWireType: (a, b) => hb(b),\n argPackAdvance: 8,\n readValueFromPointer: K,\n Ea: null,\n },\n Ab = (a, b, c) => {\n switch (b) {\n case 1:\n return c\n ? function (d) {\n return this.fromWireType(y[d]);\n }\n : function (d) {\n return this.fromWireType(A[d]);\n };\n case 2:\n return c\n ? function (d) {\n return this.fromWireType(B[d >> 1]);\n }\n : function (d) {\n return this.fromWireType(C[d >> 1]);\n };\n case 4:\n return c\n ? function (d) {\n return this.fromWireType(E[d >> 2]);\n }\n : function (d) {\n return this.fromWireType(F[d >> 2]);\n };\n default:\n throw new TypeError(`invalid integer width (${b}): ${a}`);\n }\n },\n Bb = (a, b) => {\n var c = M[a];\n if (void 0 === c) throw ((a = `${b} has unknown type ${pb(a)}`), new R(a));\n return c;\n },\n fb = (a) => {\n if (null === a) return 'null';\n var b = typeof a;\n return 'object' === b || 'array' === b || 'function' === b ? a.toString() : '' + a;\n },\n Cb = (a, b) => {\n switch (b) {\n case 4:\n return function (c) {\n return this.fromWireType(ja[c >> 2]);\n };\n case 8:\n return function (c) {\n return this.fromWireType(ka[c >> 3]);\n };\n default:\n throw new TypeError(`invalid float width (${b}): ${a}`);\n }\n },\n Db = (a, b, c) => {\n switch (b) {\n case 1:\n return c ? (d) => y[d] : (d) => A[d];\n case 2:\n return c ? (d) => B[d >> 1] : (d) => C[d >> 1];\n case 4:\n return c ? (d) => E[d >> 2] : (d) => F[d >> 2];\n default:\n throw new TypeError(`invalid integer width (${b}): ${a}`);\n }\n },\n Eb = 'undefined' != typeof TextDecoder ? new TextDecoder('utf-16le') : void 0,\n Fb = (a, b) => {\n var c = a >> 1;\n for (var d = c + b / 2; !(c >= d) && C[c]; ) ++c;\n c <<= 1;\n if (32 < c - a && Eb) return Eb.decode(A.subarray(a, c));\n c = '';\n for (d = 0; !(d >= b / 2); ++d) {\n var e = B[(a + 2 * d) >> 1];\n if (0 == e) break;\n c += String.fromCharCode(e);\n }\n return c;\n },\n Gb = (a, b, c) => {\n c ??= 2147483647;\n if (2 > c) return 0;\n c -= 2;\n var d = b;\n c = c < 2 * a.length ? c / 2 : a.length;\n for (var e = 0; e < c; ++e) (B[b >> 1] = a.charCodeAt(e)), (b += 2);\n B[b >> 1] = 0;\n return b - d;\n },\n Hb = (a) => 2 * a.length,\n Ib = (a, b) => {\n for (var c = 0, d = ''; !(c >= b / 4); ) {\n var e = E[(a + 4 * c) >> 2];\n if (0 == e) break;\n ++c;\n 65536 <= e\n ? ((e -= 65536), (d += String.fromCharCode(55296 | (e >> 10), 56320 | (e & 1023))))\n : (d += String.fromCharCode(e));\n }\n return d;\n },\n Jb = (a, b, c) => {\n c ??= 2147483647;\n if (4 > c) return 0;\n var d = b;\n c = d + c - 4;\n for (var e = 0; e < a.length; ++e) {\n var f = a.charCodeAt(e);\n if (55296 <= f && 57343 >= f) {\n var l = a.charCodeAt(++e);\n f = (65536 + ((f & 1023) << 10)) | (l & 1023);\n }\n E[b >> 2] = f;\n b += 4;\n if (b + 4 > c) break;\n }\n E[b >> 2] = 0;\n return b - d;\n },\n Kb = (a) => {\n for (var b = 0, c = 0; c < a.length; ++c) {\n var d = a.charCodeAt(c);\n 55296 <= d && 57343 >= d && ++c;\n b += 4;\n }\n return b;\n },\n Lb = [],\n Mb = (a) => {\n var b = Lb.length;\n Lb.push(a);\n return b;\n },\n Nb = (a, b) => {\n for (var c = Array(a), d = 0; d < a; ++d) c[d] = Bb(F[(b + 4 * d) >> 2], 'parameter ' + d);\n return c;\n },\n Ob = Reflect.construct,\n Pb = {},\n Rb = () => {\n if (!Qb) {\n var a = {\n USER: 'web_user',\n LOGNAME: 'web_user',\n PATH: '/',\n PWD: '/',\n HOME: '/home/web_user',\n LANG:\n (('object' == typeof navigator && navigator.languages && navigator.languages[0]) || 'C').replace(\n '-',\n '_',\n ) + '.UTF-8',\n _: da || './this.program',\n },\n b;\n for (b in Pb) void 0 === Pb[b] ? delete a[b] : (a[b] = Pb[b]);\n var c = [];\n for (b in a) c.push(`${b}=${a[b]}`);\n Qb = c;\n }\n return Qb;\n },\n Qb,\n Sb = [null, [], []],\n Tb = () => {\n if ('object' == typeof crypto && 'function' == typeof crypto.getRandomValues)\n return (a) => crypto.getRandomValues(a);\n ra('initRandomDevice');\n },\n Ub = (a) => (Ub = Tb())(a),\n Vb = (a) => 0 === a % 4 && (0 !== a % 100 || 0 === a % 400),\n Wb = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31],\n Xb = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];\n function Yb(a) {\n var b = Array(Da(a) + 1);\n Ea(a, b, 0, b.length);\n return b;\n }\n var Zb = (a, b, c, d) => {\n function e(g, q, r) {\n for (g = 'number' == typeof g ? g.toString() : g || ''; g.length < q; ) g = r[0] + g;\n return g;\n }\n function f(g, q) {\n return e(g, q, '0');\n }\n function l(g, q) {\n function r(N) {\n return 0 > N ? -1 : 0 < N ? 1 : 0;\n }\n var z;\n 0 === (z = r(g.getFullYear() - q.getFullYear())) &&\n 0 === (z = r(g.getMonth() - q.getMonth())) &&\n (z = r(g.getDate() - q.getDate()));\n return z;\n }\n function h(g) {\n switch (g.getDay()) {\n case 0:\n return new Date(g.getFullYear() - 1, 11, 29);\n case 1:\n return g;\n case 2:\n return new Date(g.getFullYear(), 0, 3);\n case 3:\n return new Date(g.getFullYear(), 0, 2);\n case 4:\n return new Date(g.getFullYear(), 0, 1);\n case 5:\n return new Date(g.getFullYear() - 1, 11, 31);\n case 6:\n return new Date(g.getFullYear() - 1, 11, 30);\n }\n }\n function n(g) {\n var q = g.Ia;\n for (g = new Date(new Date(g.Ja + 1900, 0, 1).getTime()); 0 < q; ) {\n var r = g.getMonth(),\n z = (Vb(g.getFullYear()) ? Wb : Xb)[r];\n if (q > z - g.getDate())\n (q -= z - g.getDate() + 1),\n g.setDate(1),\n 11 > r ? g.setMonth(r + 1) : (g.setMonth(0), g.setFullYear(g.getFullYear() + 1));\n else {\n g.setDate(g.getDate() + q);\n break;\n }\n }\n r = new Date(g.getFullYear() + 1, 0, 4);\n q = h(new Date(g.getFullYear(), 0, 4));\n r = h(r);\n return 0 >= l(q, g) ? (0 >= l(r, g) ? g.getFullYear() + 1 : g.getFullYear()) : g.getFullYear() - 1;\n }\n var m = F[(d + 40) >> 2];\n d = {\n sb: E[d >> 2],\n rb: E[(d + 4) >> 2],\n Ra: E[(d + 8) >> 2],\n Va: E[(d + 12) >> 2],\n Sa: E[(d + 16) >> 2],\n Ja: E[(d + 20) >> 2],\n Ga: E[(d + 24) >> 2],\n Ia: E[(d + 28) >> 2],\n wb: E[(d + 32) >> 2],\n qb: E[(d + 36) >> 2],\n tb: m ? (m ? J(A, m) : '') : '',\n };\n c = c ? J(A, c) : '';\n m = {\n '%c': '%a %b %d %H:%M:%S %Y',\n '%D': '%m/%d/%y',\n '%F': '%Y-%m-%d',\n '%h': '%b',\n '%r': '%I:%M:%S %p',\n '%R': '%H:%M',\n '%T': '%H:%M:%S',\n '%x': '%m/%d/%y',\n '%X': '%H:%M:%S',\n '%Ec': '%c',\n '%EC': '%C',\n '%Ex': '%m/%d/%y',\n '%EX': '%H:%M:%S',\n '%Ey': '%y',\n '%EY': '%Y',\n '%Od': '%d',\n '%Oe': '%e',\n '%OH': '%H',\n '%OI': '%I',\n '%Om': '%m',\n '%OM': '%M',\n '%OS': '%S',\n '%Ou': '%u',\n '%OU': '%U',\n '%OV': '%V',\n '%Ow': '%w',\n '%OW': '%W',\n '%Oy': '%y',\n };\n for (var p in m) c = c.replace(new RegExp(p, 'g'), m[p]);\n var u = 'Sunday Monday Tuesday Wednesday Thursday Friday Saturday'.split(' '),\n v = 'January February March April May June July August September October November December'.split(' ');\n m = {\n '%a': (g) => u[g.Ga].substring(0, 3),\n '%A': (g) => u[g.Ga],\n '%b': (g) => v[g.Sa].substring(0, 3),\n '%B': (g) => v[g.Sa],\n '%C': (g) => f(((g.Ja + 1900) / 100) | 0, 2),\n '%d': (g) => f(g.Va, 2),\n '%e': (g) => e(g.Va, 2, ' '),\n '%g': (g) => n(g).toString().substring(2),\n '%G': n,\n '%H': (g) => f(g.Ra, 2),\n '%I': (g) => {\n g = g.Ra;\n 0 == g ? (g = 12) : 12 < g && (g -= 12);\n return f(g, 2);\n },\n '%j': (g) => {\n for (var q = 0, r = 0; r <= g.Sa - 1; q += (Vb(g.Ja + 1900) ? Wb : Xb)[r++]);\n return f(g.Va + q, 3);\n },\n '%m': (g) => f(g.Sa + 1, 2),\n '%M': (g) => f(g.rb, 2),\n '%n': () => '\\n',\n '%p': (g) => (0 <= g.Ra && 12 > g.Ra ? 'AM' : 'PM'),\n '%S': (g) => f(g.sb, 2),\n '%t': () => '\\t',\n '%u': (g) => g.Ga || 7,\n '%U': (g) => f(Math.floor((g.Ia + 7 - g.Ga) / 7), 2),\n '%V': (g) => {\n var q = Math.floor((g.Ia + 7 - ((g.Ga + 6) % 7)) / 7);\n 2 >= (g.Ga + 371 - g.Ia - 2) % 7 && q++;\n if (q) 53 == q && ((r = (g.Ga + 371 - g.Ia) % 7), 4 == r || (3 == r && Vb(g.Ja)) || (q = 1));\n else {\n q = 52;\n var r = (g.Ga + 7 - g.Ia - 1) % 7;\n (4 == r || (5 == r && Vb((g.Ja % 400) - 1))) && q++;\n }\n return f(q, 2);\n },\n '%w': (g) => g.Ga,\n '%W': (g) => f(Math.floor((g.Ia + 7 - ((g.Ga + 6) % 7)) / 7), 2),\n '%y': (g) => (g.Ja + 1900).toString().substring(2),\n '%Y': (g) => g.Ja + 1900,\n '%z': (g) => {\n g = g.qb;\n var q = 0 <= g;\n g = Math.abs(g) / 60;\n return (q ? '+' : '-') + String('0000' + ((g / 60) * 100 + (g % 60))).slice(-4);\n },\n '%Z': (g) => g.tb,\n '%%': () => '%',\n };\n c = c.replace(/%%/g, '\\x00\\x00');\n for (p in m) c.includes(p) && (c = c.replace(new RegExp(p, 'g'), m[p](d)));\n c = c.replace(/\\0\\0/g, '%');\n p = Yb(c);\n if (p.length > b) return 0;\n y.set(p, a);\n return p.length - 1;\n };\n Ia = k.InternalError = class extends Error {\n constructor(a) {\n super(a);\n this.name = 'InternalError';\n }\n };\n for (var $b = Array(256), ac = 0; 256 > ac; ++ac) $b[ac] = String.fromCharCode(ac);\n Ja = $b;\n R = k.BindingError = class extends Error {\n constructor(a) {\n super(a);\n this.name = 'BindingError';\n }\n };\n Object.assign(Ya.prototype, {\n isAliasOf: function (a) {\n if (!(this instanceof Ya && a instanceof Ya)) return !1;\n var b = this.ma.za.xa,\n c = this.ma.ya;\n a.ma = a.ma;\n var d = a.ma.za.xa;\n for (a = a.ma.ya; b.Ca; ) (c = b.Na(c)), (b = b.Ca);\n for (; d.Ca; ) (a = d.Na(a)), (d = d.Ca);\n return b === d && c === a;\n },\n clone: function () {\n this.ma.ya || La(this);\n if (this.ma.Ma) return (this.ma.count.value += 1), this;\n var a = Wa,\n b = Object,\n c = b.create,\n d = Object.getPrototypeOf(this),\n e = this.ma;\n a = a(\n c.call(b, d, {\n ma: { value: { count: e.count, Ka: e.Ka, Ma: e.Ma, ya: e.ya, za: e.za, Aa: e.Aa, Da: e.Da } },\n }),\n );\n a.ma.count.value += 1;\n a.ma.Ka = !1;\n return a;\n },\n ['delete']() {\n this.ma.ya || La(this);\n if (this.ma.Ka && !this.ma.Ma) throw new R('Object already scheduled for deletion');\n Oa(this);\n var a = this.ma;\n --a.count.value;\n 0 === a.count.value && (a.Aa ? a.Da.Fa(a.Aa) : a.za.xa.Fa(a.ya));\n this.ma.Ma || ((this.ma.Aa = void 0), (this.ma.ya = void 0));\n },\n isDeleted: function () {\n return !this.ma.ya;\n },\n deleteLater: function () {\n this.ma.ya || La(this);\n if (this.ma.Ka && !this.ma.Ma) throw new R('Object already scheduled for deletion');\n Ra.push(this);\n 1 === Ra.length && Ta && Ta(Sa);\n this.ma.Ka = !0;\n return this;\n },\n });\n k.getInheritedInstanceCount = () => Object.keys(Ua).length;\n k.getLiveInheritedInstances = () => {\n var a = [],\n b;\n for (b in Ua) Ua.hasOwnProperty(b) && a.push(Ua[b]);\n return a;\n };\n k.flushPendingDeletes = Sa;\n k.setDelayFunction = (a) => {\n Ta = a;\n Ra.length && Ta && Ta(Sa);\n };\n Object.assign(jb.prototype, {\n eb(a) {\n this.Za && (a = this.Za(a));\n return a;\n },\n Xa(a) {\n this.Fa?.(a);\n },\n argPackAdvance: 8,\n readValueFromPointer: K,\n fromWireType: function (a) {\n function b() {\n return this.Qa\n ? Xa(this.xa.La, { za: this.jb, ya: c, Da: this, Aa: a })\n : Xa(this.xa.La, { za: this, ya: a });\n }\n var c = this.eb(a);\n if (!c) return this.Xa(a), null;\n var d = Va(this.xa, c);\n if (void 0 !== d) {\n if (0 === d.ma.count.value) return (d.ma.ya = c), (d.ma.Aa = a), d.clone();\n d = d.clone();\n this.Xa(a);\n return d;\n }\n d = this.xa.cb(c);\n d = Qa[d];\n if (!d) return b.call(this);\n d = this.Pa ? d.$a : d.pointerType;\n var e = Pa(c, this.xa, d.xa);\n return null === e\n ? b.call(this)\n : this.Qa\n ? Xa(d.xa.La, { za: d, ya: e, Da: this, Aa: a })\n : Xa(d.xa.La, { za: d, ya: e });\n },\n });\n nb = k.UnboundTypeError = ((a, b) => {\n var c = Za(b, function (d) {\n this.name = b;\n this.message = d;\n d = Error(d).stack;\n void 0 !== d && (this.stack = this.toString() + '\\n' + d.replace(/^Error(:[^\\n]*)?\\n/, ''));\n });\n c.prototype = Object.create(a.prototype);\n c.prototype.constructor = c;\n c.prototype.toString = function () {\n return void 0 === this.message ? this.name : `${this.name}: ${this.message}`;\n };\n return c;\n })(Error, 'UnboundTypeError');\n V.push(0, 1, void 0, 1, null, 1, !0, 1, !1, 1);\n k.count_emval_handles = () => V.length / 2 - 5 - vb.length;\n var mc = {\n c: (a, b, c, d) => {\n ra(\n `Assertion failed: ${a ? J(A, a) : ''}, at: ` +\n [b ? (b ? J(A, b) : '') : 'unknown filename', c, d ? (d ? J(A, d) : '') : 'unknown function'],\n );\n },\n m: (a, b, c) => {\n var d = new Aa(a);\n F[(d.ya + 16) >> 2] = 0;\n F[(d.ya + 4) >> 2] = b;\n F[(d.ya + 8) >> 2] = c;\n Ba = a;\n Ca++;\n throw Ba;\n },\n B: function () {\n return 0;\n },\n P: () => {},\n M: () => {},\n R: function () {\n return 0;\n },\n N: () => {},\n A: function () {},\n O: () => {},\n v: (a) => {\n var b = Fa[a];\n delete Fa[a];\n var c = b.Ua,\n d = b.Fa,\n e = b.Ya,\n f = e.map((l) => l.hb).concat(e.map((l) => l.nb));\n P([a], f, (l) => {\n var h = {};\n e.forEach((n, m) => {\n var p = l[m],\n u = n.fb,\n v = n.gb,\n g = l[m + e.length],\n q = n.mb,\n r = n.ob;\n h[n.bb] = {\n read: (z) => p.fromWireType(u(v, z)),\n write: (z, N) => {\n var D = [];\n q(r, z, g.toWireType(D, N));\n Ga(D);\n },\n };\n });\n return [\n {\n name: b.name,\n fromWireType: (n) => {\n var m = {},\n p;\n for (p in h) m[p] = h[p].read(n);\n d(n);\n return m;\n },\n toWireType: (n, m) => {\n for (var p in h) if (!(p in m)) throw new TypeError(`Missing field: \"${p}\"`);\n var u = c();\n for (p in h) h[p].write(u, m[p]);\n null !== n && n.push(d, u);\n return u;\n },\n argPackAdvance: 8,\n readValueFromPointer: K,\n Ea: d,\n },\n ];\n });\n },\n I: () => {},\n Y: (a, b, c, d) => {\n b = Q(b);\n O(a, {\n name: b,\n fromWireType: function (e) {\n return !!e;\n },\n toWireType: function (e, f) {\n return f ? c : d;\n },\n argPackAdvance: 8,\n readValueFromPointer: function (e) {\n return this.fromWireType(A[e]);\n },\n Ea: null,\n });\n },\n r: (a, b, c, d, e, f, l, h, n, m, p, u, v) => {\n p = Q(p);\n f = T(e, f);\n h &&= T(l, h);\n m &&= T(n, m);\n v = T(u, v);\n var g = bb(p);\n ab(g, function () {\n qb(`Cannot construct ${p} due to unbound types`, [d]);\n });\n P([a, b, c], d ? [d] : [], (q) => {\n q = q[0];\n if (d) {\n var r = q.xa;\n var z = r.La;\n } else z = Ya.prototype;\n q = Za(p, function (...Na) {\n if (Object.getPrototypeOf(this) !== N) throw new R(\"Use 'new' to construct \" + p);\n if (void 0 === D.Ha) throw new R(p + ' has no accessible constructor');\n var xb = D.Ha[Na.length];\n if (void 0 === xb)\n throw new R(\n `Tried to invoke ctor of ${p} with invalid number of parameters (${\n Na.length\n }) - expected (${Object.keys(D.Ha).toString()}) parameters instead!`,\n );\n return xb.apply(this, Na);\n });\n var N = Object.create(z, { constructor: { value: q } });\n q.prototype = N;\n var D = new cb(p, q, N, v, r, f, h, m);\n if (D.Ca) {\n var ia;\n (ia = D.Ca).Wa ?? (ia.Wa = []);\n D.Ca.Wa.push(D);\n }\n r = new jb(p, D, !0, !1, !1);\n ia = new jb(p + '*', D, !1, !1, !1);\n z = new jb(p + ' const*', D, !1, !0, !1);\n Qa[a] = { pointerType: ia, $a: z };\n kb(g, q);\n return [r, ia, z];\n });\n },\n q: (a, b, c, d, e, f) => {\n var l = rb(b, c);\n e = T(d, e);\n P([], [a], (h) => {\n h = h[0];\n var n = `constructor ${h.name}`;\n void 0 === h.xa.Ha && (h.xa.Ha = []);\n if (void 0 !== h.xa.Ha[b - 1])\n throw new R(\n `Cannot register multiple constructors with identical number of parameters (${b - 1}) for class '${\n h.name\n }'! Overload resolution is currently only performed using the parameter count, not actual type info!`,\n );\n h.xa.Ha[b - 1] = () => {\n qb(`Cannot construct ${h.name} due to unbound types`, l);\n };\n P([], l, (m) => {\n m.splice(1, 0, null);\n h.xa.Ha[b - 1] = tb(n, m, null, e, f);\n return [];\n });\n return [];\n });\n },\n f: (a, b, c, d, e, f, l, h) => {\n var n = rb(c, d);\n b = Q(b);\n b = ub(b);\n f = T(e, f);\n P([], [a], (m) => {\n function p() {\n qb(`Cannot call ${u} due to unbound types`, n);\n }\n m = m[0];\n var u = `${m.name}.${b}`;\n b.startsWith('@@') && (b = Symbol[b.substring(2)]);\n h && m.xa.kb.push(b);\n var v = m.xa.La,\n g = v[b];\n void 0 === g || (void 0 === g.Ba && g.className !== m.name && g.Oa === c - 2)\n ? ((p.Oa = c - 2), (p.className = m.name), (v[b] = p))\n : ($a(v, b, u), (v[b].Ba[c - 2] = p));\n P([], n, (q) => {\n q = tb(u, q, m, f, l);\n void 0 === v[b].Ba ? ((q.Oa = c - 2), (v[b] = q)) : (v[b].Ba[c - 2] = q);\n return [];\n });\n return [];\n });\n },\n X: (a) => O(a, zb),\n x: (a, b, c, d) => {\n function e() {}\n b = Q(b);\n e.values = {};\n O(a, {\n name: b,\n constructor: e,\n fromWireType: function (f) {\n return this.constructor.values[f];\n },\n toWireType: (f, l) => l.value,\n argPackAdvance: 8,\n readValueFromPointer: Ab(b, c, d),\n Ea: null,\n });\n ab(b, e);\n },\n k: (a, b, c) => {\n var d = Bb(a, 'enum');\n b = Q(b);\n a = d.constructor;\n d = Object.create(d.constructor.prototype, {\n value: { value: c },\n constructor: { value: Za(`${d.name}_${b}`, function () {}) },\n });\n a.values[c] = d;\n a[b] = d;\n },\n C: (a, b, c) => {\n b = Q(b);\n O(a, {\n name: b,\n fromWireType: (d) => d,\n toWireType: (d, e) => e,\n argPackAdvance: 8,\n readValueFromPointer: Cb(b, c),\n Ea: null,\n });\n },\n E: (a, b, c, d, e, f) => {\n var l = rb(b, c);\n a = Q(a);\n a = ub(a);\n e = T(d, e);\n ab(\n a,\n function () {\n qb(`Cannot call ${a} due to unbound types`, l);\n },\n b - 1,\n );\n P([], l, (h) => {\n kb(a, tb(a, [h[0], null].concat(h.slice(1)), null, e, f), b - 1);\n return [];\n });\n },\n l: (a, b, c, d, e) => {\n b = Q(b);\n -1 === e && (e = 4294967295);\n e = (h) => h;\n if (0 === d) {\n var f = 32 - 8 * c;\n e = (h) => (h << f) >>> f;\n }\n var l = b.includes('unsigned')\n ? function (h, n) {\n return n >>> 0;\n }\n : function (h, n) {\n return n;\n };\n O(a, {\n name: b,\n fromWireType: e,\n toWireType: l,\n argPackAdvance: 8,\n readValueFromPointer: Db(b, c, 0 !== d),\n Ea: null,\n });\n },\n g: (a, b, c) => {\n function d(f) {\n return new e(y.buffer, F[(f + 4) >> 2], F[f >> 2]);\n }\n var e = [Int8Array, Uint8Array, Int16Array, Uint16Array, Int32Array, Uint32Array, Float32Array, Float64Array][\n b\n ];\n c = Q(c);\n O(a, { name: c, fromWireType: d, argPackAdvance: 8, readValueFromPointer: d }, { ib: !0 });\n },\n w: (a) => {\n O(a, zb);\n },\n ca: (a, b, c, d, e, f, l, h, n, m, p, u) => {\n c = Q(c);\n f = T(e, f);\n h = T(l, h);\n m = T(n, m);\n u = T(p, u);\n P([a], [b], (v) => {\n v = v[0];\n return [new jb(c, v.xa, !1, !1, !0, v, d, f, h, m, u)];\n });\n },\n D: (a, b) => {\n b = Q(b);\n var c = 'std::string' === b;\n O(a, {\n name: b,\n fromWireType: function (d) {\n var e = F[d >> 2],\n f = d + 4;\n if (c)\n for (var l = f, h = 0; h <= e; ++h) {\n var n = f + h;\n if (h == e || 0 == A[n]) {\n l = l ? J(A, l, n - l) : '';\n if (void 0 === m) var m = l;\n else (m += String.fromCharCode(0)), (m += l);\n l = n + 1;\n }\n }\n else {\n m = Array(e);\n for (h = 0; h < e; ++h) m[h] = String.fromCharCode(A[f + h]);\n m = m.join('');\n }\n U(d);\n return m;\n },\n toWireType: function (d, e) {\n e instanceof ArrayBuffer && (e = new Uint8Array(e));\n var f = 'string' == typeof e;\n if (!(f || e instanceof Uint8Array || e instanceof Uint8ClampedArray || e instanceof Int8Array))\n throw new R('Cannot pass non-string to std::string');\n var l = c && f ? Da(e) : e.length;\n var h = bc(4 + l + 1),\n n = h + 4;\n F[h >> 2] = l;\n if (c && f) Ea(e, A, n, l + 1);\n else if (f)\n for (f = 0; f < l; ++f) {\n var m = e.charCodeAt(f);\n if (255 < m) throw (U(n), new R('String has UTF-16 code units that do not fit in 8 bits'));\n A[n + f] = m;\n }\n else for (f = 0; f < l; ++f) A[n + f] = e[f];\n null !== d && d.push(U, h);\n return h;\n },\n argPackAdvance: 8,\n readValueFromPointer: K,\n Ea(d) {\n U(d);\n },\n });\n },\n u: (a, b, c) => {\n c = Q(c);\n if (2 === b) {\n var d = Fb;\n var e = Gb;\n var f = Hb;\n var l = (h) => C[h >> 1];\n } else 4 === b && ((d = Ib), (e = Jb), (f = Kb), (l = (h) => F[h >> 2]));\n O(a, {\n name: c,\n fromWireType: (h) => {\n for (var n = F[h >> 2], m, p = h + 4, u = 0; u <= n; ++u) {\n var v = h + 4 + u * b;\n if (u == n || 0 == l(v))\n (p = d(p, v - p)), void 0 === m ? (m = p) : ((m += String.fromCharCode(0)), (m += p)), (p = v + b);\n }\n U(h);\n return m;\n },\n toWireType: (h, n) => {\n if ('string' != typeof n) throw new R(`Cannot pass non-string to C++ string type ${c}`);\n var m = f(n),\n p = bc(4 + m + b);\n F[p >> 2] = m / b;\n e(n, p + 4, m + b);\n null !== h && h.push(U, p);\n return p;\n },\n argPackAdvance: 8,\n readValueFromPointer: K,\n Ea(h) {\n U(h);\n },\n });\n },\n s: (a, b, c, d, e, f) => {\n Fa[a] = { name: Q(b), Ua: T(c, d), Fa: T(e, f), Ya: [] };\n },\n j: (a, b, c, d, e, f, l, h, n, m) => {\n Fa[a].Ya.push({ bb: Q(b), hb: c, fb: T(d, e), gb: f, nb: l, mb: T(h, n), ob: m });\n },\n Z: (a, b) => {\n b = Q(b);\n O(a, { ub: !0, name: b, argPackAdvance: 0, fromWireType: () => {}, toWireType: () => {} });\n },\n J: () => {\n throw Infinity;\n },\n aa: (a, b, c, d) => {\n a = Lb[a];\n b = yb(b);\n return a(null, b, c, d);\n },\n F: wb,\n $: (a, b, c) => {\n var d = Nb(a, b),\n e = d.shift();\n a--;\n var f = Array(a);\n b = `methodCaller<(${d.map((l) => l.name).join(', ')}) => ${e.name}>`;\n return Mb(\n Za(b, (l, h, n, m) => {\n for (var p = 0, u = 0; u < a; ++u) (f[u] = d[u].readValueFromPointer(m + p)), (p += d[u].argPackAdvance);\n h = 1 === c ? Ob(h, f) : h.apply(l, f);\n l = [];\n h = e.toWireType(l, h);\n l.length && (F[n >> 2] = hb(l));\n return h;\n }),\n );\n },\n ba: (a) => {\n 9 < a && (V[a + 1] += 1);\n },\n _: (a) => {\n var b = yb(a);\n Ga(b);\n wb(a);\n },\n o: (a, b) => {\n a = Bb(a, '_emval_take_value');\n a = a.readValueFromPointer(b);\n return hb(a);\n },\n W: () => {\n ra('');\n },\n V: () => performance.now(),\n L: (a) => {\n var b = A.length;\n a >>>= 0;\n if (2147483648 < a) return !1;\n for (var c = 1; 4 >= c; c *= 2) {\n var d = b * (1 + 0.2 / c);\n d = Math.min(d, a + 100663296);\n var e = Math;\n d = Math.max(a, d);\n a: {\n e =\n (e.min.call(e, 2147483648, d + ((65536 - (d % 65536)) % 65536)) - fa.buffer.byteLength + 65535) / 65536;\n try {\n fa.grow(e);\n la();\n var f = 1;\n break a;\n } catch (l) {}\n f = void 0;\n }\n if (f) return !0;\n }\n return !1;\n },\n S: (a, b) => {\n var c = 0;\n Rb().forEach((d, e) => {\n var f = b + c;\n e = F[(a + 4 * e) >> 2] = f;\n for (f = 0; f < d.length; ++f) y[e++] = d.charCodeAt(f);\n y[e] = 0;\n c += d.length + 1;\n });\n return 0;\n },\n T: (a, b) => {\n var c = Rb();\n F[a >> 2] = c.length;\n var d = 0;\n c.forEach((e) => (d += e.length + 1));\n F[b >> 2] = d;\n return 0;\n },\n t: () => 52,\n z: () => 52,\n H: function () {\n return 70;\n },\n Q: (a, b, c, d) => {\n for (var e = 0, f = 0; f < c; f++) {\n var l = F[b >> 2],\n h = F[(b + 4) >> 2];\n b += 8;\n for (var n = 0; n < h; n++) {\n var m = A[l + n],\n p = Sb[a];\n 0 === m || 10 === m ? ((1 === a ? ea : w)(J(p, 0)), (p.length = 0)) : p.push(m);\n }\n e += h;\n }\n F[d >> 2] = e;\n return 0;\n },\n U: (a, b) => {\n Ub(A.subarray(a, a + b));\n return 0;\n },\n i: cc,\n d: dc,\n e: ec,\n p: fc,\n y: gc,\n b: hc,\n a: ic,\n h: jc,\n n: kc,\n G: lc,\n K: (a, b, c, d) => Zb(a, b, c, d),\n },\n W = (function () {\n function a(c) {\n W = c.exports;\n fa = W.da;\n la();\n S = W.ha;\n na.unshift(W.ea);\n G--;\n k.monitorRunDependencies?.(G);\n 0 == G && (null !== qa && (clearInterval(qa), (qa = null)), H && ((c = H), (H = null), c()));\n return W;\n }\n var b = { a: mc };\n G++;\n k.monitorRunDependencies?.(G);\n if (k.instantiateWasm)\n try {\n return k.instantiateWasm(b, a);\n } catch (c) {\n w(`Module.instantiateWasm callback failed with error: ${c}`), ba(c);\n }\n xa(b, function (c) {\n a(c.instance);\n }).catch(ba);\n return {};\n })(),\n bc = (a) => (bc = W.fa)(a),\n ob = (a) => (ob = W.ga)(a),\n U = (a) => (U = W.ia)(a),\n X = (a, b) => (X = W.ja)(a, b),\n Y = (a) => (Y = W.ka)(a),\n Z = () => (Z = W.la)();\n k.dynCall_iijj = (a, b, c, d, e, f) => (k.dynCall_iijj = W.na)(a, b, c, d, e, f);\n k.dynCall_vijj = (a, b, c, d, e, f) => (k.dynCall_vijj = W.oa)(a, b, c, d, e, f);\n k.dynCall_jiii = (a, b, c, d) => (k.dynCall_jiii = W.pa)(a, b, c, d);\n k.dynCall_jii = (a, b, c) => (k.dynCall_jii = W.qa)(a, b, c);\n var nc = (k.dynCall_viiij = (a, b, c, d, e, f) => (nc = k.dynCall_viiij = W.ra)(a, b, c, d, e, f));\n k.dynCall_jiji = (a, b, c, d, e) => (k.dynCall_jiji = W.sa)(a, b, c, d, e);\n k.dynCall_viijii = (a, b, c, d, e, f, l) => (k.dynCall_viijii = W.ta)(a, b, c, d, e, f, l);\n k.dynCall_iiiiij = (a, b, c, d, e, f, l) => (k.dynCall_iiiiij = W.ua)(a, b, c, d, e, f, l);\n k.dynCall_iiiiijj = (a, b, c, d, e, f, l, h, n) => (k.dynCall_iiiiijj = W.va)(a, b, c, d, e, f, l, h, n);\n k.dynCall_iiiiiijj = (a, b, c, d, e, f, l, h, n, m) => (k.dynCall_iiiiiijj = W.wa)(a, b, c, d, e, f, l, h, n, m);\n function hc(a, b) {\n var c = Z();\n try {\n S.get(a)(b);\n } catch (d) {\n Y(c);\n if (d !== d + 0) throw d;\n X(1, 0);\n }\n }\n function ic(a, b, c) {\n var d = Z();\n try {\n S.get(a)(b, c);\n } catch (e) {\n Y(d);\n if (e !== e + 0) throw e;\n X(1, 0);\n }\n }\n function ec(a, b, c, d) {\n var e = Z();\n try {\n return S.get(a)(b, c, d);\n } catch (f) {\n Y(e);\n if (f !== f + 0) throw f;\n X(1, 0);\n }\n }\n function dc(a, b, c) {\n var d = Z();\n try {\n return S.get(a)(b, c);\n } catch (e) {\n Y(d);\n if (e !== e + 0) throw e;\n X(1, 0);\n }\n }\n function cc(a, b) {\n var c = Z();\n try {\n return S.get(a)(b);\n } catch (d) {\n Y(c);\n if (d !== d + 0) throw d;\n X(1, 0);\n }\n }\n function fc(a, b, c, d, e, f) {\n var l = Z();\n try {\n return S.get(a)(b, c, d, e, f);\n } catch (h) {\n Y(l);\n if (h !== h + 0) throw h;\n X(1, 0);\n }\n }\n function kc(a, b, c, d, e) {\n var f = Z();\n try {\n S.get(a)(b, c, d, e);\n } catch (l) {\n Y(f);\n if (l !== l + 0) throw l;\n X(1, 0);\n }\n }\n function jc(a, b, c, d) {\n var e = Z();\n try {\n S.get(a)(b, c, d);\n } catch (f) {\n Y(e);\n if (f !== f + 0) throw f;\n X(1, 0);\n }\n }\n function gc(a) {\n var b = Z();\n try {\n S.get(a)();\n } catch (c) {\n Y(b);\n if (c !== c + 0) throw c;\n X(1, 0);\n }\n }\n function lc(a, b, c, d, e, f) {\n var l = Z();\n try {\n nc(a, b, c, d, e, f);\n } catch (h) {\n Y(l);\n if (h !== h + 0) throw h;\n X(1, 0);\n }\n }\n var oc;\n H = function pc() {\n oc || qc();\n oc || (H = pc);\n };\n function qc() {\n function a() {\n if (!oc && ((oc = !0), (k.calledRun = !0), !ha)) {\n ya(na);\n aa(k);\n if (k.onRuntimeInitialized) k.onRuntimeInitialized();\n if (k.postRun)\n for ('function' == typeof k.postRun && (k.postRun = [k.postRun]); k.postRun.length; ) {\n var b = k.postRun.shift();\n oa.unshift(b);\n }\n ya(oa);\n }\n }\n if (!(0 < G)) {\n if (k.preRun) for ('function' == typeof k.preRun && (k.preRun = [k.preRun]); k.preRun.length; ) pa();\n ya(ma);\n 0 < G ||\n (k.setStatus\n ? (k.setStatus('Running...'),\n setTimeout(function () {\n setTimeout(function () {\n k.setStatus('');\n }, 1);\n a();\n }, 1))\n : a());\n }\n }\n if (k.preInit)\n for ('function' == typeof k.preInit && (k.preInit = [k.preInit]); 0 < k.preInit.length; ) k.preInit.pop()();\n qc();\n\n return readyPromise;\n };\n})();\nexport default createDotLottiePlayerModule;\n","import { PACKAGE_NAME, PACKAGE_VERSION } from '../constants';\n\nimport createDotLottiePlayerModule from './dotlottie-player';\nimport type { MainModule } from './dotlottie-player.types';\n\n// eslint-disable-next-line @typescript-eslint/no-extraneous-class\nexport class DotLottieWasmLoader {\n // eslint-disable-next-line @typescript-eslint/naming-convention\n private static _ModulePromise: Promise<MainModule> | null = null;\n\n // URL for the WASM file, constructed using package information\n private static _wasmURL = `https://cdn.jsdelivr.net/npm/${PACKAGE_NAME}@${PACKAGE_VERSION}/dist/dotlottie-player.wasm`;\n\n private constructor() {\n throw new Error('RendererLoader is a static class and cannot be instantiated.');\n }\n\n private static async _tryLoad(url: string): Promise<MainModule> {\n const module = await createDotLottiePlayerModule({ locateFile: () => url });\n\n return module;\n }\n\n /**\n * Tries to load the WASM module from the primary URL, falling back to a backup URL if necessary.\n * Throws an error if both URLs fail to load the module.\n * @returns Promise<Module> - A promise that resolves to the loaded module.\n */\n private static async _loadWithBackup(): Promise<MainModule> {\n if (!this._ModulePromise) {\n this._ModulePromise = this._tryLoad(this._wasmURL).catch(async (initialError): Promise<MainModule> => {\n const backupUrl = `https://unpkg.com/${PACKAGE_NAME}@${PACKAGE_VERSION}/dist/dotlottie-player.wasm`;\n\n console.warn(`Primary WASM load failed from ${this._wasmURL}. Error: ${(initialError as Error).message}`);\n console.warn(`Attempting to load WASM from backup URL: ${backupUrl}`);\n\n try {\n return await this._tryLoad(backupUrl);\n } catch (backupError) {\n console.error(`Primary WASM URL failed: ${(initialError as Error).message}`);\n console.error(`Backup WASM URL failed: ${(backupError as Error).message}`);\n throw new Error('WASM loading failed from all sources.');\n }\n });\n }\n\n return this._ModulePromise;\n }\n\n /**\n * Public method to load the WebAssembly module.\n * Utilizes a primary and backup URL for robustness.\n * @returns Promise<Module> - A promise that resolves to the loaded module.\n */\n public static async load(): Promise<MainModule> {\n return this._loadWithBackup();\n }\n\n /**\n * Sets a new URL for the WASM file and invalidates the current module promise.\n *\n * @param string - The new URL for the WASM file.\n */\n public static setWasmUrl(url: string): void {\n this._wasmURL = url;\n // Invalidate current module promise\n this._ModulePromise = null;\n }\n}\n","/**\n * Represents the different types of events that can be dispatched.\n */\nexport type EventType =\n | 'complete'\n | 'frame'\n | 'load'\n | 'loadError'\n | 'loop'\n | 'pause'\n | 'play'\n | 'stop'\n | 'destroy'\n | 'freeze'\n | 'unfreeze'\n | 'render'\n | 'ready';\n\n/**\n * Maps an event type string to its respective event interface.\n */\ntype EventByType<T> = T extends 'complete'\n ? CompleteEvent\n : T extends 'frame'\n ? FrameEvent\n : T extends 'load'\n ? LoadEvent\n : T extends 'loadError'\n ? LoadErrorEvent\n : T extends 'loop'\n ? LoopEvent\n : T extends 'pause'\n ? PauseEvent\n : T extends 'play'\n ? PlayEvent\n : T extends 'stop'\n ? StopEvent\n : T extends 'destroy'\n ? DestroyEvent\n : T extends 'freeze'\n ? FreezeEvent\n : T extends 'unfreeze'\n ? UnfreezeEvent\n : T extends 'render'\n ? RenderEvent\n : T extends 'ready'\n ? ReadyEvent\n : never;\n\n/**\n * Base interface for all events.\n */\nexport interface BaseEvent {\n type: EventType;\n}\n\nexport interface RenderEvent extends BaseEvent {\n currentFrame: number;\n type: 'render';\n}\n\nexport interface FreezeEvent extends BaseEvent {\n type: 'freeze';\n}\n\nexport interface UnfreezeEvent extends BaseEvent {\n type: 'unfreeze';\n}\n\n/*\n * Event fired when a destroy action occurs.\n */\nexport interface DestroyEvent extends BaseEvent {\n type: 'destroy';\n}\n\n/**\n * Event fired when a loop action occurs.\n */\nexport interface LoopEvent extends BaseEvent {\n loopCount: number;\n type: 'loop';\n}\n\n/**\n * Event fired during frame changes.\n */\nexport interface FrameEvent extends BaseEvent {\n currentFrame: number;\n type: 'frame';\n}\n\n/**\n * Event fired when a load action occurs.\n */\nexport interface LoadEvent extends BaseEvent {\n type: 'load';\n}\n\n/**\n * Event fired when a loading error occurs.\n */\nexport interface LoadErrorEvent extends BaseEvent {\n error: Error;\n type: 'loadError';\n}\n\n/**\n * Event fired when a completion action occurs.\n */\nexport interface CompleteEvent extends BaseEvent {\n type: 'complete';\n}\n\n/**\n * Event fired when a pause action occurs.\n */\nexport interface PauseEvent extends BaseEvent {\n type: 'pause';\n}\n\n/**\n * Event fired when a play action occurs.\n */\nexport interface PlayEvent extends BaseEvent {\n type: 'play';\n}\n\n/**\n * Event fired when a stop action occurs.\n */\nexport interface StopEvent extends BaseEvent {\n type: 'stop';\n}\n\n/**\n * Event fired when a WASM module is initialized and ready.\n */\nexport interface ReadyEvent extends BaseEvent {\n type: 'ready';\n}\n\n/**\n * Type representing all possible event types.\n */\nexport type Event =\n | LoopEvent\n | FrameEvent\n | LoadEvent\n | LoadErrorEvent\n | CompleteEvent\n | PauseEvent\n | PlayEvent\n | StopEvent\n | DestroyEvent\n | FreezeEvent\n | UnfreezeEvent\n | RenderEvent\n | ReadyEvent;\n\nexport interface EventListener<T extends EventType> {\n (event: EventByType<T>): void;\n}\n\n/**\n * Manages registration and dispatching of event listeners.\n */\nexport class EventManager {\n private readonly _eventListeners: Map<EventType, Set<EventListener<EventType>>> = new Map();\n\n public addEventListener<T extends EventType>(type: T, listener: EventListener<T>): void {\n let listeners = this._eventListeners.get(type);\n\n if (!listeners) {\n listeners = new Set<EventListener<T>>();\n this._eventListeners.set(type, listeners);\n }\n\n listeners.add(listener);\n }\n\n public removeEventListener<T extends EventType>(type: T, listener?: EventListener<T>): void {\n const listeners = this._eventListeners.get(type);\n\n if (!listeners) return;\n\n if (listener) {\n listeners.delete(listener);\n\n if (listeners.size === 0) {\n this._eventListeners.delete(type);\n }\n } else {\n this._eventListeners.delete(type);\n }\n }\n\n public dispatch<T extends EventType>(event: EventByType<T>): void {\n const listeners = this._eventListeners.get(event.type);\n\n listeners?.forEach((listener) => listener(event));\n }\n\n public removeAllEventListeners(): void {\n this._eventListeners.clear();\n }\n}\n","import { LOTTIE_JSON_MANDATORY_FIELDS, ZIP_SIGNATURE } from './constants';\n\nexport function isHexColor(color: string): boolean {\n return /^#([\\da-f]{6}|[\\da-f]{8})$/iu.test(color);\n}\n\nexport function hexStringToRGBAInt(colorHex: string): number {\n if (!isHexColor(colorHex)) {\n return 0;\n }\n\n let hex = colorHex.replace('#', '');\n\n // Add alpha if it's not included\n hex = hex.length === 6 ? `${hex}ff` : hex;\n\n return parseInt(hex, 16);\n}\n\nexport function isDotLottie(fileData: ArrayBuffer): boolean {\n if (fileData.byteLength < 4) {\n return false;\n }\n\n const fileSignature = new Uint8Array(fileData.slice(0, ZIP_SIGNATURE.byteLength));\n\n for (let i = 0; i < ZIP_SIGNATURE.length; i += 1) {\n if (ZIP_SIGNATURE[i] !== fileSignature[i]) {\n return false;\n }\n }\n\n return true;\n}\n\n/**\n * Returns whether the given object looks like a valid Lottie JSON structure.\n */\nexport function isLottieJSON(json: Record<string, unknown>): boolean {\n return LOTTIE_JSON_MANDATORY_FIELDS.every((field) => Object.prototype.hasOwnProperty.call(json, field));\n}\n\nexport function isLottie(fileData: string | Record<string, unknown>): boolean {\n if (typeof fileData === 'string') {\n try {\n return isLottieJSON(JSON.parse(fileData));\n } catch (_e) {\n return false;\n }\n } else {\n return isLottieJSON(fileData);\n }\n}\n","import { AnimationFrameManager } from './animation-frame-manager';\nimport { IS_BROWSER } from './constants';\nimport type { DotLottiePlayer, MainModule, Mode as CoreMode, VectorFloat, Marker, Fit as CoreFit } from './core';\nimport { DotLottieWasmLoader } from './core';\nimport type { EventListener, EventType } from './event-manager';\nimport { EventManager } from './event-manager';\nimport type { Mode, Fit, Config, Layout, Manifest, RenderConfig, Data } from './types';\nimport { hexStringToRGBAInt, isDotLottie, isLottie } from './utils';\n\nconst createCoreMode = (mode: Mode, module: MainModule): CoreMode => {\n if (mode === 'reverse') {\n return module.Mode.Reverse;\n } else if (mode === 'bounce') {\n return module.Mode.Bounce;\n } else if (mode === 'reverse-bounce') {\n return module.Mode.ReverseBounce;\n } else {\n return module.Mode.Forward;\n }\n};\n\nconst createCoreFit = (fit: Fit, module: MainModule): CoreFit => {\n if (fit === 'contain') {\n return module.Fit.Contain;\n } else if (fit === 'cover') {\n return module.Fit.Cover;\n } else if (fit === 'fill') {\n return module.Fit.Fill;\n } else if (fit === 'fit-height') {\n return module.Fit.FitHeight;\n } else if (fit === 'fit-width') {\n return module.Fit.FitWidth;\n } else {\n return module.Fit.None;\n }\n};\n\nconst createCoreAlign = (align: [number, number], module: MainModule): VectorFloat => {\n const coreAlign = new module.VectorFloat();\n\n coreAlign.push_back(align[0]);\n coreAlign.push_back(align[1]);\n\n return coreAlign;\n};\n\nconst createCoreSegment = (segment: number[], module: MainModule): VectorFloat => {\n const coresegment = new module.VectorFloat();\n\n if (segment.length !== 2) return coresegment;\n\n coresegment.push_back(segment[0] as number);\n coresegment.push_back(segment[1] as number);\n\n return coresegment;\n};\n\nexport class DotLottie {\n private readonly _canvas: HTMLCanvasElement | OffscreenCanvas;\n\n private _context: CanvasRenderingContext2D | OffscreenCanvasRenderingContext2D | null = null;\n\n private readonly _eventManager: EventManager;\n\n private _animationFrameId: number | null = null;\n\n private readonly _frameManager: AnimationFrameManager;\n\n private _dotLottieCore: DotLottiePlayer | null = null;\n\n private static _wasmModule: MainModule | null = null;\n\n private _renderConfig: RenderConfig = {};\n\n private _isFrozen: boolean = false;\n\n private _backgroundColor: string | null = null;\n\n private readonly _pointerUpMethod: (event: PointerEvent) => void;\n\n private readonly _pointerDownMethod: (event: PointerEvent) => void;\n\n private readonly _pointerMoveMethod: (event: PointerEvent) => void;\n\n private readonly _pointerEnterMethod: (event: PointerEvent) => void;\n\n private readonly _pointerExitMethod: (event: PointerEvent) => void;\n\n private readonly _onCompleteMethod: EventListener<'complete'>;\n\n public constructor(config: Config) {\n this._canvas = config.canvas;\n this._context = this._canvas.getContext('2d');\n\n this._eventManager = new EventManager();\n this._frameManager = new AnimationFrameManager();\n this._renderConfig = config.renderConfig ?? {};\n\n DotLottieWasmLoader.load()\n .then((module) => {\n DotLottie._wasmModule = module;\n\n this._dotLottieCore = new module.DotLottiePlayer({\n autoplay: config.autoplay ?? false,\n backgroundColor: 0,\n loopAnimation: config.loop ?? false,\n mode: createCoreMode(config.mode ?? 'forward', module),\n segment: createCoreSegment(config.segment ?? [], module),\n speed: config.speed ?? 1,\n useFrameInterpolation: config.useFrameInterpolation ?? true,\n marker: config.marker ?? '',\n layout: config.layout\n ? {\n align: createCoreAlign(config.layout.align, module),\n fit: createCoreFit(config.layout.fit, module),\n }\n : module.createDefaultLayout(),\n });\n\n this._eventManager.dispatch({ type: 'ready' });\n\n if (config.data) {\n this._loadFromData(config.data);\n } else if (config.src) {\n this._loadFromSrc(config.src);\n }\n\n if (config.backgroundColor) {\n this.setBackgroundColor(config.backgroundColor);\n }\n })\n .catch((error) => {\n this._eventManager.dispatch({\n type: 'loadError',\n error: new Error(`Failed to load wasm module: ${error}`),\n });\n });\n\n this._pointerUpMethod = this._onPointerUp.bind(this);\n\n this._pointerDownMethod = this._onPointerDown.bind(this);\n\n this._pointerMoveMethod = this._onPointerMove.bind(this);\n\n this._pointerEnterMethod = this._onPointerEnter.bind(this);\n\n this._pointerExitMethod = this._onPointerLeave.bind(this);\n\n this._onCompleteMethod = this._onComplete.bind(this);\n }\n\n private _dispatchError(message: string): void {\n console.error(message);\n this._eventManager.dispatch({ type: 'loadError', error: new Error(message) });\n }\n\n private async _fetchData(src: string): Promise<string | ArrayBuffer> {\n const response = await fetch(src);\n\n if (!response.ok) {\n throw new Error(`Failed to fetch animation data from URL: ${src}. ${response.status}: ${response.statusText}`);\n }\n\n const data = await response.arrayBuffer();\n\n if (isDotLottie(data)) {\n return data;\n }\n\n // eslint-disable-next-line node/no-unsupported-features/node-builtins\n return new TextDecoder().decode(data);\n }\n\n private _loadFromData(data: Data): void {\n if (this._dotLottieCore === null) return;\n\n const width = this._canvas.width;\n const height = this._canvas.height;\n\n let loaded = false;\n\n if (typeof data === 'string') {\n if (!isLottie(data)) {\n this._dispatchError(\n 'Invalid Lottie JSON string: The provided string does not conform to the Lottie JSON format.',\n );\n\n return;\n }\n loaded = this._dotLottieCore.loadAnimationData(data, width, height);\n } else if (data instanceof ArrayBuffer) {\n if (!isDotLottie(data)) {\n this._dispatchError(\n 'Invalid dotLottie ArrayBuffer: The provided ArrayBuffer does not conform to the dotLottie format.',\n );\n\n return;\n }\n loaded = this._dotLottieCore.loadDotLottieData(data, width, height);\n } else if (typeof data === 'object') {\n if (!isLottie(data as Record<string, unknown>)) {\n this._dispatchError(\n 'Invalid Lottie JSON object: The provided object does not conform to the Lottie JSON format.',\n );\n\n return;\n }\n loaded = this._dotLottieCore.loadAnimationData(JSON.stringify(data), width, height);\n } else {\n this._dispatchError(\n `Unsupported data type for animation data. Expected: \n - string (Lottie JSON),\n - ArrayBuffer (dotLottie),\n - object (Lottie JSON). \n Received: ${typeof data}`,\n );\n\n return;\n }\n\n if (loaded) {\n this._eventManager.dispatch({ type: 'load' });\n\n if (IS_BROWSER) {\n this.resize();\n }\n\n this._eventManager.dispatch({\n type: 'frame',\n currentFrame: this._dotLottieCore.currentFrame(),\n });\n\n this._render();\n\n if (this._dotLottieCore.config().autoplay) {\n this._dotLottieCore.play();\n if (this._dotLottieCore.isPlaying()) {\n this._eventManager.dispatch({ type: 'play' });\n this._animationFrameId = this._frameManager.requestAnimationFrame(this._draw.bind(this));\n } else {\n console.error('something went wrong, the animation was suppose to autoplay');\n }\n }\n } else {\n this._dispatchError('Failed to load animation data');\n }\n }\n\n private _loadFromSrc(src: string): void {\n this._fetchData(src)\n .then((data) => this._loadFromData(data))\n .catch((error) => this._dispatchError(`Failed to load animation data from URL: ${src}. ${error}`));\n }\n\n public get activeAnimationId(): string | undefined {\n return this._dotLottieCore?.activeAnimationId();\n }\n\n public get activeThemeId(): string | undefined {\n return this._dotLottieCore?.activeThemeId();\n }\n\n public get layout(): Layout | undefined {\n const layout = this._dotLottieCore?.config().layout;\n\n if (layout) {\n return {\n align: [layout.align.get(0) as number, layout.align.get(1) as number],\n fit: ((): Fit => {\n switch (layout.fit) {\n case DotLottie._wasmModule?.Fit.Contain:\n return 'contain';\n\n case DotLottie._wasmModule?.Fit.Cover:\n return 'cover';\n\n case DotLottie._wasmModule?.Fit.Fill:\n return 'fill';\n\n case DotLottie._wasmModule?.Fit.FitHeight:\n return 'fit-height';\n\n case DotLottie._wasmModule?.Fit.FitWidth:\n return 'fit-width';\n\n case DotLottie._wasmModule?.Fit.None:\n return 'none';\n\n default:\n return 'contain';\n }\n })(),\n };\n }\n\n return undefined;\n }\n\n public get marker(): string | undefined {\n const marker = this._dotLottieCore?.config().marker as string | undefined;\n\n return marker;\n }\n\n public get manifest(): Manifest | null {\n try {\n const manifest = this._dotLottieCore?.manifestString();\n\n if (this._dotLottieCore === null || !manifest) return null;\n\n const manifestJson = JSON.parse(manifest);\n\n if (Object.keys(manifestJson).length === 0) return null;\n\n return manifestJson as Manifest;\n } catch (_err) {\n return null;\n }\n }\n\n public get renderConfig(): RenderConfig {\n return this._renderConfig;\n }\n\n public get segment(): [number, number] | undefined {\n const segment = this._dotLottieCore?.config().segment;\n\n if (segment && segment.size() === 2) {\n return [segment.get(0) as number, segment.get(1) as number];\n }\n\n return undefined;\n }\n\n public get loop(): boolean {\n return this._dotLottieCore?.config().loopAnimation ?? false;\n }\n\n public get mode(): Mode {\n const mode = this._dotLottieCore?.config().mode;\n\n if (mode === DotLottie._wasmModule?.Mode.Reverse) {\n return 'reverse';\n } else if (mode === DotLottie._wasmModule?.Mode.Bounce) {\n return 'bounce';\n } else if (mode === DotLottie._wasmModule?.Mode.ReverseBounce) {\n return 'reverse-bounce';\n } else {\n return 'forward';\n }\n }\n\n public get isFrozen(): boolean {\n return this._isFrozen;\n }\n\n public get backgroundColor(): string {\n return this._backgroundColor ?? '';\n }\n\n public get autoplay(): boolean {\n return this._dotLottieCore?.config().autoplay ?? false;\n }\n\n public get useFrameInterpolation(): boolean {\n return this._dotLottieCore?.config().useFrameInterpolation ?? false;\n }\n\n public get speed(): number {\n return this._dotLottieCore?.config().speed ?? 0;\n }\n\n public get isReady(): boolean {\n return this._dotLottieCore !== null;\n }\n\n public get isLoaded(): boolean {\n return this._dotLottieCore?.isLoaded() ?? false;\n }\n\n public get isPlaying(): boolean {\n return this._dotLottieCore?.isPlaying() ?? false;\n }\n\n public get isPaused(): boolean {\n return this._dotLottieCore?.isPaused() ?? false;\n }\n\n public get isStopped(): boolean {\n return this._dotLottieCore?.isStopped() ?? false;\n }\n\n public get currentFrame(): number {\n return this._dotLottieCore?.currentFrame() ?? 0;\n }\n\n public get loopCount(): number {\n return this._dotLottieCore?.loopCount() ?? 0;\n }\n\n public get totalFrames(): number {\n return this._dotLottieCore?.totalFrames() ?? 0;\n }\n\n public get duration(): number {\n return this._dotLottieCore?.duration() ?? 0;\n }\n\n public get segmentDuration(): number {\n return this._dotLottieCore?.segmentDuration() ?? 0;\n }\n\n public get canvas(): HTMLCanvasElement | OffscreenCanvas {\n return this._canvas;\n }\n\n public load(config: Omit<Config, 'canvas'>): void {\n if (this._dotLottieCore === null || DotLottie._wasmModule === null) return;\n\n this._dotLottieCore.setConfig({\n autoplay: config.autoplay ?? false,\n backgroundColor: 0,\n loopAnimation: config.loop ?? false,\n mode: createCoreMode(config.mode ?? 'forward', DotLottie._wasmModule),\n segment: createCoreSegment(config.segment ?? [], DotLottie._wasmModule),\n speed: config.speed ?? 1,\n useFrameInterpolation: config.useFrameInterpolation ?? true,\n marker: config.marker ?? '',\n layout: config.layout\n ? {\n align: createCoreAlign(config.layout.align, DotLottie._wasmModule),\n fit: createCoreFit(config.layout.fit, DotLottie._wasmModule),\n }\n : DotLottie._wasmModule.createDefaultLayout(),\n });\n\n if (config.data) {\n this._loadFromData(config.data);\n } else if (config.src) {\n this._loadFromSrc(config.src);\n }\n\n this.setBackgroundColor(config.backgroundColor ?? '');\n }\n\n private _render(): boolean {\n if (this._dotLottieCore === null || this._context === null) return false;\n\n const rendered = this._dotLottieCore.render();\n\n if (rendered) {\n const buffer = this._dotLottieCore.buffer() as Uint8Array;\n const clampedBuffer = new Uint8ClampedArray(buffer, 0, this._canvas.width * this._canvas.height * 4);\n\n let imageData = null;\n\n /* \n In Node.js, the ImageData constructor is not available. \n You can use createImageData function in the canvas context to create ImageData object.\n */\n if (typeof ImageData === 'undefined') {\n imageData = this._context.createImageData(this._canvas.width, this._canvas.height);\n imageData.data.set(clampedBuffer);\n } else {\n imageData = new ImageData(clampedBuffer, this._canvas.width, this._canvas.height);\n }\n\n this._context.putImageData(imageData, 0, 0);\n\n this._eventManager.dispatch({\n type: 'render',\n currentFrame: this._dotLottieCore.currentFrame(),\n });\n\n return true;\n }\n\n return false;\n }\n\n private _draw(): void {\n if (this._dotLottieCore === null || this._context === null || !this._dotLottieCore.isPlaying()) return;\n\n const nextFrame = this._dotLottieCore.requestFrame();\n\n const updated = this._dotLottieCore.setFrame(nextFrame);\n\n if (updated) {\n this._eventManager.dispatch({\n type: 'frame',\n currentFrame: this._dotLottieCore.currentFrame(),\n });\n\n const rendered = this._render();\n\n if (rendered) {\n // handle loop or complete\n if (this._dotLottieCore.isComplete()) {\n if (this._dotLottieCore.config().loopAnimation) {\n this._eventManager.dispatch({\n type: 'loop',\n loopCount: this._dotLottieCore.loopCount(),\n });\n } else {\n this._eventManager.dispatch({ type: 'complete' });\n }\n }\n }\n }\n\n this._animationFrameId = this._frameManager.requestAnimationFrame(this._draw.bind(this));\n }\n\n public play(): void {\n if (this._dotLottieCore === null) return;\n\n const ok = this._dotLottieCore.play();\n\n if (ok || this._dotLottieCore.isPlaying()) {\n this._isFrozen = false;\n this._eventManager.dispatch({ type: 'play' });\n this._animationFrameId = this._frameManager.requestAnimationFrame(this._draw.bind(this));\n }\n }\n\n public pause(): void {\n if (this._dotLottieCore === null) return;\n\n const ok = this._dotLottieCore.pause();\n\n if (ok || this._dotLottieCore.isPaused()) {\n this._eventManager.dispatch({ type: 'pause' });\n }\n }\n\n public stop(): void {\n if (this._dotLottieCore === null) return;\n\n const ok = this._dotLottieCore.stop();\n\n if (ok) {\n this._eventManager.dispatch({ type: 'frame', currentFrame: this._dotLottieCore.currentFrame() });\n\n this._render();\n\n this._eventManager.dispatch({ type: 'stop' });\n }\n }\n\n public setFrame(frame: number): void {\n if (this._dotLottieCore === null) return;\n\n if (frame < 0 || frame > this._dotLottieCore.totalFrames()) return;\n\n const ok = this._dotLottieCore.seek(frame);\n\n if (ok) {\n this._eventManager.dispatch({ type: 'frame', currentFrame: this._dotLottieCore.currentFrame() });\n\n this._render();\n }\n }\n\n public setSpeed(speed: number): void {\n if (this._dotLottieCore === null) return;\n\n this._dotLottieCore.setConfig({\n ...this._dotLottieCore.config(),\n speed,\n });\n }\n\n public setBackgroundColor(color: string): void {\n if (this._dotLottieCore === null) return;\n\n if (IS_BROWSER && this._canvas instanceof HTMLCanvasElement) {\n this._canvas.style.backgroundColor = color;\n } else {\n this._dotLottieCore.setConfig({\n ...this._dotLottieCore.config(),\n backgroundColor: hexStringToRGBAInt(color),\n });\n }\n\n this._backgroundColor = color;\n }\n\n public setLoop(loop: boolean): void {\n if (this._dotLottieCore === null) return;\n\n this._dotLottieCore.setConfig({\n ...this._dotLottieCore.config(),\n loopAnimation: loop,\n });\n }\n\n public setUseFrameInterpolation(useFrameInterpolation: boolean): void {\n if (this._dotLottieCore === null) return;\n\n this._dotLottieCore.setConfig({\n ...this._dotLottieCore.config(),\n useFrameInterpolation,\n });\n }\n\n public addEventListener<T extends EventType>(type: T, listener: EventListener<T>): void {\n this._eventManager.addEventListener(type, listener);\n }\n\n public removeEventListener<T extends EventType>(type: T, listener?: EventListener<T>): void {\n this._eventManager.removeEventListener(type, listener);\n }\n\n public destroy(): void {\n this._dotLottieCore?.delete();\n this._dotLottieCore = null;\n this._context = null;\n\n this._eventManager.dispatch({\n type: 'destroy',\n });\n\n this._eventManager.removeAllEventListeners();\n this._cleanupStateMachineListeners();\n }\n\n public freeze(): void {\n if (this._animationFrameId === null) return;\n\n this._frameManager.cancelAnimationFrame(this._animationFrameId);\n this._animationFrameId = null;\n\n this._isFrozen = true;\n\n this._eventManager.dispatch({ type: 'freeze' });\n }\n\n public unfreeze(): void {\n if (this._animationFrameId !== null) return;\n\n this._animationFrameId = this._frameManager.requestAnimationFrame(this._draw.bind(this));\n\n this._isFrozen = false;\n\n this._eventManager.dispatch({ type: 'unfreeze' });\n }\n\n public resize(): void {\n if (IS_BROWSER && this._canvas instanceof HTMLCanvasElement) {\n const dpr = this._renderConfig.devicePixelRatio || window.devicePixelRatio || 1;\n\n const { height: clientHeight, width: clientWidth } = this._canvas.getBoundingClientRect();\n\n this._canvas.width = clientWidth * dpr;\n this._canvas.height = clientHeight * dpr;\n }\n\n const ok = this._dotLottieCore?.resize(this._canvas.width, this._canvas.height);\n\n if (ok) {\n this._render();\n }\n }\n\n public setSegment(startFrame: number, endFrame: number): void {\n if (this._dotLottieCore === null || DotLottie._wasmModule === null) return;\n\n this._dotLottieCore.setConfig({\n ...this._dotLottieCore.config(),\n segment: createCoreSegment([startFrame, endFrame], DotLottie._wasmModule),\n });\n }\n\n public setMode(mode: Mode): void {\n if (this._dotLottieCore === null || DotLottie._wasmModule === null) return;\n\n this._dotLottieCore.setConfig({\n ...this._dotLottieCore.config(),\n mode: createCoreMode(mode, DotLottie._wasmModule),\n });\n }\n\n public setRenderConfig(config: RenderConfig): void {\n this._renderConfig = config;\n }\n\n public loadAnimation(animationId: string): void {\n if (this._dotLottieCore === null || this._dotLottieCore.activeAnimationId() === animationId) return;\n\n const loaded = this._dotLottieCore.loadAnimation(animationId, this._canvas.width, this._canvas.height);\n\n if (loaded) {\n this._eventManager.dispatch({ type: 'load' });\n this.resize();\n } else {\n this._eventManager.dispatch({\n type: 'loadError',\n error: new Error(`Failed to animation :${animationId}`),\n });\n }\n }\n\n public setMarker(marker: string): void {\n if (this._dotLottieCore === null) return;\n\n this._dotLottieCore.setConfig({\n ...this._dotLottieCore.config(),\n marker,\n });\n }\n\n public markers(): Marker[] {\n const markers = this._dotLottieCore?.markers();\n\n if (markers) {\n const result: Marker[] = [];\n\n for (let i = 0; i < markers.size(); i += 1) {\n const marker = markers.get(i) as Marker;\n\n result.push({\n name: marker.name,\n time: marker.time,\n duration: marker.duration,\n });\n }\n\n return result;\n }\n\n return [];\n }\n\n public loadTheme(themeId: string): boolean {\n if (this._dotLottieCore === null) return false;\n\n const loaded = this._dotLottieCore.loadTheme(themeId);\n\n this._render();\n\n return loaded;\n }\n\n public loadThemeData(themeData: string): boolean {\n if (this._dotLottieCore === null) return false;\n\n const loaded = this._dotLottieCore.loadThemeData(themeData);\n\n this._render();\n\n return loaded;\n }\n\n public setLayout(layout: Layout): void {\n if (this._dotLottieCore === null || DotLottie._wasmModule === null) return;\n\n this._dotLottieCore.setConfig({\n ...this._dotLottieCore.config(),\n layout: {\n align: createCoreAlign(layout.align, DotLottie._wasmModule),\n fit: createCoreFit(layout.fit, DotLottie._wasmModule),\n },\n });\n }\n\n public setViewport(x: number, y: number, width: number, height: number): boolean {\n if (this._dotLottieCore === null) return false;\n\n return this._dotLottieCore.setViewport(x, y, width, height);\n }\n\n public static setWasmUrl(url: string): void {\n DotLottieWasmLoader.setWasmUrl(url);\n }\n\n public loadStateMachine(stateMachineId: string): boolean {\n return this._dotLottieCore?.loadStateMachine(stateMachineId) ?? false;\n }\n\n public startStateMachine(): boolean {\n const started = this._dotLottieCore?.startStateMachine() ?? false;\n\n if (started) {\n this._setupStateMachineListeners();\n }\n\n return started;\n }\n\n public stopStateMachine(): boolean {\n const stopped = this._dotLottieCore?.stopStateMachine() ?? false;\n\n if (stopped) {\n this._cleanupStateMachineListeners();\n }\n\n return stopped;\n }\n\n private _getPointerPosition(event: PointerEvent): { x: number; y: number } {\n const rect = (this._canvas as HTMLCanvasElement).getBoundingClientRect();\n const scaleX = this._canvas.width / rect.width;\n const scaleY = this._canvas.height / rect.height;\n\n const devicePixelRatio = this._renderConfig.devicePixelRatio || window.devicePixelRatio || 1;\n const x = ((event.clientX - rect.left) * scaleX) / devicePixelRatio;\n const y = ((event.clientY - rect.top) * scaleY) / devicePixelRatio;\n\n return {\n x,\n y,\n };\n }\n\n private _onPointerUp(event: PointerEvent): void {\n const { x, y } = this._getPointerPosition(event);\n\n this.postStateMachineEvent(`OnPointerUp: ${x} ${y}`);\n }\n\n private _onPointerDown(event: PointerEvent): void {\n const { x, y } = this._getPointerPosition(event);\n\n this.postStateMachineEvent(`OnPointerDown: ${x} ${y}`);\n }\n\n private _onPointerMove(event: PointerEvent): void {\n const { x, y } = this._getPointerPosition(event);\n\n this.postStateMachineEvent(`OnPointerMove: ${x} ${y}`);\n }\n\n private _onPointerEnter(event: PointerEvent): void {\n const { x, y } = this._getPointerPosition(event);\n\n this.postStateMachineEvent(`OnPointerEnter: ${x} ${y}`);\n }\n\n private _onPointerLeave(event: PointerEvent): void {\n const { x, y } = this._getPointerPosition(event);\n\n this.postStateMachineEvent(`OnPointerExit: ${x} ${y}`);\n }\n\n private _onComplete(): void {\n this.postStateMachineEvent('OnComplete');\n }\n\n /**\n * @experimental\n * @param event - The event to be posted to the state machine\n * @returns boolean - true if the event was posted successfully, false otherwise\n */\n public postStateMachineEvent(event: string): number {\n const rt = this._dotLottieCore?.postEventPayload(event) ?? 1;\n\n if (rt === 2) {\n this.play();\n } else if (rt === 3) {\n this.pause();\n } else if (rt === 4) {\n this._render();\n }\n\n return rt;\n }\n\n public getStateMachineListeners(): string[] {\n if (!this._dotLottieCore) return [];\n\n const listenersVector = this._dotLottieCore.stateMachineFrameworkSetup();\n\n const listeners = [];\n\n for (let i = 0; i < listenersVector.size(); i += 1) {\n listeners.push(listenersVector.get(i) as string);\n }\n\n return listeners;\n }\n\n private _setupStateMachineListeners(): void {\n if (IS_BROWSER && this._canvas instanceof HTMLCanvasElement && this._dotLottieCore !== null && this.isLoaded) {\n const listeners = this.getStateMachineListeners();\n\n if (listeners.includes('PointerUp')) {\n this._canvas.addEventListener('pointerup', this._pointerUpMethod);\n }\n\n if (listeners.includes('PointerDown')) {\n this._canvas.addEventListener('pointerdown', this._pointerDownMethod);\n }\n\n if (listeners.includes('PointerMove')) {\n this._canvas.addEventListener('pointermove', this._pointerMoveMethod);\n }\n\n if (listeners.includes('PointerEnter')) {\n this._canvas.addEventListener('pointerenter', this._pointerEnterMethod);\n }\n\n if (listeners.includes('PointerExit')) {\n this._canvas.addEventListener('pointerleave', this._pointerExitMethod);\n }\n\n if (listeners.includes('Complete')) {\n this.addEventListener('complete', this._onCompleteMethod);\n }\n }\n }\n\n private _cleanupStateMachineListeners(): void {\n if (IS_BROWSER && this._canvas instanceof HTMLCanvasElement) {\n this._canvas.removeEventListener('pointerup', this._pointerUpMethod);\n this._canvas.removeEventListener('pointerdown', this._pointerDownMethod);\n this._canvas.removeEventListener('pointermove', this._pointerMoveMethod);\n this._canvas.removeEventListener('pointerenter', this._pointerEnterMethod);\n this._canvas.removeEventListener('pointerleave', this._pointerExitMethod);\n this.removeEventListener('complete', this._onCompleteMethod);\n }\n }\n\n public loadStateMachineData(stateMachineData: string): boolean {\n return this._dotLottieCore?.loadStateMachineData(stateMachineData) ?? false;\n }\n\n public animationSize(): { height: number; width: number } {\n const width = this._dotLottieCore?.animationSize().get(0) ?? 0;\n const height = this._dotLottieCore?.animationSize().get(1) ?? 0;\n\n return {\n width,\n height,\n };\n }\n\n public setStateMachineBooleanContext(name: string, value: boolean): boolean {\n return this._dotLottieCore?.setStateMachineBooleanContext(name, value) ?? false;\n }\n\n public setStateMachineNumericContext(name: string, value: number): boolean {\n return this._dotLottieCore?.setStateMachineNumericContext(name, value) ?? false;\n }\n\n public setStateMachineStringContext(name: string, value: string): boolean {\n return this._dotLottieCore?.setStateMachineStringContext(name, value) ?? false;\n }\n}\n","\n \"use client\";\n export default class InlinedWorker {\n constructor() {\n if (typeof window === 'undefined') {\n throw new Error('Worker is not available in this environment.');\n }\n return new Worker('data:application/javascript;base64,InVzZSBzdHJpY3QiOwooKCkgPT4gewogIHZhciBfX2RlZlByb3AgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7CiAgdmFyIF9fZGVmTm9ybWFsUHJvcCA9IChvYmosIGtleSwgdmFsdWUpID0+IGtleSBpbiBvYmogPyBfX2RlZlByb3Aob2JqLCBrZXksIHsgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSwgdmFsdWUgfSkgOiBvYmpba2V5XSA9IHZhbHVlOwogIHZhciBfX3B1YmxpY0ZpZWxkID0gKG9iaiwga2V5LCB2YWx1ZSkgPT4gX19kZWZOb3JtYWxQcm9wKG9iaiwgdHlwZW9mIGtleSAhPT0gInN5bWJvbCIgPyBrZXkgKyAiIiA6IGtleSwgdmFsdWUpOwoKICAvLyBzcmMvYW5pbWF0aW9uLWZyYW1lLW1hbmFnZXIudHMKICB2YXIgV2ViQW5pbWF0aW9uRnJhbWVTdHJhdGVneSA9IGNsYXNzIHsKICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZShjYWxsYmFjaykgewogICAgICByZXR1cm4gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKGNhbGxiYWNrKTsKICAgIH0KICAgIGNhbmNlbEFuaW1hdGlvbkZyYW1lKGlkKSB7CiAgICAgIGNhbmNlbEFuaW1hdGlvbkZyYW1lKGlkKTsKICAgIH0KICB9OwogIHZhciBOb2RlQW5pbWF0aW9uRnJhbWVTdHJhdGVneSA9IGNsYXNzIHsKICAgIGNvbnN0cnVjdG9yKCkgewogICAgICBfX3B1YmxpY0ZpZWxkKHRoaXMsICJfbGFzdEhhbmRsZUlkIiwgMCk7CiAgICAgIF9fcHVibGljRmllbGQodGhpcywgIl9sYXN0SW1tZWRpYXRlIiwgbnVsbCk7CiAgICB9CiAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoY2FsbGJhY2spIHsKICAgICAgaWYgKHRoaXMuX2xhc3RIYW5kbGVJZCA+PSBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUikgewogICAgICAgIHRoaXMuX2xhc3RIYW5kbGVJZCA9IDA7CiAgICAgIH0KICAgICAgdGhpcy5fbGFzdEhhbmRsZUlkICs9IDE7CiAgICAgIHRoaXMuX2xhc3RJbW1lZGlhdGUgPSBzZXRJbW1lZGlhdGUoKCkgPT4gewogICAgICAgIGNhbGxiYWNrKERhdGUubm93KCkpOwogICAgICB9KTsKICAgICAgcmV0dXJuIHRoaXMuX2xhc3RIYW5kbGVJZDsKICAgIH0KICAgIGNhbmNlbEFuaW1hdGlvbkZyYW1lKF9pZCkgewogICAgICBpZiAodGhpcy5fbGFzdEltbWVkaWF0ZSkgewogICAgICAgIGNsZWFySW1tZWRpYXRlKHRoaXMuX2xhc3RJbW1lZGlhdGUpOwogICAgICB9CiAgICB9CiAgfTsKICB2YXIgQW5pbWF0aW9uRnJhbWVNYW5hZ2VyID0gY2xhc3MgewogICAgY29uc3RydWN0b3IoKSB7CiAgICAgIF9fcHVibGljRmllbGQodGhpcywgIl9zdHJhdGVneSIpOwogICAgICB0aGlzLl9zdHJhdGVneSA9IHR5cGVvZiByZXF1ZXN0QW5pbWF0aW9uRnJhbWUgPT09ICJmdW5jdGlvbiIgPyBuZXcgV2ViQW5pbWF0aW9uRnJhbWVTdHJhdGVneSgpIDogbmV3IE5vZGVBbmltYXRpb25GcmFtZVN0cmF0ZWd5KCk7CiAgICB9CiAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoY2FsbGJhY2spIHsKICAgICAgcmV0dXJuIHRoaXMuX3N0cmF0ZWd5LnJlcXVlc3RBbmltYXRpb25GcmFtZShjYWxsYmFjayk7CiAgICB9CiAgICBjYW5jZWxBbmltYXRpb25GcmFtZShpZCkgewogICAgICB0aGlzLl9zdHJhdGVneS5jYW5jZWxBbmltYXRpb25GcmFtZShpZCk7CiAgICB9CiAgfTsKCiAgLy8gc3JjL2NvbnN0YW50cy50cwogIHZhciBJU19CUk9XU0VSID0gdHlwZW9mIHdpbmRvdyAhPT0gInVuZGVmaW5lZCIgJiYgdHlwZW9mIHdpbmRvdy5kb2N1bWVudCAhPT0gInVuZGVmaW5lZCI7CiAgdmFyIFpJUF9TSUdOQVRVUkUgPSBuZXcgVWludDhBcnJheShbODAsIDc1LCAzLCA0XSk7CiAgdmFyIExPVFRJRV9KU09OX01BTkRBVE9SWV9GSUVMRFMgPSBbInYiLCAiaXAiLCAib3AiLCAibGF5ZXJzIiwgImZyIiwgInciLCAiaCJdOwogIHZhciBQQUNLQUdFX1ZFUlNJT04gPSAiMC4zMC4zIjsKICB2YXIgUEFDS0FHRV9OQU1FID0gIkBsb3R0aWVmaWxlcy9kb3Rsb3R0aWUtd2ViIjsKCiAgLy8gc3JjL2NvcmUvZG90bG90dGllLXBsYXllci5qcwogIHZhciBjcmVhdGVEb3RMb3R0aWVQbGF5ZXJNb2R1bGUgPSAoKCkgPT4gewogICAgdmFyIF9zY3JpcHREaXIgPSB0eXBlb2YgZG9jdW1lbnQgIT0gInVuZGVmaW5lZCIgPyBkb2N1bWVudC5jdXJyZW50U2NyaXB0Py5zcmMgOiB2b2lkIDA7CiAgICByZXR1cm4gZnVuY3Rpb24obW9kdWxlQXJnID0ge30pIHsKICAgICAgdmFyIGsgPSBtb2R1bGVBcmcsIGFhLCBiYSwgcmVhZHlQcm9taXNlID0gbmV3IFByb21pc2UoKGEsIGIpID0+IHsKICAgICAgICBhYSA9IGE7CiAgICAgICAgYmEgPSBiOwogICAgICB9KSwgY2EgPSBPYmplY3QuYXNzaWduKHt9LCBrKSwgZGEgPSAiLi90aGlzLnByb2dyYW0iLCB0ID0gIiI7CiAgICAgICJ1bmRlZmluZWQiICE9IHR5cGVvZiBkb2N1bWVudCAmJiBkb2N1bWVudC5jdXJyZW50U2NyaXB0ICYmICh0ID0gZG9jdW1lbnQuY3VycmVudFNjcmlwdC5zcmMpOwogICAgICBfc2NyaXB0RGlyICYmICh0ID0gX3NjcmlwdERpcik7CiAgICAgIHQuc3RhcnRzV2l0aCgiYmxvYjoiKSA/IHQgPSAiIiA6IHQgPSB0LnN1YnN0cigwLCB0LnJlcGxhY2UoL1s/I10uKi8sICIiKS5sYXN0SW5kZXhPZigiLyIpICsgMSk7CiAgICAgIHZhciBlYSA9IGsucHJpbnQgfHwgY29uc29sZS5sb2cuYmluZChjb25zb2xlKSwgdyA9IGsucHJpbnRFcnIgfHwgY29uc29sZS5lcnJvci5iaW5kKGNvbnNvbGUpOwogICAgICBPYmplY3QuYXNzaWduKGssIGNhKTsKICAgICAgY2EgPSBudWxsOwogICAgICBrLnRoaXNQcm9ncmFtICYmIChkYSA9IGsudGhpc1Byb2dyYW0pOwogICAgICB2YXIgeDsKICAgICAgay53YXNtQmluYXJ5ICYmICh4ID0gay53YXNtQmluYXJ5KTsKICAgICAgdmFyIGZhLCBoYSA9IGZhbHNlLCB5LCBBLCBCLCBDLCBFLCBGLCBqYSwga2E7CiAgICAgIGZ1bmN0aW9uIGxhKCkgewogICAgICAgIHZhciBhID0gZmEuYnVmZmVyOwogICAgICAgIGsuSEVBUDggPSB5ID0gbmV3IEludDhBcnJheShhKTsKICAgICAgICBrLkhFQVAxNiA9IEIgPSBuZXcgSW50MTZBcnJheShhKTsKICAgICAgICBrLkhFQVBVOCA9IEEgPSBuZXcgVWludDhBcnJheShhKTsKICAgICAgICBrLkhFQVBVMTYgPSBDID0gbmV3IFVpbnQxNkFycmF5KGEpOwogICAgICAgIGsuSEVBUDMyID0gRSA9IG5ldyBJbnQzMkFycmF5KGEpOwogICAgICAgIGsuSEVBUFUzMiA9IEYgPSBuZXcgVWludDMyQXJyYXkoYSk7CiAgICAgICAgay5IRUFQRjMyID0gamEgPSBuZXcgRmxvYXQzMkFycmF5KGEpOwogICAgICAgIGsuSEVBUEY2NCA9IGthID0gbmV3IEZsb2F0NjRBcnJheShhKTsKICAgICAgfQogICAgICB2YXIgbWEgPSBbXSwgbmEgPSBbXSwgb2EgPSBbXTsKICAgICAgZnVuY3Rpb24gcGEoKSB7CiAgICAgICAgdmFyIGEgPSBrLnByZVJ1bi5zaGlmdCgpOwogICAgICAgIG1hLnVuc2hpZnQoYSk7CiAgICAgIH0KICAgICAgdmFyIEcgPSAwLCBxYSA9IG51bGwsIEggPSBudWxsOwogICAgICBmdW5jdGlvbiByYShhKSB7CiAgICAgICAgay5vbkFib3J0Py4oYSk7CiAgICAgICAgYSA9ICJBYm9ydGVkKCIgKyBhICsgIikiOwogICAgICAgIHcoYSk7CiAgICAgICAgaGEgPSB0cnVlOwogICAgICAgIGEgPSBuZXcgV2ViQXNzZW1ibHkuUnVudGltZUVycm9yKGEgKyAiLiBCdWlsZCB3aXRoIC1zQVNTRVJUSU9OUyBmb3IgbW9yZSBpbmZvLiIpOwogICAgICAgIGJhKGEpOwogICAgICAgIHRocm93IGE7CiAgICAgIH0KICAgICAgdmFyIHNhID0gKGEpID0+IGEuc3RhcnRzV2l0aCgiZGF0YTphcHBsaWNhdGlvbi9vY3RldC1zdHJlYW07YmFzZTY0LCIpLCBJOwogICAgICBJID0gIkRvdExvdHRpZVBsYXllci53YXNtIjsKICAgICAgaWYgKCFzYShJKSkgewogICAgICAgIHZhciB0YSA9IEk7CiAgICAgICAgSSA9IGsubG9jYXRlRmlsZSA/IGsubG9jYXRlRmlsZSh0YSwgdCkgOiB0ICsgdGE7CiAgICAgIH0KICAgICAgZnVuY3Rpb24gdWEoYSkgewogICAgICAgIGlmIChhID09IEkgJiYgeCkgcmV0dXJuIG5ldyBVaW50OEFycmF5KHgpOwogICAgICAgIHRocm93ICJib3RoIGFzeW5jIGFuZCBzeW5jIGZldGNoaW5nIG9mIHRoZSB3YXNtIGZhaWxlZCI7CiAgICAgIH0KICAgICAgZnVuY3Rpb24gdmEoYSkgewogICAgICAgIHJldHVybiB4IHx8ICJmdW5jdGlvbiIgIT0gdHlwZW9mIGZldGNoID8gUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKSA9PiB1YShhKSkgOiBmZXRjaChhLCB7IGNyZWRlbnRpYWxzOiAic2FtZS1vcmlnaW4iIH0pLnRoZW4oKGIpID0+IHsKICAgICAgICAgIGlmICghYi5vaykgdGhyb3cgYGZhaWxlZCB0byBsb2FkIHdhc20gYmluYXJ5IGZpbGUgYXQgJyR7YX0nYDsKICAgICAgICAgIHJldHVybiBiLmFycmF5QnVmZmVyKCk7CiAgICAgICAgfSkuY2F0Y2goKCkgPT4gdWEoYSkpOwogICAgICB9CiAgICAgIGZ1bmN0aW9uIHdhKGEsIGIsIGMpIHsKICAgICAgICByZXR1cm4gdmEoYSkudGhlbigoZCkgPT4gV2ViQXNzZW1ibHkuaW5zdGFudGlhdGUoZCwgYikpLnRoZW4oYywgKGQpID0+IHsKICAgICAgICAgIHcoYGZhaWxlZCB0byBhc3luY2hyb25vdXNseSBwcmVwYXJlIHdhc206ICR7ZH1gKTsKICAgICAgICAgIHJhKGQpOwogICAgICAgIH0pOwogICAgICB9CiAgICAgIGZ1bmN0aW9uIHhhKGEsIGIpIHsKICAgICAgICB2YXIgYyA9IEk7CiAgICAgICAgcmV0dXJuIHggfHwgImZ1bmN0aW9uIiAhPSB0eXBlb2YgV2ViQXNzZW1ibHkuaW5zdGFudGlhdGVTdHJlYW1pbmcgfHwgc2EoYykgfHwgImZ1bmN0aW9uIiAhPSB0eXBlb2YgZmV0Y2ggPyB3YShjLCBhLCBiKSA6IGZldGNoKGMsIHsgY3JlZGVudGlhbHM6ICJzYW1lLW9yaWdpbiIgfSkudGhlbigKICAgICAgICAgIChkKSA9PiBXZWJBc3NlbWJseS5pbnN0YW50aWF0ZVN0cmVhbWluZyhkLCBhKS50aGVuKGIsIGZ1bmN0aW9uKGUpIHsKICAgICAgICAgICAgdyhgd2FzbSBzdHJlYW1pbmcgY29tcGlsZSBmYWlsZWQ6ICR7ZX1gKTsKICAgICAgICAgICAgdygiZmFsbGluZyBiYWNrIHRvIEFycmF5QnVmZmVyIGluc3RhbnRpYXRpb24iKTsKICAgICAgICAgICAgcmV0dXJuIHdhKGMsIGEsIGIpOwogICAgICAgICAgfSkKICAgICAgICApOwogICAgICB9CiAgICAgIHZhciB5YSA9IChhKSA9PiB7CiAgICAgICAgZm9yICg7IDAgPCBhLmxlbmd0aDsgKSBhLnNoaWZ0KCkoayk7CiAgICAgIH0sIHphID0gInVuZGVmaW5lZCIgIT0gdHlwZW9mIFRleHREZWNvZGVyID8gbmV3IFRleHREZWNvZGVyKCJ1dGY4IikgOiB2b2lkIDAsIEogPSAoYSwgYiwgYykgPT4gewogICAgICAgIHZhciBkID0gYiArIGM7CiAgICAgICAgZm9yIChjID0gYjsgYVtjXSAmJiAhKGMgPj0gZCk7ICkgKytjOwogICAgICAgIGlmICgxNiA8IGMgLSBiICYmIGEuYnVmZmVyICYmIHphKSByZXR1cm4gemEuZGVjb2RlKGEuc3ViYXJyYXkoYiwgYykpOwogICAgICAgIGZvciAoZCA9ICIiOyBiIDwgYzsgKSB7CiAgICAgICAgICB2YXIgZSA9IGFbYisrXTsKICAgICAgICAgIGlmIChlICYgMTI4KSB7CiAgICAgICAgICAgIHZhciBmID0gYVtiKytdICYgNjM7CiAgICAgICAgICAgIGlmICgxOTIgPT0gKGUgJiAyMjQpKSBkICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoKGUgJiAzMSkgPDwgNiB8IGYpOwogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICB2YXIgbCA9IGFbYisrXSAmIDYzOwogICAgICAgICAgICAgIGUgPSAyMjQgPT0gKGUgJiAyNDApID8gKGUgJiAxNSkgPDwgMTIgfCBmIDw8IDYgfCBsIDogKGUgJiA3KSA8PCAxOCB8IGYgPDwgMTIgfCBsIDw8IDYgfCBhW2IrK10gJiA2MzsKICAgICAgICAgICAgICA2NTUzNiA+IGUgPyBkICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoZSkgOiAoZSAtPSA2NTUzNiwgZCArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKDU1Mjk2IHwgZSA+PiAxMCwgNTYzMjAgfCBlICYgMTAyMykpOwogICAgICAgICAgICB9CiAgICAgICAgICB9IGVsc2UgZCArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGUpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gZDsKICAgICAgfTsKICAgICAgY2xhc3MgQWEgewogICAgICAgIGNvbnN0cnVjdG9yKGEpIHsKICAgICAgICAgIHRoaXMueWEgPSBhIC0gMjQ7CiAgICAgICAgfQogICAgICB9CiAgICAgIHZhciBCYSA9IDAsIENhID0gMCwgRGEgPSAoYSkgPT4gewogICAgICAgIGZvciAodmFyIGIgPSAwLCBjID0gMDsgYyA8IGEubGVuZ3RoOyArK2MpIHsKICAgICAgICAgIHZhciBkID0gYS5jaGFyQ29kZUF0KGMpOwogICAgICAgICAgMTI3ID49IGQgPyBiKysgOiAyMDQ3ID49IGQgPyBiICs9IDIgOiA1NTI5NiA8PSBkICYmIDU3MzQzID49IGQgPyAoYiArPSA0LCArK2MpIDogYiArPSAzOwogICAgICAgIH0KICAgICAgICByZXR1cm4gYjsKICAgICAgfSwgRWEgPSAoYSwgYiwgYywgZCkgPT4gewogICAgICAgIGlmICgwIDwgZCkgewogICAgICAgICAgZCA9IGMgKyBkIC0gMTsKICAgICAgICAgIGZvciAodmFyIGUgPSAwOyBlIDwgYS5sZW5ndGg7ICsrZSkgewogICAgICAgICAgICB2YXIgZiA9IGEuY2hhckNvZGVBdChlKTsKICAgICAgICAgICAgaWYgKDU1Mjk2IDw9IGYgJiYgNTczNDMgPj0gZikgewogICAgICAgICAgICAgIHZhciBsID0gYS5jaGFyQ29kZUF0KCsrZSk7CiAgICAgICAgICAgICAgZiA9IDY1NTM2ICsgKChmICYgMTAyMykgPDwgMTApIHwgbCAmIDEwMjM7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKDEyNyA+PSBmKSB7CiAgICAgICAgICAgICAgaWYgKGMgPj0gZCkgYnJlYWs7CiAgICAgICAgICAgICAgYltjKytdID0gZjsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICBpZiAoMjA0NyA+PSBmKSB7CiAgICAgICAgICAgICAgICBpZiAoYyArIDEgPj0gZCkgYnJlYWs7CiAgICAgICAgICAgICAgICBiW2MrK10gPSAxOTIgfCBmID4+IDY7CiAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIGlmICg2NTUzNSA+PSBmKSB7CiAgICAgICAgICAgICAgICAgIGlmIChjICsgMiA+PSBkKSBicmVhazsKICAgICAgICAgICAgICAgICAgYltjKytdID0gMjI0IHwgZiA+PiAxMjsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgIGlmIChjICsgMyA+PSBkKSBicmVhazsKICAgICAgICAgICAgICAgICAgYltjKytdID0gMjQwIHwgZiA+PiAxODsKICAgICAgICAgICAgICAgICAgYltjKytdID0gMTI4IHwgZiA+PiAxMiAmIDYzOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgYltjKytdID0gMTI4IHwgZiA+PiA2ICYgNjM7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGJbYysrXSA9IDEyOCB8IGYgJiA2MzsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgYltjXSA9IDA7CiAgICAgICAgfQogICAgICB9LCBGYSA9IHt9LCBHYSA9IChhKSA9PiB7CiAgICAgICAgZm9yICg7IGEubGVuZ3RoOyApIHsKICAgICAgICAgIHZhciBiID0gYS5wb3AoKTsKICAgICAgICAgIGEucG9wKCkoYik7CiAgICAgICAgfQogICAgICB9OwogICAgICBmdW5jdGlvbiBLKGEpIHsKICAgICAgICByZXR1cm4gdGhpcy5mcm9tV2lyZVR5cGUoRlthID4+IDJdKTsKICAgICAgfQogICAgICB2YXIgTCA9IHt9LCBNID0ge30sIEhhID0ge30sIElhLCBQID0gKGEsIGIsIGMpID0+IHsKICAgICAgICBmdW5jdGlvbiBkKGgpIHsKICAgICAgICAgIGggPSBjKGgpOwogICAgICAgICAgaWYgKGgubGVuZ3RoICE9PSBhLmxlbmd0aCkgdGhyb3cgbmV3IElhKCJNaXNtYXRjaGVkIHR5cGUgY29udmVydGVyIGNvdW50Iik7CiAgICAgICAgICBmb3IgKHZhciBuID0gMDsgbiA8IGEubGVuZ3RoOyArK24pIE8oYVtuXSwgaFtuXSk7CiAgICAgICAgfQogICAgICAgIGEuZm9yRWFjaChmdW5jdGlvbihoKSB7CiAgICAgICAgICBIYVtoXSA9IGI7CiAgICAgICAgfSk7CiAgICAgICAgdmFyIGUgPSBBcnJheShiLmxlbmd0aCksIGYgPSBbXSwgbCA9IDA7CiAgICAgICAgYi5mb3JFYWNoKChoLCBuKSA9PiB7CiAgICAgICAgICBNLmhhc093blByb3BlcnR5KGgpID8gZVtuXSA9IE1baF0gOiAoZi5wdXNoKGgpLCBMLmhhc093blByb3BlcnR5KGgpIHx8IChMW2hdID0gW10pLCBMW2hdLnB1c2goKCkgPT4gewogICAgICAgICAgICBlW25dID0gTVtoXTsKICAgICAgICAgICAgKytsOwogICAgICAgICAgICBsID09PSBmLmxlbmd0aCAmJiBkKGUpOwogICAgICAgICAgfSkpOwogICAgICAgIH0pOwogICAgICAgIDAgPT09IGYubGVuZ3RoICYmIGQoZSk7CiAgICAgIH0sIEphLCBRID0gKGEpID0+IHsKICAgICAgICBmb3IgKHZhciBiID0gIiI7IEFbYV07ICkgYiArPSBKYVtBW2ErK11dOwogICAgICAgIHJldHVybiBiOwogICAgICB9LCBSOwogICAgICBmdW5jdGlvbiBLYShhLCBiLCBjID0ge30pIHsKICAgICAgICB2YXIgZCA9IGIubmFtZTsKICAgICAgICBpZiAoIWEpIHRocm93IG5ldyBSKGB0eXBlICIke2R9IiBtdXN0IGhhdmUgYSBwb3NpdGl2ZSBpbnRlZ2VyIHR5cGVpZCBwb2ludGVyYCk7CiAgICAgICAgaWYgKE0uaGFzT3duUHJvcGVydHkoYSkpIHsKICAgICAgICAgIGlmIChjLmliKSByZXR1cm47CiAgICAgICAgICB0aHJvdyBuZXcgUihgQ2Fubm90IHJlZ2lzdGVyIHR5cGUgJyR7ZH0nIHR3aWNlYCk7CiAgICAgICAgfQogICAgICAgIE1bYV0gPSBiOwogICAgICAgIGRlbGV0ZSBIYVthXTsKICAgICAgICBMLmhhc093blByb3BlcnR5KGEpICYmIChiID0gTFthXSwgZGVsZXRlIExbYV0sIGIuZm9yRWFjaCgoZSkgPT4gZSgpKSk7CiAgICAgIH0KICAgICAgZnVuY3Rpb24gTyhhLCBiLCBjID0ge30pIHsKICAgICAgICBpZiAoISgiYXJnUGFja0FkdmFuY2UiIGluIGIpKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJyZWdpc3RlclR5cGUgcmVnaXN0ZXJlZEluc3RhbmNlIHJlcXVpcmVzIGFyZ1BhY2tBZHZhbmNlIik7CiAgICAgICAgcmV0dXJuIEthKGEsIGIsIGMpOwogICAgICB9CiAgICAgIHZhciBMYSA9IChhKSA9PiB7CiAgICAgICAgdGhyb3cgbmV3IFIoYS5tYS56YS54YS5uYW1lICsgIiBpbnN0YW5jZSBhbHJlYWR5IGRlbGV0ZWQiKTsKICAgICAgfSwgTWEgPSBmYWxzZSwgT2EgPSAoKSA9PiB7CiAgICAgIH0sIFBhID0gKGEsIGIsIGMpID0+IHsKICAgICAgICBpZiAoYiA9PT0gYykgcmV0dXJuIGE7CiAgICAgICAgaWYgKHZvaWQgMCA9PT0gYy5DYSkgcmV0dXJuIG51bGw7CiAgICAgICAgYSA9IFBhKGEsIGIsIGMuQ2EpOwogICAgICAgIHJldHVybiBudWxsID09PSBhID8gbnVsbCA6IGMuYWIoYSk7CiAgICAgIH0sIFFhID0ge30sIFJhID0gW10sIFNhID0gKCkgPT4gewogICAgICAgIGZvciAoOyBSYS5sZW5ndGg7ICkgewogICAgICAgICAgdmFyIGEgPSBSYS5wb3AoKTsKICAgICAgICAgIGEubWEuS2EgPSBmYWxzZTsKICAgICAgICAgIGFbImRlbGV0ZSJdKCk7CiAgICAgICAgfQogICAgICB9LCBUYSwgVWEgPSB7fSwgVmEgPSAoYSwgYikgPT4gewogICAgICAgIGlmICh2b2lkIDAgPT09IGIpIHRocm93IG5ldyBSKCJwdHIgc2hvdWxkIG5vdCBiZSB1bmRlZmluZWQiKTsKICAgICAgICBmb3IgKDsgYS5DYTsgKSBiID0gYS5OYShiKSwgYSA9IGEuQ2E7CiAgICAgICAgcmV0dXJuIFVhW2JdOwogICAgICB9LCBYYSA9IChhLCBiKSA9PiB7CiAgICAgICAgaWYgKCFiLnphIHx8ICFiLnlhKSB0aHJvdyBuZXcgSWEoIm1ha2VDbGFzc0hhbmRsZSByZXF1aXJlcyBwdHIgYW5kIHB0clR5cGUiKTsKICAgICAgICBpZiAoISFiLkRhICE9PSAhIWIuQWEpIHRocm93IG5ldyBJYSgiQm90aCBzbWFydFB0clR5cGUgYW5kIHNtYXJ0UHRyIG11c3QgYmUgc3BlY2lmaWVkIik7CiAgICAgICAgYi5jb3VudCA9IHsgdmFsdWU6IDEgfTsKICAgICAgICByZXR1cm4gV2EoT2JqZWN0LmNyZWF0ZShhLCB7IG1hOiB7IHZhbHVlOiBiLCB3cml0YWJsZTogdHJ1ZSB9IH0pKTsKICAgICAgfSwgV2EgPSAoYSkgPT4gewogICAgICAgIGlmICgidW5kZWZpbmVkIiA9PT0gdHlwZW9mIEZpbmFsaXphdGlvblJlZ2lzdHJ5KSByZXR1cm4gV2EgPSAoYikgPT4gYiwgYTsKICAgICAgICBNYSA9IG5ldyBGaW5hbGl6YXRpb25SZWdpc3RyeSgoYikgPT4gewogICAgICAgICAgYiA9IGIubWE7CiAgICAgICAgICAtLWIuY291bnQudmFsdWU7CiAgICAgICAgICAwID09PSBiLmNvdW50LnZhbHVlICYmIChiLkFhID8gYi5EYS5GYShiLkFhKSA6IGIuemEueGEuRmEoYi55YSkpOwogICAgICAgIH0pOwogICAgICAgIFdhID0gKGIpID0+IHsKICAgICAgICAgIHZhciBjID0gYi5tYTsKICAgICAgICAgIGMuQWEgJiYgTWEucmVnaXN0ZXIoYiwgeyBtYTogYyB9LCBiKTsKICAgICAgICAgIHJldHVybiBiOwogICAgICAgIH07CiAgICAgICAgT2EgPSAoYikgPT4gewogICAgICAgICAgTWEudW5yZWdpc3RlcihiKTsKICAgICAgICB9OwogICAgICAgIHJldHVybiBXYShhKTsKICAgICAgfTsKICAgICAgZnVuY3Rpb24gWWEoKSB7CiAgICAgIH0KICAgICAgdmFyIFphID0gKGEsIGIpID0+IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShiLCAibmFtZSIsIHsgdmFsdWU6IGEgfSksICRhID0gKGEsIGIsIGMpID0+IHsKICAgICAgICBpZiAodm9pZCAwID09PSBhW2JdLkJhKSB7CiAgICAgICAgICB2YXIgZCA9IGFbYl07CiAgICAgICAgICBhW2JdID0gZnVuY3Rpb24oLi4uZSkgewogICAgICAgICAgICBpZiAoIWFbYl0uQmEuaGFzT3duUHJvcGVydHkoZS5sZW5ndGgpKQogICAgICAgICAgICAgIHRocm93IG5ldyBSKAogICAgICAgICAgICAgICAgYEZ1bmN0aW9uICcke2N9JyBjYWxsZWQgd2l0aCBhbiBpbnZhbGlkIG51bWJlciBvZiBhcmd1bWVudHMgKCR7ZS5sZW5ndGh9KSAtIGV4cGVjdHMgb25lIG9mICgke2FbYl0uQmF9KSFgCiAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuIGFbYl0uQmFbZS5sZW5ndGhdLmFwcGx5KHRoaXMsIGUpOwogICAgICAgICAgfTsKICAgICAgICAgIGFbYl0uQmEgPSBbXTsKICAgICAgICAgIGFbYl0uQmFbZC5PYV0gPSBkOwogICAgICAgIH0KICAgICAgfSwgYWIgPSAoYSwgYiwgYykgPT4gewogICAgICAgIGlmIChrLmhhc093blByb3BlcnR5KGEpKSB7CiAgICAgICAgICBpZiAodm9pZCAwID09PSBjIHx8IHZvaWQgMCAhPT0ga1thXS5CYSAmJiB2b2lkIDAgIT09IGtbYV0uQmFbY10pCiAgICAgICAgICAgIHRocm93IG5ldyBSKGBDYW5ub3QgcmVnaXN0ZXIgcHVibGljIG5hbWUgJyR7YX0nIHR3aWNlYCk7CiAgICAgICAgICAkYShrLCBhLCBhKTsKICAgICAgICAgIGlmIChrLmhhc093blByb3BlcnR5KGMpKQogICAgICAgICAgICB0aHJvdyBuZXcgUihgQ2Fubm90IHJlZ2lzdGVyIG11bHRpcGxlIG92ZXJsb2FkcyBvZiBhIGZ1bmN0aW9uIHdpdGggdGhlIHNhbWUgbnVtYmVyIG9mIGFyZ3VtZW50cyAoJHtjfSkhYCk7CiAgICAgICAgICBrW2FdLkJhW2NdID0gYjsKICAgICAgICB9IGVsc2Uga1thXSA9IGIsIHZvaWQgMCAhPT0gYyAmJiAoa1thXS52YiA9IGMpOwogICAgICB9LCBiYiA9IChhKSA9PiB7CiAgICAgICAgaWYgKHZvaWQgMCA9PT0gYSkgcmV0dXJuICJfdW5rbm93biI7CiAgICAgICAgYSA9IGEucmVwbGFjZSgvW15hLXpBLVowLTlfXS9nLCAiJCIpOwogICAgICAgIHZhciBiID0gYS5jaGFyQ29kZUF0KDApOwogICAgICAgIHJldHVybiA0OCA8PSBiICYmIDU3ID49IGIgPyBgXyR7YX1gIDogYTsKICAgICAgfTsKICAgICAgZnVuY3Rpb24gY2IoYSwgYiwgYywgZCwgZSwgZiwgbCwgaCkgewogICAgICAgIHRoaXMubmFtZSA9IGE7CiAgICAgICAgdGhpcy5jb25zdHJ1Y3RvciA9IGI7CiAgICAgICAgdGhpcy5MYSA9IGM7CiAgICAgICAgdGhpcy5GYSA9IGQ7CiAgICAgICAgdGhpcy5DYSA9IGU7CiAgICAgICAgdGhpcy5jYiA9IGY7CiAgICAgICAgdGhpcy5OYSA9IGw7CiAgICAgICAgdGhpcy5hYiA9IGg7CiAgICAgICAgdGhpcy5rYiA9IFtdOwogICAgICB9CiAgICAgIHZhciBkYiA9IChhLCBiLCBjKSA9PiB7CiAgICAgICAgZm9yICg7IGIgIT09IGM7ICkgewogICAgICAgICAgaWYgKCFiLk5hKSB0aHJvdyBuZXcgUihgRXhwZWN0ZWQgbnVsbCBvciBpbnN0YW5jZSBvZiAke2MubmFtZX0sIGdvdCBhbiBpbnN0YW5jZSBvZiAke2IubmFtZX1gKTsKICAgICAgICAgIGEgPSBiLk5hKGEpOwogICAgICAgICAgYiA9IGIuQ2E7CiAgICAgICAgfQogICAgICAgIHJldHVybiBhOwogICAgICB9OwogICAgICBmdW5jdGlvbiBlYihhLCBiKSB7CiAgICAgICAgaWYgKG51bGwgPT09IGIpIHsKICAgICAgICAgIGlmICh0aGlzLlRhKSB0aHJvdyBuZXcgUihgbnVsbCBpcyBub3QgYSB2YWxpZCAke3RoaXMubmFtZX1gKTsKICAgICAgICAgIHJldHVybiAwOwogICAgICAgIH0KICAgICAgICBpZiAoIWIubWEpIHRocm93IG5ldyBSKGBDYW5ub3QgcGFzcyAiJHtmYihiKX0iIGFzIGEgJHt0aGlzLm5hbWV9YCk7CiAgICAgICAgaWYgKCFiLm1hLnlhKSB0aHJvdyBuZXcgUihgQ2Fubm90IHBhc3MgZGVsZXRlZCBvYmplY3QgYXMgYSBwb2ludGVyIG9mIHR5cGUgJHt0aGlzLm5hbWV9YCk7CiAgICAgICAgcmV0dXJuIGRiKGIubWEueWEsIGIubWEuemEueGEsIHRoaXMueGEpOwogICAgICB9CiAgICAgIGZ1bmN0aW9uIGdiKGEsIGIpIHsKICAgICAgICBpZiAobnVsbCA9PT0gYikgewogICAgICAgICAgaWYgKHRoaXMuVGEpIHRocm93IG5ldyBSKGBudWxsIGlzIG5vdCBhIHZhbGlkICR7dGhpcy5uYW1lfWApOwogICAgICAgICAgaWYgKHRoaXMuUWEpIHsKICAgICAgICAgICAgdmFyIGMgPSB0aGlzLlVhKCk7CiAgICAgICAgICAgIG51bGwgIT09IGEgJiYgYS5wdXNoKHRoaXMuRmEsIGMpOwogICAgICAgICAgICByZXR1cm4gYzsKICAgICAgICAgIH0KICAgICAgICAgIHJldHVybiAwOwogICAgICAgIH0KICAgICAgICBpZiAoIWIgfHwgIWIubWEpIHRocm93IG5ldyBSKGBDYW5ub3QgcGFzcyAiJHtmYihiKX0iIGFzIGEgJHt0aGlzLm5hbWV9YCk7CiAgICAgICAgaWYgKCFiLm1hLnlhKSB0aHJvdyBuZXcgUihgQ2Fubm90IHBhc3MgZGVsZXRlZCBvYmplY3QgYXMgYSBwb2ludGVyIG9mIHR5cGUgJHt0aGlzLm5hbWV9YCk7CiAgICAgICAgaWYgKCF0aGlzLlBhICYmIGIubWEuemEuUGEpCiAgICAgICAgICB0aHJvdyBuZXcgUigKICAgICAgICAgICAgYENhbm5vdCBjb252ZXJ0IGFyZ3VtZW50IG9mIHR5cGUgJHtiLm1hLkRhID8gYi5tYS5EYS5uYW1lIDogYi5tYS56YS5uYW1lfSB0byBwYXJhbWV0ZXIgdHlwZSAke3RoaXMubmFtZX1gCiAgICAgICAgICApOwogICAgICAgIGMgPSBkYihiLm1hLnlhLCBiLm1hLnphLnhhLCB0aGlzLnhhKTsKICAgICAgICBpZiAodGhpcy5RYSkgewogICAgICAgICAgaWYgKHZvaWQgMCA9PT0gYi5tYS5BYSkgdGhyb3cgbmV3IFIoIlBhc3NpbmcgcmF3IHBvaW50ZXIgdG8gc21hcnQgcG9pbnRlciBpcyBpbGxlZ2FsIik7CiAgICAgICAgICBzd2l0Y2ggKHRoaXMucGIpIHsKICAgICAgICAgICAgY2FzZSAwOgogICAgICAgICAgICAgIGlmIChiLm1hLkRhID09PSB0aGlzKSBjID0gYi5tYS5BYTsKICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUigKICAgICAgICAgICAgICAgICAgYENhbm5vdCBjb252ZXJ0IGFyZ3VtZW50IG9mIHR5cGUgJHtiLm1hLkRhID8gYi5tYS5EYS5uYW1lIDogYi5tYS56YS5uYW1lfSB0byBwYXJhbWV0ZXIgdHlwZSAke3RoaXMubmFtZX1gCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlIDE6CiAgICAgICAgICAgICAgYyA9IGIubWEuQWE7CiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgMjoKICAgICAgICAgICAgICBpZiAoYi5tYS5EYSA9PT0gdGhpcykgYyA9IGIubWEuQWE7CiAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICB2YXIgZCA9IGIuY2xvbmUoKTsKICAgICAgICAgICAgICAgIGMgPSB0aGlzLmxiKAogICAgICAgICAgICAgICAgICBjLAogICAgICAgICAgICAgICAgICBoYigoKSA9PiBkWyJkZWxldGUiXSgpKQogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIG51bGwgIT09IGEgJiYgYS5wdXNoKHRoaXMuRmEsIGMpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICB0aHJvdyBuZXcgUigiVW5zdXBwb3J0aW5nIHNoYXJpbmcgcG9saWN5Iik7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiBjOwogICAgICB9CiAgICAgIGZ1bmN0aW9uIGliKGEsIGIpIHsKICAgICAgICBpZiAobnVsbCA9PT0gYikgewogICAgICAgICAgaWYgKHRoaXMuVGEpIHRocm93IG5ldyBSKGBudWxsIGlzIG5vdCBhIHZhbGlkICR7dGhpcy5uYW1lfWApOwogICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgfQogICAgICAgIGlmICghYi5tYSkgdGhyb3cgbmV3IFIoYENhbm5vdCBwYXNzICIke2ZiKGIpfSIgYXMgYSAke3RoaXMubmFtZX1gKTsKICAgICAgICBpZiAoIWIubWEueWEpIHRocm93IG5ldyBSKGBDYW5ub3QgcGFzcyBkZWxldGVkIG9iamVjdCBhcyBhIHBvaW50ZXIgb2YgdHlwZSAke3RoaXMubmFtZX1gKTsKICAgICAgICBpZiAoYi5tYS56YS5QYSkgdGhyb3cgbmV3IFIoYENhbm5vdCBjb252ZXJ0IGFyZ3VtZW50IG9mIHR5cGUgJHtiLm1hLnphLm5hbWV9IHRvIHBhcmFtZXRlciB0eXBlICR7dGhpcy5uYW1lfWApOwogICAgICAgIHJldHVybiBkYihiLm1hLnlhLCBiLm1hLnphLnhhLCB0aGlzLnhhKTsKICAgICAgfQogICAgICBmdW5jdGlvbiBqYihhLCBiLCBjLCBkLCBlLCBmLCBsLCBoLCBuLCBtLCBwKSB7CiAgICAgICAgdGhpcy5uYW1lID0gYTsKICAgICAgICB0aGlzLnhhID0gYjsKICAgICAgICB0aGlzLlRhID0gYzsKICAgICAgICB0aGlzLlBhID0gZDsKICAgICAgICB0aGlzLlFhID0gZTsKICAgICAgICB0aGlzLmpiID0gZjsKICAgICAgICB0aGlzLnBiID0gbDsKICAgICAgICB0aGlzLlphID0gaDsKICAgICAgICB0aGlzLlVhID0gbjsKICAgICAgICB0aGlzLmxiID0gbTsKICAgICAgICB0aGlzLkZhID0gcDsKICAgICAgICBlIHx8IHZvaWQgMCAhPT0gYi5DYSA/IHRoaXMudG9XaXJlVHlwZSA9IGdiIDogKHRoaXMudG9XaXJlVHlwZSA9IGQgPyBlYiA6IGliLCB0aGlzLkVhID0gbnVsbCk7CiAgICAgIH0KICAgICAgdmFyIGtiID0gKGEsIGIsIGMpID0+IHsKICAgICAgICBpZiAoIWsuaGFzT3duUHJvcGVydHkoYSkpIHRocm93IG5ldyBJYSgiUmVwbGFjaW5nIG5vbmV4aXN0ZW50IHB1YmxpYyBzeW1ib2wiKTsKICAgICAgICB2b2lkIDAgIT09IGtbYV0uQmEgJiYgdm9pZCAwICE9PSBjID8ga1thXS5CYVtjXSA9IGIgOiAoa1thXSA9IGIsIGtbYV0uT2EgPSBjKTsKICAgICAgfSwgUywgbGIgPSAoYSwgYiwgYyA9IFtdKSA9PiB7CiAgICAgICAgYS5pbmNsdWRlcygiaiIpID8gKGEgPSBhLnJlcGxhY2UoL3AvZywgImkiKSwgYiA9ICgwLCBrWyJkeW5DYWxsXyIgKyBhXSkoYiwgLi4uYykpIDogYiA9IFMuZ2V0KGIpKC4uLmMpOwogICAgICAgIHJldHVybiBiOwogICAgICB9LCBtYiA9IChhLCBiKSA9PiAoLi4uYykgPT4gbGIoYSwgYiwgYyksIFQgPSAoYSwgYikgPT4gewogICAgICAgIGEgPSBRKGEpOwogICAgICAgIHZhciBjID0gYS5pbmNsdWRlcygiaiIpID8gbWIoYSwgYikgOiBTLmdldChiKTsKICAgICAgICBpZiAoImZ1bmN0aW9uIiAhPSB0eXBlb2YgYykgdGhyb3cgbmV3IFIoYHVua25vd24gZnVuY3Rpb24gcG9pbnRlciB3aXRoIHNpZ25hdHVyZSAke2F9OiAke2J9YCk7CiAgICAgICAgcmV0dXJuIGM7CiAgICAgIH0sIG5iLCBwYiA9IChhKSA9PiB7CiAgICAgICAgYSA9IG9iKGEpOwogICAgICAgIHZhciBiID0gUShhKTsKICAgICAgICBVKGEpOwogICAgICAgIHJldHVybiBiOwogICAgICB9LCBxYiA9IChhLCBiKSA9PiB7CiAgICAgICAgZnVuY3Rpb24gYyhmKSB7CiAgICAgICAgICBlW2ZdIHx8IE1bZl0gfHwgKEhhW2ZdID8gSGFbZl0uZm9yRWFjaChjKSA6IChkLnB1c2goZiksIGVbZl0gPSB0cnVlKSk7CiAgICAgICAgfQogICAgICAgIHZhciBkID0gW10sIGUgPSB7fTsKICAgICAgICBiLmZvckVhY2goYyk7CiAgICAgICAgdGhyb3cgbmV3IG5iKGAke2F9OiBgICsgZC5tYXAocGIpLmpvaW4oWyIsICJdKSk7CiAgICAgIH0sIHJiID0gKGEsIGIpID0+IHsKICAgICAgICBmb3IgKHZhciBjID0gW10sIGQgPSAwOyBkIDwgYTsgZCsrKSBjLnB1c2goRltiICsgNCAqIGQgPj4gMl0pOwogICAgICAgIHJldHVybiBjOwogICAgICB9OwogICAgICBmdW5jdGlvbiBzYihhKSB7CiAgICAgICAgZm9yICh2YXIgYiA9IDE7IGIgPCBhLmxlbmd0aDsgKytiKSBpZiAobnVsbCAhPT0gYVtiXSAmJiB2b2lkIDAgPT09IGFbYl0uRWEpIHJldHVybiB0cnVlOwogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgfQogICAgICBmdW5jdGlvbiB0YihhLCBiLCBjLCBkLCBlKSB7CiAgICAgICAgdmFyIGYgPSBiLmxlbmd0aDsKICAgICAgICBpZiAoMiA+IGYpIHRocm93IG5ldyBSKCJhcmdUeXBlcyBhcnJheSBzaXplIG1pc21hdGNoISBNdXN0IGF0IGxlYXN0IGdldCByZXR1cm4gdmFsdWUgYW5kICd0aGlzJyB0eXBlcyEiKTsKICAgICAgICB2YXIgbCA9IG51bGwgIT09IGJbMV0gJiYgbnVsbCAhPT0gYywgaCA9IHNiKGIpLCBuID0gInZvaWQiICE9PSBiWzBdLm5hbWUsIG0gPSBmIC0gMiwgcCA9IEFycmF5KG0pLCB1ID0gW10sIHYgPSBbXTsKICAgICAgICByZXR1cm4gWmEoYSwgZnVuY3Rpb24oLi4uZykgewogICAgICAgICAgaWYgKGcubGVuZ3RoICE9PSBtKSB0aHJvdyBuZXcgUihgZnVuY3Rpb24gJHthfSBjYWxsZWQgd2l0aCAke2cubGVuZ3RofSBhcmd1bWVudHMsIGV4cGVjdGVkICR7bX1gKTsKICAgICAgICAgIHYubGVuZ3RoID0gMDsKICAgICAgICAgIHUubGVuZ3RoID0gbCA/IDIgOiAxOwogICAgICAgICAgdVswXSA9IGU7CiAgICAgICAgICBpZiAobCkgewogICAgICAgICAgICB2YXIgcSA9IGJbMV0udG9XaXJlVHlwZSh2LCB0aGlzKTsKICAgICAgICAgICAgdVsxXSA9IHE7CiAgICAgICAgICB9CiAgICAgICAgICBmb3IgKHZhciByID0gMDsgciA8IG07ICsrcikgcFtyXSA9IGJbciArIDJdLnRvV2lyZVR5cGUodiwgZ1tyXSksIHUucHVzaChwW3JdKTsKICAgICAgICAgIGcgPSBkKC4uLnUpOwogICAgICAgICAgaWYgKGgpIEdhKHYpOwogICAgICAgICAgZWxzZQogICAgICAgICAgICBmb3IgKHIgPSBsID8gMSA6IDI7IHIgPCBiLmxlbmd0aDsgcisrKSB7CiAgICAgICAgICAgICAgdmFyIHogPSAxID09PSByID8gcSA6IHBbciAtIDJdOwogICAgICAgICAgICAgIG51bGwgIT09IGJbcl0uRWEgJiYgYltyXS5FYSh6KTsKICAgICAgICAgICAgfQogICAgICAgICAgcSA9IG4gPyBiWzBdLmZyb21XaXJlVHlwZShnKSA6IHZvaWQgMDsKICAgICAgICAgIHJldHVybiBxOwogICAgICAgIH0pOwogICAgICB9CiAgICAgIHZhciB1YiA9IChhKSA9PiB7CiAgICAgICAgYSA9IGEudHJpbSgpOwogICAgICAgIGNvbnN0IGIgPSBhLmluZGV4T2YoIigiKTsKICAgICAgICByZXR1cm4gLTEgIT09IGIgPyBhLnN1YnN0cigwLCBiKSA6IGE7CiAgICAgIH0sIHZiID0gW10sIFYgPSBbXSwgd2IgPSAoYSkgPT4gewogICAgICAgIDkgPCBhICYmIDAgPT09IC0tVlthICsgMV0gJiYgKFZbYV0gPSB2b2lkIDAsIHZiLnB1c2goYSkpOwogICAgICB9LCB5YiA9IChhKSA9PiB7CiAgICAgICAgaWYgKCFhKSB0aHJvdyBuZXcgUigiQ2Fubm90IHVzZSBkZWxldGVkIHZhbC4gaGFuZGxlID0gIiArIGEpOwogICAgICAgIHJldHVybiBWW2FdOwogICAgICB9LCBoYiA9IChhKSA9PiB7CiAgICAgICAgc3dpdGNoIChhKSB7CiAgICAgICAgICBjYXNlIHZvaWQgMDoKICAgICAgICAgICAgcmV0dXJuIDI7CiAgICAgICAgICBjYXNlIG51bGw6CiAgICAgICAgICAgIHJldHVybiA0OwogICAgICAgICAgY2FzZSB0cnVlOgogICAgICAgICAgICByZXR1cm4gNjsKICAgICAgICAgIGNhc2UgZmFsc2U6CiAgICAgICAgICAgIHJldHVybiA4OwogICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgY29uc3QgYiA9IHZiLnBvcCgpIHx8IFYubGVuZ3RoOwogICAgICAgICAgICBWW2JdID0gYTsKICAgICAgICAgICAgVltiICsgMV0gPSAxOwogICAgICAgICAgICByZXR1cm4gYjsKICAgICAgICB9CiAgICAgIH0sIHpiID0gewogICAgICAgIG5hbWU6ICJlbXNjcmlwdGVuOjp2YWwiLAogICAgICAgIGZyb21XaXJlVHlwZTogKGEpID0+IHsKICAgICAgICAgIHZhciBiID0geWIoYSk7CiAgICAgICAgICB3YihhKTsKICAgICAgICAgIHJldHVybiBiOwogICAgICAgIH0sCiAgICAgICAgdG9XaXJlVHlwZTogKGEsIGIpID0+IGhiKGIpLAogICAgICAgIGFyZ1BhY2tBZHZhbmNlOiA4LAogICAgICAgIHJlYWRWYWx1ZUZyb21Qb2ludGVyOiBLLAogICAgICAgIEVhOiBudWxsCiAgICAgIH0sIEFiID0gKGEsIGIsIGMpID0+IHsKICAgICAgICBzd2l0Y2ggKGIpIHsKICAgICAgICAgIGNhc2UgMToKICAgICAgICAgICAgcmV0dXJuIGMgPyBmdW5jdGlvbihkKSB7CiAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZnJvbVdpcmVUeXBlKHlbZF0pOwogICAgICAgICAgICB9IDogZnVuY3Rpb24oZCkgewogICAgICAgICAgICAgIHJldHVybiB0aGlzLmZyb21XaXJlVHlwZShBW2RdKTsKICAgICAgICAgICAgfTsKICAgICAgICAgIGNhc2UgMjoKICAgICAgICAgICAgcmV0dXJuIGMgPyBmdW5jdGlvbihkKSB7CiAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZnJvbVdpcmVUeXBlKEJbZCA+PiAxXSk7CiAgICAgICAgICAgIH0gOiBmdW5jdGlvbihkKSB7CiAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZnJvbVdpcmVUeXBlKENbZCA+PiAxXSk7CiAgICAgICAgICAgIH07CiAgICAgICAgICBjYXNlIDQ6CiAgICAgICAgICAgIHJldHVybiBjID8gZnVuY3Rpb24oZCkgewogICAgICAgICAgICAgIHJldHVybiB0aGlzLmZyb21XaXJlVHlwZShFW2QgPj4gMl0pOwogICAgICAgICAgICB9IDogZnVuY3Rpb24oZCkgewogICAgICAgICAgICAgIHJldHVybiB0aGlzLmZyb21XaXJlVHlwZShGW2QgPj4gMl0pOwogICAgICAgICAgICB9OwogICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgaW52YWxpZCBpbnRlZ2VyIHdpZHRoICgke2J9KTogJHthfWApOwogICAgICAgIH0KICAgICAgfSwgQmIgPSAoYSwgYikgPT4gewogICAgICAgIHZhciBjID0gTVthXTsKICAgICAgICBpZiAodm9pZCAwID09PSBjKSB0aHJvdyBhID0gYCR7Yn0gaGFzIHVua25vd24gdHlwZSAke3BiKGEpfWAsIG5ldyBSKGEpOwogICAgICAgIHJldHVybiBjOwogICAgICB9LCBmYiA9IChhKSA9PiB7CiAgICAgICAgaWYgKG51bGwgPT09IGEpIHJldHVybiAibnVsbCI7CiAgICAgICAgdmFyIGIgPSB0eXBlb2YgYTsKICAgICAgICByZXR1cm4gIm9iamVjdCIgPT09IGIgfHwgImFycmF5IiA9PT0gYiB8fCAiZnVuY3Rpb24iID09PSBiID8gYS50b1N0cmluZygpIDogIiIgKyBhOwogICAgICB9LCBDYiA9IChhLCBiKSA9PiB7CiAgICAgICAgc3dpdGNoIChiKSB7CiAgICAgICAgICBjYXNlIDQ6CiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbihjKSB7CiAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZnJvbVdpcmVUeXBlKGphW2MgPj4gMl0pOwogICAgICAgICAgICB9OwogICAgICAgICAgY2FzZSA4OgogICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24oYykgewogICAgICAgICAgICAgIHJldHVybiB0aGlzLmZyb21XaXJlVHlwZShrYVtjID4+IDNdKTsKICAgICAgICAgICAgfTsKICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYGludmFsaWQgZmxvYXQgd2lkdGggKCR7Yn0pOiAke2F9YCk7CiAgICAgICAgfQogICAgICB9LCBEYiA9IChhLCBiLCBjKSA9PiB7CiAgICAgICAgc3dpdGNoIChiKSB7CiAgICAgICAgICBjYXNlIDE6CiAgICAgICAgICAgIHJldHVybiBjID8gKGQpID0+IHlbZF0gOiAoZCkgPT4gQVtkXTsKICAgICAgICAgIGNhc2UgMjoKICAgICAgICAgICAgcmV0dXJuIGMgPyAoZCkgPT4gQltkID4+IDFdIDogKGQpID0+IENbZCA+PiAxXTsKICAgICAgICAgIGNhc2UgNDoKICAgICAgICAgICAgcmV0dXJuIGMgPyAoZCkgPT4gRVtkID4+IDJdIDogKGQpID0+IEZbZCA+PiAyXTsKICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYGludmFsaWQgaW50ZWdlciB3aWR0aCAoJHtifSk6ICR7YX1gKTsKICAgICAgICB9CiAgICAgIH0sIEViID0gInVuZGVmaW5lZCIgIT0gdHlwZW9mIFRleHREZWNvZGVyID8gbmV3IFRleHREZWNvZGVyKCJ1dGYtMTZsZSIpIDogdm9pZCAwLCBGYiA9IChhLCBiKSA9PiB7CiAgICAgICAgdmFyIGMgPSBhID4+IDE7CiAgICAgICAgZm9yICh2YXIgZCA9IGMgKyBiIC8gMjsgIShjID49IGQpICYmIENbY107ICkgKytjOwogICAgICAgIGMgPDw9IDE7CiAgICAgICAgaWYgKDMyIDwgYyAtIGEgJiYgRWIpIHJldHVybiBFYi5kZWNvZGUoQS5zdWJhcnJheShhLCBjKSk7CiAgICAgICAgYyA9ICIiOwogICAgICAgIGZvciAoZCA9IDA7ICEoZCA+PSBiIC8gMik7ICsrZCkgewogICAgICAgICAgdmFyIGUgPSBCW2EgKyAyICogZCA+PiAxXTsKICAgICAgICAgIGlmICgwID09IGUpIGJyZWFrOwogICAgICAgICAgYyArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGUpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gYzsKICAgICAgfSwgR2IgPSAoYSwgYiwgYykgPT4gewogICAgICAgIGMgPz8gKGMgPSAyMTQ3NDgzNjQ3KTsKICAgICAgICBpZiAoMiA+IGMpIHJldHVybiAwOwogICAgICAgIGMgLT0gMjsKICAgICAgICB2YXIgZCA9IGI7CiAgICAgICAgYyA9IGMgPCAyICogYS5sZW5ndGggPyBjIC8gMiA6IGEubGVuZ3RoOwogICAgICAgIGZvciAodmFyIGUgPSAwOyBlIDwgYzsgKytlKSBCW2IgPj4gMV0gPSBhLmNoYXJDb2RlQXQoZSksIGIgKz0gMjsKICAgICAgICBCW2IgPj4gMV0gPSAwOwogICAgICAgIHJldHVybiBiIC0gZDsKICAgICAgfSwgSGIgPSAoYSkgPT4gMiAqIGEubGVuZ3RoLCBJYiA9IChhLCBiKSA9PiB7CiAgICAgICAgZm9yICh2YXIgYyA9IDAsIGQgPSAiIjsgIShjID49IGIgLyA0KTsgKSB7CiAgICAgICAgICB2YXIgZSA9IEVbYSArIDQgKiBjID4+IDJdOwogICAgICAgICAgaWYgKDAgPT0gZSkgYnJlYWs7CiAgICAgICAgICArK2M7CiAgICAgICAgICA2NTUzNiA8PSBlID8gKGUgLT0gNjU1MzYsIGQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZSg1NTI5NiB8IGUgPj4gMTAsIDU2MzIwIHwgZSAmIDEwMjMpKSA6IGQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShlKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGQ7CiAgICAgIH0sIEpiID0gKGEsIGIsIGMpID0+IHsKICAgICAgICBjID8/IChjID0gMjE0NzQ4MzY0Nyk7CiAgICAgICAgaWYgKDQgPiBjKSByZXR1cm4gMDsKICAgICAgICB2YXIgZCA9IGI7CiAgICAgICAgYyA9IGQgKyBjIC0gNDsKICAgICAgICBmb3IgKHZhciBlID0gMDsgZSA8IGEubGVuZ3RoOyArK2UpIHsKICAgICAgICAgIHZhciBmID0gYS5jaGFyQ29kZUF0KGUpOwogICAgICAgICAgaWYgKDU1Mjk2IDw9IGYgJiYgNTczNDMgPj0gZikgewogICAgICAgICAgICB2YXIgbCA9IGEuY2hhckNvZGVBdCgrK2UpOwogICAgICAgICAgICBmID0gNjU1MzYgKyAoKGYgJiAxMDIzKSA8PCAxMCkgfCBsICYgMTAyMzsKICAgICAgICAgIH0KICAgICAgICAgIEVbYiA+PiAyXSA9IGY7CiAgICAgICAgICBiICs9IDQ7CiAgICAgICAgICBpZiAoYiArIDQgPiBjKSBicmVhazsKICAgICAgICB9CiAgICAgICAgRVtiID4+IDJdID0gMDsKICAgICAgICByZXR1cm4gYiAtIGQ7CiAgICAgIH0sIEtiID0gKGEpID0+IHsKICAgICAgICBmb3IgKHZhciBiID0gMCwgYyA9IDA7IGMgPCBhLmxlbmd0aDsgKytjKSB7CiAgICAgICAgICB2YXIgZCA9IGEuY2hhckNvZGVBdChjKTsKICAgICAgICAgIDU1Mjk2IDw9IGQgJiYgNTczNDMgPj0gZCAmJiArK2M7CiAgICAgICAgICBiICs9IDQ7CiAgICAgICAgfQogICAgICAgIHJldHVybiBiOwogICAgICB9LCBMYiA9IFtdLCBNYiA9IChhKSA9PiB7CiAgICAgICAgdmFyIGIgPSBMYi5sZW5ndGg7CiAgICAgICAgTGIucHVzaChhKTsKICAgICAgICByZXR1cm4gYjsKICAgICAgfSwgTmIgPSAoYSwgYikgPT4gewogICAgICAgIGZvciAodmFyIGMgPSBBcnJheShhKSwgZCA9IDA7IGQgPCBhOyArK2QpIGNbZF0gPSBCYihGW2IgKyA0ICogZCA+PiAyXSwgInBhcmFtZXRlciAiICsgZCk7CiAgICAgICAgcmV0dXJuIGM7CiAgICAgIH0sIE9iID0gUmVmbGVjdC5jb25zdHJ1Y3QsIFBiID0ge30sIFJiID0gKCkgPT4gewogICAgICAgIGlmICghUWIpIHsKICAgICAgICAgIHZhciBhID0gewogICAgICAgICAgICBVU0VSOiAid2ViX3VzZXIiLAogICAgICAgICAgICBMT0dOQU1FOiAid2ViX3VzZXIiLAogICAgICAgICAgICBQQVRIOiAiLyIsCiAgICAgICAgICAgIFBXRDogIi8iLAogICAgICAgICAgICBIT01FOiAiL2hvbWUvd2ViX3VzZXIiLAogICAgICAgICAgICBMQU5HOiAoIm9iamVjdCIgPT0gdHlwZW9mIG5hdmlnYXRvciAmJiBuYXZpZ2F0b3IubGFuZ3VhZ2VzICYmIG5hdmlnYXRvci5sYW5ndWFnZXNbMF0gfHwgIkMiKS5yZXBsYWNlKAogICAgICAgICAgICAgICItIiwKICAgICAgICAgICAgICAiXyIKICAgICAgICAgICAgKSArICIuVVRGLTgiLAogICAgICAgICAgICBfOiBkYSB8fCAiLi90aGlzLnByb2dyYW0iCiAgICAgICAgICB9LCBiOwogICAgICAgICAgZm9yIChiIGluIFBiKSB2b2lkIDAgPT09IFBiW2JdID8gZGVsZXRlIGFbYl0gOiBhW2JdID0gUGJbYl07CiAgICAgICAgICB2YXIgYyA9IFtdOwogICAgICAgICAgZm9yIChiIGluIGEpIGMucHVzaChgJHtifT0ke2FbYl19YCk7CiAgICAgICAgICBRYiA9IGM7CiAgICAgICAgfQogICAgICAgIHJldHVybiBRYjsKICAgICAgfSwgUWIsIFNiID0gW251bGwsIFtdLCBbXV0sIFRiID0gKCkgPT4gewogICAgICAgIGlmICgib2JqZWN0IiA9PSB0eXBlb2YgY3J5cHRvICYmICJmdW5jdGlvbiIgPT0gdHlwZW9mIGNyeXB0by5nZXRSYW5kb21WYWx1ZXMpCiAgICAgICAgICByZXR1cm4gKGEpID0+IGNyeXB0by5nZXRSYW5kb21WYWx1ZXMoYSk7CiAgICAgICAgcmEoImluaXRSYW5kb21EZXZpY2UiKTsKICAgICAgfSwgVWIgPSAoYSkgPT4gKFViID0gVGIoKSkoYSksIFZiID0gKGEpID0+IDAgPT09IGEgJSA0ICYmICgwICE9PSBhICUgMTAwIHx8IDAgPT09IGEgJSA0MDApLCBXYiA9IFszMSwgMjksIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzEsIDMwLCAzMSwgMzAsIDMxXSwgWGIgPSBbMzEsIDI4LCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMxLCAzMCwgMzEsIDMwLCAzMV07CiAgICAgIGZ1bmN0aW9uIFliKGEpIHsKICAgICAgICB2YXIgYiA9IEFycmF5KERhKGEpICsgMSk7CiAgICAgICAgRWEoYSwgYiwgMCwgYi5sZW5ndGgpOwogICAgICAgIHJldHVybiBiOwogICAgICB9CiAgICAgIHZhciBaYiA9IChhLCBiLCBjLCBkKSA9PiB7CiAgICAgICAgZnVuY3Rpb24gZShnLCBxLCByKSB7CiAgICAgICAgICBmb3IgKGcgPSAibnVtYmVyIiA9PSB0eXBlb2YgZyA/IGcudG9TdHJpbmcoKSA6IGcgfHwgIiI7IGcubGVuZ3RoIDwgcTsgKSBnID0gclswXSArIGc7CiAgICAgICAgICByZXR1cm4gZzsKICAgICAgICB9CiAgICAgICAgZnVuY3Rpb24gZihnLCBxKSB7CiAgICAgICAgICByZXR1cm4gZShnLCBxLCAiMCIpOwogICAgICAgIH0KICAgICAgICBmdW5jdGlvbiBsKGcsIHEpIHsKICAgICAgICAgIGZ1bmN0aW9uIHIoTikgewogICAgICAgICAgICByZXR1cm4gMCA+IE4gPyAtMSA6IDAgPCBOID8gMSA6IDA7CiAgICAgICAgICB9CiAgICAgICAgICB2YXIgejsKICAgICAgICAgIDAgPT09ICh6ID0gcihnLmdldEZ1bGxZZWFyKCkgLSBxLmdldEZ1bGxZZWFyKCkpKSAmJiAwID09PSAoeiA9IHIoZy5nZXRNb250aCgpIC0gcS5nZXRNb250aCgpKSkgJiYgKHogPSByKGcuZ2V0RGF0ZSgpIC0gcS5nZXREYXRlKCkpKTsKICAgICAgICAgIHJldHVybiB6OwogICAgICAgIH0KICAgICAgICBmdW5jdGlvbiBoKGcpIHsKICAgICAgICAgIHN3aXRjaCAoZy5nZXREYXkoKSkgewogICAgICAgICAgICBjYXNlIDA6CiAgICAgICAgICAgICAgcmV0dXJuIG5ldyBEYXRlKGcuZ2V0RnVsbFllYXIoKSAtIDEsIDExLCAyOSk7CiAgICAgICAgICAgIGNhc2UgMToKICAgICAgICAgICAgICByZXR1cm4gZzsKICAgICAgICAgICAgY2FzZSAyOgogICAgICAgICAgICAgIHJldHVybiBuZXcgRGF0ZShnLmdldEZ1bGxZZWFyKCksIDAsIDMpOwogICAgICAgICAgICBjYXNlIDM6CiAgICAgICAgICAgICAgcmV0dXJuIG5ldyBEYXRlKGcuZ2V0RnVsbFllYXIoKSwgMCwgMik7CiAgICAgICAgICAgIGNhc2UgNDoKICAgICAgICAgICAgICByZXR1cm4gbmV3IERhdGUoZy5nZXRGdWxsWWVhcigpLCAwLCAxKTsKICAgICAgICAgICAgY2FzZSA1OgogICAgICAgICAgICAgIHJldHVybiBuZXcgRGF0ZShnLmdldEZ1bGxZZWFyKCkgLSAxLCAxMSwgMzEpOwogICAgICAgICAgICBjYXNlIDY6CiAgICAgICAgICAgICAgcmV0dXJuIG5ldyBEYXRlKGcuZ2V0RnVsbFllYXIoKSAtIDEsIDExLCAzMCk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGZ1bmN0aW9uIG4oZykgewogICAgICAgICAgdmFyIHEgPSBnLklhOwogICAgICAgICAgZm9yIChnID0gbmV3IERhdGUobmV3IERhdGUoZy5KYSArIDE5MDAsIDAsIDEpLmdldFRpbWUoKSk7IDAgPCBxOyApIHsKICAgICAgICAgICAgdmFyIHIgPSBnLmdldE1vbnRoKCksIHogPSAoVmIoZy5nZXRGdWxsWWVhcigpKSA/IFdiIDogWGIpW3JdOwogICAgICAgICAgICBpZiAocSA+IHogLSBnLmdldERhdGUoKSkKICAgICAgICAgICAgICBxIC09IHogLSBnLmdldERhdGUoKSArIDEsIGcuc2V0RGF0ZSgxKSwgMTEgPiByID8gZy5zZXRNb250aChyICsgMSkgOiAoZy5zZXRNb250aCgwKSwgZy5zZXRGdWxsWWVhcihnLmdldEZ1bGxZZWFyKCkgKyAxKSk7CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgIGcuc2V0RGF0ZShnLmdldERhdGUoKSArIHEpOwogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICByID0gbmV3IERhdGUoZy5nZXRGdWxsWWVhcigpICsgMSwgMCwgNCk7CiAgICAgICAgICBxID0gaChuZXcgRGF0ZShnLmdldEZ1bGxZZWFyKCksIDAsIDQpKTsKICAgICAgICAgIHIgPSBoKHIpOwogICAgICAgICAgcmV0dXJuIDAgPj0gbChxLCBnKSA/IDAgPj0gbChyLCBnKSA/IGcuZ2V0RnVsbFllYXIoKSArIDEgOiBnLmdldEZ1bGxZZWFyKCkgOiBnLmdldEZ1bGxZZWFyKCkgLSAxOwogICAgICAgIH0KICAgICAgICB2YXIgbSA9IEZbZCArIDQwID4+IDJdOwogICAgICAgIGQgPSB7CiAgICAgICAgICBzYjogRVtkID4+IDJdLAogICAgICAgICAgcmI6IEVbZCArIDQgPj4gMl0sCiAgICAgICAgICBSYTogRVtkICsgOCA+PiAyXSwKICAgICAgICAgIFZhOiBFW2QgKyAxMiA+PiAyXSwKICAgICAgICAgIFNhOiBFW2QgKyAxNiA+PiAyXSwKICAgICAgICAgIEphOiBFW2QgKyAyMCA+PiAyXSwKICAgICAgICAgIEdhOiBFW2QgKyAyNCA+PiAyXSwKICAgICAgICAgIElhOiBFW2QgKyAyOCA+PiAyXSwKICAgICAgICAgIHdiOiBFW2QgKyAzMiA+PiAyXSwKICAgICAgICAgIHFiOiBFW2QgKyAzNiA+PiAyXSwKICAgICAgICAgIHRiOiBtID8gbSA/IEooQSwgbSkgOiAiIiA6ICIiCiAgICAgICAgfTsKICAgICAgICBjID0gYyA/IEooQSwgYykgOiAiIjsKICAgICAgICBtID0gewogICAgICAgICAgIiVjIjogIiVhICViICVkICVIOiVNOiVTICVZIiwKICAgICAgICAgICIlRCI6ICIlbS8lZC8leSIsCiAgICAgICAgICAiJUYiOiAiJVktJW0tJWQiLAogICAgICAgICAgIiVoIjogIiViIiwKICAgICAgICAgICIlciI6ICIlSTolTTolUyAlcCIsCiAgICAgICAgICAiJVIiOiAiJUg6JU0iLAogICAgICAgICAgIiVUIjogIiVIOiVNOiVTIiwKICAgICAgICAgICIleCI6ICIlbS8lZC8leSIsCiAgICAgICAgICAiJVgiOiAiJUg6JU06JVMiLAogICAgICAgICAgIiVFYyI6ICIlYyIsCiAgICAgICAgICAiJUVDIjogIiVDIiwKICAgICAgICAgICIlRXgiOiAiJW0vJWQvJXkiLAogICAgICAgICAgIiVFWCI6ICIlSDolTTolUyIsCiAgICAgICAgICAiJUV5IjogIiV5IiwKICAgICAgICAgICIlRVkiOiAiJVkiLAogICAgICAgICAgIiVPZCI6ICIlZCIsCiAgICAgICAgICAiJU9lIjogIiVlIiwKICAgICAgICAgICIlT0giOiAiJUgiLAogICAgICAgICAgIiVPSSI6ICIlSSIsCiAgICAgICAgICAiJU9tIjogIiVtIiwKICAgICAgICAgICIlT00iOiAiJU0iLAogICAgICAgICAgIiVPUyI6ICIlUyIsCiAgICAgICAgICAiJU91IjogIiV1IiwKICAgICAgICAgICIlT1UiOiAiJVUiLAogICAgICAgICAgIiVPViI6ICIlViIsCiAgICAgICAgICAiJU93IjogIiV3IiwKICAgICAgICAgICIlT1ciOiAiJVciLAogICAgICAgICAgIiVPeSI6ICIleSIKICAgICAgICB9OwogICAgICAgIGZvciAodmFyIHAgaW4gbSkgYyA9IGMucmVwbGFjZShuZXcgUmVnRXhwKHAsICJnIiksIG1bcF0pOwogICAgICAgIHZhciB1ID0gIlN1bmRheSBNb25kYXkgVHVlc2RheSBXZWRuZXNkYXkgVGh1cnNkYXkgRnJpZGF5IFNhdHVyZGF5Ii5zcGxpdCgiICIpLCB2ID0gIkphbnVhcnkgRmVicnVhcnkgTWFyY2ggQXByaWwgTWF5IEp1bmUgSnVseSBBdWd1c3QgU2VwdGVtYmVyIE9jdG9iZXIgTm92ZW1iZXIgRGVjZW1iZXIiLnNwbGl0KCIgIik7CiAgICAgICAgbSA9IHsKICAgICAgICAgICIlYSI6IChnKSA9PiB1W2cuR2FdLnN1YnN0cmluZygwLCAzKSwKICAgICAgICAgICIlQSI6IChnKSA9PiB1W2cuR2FdLAogICAgICAgICAgIiViIjogKGcpID0+IHZbZy5TYV0uc3Vic3RyaW5nKDAsIDMpLAogICAgICAgICAgIiVCIjogKGcpID0+IHZbZy5TYV0sCiAgICAgICAgICAiJUMiOiAoZykgPT4gZigoZy5KYSArIDE5MDApIC8gMTAwIHwgMCwgMiksCiAgICAgICAgICAiJWQiOiAoZykgPT4gZihnLlZhLCAyKSwKICAgICAgICAgICIlZSI6IChnKSA9PiBlKGcuVmEsIDIsICIgIiksCiAgICAgICAgICAiJWciOiAoZykgPT4gbihnKS50b1N0cmluZygpLnN1YnN0cmluZygyKSwKICAgICAgICAgICIlRyI6IG4sCiAgICAgICAgICAiJUgiOiAoZykgPT4gZihnLlJhLCAyKSwKICAgICAgICAgICIlSSI6IChnKSA9PiB7CiAgICAgICAgICAgIGcgPSBnLlJhOwogICAgICAgICAgICAwID09IGcgPyBnID0gMTIgOiAxMiA8IGcgJiYgKGcgLT0gMTIpOwogICAgICAgICAgICByZXR1cm4gZihnLCAyKTsKICAgICAgICAgIH0sCiAgICAgICAgICAiJWoiOiAoZykgPT4gewogICAgICAgICAgICBmb3IgKHZhciBxID0gMCwgciA9IDA7IHIgPD0gZy5TYSAtIDE7IHEgKz0gKFZiKGcuSmEgKyAxOTAwKSA/IFdiIDogWGIpW3IrK10pIDsKICAgICAgICAgICAgcmV0dXJuIGYoZy5WYSArIHEsIDMpOwogICAgICAgICAgfSwKICAgICAgICAgICIlbSI6IChnKSA9PiBmKGcuU2EgKyAxLCAyKSwKICAgICAgICAgICIlTSI6IChnKSA9PiBmKGcucmIsIDIpLAogICAgICAgICAgIiVuIjogKCkgPT4gIlxuIiwKICAgICAgICAgICIlcCI6IChnKSA9PiAwIDw9IGcuUmEgJiYgMTIgPiBnLlJhID8gIkFNIiA6ICJQTSIsCiAgICAgICAgICAiJVMiOiAoZykgPT4gZihnLnNiLCAyKSwKICAgICAgICAgICIldCI6ICgpID0+ICIJIiwKICAgICAgICAgICIldSI6IChnKSA9PiBnLkdhIHx8IDcsCiAgICAgICAgICAiJVUiOiAoZykgPT4gZihNYXRoLmZsb29yKChnLklhICsgNyAtIGcuR2EpIC8gNyksIDIpLAogICAgICAgICAgIiVWIjogKGcpID0+IHsKICAgICAgICAgICAgdmFyIHEgPSBNYXRoLmZsb29yKChnLklhICsgNyAtIChnLkdhICsgNikgJSA3KSAvIDcpOwogICAgICAgICAgICAyID49IChnLkdhICsgMzcxIC0gZy5JYSAtIDIpICUgNyAmJiBxKys7CiAgICAgICAgICAgIGlmIChxKSA1MyA9PSBxICYmIChyID0gKGcuR2EgKyAzNzEgLSBnLklhKSAlIDcsIDQgPT0gciB8fCAzID09IHIgJiYgVmIoZy5KYSkgfHwgKHEgPSAxKSk7CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgIHEgPSA1MjsKICAgICAgICAgICAgICB2YXIgciA9IChnLkdhICsgNyAtIGcuSWEgLSAxKSAlIDc7CiAgICAgICAgICAgICAgKDQgPT0gciB8fCA1ID09IHIgJiYgVmIoZy5KYSAlIDQwMCAtIDEpKSAmJiBxKys7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuIGYocSwgMik7CiAgICAgICAgICB9LAogICAgICAgICAgIiV3IjogKGcpID0+IGcuR2EsCiAgICAgICAgICAiJVciOiAoZykgPT4gZihNYXRoLmZsb29yKChnLklhICsgNyAtIChnLkdhICsgNikgJSA3KSAvIDcpLCAyKSwKICAgICAgICAgICIleSI6IChnKSA9PiAoZy5KYSArIDE5MDApLnRvU3RyaW5nKCkuc3Vic3RyaW5nKDIpLAogICAgICAgICAgIiVZIjogKGcpID0+IGcuSmEgKyAxOTAwLAogICAgICAgICAgIiV6IjogKGcpID0+IHsKICAgICAgICAgICAgZyA9IGcucWI7CiAgICAgICAgICAgIHZhciBxID0gMCA8PSBnOwogICAgICAgICAgICBnID0gTWF0aC5hYnMoZykgLyA2MDsKICAgICAgICAgICAgcmV0dXJuIChxID8gIisiIDogIi0iKSArIFN0cmluZygiMDAwMCIgKyAoZyAvIDYwICogMTAwICsgZyAlIDYwKSkuc2xpY2UoLTQpOwogICAgICAgICAgfSwKICAgICAgICAgICIlWiI6IChnKSA9PiBnLnRiLAogICAgICAgICAgIiUlIjogKCkgPT4gIiUiCiAgICAgICAgfTsKICAgICAgICBjID0gYy5yZXBsYWNlKC8lJS9nLCAiXDBcMCIpOwogICAgICAgIGZvciAocCBpbiBtKSBjLmluY2x1ZGVzKHApICYmIChjID0gYy5yZXBsYWNlKG5ldyBSZWdFeHAocCwgImciKSwgbVtwXShkKSkpOwogICAgICAgIGMgPSBjLnJlcGxhY2UoL1wwXDAvZywgIiUiKTsKICAgICAgICBwID0gWWIoYyk7CiAgICAgICAgaWYgKHAubGVuZ3RoID4gYikgcmV0dXJuIDA7CiAgICAgICAgeS5zZXQocCwgYSk7CiAgICAgICAgcmV0dXJuIHAubGVuZ3RoIC0gMTsKICAgICAgfTsKICAgICAgSWEgPSBrLkludGVybmFsRXJyb3IgPSBjbGFzcyBleHRlbmRzIEVycm9yIHsKICAgICAgICBjb25zdHJ1Y3RvcihhKSB7CiAgICAgICAgICBzdXBlcihhKTsKICAgICAgICAgIHRoaXMubmFtZSA9ICJJbnRlcm5hbEVycm9yIjsKICAgICAgICB9CiAgICAgIH07CiAgICAgIGZvciAodmFyICRiID0gQXJyYXkoMjU2KSwgYWMgPSAwOyAyNTYgPiBhYzsgKythYykgJGJbYWNdID0gU3RyaW5nLmZyb21DaGFyQ29kZShhYyk7CiAgICAgIEphID0gJGI7CiAgICAgIFIgPSBrLkJpbmRpbmdFcnJvciA9IGNsYXNzIGV4dGVuZHMgRXJyb3IgewogICAgICAgIGNvbnN0cnVjdG9yKGEpIHsKICAgICAgICAgIHN1cGVyKGEpOwogICAgICAgICAgdGhpcy5uYW1lID0gIkJpbmRpbmdFcnJvciI7CiAgICAgICAgfQogICAgICB9OwogICAgICBPYmplY3QuYXNzaWduKFlhLnByb3RvdHlwZSwgewogICAgICAgIGlzQWxpYXNPZjogZnVuY3Rpb24oYSkgewogICAgICAgICAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFlhICYmIGEgaW5zdGFuY2VvZiBZYSkpIHJldHVybiBmYWxzZTsKICAgICAgICAgIHZhciBiID0gdGhpcy5tYS56YS54YSwgYyA9IHRoaXMubWEueWE7CiAgICAgICAgICBhLm1hID0gYS5tYTsKICAgICAgICAgIHZhciBkID0gYS5tYS56YS54YTsKICAgICAgICAgIGZvciAoYSA9IGEubWEueWE7IGIuQ2E7ICkgYyA9IGIuTmEoYyksIGIgPSBiLkNhOwogICAgICAgICAgZm9yICg7IGQuQ2E7ICkgYSA9IGQuTmEoYSksIGQgPSBkLkNhOwogICAgICAgICAgcmV0dXJuIGIgPT09IGQgJiYgYyA9PT0gYTsKICAgICAgICB9LAogICAgICAgIGNsb25lOiBmdW5jdGlvbigpIHsKICAgICAgICAgIHRoaXMubWEueWEgfHwgTGEodGhpcyk7CiAgICAgICAgICBpZiAodGhpcy5tYS5NYSkgcmV0dXJuIHRoaXMubWEuY291bnQudmFsdWUgKz0gMSwgdGhpczsKICAgICAgICAgIHZhciBhID0gV2EsIGIgPSBPYmplY3QsIGMgPSBiLmNyZWF0ZSwgZCA9IE9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKSwgZSA9IHRoaXMubWE7CiAgICAgICAgICBhID0gYSgKICAgICAgICAgICAgYy5jYWxsKGIsIGQsIHsKICAgICAgICAgICAgICBtYTogeyB2YWx1ZTogeyBjb3VudDogZS5jb3VudCwgS2E6IGUuS2EsIE1hOiBlLk1hLCB5YTogZS55YSwgemE6IGUuemEsIEFhOiBlLkFhLCBEYTogZS5EYSB9IH0KICAgICAgICAgICAgfSkKICAgICAgICAgICk7CiAgICAgICAgICBhLm1hLmNvdW50LnZhbHVlICs9IDE7CiAgICAgICAgICBhLm1hLkthID0gZmFsc2U7CiAgICAgICAgICByZXR1cm4gYTsKICAgICAgICB9LAogICAgICAgIFsiZGVsZXRlIl0oKSB7CiAgICAgICAgICB0aGlzLm1hLnlhIHx8IExhKHRoaXMpOwogICAgICAgICAgaWYgKHRoaXMubWEuS2EgJiYgIXRoaXMubWEuTWEpIHRocm93IG5ldyBSKCJPYmplY3QgYWxyZWFkeSBzY2hlZHVsZWQgZm9yIGRlbGV0aW9uIik7CiAgICAgICAgICBPYSh0aGlzKTsKICAgICAgICAgIHZhciBhID0gdGhpcy5tYTsKICAgICAgICAgIC0tYS5jb3VudC52YWx1ZTsKICAgICAgICAgIDAgPT09IGEuY291bnQudmFsdWUgJiYgKGEuQWEgPyBhLkRhLkZhKGEuQWEpIDogYS56YS54YS5GYShhLnlhKSk7CiAgICAgICAgICB0aGlzLm1hLk1hIHx8ICh0aGlzLm1hLkFhID0gdm9pZCAwLCB0aGlzLm1hLnlhID0gdm9pZCAwKTsKICAgICAgICB9LAogICAgICAgIGlzRGVsZXRlZDogZnVuY3Rpb24oKSB7CiAgICAgICAgICByZXR1cm4gIXRoaXMubWEueWE7CiAgICAgICAgfSwKICAgICAgICBkZWxldGVMYXRlcjogZnVuY3Rpb24oKSB7CiAgICAgICAgICB0aGlzLm1hLnlhIHx8IExhKHRoaXMpOwogICAgICAgICAgaWYgKHRoaXMubWEuS2EgJiYgIXRoaXMubWEuTWEpIHRocm93IG5ldyBSKCJPYmplY3QgYWxyZWFkeSBzY2hlZHVsZWQgZm9yIGRlbGV0aW9uIik7CiAgICAgICAgICBSYS5wdXNoKHRoaXMpOwogICAgICAgICAgMSA9PT0gUmEubGVuZ3RoICYmIFRhICYmIFRhKFNhKTsKICAgICAgICAgIHRoaXMubWEuS2EgPSB0cnVlOwogICAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgICAgfQogICAgICB9KTsKICAgICAgay5nZXRJbmhlcml0ZWRJbnN0YW5jZUNvdW50ID0gKCkgPT4gT2JqZWN0LmtleXMoVWEpLmxlbmd0aDsKICAgICAgay5nZXRMaXZlSW5oZXJpdGVkSW5zdGFuY2VzID0gKCkgPT4gewogICAgICAgIHZhciBhID0gW10sIGI7CiAgICAgICAgZm9yIChiIGluIFVhKSBVYS5oYXNPd25Qcm9wZXJ0eShiKSAmJiBhLnB1c2goVWFbYl0pOwogICAgICAgIHJldHVybiBhOwogICAgICB9OwogICAgICBrLmZsdXNoUGVuZGluZ0RlbGV0ZXMgPSBTYTsKICAgICAgay5zZXREZWxheUZ1bmN0aW9uID0gKGEpID0+IHsKICAgICAgICBUYSA9IGE7CiAgICAgICAgUmEubGVuZ3RoICYmIFRhICYmIFRhKFNhKTsKICAgICAgfTsKICAgICAgT2JqZWN0LmFzc2lnbihqYi5wcm90b3R5cGUsIHsKICAgICAgICBlYihhKSB7CiAgICAgICAgICB0aGlzLlphICYmIChhID0gdGhpcy5aYShhKSk7CiAgICAgICAgICByZXR1cm4gYTsKICAgICAgICB9LAogICAgICAgIFhhKGEpIHsKICAgICAgICAgIHRoaXMuRmE/LihhKTsKICAgICAgICB9LAogICAgICAgIGFyZ1BhY2tBZHZhbmNlOiA4LAogICAgICAgIHJlYWRWYWx1ZUZyb21Qb2ludGVyOiBLLAogICAgICAgIGZyb21XaXJlVHlwZTogZnVuY3Rpb24oYSkgewogICAgICAgICAgZnVuY3Rpb24gYigpIHsKICAgICAgICAgICAgcmV0dXJuIHRoaXMuUWEgPyBYYSh0aGlzLnhhLkxhLCB7IHphOiB0aGlzLmpiLCB5YTogYywgRGE6IHRoaXMsIEFhOiBhIH0pIDogWGEodGhpcy54YS5MYSwgeyB6YTogdGhpcywgeWE6IGEgfSk7CiAgICAgICAgICB9CiAgICAgICAgICB2YXIgYyA9IHRoaXMuZWIoYSk7CiAgICAgICAgICBpZiAoIWMpIHJldHVybiB0aGlzLlhhKGEpLCBudWxsOwogICAgICAgICAgdmFyIGQgPSBWYSh0aGlzLnhhLCBjKTsKICAgICAgICAgIGlmICh2b2lkIDAgIT09IGQpIHsKICAgICAgICAgICAgaWYgKDAgPT09IGQubWEuY291bnQudmFsdWUpIHJldHVybiBkLm1hLnlhID0gYywgZC5tYS5BYSA9IGEsIGQuY2xvbmUoKTsKICAgICAgICAgICAgZCA9IGQuY2xvbmUoKTsKICAgICAgICAgICAgdGhpcy5YYShhKTsKICAgICAgICAgICAgcmV0dXJuIGQ7CiAgICAgICAgICB9CiAgICAgICAgICBkID0gdGhpcy54YS5jYihjKTsKICAgICAgICAgIGQgPSBRYVtkXTsKICAgICAgICAgIGlmICghZCkgcmV0dXJuIGIuY2FsbCh0aGlzKTsKICAgICAgICAgIGQgPSB0aGlzLlBhID8gZC4kYSA6IGQucG9pbnRlclR5cGU7CiAgICAgICAgICB2YXIgZSA9IFBhKGMsIHRoaXMueGEsIGQueGEpOwogICAgICAgICAgcmV0dXJuIG51bGwgPT09IGUgPyBiLmNhbGwodGhpcykgOiB0aGlzLlFhID8gWGEoZC54YS5MYSwgeyB6YTogZCwgeWE6IGUsIERhOiB0aGlzLCBBYTogYSB9KSA6IFhhKGQueGEuTGEsIHsgemE6IGQsIHlhOiBlIH0pOwogICAgICAgIH0KICAgICAgfSk7CiAgICAgIG5iID0gay5VbmJvdW5kVHlwZUVycm9yID0gKChhLCBiKSA9PiB7CiAgICAgICAgdmFyIGMgPSBaYShiLCBmdW5jdGlvbihkKSB7CiAgICAgICAgICB0aGlzLm5hbWUgPSBiOwogICAgICAgICAgdGhpcy5tZXNzYWdlID0gZDsKICAgICAgICAgIGQgPSBFcnJvcihkKS5zdGFjazsKICAgICAgICAgIHZvaWQgMCAhPT0gZCAmJiAodGhpcy5zdGFjayA9IHRoaXMudG9TdHJpbmcoKSArICJcbiIgKyBkLnJlcGxhY2UoL15FcnJvcig6W15cbl0qKT9cbi8sICIiKSk7CiAgICAgICAgfSk7CiAgICAgICAgYy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGEucHJvdG90eXBlKTsKICAgICAgICBjLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IGM7CiAgICAgICAgYy5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbigpIHsKICAgICAgICAgIHJldHVybiB2b2lkIDAgPT09IHRoaXMubWVzc2FnZSA/IHRoaXMubmFtZSA6IGAke3RoaXMubmFtZX06ICR7dGhpcy5tZXNzYWdlfWA7CiAgICAgICAgfTsKICAgICAgICByZXR1cm4gYzsKICAgICAgfSkoRXJyb3IsICJVbmJvdW5kVHlwZUVycm9yIik7CiAgICAgIFYucHVzaCgwLCAxLCB2b2lkIDAsIDEsIG51bGwsIDEsIHRydWUsIDEsIGZhbHNlLCAxKTsKICAgICAgay5jb3VudF9lbXZhbF9oYW5kbGVzID0gKCkgPT4gVi5sZW5ndGggLyAyIC0gNSAtIHZiLmxlbmd0aDsKICAgICAgdmFyIG1jID0gewogICAgICAgIGM6IChhLCBiLCBjLCBkKSA9PiB7CiAgICAgICAgICByYSgKICAgICAgICAgICAgYEFzc2VydGlvbiBmYWlsZWQ6ICR7YSA/IEooQSwgYSkgOiAiIn0sIGF0OiBgICsgW2IgPyBiID8gSihBLCBiKSA6ICIiIDogInVua25vd24gZmlsZW5hbWUiLCBjLCBkID8gZCA/IEooQSwgZCkgOiAiIiA6ICJ1bmtub3duIGZ1bmN0aW9uIl0KICAgICAgICAgICk7CiAgICAgICAgfSwKICAgICAgICBtOiAoYSwgYiwgYykgPT4gewogICAgICAgICAgdmFyIGQgPSBuZXcgQWEoYSk7CiAgICAgICAgICBGW2QueWEgKyAxNiA+PiAyXSA9IDA7CiAgICAgICAgICBGW2QueWEgKyA0ID4+IDJdID0gYjsKICAgICAgICAgIEZbZC55YSArIDggPj4gMl0gPSBjOwogICAgICAgICAgQmEgPSBhOwogICAgICAgICAgQ2ErKzsKICAgICAgICAgIHRocm93IEJhOwogICAgICAgIH0sCiAgICAgICAgQjogZnVuY3Rpb24oKSB7CiAgICAgICAgICByZXR1cm4gMDsKICAgICAgICB9LAogICAgICAgIFA6ICgpID0+IHsKICAgICAgICB9LAogICAgICAgIE06ICgpID0+IHsKICAgICAgICB9LAogICAgICAgIFI6IGZ1bmN0aW9uKCkgewogICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgfSwKICAgICAgICBOOiAoKSA9PiB7CiAgICAgICAgfSwKICAgICAgICBBOiBmdW5jdGlvbigpIHsKICAgICAgICB9LAogICAgICAgIE86ICgpID0+IHsKICAgICAgICB9LAogICAgICAgIHY6IChhKSA9PiB7CiAgICAgICAgICB2YXIgYiA9IEZhW2FdOwogICAgICAgICAgZGVsZXRlIEZhW2FdOwogICAgICAgICAgdmFyIGMgPSBiLlVhLCBkID0gYi5GYSwgZSA9IGIuWWEsIGYgPSBlLm1hcCgobCkgPT4gbC5oYikuY29uY2F0KGUubWFwKChsKSA9PiBsLm5iKSk7CiAgICAgICAgICBQKFthXSwgZiwgKGwpID0+IHsKICAgICAgICAgICAgdmFyIGggPSB7fTsKICAgICAgICAgICAgZS5mb3JFYWNoKChuLCBtKSA9PiB7CiAgICAgICAgICAgICAgdmFyIHAgPSBsW21dLCB1ID0gbi5mYiwgdiA9IG4uZ2IsIGcgPSBsW20gKyBlLmxlbmd0aF0sIHEgPSBuLm1iLCByID0gbi5vYjsKICAgICAgICAgICAgICBoW24uYmJdID0gewogICAgICAgICAgICAgICAgcmVhZDogKHopID0+IHAuZnJvbVdpcmVUeXBlKHUodiwgeikpLAogICAgICAgICAgICAgICAgd3JpdGU6ICh6LCBOKSA9PiB7CiAgICAgICAgICAgICAgICAgIHZhciBEID0gW107CiAgICAgICAgICAgICAgICAgIHEociwgeiwgZy50b1dpcmVUeXBlKEQsIE4pKTsKICAgICAgICAgICAgICAgICAgR2EoRCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIHJldHVybiBbCiAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgbmFtZTogYi5uYW1lLAogICAgICAgICAgICAgICAgZnJvbVdpcmVUeXBlOiAobikgPT4gewogICAgICAgICAgICAgICAgICB2YXIgbSA9IHt9LCBwOwogICAgICAgICAgICAgICAgICBmb3IgKHAgaW4gaCkgbVtwXSA9IGhbcF0ucmVhZChuKTsKICAgICAgICAgICAgICAgICAgZChuKTsKICAgICAgICAgICAgICAgICAgcmV0dXJuIG07CiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgdG9XaXJlVHlwZTogKG4sIG0pID0+IHsKICAgICAgICAgICAgICAgICAgZm9yICh2YXIgcCBpbiBoKSBpZiAoIShwIGluIG0pKSB0aHJvdyBuZXcgVHlwZUVycm9yKGBNaXNzaW5nIGZpZWxkOiAiJHtwfSJgKTsKICAgICAgICAgICAgICAgICAgdmFyIHUgPSBjKCk7CiAgICAgICAgICAgICAgICAgIGZvciAocCBpbiBoKSBoW3BdLndyaXRlKHUsIG1bcF0pOwogICAgICAgICAgICAgICAgICBudWxsICE9PSBuICYmIG4ucHVzaChkLCB1KTsKICAgICAgICAgICAgICAgICAgcmV0dXJuIHU7CiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgYXJnUGFja0FkdmFuY2U6IDgsCiAgICAgICAgICAgICAgICByZWFkVmFsdWVGcm9tUG9pbnRlcjogSywKICAgICAgICAgICAgICAgIEVhOiBkCiAgICAgICAgICAgICAgfQogICAgICAgICAgICBdOwogICAgICAgICAgfSk7CiAgICAgICAgfSwKICAgICAgICBJOiAoKSA9PiB7CiAgICAgICAgfSwKICAgICAgICBZOiAoYSwgYiwgYywgZCkgPT4gewogICAgICAgICAgYiA9IFEoYik7CiAgICAgICAgICBPKGEsIHsKICAgICAgICAgICAgbmFtZTogYiwKICAgICAgICAgICAgZnJvbVdpcmVUeXBlOiBmdW5jdGlvbihlKSB7CiAgICAgICAgICAgICAgcmV0dXJuICEhZTsKICAgICAgICAgICAgfSwKICAgICAgICAgICAgdG9XaXJlVHlwZTogZnVuY3Rpb24oZSwgZikgewogICAgICAgICAgICAgIHJldHVybiBmID8gYyA6IGQ7CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIGFyZ1BhY2tBZHZhbmNlOiA4LAogICAgICAgICAgICByZWFkVmFsdWVGcm9tUG9pbnRlcjogZnVuY3Rpb24oZSkgewogICAgICAgICAgICAgIHJldHVybiB0aGlzLmZyb21XaXJlVHlwZShBW2VdKTsKICAgICAgICAgICAgfSwKICAgICAgICAgICAgRWE6IG51bGwKICAgICAgICAgIH0pOwogICAgICAgIH0sCiAgICAgICAgcjogKGEsIGIsIGMsIGQsIGUsIGYsIGwsIGgsIG4sIG0sIHAsIHUsIHYpID0+IHsKICAgICAgICAgIHAgPSBRKHApOwogICAgICAgICAgZiA9IFQoZSwgZik7CiAgICAgICAgICBoICYmIChoID0gVChsLCBoKSk7CiAgICAgICAgICBtICYmIChtID0gVChuLCBtKSk7CiAgICAgICAgICB2ID0gVCh1LCB2KTsKICAgICAgICAgIHZhciBnID0gYmIocCk7CiAgICAgICAgICBhYihnLCBmdW5jdGlvbigpIHsKICAgICAgICAgICAgcWIoYENhbm5vdCBjb25zdHJ1Y3QgJHtwfSBkdWUgdG8gdW5ib3VuZCB0eXBlc2AsIFtkXSk7CiAgICAgICAgICB9KTsKICAgICAgICAgIFAoW2EsIGIsIGNdLCBkID8gW2RdIDogW10sIChxKSA9PiB7CiAgICAgICAgICAgIHEgPSBxWzBdOwogICAgICAgICAgICBpZiAoZCkgewogICAgICAgICAgICAgIHZhciByID0gcS54YTsKICAgICAgICAgICAgICB2YXIgeiA9IHIuTGE7CiAgICAgICAgICAgIH0gZWxzZSB6ID0gWWEucHJvdG90eXBlOwogICAgICAgICAgICBxID0gWmEocCwgZnVuY3Rpb24oLi4uTmEpIHsKICAgICAgICAgICAgICBpZiAoT2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpICE9PSBOKSB0aHJvdyBuZXcgUigiVXNlICduZXcnIHRvIGNvbnN0cnVjdCAiICsgcCk7CiAgICAgICAgICAgICAgaWYgKHZvaWQgMCA9PT0gRC5IYSkgdGhyb3cgbmV3IFIocCArICIgaGFzIG5vIGFjY2Vzc2libGUgY29uc3RydWN0b3IiKTsKICAgICAgICAgICAgICB2YXIgeGIgPSBELkhhW05hLmxlbmd0aF07CiAgICAgICAgICAgICAgaWYgKHZvaWQgMCA9PT0geGIpCiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUigKICAgICAgICAgICAgICAgICAgYFRyaWVkIHRvIGludm9rZSBjdG9yIG9mICR7cH0gd2l0aCBpbnZhbGlkIG51bWJlciBvZiBwYXJhbWV0ZXJzICgke05hLmxlbmd0aH0pIC0gZXhwZWN0ZWQgKCR7T2JqZWN0LmtleXMoRC5IYSkudG9TdHJpbmcoKX0pIHBhcmFtZXRlcnMgaW5zdGVhZCFgCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgIHJldHVybiB4Yi5hcHBseSh0aGlzLCBOYSk7CiAgICAgICAgICAgIH0pOwogICAgICAgICAgICB2YXIgTiA9IE9iamVjdC5jcmVhdGUoeiwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogcSB9IH0pOwogICAgICAgICAgICBxLnByb3RvdHlwZSA9IE47CiAgICAgICAgICAgIHZhciBEID0gbmV3IGNiKHAsIHEsIE4sIHYsIHIsIGYsIGgsIG0pOwogICAgICAgICAgICBpZiAoRC5DYSkgewogICAgICAgICAgICAgIHZhciBpYTsKICAgICAgICAgICAgICAoaWEgPSBELkNhKS5XYSA/PyAoaWEuV2EgPSBbXSk7CiAgICAgICAgICAgICAgRC5DYS5XYS5wdXNoKEQpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHIgPSBuZXcgamIocCwgRCwgdHJ1ZSwgZmFsc2UsIGZhbHNlKTsKICAgICAgICAgICAgaWEgPSBuZXcgamIocCArICIqIiwgRCwgZmFsc2UsIGZhbHNlLCBmYWxzZSk7CiAgICAgICAgICAgIHogPSBuZXcgamIocCArICIgY29uc3QqIiwgRCwgZmFsc2UsIHRydWUsIGZhbHNlKTsKICAgICAgICAgICAgUWFbYV0gPSB7IHBvaW50ZXJUeXBlOiBpYSwgJGE6IHogfTsKICAgICAgICAgICAga2IoZywgcSk7CiAgICAgICAgICAgIHJldHVybiBbciwgaWEsIHpdOwogICAgICAgICAgfSk7CiAgICAgICAgfSwKICAgICAgICBxOiAoYSwgYiwgYywgZCwgZSwgZikgPT4gewogICAgICAgICAgdmFyIGwgPSByYihiLCBjKTsKICAgICAgICAgIGUgPSBUKGQsIGUpOwogICAgICAgICAgUChbXSwgW2FdLCAoaCkgPT4gewogICAgICAgICAgICBoID0gaFswXTsKICAgICAgICAgICAgdmFyIG4gPSBgY29uc3RydWN0b3IgJHtoLm5hbWV9YDsKICAgICAgICAgICAgdm9pZCAwID09PSBoLnhhLkhhICYmIChoLnhhLkhhID0gW10pOwogICAgICAgICAgICBpZiAodm9pZCAwICE9PSBoLnhhLkhhW2IgLSAxXSkKICAgICAgICAgICAgICB0aHJvdyBuZXcgUigKICAgICAgICAgICAgICAgIGBDYW5ub3QgcmVnaXN0ZXIgbXVsdGlwbGUgY29uc3RydWN0b3JzIHdpdGggaWRlbnRpY2FsIG51bWJlciBvZiBwYXJhbWV0ZXJzICgke2IgLSAxfSkgZm9yIGNsYXNzICcke2gubmFtZX0nISBPdmVybG9hZCByZXNvbHV0aW9uIGlzIGN1cnJlbnRseSBvbmx5IHBlcmZvcm1lZCB1c2luZyB0aGUgcGFyYW1ldGVyIGNvdW50LCBub3QgYWN0dWFsIHR5cGUgaW5mbyFgCiAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgaC54YS5IYVtiIC0gMV0gPSAoKSA9PiB7CiAgICAgICAgICAgICAgcWIoYENhbm5vdCBjb25zdHJ1Y3QgJHtoLm5hbWV9IGR1ZSB0byB1bmJvdW5kIHR5cGVzYCwgbCk7CiAgICAgICAgICAgIH07CiAgICAgICAgICAgIFAoW10sIGwsIChtKSA9PiB7CiAgICAgICAgICAgICAgbS5zcGxpY2UoMSwgMCwgbnVsbCk7CiAgICAgICAgICAgICAgaC54YS5IYVtiIC0gMV0gPSB0YihuLCBtLCBudWxsLCBlLCBmKTsKICAgICAgICAgICAgICByZXR1cm4gW107CiAgICAgICAgICAgIH0pOwogICAgICAgICAgICByZXR1cm4gW107CiAgICAgICAgICB9KTsKICAgICAgICB9LAogICAgICAgIGY6IChhLCBiLCBjLCBkLCBlLCBmLCBsLCBoKSA9PiB7CiAgICAgICAgICB2YXIgbiA9IHJiKGMsIGQpOwogICAgICAgICAgYiA9IFEoYik7CiAgICAgICAgICBiID0gdWIoYik7CiAgICAgICAgICBmID0gVChlLCBmKTsKICAgICAgICAgIFAoW10sIFthXSwgKG0pID0+IHsKICAgICAgICAgICAgZnVuY3Rpb24gcCgpIHsKICAgICAgICAgICAgICBxYihgQ2Fubm90IGNhbGwgJHt1fSBkdWUgdG8gdW5ib3VuZCB0eXBlc2AsIG4pOwogICAgICAgICAgICB9CiAgICAgICAgICAgIG0gPSBtWzBdOwogICAgICAgICAgICB2YXIgdSA9IGAke20ubmFtZX0uJHtifWA7CiAgICAgICAgICAgIGIuc3RhcnRzV2l0aCgiQEAiKSAmJiAoYiA9IFN5bWJvbFtiLnN1YnN0cmluZygyKV0pOwogICAgICAgICAgICBoICYmIG0ueGEua2IucHVzaChiKTsKICAgICAgICAgICAgdmFyIHYgPSBtLnhhLkxhLCBnID0gdltiXTsKICAgICAgICAgICAgdm9pZCAwID09PSBnIHx8IHZvaWQgMCA9PT0gZy5CYSAmJiBnLmNsYXNzTmFtZSAhPT0gbS5uYW1lICYmIGcuT2EgPT09IGMgLSAyID8gKHAuT2EgPSBjIC0gMiwgcC5jbGFzc05hbWUgPSBtLm5hbWUsIHZbYl0gPSBwKSA6ICgkYSh2LCBiLCB1KSwgdltiXS5CYVtjIC0gMl0gPSBwKTsKICAgICAgICAgICAgUChbXSwgbiwgKHEpID0+IHsKICAgICAgICAgICAgICBxID0gdGIodSwgcSwgbSwgZiwgbCk7CiAgICAgICAgICAgICAgdm9pZCAwID09PSB2W2JdLkJhID8gKHEuT2EgPSBjIC0gMiwgdltiXSA9IHEpIDogdltiXS5CYVtjIC0gMl0gPSBxOwogICAgICAgICAgICAgIHJldHVybiBbXTsKICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIHJldHVybiBbXTsKICAgICAgICAgIH0pOwogICAgICAgIH0sCiAgICAgICAgWDogKGEpID0+IE8oYSwgemIpLAogICAgICAgIHg6IChhLCBiLCBjLCBkKSA9PiB7CiAgICAgICAgICBmdW5jdGlvbiBlKCkgewogICAgICAgICAgfQogICAgICAgICAgYiA9IFEoYik7CiAgICAgICAgICBlLnZhbHVlcyA9IHt9OwogICAgICAgICAgTyhhLCB7CiAgICAgICAgICAgIG5hbWU6IGIsCiAgICAgICAgICAgIGNvbnN0cnVjdG9yOiBlLAogICAgICAgICAgICBmcm9tV2lyZVR5cGU6IGZ1bmN0aW9uKGYpIHsKICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jb25zdHJ1Y3Rvci52YWx1ZXNbZl07CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHRvV2lyZVR5cGU6IChmLCBsKSA9PiBsLnZhbHVlLAogICAgICAgICAgICBhcmdQYWNrQWR2YW5jZTogOCwKICAgICAgICAgICAgcmVhZFZhbHVlRnJvbVBvaW50ZXI6IEFiKGIsIGMsIGQpLAogICAgICAgICAgICBFYTogbnVsbAogICAgICAgICAgfSk7CiAgICAgICAgICBhYihiLCBlKTsKICAgICAgICB9LAogICAgICAgIGs6IChhLCBiLCBjKSA9PiB7CiAgICAgICAgICB2YXIgZCA9IEJiKGEsICJlbnVtIik7CiAgICAgICAgICBiID0gUShiKTsKICAgICAgICAgIGEgPSBkLmNvbnN0cnVjdG9yOwogICAgICAgICAgZCA9IE9iamVjdC5jcmVhdGUoZC5jb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHsKICAgICAgICAgICAgdmFsdWU6IHsgdmFsdWU6IGMgfSwKICAgICAgICAgICAgY29uc3RydWN0b3I6IHsgdmFsdWU6IFphKGAke2QubmFtZX1fJHtifWAsIGZ1bmN0aW9uKCkgewogICAgICAgICAgICB9KSB9CiAgICAgICAgICB9KTsKICAgICAgICAgIGEudmFsdWVzW2NdID0gZDsKICAgICAgICAgIGFbYl0gPSBkOwogICAgICAgIH0sCiAgICAgICAgQzogKGEsIGIsIGMpID0+IHsKICAgICAgICAgIGIgPSBRKGIpOwogICAgICAgICAgTyhhLCB7CiAgICAgICAgICAgIG5hbWU6IGIsCiAgICAgICAgICAgIGZyb21XaXJlVHlwZTogKGQpID0+IGQsCiAgICAgICAgICAgIHRvV2lyZVR5cGU6IChkLCBlKSA9PiBlLAogICAgICAgICAgICBhcmdQYWNrQWR2YW5jZTogOCwKICAgICAgICAgICAgcmVhZFZhbHVlRnJvbVBvaW50ZXI6IENiKGIsIGMpLAogICAgICAgICAgICBFYTogbnVsbAogICAgICAgICAgfSk7CiAgICAgICAgfSwKICAgICAgICBFOiAoYSwgYiwgYywgZCwgZSwgZikgPT4gewogICAgICAgICAgdmFyIGwgPSByYihiLCBjKTsKICAgICAgICAgIGEgPSBRKGEpOwogICAgICAgICAgYSA9IHViKGEpOwogICAgICAgICAgZSA9IFQoZCwgZSk7CiAgICAgICAgICBhYigKICAgICAgICAgICAgYSwKICAgICAgICAgICAgZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgcWIoYENhbm5vdCBjYWxsICR7YX0gZHVlIHRvIHVuYm91bmQgdHlwZXNgLCBsKTsKICAgICAgICAgICAgfSwKICAgICAgICAgICAgYiAtIDEKICAgICAgICAgICk7CiAgICAgICAgICBQKFtdLCBsLCAoaCkgPT4gewogICAgICAgICAgICBrYihhLCB0YihhLCBbaFswXSwgbnVsbF0uY29uY2F0KGguc2xpY2UoMSkpLCBudWxsLCBlLCBmKSwgYiAtIDEpOwogICAgICAgICAgICByZXR1cm4gW107CiAgICAgICAgICB9KTsKICAgICAgICB9LAogICAgICAgIGw6IChhLCBiLCBjLCBkLCBlKSA9PiB7CiAgICAgICAgICBiID0gUShiKTsKICAgICAgICAgIC0xID09PSBlICYmIChlID0gNDI5NDk2NzI5NSk7CiAgICAgICAgICBlID0gKGgpID0+IGg7CiAgICAgICAgICBpZiAoMCA9PT0gZCkgewogICAgICAgICAgICB2YXIgZiA9IDMyIC0gOCAqIGM7CiAgICAgICAgICAgIGUgPSAoaCkgPT4gaCA8PCBmID4+PiBmOwogICAgICAgICAgfQogICAgICAgICAgdmFyIGwgPSBiLmluY2x1ZGVzKCJ1bnNpZ25lZCIpID8gZnVuY3Rpb24oaCwgbikgewogICAgICAgICAgICByZXR1cm4gbiA+Pj4gMDsKICAgICAgICAgIH0gOiBmdW5jdGlvbihoLCBuKSB7CiAgICAgICAgICAgIHJldHVybiBuOwogICAgICAgICAgfTsKICAgICAgICAgIE8oYSwgewogICAgICAgICAgICBuYW1lOiBiLAogICAgICAgICAgICBmcm9tV2lyZVR5cGU6IGUsCiAgICAgICAgICAgIHRvV2lyZVR5cGU6IGwsCiAgICAgICAgICAgIGFyZ1BhY2tBZHZhbmNlOiA4LAogICAgICAgICAgICByZWFkVmFsdWVGcm9tUG9pbnRlcjogRGIoYiwgYywgMCAhPT0gZCksCiAgICAgICAgICAgIEVhOiBudWxsCiAgICAgICAgICB9KTsKICAgICAgICB9LAogICAgICAgIGc6IChhLCBiLCBjKSA9PiB7CiAgICAgICAgICBmdW5jdGlvbiBkKGYpIHsKICAgICAgICAgICAgcmV0dXJuIG5ldyBlKHkuYnVmZmVyLCBGW2YgKyA0ID4+IDJdLCBGW2YgPj4gMl0pOwogICAgICAgICAgfQogICAgICAgICAgdmFyIGUgPSBbSW50OEFycmF5LCBVaW50OEFycmF5LCBJbnQxNkFycmF5LCBVaW50MTZBcnJheSwgSW50MzJBcnJheSwgVWludDMyQXJyYXksIEZsb2F0MzJBcnJheSwgRmxvYXQ2NEFycmF5XVtiXTsKICAgICAgICAgIGMgPSBRKGMpOwogICAgICAgICAgTyhhLCB7IG5hbWU6IGMsIGZyb21XaXJlVHlwZTogZCwgYXJnUGFja0FkdmFuY2U6IDgsIHJlYWRWYWx1ZUZyb21Qb2ludGVyOiBkIH0sIHsgaWI6IHRydWUgfSk7CiAgICAgICAgfSwKICAgICAgICB3OiAoYSkgPT4gewogICAgICAgICAgTyhhLCB6Yik7CiAgICAgICAgfSwKICAgICAgICBjYTogKGEsIGIsIGMsIGQsIGUsIGYsIGwsIGgsIG4sIG0sIHAsIHUpID0+IHsKICAgICAgICAgIGMgPSBRKGMpOwogICAgICAgICAgZiA9IFQoZSwgZik7CiAgICAgICAgICBoID0gVChsLCBoKTsKICAgICAgICAgIG0gPSBUKG4sIG0pOwogICAgICAgICAgdSA9IFQocCwgdSk7CiAgICAgICAgICBQKFthXSwgW2JdLCAodikgPT4gewogICAgICAgICAgICB2ID0gdlswXTsKICAgICAgICAgICAgcmV0dXJuIFtuZXcgamIoYywgdi54YSwgZmFsc2UsIGZhbHNlLCB0cnVlLCB2LCBkLCBmLCBoLCBtLCB1KV07CiAgICAgICAgICB9KTsKICAgICAgICB9LAogICAgICAgIEQ6IChhLCBiKSA9PiB7CiAgICAgICAgICBiID0gUShiKTsKICAgICAgICAgIHZhciBjID0gInN0ZDo6c3RyaW5nIiA9PT0gYjsKICAgICAgICAgIE8oYSwgewogICAgICAgICAgICBuYW1lOiBiLAogICAgICAgICAgICBmcm9tV2lyZVR5cGU6IGZ1bmN0aW9uKGQpIHsKICAgICAgICAgICAgICB2YXIgZSA9IEZbZCA+PiAyXSwgZiA9IGQgKyA0OwogICAgICAgICAgICAgIGlmIChjKQogICAgICAgICAgICAgICAgZm9yICh2YXIgbCA9IGYsIGggPSAwOyBoIDw9IGU7ICsraCkgewogICAgICAgICAgICAgICAgICB2YXIgbiA9IGYgKyBoOwogICAgICAgICAgICAgICAgICBpZiAoaCA9PSBlIHx8IDAgPT0gQVtuXSkgewogICAgICAgICAgICAgICAgICAgIGwgPSBsID8gSihBLCBsLCBuIC0gbCkgOiAiIjsKICAgICAgICAgICAgICAgICAgICBpZiAodm9pZCAwID09PSBtKSB2YXIgbSA9IGw7CiAgICAgICAgICAgICAgICAgICAgZWxzZSBtICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoMCksIG0gKz0gbDsKICAgICAgICAgICAgICAgICAgICBsID0gbiArIDE7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgIG0gPSBBcnJheShlKTsKICAgICAgICAgICAgICAgIGZvciAoaCA9IDA7IGggPCBlOyArK2gpIG1baF0gPSBTdHJpbmcuZnJvbUNoYXJDb2RlKEFbZiArIGhdKTsKICAgICAgICAgICAgICAgIG0gPSBtLmpvaW4oIiIpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBVKGQpOwogICAgICAgICAgICAgIHJldHVybiBtOwogICAgICAgICAgICB9LAogICAgICAgICAgICB0b1dpcmVUeXBlOiBmdW5jdGlvbihkLCBlKSB7CiAgICAgICAgICAgICAgZSBpbnN0YW5jZW9mIEFycmF5QnVmZmVyICYmIChlID0gbmV3IFVpbnQ4QXJyYXkoZSkpOwogICAgICAgICAgICAgIHZhciBmID0gInN0cmluZyIgPT0gdHlwZW9mIGU7CiAgICAgICAgICAgICAgaWYgKCEoZiB8fCBlIGluc3RhbmNlb2YgVWludDhBcnJheSB8fCBlIGluc3RhbmNlb2YgVWludDhDbGFtcGVkQXJyYXkgfHwgZSBpbnN0YW5jZW9mIEludDhBcnJheSkpCiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUigiQ2Fubm90IHBhc3Mgbm9uLXN0cmluZyB0byBzdGQ6OnN0cmluZyIpOwogICAgICAgICAgICAgIHZhciBsID0gYyAmJiBmID8gRGEoZSkgOiBlLmxlbmd0aDsKICAgICAgICAgICAgICB2YXIgaCA9IGJjKDQgKyBsICsgMSksIG4gPSBoICsgNDsKICAgICAgICAgICAgICBGW2ggPj4gMl0gPSBsOwogICAgICAgICAgICAgIGlmIChjICYmIGYpIEVhKGUsIEEsIG4sIGwgKyAxKTsKICAgICAgICAgICAgICBlbHNlIGlmIChmKQogICAgICAgICAgICAgICAgZm9yIChmID0gMDsgZiA8IGw7ICsrZikgewogICAgICAgICAgICAgICAgICB2YXIgbSA9IGUuY2hhckNvZGVBdChmKTsKICAgICAgICAgICAgICAgICAgaWYgKDI1NSA8IG0pIHRocm93IFUobiksIG5ldyBSKCJTdHJpbmcgaGFzIFVURi0xNiBjb2RlIHVuaXRzIHRoYXQgZG8gbm90IGZpdCBpbiA4IGJpdHMiKTsKICAgICAgICAgICAgICAgICAgQVtuICsgZl0gPSBtOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGVsc2UgZm9yIChmID0gMDsgZiA8IGw7ICsrZikgQVtuICsgZl0gPSBlW2ZdOwogICAgICAgICAgICAgIG51bGwgIT09IGQgJiYgZC5wdXNoKFUsIGgpOwogICAgICAgICAgICAgIHJldHVybiBoOwogICAgICAgICAgICB9LAogICAgICAgICAgICBhcmdQYWNrQWR2YW5jZTogOCwKICAgICAgICAgICAgcmVhZFZhbHVlRnJvbVBvaW50ZXI6IEssCiAgICAgICAgICAgIEVhKGQpIHsKICAgICAgICAgICAgICBVKGQpOwogICAgICAgICAgICB9CiAgICAgICAgICB9KTsKICAgICAgICB9LAogICAgICAgIHU6IChhLCBiLCBjKSA9PiB7CiAgICAgICAgICBjID0gUShjKTsKICAgICAgICAgIGlmICgyID09PSBiKSB7CiAgICAgICAgICAgIHZhciBkID0gRmI7CiAgICAgICAgICAgIHZhciBlID0gR2I7CiAgICAgICAgICAgIHZhciBmID0gSGI7CiAgICAgICAgICAgIHZhciBsID0gKGgpID0+IENbaCA+PiAxXTsKICAgICAgICAgIH0gZWxzZSA0ID09PSBiICYmIChkID0gSWIsIGUgPSBKYiwgZiA9IEtiLCBsID0gKGgpID0+IEZbaCA+PiAyXSk7CiAgICAgICAgICBPKGEsIHsKICAgICAgICAgICAgbmFtZTogYywKICAgICAgICAgICAgZnJvbVdpcmVUeXBlOiAoaCkgPT4gewogICAgICAgICAgICAgIGZvciAodmFyIG4gPSBGW2ggPj4gMl0sIG0sIHAgPSBoICsgNCwgdSA9IDA7IHUgPD0gbjsgKyt1KSB7CiAgICAgICAgICAgICAgICB2YXIgdiA9IGggKyA0ICsgdSAqIGI7CiAgICAgICAgICAgICAgICBpZiAodSA9PSBuIHx8IDAgPT0gbCh2KSkKICAgICAgICAgICAgICAgICAgcCA9IGQocCwgdiAtIHApLCB2b2lkIDAgPT09IG0gPyBtID0gcCA6IChtICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoMCksIG0gKz0gcCksIHAgPSB2ICsgYjsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgVShoKTsKICAgICAgICAgICAgICByZXR1cm4gbTsKICAgICAgICAgICAgfSwKICAgICAgICAgICAgdG9XaXJlVHlwZTogKGgsIG4pID0+IHsKICAgICAgICAgICAgICBpZiAoInN0cmluZyIgIT0gdHlwZW9mIG4pIHRocm93IG5ldyBSKGBDYW5ub3QgcGFzcyBub24tc3RyaW5nIHRvIEMrKyBzdHJpbmcgdHlwZSAke2N9YCk7CiAgICAgICAgICAgICAgdmFyIG0gPSBmKG4pLCBwID0gYmMoNCArIG0gKyBiKTsKICAgICAgICAgICAgICBGW3AgPj4gMl0gPSBtIC8gYjsKICAgICAgICAgICAgICBlKG4sIHAgKyA0LCBtICsgYik7CiAgICAgICAgICAgICAgbnVsbCAhPT0gaCAmJiBoLnB1c2goVSwgcCk7CiAgICAgICAgICAgICAgcmV0dXJuIHA7CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIGFyZ1BhY2tBZHZhbmNlOiA4LAogICAgICAgICAgICByZWFkVmFsdWVGcm9tUG9pbnRlcjogSywKICAgICAgICAgICAgRWEoaCkgewogICAgICAgICAgICAgIFUoaCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0pOwogICAgICAgIH0sCiAgICAgICAgczogKGEsIGIsIGMsIGQsIGUsIGYpID0+IHsKICAgICAgICAgIEZhW2FdID0geyBuYW1lOiBRKGIpLCBVYTogVChjLCBkKSwgRmE6IFQoZSwgZiksIFlhOiBbXSB9OwogICAgICAgIH0sCiAgICAgICAgajogKGEsIGIsIGMsIGQsIGUsIGYsIGwsIGgsIG4sIG0pID0+IHsKICAgICAgICAgIEZhW2FdLllhLnB1c2goeyBiYjogUShiKSwgaGI6IGMsIGZiOiBUKGQsIGUpLCBnYjogZiwgbmI6IGwsIG1iOiBUKGgsIG4pLCBvYjogbSB9KTsKICAgICAgICB9LAogICAgICAgIFo6IChhLCBiKSA9PiB7CiAgICAgICAgICBiID0gUShiKTsKICAgICAgICAgIE8oYSwgeyB1YjogdHJ1ZSwgbmFtZTogYiwgYXJnUGFja0FkdmFuY2U6IDAsIGZyb21XaXJlVHlwZTogKCkgPT4gewogICAgICAgICAgfSwgdG9XaXJlVHlwZTogKCkgPT4gewogICAgICAgICAgfSB9KTsKICAgICAgICB9LAogICAgICAgIEo6ICgpID0+IHsKICAgICAgICAgIHRocm93IEluZmluaXR5OwogICAgICAgIH0sCiAgICAgICAgYWE6IChhLCBiLCBjLCBkKSA9PiB7CiAgICAgICAgICBhID0gTGJbYV07CiAgICAgICAgICBiID0geWIoYik7CiAgICAgICAgICByZXR1cm4gYShudWxsLCBiLCBjLCBkKTsKICAgICAgICB9LAogICAgICAgIEY6IHdiLAogICAgICAgICQ6IChhLCBiLCBjKSA9PiB7CiAgICAgICAgICB2YXIgZCA9IE5iKGEsIGIpLCBlID0gZC5zaGlmdCgpOwogICAgICAgICAgYS0tOwogICAgICAgICAgdmFyIGYgPSBBcnJheShhKTsKICAgICAgICAgIGIgPSBgbWV0aG9kQ2FsbGVyPCgke2QubWFwKChsKSA9PiBsLm5hbWUpLmpvaW4oIiwgIil9KSA9PiAke2UubmFtZX0+YDsKICAgICAgICAgIHJldHVybiBNYigKICAgICAgICAgICAgWmEoYiwgKGwsIGgsIG4sIG0pID0+IHsKICAgICAgICAgICAgICBmb3IgKHZhciBwID0gMCwgdSA9IDA7IHUgPCBhOyArK3UpIGZbdV0gPSBkW3VdLnJlYWRWYWx1ZUZyb21Qb2ludGVyKG0gKyBwKSwgcCArPSBkW3VdLmFyZ1BhY2tBZHZhbmNlOwogICAgICAgICAgICAgIGggPSAxID09PSBjID8gT2IoaCwgZikgOiBoLmFwcGx5KGwsIGYpOwogICAgICAgICAgICAgIGwgPSBbXTsKICAgICAgICAgICAgICBoID0gZS50b1dpcmVUeXBlKGwsIGgpOwogICAgICAgICAgICAgIGwubGVuZ3RoICYmIChGW24gPj4gMl0gPSBoYihsKSk7CiAgICAgICAgICAgICAgcmV0dXJuIGg7CiAgICAgICAgICAgIH0pCiAgICAgICAgICApOwogICAgICAgIH0sCiAgICAgICAgYmE6IChhKSA9PiB7CiAgICAgICAgICA5IDwgYSAmJiAoVlthICsgMV0gKz0gMSk7CiAgICAgICAgfSwKICAgICAgICBfOiAoYSkgPT4gewogICAgICAgICAgdmFyIGIgPSB5YihhKTsKICAgICAgICAgIEdhKGIpOwogICAgICAgICAgd2IoYSk7CiAgICAgICAgfSwKICAgICAgICBvOiAoYSwgYikgPT4gewogICAgICAgICAgYSA9IEJiKGEsICJfZW12YWxfdGFrZV92YWx1ZSIpOwogICAgICAgICAgYSA9IGEucmVhZFZhbHVlRnJvbVBvaW50ZXIoYik7CiAgICAgICAgICByZXR1cm4gaGIoYSk7CiAgICAgICAgfSwKICAgICAgICBXOiAoKSA9PiB7CiAgICAgICAgICByYSgiIik7CiAgICAgICAgfSwKICAgICAgICBWOiAoKSA9PiBwZXJmb3JtYW5jZS5ub3coKSwKICAgICAgICBMOiAoYSkgPT4gewogICAgICAgICAgdmFyIGIgPSBBLmxlbmd0aDsKICAgICAgICAgIGEgPj4+PSAwOwogICAgICAgICAgaWYgKDIxNDc0ODM2NDggPCBhKSByZXR1cm4gZmFsc2U7CiAgICAgICAgICBmb3IgKHZhciBjID0gMTsgNCA+PSBjOyBjICo9IDIpIHsKICAgICAgICAgICAgdmFyIGQgPSBiICogKDEgKyAwLjIgLyBjKTsKICAgICAgICAgICAgZCA9IE1hdGgubWluKGQsIGEgKyAxMDA2NjMyOTYpOwogICAgICAgICAgICB2YXIgZSA9IE1hdGg7CiAgICAgICAgICAgIGQgPSBNYXRoLm1heChhLCBkKTsKICAgICAgICAgICAgYTogewogICAgICAgICAgICAgIGUgPSAoZS5taW4uY2FsbChlLCAyMTQ3NDgzNjQ4LCBkICsgKDY1NTM2IC0gZCAlIDY1NTM2KSAlIDY1NTM2KSAtIGZhLmJ1ZmZlci5ieXRlTGVuZ3RoICsgNjU1MzUpIC8gNjU1MzY7CiAgICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgIGZhLmdyb3coZSk7CiAgICAgICAgICAgICAgICBsYSgpOwogICAgICAgICAgICAgICAgdmFyIGYgPSAxOwogICAgICAgICAgICAgICAgYnJlYWsgYTsKICAgICAgICAgICAgICB9IGNhdGNoIChsKSB7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGYgPSB2b2lkIDA7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKGYpIHJldHVybiB0cnVlOwogICAgICAgICAgfQogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0sCiAgICAgICAgUzogKGEsIGIpID0+IHsKICAgICAgICAgIHZhciBjID0gMDsKICAgICAgICAgIFJiKCkuZm9yRWFjaCgoZCwgZSkgPT4gewogICAgICAgICAgICB2YXIgZiA9IGIgKyBjOwogICAgICAgICAgICBlID0gRlthICsgNCAqIGUgPj4gMl0gPSBmOwogICAgICAgICAgICBmb3IgKGYgPSAwOyBmIDwgZC5sZW5ndGg7ICsrZikgeVtlKytdID0gZC5jaGFyQ29kZUF0KGYpOwogICAgICAgICAgICB5W2VdID0gMDsKICAgICAgICAgICAgYyArPSBkLmxlbmd0aCArIDE7CiAgICAgICAgICB9KTsKICAgICAgICAgIHJldHVybiAwOwogICAgICAgIH0sCiAgICAgICAgVDogKGEsIGIpID0+IHsKICAgICAgICAgIHZhciBjID0gUmIoKTsKICAgICAgICAgIEZbYSA+PiAyXSA9IGMubGVuZ3RoOwogICAgICAgICAgdmFyIGQgPSAwOwogICAgICAgICAgYy5mb3JFYWNoKChlKSA9PiBkICs9IGUubGVuZ3RoICsgMSk7CiAgICAgICAgICBGW2IgPj4gMl0gPSBkOwogICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgfSwKICAgICAgICB0OiAoKSA9PiA1MiwKICAgICAgICB6OiAoKSA9PiA1MiwKICAgICAgICBIOiBmdW5jdGlvbigpIHsKICAgICAgICAgIHJldHVybiA3MDsKICAgICAgICB9LAogICAgICAgIFE6IChhLCBiLCBjLCBkKSA9PiB7CiAgICAgICAgICBmb3IgKHZhciBlID0gMCwgZiA9IDA7IGYgPCBjOyBmKyspIHsKICAgICAgICAgICAgdmFyIGwgPSBGW2IgPj4gMl0sIGggPSBGW2IgKyA0ID4+IDJdOwogICAgICAgICAgICBiICs9IDg7CiAgICAgICAgICAgIGZvciAodmFyIG4gPSAwOyBuIDwgaDsgbisrKSB7CiAgICAgICAgICAgICAgdmFyIG0gPSBBW2wgKyBuXSwgcCA9IFNiW2FdOwogICAgICAgICAgICAgIDAgPT09IG0gfHwgMTAgPT09IG0gPyAoKDEgPT09IGEgPyBlYSA6IHcpKEoocCwgMCkpLCBwLmxlbmd0aCA9IDApIDogcC5wdXNoKG0pOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGUgKz0gaDsKICAgICAgICAgIH0KICAgICAgICAgIEZbZCA+PiAyXSA9IGU7CiAgICAgICAgICByZXR1cm4gMDsKICAgICAgICB9LAogICAgICAgIFU6IChhLCBiKSA9PiB7CiAgICAgICAgICBVYihBLnN1YmFycmF5KGEsIGEgKyBiKSk7CiAgICAgICAgICByZXR1cm4gMDsKICAgICAgICB9LAogICAgICAgIGk6IGNjLAogICAgICAgIGQ6IGRjLAogICAgICAgIGU6IGVjLAogICAgICAgIHA6IGZjLAogICAgICAgIHk6IGdjLAogICAgICAgIGI6IGhjLAogICAgICAgIGE6IGljLAogICAgICAgIGg6IGpjLAogICAgICAgIG46IGtjLAogICAgICAgIEc6IGxjLAogICAgICAgIEs6IChhLCBiLCBjLCBkKSA9PiBaYihhLCBiLCBjLCBkKQogICAgICB9LCBXID0gZnVuY3Rpb24oKSB7CiAgICAgICAgZnVuY3Rpb24gYShjKSB7CiAgICAgICAgICBXID0gYy5leHBvcnRzOwogICAgICAgICAgZmEgPSBXLmRhOwogICAgICAgICAgbGEoKTsKICAgICAgICAgIFMgPSBXLmhhOwogICAgICAgICAgbmEudW5zaGlmdChXLmVhKTsKICAgICAgICAgIEctLTsKICAgICAgICAgIGsubW9uaXRvclJ1bkRlcGVuZGVuY2llcz8uKEcpOwogICAgICAgICAgMCA9PSBHICYmIChudWxsICE9PSBxYSAmJiAoY2xlYXJJbnRlcnZhbChxYSksIHFhID0gbnVsbCksIEggJiYgKGMgPSBILCBIID0gbnVsbCwgYygpKSk7CiAgICAgICAgICByZXR1cm4gVzsKICAgICAgICB9CiAgICAgICAgdmFyIGIgPSB7IGE6IG1jIH07CiAgICAgICAgRysrOwogICAgICAgIGsubW9uaXRvclJ1bkRlcGVuZGVuY2llcz8uKEcpOwogICAgICAgIGlmIChrLmluc3RhbnRpYXRlV2FzbSkKICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgIHJldHVybiBrLmluc3RhbnRpYXRlV2FzbShiLCBhKTsKICAgICAgICAgIH0gY2F0Y2ggKGMpIHsKICAgICAgICAgICAgdyhgTW9kdWxlLmluc3RhbnRpYXRlV2FzbSBjYWxsYmFjayBmYWlsZWQgd2l0aCBlcnJvcjogJHtjfWApLCBiYShjKTsKICAgICAgICAgIH0KICAgICAgICB4YShiLCBmdW5jdGlvbihjKSB7CiAgICAgICAgICBhKGMuaW5zdGFuY2UpOwogICAgICAgIH0pLmNhdGNoKGJhKTsKICAgICAgICByZXR1cm4ge307CiAgICAgIH0oKSwgYmMgPSAoYSkgPT4gKGJjID0gVy5mYSkoYSksIG9iID0gKGEpID0+IChvYiA9IFcuZ2EpKGEpLCBVID0gKGEpID0+IChVID0gVy5pYSkoYSksIFggPSAoYSwgYikgPT4gKFggPSBXLmphKShhLCBiKSwgWSA9IChhKSA9PiAoWSA9IFcua2EpKGEpLCBaID0gKCkgPT4gKFogPSBXLmxhKSgpOwogICAgICBrLmR5bkNhbGxfaWlqaiA9IChhLCBiLCBjLCBkLCBlLCBmKSA9PiAoay5keW5DYWxsX2lpamogPSBXLm5hKShhLCBiLCBjLCBkLCBlLCBmKTsKICAgICAgay5keW5DYWxsX3ZpamogPSAoYSwgYiwgYywgZCwgZSwgZikgPT4gKGsuZHluQ2FsbF92aWpqID0gVy5vYSkoYSwgYiwgYywgZCwgZSwgZik7CiAgICAgIGsuZHluQ2FsbF9qaWlpID0gKGEsIGIsIGMsIGQpID0+IChrLmR5bkNhbGxfamlpaSA9IFcucGEpKGEsIGIsIGMsIGQpOwogICAgICBrLmR5bkNhbGxfamlpID0gKGEsIGIsIGMpID0+IChrLmR5bkNhbGxfamlpID0gVy5xYSkoYSwgYiwgYyk7CiAgICAgIHZhciBuYyA9IGsuZHluQ2FsbF92aWlpaiA9IChhLCBiLCBjLCBkLCBlLCBmKSA9PiAobmMgPSBrLmR5bkNhbGxfdmlpaWogPSBXLnJhKShhLCBiLCBjLCBkLCBlLCBmKTsKICAgICAgay5keW5DYWxsX2ppamkgPSAoYSwgYiwgYywgZCwgZSkgPT4gKGsuZHluQ2FsbF9qaWppID0gVy5zYSkoYSwgYiwgYywgZCwgZSk7CiAgICAgIGsuZHluQ2FsbF92aWlqaWkgPSAoYSwgYiwgYywgZCwgZSwgZiwgbCkgPT4gKGsuZHluQ2FsbF92aWlqaWkgPSBXLnRhKShhLCBiLCBjLCBkLCBlLCBmLCBsKTsKICAgICAgay5keW5DYWxsX2lpaWlpaiA9IChhLCBiLCBjLCBkLCBlLCBmLCBsKSA9PiAoay5keW5DYWxsX2lpaWlpaiA9IFcudWEpKGEsIGIsIGMsIGQsIGUsIGYsIGwpOwogICAgICBrLmR5bkNhbGxfaWlpaWlqaiA9IChhLCBiLCBjLCBkLCBlLCBmLCBsLCBoLCBuKSA9PiAoay5keW5DYWxsX2lpaWlpamogPSBXLnZhKShhLCBiLCBjLCBkLCBlLCBmLCBsLCBoLCBuKTsKICAgICAgay5keW5DYWxsX2lpaWlpaWpqID0gKGEsIGIsIGMsIGQsIGUsIGYsIGwsIGgsIG4sIG0pID0+IChrLmR5bkNhbGxfaWlpaWlpamogPSBXLndhKShhLCBiLCBjLCBkLCBlLCBmLCBsLCBoLCBuLCBtKTsKICAgICAgZnVuY3Rpb24gaGMoYSwgYikgewogICAgICAgIHZhciBjID0gWigpOwogICAgICAgIHRyeSB7CiAgICAgICAgICBTLmdldChhKShiKTsKICAgICAgICB9IGNhdGNoIChkKSB7CiAgICAgICAgICBZKGMpOwogICAgICAgICAgaWYgKGQgIT09IGQgKyAwKSB0aHJvdyBkOwogICAgICAgICAgWCgxLCAwKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgZnVuY3Rpb24gaWMoYSwgYiwgYykgewogICAgICAgIHZhciBkID0gWigpOwogICAgICAgIHRyeSB7CiAgICAgICAgICBTLmdldChhKShiLCBjKTsKICAgICAgICB9IGNhdGNoIChlKSB7CiAgICAgICAgICBZKGQpOwogICAgICAgICAgaWYgKGUgIT09IGUgKyAwKSB0aHJvdyBlOwogICAgICAgICAgWCgxLCAwKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgZnVuY3Rpb24gZWMoYSwgYiwgYywgZCkgewogICAgICAgIHZhciBlID0gWigpOwogICAgICAgIHRyeSB7CiAgICAgICAgICByZXR1cm4gUy5nZXQoYSkoYiwgYywgZCk7CiAgICAgICAgfSBjYXRjaCAoZikgewogICAgICAgICAgWShlKTsKICAgICAgICAgIGlmIChmICE9PSBmICsgMCkgdGhyb3cgZjsKICAgICAgICAgIFgoMSwgMCk7CiAgICAgICAgfQogICAgICB9CiAgICAgIGZ1bmN0aW9uIGRjKGEsIGIsIGMpIHsKICAgICAgICB2YXIgZCA9IFooKTsKICAgICAgICB0cnkgewogICAgICAgICAgcmV0dXJuIFMuZ2V0KGEpKGIsIGMpOwogICAgICAgIH0gY2F0Y2ggKGUpIHsKICAgICAgICAgIFkoZCk7CiAgICAgICAgICBpZiAoZSAhPT0gZSArIDApIHRocm93IGU7CiAgICAgICAgICBYKDEsIDApOwogICAgICAgIH0KICAgICAgfQogICAgICBmdW5jdGlvbiBjYyhhLCBiKSB7CiAgICAgICAgdmFyIGMgPSBaKCk7CiAgICAgICAgdHJ5IHsKICAgICAgICAgIHJldHVybiBTLmdldChhKShiKTsKICAgICAgICB9IGNhdGNoIChkKSB7CiAgICAgICAgICBZKGMpOwogICAgICAgICAgaWYgKGQgIT09IGQgKyAwKSB0aHJvdyBkOwogICAgICAgICAgWCgxLCAwKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgZnVuY3Rpb24gZmMoYSwgYiwgYywgZCwgZSwgZikgewogICAgICAgIHZhciBsID0gWigpOwogICAgICAgIHRyeSB7CiAgICAgICAgICByZXR1cm4gUy5nZXQoYSkoYiwgYywgZCwgZSwgZik7CiAgICAgICAgfSBjYXRjaCAoaCkgewogICAgICAgICAgWShsKTsKICAgICAgICAgIGlmIChoICE9PSBoICsgMCkgdGhyb3cgaDsKICAgICAgICAgIFgoMSwgMCk7CiAgICAgICAgfQogICAgICB9CiAgICAgIGZ1bmN0aW9uIGtjKGEsIGIsIGMsIGQsIGUpIHsKICAgICAgICB2YXIgZiA9IFooKTsKICAgICAgICB0cnkgewogICAgICAgICAgUy5nZXQoYSkoYiwgYywgZCwgZSk7CiAgICAgICAgfSBjYXRjaCAobCkgewogICAgICAgICAgWShmKTsKICAgICAgICAgIGlmIChsICE9PSBsICsgMCkgdGhyb3cgbDsKICAgICAgICAgIFgoMSwgMCk7CiAgICAgICAgfQogICAgICB9CiAgICAgIGZ1bmN0aW9uIGpjKGEsIGIsIGMsIGQpIHsKICAgICAgICB2YXIgZSA9IFooKTsKICAgICAgICB0cnkgewogICAgICAgICAgUy5nZXQoYSkoYiwgYywgZCk7CiAgICAgICAgfSBjYXRjaCAoZikgewogICAgICAgICAgWShlKTsKICAgICAgICAgIGlmIChmICE9PSBmICsgMCkgdGhyb3cgZjsKICAgICAgICAgIFgoMSwgMCk7CiAgICAgICAgfQogICAgICB9CiAgICAgIGZ1bmN0aW9uIGdjKGEpIHsKICAgICAgICB2YXIgYiA9IFooKTsKICAgICAgICB0cnkgewogICAgICAgICAgUy5nZXQoYSkoKTsKICAgICAgICB9IGNhdGNoIChjKSB7CiAgICAgICAgICBZKGIpOwogICAgICAgICAgaWYgKGMgIT09IGMgKyAwKSB0aHJvdyBjOwogICAgICAgICAgWCgxLCAwKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgZnVuY3Rpb24gbGMoYSwgYiwgYywgZCwgZSwgZikgewogICAgICAgIHZhciBsID0gWigpOwogICAgICAgIHRyeSB7CiAgICAgICAgICBuYyhhLCBiLCBjLCBkLCBlLCBmKTsKICAgICAgICB9IGNhdGNoIChoKSB7CiAgICAgICAgICBZKGwpOwogICAgICAgICAgaWYgKGggIT09IGggKyAwKSB0aHJvdyBoOwogICAgICAgICAgWCgxLCAwKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgdmFyIG9jOwogICAgICBIID0gZnVuY3Rpb24gcGMoKSB7CiAgICAgICAgb2MgfHwgcWMoKTsKICAgICAgICBvYyB8fCAoSCA9IHBjKTsKICAgICAgfTsKICAgICAgZnVuY3Rpb24gcWMoKSB7CiAgICAgICAgZnVuY3Rpb24gYSgpIHsKICAgICAgICAgIGlmICghb2MgJiYgKG9jID0gdHJ1ZSwgay5jYWxsZWRSdW4gPSB0cnVlLCAhaGEpKSB7CiAgICAgICAgICAgIHlhKG5hKTsKICAgICAgICAgICAgYWEoayk7CiAgICAgICAgICAgIGlmIChrLm9uUnVudGltZUluaXRpYWxpemVkKSBrLm9uUnVudGltZUluaXRpYWxpemVkKCk7CiAgICAgICAgICAgIGlmIChrLnBvc3RSdW4pCiAgICAgICAgICAgICAgZm9yICgiZnVuY3Rpb24iID09IHR5cGVvZiBrLnBvc3RSdW4gJiYgKGsucG9zdFJ1biA9IFtrLnBvc3RSdW5dKTsgay5wb3N0UnVuLmxlbmd0aDsgKSB7CiAgICAgICAgICAgICAgICB2YXIgYiA9IGsucG9zdFJ1bi5zaGlmdCgpOwogICAgICAgICAgICAgICAgb2EudW5zaGlmdChiKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIHlhKG9hKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKCEoMCA8IEcpKSB7CiAgICAgICAgICBpZiAoay5wcmVSdW4pIGZvciAoImZ1bmN0aW9uIiA9PSB0eXBlb2Ygay5wcmVSdW4gJiYgKGsucHJlUnVuID0gW2sucHJlUnVuXSk7IGsucHJlUnVuLmxlbmd0aDsgKSBwYSgpOwogICAgICAgICAgeWEobWEpOwogICAgICAgICAgMCA8IEcgfHwgKGsuc2V0U3RhdHVzID8gKGsuc2V0U3RhdHVzKCJSdW5uaW5nLi4uIiksIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgay5zZXRTdGF0dXMoIiIpOwogICAgICAgICAgICB9LCAxKTsKICAgICAgICAgICAgYSgpOwogICAgICAgICAgfSwgMSkpIDogYSgpKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgaWYgKGsucHJlSW5pdCkKICAgICAgICBmb3IgKCJmdW5jdGlvbiIgPT0gdHlwZW9mIGsucHJlSW5pdCAmJiAoay5wcmVJbml0ID0gW2sucHJlSW5pdF0pOyAwIDwgay5wcmVJbml0Lmxlbmd0aDsgKSBrLnByZUluaXQucG9wKCkoKTsKICAgICAgcWMoKTsKICAgICAgcmV0dXJuIHJlYWR5UHJvbWlzZTsKICAgIH07CiAgfSkoKTsKICB2YXIgZG90bG90dGllX3BsYXllcl9kZWZhdWx0ID0gY3JlYXRlRG90TG90dGllUGxheWVyTW9kdWxlOwoKICAvLyBzcmMvY29yZS9kb3Rsb3R0aWUtd2FzbS1sb2FkZXIudHMKICB2YXIgRG90TG90dGllV2FzbUxvYWRlciA9IGNsYXNzIHsKICAgIGNvbnN0cnVjdG9yKCkgewogICAgICB0aHJvdyBuZXcgRXJyb3IoIlJlbmRlcmVyTG9hZGVyIGlzIGEgc3RhdGljIGNsYXNzIGFuZCBjYW5ub3QgYmUgaW5zdGFudGlhdGVkLiIpOwogICAgfQogICAgc3RhdGljIGFzeW5jIF90cnlMb2FkKHVybCkgewogICAgICBjb25zdCBtb2R1bGUgPSBhd2FpdCBkb3Rsb3R0aWVfcGxheWVyX2RlZmF1bHQoeyBsb2NhdGVGaWxlOiAoKSA9PiB1cmwgfSk7CiAgICAgIHJldHVybiBtb2R1bGU7CiAgICB9CiAgICAvKioKICAgICAqIFRyaWVzIHRvIGxvYWQgdGhlIFdBU00gbW9kdWxlIGZyb20gdGhlIHByaW1hcnkgVVJMLCBmYWxsaW5nIGJhY2sgdG8gYSBiYWNrdXAgVVJMIGlmIG5lY2Vzc2FyeS4KICAgICAqIFRocm93cyBhbiBlcnJvciBpZiBib3RoIFVSTHMgZmFpbCB0byBsb2FkIHRoZSBtb2R1bGUuCiAgICAgKiBAcmV0dXJucyBQcm9taXNlPE1vZHVsZT4gLSBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB0byB0aGUgbG9hZGVkIG1vZHVsZS4KICAgICAqLwogICAgc3RhdGljIGFzeW5jIF9sb2FkV2l0aEJhY2t1cCgpIHsKICAgICAgaWYgKCF0aGlzLl9Nb2R1bGVQcm9taXNlKSB7CiAgICAgICAgdGhpcy5fTW9kdWxlUHJvbWlzZSA9IHRoaXMuX3RyeUxvYWQodGhpcy5fd2FzbVVSTCkuY2F0Y2goYXN5bmMgKGluaXRpYWxFcnJvcikgPT4gewogICAgICAgICAgY29uc3QgYmFja3VwVXJsID0gYGh0dHBzOi8vdW5wa2cuY29tLyR7UEFDS0FHRV9OQU1FfUAke1BBQ0tBR0VfVkVSU0lPTn0vZGlzdC9kb3Rsb3R0aWUtcGxheWVyLndhc21gOwogICAgICAgICAgY29uc29sZS53YXJuKGBQcmltYXJ5IFdBU00gbG9hZCBmYWlsZWQgZnJvbSAke3RoaXMuX3dhc21VUkx9LiBFcnJvcjogJHtpbml0aWFsRXJyb3IubWVzc2FnZX1gKTsKICAgICAgICAgIGNvbnNvbGUud2FybihgQXR0ZW1wdGluZyB0byBsb2FkIFdBU00gZnJvbSBiYWNrdXAgVVJMOiAke2JhY2t1cFVybH1gKTsKICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgIHJldHVybiBhd2FpdCB0aGlzLl90cnlMb2FkKGJhY2t1cFVybCk7CiAgICAgICAgICB9IGNhdGNoIChiYWNrdXBFcnJvcikgewogICAgICAgICAgICBjb25zb2xlLmVycm9yKGBQcmltYXJ5IFdBU00gVVJMIGZhaWxlZDogJHtpbml0aWFsRXJyb3IubWVzc2FnZX1gKTsKICAgICAgICAgICAgY29uc29sZS5lcnJvcihgQmFja3VwIFdBU00gVVJMIGZhaWxlZDogJHtiYWNrdXBFcnJvci5tZXNzYWdlfWApOwogICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIldBU00gbG9hZGluZyBmYWlsZWQgZnJvbSBhbGwgc291cmNlcy4iKTsKICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgfQogICAgICByZXR1cm4gdGhpcy5fTW9kdWxlUHJvbWlzZTsKICAgIH0KICAgIC8qKgogICAgICogUHVibGljIG1ldGhvZCB0byBsb2FkIHRoZSBXZWJBc3NlbWJseSBtb2R1bGUuCiAgICAgKiBVdGlsaXplcyBhIHByaW1hcnkgYW5kIGJhY2t1cCBVUkwgZm9yIHJvYnVzdG5lc3MuCiAgICAgKiBAcmV0dXJucyBQcm9taXNlPE1vZHVsZT4gLSBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB0byB0aGUgbG9hZGVkIG1vZHVsZS4KICAgICAqLwogICAgc3RhdGljIGFzeW5jIGxvYWQoKSB7CiAgICAgIHJldHVybiB0aGlzLl9sb2FkV2l0aEJhY2t1cCgpOwogICAgfQogICAgLyoqCiAgICAgKiBTZXRzIGEgbmV3IFVSTCBmb3IgdGhlIFdBU00gZmlsZSBhbmQgaW52YWxpZGF0ZXMgdGhlIGN1cnJlbnQgbW9kdWxlIHByb21pc2UuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAtICBUaGUgbmV3IFVSTCBmb3IgdGhlIFdBU00gZmlsZS4KICAgICAqLwogICAgc3RhdGljIHNldFdhc21VcmwodXJsKSB7CiAgICAgIHRoaXMuX3dhc21VUkwgPSB1cmw7CiAgICAgIHRoaXMuX01vZHVsZVByb21pc2UgPSBudWxsOwogICAgfQogIH07CiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uYW1pbmctY29udmVudGlvbgogIF9fcHVibGljRmllbGQoRG90TG90dGllV2FzbUxvYWRlciwgIl9Nb2R1bGVQcm9taXNlIiwgbnVsbCk7CiAgLy8gVVJMIGZvciB0aGUgV0FTTSBmaWxlLCBjb25zdHJ1Y3RlZCB1c2luZyBwYWNrYWdlIGluZm9ybWF0aW9uCiAgX19wdWJsaWNGaWVsZChEb3RMb3R0aWVXYXNtTG9hZGVyLCAiX3dhc21VUkwiLCBgaHR0cHM6Ly9jZG4uanNkZWxpdnIubmV0L25wbS8ke1BBQ0tBR0VfTkFNRX1AJHtQQUNLQUdFX1ZFUlNJT059L2Rpc3QvZG90bG90dGllLXBsYXllci53YXNtYCk7CgogIC8vIHNyYy9ldmVudC1tYW5hZ2VyLnRzCiAgdmFyIEV2ZW50TWFuYWdlciA9IGNsYXNzIHsKICAgIGNvbnN0cnVjdG9yKCkgewogICAgICBfX3B1YmxpY0ZpZWxkKHRoaXMsICJfZXZlbnRMaXN0ZW5lcnMiLCAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpKTsKICAgIH0KICAgIGFkZEV2ZW50TGlzdGVuZXIodHlwZSwgbGlzdGVuZXIpIHsKICAgICAgbGV0IGxpc3RlbmVycyA9IHRoaXMuX2V2ZW50TGlzdGVuZXJzLmdldCh0eXBlKTsKICAgICAgaWYgKCFsaXN0ZW5lcnMpIHsKICAgICAgICBsaXN0ZW5lcnMgPSAvKiBAX19QVVJFX18gKi8gbmV3IFNldCgpOwogICAgICAgIHRoaXMuX2V2ZW50TGlzdGVuZXJzLnNldCh0eXBlLCBsaXN0ZW5lcnMpOwogICAgICB9CiAgICAgIGxpc3RlbmVycy5hZGQobGlzdGVuZXIpOwogICAgfQogICAgcmVtb3ZlRXZlbnRMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lcikgewogICAgICBjb25zdCBsaXN0ZW5lcnMgPSB0aGlzLl9ldmVudExpc3RlbmVycy5nZXQodHlwZSk7CiAgICAgIGlmICghbGlzdGVuZXJzKSByZXR1cm47CiAgICAgIGlmIChsaXN0ZW5lcikgewogICAgICAgIGxpc3RlbmVycy5kZWxldGUobGlzdGVuZXIpOwogICAgICAgIGlmIChsaXN0ZW5lcnMuc2l6ZSA9PT0gMCkgewogICAgICAgICAgdGhpcy5fZXZlbnRMaXN0ZW5lcnMuZGVsZXRlKHR5cGUpOwogICAgICAgIH0KICAgICAgfSBlbHNlIHsKICAgICAgICB0aGlzLl9ldmVudExpc3RlbmVycy5kZWxldGUodHlwZSk7CiAgICAgIH0KICAgIH0KICAgIGRpc3BhdGNoKGV2ZW50KSB7CiAgICAgIGNvbnN0IGxpc3RlbmVycyA9IHRoaXMuX2V2ZW50TGlzdGVuZXJzLmdldChldmVudC50eXBlKTsKICAgICAgbGlzdGVuZXJzPy5mb3JFYWNoKChsaXN0ZW5lcikgPT4gbGlzdGVuZXIoZXZlbnQpKTsKICAgIH0KICAgIHJlbW92ZUFsbEV2ZW50TGlzdGVuZXJzKCkgewogICAgICB0aGlzLl9ldmVudExpc3RlbmVycy5jbGVhcigpOwogICAgfQogIH07CgogIC8vIHNyYy91dGlscy50cwogIGZ1bmN0aW9uIGlzSGV4Q29sb3IoY29sb3IpIHsKICAgIHJldHVybiAvXiMoW1xkYS1mXXs2fXxbXGRhLWZdezh9KSQvaXUudGVzdChjb2xvcik7CiAgfQogIGZ1bmN0aW9uIGhleFN0cmluZ1RvUkdCQUludChjb2xvckhleCkgewogICAgaWYgKCFpc0hleENvbG9yKGNvbG9ySGV4KSkgewogICAgICByZXR1cm4gMDsKICAgIH0KICAgIGxldCBoZXggPSBjb2xvckhleC5yZXBsYWNlKCIjIiwgIiIpOwogICAgaGV4ID0gaGV4Lmxlbmd0aCA9PT0gNiA/IGAke2hleH1mZmAgOiBoZXg7CiAgICByZXR1cm4gcGFyc2VJbnQoaGV4LCAxNik7CiAgfQogIGZ1bmN0aW9uIGlzRG90TG90dGllKGZpbGVEYXRhKSB7CiAgICBpZiAoZmlsZURhdGEuYnl0ZUxlbmd0aCA8IDQpIHsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogICAgY29uc3QgZmlsZVNpZ25hdHVyZSA9IG5ldyBVaW50OEFycmF5KGZpbGVEYXRhLnNsaWNlKDAsIFpJUF9TSUdOQVRVUkUuYnl0ZUxlbmd0aCkpOwogICAgZm9yIChsZXQgaSA9IDA7IGkgPCBaSVBfU0lHTkFUVVJFLmxlbmd0aDsgaSArPSAxKSB7CiAgICAgIGlmIChaSVBfU0lHTkFUVVJFW2ldICE9PSBmaWxlU2lnbmF0dXJlW2ldKSB7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gdHJ1ZTsKICB9CiAgZnVuY3Rpb24gaXNMb3R0aWVKU09OKGpzb24pIHsKICAgIHJldHVybiBMT1RUSUVfSlNPTl9NQU5EQVRPUllfRklFTERTLmV2ZXJ5KChmaWVsZCkgPT4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGpzb24sIGZpZWxkKSk7CiAgfQogIGZ1bmN0aW9uIGlzTG90dGllKGZpbGVEYXRhKSB7CiAgICBpZiAodHlwZW9mIGZpbGVEYXRhID09PSAic3RyaW5nIikgewogICAgICB0cnkgewogICAgICAgIHJldHVybiBpc0xvdHRpZUpTT04oSlNPTi5wYXJzZShmaWxlRGF0YSkpOwogICAgICB9IGNhdGNoIChfZSkgewogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIGlzTG90dGllSlNPTihmaWxlRGF0YSk7CiAgICB9CiAgfQoKICAvLyBzcmMvZG90bG90dGllLnRzCiAgdmFyIGNyZWF0ZUNvcmVNb2RlID0gKG1vZGUsIG1vZHVsZSkgPT4gewogICAgaWYgKG1vZGUgPT09ICJyZXZlcnNlIikgewogICAgICByZXR1cm4gbW9kdWxlLk1vZGUuUmV2ZXJzZTsKICAgIH0gZWxzZSBpZiAobW9kZSA9PT0gImJvdW5jZSIpIHsKICAgICAgcmV0dXJuIG1vZHVsZS5Nb2RlLkJvdW5jZTsKICAgIH0gZWxzZSBpZiAobW9kZSA9PT0gInJldmVyc2UtYm91bmNlIikgewogICAgICByZXR1cm4gbW9kdWxlLk1vZGUuUmV2ZXJzZUJvdW5jZTsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiBtb2R1bGUuTW9kZS5Gb3J3YXJkOwogICAgfQogIH07CiAgdmFyIGNyZWF0ZUNvcmVGaXQgPSAoZml0LCBtb2R1bGUpID0+IHsKICAgIGlmIChmaXQgPT09ICJjb250YWluIikgewogICAgICByZXR1cm4gbW9kdWxlLkZpdC5Db250YWluOwogICAgfSBlbHNlIGlmIChmaXQgPT09ICJjb3ZlciIpIHsKICAgICAgcmV0dXJuIG1vZHVsZS5GaXQuQ292ZXI7CiAgICB9IGVsc2UgaWYgKGZpdCA9PT0gImZpbGwiKSB7CiAgICAgIHJldHVybiBtb2R1bGUuRml0LkZpbGw7CiAgICB9IGVsc2UgaWYgKGZpdCA9PT0gImZpdC1oZWlnaHQiKSB7CiAgICAgIHJldHVybiBtb2R1bGUuRml0LkZpdEhlaWdodDsKICAgIH0gZWxzZSBpZiAoZml0ID09PSAiZml0LXdpZHRoIikgewogICAgICByZXR1cm4gbW9kdWxlLkZpdC5GaXRXaWR0aDsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiBtb2R1bGUuRml0Lk5vbmU7CiAgICB9CiAgfTsKICB2YXIgY3JlYXRlQ29yZUFsaWduID0gKGFsaWduLCBtb2R1bGUpID0+IHsKICAgIGNvbnN0IGNvcmVBbGlnbiA9IG5ldyBtb2R1bGUuVmVjdG9yRmxvYXQoKTsKICAgIGNvcmVBbGlnbi5wdXNoX2JhY2soYWxpZ25bMF0pOwogICAgY29yZUFsaWduLnB1c2hfYmFjayhhbGlnblsxXSk7CiAgICByZXR1cm4gY29yZUFsaWduOwogIH07CiAgdmFyIGNyZWF0ZUNvcmVTZWdtZW50ID0gKHNlZ21lbnQsIG1vZHVsZSkgPT4gewogICAgY29uc3QgY29yZXNlZ21lbnQgPSBuZXcgbW9kdWxlLlZlY3RvckZsb2F0KCk7CiAgICBpZiAoc2VnbWVudC5sZW5ndGggIT09IDIpIHJldHVybiBjb3Jlc2VnbWVudDsKICAgIGNvcmVzZWdtZW50LnB1c2hfYmFjayhzZWdtZW50WzBdKTsKICAgIGNvcmVzZWdtZW50LnB1c2hfYmFjayhzZWdtZW50WzFdKTsKICAgIHJldHVybiBjb3Jlc2VnbWVudDsKICB9OwogIHZhciBfRG90TG90dGllID0gY2xhc3MgX0RvdExvdHRpZSB7CiAgICBjb25zdHJ1Y3Rvcihjb25maWcpIHsKICAgICAgX19wdWJsaWNGaWVsZCh0aGlzLCAiX2NhbnZhcyIpOwogICAgICBfX3B1YmxpY0ZpZWxkKHRoaXMsICJfY29udGV4dCIsIG51bGwpOwogICAgICBfX3B1YmxpY0ZpZWxkKHRoaXMsICJfZXZlbnRNYW5hZ2VyIik7CiAgICAgIF9fcHVibGljRmllbGQodGhpcywgIl9hbmltYXRpb25GcmFtZUlkIiwgbnVsbCk7CiAgICAgIF9fcHVibGljRmllbGQodGhpcywgIl9mcmFtZU1hbmFnZXIiKTsKICAgICAgX19wdWJsaWNGaWVsZCh0aGlzLCAiX2RvdExvdHRpZUNvcmUiLCBudWxsKTsKICAgICAgX19wdWJsaWNGaWVsZCh0aGlzLCAiX3JlbmRlckNvbmZpZyIsIHt9KTsKICAgICAgX19wdWJsaWNGaWVsZCh0aGlzLCAiX2lzRnJvemVuIiwgZmFsc2UpOwogICAgICBfX3B1YmxpY0ZpZWxkKHRoaXMsICJfYmFja2dyb3VuZENvbG9yIiwgbnVsbCk7CiAgICAgIF9fcHVibGljRmllbGQodGhpcywgIl9wb2ludGVyVXBNZXRob2QiKTsKICAgICAgX19wdWJsaWNGaWVsZCh0aGlzLCAiX3BvaW50ZXJEb3duTWV0aG9kIik7CiAgICAgIF9fcHVibGljRmllbGQodGhpcywgIl9wb2ludGVyTW92ZU1ldGhvZCIpOwogICAgICBfX3B1YmxpY0ZpZWxkKHRoaXMsICJfcG9pbnRlckVudGVyTWV0aG9kIik7CiAgICAgIF9fcHVibGljRmllbGQodGhpcywgIl9wb2ludGVyRXhpdE1ldGhvZCIpOwogICAgICBfX3B1YmxpY0ZpZWxkKHRoaXMsICJfb25Db21wbGV0ZU1ldGhvZCIpOwogICAgICB0aGlzLl9jYW52YXMgPSBjb25maWcuY2FudmFzOwogICAgICB0aGlzLl9jb250ZXh0ID0gdGhpcy5fY2FudmFzLmdldENvbnRleHQoIjJkIik7CiAgICAgIHRoaXMuX2V2ZW50TWFuYWdlciA9IG5ldyBFdmVudE1hbmFnZXIoKTsKICAgICAgdGhpcy5fZnJhbWVNYW5hZ2VyID0gbmV3IEFuaW1hdGlvbkZyYW1lTWFuYWdlcigpOwogICAgICB0aGlzLl9yZW5kZXJDb25maWcgPSBjb25maWcucmVuZGVyQ29uZmlnID8/IHt9OwogICAgICBEb3RMb3R0aWVXYXNtTG9hZGVyLmxvYWQoKS50aGVuKChtb2R1bGUpID0+IHsKICAgICAgICBfRG90TG90dGllLl93YXNtTW9kdWxlID0gbW9kdWxlOwogICAgICAgIHRoaXMuX2RvdExvdHRpZUNvcmUgPSBuZXcgbW9kdWxlLkRvdExvdHRpZVBsYXllcih7CiAgICAgICAgICBhdXRvcGxheTogY29uZmlnLmF1dG9wbGF5ID8/IGZhbHNlLAogICAgICAgICAgYmFja2dyb3VuZENvbG9yOiAwLAogICAgICAgICAgbG9vcEFuaW1hdGlvbjogY29uZmlnLmxvb3AgPz8gZmFsc2UsCiAgICAgICAgICBtb2RlOiBjcmVhdGVDb3JlTW9kZShjb25maWcubW9kZSA/PyAiZm9yd2FyZCIsIG1vZHVsZSksCiAgICAgICAgICBzZWdtZW50OiBjcmVhdGVDb3JlU2VnbWVudChjb25maWcuc2VnbWVudCA/PyBbXSwgbW9kdWxlKSwKICAgICAgICAgIHNwZWVkOiBjb25maWcuc3BlZWQgPz8gMSwKICAgICAgICAgIHVzZUZyYW1lSW50ZXJwb2xhdGlvbjogY29uZmlnLnVzZUZyYW1lSW50ZXJwb2xhdGlvbiA/PyB0cnVlLAogICAgICAgICAgbWFya2VyOiBjb25maWcubWFya2VyID8/ICIiLAogICAgICAgICAgbGF5b3V0OiBjb25maWcubGF5b3V0ID8gewogICAgICAgICAgICBhbGlnbjogY3JlYXRlQ29yZUFsaWduKGNvbmZpZy5sYXlvdXQuYWxpZ24sIG1vZHVsZSksCiAgICAgICAgICAgIGZpdDogY3JlYXRlQ29yZUZpdChjb25maWcubGF5b3V0LmZpdCwgbW9kdWxlKQogICAgICAgICAgfSA6IG1vZHVsZS5jcmVhdGVEZWZhdWx0TGF5b3V0KCkKICAgICAgICB9KTsKICAgICAgICB0aGlzLl9ldmVudE1hbmFnZXIuZGlzcGF0Y2goeyB0eXBlOiAicmVhZHkiIH0pOwogICAgICAgIGlmIChjb25maWcuZGF0YSkgewogICAgICAgICAgdGhpcy5fbG9hZEZyb21EYXRhKGNvbmZpZy5kYXRhKTsKICAgICAgICB9IGVsc2UgaWYgKGNvbmZpZy5zcmMpIHsKICAgICAgICAgIHRoaXMuX2xvYWRGcm9tU3JjKGNvbmZpZy5zcmMpOwogICAgICAgIH0KICAgICAgICBpZiAoY29uZmlnLmJhY2tncm91bmRDb2xvcikgewogICAgICAgICAgdGhpcy5zZXRCYWNrZ3JvdW5kQ29sb3IoY29uZmlnLmJhY2tncm91bmRDb2xvcik7CiAgICAgICAgfQogICAgICB9KS5jYXRjaCgoZXJyb3IpID0+IHsKICAgICAgICB0aGlzLl9ldmVudE1hbmFnZXIuZGlzcGF0Y2goewogICAgICAgICAgdHlwZTogImxvYWRFcnJvciIsCiAgICAgICAgICBlcnJvcjogbmV3IEVycm9yKGBGYWlsZWQgdG8gbG9hZCB3YXNtIG1vZHVsZTogJHtlcnJvcn1gKQogICAgICAgIH0pOwogICAgICB9KTsKICAgICAgdGhpcy5fcG9pbnRlclVwTWV0aG9kID0gdGhpcy5fb25Qb2ludGVyVXAuYmluZCh0aGlzKTsKICAgICAgdGhpcy5fcG9pbnRlckRvd25NZXRob2QgPSB0aGlzLl9vblBvaW50ZXJEb3duLmJpbmQodGhpcyk7CiAgICAgIHRoaXMuX3BvaW50ZXJNb3ZlTWV0aG9kID0gdGhpcy5fb25Qb2ludGVyTW92ZS5iaW5kKHRoaXMpOwogICAgICB0aGlzLl9wb2ludGVyRW50ZXJNZXRob2QgPSB0aGlzLl9vblBvaW50ZXJFbnRlci5iaW5kKHRoaXMpOwogICAgICB0aGlzLl9wb2ludGVyRXhpdE1ldGhvZCA9IHRoaXMuX29uUG9pbnRlckxlYXZlLmJpbmQodGhpcyk7CiAgICAgIHRoaXMuX29uQ29tcGxldGVNZXRob2QgPSB0aGlzLl9vbkNvbXBsZXRlLmJpbmQodGhpcyk7CiAgICB9CiAgICBfZGlzcGF0Y2hFcnJvcihtZXNzYWdlKSB7CiAgICAgIGNvbnNvbGUuZXJyb3IobWVzc2FnZSk7CiAgICAgIHRoaXMuX2V2ZW50TWFuYWdlci5kaXNwYXRjaCh7IHR5cGU6ICJsb2FkRXJyb3IiLCBlcnJvcjogbmV3IEVycm9yKG1lc3NhZ2UpIH0pOwogICAgfQogICAgYXN5bmMgX2ZldGNoRGF0YShzcmMpIHsKICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChzcmMpOwogICAgICBpZiAoIXJlc3BvbnNlLm9rKSB7CiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gZmV0Y2ggYW5pbWF0aW9uIGRhdGEgZnJvbSBVUkw6ICR7c3JjfS4gJHtyZXNwb25zZS5zdGF0dXN9OiAke3Jlc3BvbnNlLnN0YXR1c1RleHR9YCk7CiAgICAgIH0KICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlc3BvbnNlLmFycmF5QnVmZmVyKCk7CiAgICAgIGlmIChpc0RvdExvdHRpZShkYXRhKSkgewogICAgICAgIHJldHVybiBkYXRhOwogICAgICB9CiAgICAgIHJldHVybiBuZXcgVGV4dERlY29kZXIoKS5kZWNvZGUoZGF0YSk7CiAgICB9CiAgICBfbG9hZEZyb21EYXRhKGRhdGEpIHsKICAgICAgaWYgKHRoaXMuX2RvdExvdHRpZUNvcmUgPT09IG51bGwpIHJldHVybjsKICAgICAgY29uc3Qgd2lkdGggPSB0aGlzLl9jYW52YXMud2lkdGg7CiAgICAgIGNvbnN0IGhlaWdodCA9IHRoaXMuX2NhbnZhcy5oZWlnaHQ7CiAgICAgIGxldCBsb2FkZWQgPSBmYWxzZTsKICAgICAgaWYgKHR5cGVvZiBkYXRhID09PSAic3RyaW5nIikgewogICAgICAgIGlmICghaXNMb3R0aWUoZGF0YSkpIHsKICAgICAgICAgIHRoaXMuX2Rpc3BhdGNoRXJyb3IoCiAgICAgICAgICAgICJJbnZhbGlkIExvdHRpZSBKU09OIHN0cmluZzogVGhlIHByb3ZpZGVkIHN0cmluZyBkb2VzIG5vdCBjb25mb3JtIHRvIHRoZSBMb3R0aWUgSlNPTiBmb3JtYXQuIgogICAgICAgICAgKTsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgbG9hZGVkID0gdGhpcy5fZG90TG90dGllQ29yZS5sb2FkQW5pbWF0aW9uRGF0YShkYXRhLCB3aWR0aCwgaGVpZ2h0KTsKICAgICAgfSBlbHNlIGlmIChkYXRhIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpIHsKICAgICAgICBpZiAoIWlzRG90TG90dGllKGRhdGEpKSB7CiAgICAgICAgICB0aGlzLl9kaXNwYXRjaEVycm9yKAogICAgICAgICAgICAiSW52YWxpZCBkb3RMb3R0aWUgQXJyYXlCdWZmZXI6IFRoZSBwcm92aWRlZCBBcnJheUJ1ZmZlciBkb2VzIG5vdCBjb25mb3JtIHRvIHRoZSBkb3RMb3R0aWUgZm9ybWF0LiIKICAgICAgICAgICk7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIGxvYWRlZCA9IHRoaXMuX2RvdExvdHRpZUNvcmUubG9hZERvdExvdHRpZURhdGEoZGF0YSwgd2lkdGgsIGhlaWdodCk7CiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGRhdGEgPT09ICJvYmplY3QiKSB7CiAgICAgICAgaWYgKCFpc0xvdHRpZShkYXRhKSkgewogICAgICAgICAgdGhpcy5fZGlzcGF0Y2hFcnJvcigKICAgICAgICAgICAgIkludmFsaWQgTG90dGllIEpTT04gb2JqZWN0OiBUaGUgcHJvdmlkZWQgb2JqZWN0IGRvZXMgbm90IGNvbmZvcm0gdG8gdGhlIExvdHRpZSBKU09OIGZvcm1hdC4iCiAgICAgICAgICApOwogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICBsb2FkZWQgPSB0aGlzLl9kb3RMb3R0aWVDb3JlLmxvYWRBbmltYXRpb25EYXRhKEpTT04uc3RyaW5naWZ5KGRhdGEpLCB3aWR0aCwgaGVpZ2h0KTsKICAgICAgfSBlbHNlIHsKICAgICAgICB0aGlzLl9kaXNwYXRjaEVycm9yKAogICAgICAgICAgYFVuc3VwcG9ydGVkIGRhdGEgdHlwZSBmb3IgYW5pbWF0aW9uIGRhdGEuIEV4cGVjdGVkOiAKICAgICAgICAgIC0gc3RyaW5nIChMb3R0aWUgSlNPTiksCiAgICAgICAgICAtIEFycmF5QnVmZmVyIChkb3RMb3R0aWUpLAogICAgICAgICAgLSBvYmplY3QgKExvdHRpZSBKU09OKS4gCiAgICAgICAgICBSZWNlaXZlZDogJHt0eXBlb2YgZGF0YX1gCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgaWYgKGxvYWRlZCkgewogICAgICAgIHRoaXMuX2V2ZW50TWFuYWdlci5kaXNwYXRjaCh7IHR5cGU6ICJsb2FkIiB9KTsKICAgICAgICBpZiAoSVNfQlJPV1NFUikgewogICAgICAgICAgdGhpcy5yZXNpemUoKTsKICAgICAgICB9CiAgICAgICAgdGhpcy5fZXZlbnRNYW5hZ2VyLmRpc3BhdGNoKHsKICAgICAgICAgIHR5cGU6ICJmcmFtZSIsCiAgICAgICAgICBjdXJyZW50RnJhbWU6IHRoaXMuX2RvdExvdHRpZUNvcmUuY3VycmVudEZyYW1lKCkKICAgICAgICB9KTsKICAgICAgICB0aGlzLl9yZW5kZXIoKTsKICAgICAgICBpZiAodGhpcy5fZG90TG90dGllQ29yZS5jb25maWcoKS5hdXRvcGxheSkgewogICAgICAgICAgdGhpcy5fZG90TG90dGllQ29yZS5wbGF5KCk7CiAgICAgICAgICBpZiAodGhpcy5fZG90TG90dGllQ29yZS5pc1BsYXlpbmcoKSkgewogICAgICAgICAgICB0aGlzLl9ldmVudE1hbmFnZXIuZGlzcGF0Y2goeyB0eXBlOiAicGxheSIgfSk7CiAgICAgICAgICAgIHRoaXMuX2FuaW1hdGlvbkZyYW1lSWQgPSB0aGlzLl9mcmFtZU1hbmFnZXIucmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRoaXMuX2RyYXcuYmluZCh0aGlzKSk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBjb25zb2xlLmVycm9yKCJzb21ldGhpbmcgd2VudCB3cm9uZywgdGhlIGFuaW1hdGlvbiB3YXMgc3VwcG9zZSB0byBhdXRvcGxheSIpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfSBlbHNlIHsKICAgICAgICB0aGlzLl9kaXNwYXRjaEVycm9yKCJGYWlsZWQgdG8gbG9hZCBhbmltYXRpb24gZGF0YSIpOwogICAgICB9CiAgICB9CiAgICBfbG9hZEZyb21TcmMoc3JjKSB7CiAgICAgIHRoaXMuX2ZldGNoRGF0YShzcmMpLnRoZW4oKGRhdGEpID0+IHRoaXMuX2xvYWRGcm9tRGF0YShkYXRhKSkuY2F0Y2goKGVycm9yKSA9PiB0aGlzLl9kaXNwYXRjaEVycm9yKGBGYWlsZWQgdG8gbG9hZCBhbmltYXRpb24gZGF0YSBmcm9tIFVSTDogJHtzcmN9LiAke2Vycm9yfWApKTsKICAgIH0KICAgIGdldCBhY3RpdmVBbmltYXRpb25JZCgpIHsKICAgICAgcmV0dXJuIHRoaXMuX2RvdExvdHRpZUNvcmU/LmFjdGl2ZUFuaW1hdGlvbklkKCk7CiAgICB9CiAgICBnZXQgYWN0aXZlVGhlbWVJZCgpIHsKICAgICAgcmV0dXJuIHRoaXMuX2RvdExvdHRpZUNvcmU/LmFjdGl2ZVRoZW1lSWQoKTsKICAgIH0KICAgIGdldCBsYXlvdXQoKSB7CiAgICAgIGNvbnN0IGxheW91dCA9IHRoaXMuX2RvdExvdHRpZUNvcmU/LmNvbmZpZygpLmxheW91dDsKICAgICAgaWYgKGxheW91dCkgewogICAgICAgIHJldHVybiB7CiAgICAgICAgICBhbGlnbjogW2xheW91dC5hbGlnbi5nZXQoMCksIGxheW91dC5hbGlnbi5nZXQoMSldLAogICAgICAgICAgZml0OiAoKCkgPT4gewogICAgICAgICAgICBzd2l0Y2ggKGxheW91dC5maXQpIHsKICAgICAgICAgICAgICBjYXNlIF9Eb3RMb3R0aWUuX3dhc21Nb2R1bGU/LkZpdC5Db250YWluOgogICAgICAgICAgICAgICAgcmV0dXJuICJjb250YWluIjsKICAgICAgICAgICAgICBjYXNlIF9Eb3RMb3R0aWUuX3dhc21Nb2R1bGU/LkZpdC5Db3ZlcjoKICAgICAgICAgICAgICAgIHJldHVybiAiY292ZXIiOwogICAgICAgICAgICAgIGNhc2UgX0RvdExvdHRpZS5fd2FzbU1vZHVsZT8uRml0LkZpbGw6CiAgICAgICAgICAgICAgICByZXR1cm4gImZpbGwiOwogICAgICAgICAgICAgIGNhc2UgX0RvdExvdHRpZS5fd2FzbU1vZHVsZT8uRml0LkZpdEhlaWdodDoKICAgICAgICAgICAgICAgIHJldHVybiAiZml0LWhlaWdodCI7CiAgICAgICAgICAgICAgY2FzZSBfRG90TG90dGllLl93YXNtTW9kdWxlPy5GaXQuRml0V2lkdGg6CiAgICAgICAgICAgICAgICByZXR1cm4gImZpdC13aWR0aCI7CiAgICAgICAgICAgICAgY2FzZSBfRG90TG90dGllLl93YXNtTW9kdWxlPy5GaXQuTm9uZToKICAgICAgICAgICAgICAgIHJldHVybiAibm9uZSI7CiAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgIHJldHVybiAiY29udGFpbiI7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0pKCkKICAgICAgICB9OwogICAgICB9CiAgICAgIHJldHVybiB2b2lkIDA7CiAgICB9CiAgICBnZXQgbWFya2VyKCkgewogICAgICBjb25zdCBtYXJrZXIgPSB0aGlzLl9kb3RMb3R0aWVDb3JlPy5jb25maWcoKS5tYXJrZXI7CiAgICAgIHJldHVybiBtYXJrZXI7CiAgICB9CiAgICBnZXQgbWFuaWZlc3QoKSB7CiAgICAgIHRyeSB7CiAgICAgICAgY29uc3QgbWFuaWZlc3QgPSB0aGlzLl9kb3RMb3R0aWVDb3JlPy5tYW5pZmVzdFN0cmluZygpOwogICAgICAgIGlmICh0aGlzLl9kb3RMb3R0aWVDb3JlID09PSBudWxsIHx8ICFtYW5pZmVzdCkgcmV0dXJuIG51bGw7CiAgICAgICAgY29uc3QgbWFuaWZlc3RKc29uID0gSlNPTi5wYXJzZShtYW5pZmVzdCk7CiAgICAgICAgaWYgKE9iamVjdC5rZXlzKG1hbmlmZXN0SnNvbikubGVuZ3RoID09PSAwKSByZXR1cm4gbnVsbDsKICAgICAgICByZXR1cm4gbWFuaWZlc3RKc29uOwogICAgICB9IGNhdGNoIChfZXJyKSB7CiAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgIH0KICAgIH0KICAgIGdldCByZW5kZXJDb25maWcoKSB7CiAgICAgIHJldHVybiB0aGlzLl9yZW5kZXJDb25maWc7CiAgICB9CiAgICBnZXQgc2VnbWVudCgpIHsKICAgICAgY29uc3Qgc2VnbWVudCA9IHRoaXMuX2RvdExvdHRpZUNvcmU/LmNvbmZpZygpLnNlZ21lbnQ7CiAgICAgIGlmIChzZWdtZW50ICYmIHNlZ21lbnQuc2l6ZSgpID09PSAyKSB7CiAgICAgICAgcmV0dXJuIFtzZWdtZW50LmdldCgwKSwgc2VnbWVudC5nZXQoMSldOwogICAgICB9CiAgICAgIHJldHVybiB2b2lkIDA7CiAgICB9CiAgICBnZXQgbG9vcCgpIHsKICAgICAgcmV0dXJuIHRoaXMuX2RvdExvdHRpZUNvcmU/LmNvbmZpZygpLmxvb3BBbmltYXRpb24gPz8gZmFsc2U7CiAgICB9CiAgICBnZXQgbW9kZSgpIHsKICAgICAgY29uc3QgbW9kZSA9IHRoaXMuX2RvdExvdHRpZUNvcmU/LmNvbmZpZygpLm1vZGU7CiAgICAgIGlmIChtb2RlID09PSBfRG90TG90dGllLl93YXNtTW9kdWxlPy5Nb2RlLlJldmVyc2UpIHsKICAgICAgICByZXR1cm4gInJldmVyc2UiOwogICAgICB9IGVsc2UgaWYgKG1vZGUgPT09IF9Eb3RMb3R0aWUuX3dhc21Nb2R1bGU/Lk1vZGUuQm91bmNlKSB7CiAgICAgICAgcmV0dXJuICJib3VuY2UiOwogICAgICB9IGVsc2UgaWYgKG1vZGUgPT09IF9Eb3RMb3R0aWUuX3dhc21Nb2R1bGU/Lk1vZGUuUmV2ZXJzZUJvdW5jZSkgewogICAgICAgIHJldHVybiAicmV2ZXJzZS1ib3VuY2UiOwogICAgICB9IGVsc2UgewogICAgICAgIHJldHVybiAiZm9yd2FyZCI7CiAgICAgIH0KICAgIH0KICAgIGdldCBpc0Zyb3plbigpIHsKICAgICAgcmV0dXJuIHRoaXMuX2lzRnJvemVuOwogICAgfQogICAgZ2V0IGJhY2tncm91bmRDb2xvcigpIHsKICAgICAgcmV0dXJuIHRoaXMuX2JhY2tncm91bmRDb2xvciA/PyAiIjsKICAgIH0KICAgIGdldCBhdXRvcGxheSgpIHsKICAgICAgcmV0dXJuIHRoaXMuX2RvdExvdHRpZUNvcmU/LmNvbmZpZygpLmF1dG9wbGF5ID8/IGZhbHNlOwogICAgfQogICAgZ2V0IHVzZUZyYW1lSW50ZXJwb2xhdGlvbigpIHsKICAgICAgcmV0dXJuIHRoaXMuX2RvdExvdHRpZUNvcmU/LmNvbmZpZygpLnVzZUZyYW1lSW50ZXJwb2xhdGlvbiA/PyBmYWxzZTsKICAgIH0KICAgIGdldCBzcGVlZCgpIHsKICAgICAgcmV0dXJuIHRoaXMuX2RvdExvdHRpZUNvcmU/LmNvbmZpZygpLnNwZWVkID8/IDA7CiAgICB9CiAgICBnZXQgaXNSZWFkeSgpIHsKICAgICAgcmV0dXJuIHRoaXMuX2RvdExvdHRpZUNvcmUgIT09IG51bGw7CiAgICB9CiAgICBnZXQgaXNMb2FkZWQoKSB7CiAgICAgIHJldHVybiB0aGlzLl9kb3RMb3R0aWVDb3JlPy5pc0xvYWRlZCgpID8/IGZhbHNlOwogICAgfQogICAgZ2V0IGlzUGxheWluZygpIHsKICAgICAgcmV0dXJuIHRoaXMuX2RvdExvdHRpZUNvcmU/LmlzUGxheWluZygpID8/IGZhbHNlOwogICAgfQogICAgZ2V0IGlzUGF1c2VkKCkgewogICAgICByZXR1cm4gdGhpcy5fZG90TG90dGllQ29yZT8uaXNQYXVzZWQoKSA/PyBmYWxzZTsKICAgIH0KICAgIGdldCBpc1N0b3BwZWQoKSB7CiAgICAgIHJldHVybiB0aGlzLl9kb3RMb3R0aWVDb3JlPy5pc1N0b3BwZWQoKSA/PyBmYWxzZTsKICAgIH0KICAgIGdldCBjdXJyZW50RnJhbWUoKSB7CiAgICAgIHJldHVybiB0aGlzLl9kb3RMb3R0aWVDb3JlPy5jdXJyZW50RnJhbWUoKSA/PyAwOwogICAgfQogICAgZ2V0IGxvb3BDb3VudCgpIHsKICAgICAgcmV0dXJuIHRoaXMuX2RvdExvdHRpZUNvcmU/Lmxvb3BDb3VudCgpID8/IDA7CiAgICB9CiAgICBnZXQgdG90YWxGcmFtZXMoKSB7CiAgICAgIHJldHVybiB0aGlzLl9kb3RMb3R0aWVDb3JlPy50b3RhbEZyYW1lcygpID8/IDA7CiAgICB9CiAgICBnZXQgZHVyYXRpb24oKSB7CiAgICAgIHJldHVybiB0aGlzLl9kb3RMb3R0aWVDb3JlPy5kdXJhdGlvbigpID8/IDA7CiAgICB9CiAgICBnZXQgc2VnbWVudER1cmF0aW9uKCkgewogICAgICByZXR1cm4gdGhpcy5fZG90TG90dGllQ29yZT8uc2VnbWVudER1cmF0aW9uKCkgPz8gMDsKICAgIH0KICAgIGdldCBjYW52YXMoKSB7CiAgICAgIHJldHVybiB0aGlzLl9jYW52YXM7CiAgICB9CiAgICBsb2FkKGNvbmZpZykgewogICAgICBpZiAodGhpcy5fZG90TG90dGllQ29yZSA9PT0gbnVsbCB8fCBfRG90TG90dGllLl93YXNtTW9kdWxlID09PSBudWxsKSByZXR1cm47CiAgICAgIHRoaXMuX2RvdExvdHRpZUNvcmUuc2V0Q29uZmlnKHsKICAgICAgICBhdXRvcGxheTogY29uZmlnLmF1dG9wbGF5ID8/IGZhbHNlLAogICAgICAgIGJhY2tncm91bmRDb2xvcjogMCwKICAgICAgICBsb29wQW5pbWF0aW9uOiBjb25maWcubG9vcCA/PyBmYWxzZSwKICAgICAgICBtb2RlOiBjcmVhdGVDb3JlTW9kZShjb25maWcubW9kZSA/PyAiZm9yd2FyZCIsIF9Eb3RMb3R0aWUuX3dhc21Nb2R1bGUpLAogICAgICAgIHNlZ21lbnQ6IGNyZWF0ZUNvcmVTZWdtZW50KGNvbmZpZy5zZWdtZW50ID8/IFtdLCBfRG90TG90dGllLl93YXNtTW9kdWxlKSwKICAgICAgICBzcGVlZDogY29uZmlnLnNwZWVkID8/IDEsCiAgICAgICAgdXNlRnJhbWVJbnRlcnBvbGF0aW9uOiBjb25maWcudXNlRnJhbWVJbnRlcnBvbGF0aW9uID8/IHRydWUsCiAgICAgICAgbWFya2VyOiBjb25maWcubWFya2VyID8/ICIiLAogICAgICAgIGxheW91dDogY29uZmlnLmxheW91dCA/IHsKICAgICAgICAgIGFsaWduOiBjcmVhdGVDb3JlQWxpZ24oY29uZmlnLmxheW91dC5hbGlnbiwgX0RvdExvdHRpZS5fd2FzbU1vZHVsZSksCiAgICAgICAgICBmaXQ6IGNyZWF0ZUNvcmVGaXQoY29uZmlnLmxheW91dC5maXQsIF9Eb3RMb3R0aWUuX3dhc21Nb2R1bGUpCiAgICAgICAgfSA6IF9Eb3RMb3R0aWUuX3dhc21Nb2R1bGUuY3JlYXRlRGVmYXVsdExheW91dCgpCiAgICAgIH0pOwogICAgICBpZiAoY29uZmlnLmRhdGEpIHsKICAgICAgICB0aGlzLl9sb2FkRnJvbURhdGEoY29uZmlnLmRhdGEpOwogICAgICB9IGVsc2UgaWYgKGNvbmZpZy5zcmMpIHsKICAgICAgICB0aGlzLl9sb2FkRnJvbVNyYyhjb25maWcuc3JjKTsKICAgICAgfQogICAgICB0aGlzLnNldEJhY2tncm91bmRDb2xvcihjb25maWcuYmFja2dyb3VuZENvbG9yID8/ICIiKTsKICAgIH0KICAgIF9yZW5kZXIoKSB7CiAgICAgIGlmICh0aGlzLl9kb3RMb3R0aWVDb3JlID09PSBudWxsIHx8IHRoaXMuX2NvbnRleHQgPT09IG51bGwpIHJldHVybiBmYWxzZTsKICAgICAgY29uc3QgcmVuZGVyZWQgPSB0aGlzLl9kb3RMb3R0aWVDb3JlLnJlbmRlcigpOwogICAgICBpZiAocmVuZGVyZWQpIHsKICAgICAgICBjb25zdCBidWZmZXIgPSB0aGlzLl9kb3RMb3R0aWVDb3JlLmJ1ZmZlcigpOwogICAgICAgIGNvbnN0IGNsYW1wZWRCdWZmZXIgPSBuZXcgVWludDhDbGFtcGVkQXJyYXkoYnVmZmVyLCAwLCB0aGlzLl9jYW52YXMud2lkdGggKiB0aGlzLl9jYW52YXMuaGVpZ2h0ICogNCk7CiAgICAgICAgbGV0IGltYWdlRGF0YSA9IG51bGw7CiAgICAgICAgaWYgKHR5cGVvZiBJbWFnZURhdGEgPT09ICJ1bmRlZmluZWQiKSB7CiAgICAgICAgICBpbWFnZURhdGEgPSB0aGlzLl9jb250ZXh0LmNyZWF0ZUltYWdlRGF0YSh0aGlzLl9jYW52YXMud2lkdGgsIHRoaXMuX2NhbnZhcy5oZWlnaHQpOwogICAgICAgICAgaW1hZ2VEYXRhLmRhdGEuc2V0KGNsYW1wZWRCdWZmZXIpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBpbWFnZURhdGEgPSBuZXcgSW1hZ2VEYXRhKGNsYW1wZWRCdWZmZXIsIHRoaXMuX2NhbnZhcy53aWR0aCwgdGhpcy5fY2FudmFzLmhlaWdodCk7CiAgICAgICAgfQogICAgICAgIHRoaXMuX2NvbnRleHQucHV0SW1hZ2VEYXRhKGltYWdlRGF0YSwgMCwgMCk7CiAgICAgICAgdGhpcy5fZXZlbnRNYW5hZ2VyLmRpc3BhdGNoKHsKICAgICAgICAgIHR5cGU6ICJyZW5kZXIiLAogICAgICAgICAgY3VycmVudEZyYW1lOiB0aGlzLl9kb3RMb3R0aWVDb3JlLmN1cnJlbnRGcmFtZSgpCiAgICAgICAgfSk7CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgIH0KICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogICAgX2RyYXcoKSB7CiAgICAgIGlmICh0aGlzLl9kb3RMb3R0aWVDb3JlID09PSBudWxsIHx8IHRoaXMuX2NvbnRleHQgPT09IG51bGwgfHwgIXRoaXMuX2RvdExvdHRpZUNvcmUuaXNQbGF5aW5nKCkpIHJldHVybjsKICAgICAgY29uc3QgbmV4dEZyYW1lID0gdGhpcy5fZG90TG90dGllQ29yZS5yZXF1ZXN0RnJhbWUoKTsKICAgICAgY29uc3QgdXBkYXRlZCA9IHRoaXMuX2RvdExvdHRpZUNvcmUuc2V0RnJhbWUobmV4dEZyYW1lKTsKICAgICAgaWYgKHVwZGF0ZWQpIHsKICAgICAgICB0aGlzLl9ldmVudE1hbmFnZXIuZGlzcGF0Y2goewogICAgICAgICAgdHlwZTogImZyYW1lIiwKICAgICAgICAgIGN1cnJlbnRGcmFtZTogdGhpcy5fZG90TG90dGllQ29yZS5jdXJyZW50RnJhbWUoKQogICAgICAgIH0pOwogICAgICAgIGNvbnN0IHJlbmRlcmVkID0gdGhpcy5fcmVuZGVyKCk7CiAgICAgICAgaWYgKHJlbmRlcmVkKSB7CiAgICAgICAgICBpZiAodGhpcy5fZG90TG90dGllQ29yZS5pc0NvbXBsZXRlKCkpIHsKICAgICAgICAgICAgaWYgKHRoaXMuX2RvdExvdHRpZUNvcmUuY29uZmlnKCkubG9vcEFuaW1hdGlvbikgewogICAgICAgICAgICAgIHRoaXMuX2V2ZW50TWFuYWdlci5kaXNwYXRjaCh7CiAgICAgICAgICAgICAgICB0eXBlOiAibG9vcCIsCiAgICAgICAgICAgICAgICBsb29wQ291bnQ6IHRoaXMuX2RvdExvdHRpZUNvcmUubG9vcENvdW50KCkKICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICB0aGlzLl9ldmVudE1hbmFnZXIuZGlzcGF0Y2goeyB0eXBlOiAiY29tcGxldGUiIH0pOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICAgIHRoaXMuX2FuaW1hdGlvbkZyYW1lSWQgPSB0aGlzLl9mcmFtZU1hbmFnZXIucmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRoaXMuX2RyYXcuYmluZCh0aGlzKSk7CiAgICB9CiAgICBwbGF5KCkgewogICAgICBpZiAodGhpcy5fZG90TG90dGllQ29yZSA9PT0gbnVsbCkgcmV0dXJuOwogICAgICBjb25zdCBvayA9IHRoaXMuX2RvdExvdHRpZUNvcmUucGxheSgpOwogICAgICBpZiAob2sgfHwgdGhpcy5fZG90TG90dGllQ29yZS5pc1BsYXlpbmcoKSkgewogICAgICAgIHRoaXMuX2lzRnJvemVuID0gZmFsc2U7CiAgICAgICAgdGhpcy5fZXZlbnRNYW5hZ2VyLmRpc3BhdGNoKHsgdHlwZTogInBsYXkiIH0pOwogICAgICAgIHRoaXMuX2FuaW1hdGlvbkZyYW1lSWQgPSB0aGlzLl9mcmFtZU1hbmFnZXIucmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRoaXMuX2RyYXcuYmluZCh0aGlzKSk7CiAgICAgIH0KICAgIH0KICAgIHBhdXNlKCkgewogICAgICBpZiAodGhpcy5fZG90TG90dGllQ29yZSA9PT0gbnVsbCkgcmV0dXJuOwogICAgICBjb25zdCBvayA9IHRoaXMuX2RvdExvdHRpZUNvcmUucGF1c2UoKTsKICAgICAgaWYgKG9rIHx8IHRoaXMuX2RvdExvdHRpZUNvcmUuaXNQYXVzZWQoKSkgewogICAgICAgIHRoaXMuX2V2ZW50TWFuYWdlci5kaXNwYXRjaCh7IHR5cGU6ICJwYXVzZSIgfSk7CiAgICAgIH0KICAgIH0KICAgIHN0b3AoKSB7CiAgICAgIGlmICh0aGlzLl9kb3RMb3R0aWVDb3JlID09PSBudWxsKSByZXR1cm47CiAgICAgIGNvbnN0IG9rID0gdGhpcy5fZG90TG90dGllQ29yZS5zdG9wKCk7CiAgICAgIGlmIChvaykgewogICAgICAgIHRoaXMuX2V2ZW50TWFuYWdlci5kaXNwYXRjaCh7IHR5cGU6ICJmcmFtZSIsIGN1cnJlbnRGcmFtZTogdGhpcy5fZG90TG90dGllQ29yZS5jdXJyZW50RnJhbWUoKSB9KTsKICAgICAgICB0aGlzLl9yZW5kZXIoKTsKICAgICAgICB0aGlzLl9ldmVudE1hbmFnZXIuZGlzcGF0Y2goeyB0eXBlOiAic3RvcCIgfSk7CiAgICAgIH0KICAgIH0KICAgIHNldEZyYW1lKGZyYW1lKSB7CiAgICAgIGlmICh0aGlzLl9kb3RMb3R0aWVDb3JlID09PSBudWxsKSByZXR1cm47CiAgICAgIGlmIChmcmFtZSA8IDAgfHwgZnJhbWUgPiB0aGlzLl9kb3RMb3R0aWVDb3JlLnRvdGFsRnJhbWVzKCkpIHJldHVybjsKICAgICAgY29uc3Qgb2sgPSB0aGlzLl9kb3RMb3R0aWVDb3JlLnNlZWsoZnJhbWUpOwogICAgICBpZiAob2spIHsKICAgICAgICB0aGlzLl9ldmVudE1hbmFnZXIuZGlzcGF0Y2goeyB0eXBlOiAiZnJhbWUiLCBjdXJyZW50RnJhbWU6IHRoaXMuX2RvdExvdHRpZUNvcmUuY3VycmVudEZyYW1lKCkgfSk7CiAgICAgICAgdGhpcy5fcmVuZGVyKCk7CiAgICAgIH0KICAgIH0KICAgIHNldFNwZWVkKHNwZWVkKSB7CiAgICAgIGlmICh0aGlzLl9kb3RMb3R0aWVDb3JlID09PSBudWxsKSByZXR1cm47CiAgICAgIHRoaXMuX2RvdExvdHRpZUNvcmUuc2V0Q29uZmlnKHsKICAgICAgICAuLi50aGlzLl9kb3RMb3R0aWVDb3JlLmNvbmZpZygpLAogICAgICAgIHNwZWVkCiAgICAgIH0pOwogICAgfQogICAgc2V0QmFja2dyb3VuZENvbG9yKGNvbG9yKSB7CiAgICAgIGlmICh0aGlzLl9kb3RMb3R0aWVDb3JlID09PSBudWxsKSByZXR1cm47CiAgICAgIGlmIChJU19CUk9XU0VSICYmIHRoaXMuX2NhbnZhcyBpbnN0YW5jZW9mIEhUTUxDYW52YXNFbGVtZW50KSB7CiAgICAgICAgdGhpcy5fY2FudmFzLnN0eWxlLmJhY2tncm91bmRDb2xvciA9IGNvbG9yOwogICAgICB9IGVsc2UgewogICAgICAgIHRoaXMuX2RvdExvdHRpZUNvcmUuc2V0Q29uZmlnKHsKICAgICAgICAgIC4uLnRoaXMuX2RvdExvdHRpZUNvcmUuY29uZmlnKCksCiAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IGhleFN0cmluZ1RvUkdCQUludChjb2xvcikKICAgICAgICB9KTsKICAgICAgfQogICAgICB0aGlzLl9iYWNrZ3JvdW5kQ29sb3IgPSBjb2xvcjsKICAgIH0KICAgIHNldExvb3AobG9vcCkgewogICAgICBpZiAodGhpcy5fZG90TG90dGllQ29yZSA9PT0gbnVsbCkgcmV0dXJuOwogICAgICB0aGlzLl9kb3RMb3R0aWVDb3JlLnNldENvbmZpZyh7CiAgICAgICAgLi4udGhpcy5fZG90TG90dGllQ29yZS5jb25maWcoKSwKICAgICAgICBsb29wQW5pbWF0aW9uOiBsb29wCiAgICAgIH0pOwogICAgfQogICAgc2V0VXNlRnJhbWVJbnRlcnBvbGF0aW9uKHVzZUZyYW1lSW50ZXJwb2xhdGlvbikgewogICAgICBpZiAodGhpcy5fZG90TG90dGllQ29yZSA9PT0gbnVsbCkgcmV0dXJuOwogICAgICB0aGlzLl9kb3RMb3R0aWVDb3JlLnNldENvbmZpZyh7CiAgICAgICAgLi4udGhpcy5fZG90TG90dGllQ29yZS5jb25maWcoKSwKICAgICAgICB1c2VGcmFtZUludGVycG9sYXRpb24KICAgICAgfSk7CiAgICB9CiAgICBhZGRFdmVudExpc3RlbmVyKHR5cGUsIGxpc3RlbmVyKSB7CiAgICAgIHRoaXMuX2V2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKHR5cGUsIGxpc3RlbmVyKTsKICAgIH0KICAgIHJlbW92ZUV2ZW50TGlzdGVuZXIodHlwZSwgbGlzdGVuZXIpIHsKICAgICAgdGhpcy5fZXZlbnRNYW5hZ2VyLnJlbW92ZUV2ZW50TGlzdGVuZXIodHlwZSwgbGlzdGVuZXIpOwogICAgfQogICAgZGVzdHJveSgpIHsKICAgICAgdGhpcy5fZG90TG90dGllQ29yZT8uZGVsZXRlKCk7CiAgICAgIHRoaXMuX2RvdExvdHRpZUNvcmUgPSBudWxsOwogICAgICB0aGlzLl9jb250ZXh0ID0gbnVsbDsKICAgICAgdGhpcy5fZXZlbnRNYW5hZ2VyLmRpc3BhdGNoKHsKICAgICAgICB0eXBlOiAiZGVzdHJveSIKICAgICAgfSk7CiAgICAgIHRoaXMuX2V2ZW50TWFuYWdlci5yZW1vdmVBbGxFdmVudExpc3RlbmVycygpOwogICAgICB0aGlzLl9jbGVhbnVwU3RhdGVNYWNoaW5lTGlzdGVuZXJzKCk7CiAgICB9CiAgICBmcmVlemUoKSB7CiAgICAgIGlmICh0aGlzLl9hbmltYXRpb25GcmFtZUlkID09PSBudWxsKSByZXR1cm47CiAgICAgIHRoaXMuX2ZyYW1lTWFuYWdlci5jYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLl9hbmltYXRpb25GcmFtZUlkKTsKICAgICAgdGhpcy5fYW5pbWF0aW9uRnJhbWVJZCA9IG51bGw7CiAgICAgIHRoaXMuX2lzRnJvemVuID0gdHJ1ZTsKICAgICAgdGhpcy5fZXZlbnRNYW5hZ2VyLmRpc3BhdGNoKHsgdHlwZTogImZyZWV6ZSIgfSk7CiAgICB9CiAgICB1bmZyZWV6ZSgpIHsKICAgICAgaWYgKHRoaXMuX2FuaW1hdGlvbkZyYW1lSWQgIT09IG51bGwpIHJldHVybjsKICAgICAgdGhpcy5fYW5pbWF0aW9uRnJhbWVJZCA9IHRoaXMuX2ZyYW1lTWFuYWdlci5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGhpcy5fZHJhdy5iaW5kKHRoaXMpKTsKICAgICAgdGhpcy5faXNGcm96ZW4gPSBmYWxzZTsKICAgICAgdGhpcy5fZXZlbnRNYW5hZ2VyLmRpc3BhdGNoKHsgdHlwZTogInVuZnJlZXplIiB9KTsKICAgIH0KICAgIHJlc2l6ZSgpIHsKICAgICAgaWYgKElTX0JST1dTRVIgJiYgdGhpcy5fY2FudmFzIGluc3RhbmNlb2YgSFRNTENhbnZhc0VsZW1lbnQpIHsKICAgICAgICBjb25zdCBkcHIgPSB0aGlzLl9yZW5kZXJDb25maWcuZGV2aWNlUGl4ZWxSYXRpbyB8fCB3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbyB8fCAxOwogICAgICAgIGNvbnN0IHsgaGVpZ2h0OiBjbGllbnRIZWlnaHQsIHdpZHRoOiBjbGllbnRXaWR0aCB9ID0gdGhpcy5fY2FudmFzLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOwogICAgICAgIHRoaXMuX2NhbnZhcy53aWR0aCA9IGNsaWVudFdpZHRoICogZHByOwogICAgICAgIHRoaXMuX2NhbnZhcy5oZWlnaHQgPSBjbGllbnRIZWlnaHQgKiBkcHI7CiAgICAgIH0KICAgICAgY29uc3Qgb2sgPSB0aGlzLl9kb3RMb3R0aWVDb3JlPy5yZXNpemUodGhpcy5fY2FudmFzLndpZHRoLCB0aGlzLl9jYW52YXMuaGVpZ2h0KTsKICAgICAgaWYgKG9rKSB7CiAgICAgICAgdGhpcy5fcmVuZGVyKCk7CiAgICAgIH0KICAgIH0KICAgIHNldFNlZ21lbnQoc3RhcnRGcmFtZSwgZW5kRnJhbWUpIHsKICAgICAgaWYgKHRoaXMuX2RvdExvdHRpZUNvcmUgPT09IG51bGwgfHwgX0RvdExvdHRpZS5fd2FzbU1vZHVsZSA9PT0gbnVsbCkgcmV0dXJuOwogICAgICB0aGlzLl9kb3RMb3R0aWVDb3JlLnNldENvbmZpZyh7CiAgICAgICAgLi4udGhpcy5fZG90TG90dGllQ29yZS5jb25maWcoKSwKICAgICAgICBzZWdtZW50OiBjcmVhdGVDb3JlU2VnbWVudChbc3RhcnRGcmFtZSwgZW5kRnJhbWVdLCBfRG90TG90dGllLl93YXNtTW9kdWxlKQogICAgICB9KTsKICAgIH0KICAgIHNldE1vZGUobW9kZSkgewogICAgICBpZiAodGhpcy5fZG90TG90dGllQ29yZSA9PT0gbnVsbCB8fCBfRG90TG90dGllLl93YXNtTW9kdWxlID09PSBudWxsKSByZXR1cm47CiAgICAgIHRoaXMuX2RvdExvdHRpZUNvcmUuc2V0Q29uZmlnKHsKICAgICAgICAuLi50aGlzLl9kb3RMb3R0aWVDb3JlLmNvbmZpZygpLAogICAgICAgIG1vZGU6IGNyZWF0ZUNvcmVNb2RlKG1vZGUsIF9Eb3RMb3R0aWUuX3dhc21Nb2R1bGUpCiAgICAgIH0pOwogICAgfQogICAgc2V0UmVuZGVyQ29uZmlnKGNvbmZpZykgewogICAgICB0aGlzLl9yZW5kZXJDb25maWcgPSBjb25maWc7CiAgICB9CiAgICBsb2FkQW5pbWF0aW9uKGFuaW1hdGlvbklkKSB7CiAgICAgIGlmICh0aGlzLl9kb3RMb3R0aWVDb3JlID09PSBudWxsIHx8IHRoaXMuX2RvdExvdHRpZUNvcmUuYWN0aXZlQW5pbWF0aW9uSWQoKSA9PT0gYW5pbWF0aW9uSWQpIHJldHVybjsKICAgICAgY29uc3QgbG9hZGVkID0gdGhpcy5fZG90TG90dGllQ29yZS5sb2FkQW5pbWF0aW9uKGFuaW1hdGlvbklkLCB0aGlzLl9jYW52YXMud2lkdGgsIHRoaXMuX2NhbnZhcy5oZWlnaHQpOwogICAgICBpZiAobG9hZGVkKSB7CiAgICAgICAgdGhpcy5fZXZlbnRNYW5hZ2VyLmRpc3BhdGNoKHsgdHlwZTogImxvYWQiIH0pOwogICAgICAgIHRoaXMucmVzaXplKCk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdGhpcy5fZXZlbnRNYW5hZ2VyLmRpc3BhdGNoKHsKICAgICAgICAgIHR5cGU6ICJsb2FkRXJyb3IiLAogICAgICAgICAgZXJyb3I6IG5ldyBFcnJvcihgRmFpbGVkIHRvIGFuaW1hdGlvbiA6JHthbmltYXRpb25JZH1gKQogICAgICAgIH0pOwogICAgICB9CiAgICB9CiAgICBzZXRNYXJrZXIobWFya2VyKSB7CiAgICAgIGlmICh0aGlzLl9kb3RMb3R0aWVDb3JlID09PSBudWxsKSByZXR1cm47CiAgICAgIHRoaXMuX2RvdExvdHRpZUNvcmUuc2V0Q29uZmlnKHsKICAgICAgICAuLi50aGlzLl9kb3RMb3R0aWVDb3JlLmNvbmZpZygpLAogICAgICAgIG1hcmtlcgogICAgICB9KTsKICAgIH0KICAgIG1hcmtlcnMoKSB7CiAgICAgIGNvbnN0IG1hcmtlcnMgPSB0aGlzLl9kb3RMb3R0aWVDb3JlPy5tYXJrZXJzKCk7CiAgICAgIGlmIChtYXJrZXJzKSB7CiAgICAgICAgY29uc3QgcmVzdWx0ID0gW107CiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtYXJrZXJzLnNpemUoKTsgaSArPSAxKSB7CiAgICAgICAgICBjb25zdCBtYXJrZXIgPSBtYXJrZXJzLmdldChpKTsKICAgICAgICAgIHJlc3VsdC5wdXNoKHsKICAgICAgICAgICAgbmFtZTogbWFya2VyLm5hbWUsCiAgICAgICAgICAgIHRpbWU6IG1hcmtlci50aW1lLAogICAgICAgICAgICBkdXJhdGlvbjogbWFya2VyLmR1cmF0aW9uCiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgfQogICAgICByZXR1cm4gW107CiAgICB9CiAgICBsb2FkVGhlbWUodGhlbWVJZCkgewogICAgICBpZiAodGhpcy5fZG90TG90dGllQ29yZSA9PT0gbnVsbCkgcmV0dXJuIGZhbHNlOwogICAgICBjb25zdCBsb2FkZWQgPSB0aGlzLl9kb3RMb3R0aWVDb3JlLmxvYWRUaGVtZSh0aGVtZUlkKTsKICAgICAgdGhpcy5fcmVuZGVyKCk7CiAgICAgIHJldHVybiBsb2FkZWQ7CiAgICB9CiAgICBsb2FkVGhlbWVEYXRhKHRoZW1lRGF0YSkgewogICAgICBpZiAodGhpcy5fZG90TG90dGllQ29yZSA9PT0gbnVsbCkgcmV0dXJuIGZhbHNlOwogICAgICBjb25zdCBsb2FkZWQgPSB0aGlzLl9kb3RMb3R0aWVDb3JlLmxvYWRUaGVtZURhdGEodGhlbWVEYXRhKTsKICAgICAgdGhpcy5fcmVuZGVyKCk7CiAgICAgIHJldHVybiBsb2FkZWQ7CiAgICB9CiAgICBzZXRMYXlvdXQobGF5b3V0KSB7CiAgICAgIGlmICh0aGlzLl9kb3RMb3R0aWVDb3JlID09PSBudWxsIHx8IF9Eb3RMb3R0aWUuX3dhc21Nb2R1bGUgPT09IG51bGwpIHJldHVybjsKICAgICAgdGhpcy5fZG90TG90dGllQ29yZS5zZXRDb25maWcoewogICAgICAgIC4uLnRoaXMuX2RvdExvdHRpZUNvcmUuY29uZmlnKCksCiAgICAgICAgbGF5b3V0OiB7CiAgICAgICAgICBhbGlnbjogY3JlYXRlQ29yZUFsaWduKGxheW91dC5hbGlnbiwgX0RvdExvdHRpZS5fd2FzbU1vZHVsZSksCiAgICAgICAgICBmaXQ6IGNyZWF0ZUNvcmVGaXQobGF5b3V0LmZpdCwgX0RvdExvdHRpZS5fd2FzbU1vZHVsZSkKICAgICAgICB9CiAgICAgIH0pOwogICAgfQogICAgc2V0Vmlld3BvcnQoeCwgeSwgd2lkdGgsIGhlaWdodCkgewogICAgICBpZiAodGhpcy5fZG90TG90dGllQ29yZSA9PT0gbnVsbCkgcmV0dXJuIGZhbHNlOwogICAgICByZXR1cm4gdGhpcy5fZG90TG90dGllQ29yZS5zZXRWaWV3cG9ydCh4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKICAgIH0KICAgIHN0YXRpYyBzZXRXYXNtVXJsKHVybCkgewogICAgICBEb3RMb3R0aWVXYXNtTG9hZGVyLnNldFdhc21VcmwodXJsKTsKICAgIH0KICAgIGxvYWRTdGF0ZU1hY2hpbmUoc3RhdGVNYWNoaW5lSWQpIHsKICAgICAgcmV0dXJuIHRoaXMuX2RvdExvdHRpZUNvcmU/LmxvYWRTdGF0ZU1hY2hpbmUoc3RhdGVNYWNoaW5lSWQpID8/IGZhbHNlOwogICAgfQogICAgc3RhcnRTdGF0ZU1hY2hpbmUoKSB7CiAgICAgIGNvbnN0IHN0YXJ0ZWQgPSB0aGlzLl9kb3RMb3R0aWVDb3JlPy5zdGFydFN0YXRlTWFjaGluZSgpID8/IGZhbHNlOwogICAgICBpZiAoc3RhcnRlZCkgewogICAgICAgIHRoaXMuX3NldHVwU3RhdGVNYWNoaW5lTGlzdGVuZXJzKCk7CiAgICAgIH0KICAgICAgcmV0dXJuIHN0YXJ0ZWQ7CiAgICB9CiAgICBzdG9wU3RhdGVNYWNoaW5lKCkgewogICAgICBjb25zdCBzdG9wcGVkID0gdGhpcy5fZG90TG90dGllQ29yZT8uc3RvcFN0YXRlTWFjaGluZSgpID8/IGZhbHNlOwogICAgICBpZiAoc3RvcHBlZCkgewogICAgICAgIHRoaXMuX2NsZWFudXBTdGF0ZU1hY2hpbmVMaXN0ZW5lcnMoKTsKICAgICAgfQogICAgICByZXR1cm4gc3RvcHBlZDsKICAgIH0KICAgIF9nZXRQb2ludGVyUG9zaXRpb24oZXZlbnQpIHsKICAgICAgY29uc3QgcmVjdCA9IHRoaXMuX2NhbnZhcy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKICAgICAgY29uc3Qgc2NhbGVYID0gdGhpcy5fY2FudmFzLndpZHRoIC8gcmVjdC53aWR0aDsKICAgICAgY29uc3Qgc2NhbGVZID0gdGhpcy5fY2FudmFzLmhlaWdodCAvIHJlY3QuaGVpZ2h0OwogICAgICBjb25zdCBkZXZpY2VQaXhlbFJhdGlvID0gdGhpcy5fcmVuZGVyQ29uZmlnLmRldmljZVBpeGVsUmF0aW8gfHwgd2luZG93LmRldmljZVBpeGVsUmF0aW8gfHwgMTsKICAgICAgY29uc3QgeCA9IChldmVudC5jbGllbnRYIC0gcmVjdC5sZWZ0KSAqIHNjYWxlWCAvIGRldmljZVBpeGVsUmF0aW87CiAgICAgIGNvbnN0IHkgPSAoZXZlbnQuY2xpZW50WSAtIHJlY3QudG9wKSAqIHNjYWxlWSAvIGRldmljZVBpeGVsUmF0aW87CiAgICAgIHJldHVybiB7CiAgICAgICAgeCwKICAgICAgICB5CiAgICAgIH07CiAgICB9CiAgICBfb25Qb2ludGVyVXAoZXZlbnQpIHsKICAgICAgY29uc3QgeyB4LCB5IH0gPSB0aGlzLl9nZXRQb2ludGVyUG9zaXRpb24oZXZlbnQpOwogICAgICB0aGlzLnBvc3RTdGF0ZU1hY2hpbmVFdmVudChgT25Qb2ludGVyVXA6ICR7eH0gJHt5fWApOwogICAgfQogICAgX29uUG9pbnRlckRvd24oZXZlbnQpIHsKICAgICAgY29uc3QgeyB4LCB5IH0gPSB0aGlzLl9nZXRQb2ludGVyUG9zaXRpb24oZXZlbnQpOwogICAgICB0aGlzLnBvc3RTdGF0ZU1hY2hpbmVFdmVudChgT25Qb2ludGVyRG93bjogJHt4fSAke3l9YCk7CiAgICB9CiAgICBfb25Qb2ludGVyTW92ZShldmVudCkgewogICAgICBjb25zdCB7IHgsIHkgfSA9IHRoaXMuX2dldFBvaW50ZXJQb3NpdGlvbihldmVudCk7CiAgICAgIHRoaXMucG9zdFN0YXRlTWFjaGluZUV2ZW50KGBPblBvaW50ZXJNb3ZlOiAke3h9ICR7eX1gKTsKICAgIH0KICAgIF9vblBvaW50ZXJFbnRlcihldmVudCkgewogICAgICBjb25zdCB7IHgsIHkgfSA9IHRoaXMuX2dldFBvaW50ZXJQb3NpdGlvbihldmVudCk7CiAgICAgIHRoaXMucG9zdFN0YXRlTWFjaGluZUV2ZW50KGBPblBvaW50ZXJFbnRlcjogJHt4fSAke3l9YCk7CiAgICB9CiAgICBfb25Qb2ludGVyTGVhdmUoZXZlbnQpIHsKICAgICAgY29uc3QgeyB4LCB5IH0gPSB0aGlzLl9nZXRQb2ludGVyUG9zaXRpb24oZXZlbnQpOwogICAgICB0aGlzLnBvc3RTdGF0ZU1hY2hpbmVFdmVudChgT25Qb2ludGVyRXhpdDogJHt4fSAke3l9YCk7CiAgICB9CiAgICBfb25Db21wbGV0ZSgpIHsKICAgICAgdGhpcy5wb3N0U3RhdGVNYWNoaW5lRXZlbnQoIk9uQ29tcGxldGUiKTsKICAgIH0KICAgIC8qKgogICAgICogQGV4cGVyaW1lbnRhbAogICAgICogQHBhcmFtIGV2ZW50IC0gVGhlIGV2ZW50IHRvIGJlIHBvc3RlZCB0byB0aGUgc3RhdGUgbWFjaGluZQogICAgICogQHJldHVybnMgYm9vbGVhbiAtIHRydWUgaWYgdGhlIGV2ZW50IHdhcyBwb3N0ZWQgc3VjY2Vzc2Z1bGx5LCBmYWxzZSBvdGhlcndpc2UKICAgICAqLwogICAgcG9zdFN0YXRlTWFjaGluZUV2ZW50KGV2ZW50KSB7CiAgICAgIGNvbnN0IHJ0ID0gdGhpcy5fZG90TG90dGllQ29yZT8ucG9zdEV2ZW50UGF5bG9hZChldmVudCkgPz8gMTsKICAgICAgaWYgKHJ0ID09PSAyKSB7CiAgICAgICAgdGhpcy5wbGF5KCk7CiAgICAgIH0gZWxzZSBpZiAocnQgPT09IDMpIHsKICAgICAgICB0aGlzLnBhdXNlKCk7CiAgICAgIH0gZWxzZSBpZiAocnQgPT09IDQpIHsKICAgICAgICB0aGlzLl9yZW5kZXIoKTsKICAgICAgfQogICAgICByZXR1cm4gcnQ7CiAgICB9CiAgICBnZXRTdGF0ZU1hY2hpbmVMaXN0ZW5lcnMoKSB7CiAgICAgIGlmICghdGhpcy5fZG90TG90dGllQ29yZSkgcmV0dXJuIFtdOwogICAgICBjb25zdCBsaXN0ZW5lcnNWZWN0b3IgPSB0aGlzLl9kb3RMb3R0aWVDb3JlLnN0YXRlTWFjaGluZUZyYW1ld29ya1NldHVwKCk7CiAgICAgIGNvbnN0IGxpc3RlbmVycyA9IFtdOwogICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxpc3RlbmVyc1ZlY3Rvci5zaXplKCk7IGkgKz0gMSkgewogICAgICAgIGxpc3RlbmVycy5wdXNoKGxpc3RlbmVyc1ZlY3Rvci5nZXQoaSkpOwogICAgICB9CiAgICAgIHJldHVybiBsaXN0ZW5lcnM7CiAgICB9CiAgICBfc2V0dXBTdGF0ZU1hY2hpbmVMaXN0ZW5lcnMoKSB7CiAgICAgIGlmIChJU19CUk9XU0VSICYmIHRoaXMuX2NhbnZhcyBpbnN0YW5jZW9mIEhUTUxDYW52YXNFbGVtZW50ICYmIHRoaXMuX2RvdExvdHRpZUNvcmUgIT09IG51bGwgJiYgdGhpcy5pc0xvYWRlZCkgewogICAgICAgIGNvbnN0IGxpc3RlbmVycyA9IHRoaXMuZ2V0U3RhdGVNYWNoaW5lTGlzdGVuZXJzKCk7CiAgICAgICAgaWYgKGxpc3RlbmVycy5pbmNsdWRlcygiUG9pbnRlclVwIikpIHsKICAgICAgICAgIHRoaXMuX2NhbnZhcy5hZGRFdmVudExpc3RlbmVyKCJwb2ludGVydXAiLCB0aGlzLl9wb2ludGVyVXBNZXRob2QpOwogICAgICAgIH0KICAgICAgICBpZiAobGlzdGVuZXJzLmluY2x1ZGVzKCJQb2ludGVyRG93biIpKSB7CiAgICAgICAgICB0aGlzLl9jYW52YXMuYWRkRXZlbnRMaXN0ZW5lcigicG9pbnRlcmRvd24iLCB0aGlzLl9wb2ludGVyRG93bk1ldGhvZCk7CiAgICAgICAgfQogICAgICAgIGlmIChsaXN0ZW5lcnMuaW5jbHVkZXMoIlBvaW50ZXJNb3ZlIikpIHsKICAgICAgICAgIHRoaXMuX2NhbnZhcy5hZGRFdmVudExpc3RlbmVyKCJwb2ludGVybW92ZSIsIHRoaXMuX3BvaW50ZXJNb3ZlTWV0aG9kKTsKICAgICAgICB9CiAgICAgICAgaWYgKGxpc3RlbmVycy5pbmNsdWRlcygiUG9pbnRlckVudGVyIikpIHsKICAgICAgICAgIHRoaXMuX2NhbnZhcy5hZGRFdmVudExpc3RlbmVyKCJwb2ludGVyZW50ZXIiLCB0aGlzLl9wb2ludGVyRW50ZXJNZXRob2QpOwogICAgICAgIH0KICAgICAgICBpZiAobGlzdGVuZXJzLmluY2x1ZGVzKCJQb2ludGVyRXhpdCIpKSB7CiAgICAgICAgICB0aGlzLl9jYW52YXMuYWRkRXZlbnRMaXN0ZW5lcigicG9pbnRlcmxlYXZlIiwgdGhpcy5fcG9pbnRlckV4aXRNZXRob2QpOwogICAgICAgIH0KICAgICAgICBpZiAobGlzdGVuZXJzLmluY2x1ZGVzKCJDb21wbGV0ZSIpKSB7CiAgICAgICAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoImNvbXBsZXRlIiwgdGhpcy5fb25Db21wbGV0ZU1ldGhvZCk7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICBfY2xlYW51cFN0YXRlTWFjaGluZUxpc3RlbmVycygpIHsKICAgICAgaWYgKElTX0JST1dTRVIgJiYgdGhpcy5fY2FudmFzIGluc3RhbmNlb2YgSFRNTENhbnZhc0VsZW1lbnQpIHsKICAgICAgICB0aGlzLl9jYW52YXMucmVtb3ZlRXZlbnRMaXN0ZW5lcigicG9pbnRlcnVwIiwgdGhpcy5fcG9pbnRlclVwTWV0aG9kKTsKICAgICAgICB0aGlzLl9jYW52YXMucmVtb3ZlRXZlbnRMaXN0ZW5lcigicG9pbnRlcmRvd24iLCB0aGlzLl9wb2ludGVyRG93bk1ldGhvZCk7CiAgICAgICAgdGhpcy5fY2FudmFzLnJlbW92ZUV2ZW50TGlzdGVuZXIoInBvaW50ZXJtb3ZlIiwgdGhpcy5fcG9pbnRlck1vdmVNZXRob2QpOwogICAgICAgIHRoaXMuX2NhbnZhcy5yZW1vdmVFdmVudExpc3RlbmVyKCJwb2ludGVyZW50ZXIiLCB0aGlzLl9wb2ludGVyRW50ZXJNZXRob2QpOwogICAgICAgIHRoaXMuX2NhbnZhcy5yZW1vdmVFdmVudExpc3RlbmVyKCJwb2ludGVybGVhdmUiLCB0aGlzLl9wb2ludGVyRXhpdE1ldGhvZCk7CiAgICAgICAgdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKCJjb21wbGV0ZSIsIHRoaXMuX29uQ29tcGxldGVNZXRob2QpOwogICAgICB9CiAgICB9CiAgICBsb2FkU3RhdGVNYWNoaW5lRGF0YShzdGF0ZU1hY2hpbmVEYXRhKSB7CiAgICAgIHJldHVybiB0aGlzLl9kb3RMb3R0aWVDb3JlPy5sb2FkU3RhdGVNYWNoaW5lRGF0YShzdGF0ZU1hY2hpbmVEYXRhKSA/PyBmYWxzZTsKICAgIH0KICAgIGFuaW1hdGlvblNpemUoKSB7CiAgICAgIGNvbnN0IHdpZHRoID0gdGhpcy5fZG90TG90dGllQ29yZT8uYW5pbWF0aW9uU2l6ZSgpLmdldCgwKSA/PyAwOwogICAgICBjb25zdCBoZWlnaHQgPSB0aGlzLl9kb3RMb3R0aWVDb3JlPy5hbmltYXRpb25TaXplKCkuZ2V0KDEpID8/IDA7CiAgICAgIHJldHVybiB7CiAgICAgICAgd2lkdGgsCiAgICAgICAgaGVpZ2h0CiAgICAgIH07CiAgICB9CiAgICBzZXRTdGF0ZU1hY2hpbmVCb29sZWFuQ29udGV4dChuYW1lLCB2YWx1ZSkgewogICAgICByZXR1cm4gdGhpcy5fZG90TG90dGllQ29yZT8uc2V0U3RhdGVNYWNoaW5lQm9vbGVhbkNvbnRleHQobmFtZSwgdmFsdWUpID8/IGZhbHNlOwogICAgfQogICAgc2V0U3RhdGVNYWNoaW5lTnVtZXJpY0NvbnRleHQobmFtZSwgdmFsdWUpIHsKICAgICAgcmV0dXJuIHRoaXMuX2RvdExvdHRpZUNvcmU/LnNldFN0YXRlTWFjaGluZU51bWVyaWNDb250ZXh0KG5hbWUsIHZhbHVlKSA/PyBmYWxzZTsKICAgIH0KICAgIHNldFN0YXRlTWFjaGluZVN0cmluZ0NvbnRleHQobmFtZSwgdmFsdWUpIHsKICAgICAgcmV0dXJuIHRoaXMuX2RvdExvdHRpZUNvcmU/LnNldFN0YXRlTWFjaGluZVN0cmluZ0NvbnRleHQobmFtZSwgdmFsdWUpID8/IGZhbHNlOwogICAgfQogIH07CiAgX19wdWJsaWNGaWVsZChfRG90TG90dGllLCAiX3dhc21Nb2R1bGUiLCBudWxsKTsKICB2YXIgRG90TG90dGllID0gX0RvdExvdHRpZTsKCiAgLy8gc3JjL3dvcmtlci9kb3Rsb3R0aWUud29ya2VyLnRzCiAgdmFyIGluc3RhbmNlc01hcCA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7CiAgdmFyIGV2ZW50SGFuZGxlck1hcCA9IHsKICAgIHJlYWR5OiAoaW5zdGFuY2VJZCkgPT4gKGV2ZW50KSA9PiB7CiAgICAgIGNvbnN0IHJlc3BvbnNlID0gewogICAgICAgIGlkOiAiIiwKICAgICAgICBtZXRob2Q6ICJvblJlYWR5IiwKICAgICAgICByZXN1bHQ6IHsKICAgICAgICAgIGluc3RhbmNlSWQsCiAgICAgICAgICBldmVudAogICAgICAgIH0KICAgICAgfTsKICAgICAgc2VsZi5wb3N0TWVzc2FnZShyZXNwb25zZSk7CiAgICB9LAogICAgY29tcGxldGU6IChpbnN0YW5jZUlkKSA9PiAoZXZlbnQpID0+IHsKICAgICAgY29uc3QgcmVzcG9uc2UgPSB7CiAgICAgICAgaWQ6ICIiLAogICAgICAgIG1ldGhvZDogIm9uQ29tcGxldGUiLAogICAgICAgIHJlc3VsdDogewogICAgICAgICAgaW5zdGFuY2VJZCwKICAgICAgICAgIGV2ZW50CiAgICAgICAgfQogICAgICB9OwogICAgICBzZWxmLnBvc3RNZXNzYWdlKHJlc3BvbnNlKTsKICAgIH0sCiAgICBsb2FkOiAoaW5zdGFuY2VJZCkgPT4gKGV2ZW50KSA9PiB7CiAgICAgIGNvbnN0IGxvYWRFdmVudCA9IGV2ZW50OwogICAgICBjb25zdCByZXNwb25zZSA9IHsKICAgICAgICBpZDogIiIsCiAgICAgICAgbWV0aG9kOiAib25Mb2FkIiwKICAgICAgICByZXN1bHQ6IHsKICAgICAgICAgIGluc3RhbmNlSWQsCiAgICAgICAgICBldmVudDogbG9hZEV2ZW50CiAgICAgICAgfQogICAgICB9OwogICAgICBzZWxmLnBvc3RNZXNzYWdlKHJlc3BvbnNlKTsKICAgIH0sCiAgICBsb2FkRXJyb3I6IChpbnN0YW5jZUlkKSA9PiAoZXZlbnQpID0+IHsKICAgICAgY29uc3QgbG9hZEVycm9yRXZlbnQgPSBldmVudDsKICAgICAgY29uc3QgcmVzcG9uc2UgPSB7CiAgICAgICAgaWQ6ICIiLAogICAgICAgIG1ldGhvZDogIm9uTG9hZEVycm9yIiwKICAgICAgICByZXN1bHQ6IHsKICAgICAgICAgIGluc3RhbmNlSWQsCiAgICAgICAgICBldmVudDogbG9hZEVycm9yRXZlbnQKICAgICAgICB9CiAgICAgIH07CiAgICAgIHNlbGYucG9zdE1lc3NhZ2UocmVzcG9uc2UpOwogICAgfSwKICAgIGxvb3A6IChpbnN0YW5jZUlkKSA9PiAoZXZlbnQpID0+IHsKICAgICAgY29uc3QgbG9vcEV2ZW50ID0gZXZlbnQ7CiAgICAgIGNvbnN0IHJlc3BvbnNlID0gewogICAgICAgIGlkOiAiIiwKICAgICAgICBtZXRob2Q6ICJvbkxvb3AiLAogICAgICAgIHJlc3VsdDogewogICAgICAgICAgaW5zdGFuY2VJZCwKICAgICAgICAgIGV2ZW50OiBsb29wRXZlbnQKICAgICAgICB9CiAgICAgIH07CiAgICAgIHNlbGYucG9zdE1lc3NhZ2UocmVzcG9uc2UpOwogICAgfSwKICAgIHBsYXk6IChpbnN0YW5jZUlkKSA9PiAoZXZlbnQpID0+IHsKICAgICAgY29uc3QgcGxheUV2ZW50ID0gZXZlbnQ7CiAgICAgIGNvbnN0IHJlc3BvbnNlID0gewogICAgICAgIGlkOiAiIiwKICAgICAgICBtZXRob2Q6ICJvblBsYXkiLAogICAgICAgIHJlc3VsdDogewogICAgICAgICAgaW5zdGFuY2VJZCwKICAgICAgICAgIGV2ZW50OiBwbGF5RXZlbnQKICAgICAgICB9CiAgICAgIH07CiAgICAgIHNlbGYucG9zdE1lc3NhZ2UocmVzcG9uc2UpOwogICAgfSwKICAgIHBhdXNlOiAoaW5zdGFuY2VJZCkgPT4gKGV2ZW50KSA9PiB7CiAgICAgIGNvbnN0IHBhdXNlRXZlbnQgPSBldmVudDsKICAgICAgY29uc3QgcmVzcG9uc2UgPSB7CiAgICAgICAgaWQ6ICIiLAogICAgICAgIG1ldGhvZDogIm9uUGF1c2UiLAogICAgICAgIHJlc3VsdDogewogICAgICAgICAgaW5zdGFuY2VJZCwKICAgICAgICAgIGV2ZW50OiBwYXVzZUV2ZW50CiAgICAgICAgfQogICAgICB9OwogICAgICBzZWxmLnBvc3RNZXNzYWdlKHJlc3BvbnNlKTsKICAgIH0sCiAgICBzdG9wOiAoaW5zdGFuY2VJZCkgPT4gKGV2ZW50KSA9PiB7CiAgICAgIGNvbnN0IHN0b3BFdmVudCA9IGV2ZW50OwogICAgICBjb25zdCByZXNwb25zZSA9IHsKICAgICAgICBpZDogIiIsCiAgICAgICAgbWV0aG9kOiAib25TdG9wIiwKICAgICAgICByZXN1bHQ6IHsKICAgICAgICAgIGluc3RhbmNlSWQsCiAgICAgICAgICBldmVudDogc3RvcEV2ZW50CiAgICAgICAgfQogICAgICB9OwogICAgICBzZWxmLnBvc3RNZXNzYWdlKHJlc3BvbnNlKTsKICAgIH0sCiAgICBmcmFtZTogKGluc3RhbmNlSWQpID0+IChldmVudCkgPT4gewogICAgICBjb25zdCBmcmFtZUV2ZW50ID0gZXZlbnQ7CiAgICAgIGNvbnN0IHJlc3BvbnNlID0gewogICAgICAgIGlkOiAiIiwKICAgICAgICBtZXRob2Q6ICJvbkZyYW1lIiwKICAgICAgICByZXN1bHQ6IHsKICAgICAgICAgIGluc3RhbmNlSWQsCiAgICAgICAgICBldmVudDogZnJhbWVFdmVudAogICAgICAgIH0KICAgICAgfTsKICAgICAgc2VsZi5wb3N0TWVzc2FnZShyZXNwb25zZSk7CiAgICB9LAogICAgcmVuZGVyOiAoaW5zdGFuY2VJZCkgPT4gKGV2ZW50KSA9PiB7CiAgICAgIGNvbnN0IHJlbmRlckV2ZW50ID0gZXZlbnQ7CiAgICAgIGNvbnN0IHJlc3BvbnNlID0gewogICAgICAgIGlkOiAiIiwKICAgICAgICBtZXRob2Q6ICJvblJlbmRlciIsCiAgICAgICAgcmVzdWx0OiB7CiAgICAgICAgICBpbnN0YW5jZUlkLAogICAgICAgICAgZXZlbnQ6IHJlbmRlckV2ZW50CiAgICAgICAgfQogICAgICB9OwogICAgICBzZWxmLnBvc3RNZXNzYWdlKHJlc3BvbnNlKTsKICAgIH0sCiAgICBmcmVlemU6IChpbnN0YW5jZUlkKSA9PiAoZXZlbnQpID0+IHsKICAgICAgY29uc3QgZnJlZXplRXZlbnQgPSBldmVudDsKICAgICAgY29uc3QgcmVzcG9uc2UgPSB7CiAgICAgICAgaWQ6ICIiLAogICAgICAgIG1ldGhvZDogIm9uRnJlZXplIiwKICAgICAgICByZXN1bHQ6IHsKICAgICAgICAgIGluc3RhbmNlSWQsCiAgICAgICAgICBldmVudDogZnJlZXplRXZlbnQKICAgICAgICB9CiAgICAgIH07CiAgICAgIHNlbGYucG9zdE1lc3NhZ2UocmVzcG9uc2UpOwogICAgfSwKICAgIHVuZnJlZXplOiAoaW5zdGFuY2VJZCkgPT4gKGV2ZW50KSA9PiB7CiAgICAgIGNvbnN0IHVuZnJlZXplRXZlbnQgPSBldmVudDsKICAgICAgY29uc3QgcmVzcG9uc2UgPSB7CiAgICAgICAgaWQ6ICIiLAogICAgICAgIG1ldGhvZDogIm9uVW5mcmVlemUiLAogICAgICAgIHJlc3VsdDogewogICAgICAgICAgaW5zdGFuY2VJZCwKICAgICAgICAgIGV2ZW50OiB1bmZyZWV6ZUV2ZW50CiAgICAgICAgfQogICAgICB9OwogICAgICBzZWxmLnBvc3RNZXNzYWdlKHJlc3BvbnNlKTsKICAgIH0sCiAgICBkZXN0cm95OiAoaW5zdGFuY2VJZCkgPT4gKGV2ZW50KSA9PiB7CiAgICAgIGNvbnN0IGRlc3Ryb3lFdmVudCA9IGV2ZW50OwogICAgICBjb25zdCByZXNwb25zZSA9IHsKICAgICAgICBpZDogIiIsCiAgICAgICAgbWV0aG9kOiAib25EZXN0cm95IiwKICAgICAgICByZXN1bHQ6IHsKICAgICAgICAgIGluc3RhbmNlSWQsCiAgICAgICAgICBldmVudDogZGVzdHJveUV2ZW50CiAgICAgICAgfQogICAgICB9OwogICAgICBzZWxmLnBvc3RNZXNzYWdlKHJlc3BvbnNlKTsKICAgIH0KICB9OwogIHZhciBjb21tYW5kcyA9IHsKICAgIGdldERvdExvdHRpZUluc3RhbmNlU3RhdGUocmVxdWVzdCkgewogICAgICBjb25zdCBpbnN0YW5jZUlkID0gcmVxdWVzdC5wYXJhbXMuaW5zdGFuY2VJZDsKICAgICAgY29uc3QgaW5zdGFuY2UgPSBpbnN0YW5jZXNNYXAuZ2V0KGluc3RhbmNlSWQpOwogICAgICBpZiAoIWluc3RhbmNlKSB7CiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnN0YW5jZSB3aXRoIGlkICR7aW5zdGFuY2VJZH0gZG9lcyBub3QgZXhpc3QuYCk7CiAgICAgIH0KICAgICAgY29uc3Qgc3RhdGUgPSB7CiAgICAgICAgaXNMb2FkZWQ6IGluc3RhbmNlLmlzTG9hZGVkLAogICAgICAgIGlzUGF1c2VkOiBpbnN0YW5jZS5pc1BhdXNlZCwKICAgICAgICBpc1BsYXlpbmc6IGluc3RhbmNlLmlzUGxheWluZywKICAgICAgICBpc1N0b3BwZWQ6IGluc3RhbmNlLmlzU3RvcHBlZCwKICAgICAgICBpc0Zyb3plbjogaW5zdGFuY2UuaXNGcm96ZW4sCiAgICAgICAgbG9vcDogaW5zdGFuY2UubG9vcCwKICAgICAgICBtb2RlOiBpbnN0YW5jZS5tb2RlLAogICAgICAgIHNwZWVkOiBpbnN0YW5jZS5zcGVlZCwKICAgICAgICBjdXJyZW50RnJhbWU6IGluc3RhbmNlLmN1cnJlbnRGcmFtZSwKICAgICAgICB0b3RhbEZyYW1lczogaW5zdGFuY2UudG90YWxGcmFtZXMsCiAgICAgICAgZHVyYXRpb246IGluc3RhbmNlLmR1cmF0aW9uLAogICAgICAgIHVzZUZyYW1lSW50ZXJwb2xhdGlvbjogaW5zdGFuY2UudXNlRnJhbWVJbnRlcnBvbGF0aW9uLAogICAgICAgIHJlbmRlckNvbmZpZzogaW5zdGFuY2UucmVuZGVyQ29uZmlnLAogICAgICAgIG1hcmtlcjogaW5zdGFuY2UubWFya2VyLAogICAgICAgIGJhY2tncm91bmRDb2xvcjogaW5zdGFuY2UuYmFja2dyb3VuZENvbG9yLAogICAgICAgIG1hcmtlcnM6IGluc3RhbmNlLm1hcmtlcnMoKSwKICAgICAgICBhY3RpdmVBbmltYXRpb25JZDogaW5zdGFuY2UuYWN0aXZlQW5pbWF0aW9uSWQsCiAgICAgICAgYWN0aXZlVGhlbWVJZDogaW5zdGFuY2UuYWN0aXZlVGhlbWVJZCwKICAgICAgICBhdXRvcGxheTogaW5zdGFuY2UuYXV0b3BsYXksCiAgICAgICAgc2VnbWVudDogaW5zdGFuY2Uuc2VnbWVudCwKICAgICAgICBsYXlvdXQ6IGluc3RhbmNlLmxheW91dCwKICAgICAgICBzZWdtZW50RHVyYXRpb246IGluc3RhbmNlLnNlZ21lbnREdXJhdGlvbiwKICAgICAgICBpc1JlYWR5OiBpbnN0YW5jZS5pc1JlYWR5LAogICAgICAgIG1hbmlmZXN0OiBpbnN0YW5jZS5tYW5pZmVzdAogICAgICB9OwogICAgICByZXR1cm4gewogICAgICAgIHN0YXRlCiAgICAgIH07CiAgICB9LAogICAgc2V0TGF5b3V0KHJlcXVlc3QpIHsKICAgICAgY29uc3QgaW5zdGFuY2VJZCA9IHJlcXVlc3QucGFyYW1zLmluc3RhbmNlSWQ7CiAgICAgIGNvbnN0IGxheW91dCA9IHJlcXVlc3QucGFyYW1zLmxheW91dDsKICAgICAgY29uc3QgaW5zdGFuY2UgPSBpbnN0YW5jZXNNYXAuZ2V0KGluc3RhbmNlSWQpOwogICAgICBpZiAoIWluc3RhbmNlKSB7CiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnN0YW5jZSB3aXRoIGlkICR7aW5zdGFuY2VJZH0gZG9lcyBub3QgZXhpc3QuYCk7CiAgICAgIH0KICAgICAgaW5zdGFuY2Uuc2V0TGF5b3V0KGxheW91dCk7CiAgICAgIHJldHVybiB7CiAgICAgICAgc3VjY2VzczogdHJ1ZQogICAgICB9OwogICAgfSwKICAgIGdldFN0YXRlTWFjaGluZUxpc3RlbmVycyhyZXF1ZXN0KSB7CiAgICAgIGNvbnN0IGluc3RhbmNlSWQgPSByZXF1ZXN0LnBhcmFtcy5pbnN0YW5jZUlkOwogICAgICBjb25zdCBpbnN0YW5jZSA9IGluc3RhbmNlc01hcC5nZXQoaW5zdGFuY2VJZCk7CiAgICAgIGlmICghaW5zdGFuY2UpIHsKICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEluc3RhbmNlIHdpdGggaWQgJHtpbnN0YW5jZUlkfSBkb2VzIG5vdCBleGlzdC5gKTsKICAgICAgfQogICAgICByZXR1cm4gaW5zdGFuY2UuZ2V0U3RhdGVNYWNoaW5lTGlzdGVuZXJzKCk7CiAgICB9LAogICAgcG9zdFN0YXRlTWFjaGluZUV2ZW50KHJlcXVlc3QpIHsKICAgICAgY29uc3QgaW5zdGFuY2VJZCA9IHJlcXVlc3QucGFyYW1zLmluc3RhbmNlSWQ7CiAgICAgIGNvbnN0IGV2ZW50ID0gcmVxdWVzdC5wYXJhbXMuZXZlbnQ7CiAgICAgIGNvbnN0IGluc3RhbmNlID0gaW5zdGFuY2VzTWFwLmdldChpbnN0YW5jZUlkKTsKICAgICAgaWYgKCFpbnN0YW5jZSkgewogICAgICAgIHRocm93IG5ldyBFcnJvcihgSW5zdGFuY2Ugd2l0aCBpZCAke2luc3RhbmNlSWR9IGRvZXMgbm90IGV4aXN0LmApOwogICAgICB9CiAgICAgIHJldHVybiBpbnN0YW5jZS5wb3N0U3RhdGVNYWNoaW5lRXZlbnQoZXZlbnQpOwogICAgfSwKICAgIHN0YXJ0U3RhdGVNYWNoaW5lKHJlcXVlc3QpIHsKICAgICAgY29uc3QgaW5zdGFuY2VJZCA9IHJlcXVlc3QucGFyYW1zLmluc3RhbmNlSWQ7CiAgICAgIGNvbnN0IGluc3RhbmNlID0gaW5zdGFuY2VzTWFwLmdldChpbnN0YW5jZUlkKTsKICAgICAgaWYgKCFpbnN0YW5jZSkgewogICAgICAgIHRocm93IG5ldyBFcnJvcihgSW5zdGFuY2Ugd2l0aCBpZCAke2luc3RhbmNlSWR9IGRvZXMgbm90IGV4aXN0LmApOwogICAgICB9CiAgICAgIHJldHVybiBpbnN0YW5jZS5zdGFydFN0YXRlTWFjaGluZSgpOwogICAgfSwKICAgIHN0b3BTdGF0ZU1hY2hpbmUocmVxdWVzdCkgewogICAgICBjb25zdCBpbnN0YW5jZUlkID0gcmVxdWVzdC5wYXJhbXMuaW5zdGFuY2VJZDsKICAgICAgY29uc3QgaW5zdGFuY2UgPSBpbnN0YW5jZXNNYXAuZ2V0KGluc3RhbmNlSWQpOwogICAgICBpZiAoIWluc3RhbmNlKSB7CiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnN0YW5jZSB3aXRoIGlkICR7aW5zdGFuY2VJZH0gZG9lcyBub3QgZXhpc3QuYCk7CiAgICAgIH0KICAgICAgcmV0dXJuIGluc3RhbmNlLnN0b3BTdGF0ZU1hY2hpbmUoKTsKICAgIH0sCiAgICBsb2FkU3RhdGVNYWNoaW5lKHJlcXVlc3QpIHsKICAgICAgY29uc3QgaW5zdGFuY2VJZCA9IHJlcXVlc3QucGFyYW1zLmluc3RhbmNlSWQ7CiAgICAgIGNvbnN0IHN0YXRlTWFjaGluZUlkID0gcmVxdWVzdC5wYXJhbXMuc3RhdGVNYWNoaW5lSWQ7CiAgICAgIGNvbnN0IGluc3RhbmNlID0gaW5zdGFuY2VzTWFwLmdldChpbnN0YW5jZUlkKTsKICAgICAgaWYgKCFpbnN0YW5jZSkgewogICAgICAgIHRocm93IG5ldyBFcnJvcihgSW5zdGFuY2Ugd2l0aCBpZCAke2luc3RhbmNlSWR9IGRvZXMgbm90IGV4aXN0LmApOwogICAgICB9CiAgICAgIHJldHVybiBpbnN0YW5jZS5sb2FkU3RhdGVNYWNoaW5lKHN0YXRlTWFjaGluZUlkKTsKICAgIH0sCiAgICBsb2FkU3RhdGVNYWNoaW5lRGF0YShyZXF1ZXN0KSB7CiAgICAgIGNvbnN0IGluc3RhbmNlSWQgPSByZXF1ZXN0LnBhcmFtcy5pbnN0YW5jZUlkOwogICAgICBjb25zdCBzdGF0ZU1hY2hpbmVEYXRhID0gcmVxdWVzdC5wYXJhbXMuc3RhdGVNYWNoaW5lRGF0YTsKICAgICAgY29uc3QgaW5zdGFuY2UgPSBpbnN0YW5jZXNNYXAuZ2V0KGluc3RhbmNlSWQpOwogICAgICBpZiAoIWluc3RhbmNlKSB7CiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnN0YW5jZSB3aXRoIGlkICR7aW5zdGFuY2VJZH0gZG9lcyBub3QgZXhpc3QuYCk7CiAgICAgIH0KICAgICAgcmV0dXJuIGluc3RhbmNlLmxvYWRTdGF0ZU1hY2hpbmVEYXRhKHN0YXRlTWFjaGluZURhdGEpOwogICAgfSwKICAgIGNyZWF0ZTogKHJlcXVlc3QpID0+IHsKICAgICAgY29uc3QgaW5zdGFuY2VJZCA9IHJlcXVlc3QucGFyYW1zLmluc3RhbmNlSWQ7CiAgICAgIGNvbnN0IGNvbmZpZyA9IHJlcXVlc3QucGFyYW1zLmNvbmZpZzsKICAgICAgY29uc3Qgd2lkdGggPSByZXF1ZXN0LnBhcmFtcy53aWR0aDsKICAgICAgY29uc3QgaGVpZ2h0ID0gcmVxdWVzdC5wYXJhbXMuaGVpZ2h0OwogICAgICBpZiAoaW5zdGFuY2VzTWFwLmhhcyhpbnN0YW5jZUlkKSkgewogICAgICAgIHRocm93IG5ldyBFcnJvcihgSW5zdGFuY2Ugd2l0aCBpZCAke2luc3RhbmNlSWR9IGFscmVhZHkgZXhpc3RzLmApOwogICAgICB9CiAgICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IERvdExvdHRpZShjb25maWcpOwogICAgICBpbnN0YW5jZS5jYW52YXMuaGVpZ2h0ID0gaGVpZ2h0OwogICAgICBpbnN0YW5jZS5jYW52YXMud2lkdGggPSB3aWR0aDsKICAgICAgaW5zdGFuY2VzTWFwLnNldChpbnN0YW5jZUlkLCBpbnN0YW5jZSk7CiAgICAgIGNvbnN0IGV2ZW50cyA9IFsKICAgICAgICAiY29tcGxldGUiLAogICAgICAgICJmcmFtZSIsCiAgICAgICAgImxvYWQiLAogICAgICAgICJsb2FkRXJyb3IiLAogICAgICAgICJsb29wIiwKICAgICAgICAicGF1c2UiLAogICAgICAgICJwbGF5IiwKICAgICAgICAic3RvcCIsCiAgICAgICAgImRlc3Ryb3kiLAogICAgICAgICJmcmVlemUiLAogICAgICAgICJ1bmZyZWV6ZSIsCiAgICAgICAgInJlbmRlciIsCiAgICAgICAgInJlYWR5IgogICAgICBdOwogICAgICBldmVudHMuZm9yRWFjaCgoZXZlbnQpID0+IHsKICAgICAgICBpbnN0YW5jZS5hZGRFdmVudExpc3RlbmVyKGV2ZW50LCBldmVudEhhbmRsZXJNYXBbZXZlbnRdKGluc3RhbmNlSWQpKTsKICAgICAgfSk7CiAgICAgIHJldHVybiB7CiAgICAgICAgaW5zdGFuY2VJZAogICAgICB9OwogICAgfSwKICAgIGRlc3Ryb3k6IChyZXF1ZXN0KSA9PiB7CiAgICAgIGNvbnN0IGluc3RhbmNlSWQgPSByZXF1ZXN0LnBhcmFtcy5pbnN0YW5jZUlkOwogICAgICBjb25zdCBpbnN0YW5jZSA9IGluc3RhbmNlc01hcC5nZXQoaW5zdGFuY2VJZCk7CiAgICAgIGlmICghaW5zdGFuY2UpIHJldHVybjsKICAgICAgaW5zdGFuY2UuZGVzdHJveSgpOwogICAgICBpbnN0YW5jZXNNYXAuZGVsZXRlKGluc3RhbmNlSWQpOwogICAgfSwKICAgIGZyZWV6ZTogKHJlcXVlc3QpID0+IHsKICAgICAgY29uc3QgaW5zdGFuY2VJZCA9IHJlcXVlc3QucGFyYW1zLmluc3RhbmNlSWQ7CiAgICAgIGNvbnN0IGluc3RhbmNlID0gaW5zdGFuY2VzTWFwLmdldChpbnN0YW5jZUlkKTsKICAgICAgaWYgKCFpbnN0YW5jZSkgewogICAgICAgIHRocm93IG5ldyBFcnJvcihgSW5zdGFuY2Ugd2l0aCBpZCAke2luc3RhbmNlSWR9IGRvZXMgbm90IGV4aXN0LmApOwogICAgICB9CiAgICAgIGluc3RhbmNlLmZyZWV6ZSgpOwogICAgfSwKICAgIGxvYWQ6IChyZXF1ZXN0KSA9PiB7CiAgICAgIGNvbnN0IGluc3RhbmNlSWQgPSByZXF1ZXN0LnBhcmFtcy5pbnN0YW5jZUlkOwogICAgICBjb25zdCBjb25maWcgPSByZXF1ZXN0LnBhcmFtcy5jb25maWc7CiAgICAgIGNvbnN0IGluc3RhbmNlID0gaW5zdGFuY2VzTWFwLmdldChpbnN0YW5jZUlkKTsKICAgICAgaWYgKCFpbnN0YW5jZSkgewogICAgICAgIHRocm93IG5ldyBFcnJvcihgSW5zdGFuY2Ugd2l0aCBpZCAke2luc3RhbmNlSWR9IGRvZXMgbm90IGV4aXN0LmApOwogICAgICB9CiAgICAgIGluc3RhbmNlLmxvYWQoY29uZmlnKTsKICAgIH0sCiAgICBsb2FkQW5pbWF0aW9uOiAocmVxdWVzdCkgPT4gewogICAgICBjb25zdCBpbnN0YW5jZUlkID0gcmVxdWVzdC5wYXJhbXMuaW5zdGFuY2VJZDsKICAgICAgY29uc3QgYW5pbWF0aW9uSWQgPSByZXF1ZXN0LnBhcmFtcy5hbmltYXRpb25JZDsKICAgICAgY29uc3QgaW5zdGFuY2UgPSBpbnN0YW5jZXNNYXAuZ2V0KGluc3RhbmNlSWQpOwogICAgICBpZiAoIWluc3RhbmNlKSB7CiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnN0YW5jZSB3aXRoIGlkICR7aW5zdGFuY2VJZH0gZG9lcyBub3QgZXhpc3QuYCk7CiAgICAgIH0KICAgICAgaW5zdGFuY2UubG9hZEFuaW1hdGlvbihhbmltYXRpb25JZCk7CiAgICB9LAogICAgbG9hZFRoZW1lOiAocmVxdWVzdCkgPT4gewogICAgICBjb25zdCBpbnN0YW5jZUlkID0gcmVxdWVzdC5wYXJhbXMuaW5zdGFuY2VJZDsKICAgICAgY29uc3QgdGhlbWVJZCA9IHJlcXVlc3QucGFyYW1zLnRoZW1lSWQ7CiAgICAgIGNvbnN0IGluc3RhbmNlID0gaW5zdGFuY2VzTWFwLmdldChpbnN0YW5jZUlkKTsKICAgICAgaWYgKCFpbnN0YW5jZSkgewogICAgICAgIHRocm93IG5ldyBFcnJvcihgSW5zdGFuY2Ugd2l0aCBpZCAke2luc3RhbmNlSWR9IGRvZXMgbm90IGV4aXN0LmApOwogICAgICB9CiAgICAgIHJldHVybiBpbnN0YW5jZS5sb2FkVGhlbWUodGhlbWVJZCk7CiAgICB9LAogICAgbG9hZFRoZW1lRGF0YTogKHJlcXVlc3QpID0+IHsKICAgICAgY29uc3QgaW5zdGFuY2VJZCA9IHJlcXVlc3QucGFyYW1zLmluc3RhbmNlSWQ7CiAgICAgIGNvbnN0IHRoZW1lRGF0YSA9IHJlcXVlc3QucGFyYW1zLnRoZW1lRGF0YTsKICAgICAgY29uc3QgaW5zdGFuY2UgPSBpbnN0YW5jZXNNYXAuZ2V0KGluc3RhbmNlSWQpOwogICAgICBpZiAoIWluc3RhbmNlKSB7CiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnN0YW5jZSB3aXRoIGlkICR7aW5zdGFuY2VJZH0gZG9lcyBub3QgZXhpc3QuYCk7CiAgICAgIH0KICAgICAgcmV0dXJuIGluc3RhbmNlLmxvYWRUaGVtZURhdGEodGhlbWVEYXRhKTsKICAgIH0sCiAgICBwYXVzZTogKHJlcXVlc3QpID0+IHsKICAgICAgY29uc3QgaW5zdGFuY2VJZCA9IHJlcXVlc3QucGFyYW1zLmluc3RhbmNlSWQ7CiAgICAgIGNvbnN0IGluc3RhbmNlID0gaW5zdGFuY2VzTWFwLmdldChpbnN0YW5jZUlkKTsKICAgICAgaWYgKCFpbnN0YW5jZSkgewogICAgICAgIHRocm93IG5ldyBFcnJvcihgSW5zdGFuY2Ugd2l0aCBpZCAke2luc3RhbmNlSWR9IGRvZXMgbm90IGV4aXN0LmApOwogICAgICB9CiAgICAgIHJldHVybiBpbnN0YW5jZS5wYXVzZSgpOwogICAgfSwKICAgIHBsYXk6IChyZXF1ZXN0KSA9PiB7CiAgICAgIGNvbnN0IGluc3RhbmNlSWQgPSByZXF1ZXN0LnBhcmFtcy5pbnN0YW5jZUlkOwogICAgICBjb25zdCBpbnN0YW5jZSA9IGluc3RhbmNlc01hcC5nZXQoaW5zdGFuY2VJZCk7CiAgICAgIGlmICghaW5zdGFuY2UpIHsKICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEluc3RhbmNlIHdpdGggaWQgJHtpbnN0YW5jZUlkfSBkb2VzIG5vdCBleGlzdC5gKTsKICAgICAgfQogICAgICByZXR1cm4gaW5zdGFuY2UucGxheSgpOwogICAgfSwKICAgIHJlc2l6ZTogKHJlcXVlc3QpID0+IHsKICAgICAgY29uc3QgaW5zdGFuY2VJZCA9IHJlcXVlc3QucGFyYW1zLmluc3RhbmNlSWQ7CiAgICAgIGNvbnN0IHdpZHRoID0gcmVxdWVzdC5wYXJhbXMud2lkdGg7CiAgICAgIGNvbnN0IGhlaWdodCA9IHJlcXVlc3QucGFyYW1zLmhlaWdodDsKICAgICAgY29uc3QgaW5zdGFuY2UgPSBpbnN0YW5jZXNNYXAuZ2V0KGluc3RhbmNlSWQpOwogICAgICBpZiAoIWluc3RhbmNlKSB7CiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnN0YW5jZSB3aXRoIGlkICR7aW5zdGFuY2VJZH0gZG9lcyBub3QgZXhpc3QuYCk7CiAgICAgIH0KICAgICAgaW5zdGFuY2UuY2FudmFzLmhlaWdodCA9IGhlaWdodDsKICAgICAgaW5zdGFuY2UuY2FudmFzLndpZHRoID0gd2lkdGg7CiAgICAgIGluc3RhbmNlLnJlc2l6ZSgpOwogICAgICByZXR1cm4gewogICAgICAgIHN1Y2Nlc3M6IHRydWUKICAgICAgfTsKICAgIH0sCiAgICBzZXRCYWNrZ3JvdW5kQ29sb3I6IChyZXF1ZXN0KSA9PiB7CiAgICAgIGNvbnN0IGluc3RhbmNlSWQgPSByZXF1ZXN0LnBhcmFtcy5pbnN0YW5jZUlkOwogICAgICBjb25zdCBiYWNrZ3JvdW5kQ29sb3IgPSByZXF1ZXN0LnBhcmFtcy5iYWNrZ3JvdW5kQ29sb3I7CiAgICAgIGNvbnN0IGluc3RhbmNlID0gaW5zdGFuY2VzTWFwLmdldChpbnN0YW5jZUlkKTsKICAgICAgaWYgKCFpbnN0YW5jZSkgewogICAgICAgIHRocm93IG5ldyBFcnJvcihgSW5zdGFuY2Ugd2l0aCBpZCAke2luc3RhbmNlSWR9IGRvZXMgbm90IGV4aXN0LmApOwogICAgICB9CiAgICAgIGluc3RhbmNlLnNldEJhY2tncm91bmRDb2xvcihiYWNrZ3JvdW5kQ29sb3IpOwogICAgfSwKICAgIHNldEZyYW1lOiAocmVxdWVzdCkgPT4gewogICAgICBjb25zdCBpbnN0YW5jZUlkID0gcmVxdWVzdC5wYXJhbXMuaW5zdGFuY2VJZDsKICAgICAgY29uc3QgZnJhbWUgPSByZXF1ZXN0LnBhcmFtcy5mcmFtZTsKICAgICAgY29uc3QgaW5zdGFuY2UgPSBpbnN0YW5jZXNNYXAuZ2V0KGluc3RhbmNlSWQpOwogICAgICBpZiAoIWluc3RhbmNlKSB7CiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnN0YW5jZSB3aXRoIGlkICR7aW5zdGFuY2VJZH0gZG9lcyBub3QgZXhpc3QuYCk7CiAgICAgIH0KICAgICAgaW5zdGFuY2Uuc2V0RnJhbWUoZnJhbWUpOwogICAgfSwKICAgIHNldE1vZGU6IChyZXF1ZXN0KSA9PiB7CiAgICAgIGNvbnN0IGluc3RhbmNlSWQgPSByZXF1ZXN0LnBhcmFtcy5pbnN0YW5jZUlkOwogICAgICBjb25zdCBtb2RlID0gcmVxdWVzdC5wYXJhbXMubW9kZTsKICAgICAgY29uc3QgaW5zdGFuY2UgPSBpbnN0YW5jZXNNYXAuZ2V0KGluc3RhbmNlSWQpOwogICAgICBpZiAoIWluc3RhbmNlKSB7CiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnN0YW5jZSB3aXRoIGlkICR7aW5zdGFuY2VJZH0gZG9lcyBub3QgZXhpc3QuYCk7CiAgICAgIH0KICAgICAgaW5zdGFuY2Uuc2V0TW9kZShtb2RlKTsKICAgIH0sCiAgICBzZXRSZW5kZXJDb25maWc6IChyZXF1ZXN0KSA9PiB7CiAgICAgIGNvbnN0IGluc3RhbmNlSWQgPSByZXF1ZXN0LnBhcmFtcy5pbnN0YW5jZUlkOwogICAgICBjb25zdCByZW5kZXJDb25maWcgPSByZXF1ZXN0LnBhcmFtcy5yZW5kZXJDb25maWc7CiAgICAgIGNvbnN0IGluc3RhbmNlID0gaW5zdGFuY2VzTWFwLmdldChpbnN0YW5jZUlkKTsKICAgICAgaWYgKCFpbnN0YW5jZSkgewogICAgICAgIHRocm93IG5ldyBFcnJvcihgSW5zdGFuY2Ugd2l0aCBpZCAke2luc3RhbmNlSWR9IGRvZXMgbm90IGV4aXN0LmApOwogICAgICB9CiAgICAgIGluc3RhbmNlLnNldFJlbmRlckNvbmZpZyhyZW5kZXJDb25maWcpOwogICAgfSwKICAgIHNldFNlZ21lbnQ6IChyZXF1ZXN0KSA9PiB7CiAgICAgIGNvbnN0IGluc3RhbmNlSWQgPSByZXF1ZXN0LnBhcmFtcy5pbnN0YW5jZUlkOwogICAgICBjb25zdCBzZWdtZW50ID0gcmVxdWVzdC5wYXJhbXMuc2VnbWVudDsKICAgICAgY29uc3QgaW5zdGFuY2UgPSBpbnN0YW5jZXNNYXAuZ2V0KGluc3RhbmNlSWQpOwogICAgICBpZiAoIWluc3RhbmNlKSB7CiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnN0YW5jZSB3aXRoIGlkICR7aW5zdGFuY2VJZH0gZG9lcyBub3QgZXhpc3QuYCk7CiAgICAgIH0KICAgICAgaW5zdGFuY2Uuc2V0U2VnbWVudChzZWdtZW50WzBdLCBzZWdtZW50WzFdKTsKICAgIH0sCiAgICBzZXRTcGVlZDogKHJlcXVlc3QpID0+IHsKICAgICAgY29uc3QgaW5zdGFuY2VJZCA9IHJlcXVlc3QucGFyYW1zLmluc3RhbmNlSWQ7CiAgICAgIGNvbnN0IHNwZWVkID0gcmVxdWVzdC5wYXJhbXMuc3BlZWQ7CiAgICAgIGNvbnN0IGluc3RhbmNlID0gaW5zdGFuY2VzTWFwLmdldChpbnN0YW5jZUlkKTsKICAgICAgaWYgKCFpbnN0YW5jZSkgewogICAgICAgIHRocm93IG5ldyBFcnJvcihgSW5zdGFuY2Ugd2l0aCBpZCAke2luc3RhbmNlSWR9IGRvZXMgbm90IGV4aXN0LmApOwogICAgICB9CiAgICAgIGluc3RhbmNlLnNldFNwZWVkKHNwZWVkKTsKICAgIH0sCiAgICBzZXRVc2VGcmFtZUludGVycG9sYXRpb246IChyZXF1ZXN0KSA9PiB7CiAgICAgIGNvbnN0IGluc3RhbmNlSWQgPSByZXF1ZXN0LnBhcmFtcy5pbnN0YW5jZUlkOwogICAgICBjb25zdCB1c2VGcmFtZUludGVycG9sYXRpb24gPSByZXF1ZXN0LnBhcmFtcy51c2VGcmFtZUludGVycG9sYXRpb247CiAgICAgIGNvbnN0IGluc3RhbmNlID0gaW5zdGFuY2VzTWFwLmdldChpbnN0YW5jZUlkKTsKICAgICAgaWYgKCFpbnN0YW5jZSkgewogICAgICAgIHRocm93IG5ldyBFcnJvcihgSW5zdGFuY2Ugd2l0aCBpZCAke2luc3RhbmNlSWR9IGRvZXMgbm90IGV4aXN0LmApOwogICAgICB9CiAgICAgIGluc3RhbmNlLnNldFVzZUZyYW1lSW50ZXJwb2xhdGlvbih1c2VGcmFtZUludGVycG9sYXRpb24pOwogICAgfSwKICAgIHNldFdhc21Vcmw6IChyZXF1ZXN0KSA9PiB7CiAgICAgIERvdExvdHRpZS5zZXRXYXNtVXJsKHJlcXVlc3QucGFyYW1zLnVybCk7CiAgICB9LAogICAgc3RvcDogKHJlcXVlc3QpID0+IHsKICAgICAgY29uc3QgaW5zdGFuY2VJZCA9IHJlcXVlc3QucGFyYW1zLmluc3RhbmNlSWQ7CiAgICAgIGNvbnN0IGluc3RhbmNlID0gaW5zdGFuY2VzTWFwLmdldChpbnN0YW5jZUlkKTsKICAgICAgaWYgKCFpbnN0YW5jZSkgewogICAgICAgIHRocm93IG5ldyBFcnJvcihgSW5zdGFuY2Ugd2l0aCBpZCAke2luc3RhbmNlSWR9IGRvZXMgbm90IGV4aXN0LmApOwogICAgICB9CiAgICAgIGluc3RhbmNlLnN0b3AoKTsKICAgIH0sCiAgICB1bmZyZWV6ZTogKHJlcXVlc3QpID0+IHsKICAgICAgY29uc3QgaW5zdGFuY2VJZCA9IHJlcXVlc3QucGFyYW1zLmluc3RhbmNlSWQ7CiAgICAgIGNvbnN0IGluc3RhbmNlID0gaW5zdGFuY2VzTWFwLmdldChpbnN0YW5jZUlkKTsKICAgICAgaWYgKCFpbnN0YW5jZSkgewogICAgICAgIHRocm93IG5ldyBFcnJvcihgSW5zdGFuY2Ugd2l0aCBpZCAke2luc3RhbmNlSWR9IGRvZXMgbm90IGV4aXN0LmApOwogICAgICB9CiAgICAgIGluc3RhbmNlLnVuZnJlZXplKCk7CiAgICB9LAogICAgc2V0Vmlld3BvcnQocmVxdWVzdCkgewogICAgICBjb25zdCBpbnN0YW5jZUlkID0gcmVxdWVzdC5wYXJhbXMuaW5zdGFuY2VJZDsKICAgICAgY29uc3QgeCA9IHJlcXVlc3QucGFyYW1zLng7CiAgICAgIGNvbnN0IHkgPSByZXF1ZXN0LnBhcmFtcy55OwogICAgICBjb25zdCB3aWR0aCA9IHJlcXVlc3QucGFyYW1zLndpZHRoOwogICAgICBjb25zdCBoZWlnaHQgPSByZXF1ZXN0LnBhcmFtcy5oZWlnaHQ7CiAgICAgIGNvbnN0IGluc3RhbmNlID0gaW5zdGFuY2VzTWFwLmdldChpbnN0YW5jZUlkKTsKICAgICAgaWYgKCFpbnN0YW5jZSkgewogICAgICAgIHRocm93IG5ldyBFcnJvcihgSW5zdGFuY2Ugd2l0aCBpZCAke2luc3RhbmNlSWR9IGRvZXMgbm90IGV4aXN0LmApOwogICAgICB9CiAgICAgIHJldHVybiBpbnN0YW5jZS5zZXRWaWV3cG9ydCh4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKICAgIH0sCiAgICBzZXRNYXJrZXIocmVxdWVzdCkgewogICAgICBjb25zdCBpbnN0YW5jZUlkID0gcmVxdWVzdC5wYXJhbXMuaW5zdGFuY2VJZDsKICAgICAgY29uc3QgbWFya2VyID0gcmVxdWVzdC5wYXJhbXMubWFya2VyOwogICAgICBjb25zdCBpbnN0YW5jZSA9IGluc3RhbmNlc01hcC5nZXQoaW5zdGFuY2VJZCk7CiAgICAgIGlmICghaW5zdGFuY2UpIHsKICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEluc3RhbmNlIHdpdGggaWQgJHtpbnN0YW5jZUlkfSBkb2VzIG5vdCBleGlzdC5gKTsKICAgICAgfQogICAgICBpbnN0YW5jZS5zZXRNYXJrZXIobWFya2VyKTsKICAgICAgcmV0dXJuIHsKICAgICAgICBzdWNjZXNzOiB0cnVlCiAgICAgIH07CiAgICB9LAogICAgc2V0TG9vcChyZXF1ZXN0KSB7CiAgICAgIGNvbnN0IGluc3RhbmNlSWQgPSByZXF1ZXN0LnBhcmFtcy5pbnN0YW5jZUlkOwogICAgICBjb25zdCBsb29wID0gcmVxdWVzdC5wYXJhbXMubG9vcDsKICAgICAgY29uc3QgaW5zdGFuY2UgPSBpbnN0YW5jZXNNYXAuZ2V0KGluc3RhbmNlSWQpOwogICAgICBpZiAoIWluc3RhbmNlKSB7CiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnN0YW5jZSB3aXRoIGlkICR7aW5zdGFuY2VJZH0gZG9lcyBub3QgZXhpc3QuYCk7CiAgICAgIH0KICAgICAgaW5zdGFuY2Uuc2V0TG9vcChsb29wKTsKICAgICAgcmV0dXJuIHsKICAgICAgICBzdWNjZXNzOiB0cnVlCiAgICAgIH07CiAgICB9CiAgfTsKICBmdW5jdGlvbiBleGVjdXRlQ29tbWFuZChycGNSZXF1ZXN0KSB7CiAgICBjb25zdCBtZXRob2QgPSBycGNSZXF1ZXN0Lm1ldGhvZDsKICAgIGlmICh0eXBlb2YgY29tbWFuZHNbbWV0aG9kXSA9PT0gImZ1bmN0aW9uIikgewogICAgICByZXR1cm4gY29tbWFuZHNbbWV0aG9kXShycGNSZXF1ZXN0KTsKICAgIH0gZWxzZSB7CiAgICAgIHRocm93IG5ldyBFcnJvcihgTWV0aG9kICR7bWV0aG9kfSBpcyBub3QgaW1wbGVtZW50ZWQgaW4gY29tbWFuZHMuYCk7CiAgICB9CiAgfQogIHNlbGYub25tZXNzYWdlID0gKGV2ZW50KSA9PiB7CiAgICB0cnkgewogICAgICBjb25zdCByZXN1bHQgPSBleGVjdXRlQ29tbWFuZChldmVudC5kYXRhKTsKICAgICAgY29uc3QgcmVzcG9uc2UgPSB7CiAgICAgICAgaWQ6IGV2ZW50LmRhdGEuaWQsCiAgICAgICAgbWV0aG9kOiBldmVudC5kYXRhLm1ldGhvZCwKICAgICAgICByZXN1bHQKICAgICAgfTsKICAgICAgc2VsZi5wb3N0TWVzc2FnZShyZXNwb25zZSk7CiAgICB9IGNhdGNoIChlcnJvcikgewogICAgICBjb25zdCBlcnJvclJlc3BvbnNlID0gewogICAgICAgIGlkOiBldmVudC5kYXRhLmlkLAogICAgICAgIG1ldGhvZDogZXZlbnQuZGF0YS5tZXRob2QsCiAgICAgICAgZXJyb3I6IGVycm9yLm1lc3NhZ2UKICAgICAgfTsKICAgICAgc2VsZi5wb3N0TWVzc2FnZShlcnJvclJlc3BvbnNlKTsKICAgIH0KICB9OwogIHZhciBkdW1teSA9ICIiOwogIHZhciBkb3Rsb3R0aWVfd29ya2VyX2RlZmF1bHQgPSBkdW1teTsKfSkoKTsK', {\n type: 'classic'\n });\n }\n }\n ","// resolved to a Worker constructor by plugin-inline-worker\nimport DotLottieWebWorker from './dotlottie.worker?worker&inline';\nimport type { MethodParamsMap, RpcRequest } from './types';\n\nexport class WorkerManager {\n private readonly _workers = new Map<string, Worker>();\n\n private readonly _animationWorkerMap = new Map<string, string>();\n\n public getWorker(workerId: string): Worker {\n if (!this._workers.has(workerId)) {\n this._workers.set(workerId, new DotLottieWebWorker());\n }\n\n return this._workers.get(workerId) as Worker;\n }\n\n public assignAnimationToWorker(animationId: string, workerId: string): void {\n this._animationWorkerMap.set(animationId, workerId);\n }\n\n public unassignAnimationFromWorker(animationId: string): void {\n this._animationWorkerMap.delete(animationId);\n }\n\n public sendMessage(workerId: string, message: RpcRequest<keyof MethodParamsMap>, transfer?: Transferable[]): void {\n this.getWorker(workerId).postMessage(message, transfer || []);\n }\n\n public terminateWorker(workerId: string): void {\n const worker = this._workers.get(workerId);\n\n if (worker) {\n worker.terminate();\n this._workers.delete(workerId);\n }\n }\n}\n","import { IS_BROWSER } from '../constants';\nimport type { Marker } from '../core';\nimport type { EventType, EventListener, FrameEvent } from '../event-manager';\nimport { EventManager } from '../event-manager';\nimport type { Config, Layout, Manifest, Mode, RenderConfig } from '../types';\n\nimport type { MethodParamsMap, MethodResultMap, RpcRequest, RpcResponse } from './types';\nimport { WorkerManager } from './worker-manager';\n\nfunction getCanvasSize(canvas: HTMLCanvasElement | OffscreenCanvas): { height: number; width: number } {\n if (canvas instanceof OffscreenCanvas) {\n return { width: canvas.width, height: canvas.height };\n }\n\n const { height, width } = canvas.getBoundingClientRect();\n\n return { width: width * window.devicePixelRatio, height: height * window.devicePixelRatio };\n}\n\nfunction generateUniqueId(): string {\n return Date.now().toString(36) + Math.random().toString(36).substr(2, 9);\n}\n\nexport interface DotLottieInstanceState {\n activeAnimationId: string | undefined;\n activeThemeId: string | undefined;\n autoplay: boolean;\n backgroundColor: string;\n currentFrame: number;\n duration: number;\n isFrozen: boolean;\n isLoaded: boolean;\n isPaused: boolean;\n isPlaying: boolean;\n isReady: boolean;\n isStopped: boolean;\n layout: Layout | undefined;\n loop: boolean;\n manifest: Manifest | null;\n marker: string | undefined;\n markers: Marker[];\n mode: Mode;\n renderConfig: RenderConfig;\n segment: [number, number] | undefined;\n segmentDuration: number;\n speed: number;\n totalFrames: number;\n useFrameInterpolation: boolean;\n}\n\nexport class DotLottieWorker {\n private static readonly _workerManager = new WorkerManager();\n\n private readonly _eventManager = new EventManager();\n\n private readonly _id: string;\n\n private readonly _worker: Worker;\n\n private readonly _canvas: HTMLCanvasElement;\n\n private _dotLottieInstanceState: DotLottieInstanceState = {\n markers: [],\n autoplay: false,\n backgroundColor: '',\n currentFrame: 0,\n duration: 0,\n loop: false,\n mode: 'forward',\n segment: [0, 0],\n segmentDuration: 0,\n speed: 1,\n totalFrames: 0,\n isLoaded: false,\n isPlaying: false,\n isPaused: false,\n isStopped: true,\n isFrozen: false,\n useFrameInterpolation: false,\n renderConfig: {\n devicePixelRatio: window.devicePixelRatio,\n },\n activeAnimationId: '',\n activeThemeId: '',\n layout: undefined,\n marker: undefined,\n isReady: false,\n manifest: null,\n };\n\n private static _wasmUrl: string = '';\n\n private _created: boolean = false;\n\n private readonly _pointerUpMethod: (event: PointerEvent) => void;\n\n private readonly _pointerDownMethod: (event: PointerEvent) => void;\n\n private readonly _pointerMoveMethod: (event: PointerEvent) => void;\n\n private readonly _pointerEnterMethod: (event: PointerEvent) => void;\n\n private readonly _pointerExitMethod: (event: PointerEvent) => void;\n\n private readonly _onCompleteMethod: EventListener<'complete'>;\n\n public constructor(config: Config & { workerId?: string }) {\n this._canvas = config.canvas;\n\n this._id = `dotlottie-${generateUniqueId()}`;\n const workerId = config.workerId || 'defaultWorker';\n\n // creates or gets the worker\n this._worker = DotLottieWorker._workerManager.getWorker(workerId);\n\n DotLottieWorker._workerManager.assignAnimationToWorker(this._id, workerId);\n\n if (DotLottieWorker._wasmUrl) {\n this._sendMessage('setWasmUrl', { url: DotLottieWorker._wasmUrl });\n }\n\n this._create(config);\n\n // eslint-disable-next-line @typescript-eslint/no-misused-promises\n this._worker.addEventListener('message', this._handleWorkerEvent.bind(this));\n\n this._pointerUpMethod = this._onPointerUp.bind(this);\n\n this._pointerDownMethod = this._onPointerDown.bind(this);\n\n this._pointerMoveMethod = this._onPointerMove.bind(this);\n\n this._pointerEnterMethod = this._onPointerEnter.bind(this);\n\n this._pointerExitMethod = this._onPointerLeave.bind(this);\n\n this._onCompleteMethod = this._onComplete.bind(this);\n }\n\n private async _handleWorkerEvent(event: MessageEvent): Promise<void> {\n const rpcResponse: RpcResponse<\n | 'onComplete'\n | 'onLoad'\n | 'onDestroy'\n | 'onUnfreeze'\n | 'onFrame'\n | 'onRender'\n | 'onFreeze'\n | 'onPause'\n | 'onPlay'\n | 'onStop'\n | 'onLoadError'\n | 'onReady'\n > = event.data;\n\n if (!rpcResponse.id) {\n if (rpcResponse.method === 'onLoad' && rpcResponse.result.instanceId === this._id) {\n await this._updateDotLottieInstanceState();\n this._eventManager.dispatch(rpcResponse.result.event);\n }\n\n if (rpcResponse.method === 'onComplete' && rpcResponse.result.instanceId === this._id) {\n await this._updateDotLottieInstanceState();\n this._eventManager.dispatch(rpcResponse.result.event);\n }\n\n if (rpcResponse.method === 'onDestroy' && rpcResponse.result.instanceId === this._id) {\n this._eventManager.dispatch(rpcResponse.result.event);\n }\n\n if (rpcResponse.method === 'onUnfreeze' && rpcResponse.result.instanceId === this._id) {\n await this._updateDotLottieInstanceState();\n this._dotLottieInstanceState.isFrozen = false;\n this._eventManager.dispatch(rpcResponse.result.event);\n }\n\n if (rpcResponse.method === 'onFrame' && rpcResponse.result.instanceId === this._id) {\n this._dotLottieInstanceState.currentFrame = (rpcResponse.result.event as FrameEvent).currentFrame;\n this._eventManager.dispatch(rpcResponse.result.event);\n }\n\n if (rpcResponse.method === 'onRender' && rpcResponse.result.instanceId === this._id) {\n this._eventManager.dispatch(rpcResponse.result.event);\n }\n\n if (rpcResponse.method === 'onFreeze' && rpcResponse.result.instanceId === this._id) {\n await this._updateDotLottieInstanceState();\n this._eventManager.dispatch(rpcResponse.result.event);\n }\n\n if (rpcResponse.method === 'onPause' && rpcResponse.result.instanceId === this._id) {\n await this._updateDotLottieInstanceState();\n this._eventManager.dispatch(rpcResponse.result.event);\n }\n\n if (rpcResponse.method === 'onPlay' && rpcResponse.result.instanceId === this._id) {\n await this._updateDotLottieInstanceState();\n this._eventManager.dispatch(rpcResponse.result.event);\n }\n\n if (rpcResponse.method === 'onStop' && rpcResponse.result.instanceId === this._id) {\n await this._updateDotLottieInstanceState();\n this._eventManager.dispatch(rpcResponse.result.event);\n }\n\n if (rpcResponse.method === 'onLoadError' && rpcResponse.result.instanceId === this._id) {\n await this._updateDotLottieInstanceState();\n this._eventManager.dispatch(rpcResponse.result.event);\n }\n\n if (rpcResponse.method === 'onReady' && rpcResponse.result.instanceId === this._id) {\n await this._updateDotLottieInstanceState();\n this._eventManager.dispatch(rpcResponse.result.event);\n }\n }\n }\n\n private async _create(config: Config): Promise<void> {\n let offscreen: OffscreenCanvas;\n\n if (this._canvas instanceof HTMLCanvasElement) {\n offscreen = this._canvas.transferControlToOffscreen();\n } else {\n offscreen = this._canvas;\n }\n\n const { instanceId } = await this._sendMessage(\n 'create',\n {\n instanceId: this._id,\n config: {\n ...config,\n // @ts-ignore\n canvas: offscreen,\n },\n ...getCanvasSize(this._canvas),\n },\n [offscreen],\n );\n\n if (instanceId !== this._id) {\n throw new Error('Instance ID mismatch');\n }\n\n this._created = true;\n\n await this._updateDotLottieInstanceState();\n }\n\n public get isLoaded(): boolean {\n return this._dotLottieInstanceState.isLoaded;\n }\n\n public get isPlaying(): boolean {\n return this._dotLottieInstanceState.isPlaying;\n }\n\n public get isPaused(): boolean {\n return this._dotLottieInstanceState.isPaused;\n }\n\n public get isStopped(): boolean {\n return this._dotLottieInstanceState.isStopped;\n }\n\n public get currentFrame(): number {\n return this._dotLottieInstanceState.currentFrame;\n }\n\n public get isFrozen(): boolean {\n return this._dotLottieInstanceState.isFrozen;\n }\n\n public get segmentDuration(): number {\n return this._dotLottieInstanceState.segmentDuration;\n }\n\n public get totalFrames(): number {\n return this._dotLottieInstanceState.totalFrames;\n }\n\n public get segment(): [number, number] | undefined {\n return this._dotLottieInstanceState.segment;\n }\n\n public get speed(): number {\n return this._dotLottieInstanceState.speed;\n }\n\n public get duration(): number {\n return this._dotLottieInstanceState.duration;\n }\n\n public get isReady(): boolean {\n return this._dotLottieInstanceState.isReady;\n }\n\n public get mode(): Mode {\n return this._dotLottieInstanceState.mode;\n }\n\n public get canvas(): HTMLCanvasElement | null {\n return this._canvas;\n }\n\n public get autoplay(): boolean {\n return this._dotLottieInstanceState.autoplay;\n }\n\n public get backgroundColor(): string {\n return this._dotLottieInstanceState.backgroundColor;\n }\n\n public get loop(): boolean {\n return this._dotLottieInstanceState.loop;\n }\n\n public get useFrameInterpolation(): boolean {\n return this._dotLottieInstanceState.useFrameInterpolation;\n }\n\n public get renderConfig(): RenderConfig {\n return this._dotLottieInstanceState.renderConfig;\n }\n\n public get manifest(): Manifest | null {\n return this._dotLottieInstanceState.manifest;\n }\n\n public get activeAnimationId(): string | undefined {\n return this._dotLottieInstanceState.activeAnimationId;\n }\n\n public get marker(): string | undefined {\n return this._dotLottieInstanceState.marker;\n }\n\n public get activeThemeId(): string | undefined {\n return this._dotLottieInstanceState.activeThemeId;\n }\n\n public get layout(): Layout | undefined {\n return this._dotLottieInstanceState.layout;\n }\n\n public async play(): Promise<void> {\n if (!this._created) return;\n\n await this._sendMessage('play', { instanceId: this._id });\n await this._updateDotLottieInstanceState();\n }\n\n public async pause(): Promise<void> {\n if (!this._created) return;\n\n await this._sendMessage('pause', { instanceId: this._id });\n await this._updateDotLottieInstanceState();\n }\n\n public async stop(): Promise<void> {\n if (!this._created) return;\n\n await this._sendMessage('stop', { instanceId: this._id });\n await this._updateDotLottieInstanceState();\n }\n\n public async setSpeed(speed: number): Promise<void> {\n if (!this._created) return;\n\n await this._sendMessage('setSpeed', { instanceId: this._id, speed });\n await this._updateDotLottieInstanceState();\n }\n\n public async setMode(mode: Mode): Promise<void> {\n if (!this._created) return;\n\n await this._sendMessage('setMode', { instanceId: this._id, mode });\n await this._updateDotLottieInstanceState();\n }\n\n public async setFrame(frame: number): Promise<void> {\n if (!this._created) return;\n\n await this._sendMessage('setFrame', { frame, instanceId: this._id });\n await this._updateDotLottieInstanceState();\n }\n\n public async setSegment(start: number, end: number): Promise<void> {\n if (!this._created) return;\n\n await this._sendMessage('setSegment', { instanceId: this._id, segment: [start, end] });\n await this._updateDotLottieInstanceState();\n }\n\n public async setRenderConfig(renderConfig: RenderConfig): Promise<void> {\n if (!this._created) return;\n\n await this._sendMessage('setRenderConfig', { instanceId: this._id, renderConfig });\n await this._updateDotLottieInstanceState();\n }\n\n public async setUseFrameInterpolation(useFrameInterpolation: boolean): Promise<void> {\n if (!this._created) return;\n\n await this._sendMessage('setUseFrameInterpolation', { instanceId: this._id, useFrameInterpolation });\n await this._updateDotLottieInstanceState();\n }\n\n public async loadTheme(themeId: string): Promise<boolean> {\n if (!this._created) return false;\n\n const result = this._sendMessage('loadTheme', { instanceId: this._id, themeId });\n\n await this._updateDotLottieInstanceState();\n\n return result;\n }\n\n public async load(config: Omit<Config, 'canvas'>): Promise<void> {\n if (!this._created) return;\n\n await this._sendMessage('load', { config, instanceId: this._id });\n await this._updateDotLottieInstanceState();\n }\n\n public async setLoop(loop: boolean): Promise<void> {\n if (!this._created) return;\n\n await this._sendMessage('setLoop', { instanceId: this._id, loop });\n await this._updateDotLottieInstanceState();\n }\n\n public async resize(): Promise<void> {\n if (!this._created) return;\n\n const { height, width } = getCanvasSize(this._canvas);\n\n this._canvas.width = width;\n this._canvas.height = height;\n\n await this._sendMessage('resize', { height, instanceId: this._id, width });\n await this._updateDotLottieInstanceState();\n }\n\n public async destroy(): Promise<void> {\n if (!this._created) return;\n\n this._created = false;\n\n await this._sendMessage('destroy', { instanceId: this._id });\n\n this._cleanupStateMachineListeners();\n\n DotLottieWorker._workerManager.unassignAnimationFromWorker(this._id);\n this._eventManager.removeAllEventListeners();\n }\n\n public async freeze(): Promise<void> {\n if (!this._created) return;\n\n await this._sendMessage('freeze', { instanceId: this._id });\n await this._updateDotLottieInstanceState();\n }\n\n public async unfreeze(): Promise<void> {\n if (!this._created) return;\n\n await this._sendMessage('unfreeze', { instanceId: this._id });\n await this._updateDotLottieInstanceState();\n }\n\n public async setBackgroundColor(backgroundColor: string): Promise<void> {\n if (!this._created) return;\n\n await this._sendMessage('setBackgroundColor', { instanceId: this._id, backgroundColor });\n await this._updateDotLottieInstanceState();\n }\n\n public async loadAnimation(animationId: string): Promise<void> {\n if (!this._created) return;\n\n await this._sendMessage('loadAnimation', { animationId, instanceId: this._id });\n await this._updateDotLottieInstanceState();\n }\n\n public async setLayout(layout: Layout): Promise<void> {\n if (!this._created) return;\n\n await this._sendMessage('setLayout', { instanceId: this._id, layout });\n await this._updateDotLottieInstanceState();\n }\n\n private async _updateDotLottieInstanceState(): Promise<void> {\n if (!this._created) return;\n\n const result = await this._sendMessage('getDotLottieInstanceState', { instanceId: this._id });\n\n this._dotLottieInstanceState = result.state;\n }\n\n public markers(): Marker[] {\n return this._dotLottieInstanceState.markers;\n }\n\n public async setMarker(marker: string): Promise<void> {\n if (!this._created) return;\n\n await this._sendMessage('setMarker', { instanceId: this._id, marker });\n await this._updateDotLottieInstanceState();\n }\n\n public async loadThemeData(themeData: string): Promise<boolean> {\n if (!this._created) return false;\n\n const loaded = await this._sendMessage('loadThemeData', { instanceId: this._id, themeData });\n\n await this._updateDotLottieInstanceState();\n\n return loaded;\n }\n\n public async setViewport(x: number, y: number, width: number, height: number): Promise<boolean> {\n if (!this._created) return false;\n\n return this._sendMessage('setViewport', { x, y, width, height, instanceId: this._id });\n }\n\n private async _sendMessage<T extends keyof MethodParamsMap>(\n method: T,\n params: MethodParamsMap[T],\n transfer?: Transferable[],\n ): Promise<MethodResultMap[T]> {\n const rpcRequest: RpcRequest<T> = {\n id: `dotlottie-request-${generateUniqueId()}`,\n method,\n params,\n };\n\n this._worker.postMessage(rpcRequest, transfer || []);\n\n return new Promise((resolve, reject) => {\n const onMessage = (event: MessageEvent): void => {\n const rpcResponse: RpcResponse<T> = event.data;\n\n // Check if the response corresponds to the request\n if (rpcResponse.id === rpcRequest.id) {\n this._worker.removeEventListener('message', onMessage);\n\n if (rpcResponse.error) {\n reject(new Error(`Failed to execute method ${method}: ${rpcResponse.error}`));\n } else {\n resolve(rpcResponse.result);\n }\n }\n };\n\n this._worker.addEventListener('message', onMessage);\n });\n }\n\n public addEventListener<T extends EventType>(type: T, listener: EventListener<T>): void {\n this._eventManager.addEventListener(type, listener);\n }\n\n public removeEventListener<T extends EventType>(type: T, listener?: EventListener<T>): void {\n this._eventManager.removeEventListener(type, listener);\n }\n\n public static setWasmUrl(url: string): void {\n DotLottieWorker._wasmUrl = url;\n }\n\n public async loadStateMachine(stateMachineId: string): Promise<boolean> {\n if (!this._created) return false;\n\n const result = await this._sendMessage('loadStateMachine', { instanceId: this._id, stateMachineId });\n\n await this._updateDotLottieInstanceState();\n\n return result;\n }\n\n public async loadStateMachineData(stateMachineData: string): Promise<boolean> {\n if (!this._created) return false;\n\n const result = await this._sendMessage('loadStateMachineData', { instanceId: this._id, stateMachineData });\n\n await this._updateDotLottieInstanceState();\n\n return result;\n }\n\n public async startStateMachine(): Promise<boolean> {\n if (!this._created) return false;\n\n this._setupStateMachineListeners();\n\n const result = await this._sendMessage('startStateMachine', { instanceId: this._id });\n\n await this._updateDotLottieInstanceState();\n\n return result;\n }\n\n public async stopStateMachine(): Promise<boolean> {\n if (!this._created) return false;\n\n this._cleanupStateMachineListeners();\n\n return this._sendMessage('stopStateMachine', { instanceId: this._id });\n }\n\n public async postStateMachineEvent(event: string): Promise<number> {\n if (!this._created) return 1;\n\n return this._sendMessage('postStateMachineEvent', { event, instanceId: this._id });\n }\n\n public async getStateMachineListeners(): Promise<string[]> {\n if (!this._created) return [];\n\n return this._sendMessage('getStateMachineListeners', { instanceId: this._id });\n }\n\n private _getPointerPosition(event: PointerEvent): { x: number; y: number } {\n const rect = (this._canvas as HTMLCanvasElement).getBoundingClientRect();\n const scaleX = this._canvas.width / rect.width;\n const scaleY = this._canvas.height / rect.height;\n\n const devicePixelRatio = this._dotLottieInstanceState.renderConfig.devicePixelRatio || window.devicePixelRatio || 1;\n const x = ((event.clientX - rect.left) * scaleX) / devicePixelRatio;\n const y = ((event.clientY - rect.top) * scaleY) / devicePixelRatio;\n\n return {\n x,\n y,\n };\n }\n\n private _onPointerUp(event: PointerEvent): void {\n const { x, y } = this._getPointerPosition(event);\n\n this.postStateMachineEvent(`OnPointerUp: ${x} ${y}`);\n }\n\n private _onPointerDown(event: PointerEvent): void {\n const { x, y } = this._getPointerPosition(event);\n\n this.postStateMachineEvent(`OnPointerDown: ${x} ${y}`);\n }\n\n private _onPointerMove(event: PointerEvent): void {\n const { x, y } = this._getPointerPosition(event);\n\n this.postStateMachineEvent(`OnPointerMove: ${x} ${y}`);\n }\n\n private _onPointerEnter(event: PointerEvent): void {\n const { x, y } = this._getPointerPosition(event);\n\n this.postStateMachineEvent(`OnPointerEnter: ${x} ${y}`);\n }\n\n private _onPointerLeave(event: PointerEvent): void {\n const { x, y } = this._getPointerPosition(event);\n\n this.postStateMachineEvent(`OnPointerExit: ${x} ${y}`);\n }\n\n private _onComplete(): void {\n this.postStateMachineEvent('OnComplete');\n }\n\n private async _setupStateMachineListeners(): Promise<void> {\n if (IS_BROWSER && this._canvas instanceof HTMLCanvasElement && this.isLoaded) {\n const listeners = await this._sendMessage('getStateMachineListeners', { instanceId: this._id });\n\n if (listeners.includes('PointerUp')) {\n this._canvas.addEventListener('pointerup', this._pointerUpMethod);\n }\n\n if (listeners.includes('PointerDown')) {\n this._canvas.addEventListener('pointerdown', this._pointerDownMethod);\n }\n\n if (listeners.includes('PointerMove')) {\n this._canvas.addEventListener('pointermove', this._pointerMoveMethod);\n }\n\n if (listeners.includes('PointerEnter')) {\n this._canvas.addEventListener('pointerenter', this._pointerEnterMethod);\n }\n\n if (listeners.includes('PointerExit')) {\n this._canvas.addEventListener('pointerleave', this._pointerExitMethod);\n }\n\n if (listeners.includes('Complete')) {\n this.addEventListener('complete', this._onCompleteMethod);\n }\n }\n }\n\n private _cleanupStateMachineListeners(): void {\n if (IS_BROWSER && this._canvas instanceof HTMLCanvasElement) {\n this._canvas.removeEventListener('pointerup', this._pointerUpMethod);\n this._canvas.removeEventListener('pointerdown', this._pointerDownMethod);\n this._canvas.removeEventListener('pointermove', this._pointerMoveMethod);\n this._canvas.removeEventListener('pointerenter', this._pointerEnterMethod);\n this._canvas.removeEventListener('pointerleave', this._pointerExitMethod);\n this.removeEventListener('complete', this._onCompleteMethod);\n }\n }\n}\n"]}