{ "version": 3, "sources": ["https://jsr.io/@todd/webserver-base/0.0.4/static/script/webserver-base/logger.ts", "https://jsr.io/@std/uuid/1.0.6/common.ts", "https://jsr.io/@std/uuid/1.0.6/_common.ts", "https://jsr.io/@std/crypto/1.0.4/_wasm/lib/deno_std_wasm_crypto.generated.mjs", "https://jsr.io/@std/crypto/1.0.4/_wasm/mod.ts", "https://jsr.io/@std/crypto/1.0.4/crypto.ts", "https://jsr.io/@todd/byte-transcoder/0.0.6/src-ts/byte-reader.ts", "https://jsr.io/@todd/byte-transcoder/0.0.6/src-ts/byte-writer.ts", "../../../static/script/minesweeper-royale/codec/outgoing-payload.ts", "../../../static/script/minesweeper-royale/codec/incoming-payload.ts", "../../../static/script/minesweeper-royale/api-client.ts", "../../../static/script/minesweeper-royale/state/player-state.ts", "../../../static/script/minesweeper-royale/state/tile-buffer.ts", "../../../static/script/minesweeper-royale/state/game-state.ts", "../../../static/script/minesweeper-royale/state/user-state.ts", "../../../static/script/minesweeper-royale/state/app-state.ts", "../../../static/script/minesweeper-royale/audio-manager.ts", "../../../static/script/minesweeper-royale/ui/builders.ts", "../../../static/script/minesweeper-royale/ui/getters.ts", "../../../static/script/minesweeper-royale/toast-manager.ts", "../../../static/script/minesweeper-royale/websocket-wrapper.ts", "../../../cache-buster.json", "../../../static/script/minesweeper-royale/ui/partials.ts", "../../../static/script/minesweeper-royale/ui/screens/_base.ts", "../../../static/script/minesweeper-royale/ui/screens/main-menu.ts", "../../../static/script/minesweeper-royale/ui/screens/private-lobby.ts", "../../../static/script/minesweeper-royale/renderer.ts", "../../../static/script/minesweeper-royale/ui/screens/game-board.ts", "../../../static/script/minesweeper-royale/ui/screens/reconnecting.ts", "../../../static/script/minesweeper-royale/ui/screens/public-lobby.ts", "../../../static/script/minesweeper-royale/game.ts", "../../../static/script/minesweeper-royale.ts"], "sourcesContent": ["/**\n * Logger class for logging messages to the browser console.\n * @module\n */\n\n/**\n * The Logger class provides methods to log messages at different levels (DEBUG, WARN, INFO, ERROR).\n */\nexport default class Logger {\n private readonly _debug: boolean;\n\n /**\n * Creates an instance of the Logger class.\n *\n * @param debug If true, will log the debug/warning messages. If false, won't log them.\n */\n constructor(debug: boolean) {\n this._debug = debug;\n }\n\n /**\n * Logs a DEBUG-level message to the browser console.\n * @param message The debug message to log.\n */\n public debug(...data: unknown[]): void {\n if (!this._debug) {\n return;\n }\n\n console.debug(...data);\n }\n\n /**\n * Logs a WARN-level message to the browser console.\n * @param message The warning message to log.\n */\n public warn(...data: unknown[]): void {\n if (!this._debug) {\n return;\n }\n\n console.warn(...data);\n }\n\n /**\n * Logs an INFO-level message to the browser console.\n * @param message The info message to log.\n */\n public info(...data: unknown[]): void {\n console.info(...data);\n }\n\n /**\n * Logs an ERROR-level message to the browser console.\n * @param message The error message to log.\n */\n public error(...data: unknown[]): never {\n const serializedData: string[] = data.map((item: unknown) =>\n typeof item === \"object\" && item !== null ? JSON.stringify(item, null, 2) : String(item)\n );\n throw Error(serializedData.join(\" \"));\n }\n}\n", "// Copyright 2018-2025 the Deno authors. MIT license.\n// This module is browser compatible.\n\nimport { NIL_UUID } from \"./constants.ts\";\n\n/**\n * Determines whether the UUID is the\n * {@link https://www.rfc-editor.org/rfc/rfc4122#section-4.1.7 | nil UUID}.\n *\n * @param id UUID value.\n *\n * @returns `true` if the UUID is the nil UUID, otherwise `false`.\n *\n * @example Usage\n * ```ts\n * import { isNil } from \"@std/uuid\";\n * import { assert, assertFalse } from \"@std/assert\";\n *\n * assert(isNil(\"00000000-0000-0000-0000-000000000000\"));\n * assertFalse(isNil(crypto.randomUUID()));\n * ```\n */\nexport function isNil(id: string): boolean {\n return id === NIL_UUID;\n}\n\n/**\n * Determines whether a string is a valid UUID.\n *\n * @param uuid UUID value.\n *\n * @returns `true` if the string is a valid UUID, otherwise `false`.\n *\n * @example Usage\n * ```ts\n * import { validate } from \"@std/uuid\";\n * import { assert, assertFalse } from \"@std/assert\";\n *\n * assert(validate(\"6ec0bd7f-11c0-43da-975e-2a8ad9ebae0b\"));\n * assertFalse(validate(\"not a UUID\"));\n * ```\n */\nexport function validate(uuid: string): boolean {\n return /^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-6][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i\n .test(\n uuid,\n );\n}\n\n/**\n * Detect RFC version of a UUID.\n *\n * @param uuid UUID value.\n *\n * @returns The RFC version of the UUID.\n *\n * @example Usage\n * ```ts\n * import { version } from \"@std/uuid\";\n * import { assertEquals } from \"@std/assert\";\n *\n * assertEquals(version(\"d9428888-122b-11e1-b85c-61cd3cbb3210\"), 1);\n * assertEquals(version(\"6ec0bd7f-11c0-43da-975e-2a8ad9ebae0b\"), 4);\n * ```\n */\nexport function version(uuid: string): number {\n if (!validate(uuid)) {\n throw new TypeError(`Cannot detect UUID version: received ${uuid}`);\n }\n\n return parseInt(uuid[14]!, 16);\n}\n", "// Copyright 2018-2025 the Deno authors. MIT license.\n// This module is browser compatible.\n\nconst hexTable: string[] = [];\n\nfor (let i = 0; i < 256; ++i) {\n hexTable.push(i < 0x10 ? \"0\" + i.toString(16) : i.toString(16));\n}\n\n/**\n * Converts the byte array to a UUID string\n * @param bytes Used to convert Byte to Hex\n */\nexport function bytesToUuid(bytes: number[] | Uint8Array): string {\n return (\n hexTable[bytes[0]!]! +\n hexTable[bytes[1]!]! +\n hexTable[bytes[2]!]! +\n hexTable[bytes[3]!]! +\n \"-\" +\n hexTable[bytes[4]!]! +\n hexTable[bytes[5]!]! +\n \"-\" +\n hexTable[bytes[6]!]! +\n hexTable[bytes[7]!]! +\n \"-\" +\n hexTable[bytes[8]!]! +\n hexTable[bytes[9]!]! +\n \"-\" +\n hexTable[bytes[10]!]! +\n hexTable[bytes[11]!]! +\n hexTable[bytes[12]!]! +\n hexTable[bytes[13]!]! +\n hexTable[bytes[14]!]! +\n hexTable[bytes[15]!]!\n // Use .toLowerCase() to avoid the v8 engine memory issue\n // when concatenating strings with \"+\" operator. See:\n // - https://issues.chromium.org/issues/42206473\n // - https://github.com/uuidjs/uuid/pull/434\n ).toLowerCase();\n}\n\n/**\n * Converts a string to a byte array by converting the hex value to a number.\n * @param uuid Value that gets converted.\n */\nexport function uuidToBytes(uuid: string): Uint8Array {\n const bytes = new Uint8Array(16);\n let i = 0;\n\n for (const str of uuid.split(\"-\")) {\n const hex = parseInt(str, 16);\n switch (str.length) {\n case 4: {\n bytes[i++] = (hex >>> 8) & 0xff;\n bytes[i++] = hex & 0xff;\n break;\n }\n case 8: {\n bytes[i++] = (hex >>> 24) & 0xff;\n bytes[i++] = (hex >>> 16) & 0xff;\n bytes[i++] = (hex >>> 8) & 0xff;\n bytes[i++] = hex & 0xff;\n break;\n }\n case 12: {\n bytes[i++] = (hex / 0x10000000000) & 0xff;\n bytes[i++] = (hex / 0x100000000) & 0xff;\n bytes[i++] = (hex >>> 24) & 0xff;\n bytes[i++] = (hex >>> 16) & 0xff;\n bytes[i++] = (hex >>> 8) & 0xff;\n bytes[i++] = hex & 0xff;\n break;\n }\n }\n }\n\n return bytes;\n}\n", "// @generated file from wasmbuild -- do not edit\n// @ts-nocheck: generated\n// deno-lint-ignore-file\n// deno-fmt-ignore-file\n/// \n\n// source-hash: 972ff4b445cf68a28c96bc5e520f0fabe413a0a7\nlet wasm;\n\nconst heap = new Array(128).fill(undefined);\n\nheap.push(undefined, null, true, false);\n\nfunction getObject(idx) {\n return heap[idx];\n}\n\nlet heap_next = heap.length;\n\nfunction dropObject(idx) {\n if (idx < 132) return;\n heap[idx] = heap_next;\n heap_next = idx;\n}\n\nfunction takeObject(idx) {\n const ret = getObject(idx);\n dropObject(idx);\n return ret;\n}\n\nfunction addHeapObject(obj) {\n if (heap_next === heap.length) heap.push(heap.length + 1);\n const idx = heap_next;\n heap_next = heap[idx];\n\n heap[idx] = obj;\n return idx;\n}\n\nconst cachedTextDecoder = typeof TextDecoder !== \"undefined\"\n ? new TextDecoder(\"utf-8\", { ignoreBOM: true, fatal: true })\n : {\n decode: () => {\n throw Error(\"TextDecoder not available\");\n },\n };\n\nif (typeof TextDecoder !== \"undefined\") cachedTextDecoder.decode();\n\nlet cachedUint8Memory0 = null;\n\nfunction getUint8Memory0() {\n if (cachedUint8Memory0 === null || cachedUint8Memory0.byteLength === 0) {\n cachedUint8Memory0 = new Uint8Array(wasm.memory.buffer);\n }\n return cachedUint8Memory0;\n}\n\nfunction getStringFromWasm0(ptr, len) {\n ptr = ptr >>> 0;\n return cachedTextDecoder.decode(getUint8Memory0().subarray(ptr, ptr + len));\n}\n\nlet WASM_VECTOR_LEN = 0;\n\nconst cachedTextEncoder = typeof TextEncoder !== \"undefined\"\n ? new TextEncoder(\"utf-8\")\n : {\n encode: () => {\n throw Error(\"TextEncoder not available\");\n },\n };\n\nconst encodeString = function (arg, view) {\n return cachedTextEncoder.encodeInto(arg, view);\n};\n\nfunction passStringToWasm0(arg, malloc, realloc) {\n if (realloc === undefined) {\n const buf = cachedTextEncoder.encode(arg);\n const ptr = malloc(buf.length, 1) >>> 0;\n getUint8Memory0().subarray(ptr, ptr + buf.length).set(buf);\n WASM_VECTOR_LEN = buf.length;\n return ptr;\n }\n\n let len = arg.length;\n let ptr = malloc(len, 1) >>> 0;\n\n const mem = getUint8Memory0();\n\n let offset = 0;\n\n for (; offset < len; offset++) {\n const code = arg.charCodeAt(offset);\n if (code > 0x7F) break;\n mem[ptr + offset] = code;\n }\n\n if (offset !== len) {\n if (offset !== 0) {\n arg = arg.slice(offset);\n }\n ptr = realloc(ptr, len, len = offset + arg.length * 3, 1) >>> 0;\n const view = getUint8Memory0().subarray(ptr + offset, ptr + len);\n const ret = encodeString(arg, view);\n\n offset += ret.written;\n ptr = realloc(ptr, len, offset, 1) >>> 0;\n }\n\n WASM_VECTOR_LEN = offset;\n return ptr;\n}\n\nfunction isLikeNone(x) {\n return x === undefined || x === null;\n}\n\nlet cachedInt32Memory0 = null;\n\nfunction getInt32Memory0() {\n if (cachedInt32Memory0 === null || cachedInt32Memory0.byteLength === 0) {\n cachedInt32Memory0 = new Int32Array(wasm.memory.buffer);\n }\n return cachedInt32Memory0;\n}\n\nfunction getArrayU8FromWasm0(ptr, len) {\n ptr = ptr >>> 0;\n return getUint8Memory0().subarray(ptr / 1, ptr / 1 + len);\n}\n/**\n * Returns the digest of the given `data` using the given hash `algorithm`.\n *\n * `length` will usually be left `undefined` to use the default length for\n * the algorithm. For algorithms with variable-length output, it can be used\n * to specify a non-negative integer number of bytes.\n *\n * An error will be thrown if `algorithm` is not a supported hash algorithm or\n * `length` is not a supported length for the algorithm.\n * @param {string} algorithm\n * @param {Uint8Array} data\n * @param {number | undefined} [length]\n * @returns {Uint8Array}\n */\nexport function digest(algorithm, data, length) {\n try {\n const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);\n const ptr0 = passStringToWasm0(\n algorithm,\n wasm.__wbindgen_malloc,\n wasm.__wbindgen_realloc,\n );\n const len0 = WASM_VECTOR_LEN;\n wasm.digest(\n retptr,\n ptr0,\n len0,\n addHeapObject(data),\n !isLikeNone(length),\n isLikeNone(length) ? 0 : length,\n );\n var r0 = getInt32Memory0()[retptr / 4 + 0];\n var r1 = getInt32Memory0()[retptr / 4 + 1];\n var r2 = getInt32Memory0()[retptr / 4 + 2];\n var r3 = getInt32Memory0()[retptr / 4 + 3];\n if (r3) {\n throw takeObject(r2);\n }\n var v2 = getArrayU8FromWasm0(r0, r1).slice();\n wasm.__wbindgen_free(r0, r1 * 1, 1);\n return v2;\n } finally {\n wasm.__wbindgen_add_to_stack_pointer(16);\n }\n}\n\nconst DigestContextFinalization = (typeof FinalizationRegistry === \"undefined\")\n ? { register: () => {}, unregister: () => {} }\n : new FinalizationRegistry((ptr) => wasm.__wbg_digestcontext_free(ptr >>> 0));\n/**\n * A context for incrementally computing a digest using a given hash algorithm.\n */\nexport class DigestContext {\n __destroy_into_raw() {\n const ptr = this.__wbg_ptr;\n this.__wbg_ptr = 0;\n DigestContextFinalization.unregister(this);\n return ptr;\n }\n\n free() {\n const ptr = this.__destroy_into_raw();\n wasm.__wbg_digestcontext_free(ptr);\n }\n /**\n * Creates a new context incrementally computing a digest using the given\n * hash algorithm.\n *\n * An error will be thrown if `algorithm` is not a supported hash algorithm.\n * @param {string} algorithm\n */\n constructor(algorithm) {\n try {\n const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);\n const ptr0 = passStringToWasm0(\n algorithm,\n wasm.__wbindgen_malloc,\n wasm.__wbindgen_realloc,\n );\n const len0 = WASM_VECTOR_LEN;\n wasm.digestcontext_new(retptr, ptr0, len0);\n var r0 = getInt32Memory0()[retptr / 4 + 0];\n var r1 = getInt32Memory0()[retptr / 4 + 1];\n var r2 = getInt32Memory0()[retptr / 4 + 2];\n if (r2) {\n throw takeObject(r1);\n }\n this.__wbg_ptr = r0 >>> 0;\n return this;\n } finally {\n wasm.__wbindgen_add_to_stack_pointer(16);\n }\n }\n /**\n * Update the digest's internal state with the additional input `data`.\n *\n * If the `data` array view is large, it will be split into subarrays (via\n * JavaScript bindings) which will be processed sequentially in order to\n * limit the amount of memory that needs to be allocated in the Wasm heap.\n * @param {Uint8Array} data\n */\n update(data) {\n try {\n const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);\n wasm.digestcontext_update(retptr, this.__wbg_ptr, addHeapObject(data));\n var r0 = getInt32Memory0()[retptr / 4 + 0];\n var r1 = getInt32Memory0()[retptr / 4 + 1];\n if (r1) {\n throw takeObject(r0);\n }\n } finally {\n wasm.__wbindgen_add_to_stack_pointer(16);\n }\n }\n /**\n * Returns the digest of the input data so far, and then drops the context\n * from memory on the Wasm side. This context must no longer be used, and any\n * further method calls will result in null pointer errors being thrown.\n * https://github.com/rustwasm/wasm-bindgen/blob/bf39cfd8/crates/backend/src/codegen.rs#L186\n *\n * `length` will usually be left `undefined` to use the default length for\n * the algorithm. For algorithms with variable-length output, it can be used\n * to specify a non-negative integer number of bytes.\n *\n * An error will be thrown if `length` is not a supported length for the algorithm.\n * @param {number | undefined} [length]\n * @returns {Uint8Array}\n */\n digestAndDrop(length) {\n try {\n const ptr = this.__destroy_into_raw();\n const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);\n wasm.digestcontext_digestAndDrop(\n retptr,\n ptr,\n !isLikeNone(length),\n isLikeNone(length) ? 0 : length,\n );\n var r0 = getInt32Memory0()[retptr / 4 + 0];\n var r1 = getInt32Memory0()[retptr / 4 + 1];\n var r2 = getInt32Memory0()[retptr / 4 + 2];\n var r3 = getInt32Memory0()[retptr / 4 + 3];\n if (r3) {\n throw takeObject(r2);\n }\n var v1 = getArrayU8FromWasm0(r0, r1).slice();\n wasm.__wbindgen_free(r0, r1 * 1, 1);\n return v1;\n } finally {\n wasm.__wbindgen_add_to_stack_pointer(16);\n }\n }\n}\n\nconst imports = {\n __wbindgen_placeholder__: {\n __wbg_new_5dd86ebc917d9f52: function (arg0, arg1) {\n const ret = new TypeError(getStringFromWasm0(arg0, arg1));\n return addHeapObject(ret);\n },\n __wbindgen_object_drop_ref: function (arg0) {\n takeObject(arg0);\n },\n __wbg_byteLength_58f7b4fab1919d44: function (arg0) {\n const ret = getObject(arg0).byteLength;\n return ret;\n },\n __wbg_byteOffset_81d60f7392524f62: function (arg0) {\n const ret = getObject(arg0).byteOffset;\n return ret;\n },\n __wbg_buffer_dd7f74bc60f1faab: function (arg0) {\n const ret = getObject(arg0).buffer;\n return addHeapObject(ret);\n },\n __wbg_newwithbyteoffsetandlength_aa4a17c33a06e5cb: function (\n arg0,\n arg1,\n arg2,\n ) {\n const ret = new Uint8Array(getObject(arg0), arg1 >>> 0, arg2 >>> 0);\n return addHeapObject(ret);\n },\n __wbg_length_c20a40f15020d68a: function (arg0) {\n const ret = getObject(arg0).length;\n return ret;\n },\n __wbindgen_memory: function () {\n const ret = wasm.memory;\n return addHeapObject(ret);\n },\n __wbg_buffer_12d079cc21e14bdb: function (arg0) {\n const ret = getObject(arg0).buffer;\n return addHeapObject(ret);\n },\n __wbg_new_63b92bc8671ed464: function (arg0) {\n const ret = new Uint8Array(getObject(arg0));\n return addHeapObject(ret);\n },\n __wbg_set_a47bac70306a19a7: function (arg0, arg1, arg2) {\n getObject(arg0).set(getObject(arg1), arg2 >>> 0);\n },\n __wbindgen_throw: function (arg0, arg1) {\n throw new Error(getStringFromWasm0(arg0, arg1));\n },\n },\n};\n\nexport function instantiate() {\n return instantiateWithInstance().exports;\n}\n\nlet instanceWithExports;\n\nexport function instantiateWithInstance() {\n if (instanceWithExports == null) {\n const instance = instantiateInstance();\n wasm = instance.exports;\n cachedInt32Memory0 = new Int32Array(wasm.memory.buffer);\n cachedUint8Memory0 = new Uint8Array(wasm.memory.buffer);\n instanceWithExports = {\n instance,\n exports: { digest, DigestContext },\n };\n }\n return instanceWithExports;\n}\n\nexport function isInstantiated() {\n return instanceWithExports != null;\n}\n\nfunction instantiateInstance() {\n const wasmBytes = base64decode(\n \"\\\nAGFzbQEAAAABpwEYYAAAYAABf2ABfwBgAX8Bf2ACf38AYAJ/fwF/YAN/f38AYAN/f38Bf2AEf39/fw\\\nBgBH9/f38Bf2AFf39/f38AYAV/f39/fwF/YAZ/f39/f38AYAZ/f39/f38Bf2AFf39/fn8AYAd/f39+\\\nf39/AX9gA39/fgBgBX9/fn9/AGAFf399f38AYAV/f3x/fwBgAn9+AGAEf35/fwBgBH99f38AYAR/fH\\\n9/AAKkBQwYX193YmluZGdlbl9wbGFjZWhvbGRlcl9fGl9fd2JnX25ld181ZGQ4NmViYzkxN2Q5ZjUy\\\nAAUYX193YmluZGdlbl9wbGFjZWhvbGRlcl9fGl9fd2JpbmRnZW5fb2JqZWN0X2Ryb3BfcmVmAAIYX1\\\n93YmluZGdlbl9wbGFjZWhvbGRlcl9fIV9fd2JnX2J5dGVMZW5ndGhfNThmN2I0ZmFiMTkxOWQ0NAAD\\\nGF9fd2JpbmRnZW5fcGxhY2Vob2xkZXJfXyFfX3diZ19ieXRlT2Zmc2V0XzgxZDYwZjczOTI1MjRmNj\\\nIAAxhfX3diaW5kZ2VuX3BsYWNlaG9sZGVyX18dX193YmdfYnVmZmVyX2RkN2Y3NGJjNjBmMWZhYWIA\\\nAxhfX3diaW5kZ2VuX3BsYWNlaG9sZGVyX18xX193YmdfbmV3d2l0aGJ5dGVvZmZzZXRhbmRsZW5ndG\\\nhfYWE0YTE3YzMzYTA2ZTVjYgAHGF9fd2JpbmRnZW5fcGxhY2Vob2xkZXJfXx1fX3diZ19sZW5ndGhf\\\nYzIwYTQwZjE1MDIwZDY4YQADGF9fd2JpbmRnZW5fcGxhY2Vob2xkZXJfXxFfX3diaW5kZ2VuX21lbW\\\n9yeQABGF9fd2JpbmRnZW5fcGxhY2Vob2xkZXJfXx1fX3diZ19idWZmZXJfMTJkMDc5Y2MyMWUxNGJk\\\nYgADGF9fd2JpbmRnZW5fcGxhY2Vob2xkZXJfXxpfX3diZ19uZXdfNjNiOTJiYzg2NzFlZDQ2NAADGF\\\n9fd2JpbmRnZW5fcGxhY2Vob2xkZXJfXxpfX3diZ19zZXRfYTQ3YmFjNzAzMDZhMTlhNwAGGF9fd2Jp\\\nbmRnZW5fcGxhY2Vob2xkZXJfXxBfX3diaW5kZ2VuX3Rocm93AAQDYWAIBgYKBhAEBgYEDgMGBgQPBx\\\nQEBAYCBQQJBgYHDQQEBAcFBAcGBAQIBgwEBgcGBAwIBgYGBgUFAgQFBwYGCQAEBAkNCwoLCgoSExEI\\\nAgcFBQQGAgUDAAAEBAcHBwACAgIEBQFwARcXBQMBABEGCQF/AUGAgMAACwfUAQoGbWVtb3J5AgAGZG\\\nlnZXN0ADUYX193YmdfZGlnZXN0Y29udGV4dF9mcmVlAEMRZGlnZXN0Y29udGV4dF9uZXcAORRkaWdl\\\nc3Rjb250ZXh0X3VwZGF0ZQBHG2RpZ2VzdGNvbnRleHRfZGlnZXN0QW5kRHJvcAAzH19fd2JpbmRnZW\\\n5fYWRkX3RvX3N0YWNrX3BvaW50ZXIAYBFfX3diaW5kZ2VuX21hbGxvYwBFEl9fd2JpbmRnZW5fcmVh\\\nbGxvYwBND19fd2JpbmRnZW5fZnJlZQBdCRwBAEEBCxZaWyJfTztQUU5ZV1JTVFVWakFpQmtcCreXB2\\\nC6ggECOX8CfiMAQYACayIEJAACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJA\\\nAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQA\\\nJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAC\\\nQAJAAkACQAJAAkACQAJAAkAgAA4fAAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHgALIAFByA\\\nBqIQUgA0GAASABQcgBai0AACIAayIGTQ0eIABFDVMgBSAAaiACIAYQZRogASABKQNAQoABfDcDQCAB\\\nIAVCABARAkAgAyAGayIDRQ0AIAIgBmohAgxUC0HgkcAAIQNBACEGDFQLIAFByABqIQUCQCADQYABIA\\\nFByAFqLQAAIgBrIgZNDQAgAEUNUSAFIABqIAIgBhBlGiABIAEpA0BCgAF8NwNAIAEgBUIAEBECQCAD\\\nIAZrIgNFDQAgAiAGaiECDFILQeCRwAAhA0EAIQYMUgsgBSAAaiACIAMQZRogASAAIANqOgDIAQxUCy\\\nABQcgAaiEFAkAgA0GAASABQcgBai0AACIAayIGTQ0AIABFDU4gBSAAaiACIAYQZRogASABKQNAQoAB\\\nfDcDQCABIAVCABARAkAgAyAGayIDRQ0AIAIgBmohAgxPC0HgkcAAIQNBACEGDE8LIAUgAGogAiADEG\\\nUaIAEgACADajoAyAEMUwsgAUHIAGohBQJAIANBgAEgAUHIAWotAAAiAGsiBk0NACAARQ1LIAUgAGog\\\nAiAGEGUaIAEgASkDQEKAAXw3A0AgASAFQgAQEQJAIAMgBmsiA0UNACACIAZqIQIMTAtB4JHAACEDQQ\\\nAhBgxMCyAFIABqIAIgAxBlGiABIAAgA2o6AMgBDFILIAFByABqIQUCQCADQYABIAFByAFqLQAAIgBr\\\nIgZNDQAgAEUNSCAFIABqIAIgBhBlGiABIAEpA0BCgAF8NwNAIAEgBUIAEBECQCADIAZrIgNFDQAgAi\\\nAGaiECDEkLQeCRwAAhA0EAIQYMSQsgBSAAaiACIAMQZRogASAAIANqOgDIAQxRCyABQcgAaiEFAkAg\\\nA0GAASABQcgBai0AACIAayIGTQ0AIABFDUUgBSAAaiACIAYQZRogASABKQNAQoABfDcDQCABIAVCAB\\\nARAkAgAyAGayIDRQ0AIAIgBmohAgxGC0HgkcAAIQNBACEGDEYLIAUgAGogAiADEGUaIAEgACADajoA\\\nyAEMUAsgAUEoaiEFAkAgA0HAACABQegAai0AACIAayIGTQ0AIABFDUIgBSAAaiACIAYQZRogASABKQ\\\nMgQsAAfDcDIEEAIQcgASAFQQAQEwJAIAMgBmsiA0UNACACIAZqIQIMQwtB4JHAACEDDEMLIAUgAGog\\\nAiADEGUaIAEgACADajoAaAxPCyABQSBqIQggAUGJAWotAABBBnQgAUGIAWotAABqIgBFDT8gCCACQY\\\nAIIABrIgAgAyAAIANJGyIGECwhBSADIAZrIgNFDU4gBEG4AWoiCSABQegAaiIAKQMANwMAIARBwAFq\\\nIgogAUHwAGoiBykDADcDACAEQcgBaiILIAFB+ABqIgwpAwA3AwAgBEHwAGpBCGoiDSAFQQhqKQMANw\\\nMAIARB8ABqQRBqIg4gBUEQaikDADcDACAEQfAAakEYaiIPIAVBGGopAwA3AwAgBEHwAGpBIGoiECAF\\\nQSBqKQMANwMAIARB8ABqQShqIhEgBUEoaikDADcDACAEQfAAakEwaiISIAVBMGopAwA3AwAgBEHwAG\\\n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\\\nCGwgAC0ABHNBk4OACGwgAC0ABXNBk4OACGwgAC0ABnNBk4OACGwgAC0AB3NBk4OACGwhBSAAQQhqIg\\\nAgAkcNAAsLIAEgBTYCAAw5CyADRQ04IAEpAwAhPQJAAkAgA0EHcSIGDQAgAiEADAELIAYhBSACIQAD\\\nQCA9QrODgICAIH4gADEAAIUhPSAAQQFqIQAgBUF/aiIFDQALIAIgBmohAAsCQCADQQhJDQAgAiADai\\\nECA0AgPUKzg4CAgCB+IAAxAACFQrODgICAIH4gAEEBajEAAIVCs4OAgIAgfiAAQQJqMQAAhUKzg4CA\\\ngCB+IABBA2oxAACFQrODgICAIH4gAEEEajEAAIVCs4OAgIAgfiAAQQVqMQAAhUKzg4CAgCB+IABBBm\\\noxAACFQrODgICAIH4gAEEHajEAAIUhPSAAQQhqIgAgAkcNAAsLIAEgPTcDAAw4CyADRQ03IAEpAwAh\\\nPQJAAkAgA0EHcSIGDQAgAiEADAELIAYhBSACIQADQCA9IAAxAACFQrODgICAIH4hPSAAQQFqIQAgBU\\\nF/aiIFDQALIAIgBmohAAsCQCADQQhJDQAgAiADaiECA0AgPSAAMQAAhUKzg4CAgCB+IAAxAAGFQrOD\\\ngICAIH4gADEAAoVCs4OAgIAgfiAAMQADhUKzg4CAgCB+IAAxAASFQrODgICAIH4gADEABYVCs4OAgI\\\nAgfiAAMQAGhUKzg4CAgCB+IAAxAAeFQrODgICAIH4hPSAAQQhqIgAgAkcNAAsLIAEgPTcDAAw3CyAF\\\nIABqIAIgAxBlGiABIAAgA2o6AMgBDDYLIARB8ABqQR1qIBc6AAAgBEHwAGpBGWogGjoAACAEQfAAak\\\nEVaiAdOgAAIARB8ABqQRFqICA6AAAgBEHwAGpBDWogIzoAACAEQfAAakEJaiAmOgAAIARB9QBqIC06\\\nAAAgBEHwAGpBHmogFToAACAEQfAAakEaaiAZOgAAIARB8ABqQRZqIBw6AAAgBEHwAGpBEmogHzoAAC\\\nAEQfAAakEOaiAiOgAAIARB8ABqQQpqICU6AAAgBEH2AGogLDoAACAEQfAAakEfaiAUOgAAIARB8ABq\\\nQRtqIBg6AAAgBEHwAGpBF2ogGzoAACAEQfAAakETaiAeOgAAIARB8ABqQQ9qICE6AAAgBEHwAGpBC2\\\nogJDoAACAEQfcAaiArOgAAIAQgKDoAjAEgBCAWOgCIASAEICk6AIQBIAQgDDoAgAEgBCAqOgB8IAQg\\\nJzoAeCAEIC46AHQgBCAyOgBwIAQgMToAcSAEIDA6AHIgBCAvOgBzQbSRwAAgBEHwAGpBxIjAAEGch8\\\nAAEDwACyAFIABqIAIgBhBlGiABIAEpAwAgASkA0AGFNwMAIAEgASkDCCABQdgBaikAAIU3AwggASAB\\\nKQMQIAFB4AFqKQAAhTcDECABIAEpAxggAUHoAWopAACFNwMYIAEgASkDICABQfABaikAAIU3AyAgAS\\\nABKQMoIAFB+AFqKQAAhTcDKCABIAEpAzAgAUGAAmopAACFNwMwIAEgASkDOCABQYgCaikAAIU3Azgg\\\nASABKQNAIAFBkAJqKQAAhTcDQCABIAEpA0ggAUGYAmopAACFNwNIIAEgASkDUCABQaACaikAAIU3A1\\\nAgASABKQNYIAFBqAJqKQAAhTcDWCABIAEpA2AgAUGwAmopAACFNwNgIAEgASkDaCABQbgCaikAAIU3\\\nA2ggASABKQNwIAFBwAJqKQAAhTcDcCABIAEpA3ggAUHIAmopAACFNwN4IAEgASkDgAEgAUHQAmopAA\\\nCFNwOAASABIAEpA4gBIAFB2AJqKQAAhTcDiAEgASABKALIARAfIAMgBmshAyACIAZqIQIMJAsgBSAA\\\naiACIAYQZRogASABKQMAIAEpANABhTcDACABIAEpAwggAUHYAWopAACFNwMIIAEgASkDECABQeABai\\\nkAAIU3AxAgASABKQMYIAFB6AFqKQAAhTcDGCABIAEpAyAgAUHwAWopAACFNwMgIAEgASkDKCABQfgB\\\naikAAIU3AyggASABKQMwIAFBgAJqKQAAhTcDMCABIAEpAzggAUGIAmopAACFNwM4IAEgASkDQCABQZ\\\nACaikAAIU3A0AgASABKQNIIAFBmAJqKQAAhTcDSCABIAEpA1AgAUGgAmopAACFNwNQIAEgASkDWCAB\\\nQagCaikAAIU3A1ggASABKQNgIAFBsAJqKQAAhTcDYCABIAEpA2ggAUG4AmopAACFNwNoIAEgASkDcC\\\nABQcACaikAAIU3A3AgASABKQN4IAFByAJqKQAAhTcDeCABIAEpA4ABIAFB0AJqKQAAhTcDgAEgASAB\\\nKALIARAfIAMgBmshAyACIAZqIQIMIgsgBSAAaiACIAYQZRogASABKQMAIAEpANABhTcDACABIAEpAw\\\nggAUHYAWopAACFNwMIIAEgASkDECABQeABaikAAIU3AxAgASABKQMYIAFB6AFqKQAAhTcDGCABIAEp\\\nAyAgAUHwAWopAACFNwMgIAEgASkDKCABQfgBaikAAIU3AyggASABKQMwIAFBgAJqKQAAhTcDMCABIA\\\nEpAzggAUGIAmopAACFNwM4IAEgASkDQCABQZACaikAAIU3A0AgASABKQNIIAFBmAJqKQAAhTcDSCAB\\\nIAEpA1AgAUGgAmopAACFNwNQIAEgASkDWCABQagCaikAAIU3A1ggASABKQNgIAFBsAJqKQAAhTcDYC\\\nABIAEoAsgBEB8gAyAGayEDIAIgBmohAgwgCyAFIABqIAIgBhBlGiABIAEpAwAgASkA0AGFNwMAIAEg\\\nASkDCCABQdgBaikAAIU3AwggASABKQMQIAFB4AFqKQAAhTcDECABIAEpAxggAUHoAWopAACFNwMYIA\\\nEgASkDICABQfABaikAAIU3AyAgASABKQMoIAFB+AFqKQAAhTcDKCABIAEpAzAgAUGAAmopAACFNwMw\\\nIAEgASkDOCABQYgCaikAAIU3AzggASABKQNAIAFBkAJqKQAAhTcDQCABIAEoAsgBEB8gAyAGayEDIA\\\nIgBmohAgweCyAFIABqIAIgBhBlGiABIAEpAxBCAXw3AxAgASAFEB4gAyAGayEDIAIgBmohAgwcCyAF\\\nIABqIAIgBhBlGiAEQfAAaiAFQQEQGSACIAZqIQIgAyAGayEDDBoLIAYgAGogAiAFEGUaIAEgASkDAE\\\nIBfDcDACABQQhqIAYQEiADIAVrIQMgAiAFaiECDBgLIAUgAGogAiAGEGUaIAEgASkDAEIBfDcDACAB\\\nQQhqIAVBARAUIAIgBmohAiADIAZrIQMMFgsgBSAAaiACIAYQZRogASABKQMAIAEpANABhTcDACABIA\\\nEpAwggAUHYAWopAACFNwMIIAEgASkDECABQeABaikAAIU3AxAgASABKQMYIAFB6AFqKQAAhTcDGCAB\\\nIAEpAyAgAUHwAWopAACFNwMgIAEgASkDKCABQfgBaikAAIU3AyggASABKQMwIAFBgAJqKQAAhTcDMC\\\nABIAEpAzggAUGIAmopAACFNwM4IAEgASkDQCABQZACaikAAIU3A0AgASABKQNIIAFBmAJqKQAAhTcD\\\nSCABIAEpA1AgAUGgAmopAACFNwNQIAEgASkDWCABQagCaikAAIU3A1ggASABKQNgIAFBsAJqKQAAhT\\\ncDYCABIAEpA2ggAUG4AmopAACFNwNoIAEgASkDcCABQcACaikAAIU3A3AgASABKQN4IAFByAJqKQAA\\\nhTcDeCABIAEpA4ABIAFB0AJqKQAAhTcDgAEgASABKQOIASABQdgCaikAAIU3A4gBIAEgASgCyAEQHy\\\nADIAZrIQMgAiAGaiECDBQLIAUgAGogAiAGEGUaIAEgASkDACABKQDQAYU3AwAgASABKQMIIAFB2AFq\\\nKQAAhTcDCCABIAEpAxAgAUHgAWopAACFNwMQIAEgASkDGCABQegBaikAAIU3AxggASABKQMgIAFB8A\\\nFqKQAAhTcDICABIAEpAyggAUH4AWopAACFNwMoIAEgASkDMCABQYACaikAAIU3AzAgASABKQM4IAFB\\\niAJqKQAAhTcDOCABIAEpA0AgAUGQAmopAACFNwNAIAEgASkDSCABQZgCaikAAIU3A0ggASABKQNQIA\\\nFBoAJqKQAAhTcDUCABIAEpA1ggAUGoAmopAACFNwNYIAEgASkDYCABQbACaikAAIU3A2AgASABKQNo\\\nIAFBuAJqKQAAhTcDaCABIAEpA3AgAUHAAmopAACFNwNwIAEgASkDeCABQcgCaikAAIU3A3ggASABKQ\\\nOAASABQdACaikAAIU3A4ABIAEgASgCyAEQHyADIAZrIQMgAiAGaiECDBILIAUgAGogAiAGEGUaIAEg\\\nASkDACABKQDQAYU3AwAgASABKQMIIAFB2AFqKQAAhTcDCCABIAEpAxAgAUHgAWopAACFNwMQIAEgAS\\\nkDGCABQegBaikAAIU3AxggASABKQMgIAFB8AFqKQAAhTcDICABIAEpAyggAUH4AWopAACFNwMoIAEg\\\nASkDMCABQYACaikAAIU3AzAgASABKQM4IAFBiAJqKQAAhTcDOCABIAEpA0AgAUGQAmopAACFNwNAIA\\\nEgASkDSCABQZgCaikAAIU3A0ggASABKQNQIAFBoAJqKQAAhTcDUCABIAEpA1ggAUGoAmopAACFNwNY\\\nIAEgASkDYCABQbACaikAAIU3A2AgASABKALIARAfIAMgBmshAyACIAZqIQIMEAsgBSAAaiACIAYQZR\\\nogASABKQMAIAEpANABhTcDACABIAEpAwggAUHYAWopAACFNwMIIAEgASkDECABQeABaikAAIU3AxAg\\\nASABKQMYIAFB6AFqKQAAhTcDGCABIAEpAyAgAUHwAWopAACFNwMgIAEgASkDKCABQfgBaikAAIU3Ay\\\nggASABKQMwIAFBgAJqKQAAhTcDMCABIAEpAzggAUGIAmopAACFNwM4IAEgASkDQCABQZACaikAAIU3\\\nA0AgASABKALIARAfIAMgBmshAyACIAZqIQIMDgsgBSAAaiACIAYQZRogASABKQMgQgF8NwMgIAEgBU\\\nEBEA4gAiAGaiECIAMgBmshAwwMCyAFIABqIAIgBhBlGiABIAEpAyBCAXw3AyAgASAFQQEQDiACIAZq\\\nIQIgAyAGayEDDAoLIAUgAGogAiAGEGUaIAEgASkDQEIBfCI9NwNAIAFByABqIgAgACkDACA9UK18Nw\\\nMAIAEgBUEBEA0gAiAGaiECIAMgBmshAwwICyAFIABqIAIgBhBlGiABIAEpA0BCAXwiPTcDQCABQcgA\\\naiIAIAApAwAgPVCtfDcDACABIAVBARANIAIgBmohAiADIAZrIQMMBgsgBSAAaiACIAYQZRogASABKQ\\\nMAIAEpANABhTcDACABIAEpAwggAUHYAWopAACFNwMIIAEgASkDECABQeABaikAAIU3AxAgASABKQMY\\\nIAFB6AFqKQAAhTcDGCABIAEpAyAgAUHwAWopAACFNwMgIAEgASkDKCABQfgBaikAAIU3AyggASABKQ\\\nMwIAFBgAJqKQAAhTcDMCABIAEpAzggAUGIAmopAACFNwM4IAEgASkDQCABQZACaikAAIU3A0AgASAB\\\nKQNIIAFBmAJqKQAAhTcDSCABIAEpA1AgAUGgAmopAACFNwNQIAEgASkDWCABQagCaikAAIU3A1ggAS\\\nABKQNgIAFBsAJqKQAAhTcDYCABIAEpA2ggAUG4AmopAACFNwNoIAEgASkDcCABQcACaikAAIU3A3Ag\\\nASABKQN4IAFByAJqKQAAhTcDeCABIAEpA4ABIAFB0AJqKQAAhTcDgAEgASABKQOIASABQdgCaikAAI\\\nU3A4gBIAEgASkDkAEgAUHgAmopAACFNwOQASABIAEpA5gBIAFB6AJqKQAAhTcDmAEgASABKQOgASAB\\\nQfACaikAAIU3A6ABIAEgASgCyAEQHyADIAZrIQMgAiAGaiECDAQLIAUgAGogAiAGEGUaIAEgASkDAC\\\nABKQDQAYU3AwAgASABKQMIIAFB2AFqKQAAhTcDCCABIAEpAxAgAUHgAWopAACFNwMQIAEgASkDGCAB\\\nQegBaikAAIU3AxggASABKQMgIAFB8AFqKQAAhTcDICABIAEpAyggAUH4AWopAACFNwMoIAEgASkDMC\\\nABQYACaikAAIU3AzAgASABKQM4IAFBiAJqKQAAhTcDOCABIAEpA0AgAUGQAmopAACFNwNAIAEgASkD\\\nSCABQZgCaikAAIU3A0ggASABKQNQIAFBoAJqKQAAhTcDUCABIAEpA1ggAUGoAmopAACFNwNYIAEgAS\\\nkDYCABQbACaikAAIU3A2AgASABKQNoIAFBuAJqKQAAhTcDaCABIAEpA3AgAUHAAmopAACFNwNwIAEg\\\nASkDeCABQcgCaikAAIU3A3ggASABKQOAASABQdACaikAAIU3A4ABIAEgASgCyAEQHyADIAZrIQMgAi\\\nAGaiECDAILIAYgAGogAiAFEGUaIAEgASkDAEIBfDcDACABQQhqIAYQFSADIAVrIQMgAiAFaiECCyAD\\\nQT9xIQcgAiADQUBxIgBqIQwCQCADQcAASQ0AIAEgASkDACADQQZ2rXw3AwAgAUEIaiEFA0AgBSACEB\\\nUgAkHAAGohAiAAQUBqIgANAAsLIAYgDCAHEGUaIAEgBzoAYAwhCyACIANBiAFuQYgBbCIGaiEAIAMg\\\nBmshBgJAIANBiAFJDQADQCABIAEpAwAgAikAAIU3AwAgASABKQMIIAIpAAiFNwMIIAEgASkDECACKQ\\\nAQhTcDECABIAEpAxggAikAGIU3AxggASABKQMgIAIpACCFNwMgIAEgASkDKCACKQAohTcDKCABIAEp\\\nAzAgAikAMIU3AzAgASABKQM4IAIpADiFNwM4IAEgASkDQCACKQBAhTcDQCABIAEpA0ggAikASIU3A0\\\nggASABKQNQIAIpAFCFNwNQIAEgASkDWCACKQBYhTcDWCABIAEpA2AgAikAYIU3A2AgASABKQNoIAIp\\\nAGiFNwNoIAEgASkDcCACKQBwhTcDcCABIAEpA3ggAikAeIU3A3ggASABKQOAASACKQCAAYU3A4ABIA\\\nEgASgCyAEQHyACQYgBaiICIABHDQALCwJAIAZBiQFPDQAgBSAAIAYQZRogASAGOgDYAgwhCyAGQYgB\\\nQYCAwAAQPQALIAIgA0GoAW5BqAFsIgZqIQAgAyAGayEGAkAgA0GoAUkNAANAIAEgASkDACACKQAAhT\\\ncDACABIAEpAwggAikACIU3AwggASABKQMQIAIpABCFNwMQIAEgASkDGCACKQAYhTcDGCABIAEpAyAg\\\nAikAIIU3AyAgASABKQMoIAIpACiFNwMoIAEgASkDMCACKQAwhTcDMCABIAEpAzggAikAOIU3AzggAS\\\nABKQNAIAIpAECFNwNAIAEgASkDSCACKQBIhTcDSCABIAEpA1AgAikAUIU3A1AgASABKQNYIAIpAFiF\\\nNwNYIAEgASkDYCACKQBghTcDYCABIAEpA2ggAikAaIU3A2ggASABKQNwIAIpAHCFNwNwIAEgASkDeC\\\nACKQB4hTcDeCABIAEpA4ABIAIpAIABhTcDgAEgASABKQOIASACKQCIAYU3A4gBIAEgASkDkAEgAikA\\\nkAGFNwOQASABIAEpA5gBIAIpAJgBhTcDmAEgASABKQOgASACKQCgAYU3A6ABIAEgASgCyAEQHyACQa\\\ngBaiICIABHDQALCwJAIAZBqQFPDQAgBSAAIAYQZRogASAGOgD4AgwgCyAGQagBQYCAwAAQPQALIANB\\\n/wBxIQAgAiADQYB/cWohBgJAIANBgAFJDQAgASABKQNAIj0gA0EHdiIDrXwiPjcDQCABQcgAaiIHIA\\\ncpAwAgPiA9VK18NwMAIAEgAiADEA0LIAUgBiAAEGUaIAEgADoA0AEMHgsgA0H/AHEhACACIANBgH9x\\\naiEGAkAgA0GAAUkNACABIAEpA0AiPSADQQd2IgOtfCI+NwNAIAFByABqIgcgBykDACA+ID1UrXw3Aw\\\nAgASACIAMQDQsgBSAGIAAQZRogASAAOgDQAQwdCyADQT9xIQAgAiADQUBxaiEGAkAgA0HAAEkNACAB\\\nIAEpAyAgA0EGdiIDrXw3AyAgASACIAMQDgsgBSAGIAAQZRogASAAOgBoDBwLIANBP3EhACACIANBQH\\\nFqIQYCQCADQcAASQ0AIAEgASkDICADQQZ2IgOtfDcDICABIAIgAxAOCyAFIAYgABBlGiABIAA6AGgM\\\nGwsgAiADQcgAbkHIAGwiBmohACADIAZrIQYCQCADQcgASQ0AA0AgASABKQMAIAIpAACFNwMAIAEgAS\\\nkDCCACKQAIhTcDCCABIAEpAxAgAikAEIU3AxAgASABKQMYIAIpABiFNwMYIAEgASkDICACKQAghTcD\\\nICABIAEpAyggAikAKIU3AyggASABKQMwIAIpADCFNwMwIAEgASkDOCACKQA4hTcDOCABIAEpA0AgAi\\\nkAQIU3A0AgASABKALIARAfIAJByABqIgIgAEcNAAsLAkAgBkHJAE8NACAFIAAgBhBlGiABIAY6AJgC\\\nDBsLIAZByABBgIDAABA9AAsgAiADQegAbkHoAGwiBmohACADIAZrIQYCQCADQegASQ0AA0AgASABKQ\\\nMAIAIpAACFNwMAIAEgASkDCCACKQAIhTcDCCABIAEpAxAgAikAEIU3AxAgASABKQMYIAIpABiFNwMY\\\nIAEgASkDICACKQAghTcDICABIAEpAyggAikAKIU3AyggASABKQMwIAIpADCFNwMwIAEgASkDOCACKQ\\\nA4hTcDOCABIAEpA0AgAikAQIU3A0AgASABKQNIIAIpAEiFNwNIIAEgASkDUCACKQBQhTcDUCABIAEp\\\nA1ggAikAWIU3A1ggASABKQNgIAIpAGCFNwNgIAEgASgCyAEQHyACQegAaiICIABHDQALCwJAIAZB6Q\\\nBPDQAgBSAAIAYQZRogASAGOgC4AgwaCyAGQegAQYCAwAAQPQALIAIgA0GIAW5BiAFsIgZqIQAgAyAG\\\nayEGAkAgA0GIAUkNAANAIAEgASkDACACKQAAhTcDACABIAEpAwggAikACIU3AwggASABKQMQIAIpAB\\\nCFNwMQIAEgASkDGCACKQAYhTcDGCABIAEpAyAgAikAIIU3AyAgASABKQMoIAIpACiFNwMoIAEgASkD\\\nMCACKQAwhTcDMCABIAEpAzggAikAOIU3AzggASABKQNAIAIpAECFNwNAIAEgASkDSCACKQBIhTcDSC\\\nABIAEpA1AgAikAUIU3A1AgASABKQNYIAIpAFiFNwNYIAEgASkDYCACKQBghTcDYCABIAEpA2ggAikA\\\naIU3A2ggASABKQNwIAIpAHCFNwNwIAEgASkDeCACKQB4hTcDeCABIAEpA4ABIAIpAIABhTcDgAEgAS\\\nABKALIARAfIAJBiAFqIgIgAEcNAAsLAkAgBkGJAU8NACAFIAAgBhBlGiABIAY6ANgCDBkLIAZBiAFB\\\ngIDAABA9AAsgAiADQZABbkGQAWwiBmohACADIAZrIQYCQCADQZABSQ0AA0AgASABKQMAIAIpAACFNw\\\nMAIAEgASkDCCACKQAIhTcDCCABIAEpAxAgAikAEIU3AxAgASABKQMYIAIpABiFNwMYIAEgASkDICAC\\\nKQAghTcDICABIAEpAyggAikAKIU3AyggASABKQMwIAIpADCFNwMwIAEgASkDOCACKQA4hTcDOCABIA\\\nEpA0AgAikAQIU3A0AgASABKQNIIAIpAEiFNwNIIAEgASkDUCACKQBQhTcDUCABIAEpA1ggAikAWIU3\\\nA1ggASABKQNgIAIpAGCFNwNgIAEgASkDaCACKQBohTcDaCABIAEpA3AgAikAcIU3A3AgASABKQN4IA\\\nIpAHiFNwN4IAEgASkDgAEgAikAgAGFNwOAASABIAEpA4gBIAIpAIgBhTcDiAEgASABKALIARAfIAJB\\\nkAFqIgIgAEcNAAsLAkAgBkGRAU8NACAFIAAgBhBlGiABIAY6AOACDBgLIAZBkAFBgIDAABA9AAsgA0\\\nE/cSEAIAIgA0FAcWohBgJAIANBwABJDQAgASABKQMAIANBBnYiA618NwMAIAFBCGogAiADEBQLIAUg\\\nBiAAEGUaIAEgADoAYAwWCyADQT9xIQcgAiADQUBxIgBqIQwCQCADQcAASQ0AIAEgASkDACADQQZ2rX\\\nw3AwAgAUEIaiEFA0AgBSACEBIgAkHAAGohAiAAQUBqIgANAAsLIAYgDCAHEGUaIAEgBzoAYAwVCyAD\\\nQT9xIQAgAiADQUBxaiEGAkAgA0HAAEkNACAEQfAAaiACIANBBnYQGQsgBSAGIAAQZRogASAAOgBYDB\\\nQLIANBP3EhBiACIANBQHEiAGohBwJAIANBwABJDQAgASABKQMQIANBBnatfDcDEANAIAEgAhAeIAJB\\\nwABqIQIgAEFAaiIADQALCyAFIAcgBhBlGiABIAY6AFgMEwsgAiADQcgAbkHIAGwiBmohACADIAZrIQ\\\nYCQCADQcgASQ0AA0AgASABKQMAIAIpAACFNwMAIAEgASkDCCACKQAIhTcDCCABIAEpAxAgAikAEIU3\\\nAxAgASABKQMYIAIpABiFNwMYIAEgASkDICACKQAghTcDICABIAEpAyggAikAKIU3AyggASABKQMwIA\\\nIpADCFNwMwIAEgASkDOCACKQA4hTcDOCABIAEpA0AgAikAQIU3A0AgASABKALIARAfIAJByABqIgIg\\\nAEcNAAsLAkAgBkHJAE8NACAFIAAgBhBlGiABIAY6AJgCDBMLIAZByABBgIDAABA9AAsgAiADQegAbk\\\nHoAGwiBmohACADIAZrIQYCQCADQegASQ0AA0AgASABKQMAIAIpAACFNwMAIAEgASkDCCACKQAIhTcD\\\nCCABIAEpAxAgAikAEIU3AxAgASABKQMYIAIpABiFNwMYIAEgASkDICACKQAghTcDICABIAEpAyggAi\\\nkAKIU3AyggASABKQMwIAIpADCFNwMwIAEgASkDOCACKQA4hTcDOCABIAEpA0AgAikAQIU3A0AgASAB\\\nKQNIIAIpAEiFNwNIIAEgASkDUCACKQBQhTcDUCABIAEpA1ggAikAWIU3A1ggASABKQNgIAIpAGCFNw\\\nNgIAEgASgCyAEQHyACQegAaiICIABHDQALCwJAIAZB6QBPDQAgBSAAIAYQZRogASAGOgC4AgwSCyAG\\\nQegAQYCAwAAQPQALIAIgA0GIAW5BiAFsIgZqIQAgAyAGayEGAkAgA0GIAUkNAANAIAEgASkDACACKQ\\\nAAhTcDACABIAEpAwggAikACIU3AwggASABKQMQIAIpABCFNwMQIAEgASkDGCACKQAYhTcDGCABIAEp\\\nAyAgAikAIIU3AyAgASABKQMoIAIpACiFNwMoIAEgASkDMCACKQAwhTcDMCABIAEpAzggAikAOIU3Az\\\nggASABKQNAIAIpAECFNwNAIAEgASkDSCACKQBIhTcDSCABIAEpA1AgAikAUIU3A1AgASABKQNYIAIp\\\nAFiFNwNYIAEgASkDYCACKQBghTcDYCABIAEpA2ggAikAaIU3A2ggASABKQNwIAIpAHCFNwNwIAEgAS\\\nkDeCACKQB4hTcDeCABIAEpA4ABIAIpAIABhTcDgAEgASABKALIARAfIAJBiAFqIgIgAEcNAAsLAkAg\\\n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\\\nASEFIAQtANkBIRggBCAELQDYASIZOgBoIAQgBCkD0AEiPjcDYCAEIAUgGEVyQQJyIgU6AGkgBEHgAW\\\npBGGoiGCAXKQIANwMAIARB4AFqQRBqIhcgBykCADcDACAEQeABakEIaiIHIAYpAgA3AwAgBCAMKQIA\\\nNwPgASAEQeABaiAEIBkgPiAFEBYgDS0AACEZIA4tAAAhGiAPLQAAIRsgEC0AACEcIBEtAAAhHSASLQ\\\nAAIR4gGC0AACEYIBMtAAAhHyAzLQAAISAgNC0AACEhIDUtAAAhIiA2LQAAISMgNy0AACEkIBctAAAh\\\nFyA4LQAAISUgOS0AACEmIDotAAAhJyA7LQAAISggBEHgAWpBCmotAAAhKSA8LQAAISogBy0AACEHIA\\\nQtAPwBISsgBC0A9AEhLCAELQDsASEtIAQtAOcBIS4gBC0A5gEhLyAELQDlASEwIAQtAOQBITEgBC0A\\\n4wEhMiAELQDiASEJIAQtAOEBIQogBC0A4AEhCyABIAEpA4ABEB0gASgC8A4iBkE3Tw0KIBYgBkEFdG\\\noiBSAJOgACIAUgCjoAASAFIAs6AAAgBUEDaiAyOgAAIAUgKzoAHCAFIBg6ABggBSAsOgAUIAUgFzoA\\\nECAFIC06AAwgBSAHOgAIIAUgMToABCAFQR9qIBk6AAAgBUEeaiAaOgAAIAVBHWogGzoAACAFQRtqIB\\\nw6AAAgBUEaaiAdOgAAIAVBGWogHjoAACAFQRdqIB86AAAgBUEWaiAgOgAAIAVBFWogIToAACAFQRNq\\\nICI6AAAgBUESaiAjOgAAIAVBEWogJDoAACAFQQ9qICU6AAAgBUEOaiAmOgAAIAVBDWogJzoAACAFQQ\\\ntqICg6AAAgBUEKaiApOgAAIAVBCWogKjoAACAFQQdqIC46AAAgBUEGaiAvOgAAIAVBBWogMDoAACAB\\\nIAZBAWo2AvAOCyABIAEpA4ABID18Ij43A4ABIAMgAEkNAiACIABqIQIgAyAAayIDQYAISw0ACwsgA0\\\nUNFiAIIAIgAxAsGiABIAFBgAFqKQMAEB0MFgsgACADQbyHwAAQPgALIAAgA0Gsh8AAED0ACyAFQcAA\\\nQcyGwAAQPQALIAZBwABB3IbAABA9AAsgBkEgQeyGwAAQPQALIARB8ABqQRhqIARBGGopAwA3AwAgBE\\\n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\\\nAUGAAWopAwAhYiABQdwAaigCACEIIAFB2ABqKAIAIQkgAUHUAGooAgAhCiABQdAAaigCACELIAFBzA\\\nBqKAIAIQwgAUHIAGooAgAhDSABQcQAaigCACEOIAFBwABqKAIAIQ8gAUE8aigCACEQIAFBOGooAgAh\\\nESABQTRqKAIAIRIgAUEwaigCACETIAFBLGooAgAhFCABQShqKAIAIRUgAUEkaigCACEWIAFB/ABqKA\\\nIAIRcgAUH4AGooAgAhGCABQfQAaigCACEZIAFB8ABqKAIAIRogAUHsAGooAgAhGyABQegAaigCACEc\\\nIAFB5ABqKAIAIR0gAUHgAGooAgAhHiABKAIgIR8MAQsgAUGQAWohFwJAAkACQAJAIAFBiQFqLQAAIg\\\nhBBnRBACABQYgBai0AACINa0cNACAFQX5qIQggBUEBTQ0HIAFBigFqLQAAIQ4gA0EYaiAXIAhBBXRq\\\nIgxBGGopAAAiYjcDACADQRBqIAxBEGopAAAiYzcDACADQQhqIAxBCGopAAAiZDcDACADQSBqIAVBBX\\\nQgF2pBYGoiDSkAACJlNwMAIANBKGogDUEIaikAACJmNwMAIANBMGogDUEQaikAACJnNwMAIANBOGog\\\nDUEYaikAACJoNwMAIAMgDCkAACJpNwMAIANB8ABqQThqIGg3AwAgA0HwAGpBMGogZzcDACADQfAAak\\\nEoaiBmNwMAIANB8ABqQSBqIGU3AwAgA0HwAGpBGGogYjcDACADQfAAakEQaiBjNwMAIANB8ABqQQhq\\\nIGQ3AwAgAyBpNwNwIANByAFqIAFBGGopAwA3AwAgA0HAAWogAUEQaikDADcDACADQbgBaiABQQhqKQ\\\nMANwMAIAMgASkDADcDsAEgAyADQfAAakHgABBlIg8gDkEEciIGOgBpQcAAIQ0gD0HAADoAaEIAIWIg\\\nD0IANwNgIAhFDQIgBiEODAELIANB8ABqQcgAaiABQegAaikDADcDACADQfAAakHQAGogAUHwAGopAw\\\nA3AwAgA0HwAGpB2ABqIAFB+ABqKQMANwMAIANB+ABqIAFBKGopAwA3AwAgA0GAAWogAUEwaikDADcD\\\nACADQYgBaiABQThqKQMANwMAIANBkAFqIAFBwABqKQMANwMAIANB8ABqQShqIAFByABqKQMANwMAIA\\\nNB8ABqQTBqIAFB0ABqKQMANwMAIANB8ABqQThqIAFB2ABqKQMANwMAIAMgASkDIDcDcCADIAFB4ABq\\\nKQMANwOwASABQYoBai0AACEMIAFBgAFqKQMAIWIgAyADQfAAakHgABBlIg8gDCAIRXJBAnIiDjoAaS\\\nAPIA06AGggDyBiNwNgIAxBBHIhBiAFIQgLAkAgCEF/aiIgIAVPIhsNACADQfAAakEYaiIhIANBwABq\\\nIgxBGGoiIikCADcDACADQfAAakEQaiIjIAxBEGoiJCkCADcDACADQfAAakEIaiIlIAxBCGoiJikCAD\\\ncDACADIAwpAgA3A3AgA0HwAGogAyANIGIgDhAWICUtAAAhDSAjLQAAIQkgIS0AACEQIANB+wBqIhwt\\\nAAAhCiADQfoAaiIdLQAAIQsgA0H5AGoiHi0AACERIANB/wBqIictAAAhEiADQf4AaiIoLQAAIRMgA0\\\nH9AGoiKS0AACEUIANBgwFqIiotAAAhFSADQYIBaiIrLQAAIRYgA0GBAWoiLC0AACEfIANBhwFqIi0t\\\nAAAhByADQYYBaiIuLQAAIS8gA0GFAWoiMC0AACExIANBiwFqIjItAAAhMyADQYoBaiI0LQAAITUgA0\\\nGJAWoiNi0AACEZIANBjwFqIjctAAAhGiADQY4BaiI4LQAAITkgAy0AcCEOIAMtAHQhOiADLQB8ITsg\\\nAy0AhAEhPCADLQCMASE9IAMtAHMhDyADLQByIT4gAy0AcSE/IAMtAHchQCADLQB2IUEgAy0AdSFCIA\\\nNBPWoiQyADQY0BaiJELQAAIhg6AAAgA0E+aiJFIDk6AAAgA0E/aiJGIBo6AAAgA0E5aiJHIBk6AAAg\\\nA0E6aiJIIDU6AAAgA0E7aiJJIDM6AAAgA0E1aiJKIDE6AAAgA0E2aiJLIC86AAAgA0E3aiJMIAc6AA\\\nAgA0ExaiJNIB86AAAgA0EyaiJOIBY6AAAgA0EzaiJPIBU6AAAgA0EtaiJQIBQ6AAAgA0EuaiJRIBM6\\\nAAAgA0EvaiJSIBI6AAAgA0EpaiJTIBE6AAAgA0EqaiJUIAs6AAAgA0EraiJVIAo6AAAgA0ElaiJWIE\\\nI6AAAgA0EmaiJXIEE6AAAgA0EnaiJYIEA6AAAgA0EhaiJZID86AAAgA0EiaiJaID46AAAgA0EjaiJb\\\nIA86AAAgA0EIaiJcIBcgIEEFdGoiF0EIaikDADcDACADQRBqIl0gF0EQaikDADcDACADQRhqIl4gF0\\\nEYaikDADcDACAMIAEpAwA3AwAgJiABQQhqIl8pAwA3AwAgJCABQRBqImApAwA3AwAgIiABQRhqImEp\\\nAwA3AwAgA0HAADoAaCADID06ADwgAyAQOgA4IAMgPDoANCADIAk6ADAgAyA7OgAsIAMgDToAKCADID\\\no6ACQgAyAOOgAgIAMgBjoAaSADQgA3A2AgAyAXKQMANwMAAkACQCAgRQ0AQQIgCGshFyAIQQV0IAFq\\\nQdAAaiEIA0AgGw0CICEgIikCADcDACAjICQpAgA3AwAgJSAmKQIANwMAIAMgDCkCADcDcCADQfAAai\\\nADQcAAQgAgBhAWICUtAAAhDSAjLQAAIQkgIS0AACEQIBwtAAAhCiAdLQAAIQsgHi0AACERICctAAAh\\\nEiAoLQAAIRMgKS0AACEUICotAAAhFSArLQAAIRYgLC0AACEfIC0tAAAhByAuLQAAIS8gMC0AACExID\\\nItAAAhMyA0LQAAITUgNi0AACEZIDctAAAhGiA4LQAAITkgAy0AcCEOIAMtAHQhOiADLQB8ITsgAy0A\\\nhAEhPCADLQCMASE9IAMtAHMhDyADLQByIT4gAy0AcSE/IAMtAHchQCADLQB2IUEgAy0AdSFCIEMgRC\\\n0AACIYOgAAIEUgOToAACBGIBo6AAAgRyAZOgAAIEggNToAACBJIDM6AAAgSiAxOgAAIEsgLzoAACBM\\\nIAc6AAAgTSAfOgAAIE4gFjoAACBPIBU6AAAgUCAUOgAAIFEgEzoAACBSIBI6AAAgUyAROgAAIFQgCz\\\noAACBVIAo6AAAgViBCOgAAIFcgQToAACBYIEA6AAAgWSA/OgAAIFogPjoAACBbIA86AAAgXCAIQQhq\\\nKQMANwMAIF0gCEEQaikDADcDACBeIAhBGGopAwA3AwAgDCABKQMANwMAICYgXykDADcDACAkIGApAw\\\nA3AwAgIiBhKQMANwMAIANBwAA6AGggAyA9OgA8IAMgEDoAOCADIDw6ADQgAyAJOgAwIAMgOzoALCAD\\\nIA06ACggAyA6OgAkIAMgDjoAICADIAY6AGkgA0IANwNgIAMgCCkDADcDACAIQWBqIQggF0EBaiIXQQ\\\nFHDQALCyAOQf8BcSA/QQh0ckH//wNxIA9BGHQgPkH/AXFBEHRyciEPIDpB/wFxIEJBCHRyQf//A3Eg\\\nQEEYdCBBQf8BcUEQdHJyIQ4gDUH/AXEgEUEIdHJB//8DcSAKQRh0IAtB/wFxQRB0cnIhDSA7Qf8BcS\\\nAUQQh0ckH//wNxIBJBGHQgE0H/AXFBEHRyciEMIAlB/wFxIB9BCHRyQf//A3EgFUEYdCAWQf8BcUEQ\\\ndHJyIQsgPEH/AXEgMUEIdHJB//8DcSAHQRh0IC9B/wFxQRB0cnIhCiAQQf8BcSAZQQh0ckH//wNxID\\\nNBGHQgNUH/AXFBEHRyciEJID1B/wFxIBhBCHRyQf//A3EgGkEYdCA5Qf8BcUEQdHJyIQgMAwtBACAX\\\nayEgCyAgIAVB3IfAABBAAAsgDygCPCEIIA8oAjghCSAPKAI0IQogDygCMCELIA8oAiwhDCAPKAIoIQ\\\n0gDygCJCEOIA8oAiAhDwsgAygCXCEXIAMoAlghGCADKAJUIRkgAygCUCEaIAMoAkwhGyADKAJIIRwg\\\nAygCRCEdIAMoAkAhHiADKAIcIRAgAygCGCERIAMoAhQhEiADKAIQIRMgAygCDCEUIAMoAgghFSADKA\\\nIEIRYgAygCACEfIAFBADYC8A5BwAAhB0IAIWILAkAgAkUNACAcIBNqIBhqIgEgEmogASAHc0EQdyIB\\\nQfLmu+MDaiIHIBhzQRR3Ii9qIjEgC2ogGyARaiAXaiIzIBBqIDMgBkEIckH/AXFzQRB3IgZBuuq/qn\\\npqIjMgF3NBFHciNWoiOSAGc0EYdyInIDNqIiggNXNBGXciKWoiKiAKaiErIDkgCWohLCAxIAFzQRh3\\\nIi0gB2oiLiAvc0EZdyE5IB0gFWogGWoiMCAUaiEyIB4gH2ogGmoiNCAWaiE2QQAhByAEITogAiEBA0\\\nAgAyArICogMiAwIGJCIIinc0EQdyIGQYXdntt7aiIvIBlzQRR3IjFqIjMgBnNBGHciBnNBEHciNSA2\\\nIDQgYqdzQRB3IjtB58yn0AZqIjwgGnNBFHciPWoiPiA7c0EYdyI7IDxqIjxqIj8gKXNBFHciQGoiQS\\\nAQaiAzIA1qIDlqIjMgDGogMyA7c0EQdyIzIChqIjsgOXNBFHciQmoiISAzc0EYdyIzIDtqIjsgQnNB\\\nGXciQmoiIiAfaiAiICwgPCA9c0EZdyI8aiI9IAhqID0gLXNBEHciPSAGIC9qIgZqIi8gPHNBFHciPG\\\noiIyA9c0EYdyI9c0EQdyIiID4gD2ogBiAxc0EZdyIGaiIxIA5qIDEgJ3NBEHciMSAuaiI+IAZzQRR3\\\nIgZqIiQgMXNBGHciMSA+aiI+aiIlIEJzQRR3IkJqIiYgDmogIyATaiBBIDVzQRh3IjUgP2oiPyBAc0\\\nEZdyJAaiJBIApqIEEgMXNBEHciMSA7aiI7IEBzQRR3IkBqIkEgMXNBGHciMSA7aiI7IEBzQRl3IkBq\\\nIiMgCWogIyAhIBRqID4gBnNBGXciBmoiPiANaiA+IDVzQRB3IjUgPSAvaiIvaiI9IAZzQRR3IgZqIj\\\n4gNXNBGHciNXNBEHciISAkIBVqIC8gPHNBGXciL2oiPCARaiA8IDNzQRB3IjMgP2oiPCAvc0EUdyIv\\\naiI/IDNzQRh3IjMgPGoiPGoiIyBAc0EUdyJAaiIkIApqID4gC2ogJiAic0EYdyI+ICVqIiIgQnNBGX\\\nciQmoiJSASaiAlIDNzQRB3IjMgO2oiOyBCc0EUdyJCaiIlIDNzQRh3IjMgO2oiOyBCc0EZdyJCaiIm\\\nIBVqICYgQSAIaiA8IC9zQRl3Ii9qIjwgD2ogPCA+c0EQdyI8IDUgPWoiNWoiPSAvc0EUdyIvaiI+ID\\\nxzQRh3IjxzQRB3IkEgPyAWaiA1IAZzQRl3IgZqIjUgDGogNSAxc0EQdyIxICJqIjUgBnNBFHciBmoi\\\nPyAxc0EYdyIxIDVqIjVqIiIgQnNBFHciQmoiJiAMaiA+IBBqICQgIXNBGHciPiAjaiIhIEBzQRl3Ik\\\nBqIiMgCWogIyAxc0EQdyIxIDtqIjsgQHNBFHciQGoiIyAxc0EYdyIxIDtqIjsgQHNBGXciQGoiJCAI\\\naiAkICUgDWogNSAGc0EZdyIGaiI1IAtqIDUgPnNBEHciNSA8ID1qIjxqIj0gBnNBFHciBmoiPiA1c0\\\nEYdyI1c0EQdyIkID8gFGogPCAvc0EZdyIvaiI8IBNqIDwgM3NBEHciMyAhaiI8IC9zQRR3Ii9qIj8g\\\nM3NBGHciMyA8aiI8aiIhIEBzQRR3IkBqIiUgCWogPiAOaiAmIEFzQRh3Ij4gImoiQSBCc0EZdyJCai\\\nIiIB9qICIgM3NBEHciMyA7aiI7IEJzQRR3IkJqIiIgM3NBGHciMyA7aiI7IEJzQRl3IkJqIiYgFGog\\\nJiAjIA9qIDwgL3NBGXciL2oiPCAWaiA8ID5zQRB3IjwgNSA9aiI1aiI9IC9zQRR3Ii9qIj4gPHNBGH\\\nciPHNBEHciIyA/IBFqIDUgBnNBGXciBmoiNSASaiA1IDFzQRB3IjEgQWoiNSAGc0EUdyIGaiI/IDFz\\\nQRh3IjEgNWoiNWoiQSBCc0EUdyJCaiImIBJqID4gCmogJSAkc0EYdyI+ICFqIiEgQHNBGXciQGoiJC\\\nAIaiAkIDFzQRB3IjEgO2oiOyBAc0EUdyJAaiIkIDFzQRh3IjEgO2oiOyBAc0EZdyJAaiIlIA9qICUg\\\nIiALaiA1IAZzQRl3IgZqIjUgDmogNSA+c0EQdyI1IDwgPWoiPGoiPSAGc0EUdyIGaiI+IDVzQRh3Ij\\\nVzQRB3IiIgPyANaiA8IC9zQRl3Ii9qIjwgEGogPCAzc0EQdyIzICFqIjwgL3NBFHciL2oiPyAzc0EY\\\ndyIzIDxqIjxqIiEgQHNBFHciQGoiJSAIaiA+IAxqICYgI3NBGHciPiBBaiJBIEJzQRl3IkJqIiMgFW\\\nogIyAzc0EQdyIzIDtqIjsgQnNBFHciQmoiIyAzc0EYdyIzIDtqIjsgQnNBGXciQmoiJiANaiAmICQg\\\nFmogPCAvc0EZdyIvaiI8IBFqIDwgPnNBEHciPCA1ID1qIjVqIj0gL3NBFHciL2oiPiA8c0EYdyI8c0\\\nEQdyIkID8gE2ogNSAGc0EZdyIGaiI1IB9qIDUgMXNBEHciMSBBaiI1IAZzQRR3IgZqIj8gMXNBGHci\\\nMSA1aiI1aiJBIEJzQRR3IkJqIiYgH2ogPiAJaiAlICJzQRh3Ij4gIWoiISBAc0EZdyJAaiIiIA9qIC\\\nIgMXNBEHciMSA7aiI7IEBzQRR3IkBqIiIgMXNBGHciMSA7aiI7IEBzQRl3IkBqIiUgFmogJSAjIA5q\\\nIDUgBnNBGXciBmoiNSAMaiA1ID5zQRB3IjUgPCA9aiI8aiI9IAZzQRR3IgZqIj4gNXNBGHciNXNBEH\\\nciIyA/IAtqIDwgL3NBGXciL2oiPCAKaiA8IDNzQRB3IjMgIWoiPCAvc0EUdyIvaiI/IDNzQRh3IjMg\\\nPGoiPGoiISBAc0EUdyJAaiIlIA9qID4gEmogJiAkc0EYdyI+IEFqIkEgQnNBGXciQmoiJCAUaiAkID\\\nNzQRB3IjMgO2oiOyBCc0EUdyJCaiIkIDNzQRh3IjMgO2oiOyBCc0EZdyJCaiImIAtqICYgIiARaiA8\\\nIC9zQRl3Ii9qIjwgE2ogPCA+c0EQdyI8IDUgPWoiNWoiPSAvc0EUdyIvaiI+IDxzQRh3IjxzQRB3Ii\\\nIgPyAQaiA1IAZzQRl3IgZqIjUgFWogNSAxc0EQdyIxIEFqIjUgBnNBFHciBmoiPyAxc0EYdyIxIDVq\\\nIjVqIkEgQnNBFHciQmoiJiAVaiA+IAhqICUgI3NBGHciPiAhaiIhIEBzQRl3IkBqIiMgFmogIyAxc0\\\nEQdyIxIDtqIjsgQHNBFHciQGoiIyAxc0EYdyIxIDtqIjsgQHNBGXciQGoiJSARaiAlICQgDGogNSAG\\\nc0EZdyIGaiI1IBJqIDUgPnNBEHciNSA8ID1qIjxqIj0gBnNBFHciBmoiPiA1c0EYdyI1c0EQdyIkID\\\n8gDmogPCAvc0EZdyIvaiI8IAlqIDwgM3NBEHciMyAhaiI8IC9zQRR3Ii9qIj8gM3NBGHciMyA8aiI8\\\naiIhIEBzQRR3IkBqIiUgFmogPiAfaiAmICJzQRh3Ij4gQWoiQSBCc0EZdyJCaiIiIA1qICIgM3NBEH\\\nciMyA7aiI7IEJzQRR3IkJqIiIgM3NBGHciMyA7aiI7IEJzQRl3IkJqIiYgDmogJiAjIBNqIDwgL3NB\\\nGXciL2oiPCAQaiA8ID5zQRB3IjwgNSA9aiI1aiI9IC9zQRR3Ii9qIj4gPHNBGHciPHNBEHciIyA/IA\\\npqIDUgBnNBGXciBmoiNSAUaiA1IDFzQRB3IjEgQWoiNSAGc0EUdyIGaiI/IDFzQRh3IjEgNWoiNWoi\\\nQSBCc0EUdyJCaiImIBRqID4gD2ogJSAkc0EYdyI+ICFqIiEgQHNBGXciQGoiJCARaiAkIDFzQRB3Ij\\\nEgO2oiOyBAc0EUdyJAaiIkIDFzQRh3IiUgO2oiMSBAc0EZdyI7aiJAIBNqIEAgIiASaiA1IAZzQRl3\\\nIgZqIjUgH2ogNSA+c0EQdyI1IDwgPWoiPGoiPSAGc0EUdyI+aiIiIDVzQRh3IjVzQRB3IgYgPyAMai\\\nA8IC9zQRl3Ii9qIjwgCGogPCAzc0EQdyIzICFqIjwgL3NBFHciP2oiQCAzc0EYdyIvIDxqIjxqIjMg\\\nO3NBFHciO2oiISAGc0EYdyIGIBlzNgI0IAMgIiAVaiAmICNzQRh3IiIgQWoiQSBCc0EZdyJCaiIjIA\\\ntqICMgL3NBEHciLyAxaiIxIEJzQRR3IkJqIiMgL3NBGHciLyAaczYCMCADIC8gMWoiMSAbczYCLCAD\\\nIAYgM2oiMyAeczYCICADIDEgJCAQaiA8ID9zQRl3IjxqIj8gCmogPyAic0EQdyI/IDUgPWoiNWoiPS\\\nA8c0EUdyI8aiIiczYCDCADIDMgQCAJaiA1ID5zQRl3IjVqIj4gDWogPiAlc0EQdyI+IEFqIkAgNXNB\\\nFHciQWoiJHM2AgAgAyAiID9zQRh3IjUgGHM2AjggAyAxIEJzQRl3IDVzNgIYIAMgJCA+c0EYdyIxIB\\\ndzNgI8IAMgNSA9aiI1IB1zNgIkIAMgMyA7c0EZdyAxczYCHCADIDUgI3M2AgQgAyAxIEBqIjEgHHM2\\\nAiggAyAxICFzNgIIIAMgNSA8c0EZdyAvczYCECADIDEgQXNBGXcgBnM2AhQgB0H/AXEiL0HBAE8NBU\\\nEAIAcgAUHAACAvayIGIAEgBkkbIgZqIgcgB0H/AXFBwABGIjEbIQcgOiADIC9qIAYQZSAGaiE6IGIg\\\nMa18IWIgASAGayIBDQALCyAAIAI2AgQgACAENgIAIANB0AFqJAAPCxBKAAsACyAIIAVBzIfAABBAAA\\\nsgL0HAAEHsh8AAED4AC4UuAgN/J34gACABKQAoIgYgAEEwaiIDKQMAIgcgACkDECIIfCABKQAgIgl8\\\nIgp8IAogAoVC6/qG2r+19sEfhUIgiSILQqvw0/Sv7ry3PHwiDCAHhUIoiSINfCIOIAEpAGAiAnwgAS\\\nkAOCIHIABBOGoiBCkDACIPIAApAxgiEHwgASkAMCIKfCIRfCARQvnC+JuRo7Pw2wCFQiCJIhFC8e30\\\n+KWn/aelf3wiEiAPhUIoiSIPfCITIBGFQjCJIhQgEnwiFSAPhUIBiSIWfCIXIAEpAGgiD3wgFyABKQ\\\nAYIhEgAEEoaiIFKQMAIhggACkDCCIZfCABKQAQIhJ8Ihp8IBpCn9j52cKR2oKbf4VCIIkiGkK7zqqm\\\n2NDrs7t/fCIbIBiFQiiJIhx8Ih0gGoVCMIkiHoVCIIkiHyABKQAIIhcgACkDICIgIAApAwAiIXwgAS\\\nkAACIYfCIafCAAKQNAIBqFQtGFmu/6z5SH0QCFQiCJIhpCiJLznf/M+YTqAHwiIiAghUIoiSIjfCIk\\\nIBqFQjCJIiUgInwiInwiJiAWhUIoiSInfCIoIAEpAEgiFnwgHSABKQBQIhp8IA4gC4VCMIkiDiAMfC\\\nIdIA2FQgGJIgx8Ig0gASkAWCILfCANICWFQiCJIg0gFXwiFSAMhUIoiSIMfCIlIA2FQjCJIikgFXwi\\\nFSAMhUIBiSIqfCIrIAEpAHgiDHwgKyATIAEpAHAiDXwgIiAjhUIBiSITfCIiIAx8ICIgDoVCIIkiDi\\\nAeIBt8Iht8Ih4gE4VCKIkiE3wiIiAOhUIwiSIjhUIgiSIrICQgASkAQCIOfCAbIByFQgGJIht8Ihwg\\\nFnwgHCAUhUIgiSIUIB18IhwgG4VCKIkiG3wiHSAUhUIwiSIUIBx8Ihx8IiQgKoVCKIkiKnwiLCALfC\\\nAiIA98ICggH4VCMIkiHyAmfCIiICeFQgGJIiZ8IicgCnwgJyAUhUIgiSIUIBV8IhUgJoVCKIkiJnwi\\\nJyAUhUIwiSIUIBV8IhUgJoVCAYkiJnwiKCAHfCAoICUgCXwgHCAbhUIBiSIbfCIcIA58IBwgH4VCII\\\nkiHCAjIB58Ih58Ih8gG4VCKIkiG3wiIyAchUIwiSIchUIgiSIlIB0gDXwgHiAThUIBiSITfCIdIBp8\\\nIB0gKYVCIIkiHSAifCIeIBOFQiiJIhN8IiIgHYVCMIkiHSAefCIefCIoICaFQiiJIiZ8IikgBnwgIy\\\nAYfCAsICuFQjCJIiMgJHwiJCAqhUIBiSIqfCIrIBJ8ICsgHYVCIIkiHSAVfCIVICqFQiiJIip8Iisg\\\nHYVCMIkiHSAVfCIVICqFQgGJIip8IiwgEnwgLCAnIAZ8IB4gE4VCAYkiE3wiHiARfCAeICOFQiCJIh\\\n4gHCAffCIcfCIfIBOFQiiJIhN8IiMgHoVCMIkiHoVCIIkiJyAiIBd8IBwgG4VCAYkiG3wiHCACfCAc\\\nIBSFQiCJIhQgJHwiHCAbhUIoiSIbfCIiIBSFQjCJIhQgHHwiHHwiJCAqhUIoiSIqfCIsIAd8ICMgDH\\\nwgKSAlhUIwiSIjICh8IiUgJoVCAYkiJnwiKCAPfCAoIBSFQiCJIhQgFXwiFSAmhUIoiSImfCIoIBSF\\\nQjCJIhQgFXwiFSAmhUIBiSImfCIpIBd8ICkgKyACfCAcIBuFQgGJIht8IhwgGHwgHCAjhUIgiSIcIB\\\n4gH3wiHnwiHyAbhUIoiSIbfCIjIByFQjCJIhyFQiCJIikgIiALfCAeIBOFQgGJIhN8Ih4gDnwgHiAd\\\nhUIgiSIdICV8Ih4gE4VCKIkiE3wiIiAdhUIwiSIdIB58Ih58IiUgJoVCKIkiJnwiKyAPfCAjIBF8IC\\\nwgJ4VCMIkiIyAkfCIkICqFQgGJIid8IiogCnwgKiAdhUIgiSIdIBV8IhUgJ4VCKIkiJ3wiKiAdhUIw\\\niSIdIBV8IhUgJ4VCAYkiJ3wiLCACfCAsICggFnwgHiAThUIBiSITfCIeIAl8IB4gI4VCIIkiHiAcIB\\\n98Ihx8Ih8gE4VCKIkiE3wiIyAehUIwiSIehUIgiSIoICIgGnwgHCAbhUIBiSIbfCIcIA18IBwgFIVC\\\nIIkiFCAkfCIcIBuFQiiJIht8IiIgFIVCMIkiFCAcfCIcfCIkICeFQiiJIid8IiwgCXwgIyALfCArIC\\\nmFQjCJIiMgJXwiJSAmhUIBiSImfCIpIA18ICkgFIVCIIkiFCAVfCIVICaFQiiJIiZ8IikgFIVCMIki\\\nFCAVfCIVICaFQgGJIiZ8IisgGHwgKyAqIBF8IBwgG4VCAYkiG3wiHCAXfCAcICOFQiCJIhwgHiAffC\\\nIefCIfIBuFQiiJIht8IiMgHIVCMIkiHIVCIIkiKiAiIAd8IB4gE4VCAYkiE3wiHiAWfCAeIB2FQiCJ\\\nIh0gJXwiHiAThUIoiSITfCIiIB2FQjCJIh0gHnwiHnwiJSAmhUIoiSImfCIrIBJ8ICMgBnwgLCAohU\\\nIwiSIjICR8IiQgJ4VCAYkiJ3wiKCAafCAoIB2FQiCJIh0gFXwiFSAnhUIoiSInfCIoIB2FQjCJIh0g\\\nFXwiFSAnhUIBiSInfCIsIAl8ICwgKSAMfCAeIBOFQgGJIhN8Ih4gDnwgHiAjhUIgiSIeIBwgH3wiHH\\\nwiHyAThUIoiSITfCIjIB6FQjCJIh6FQiCJIikgIiASfCAcIBuFQgGJIht8IhwgCnwgHCAUhUIgiSIU\\\nICR8IhwgG4VCKIkiG3wiIiAUhUIwiSIUIBx8Ihx8IiQgJ4VCKIkiJ3wiLCAKfCAjIBp8ICsgKoVCMI\\\nkiIyAlfCIlICaFQgGJIiZ8IiogDHwgKiAUhUIgiSIUIBV8IhUgJoVCKIkiJnwiKiAUhUIwiSIUIBV8\\\nIhUgJoVCAYkiJnwiKyAOfCArICggBnwgHCAbhUIBiSIbfCIcIAd8IBwgI4VCIIkiHCAeIB98Ih58Ih\\\n8gG4VCKIkiG3wiIyAchUIwiSIchUIgiSIoICIgFnwgHiAThUIBiSITfCIeIBh8IB4gHYVCIIkiHSAl\\\nfCIeIBOFQiiJIhN8IiIgHYVCMIkiHSAefCIefCIlICaFQiiJIiZ8IisgGHwgIyALfCAsICmFQjCJIi\\\nMgJHwiJCAnhUIBiSInfCIpIAJ8ICkgHYVCIIkiHSAVfCIVICeFQiiJIid8IikgHYVCMIkiHSAVfCIV\\\nICeFQgGJIid8IiwgC3wgLCAqIBF8IB4gE4VCAYkiE3wiHiAPfCAeICOFQiCJIh4gHCAffCIcfCIfIB\\\nOFQiiJIhN8IiMgHoVCMIkiHoVCIIkiKiAiIA18IBwgG4VCAYkiG3wiHCAXfCAcIBSFQiCJIhQgJHwi\\\nHCAbhUIoiSIbfCIiIBSFQjCJIhQgHHwiHHwiJCAnhUIoiSInfCIsIAx8ICMgDnwgKyAohUIwiSIjIC\\\nV8IiUgJoVCAYkiJnwiKCARfCAoIBSFQiCJIhQgFXwiFSAmhUIoiSImfCIoIBSFQjCJIhQgFXwiFSAm\\\nhUIBiSImfCIrIA18ICsgKSAKfCAcIBuFQgGJIht8IhwgGnwgHCAjhUIgiSIcIB4gH3wiHnwiHyAbhU\\\nIoiSIbfCIjIByFQjCJIhyFQiCJIikgIiASfCAeIBOFQgGJIhN8Ih4gAnwgHiAdhUIgiSIdICV8Ih4g\\\nE4VCKIkiE3wiIiAdhUIwiSIdIB58Ih58IiUgJoVCKIkiJnwiKyANfCAjIAd8ICwgKoVCMIkiIyAkfC\\\nIkICeFQgGJIid8IiogBnwgKiAdhUIgiSIdIBV8IhUgJ4VCKIkiJ3wiKiAdhUIwiSIdIBV8IhUgJ4VC\\\nAYkiJ3wiLCAPfCAsICggF3wgHiAThUIBiSITfCIeIBZ8IB4gI4VCIIkiHiAcIB98Ihx8Ih8gE4VCKI\\\nkiE3wiIyAehUIwiSIehUIgiSIoICIgCXwgHCAbhUIBiSIbfCIcIA98IBwgFIVCIIkiFCAkfCIcIBuF\\\nQiiJIht8IiIgFIVCMIkiFCAcfCIcfCIkICeFQiiJIid8IiwgFnwgIyAJfCArICmFQjCJIiMgJXwiJS\\\nAmhUIBiSImfCIpIBp8ICkgFIVCIIkiFCAVfCIVICaFQiiJIiZ8IikgFIVCMIkiFCAVfCIVICaFQgGJ\\\nIiZ8IisgEnwgKyAqIBd8IBwgG4VCAYkiG3wiHCAMfCAcICOFQiCJIhwgHiAffCIefCIfIBuFQiiJIh\\\nt8IiMgHIVCMIkiHIVCIIkiKiAiIAJ8IB4gE4VCAYkiE3wiHiAGfCAeIB2FQiCJIh0gJXwiHiAThUIo\\\niSITfCIiIB2FQjCJIh0gHnwiHnwiJSAmhUIoiSImfCIrIAJ8ICMgCnwgLCAohUIwiSIjICR8IiQgJ4\\\nVCAYkiJ3wiKCARfCAoIB2FQiCJIh0gFXwiFSAnhUIoiSInfCIoIB2FQjCJIh0gFXwiFSAnhUIBiSIn\\\nfCIsIBd8ICwgKSAOfCAeIBOFQgGJIhN8Ih4gC3wgHiAjhUIgiSIeIBwgH3wiHHwiHyAThUIoiSITfC\\\nIjIB6FQjCJIh6FQiCJIikgIiAYfCAcIBuFQgGJIht8IhwgB3wgHCAUhUIgiSIUICR8IhwgG4VCKIki\\\nG3wiIiAUhUIwiSIUIBx8Ihx8IiQgJ4VCKIkiJ3wiLCAOfCAjIBF8ICsgKoVCMIkiIyAlfCIlICaFQg\\\nGJIiZ8IiogFnwgKiAUhUIgiSIUIBV8IhUgJoVCKIkiJnwiKiAUhUIwiSIUIBV8IhUgJoVCAYkiJnwi\\\nKyAKfCArICggB3wgHCAbhUIBiSIbfCIcIA18IBwgI4VCIIkiHCAeIB98Ih58Ih8gG4VCKIkiG3wiIy\\\nAchUIwiSIchUIgiSIoICIgD3wgHiAThUIBiSITfCIeIAt8IB4gHYVCIIkiHSAlfCIeIBOFQiiJIhN8\\\nIiIgHYVCMIkiHSAefCIefCIlICaFQiiJIiZ8IisgC3wgIyAMfCAsICmFQjCJIiMgJHwiJCAnhUIBiS\\\nInfCIpIAl8ICkgHYVCIIkiHSAVfCIVICeFQiiJIid8IikgHYVCMIkiHSAVfCIVICeFQgGJIid8Iiwg\\\nEXwgLCAqIBJ8IB4gE4VCAYkiE3wiHiAafCAeICOFQiCJIh4gHCAffCIcfCIfIBOFQiiJIhN8IiMgHo\\\nVCMIkiHoVCIIkiKiAiIAZ8IBwgG4VCAYkiG3wiHCAYfCAcIBSFQiCJIhQgJHwiHCAbhUIoiSIbfCIi\\\nIBSFQjCJIhQgHHwiHHwiJCAnhUIoiSInfCIsIBd8ICMgGHwgKyAohUIwiSIjICV8IiUgJoVCAYkiJn\\\nwiKCAOfCAoIBSFQiCJIhQgFXwiFSAmhUIoiSImfCIoIBSFQjCJIhQgFXwiFSAmhUIBiSImfCIrIAl8\\\nICsgKSANfCAcIBuFQgGJIht8IhwgFnwgHCAjhUIgiSIcIB4gH3wiHnwiHyAbhUIoiSIbfCIjIByFQj\\\nCJIhyFQiCJIikgIiAKfCAeIBOFQgGJIhN8Ih4gDHwgHiAdhUIgiSIdICV8Ih4gE4VCKIkiE3wiIiAd\\\nhUIwiSIdIB58Ih58IiUgJoVCKIkiJnwiKyAHfCAjIA98ICwgKoVCMIkiIyAkfCIkICeFQgGJIid8Ii\\\nogB3wgKiAdhUIgiSIdIBV8IhUgJ4VCKIkiJ3wiKiAdhUIwiSIdIBV8IhUgJ4VCAYkiJ3wiLCAKfCAs\\\nICggGnwgHiAThUIBiSITfCIeIAZ8IB4gI4VCIIkiHiAcIB98Ihx8Ih8gE4VCKIkiE3wiIyAehUIwiS\\\nIehUIgiSIoICIgAnwgHCAbhUIBiSIbfCIcIBJ8IBwgFIVCIIkiFCAkfCIcIBuFQiiJIht8IiIgFIVC\\\nMIkiFCAcfCIcfCIkICeFQiiJIid8IiwgEXwgIyAXfCArICmFQjCJIiMgJXwiJSAmhUIBiSImfCIpIA\\\nZ8ICkgFIVCIIkiFCAVfCIVICaFQiiJIiZ8IikgFIVCMIkiFCAVfCIVICaFQgGJIiZ8IisgAnwgKyAq\\\nIA58IBwgG4VCAYkiG3wiHCAJfCAcICOFQiCJIhwgHiAffCIefCIfIBuFQiiJIht8IiMgHIVCMIkiHI\\\nVCIIkiKiAiIBp8IB4gE4VCAYkiE3wiHiASfCAeIB2FQiCJIh0gJXwiHiAThUIoiSITfCIiIB2FQjCJ\\\nIh0gHnwiHnwiJSAmhUIoiSImfCIrIAl8ICMgFnwgLCAohUIwiSIjICR8IiQgJ4VCAYkiJ3wiKCANfC\\\nAoIB2FQiCJIh0gFXwiFSAnhUIoiSInfCIoIB2FQjCJIh0gFXwiFSAnhUIBiSInfCIsIAZ8ICwgKSAP\\\nfCAeIBOFQgGJIhN8Ih4gGHwgHiAjhUIgiSIeIBwgH3wiHHwiHyAThUIoiSITfCIjIB6FQjCJIh6FQi\\\nCJIikgIiAMfCAcIBuFQgGJIht8IhwgC3wgHCAUhUIgiSIUICR8IhwgG4VCKIkiG3wiIiAUhUIwiSIU\\\nIBx8Ihx8IiQgJ4VCKIkiJ3wiLCACfCAjIAp8ICsgKoVCMIkiIyAlfCIlICaFQgGJIiZ8IiogB3wgKi\\\nAUhUIgiSIUIBV8IhUgJoVCKIkiJnwiKiAUhUIwiSIUIBV8IhUgJoVCAYkiJnwiKyAPfCArICggEnwg\\\nHCAbhUIBiSIbfCIcIBF8IBwgI4VCIIkiHCAeIB98Ih58Ih8gG4VCKIkiG3wiIyAchUIwiSIchUIgiS\\\nIoICIgGHwgHiAThUIBiSITfCIeIBd8IB4gHYVCIIkiHSAlfCIeIBOFQiiJIhN8IiIgHYVCMIkiHSAe\\\nfCIefCIlICaFQiiJIiZ8IisgFnwgIyAafCAsICmFQjCJIiMgJHwiJCAnhUIBiSInfCIpIAt8ICkgHY\\\nVCIIkiHSAVfCIVICeFQiiJIid8IikgHYVCMIkiHSAVfCIVICeFQgGJIid8IiwgDHwgLCAqIA18IB4g\\\nE4VCAYkiE3wiHiAMfCAeICOFQiCJIgwgHCAffCIcfCIeIBOFQiiJIhN8Ih8gDIVCMIkiDIVCIIkiIy\\\nAiIA58IBwgG4VCAYkiG3wiHCAWfCAcIBSFQiCJIhYgJHwiFCAbhUIoiSIbfCIcIBaFQjCJIhYgFHwi\\\nFHwiIiAnhUIoiSIkfCInIAt8IB8gD3wgKyAohUIwiSIPICV8IgsgJoVCAYkiH3wiJSAKfCAlIBaFQi\\\nCJIgogFXwiFiAfhUIoiSIVfCIfIAqFQjCJIgogFnwiFiAVhUIBiSIVfCIlIAd8ICUgKSAJfCAUIBuF\\\nQgGJIgl8IgcgDnwgByAPhUIgiSIHIAwgHnwiD3wiDCAJhUIoiSIJfCIOIAeFQjCJIgeFQiCJIhQgHC\\\nANfCAPIBOFQgGJIg98Ig0gGnwgDSAdhUIgiSIaIAt8IgsgD4VCKIkiD3wiDSAahUIwiSIaIAt8Igt8\\\nIhMgFYVCKIkiFXwiGyAIhSANIBd8IAcgDHwiByAJhUIBiSIJfCIXIAJ8IBcgCoVCIIkiAiAnICOFQj\\\nCJIgogInwiF3wiDCAJhUIoiSIJfCINIAKFQjCJIgIgDHwiDIU3AxAgACAZIBIgDiAYfCAXICSFQgGJ\\\nIhd8Ihh8IBggGoVCIIkiEiAWfCIYIBeFQiiJIhd8IhaFIBEgHyAGfCALIA+FQgGJIgZ8Ig98IA8gCo\\\nVCIIkiCiAHfCIHIAaFQiiJIgZ8Ig8gCoVCMIkiCiAHfCIHhTcDCCAAIA0gIYUgGyAUhUIwiSIRIBN8\\\nIhqFNwMAIAAgDyAQhSAWIBKFQjCJIg8gGHwiEoU3AxggBSAFKQMAIAwgCYVCAYmFIBGFNwMAIAQgBC\\\nkDACAaIBWFQgGJhSAChTcDACAAICAgByAGhUIBiYUgD4U3AyAgAyADKQMAIBIgF4VCAYmFIAqFNwMA\\\nC4UsASB/IAAgASgALCICIAEoACgiAyABKAAUIgQgBCABKAA0IgUgAyAEIAEoABwiBiABKAAkIgcgAS\\\ngAICIIIAcgASgAGCIJIAYgAiAJIAEoAAQiCiAAKAIQIgtqIAAoAggiDEEKdyINIAAoAgQiDnMgDCAO\\\ncyAAKAIMIg9zIAAoAgAiEGogASgAACIRakELdyALaiISc2pBDncgD2oiE0EKdyIUaiABKAAQIhUgDk\\\nEKdyIWaiABKAAIIhcgD2ogEiAWcyATc2pBD3cgDWoiGCAUcyABKAAMIhkgDWogEyASQQp3IhJzIBhz\\\nakEMdyAWaiITc2pBBXcgEmoiGiATQQp3IhtzIAQgEmogEyAYQQp3IhJzIBpzakEIdyAUaiITc2pBB3\\\ncgEmoiFEEKdyIYaiAHIBpBCnciGmogEiAGaiATIBpzIBRzakEJdyAbaiISIBhzIBsgCGogFCATQQp3\\\nIhNzIBJzakELdyAaaiIUc2pBDXcgE2oiGiAUQQp3IhtzIBMgA2ogFCASQQp3IhNzIBpzakEOdyAYai\\\nIUc2pBD3cgE2oiGEEKdyIcaiAbIAVqIBggFEEKdyIdcyATIAEoADAiEmogFCAaQQp3IhpzIBhzakEG\\\ndyAbaiIUc2pBB3cgGmoiGEEKdyIbIB0gASgAPCITaiAYIBRBCnciHnMgGiABKAA4IgFqIBQgHHMgGH\\\nNqQQl3IB1qIhpzakEIdyAcaiIUQX9zcWogFCAacWpBmfOJ1AVqQQd3IB5qIhhBCnciHGogBSAbaiAU\\\nQQp3Ih0gFSAeaiAaQQp3IhogGEF/c3FqIBggFHFqQZnzidQFakEGdyAbaiIUQX9zcWogFCAYcWpBmf\\\nOJ1AVqQQh3IBpqIhhBCnciGyADIB1qIBRBCnciHiAKIBpqIBwgGEF/c3FqIBggFHFqQZnzidQFakEN\\\ndyAdaiIUQX9zcWogFCAYcWpBmfOJ1AVqQQt3IBxqIhhBf3NxaiAYIBRxakGZ84nUBWpBCXcgHmoiGk\\\nEKdyIcaiAZIBtqIBhBCnciHSATIB5qIBRBCnciHiAaQX9zcWogGiAYcWpBmfOJ1AVqQQd3IBtqIhRB\\\nf3NxaiAUIBpxakGZ84nUBWpBD3cgHmoiGEEKdyIbIBEgHWogFEEKdyIfIBIgHmogHCAYQX9zcWogGC\\\nAUcWpBmfOJ1AVqQQd3IB1qIhRBf3NxaiAUIBhxakGZ84nUBWpBDHcgHGoiGEF/c3FqIBggFHFqQZnz\\\nidQFakEPdyAfaiIaQQp3IhxqIBcgG2ogGEEKdyIdIAQgH2ogFEEKdyIeIBpBf3NxaiAaIBhxakGZ84\\\nnUBWpBCXcgG2oiFEF/c3FqIBQgGnFqQZnzidQFakELdyAeaiIYQQp3IhogAiAdaiAUQQp3IhsgASAe\\\naiAcIBhBf3NxaiAYIBRxakGZ84nUBWpBB3cgHWoiFEF/c3FqIBQgGHFqQZnzidQFakENdyAcaiIYQX\\\n9zIh5xaiAYIBRxakGZ84nUBWpBDHcgG2oiHEEKdyIdaiAVIBhBCnciGGogASAUQQp3IhRqIAMgGmog\\\nGSAbaiAcIB5yIBRzakGh1+f2BmpBC3cgGmoiGiAcQX9zciAYc2pBodfn9gZqQQ13IBRqIhQgGkF/c3\\\nIgHXNqQaHX5/YGakEGdyAYaiIYIBRBf3NyIBpBCnciGnNqQaHX5/YGakEHdyAdaiIbIBhBf3NyIBRB\\\nCnciFHNqQaHX5/YGakEOdyAaaiIcQQp3Ih1qIBcgG0EKdyIeaiAKIBhBCnciGGogCCAUaiATIBpqIB\\\nwgG0F/c3IgGHNqQaHX5/YGakEJdyAUaiIUIBxBf3NyIB5zakGh1+f2BmpBDXcgGGoiGCAUQX9zciAd\\\nc2pBodfn9gZqQQ93IB5qIhogGEF/c3IgFEEKdyIUc2pBodfn9gZqQQ53IB1qIhsgGkF/c3IgGEEKdy\\\nIYc2pBodfn9gZqQQh3IBRqIhxBCnciHWogAiAbQQp3Ih5qIAUgGkEKdyIaaiAJIBhqIBEgFGogHCAb\\\nQX9zciAac2pBodfn9gZqQQ13IBhqIhQgHEF/c3IgHnNqQaHX5/YGakEGdyAaaiIYIBRBf3NyIB1zak\\\nGh1+f2BmpBBXcgHmoiGiAYQX9zciAUQQp3IhtzakGh1+f2BmpBDHcgHWoiHCAaQX9zciAYQQp3Ihhz\\\nakGh1+f2BmpBB3cgG2oiHUEKdyIUaiAHIBpBCnciGmogEiAbaiAdIBxBf3NyIBpzakGh1+f2BmpBBX\\\ncgGGoiGyAUQX9zcWogCiAYaiAdIBxBCnciGEF/c3FqIBsgGHFqQdz57vh4akELdyAaaiIcIBRxakHc\\\n+e74eGpBDHcgGGoiHSAcQQp3IhpBf3NxaiACIBhqIBwgG0EKdyIYQX9zcWogHSAYcWpB3Pnu+HhqQQ\\\n53IBRqIhwgGnFqQdz57vh4akEPdyAYaiIeQQp3IhRqIBIgHUEKdyIbaiARIBhqIBwgG0F/c3FqIB4g\\\nG3FqQdz57vh4akEOdyAaaiIdIBRBf3NxaiAIIBpqIB4gHEEKdyIYQX9zcWogHSAYcWpB3Pnu+HhqQQ\\\n93IBtqIhsgFHFqQdz57vh4akEJdyAYaiIcIBtBCnciGkF/c3FqIBUgGGogGyAdQQp3IhhBf3NxaiAc\\\nIBhxakHc+e74eGpBCHcgFGoiHSAacWpB3Pnu+HhqQQl3IBhqIh5BCnciFGogEyAcQQp3IhtqIBkgGG\\\nogHSAbQX9zcWogHiAbcWpB3Pnu+HhqQQ53IBpqIhwgFEF/c3FqIAYgGmogHiAdQQp3IhhBf3NxaiAc\\\nIBhxakHc+e74eGpBBXcgG2oiGyAUcWpB3Pnu+HhqQQZ3IBhqIh0gG0EKdyIaQX9zcWogASAYaiAbIB\\\nxBCnciGEF/c3FqIB0gGHFqQdz57vh4akEIdyAUaiIcIBpxakHc+e74eGpBBncgGGoiHkEKdyIfaiAR\\\nIBxBCnciFGogFSAdQQp3IhtqIBcgGmogHiAUQX9zcWogCSAYaiAcIBtBf3NxaiAeIBtxakHc+e74eG\\\npBBXcgGmoiGCAUcWpB3Pnu+HhqQQx3IBtqIhogGCAfQX9zcnNqQc76z8p6akEJdyAUaiIUIBogGEEK\\\ndyIYQX9zcnNqQc76z8p6akEPdyAfaiIbIBQgGkEKdyIaQX9zcnNqQc76z8p6akEFdyAYaiIcQQp3Ih\\\n1qIBcgG0EKdyIeaiASIBRBCnciFGogBiAaaiAHIBhqIBwgGyAUQX9zcnNqQc76z8p6akELdyAaaiIY\\\nIBwgHkF/c3JzakHO+s/KempBBncgFGoiFCAYIB1Bf3Nyc2pBzvrPynpqQQh3IB5qIhogFCAYQQp3Ih\\\nhBf3Nyc2pBzvrPynpqQQ13IB1qIhsgGiAUQQp3IhRBf3Nyc2pBzvrPynpqQQx3IBhqIhxBCnciHWog\\\nCCAbQQp3Ih5qIBkgGkEKdyIaaiAKIBRqIAEgGGogHCAbIBpBf3Nyc2pBzvrPynpqQQV3IBRqIhQgHC\\\nAeQX9zcnNqQc76z8p6akEMdyAaaiIYIBQgHUF/c3JzakHO+s/KempBDXcgHmoiGiAYIBRBCnciFEF/\\\nc3JzakHO+s/KempBDncgHWoiGyAaIBhBCnciGEF/c3JzakHO+s/KempBC3cgFGoiHEEKdyIgIAAoAg\\\nxqIAcgESAVIBEgAiAZIAogEyARIBIgEyAXIBAgDCAPQX9zciAOc2ogBGpB5peKhQVqQQh3IAtqIh1B\\\nCnciHmogFiAHaiANIBFqIA8gBmogCyAdIA4gDUF/c3JzaiABakHml4qFBWpBCXcgD2oiDyAdIBZBf3\\\nNyc2pB5peKhQVqQQl3IA1qIg0gDyAeQX9zcnNqQeaXioUFakELdyAWaiIWIA0gD0EKdyIPQX9zcnNq\\\nQeaXioUFakENdyAeaiILIBYgDUEKdyINQX9zcnNqQeaXioUFakEPdyAPaiIdQQp3Ih5qIAkgC0EKdy\\\nIfaiAFIBZBCnciFmogFSANaiACIA9qIB0gCyAWQX9zcnNqQeaXioUFakEPdyANaiINIB0gH0F/c3Jz\\\nakHml4qFBWpBBXcgFmoiDyANIB5Bf3Nyc2pB5peKhQVqQQd3IB9qIhYgDyANQQp3Ig1Bf3Nyc2pB5p\\\neKhQVqQQd3IB5qIgsgFiAPQQp3Ig9Bf3Nyc2pB5peKhQVqQQh3IA1qIh1BCnciHmogGSALQQp3Ih9q\\\nIAMgFkEKdyIWaiAKIA9qIAggDWogHSALIBZBf3Nyc2pB5peKhQVqQQt3IA9qIg0gHSAfQX9zcnNqQe\\\naXioUFakEOdyAWaiIPIA0gHkF/c3JzakHml4qFBWpBDncgH2oiFiAPIA1BCnciC0F/c3JzakHml4qF\\\nBWpBDHcgHmoiHSAWIA9BCnciHkF/c3JzakHml4qFBWpBBncgC2oiH0EKdyINaiAZIBZBCnciD2ogCS\\\nALaiAdIA9Bf3NxaiAfIA9xakGkorfiBWpBCXcgHmoiCyANQX9zcWogAiAeaiAfIB1BCnciFkF/c3Fq\\\nIAsgFnFqQaSit+IFakENdyAPaiIdIA1xakGkorfiBWpBD3cgFmoiHiAdQQp3Ig9Bf3NxaiAGIBZqIB\\\n0gC0EKdyIWQX9zcWogHiAWcWpBpKK34gVqQQd3IA1qIh0gD3FqQaSit+IFakEMdyAWaiIfQQp3Ig1q\\\nIAMgHkEKdyILaiAFIBZqIB0gC0F/c3FqIB8gC3FqQaSit+IFakEIdyAPaiIeIA1Bf3NxaiAEIA9qIB\\\n8gHUEKdyIPQX9zcWogHiAPcWpBpKK34gVqQQl3IAtqIgsgDXFqQaSit+IFakELdyAPaiIdIAtBCnci\\\nFkF/c3FqIAEgD2ogCyAeQQp3Ig9Bf3NxaiAdIA9xakGkorfiBWpBB3cgDWoiHiAWcWpBpKK34gVqQQ\\\nd3IA9qIh9BCnciDWogFSAdQQp3IgtqIAggD2ogHiALQX9zcWogHyALcWpBpKK34gVqQQx3IBZqIh0g\\\nDUF/c3FqIBIgFmogHyAeQQp3Ig9Bf3NxaiAdIA9xakGkorfiBWpBB3cgC2oiCyANcWpBpKK34gVqQQ\\\nZ3IA9qIh4gC0EKdyIWQX9zcWogByAPaiALIB1BCnciD0F/c3FqIB4gD3FqQaSit+IFakEPdyANaiIL\\\nIBZxakGkorfiBWpBDXcgD2oiHUEKdyIfaiAKIAtBCnciIWogBCAeQQp3Ig1qIBMgFmogFyAPaiALIA\\\n1Bf3NxaiAdIA1xakGkorfiBWpBC3cgFmoiDyAdQX9zciAhc2pB8/3A6wZqQQl3IA1qIg0gD0F/c3Ig\\\nH3NqQfP9wOsGakEHdyAhaiIWIA1Bf3NyIA9BCnciD3NqQfP9wOsGakEPdyAfaiILIBZBf3NyIA1BCn\\\nciDXNqQfP9wOsGakELdyAPaiIdQQp3Ih5qIAcgC0EKdyIfaiAJIBZBCnciFmogASANaiAGIA9qIB0g\\\nC0F/c3IgFnNqQfP9wOsGakEIdyANaiINIB1Bf3NyIB9zakHz/cDrBmpBBncgFmoiDyANQX9zciAec2\\\npB8/3A6wZqQQZ3IB9qIhYgD0F/c3IgDUEKdyINc2pB8/3A6wZqQQ53IB5qIgsgFkF/c3IgD0EKdyIP\\\nc2pB8/3A6wZqQQx3IA1qIh1BCnciHmogAyALQQp3Ih9qIBcgFkEKdyIWaiASIA9qIAggDWogHSALQX\\\n9zciAWc2pB8/3A6wZqQQ13IA9qIg0gHUF/c3IgH3NqQfP9wOsGakEFdyAWaiIPIA1Bf3NyIB5zakHz\\\n/cDrBmpBDncgH2oiFiAPQX9zciANQQp3Ig1zakHz/cDrBmpBDXcgHmoiCyAWQX9zciAPQQp3Ig9zak\\\nHz/cDrBmpBDXcgDWoiHUEKdyIeaiAFIA9qIBUgDWogHSALQX9zciAWQQp3IhZzakHz/cDrBmpBB3cg\\\nD2oiDyAdQX9zciALQQp3IgtzakHz/cDrBmpBBXcgFmoiDUEKdyIdIAkgC2ogD0EKdyIfIAggFmogHi\\\nANQX9zcWogDSAPcWpB6e210wdqQQ93IAtqIg9Bf3NxaiAPIA1xakHp7bXTB2pBBXcgHmoiDUF/c3Fq\\\nIA0gD3FqQenttdMHakEIdyAfaiIWQQp3IgtqIBkgHWogDUEKdyIeIAogH2ogD0EKdyIfIBZBf3Nxai\\\nAWIA1xakHp7bXTB2pBC3cgHWoiDUF/c3FqIA0gFnFqQenttdMHakEOdyAfaiIPQQp3Ih0gEyAeaiAN\\\nQQp3IiEgAiAfaiALIA9Bf3NxaiAPIA1xakHp7bXTB2pBDncgHmoiDUF/c3FqIA0gD3FqQenttdMHak\\\nEGdyALaiIPQX9zcWogDyANcWpB6e210wdqQQ53ICFqIhZBCnciC2ogEiAdaiAPQQp3Ih4gBCAhaiAN\\\nQQp3Ih8gFkF/c3FqIBYgD3FqQenttdMHakEGdyAdaiINQX9zcWogDSAWcWpB6e210wdqQQl3IB9qIg\\\n9BCnciHSAFIB5qIA1BCnciISAXIB9qIAsgD0F/c3FqIA8gDXFqQenttdMHakEMdyAeaiINQX9zcWog\\\nDSAPcWpB6e210wdqQQl3IAtqIg9Bf3NxaiAPIA1xakHp7bXTB2pBDHcgIWoiFkEKdyILIBNqIAEgDU\\\nEKdyIeaiALIAMgHWogD0EKdyIfIAYgIWogHiAWQX9zcWogFiAPcWpB6e210wdqQQV3IB1qIg1Bf3Nx\\\naiANIBZxakHp7bXTB2pBD3cgHmoiD0F/c3FqIA8gDXFqQenttdMHakEIdyAfaiIWIA9BCnciHXMgHy\\\nASaiAPIA1BCnciEnMgFnNqQQh3IAtqIg1zakEFdyASaiIPQQp3IgsgCGogFkEKdyIIIApqIBIgA2og\\\nDSAIcyAPc2pBDHcgHWoiAyALcyAdIBVqIA8gDUEKdyIKcyADc2pBCXcgCGoiCHNqQQx3IApqIhUgCE\\\nEKdyIScyAKIARqIAggA0EKdyIDcyAVc2pBBXcgC2oiBHNqQQ53IANqIghBCnciCiABaiAVQQp3IgEg\\\nF2ogAyAGaiAEIAFzIAhzakEGdyASaiIDIApzIBIgCWogCCAEQQp3IgRzIANzakEIdyABaiIBc2pBDX\\\ncgBGoiBiABQQp3IghzIAQgBWogASADQQp3IgNzIAZzakEGdyAKaiIBc2pBBXcgA2oiBEEKdyIKajYC\\\nCCAAIAwgCSAUaiAcIBsgGkEKdyIJQX9zcnNqQc76z8p6akEIdyAYaiIVQQp3aiADIBFqIAEgBkEKdy\\\nIDcyAEc2pBD3cgCGoiBkEKdyIXajYCBCAAIA4gEyAYaiAVIBwgG0EKdyIRQX9zcnNqQc76z8p6akEF\\\ndyAJaiISaiAIIBlqIAQgAUEKdyIBcyAGc2pBDXcgA2oiBEEKd2o2AgAgACgCECEIIAAgESAQaiAFIA\\\nlqIBIgFSAgQX9zcnNqQc76z8p6akEGd2ogAyAHaiAGIApzIARzakELdyABaiIDajYCECAAIBEgCGog\\\nCmogASACaiAEIBdzIANzakELd2o2AgwLySYCKX8BfiAAIAEoAAwiAyAAQRRqIgQoAgAiBSAAKAIEIg\\\nZqIAEoAAgiB2oiCGogCCAAKQMgIixCIIinc0GM0ZXYeXNBEHciCUGF3Z7be2oiCiAFc0EUdyILaiIM\\\nIAEoACgiBWogASgAFCIIIABBGGoiDSgCACIOIAAoAggiD2ogASgAECIQaiIRaiARIAJzQauzj/wBc0\\\n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\\\nIiFXMgASgAMCIUQRh0IBRBgP4DcUEIdHIgFEEIdkGA/gNxIBRBGHZyciIWcyANIAEoAAQiFEEYdCAU\\\nQYD+A3FBCHRyIBRBCHZBgP4DcSAUQRh2cnIiF3MgASgAJCIUQRh0IBRBgP4DcUEIdHIgFEEIdkGA/g\\\nNxIBRBGHZyciIYcyAIc0EBdyIUc0EBdyIZcyAIIBZzIBlzIA4gGHMgFHMgE3NBAXciGnNBAXciG3Mg\\\nEiAUcyAacyARIAhzIBNzIAsgDnMgEnMgASgAKCIcQRh0IBxBgP4DcUEIdHIgHEEIdkGA/gNxIBxBGH\\\nZyciIdIAlzIBFzIAEoABwiHEEYdCAcQYD+A3FBCHRyIBxBCHZBgP4DcSAcQRh2cnIiHiAMcyALcyAV\\\nIA9zIB1zIAEoADwiHEEYdCAcQYD+A3FBCHRyIBxBCHZBgP4DcSAcQRh2cnIiHHNBAXciH3NBAXciIH\\\nNBAXciIXNBAXciInNBAXciI3NBAXciJHNBAXciJSAZIB9zIBYgHXMgH3MgGCAecyAccyAZc0EBdyIm\\\nc0EBdyIncyAUIBxzICZzIBtzQQF3IihzQQF3IilzIBsgJ3MgKXMgGiAmcyAocyAlc0EBdyIqc0EBdy\\\nIrcyAkIChzICpzICMgG3MgJXMgIiAacyAkcyAhIBNzICNzICAgEnMgInMgHyARcyAhcyAcIAtzICBz\\\nICdzQQF3IixzQQF3Ii1zQQF3Ii5zQQF3Ii9zQQF3IjBzQQF3IjFzQQF3IjJzQQF3IjMgKSAtcyAnIC\\\nFzIC1zICYgIHMgLHMgKXNBAXciNHNBAXciNXMgKCAscyA0cyArc0EBdyI2c0EBdyI3cyArIDVzIDdz\\\nICogNHMgNnMgM3NBAXciOHNBAXciOXMgMiA2cyA4cyAxICtzIDNzIDAgKnMgMnMgLyAlcyAxcyAuIC\\\nRzIDBzIC0gI3MgL3MgLCAicyAucyA1c0EBdyI6c0EBdyI7c0EBdyI8c0EBdyI9c0EBdyI+c0EBdyI/\\\nc0EBdyJAc0EBdyJBIDcgO3MgNSAvcyA7cyA0IC5zIDpzIDdzQQF3IkJzQQF3IkNzIDYgOnMgQnMgOX\\\nNBAXciRHNBAXciRXMgOSBDcyBFcyA4IEJzIERzIEFzQQF3IkZzQQF3IkdzIEAgRHMgRnMgPyA5cyBB\\\n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\\\nAgCDYCiNRAQQAgBjYChNRAQQBBlNTAADYCoNRAQQBBnNTAADYCqNRAQQBBlNTAADYCnNRAQQBBpNTA\\\nADYCsNRAQQBBnNTAADYCpNRAQQBBrNTAADYCuNRAQQBBpNTAADYCrNRAQQBBtNTAADYCwNRAQQBBrN\\\nTAADYCtNRAQQBBvNTAADYCyNRAQQBBtNTAADYCvNRAQQBBxNTAADYC0NRAQQBBvNTAADYCxNRAQQBB\\\nzNTAADYC2NRAQQBBxNTAADYCzNRAQQBBADYCkNRAQQBB1NTAADYC4NRAQQBBzNTAADYC1NRAQQBB1N\\\nTAADYC3NRAQQBB3NTAADYC6NRAQQBB3NTAADYC5NRAQQBB5NTAADYC8NRAQQBB5NTAADYC7NRAQQBB\\\n7NTAADYC+NRAQQBB7NTAADYC9NRAQQBB9NTAADYCgNVAQQBB9NTAADYC/NRAQQBB/NTAADYCiNVAQQ\\\nBB/NTAADYChNVAQQBBhNXAADYCkNVAQQBBhNXAADYCjNVAQQBBjNXAADYCmNVAQQBBjNXAADYClNVA\\\nQQBBlNXAADYCoNVAQQBBnNXAADYCqNVAQQBBlNXAADYCnNVAQQBBpNXAADYCsNVAQQBBnNXAADYCpN\\\nVAQQBBrNXAADYCuNVAQQBBpNXAADYCrNVAQQBBtNXAADYCwNVAQQBBrNXAADYCtNVAQQBBvNXAADYC\\\nyNVAQQBBtNXAADYCvNVAQQBBxNXAADYC0NVAQQBBvNXAADYCxNVAQQBBzNXAADYC2NVAQQBBxNXAAD\\\nYCzNVAQQBB1NXAADYC4NVAQQBBzNXAADYC1NVAQQBB3NXAADYC6NVAQQBB1NXAADYC3NVAQQBB5NXA\\\nADYC8NVAQQBB3NXAADYC5NVAQQBB7NXAADYC+NVAQQBB5NXAADYC7NVAQQBB9NXAADYCgNZAQQBB7N\\\nXAADYC9NVAQQBB/NXAADYCiNZAQQBB9NXAADYC/NVAQQBBhNbAADYCkNZAQQBB/NXAADYChNZAQQBB\\\njNbAADYCmNZAQQBBhNbAADYCjNZAQQAgBjYCsNZAQQBBjNbAADYClNZAQQAgCEFYaiIANgKo1kAgBi\\\nAAQQFyNgIEIAYgAGpBKDYCBEEAQYCAgAE2ArzWQAwICyABIAZPDQAgBSABSw0AIAAoAgxFDQMLQQBB\\\n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\\\nUNACAJQYAIRw0EQQEhCgsgAUH/B3EhAQJAIAogBkEFdiIIIAogCEkbRQ0AIAdBGGoiCCACQRhqKQIA\\\nNwMAIAdBEGoiCyACQRBqKQIANwMAIAdBCGoiDCACQQhqKQIANwMAIAcgAikCADcDACAHIABBwAAgAy\\\nAEQQFyEBYgByAAQcAAakHAACADIAQQFiAHIABBgAFqQcAAIAMgBBAWIAcgAEHAAWpBwAAgAyAEEBYg\\\nByAAQYACakHAACADIAQQFiAHIABBwAJqQcAAIAMgBBAWIAcgAEGAA2pBwAAgAyAEEBYgByAAQcADak\\\nHAACADIAQQFiAHIABBgARqQcAAIAMgBBAWIAcgAEHABGpBwAAgAyAEEBYgByAAQYAFakHAACADIAQQ\\\nFiAHIABBwAVqQcAAIAMgBBAWIAcgAEGABmpBwAAgAyAEEBYgByAAQcAGakHAACADIAQQFiAHIABBgA\\\ndqQcAAIAMgBBAWIAcgAEHAB2pBwAAgAyAEQQJyEBYgBSAIKQMANwAYIAUgCykDADcAECAFIAwpAwA3\\\nAAggBSAHKQMANwAACyABRQ0BIAdBgAFqQThqQgA3AwAgB0GAAWpBMGpCADcDACAHQYABakEoakIANw\\\nMAIAdBgAFqQSBqQgA3AwAgB0GAAWpBGGpCADcDACAHQYABakEQakIANwMAIAdBgAFqQQhqQgA3AwAg\\\nB0GAAWpByABqIgggAkEIaikCADcDACAHQYABakHQAGoiCyACQRBqKQIANwMAIAdBgAFqQdgAaiIMIA\\\nJBGGopAgA3AwAgB0IANwOAASAHIAQ6AOoBIAdBADsB6AEgByACKQIANwPAASAHIAqtIAN8NwPgASAH\\\nQYABaiAAIAlqIAEQLCEEIAdByABqIAgpAwA3AwAgB0HQAGogCykDADcDACAHQdgAaiAMKQMANwMAIA\\\ndBCGogBEEIaikDADcDACAHQRBqIARBEGopAwA3AwAgB0EYaiAEQRhqKQMANwMAIAdBIGogBEEgaikD\\\nADcDACAHQShqIARBKGopAwA3AwAgB0EwaiAEQTBqKQMANwMAIAdBOGogBEE4aikDADcDACAHIAcpA8\\\nABNwNAIAcgBCkDADcDACAHLQDqASEEIActAOkBIQAgByAHLQDoASIBOgBoIAcgBykD4AEiAzcDYCAH\\\n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\\\nQAAkACQAJAIABB8A5qKAIAIgMgAXunIgRNDQAgA0EFdCEFIANBf2ohBiACQSBqQcAAaiEHIAJBkAFq\\\nQSBqIQggAkEIaiEJIAJBEGohCiACQRhqIQsgA0F+akE3SSEMIAJBrwFqIQ0gAkGuAWohDiACQa0Bai\\\nEPIAJBqwFqIRAgAkGqAWohESACQakBaiESIAJBpwFqIRMgAkGmAWohFCACQaUBaiEVIAJBowFqIRYg\\\nAkGiAWohFyACQaEBaiEYIAJBnwFqIRkgAkGeAWohGiACQZ0BaiEbIAJBmwFqIRwgAkGaAWohHSACQZ\\\nkBaiEeA0AgACAGNgLwDiAJIAAgBWoiA0H4AGopAAA3AwAgCiADQYABaikAADcDACALIANBiAFqKQAA\\\nNwMAIAIgA0HwAGopAAA3AwAgBkUNAiAAIAZBf2oiHzYC8A4gAkGQAWpBGGoiICADQegAaiIhKQAAIg\\\nE3AwAgAkGQAWpBEGoiIiADQeAAaiIjKQAAIkQ3AwAgAkGQAWpBCGoiJCADQdgAaiIlKQAAIkU3AwAg\\\nAiADQdAAaiImKQAAIkY3A5ABIAggAikDADcAACAIQQhqIAkpAwA3AAAgCEEQaiAKKQMANwAAIAhBGG\\\nogCykDADcAACACQSBqQQhqIEU3AwAgAkEgakEQaiBENwMAIAJBIGpBGGogATcDACACQSBqQSBqIAgp\\\nAwA3AwAgAkEgakEoaiACQZABakEoaikDADcDACACQSBqQTBqIAJBkAFqQTBqKQMANwMAIAJBIGpBOG\\\nogAkGQAWpBOGopAwA3AwAgAiBGNwMgIAAtAIoBIScgB0EYaiAAQRhqIigpAwA3AwAgB0EQaiAAQRBq\\\nIikpAwA3AwAgB0EIaiAAQQhqIiopAwA3AwAgByAAKQMANwMAIAJBwAA6AIgBIAJCADcDgAEgAiAnQQ\\\nRyIic6AIkBICAgKCkCADcDACAiICkpAgA3AwAgJCAqKQIANwMAIAIgACkCADcDkAEgAkGQAWogAkEg\\\nakHAAEIAICcQFiANLQAAIScgDi0AACEoIA8tAAAhKSAQLQAAISogES0AACErIBItAAAhLCAgLQAAIS\\\nAgEy0AACEtIBQtAAAhLiAVLQAAIS8gFi0AACEwIBctAAAhMSAYLQAAITIgIi0AACEiIBktAAAhMyAa\\\nLQAAITQgGy0AACE1IBwtAAAhNiAdLQAAITcgHi0AACE4ICQtAAAhJCACLQCsASE5IAItAKQBITogAi\\\n0AnAEhOyACLQCXASE8IAItAJYBIT0gAi0AlQEhPiACLQCUASE/IAItAJMBIUAgAi0AkgEhQSACLQCR\\\nASFCIAItAJABIUMgDEUNAyAmIEM6AAAgJiBCOgABIANB7gBqICg6AAAgA0HtAGogKToAACADQewAai\\\nA5OgAAIANB6gBqICs6AAAgA0HpAGogLDoAACAhICA6AAAgA0HmAGogLjoAACADQeUAaiAvOgAAIANB\\\n5ABqIDo6AAAgA0HiAGogMToAACADQeEAaiAyOgAAICMgIjoAACADQd4AaiA0OgAAIANB3QBqIDU6AA\\\nAgA0HcAGogOzoAACADQdoAaiA3OgAAIANB2QBqIDg6AAAgJSAkOgAAIANB1gBqID06AAAgA0HVAGog\\\nPjoAACADQdQAaiA/OgAAICYgQToAAiADQe8AaiAnOgAAIANB6wBqICo6AAAgA0HnAGogLToAACADQe\\\nMAaiAwOgAAIANB3wBqIDM6AAAgA0HbAGogNjoAACADQdcAaiA8OgAAICZBA2ogQDoAACAAIAY2AvAO\\\nIAVBYGohBSAfIQYgHyAETw0ACwsgAkHQAWokAA8LQfyGwAAQXgALIAJBrQFqICk6AAAgAkGpAWogLD\\\noAACACQaUBaiAvOgAAIAJBoQFqIDI6AAAgAkGdAWogNToAACACQZkBaiA4OgAAIAJBlQFqID46AAAg\\\nAkGuAWogKDoAACACQaoBaiArOgAAIAJBpgFqIC46AAAgAkGiAWogMToAACACQZ4BaiA0OgAAIAJBmg\\\nFqIDc6AAAgAkGWAWogPToAACACQa8BaiAnOgAAIAJBqwFqICo6AAAgAkGnAWogLToAACACQaMBaiAw\\\nOgAAIAJBnwFqIDM6AAAgAkGbAWogNjoAACACQZcBaiA8OgAAIAIgOToArAEgAiAgOgCoASACIDo6AK\\\nQBIAIgIjoAoAEgAiA7OgCcASACICQ6AJgBIAIgPzoAlAEgAiBDOgCQASACIEI6AJEBIAIgQToAkgEg\\\nAiBAOgCTAUG0kcAAIAJBkAFqQcSIwABBjIfAABA8AAvZCgEafyAAIAEoACwiAiABKAAcIgMgASgADC\\\n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\\\nQRhqKQAANwAAIAJBEGogAUEQaikAADcAACACQQhqIAFBCGopAAA3AAAgB0EBaiEHCyAGQTBqJAAgBw\\\n8LQSAgAUHchcAAED0AC0EgIAlB7IXAABA/AAueBAIDfwR+IwBB4AJrIgIkACACIAFB4AIQZSICQdAB\\\naiACQdgCaiIDLQAAIgRqQQBBiAEgBGsQZiEEIANBADoAACAEQQE6AAAgAkHXAmoiAyADLQAAQYABcj\\\noAACACIAIpAwAgAikD0AGFNwMAIAIgAikDCCACQdgBaikDAIU3AwggAiACKQMQIAJB4AFqKQMAhTcD\\\nECACIAIpAxggAkHoAWopAwCFNwMYIAIgAikDICACQfABaikDAIU3AyAgAiACKQMoIAJB+AFqKQMAhT\\\ncDKCACIAIpAzAgAkGAAmopAwCFNwMwIAIgAikDOCACQYgCaikDAIU3AzggAiACKQNAIAJBkAJqKQMA\\\nhTcDQCACIAIpA0ggAkGYAmopAwCFNwNIIAIgAikDUCACQaACaikDAIU3A1AgAiACKQNYIAJBqAJqKQ\\\nMAhTcDWCACIAIpA2AgAkGwAmopAwCFNwNgIAIgAikDaCACQbgCaikDAIU3A2ggAiACKQNwIAJBwAJq\\\nKQMAhTcDcCACIAIpA3ggAkHIAmopAwCFNwN4IAIgAikDgAEgAkHQAmopAwCFNwOAASACIAIoAsgBEB\\\n9BAC0AzdZAGiACKQMYIQUgAikDECEGIAIpAwghByACKQMAIQgCQEEgEBciAw0AAAsgAyAFNwAYIAMg\\\nBjcAECADIAc3AAggAyAINwAAIAEQISAAQSA2AgQgACADNgIAIAJB4AJqJAALngQCA38EfiMAQeACay\\\nICJAAgAiABQeACEGUiAkHQAWogAkHYAmoiAy0AACIEakEAQYgBIARrEGYhBCADQQA6AAAgBEEGOgAA\\\nIAJB1wJqIgMgAy0AAEGAAXI6AAAgAiACKQMAIAIpA9ABhTcDACACIAIpAwggAkHYAWopAwCFNwMIIA\\\nIgAikDECACQeABaikDAIU3AxAgAiACKQMYIAJB6AFqKQMAhTcDGCACIAIpAyAgAkHwAWopAwCFNwMg\\\nIAIgAikDKCACQfgBaikDAIU3AyggAiACKQMwIAJBgAJqKQMAhTcDMCACIAIpAzggAkGIAmopAwCFNw\\\nM4IAIgAikDQCACQZACaikDAIU3A0AgAiACKQNIIAJBmAJqKQMAhTcDSCACIAIpA1AgAkGgAmopAwCF\\\nNwNQIAIgAikDWCACQagCaikDAIU3A1ggAiACKQNgIAJBsAJqKQMAhTcDYCACIAIpA2ggAkG4AmopAw\\\nCFNwNoIAIgAikDcCACQcACaikDAIU3A3AgAiACKQN4IAJByAJqKQMAhTcDeCACIAIpA4ABIAJB0AJq\\\nKQMAhTcDgAEgAiACKALIARAfQQAtAM3WQBogAikDGCEFIAIpAxAhBiACKQMIIQcgAikDACEIAkBBIB\\\nAXIgMNAAALIAMgBTcAGCADIAY3ABAgAyAHNwAIIAMgCDcAACABECEgAEEgNgIEIAAgAzYCACACQeAC\\\naiQAC70DAgZ/AX4jAEGQA2siAiQAIAJBIGogAUHQARBlGiACIAIpA2AgAkHoAWotAAAiA618NwNgIA\\\nJB6ABqIQQCQCADQYABRg0AIAQgA2pBAEGAASADaxBmGgsgAkEAOgDoASACQSBqIARCfxARIAJBkAJq\\\nQQhqIgMgAkEgakEIaikDADcDACACQZACakEQaiIEIAJBIGpBEGopAwA3AwAgAkGQAmpBGGoiBSACQS\\\nBqQRhqKQMANwMAIAJBkAJqQSBqIAIpA0A3AwAgAkGQAmpBKGogAkEgakEoaikDADcDACACQZACakEw\\\naiACQSBqQTBqKQMANwMAIAJBkAJqQThqIAJBIGpBOGopAwA3AwAgAiACKQMgNwOQAiACQfABakEQai\\\nAEKQMAIgg3AwAgAkEIaiIEIAMpAwA3AwAgAkEQaiIGIAg3AwAgAkEYaiIHIAUpAwA3AwAgAiACKQOQ\\\nAjcDAEEALQDN1kAaAkBBIBAXIgMNAAALIAMgAikDADcAACADQRhqIAcpAwA3AAAgA0EQaiAGKQMANw\\\nAAIANBCGogBCkDADcAACABECEgAEEgNgIEIAAgAzYCACACQZADaiQAC6ADAQJ/AkACQAJAAkACQCAA\\\nLQBoIgNFDQAgA0HBAE8NAyAAIANqIAFBwAAgA2siAyACIAMgAkkbIgMQZRogACAALQBoIANqIgQ6AG\\\nggASADaiEBAkAgAiADayICDQBBACECDAILIABBwABqIABBwAAgACkDYCAALQBqIAAtAGlFchAWIABC\\\n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\\\nA2AgggBCACNgIUIAQgATYCECAEQRhqQQxqQgI3AgAgBEEwakEMakEBNgIAIARBAjYCHCAEQeiJwAA2\\\nAhggBEECNgI0IAQgBEEwajYCICAEIARBEGo2AjggBCAEQQhqNgIwIARBGGogAxBLAAtyAQF/IwBBMG\\\nsiAyQAIAMgADYCACADIAE2AgQgA0EIakEMakICNwIAIANBIGpBDGpBAzYCACADQQI2AgwgA0GUjMAA\\\nNgIIIANBAzYCJCADIANBIGo2AhAgAyADQQRqNgIoIAMgAzYCICADQQhqIAIQSwALcgEBfyMAQTBrIg\\\nMkACADIAA2AgAgAyABNgIEIANBCGpBDGpCAjcCACADQSBqQQxqQQM2AgAgA0ECNgIMIANB9IvAADYC\\\nCCADQQM2AiQgAyADQSBqNgIQIAMgA0EEajYCKCADIAM2AiAgA0EIaiACEEsAC3IBAX8jAEEwayIDJA\\\nAgAyABNgIEIAMgADYCACADQQhqQQxqQgI3AgAgA0EgakEMakEDNgIAIANBAzYCDCADQeSMwAA2Aggg\\\nA0EDNgIkIAMgA0EgajYCECADIAM2AiggAyADQQRqNgIgIANBCGogAhBLAAtyAQF/IwBBMGsiAyQAIA\\\nMgATYCBCADIAA2AgAgA0EIakEMakICNwIAIANBIGpBDGpBAzYCACADQQI2AgwgA0HUicAANgIIIANB\\\nAzYCJCADIANBIGo2AhAgAyADNgIoIAMgA0EEajYCICADQQhqIAIQSwALYwECfyMAQSBrIgIkACACQQ\\\nxqQgE3AgAgAkEBNgIEIAJBjIjAADYCACACQQI2AhwgAkGsiMAANgIYIAFBGGooAgAhAyACIAJBGGo2\\\nAgggASgCFCADIAIQJyEBIAJBIGokACABC2MBAn8jAEEgayICJAAgAkEMakIBNwIAIAJBATYCBCACQY\\\nyIwAA2AgAgAkECNgIcIAJBrIjAADYCGCABQRhqKAIAIQMgAiACQRhqNgIIIAEoAhQgAyACECchASAC\\\nQSBqJAAgAQtbAQJ/AkACQCAARQ0AIAAoAgANASAAQQA2AgAgAEEIaigCACEBIAAoAgQhAiAAECECQC\\\nACQQdHDQAgAUHwDmooAgBFDQAgAUEANgLwDgsgARAhDwsQYQALEGIAC2UBAX9BAEEAKAKA00AiAkEB\\\najYCgNNAAkAgAkEASA0AQQAtAMzWQEEBcQ0AQQBBAToAzNZAQQBBACgCyNZAQQFqNgLI1kBBACgC/N\\\nJAQX9MDQBBAEEAOgDM1kAgAEUNABBoAAsAC1EAAkAgAWlBAUcNAEGAgICAeCABayAASQ0AAkAgAEUN\\\nAEEALQDN1kAaAkACQCABQQlJDQAgASAAEC0hAQwBCyAAEBchAQsgAUUNAQsgAQ8LAAtKAQN/QQAhAw\\\nJAIAJFDQACQANAIAAtAAAiBCABLQAAIgVHDQEgAEEBaiEAIAFBAWohASACQX9qIgJFDQIMAAsLIAQg\\\nBWshAwsgAwtEAAJAAkAgAUUNACABKAIADQEgAUF/NgIAIAFBBGooAgAgAUEIaigCACACEDcgAUEANg\\\nIAIABCADcDAA8LEGEACxBiAAtHAQF/IwBBIGsiAyQAIANBDGpCADcCACADQQE2AgQgA0HgkcAANgII\\\nIAMgATYCHCADIAA2AhggAyADQRhqNgIAIAMgAhBLAAtCAQF/AkACQAJAIAJBgIDEAEYNAEEBIQQgAC\\\nACIAEoAhARBQANAQsgAw0BQQAhBAsgBA8LIAAgA0EAIAEoAgwRBwALPwEBfyMAQSBrIgAkACAAQRRq\\\nQgA3AgAgAEEBNgIMIABBvITAADYCCCAAQeCRwAA2AhAgAEEIakHEhMAAEEsACz4BAX8jAEEgayICJA\\\nAgAkEBOwEcIAIgATYCGCACIAA2AhQgAkGQicAANgIQIAJB4JHAADYCDCACQQxqEFgACzwBAX8gAEEM\\\naigCACECAkACQCAAKAIEDgIAAAELIAINACABLQAQIAEtABEQRAALIAEtABAgAS0AERBEAAsvAAJAAk\\\nAgA2lBAUcNAEGAgICAeCADayABSQ0AIAAgASADIAIQJCIDDQELAAsgAwslAAJAIAANAEGQjsAAQTIQ\\\nYwALIAAgAiADIAQgBSABKAIQEQsACyMAAkAgAA0AQZCOwABBMhBjAAsgACACIAMgBCABKAIQEQkACy\\\nMAAkAgAA0AQZCOwABBMhBjAAsgACACIAMgBCABKAIQEQgACyMAAkAgAA0AQZCOwABBMhBjAAsgACAC\\\nIAMgBCABKAIQEQkACyMAAkAgAA0AQZCOwABBMhBjAAsgACACIAMgBCABKAIQEQgACyMAAkAgAA0AQZ\\\nCOwABBMhBjAAsgACACIAMgBCABKAIQEQgACyMAAkAgAA0AQZCOwABBMhBjAAsgACACIAMgBCABKAIQ\\\nERYACyMAAkAgAA0AQZCOwABBMhBjAAsgACACIAMgBCABKAIQERcACyMAAkAgAA0AQZCOwABBMhBjAA\\\nsgACACIAMgBCABKAIQERUACyEAAkAgAA0AQZCOwABBMhBjAAsgACACIAMgASgCEBEGAAsfAQF/AkAg\\\nACgCCCIBDQBB/JHAABBeAAsgASAAEGQACx8AAkAgAA0AQZCOwABBMhBjAAsgACACIAEoAhARBQALFA\\\nAgACgCACABIAAoAgQoAgwRBQALEAAgASAAKAIAIAAoAgQQHAsgACAAQr/vtPrh37HYXzcDCCAAQqn2\\\nw62BitaoUTcDAAsOAAJAIAFFDQAgABAhCwsOAEHliMAAQSsgABBIAAsNACAAKAIAGgN/DAALCwsAIA\\\nAjAGokACMACwwAQZDSwABBGxBjAAsNAEGr0sAAQc8AEGMACwkAIAAgARALAAsJACAAIAEQTAALCgAg\\\nACABIAIQLwsKACAAIAEgAhA4CwoAIAAgASACEEYLAwAACwIACwIACwIACwuEUwEAQYCAwAAL+lJ8Bh\\\nAAXwAAAK4AAAAUAAAAQkxBS0UyQkJMQUtFMkItMTI4QkxBS0UyQi0xNjBCTEFLRTJCLTIyNEJMQUtF\\\nMkItMjU2QkxBS0UyQi0zODRCTEFLRTJTQkxBS0UzS0VDQ0FLLTIyNEtFQ0NBSy0yNTZLRUNDQUstMz\\\ng0S0VDQ0FLLTUxMk1ENE1ENVJJUEVNRC0xNjBTSEEtMVNIQS0yMjRTSEEtMjU2U0hBLTM4NFNIQS01\\\nMTJUSUdFUkZOVjMyRk5WMzJBRk5WNjRGTlY2NEF1bnN1cHBvcnRlZCBhbGdvcml0aG0AAAAA782riW\\\ndFIwEQMlR2mLrc/ofhssO0pZbwCMm882fmCWo7p8qEha5nuyv4lP5y82488TYdXzr1T6XRguatf1IO\\\nUR9sPiuMaAWba71B+6vZgx95IX4TGc3gW9ieBcFdnbvLB9V8NiopmmIX3XAwWgFZkTlZDvfY7C8VMQ\\\nvA/2cmM2cRFVhoh0q0jqeP+WQNLgzbpE/6vh1ItUdn5glqha5nu3Lzbjw69U+lf1IOUYxoBZur2YMf\\\nGc3gW9ieBcEH1Xw2F91wMDlZDvcxC8D/ERVYaKeP+WSkT/q+ASNFZ4mrze/+3LqYdlQyEPDh0sNub2\\\n4tZGVmYXVsdCBsZW5ndGggc3BlY2lmaWVkIGZvciBub24tZXh0ZW5kYWJsZSBhbGdvcml0aG1saWJy\\\nYXJ5L2FsbG9jL3NyYy9yYXdfdmVjLnJzY2FwYWNpdHkgb3ZlcmZsb3cAACkCEAARAAAADQIQABwAAA\\\nA6AgAABQAAAC9Vc2Vycy9rdDNrLy5jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTZm\\\nMTdkMjJiYmExNTAwMWYvYmxha2UzLTEuNS4xL3NyYy9saWIucnNUAhAAWAAAAPABAAARAAAAVAIQAF\\\ngAAACWAgAACgAAAFQCEABYAAAAggIAABYAAABUAhAAWAAAAMQCAAAoAAAAVAIQAFgAAADEAgAANAAA\\\nAFQCEABYAAAAxAIAAAwAAABUAhAAWAAAALQCAAAXAAAAVAIQAFgAAADwAgAAHwAAAFQCEABYAAAADQ\\\nMAAAwAAABUAhAAWAAAABQDAAASAAAAVAIQAFgAAAA4AwAAIQAAAFQCEABYAAAAOgMAABEAAABUAhAA\\\nWAAAADoDAABBAAAAVAIQAFgAAAAqBAAAMgAAAFQCEABYAAAAMgQAABsAAABUAhAAWAAAAFkEAAAXAA\\\nAAVAIQAFgAAAC9BAAAGwAAAFQCEABYAAAAzwQAABsAAABUAhAAWAAAAAAFAAASAAAAVAIQAFgAAAAK\\\nBQAAEgAAAFQCEABYAAAANwYAACYAAABDYXBhY2l0eUVycm9yOiAA/AMQAA8AAABpbnN1ZmZpY2llbn\\\nQgY2FwYWNpdHkAAAAUBBAAFQAAABEAAAAEAAAABAAAABIAAAATAAAAIAAAAAEAAAAUAAAAEQAAAAQA\\\nAAAEAAAAEgAAACljYWxsZWQgYE9wdGlvbjo6dW53cmFwKClgIG9uIGEgYE5vbmVgIHZhbHVlFQAAAA\\\nAAAAABAAAAFgAAAGluZGV4IG91dCBvZiBib3VuZHM6IHRoZSBsZW4gaXMgIGJ1dCB0aGUgaW5kZXgg\\\naXMgAACgBBAAIAAAAMAEEAASAAAAOiAAAOAIEAAAAAAA5AQQAAIAAAAwMDAxMDIwMzA0MDUwNjA3MD\\\ngwOTEwMTExMjEzMTQxNTE2MTcxODE5MjAyMTIyMjMyNDI1MjYyNzI4MjkzMDMxMzIzMzM0MzUzNjM3\\\nMzgzOTQwNDE0MjQzNDQ0NTQ2NDc0ODQ5NTA1MTUyNTM1NDU1NTY1NzU4NTk2MDYxNjI2MzY0NjU2Nj\\\nY3Njg2OTcwNzE3MjczNzQ3NTc2Nzc3ODc5ODA4MTgyODM4NDg1ODY4Nzg4ODk5MDkxOTI5Mzk0OTU5\\\nNjk3OTg5OXJhbmdlIHN0YXJ0IGluZGV4ICBvdXQgb2YgcmFuZ2UgZm9yIHNsaWNlIG9mIGxlbmd0aC\\\nDABRAAEgAAANIFEAAiAAAAcmFuZ2UgZW5kIGluZGV4IAQGEAAQAAAA0gUQACIAAABzb3VyY2Ugc2xp\\\nY2UgbGVuZ3RoICgpIGRvZXMgbm90IG1hdGNoIGRlc3RpbmF0aW9uIHNsaWNlIGxlbmd0aCAoJAYQAB\\\nUAAAA5BhAAKwAAAGQEEAABAAAAL1VzZXJzL2t0M2svLmNhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5j\\\ncmF0ZXMuaW8tNmYxN2QyMmJiYTE1MDAxZi9ibG9jay1idWZmZXItMC4xMC40L3NyYy9saWIucnMAfA\\\nYQAF8AAABYAQAAHgAAAHwGEABfAAAAFQEAACwAAABtaWQgPiBsZW4AAAD8BhAACQAAAGNsb3N1cmUg\\\naW52b2tlZCByZWN1cnNpdmVseSBvciBhZnRlciBiZWluZyBkcm9wcGVkAAAAAAAAAQAAAAAAAACCgA\\\nAAAAAAAIqAAAAAAACAAIAAgAAAAICLgAAAAAAAAAEAAIAAAAAAgYAAgAAAAIAJgAAAAAAAgIoAAAAA\\\nAAAAiAAAAAAAAAAJgACAAAAAAAoAAIAAAAAAi4AAgAAAAACLAAAAAAAAgImAAAAAAACAA4AAAAAAAI\\\nACgAAAAAAAgIAAAAAAAACACoAAAAAAAAAKAACAAAAAgIGAAIAAAACAgIAAAAAAAIABAACAAAAAAAiA\\\nAIAAAACAL1VzZXJzL2t0M2svLmNhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tNmYxN2\\\nQyMmJiYTE1MDAxZi9rZWNjYWstMC4xLjUvc3JjL2xpYi5yc0Egcm91bmRfY291bnQgZ3JlYXRlciB0\\\n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\\\nlGAMj52EkyY/uI4+2bz4Ce8WwRmlOBGFck1Wv38wNRqPdHrvXmtxXPnH7U3sbX2xq7KAJBXOVEmU7b\\\nXiXUR7Yw/Kq4K4gRXSoh0ym7iwn1s5YC6RTqtY9aAt1XIZR7Z7WskKPA51j7AUq9g0xn04k7ufNL36\\\nQtnilIq4wyHsT8UixYupaM8wOyXdh/vb3RyoOugmDBQrS7sJrapWvoX7k/qXE3ZwQusthSMUnJWFOE\\\nHlS0l4ZIKr5maY7TLdyilSuFPJKsESzAe6jyDZmxiCO+N08b+giAfAPlVE3I0HAf1FfOfuytkFQ6Og\\\nbZJzwrAL+iMICEo65+wAMg7W0yAsaGQKlpfSing4p69TDLX3rFeefreeREaLXpvNwFD7Rzo+IOV4hu\\\neBrXoPbovc26nIcvo2TBvNFql4vXZpZe4iGrPMPl5apjEJCQjWlIRLMYmLuKHj6uh2TjtNw7iTH5va\\\n8Z1btf3KBFY8pllJsm/iiG7FGcP2ABXR63SVChBkDkTbHLdvflcGy/7StV7/IYEkGjNlpwCAcMy0Rg\\\nmE91FE3nDiioDkPZVs1lUF9T15ElwZbvCnLxIzLIH6Vjc285oMNudWxsIHBvaW50ZXIgcGFzc2VkIH\\\nRvIHJ1c3RyZWN1cnNpdmUgdXNlIG9mIGFuIG9iamVjdCBkZXRlY3RlZCB3aGljaCB3b3VsZCBsZWFk\\\nIHRvIHVuc2FmZSBhbGlhc2luZyBpbiBydXN0AJkxBG5hbWUBkTFsAEVqc19zeXM6OlR5cGVFcnJvcj\\\no6bmV3OjpfX3diZ19uZXdfNWRkODZlYmM5MTdkOWY1Mjo6aGY1NGY0OTM5ZTliNTEwNzABO3dhc21f\\\nYmluZGdlbjo6X193YmluZGdlbl9vYmplY3RfZHJvcF9yZWY6Omg5NjQwNjIwM2Y3MjdhNTRjAlVqc1\\\n9zeXM6OlVpbnQ4QXJyYXk6OmJ5dGVfbGVuZ3RoOjpfX3diZ19ieXRlTGVuZ3RoXzU4ZjdiNGZhYjE5\\\nMTlkNDQ6Omg0MjEyYmQ1MmQ1ODhiMWZhA1Vqc19zeXM6OlVpbnQ4QXJyYXk6OmJ5dGVfb2Zmc2V0Oj\\\npfX3diZ19ieXRlT2Zmc2V0XzgxZDYwZjczOTI1MjRmNjI6OmgwNTY1ZGY3MDgwYzVlMGZlBExqc19z\\\neXM6OlVpbnQ4QXJyYXk6OmJ1ZmZlcjo6X193YmdfYnVmZmVyX2RkN2Y3NGJjNjBmMWZhYWI6Omg5OG\\\nU4YzFhODM5NjEwMTQzBXlqc19zeXM6OlVpbnQ4QXJyYXk6Om5ld193aXRoX2J5dGVfb2Zmc2V0X2Fu\\\nZF9sZW5ndGg6Ol9fd2JnX25ld3dpdGhieXRlb2Zmc2V0YW5kbGVuZ3RoX2FhNGExN2MzM2EwNmU1Y2\\\nI6OmhhNjkyZmRlODRlZmNkYWNkBkxqc19zeXM6OlVpbnQ4QXJyYXk6Omxlbmd0aDo6X193YmdfbGVu\\\nZ3RoX2MyMGE0MGYxNTAyMGQ2OGE6Omg2MGFiY2ZiZTMxZDM3MzZlBzJ3YXNtX2JpbmRnZW46Ol9fd2\\\nJpbmRnZW5fbWVtb3J5OjpoOTcwNjg1NjYyMjFiOTNiZghVanNfc3lzOjpXZWJBc3NlbWJseTo6TWVt\\\nb3J5OjpidWZmZXI6Ol9fd2JnX2J1ZmZlcl8xMmQwNzljYzIxZTE0YmRiOjpoNDAyOTdkZjczNmE1Mz\\\nQ3ZQlGanNfc3lzOjpVaW50OEFycmF5OjpuZXc6Ol9fd2JnX25ld182M2I5MmJjODY3MWVkNDY0Ojpo\\\nNjJhZGMxNWU2N2QyNjA2NQpGanNfc3lzOjpVaW50OEFycmF5OjpzZXQ6Ol9fd2JnX3NldF9hNDdiYW\\\nM3MDMwNmExOWE3OjpoY2I2NmI3ZmE4N2EzNjMwNwsxd2FzbV9iaW5kZ2VuOjpfX3diaW5kZ2VuX3Ro\\\ncm93OjpoM2MyYWM2Y2ZhMGE4ZDQ4MgxAZGVub19zdGRfd2FzbV9jcnlwdG86OmRpZ2VzdDo6Q29udG\\\nV4dDo6dXBkYXRlOjpoN2IwMDc0NWNiZTIzODY1Mw0sc2hhMjo6c2hhNTEyOjpjb21wcmVzczUxMjo6\\\naDE3ZTQyNGZiNDcwMjk3MmEOLHNoYTI6OnNoYTI1Njo6Y29tcHJlc3MyNTY6Omg3Y2Y2NDJlZjc2OD\\\nY0YTkzD0lkZW5vX3N0ZF93YXNtX2NyeXB0bzo6ZGlnZXN0OjpDb250ZXh0OjpkaWdlc3RfYW5kX2Ry\\\nb3A6OmhjNTZkZDUwNzFmNTg4ZWZkEDtkaWdlc3Q6OkV4dGVuZGFibGVPdXRwdXQ6OmZpbmFsaXplX2\\\nJveGVkOjpoNzlhYTg0MjlkMzc3ZWQwNREzYmxha2UyOjpCbGFrZTJiVmFyQ29yZTo6Y29tcHJlc3M6\\\nOmhmZDNjYjE1ODM2NGZjNThlEilyaXBlbWQ6OmMxNjA6OmNvbXByZXNzOjpoZWQ1OTFlNDg3ZDM1OD\\\nA3ZRMzYmxha2UyOjpCbGFrZTJzVmFyQ29yZTo6Y29tcHJlc3M6OmhlZGE4MzJmNzhlMGEyMDM0FCtz\\\naGExOjpjb21wcmVzczo6Y29tcHJlc3M6Omg4ZGZjMzY3YzJiZjRlNDgxFSx0aWdlcjo6Y29tcHJlc3\\\nM6OmNvbXByZXNzOjpoZDI5OWUxODU5OGYzYzUzNxY2Ymxha2UzOjpwb3J0YWJsZTo6Y29tcHJlc3Nf\\\naW5fcGxhY2U6Omg1YzRkMGM2ZGE3NTI2NWI0FzpkbG1hbGxvYzo6ZGxtYWxsb2M6OkRsbWFsbG9jPE\\\nE+OjptYWxsb2M6OmgyYWJiZTFlNGYxOWNmNWYxGD1kZW5vX3N0ZF93YXNtX2NyeXB0bzo6ZGlnZXN0\\\nOjpDb250ZXh0OjpuZXc6OmhhMjUxYjE3NzdhYjA5NTZhGWU8ZGlnZXN0Ojpjb3JlX2FwaTo6d3JhcH\\\nBlcjo6Q29yZVdyYXBwZXI8VD4gYXMgZGlnZXN0OjpVcGRhdGU+Ojp1cGRhdGU6Ont7Y2xvc3VyZX19\\\nOjpoY2NmM2MzODIxZTMzODIwNxpoPG1kNTo6TWQ1Q29yZSBhcyBkaWdlc3Q6OmNvcmVfYXBpOjpGaX\\\nhlZE91dHB1dENvcmU+OjpmaW5hbGl6ZV9maXhlZF9jb3JlOjp7e2Nsb3N1cmV9fTo6aDFjMWM4NjE1\\\nZTU1OGQ4YWUbMGJsYWtlMzo6Y29tcHJlc3Nfc3VidHJlZV93aWRlOjpoNDM0MmYwNzRjMmY3Y2RhOB\\\nwsY29yZTo6Zm10OjpGb3JtYXR0ZXI6OnBhZDo6aDYyOGZmMGU1NmJmNDQ5MTMdMWJsYWtlMzo6SGFz\\\naGVyOjptZXJnZV9jdl9zdGFjazo6aGFiODAwNWNiN2FiYTVjNDYeIG1kNDo6Y29tcHJlc3M6OmgyNT\\\nhmN2I3YTE3OGY2MmE4HyBrZWNjYWs6OnAxNjAwOjpoNmFhOTI4Mzg3ZWE0ZDQ3ZSByPHNoYTI6OmNv\\\ncmVfYXBpOjpTaGE1MTJWYXJDb3JlIGFzIGRpZ2VzdDo6Y29yZV9hcGk6OlZhcmlhYmxlT3V0cHV0Q2\\\n9yZT46OmZpbmFsaXplX3ZhcmlhYmxlX2NvcmU6OmgxMjY3ZjljMGM0YmEzMjA0IThkbG1hbGxvYzo6\\\nZGxtYWxsb2M6OkRsbWFsbG9jPEE+OjpmcmVlOjpoNjQ1OGZjZDkzYjg1MTIwZCJOY29yZTo6Zm10Oj\\\npudW06OmltcDo6PGltcGwgY29yZTo6Zm10OjpEaXNwbGF5IGZvciB1MzI+OjpmbXQ6Omg5M2ZhYjRm\\\nODllOWE0NjFhI0FkbG1hbGxvYzo6ZGxtYWxsb2M6OkRsbWFsbG9jPEE+OjpkaXNwb3NlX2NodW5rOj\\\npoZDZhZTg5ZjI5MGFlYjcwZCQOX19ydXN0X3JlYWxsb2MlO2RpZ2VzdDo6RXh0ZW5kYWJsZU91dHB1\\\ndDo6ZmluYWxpemVfYm94ZWQ6OmgxZTc2YjQ5NzU2OTkyNGI3JnI8c2hhMjo6Y29yZV9hcGk6OlNoYT\\\nI1NlZhckNvcmUgYXMgZGlnZXN0Ojpjb3JlX2FwaTo6VmFyaWFibGVPdXRwdXRDb3JlPjo6ZmluYWxp\\\nemVfdmFyaWFibGVfY29yZTo6aGE5ZTk4ZjQ3NTQ4YzUxZDUnI2NvcmU6OmZtdDo6d3JpdGU6Omg0Mj\\\nA2ZTA2OTVmMjQ0ZDU4KDRibGFrZTM6OmNvbXByZXNzX3BhcmVudHNfcGFyYWxsZWw6OmhiMDY5NmFk\\\nYmMxMWMzOTY4KT08RCBhcyBkaWdlc3Q6OmRpZ2VzdDo6RHluRGlnZXN0Pjo6ZmluYWxpemU6OmhhMz\\\nYwNTZiYjQ3ZmZhNTFlKj08RCBhcyBkaWdlc3Q6OmRpZ2VzdDo6RHluRGlnZXN0Pjo6ZmluYWxpemU6\\\nOmg3YTM5YzBmN2M0NmU1MjhjKz08RCBhcyBkaWdlc3Q6OmRpZ2VzdDo6RHluRGlnZXN0Pjo6ZmluYW\\\nxpemU6OmhmZjFkYjAyN2I1MzFiYTIxLC1ibGFrZTM6OkNodW5rU3RhdGU6OnVwZGF0ZTo6aDE5NzQ2\\\nYTJhZThjMjMwNTQtPGRsbWFsbG9jOjpkbG1hbGxvYzo6RGxtYWxsb2M8QT46Om1lbWFsaWduOjpoOW\\\nI2NDQ2ZDVhY2ZjNmVjYi5AZGxtYWxsb2M6OmRsbWFsbG9jOjpEbG1hbGxvYzxBPjo6dW5saW5rX2No\\\ndW5rOjpoY2UwODFmMjY0MDI3YzVhZS8xY29tcGlsZXJfYnVpbHRpbnM6Om1lbTo6bWVtY3B5OjpoZm\\\nYzMmQxNDRhYWJjNDg4YjByPGRpZ2VzdDo6Y29yZV9hcGk6OnhvZl9yZWFkZXI6OlhvZlJlYWRlckNv\\\ncmVXcmFwcGVyPFQ+IGFzIGRpZ2VzdDo6WG9mUmVhZGVyPjo6cmVhZDo6e3tjbG9zdXJlfX06Omg1MT\\\ng3ZWFkMmFlOWM0OTJjMT08RCBhcyBkaWdlc3Q6OmRpZ2VzdDo6RHluRGlnZXN0Pjo6ZmluYWxpemU6\\\nOmg3ZWE0YmIxNmJmYWViMzlmMkZkbG1hbGxvYzo6ZGxtYWxsb2M6OkRsbWFsbG9jPEE+OjppbnNlcn\\\nRfbGFyZ2VfY2h1bms6Omg4YWRhMTRkNWE5MDA0NWRlMxtkaWdlc3Rjb250ZXh0X2RpZ2VzdEFuZERy\\\nb3A0cjxkaWdlc3Q6OmNvcmVfYXBpOjp4b2ZfcmVhZGVyOjpYb2ZSZWFkZXJDb3JlV3JhcHBlcjxUPi\\\nBhcyBkaWdlc3Q6OlhvZlJlYWRlcj46OnJlYWQ6Ont7Y2xvc3VyZX19OjpoZWU0ZWY1YWQxNzJmMDg3\\\nMzUGZGlnZXN0Nj08RCBhcyBkaWdlc3Q6OmRpZ2VzdDo6RHluRGlnZXN0Pjo6ZmluYWxpemU6OmhlOT\\\ncwZDZlNTQ5YWZkNGZmNz5kZW5vX3N0ZF93YXNtX2NyeXB0bzo6RGlnZXN0Q29udGV4dDo6dXBkYXRl\\\nOjpoODI2MzRkMTg4ODQyYTViYjgxY29tcGlsZXJfYnVpbHRpbnM6Om1lbTo6bWVtc2V0OjpoNGY5NT\\\nE0OGE0NmI3ZmFjNDkRZGlnZXN0Y29udGV4dF9uZXc6LWpzX3N5czo6VWludDhBcnJheTo6dG9fdmVj\\\nOjpoOWIzMTY4M2JkYTE4NTBlYzs/d2FzbV9iaW5kZ2VuOjpjb252ZXJ0OjpjbG9zdXJlczo6aW52b2\\\ntlM19tdXQ6Omg1NmM2NjMxMmE5ZGRiODgwPC5jb3JlOjpyZXN1bHQ6OnVud3JhcF9mYWlsZWQ6Omhh\\\nZDcwNDkxYzYyZWU2ODFiPT9jb3JlOjpzbGljZTo6aW5kZXg6OnNsaWNlX2VuZF9pbmRleF9sZW5fZm\\\nFpbDo6aGE4YjlhOWIzYWZhZWMwZTg+QWNvcmU6OnNsaWNlOjppbmRleDo6c2xpY2Vfc3RhcnRfaW5k\\\nZXhfbGVuX2ZhaWw6OmgwZGEzZjM3MTE4ZDhkMGQ3P05jb3JlOjpzbGljZTo6PGltcGwgW1RdPjo6Y2\\\n9weV9mcm9tX3NsaWNlOjpsZW5fbWlzbWF0Y2hfZmFpbDo6aGM2ODk0ZDBmNjI1ZTk3MDhANmNvcmU6\\\nOnBhbmlja2luZzo6cGFuaWNfYm91bmRzX2NoZWNrOjpoMzBhNTU4M2M0NmY2MzMxN0FQPGFycmF5dm\\\nVjOjplcnJvcnM6OkNhcGFjaXR5RXJyb3I8VD4gYXMgY29yZTo6Zm10OjpEZWJ1Zz46OmZtdDo6aDdm\\\nN2U3YmE2MjU0MGYxZjNCUDxhcnJheXZlYzo6ZXJyb3JzOjpDYXBhY2l0eUVycm9yPFQ+IGFzIGNvcm\\\nU6OmZtdDo6RGVidWc+OjpmbXQ6Omg5ZWZmMjkwODYzZWVjNjFkQxhfX3diZ19kaWdlc3Rjb250ZXh0\\\nX2ZyZWVEN3N0ZDo6cGFuaWNraW5nOjpydXN0X3BhbmljX3dpdGhfaG9vazo6aDlhYWJkOTA2MjE4OD\\\nk3YzNFEV9fd2JpbmRnZW5fbWFsbG9jRjFjb21waWxlcl9idWlsdGluczo6bWVtOjptZW1jbXA6Omhh\\\nZDVkNjUxNGEyM2NjZWZmRxRkaWdlc3Rjb250ZXh0X3VwZGF0ZUgpY29yZTo6cGFuaWNraW5nOjpwYW\\\n5pYzo6aDExYTIwMjFkOTJkYzFjYmJJQ2NvcmU6OmZtdDo6Rm9ybWF0dGVyOjpwYWRfaW50ZWdyYWw6\\\nOndyaXRlX3ByZWZpeDo6aDZjOWE3Njk3NzdhYWQ2NzRKNGFsbG9jOjpyYXdfdmVjOjpjYXBhY2l0eV\\\n9vdmVyZmxvdzo6aDRlNWU5MDZiMTcyOWQwMTFLLWNvcmU6OnBhbmlja2luZzo6cGFuaWNfZm10Ojpo\\\nM2FmZjg1NWZlOTM4YzEzZkxDc3RkOjpwYW5pY2tpbmc6OmJlZ2luX3BhbmljX2hhbmRsZXI6Ont7Y2\\\nxvc3VyZX19OjpoOTZkMmJjMzgxZmE2ZWUxZU0SX193YmluZGdlbl9yZWFsbG9jTj93YXNtX2JpbmRn\\\nZW46OmNvbnZlcnQ6OmNsb3N1cmVzOjppbnZva2U0X211dDo6aGE4NWM3OTVkNWJiNDI0MTdPP3dhc2\\\n1fYmluZGdlbjo6Y29udmVydDo6Y2xvc3VyZXM6Omludm9rZTNfbXV0OjpoYTlkZjAyMTQ0YTQwMGI3\\\nMVA/d2FzbV9iaW5kZ2VuOjpjb252ZXJ0OjpjbG9zdXJlczo6aW52b2tlM19tdXQ6Omg2OTFjYjgxZD\\\ndhODI4MTlhUT93YXNtX2JpbmRnZW46OmNvbnZlcnQ6OmNsb3N1cmVzOjppbnZva2UzX211dDo6aDZh\\\nMmUyNzUzOGUxZmQ4MTBSP3dhc21fYmluZGdlbjo6Y29udmVydDo6Y2xvc3VyZXM6Omludm9rZTNfbX\\\nV0OjpoMDUxODkyNmI4ZTg5ZmI5NFM/d2FzbV9iaW5kZ2VuOjpjb252ZXJ0OjpjbG9zdXJlczo6aW52\\\nb2tlM19tdXQ6Omg5NWM1OTk3NGZkZGVhNWI3VD93YXNtX2JpbmRnZW46OmNvbnZlcnQ6OmNsb3N1cm\\\nVzOjppbnZva2UzX211dDo6aDJjMTI4NDcwMjVmMzBjOTlVP3dhc21fYmluZGdlbjo6Y29udmVydDo6\\\nY2xvc3VyZXM6Omludm9rZTNfbXV0OjpoNzY0Yzc0ODFiYzM1Y2E2YVY/d2FzbV9iaW5kZ2VuOjpjb2\\\n52ZXJ0OjpjbG9zdXJlczo6aW52b2tlM19tdXQ6OmgwOTgxODgyNjA0MDY0MGE1Vz93YXNtX2JpbmRn\\\nZW46OmNvbnZlcnQ6OmNsb3N1cmVzOjppbnZva2UyX211dDo6aDBiZTc2OTU2MDFiM2RmNGRYEXJ1c3\\\nRfYmVnaW5fdW53aW5kWT93YXNtX2JpbmRnZW46OmNvbnZlcnQ6OmNsb3N1cmVzOjppbnZva2UxX211\\\ndDo6aDNhODY3YjY0ZmUwYWFiNmZaMDwmVCBhcyBjb3JlOjpmbXQ6OkRlYnVnPjo6Zm10OjpoNTM3Nz\\\nkzYWE4MjQxMDQ4MFsyPCZUIGFzIGNvcmU6OmZtdDo6RGlzcGxheT46OmZtdDo6aDNhYWRlZGFlZDIw\\\nOGQ2MTBcMTxUIGFzIGNvcmU6OmFueTo6QW55Pjo6dHlwZV9pZDo6aGU1MmMxZDgyMGFjZjI0MTldD1\\\n9fd2JpbmRnZW5fZnJlZV4uY29yZTo6b3B0aW9uOjp1bndyYXBfZmFpbGVkOjpoMGUwYjIzMTYyM2Uw\\\nZDAwNF85Y29yZTo6b3BzOjpmdW5jdGlvbjo6Rm5PbmNlOjpjYWxsX29uY2U6OmhhY2E1ZDVhNmNjNz\\\nYwY2I2YB9fX3diaW5kZ2VuX2FkZF90b19zdGFja19wb2ludGVyYTF3YXNtX2JpbmRnZW46Ol9fcnQ6\\\nOnRocm93X251bGw6OmhkNmJjZTg5MGIxMjgyMDk3YjJ3YXNtX2JpbmRnZW46Ol9fcnQ6OmJvcnJvd1\\\n9mYWlsOjpoYmMzYmQxMjRhYTdhNmIyM2Mqd2FzbV9iaW5kZ2VuOjp0aHJvd19zdHI6OmhhNjgwY2I3\\\nZjEyZTAyYzk4ZElzdGQ6OnN5c19jb21tb246OmJhY2t0cmFjZTo6X19ydXN0X2VuZF9zaG9ydF9iYW\\\nNrdHJhY2U6OmhhNzY1MTNhNzBiYjA3MGIwZQZtZW1jcHlmBm1lbXNldGcGbWVtY21waApydXN0X3Bh\\\nbmljaVZjb3JlOjpwdHI6OmRyb3BfaW5fcGxhY2U8YXJyYXl2ZWM6OmVycm9yczo6Q2FwYWNpdHlFcn\\\nJvcjxbdTg7IDMyXT4+OjpoZmVjZDhkNzYxMTVjNjA2Y2pXY29yZTo6cHRyOjpkcm9wX2luX3BsYWNl\\\nPGFycmF5dmVjOjplcnJvcnM6OkNhcGFjaXR5RXJyb3I8Jlt1ODsgNjRdPj46Omg4NjUxY2YyYTQ5NW\\\nMyOTNmaz1jb3JlOjpwdHI6OmRyb3BfaW5fcGxhY2U8Y29yZTo6Zm10OjpFcnJvcj46Omg5YTkzNjE3\\\nOWFjZDQ1YjNkAG8JcHJvZHVjZXJzAghsYW5ndWFnZQEEUnVzdAAMcHJvY2Vzc2VkLWJ5AwVydXN0Yx\\\n0xLjc3LjIgKDI1ZWY5ZTNkOCAyMDI0LTA0LTA5KQZ3YWxydXMGMC4yMC4zDHdhc20tYmluZGdlbgYw\\\nLjIuOTIALA90YXJnZXRfZmVhdHVyZXMCKw9tdXRhYmxlLWdsb2JhbHMrCHNpZ24tZXh0\\\n \",\n );\n const wasmModule = new WebAssembly.Module(wasmBytes);\n return new WebAssembly.Instance(wasmModule, imports);\n}\n\nfunction base64decode(b64) {\n const binString = atob(b64);\n const size = binString.length;\n const bytes = new Uint8Array(size);\n for (let i = 0; i < size; i++) {\n bytes[i] = binString.charCodeAt(i);\n }\n return bytes;\n}\n", "// Copyright 2018-2025 the Deno authors. MIT license.\nexport {\n instantiate as instantiateWasm,\n} from \"./lib/deno_std_wasm_crypto.generated.mjs\";\n\n/**\n * All cryptographic hash/digest algorithms supported by std/crypto.\n *\n * For algorithms that are supported by WebCrypto, the name here will match the\n * one used by WebCrypto. Otherwise we prefer the formatting used in the\n * algorithm's official specification. All names are uppercase to facilitate\n * case-insensitive comparisons required by the WebCrypto spec.\n */\nexport const DIGEST_ALGORITHM_NAMES = [\n \"BLAKE2B\",\n \"BLAKE2B-128\",\n \"BLAKE2B-160\",\n \"BLAKE2B-224\",\n \"BLAKE2B-256\",\n \"BLAKE2B-384\",\n \"BLAKE2S\",\n \"BLAKE3\",\n \"KECCAK-224\",\n \"KECCAK-256\",\n \"KECCAK-384\",\n \"KECCAK-512\",\n \"SHA-384\",\n \"SHA3-224\",\n \"SHA3-256\",\n \"SHA3-384\",\n \"SHA3-512\",\n \"SHAKE128\",\n \"SHAKE256\",\n \"TIGER\",\n // insecure (length-extendable):\n \"RIPEMD-160\",\n \"SHA-224\",\n \"SHA-256\",\n \"SHA-512\",\n // insecure (length-extendable and collidable):\n \"MD4\",\n \"MD5\",\n \"SHA-1\",\n // insecure (non-cryptographic)\n \"FNV32\",\n \"FNV32A\",\n \"FNV64\",\n \"FNV64A\",\n] as const;\n\n/** An algorithm name supported by std/crypto. */\nexport type DigestAlgorithmName = typeof DIGEST_ALGORITHM_NAMES[number];\n", "// Copyright 2018-2025 the Deno authors. MIT license.\n// This module is browser compatible.\n\n/**\n * Extensions to the\n * {@link https://developer.mozilla.org/en-US/docs/Web/API/Web_Crypto_API | Web Crypto API}\n * supporting additional encryption APIs, but also delegating to the built-in\n * APIs when possible.\n *\n * Provides additional digest algorithms that are not part of the WebCrypto\n * standard as well as a `subtle.digest` and `subtle.digestSync` methods.\n *\n * The {@linkcode KeyStack} export implements the {@linkcode KeyRing} interface\n * for managing rotatable keys for signing data to prevent tampering, like with\n * HTTP cookies.\n *\n * ## Supported algorithms\n *\n * Here is a list of supported algorithms. If the algorithm name in WebCrypto\n * and Wasm/Rust is the same, this library prefers to use the implementation\n * provided by WebCrypto.\n *\n * Length-adjustable algorithms support the\n * {@linkcode DigestAlgorithmObject.length} option.\n *\n * WebCrypto:\n * - `SHA-384`\n * - `SHA-256` (length-extendable)\n * - `SHA-512` (length-extendable)\n *\n * Wasm/Rust:\n * - `BLAKE2B`\n * - `BLAKE2B-128`\n * - `BLAKE2B-160`\n * - `BLAKE2B-224`\n * - `BLAKE2B-256`\n * - `BLAKE2B-384`\n * - `BLAKE2S`\n * - `BLAKE3` (length-adjustable)\n * - `KECCAK-224`\n * - `KECCAK-256`\n * - `KECCAK-384`\n * - `KECCAK-512`\n * - `SHA-384`\n * - `SHA3-224`\n * - `SHA3-256`\n * - `SHA3-384`\n * - `SHA3-512`\n * - `SHAKE128` (length-adjustable)\n * - `SHAKE256` (length-adjustable)\n * - `TIGER`\n * - `RIPEMD-160` (length-extendable)\n * - `SHA-224` (length-extendable)\n * - `SHA-256` (length-extendable)\n * - `SHA-512` (length-extendable)\n * - `MD4` (length-extendable and collidable)\n * - `MD5` (length-extendable and collidable)\n * - `SHA-1` (length-extendable and collidable)\n * - `FNV32` (non-cryptographic)\n * - `FNV32A` (non-cryptographic)\n * - `FNV64` (non-cryptographic)\n * - `FNV64A` (non-cryptographic)\n *\n * @example\n * ```ts\n * import { crypto } from \"@std/crypto\";\n *\n * // This will delegate to the runtime's WebCrypto implementation.\n * console.log(\n * new Uint8Array(\n * await crypto.subtle.digest(\n * \"SHA-384\",\n * new TextEncoder().encode(\"hello world\"),\n * ),\n * ),\n * );\n *\n * // This will use a bundled Wasm/Rust implementation.\n * console.log(\n * new Uint8Array(\n * await crypto.subtle.digest(\n * \"BLAKE3\",\n * new TextEncoder().encode(\"hello world\"),\n * ),\n * ),\n * );\n * ```\n *\n * @example Convert hash to a string\n *\n * ```ts\n * import {\n * crypto,\n * } from \"@std/crypto\";\n * import { encodeHex } from \"@std/encoding/hex\"\n * import { encodeBase64 } from \"@std/encoding/base64\"\n *\n * const hash = await crypto.subtle.digest(\n * \"SHA-384\",\n * new TextEncoder().encode(\"You hear that Mr. Anderson?\"),\n * );\n *\n * // Hex encoding\n * console.log(encodeHex(hash));\n *\n * // Or with base64 encoding\n * console.log(encodeBase64(hash));\n * ```\n *\n * @module\n */\nimport {\n DIGEST_ALGORITHM_NAMES,\n type DigestAlgorithmName,\n instantiateWasm,\n} from \"./_wasm/mod.ts\";\n\nexport { DIGEST_ALGORITHM_NAMES, type DigestAlgorithmName };\n\n/** Digest algorithms supported by WebCrypto. */\nconst WEB_CRYPTO_DIGEST_ALGORITHM_NAMES = [\n \"SHA-384\",\n \"SHA-256\",\n \"SHA-512\",\n // insecure (length-extendable and collidable):\n \"SHA-1\",\n] as const;\n\n/**\n * A copy of the global WebCrypto interface, with methods bound so they're\n * safe to re-export.\n */\nconst webCrypto = ((crypto) => ({\n getRandomValues: crypto.getRandomValues?.bind(crypto),\n randomUUID: crypto.randomUUID?.bind(crypto),\n subtle: {\n decrypt: crypto.subtle?.decrypt?.bind(crypto.subtle),\n deriveBits: crypto.subtle?.deriveBits?.bind(crypto.subtle),\n deriveKey: crypto.subtle?.deriveKey?.bind(crypto.subtle),\n digest: crypto.subtle?.digest?.bind(crypto.subtle),\n encrypt: crypto.subtle?.encrypt?.bind(crypto.subtle),\n exportKey: crypto.subtle?.exportKey?.bind(crypto.subtle),\n generateKey: crypto.subtle?.generateKey?.bind(crypto.subtle),\n importKey: crypto.subtle?.importKey?.bind(crypto.subtle),\n sign: crypto.subtle?.sign?.bind(crypto.subtle),\n unwrapKey: crypto.subtle?.unwrapKey?.bind(crypto.subtle),\n verify: crypto.subtle?.verify?.bind(crypto.subtle),\n wrapKey: crypto.subtle?.wrapKey?.bind(crypto.subtle),\n },\n}))(globalThis.crypto);\n\nfunction toUint8Array(data: unknown): Uint8Array | undefined {\n if (data instanceof Uint8Array) {\n return data;\n } else if (ArrayBuffer.isView(data)) {\n return new Uint8Array(data.buffer, data.byteOffset, data.byteLength);\n } else if (data instanceof ArrayBuffer) {\n return new Uint8Array(data);\n }\n return undefined;\n}\n\n/** Extensions to the web standard `SubtleCrypto` interface. */\nexport interface StdSubtleCrypto extends SubtleCrypto {\n /**\n * Returns a new `Promise` object that will digest `data` using the specified\n * `AlgorithmIdentifier`.\n */\n digest(\n algorithm: DigestAlgorithm,\n data: BufferSource | AsyncIterable | Iterable,\n ): Promise;\n\n /**\n * Returns a ArrayBuffer with the result of digesting `data` using the\n * specified `AlgorithmIdentifier`.\n */\n digestSync(\n algorithm: DigestAlgorithm,\n data: BufferSource | Iterable,\n ): ArrayBuffer;\n}\n\n/** Extensions to the Web {@linkcode Crypto} interface. */\nexport interface StdCrypto extends Crypto {\n /** Extension to the {@linkcode crypto.SubtleCrypto} interface. */\n readonly subtle: StdSubtleCrypto;\n}\n\n/**\n * A wrapper for WebCrypto which adds support for additional non-standard\n * algorithms, but delegates to the runtime WebCrypto implementation whenever\n * possible.\n */\nconst stdCrypto: StdCrypto = ((x) => x)({\n ...webCrypto,\n subtle: {\n ...webCrypto.subtle,\n\n /**\n * Polyfills stream support until the Web Crypto API does so:\n * @see {@link https://github.com/wintercg/proposal-webcrypto-streams}\n */\n async digest(\n algorithm: DigestAlgorithm,\n data: BufferSource | AsyncIterable | Iterable,\n ): Promise {\n const { name, length } = normalizeAlgorithm(algorithm);\n\n assertValidDigestLength(length);\n\n // We delegate to WebCrypto whenever possible,\n if (\n // if the algorithm is supported by the WebCrypto standard,\n (WEB_CRYPTO_DIGEST_ALGORITHM_NAMES as readonly string[]).includes(\n name,\n ) &&\n // and the data is a single buffer,\n isBufferSource(data)\n ) {\n return await webCrypto.subtle.digest(algorithm, data);\n } else if (DIGEST_ALGORITHM_NAMES.includes(name as DigestAlgorithmName)) {\n if (isBufferSource(data)) {\n // Otherwise, we use our bundled Wasm implementation via digestSync\n // if it supports the algorithm.\n return stdCrypto.subtle.digestSync(algorithm, data);\n } else if (isIterable(data)) {\n return stdCrypto.subtle.digestSync(\n algorithm,\n data as Iterable,\n );\n } else if (isAsyncIterable(data)) {\n const wasmCrypto = instantiateWasm();\n const context = new wasmCrypto.DigestContext(name);\n for await (const chunk of data as AsyncIterable) {\n const chunkBytes = toUint8Array(chunk);\n if (!chunkBytes) {\n throw new TypeError(\n \"Cannot digest the data: A chunk is not ArrayBuffer nor ArrayBufferView\",\n );\n }\n context.update(chunkBytes);\n }\n return context.digestAndDrop(length).buffer as ArrayBuffer;\n } else {\n throw new TypeError(\n \"data must be a BufferSource or [Async]Iterable\",\n );\n }\n }\n // (TypeScript type definitions prohibit this case.) If they're trying\n // to call an algorithm we don't recognize, pass it along to WebCrypto\n // in case it's a non-standard algorithm supported by the the runtime\n // they're using.\n return await webCrypto.subtle.digest(algorithm, data as BufferSource);\n },\n\n digestSync(\n algorithm: DigestAlgorithm,\n data: BufferSource | Iterable,\n ): ArrayBuffer {\n const { name, length } = normalizeAlgorithm(algorithm);\n assertValidDigestLength(length);\n\n const wasmCrypto = instantiateWasm();\n if (isBufferSource(data)) {\n const bytes = toUint8Array(data)!;\n return wasmCrypto.digest(name, bytes, length).buffer as ArrayBuffer;\n }\n if (isIterable(data)) {\n const context = new wasmCrypto.DigestContext(name);\n for (const chunk of data) {\n const chunkBytes = toUint8Array(chunk);\n if (!chunkBytes) {\n throw new TypeError(\n \"Cannot digest the data: A chunk is not ArrayBuffer nor ArrayBufferView\",\n );\n }\n context.update(chunkBytes);\n }\n return context.digestAndDrop(length).buffer as ArrayBuffer;\n }\n throw new TypeError(\n \"data must be a BufferSource or Iterable\",\n );\n },\n },\n});\n\n/*\n * The largest digest length the current Wasm implementation can support. This\n * is the value of `isize::MAX` on 32-bit platforms like Wasm, which is the\n * maximum allowed capacity of a Rust `Vec`.\n */\nconst MAX_DIGEST_LENGTH = 0x7FFF_FFFF;\n\n/**\n * Asserts that a number is a valid length for a digest, which must be an\n * integer that fits in a Rust `Vec`, or be undefined.\n */\nfunction assertValidDigestLength(value?: number) {\n if (\n value !== undefined &&\n (value < 0 || value > MAX_DIGEST_LENGTH ||\n !Number.isInteger(value))\n ) {\n throw new RangeError(\n `length must be an integer between 0 and ${MAX_DIGEST_LENGTH}, inclusive`,\n );\n }\n}\n\n/** Extended digest algorithm objects. */\nexport type DigestAlgorithmObject = {\n name: DigestAlgorithmName;\n length?: number;\n};\n\n/**\n * Extended digest algorithms accepted by {@linkcode stdCrypto.subtle.digest}.\n *\n * The `length` option will be ignored for\n * {@link https://developer.mozilla.org/en-US/docs/Web/API/SubtleCrypto/digest#algorithm | Web Standard algorithms}.\n */\nexport type DigestAlgorithm = DigestAlgorithmName | DigestAlgorithmObject;\n\nfunction normalizeAlgorithm(algorithm: DigestAlgorithm) {\n return ((typeof algorithm === \"string\")\n ? { name: algorithm.toUpperCase() }\n : {\n ...algorithm,\n name: algorithm.name.toUpperCase(),\n }) as DigestAlgorithmObject;\n}\n\nfunction isBufferSource(obj: unknown): obj is BufferSource {\n return obj instanceof ArrayBuffer || ArrayBuffer.isView(obj);\n}\n\nfunction isIterable(obj: unknown): obj is Iterable {\n return typeof (obj as Iterable)[Symbol.iterator] === \"function\";\n}\n\nfunction isAsyncIterable(obj: unknown): obj is AsyncIterable {\n return typeof (obj as AsyncIterable)[Symbol.asyncIterator] === \"function\";\n}\n\nexport { stdCrypto as crypto };\n", "import { validate } from \"jsr:@std/uuid@^1.0.4\";\nimport { Endian } from \"./endian.ts\";\n\n/**\n * Reads bytes from a Uint8Array.\n */\nexport class ByteReader {\n private data: Uint8Array;\n private position: number;\n private endian: Endian;\n\n /**\n * Reads bytes from a Uint8Array.\n */\n constructor(data: Uint8Array, endian: Endian) {\n this.data = data;\n this.position = 0;\n this.endian = endian;\n }\n\n /**\n * Reads the next byte as an unsigned 8-bit integer.\n */\n public readU8(): number {\n if (this.position >= this.data.length) {\n throw new Error(\"End of buffer\");\n }\n\n return this.data[this.position++];\n }\n\n /**\n * Reads the next byte as a signed 8-bit integer.\n */\n public readI8(): number {\n if (this.position >= this.data.length) {\n throw new Error(\"End of buffer\");\n }\n\n const value = this.data[this.position++];\n return value > 127 ? value - 256 : value;\n }\n\n /**\n * Reads the next two bytes as an unsigned 16-bit integer.\n */\n public readU16(): number {\n if (this.position + 2 > this.data.length) {\n throw new Error(\"Not enough bytes to read u16\");\n }\n\n const value = this.endian === Endian.Little\n ? this.data[this.position] | (this.data[this.position + 1] << 8)\n : (this.data[this.position] << 8) | this.data[this.position + 1];\n this.position += 2;\n return value;\n }\n\n /**\n * Reads the next two bytes as a signed 16-bit integer.\n */\n public readI16(): number {\n if (this.position + 2 > this.data.length) {\n throw new Error(\"Not enough bytes to read i16\");\n }\n\n const value = this.readU16();\n return value > 32767 ? value - 65536 : value;\n }\n\n /**\n * Reads the next four bytes as an unsigned 32-bit integer.\n */\n public readU32(): number {\n if (this.position + 4 > this.data.length) {\n throw new Error(\"Not enough bytes to read u32\");\n }\n\n const value = this.endian === Endian.Little\n ? this.data[this.position] |\n (this.data[this.position + 1] << 8) |\n (this.data[this.position + 2] << 16) |\n (this.data[this.position + 3] << 24)\n : (this.data[this.position] << 24) |\n (this.data[this.position + 1] << 16) |\n (this.data[this.position + 2] << 8) |\n this.data[this.position + 3];\n this.position += 4;\n return value >>> 0;\n }\n\n /**\n * Reads the next four bytes as a signed 32-bit integer.\n */\n public readI32(): number {\n if (this.position + 4 > this.data.length) {\n throw new Error(\"Not enough bytes to read i32\");\n }\n\n const value = this.readU32();\n return value > 2147483647 ? value - 4294967296 : value;\n }\n\n /**\n * Reads the next eight bytes as an unsigned 64-bit integer.\n */\n public readU64(): bigint {\n if (this.position + 8 > this.data.length) {\n throw new Error(\"Not enough bytes to read u64\");\n }\n\n const low = BigInt(this.readU32());\n const high = BigInt(this.readU32());\n return this.endian === Endian.Little ? (high << 32n) | low : (low << 32n) | high;\n }\n\n /**\n * Reads the next eight bytes as a signed 64-bit integer.\n */\n public readI64(): bigint {\n if (this.position + 8 > this.data.length) {\n throw new Error(\"Not enough bytes to read i64\");\n }\n\n const value = this.readU64();\n return value > 9223372036854775807n ? value - 18446744073709551616n : value;\n }\n\n /**\n * Reads the next byte as an unsigned 8-bit integer to determine the length of the string,\n * then reads that many bytes as a UTF-8 string.\n */\n public readString(): string {\n const length = this.readU8();\n if (this.position + length > this.data.length) {\n throw new Error(\"Not enough bytes to read string\");\n }\n\n const stringBytes: Uint8Array = this.data.slice(this.position, this.position + length);\n this.position += length;\n return new TextDecoder().decode(stringBytes);\n }\n\n /**\n * Reads the next sixteen bytes as a UUID.\n */\n public readUuid(): string {\n if (this.position + 16 > this.data.length) {\n throw new Error(\"Not enough bytes to read UUID\");\n }\n\n const uuidBytes: Uint8Array = this.data.slice(this.position, this.position + 16);\n this.position += 16;\n\n const hex: string = Array.from(uuidBytes, (byte) => byte.toString(16).padStart(2, \"0\")).join(\"\");\n const uuid: string = `${hex.slice(0, 8)}-${hex.slice(8, 12)}-${hex.slice(12, 16)}-${hex.slice(16, 20)}-${\n hex.slice(20)\n }`;\n\n if (!validate(uuid)) {\n throw new Error(`Invalid UUID: '${uuid}'`);\n }\n\n return uuid;\n }\n\n /**\n * Reads the remaining bytes in the buffer.\n */\n public readRemainingBytes(): Uint8Array {\n const remaining: Uint8Array = this.data.slice(this.position);\n this.position = this.data.length;\n return remaining;\n }\n\n /**\n * Whether the buffer is empty.\n */\n public isEmpty(): boolean {\n return this.position >= this.data.length;\n }\n\n /**\n * The number of bytes remaining in the buffer.\n */\n public remaining(): number {\n return this.data.length - this.position;\n }\n}\n", "import { validate } from \"jsr:@std/uuid@^1.0.4\";\nimport { Endian } from \"./endian.ts\";\n\n/**\n * Writes bytes to a Uint8Array.\n */\nexport class ByteWriter {\n private bytes: number[];\n private endian: Endian;\n\n /**\n * Writes bytes to a Uint8Array.\n */\n constructor(endian: Endian) {\n this.bytes = [];\n this.endian = endian;\n }\n\n /**\n * Writes an unsigned 8-bit integer.\n */\n public writeU8(value: number): void {\n if (value < 0 || value > 255) {\n throw new Error(`Invalid u8 value: '${value}'`);\n }\n\n this.bytes.push(value);\n }\n\n /**\n * Writes a signed 8-bit integer.\n */\n public writeI8(value: number): void {\n if (value < -128 || value > 127) {\n throw new Error(`Invalid i8 value: '${value}'`);\n }\n\n this.bytes.push(value & 0xFF);\n }\n\n /**\n * Writes an unsigned 16-bit integer.\n */\n public writeU16(value: number): void {\n if (value < 0 || value > 65535) {\n throw new Error(`Invalid u16 value: '${value}'`);\n }\n\n const bytes: number[] = [value & 0xFF, (value >> 8) & 0xFF];\n this.bytes.push(...(this.endian === Endian.Little ? bytes : bytes.reverse()));\n }\n\n /**\n * Writes a signed 16-bit integer.\n */\n public writeI16(value: number): void {\n if (value < -32768 || value > 32767) {\n throw new Error(`Invalid i16 value: '${value}'`);\n }\n\n const bytes: number[] = [value & 0xFF, (value >> 8) & 0xFF];\n this.bytes.push(...(this.endian === Endian.Little ? bytes : bytes.reverse()));\n }\n\n /**\n * Writes an unsigned 32-bit integer.\n */\n public writeU32(value: number): void {\n if (value < 0 || value > 4294967295) {\n throw new Error(`Invalid u32 value: '${value}'`);\n }\n\n const bytes: number[] = [\n value & 0xFF,\n (value >> 8) & 0xFF,\n (value >> 16) & 0xFF,\n (value >> 24) & 0xFF,\n ];\n this.bytes.push(...(this.endian === Endian.Little ? bytes : bytes.reverse()));\n }\n\n /**\n * Writes a signed 32-bit integer.\n */\n public writeI32(value: number): void {\n if (value < -2147483648 || value > 2147483647) {\n throw new Error(`Invalid i32 value: '${value}'`);\n }\n\n const bytes: number[] = [\n value & 0xFF,\n (value >> 8) & 0xFF,\n (value >> 16) & 0xFF,\n (value >> 24) & 0xFF,\n ];\n this.bytes.push(...(this.endian === Endian.Little ? bytes : bytes.reverse()));\n }\n\n /**\n * Writes an unsigned 64-bit integer.\n */\n public writeU64(value: bigint): void {\n if (value < 0n || value > 18446744073709551615n) {\n throw new Error(`Invalid u64 value: '${value}'`);\n }\n\n const bytes: number[] = Array.from({ length: 8 }, (_, i) => Number((value >> BigInt(i * 8)) & 0xFFn));\n this.bytes.push(...(this.endian === Endian.Little ? bytes : bytes.reverse()));\n }\n\n /**\n * Writes a signed 64-bit integer.\n */\n public writeI64(value: bigint): void {\n if (value < -9223372036854775808n || value > 9223372036854775807n) {\n throw new Error(`Invalid i64 value: '${value}'`);\n }\n\n const bytes: number[] = Array.from(\n { length: 8 },\n (_: unknown, i: number) => Number((value >> BigInt(i * 8)) & 0xFFn),\n );\n this.bytes.push(...(this.endian === Endian.Little ? bytes : bytes.reverse()));\n }\n\n /**\n * Writes the length of the string as an unsigned 8-bit integer,\n * then writes the rest of the UTF-8 string's bytes.\n */\n public writeString(value: string): void {\n const stringBytes: Uint8Array = new TextEncoder().encode(value);\n if (stringBytes.length > 255) {\n throw new Error(`String too long: '${stringBytes.length}' bytes`);\n }\n\n this.writeU8(stringBytes.length);\n this.bytes.push(...stringBytes);\n }\n\n /**\n * Writes a UUID as 16 bytes.\n */\n public writeUuid(uuid: string): void {\n if (!validate(uuid)) {\n throw new Error(`Invalid UUID: '${uuid}'`);\n }\n\n const uuidBytes: Uint8Array = new Uint8Array(\n uuid.replace(/-/g, \"\").match(/.{2}/g)!.map((byte) => parseInt(byte, 16)),\n );\n this.bytes.push(...uuidBytes);\n }\n\n /**\n * Returns the written bytes as a Uint8Array.\n */\n public getBytes(): Uint8Array {\n return new Uint8Array(this.bytes);\n }\n}\n", "import { ByteReader, ByteWriter, Endian } from \"@todd/byte-transcoder\";\n\nexport enum OutgoingPayloadType {\n Ping = 0,\n LogIn = 1,\n LogOut = 2,\n CreatePrivateGame = 3,\n JoinPrivateGame = 4,\n LeavePrivateGame = 5,\n StartPrivateGame = 6,\n RevealTile = 7,\n FlagTile = 8,\n ChangeUsername = 9,\n JoinPublicGameQueue = 10,\n}\n\nexport type OutgoingPayload =\n | { type: OutgoingPayloadType.Ping; clientTimeUnixMs: bigint }\n | { type: OutgoingPayloadType.LogIn; username: string }\n | { type: OutgoingPayloadType.LogOut }\n | { type: OutgoingPayloadType.CreatePrivateGame }\n | { type: OutgoingPayloadType.JoinPrivateGame; joinCode: string }\n | { type: OutgoingPayloadType.LeavePrivateGame }\n | { type: OutgoingPayloadType.StartPrivateGame }\n | { type: OutgoingPayloadType.RevealTile; index: number }\n | { type: OutgoingPayloadType.FlagTile; index: number }\n | { type: OutgoingPayloadType.ChangeUsername; username: string }\n | { type: OutgoingPayloadType.JoinPublicGameQueue };\n\nexport class OutgoingPayloadSerializer {\n public static toBytes(payload: OutgoingPayload): Uint8Array {\n const byteWriter: ByteWriter = new ByteWriter(Endian.Little);\n switch (payload.type) {\n case OutgoingPayloadType.Ping: {\n byteWriter.writeU8(payload.type);\n byteWriter.writeI64(payload.clientTimeUnixMs);\n break;\n }\n case OutgoingPayloadType.LogIn: {\n byteWriter.writeU8(payload.type);\n byteWriter.writeString(payload.username);\n break;\n }\n case OutgoingPayloadType.LogOut: {\n byteWriter.writeU8(payload.type);\n break;\n }\n case OutgoingPayloadType.CreatePrivateGame: {\n byteWriter.writeU8(payload.type);\n break;\n }\n case OutgoingPayloadType.JoinPrivateGame: {\n byteWriter.writeU8(payload.type);\n byteWriter.writeString(payload.joinCode);\n break;\n }\n case OutgoingPayloadType.LeavePrivateGame: {\n byteWriter.writeU8(payload.type);\n break;\n }\n case OutgoingPayloadType.StartPrivateGame: {\n byteWriter.writeU8(payload.type);\n break;\n }\n case OutgoingPayloadType.RevealTile: {\n byteWriter.writeU8(payload.type);\n byteWriter.writeU32(payload.index);\n break;\n }\n case OutgoingPayloadType.FlagTile: {\n byteWriter.writeU8(payload.type);\n byteWriter.writeU32(payload.index);\n break;\n }\n case OutgoingPayloadType.ChangeUsername: {\n byteWriter.writeU8(payload.type);\n byteWriter.writeString(payload.username);\n break;\n }\n case OutgoingPayloadType.JoinPublicGameQueue: {\n byteWriter.writeU8(payload.type);\n break;\n }\n }\n return byteWriter.getBytes();\n }\n\n public static fromBytes(bytes: Uint8Array): OutgoingPayload {\n const byteReader: ByteReader = new ByteReader(bytes, Endian.Little);\n if (byteReader.isEmpty()) {\n throw new Error(\"OutgoingPayload: empty byte array\");\n }\n\n let result: OutgoingPayload;\n const payloadType: number = byteReader.readU8();\n switch (payloadType) {\n case OutgoingPayloadType.Ping: {\n result = { type: payloadType, clientTimeUnixMs: byteReader.readI64() };\n break;\n }\n case OutgoingPayloadType.LogIn: {\n result = { type: payloadType, username: byteReader.readString() };\n break;\n }\n case OutgoingPayloadType.LogOut: {\n result = { type: payloadType };\n break;\n }\n case OutgoingPayloadType.CreatePrivateGame: {\n result = { type: payloadType };\n break;\n }\n case OutgoingPayloadType.JoinPrivateGame: {\n result = { type: payloadType, joinCode: byteReader.readString() };\n break;\n }\n case OutgoingPayloadType.LeavePrivateGame: {\n result = { type: payloadType };\n break;\n }\n case OutgoingPayloadType.StartPrivateGame: {\n result = { type: payloadType };\n break;\n }\n case OutgoingPayloadType.RevealTile: {\n result = { type: payloadType, index: byteReader.readU32() };\n break;\n }\n case OutgoingPayloadType.FlagTile: {\n result = { type: payloadType, index: byteReader.readU32() };\n break;\n }\n case OutgoingPayloadType.ChangeUsername: {\n result = { type: payloadType, username: byteReader.readString() };\n break;\n }\n case OutgoingPayloadType.JoinPublicGameQueue: {\n result = { type: payloadType };\n break;\n }\n\n default: {\n throw new Error(`OutgoingPayload: unknown message type: '${payloadType}'`);\n }\n }\n\n // verify that the entire byte array was consumed\n if (!byteReader.isEmpty()) {\n throw new Error(\"OutgoingPayload: unexpected bytes\");\n }\n\n return result;\n }\n}\n", "import { ByteReader, ByteWriter, Endian } from \"@todd/byte-transcoder\";\n\nexport enum IncomingPayloadType {\n Pong = 0,\n Error = 1,\n LoggedIn = 2,\n LoggedOut = 3,\n CreatedPrivateGame = 4,\n JoinedPrivateGame = 5,\n PlayerJoinedPrivateGame = 6,\n PlayerLeftPrivateGame = 7,\n StartedPrivateGame = 8,\n GameStateUpdate = 9,\n GameOver = 10,\n ChangedUsername = 11,\n JoinedPublicGameQueue = 12,\n PlayerJoinedPublicGameQueue = 13,\n PlayerLeftPublicGameQueue = 14,\n}\n\nexport type AccountPayload = { accountId: string; username: string };\n\nexport type PlayerOwnedTileUpdates = { playerId: number; tileUpdates: TileUpdate[] };\nexport type TileUpdate = { index: number; newType: number };\n\nexport enum WinCondition {\n LastPlayerAlive = 0,\n EntireBoardRevealedOrFlagged = 1,\n TimeLimit = 2,\n}\n\nexport type IncomingPayload =\n | { type: IncomingPayloadType.Pong; playersOnline: bigint; gamesInProgress: bigint }\n | { type: IncomingPayloadType.Error; originPayloadType: number; message: string }\n | { type: IncomingPayloadType.LoggedIn; accountId: string; username: string }\n | { type: IncomingPayloadType.LoggedOut }\n | { type: IncomingPayloadType.CreatedPrivateGame; gameId: string; joinCode: string }\n | { type: IncomingPayloadType.JoinedPrivateGame; gameId: string; joinCode: string; lobby: AccountPayload[] }\n | { type: IncomingPayloadType.PlayerJoinedPrivateGame; gameId: string; accountId: string; username: string }\n | { type: IncomingPayloadType.PlayerLeftPrivateGame; gameId: string; accountId: string }\n | {\n type: IncomingPayloadType.StartedPrivateGame;\n gameId: string;\n width: number;\n height: number;\n maxDurationSeconds: number;\n }\n | {\n type: IncomingPayloadType.GameStateUpdate;\n gameId: string;\n playerOwnedTileUpdates: PlayerOwnedTileUpdates[];\n deadPlayers: number[];\n }\n | { type: IncomingPayloadType.GameOver; gameId: string; winner: number; winCondition: WinCondition }\n | { type: IncomingPayloadType.ChangedUsername; username: string }\n | { type: IncomingPayloadType.JoinedPublicGameQueue; gameId: string; lobby: AccountPayload[] }\n | { type: IncomingPayloadType.PlayerJoinedPublicGameQueue; gameId: string; accountId: string; username: string }\n | { type: IncomingPayloadType.PlayerLeftPublicGameQueue; gameId: string; accountId: string };\n\nexport class IncomingPayloadSerializer {\n public static toBytes(payload: IncomingPayload): Uint8Array {\n const byteWriter: ByteWriter = new ByteWriter(Endian.Little);\n switch (payload.type) {\n case IncomingPayloadType.Pong: {\n byteWriter.writeU8(IncomingPayloadType.Pong);\n byteWriter.writeU64(payload.playersOnline);\n byteWriter.writeU64(payload.gamesInProgress);\n break;\n }\n case IncomingPayloadType.Error: {\n byteWriter.writeU8(IncomingPayloadType.Error);\n byteWriter.writeU8(payload.originPayloadType);\n byteWriter.writeString(payload.message);\n break;\n }\n case IncomingPayloadType.LoggedIn: {\n byteWriter.writeU8(IncomingPayloadType.LoggedIn);\n byteWriter.writeUuid(payload.accountId);\n byteWriter.writeString(payload.username);\n break;\n }\n case IncomingPayloadType.LoggedOut: {\n byteWriter.writeU8(IncomingPayloadType.LoggedOut);\n break;\n }\n case IncomingPayloadType.CreatedPrivateGame: {\n byteWriter.writeU8(IncomingPayloadType.CreatedPrivateGame);\n byteWriter.writeUuid(payload.gameId);\n byteWriter.writeString(payload.joinCode);\n break;\n }\n case IncomingPayloadType.JoinedPrivateGame: {\n byteWriter.writeU8(IncomingPayloadType.JoinedPrivateGame);\n byteWriter.writeUuid(payload.gameId);\n byteWriter.writeString(payload.joinCode);\n\n // lobby\n byteWriter.writeU8(payload.lobby.length);\n for (const account of payload.lobby) {\n byteWriter.writeUuid(account.accountId);\n byteWriter.writeString(account.username);\n }\n break;\n }\n case IncomingPayloadType.PlayerJoinedPrivateGame: {\n byteWriter.writeU8(IncomingPayloadType.PlayerJoinedPrivateGame);\n byteWriter.writeUuid(payload.gameId);\n byteWriter.writeUuid(payload.accountId);\n byteWriter.writeString(payload.username);\n break;\n }\n case IncomingPayloadType.PlayerLeftPrivateGame: {\n byteWriter.writeU8(IncomingPayloadType.PlayerLeftPrivateGame);\n byteWriter.writeUuid(payload.gameId);\n byteWriter.writeUuid(payload.accountId);\n break;\n }\n case IncomingPayloadType.StartedPrivateGame: {\n byteWriter.writeU8(IncomingPayloadType.StartedPrivateGame);\n byteWriter.writeUuid(payload.gameId);\n byteWriter.writeU16(payload.width);\n byteWriter.writeU16(payload.height);\n byteWriter.writeU16(payload.maxDurationSeconds);\n break;\n }\n case IncomingPayloadType.GameStateUpdate: {\n byteWriter.writeU8(IncomingPayloadType.GameStateUpdate);\n byteWriter.writeUuid(payload.gameId);\n\n // playerOwnedTileUpdates\n byteWriter.writeU8(payload.playerOwnedTileUpdates.length);\n for (const playerOwnedTileUpdate of payload.playerOwnedTileUpdates) {\n byteWriter.writeU8(playerOwnedTileUpdate.playerId);\n\n // tileUpdates\n byteWriter.writeU32(playerOwnedTileUpdate.tileUpdates.length);\n for (const tileUpdate of playerOwnedTileUpdate.tileUpdates) {\n byteWriter.writeU32(tileUpdate.index);\n byteWriter.writeU8(tileUpdate.newType);\n }\n }\n\n // deadPlayers\n byteWriter.writeU8(payload.deadPlayers.length);\n for (const player of payload.deadPlayers) {\n byteWriter.writeU8(player);\n }\n break;\n }\n case IncomingPayloadType.GameOver: {\n byteWriter.writeU8(IncomingPayloadType.GameOver);\n byteWriter.writeUuid(payload.gameId);\n byteWriter.writeU8(payload.winner);\n byteWriter.writeU8(payload.winCondition);\n break;\n }\n case IncomingPayloadType.ChangedUsername: {\n byteWriter.writeU8(IncomingPayloadType.ChangedUsername);\n byteWriter.writeString(payload.username);\n break;\n }\n case IncomingPayloadType.JoinedPublicGameQueue: {\n byteWriter.writeU8(IncomingPayloadType.JoinedPublicGameQueue);\n byteWriter.writeUuid(payload.gameId);\n\n // lobby\n byteWriter.writeU8(payload.lobby.length);\n for (const account of payload.lobby) {\n byteWriter.writeUuid(account.accountId);\n byteWriter.writeString(account.username);\n }\n break;\n }\n case IncomingPayloadType.PlayerJoinedPublicGameQueue: {\n byteWriter.writeU8(IncomingPayloadType.PlayerJoinedPublicGameQueue);\n byteWriter.writeUuid(payload.gameId);\n byteWriter.writeUuid(payload.accountId);\n byteWriter.writeString(payload.username);\n break;\n }\n case IncomingPayloadType.PlayerLeftPublicGameQueue: {\n byteWriter.writeU8(IncomingPayloadType.PlayerLeftPublicGameQueue);\n byteWriter.writeUuid(payload.gameId);\n byteWriter.writeUuid(payload.accountId);\n break;\n }\n }\n return byteWriter.getBytes();\n }\n\n public static fromBytes(bytes: Uint8Array): IncomingPayload {\n const byteReader: ByteReader = new ByteReader(bytes, Endian.Little);\n if (byteReader.isEmpty()) {\n throw new Error(\"IncomingPayload: empty byte array\");\n }\n\n let result: IncomingPayload;\n const payloadType: number = byteReader.readU8();\n switch (payloadType) {\n case IncomingPayloadType.Pong: {\n result = {\n type: payloadType,\n playersOnline: byteReader.readU64(),\n gamesInProgress: byteReader.readU64(),\n };\n break;\n }\n case IncomingPayloadType.Error: {\n result = {\n type: payloadType,\n originPayloadType: byteReader.readU8(),\n message: byteReader.readString(),\n };\n break;\n }\n case IncomingPayloadType.LoggedIn: {\n result = {\n type: payloadType,\n accountId: byteReader.readUuid(),\n username: byteReader.readString(),\n };\n break;\n }\n case IncomingPayloadType.LoggedOut: {\n result = { type: payloadType };\n break;\n }\n case IncomingPayloadType.CreatedPrivateGame: {\n result = {\n type: payloadType,\n gameId: byteReader.readUuid(),\n joinCode: byteReader.readString(),\n };\n break;\n }\n case IncomingPayloadType.JoinedPrivateGame: {\n const gameId: string = byteReader.readUuid();\n const joinCode: string = byteReader.readString();\n\n const lobby: AccountPayload[] = [];\n const lobbyLength: number = byteReader.readU8();\n for (let i = 0; i < lobbyLength; i++) {\n lobby.push({\n accountId: byteReader.readUuid(),\n username: byteReader.readString(),\n });\n }\n\n result = { type: payloadType, gameId, joinCode, lobby };\n break;\n }\n case IncomingPayloadType.PlayerJoinedPrivateGame: {\n result = {\n type: payloadType,\n gameId: byteReader.readUuid(),\n accountId: byteReader.readUuid(),\n username: byteReader.readString(),\n };\n break;\n }\n case IncomingPayloadType.PlayerLeftPrivateGame: {\n result = {\n type: payloadType,\n gameId: byteReader.readUuid(),\n accountId: byteReader.readUuid(),\n };\n break;\n }\n case IncomingPayloadType.StartedPrivateGame: {\n result = {\n type: payloadType,\n gameId: byteReader.readUuid(),\n width: byteReader.readU16(),\n height: byteReader.readU16(),\n maxDurationSeconds: byteReader.readU16(),\n };\n break;\n }\n case IncomingPayloadType.GameStateUpdate: {\n const gameId: string = byteReader.readUuid();\n\n const playerOwnedTileUpdates: PlayerOwnedTileUpdates[] = [];\n const playerOwnedTileUpdatesLength: number = byteReader.readU8();\n for (let i = 0; i < playerOwnedTileUpdatesLength; i++) {\n const playerId: number = byteReader.readU8();\n\n const tileUpdates: TileUpdate[] = [];\n const tileUpdatesLength: number = byteReader.readU32();\n for (let j = 0; j < tileUpdatesLength; j++) {\n tileUpdates.push({\n index: byteReader.readU32(),\n newType: byteReader.readU8(),\n });\n }\n\n playerOwnedTileUpdates.push({ playerId, tileUpdates });\n }\n\n const deadPlayers: number[] = [];\n const deadPlayersLength: number = byteReader.readU8();\n for (let i = 0; i < deadPlayersLength; i++) {\n deadPlayers.push(byteReader.readU8());\n }\n\n result = { type: payloadType, gameId, playerOwnedTileUpdates, deadPlayers };\n break;\n }\n case IncomingPayloadType.GameOver: {\n result = {\n type: payloadType,\n gameId: byteReader.readUuid(),\n winner: byteReader.readU8(),\n winCondition: byteReader.readU8(),\n };\n break;\n }\n case IncomingPayloadType.ChangedUsername: {\n result = { type: payloadType, username: byteReader.readString() };\n break;\n }\n case IncomingPayloadType.JoinedPublicGameQueue: {\n const gameId: string = byteReader.readUuid();\n\n const lobby: AccountPayload[] = [];\n const lobbyLength: number = byteReader.readU8();\n for (let i = 0; i < lobbyLength; i++) {\n lobby.push({\n accountId: byteReader.readUuid(),\n username: byteReader.readString(),\n });\n }\n\n result = { type: payloadType, gameId, lobby };\n break;\n }\n case IncomingPayloadType.PlayerJoinedPublicGameQueue: {\n result = {\n type: payloadType,\n gameId: byteReader.readUuid(),\n accountId: byteReader.readUuid(),\n username: byteReader.readString(),\n };\n break;\n }\n case IncomingPayloadType.PlayerLeftPublicGameQueue: {\n result = {\n type: payloadType,\n gameId: byteReader.readUuid(),\n accountId: byteReader.readUuid(),\n };\n break;\n }\n\n default: {\n throw new Error(`IncomingPayload: unknown message type: '${bytes[0]}'`);\n }\n }\n\n // verify that the entire byte array was consumed\n if (!byteReader.isEmpty()) {\n throw new Error(\"IncomingPayload: unexpected bytes\");\n }\n\n return result;\n }\n}\n", "import WebsocketWrapper from \"./websocket-wrapper.ts\";\nimport { OutgoingPayload, OutgoingPayloadSerializer, OutgoingPayloadType } from \"./codec/outgoing-payload.ts\";\nimport {\n IncomingPayload,\n IncomingPayloadSerializer,\n IncomingPayloadType,\n PlayerOwnedTileUpdates,\n TileUpdate,\n WinCondition,\n} from \"./codec/incoming-payload.ts\";\nimport { AccountPayload } from \"./codec/incoming-payload.ts\";\nimport Logger from \"jsr:@todd/webserver-base@0.0.4/logger\";\n\nexport default class ApiClient {\n private readonly debug: boolean;\n private readonly logger: Logger;\n private readonly ws: WebsocketWrapper;\n\n public callbackPong: ((playersOnline: bigint, gamesInProgress: bigint) => void) | null = null;\n public callbackError: ((originPayloadType: number, message: string) => void) | null = null;\n public callbackLoggedIn: ((accountId: string, username: string) => void) | null = null;\n public callbackLoggedOut: (() => void) | null = null;\n public callbackCreatedPrivateGame: ((gameId: string, joinCode: string) => void) | null = null;\n public callbackJoinedPrivateGame: ((gameId: string, joinCode: string, lobby: AccountPayload[]) => void) | null = null;\n public callbackPlayerJoinedPrivateGame: ((gameId: string, accountId: string, username: string) => void) | null = null;\n public callbackPlayerLeftPrivateGame: ((gameId: string, accountId: string) => void) | null = null;\n public callbackStartedPrivateGame:\n | ((gameId: string, width: number, height: number, maxDurationSeconds: number) => void)\n | null = null;\n public callbackGameStateUpdate:\n | ((gameId: string, playerOwnedTileUpdates: PlayerOwnedTileUpdates[], deadPlayers: number[]) => void)\n | null = null;\n public callbackGameOver: ((gameId: string, winner: number, winCondition: WinCondition) => void) | null = null;\n public callbackChangedUsername: ((username: string) => void) | null = null;\n public callbackJoinedPublicGameQueue: ((gameId: string, lobby: AccountPayload[]) => void) | null = null;\n public callbackPlayerJoinedPublicGameQueue: ((gameId: string, accountId: string, username: string) => void) | null =\n null;\n public callbackPlayerLeftPublicGameQueue: ((gameId: string, accountId: string) => void) | null = null;\n\n constructor(debug: boolean, ws: WebsocketWrapper) {\n this.debug = debug;\n this.logger = new Logger(this.debug);\n this.ws = ws;\n\n this.ws.onMessageCallback = this.onMessage.bind(this);\n }\n\n public clearCallbacks(): void {\n // don't clear these callbacks because they live for the duration of the app\n // this.callbackPong = null;\n // this.callbackError = null;\n\n this.callbackLoggedIn = null;\n this.callbackLoggedOut = null;\n this.callbackCreatedPrivateGame = null;\n this.callbackJoinedPrivateGame = null;\n this.callbackPlayerJoinedPrivateGame = null;\n this.callbackPlayerLeftPrivateGame = null;\n this.callbackStartedPrivateGame = null;\n this.callbackGameStateUpdate = null;\n this.callbackGameOver = null;\n this.callbackChangedUsername = null;\n this.callbackJoinedPublicGameQueue = null;\n this.callbackPlayerJoinedPublicGameQueue = null;\n this.callbackPlayerLeftPublicGameQueue = null;\n }\n\n private send(outgoingPayload: OutgoingPayload): void {\n const bytes: Uint8Array = OutgoingPayloadSerializer.toBytes(outgoingPayload);\n this.ws.send(bytes);\n }\n\n public ping(clientTimeUnixMs: bigint): void {\n this.logger.debug(`ApiClient: Ping: clientTimeUnixMs=${clientTimeUnixMs}`);\n this.send({ type: OutgoingPayloadType.Ping, clientTimeUnixMs });\n }\n\n public logIn(username: string): void {\n this.logger.debug(`ApiClient: LogIn: username=${username}`);\n this.send({ type: OutgoingPayloadType.LogIn, username });\n }\n\n public logOut(): void {\n this.logger.debug(\"ApiClient: LogOut\");\n this.send({ type: OutgoingPayloadType.LogOut });\n }\n\n public createPrivateGame(): void {\n this.logger.debug(\"ApiClient: CreatePrivateGame\");\n this.send({ type: OutgoingPayloadType.CreatePrivateGame });\n }\n\n public joinPrivateGame(joinCode: string): void {\n this.logger.debug(`ApiClient: JoinPrivateGame: joinCode=${joinCode}`);\n this.send({ type: OutgoingPayloadType.JoinPrivateGame, joinCode });\n }\n\n public leavePrivateGame(): void {\n this.logger.debug(\"ApiClient: LeavePrivateGame\");\n this.send({ type: OutgoingPayloadType.LeavePrivateGame });\n }\n\n public startPrivateGame(): void {\n this.logger.debug(\"ApiClient: StartPrivateGame\");\n this.send({ type: OutgoingPayloadType.StartPrivateGame });\n }\n\n public revealTile(tileIndex: number): void {\n this.logger.debug(`ApiClient: RevealTile: tileIndex=${tileIndex}`);\n this.send({ type: OutgoingPayloadType.RevealTile, index: tileIndex });\n }\n\n public flagTile(tileIndex: number): void {\n this.logger.debug(`ApiClient: FlagTile: tileIndex=${tileIndex}`);\n this.send({ type: OutgoingPayloadType.FlagTile, index: tileIndex });\n }\n\n public changeUsername(username: string): void {\n this.logger.debug(`ApiClient: ChangeUsername: username=${username}`);\n this.send({ type: OutgoingPayloadType.ChangeUsername, username });\n }\n\n public joinPublicGameQueue(): void {\n this.logger.debug(\"ApiClient: JoinPublicGameQueue\");\n this.send({ type: OutgoingPayloadType.JoinPublicGameQueue });\n }\n\n private onMessage(event: MessageEvent): void {\n if (!(event.data instanceof Blob)) {\n this.logger.error(\"ApiClient: expected Blob, got:\", event.data);\n return;\n }\n\n event.data.arrayBuffer().then((buffer: ArrayBuffer) => {\n const bytes: Uint8Array = new Uint8Array(buffer);\n const incomingPayload: IncomingPayload = IncomingPayloadSerializer.fromBytes(bytes);\n\n switch (incomingPayload.type) {\n case IncomingPayloadType.Pong: {\n if (this.callbackPong !== null) {\n this.logger.debug(\n `ApiClient: Pong: playersOnline='${incomingPayload.playersOnline}', gamesInProgress='${incomingPayload.gamesInProgress}'`,\n );\n this.callbackPong(incomingPayload.playersOnline, incomingPayload.gamesInProgress);\n return;\n }\n break;\n }\n\n case IncomingPayloadType.Error: {\n if (this.callbackError !== null) {\n this.logger.debug(\n `ApiClient: Error: originPayloadType='${incomingPayload.originPayloadType}', message='${incomingPayload.message}'`,\n );\n this.callbackError(incomingPayload.originPayloadType, incomingPayload.message);\n return;\n }\n break;\n }\n\n case IncomingPayloadType.LoggedIn: {\n if (this.callbackLoggedIn !== null) {\n this.logger.debug(\n `ApiClient: LoggedIn: accountId='${incomingPayload.accountId}', username='${incomingPayload.username}'`,\n );\n this.callbackLoggedIn(incomingPayload.accountId, incomingPayload.username);\n return;\n }\n break;\n }\n\n case IncomingPayloadType.LoggedOut: {\n if (this.callbackLoggedOut !== null) {\n this.logger.debug(\"ApiClient: LoggedOut\");\n this.callbackLoggedOut();\n return;\n }\n break;\n }\n\n case IncomingPayloadType.CreatedPrivateGame: {\n if (this.callbackCreatedPrivateGame !== null) {\n this.logger.debug(\n `ApiClient: CreatedPrivateGame: gameId='${incomingPayload.gameId}', joinCode='${incomingPayload.joinCode}'`,\n );\n this.callbackCreatedPrivateGame(incomingPayload.gameId, incomingPayload.joinCode);\n return;\n }\n break;\n }\n\n case IncomingPayloadType.JoinedPrivateGame: {\n if (this.callbackJoinedPrivateGame !== null) {\n this.logger.debug(\n `ApiClient: JoinedPrivateGame: gameId='${incomingPayload.gameId}', joinCode='${incomingPayload.joinCode}', lobby=[${\n incomingPayload.lobby.map((lobby: AccountPayload) =>\n `{accountId='${lobby.accountId}', username='${lobby.username}'}`\n )\n .join(\", \")\n }]`,\n );\n this.callbackJoinedPrivateGame(incomingPayload.gameId, incomingPayload.joinCode, incomingPayload.lobby);\n return;\n }\n break;\n }\n\n case IncomingPayloadType.PlayerJoinedPrivateGame: {\n if (this.callbackPlayerJoinedPrivateGame !== null) {\n this.logger.debug(\n `ApiClient: PlayerJoinedPrivateGame: gameId='${incomingPayload.gameId}', accountId='${incomingPayload.accountId}', username='${incomingPayload.username}'`,\n );\n this.callbackPlayerJoinedPrivateGame(\n incomingPayload.gameId,\n incomingPayload.accountId,\n incomingPayload.username,\n );\n return;\n }\n break;\n }\n\n case IncomingPayloadType.PlayerLeftPrivateGame: {\n if (this.callbackPlayerLeftPrivateGame !== null) {\n this.logger.debug(\n `ApiClient: PlayerLeftPrivateGame: gameId='${incomingPayload.gameId}', accountId='${incomingPayload.accountId}'`,\n );\n this.callbackPlayerLeftPrivateGame(incomingPayload.gameId, incomingPayload.accountId);\n return;\n }\n break;\n }\n\n case IncomingPayloadType.StartedPrivateGame: {\n if (this.callbackStartedPrivateGame !== null) {\n this.logger.debug(\n `ApiClient: StartedPrivateGame: gameId='${incomingPayload.gameId}', width=${incomingPayload.width}, height=${incomingPayload.height}, maxDurationSeconds=${incomingPayload.maxDurationSeconds}`,\n );\n this.callbackStartedPrivateGame(\n incomingPayload.gameId,\n incomingPayload.width,\n incomingPayload.height,\n incomingPayload.maxDurationSeconds,\n );\n return;\n }\n break;\n }\n\n case IncomingPayloadType.GameStateUpdate: {\n if (this.callbackGameStateUpdate !== null) {\n this.logger.debug(\n `ApiClient: GameStateUpdate: gameId='${incomingPayload.gameId}', playerOwnedTileUpdates=[${\n incomingPayload.playerOwnedTileUpdates.map((playerOwnedTileUpdate: PlayerOwnedTileUpdates) =>\n `{playerId='${playerOwnedTileUpdate.playerId}', tiles=[${\n playerOwnedTileUpdate.tileUpdates.map((tileUpdate: TileUpdate) =>\n `{index='${tileUpdate.index}', newType='${tileUpdate.newType}'}`\n ).join(\", \")\n }]}`\n )\n .join(\", \")\n }], deadPlayers=[${incomingPayload.deadPlayers.join(\", \")}]`,\n );\n this.callbackGameStateUpdate(\n incomingPayload.gameId,\n incomingPayload.playerOwnedTileUpdates,\n incomingPayload.deadPlayers,\n );\n return;\n }\n break;\n }\n\n case IncomingPayloadType.GameOver: {\n if (this.callbackGameOver !== null) {\n this.logger.debug(\n `ApiClient: GameOver: gameId='${incomingPayload.gameId}', winner='${incomingPayload.winner}', winCondition='${incomingPayload.winCondition}'`,\n );\n this.callbackGameOver(incomingPayload.gameId, incomingPayload.winner, incomingPayload.winCondition);\n return;\n }\n break;\n }\n\n case IncomingPayloadType.ChangedUsername: {\n if (this.callbackChangedUsername !== null) {\n this.logger.debug(`ApiClient: ChangedUsername: username='${incomingPayload.username}'`);\n this.callbackChangedUsername(incomingPayload.username);\n return;\n }\n break;\n }\n\n case IncomingPayloadType.JoinedPublicGameQueue: {\n if (this.callbackJoinedPublicGameQueue !== null) {\n this.logger.debug(\n `ApiClient: JoinedPublicGameQueue: gameId='${incomingPayload.gameId}', lobby=[${\n incomingPayload.lobby.map((lobby: AccountPayload) =>\n `{accountId='${lobby.accountId}', username='${lobby.username}'}`\n )\n .join(\", \")\n }]`,\n );\n this.callbackJoinedPublicGameQueue(incomingPayload.gameId, incomingPayload.lobby);\n return;\n }\n break;\n }\n\n case IncomingPayloadType.PlayerJoinedPublicGameQueue: {\n if (this.callbackPlayerJoinedPublicGameQueue !== null) {\n this.logger.debug(\n `ApiClient: PlayerJoinedPublicGameQueue: accountId='${incomingPayload.accountId}', username='${incomingPayload.username}'`,\n );\n this.callbackPlayerJoinedPublicGameQueue(\n incomingPayload.gameId,\n incomingPayload.accountId,\n incomingPayload.username,\n );\n return;\n }\n break;\n }\n\n case IncomingPayloadType.PlayerLeftPublicGameQueue: {\n if (this.callbackPlayerLeftPublicGameQueue !== null) {\n this.logger.debug(\n `ApiClient: PlayerLeftPublicGameQueue: accountId='${incomingPayload.accountId}'`,\n );\n this.callbackPlayerLeftPublicGameQueue(incomingPayload.gameId, incomingPayload.accountId);\n return;\n }\n break;\n }\n }\n\n this.logger.error(\n `ApiClient: unhandled IncomingPayload.${IncomingPayloadType[incomingPayload.type]}:`,\n incomingPayload,\n );\n });\n }\n}\n", "export default class PlayerState {\n private _accountId: string;\n private _username: string;\n private _isAlive: boolean;\n private _isConnected: boolean;\n private _score: number;\n private _tilesRevealed: number;\n private _flagsPlaced: number;\n private _minesExploded: number;\n\n constructor(accountId: string, username: string) {\n this._accountId = accountId;\n this._username = username;\n this._isAlive = true;\n this._isConnected = true;\n this._score = 0;\n this._tilesRevealed = 0;\n this._flagsPlaced = 0;\n this._minesExploded = 0;\n }\n\n public get accountId(): string {\n return this._accountId;\n }\n public get username(): string {\n return this._username;\n }\n public get isAlive(): boolean {\n return this._isAlive;\n }\n public get isConnected(): boolean {\n return this._isConnected;\n }\n public get score(): number {\n return this._score;\n }\n public get tilesRevealed(): number {\n return this._tilesRevealed;\n }\n public get flagsPlaced(): number {\n return this._flagsPlaced;\n }\n public get minesExploded(): number {\n return this._minesExploded;\n }\n\n public revealTile(): void {\n this._tilesRevealed++;\n }\n\n public flagTile(): void {\n this._flagsPlaced++;\n }\n\n public unflagTile(): void {\n if (this._flagsPlaced <= 0) {\n throw new Error(`PlayerState: invalid flags placed count: '${this._flagsPlaced}'`);\n }\n\n this._flagsPlaced--;\n }\n\n public explodeMine(): void {\n this._minesExploded++;\n }\n\n public kill(): void {\n this._isAlive = false;\n }\n\n public disconnect(): void {\n this._isConnected = false;\n }\n}\n", "export default class TileBuffer {\n private static readonly TILE_STATE_MASK = 0x000000FF; // bits 0-7\n private static readonly PLAYER_MASK = 0x0000FF00; // bits 8-15\n private static readonly RESERVED_MASK = 0xFFFF0000; // bits 16-31\n\n private buffer: Uint32Array;\n\n constructor(width: number, height: number) {\n // (Chose u32 instead of u8 because buffers need to be aligned to 4 bytes. I could've padded the array and done bitwise ops in the shader, but this is easier for now.)\n // TODO - refactor to use u8 instead of u32\n this.buffer = new Uint32Array(width * height);\n\n // Fill with '9' to represent 'hidden' tiles.\n this.buffer.fill(9);\n }\n\n /**\n * Get the raw buffer (useful for WebGPU operations)\n */\n public getBuffer(): Uint32Array {\n return this.buffer;\n }\n\n /**\n * Get the tile state (0-255) at the given index.\n */\n public getTileState(index: number): number {\n this.validateIndex(index);\n return this.buffer[index] & TileBuffer.TILE_STATE_MASK;\n }\n\n /**\n * Get the player ownership (0-255) at the given index.\n */\n public getPlayerOwnership(index: number): number {\n this.validateIndex(index);\n return (this.buffer[index] & TileBuffer.PLAYER_MASK) >> 8;\n }\n\n /**\n * Set just the tile state, preserving other data.\n */\n public setTileState(index: number, tileState: number): void {\n this.validateIndex(index);\n this.validateRange(tileState, \"Tile state\");\n\n this.buffer[index] = (this.buffer[index] & ~TileBuffer.TILE_STATE_MASK) |\n (tileState & TileBuffer.TILE_STATE_MASK);\n }\n\n /**\n * Set just the player ownership, preserving other data.\n */\n public setPlayerOwnership(index: number, playerOwnership: number): void {\n this.validateIndex(index);\n this.validateRange(playerOwnership, \"Player ownership\");\n\n this.buffer[index] = (this.buffer[index] & ~TileBuffer.PLAYER_MASK) |\n ((playerOwnership << 8) & TileBuffer.PLAYER_MASK);\n }\n\n /**\n * Get the size of the buffer.\n */\n public size(): number {\n return this.buffer.length;\n }\n\n private validateIndex(index: number): void {\n if (index < 0 || index >= this.size()) {\n throw new Error(`Index ${index} is out of bounds (buffer size: ${this.size()})`);\n }\n }\n\n private validateRange(value: number, field: string): void {\n if (value < 0 || value > 255) {\n throw new Error(`${field} must be between 0 and 255, got ${value}`);\n }\n }\n}\n", "import { AccountPayload, PlayerOwnedTileUpdates, WinCondition } from \"../codec/incoming-payload.ts\";\nimport PlayerState from \"./player-state.ts\";\nimport TileBuffer from \"./tile-buffer.ts\";\n\nexport enum GameStatus {\n LOBBY,\n IN_PROGRESS,\n FINISHED,\n}\n\nexport enum Kind {\n PUBLIC,\n PRIVATE,\n}\n\nexport default class GameState {\n private _kind: Kind | null;\n private _gameId: string | null;\n private _joinCode: string | null;\n private _state: GameStatus | null;\n private _lobby: PlayerState[] | null;\n private _host: string | null;\n private _width: number | null;\n private _height: number | null;\n private _startGameTimeUnixMillis: number | null;\n private _expectedEndGameTimeUnixMillis: number | null;\n private _tileBuffer: TileBuffer | null;\n private _winner: number | null;\n private _winCondition: WinCondition | null;\n private _tilesRevealed: number;\n private _flagsPlaced: number;\n private _minesExploded: number;\n\n constructor() {\n this._kind = null;\n this._gameId = null;\n this._joinCode = null;\n this._state = null;\n this._lobby = null;\n this._host = null;\n this._width = null;\n this._height = null;\n this._startGameTimeUnixMillis = null;\n this._expectedEndGameTimeUnixMillis = null;\n this._tileBuffer = null;\n this._winner = null;\n this._winCondition = null;\n this._tilesRevealed = 0;\n this._flagsPlaced = 0;\n this._minesExploded = 0;\n }\n\n public clear(): void {\n this._kind = null;\n this._gameId = null;\n this._joinCode = null;\n this._state = null;\n this._lobby = null;\n this._host = null;\n this._width = null;\n this._height = null;\n this._startGameTimeUnixMillis = null;\n this._expectedEndGameTimeUnixMillis = null;\n this._tileBuffer = null;\n this._winner = null;\n this._winCondition = null;\n this._tilesRevealed = 0;\n this._flagsPlaced = 0;\n this._minesExploded = 0;\n }\n\n public get kind(): Kind | null {\n return this._kind;\n }\n public get gameId(): string | null {\n return this._gameId;\n }\n public get joinCode(): string | null {\n return this._joinCode;\n }\n public get state(): GameStatus | null {\n return this._state;\n }\n public get lobby(): PlayerState[] | null {\n return this._lobby;\n }\n public get host(): string | null {\n return this._host;\n }\n public get boardWidth(): number | null {\n return this._width;\n }\n public get boardHeight(): number | null {\n return this._height;\n }\n public get startTimeUnixMillis(): number | null {\n return this._startGameTimeUnixMillis;\n }\n public get expectedEndTimeUnixMillis(): number | null {\n return this._expectedEndGameTimeUnixMillis;\n }\n public get tileBuffer(): TileBuffer | null {\n return this._tileBuffer;\n }\n public get winner(): number | null {\n return this._winner;\n }\n public get winCondition(): WinCondition | null {\n return this._winCondition;\n }\n public get tilesRevealed(): number {\n return this._tilesRevealed;\n }\n public get flagsPlaced(): number {\n return this._flagsPlaced;\n }\n public get minesExploded(): number {\n return this._minesExploded;\n }\n\n public get currentGameTimeLeftSeconds(): number {\n if (this._startGameTimeUnixMillis === null) {\n throw new Error(\"GameState: startTimeUnixMillis is null\");\n }\n if (this._expectedEndGameTimeUnixMillis === null) {\n throw new Error(\"GameState: expectedEndTimeUnixMillis is null\");\n }\n\n const currentTimeLeftSeconds: number = Math.floor((this._expectedEndGameTimeUnixMillis - Date.now()) / 1000);\n return currentTimeLeftSeconds < 0 ? 0 : currentTimeLeftSeconds;\n }\n\n public joinedPublicGameQueue(gameId: string, lobby: AccountPayload[]): void {\n this._kind = Kind.PUBLIC;\n this._gameId = gameId;\n this._state = GameStatus.LOBBY;\n\n this._lobby = lobby.map((accountPayload) => new PlayerState(accountPayload.accountId, accountPayload.username));\n if (this._lobby.length === 0) {\n throw new Error(\"GameState: lobby is empty (we're assuming that the first player in the lobby is the host)\");\n }\n }\n\n public createdPrivateGame(gameId: string, joinCode: string, hostAccountId: string, hostUsername: string): void {\n this._kind = Kind.PRIVATE;\n this._gameId = gameId;\n this._joinCode = joinCode;\n this._state = GameStatus.LOBBY;\n\n this._lobby = [new PlayerState(hostAccountId, hostUsername)];\n this._host = hostAccountId;\n }\n\n public joinedPrivateGame(gameId: string, joinCode: string, lobby: AccountPayload[]): void {\n this._kind = Kind.PRIVATE;\n this._gameId = gameId;\n this._joinCode = joinCode;\n this._state = GameStatus.LOBBY;\n\n this._lobby = lobby.map((accountPayload) => new PlayerState(accountPayload.accountId, accountPayload.username));\n if (this._lobby.length === 0) {\n throw new Error(\"GameState: lobby is empty (we're assuming that the first player in the lobby is the host)\");\n }\n this._host = this._lobby[0].accountId;\n }\n\n public playerJoinedPrivateGame(gameId: string, accountId: string, username: string): void {\n if (this._gameId === null || this._state === null || this._lobby === null) {\n throw new Error(\"GameState: game is null\");\n }\n if (this._state !== GameStatus.LOBBY) {\n throw new Error(`GameState: game is not in lobby state: '${this._state}'`);\n }\n if (this._gameId !== gameId) {\n throw new Error(`GameState: game id mismatch - expected '${this._gameId}', found '${gameId}'`);\n }\n\n // add player to lobby\n this._lobby.push(new PlayerState(accountId, username));\n }\n\n /**\n * Returns true if the lobby is now empty.\n */\n public playerLeftPrivateGame(gameId: string, accountId: string): boolean {\n if (this._gameId === null || this._state === null || this._lobby === null) {\n throw new Error(\"GameState: game is null\");\n }\n if (this._gameId !== gameId) {\n throw new Error(`GameState: game id mismatch - expected '${this._gameId}', found '${gameId}'`);\n }\n\n // a player can leave the lobby even if the game is in progress\n // no need to check if 'state === GameStatus.LOBBY'\n\n switch (this._state) {\n case GameStatus.LOBBY: {\n // remove player from lobby\n this._lobby = this._lobby.filter((player) => player.accountId !== accountId);\n\n // if the player that left was the host, assign a new host\n if (this._lobby.length > 0) {\n // (we're assuming that the first player in the lobby is the host)\n this._host = this._lobby[0].accountId;\n return false;\n } else {\n this._host = null;\n return true;\n }\n }\n case GameStatus.IN_PROGRESS: {\n // find the index of the player that left\n const playerIndex = this._lobby.findIndex((player) => player.accountId === accountId);\n if (playerIndex === -1) {\n throw new Error(`GameState: player '${accountId}' not found in lobby`);\n }\n\n // mark them as disconnected\n this._lobby[playerIndex].disconnect();\n\n return false;\n }\n case GameStatus.FINISHED: {\n // find the index of the player that left\n const playerIndex = this._lobby.findIndex((player) => player.accountId === accountId);\n if (playerIndex === -1) {\n throw new Error(`GameState: player '${accountId}' not found in lobby`);\n }\n\n // mark them as disconnected\n this._lobby[playerIndex].disconnect();\n\n return false;\n }\n default:\n throw new Error(`GameState: unexpected state: '${this._state}'`);\n }\n }\n\n public startedPrivateGame(gameId: string, width: number, height: number, maxDurationSeconds: number): void {\n if (this._gameId === null || this._state === null) {\n throw new Error(\"GameState: game is null\");\n }\n if (this._state !== GameStatus.LOBBY) {\n throw new Error(`GameState: game is not in lobby state: '${this._state}'`);\n }\n if (this._gameId !== gameId) {\n throw new Error(`GameState: game id mismatch - expected '${this._gameId}', found '${gameId}'`);\n }\n\n // mark game in-progress\n this._state = GameStatus.IN_PROGRESS;\n\n // set board dimensions\n this._width = width;\n this._height = height;\n\n // set current time left\n this._startGameTimeUnixMillis = Date.now();\n this._expectedEndGameTimeUnixMillis = this._startGameTimeUnixMillis + maxDurationSeconds * 1000;\n\n // initialize tile states\n this._tileBuffer = new TileBuffer(this._width, this._height);\n }\n\n public gameStateUpdate(\n gameId: string,\n playerOwnedTileUpdates: PlayerOwnedTileUpdates[],\n deadPlayers: number[],\n ): void {\n if (this._gameId === null || this._state === null || this._tileBuffer === null) {\n throw new Error(\"GameState: game is null\");\n }\n if (this._lobby === null) {\n throw new Error(\"GameState: lobby is null\");\n }\n if (this._state !== GameStatus.IN_PROGRESS) {\n throw new Error(`GameState: game is not in 'IN_PROGRESS' state: '${this._state}'`);\n }\n if (this._gameId !== gameId) {\n throw new Error(`GameState: game id mismatch - expected '${this._gameId}', found '${gameId}'`);\n }\n\n // bulk update tile states\n for (const playerOwnedTileUpdate of playerOwnedTileUpdates) {\n for (const tileUpdate of playerOwnedTileUpdate.tileUpdates) {\n this._tileBuffer.setTileState(tileUpdate.index, tileUpdate.newType);\n this._tileBuffer.setPlayerOwnership(tileUpdate.index, playerOwnedTileUpdate.playerId);\n\n // update player stats\n switch (tileUpdate.newType) {\n case 0:\n case 1:\n case 2:\n case 3:\n case 4:\n case 5:\n case 6:\n case 7:\n case 8:\n this._tilesRevealed += 1;\n this._lobby[playerOwnedTileUpdate.playerId].revealTile();\n break;\n case 9: // hidden tile (which means this is a newly unflagged flag)\n this._flagsPlaced -= 1;\n this._lobby[playerOwnedTileUpdate.playerId].unflagTile();\n break;\n case 10:\n this._flagsPlaced += 1;\n this._lobby[playerOwnedTileUpdate.playerId].flagTile();\n break;\n case 11:\n case 12:\n case 13:\n case 14:\n // N/A (unimplemented tile types)\n break;\n case 15:\n this._minesExploded += 1;\n this._lobby[playerOwnedTileUpdate.playerId].explodeMine();\n break;\n default:\n throw new Error(`GameState: unexpected tile state: '${tileUpdate.newType}'`);\n }\n }\n }\n\n // TODO - display alive/dead users to player\n // TODO - handle game over for current player\n for (const deadPlayer of deadPlayers) {\n this._lobby[deadPlayer].kill();\n }\n }\n\n public getGameOver(gameId: string, winner: number, winCondition: WinCondition): void {\n if (\n this._gameId === null || this._state === null || this._lobby === null || this._width === null ||\n this._height === null\n ) {\n throw new Error(\"GameState: game is null\");\n }\n if (this._state !== GameStatus.IN_PROGRESS) {\n throw new Error(`GameState: game is not in 'IN_PROGRESS' state: '${this._state}'`);\n }\n if (this._gameId !== gameId) {\n throw new Error(`GameState: game id mismatch - expected '${this._gameId}', found '${gameId}'`);\n }\n\n this._state = GameStatus.FINISHED;\n this._winner = winner;\n this._winCondition = winCondition;\n\n // validate win condition\n switch (winCondition) {\n case WinCondition.LastPlayerAlive: {\n const totalAlivePlayers: number = this._lobby.filter((player) => player.isAlive).length;\n if (totalAlivePlayers !== 1) {\n throw new Error(`GameState: unexpected total alive players: '${totalAlivePlayers}'`);\n }\n break;\n }\n case WinCondition.EntireBoardRevealedOrFlagged: {\n const totalTiles: number = this._width * this._height;\n\n // double-check that all tiles have been 'activated' (aka flagged or revealed (including exploded mines))\n const totalActivatedTiles: number = this._tilesRevealed + this._flagsPlaced + this._minesExploded;\n if (totalActivatedTiles !== totalTiles) {\n throw new Error(\n `GameState: unexpected total 'activated' tiles: '${totalActivatedTiles}' (expected '${totalTiles}')`,\n );\n }\n\n // double-check that the sum of all players' tile stats equal total 'activated' tiles\n const totalPlayersModifiedTiles: number = this._lobby.reduce(\n (totalPlayersModifiedTiles: number, player: PlayerState) =>\n totalPlayersModifiedTiles + player.tilesRevealed + player.flagsPlaced + player.minesExploded,\n 0,\n );\n if (totalPlayersModifiedTiles !== totalActivatedTiles) {\n throw new Error(\n `GameState: unexpected total players modified tiles: '${totalPlayersModifiedTiles}' (expected '${totalActivatedTiles}')`,\n );\n }\n\n break;\n }\n case WinCondition.TimeLimit: {\n if (this.currentGameTimeLeftSeconds !== 0) {\n throw new Error(`GameState: unexpected current time left: '${this.currentGameTimeLeftSeconds}'`);\n }\n break;\n }\n default:\n throw new Error(`GameState: unexpected win condition: '${winCondition}'`);\n }\n }\n}\n", "export const LS_USERNAME_KEY = \"MR-username\";\n\nexport default class UserState {\n private _accountId: string | null;\n private _username: string | null;\n\n constructor() {\n this._accountId = null;\n this._username = null;\n }\n\n public clear(): void {\n this._accountId = null;\n this._username = null;\n }\n\n public get accountId(): string | null {\n return this._accountId;\n }\n public get username(): string | null {\n return this._username;\n }\n\n public logIn(accountId: string, username: string): void {\n this._accountId = accountId;\n this._username = username;\n }\n\n public changeUsername(username: string): void {\n this._username = username;\n localStorage.setItem(LS_USERNAME_KEY, username);\n }\n\n public logOut(): void {\n this._accountId = null;\n this._username = null;\n }\n}\n", "import GameState from \"./game-state.ts\";\nimport UserState from \"./user-state.ts\";\n\nexport class AppState {\n public userState: UserState;\n public gameState: GameState;\n\n constructor() {\n this.userState = new UserState();\n this.gameState = new GameState();\n }\n\n public clear(): void {\n this.userState.clear();\n this.gameState.clear();\n }\n}\n", "import Logger from \"jsr:@todd/webserver-base@0.0.4/logger\";\n\n// types.ts\nexport type SoundEffect = {\n url: string;\n volume?: number;\n loop?: boolean;\n};\n\ntype SoundBank = {\n [key: string]: SoundEffect;\n};\n\nexport interface AudioControl {\n stop: () => void;\n setVolume: (volume: number) => void;\n}\n\n// AudioManager.ts\nexport class AudioManager {\n private readonly debug: boolean;\n private readonly logger: Logger;\n private soundBank: SoundBank;\n private audioContext: AudioContext | null;\n private masterVolume: GainNode | null;\n private audioBuffers: Map;\n private activeAudio: Map;\n\n constructor(debug: boolean, soundBank: SoundBank) {\n this.debug = debug;\n this.logger = new Logger(this.debug);\n this.soundBank = soundBank;\n this.audioContext = null;\n this.masterVolume = null;\n this.audioBuffers = new Map();\n this.activeAudio = new Map();\n }\n\n initAudioContext() {\n if (this.audioContext !== null) {\n this.logger.error(\"AudioContext already initialized.\");\n }\n\n this.audioContext = new AudioContext();\n this.masterVolume = this.audioContext.createGain();\n this.masterVolume.connect(this.audioContext.destination);\n }\n\n async loadSound(soundId: string) {\n if (this.audioBuffers.has(soundId)) {\n return;\n }\n\n if (this.audioContext === null) {\n this.initAudioContext();\n }\n\n const sound: SoundEffect = this.soundBank[soundId];\n try {\n const response: Response = await fetch(sound.url);\n const arrayBuffer: ArrayBuffer = await response.arrayBuffer();\n const audioBuffer: AudioBuffer = await this.audioContext!.decodeAudioData(arrayBuffer);\n this.audioBuffers.set(soundId, audioBuffer);\n } catch (error: unknown) {\n this.logger.error(`Failed to load sound: ${soundId}`, error);\n }\n }\n\n async play(soundId: string, options: { volume?: number; loop?: boolean } = {}): Promise {\n if (!this.audioContext) {\n this.initAudioContext();\n }\n if (!this.audioBuffers.has(soundId)) {\n await this.loadSound(soundId);\n }\n const soundEffect: SoundEffect = this.soundBank[soundId];\n const buffer: AudioBuffer = this.audioBuffers.get(soundId)!;\n\n const source: AudioBufferSourceNode = this.audioContext!.createBufferSource();\n source.buffer = buffer;\n source.loop = options.loop ?? soundEffect.loop ?? false;\n\n const gainNode: GainNode = this.audioContext!.createGain();\n gainNode.gain.value = options.volume ?? soundEffect.volume ?? 1;\n\n source.connect(gainNode);\n gainNode.connect(this.masterVolume!);\n\n source.start(0);\n this.activeAudio.set(soundId, gainNode);\n\n source.onended = () => {\n if (!options.loop) {\n this.activeAudio.delete(soundId);\n }\n };\n\n return {\n stop: () => {\n source.stop();\n this.activeAudio.delete(soundId);\n },\n setVolume: (volume: number) => {\n gainNode.gain.value = volume;\n },\n };\n }\n\n stopAll() {\n this.activeAudio.clear();\n if (this.audioContext) {\n this.audioContext.close();\n }\n }\n\n setMasterVolume(volume: number) {\n if (this.masterVolume) {\n this.masterVolume.gain.value = Math.max(0, Math.min(1, volume));\n }\n }\n}\n", "type EventListener = (event: Event) => void;\n\nabstract class ElementBuilder> {\n protected element: T;\n\n constructor(element: T) {\n this.element = element;\n }\n\n protected self(): B {\n return this as unknown as B;\n }\n\n public id(id: string): B {\n this.element.id = id;\n return this.self();\n }\n\n public innerHtml(html: string): B {\n this.element.innerHTML = html;\n return this.self();\n }\n\n public class(...classes: string[]): B {\n this.element.classList.add(...classes);\n return this.self();\n }\n\n public dataset(key: string, value: string): B {\n this.element.dataset[key] = value;\n return this.self();\n }\n\n public children(children: HTMLElement[]): B {\n children.forEach((child) => this.element.appendChild(child));\n return this.self();\n }\n\n public eventListener(type: string, listener: EventListener): B {\n this.element.addEventListener(type, listener);\n return this.self();\n }\n\n public build(): T {\n return this.element;\n }\n}\n\nabstract class TextElementBuilder>\n extends ElementBuilder {\n public text(text: string): B {\n this.element.textContent = text;\n return this.self();\n }\n}\n\nexport class DivBuilder extends ElementBuilder {\n constructor() {\n super(document.createElement(\"div\"));\n }\n}\n\nexport class ParagraphBuilder extends TextElementBuilder {\n constructor() {\n super(document.createElement(\"p\"));\n }\n}\n\nexport class HeaderBuilder extends TextElementBuilder {\n constructor(level: 1 | 2 | 3 | 4 | 5 | 6) {\n super(document.createElement(`h${level}`));\n }\n}\n\nexport class AnchorBuilder extends TextElementBuilder {\n constructor() {\n super(document.createElement(\"a\"));\n }\n\n public href(href: string): AnchorBuilder {\n this.element.href = href;\n return this;\n }\n}\n\nexport class FormBuilder extends ElementBuilder {\n constructor() {\n super(document.createElement(\"form\"));\n }\n\n public submitHandler(handler: (event: SubmitEvent) => void): FormBuilder {\n this.element.addEventListener(\"submit\", handler as EventListener);\n return this;\n }\n}\n\nexport class InputBuilder extends ElementBuilder {\n constructor(type: string) {\n super(document.createElement(\"input\"));\n this.element.type = type;\n }\n\n public inputmode(inputmode: string): InputBuilder {\n this.element.inputMode = inputmode;\n return this;\n }\n\n public value(value: string): InputBuilder {\n this.element.value = value;\n return this;\n }\n\n public placeholder(placeholder: string): InputBuilder {\n this.element.placeholder = placeholder;\n return this;\n }\n\n public required(required: boolean): InputBuilder {\n this.element.required = required;\n return this;\n }\n\n public minLength(minLength: number): InputBuilder {\n this.element.minLength = minLength;\n return this;\n }\n\n public maxLength(maxLength: number): InputBuilder {\n this.element.maxLength = maxLength;\n return this;\n }\n\n public pattern(pattern: string): InputBuilder {\n this.element.pattern = pattern;\n return this;\n }\n\n public autocomplete(autocomplete: AutoFill): InputBuilder {\n this.element.autocomplete = autocomplete;\n return this;\n }\n\n public disabled(): InputBuilder {\n this.element.disabled = true;\n return this;\n }\n}\n\nexport class ButtonBuilder extends TextElementBuilder {\n constructor() {\n super(document.createElement(\"button\"));\n }\n\n public type(type: \"button\" | \"submit\" | \"reset\"): ButtonBuilder {\n this.element.type = type;\n return this;\n }\n\n public clickHandler(handler: (event: MouseEvent) => void): ButtonBuilder {\n this.element.addEventListener(\"click\", handler as EventListener);\n return this;\n }\n}\n\nexport class ImageBuilder extends ElementBuilder {\n protected img: HTMLImageElement;\n\n constructor(src: string, alt: string) {\n super(document.createElement(\"picture\"));\n\n this.img = document.createElement(\"img\");\n this.img.src = src;\n this.img.alt = alt;\n this.element.appendChild(this.img);\n }\n}\n\nexport class BrBuilder extends ElementBuilder {\n constructor() {\n super(document.createElement(\"br\"));\n }\n}\n\nexport class UI {\n public static div(): DivBuilder {\n return new DivBuilder();\n }\n\n public static paragraph(): ParagraphBuilder {\n return new ParagraphBuilder();\n }\n\n public static header(level: 1 | 2 | 3 | 4 | 5 | 6): HeaderBuilder {\n return new HeaderBuilder(level);\n }\n\n public static anchor(): AnchorBuilder {\n return new AnchorBuilder();\n }\n\n public static form(): FormBuilder {\n return new FormBuilder();\n }\n\n public static input(type: string): InputBuilder {\n return new InputBuilder(type);\n }\n\n public static button(): ButtonBuilder {\n return new ButtonBuilder();\n }\n\n public static image(src: string, alt: string): ImageBuilder {\n return new ImageBuilder(src, alt);\n }\n\n public static br(): BrBuilder {\n return new BrBuilder();\n }\n}\n", "export class UIGetter {\n public static get(id: string): HTMLElement {\n const element: HTMLElement | null = document.getElementById(id);\n if (element === null) {\n throw new Error(`UIGetter: Could not find '${id}'.`);\n }\n return element;\n }\n\n public static main(): HTMLElement {\n const element: HTMLElement | null = document.querySelector(\"main\");\n if (element === null) {\n throw new Error(`UIGetter: Could not find 'main' element.`);\n }\n return element;\n }\n\n public static div(id: string): HTMLDivElement {\n const element: HTMLElement = this.get(id);\n if (!(element instanceof HTMLDivElement)) {\n throw new Error(`UIGetter: '${id}' is not a div.`);\n }\n return element;\n }\n\n public static form(id: string): HTMLFormElement {\n const element: HTMLElement = this.get(id);\n if (!(element instanceof HTMLFormElement)) {\n throw new Error(`UIGetter: '${id}' is not a form.`);\n }\n return element;\n }\n\n public static input(id: string): HTMLInputElement {\n const element: HTMLElement = this.get(id);\n if (!(element instanceof HTMLInputElement)) {\n throw new Error(`UIGetter: '${id}' is not an input.`);\n }\n return element;\n }\n\n public static paragraph(id: string): HTMLParagraphElement {\n const element: HTMLElement = this.get(id);\n if (!(element instanceof HTMLParagraphElement)) {\n throw new Error(`UIGetter: '${id}' is not a paragraph.`);\n }\n return element;\n }\n}\n", "import { UI } from \"./ui/builders.ts\";\nimport { UIGetter } from \"./ui/getters.ts\";\n\ntype Toast = { id: string; datetime: Date; message: string; element: HTMLElement; options: ToastOptions };\nexport type ToastOptions = { type: ToastType };\nexport enum ToastType {\n INFO,\n WARNING,\n ERROR,\n SUCCESS,\n}\n\nexport class ToastManager {\n private container: HTMLElement;\n private toasts: Toast[] = [];\n private maxToasts: number = 5;\n private duration: number = 4500; // 4.5 seconds\n\n constructor() {\n this.container = UIGetter.div(\"toast-container\");\n\n // init toast removal timer\n globalThis.setInterval(() => {\n this.removeExpired();\n }, 1 * 1000);\n }\n\n public add(message: string, options: ToastOptions): void {\n const id: string = crypto.randomUUID();\n const datetime: Date = new Date();\n\n // change color based on type\n let colorClass: string;\n switch (options.type) {\n case ToastType.INFO:\n colorClass = \"info\";\n break;\n case ToastType.WARNING:\n colorClass = \"warning\";\n break;\n case ToastType.ERROR:\n colorClass = \"error\";\n break;\n case ToastType.SUCCESS:\n colorClass = \"success\";\n break;\n }\n\n const element: HTMLDivElement = UI.div()\n .id(id)\n .class(\"toast\", \"toast-enter\", colorClass)\n .innerHtml(message)\n .build();\n\n const toast: Toast = { id, datetime, message, element, options };\n this.toasts.push(toast);\n this.container.appendChild(toast.element);\n\n // trigger reflow to ensure the animation plays\n void toast.element.offsetWidth;\n toast.element.classList.add(\"show\");\n\n if (this.toasts.length > this.maxToasts) {\n this.removeOldest();\n }\n }\n\n private remove(id: string): void {\n const index: number = this.toasts.findIndex((m) => m.id === id);\n if (index !== -1) {\n const toast: Toast = this.toasts[index];\n toast.element.classList.remove(\"show\");\n toast.element.classList.add(\"hide\");\n\n toast.element.addEventListener(\"transitionend\", () => {\n // Check if the element is still a child of the container\n if (this.container.contains(toast.element)) {\n this.container.removeChild(toast.element);\n }\n this.toasts.splice(index, 1);\n }, { once: true });\n }\n }\n\n private removeExpired(): void {\n const currentDatetime: Date = new Date();\n\n // use functional programming to collect IDs to remove\n const idsToRemove: string[] = this.toasts\n .filter((m) => currentDatetime.getTime() - m.datetime.getTime() >= this.duration)\n .map((m) => m.id);\n idsToRemove.forEach((id) => this.remove(id));\n }\n\n private removeOldest(): void {\n if (this.toasts.length > 0) {\n this.remove(this.toasts[0].id);\n }\n }\n}\n", "import Logger from \"jsr:@todd/webserver-base@0.0.4/logger\";\n\nexport default class WebsocketWrapper {\n private readonly debug: boolean;\n private readonly logger: Logger;\n private readonly url: string;\n private websocket: WebSocket | null;\n private reconnectionTimerId: number | null;\n private readonly reconnectTimeoutMilliseconds: number;\n\n // callbacks for custom behaviour\n private callbackAttemptConnection: (() => void) | null;\n private callbackSuccessfullyConnected: (() => void) | null;\n private callbackStartReconnectionLoop: (() => void) | null;\n private callbackOnMessage: ((messageEvent: MessageEvent) => void) | null;\n\n constructor(\n debug: boolean,\n url: string,\n reconnectTimeoutMilliseconds: number,\n ) {\n this.debug = debug;\n this.logger = new Logger(this.debug);\n\n this.url = url;\n this.websocket = null;\n this.reconnectionTimerId = null;\n this.reconnectTimeoutMilliseconds = reconnectTimeoutMilliseconds;\n\n // callbacks for custom behaviour\n this.callbackAttemptConnection = null;\n this.callbackSuccessfullyConnected = null;\n this.callbackStartReconnectionLoop = null;\n this.callbackOnMessage = null;\n }\n\n public set attemptConnectionCallback(callback: (() => void) | null) {\n this.callbackAttemptConnection = callback;\n }\n\n public set successfullyConnectedCallback(callback: (() => void) | null) {\n this.callbackSuccessfullyConnected = callback;\n }\n\n public set startReconnectionLoopCallback(callback: (() => void) | null) {\n this.callbackStartReconnectionLoop = callback;\n }\n\n public set onMessageCallback(callback: ((messageEvent: MessageEvent) => void) | null) {\n this.callbackOnMessage = callback;\n }\n\n public connect() {\n // let consumer of this class do something when a fresh connection is attempted\n if (this.callbackAttemptConnection !== null) {\n this.callbackAttemptConnection();\n }\n\n // make sure any existing websocket connection is closed\n this.disconnect();\n\n // create new websocket connection\n this.logger.debug(`Attempting to connect websocket to '${this.url}'...`);\n this.websocket = new WebSocket(this.url);\n\n // attach websocket handlers\n this.websocket.onopen = this.onOpen.bind(this);\n this.websocket.onmessage = this.onMessage.bind(this);\n this.websocket.onclose = this.onClose.bind(this);\n this.websocket.onerror = this.onError.bind(this);\n }\n\n public disconnect() {\n this.logger.debug(\"Disconnecting websocket...\");\n\n // websocket doesn't even exist, exit early\n if (this.websocket === null) {\n return;\n }\n\n // if websocket is connecting/open, force close it\n const currentState: number = this.websocket.readyState;\n if (currentState === WebSocket.CONNECTING || currentState === WebSocket.OPEN) {\n this.logger.debug(\"Force closing the websocket.\");\n this.websocket.close();\n }\n\n // clean up websocket handlers\n this.websocket.onopen = null;\n this.websocket.onmessage = null;\n this.websocket.onclose = null;\n this.websocket.onerror = null;\n\n // delete reference to old (and now closed) websocket object\n this.websocket = null;\n\n this.logger.debug(\"Websocket disconnected.\");\n }\n\n public send(payload: string | ArrayBuffer) {\n // websocket doesn't exist, exit early\n if (this.websocket === null) {\n this.logger.warn(\"Attempted to send a websocket payload, but the websocket was `null`.\");\n return;\n }\n\n // send the payload\n this.websocket.send(payload);\n }\n\n private startReconnectionLoop() {\n // there is already an existing reconnect loop timer, exit early\n if (this.reconnectionTimerId !== null) {\n return;\n }\n\n // let the consumer of this class do something when we've lost the connection and attempt to reconnect\n if (this.callbackStartReconnectionLoop !== null) {\n this.callbackStartReconnectionLoop();\n }\n\n // make sure any existing websocket connection is closed\n this.disconnect();\n\n // attempt reconnecting the websocket connection every 'reconnectTimeoutMilliseconds' seconds\n this.reconnectionTimerId = setInterval(this.connect.bind(this), this.reconnectTimeoutMilliseconds);\n }\n\n private stopReconnectionLoop() {\n // if there is no reconnect timer, exit early\n if (this.reconnectionTimerId === null) {\n this.logger.warn(\n \"Attempted to stop the reconnection loop, but there was no reconnection loop timer.\",\n );\n return;\n }\n\n // if websocket doesn't even exist, exit early\n if (this.websocket === null) {\n this.logger.warn(\"Attempted to stop the reconnection loop, but the websocket was `null`.\");\n return;\n }\n\n // if the websocket is connecting/closing/closed, exit early\n const wsState: number = this.websocket.readyState;\n if (wsState !== WebSocket.OPEN) {\n this.logger.warn(\n \"Attempted to stop the reconnection loop, \" +\n \"but the websocket was already in the connecting/closing/closed state.\",\n );\n return;\n }\n\n // websocket connection was re-established, delete reconnect loop timer\n clearInterval(this.reconnectionTimerId);\n this.reconnectionTimerId = null;\n }\n\n private onOpen(event: Event) {\n this.logger.debug(\"Websocket connection opened:\", event);\n\n // if we were in a websocket reconnect loop, end it\n this.stopReconnectionLoop();\n\n if (this.callbackSuccessfullyConnected !== null) {\n this.callbackSuccessfullyConnected();\n }\n }\n\n private onMessage(messageEvent: MessageEvent) {\n this.logger.debug(\"Websocket received message:\", messageEvent);\n\n // let the consumer of this class do something when we've received a message\n if (this.callbackOnMessage !== null) {\n this.callbackOnMessage(messageEvent);\n }\n }\n\n private onClose(closeEvent: CloseEvent) {\n this.logger.warn(\"Websocket connection closed:\", closeEvent);\n\n // set the websocket to null to garbage collect it, then start the reconnection loop\n this.websocket = null;\n this.startReconnectionLoop();\n }\n\n private onError(event: Event) {\n this.logger.warn(\"Websocket encountered an error:\", event);\n\n // if any error occurs, immediately disconnect\n // this will close the websocket connection and start the reconnection loop\n this.disconnect();\n }\n}\n", "{\n \"static/audio/click.wav\": \"static/audio/click.71097bab5de4e6d628b4aca6e752a63f.wav\",\n \"static/audio/death.wav\": \"static/audio/death.300d019b72205bb690f9cf1b77d4bdf8.wav\",\n \"static/audio/explosion.wav\": \"static/audio/explosion.414cc72d3e3414a15f835d7075cfc4ab.wav\",\n \"static/audio/plant.wav\": \"static/audio/plant.813fecdd078467dd90fc6b73b52b2877.wav\",\n \"static/audio/reveal.wav\": \"static/audio/reveal.bf7d1eded42c47100a123a11b1c8776d.wav\",\n \"static/audio/theme.wav\": \"static/audio/theme.19532a0e79bb4e64795d5ee82834c4f6.wav\",\n \"static/file/humans.txt\": \"static/file/humans.098009031e76982ae2b6cdbb015bc9ab.txt\",\n \"static/file/robots.txt\": \"static/file/robots.5e0bd1c281a62a380d7a948085bfe2d1.txt\",\n \"static/file/sitemap.xml\": \"static/file/sitemap.b1e9c9201c01aec03782f6c1d08db570.xml\",\n \"static/image/.DS_Store\": \"static/image/.ab772f47a66d717f23c536ab1e456991.DS_Store\",\n \"static/image/assets/eight.png\": \"static/image/assets/eight.1a71331cd48ead489dc9f6cb430c4667.png\",\n \"static/image/assets/five.png\": \"static/image/assets/five.a5dd0c37ba5df863a6e37b11bb0f6ac2.png\",\n \"static/image/assets/flag.png\": \"static/image/assets/flag.0b39daf2940c70886d0165f04558ecdd.png\",\n \"static/image/assets/four.png\": \"static/image/assets/four.caf71827736160c35a7fb9f3415c8bd7.png\",\n \"static/image/assets/hidden.png\": \"static/image/assets/hidden.6237251a7634dfe0cd09887705303515.png\",\n \"static/image/assets/mine.png\": \"static/image/assets/mine.3cc12416235dcab36ec069e8f072ab4a.png\",\n \"static/image/assets/one.png\": \"static/image/assets/one.c306ce5bfd1f6859737002830a231efe.png\",\n \"static/image/assets/seven.png\": \"static/image/assets/seven.034de81b0be959209418d28d9495172b.png\",\n \"static/image/assets/six.png\": \"static/image/assets/six.b3ac53ba18afaa949695fd4d5b6b4ac5.png\",\n \"static/image/assets/three.png\": \"static/image/assets/three.49c77b6cca5fee2ad7e97a90696e0488.png\",\n \"static/image/assets/tilesheet.png\": \"static/image/assets/tilesheet.7b1db08a20422b4b2501b7d02fe94995.png\",\n \"static/image/assets/two.png\": \"static/image/assets/two.849c22f2d32ad9cb3edc1fc849deec22.png\",\n \"static/image/assets/zero.png\": \"static/image/assets/zero.0318a2dbd67f26479ee48b2c33893604.png\",\n \"static/image/favicon/favicon.ico\": \"static/image/favicon/favicon.f252a3818b84d8a203205c651a7994b8.ico\",\n \"static/image/page/404/stay-on-marked-trail.webp\": \"static/image/page/404/stay-on-marked-trail.f0c1da590d3184b2a0eb30688d1cd658.webp\",\n \"static/image/social/.DS_Store\": \"static/image/social/.194577a7e20bdcc7afbb718f502c134c.DS_Store\",\n \"static/image/social/one-v-one.webp\": \"static/image/social/one-v-one.da07874e8746d301d8bf7e560f915632.webp\",\n \"static/script/main.js\": \"static/script/main.2ec8a78fd1e9bda42f91a64ed8326118.js\",\n \"static/script/main.js.map\": \"static/script/main.59e7735d70a7d9f352ac40633634dbdf.js.map\",\n \"static/script/minesweeper-royale.js\": \"static/script/minesweeper-royale.8678386e5797aab5eaa0d74f60d805f9.js\",\n \"static/script/minesweeper-royale.js.map\": \"static/script/minesweeper-royale.f780b39772318d5dade3d49ac18aef6c.js.map\",\n \"static/stylesheet/main.css\": \"static/stylesheet/main.696c304bf4862b50c26be2d55186a6ce.css\"\n}", "import { UI } from \"./builders.ts\";\n\nexport class UIPartial {\n public static header(): HTMLDivElement {\n return UI.div().id(\"header\").children([\n UI.header(1).text(\"Minesweeper Royale\").build(),\n UI.paragraph().text(\"Play with up to 256 players at the same time!\").build(),\n ]).build();\n }\n\n public static footer(): HTMLDivElement {\n return UI.div().id(\"footer\").children([\n UI.paragraph().innerHtml(`Made by Todd Griffin`)\n .build(),\n UI.paragraph().innerHtml(\n `Please submit feature requests and bug reports!`,\n ).build(),\n ]).build();\n }\n}\n", "import ApiClient from \"../../api-client.ts\";\nimport { AudioManager } from \"../../audio-manager.ts\";\nimport { AppState } from \"../../state/app-state.ts\";\nimport { ToastManager } from \"../../toast-manager.ts\";\n\nexport type ScreenNames = \"reconnecting\" | \"main-menu\" | \"public-lobby\" | \"private-lobby\" | \"game\";\n\nexport abstract class BaseScreen {\n protected readonly debug: boolean;\n protected readonly parentElement: HTMLElement;\n protected readonly appState: AppState;\n protected readonly apiClient: ApiClient;\n protected readonly audioManager: AudioManager;\n protected readonly toastManager: ToastManager;\n protected readonly switchScreen: (screen: ScreenNames) => void;\n protected readonly name: string;\n\n constructor(\n debug: boolean,\n parentElement: HTMLElement,\n appState: AppState,\n apiClient: ApiClient,\n audioManager: AudioManager,\n toastManager: ToastManager,\n switchScreen: (screen: ScreenNames) => void,\n name: string,\n ) {\n this.debug = debug;\n this.parentElement = parentElement;\n this.appState = appState;\n this.apiClient = apiClient;\n this.audioManager = audioManager;\n this.toastManager = toastManager;\n this.switchScreen = switchScreen;\n this.name = `${name}-screen`;\n\n // show UI\n this.parentElement.appendChild(this.ui());\n\n // init API callbacks\n this.apiClient.clearCallbacks();\n this.initCallbacks();\n }\n\n protected abstract ui(): HTMLDivElement;\n\n public initCallbacks(): void {\n return;\n }\n\n public cleanup(): void {\n return;\n }\n}\n", "import ApiClient from \"../../api-client.ts\";\nimport { AudioManager } from \"../../audio-manager.ts\";\nimport { AccountPayload } from \"../../codec/incoming-payload.ts\";\nimport { AppState } from \"../../state/app-state.ts\";\nimport { ToastManager, ToastType } from \"../../toast-manager.ts\";\nimport { UI } from \"../builders.ts\";\nimport { UIGetter } from \"../getters.ts\";\nimport { UIPartial } from \"../partials.ts\";\nimport { BaseScreen, ScreenNames } from \"./_base.ts\";\n\nexport default class MainMenuScreen extends BaseScreen {\n constructor(\n debug: boolean,\n parentElement: HTMLElement,\n appState: AppState,\n apiClient: ApiClient,\n audioManager: AudioManager,\n toastManager: ToastManager,\n switchScreen: (screen: ScreenNames) => void,\n ) {\n super(debug, parentElement, appState, apiClient, audioManager, toastManager, switchScreen, \"main-menu\");\n\n // make bChangeUsername invisible be default\n UIGetter.input(\"bChangeUsername\").style.display = \"none\";\n }\n\n protected ui(): HTMLDivElement {\n const username: string | null = this.appState.userState.username;\n if (username === null) {\n throw new Error(\"MainMenu: username is null\");\n }\n\n return UI.div().id(this.name).class(\"modal\").children([\n UI.div().children([\n UIPartial.header(),\n\n // Username\n UI.form()\n .id(\"fUsername\")\n .children([\n UI.input(\"text\")\n .id(\"iUsername\")\n .placeholder(\"Username\")\n .value(username)\n .minLength(1)\n .maxLength(16)\n .required(true)\n .eventListener(\"input\", (_event: Event) => {\n const iUsername: HTMLInputElement = UIGetter.input(\"iUsername\");\n iUsername.value = iUsername.value.replace(/[^a-zA-Z0-9_\\-\\*]/g, \"\");\n })\n .eventListener(\"focus\", () => this.disableScreenWhileEditingUsername(true))\n .build(),\n UI.input(\"submit\")\n .id(\"bChangeUsername\")\n .value(\"Save\")\n .build(),\n ])\n .eventListener(\"submit\", this.changeUsername.bind(this))\n .build(),\n\n // Join Public Queue\n UI.form()\n .id(\"fJoinPublicQueue\")\n .children([\n UI.input(\"submit\").id(\"bJoinPublicQueue\").value(\"Play Public Match\").build(),\n ])\n .eventListener(\"submit\", this.joinPublicQueue.bind(this))\n .build(),\n\n // Create Private Game\n UI.form()\n .id(\"fCreatePrivateGame\")\n .children([\n UI.input(\"submit\").id(\"bCreatePrivateGame\").value(\"Create Private Match\").build(),\n ])\n .eventListener(\"submit\", this.createPrivateGame.bind(this))\n .build(),\n\n // Join Private Game\n UI.form()\n .id(\"fJoinPrivateGame\")\n .children([\n UI.input(\"submit\").id(\"bJoinPrivateGame\").value(\"Join Private Match\").build(),\n UI.input(\"text\")\n .id(\"iJoinCode\")\n .inputmode(\"numeric\")\n .placeholder(\"Join Code\")\n .maxLength(6)\n .pattern(\"[0-9]{6}\")\n .autocomplete(\"one-time-code\")\n .required(true)\n .build(),\n ])\n .eventListener(\"submit\", this.joinGame.bind(this))\n .build(),\n\n UIPartial.footer(),\n ]).build(),\n ]).build();\n }\n\n private disableScreenWhileEditingUsername(isCurrentlyEditingUsername: boolean): void {\n UIGetter.input(\"bChangeUsername\").style.display = isCurrentlyEditingUsername ? \"block\" : \"none\";\n UIGetter.input(\"bJoinPublicQueue\").disabled = isCurrentlyEditingUsername;\n UIGetter.input(\"bCreatePrivateGame\").disabled = isCurrentlyEditingUsername;\n UIGetter.input(\"iJoinCode\").disabled = isCurrentlyEditingUsername;\n UIGetter.input(\"bJoinPrivateGame\").disabled = isCurrentlyEditingUsername;\n\n // unfocus the username input if isCurrentlyEditingUsername is false\n if (!isCurrentlyEditingUsername) {\n UIGetter.input(\"iUsername\").blur();\n }\n }\n\n private changeUsername(event: Event): void {\n event.preventDefault();\n this.audioManager.play(\"click\");\n\n // get new username\n const iUsername: HTMLInputElement = UIGetter.input(\"iUsername\");\n const newUsername: string = iUsername.value;\n\n // validate\n if (newUsername.length < 1) {\n this.toastManager.add(\"Username cannot be empty.\", { type: ToastType.ERROR });\n return;\n }\n if (newUsername.length > 16) {\n this.toastManager.add(\"Username cannot be longer than 16 characters.\", { type: ToastType.ERROR });\n return;\n }\n if (newUsername.match(/[^a-zA-Z0-9_\\-\\*]/) !== null) {\n this.toastManager.add(\"Username must only contain letters, numbers, hyphens, and/or underscores.\", {\n type: ToastType.ERROR,\n });\n return;\n }\n\n // don't send API request if username is unchanged\n if (this.appState.userState.username === newUsername) {\n // re-enable the game forms after username is changed\n this.disableScreenWhileEditingUsername(false);\n return;\n }\n\n this.apiClient.changeUsername(iUsername.value);\n }\n\n private joinPublicQueue(event: Event): void {\n event.preventDefault();\n\n // join public queue\n this.apiClient.joinPublicGameQueue();\n this.audioManager.play(\"click\");\n }\n\n private createPrivateGame(event: Event): void {\n event.preventDefault();\n\n // create private game\n this.apiClient.createPrivateGame();\n this.audioManager.play(\"click\");\n }\n\n private joinGame(event: Event): void {\n event.preventDefault();\n\n // join private game\n const iJoinCode: HTMLInputElement = UIGetter.input(\"iJoinCode\");\n this.apiClient.joinPrivateGame(iJoinCode.value);\n this.audioManager.play(\"click\");\n }\n\n public override initCallbacks(): void {\n // ChangedUsername\n this.apiClient.callbackChangedUsername = (username: string) => {\n // save account data\n this.appState.userState.changeUsername(username);\n\n // save to username input field\n UIGetter.input(\"iUsername\").value = username;\n\n // re-enable the game forms since username is now changed\n this.disableScreenWhileEditingUsername(false);\n };\n\n // PlayerJoinedPublicGameQueue\n this.apiClient.callbackJoinedPublicGameQueue = (gameId: string, lobby: AccountPayload[]) => {\n // save game data\n this.appState.gameState.joinedPublicGameQueue(gameId, lobby);\n\n // show next screen\n this.switchScreen(\"public-lobby\");\n };\n\n // CreatedPrivateGame\n this.apiClient.callbackCreatedPrivateGame = (gameId: string, joinCode: string) => {\n // save game data\n if (this.appState.userState.accountId === null || this.appState.userState.username === null) {\n throw new Error(\"MainMenu: user state is null\");\n }\n this.appState.gameState.createdPrivateGame(\n gameId,\n joinCode,\n this.appState.userState.accountId,\n this.appState.userState.username,\n );\n\n // show next screen\n this.switchScreen(\"private-lobby\");\n };\n\n // JoinedPrivateGame\n this.apiClient.callbackJoinedPrivateGame = (gameId: string, joinCode: string, lobby: AccountPayload[]) => {\n // save game data\n this.appState.gameState.joinedPrivateGame(gameId, joinCode, lobby);\n\n // show next screen\n this.switchScreen(\"private-lobby\");\n };\n }\n}\n", "import ApiClient from \"../../api-client.ts\";\nimport { AudioManager } from \"../../audio-manager.ts\";\nimport { AppState } from \"../../state/app-state.ts\";\nimport { ToastManager } from \"../../toast-manager.ts\";\nimport { UI } from \"../builders.ts\";\nimport { UIGetter } from \"../getters.ts\";\nimport { UIPartial } from \"../partials.ts\";\nimport { BaseScreen, ScreenNames } from \"./_base.ts\";\n\nexport default class PrivateLobbyScreen extends BaseScreen {\n constructor(\n debug: boolean,\n parentElement: HTMLElement,\n appState: AppState,\n apiClient: ApiClient,\n audioManager: AudioManager,\n toastManager: ToastManager,\n switchScreen: (screen: ScreenNames) => void,\n ) {\n super(debug, parentElement, appState, apiClient, audioManager, toastManager, switchScreen, \"private-lobby\");\n this.fillLobbyWithExistingPlayers();\n this.hideStartButtonIfNotHost();\n }\n\n private fillLobbyWithExistingPlayers(): void {\n if (this.appState.gameState.lobby === null) {\n throw new Error(\"Lobby: lobby is null\");\n }\n\n // add all existing players\n const dLobby: HTMLDivElement = UIGetter.div(\"dLobby\");\n for (const player of this.appState.gameState.lobby) {\n dLobby.appendChild(\n UI.paragraph()\n .text(player.username)\n .dataset(\"accountId\", player.accountId)\n .build(),\n );\n }\n }\n\n private hideStartButtonIfNotHost(): void {\n if (this.appState.userState.accountId !== this.appState.gameState.host) {\n const fStartGame: HTMLFormElement = UIGetter.form(\"fStartGame\");\n fStartGame.style.display = \"none\";\n }\n }\n\n protected ui(): HTMLDivElement {\n return UI.div().id(this.name).class(\"modal\").children([\n UI.div().children([\n UIPartial.header(),\n\n // game code\n UI.header(2)\n .innerHtml(`Lobby: ${this.appState.gameState.joinCode}`)\n .build(),\n\n // lobby\n UI.div().id(\"dLobby\").build(),\n\n // start game\n UI.form()\n .id(\"fStartGame\")\n .children([\n UI.input(\"submit\").value(\"Start Game\").build(),\n ])\n .eventListener(\"submit\", this.startGame.bind(this))\n .build(),\n\n // leave game\n UI.form()\n .id(\"fLeaveGame\")\n .children([\n UI.input(\"submit\").value(\"Leave Game\").build(),\n ])\n .eventListener(\"submit\", this.leaveGame.bind(this))\n .build(),\n\n UIPartial.footer(),\n ]).build(),\n ]).build();\n }\n\n private startGame(event: Event): void {\n event.preventDefault();\n\n // only host can start game\n if (this.appState.userState.accountId !== this.appState.gameState.host) {\n return;\n }\n\n // start private game\n this.apiClient.startPrivateGame();\n this.audioManager.play(\"click\");\n }\n\n private leaveGame(event: Event): void {\n event.preventDefault();\n\n // leave private game\n this.apiClient.leavePrivateGame();\n this.audioManager.play(\"click\");\n }\n\n public override initCallbacks(): void {\n // PlayerJoinedPrivateGame\n this.apiClient.callbackPlayerJoinedPrivateGame = (gameId: string, accountId: string, username: string) => {\n // save game data\n this.appState.gameState.playerJoinedPrivateGame(gameId, accountId, username);\n\n // add player to lobby\n const dLobby: HTMLDivElement = UIGetter.div(\"dLobby\");\n dLobby.appendChild(\n UI.paragraph()\n .text(username)\n .dataset(\"accountId\", accountId)\n .build(),\n );\n };\n\n // PlayerLeftPrivateGame\n this.apiClient.callbackPlayerLeftPrivateGame = (gameId: string, accountId: string) => {\n // save game data\n const lobbyIsEmpty: boolean = this.appState.gameState.playerLeftPrivateGame(gameId, accountId);\n\n // remove player from lobby\n const dLobby: HTMLDivElement = UIGetter.div(\"dLobby\");\n const p: Element | null = dLobby.querySelector(`p[data-account-id=\"${accountId}\"]`);\n if (p !== null) {\n p.remove();\n }\n\n // re-enable the start game button if host\n if (this.appState.userState.accountId === this.appState.gameState.host) {\n const fStartGame: HTMLFormElement = UIGetter.form(\"fStartGame\");\n fStartGame.style.display = \"block\";\n }\n\n // if lobby is empty, or the player that left is the host, delete game data and show main menu\n if (lobbyIsEmpty || accountId === this.appState.userState.accountId) {\n this.appState.gameState.clear();\n\n // show next modal\n this.switchScreen(\"main-menu\");\n }\n };\n\n // StartedPrivateGame\n this.apiClient.callbackStartedPrivateGame = (\n gameId: string,\n width: number,\n height: number,\n maxDurationSeconds: number,\n ) => {\n // save game data\n this.appState.gameState.startedPrivateGame(gameId, width, height, maxDurationSeconds);\n\n // show next modal\n this.switchScreen(\"game\");\n };\n }\n}\n", "import CACHE_BUSTER from \"../../../cache-buster.json\" with { type: \"json\" };\nimport Logger from \"jsr:@todd/webserver-base@0.0.4/logger\";\n\nexport default class Renderer {\n private readonly debug: boolean;\n private readonly logger: Logger;\n\n // webgpu\n private canvas: HTMLCanvasElement | null = null;\n private device: GPUDevice | null = null;\n private context: GPUCanvasContext | null = null;\n private format: GPUTextureFormat | null = null;\n private pipeline: GPURenderPipeline | null = null;\n private vertexBuffer: GPUBuffer | null = null;\n private tileInstanceBuffer: GPUBuffer | null = null;\n private bindGroup: GPUBindGroup | null = null;\n private uniformBuffer: GPUBuffer | null = null;\n private tileTexture: GPUTexture | null = null;\n\n // requestAnimationFrame\n private drawAnimationFrameId: number | null = null;\n private movementAnimationFrameId: number | null = null;\n\n // vec2 gridSize, vec2 worldSize, vec2 cameraPos, vec2 canvasSize float tileSize\n // (2 * 4) + (2 * 4) + (2 * 4) + (2 * 4) + 4 + 4 = 40 bytes\n private readonly UNIFORM_BUFFER_SIZE: number = 40;\n\n // grid\n private readonly GRID_TILES_WIDTH: number;\n private readonly GRID_TILES_HEIGHT: number;\n\n // tile size\n private tileSize: number = 64;\n private readonly MIN_TILE_SIZE = 16;\n private readonly MAX_TILE_SIZE = 128;\n private readonly ZOOM_SPEED = 8;\n\n // camera\n private cameraWorldX: number = 0;\n private cameraWorldY: number = 0;\n private readonly MOVE_SPEED = 10;\n\n // callbacks\n public callbackRevealTile: ((tileIndex: number) => void) | null = null;\n public callbackFlagTile: ((tileIndex: number) => void) | null = null;\n\n constructor(\n debug: boolean,\n parentElement: HTMLElement,\n gridWidth: number,\n gridHeight: number,\n tileBuffer: Uint32Array,\n ) {\n this.debug = debug;\n this.logger = new Logger(this.debug);\n\n this.GRID_TILES_WIDTH = gridWidth;\n this.GRID_TILES_HEIGHT = gridHeight;\n\n this.init(parentElement, tileBuffer).then(() => {});\n }\n\n public destroy(): void {\n // stop requestAnimationFrame\n if (this.drawAnimationFrameId !== null) {\n cancelAnimationFrame(this.drawAnimationFrameId);\n }\n if (this.movementAnimationFrameId !== null) {\n cancelAnimationFrame(this.movementAnimationFrameId);\n }\n\n // TODO - remove event listeners\n // TODO - don't trust this claude code \\/\n // if (this.canvas) {\n // this.canvas.removeEventListener(\"mousedown\", this.handleMouseDown);\n // this.canvas.removeEventListener(\"contextmenu\", this.handleContextMenu);\n // }\n // window.removeEventListener(\"resize\", this.handleResize);\n // window.removeEventListener(\"wheel\", this.handleWheel);\n // window.removeEventListener(\"keydown\", this.handleKeyDown);\n // window.removeEventListener(\"keyup\", this.handleKeyUp);\n\n // remove the canvas from the DOM\n if (this.canvas !== null) {\n this.canvas.remove();\n }\n\n // destroy all WebGPU resources\n if (this.vertexBuffer !== null) {\n this.vertexBuffer.destroy();\n }\n if (this.tileInstanceBuffer !== null) {\n this.tileInstanceBuffer.destroy();\n }\n if (this.uniformBuffer !== null) {\n this.uniformBuffer.destroy();\n }\n if (this.tileTexture !== null) {\n this.tileTexture.destroy();\n }\n if (this.device) {\n // (this will implicitly destroy all other GPU resources)\n this.device.destroy();\n }\n\n // clear references\n this.canvas = null;\n this.device = null;\n this.context = null;\n this.format = null;\n this.pipeline = null;\n this.vertexBuffer = null;\n this.tileInstanceBuffer = null;\n this.bindGroup = null;\n this.uniformBuffer = null;\n this.tileTexture = null;\n }\n\n private async init(parentElement: HTMLElement, tileBuffer: Uint32Array): Promise {\n this.createCanvas(parentElement);\n\n await this.initWebGPU(tileBuffer);\n\n // now that we have a context/device/canvas, we can initialize the size/DPI of the canvas\n this.handleResize();\n\n // listeners\n this.initMovementListeners();\n this.initMouseWheelListener();\n this.initMouseClickListener();\n\n // start render loop\n this.updateUniformBuffer(); // have to call updateUniformBuffer() once before the render loop starts\n this.drawAnimationFrameId = requestAnimationFrame(this.draw.bind(this));\n }\n\n private createCanvas(parentElement: HTMLElement): void {\n this.canvas = document.createElement(\"canvas\");\n globalThis.addEventListener(\"resize\", () => {\n this.handleResize();\n });\n parentElement.appendChild(this.canvas);\n\n // set camera position to center of grid\n // TODO - not sure if this is working correctly (should I offset in shader? that might mess up mouse clicking)\n this.cameraWorldX = ((this.GRID_TILES_WIDTH * this.tileSize) / 2) - (this.canvas.width / 2);\n this.cameraWorldY = ((this.GRID_TILES_HEIGHT * this.tileSize) / 2) - (this.canvas.height / 2);\n }\n\n private handleResize(): void {\n if (!navigator.gpu) {\n throw new Error(\"WebGPU not supported on this browser.\");\n }\n if (!this.context || !this.device || !this.format) {\n throw new Error(\"WebGPU not initialized.\");\n }\n if (!this.canvas) {\n throw new Error(\"Canvas not initialized.\");\n }\n\n // set DPI (dots per inch)\n const dpi: number = globalThis.devicePixelRatio || 1;\n this.canvas.width = Math.floor(globalThis.innerWidth * dpi);\n this.canvas.height = Math.floor(globalThis.innerHeight * dpi);\n this.clampCamera();\n\n this.context.configure({\n device: this.device,\n format: this.format,\n width: this.canvas.width,\n height: this.canvas.height,\n });\n this.updateUniformBuffer();\n }\n\n private async initWebGPU(tileBuffer: Uint32Array): Promise {\n if (!navigator.gpu) {\n throw new Error(\"WebGPU not supported on this browser.\");\n }\n if (!this.canvas) {\n throw new Error(\"Canvas not initialized.\");\n }\n\n // init adapter\n const adapter: GPUAdapter | null = await navigator.gpu.requestAdapter();\n if (!adapter) {\n throw new Error(\"No appropriate GPUAdapter found.\");\n }\n\n // init device\n const gpuDescriptor: GPUDeviceDescriptor = {\n requiredFeatures: [\"texture-compression-bc\"],\n requiredLimits: {\n maxStorageBufferBindingSize: 1024 * 1024 * 1024, // 1GB\n },\n };\n this.device = await adapter.requestDevice(gpuDescriptor);\n this.device.lost.then((info: GPUDeviceLostInfo) => {\n switch (info.reason) {\n case \"destroyed\":\n this.logger.debug(\"WebGPU device destroyed:\", info);\n break;\n default:\n this.logger.warn(\"WebGPU device lost:\", info);\n // TODO - handle device loss (reinitialize or show error or something)\n break;\n }\n });\n\n // init GPU canvas context\n const gpuCanvasContext: RenderingContext | null = this.canvas.getContext(\"webgpu\");\n if (gpuCanvasContext === null) {\n throw Error(\n \"Failed to get GPU Canvas Context. WebGPU not supported on this browser. Please try Google Chrome!\",\n );\n }\n this.context = gpuCanvasContext as GPUCanvasContext;\n\n // (storing this because it's used frequently)\n this.format = navigator.gpu.getPreferredCanvasFormat();\n if (this.format === undefined || this.format === null) {\n throw new Error(\"Failed to get preferred canvas format.\");\n }\n\n // create pipeline\n const shaderModule: GPUShaderModule = this.device.createShaderModule({\n code: this.getShaderCode(),\n });\n const bindGroupLayout = this.device.createBindGroupLayout({\n entries: [\n {\n binding: 0,\n visibility: GPUShaderStage.VERTEX | GPUShaderStage.FRAGMENT,\n buffer: { type: \"uniform\" },\n },\n {\n binding: 1,\n visibility: GPUShaderStage.VERTEX | GPUShaderStage.FRAGMENT,\n buffer: { type: \"read-only-storage\" },\n },\n {\n binding: 2,\n visibility: GPUShaderStage.FRAGMENT,\n sampler: { type: \"filtering\" },\n },\n {\n binding: 3,\n visibility: GPUShaderStage.FRAGMENT,\n texture: { sampleType: \"float\" },\n },\n ],\n });\n const pipelineLayout = this.device.createPipelineLayout({\n bindGroupLayouts: [bindGroupLayout],\n });\n this.pipeline = await this.device.createRenderPipelineAsync({\n layout: pipelineLayout,\n vertex: {\n module: shaderModule,\n entryPoint: \"vertexShader\",\n buffers: [{\n arrayStride: 8, // how many bytes per vertex\n attributes: [{\n shaderLocation: 0,\n offset: 0,\n format: \"float32x2\",\n }],\n }],\n },\n fragment: {\n module: shaderModule,\n entryPoint: \"fragmentShader\",\n targets: [\n {\n format: this.format,\n },\n ],\n },\n primitive: {\n topology: \"triangle-list\",\n },\n });\n\n // init vertex buffer (single square)\n // deno-fmt-ignore\n const vertexData = new Float32Array([\n 0, 0,\n 1, 0,\n 1, 1,\n 0, 0,\n 1, 1,\n 0, 1,\n ]);\n this.vertexBuffer = this.device.createBuffer({\n size: vertexData.byteLength,\n usage: GPUBufferUsage.VERTEX | GPUBufferUsage.COPY_DST,\n });\n this.device.queue.writeBuffer(this.vertexBuffer, 0, vertexData);\n\n // init instance buffer (tile states)\n this.tileInstanceBuffer = this.device.createBuffer({\n size: tileBuffer.byteLength,\n usage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_DST,\n });\n this.device.queue.writeBuffer(this.tileInstanceBuffer, 0, tileBuffer);\n\n // init uniform buffer\n this.uniformBuffer = this.device.createBuffer({\n size: this.UNIFORM_BUFFER_SIZE,\n usage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST,\n });\n this.updateUniformBuffer();\n\n // init tileset texture\n this.tileTexture = await this.loadTexture(CACHE_BUSTER[\"static/image/assets/tilesheet.png\"]);\n const sampler: GPUSampler = this.device.createSampler({\n magFilter: \"nearest\",\n minFilter: \"nearest\",\n });\n\n // init bind group\n this.bindGroup = this.device.createBindGroup({\n layout: bindGroupLayout,\n entries: [\n {\n binding: 0,\n resource: { buffer: this.uniformBuffer },\n },\n {\n binding: 1,\n resource: { buffer: this.tileInstanceBuffer },\n },\n {\n binding: 2,\n resource: sampler,\n },\n {\n binding: 3,\n resource: this.tileTexture.createView(),\n },\n ],\n });\n }\n\n private getShaderCode(): string {\n return `\n const TILE_STATE_MASK = 0xFFu;\n const PLAYER_MASK = 0xFF00u;\n\n const LEFT_EDGE: u32 = 1u; // 0000 0001\n const RIGHT_EDGE: u32 = 2u; // 0000 0010\n const TOP_EDGE: u32 = 4u; // 0000 0100\n const BOTTOM_EDGE: u32 = 8u; // 0000 1000\n const TOP_LEFT_EDGE: u32 = 16u; // 0001 0000\n const TOP_RIGHT_EDGE: u32 = 32u; // 0010 0000\n const BOTTOM_LEFT_EDGE: u32 = 64u; // 0100 0000\n const BOTTOM_RIGHT_EDGE: u32 = 128u; // 1000 0000\n\n const BORDER_WIDTH = 0.1;\n\n struct Uniforms {\n gridSize: vec2f,\n worldSize: vec2f,\n cameraPos: vec2f,\n screenSize: vec2f,\n tileSize: f32,\n padding: f32,\n };\n\n @group(0) @binding(0) var uniforms: Uniforms;\n @group(0) @binding(1) var tileBuffer: array;\n @group(0) @binding(2) var tileSampler: sampler;\n @group(0) @binding(3) var tileTexture: texture_2d;\n\n struct VertexOutput {\n @builtin(position) position: vec4f,\n @location(0) vertexPosition: vec2f,\n @location(1) @interpolate(flat) tileState: u32,\n @location(2) @interpolate(flat) playerColor: vec3f,\n @location(3) @interpolate(flat) borderMask: u32,\n @location(4) @interpolate(flat) isOwned: u32,\n };\n\n fn generatePlayerColor(playerId: u32) -> vec3f {\n // Generate a unique hue using golden ratio\n let goldenRatio = 0.618034;\n let hue = fract(f32(playerId) * goldenRatio);\n\n // Convert HSV to RGB (assuming S=V=1)\n let K = vec4f(1.0, 2.0/3.0, 1.0/3.0, 3.0);\n let p = abs(fract(vec3f(hue) + K.xyz) * 6.0 - K.www);\n return vec3f(1.0) - clamp(p - K.xxx, vec3f(0.0), vec3f(1.0));\n }\n\n fn getNeighborOwnership(centerIndex: u32, offsetX: i32, offsetY: i32) -> u32 {\n let x = i32(centerIndex % u32(uniforms.gridSize.x)) + offsetX;\n let y = i32(centerIndex / u32(uniforms.gridSize.x)) + offsetY;\n\n // check if the neighbor is out of bounds\n if (x < 0 || x >= i32(uniforms.gridSize.x) ||\n y < 0 || y >= i32(uniforms.gridSize.y)) {\n return 0xFFFFFFFFu;\n }\n\n // extract neighbor tile state and player ownership\n let neighborIndex = u32(y) * u32(uniforms.gridSize.x) + u32(x);\n let neighborPackedTileData = tileBuffer[neighborIndex];\n let neighborTileState = neighborPackedTileData & TILE_STATE_MASK;\n let neighborPlayerOwnership = (neighborPackedTileData & PLAYER_MASK) >> 8u;\n\n // check if the neighbor is unowned\n if (neighborTileState > 8u && neighborTileState != 10u && neighborTileState != 15u) {\n return 0xFFFFFFFFu;\n }\n\n return (tileBuffer[neighborIndex] & PLAYER_MASK) >> 8u;\n }\n\n @vertex\n fn vertexShader(\n @location(0) vertexPosition: vec2f,\n @builtin(instance_index) instanceIndex: u32\n ) -> VertexOutput {\n let gridPosition = vec2f(\n f32(instanceIndex % u32(uniforms.gridSize.x)),\n f32(instanceIndex / u32(uniforms.gridSize.x))\n );\n let worldPosition = (vertexPosition * uniforms.tileSize) + (gridPosition * uniforms.tileSize);\n let viewPosition = worldPosition - uniforms.cameraPos;\n\n // convert to clip space\n let clipPosition = (viewPosition / uniforms.screenSize) * 2.0 - 1.0;\n\n // extract tile state and player ownership\n let packedTileData = tileBuffer[instanceIndex];\n let tileState = packedTileData & TILE_STATE_MASK;\n let playerOwnership = (packedTileData & PLAYER_MASK) >> 8u;\n\n // determine if tile is \"owned\", and what borders to highlight\n var borderMask = 0u;\n let isOwned = tileState <= 8u || tileState == 10u || tileState == 15u;\n if (isOwned) {\n // cardinal directions\n if (getNeighborOwnership(instanceIndex, -1, 0) != playerOwnership) { borderMask |= LEFT_EDGE; }\n if (getNeighborOwnership(instanceIndex, 1, 0) != playerOwnership) { borderMask |= RIGHT_EDGE; }\n if (getNeighborOwnership(instanceIndex, 0, -1) != playerOwnership) { borderMask |= TOP_EDGE; }\n if (getNeighborOwnership(instanceIndex, 0, 1) != playerOwnership) { borderMask |= BOTTOM_EDGE; }\n\n // diagonal directions\n if (getNeighborOwnership(instanceIndex, -1, -1) != playerOwnership) { borderMask |= TOP_LEFT_EDGE; }\n if (getNeighborOwnership(instanceIndex, 1, -1) != playerOwnership) { borderMask |= TOP_RIGHT_EDGE; }\n if (getNeighborOwnership(instanceIndex, -1, 1) != playerOwnership) { borderMask |= BOTTOM_LEFT_EDGE; }\n if (getNeighborOwnership(instanceIndex, 1, 1) != playerOwnership) { borderMask |= BOTTOM_RIGHT_EDGE; }\n }\n\n var output: VertexOutput;\n output.position = vec4f(clipPosition, 0.0, 1.0);\n output.vertexPosition = vertexPosition;\n output.tileState = tileState;\n output.playerColor = generatePlayerColor(playerOwnership);\n output.borderMask = borderMask;\n output.isOwned = u32(isOwned);\n return output;\n }\n\n @fragment\n fn fragmentShader(input: VertexOutput) -> @location(0) vec4f {\n // calculate the texture coordinates within the 4x4 grid\n // each subtexture is 32x32 pixels in a 128x128 texture\n let subtextureSize = 1.0 / 4.0; // 32 / 128 = 1/4\n\n // calculate the position in the 4x4 texture grid\n let textureGridPos = vec2f(\n f32(input.tileState % 4u) * subtextureSize,\n f32(input.tileState / 4u) * subtextureSize\n );\n\n // calculate the texture coordinates within the 4x4 grid\n // flip the Y-coordinate by subtracting from 1.0 (otherwise the texture will be upside down)\n let tileTexCoord = vec2f(\n textureGridPos.x + input.vertexPosition.x * subtextureSize,\n textureGridPos.y + (1.0 - input.vertexPosition.y) * subtextureSize\n );\n let baseColor = textureSample(tileTexture, tileSampler, tileTexCoord);\n\n // shade \"owned\" tiles with player color\n let leftEdge = input.vertexPosition.x < BORDER_WIDTH;\n let rightEdge = input.vertexPosition.x > (1.0 - BORDER_WIDTH);\n let topEdge = input.vertexPosition.y < BORDER_WIDTH;\n let bottomEdge = input.vertexPosition.y > (1.0 - BORDER_WIDTH);\n let topLeftCorner = input.vertexPosition.x < BORDER_WIDTH && input.vertexPosition.y < BORDER_WIDTH;\n let topRightCorner = input.vertexPosition.x > (1.0 - BORDER_WIDTH) && input.vertexPosition.y < BORDER_WIDTH;\n let bottomLeftCorner = input.vertexPosition.x < BORDER_WIDTH && input.vertexPosition.y > (1.0 - BORDER_WIDTH);\n let bottomRightCorner = input.vertexPosition.x > (1.0 - BORDER_WIDTH) && input.vertexPosition.y > (1.0 - BORDER_WIDTH);\n if (input.isOwned != 0u) {\n // check if border vs middle pixel\n if ((leftEdge && (input.borderMask & LEFT_EDGE) != 0u) ||\n (rightEdge && (input.borderMask & RIGHT_EDGE) != 0u) ||\n (topEdge && (input.borderMask & TOP_EDGE) != 0u) ||\n (bottomEdge && (input.borderMask & BOTTOM_EDGE) != 0u) ||\n (topLeftCorner && (input.borderMask & TOP_LEFT_EDGE) != 0u) ||\n (topRightCorner && (input.borderMask & TOP_RIGHT_EDGE) != 0u) ||\n (bottomLeftCorner && (input.borderMask & BOTTOM_LEFT_EDGE) != 0u) ||\n (bottomRightCorner && (input.borderMask & BOTTOM_RIGHT_EDGE) != 0u)) {\n // border\n return vec4f(input.playerColor, 1.0);\n } else {\n // middle\n return vec4f(mix(baseColor.rgb, input.playerColor, 0.15), baseColor.a);\n }\n }\n\n return baseColor;\n }\n `;\n }\n\n private draw(): void {\n if (!this.device) {\n this.logger.error(\"Device not initialized.\");\n }\n if (!this.context) {\n this.logger.error(\"Context not initialized.\");\n }\n if (!this.pipeline) {\n this.logger.error(\"Pipeline not initialized.\");\n }\n if (!this.bindGroup) {\n this.logger.error(\"BindGroup not initialized.\");\n }\n if (!this.uniformBuffer) {\n this.logger.error(\"UniformBuffer not initialized.\");\n }\n if (!this.vertexBuffer) {\n this.logger.error(\"VertexBuffer not initialized.\");\n }\n\n const commandEncoder: GPUCommandEncoder = this.device.createCommandEncoder();\n const textureView: GPUTextureView = this.context.getCurrentTexture().createView();\n\n const renderPassDescriptor: GPURenderPassDescriptor = {\n colorAttachments: [\n {\n view: textureView,\n clearValue: { r: 0.0, g: 0.0, b: 0.0, a: 1.0 },\n loadOp: \"clear\",\n storeOp: \"store\",\n },\n ],\n };\n\n const passEncoder: GPURenderPassEncoder = commandEncoder.beginRenderPass(renderPassDescriptor);\n passEncoder.setPipeline(this.pipeline);\n passEncoder.setBindGroup(0, this.bindGroup);\n passEncoder.setVertexBuffer(0, this.vertexBuffer);\n passEncoder.draw(6, this.GRID_TILES_WIDTH * this.GRID_TILES_HEIGHT);\n passEncoder.end();\n\n this.device.queue.submit([commandEncoder.finish()]);\n\n // loop\n this.drawAnimationFrameId = requestAnimationFrame(this.draw.bind(this));\n }\n\n private updateUniformBuffer(): void {\n if (!this.device || !this.uniformBuffer || !this.canvas) return;\n\n const uniforms = new Float32Array(this.UNIFORM_BUFFER_SIZE / 4);\n uniforms.set([\n this.GRID_TILES_WIDTH,\n this.GRID_TILES_HEIGHT,\n this.GRID_TILES_WIDTH * this.tileSize,\n this.GRID_TILES_HEIGHT * this.tileSize,\n this.cameraWorldX,\n this.cameraWorldY,\n this.canvas.width,\n this.canvas.height,\n this.tileSize,\n 0, // padding to reach 40 bytes\n ]);\n\n this.device.queue.writeBuffer(this.uniformBuffer, 0, uniforms);\n }\n\n public updateTileBuffer(tileBuffer: Uint32Array): void {\n if (!this.device || !this.tileInstanceBuffer) {\n throw new Error(\"Device or instanceBuffer not initialized.\");\n }\n\n this.device.queue.writeBuffer(this.tileInstanceBuffer, 0, tileBuffer);\n }\n\n private async loadTexture(url: string): Promise {\n if (!this.device) {\n throw new Error(\"Device not initialized.\");\n }\n\n const response: Response = await fetch(url);\n const imageBitmap: ImageBitmap = await createImageBitmap(await response.blob());\n\n const texture: GPUTexture = this.device.createTexture({\n size: [imageBitmap.width, imageBitmap.height, 1],\n format: \"rgba8unorm\",\n usage: GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.COPY_DST | GPUTextureUsage.RENDER_ATTACHMENT,\n });\n\n this.device.queue.copyExternalImageToTexture(\n { source: imageBitmap },\n { texture: texture },\n [imageBitmap.width, imageBitmap.height],\n );\n\n return texture;\n }\n\n private clampCamera(): void {\n if (!this.canvas) {\n throw new Error(\"Canvas not initialized.\");\n }\n\n const worldWidth = this.GRID_TILES_WIDTH * this.tileSize;\n const worldHeight = this.GRID_TILES_HEIGHT * this.tileSize;\n const maxX = worldWidth - this.canvas.width;\n const maxY = worldHeight - this.canvas.height;\n\n let newX: number;\n if (worldWidth < this.canvas.width) {\n // TODO - should I offset in shader? that might mess up mouse clicking\n newX = (worldWidth / 2) - (this.canvas.width / 2);\n } else {\n newX = Math.max(0, Math.min(this.cameraWorldX, maxX));\n }\n\n let newY: number;\n if (worldHeight < this.canvas.height) {\n // TODO - should I offset in shader? that might mess up mouse clicking\n newY = (worldHeight / 2) - (this.canvas.height / 2);\n } else {\n newY = Math.max(0, Math.min(this.cameraWorldY, maxY));\n }\n\n if (newX !== this.cameraWorldX) {\n this.cameraWorldX = newX;\n }\n if (newY !== this.cameraWorldY) {\n this.cameraWorldY = newY;\n }\n }\n\n private initMovementListeners(): void {\n const keys = new Set();\n\n globalThis.addEventListener(\"keydown\", (event: KeyboardEvent) => {\n keys.add(event.key.toLowerCase());\n });\n\n globalThis.addEventListener(\"keyup\", (event: KeyboardEvent) => {\n keys.delete(event.key.toLowerCase());\n });\n\n let lastUpdateTime = performance.now();\n const updateInterval = 1000 / 60; // 60 FPS\n\n const move = (currentTime: number) => {\n if (currentTime - lastUpdateTime < updateInterval) {\n this.movementAnimationFrameId = requestAnimationFrame(move);\n return;\n }\n\n let dx = 0;\n let dy = 0;\n\n if (keys.has(\"w\") || keys.has(\"arrowup\")) dy -= this.MOVE_SPEED;\n if (keys.has(\"s\") || keys.has(\"arrowdown\")) dy += this.MOVE_SPEED;\n if (keys.has(\"a\") || keys.has(\"arrowleft\")) dx -= this.MOVE_SPEED;\n if (keys.has(\"d\") || keys.has(\"arrowright\")) dx += this.MOVE_SPEED;\n\n if (dx !== 0 || dy !== 0) {\n // Normalize the movement vector so that diagonal movement isn't faster\n // TODO - fix bug where if colliding with edge of grid, camera moves slower\n const length = Math.sqrt(dx * dx + dy * dy);\n dx = (dx / length) * this.MOVE_SPEED;\n dy = (dy / length) * this.MOVE_SPEED;\n\n this.cameraWorldX = this.cameraWorldX + dx;\n this.cameraWorldY = this.cameraWorldY - dy;\n this.clampCamera();\n\n this.updateUniformBuffer();\n }\n\n lastUpdateTime = currentTime;\n this.movementAnimationFrameId = requestAnimationFrame(move);\n };\n\n move(lastUpdateTime);\n }\n\n private initMouseWheelListener() {\n if (!this.canvas) {\n throw new Error(\"Canvas not initialized.\");\n }\n\n this.canvas.addEventListener(\"wheel\", (event: WheelEvent) => {\n event.preventDefault();\n\n // Store the mouse position relative to the canvas\n const canvasRect = (event.target as HTMLElement).getBoundingClientRect();\n const mouseX = event.clientX - canvasRect.left;\n const mouseY = event.clientY - canvasRect.top;\n\n // Calculate world coordinates of the mouse before zooming\n const worldXBeforeZoom = this.cameraWorldX + mouseX;\n const worldYBeforeZoom = this.cameraWorldY + mouseY;\n\n // Update tile size based on scroll direction\n const direction = Math.sign(event.deltaY);\n let newTileSize = this.tileSize - (direction * this.ZOOM_SPEED);\n newTileSize = Math.max(this.MIN_TILE_SIZE, Math.min(newTileSize, this.MAX_TILE_SIZE));\n if (newTileSize === this.tileSize) return;\n\n // Calculate the zoom factor\n const zoomFactor = newTileSize / this.tileSize;\n\n // Adjust camera position to keep the mouse point fixed\n const newCameraWorldX = worldXBeforeZoom - (mouseX * zoomFactor);\n const newCameraWorldY = worldYBeforeZoom - (mouseY * zoomFactor);\n\n // Clamp camera position to ensure it doesn't go out of bounds\n this.cameraWorldX = newCameraWorldX;\n this.cameraWorldY = newCameraWorldY;\n this.tileSize = newTileSize;\n this.clampCamera();\n\n this.updateUniformBuffer();\n }, { passive: false });\n }\n\n private initMouseClickListener(): void {\n if (!this.canvas) {\n throw new Error(\"Canvas not initialized.\");\n }\n\n // prevent right-click context menu\n this.canvas.addEventListener(\"contextmenu\", (event) => {\n event.preventDefault();\n });\n\n this.canvas.addEventListener(\"mousedown\", (mouseEvent: MouseEvent) => {\n // left click\n if (mouseEvent.button === 0) {\n if (this.callbackRevealTile === null) {\n return;\n }\n\n const tileIndex: number = this.getMouseTileIndex(mouseEvent);\n if (tileIndex === -1) {\n return;\n }\n this.callbackRevealTile(tileIndex);\n }\n\n // right click\n if (mouseEvent.button === 2) {\n if (this.callbackFlagTile === null) {\n return;\n }\n\n const tileIndex: number = this.getMouseTileIndex(mouseEvent);\n if (tileIndex === -1) {\n return;\n }\n this.callbackFlagTile(tileIndex);\n }\n });\n }\n\n private getMouseTileIndex(mouseEvent: MouseEvent): number {\n const [gridX, gridY] = this.getMouseGridPosition(mouseEvent);\n if (gridX < 0 || gridX >= this.GRID_TILES_WIDTH || gridY < 0 || gridY >= this.GRID_TILES_HEIGHT) {\n return -1;\n }\n\n return gridY * this.GRID_TILES_WIDTH + gridX;\n }\n\n private getMouseGridPosition(mouseEvent: MouseEvent): [number, number] {\n const [mouseWorldX, mouseWorldY] = this.getMouseWorldPosition(mouseEvent);\n\n const gridX = Math.floor(mouseWorldX / this.tileSize);\n const gridY = Math.floor(mouseWorldY / this.tileSize);\n\n this.logger.debug(`Grid (x, y): (${gridX}, ${gridY})\\n`);\n\n return [gridX, gridY];\n }\n\n private getMouseWorldPosition(mouseEvent: MouseEvent): [number, number] {\n if (!this.canvas) {\n throw new Error(\"Canvas not initialized.\");\n }\n\n const dpi = globalThis.devicePixelRatio || 1;\n\n const mouseOffsetX = Math.floor(mouseEvent.offsetX * dpi);\n const mouseOffsetY = Math.floor(mouseEvent.offsetY * dpi);\n\n const mouseWorldX = mouseOffsetX + this.cameraWorldX;\n const mouseWorldY = this.canvas.height - mouseOffsetY + this.cameraWorldY;\n\n this.logger.debug(\n `dpi: ${dpi}\\n\nCanvas width/height: ${this.canvas.width}x${this.canvas.height} (pixels)\\n\nMouse Offset (x, y): (${mouseOffsetX}, ${mouseOffsetY})\\n\nCamera (x, y): (${this.cameraWorldX}, ${this.cameraWorldY})\\n\nMouse World (x, y): (${mouseWorldX}, ${mouseWorldY})\\n`,\n );\n\n return [mouseWorldX, mouseWorldY];\n }\n}\n", "import ApiClient from \"../../api-client.ts\";\nimport { AudioManager } from \"../../audio-manager.ts\";\nimport { PlayerOwnedTileUpdates, WinCondition } from \"../../codec/incoming-payload.ts\";\nimport Renderer from \"../../renderer.ts\";\nimport { AppState } from \"../../state/app-state.ts\";\nimport { GameStatus } from \"../../state/game-state.ts\";\nimport PlayerState from \"../../state/player-state.ts\";\nimport TileBuffer from \"../../state/tile-buffer.ts\";\nimport { UI } from \"../builders.ts\";\nimport { UIGetter } from \"../getters.ts\";\nimport { UIPartial } from \"../partials.ts\";\nimport { BaseScreen, ScreenNames } from \"./_base.ts\";\nimport CACHE_BUSTER from \"../../../../../cache-buster.json\" with { type: \"json\" };\nimport { ToastManager } from \"../../toast-manager.ts\";\n\nexport default class GameScreen extends BaseScreen {\n private renderer: Renderer | null = null;\n private timerIntervalId: number | null = null;\n\n constructor(\n debug: boolean,\n parentElement: HTMLElement,\n appState: AppState,\n apiClient: ApiClient,\n audioManager: AudioManager,\n toastManager: ToastManager,\n switchScreen: (screen: ScreenNames) => void,\n ) {\n super(debug, parentElement, appState, apiClient, audioManager, toastManager, switchScreen, \"game\");\n this.initRenderer();\n this.initTimer();\n this.updateLeaderboard();\n }\n\n private initRenderer(): void {\n const boardWidth: number | null = this.appState.gameState.boardWidth;\n const boardHeight: number | null = this.appState.gameState.boardHeight;\n const tileBuffer: TileBuffer | null = this.appState.gameState.tileBuffer;\n if (boardWidth === null || boardHeight === null || tileBuffer === null) {\n throw new Error(\"Game: game state is null\");\n }\n this.renderer = new Renderer(this.debug, this.parentElement, boardWidth, boardHeight, tileBuffer.getBuffer());\n\n this.renderer.callbackRevealTile = (tileIndex: number) => {\n // make sure game is in progress\n if (this.appState.gameState.state === null) {\n throw new Error(\"GameBoard: game state is null\");\n }\n if (this.appState.gameState.state !== GameStatus.IN_PROGRESS) {\n return;\n }\n\n // make sure player is alive\n const lobby: PlayerState[] | null = this.appState.gameState.lobby;\n if (lobby === null) {\n throw new Error(\"GameBoard: lobby is null\");\n }\n if (this.appState.userState.accountId === null) {\n throw new Error(\"GameBoard: userState accountId is null\");\n }\n const player: PlayerState | undefined = lobby.find((accountPayload) =>\n accountPayload.accountId === this.appState.userState.accountId\n );\n if (player === undefined) {\n throw new Error(\"GameBoard: player not found in lobby\");\n }\n if (!player.isAlive) {\n return;\n }\n\n // make sure only hidden tiles are clicked\n const tileBuffer: TileBuffer | null = this.appState.gameState.tileBuffer;\n if (tileBuffer === null) {\n throw new Error(\"GameBoard: tile states is null\");\n }\n if (tileBuffer.getTileState(tileIndex) !== 9) {\n return;\n }\n\n // send payload\n this.apiClient.revealTile(tileIndex);\n this.audioManager.play(\"reveal\");\n };\n\n this.renderer.callbackFlagTile = (tileIndex: number) => {\n // make sure game is in progress\n if (this.appState.gameState.state === null) {\n throw new Error(\"GameBoard: game state is null\");\n }\n if (this.appState.gameState.state !== GameStatus.IN_PROGRESS) {\n return;\n }\n\n // make sure player is alive\n const lobby: PlayerState[] | null = this.appState.gameState.lobby;\n if (lobby === null) {\n throw new Error(\"GameBoard: lobby is null\");\n }\n if (this.appState.userState.accountId === null) {\n throw new Error(\"GameBoard: userState accountId is null\");\n }\n const player: PlayerState | undefined = lobby.find((accountPayload) =>\n accountPayload.accountId === this.appState.userState.accountId\n );\n if (player === undefined) {\n throw new Error(\"GameBoard: player not found in lobby\");\n }\n if (!player.isAlive) {\n return;\n }\n\n // make sure only hidden or flagged (by same player) tiles are clicked\n const tileBuffer: TileBuffer | null = this.appState.gameState.tileBuffer;\n if (tileBuffer === null) {\n throw new Error(\"GameBoard: tile states is null\");\n }\n if (\n tileBuffer.getTileState(tileIndex) !== 9 &&\n (tileBuffer.getTileState(tileIndex) !== 10)\n ) {\n return;\n }\n\n // do not allow players to unflag tiles that were flagged by other players\n const playerId: number = lobby.findIndex((accountPayload: PlayerState) =>\n accountPayload.accountId === this.appState.userState.accountId\n );\n if (playerId === -1) {\n throw new Error(\"GameBoard: player not found in lobby\");\n }\n if (tileBuffer.getTileState(tileIndex) === 10 && tileBuffer.getPlayerOwnership(tileIndex) !== playerId) {\n return;\n }\n\n // send payload\n this.apiClient.flagTile(tileIndex);\n this.audioManager.play(\"plant\");\n };\n }\n\n private initTimer(): void {\n const timerPanel: HTMLParagraphElement = UIGetter.paragraph(\"timer\");\n this.timerIntervalId = setInterval(() => {\n // get latest time left\n const currentTimeLeftSeconds: number = this.appState.gameState.currentGameTimeLeftSeconds;\n\n // update timer panel\n timerPanel.textContent = this.prettifySeconds(currentTimeLeftSeconds);\n\n // stop timer if time is up\n if (currentTimeLeftSeconds <= 0) {\n if (this.timerIntervalId === null) {\n throw new Error(\"GameBoard: timerIntervalId is null\");\n }\n clearInterval(this.timerIntervalId);\n return;\n }\n }, 1000);\n }\n\n protected ui(): HTMLDivElement {\n return UI.div().id(this.name).children([\n UI.div().id(\"top-panel\").children([\n UI.paragraph().id(\"timer\").text(`${this.prettifySeconds(this.appState.gameState.currentGameTimeLeftSeconds)}`)\n .build(),\n ]).build(),\n\n UI.div().id(\"leaderboard\").children([\n UI.div().id(\"legend\").class(\"leaderboard-row\").children([\n UI.paragraph().class(\"leaderboard-username\").text(\"Leaderboard\").build(),\n UI.image(CACHE_BUSTER[\"static/image/assets/flag.png\"], \"Count of flagged tiles.\").class(\n \"leaderboard-flagged-tiles\",\n ).build(),\n UI.image(CACHE_BUSTER[\"static/image/assets/mine.png\"], \"Count of exploded mines.\").class(\n \"leaderboard-exploded-mines\",\n ).build(),\n UI.image(CACHE_BUSTER[\"static/image/assets/hidden.png\"], \"Count of revealed tiles.\").class(\n \"leaderboard-revealed-tiles\",\n ).build(),\n UI.paragraph().class(\"leaderboard-board-percentage\").text(\"%\").build(),\n ]).build(),\n\n UI.div().id(\"player-scores\").build(),\n ]).build(),\n ]).build();\n }\n\n private prettifySeconds(seconds: number): string {\n const minutes: number = Math.floor(seconds / 60);\n const remainingSeconds: number = seconds % 60;\n return `${minutes.toString().padStart(1, \"0\")}:${remainingSeconds.toString().padStart(2, \"0\")}`;\n }\n\n public override initCallbacks(): void {\n // GameStateUpdate\n this.apiClient.callbackGameStateUpdate = (\n gameId: string,\n playerOwnedTileUpdates: PlayerOwnedTileUpdates[],\n deadPlayers: number[],\n ) => {\n if (this.renderer === null) {\n throw new Error(\"GameBoard: renderer is null\");\n }\n if (gameId !== this.appState.gameState.gameId) {\n throw new Error(`GameBoard: received wrong GameId: '${gameId}' (expected '${this.appState.gameState.gameId}')`);\n }\n\n // play explosion sound if any mines were hit\n for (const playerOwnedTileUpdate of playerOwnedTileUpdates) {\n for (const tileUpdate of playerOwnedTileUpdate.tileUpdates) {\n if (tileUpdate.newType !== 15) {\n continue;\n }\n\n this.audioManager.play(\"explosion\");\n }\n }\n\n // play death sound if any players died\n for (const _deadPlayer of deadPlayers) {\n this.audioManager.play(\"death\");\n }\n\n // save game data\n this.appState.gameState.gameStateUpdate(gameId, playerOwnedTileUpdates, deadPlayers);\n const tileBuffer: TileBuffer | null = this.appState.gameState.tileBuffer;\n if (tileBuffer === null) {\n throw new Error(\"GameBoard: tile states is null\");\n }\n\n // update game board UI\n this.renderer.updateTileBuffer(tileBuffer.getBuffer());\n\n // update leaderboard\n this.updateLeaderboard();\n };\n\n // PlayerLeftPrivateGame\n this.apiClient.callbackPlayerLeftPrivateGame = (gameId: string, accountId: string) => {\n if (gameId !== this.appState.gameState.gameId) {\n throw new Error(`GameBoard: received wrong GameId: '${gameId}' (expected '${this.appState.gameState.gameId}')`);\n }\n\n // save game data\n this.appState.gameState.playerLeftPrivateGame(gameId, accountId);\n\n // TODO - update UI to show player left\n };\n\n // GameOver\n this.apiClient.callbackGameOver = (gameId: string, winner: number, winCondition: WinCondition) => {\n if (gameId !== this.appState.gameState.gameId) {\n throw new Error(`GameBoard: received wrong GameId: '${gameId}' (expected '${this.appState.gameState.gameId}')`);\n }\n\n // stop timer\n if (this.timerIntervalId === null) {\n throw new Error(\"GameBoard: timerIntervalId is null\");\n }\n clearInterval(this.timerIntervalId);\n\n // save game data\n this.appState.gameState.getGameOver(gameId, winner, winCondition);\n\n // get winner username\n const lobby: PlayerState[] | null = this.appState.gameState.lobby;\n if (lobby === null) {\n throw new Error(\"GameBoard: lobby is null\");\n }\n const winnerUsername: string = lobby[winner].username;\n\n // show game over modal\n const gameOverModal: HTMLDivElement = UI.div().class(\"modal\").children([\n UI.div().children([\n UIPartial.header(),\n\n UI.header(2).text(\"Game Over\").build(),\n\n // stats\n UI.paragraph().text(`Winner: ${winnerUsername}`).build(),\n UI.paragraph().text(`Win Condition: ${WinCondition[winCondition]}`).build(),\n\n // main menu\n UI.form()\n .id(\"fMainMenu\")\n .children([\n UI.input(\"submit\").value(\"Main Menu\").build(),\n ])\n .eventListener(\"submit\", this.leaveGame.bind(this))\n .build(),\n\n UIPartial.footer(),\n ]).build(),\n ]).build();\n this.parentElement.appendChild(gameOverModal);\n };\n }\n\n private updateLeaderboard(): void {\n // clear existing leaderboard\n const playerScores: HTMLDivElement = UIGetter.div(\"player-scores\");\n playerScores.innerHTML = \"\";\n\n // first add global stats\n if (this.appState.gameState.boardWidth === null || this.appState.gameState.boardHeight === null) {\n throw new Error(\"GameBoard: gameState is null\");\n }\n const totalTiles: number = this.appState.gameState.boardWidth * this.appState.gameState.boardHeight;\n const totalTilesActivated: number = this.appState.gameState.tilesRevealed + this.appState.gameState.flagsPlaced +\n this.appState.gameState.minesExploded;\n const boardPercentage: number = Math.round((totalTilesActivated / totalTiles) * 100);\n const globalScore: HTMLDivElement = UI.div().class(\"leaderboard-row\").children([\n UI.paragraph().class(\"leaderboard-username\").build(),\n UI.paragraph().class(\"leaderboard-flagged-tiles\").text(`${this.appState.gameState.flagsPlaced}`).build(),\n UI.paragraph().class(\"leaderboard-exploded-mines\").text(`${this.appState.gameState.minesExploded}`).build(),\n UI.paragraph().class(\"leaderboard-revealed-tiles\").text(`${this.appState.gameState.tilesRevealed}`).build(),\n UI.paragraph().class(\"leaderboard-board-percentage\").text(`${boardPercentage}%`).build(),\n ]).build();\n playerScores.appendChild(globalScore);\n\n // then add all player stats\n const lobby: PlayerState[] | null = this.appState.gameState.lobby;\n if (lobby === null) {\n throw new Error(\"GameBoard: lobby is null\");\n }\n const sortedLobby = [...lobby].sort((a: PlayerState, b: PlayerState) => {\n return b.flagsPlaced - a.flagsPlaced;\n });\n for (const player of sortedLobby) {\n const playerTilesActivated: number = player.tilesRevealed + player.flagsPlaced + player.minesExploded;\n const playerBoardPercentage: number = Math.round((playerTilesActivated / totalTiles) * 100);\n const playerScore: HTMLDivElement = UI.div().class(\"leaderboard-row\").children([\n UI.paragraph().class(\"leaderboard-username\").text(player.username).build(),\n UI.paragraph().class(\"leaderboard-flagged-tiles\").text(`${player.flagsPlaced}`).build(),\n UI.paragraph().class(\"leaderboard-exploded-mines\").text(`${player.minesExploded}`).build(),\n UI.paragraph().class(\"leaderboard-revealed-tiles\").text(`${player.tilesRevealed}`).build(),\n UI.paragraph().class(\"leaderboard-board-percentage\").text(`${playerBoardPercentage}%`).build(),\n ]).build();\n playerScores.appendChild(playerScore);\n }\n }\n\n private leaveGame(event: Event): void {\n event.preventDefault();\n\n // HACK: re-init listener for 'PlayerLeftPrivateGame' because we need to wait for this payload to be received\n // prior to destroying the renderer and showing the main menu\n this.apiClient.callbackPlayerLeftPrivateGame = (gameId: string, accountId: string) => {\n if (gameId !== this.appState.gameState.gameId) {\n throw new Error(\n `GameBoard: received wrong GameId: '${gameId}' (expected '${this.appState.gameState.gameId}')`,\n );\n }\n if (this.appState.userState.accountId !== accountId) {\n return;\n }\n if (this.renderer === null) {\n throw new Error(\"GameBoard: renderer is null\");\n }\n\n // delete game data from state\n this.appState.gameState.clear();\n\n // exit back to main menu\n this.switchScreen(\"main-menu\");\n };\n\n // leave private game\n this.apiClient.leavePrivateGame();\n this.audioManager.play(\"click\");\n }\n\n public override cleanup(): void {\n if (this.renderer === null) {\n throw new Error(\"GameBoard: renderer is null\");\n }\n this.renderer.destroy();\n this.renderer = null;\n }\n}\n", "import ApiClient from \"../../api-client.ts\";\nimport { AudioManager } from \"../../audio-manager.ts\";\nimport { AppState } from \"../../state/app-state.ts\";\nimport { ToastManager } from \"../../toast-manager.ts\";\nimport { UI } from \"../builders.ts\";\nimport { UIPartial } from \"../partials.ts\";\nimport { BaseScreen, ScreenNames } from \"./_base.ts\";\n\nexport default class ReconnectingScreen extends BaseScreen {\n constructor(\n debug: boolean,\n parentElement: HTMLElement,\n appState: AppState,\n apiClient: ApiClient,\n audioManager: AudioManager,\n toastManager: ToastManager,\n switchScreen: (screen: ScreenNames) => void,\n ) {\n super(debug, parentElement, appState, apiClient, audioManager, toastManager, switchScreen, \"reconnecting\");\n }\n\n protected ui(): HTMLDivElement {\n return UI.div().id(this.name).class(\"modal\").children([\n UI.div().children([\n UIPartial.header(),\n\n UI.paragraph().text(\"Reconnecting...\").build(),\n\n UIPartial.footer(),\n ]).build(),\n ]).build();\n }\n}\n", "import ApiClient from \"../../api-client.ts\";\nimport { AudioManager } from \"../../audio-manager.ts\";\nimport { AppState } from \"../../state/app-state.ts\";\nimport { ToastManager } from \"../../toast-manager.ts\";\nimport { UI } from \"../builders.ts\";\nimport { UIGetter } from \"../getters.ts\";\nimport { UIPartial } from \"../partials.ts\";\nimport { BaseScreen, ScreenNames } from \"./_base.ts\";\n\nexport default class PublicLobbyScreen extends BaseScreen {\n constructor(\n debug: boolean,\n parentElement: HTMLElement,\n appState: AppState,\n apiClient: ApiClient,\n audioManager: AudioManager,\n toastManager: ToastManager,\n switchScreen: (screen: ScreenNames) => void,\n ) {\n super(debug, parentElement, appState, apiClient, audioManager, toastManager, switchScreen, \"public-lobby\");\n this.fillLobbyWithExistingPlayers();\n }\n\n private fillLobbyWithExistingPlayers(): void {\n if (this.appState.gameState.lobby === null) {\n throw new Error(\"Lobby: lobby is null\");\n }\n\n // add all existing players\n const dLobby: HTMLDivElement = UIGetter.div(\"dLobby\");\n for (const player of this.appState.gameState.lobby) {\n dLobby.appendChild(\n UI.paragraph()\n .text(player.username)\n .dataset(\"accountId\", player.accountId)\n .build(),\n );\n }\n }\n\n protected ui(): HTMLDivElement {\n return UI.div().id(this.name).class(\"modal\").children([\n UI.div().children([\n UIPartial.header(),\n\n // game code\n UI.header(2)\n .id(\"hLobby\")\n .innerHtml(`Public Queue`)\n .build(),\n\n // lobby\n UI.div().id(\"dLobby\").build(),\n\n // leave game\n UI.form()\n .id(\"fLeaveQueue\")\n .children([\n UI.input(\"submit\").value(\"Leave Queue\").build(),\n ])\n .eventListener(\"submit\", this.leaveQueue.bind(this))\n .build(),\n\n UIPartial.footer(),\n ]).build(),\n ]).build();\n }\n\n private leaveQueue(event: Event): void {\n event.preventDefault();\n\n // leave private game\n this.apiClient.leavePrivateGame();\n this.audioManager.play(\"click\");\n }\n\n public override initCallbacks(): void {\n // PlayerJoinedPublicGameQueue\n this.apiClient.callbackPlayerJoinedPublicGameQueue = (gameId: string, accountId: string, username: string) => {\n // save game data\n // TODO - switch to public queue method\n this.appState.gameState.playerJoinedPrivateGame(gameId, accountId, username);\n\n // add player to lobby\n const dLobby: HTMLDivElement = UIGetter.div(\"dLobby\");\n dLobby.appendChild(\n UI.paragraph()\n .text(username)\n .dataset(\"accountId\", accountId)\n .build(),\n );\n };\n\n // PlayerLeftPublicGameQueue\n this.apiClient.callbackPlayerLeftPublicGameQueue = (gameId: string, accountId: string) => {\n // save game data\n // TODO - switch to public queue method\n const lobbyIsEmpty: boolean = this.appState.gameState.playerLeftPrivateGame(gameId, accountId);\n\n // remove player from lobby\n const dLobby: HTMLDivElement = UIGetter.div(\"dLobby\");\n const p: Element | null = dLobby.querySelector(`p[data-account-id=\"${accountId}\"]`);\n if (p !== null) {\n p.remove();\n }\n\n // if lobby is empty, or the player that left is the host, delete game data and show main menu\n if (lobbyIsEmpty || accountId === this.appState.userState.accountId) {\n this.appState.gameState.clear();\n\n // show next modal\n this.switchScreen(\"main-menu\");\n }\n };\n\n // StartedPrivateGame\n // TODO - switch to public queue method\n this.apiClient.callbackStartedPrivateGame = (\n gameId: string,\n width: number,\n height: number,\n maxDurationSeconds: number,\n ) => {\n // save game data\n // TODO - switch to public queue method\n this.appState.gameState.startedPrivateGame(gameId, width, height, maxDurationSeconds);\n\n // show next modal\n this.switchScreen(\"game\");\n };\n }\n}\n", "import Logger from \"jsr:@todd/webserver-base@0.0.4/logger\";\n\nimport ApiClient from \"./api-client.ts\";\nimport { AppState } from \"./state/app-state.ts\";\nimport { AudioControl, AudioManager } from \"./audio-manager.ts\";\nimport { ToastManager, ToastType } from \"./toast-manager.ts\";\nimport WebsocketWrapper from \"./websocket-wrapper.ts\";\nimport CACHE_BUSTER from \"../../../cache-buster.json\" with { type: \"json\" };\nimport { BaseScreen, ScreenNames } from \"./ui/screens/_base.ts\";\nimport MainMenuScreen from \"./ui/screens/main-menu.ts\";\nimport PrivateLobbyScreen from \"./ui/screens/private-lobby.ts\";\nimport GameScreen from \"./ui/screens/game-board.ts\";\nimport ReconnectingScreen from \"./ui/screens/reconnecting.ts\";\nimport { UIGetter } from \"./ui/getters.ts\";\nimport { LS_USERNAME_KEY } from \"./state/user-state.ts\";\nimport PublicLobbyScreen from \"./ui/screens/public-lobby.ts\";\nimport { OutgoingPayloadType } from \"./codec/outgoing-payload.ts\";\n\nexport class Game {\n private readonly debug: boolean = globalThis.location.protocol.startsWith(\"https\") ? false : true;\n private readonly logger: Logger;\n private readonly appState: AppState;\n private readonly apiClient: ApiClient;\n private readonly toastManager: ToastManager;\n private currentScreen: BaseScreen | null = null;\n\n // websocket\n private readonly ws: WebsocketWrapper;\n private isFirstConnectionAttempt: boolean = true; // (don't show reconnection toast when player firsts loads game)\n private isFirstConnection: boolean = true; // (reload the page if we're reconnecting from a previous server outage)\n private reconnectTimeoutMilliseconds: number = 10 * 1000;\n\n // ping\n private pingTimerId: number | null = null;\n private readonly pingTimeoutMilliseconds: number = 10 * 1000;\n private pingElapsedMilliseconds: number = performance.now();\n private isFirstPing: boolean = true; // (artificially add 1 to pong.PlayersOnline because the server won't know about this player yet)\n\n // parent element\n private readonly parentElement: HTMLElement;\n\n // audio\n private readonly audioManager: AudioManager;\n private themeAudio: Promise | null = null;\n\n constructor() {\n this.logger = new Logger(this.debug);\n\n // audio\n this.audioManager = new AudioManager(this.debug, {\n click: {\n url: CACHE_BUSTER[\"static/audio/click.wav\"],\n volume: 1.0,\n },\n death: {\n url: CACHE_BUSTER[\"static/audio/death.wav\"],\n volume: 0.25,\n },\n explosion: {\n url: CACHE_BUSTER[\"static/audio/explosion.wav\"],\n volume: 0.25,\n },\n plant: {\n url: CACHE_BUSTER[\"static/audio/plant.wav\"],\n volume: 0.25,\n },\n reveal: {\n url: CACHE_BUSTER[\"static/audio/reveal.wav\"],\n volume: 1.0,\n },\n theme: {\n url: CACHE_BUSTER[\"static/audio/theme.wav\"],\n volume: 0.25,\n },\n });\n\n // grab the main element for the canvas\n this.parentElement = UIGetter.main();\n\n // init toast manager\n this.toastManager = new ToastManager();\n\n // init app state\n this.appState = new AppState();\n\n // init ws\n const wsUrl = `${\n globalThis.location.protocol.startsWith(\"https\") ? \"wss\" : \"ws\"\n }://${globalThis.location.host}/api/v1/ws/proxy`;\n this.ws = new WebsocketWrapper(this.debug, wsUrl, this.reconnectTimeoutMilliseconds);\n this.ws.attemptConnectionCallback = this.handleWebsocketConnectionAttempt.bind(this);\n this.ws.successfullyConnectedCallback = this.handleNewWebsocketConnection.bind(this);\n this.ws.startReconnectionLoopCallback = this.handleWebsocketDisconnection.bind(this);\n\n // init api client\n this.apiClient = new ApiClient(this.debug, this.ws);\n\n // set up ping callback\n this.apiClient.callbackPong = this.handleApiPong.bind(this);\n\n // set up error callback\n this.apiClient.callbackError = this.handleApiError.bind(this);\n\n // check for WebGPU support\n if (!navigator.gpu) {\n this.showModalUnsupportedWebGpu();\n return;\n }\n\n // connect to the websocket\n this.ws.connect();\n }\n\n private handleNewWebsocketConnection(): void {\n // If this is not the first connection attempt, that means the server went down.\n // In case there are newer versions of static assets (like the game JS), we want to reload the page.\n if (!this.isFirstConnection) {\n globalThis.location.reload();\n return;\n }\n this.isFirstConnection = false;\n this.toastManager.add(\"Connected!\", { type: ToastType.SUCCESS });\n\n // start the ping timer\n this.handleApiPing();\n this.pingTimerId = setInterval(this.handleApiPing.bind(this), this.pingTimeoutMilliseconds);\n\n // log in\n this.logIn();\n }\n\n private handleWebsocketDisconnection(): void {\n this.logger.debug(\"Websocket connection lost\");\n this.toastManager.add(\"Disconnected...\", { type: ToastType.ERROR });\n\n // stop the ping timer\n if (this.pingTimerId !== null) {\n clearInterval(this.pingTimerId);\n this.pingTimerId = null;\n }\n UIGetter.paragraph(\"ping-label\").innerText = \"Ping: ?ms\";\n UIGetter.paragraph(\"players-online-label\").innerText = \"Players Online: ?\";\n UIGetter.paragraph(\"games-in-progress-label\").innerText = \"Games In Progress: ?\";\n\n // clear the entire app state\n this.appState.clear();\n\n // show the reconnecting screen\n this.switchScreen(\"reconnecting\");\n }\n\n private handleWebsocketConnectionAttempt(): void {\n if (this.isFirstConnectionAttempt) {\n this.isFirstConnectionAttempt = false;\n return;\n }\n\n this.logger.debug(\"Attempting to connect to the websocket\");\n this.toastManager.add(\"Attempting reconnection...\", { type: ToastType.WARNING });\n }\n\n private handleApiPing(): void {\n // save a high-precision timestamp for ping delta\n this.pingElapsedMilliseconds = performance.now();\n\n // send current unix timestamp to server for server-side estimated ping delta\n const clientTimeUnixMs: bigint = BigInt(Date.now());\n this.apiClient.ping(clientTimeUnixMs);\n }\n\n private handleApiPong(playersOnline: bigint, gamesInProgress: bigint): void {\n // if this is the first ping, we need to artificially add 1 to playersOnline\n // because the server doesn't know about this player yet\n if (this.isFirstPing) {\n playersOnline++;\n this.isFirstPing = false;\n }\n\n const ping: number = Math.round(performance.now() - this.pingElapsedMilliseconds);\n UIGetter.paragraph(\"ping-label\").innerText = `Ping: ${ping}ms`;\n UIGetter.paragraph(\"players-online-label\").innerText = `Players Online: ${playersOnline}`;\n UIGetter.paragraph(\"games-in-progress-label\").innerText = `Games In Progress: ${gamesInProgress}`;\n }\n\n private handleApiError(originPayloadType: number, message: string): void {\n this.toastManager.add(message, { type: ToastType.ERROR });\n this.logger.error(`API Error (OutgoingPayload.${OutgoingPayloadType[originPayloadType]}): ${message}`);\n }\n\n private switchScreen(screen: ScreenNames): void {\n // clear existing screen\n if (this.currentScreen !== null) {\n this.currentScreen.cleanup();\n }\n\n // clear parent element\n this.parentElement.replaceChildren();\n\n // show new screen\n switch (screen) {\n case \"reconnecting\":\n this.stopThemeSong();\n this.currentScreen = new ReconnectingScreen(\n this.debug,\n this.parentElement,\n this.appState,\n this.apiClient,\n this.audioManager,\n this.toastManager,\n this.switchScreen.bind(this),\n );\n break;\n case \"main-menu\":\n this.playThemeSong();\n this.currentScreen = new MainMenuScreen(\n this.debug,\n this.parentElement,\n this.appState,\n this.apiClient,\n this.audioManager,\n this.toastManager,\n this.switchScreen.bind(this),\n );\n break;\n case \"public-lobby\":\n this.currentScreen = new PublicLobbyScreen(\n this.debug,\n this.parentElement,\n this.appState,\n this.apiClient,\n this.audioManager,\n this.toastManager,\n this.switchScreen.bind(this),\n );\n break;\n case \"private-lobby\":\n this.currentScreen = new PrivateLobbyScreen(\n this.debug,\n this.parentElement,\n this.appState,\n this.apiClient,\n this.audioManager,\n this.toastManager,\n this.switchScreen.bind(this),\n );\n break;\n case \"game\":\n this.stopThemeSong();\n this.currentScreen = new GameScreen(\n this.debug,\n this.parentElement,\n this.appState,\n this.apiClient,\n this.audioManager,\n this.toastManager,\n this.switchScreen.bind(this),\n );\n break;\n default:\n throw new Error(`Unknown screen: '${screen}'`);\n }\n }\n\n private logIn(): void {\n // set up callback for when the user logs in\n this.apiClient.callbackLoggedIn = (accountId: string, username: string) => {\n // save account data\n this.appState.userState.logIn(accountId, username);\n\n // show next screen\n this.switchScreen(\"main-menu\");\n };\n\n // check local storage for username\n let username: string | null = localStorage.getItem(LS_USERNAME_KEY);\n\n // generate random username if none exists\n if (username === null) {\n username = `Guest${Math.floor(Math.random() * 10000)}`;\n localStorage.setItem(LS_USERNAME_KEY, username);\n }\n\n // log in\n this.apiClient.logIn(username);\n }\n\n private showModalUnsupportedWebGpu(): void {\n const popUp = document.createElement(\"div\");\n popUp.classList.add(\"modal\");\n popUp.innerHTML = `\n
\n

Unsupported WebGPU

\n
\n\n

Minesweeper Royale is built with WebGPU which is not available on all browsers (YET).

\n

Please use Google Chrome on a laptop/desktop to play the game.

\n
\n\n

For more information, please visit caniuse.com/webgpu and webgpu.io.

\n

p.s. WebGPU is available on Firefox and Safari behind experimental feature flags!

\n\n
\n

Made by Todd Griffin

\n

Please submit feature requests and bug reports!

\n
\n `;\n document.body.appendChild(popUp);\n }\n\n private playThemeSong(): void {\n if (this.themeAudio !== null) {\n return;\n }\n\n this.themeAudio = this.audioManager.play(\"theme\", { loop: true });\n }\n\n private stopThemeSong(): void {\n if (this.themeAudio === null) {\n return;\n }\n\n this.themeAudio.then((audio: AudioControl) => {\n audio.stop();\n });\n this.themeAudio = null;\n }\n}\n", "import { Game } from \"./minesweeper-royale/game.ts\";\n\ndocument.addEventListener(\"DOMContentLoaded\", () => {\n new Game();\n});\n"], "mappings": "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", "names": ["Logger", "debug", "data", "serializedData", "item", "validate", "uuid", "hexTable", "i", "wasm", "heap", "getObject", "idx", "heap_next", "dropObject", "takeObject", "ret", "addHeapObject", "obj", "cachedTextDecoder", "cachedUint8Memory0", "getUint8Memory0", "getStringFromWasm0", "ptr", "len", "WASM_VECTOR_LEN", "cachedTextEncoder", "encodeString", "arg", "view", "passStringToWasm0", "malloc", "realloc", "buf", "mem", "offset", "code", "isLikeNone", "x", "cachedInt32Memory0", "getInt32Memory0", "getArrayU8FromWasm0", "digest", "algorithm", "data", "length", "retptr", "ptr0", "len0", "r0", "r1", "r2", "r3", "v2", "DigestContextFinalization", "DigestContext", "v1", "imports", "arg0", "arg1", "arg2", "instantiate", "instantiateWithInstance", "instanceWithExports", "instance", "instantiateInstance", "instantiateInstance", "wasmBytes", "base64decode", "wasmModule", "imports", "b64", "binString", "size", "bytes", "DIGEST_ALGORITHM_NAMES", "WEB_CRYPTO_DIGEST_ALGORITHM_NAMES", "webCrypto", "crypto", "toUint8Array", "data", "stdCrypto", "x", "algorithm", "name", "length", "normalizeAlgorithm", "assertValidDigestLength", "isBufferSource", "DIGEST_ALGORITHM_NAMES", "isIterable", "isAsyncIterable", "wasmCrypto", "instantiate", "context", "chunk", "chunkBytes", "bytes", "MAX_DIGEST_LENGTH", "value", "obj", "ByteReader", "data", "endian", "value", "low", "high", "length", "stringBytes", "uuidBytes", "hex", "byte", "uuid", "validate", "remaining", "ByteWriter", "endian", "value", "bytes", "_", "stringBytes", "uuid", "validate", "uuidBytes", "byte", "OutgoingPayloadType", "OutgoingPayloadSerializer", "payload", "byteWriter", "ByteWriter", "bytes", "byteReader", "ByteReader", "result", "payloadType", "IncomingPayloadType", "WinCondition", "IncomingPayloadSerializer", "payload", "byteWriter", "ByteWriter", "account", "playerOwnedTileUpdate", "tileUpdate", "player", "bytes", "byteReader", "ByteReader", "result", "payloadType", "gameId", "joinCode", "lobby", "lobbyLength", "i", "playerOwnedTileUpdates", "playerOwnedTileUpdatesLength", "playerId", "tileUpdates", "tileUpdatesLength", "j", "deadPlayers", "deadPlayersLength", "ApiClient", "debug", "ws", "Logger", "outgoingPayload", "bytes", "OutgoingPayloadSerializer", "clientTimeUnixMs", "username", "joinCode", "tileIndex", "event", "buffer", "incomingPayload", "IncomingPayloadSerializer", "lobby", "playerOwnedTileUpdate", "tileUpdate", "IncomingPayloadType", "PlayerState", "accountId", "username", "TileBuffer", "_TileBuffer", "width", "height", "index", "tileState", "playerOwnership", "value", "field", "GameState", "currentTimeLeftSeconds", "gameId", "lobby", "accountPayload", "PlayerState", "joinCode", "hostAccountId", "hostUsername", "accountId", "username", "player", "playerIndex", "width", "height", "maxDurationSeconds", "TileBuffer", "playerOwnedTileUpdates", "deadPlayers", "playerOwnedTileUpdate", "tileUpdate", "deadPlayer", "winner", "winCondition", "totalAlivePlayers", "totalTiles", "totalActivatedTiles", "totalPlayersModifiedTiles", "LS_USERNAME_KEY", "UserState", "accountId", "username", "AppState", "UserState", "GameState", "AudioManager", "debug", "soundBank", "Logger", "soundId", "sound", "arrayBuffer", "audioBuffer", "error", "options", "soundEffect", "buffer", "source", "gainNode", "volume", "ElementBuilder", "element", "id", "html", "classes", "key", "value", "children", "child", "type", "listener", "TextElementBuilder", "text", "DivBuilder", "ParagraphBuilder", "HeaderBuilder", "level", "AnchorBuilder", "href", "FormBuilder", "handler", "InputBuilder", "inputmode", "placeholder", "required", "minLength", "maxLength", "pattern", "autocomplete", "ButtonBuilder", "ImageBuilder", "src", "alt", "BrBuilder", "UI", "UIGetter", "id", "element", "ToastManager", "UIGetter", "message", "options", "id", "datetime", "colorClass", "element", "UI", "toast", "index", "m", "currentDatetime", "WebsocketWrapper", "debug", "url", "reconnectTimeoutMilliseconds", "Logger", "callback", "currentState", "payload", "event", "messageEvent", "closeEvent", "cache_buster_default", "UIPartial", "UI", "BaseScreen", "debug", "parentElement", "appState", "apiClient", "audioManager", "toastManager", "switchScreen", "name", "MainMenuScreen", "BaseScreen", "debug", "parentElement", "appState", "apiClient", "audioManager", "toastManager", "switchScreen", "UIGetter", "username", "UI", "UIPartial", "_event", "iUsername", "isCurrentlyEditingUsername", "event", "newUsername", "iJoinCode", "gameId", "lobby", "joinCode", "PrivateLobbyScreen", "BaseScreen", "debug", "parentElement", "appState", "apiClient", "audioManager", "toastManager", "switchScreen", "dLobby", "UIGetter", "player", "UI", "fStartGame", "UIPartial", "event", "gameId", "accountId", "username", "lobbyIsEmpty", "p", "width", "height", "maxDurationSeconds", "Renderer", "debug", "parentElement", "gridWidth", "gridHeight", "tileBuffer", "Logger", "dpi", "adapter", "gpuDescriptor", "info", "gpuCanvasContext", "shaderModule", "bindGroupLayout", "pipelineLayout", "vertexData", "cache_buster_default", "sampler", "commandEncoder", "renderPassDescriptor", "passEncoder", "uniforms", "url", "response", "imageBitmap", "texture", "worldWidth", "worldHeight", "maxX", "maxY", "newX", "newY", "keys", "event", "lastUpdateTime", "updateInterval", "move", "currentTime", "dx", "dy", "length", "canvasRect", "mouseX", "mouseY", "worldXBeforeZoom", "worldYBeforeZoom", "direction", "newTileSize", "zoomFactor", "newCameraWorldX", "newCameraWorldY", "mouseEvent", "tileIndex", "gridX", "gridY", "mouseWorldX", "mouseWorldY", "mouseOffsetX", "mouseOffsetY", "GameScreen", "BaseScreen", "debug", "parentElement", "appState", "apiClient", "audioManager", "toastManager", "switchScreen", "boardWidth", "boardHeight", "tileBuffer", "Renderer", "tileIndex", "lobby", "player", "accountPayload", "playerId", "timerPanel", "UIGetter", "currentTimeLeftSeconds", "UI", "cache_buster_default", "seconds", "minutes", "remainingSeconds", "gameId", "playerOwnedTileUpdates", "deadPlayers", "playerOwnedTileUpdate", "tileUpdate", "_deadPlayer", "accountId", "winner", "winCondition", "winnerUsername", "gameOverModal", "UIPartial", "WinCondition", "playerScores", "totalTiles", "totalTilesActivated", "boardPercentage", "globalScore", "sortedLobby", "a", "b", "playerTilesActivated", "playerBoardPercentage", "playerScore", "event", "ReconnectingScreen", "BaseScreen", "debug", "parentElement", "appState", "apiClient", "audioManager", "toastManager", "switchScreen", "UI", "UIPartial", "PublicLobbyScreen", "BaseScreen", "debug", "parentElement", "appState", "apiClient", "audioManager", "toastManager", "switchScreen", "dLobby", "UIGetter", "player", "UI", "UIPartial", "event", "gameId", "accountId", "username", "lobbyIsEmpty", "p", "width", "height", "maxDurationSeconds", "Game", "Logger", "AudioManager", "cache_buster_default", "UIGetter", "ToastManager", "AppState", "wsUrl", "WebsocketWrapper", "ApiClient", "clientTimeUnixMs", "playersOnline", "gamesInProgress", "ping", "originPayloadType", "message", "OutgoingPayloadType", "screen", "ReconnectingScreen", "MainMenuScreen", "PublicLobbyScreen", "PrivateLobbyScreen", "GameScreen", "accountId", "username", "LS_USERNAME_KEY", "popUp", "audio", "Game"] }