UNPKG

@soapbox.pub/wasmboy

Version:

Soapbox fork of Wasmboy.

468 lines (392 loc) 101 kB
(function () { 'use strict'; function getEventData(event) { if (event.data) { return event.data; } return event; } const isInBrowser = typeof self !== 'undefined'; // Function to read a base64 string as a buffer // Isomorphic worker api to be imported by web workers let parentPort; if (!isInBrowser) { parentPort = require('worker_threads').parentPort; } // https://nodejs.org/api/worker_threads.html#worker_threads_worker_postmessage_value_transferlist // https://developer.mozilla.org/en-US/docs/Web/API/Worker/postMessage function postMessage(message, transferArray) { // Can't bind parentPort.postMessage, so we need to kinda copy code here :p if (isInBrowser) { self.postMessage(message, transferArray); } else { parentPort.postMessage(message, transferArray); } } // https://nodejs.org/api/worker_threads.html#worker_threads_worker_parentport // https://developer.mozilla.org/en-US/docs/Web/API/Worker/onmessage function onMessage(callback, port) { if (!callback) { console.error('workerapi: No callback was provided to onMessage!'); } // If we passed a port, use that if (port) { if (isInBrowser) { // We are in the browser port.onmessage = callback; } else { // We are in Node port.on('message', callback); } return; } if (isInBrowser) { // We are in the browser self.onmessage = callback; } else { // We are in Node parentPort.on('message', callback); } } const WORKER_MESSAGE_TYPE = { CONNECT: 'CONNECT', INSTANTIATE_WASM: 'INSTANTIATE_WASM', CLEAR_MEMORY: 'CLEAR_MEMORY', CLEAR_MEMORY_DONE: 'CLEAR_MEMORY_DONE', GET_MEMORY: 'GET_MEMORY', SET_MEMORY: 'SET_MEMORY', SET_MEMORY_DONE: 'SET_MEMORY_DONE', GET_CONSTANTS: 'GET_CONSTANTS', GET_CONSTANTS_DONE: 'GET_CONSTANTS_DONE', CONFIG: 'CONFIG', RESET_AUDIO_QUEUE: 'RESET_AUDIO_QUEUE', PLAY: 'PLAY', BREAKPOINT: 'BREAKPOINT', PAUSE: 'PAUSE', UPDATED: 'UPDATED', CRASHED: 'CRASHED', SET_JOYPAD_STATE: 'SET_JOYPAD_STATE', AUDIO_LATENCY: 'AUDIO_LATENCY', RUN_WASM_EXPORT: 'RUN_WASM_EXPORT', GET_WASM_MEMORY_SECTION: 'GET_WASM_MEMORY_SECTION', GET_WASM_CONSTANT: 'GET_WASM_CONSTANT', FORCE_OUTPUT_FRAME: 'FORCE_OUTPUT_FRAME', SET_SPEED: 'SET_SPEED', IS_GBC: 'IS_GBC' }; const WORKER_ID = { LIB: 'LIB', GRAPHICS: 'GRAPHICS', MEMORY: 'MEMORY', CONTROLLER: 'CONTROLLER', AUDIO: 'AUDIO' }; const MEMORY_TYPE = { BOOT_ROM: 'BOOT_ROM', CARTRIDGE_RAM: 'CARTRIDGE_RAM', CARTRIDGE_ROM: 'CARTRIDGE_ROM', CARTRIDGE_HEADER: 'CARTRIDGE_HEADER', GAMEBOY_MEMORY: 'GAMEBOY_MEMORY', PALETTE_MEMORY: 'PALETTE_MEMORY', INTERNAL_STATE: 'INTERNAL_STATE' }; // Smarter workers. let idCounter = 0; const generateId = () => { const randomId = Math.random().toString(36).replace(/[^a-z]+/g, '').substr(2, 10); idCounter++; const id = `${randomId}-${idCounter}`; if (idCounter > 100000) { idCounter = 0; } return id; }; function getSmartWorkerMessage(message, messageId, workerId) { if (!messageId) { messageId = generateId(); } return { workerId, messageId, message }; } // to the lib worker function graphicsWorkerOnMessage(libWorker, event) { // Handle our messages from the main thread const eventData = getEventData(event); switch (eventData.message.type) { case WORKER_MESSAGE_TYPE.GET_CONSTANTS: { libWorker.WASMBOY_CURRENT_FRAME_OUTPUT_LOCATION = libWorker.wasmInstance.exports.FRAME_LOCATION.valueOf(); libWorker.WASMBOY_CURRENT_FRAME_SIZE = libWorker.wasmInstance.exports.FRAME_SIZE.valueOf(); // Forward to our lib worker libWorker.graphicsWorkerPort.postMessage(getSmartWorkerMessage({ type: WORKER_MESSAGE_TYPE.GET_CONSTANTS_DONE, WASMBOY_CURRENT_FRAME_OUTPUT_LOCATION: libWorker.wasmInstance.exports.FRAME_LOCATION.valueOf() }, eventData.messageId)); return; } } } function audioWorkerOnMessage(libWorker, event) { // Handle our messages from the main thread const eventData = getEventData(event); switch (eventData.message.type) { case WORKER_MESSAGE_TYPE.GET_CONSTANTS: { libWorker.WASMBOY_SOUND_OUTPUT_LOCATION = libWorker.wasmInstance.exports.AUDIO_BUFFER_LOCATION.valueOf(); libWorker.WASMBOY_CHANNEL_1_OUTPUT_LOCATION = libWorker.wasmInstance.exports.CHANNEL_1_BUFFER_LOCATION.valueOf(); libWorker.WASMBOY_CHANNEL_2_OUTPUT_LOCATION = libWorker.wasmInstance.exports.CHANNEL_2_BUFFER_LOCATION.valueOf(); libWorker.WASMBOY_CHANNEL_3_OUTPUT_LOCATION = libWorker.wasmInstance.exports.CHANNEL_3_BUFFER_LOCATION.valueOf(); libWorker.WASMBOY_CHANNEL_4_OUTPUT_LOCATION = libWorker.wasmInstance.exports.CHANNEL_4_BUFFER_LOCATION.valueOf(); // Forward to our lib worker libWorker.audioWorkerPort.postMessage(getSmartWorkerMessage({ type: WORKER_MESSAGE_TYPE.GET_CONSTANTS_DONE, WASMBOY_SOUND_OUTPUT_LOCATION: libWorker.wasmInstance.exports.AUDIO_BUFFER_LOCATION.valueOf() }, eventData.messageId)); return; } case WORKER_MESSAGE_TYPE.AUDIO_LATENCY: { libWorker.currentAudioLatencyInSeconds = eventData.message.latency; return; } } } function controllerWorkerOnMessage(libWorker, event) { // Handle our messages from the main thread const eventData = getEventData(event); switch (eventData.message.type) { case WORKER_MESSAGE_TYPE.SET_JOYPAD_STATE: { // Config will come in as an array, pass in values using apply // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/apply const setJoypadStateParamsAsArray = eventData.message.setJoypadStateParamsAsArray; libWorker.wasmInstance.exports.setJoypadState.apply(libWorker, setJoypadStateParamsAsArray); return; } } } // Function to get the boot ROM function getBootRom(libWorker) { if (!libWorker.wasmByteMemory) { return new Uint8Array(); } // Header is at 0x0134 - 0x014F // http://gbdev.gg8.se/wiki/articles/The_Cartridge_Header const bootRomLocation = libWorker.wasmInstance.exports.BOOT_ROM_LOCATION.valueOf(); const bootRomSize = libWorker.wasmInstance.exports.BOOT_ROM_SIZE.valueOf(); const bootRom = libWorker.wasmByteMemory.slice(bootRomLocation, bootRomLocation + bootRomSize); return bootRom; } // Private function to get the caretridge rom function getCartridgeRom(libWorker) { if (!libWorker.wasmByteMemory) { return new Uint8Array(); } // Depening on the rom type, we will have different rom sizes. // Due memory restrictions described in: // https://developers.google.com/web/fundamentals/instant-and-offline/web-storage/offline-for-pwa // We will make sure to only store as much as we need per ROM :) // Similar to `initializeCartridgeType()` in `wasm/memory/memory.ts` // We will determine our cartridge type // Get our game MBC type from the cartridge header // http://gbdev.gg8.se/wiki/articles/The_Cartridge_Header let cartridgeType = libWorker.wasmByteMemory[libWorker.WASMBOY_GAME_BYTES_LOCATION + 0x0147]; let romSize = undefined; if (cartridgeType === 0x00) { // ROM only, 32KB romSize = 0x8000; } else if (cartridgeType >= 0x01 && cartridgeType <= 0x03) { // MBC1 2MB of ROM romSize = 0x200000; } else if (cartridgeType >= 0x05 && cartridgeType <= 0x06) { // MBC2 256KB ROM romSize = 0x40000; } else if (cartridgeType >= 0x0f && cartridgeType <= 0x13) { // MBC3 2MB of ROM romSize = 0x200000; } else if (cartridgeType >= 0x19 && cartridgeType <= 0x1e) { // MBC5 8MB of ROM romSize = 0x800000; } if (!romSize) { return new Uint8Array(); } // Finally fill our cartridgeRam from the ram in memory const cartridgeRom = libWorker.wasmByteMemory.slice(libWorker.WASMBOY_GAME_BYTES_LOCATION, libWorker.WASMBOY_GAME_BYTES_LOCATION + romSize); return cartridgeRom; } // Private function to get the cartridge ram function getCartridgeRam(libWorker) { if (!libWorker.wasmByteMemory) { return new Uint8Array(); } // Depening on the rom type, we will have different ram sizes. // Due memory restrictions described in: // https://developers.google.com/web/fundamentals/instant-and-offline/web-storage/offline-for-pwa // We will make sure to only store as much as we need per ROM :) // Similar to `initializeCartridgeType()` in `wasm/memory/memory.ts` // We will determine our cartridge type // Get our game MBC type from the cartridge header // http://gbdev.gg8.se/wiki/articles/The_Cartridge_Header let cartridgeType = libWorker.wasmByteMemory[libWorker.WASMBOY_GAME_BYTES_LOCATION + 0x0147]; let ramSize = undefined; if (cartridgeType === 0x00) { // No memory for this rom type return new Uint8Array(); } else if (cartridgeType >= 0x01 && cartridgeType <= 0x03) { // MBC1 32KB of Ram ramSize = 0x8000; } else if (cartridgeType >= 0x05 && cartridgeType <= 0x06) { // MBC2 512X4 Bytes, 2KB ramSize = 0x800; } else if (cartridgeType >= 0x0f && cartridgeType <= 0x13) { // MBC3 32KB of Ram ramSize = 0x8000; } else if (cartridgeType >= 0x19 && cartridgeType <= 0x1e) { // MBC5 128KB of Ram ramSize = 0x20000; } if (!ramSize) { return new Uint8Array(); } // Finally fill our cartridgeRam from the ram in memory const cartridgeRam = libWorker.wasmByteMemory.slice(libWorker.WASMBOY_GAME_RAM_BANKS_LOCATION, libWorker.WASMBOY_GAME_RAM_BANKS_LOCATION + ramSize); return cartridgeRam; } // Function to get the cartridge header function getCartridgeHeader(libWorker) { if (!libWorker.wasmByteMemory) { return new Uint8Array(); } // Header is at 0x0134 - 0x014F // http://gbdev.gg8.se/wiki/articles/The_Cartridge_Header const headerLength = 0x014f - 0x0134; const headerLocation = libWorker.WASMBOY_GAME_BYTES_LOCATION + 0x0134; const headerArray = libWorker.wasmByteMemory.slice(headerLocation, headerLocation + headerLength); return headerArray; } // Returns the standard 0xFFFF gameboy memory // You will normally see in gameboy docs. // This is returned from the core, and represents // This wasmboy gameboy state function getGameBoyMemory(libWorker) { return libWorker.wasmByteMemory.slice(libWorker.WASMBOY_INTERNAL_MEMORY_LOCATION, libWorker.WASMBOY_INTERNAL_MEMORY_LOCATION + libWorker.WASMBOY_INTERNAL_MEMORY_SIZE); } // Function to get the current palette data for // GBC in memory. This is needed to load state with // The correct colors function getPaletteMemory(libWorker) { return libWorker.wasmByteMemory.slice(libWorker.WASMBOY_PALETTE_MEMORY_LOCATION, libWorker.WASMBOY_PALETTE_MEMORY_LOCATION + libWorker.WASMBOY_PALETTE_MEMORY_SIZE); } // Returns the internal savestate of the wasmboy core, // To save all soft values held in memory function getInternalState(libWorker) { libWorker.wasmInstance.exports.saveState(); return libWorker.wasmByteMemory.slice(libWorker.WASMBOY_INTERNAL_STATE_LOCATION, libWorker.WASMBOY_INTERNAL_STATE_LOCATION + libWorker.WASMBOY_INTERNAL_STATE_SIZE); } // posts to lib Worker function memoryWorkerOnMessage(libWorker, event) { // Handle our messages from the main thread const eventData = getEventData(event); switch (eventData.message.type) { case WORKER_MESSAGE_TYPE.CLEAR_MEMORY: { // Clear Wasm memory // https://docs.google.com/spreadsheets/d/17xrEzJk5-sCB9J2mMJcVnzhbE-XH_NvczVSQH9OHvRk/edit?usp=sharing for (let i = 0; i <= libWorker.wasmByteMemory.length; i++) { libWorker.wasmByteMemory[i] = 0; } const wasmByteMemory = libWorker.wasmByteMemory.slice(0); libWorker.memoryWorkerPort.postMessage(getSmartWorkerMessage({ type: WORKER_MESSAGE_TYPE.CLEAR_MEMORY_DONE, wasmByteMemory: wasmByteMemory.buffer }, eventData.messageId), [wasmByteMemory.buffer]); return; } case WORKER_MESSAGE_TYPE.GET_CONSTANTS: { libWorker.WASMBOY_BOOT_ROM_LOCATION = libWorker.wasmInstance.exports.BOOT_ROM_LOCATION.valueOf(); libWorker.WASMBOY_GAME_BYTES_LOCATION = libWorker.wasmInstance.exports.CARTRIDGE_ROM_LOCATION.valueOf(); libWorker.WASMBOY_GAME_RAM_BANKS_LOCATION = libWorker.wasmInstance.exports.CARTRIDGE_RAM_LOCATION.valueOf(), libWorker.WASMBOY_INTERNAL_STATE_SIZE = libWorker.wasmInstance.exports.WASMBOY_STATE_SIZE.valueOf(), libWorker.WASMBOY_INTERNAL_STATE_LOCATION = libWorker.wasmInstance.exports.WASMBOY_STATE_LOCATION.valueOf(), libWorker.WASMBOY_INTERNAL_MEMORY_SIZE = libWorker.wasmInstance.exports.GAMEBOY_INTERNAL_MEMORY_SIZE.valueOf(), libWorker.WASMBOY_INTERNAL_MEMORY_LOCATION = libWorker.wasmInstance.exports.GAMEBOY_INTERNAL_MEMORY_LOCATION.valueOf(), libWorker.WASMBOY_PALETTE_MEMORY_SIZE = libWorker.wasmInstance.exports.GBC_PALETTE_SIZE.valueOf(), libWorker.WASMBOY_PALETTE_MEMORY_LOCATION = libWorker.wasmInstance.exports.GBC_PALETTE_LOCATION.valueOf(); // Forward to our lib worker libWorker.memoryWorkerPort.postMessage(getSmartWorkerMessage({ type: WORKER_MESSAGE_TYPE.GET_CONSTANTS_DONE, WASMBOY_BOOT_ROM_LOCATION: libWorker.wasmInstance.exports.BOOT_ROM_LOCATION.valueOf(), WASMBOY_GAME_BYTES_LOCATION: libWorker.wasmInstance.exports.CARTRIDGE_ROM_LOCATION.valueOf(), WASMBOY_GAME_RAM_BANKS_LOCATION: libWorker.wasmInstance.exports.CARTRIDGE_RAM_LOCATION.valueOf(), WASMBOY_INTERNAL_STATE_SIZE: libWorker.wasmInstance.exports.WASMBOY_STATE_SIZE.valueOf(), WASMBOY_INTERNAL_STATE_LOCATION: libWorker.wasmInstance.exports.WASMBOY_STATE_LOCATION.valueOf(), WASMBOY_INTERNAL_MEMORY_SIZE: libWorker.wasmInstance.exports.GAMEBOY_INTERNAL_MEMORY_SIZE.valueOf(), WASMBOY_INTERNAL_MEMORY_LOCATION: libWorker.wasmInstance.exports.GAMEBOY_INTERNAL_MEMORY_LOCATION.valueOf(), WASMBOY_PALETTE_MEMORY_SIZE: libWorker.wasmInstance.exports.GBC_PALETTE_SIZE.valueOf(), WASMBOY_PALETTE_MEMORY_LOCATION: libWorker.wasmInstance.exports.GBC_PALETTE_LOCATION.valueOf() }, eventData.messageId)); return; } case WORKER_MESSAGE_TYPE.SET_MEMORY: { const memoryKeys = Object.keys(eventData.message); if (memoryKeys.includes(MEMORY_TYPE.BOOT_ROM)) { libWorker.wasmByteMemory.set(new Uint8Array(eventData.message[MEMORY_TYPE.BOOT_ROM]), libWorker.WASMBOY_BOOT_ROM_LOCATION); } if (memoryKeys.includes(MEMORY_TYPE.CARTRIDGE_ROM)) { libWorker.wasmByteMemory.set(new Uint8Array(eventData.message[MEMORY_TYPE.CARTRIDGE_ROM]), libWorker.WASMBOY_GAME_BYTES_LOCATION); } if (memoryKeys.includes(MEMORY_TYPE.CARTRIDGE_RAM)) { libWorker.wasmByteMemory.set(new Uint8Array(eventData.message[MEMORY_TYPE.CARTRIDGE_RAM]), libWorker.WASMBOY_GAME_RAM_BANKS_LOCATION); } if (memoryKeys.includes(MEMORY_TYPE.GAMEBOY_MEMORY)) { libWorker.wasmByteMemory.set(new Uint8Array(eventData.message[MEMORY_TYPE.GAMEBOY_MEMORY]), libWorker.WASMBOY_INTERNAL_MEMORY_LOCATION); } if (memoryKeys.includes(MEMORY_TYPE.PALETTE_MEMORY)) { libWorker.wasmByteMemory.set(new Uint8Array(eventData.message[MEMORY_TYPE.PALETTE_MEMORY]), libWorker.WASMBOY_PALETTE_MEMORY_LOCATION); } if (memoryKeys.includes(MEMORY_TYPE.INTERNAL_STATE)) { libWorker.wasmByteMemory.set(new Uint8Array(eventData.message[MEMORY_TYPE.INTERNAL_STATE]), libWorker.WASMBOY_INTERNAL_STATE_LOCATION); libWorker.wasmInstance.exports.loadState(); } libWorker.memoryWorkerPort.postMessage(getSmartWorkerMessage({ type: WORKER_MESSAGE_TYPE.SET_MEMORY_DONE }, eventData.messageId)); return; } case WORKER_MESSAGE_TYPE.GET_MEMORY: { // Construct our data object const responseMemory = { type: WORKER_MESSAGE_TYPE.GET_MEMORY }; const responseTransferrables = []; const memoryTypes = eventData.message.memoryTypes; if (memoryTypes.includes(MEMORY_TYPE.BOOT_ROM)) { const bootRom = getBootRom(libWorker).buffer; responseMemory[MEMORY_TYPE.BOOT_ROM] = bootRom; responseTransferrables.push(bootRom); } if (memoryTypes.includes(MEMORY_TYPE.CARTRIDGE_ROM)) { const cartridgeRom = getCartridgeRom(libWorker).buffer; responseMemory[MEMORY_TYPE.CARTRIDGE_ROM] = cartridgeRom; responseTransferrables.push(cartridgeRom); } if (memoryTypes.includes(MEMORY_TYPE.CARTRIDGE_RAM)) { const cartridgeRam = getCartridgeRam(libWorker).buffer; responseMemory[MEMORY_TYPE.CARTRIDGE_RAM] = cartridgeRam; responseTransferrables.push(cartridgeRam); } if (memoryTypes.includes(MEMORY_TYPE.CARTRIDGE_HEADER)) { const cartridgeHeader = getCartridgeHeader(libWorker).buffer; responseMemory[MEMORY_TYPE.CARTRIDGE_HEADER] = cartridgeHeader; responseTransferrables.push(cartridgeHeader); } if (memoryTypes.includes(MEMORY_TYPE.GAMEBOY_MEMORY)) { const gameboyMemory = getGameBoyMemory(libWorker).buffer; responseMemory[MEMORY_TYPE.GAMEBOY_MEMORY] = gameboyMemory; responseTransferrables.push(gameboyMemory); } if (memoryTypes.includes(MEMORY_TYPE.PALETTE_MEMORY)) { const paletteMemory = getPaletteMemory(libWorker).buffer; responseMemory[MEMORY_TYPE.PALETTE_MEMORY] = paletteMemory; responseTransferrables.push(paletteMemory); } if (memoryTypes.includes(MEMORY_TYPE.INTERNAL_STATE)) { libWorker.wasmInstance.exports.saveState(); const internalState = getInternalState(libWorker).buffer; responseMemory[MEMORY_TYPE.INTERNAL_STATE] = internalState; responseTransferrables.push(internalState); } libWorker.memoryWorkerPort.postMessage(getSmartWorkerMessage(responseMemory, eventData.messageId), responseTransferrables); return; } } } var wasmModuleUrl = "data:application/wasm;base64,AGFzbQEAAAABfRBgAAF/YAF/AX9gAX8AYAAAYAJ/fwF/YAJ/fwBgA39/fwBgBn9/f39/fwBgBH9/f38AYAd/f39/f39/AGAIf39/f39/f38AYAp/f39/f39/f39/AGADf39/AX9gBH9/f38Bf2AFf39/f38Bf2ANf39/f39/f39/f39/fwF/Ag0BA2VudgVhYm9ydAAIA5YBlAEFBQYABAYMBAECAQMCAgMDAwsAAwMDAwMDAwMAAAAADgQPCQcHBQICAwEBAQEBDQICAwEAAQEFAwICAgIEAgICAgQFBgQDAgICAAUGAQEBAQEBAQECAgECAgEBAgEBAQEBAQEBAgAAAAEAAQAAAAIKAgMCAwIDAAAAAAAAAAAAAAAAAAAAAAIDAwAAAAADAwMCAQQCBQMBAAEG3guYAn8BQQALfwFBAAt/AEEAC38AQYAIC38AQYAIC38AQYAIC38AQYAQC38AQYCAAQt/AEGAkAELfwBBgIACC38AQYCQAwt/AEGAgAELfwBBgBALfwBBgIAEC38AQYCQBAt/AEGAAQt/AEGAkQQLfwBBgLgBC38AQYDJBQt/AEGA2AULfwBBgKELC38AQYCADAt/AEGAoRcLfwBBgIAJC38AQYChIAt/AEGA+AALfwBBgJAEC38AQYCJHQt/AEGAmSELfwBBgIAIC38AQYCZKQt/AEGAgAgLfwBBgJkxC38AQYCACAt/AEGAmTkLfwBBgIAIC38AQYCZwQALfwBBgIAIC38AQYCZyQALfwBBgIAIC38AQYCZ0QALfwBBgBQLfwBBgK3RAAt/AEGAiPgDC38AQYC1yQQLfwBB//8DC38AQQALfwBBgLXNBAt/AEGUAQt/AUEAC38BQQELfwFBAAt/AUEAC38BQQALfwFBAAt/AUEAC38BQQALfwFBAAt/AUEAC38BQQALfwFBAAt/AUEAC38BQQALfwFBAAt/AUEAC38BQQALfwFBAAt/AUEAC38BQQALfwFBAAt/AUEAC38BQX8LfwFBfwt/AUEAC38BQQALfwFBAAt/AUEAC38BQQALfwFBAAt/AUEAC38BQQALfwFBAAt/AUEAC38BQQALfwFBAAt/AUEAC38BQQALfwFBAAt/AUEAC38BQQALfwFBAAt/AUEAC38BQQALfwFBAAt/AUEAC38BQQALfwFBAAt/AUEAC38BQQALfwFBAAt/AUEAC38BQQALfwFBAAt/AUEAC38BQQALfwFBAAt/AUEAC38BQQALfwFBAAt/AUEAC38BQQALfwFBAAt/AUEAC38BQQALfwFBAAt/AUEAC38BQQALfwFBAAt/AUEAC38BQQALfwFBAAt/AUEAC38BQQALfwFBAAt/AUEAC38BQQALfwFBAAt/AUEAC38BQQALfwFBAAt/AUEAC38BQQALfwFBAAt/AUEAC38BQQALfwFBAAt/AUEAC38BQQALfwFBAAt/AUEAC38BQQALfwFBAAt/AUEAC38BQQALfwFBAAt/AUEAC38BQQALfwFBAAt/AUEAC38BQQALfwFBAAt/AUEPC38BQQ8LfwFBDwt/AUEPC38BQQALfwFBAAt/AUEAC38BQQALfwFB/wALfwFB/wALfwFBAAt/AUEAC38BQQALfwFBAAt/AUEAC38BQQALfwFBAQt/AUEBC38BQQELfwFBAQt/AUEBC38BQQELfwFBAQt/AUEBC38BQQELfwFBAAt/AUEAC38BQQALfwFBAAt/AUEAC38BQQALfwFBAAt/AUEAC38BQQALfwFBAAt/AUEAC38BQQALfwFBAAt/AUEAC38BQQALfwFBAAt/AUEAC38BQQALfwFBAAt/AUEAC38BQQALfwFBAAt/AUEAC38BQQALfwFBAAt/AUEAC38BQQALfwFBAAt/AUEAC38BQQALfwFBAAt/AUEAC38BQQALfwFBAAt/AUEAC38BQQALfwFBAAt/AUEAC38BQQALfwFBAAt/AUEAC38BQQALfwFBfwt/AUF/C38BQX8LfwFBAAt/AUEAC38BQQALfwFBAQt/AUEAC38BQQALfwFBAAt/AUEAC38BQQALfwFBAAt/AUEAC38BQQALfwFBAAt/AUEAC38BQQALfwFBAAt/AUEAC38BQQALfwFBAAt/AUEAC38BQQALfwFBAQt/AUEBC38BQQALfwFBAAt/AUEAC38BQQALfwFBAAt/AUEAC38BQQALfwFBAAt/AUEAC38BQQALfwFBAAt/AUEAC38BQQALfwFBAAt/AUEAC38BQQALfwFBAAt/AUEAC38BQQALfwFBAAt/AUEAC38BQQALfwFBAAt/AUEAC38BQQALfwFBAAt/AUEAC38BQYCo1rkHC38BQQALfwFBAAt/AUGAqNa5Bwt/AUEAC38BQQALfwFBAAt/AEGgCQt/AUEACwedEWkGbWVtb3J5AgAHX19hbGxvYwAICF9fcmV0YWluAAkJX19yZWxlYXNlAAoJX19jb2xsZWN0AJABC19fcnR0aV9iYXNlA5YCBmNvbmZpZwASDmhhc0NvcmVTdGFydGVkABMJc2F2ZVN0YXRlABYJbG9hZFN0YXRlABsFaXNHQkMAHBJnZXRTdGVwc1BlclN0ZXBTZXQAHQtnZXRTdGVwU2V0cwAeCGdldFN0ZXBzAB8VZXhlY3V0ZU11bHRpcGxlRnJhbWVzAGsMZXhlY3V0ZUZyYW1lAGoZZXhlY3V0ZUZyYW1lQW5kQ2hlY2tBdWRpbwCSARVleGVjdXRlVW50aWxDb25kaXRpb24AkwELZXhlY3V0ZVN0ZXAAZxRnZXRDeWNsZXNQZXJDeWNsZVNldABsDGdldEN5Y2xlU2V0cwBtCWdldEN5Y2xlcwBuDnNldEpveXBhZFN0YXRlAHAfZ2V0TnVtYmVyT2ZTYW1wbGVzSW5BdWRpb0J1ZmZlcgBoEGNsZWFyQXVkaW9CdWZmZXIAFxxzZXRNYW51YWxDb2xvcml6YXRpb25QYWxldHRlAA0XV0FTTUJPWV9NRU1PUllfTE9DQVRJT04DLhNXQVNNQk9ZX01FTU9SWV9TSVpFAy8SV0FTTUJPWV9XQVNNX1BBR0VTAzAeQVNTRU1CTFlTQ1JJUFRfTUVNT1JZX0xPQ0FUSU9OAwIaQVNTRU1CTFlTQ1JJUFRfTUVNT1JZX1NJWkUDAxZXQVNNQk9ZX1NUQVRFX0xPQ0FUSU9OAwQSV0FTTUJPWV9TVEFURV9TSVpFAwUgR0FNRUJPWV9JTlRFUk5BTF9NRU1PUllfTE9DQVRJT04DDBxHQU1FQk9ZX0lOVEVSTkFMX01FTU9SWV9TSVpFAw0SVklERU9fUkFNX0xPQ0FUSU9OAwYOVklERU9fUkFNX1NJWkUDBxFXT1JLX1JBTV9MT0NBVElPTgMIDVdPUktfUkFNX1NJWkUDCSZPVEhFUl9HQU1FQk9ZX0lOVEVSTkFMX01FTU9SWV9MT0NBVElPTgMKIk9USEVSX0dBTUVCT1lfSU5URVJOQUxfTUVNT1JZX1NJWkUDCxhHUkFQSElDU19PVVRQVVRfTE9DQVRJT04DGhRHUkFQSElDU19PVVRQVVRfU0laRQMbFEdCQ19QQUxFVFRFX0xPQ0FUSU9OAw4QR0JDX1BBTEVUVEVfU0laRQMPGEJHX1BSSU9SSVRZX01BUF9MT0NBVElPTgMQFEJHX1BSSU9SSVRZX01BUF9TSVpFAxEORlJBTUVfTE9DQVRJT04DEgpGUkFNRV9TSVpFAxMXQkFDS0dST1VORF9NQVBfTE9DQVRJT04DFBNCQUNLR1JPVU5EX01BUF9TSVpFAxUSVElMRV9EQVRBX0xPQ0FUSU9OAxYOVElMRV9EQVRBX1NJWkUDFxJPQU1fVElMRVNfTE9DQVRJT04DGA5PQU1fVElMRVNfU0laRQMZFUFVRElPX0JVRkZFUl9MT0NBVElPTgMkEUFVRElPX0JVRkZFUl9TSVpFAyUZQ0hBTk5FTF8xX0JVRkZFUl9MT0NBVElPTgMcFUNIQU5ORUxfMV9CVUZGRVJfU0laRQMdGUNIQU5ORUxfMl9CVUZGRVJfTE9DQVRJT04DHhVDSEFOTkVMXzJfQlVGRkVSX1NJWkUDHxlDSEFOTkVMXzNfQlVGRkVSX0xPQ0FUSU9OAyAVQ0hBTk5FTF8zX0JVRkZFUl9TSVpFAyEZQ0hBTk5FTF80X0JVRkZFUl9MT0NBVElPTgMiFUNIQU5ORUxfNF9CVUZGRVJfU0laRQMjFkNBUlRSSURHRV9SQU1fTE9DQVRJT04DJhJDQVJUUklER0VfUkFNX1NJWkUDJxFCT09UX1JPTV9MT0NBVElPTgMoDUJPT1RfUk9NX1NJWkUDKRZDQVJUUklER0VfUk9NX0xPQ0FUSU9OAyoSQ0FSVFJJREdFX1JPTV9TSVpFAysdREVCVUdfR0FNRUJPWV9NRU1PUllfTE9DQVRJT04DLBlERUJVR19HQU1FQk9ZX01FTU9SWV9TSVpFAy0hZ2V0V2FzbUJveU9mZnNldEZyb21HYW1lQm95T2Zmc2V0AAsbc2V0UHJvZ3JhbUNvdW50ZXJCcmVha3BvaW50AHEdcmVzZXRQcm9ncmFtQ291bnRlckJyZWFrcG9pbnQAchlzZXRSZWFkR2JNZW1vcnlCcmVha3BvaW50AHMbcmVzZXRSZWFkR2JNZW1vcnlCcmVha3BvaW50AHQac2V0V3JpdGVHYk1lbW9yeUJyZWFrcG9pbnQAdRxyZXNldFdyaXRlR2JNZW1vcnlCcmVha3BvaW50AHYMZ2V0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AAAkvAFBhQktAABBAEskvQFBhgktAABBAEskvgFBhwktAABBAEskvwFBiAktAABBAEskwAFBiQktAABBAEskwQFBlgkoAgAk1wFBlwktAABBAEsk2AFBmAktAABBAEsk2QFByAkvAQAk7wFBygkvAQAk8AFBzAktAABBAEsk8QFBzQktAABBAEsk8gFBzgktAABBAEsk8wFBzwktAABBAEsk9AFB0AktAABBAEsk9QFB0QktAABBAEsk9gFB0gktAABBAEsk9wFB0wkoAgAk+AFB1wktAABBAEsk+QFB2AkoAgAk+gFB3AkoAgAk+wFB4AkoAgAk/AFB+gkoAgAkwgFB/gkoAgAkwwFBggooAgAkxAFBhgotAABBAEskxQFBhwotAABBAEskxgFBiAooAgAkxwFBjAooAgAkyAFBkAotAABBAEskyQFBkQooAgAkygEQGBAZEBojdkEybEGACGooAgAkdkHKCy8BACR3QcwLLQAAJHhBzgstAAAkeUHPCy0AAEEASyR6QdALLQAAJHtB0QstAABBAEskfEHSCy0AAEEASyR9QdMLKAIAJH5B1wsoAgAkf0HbCygCACSAAUHjCygCACSBAUHnCygCACSCAUHoCy0AAEEASySDAUHpCygCACSEASOFAUEybEGACGooAgAkhQFB+AstAAAkhgFB+gstAAAkhwFB+wstAABBAEskiAFB/AstAAAkiQFB/QstAAAkigFB/gstAABBAEskiwFB/wstAAAkjAFBgQwtAABBAEskjQFBgwwtAABBAEskjgFBhAwtAABBAEskjwFBiQwoAgAkkAFBjQwoAgAkkQFBkQwtAABBAEskkgFBkgwoAgAkkwFBlgwoAgAklAFBmgwvAQAklgFBACSVAkGAqNa5BySPAkEAJJACQQAkkQJBgKjWuQckkgJBACSTAkEAJJQCCwUAI/4BCwUAI5ICCwUAI5MCCwUAI5QCC54CAQd/IAAjSCIHRkEAIAQjR0ZBACAAQQhKQQAgAUEAShsbGwRAIANBAWsQCy0AAEEgcUEARyEIIAMQCy0AAEEgcUEARyEJA0AgBkEISARAIABBByAGayAGIAggCUcbIgRqIgNBoAFMBEACfyADIAFBoAFsIgpqIgtBA2wiBkGAyQVqIgMgAy0AADoAACAGQYHJBWogAy0AAToAACAGQYLJBWogAy0A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