@liveblocks/react 0.9.0 → 0.12.0-beta.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/index.d.ts +22 -41
- package/lib/index.js +154 -1462
- package/lib/index.js.map +1 -1
- package/package.json +2 -4
package/lib/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../node_modules/@liveblocks/client/lib/esm/live.js","../node_modules/@liveblocks/client/lib/esm/position.js","../node_modules/@liveblocks/client/lib/esm/doc.js","../node_modules/@liveblocks/client/lib/esm/types.js","../node_modules/@liveblocks/client/lib/esm/utils.js","../node_modules/@liveblocks/client/lib/esm/authentication.js","../node_modules/@liveblocks/client/lib/esm/room.js","../node_modules/@liveblocks/client/lib/esm/client.js","../src/index.tsx"],"sourcesContent":["export var ServerMessageType;\n(function (ServerMessageType) {\n ServerMessageType[ServerMessageType[\"UpdatePresence\"] = 100] = \"UpdatePresence\";\n ServerMessageType[ServerMessageType[\"UserJoined\"] = 101] = \"UserJoined\";\n ServerMessageType[ServerMessageType[\"UserLeft\"] = 102] = \"UserLeft\";\n ServerMessageType[ServerMessageType[\"Event\"] = 103] = \"Event\";\n ServerMessageType[ServerMessageType[\"RoomState\"] = 104] = \"RoomState\";\n ServerMessageType[ServerMessageType[\"InitialStorageState\"] = 200] = \"InitialStorageState\";\n ServerMessageType[ServerMessageType[\"UpdateStorage\"] = 201] = \"UpdateStorage\";\n})(ServerMessageType || (ServerMessageType = {}));\nexport var ClientMessageType;\n(function (ClientMessageType) {\n ClientMessageType[ClientMessageType[\"UpdatePresence\"] = 100] = \"UpdatePresence\";\n ClientMessageType[ClientMessageType[\"ClientEvent\"] = 103] = \"ClientEvent\";\n ClientMessageType[ClientMessageType[\"FetchStorage\"] = 200] = \"FetchStorage\";\n ClientMessageType[ClientMessageType[\"UpdateStorage\"] = 201] = \"UpdateStorage\";\n})(ClientMessageType || (ClientMessageType = {}));\nexport var CrdtType;\n(function (CrdtType) {\n CrdtType[CrdtType[\"Record\"] = 0] = \"Record\";\n CrdtType[CrdtType[\"List\"] = 1] = \"List\";\n CrdtType[CrdtType[\"Register\"] = 2] = \"Register\";\n})(CrdtType || (CrdtType = {}));\nexport var OpType;\n(function (OpType) {\n OpType[OpType[\"Init\"] = 100] = \"Init\";\n OpType[OpType[\"ListInsert\"] = 200] = \"ListInsert\";\n OpType[OpType[\"ListMove\"] = 201] = \"ListMove\";\n OpType[OpType[\"ListRemove\"] = 202] = \"ListRemove\";\n OpType[OpType[\"RecordUpdate\"] = 300] = \"RecordUpdate\";\n})(OpType || (OpType = {}));\nexport var WebsocketCloseCodes;\n(function (WebsocketCloseCodes) {\n WebsocketCloseCodes[WebsocketCloseCodes[\"CLOSE_ABNORMAL\"] = 1006] = \"CLOSE_ABNORMAL\";\n WebsocketCloseCodes[WebsocketCloseCodes[\"INVALID_MESSAGE_FORMAT\"] = 4000] = \"INVALID_MESSAGE_FORMAT\";\n WebsocketCloseCodes[WebsocketCloseCodes[\"NOT_ALLOWED\"] = 4001] = \"NOT_ALLOWED\";\n WebsocketCloseCodes[WebsocketCloseCodes[\"MAX_NUMBER_OF_MESSAGES_PER_SECONDS\"] = 4002] = \"MAX_NUMBER_OF_MESSAGES_PER_SECONDS\";\n WebsocketCloseCodes[WebsocketCloseCodes[\"MAX_NUMBER_OF_CONCURRENT_CONNECTIONS\"] = 4003] = \"MAX_NUMBER_OF_CONCURRENT_CONNECTIONS\";\n WebsocketCloseCodes[WebsocketCloseCodes[\"MAX_NUMBER_OF_MESSAGES_PER_DAY_PER_APP\"] = 4004] = \"MAX_NUMBER_OF_MESSAGES_PER_DAY_PER_APP\";\n WebsocketCloseCodes[WebsocketCloseCodes[\"MAX_NUMBER_OF_CONCURRENT_CONNECTIONS_PER_ROOM\"] = 4005] = \"MAX_NUMBER_OF_CONCURRENT_CONNECTIONS_PER_ROOM\";\n})(WebsocketCloseCodes || (WebsocketCloseCodes = {}));\n","export const min = 32;\nexport const max = 127;\nexport const mid = 79;\nexport function middle(a, b) {\n return (a + b) / 2;\n}\nexport function makePosition(before, after) {\n // No children\n if (before == null && after == null) {\n return pos([min + 1]);\n }\n // Insert at the end\n if (before != null && after == null) {\n return getNextPosition(before);\n }\n // Insert at the start\n if (before == null && after != null) {\n return getPreviousPosition(after);\n }\n return pos(makePositionFromCodes(posCodes(before), posCodes(after)));\n}\nfunction getPreviousPosition(after) {\n const result = [];\n const afterCodes = posCodes(after);\n for (let i = 0; i < afterCodes.length; i++) {\n const code = afterCodes[i];\n if (code <= min + 1) {\n result.push(min);\n if (afterCodes.length - 1 === i) {\n result.push(max - 1);\n break;\n }\n }\n else {\n result.push(code - 1);\n break;\n }\n }\n return pos(result);\n}\nfunction getNextPosition(before) {\n const result = [];\n const beforeCodes = posCodes(before);\n for (let i = 0; i < beforeCodes.length; i++) {\n const code = beforeCodes[i];\n if (code === max - 1) {\n result.push(code);\n if (beforeCodes.length - 1 === i) {\n result.push(min + 1);\n break;\n }\n }\n else {\n result.push(code + 1);\n break;\n }\n }\n return pos(result);\n}\nfunction makePositionFromCodes(before, after) {\n let index = 0;\n const result = [];\n while (true) {\n const beforeDigit = before[index] || min;\n const afterDigit = after[index] || max;\n if (beforeDigit > afterDigit) {\n throw new Error(`Impossible to generate position between ${before} and ${after}`);\n }\n if (beforeDigit === afterDigit) {\n result.push(beforeDigit);\n index++;\n continue;\n }\n if (afterDigit - beforeDigit === 1) {\n result.push(beforeDigit);\n result.push(...makePositionFromCodes(before.slice(index + 1), []));\n break;\n }\n const mid = beforeDigit + Math.floor((afterDigit - beforeDigit) / 2);\n result.push(mid);\n break;\n }\n return result;\n}\nexport function posCodes(str) {\n const codes = [];\n for (let i = 0; i < str.length; i++) {\n codes.push(str.charCodeAt(i));\n }\n return codes;\n}\nexport function pos(codes) {\n return String.fromCharCode(...codes);\n}\nexport function compare(itemA, itemB) {\n const aCodes = posCodes(itemA.position);\n const bCodes = posCodes(itemB.position);\n const maxLength = Math.max(aCodes.length, bCodes.length);\n for (let i = 0; i < maxLength; i++) {\n const a = aCodes[i] == null ? min : aCodes[i];\n const b = bCodes[i] == null ? min : bCodes[i];\n if (a === b) {\n continue;\n }\n else {\n return a - b;\n }\n }\n throw new Error(`Impossible to compare similar position \"${itemA.position}\" and \"${itemB.position}\"`);\n}\n","import { OpType, CrdtType, } from \"./live\";\nimport { compare, makePosition } from \"./position\";\nconst RECORD = Symbol(\"liveblocks.record\");\nconst LIST = Symbol(\"liveblocks.list\");\nexport function createRecord(id, data) {\n return Object.assign({ id, $$type: RECORD }, data);\n}\nexport function createList(id, items = []) {\n return {\n id,\n $$type: LIST,\n length: items.length,\n toArray: () => items,\n map: (callback) => items.map(callback),\n };\n}\nfunction noop() { }\nexport class Doc {\n constructor(root, _cache, _emit) {\n this.root = root;\n this._cache = _cache;\n this._emit = _emit;\n }\n static empty(id = \"root\", emit = noop) {\n const root = {\n id,\n $$type: RECORD,\n };\n return new Doc(root, { links: new Map(), listCache: new Map() }, emit);\n }\n static createFromRoot(data, id = \"root\", emit = noop) {\n let doc = Doc.empty(id, emit);\n doc = doc.updateRecord(doc.root.id, data);\n return doc;\n }\n static load(root, emit = noop) {\n let doc = Doc.empty(root.id, emit);\n return doc.dispatch({\n type: OpType.RecordUpdate,\n id: root.id,\n data: root.data,\n });\n }\n get data() {\n return this.root;\n }\n dispatch(op, shouldEmit = false) {\n if (shouldEmit) {\n this._emit(op);\n }\n if (op.id === this.root.id) {\n const node = dispatch(this.root, op, this._cache, []);\n return new Doc(node, this._cache, this._emit);\n }\n else {\n const links = getAllLinks(op.id, this.root.id, this._cache.links);\n const node = dispatch(this.root, op, this._cache, links);\n return new Doc(node, this._cache, this._emit);\n }\n }\n getChild(id) {\n if (id === this.root.id) {\n return this.root;\n }\n const allLinks = getAllLinks(id, this.root.id, this._cache.links);\n return getChildDeep(this.root, id, allLinks, this._cache);\n }\n updateRecord(id, overrides) {\n const currentRecord = this.getChild(id);\n if (currentRecord == null) {\n throw new Error(`Record with id \"${id}\" does not exist`);\n }\n let data = {};\n for (const key in overrides) {\n const value = overrides[key];\n data[key] = serialize(value);\n }\n const op = {\n id: currentRecord.id,\n type: OpType.RecordUpdate,\n data,\n };\n return this.dispatch(op, true);\n }\n pushItem(id, item) {\n const list = this.getChild(id);\n if (list == null) {\n throw new Error(`List with id \"${id}\" does not exist`);\n }\n if (list.$$type !== LIST) {\n throw new Error(`Node with id \"${id}\" is not a list`);\n }\n if (!isRecord(item)) {\n throw new Error(\"List can't only have Record as children\");\n }\n const data = serialize(item);\n if (list.length === 0) {\n return this.dispatch({\n type: OpType.ListInsert,\n id: list.id,\n position: makePosition(),\n data,\n }, true);\n }\n const items = sortedListItems(getListItems(this._cache, id));\n const [tailPosition] = items[items.length - 1];\n const position = makePosition(tailPosition);\n const operation = {\n type: OpType.ListInsert,\n id: list.id,\n position,\n data,\n };\n return this.dispatch(operation, true);\n }\n moveItem(id, index, targetIndex) {\n const list = this.getChild(id);\n if (list == null) {\n throw new Error(`List with id \"${id}\" does not exist`);\n }\n if (list.$$type !== LIST) {\n throw new Error(`Node with id \"${id}\" is not a list`);\n }\n const items = sortedListItems(getListItems(this._cache, id));\n if (targetIndex < 0) {\n throw new Error(\"targetIndex cannot be less than 0\");\n }\n if (targetIndex >= items.length) {\n throw new Error(\"targetIndex cannot be greater or equal than the list length\");\n }\n if (index < 0) {\n throw new Error(\"index cannot be less than 0\");\n }\n if (index >= items.length) {\n throw new Error(\"index cannot be greater or equal than the list length\");\n }\n if (index === targetIndex) {\n return this;\n }\n let beforePosition = null;\n let afterPosition = null;\n if (index < targetIndex) {\n afterPosition =\n targetIndex === items.length - 1\n ? undefined\n : items[targetIndex + 1][0];\n beforePosition = items[targetIndex][0];\n }\n else {\n afterPosition = items[targetIndex][0];\n beforePosition =\n targetIndex === 0 ? undefined : items[targetIndex - 1][0];\n }\n const position = makePosition(beforePosition, afterPosition);\n const [, item] = items[index];\n return this.dispatch({\n type: OpType.ListMove,\n id: list.id,\n itemId: item.id,\n position,\n }, true);\n }\n deleteItem(id, index) {\n const list = this.getChild(id);\n if (list == null) {\n throw new Error(`List with id \"${id}\" does not exist`);\n }\n if (list.$$type !== LIST) {\n throw new Error(`Node with id \"${id}\" is not a list`);\n }\n const items = sortedListItems(getListItems(this._cache, id));\n const [, item] = items[index];\n return this.dispatch({\n type: OpType.ListRemove,\n id: list.id,\n itemId: item.id,\n }, true);\n }\n deleteItemById(id, itemId) {\n const list = this.getChild(id);\n if (list == null) {\n throw new Error(`List with id \"${id}\" does not exist`);\n }\n if (list.$$type !== LIST) {\n throw new Error(`Node with id \"${id}\" is not a list`);\n }\n const itemsMap = getListItems(this._cache, id);\n let item = null;\n for (const [, crdt] of itemsMap) {\n if (crdt.id === itemId) {\n item = crdt;\n break;\n }\n }\n if (item == null) {\n throw new Error(`List with id \"${id}\" does not have an item with id \"${itemId}\"`);\n }\n return this.dispatch({\n type: OpType.ListRemove,\n id: list.id,\n itemId: item.id,\n }, true);\n }\n}\nfunction getAllLinks(id, rootId, links) {\n let currentId = id;\n const result = [];\n do {\n const link = links.get(currentId);\n if (link == null) {\n throw new Error(`Can't find link for id \"${currentId}\"`);\n }\n currentId = link.parentId;\n result.push(link);\n } while (currentId !== rootId);\n return result;\n}\nfunction deserializeList(serialized, cache) {\n const listItems = new Map();\n for (const position in serialized.data) {\n const item = deserialize(serialized.data[position], cache);\n if (!isRecord(item)) {\n throw new Error(\"TODO\");\n }\n listItems.set(position, item);\n cache.links.set(item.id, { parentId: serialized.id, parentKey: position });\n }\n cache.listCache.set(serialized.id, listItems);\n return createList(serialized.id, listItemsToArray(listItems));\n}\nfunction getListItems(cache, listId) {\n const items = cache.listCache.get(listId);\n if (items == null) {\n throw new Error(`Can't find list cache for id \"${listId}\"`);\n }\n return items;\n}\nfunction deserializeRecord(serialized, cache) {\n const result = {\n id: serialized.id,\n $$type: RECORD,\n };\n for (const key in serialized.data) {\n const item = deserialize(serialized.data[key], cache);\n if (isCrdt(item)) {\n cache.links.set(item.id, {\n parentId: serialized.id,\n parentKey: key,\n });\n }\n result[key] = item;\n }\n return result;\n}\nfunction deserialize(serialized, cache) {\n switch (serialized.type) {\n case CrdtType.Register: {\n return serialized.data;\n }\n case CrdtType.Record: {\n return deserializeRecord(serialized, cache);\n }\n case CrdtType.List: {\n return deserializeList(serialized, cache);\n }\n default: {\n throw new Error(\"TODO\");\n }\n }\n}\nfunction dispatchOnRecord(record, op, cache, links) {\n if (links.length === 0) {\n if (record.id !== op.id) {\n throw new Error(\"TODO\");\n }\n switch (op.type) {\n case OpType.RecordUpdate: {\n return updateRecord(record, op, cache);\n }\n default: {\n console.warn(\"Unsupported operation\");\n return record;\n }\n }\n }\n const currentLink = links.pop();\n const child = record[currentLink.parentKey];\n const newNode = dispatch(child, op, cache, links);\n return Object.assign(Object.assign({}, record), { [currentLink.parentKey]: newNode });\n}\nfunction dispatchOnList(list, op, cache, links) {\n if (links.length === 0) {\n if (list.id !== op.id) {\n throw new Error(\"TODO\");\n }\n switch (op.type) {\n case OpType.ListInsert: {\n return listInsert(list, op, cache);\n }\n case OpType.ListMove: {\n return listMove(list, op, cache);\n }\n case OpType.ListRemove: {\n return listDelete(list, op, cache);\n }\n default: {\n console.warn(\"Unsupported operation\");\n return list;\n }\n }\n }\n const currentLink = links.pop();\n const position = currentLink.parentKey;\n const items = getListItems(cache, list.id);\n const item = items.get(position);\n if (item == null) {\n throw new Error(\"TODO\");\n }\n const newItem = dispatch(item, op, cache, links);\n items.set(position, newItem);\n return createList(list.id, listItemsToArray(items));\n}\nfunction dispatch(node, op, cache, links) {\n switch (node.$$type) {\n case RECORD:\n return dispatchOnRecord(node, op, cache, links);\n case LIST:\n return dispatchOnList(node, op, cache, links);\n default: {\n throw new Error(\"Unknown CRDT\");\n }\n }\n}\nfunction updateRecord(node, op, cache) {\n const result = Object.assign({}, node);\n for (const key in op.data) {\n const value = op.data[key];\n const item = deserialize(value, cache);\n if (isCrdt(item)) {\n cache.links.set(item.id, { parentId: node.id, parentKey: key });\n }\n result[key] = item;\n }\n return result;\n}\nfunction listInsert(list, op, cache) {\n const items = getListItems(cache, list.id);\n const item = deserialize(op.data, cache);\n if (isCrdt(item)) {\n items.set(op.position, item);\n cache.links.set(item.id, { parentId: list.id, parentKey: op.position });\n }\n return createList(list.id, listItemsToArray(items));\n}\nfunction listMove(list, op, cache) {\n const items = getListItems(cache, list.id);\n const link = getLinkOrThrow(cache, op.itemId);\n const item = items.get(link.parentKey);\n if (item == null) {\n throw new Error(\"TODO\");\n }\n // Delete old position cache entry\n items.delete(link.parentKey);\n // Insert new position in cache\n items.set(op.position, item);\n // Update link\n cache.links.set(op.itemId, { parentId: list.id, parentKey: op.position });\n return createList(list.id, listItemsToArray(items));\n}\nfunction getLinkOrThrow(cache, id) {\n const link = cache.links.get(id);\n if (link == null) {\n throw new Error(`Can't find link with id \"${id}\"`);\n }\n return link;\n}\nfunction listDelete(list, op, cache) {\n const items = getListItems(cache, list.id);\n const link = getLinkOrThrow(cache, op.itemId);\n items.delete(link.parentKey);\n cache.links.delete(op.itemId);\n return createList(list.id, listItemsToArray(items));\n}\nfunction listItemsToArray(items) {\n return sortedListItems(items).map((entry) => entry[1]);\n}\nfunction sortedListItems(items) {\n return Array.from(items.entries()).sort((entryA, entryB) => compare({ position: entryA[0] }, { position: entryB[0] }));\n}\nfunction getChildDeep(node, id, links, cache) {\n let currentNode = node;\n while (currentNode.id !== id) {\n const link = links.pop();\n if (link == null || link.parentId !== currentNode.id) {\n throw new Error(\"TODO\");\n }\n if (currentNode.$$type === RECORD) {\n currentNode = currentNode[link.parentKey];\n }\n else {\n const listItems = getListItems(cache, currentNode.id);\n const item = listItems.get(link.parentKey);\n if (item == null) {\n throw new Error(\"TODO\");\n }\n currentNode = item;\n }\n }\n return currentNode;\n}\nfunction isRecord(value) {\n return value != null && typeof value === \"object\" && value.$$type === RECORD;\n}\nfunction isList(value) {\n return value != null && typeof value === \"object\" && value.$$type === LIST;\n}\nfunction isCrdt(value) {\n return isRecord(value) || isList(value);\n}\nfunction serializeRecord(record) {\n const serializedData = {};\n for (const key in record) {\n if (key !== \"id\" && key !== \"$$type\") {\n const value = record[key]; // TODO: Find out why typescript does not like that\n serializedData[key] = serialize(value);\n }\n }\n return {\n id: record.id,\n type: CrdtType.Record,\n data: serializedData,\n };\n}\nfunction serializeList(list) {\n return {\n id: list.id,\n type: CrdtType.List,\n data: {},\n };\n}\nfunction serialize(value) {\n if (isRecord(value)) {\n return serializeRecord(value);\n }\n else if (isList(value)) {\n return serializeList(value);\n }\n else {\n return { type: CrdtType.Register, data: value };\n }\n}\n","export var LiveStorageState;\n(function (LiveStorageState) {\n LiveStorageState[LiveStorageState[\"NotInitialized\"] = 0] = \"NotInitialized\";\n LiveStorageState[LiveStorageState[\"Loading\"] = 1] = \"Loading\";\n LiveStorageState[LiveStorageState[\"Loaded\"] = 2] = \"Loaded\";\n})(LiveStorageState || (LiveStorageState = {}));\n","export function remove(array, item) {\n for (let i = 0; i < array.length; i++) {\n if (array[i] === item) {\n array.splice(i, 1);\n break;\n }\n }\n}\n","var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nfunction fetchAuthorize(endpoint, room) {\n return __awaiter(this, void 0, void 0, function* () {\n const res = yield fetch(endpoint, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({\n room,\n }),\n });\n if (!res.ok) {\n throw new AuthenticationError(`Authentication error. Liveblocks could not parse the response of your authentication \"${endpoint}\"`);\n }\n let authResponse = null;\n try {\n authResponse = yield res.json();\n }\n catch (er) {\n throw new AuthenticationError(`Authentication error. Liveblocks could not parse the response of your authentication \"${endpoint}\"`);\n }\n if (typeof authResponse.token !== \"string\") {\n throw new AuthenticationError(`Authentication error. Liveblocks could not parse the response of your authentication \"${endpoint}\"`);\n }\n return authResponse.token;\n });\n}\nexport default function auth(endpoint, room) {\n return __awaiter(this, void 0, void 0, function* () {\n if (typeof endpoint === \"string\") {\n return fetchAuthorize(endpoint, room);\n }\n if (typeof endpoint === \"function\") {\n return endpoint(room);\n }\n throw new Error(\"Authentication error. Liveblocks could not parse the response of your authentication endpoint\");\n });\n}\nclass AuthenticationError extends Error {\n constructor(message) {\n super(message);\n }\n}\nexport function parseToken(token) {\n const tokenParts = token.split(\".\");\n if (tokenParts.length !== 3) {\n throw new AuthenticationError(`Authentication error. Liveblocks could not parse the response of your authentication endpoint`);\n }\n const data = JSON.parse(atob(tokenParts[1]));\n if (typeof data.actor !== \"number\") {\n throw new AuthenticationError(`Authentication error. Liveblocks could not parse the response of your authentication endpoint`);\n }\n return data;\n}\n","var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport { Doc } from \"./doc\";\nimport { LiveStorageState, } from \"./types\";\nimport { createRecord as innerCreateRecord, createList as innerCreateList, } from \"./doc\";\nimport { remove } from \"./utils\";\nimport auth, { parseToken } from \"./authentication\";\nimport { ClientMessageType, ServerMessageType, } from \"./live\";\nconst BACKOFF_RETRY_DELAYS = [250, 500, 1000, 2000, 4000, 8000, 10000];\nconst HEARTBEAT_INTERVAL = 30000;\n// const WAKE_UP_CHECK_INTERVAL = 2000;\nconst PONG_TIMEOUT = 2000;\nfunction isValidRoomEventType(value) {\n return (value === \"storage\" ||\n value === \"my-presence\" ||\n value === \"others\" ||\n value === \"event\" ||\n value === \"error\" ||\n value === \"connection\");\n}\nfunction makeIdFactory(connectionId) {\n let count = 0;\n return () => `${connectionId}:${count++}`;\n}\nfunction makeOthers(presenceMap) {\n const array = Object.values(presenceMap);\n return {\n get count() {\n return array.length;\n },\n map(callback) {\n return array.map(callback);\n },\n toArray() {\n return array;\n },\n };\n}\nfunction log(...params) {\n return;\n console.log(...params, new Date().toString());\n}\nexport function makeStateMachine(state, context, mockedEffects) {\n const effects = mockedEffects || {\n authenticate() {\n return __awaiter(this, void 0, void 0, function* () {\n try {\n const token = yield auth(context.authEndpoint, context.room);\n const parsedToken = parseToken(token);\n const socket = new WebSocket(`${context.liveblocksServer}/?token=${token}`);\n socket.addEventListener(\"message\", onMessage);\n socket.addEventListener(\"open\", onOpen);\n socket.addEventListener(\"close\", onClose);\n socket.addEventListener(\"error\", onError);\n authenticationSuccess(parsedToken, socket);\n }\n catch (er) {\n authenticationFailure(er);\n }\n });\n },\n send(messageOrMessages) {\n if (state.socket == null) {\n throw new Error(\"Can't send message if socket is null\");\n }\n state.socket.send(JSON.stringify(messageOrMessages));\n },\n delayFlush(delay) {\n return setTimeout(tryFlushing, delay);\n },\n startHeartbeatInterval() {\n return setInterval(heartbeat, HEARTBEAT_INTERVAL);\n },\n schedulePongTimeout() {\n return setTimeout(pongTimeout, PONG_TIMEOUT);\n },\n scheduleReconnect(delay) {\n return setTimeout(connect, delay);\n },\n };\n function subscribe(type, listener) {\n if (!isValidRoomEventType(type)) {\n throw new Error(`\"${type}\" is not a valid event name`);\n }\n state.listeners[type].push(listener);\n }\n function unsubscribe(event, callback) {\n if (!isValidRoomEventType(event)) {\n throw new Error(`\"${event}\" is not a valid event name`);\n }\n const callbacks = state.listeners[event];\n remove(callbacks, callback);\n }\n function getConnectionState() {\n return state.connection.state;\n }\n function getCurrentUser() {\n return state.connection.state === \"open\" ||\n state.connection.state === \"connecting\"\n ? {\n connectionId: state.connection.id,\n id: state.connection.userId,\n info: state.connection.userInfo,\n presence: getPresence(),\n }\n : null;\n }\n function connect() {\n if (typeof window === \"undefined\") {\n return;\n }\n if (state.connection.state !== \"closed\" &&\n state.connection.state !== \"unavailable\") {\n return null;\n }\n updateConnection({ state: \"authenticating\" });\n effects.authenticate();\n }\n function updatePresence(overrides) {\n const newPresence = Object.assign(Object.assign({}, state.me), overrides);\n if (state.flushData.presence == null) {\n state.flushData.presence = overrides;\n }\n else {\n for (const key in overrides) {\n state.flushData.presence[key] = overrides[key];\n }\n }\n state.me = newPresence;\n tryFlushing();\n for (const listener of state.listeners[\"my-presence\"]) {\n listener(state.me);\n }\n }\n function authenticationSuccess(token, socket) {\n updateConnection({\n state: \"connecting\",\n id: token.actor,\n userInfo: token.info,\n userId: token.id,\n });\n state.idFactory = makeIdFactory(token.actor);\n state.socket = socket;\n }\n function authenticationFailure(error) {\n console.error(error);\n updateConnection({ state: \"unavailable\" });\n state.numberOfRetry++;\n state.timeoutHandles.reconnect = effects.scheduleReconnect(getRetryDelay());\n }\n function onVisibilityChange(visibilityState) {\n if (visibilityState === \"visible\" && state.connection.state === \"open\") {\n log(\"Heartbeat after visibility change\");\n heartbeat();\n }\n }\n function onUpdatePresenceMessage(message) {\n const user = state.users[message.actor];\n if (user == null) {\n state.users[message.actor] = {\n connectionId: message.actor,\n presence: message.data,\n };\n }\n else {\n state.users[message.actor] = {\n id: user.id,\n info: user.info,\n connectionId: message.actor,\n presence: Object.assign(Object.assign({}, user.presence), message.data),\n };\n }\n updateUsers({\n type: \"update\",\n updates: message.data,\n user: state.users[message.actor],\n });\n }\n function updateUsers(event) {\n state.others = makeOthers(state.users);\n for (const listener of state.listeners[\"others\"]) {\n listener(state.others, event);\n }\n }\n function onUserLeftMessage(message) {\n const userLeftMessage = message;\n const user = state.users[userLeftMessage.actor];\n if (user) {\n delete state.users[userLeftMessage.actor];\n updateUsers({ type: \"leave\", user });\n }\n }\n function onRoomStateMessage(message) {\n const newUsers = {};\n for (const key in message.users) {\n const connectionId = Number.parseInt(key);\n const user = message.users[key];\n newUsers[connectionId] = {\n connectionId,\n info: user.info,\n id: user.id,\n };\n }\n state.users = newUsers;\n updateUsers({ type: \"reset\" });\n }\n function onNavigatorOnline() {\n if (state.connection.state === \"unavailable\") {\n log(\"Try to reconnect after connectivity change\");\n reconnect();\n }\n }\n function onEvent(message) {\n for (const listener of state.listeners.event) {\n listener({ connectionId: message.actor, event: message.event });\n }\n }\n function onUserJoinedMessage(message) {\n state.users[message.actor] = {\n connectionId: message.actor,\n info: message.info,\n id: message.id,\n };\n updateUsers({ type: \"enter\", user: state.users[message.actor] });\n if (state.me) {\n // Send current presence to new user\n // TODO: Consider storing it on the backend\n state.flushData.messages.push({\n type: ClientMessageType.UpdatePresence,\n data: state.me,\n targetActor: message.actor,\n });\n tryFlushing();\n }\n }\n function onMessage(event) {\n if (event.data === \"pong\") {\n clearTimeout(state.timeoutHandles.pongTimeout);\n return;\n }\n const message = JSON.parse(event.data);\n switch (message.type) {\n case ServerMessageType.InitialStorageState: {\n onInitialStorageState(message);\n break;\n }\n case ServerMessageType.UpdateStorage: {\n onStorageUpdates(message);\n break;\n }\n case ServerMessageType.UserJoined: {\n onUserJoinedMessage(message);\n break;\n }\n case ServerMessageType.UpdatePresence: {\n onUpdatePresenceMessage(message);\n break;\n }\n case ServerMessageType.Event: {\n onEvent(message);\n break;\n }\n case ServerMessageType.UserLeft: {\n onUserLeftMessage(message);\n break;\n }\n case ServerMessageType.RoomState: {\n onRoomStateMessage(message);\n break;\n }\n }\n }\n // function onWakeUp() {\n // // Sometimes, the browser can put the webpage on pause (computer is on sleep mode for example)\n // // The client will not know that the server has probably close the connection even if the readyState is Open\n // // One way to detect this kind of pause is to ensure that a setInterval is not taking more than the delay it was configured with\n // if (state.connection.state === \"open\") {\n // log(\"Try to reconnect after laptop wake up\");\n // reconnect();\n // }\n // }\n function onClose(event) {\n state.socket = null;\n clearTimeout(state.timeoutHandles.pongTimeout);\n clearInterval(state.intervalHandles.heartbeat);\n if (state.timeoutHandles.flush) {\n clearTimeout(state.timeoutHandles.flush);\n }\n clearTimeout(state.timeoutHandles.reconnect);\n state.users = {};\n updateUsers({ type: \"reset\" });\n if (event.code >= 4000 && event.code <= 4100) {\n updateConnection({ state: \"failed\" });\n const error = new LiveblocksError(event.reason, event.code);\n for (const listener of state.listeners.error) {\n listener(error);\n }\n }\n else if (event.wasClean === false) {\n updateConnection({ state: \"unavailable\" });\n state.numberOfRetry++;\n state.timeoutHandles.reconnect = effects.scheduleReconnect(getRetryDelay());\n }\n else {\n updateConnection({ state: \"closed\" });\n }\n }\n function updateConnection(connection) {\n state.connection = connection;\n for (const listener of state.listeners.connection) {\n listener(connection.state);\n }\n }\n function getRetryDelay() {\n return BACKOFF_RETRY_DELAYS[state.numberOfRetry < BACKOFF_RETRY_DELAYS.length\n ? state.numberOfRetry\n : BACKOFF_RETRY_DELAYS.length - 1];\n }\n function onError() { }\n function onOpen() {\n clearInterval(state.intervalHandles.heartbeat);\n state.intervalHandles.heartbeat = effects.startHeartbeatInterval();\n if (state.connection.state === \"connecting\") {\n updateConnection(Object.assign(Object.assign({}, state.connection), { state: \"open\" }));\n state.numberOfRetry = 0;\n tryFlushing();\n }\n else {\n // TODO\n }\n }\n function heartbeat() {\n if (state.socket == null) {\n // Should never happen, because we clear the pong timeout when the connection is dropped explictly\n return;\n }\n clearTimeout(state.timeoutHandles.pongTimeout);\n state.timeoutHandles.pongTimeout = effects.schedulePongTimeout();\n if (state.socket.readyState === WebSocket.OPEN) {\n state.socket.send(\"ping\");\n }\n }\n function pongTimeout() {\n log(\"Pong timeout. Trying to reconnect.\");\n reconnect();\n }\n function reconnect() {\n if (state.socket) {\n state.socket.removeEventListener(\"open\", onOpen);\n state.socket.removeEventListener(\"message\", onMessage);\n state.socket.removeEventListener(\"close\", onClose);\n state.socket.removeEventListener(\"error\", onError);\n state.socket.close();\n state.socket = null;\n }\n updateConnection({ state: \"unavailable\" });\n clearTimeout(state.timeoutHandles.pongTimeout);\n if (state.timeoutHandles.flush) {\n clearTimeout(state.timeoutHandles.flush);\n }\n clearTimeout(state.timeoutHandles.reconnect);\n clearInterval(state.intervalHandles.heartbeat);\n connect();\n }\n function tryFlushing() {\n if (state.socket == null) {\n return;\n }\n if (state.socket.readyState !== WebSocket.OPEN) {\n return;\n }\n const now = Date.now();\n const elapsedTime = now - state.lastFlushTime;\n if (elapsedTime > context.throttleDelay) {\n const messages = flushDataToMessages(state);\n if (messages.length === 0) {\n return;\n }\n effects.send(messages);\n state.flushData = {\n messages: [],\n storageOperations: [],\n presence: null,\n };\n state.lastFlushTime = now;\n }\n else {\n if (state.timeoutHandles.flush != null) {\n clearTimeout(state.timeoutHandles.flush);\n }\n state.timeoutHandles.flush = effects.delayFlush(context.throttleDelay - (now - state.lastFlushTime));\n }\n }\n function flushDataToMessages(state) {\n const messages = [];\n if (state.flushData.presence) {\n messages.push({\n type: ClientMessageType.UpdatePresence,\n data: state.flushData.presence,\n });\n }\n for (const event of state.flushData.messages) {\n messages.push(event);\n }\n if (state.flushData.storageOperations.length > 0) {\n messages.push({\n type: ClientMessageType.UpdateStorage,\n ops: state.flushData.storageOperations,\n });\n }\n return messages;\n }\n function disconnect() {\n if (state.socket) {\n state.socket.removeEventListener(\"open\", onOpen);\n state.socket.removeEventListener(\"message\", onMessage);\n state.socket.removeEventListener(\"close\", onClose);\n state.socket.removeEventListener(\"error\", onError);\n state.socket.close();\n state.socket = null;\n }\n updateConnection({ state: \"closed\" });\n if (state.timeoutHandles.flush) {\n clearTimeout(state.timeoutHandles.flush);\n }\n clearTimeout(state.timeoutHandles.reconnect);\n clearTimeout(state.timeoutHandles.pongTimeout);\n clearInterval(state.intervalHandles.heartbeat);\n state.users = {};\n updateUsers({ type: \"reset\" });\n clearListeners();\n }\n function clearListeners() {\n for (const key in state.listeners) {\n state.listeners[key] = [];\n }\n }\n function getPresence() {\n return state.me;\n }\n function getOthers() {\n return state.others;\n }\n function broadcastEvent(event) {\n if (state.socket == null) {\n return;\n }\n state.flushData.messages.push({\n type: ClientMessageType.ClientEvent,\n event,\n });\n tryFlushing();\n }\n /**\n * STORAGE\n */\n function onStorageUpdates(message) {\n if (state.doc == null) {\n // TODO: Cache updates in case they are coming while root is queried\n return;\n }\n updateDoc(message.ops.reduce((doc, op) => doc.dispatch(op), state.doc));\n }\n function updateDoc(doc) {\n state.doc = doc;\n if (doc) {\n for (const listener of state.listeners.storage) {\n listener(getStorage());\n }\n }\n }\n function getStorage() {\n if (state.storageState === LiveStorageState.Loaded) {\n return {\n state: state.storageState,\n root: state.doc.root,\n };\n }\n return {\n state: state.storageState,\n };\n }\n function onInitialStorageState(message) {\n state.storageState = LiveStorageState.Loaded;\n if (message.root == null) {\n const rootId = makeId();\n state.doc = Doc.empty(rootId, (op) => dispatch(op));\n updateDoc(state.doc.updateRecord(rootId, state.initialStorageFactory({\n createRecord: (data) => createRecord(data),\n createList: () => createList(),\n })));\n }\n else {\n updateDoc(Doc.load(message.root, (op) => dispatch(op)));\n }\n }\n function makeId() {\n if (state.idFactory == null) {\n throw new Error(\"Can't generate id. Id factory is missing.\");\n }\n return state.idFactory();\n }\n function dispatch(op) {\n state.flushData.storageOperations.push(op);\n tryFlushing();\n }\n function createRecord(data) {\n return innerCreateRecord(makeId(), data);\n }\n function createList() {\n return innerCreateList(makeId());\n }\n function fetchStorage(initialStorageFactory) {\n state.initialStorageFactory = initialStorageFactory;\n state.storageState = LiveStorageState.Loading;\n state.flushData.messages.push({ type: ClientMessageType.FetchStorage });\n tryFlushing();\n }\n function updateRecord(record, overrides) {\n updateDoc(state.doc.updateRecord(record.id, overrides));\n }\n function pushItem(list, item) {\n updateDoc(state.doc.pushItem(list.id, item));\n }\n function deleteItem(list, index) {\n updateDoc(state.doc.deleteItem(list.id, index));\n }\n function deleteItemById(list, itemId) {\n updateDoc(state.doc.deleteItemById(list.id, itemId));\n }\n function moveItem(list, index, targetIndex) {\n updateDoc(state.doc.moveItem(list.id, index, targetIndex));\n }\n return {\n // Internal\n onOpen,\n onClose,\n onMessage,\n authenticationSuccess,\n heartbeat,\n onNavigatorOnline,\n // onWakeUp,\n onVisibilityChange,\n // Core\n connect,\n disconnect,\n subscribe,\n unsubscribe,\n // Presence\n updatePresence,\n broadcastEvent,\n // Storage\n fetchStorage,\n createRecord,\n updateRecord,\n createList,\n pushItem,\n deleteItem,\n deleteItemById,\n moveItem,\n selectors: {\n // Core\n getConnectionState,\n getCurrentUser,\n // Presence\n getPresence,\n getOthers,\n // Storage\n getStorage,\n },\n };\n}\nexport function defaultState(me) {\n return {\n connection: { state: \"closed\" },\n socket: null,\n listeners: {\n storage: [],\n event: [],\n others: [],\n \"my-presence\": [],\n error: [],\n connection: [],\n },\n numberOfRetry: 0,\n lastFlushTime: 0,\n timeoutHandles: {\n flush: null,\n reconnect: 0,\n pongTimeout: 0,\n },\n flushData: {\n presence: me == null ? {} : me,\n messages: [],\n storageOperations: [],\n },\n intervalHandles: {\n heartbeat: 0,\n },\n me: me == null ? {} : me,\n users: {},\n others: makeOthers({}),\n storageState: LiveStorageState.NotInitialized,\n initialStorageFactory: null,\n doc: null,\n idFactory: null,\n };\n}\nexport function createRoom(name, options) {\n const throttleDelay = options.throttle || 100;\n const liveblocksServer = options.liveblocksServer || \"wss://liveblocks.net\";\n const authEndpoint = options.authEndpoint;\n const state = defaultState(options.initialPresence);\n const machine = makeStateMachine(state, {\n throttleDelay,\n liveblocksServer,\n authEndpoint,\n room: name,\n });\n const room = {\n /////////////\n // Core //\n /////////////\n getConnectionState: machine.selectors.getConnectionState,\n getCurrentUser: machine.selectors.getCurrentUser,\n subscribe: machine.subscribe,\n unsubscribe: machine.unsubscribe,\n /////////////\n // Storage //\n /////////////\n getStorage: machine.selectors.getStorage,\n fetchStorage: machine.fetchStorage,\n createRecord: machine.createRecord,\n createList: machine.createList,\n updateRecord: machine.updateRecord,\n pushItem: machine.pushItem,\n deleteItem: machine.deleteItem,\n deleteItemById: machine.deleteItemById,\n moveItem: machine.moveItem,\n //////////////\n // Presence //\n //////////////\n getPresence: machine.selectors.getPresence,\n updatePresence: machine.updatePresence,\n getOthers: machine.selectors.getOthers,\n broadcastEvent: machine.broadcastEvent,\n };\n return {\n connect: machine.connect,\n disconnect: machine.disconnect,\n onNavigatorOnline: machine.onNavigatorOnline,\n onVisibilityChange: machine.onVisibilityChange,\n room,\n };\n}\nclass LiveblocksError extends Error {\n constructor(message, code) {\n super(message);\n this.code = code;\n }\n}\n","import { createRoom } from \"./room\";\n/**\n * Create a client that will be responsible to communicate with liveblocks servers.\n *\n * ### Example\n * ```\n * const client = createClient({\n * authEndpoint: \"/api/auth\"\n * })\n * ```\n */\nexport function createClient(options) {\n if (typeof options.throttle === \"number\") {\n if (options.throttle < 80 || options.throttle > 1000) {\n throw new Error(\"Liveblocks client throttle should be between 80 and 1000 ms\");\n }\n }\n const rooms = new Map();\n function getRoom(roomId) {\n const internalRoom = rooms.get(roomId);\n return internalRoom ? internalRoom.room : null;\n }\n function enter(roomId, initialPresence) {\n let internalRoom = rooms.get(roomId);\n if (internalRoom) {\n return internalRoom.room;\n }\n internalRoom = createRoom(roomId, Object.assign(Object.assign({}, options), { initialPresence }));\n rooms.set(roomId, internalRoom);\n internalRoom.connect();\n return internalRoom.room;\n }\n function leave(roomId) {\n let room = rooms.get(roomId);\n if (room) {\n room.disconnect();\n rooms.delete(roomId);\n }\n }\n if (typeof window !== \"undefined\") {\n // TODO: Expose a way to clear these\n window.addEventListener(\"online\", () => {\n for (const [, room] of rooms) {\n room.onNavigatorOnline();\n }\n });\n }\n if (typeof document !== \"undefined\") {\n document.addEventListener(\"visibilitychange\", () => {\n for (const [, room] of rooms) {\n room.onVisibilityChange(document.visibilityState);\n }\n });\n }\n return {\n getRoom,\n enter,\n leave,\n };\n}\n","import {\n Client,\n RecordData,\n Others,\n Presence,\n Record,\n InitialStorageFactory,\n List,\n Room,\n LiveStorageState,\n User,\n} from \"@liveblocks/client\";\nimport * as React from \"react\";\n\ntype LiveblocksProviderProps = {\n children: React.ReactNode;\n client: Client;\n};\n\nconst ClientContext = React.createContext<Client | null>(null);\nconst RoomContext = React.createContext<Room | null>(null);\n\n/**\n * Makes the Liveblocks client available in the component hierarchy below.\n */\nexport function LiveblocksProvider(props: LiveblocksProviderProps) {\n return (\n <ClientContext.Provider value={props.client}>\n {props.children}\n </ClientContext.Provider>\n );\n}\n\n/**\n * Returns the client of the nearest LiveblocksProvider above in the react component tree\n */\nfunction useClient(): Client {\n const client = React.useContext(ClientContext);\n if (client == null) {\n throw new Error(\"LiveblocksProvider is missing from the react tree\");\n }\n\n return client;\n}\n\ntype RoomProviderProps = {\n /**\n * The id of the room you want to connect to\n */\n id: string;\n /**\n * A callback that let you initialize the default presence when entering the room.\n * If ommited, the default presence will be an empty object\n */\n defaultPresence?: () => Presence;\n\n children: React.ReactNode;\n};\n\n/**\n * Makes a Room available in the component hierarchy below.\n * When this component is unmounted, the current user leave the room.\n * That means that you can't have 2 RoomProvider with the same room id in your react tree.\n */\nexport function RoomProvider({\n id,\n children,\n defaultPresence,\n}: RoomProviderProps) {\n const client = useClient();\n\n React.useEffect(() => {\n return () => {\n client.leave(id);\n };\n }, [client, id]);\n\n const room =\n client.getRoom(id) ||\n client.enter(id, defaultPresence ? defaultPresence() : undefined);\n\n return <RoomContext.Provider value={room}>{children}</RoomContext.Provider>;\n}\n\n/**\n * Returns the room of the nearest RoomProvider above in the react component tree\n */\nfunction useRoom() {\n const room = React.useContext(RoomContext);\n\n if (room == null) {\n throw new Error(\"RoomProvider is missing from the react tree\");\n }\n\n return room;\n}\n\n/**\n * Returns the presence of the current user of the current room, and a function to update it.\n * It is different from the setState function returned by the useState hook from React.\n * You don't need to pass the full presence object to update it.\n *\n * ### Example\n * ``` typescript\n * import { useMyPresence } from \"@liveblocks/react\";\n *\n * const [myPresence, updateMyPresence] = useMyPresence();\n * updateMyPresence({ x: 0 });\n * updateMyPresence({ y: 0 });\n *\n * // At the next render, \"myPresence\" will be equal to \"{ x: 0, y: 0 }\"\n * ```\n */\nexport function useMyPresence<T extends Presence>(): [\n T,\n (overrides: Partial<T>) => void\n] {\n const room = useRoom();\n const presence = room.getPresence<T>();\n const [, update] = React.useState(0);\n\n React.useEffect(() => {\n function onMyPresenceChange() {\n update((x) => x + 1);\n }\n\n room.subscribe(\"my-presence\", onMyPresenceChange);\n\n return () => {\n room.unsubscribe(\"my-presence\", onMyPresenceChange);\n };\n }, [room]);\n\n const setPresence = React.useCallback(\n (overrides: Partial<T>) => room.updatePresence(overrides),\n [room]\n );\n\n return [presence, setPresence];\n}\n\n/**\n * useUpdateMyPresence is similar to useMyPresence but it only returns the function to update the current user presence.\n * If you don't use the current user presence in your component, but you need to update it (e.g. live cursor), it's better to use useUpdateMyPresence to avoid unnecessary renders.\n *\n * ### Example\n * ``` typescript\n * import { useUpdateMyPresence } from \"@liveblocks/react\";\n *\n * const updateMyPresence = useUpdateMyPresence();\n * updateMyPresence({ x: 0 });\n * updateMyPresence({ y: 0 });\n *\n * // At the next render, the presence of the current user will be equal to \"{ x: 0, y: 0 }\"\n * ```\n */\nexport function useUpdateMyPresence<T extends Presence>(): (\n overrides: Partial<T>\n) => void {\n const room = useRoom();\n\n return React.useCallback(\n (overrides: Partial<T>) => {\n room.updatePresence(overrides);\n },\n [room]\n );\n}\n\n/**\n * Returns an object that lets you get information about all the the users currently connected in the room.\n *\n * ### Example\n * ``` typescript\n * import { useOthers } from \"@liveblocks/react\";\n *\n * const others = useOthers();\n *\n * // Example to map all cursors in jsx\n * {\n * others.map(({ connectionId, presence }) => {\n * if(presence == null || presence.cursor == null) {\n * return null;\n * }\n * return <Cursor key={connectionId} cursor={presence.cursor} />\n * })\n * }\n * ```\n */\nexport function useOthers<T extends Presence>(): Others<T> {\n const room = useRoom();\n\n const [, update] = React.useState(0);\n\n React.useEffect(() => {\n function onOthersChange() {\n update((x) => x + 1);\n }\n\n room.subscribe(\"others\", onOthersChange);\n\n return () => {\n room.subscribe(\"others\", onOthersChange);\n };\n }, [room]);\n\n return room.getOthers();\n}\n\n/**\n * Returns a callback that lets you broadcast custom events to other users in the room\n *\n * ### Example\n * ``` typescript\n * import { useBroadcastEvent } from \"@liveblocks/react\";\n *\n * const broadcast = useBroadcastEvent();\n *\n * broadcast({ type: \"CUSTOM_EVENT\", data: { x: 0, y: 0 } });\n * ```\n */\nexport function useBroadcastEvent() {\n const room = useRoom();\n\n return React.useCallback(\n (event: any) => {\n room.broadcastEvent(event);\n },\n [room]\n );\n}\n\n/**\n * useErrorListener is a react hook that lets you react to potential room connection errors.\n *\n * ### Example\n * ``` typescript\n * import { useErrorListener } from \"@liveblocks/react\";\n *\n * useErrorListener(er => {\n * console.error(er);\n * })\n * ```\n */\nexport function useErrorListener(callback: (er: Error) => void) {\n const room = useRoom();\n const savedCallback = React.useRef(callback);\n\n React.useEffect(() => {\n savedCallback.current = callback;\n });\n\n React.useEffect(() => {\n const listener = (e: Error) => savedCallback.current(e);\n\n room.subscribe(\"error\", listener);\n\n return () => {\n room.unsubscribe(\"error\", listener);\n };\n }, [room]);\n}\n\n/**\n * useEventListener is a react hook that lets you react to event broadcasted by other users in the room.\n *\n * ### Example\n * ``` typescript\n * import { useEventListener } from \"@liveblocks/react\";\n *\n * useEventListener(({ connectionId, event }) => {\n * if (event.type === \"CUSTOM_EVENT\") {\n * // Do something\n * }\n * });\n * ```\n */\nexport function useEventListener<TEvent>(\n callback: ({\n connectionId,\n event,\n }: {\n connectionId: number;\n event: TEvent;\n }) => void\n) {\n const room = useRoom();\n const savedCallback = React.useRef(callback);\n\n React.useEffect(() => {\n savedCallback.current = callback;\n });\n\n React.useEffect(() => {\n const listener = (e: { connectionId: number; event: TEvent }) =>\n savedCallback.current(e);\n\n room.subscribe(\"event\", listener);\n\n return () => {\n room.unsubscribe(\"event\", listener);\n };\n }, [room]);\n}\n\n/**\n * useCurrentUser is a react hook that lets you react to get the current user once it is connected to the room.\n *\n * ### Example\n * ``` typescript\n * import { useCurrentUser } from \"@liveblocks/react\";\n *\n * const user = useCurrentUser();\n * ```\n */\nexport function useCurrentUser<\n TPresence extends Presence = Presence\n>(): User<TPresence> | null {\n const room = useRoom();\n const [, update] = React.useState(0);\n\n React.useEffect(() => {\n function onChange() {\n update((x) => x + 1);\n }\n\n room.subscribe(\"my-presence\", onChange);\n room.subscribe(\"connection\", onChange);\n\n return () => {\n room.unsubscribe(\"my-presence\", onChange);\n room.unsubscribe(\"connection\", onChange);\n };\n }, [room]);\n\n return room.getCurrentUser<TPresence>();\n}\n\ntype StorageActions = {\n createRecord: Room[\"createRecord\"];\n updateRecord: Room[\"updateRecord\"];\n\n createList: Room[\"createList\"];\n moveItem: Room[\"moveItem\"];\n deleteItem: Room[\"deleteItem\"];\n deleteItemById: Room[\"deleteItemById\"];\n pushItem: Room[\"pushItem\"];\n};\n\nexport function useStorage<TRoot extends RecordData>(\n initialStorage: InitialStorageFactory<TRoot>\n): [root: Record<TRoot> | null, actions: StorageActions] {\n const room = useRoom();\n const storage = room.getStorage();\n const [, update] = React.useState(0);\n\n React.useEffect(() => {\n function onStorageChange() {\n update((x) => x + 1);\n }\n\n room.fetchStorage(initialStorage);\n room.subscribe(\"storage\", onStorageChange);\n\n return () => {\n room.unsubscribe(\"storage\", onStorageChange);\n };\n }, [room]);\n\n const root =\n storage.state === LiveStorageState.Loaded\n ? (storage.root as Record<TRoot>)\n : null;\n\n const actions = useStorageActions();\n return [root, actions];\n}\n\nexport function useStorageActions(): StorageActions {\n const room = useRoom();\n return React.useMemo(() => {\n function createRecord<T extends RecordData>(data: T) {\n return room.createRecord<T>(data);\n }\n\n function updateRecord<T extends RecordData>(\n record: Record<T>,\n overrides: Partial<T>\n ) {\n return room.updateRecord<T>(record, overrides);\n }\n\n function createList<T extends RecordData>(): List<Record<T>> {\n return room.createList<T>();\n }\n\n function moveItem<T extends RecordData>(\n list: List<Record<T>>,\n index: number,\n targetIndex: number\n ) {\n return room.moveItem<T>(list, index, targetIndex);\n }\n\n function deleteItem<T extends RecordData>(\n list: List<Record<T>>,\n index: number\n ) {\n return room.deleteItem<T>(list, index);\n }\n\n function deleteItemById<T extends RecordData>(\n list: List<Record<T>>,\n itemId: string\n ) {\n return room.deleteItemById<T>(list, itemId);\n }\n\n function pushItem<T extends RecordData>(\n list: List<Record<T>>,\n item: Record<T>\n ) {\n return room.pushItem<T>(list, item);\n }\n\n return {\n createRecord,\n updateRecord,\n\n createList,\n moveItem,\n deleteItem,\n deleteItemById,\n pushItem,\n };\n }, [room]);\n}\n\nexport { createClient } from \"@liveblocks/client\";\nexport type { Record, Client, List } from \"@liveblocks/client\";\n"],"names":["this","__awaiter","createRecord","createList","innerCreateRecord","innerCreateList","React.createContext","React.createElement","React.useContext","React.useEffect","React.useState","React.useCallback","React.useRef","React.useMemo"],"mappings":";;;;AAAO,IAAI,iBAAiB,CAAC;AAC7B,CAAC,UAAU,iBAAiB,EAAE;AAC9B,IAAI,iBAAiB,CAAC,iBAAiB,CAAC,gBAAgB,CAAC,GAAG,GAAG,CAAC,GAAG,gBAAgB,CAAC;AACpF,IAAI,iBAAiB,CAAC,iBAAiB,CAAC,YAAY,CAAC,GAAG,GAAG,CAAC,GAAG,YAAY,CAAC;AAC5E,IAAI,iBAAiB,CAAC,iBAAiB,CAAC,UAAU,CAAC,GAAG,GAAG,CAAC,GAAG,UAAU,CAAC;AACxE,IAAI,iBAAiB,CAAC,iBAAiB,CAAC,OAAO,CAAC,GAAG,GAAG,CAAC,GAAG,OAAO,CAAC;AAClE,IAAI,iBAAiB,CAAC,iBAAiB,CAAC,WAAW,CAAC,GAAG,GAAG,CAAC,GAAG,WAAW,CAAC;AAC1E,IAAI,iBAAiB,CAAC,iBAAiB,CAAC,qBAAqB,CAAC,GAAG,GAAG,CAAC,GAAG,qBAAqB,CAAC;AAC9F,IAAI,iBAAiB,CAAC,iBAAiB,CAAC,eAAe,CAAC,GAAG,GAAG,CAAC,GAAG,eAAe,CAAC;AAClF,CAAC,EAAE,iBAAiB,KAAK,iBAAiB,GAAG,EAAE,CAAC,CAAC,CAAC;AAC3C,IAAI,iBAAiB,CAAC;AAC7B,CAAC,UAAU,iBAAiB,EAAE;AAC9B,IAAI,iBAAiB,CAAC,iBAAiB,CAAC,gBAAgB,CAAC,GAAG,GAAG,CAAC,GAAG,gBAAgB,CAAC;AACpF,IAAI,iBAAiB,CAAC,iBAAiB,CAAC,aAAa,CAAC,GAAG,GAAG,CAAC,GAAG,aAAa,CAAC;AAC9E,IAAI,iBAAiB,CAAC,iBAAiB,CAAC,cAAc,CAAC,GAAG,GAAG,CAAC,GAAG,cAAc,CAAC;AAChF,IAAI,iBAAiB,CAAC,iBAAiB,CAAC,eAAe,CAAC,GAAG,GAAG,CAAC,GAAG,eAAe,CAAC;AAClF,CAAC,EAAE,iBAAiB,KAAK,iBAAiB,GAAG,EAAE,CAAC,CAAC,CAAC;AAC3C,IAAI,QAAQ,CAAC;AACpB,CAAC,UAAU,QAAQ,EAAE;AACrB,IAAI,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,GAAG,QAAQ,CAAC;AAChD,IAAI,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC;AAC5C,IAAI,QAAQ,CAAC,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,GAAG,UAAU,CAAC;AACpD,CAAC,EAAE,QAAQ,KAAK,QAAQ,GAAG,EAAE,CAAC,CAAC,CAAC;AACzB,IAAI,MAAM,CAAC;AAClB,CAAC,UAAU,MAAM,EAAE;AACnB,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,GAAG,CAAC,GAAG,MAAM,CAAC;AAC1C,IAAI,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,GAAG,GAAG,CAAC,GAAG,YAAY,CAAC;AACtD,IAAI,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,GAAG,GAAG,CAAC,GAAG,UAAU,CAAC;AAClD,IAAI,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,GAAG,GAAG,CAAC,GAAG,YAAY,CAAC;AACtD,IAAI,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,GAAG,GAAG,CAAC,GAAG,cAAc,CAAC;AAC1D,CAAC,EAAE,MAAM,KAAK,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC;AACrB,IAAI,mBAAmB,CAAC;AAC/B,CAAC,UAAU,mBAAmB,EAAE;AAChC,IAAI,mBAAmB,CAAC,mBAAmB,CAAC,gBAAgB,CAAC,GAAG,IAAI,CAAC,GAAG,gBAAgB,CAAC;AACzF,IAAI,mBAAmB,CAAC,mBAAmB,CAAC,wBAAwB,CAAC,GAAG,IAAI,CAAC,GAAG,wBAAwB,CAAC;AACzG,IAAI,mBAAmB,CAAC,mBAAmB,CAAC,aAAa,CAAC,GAAG,IAAI,CAAC,GAAG,aAAa,CAAC;AACnF,IAAI,mBAAmB,CAAC,mBAAmB,CAAC,oCAAoC,CAAC,GAAG,IAAI,CAAC,GAAG,oCAAoC,CAAC;AACjI,IAAI,mBAAmB,CAAC,mBAAmB,CAAC,sCAAsC,CAAC,GAAG,IAAI,CAAC,GAAG,sCAAsC,CAAC;AACrI,IAAI,mBAAmB,CAAC,mBAAmB,CAAC,wCAAwC,CAAC,GAAG,IAAI,CAAC,GAAG,wCAAwC,CAAC;AACzI,IAAI,mBAAmB,CAAC,mBAAmB,CAAC,+CAA+C,CAAC,GAAG,IAAI,CAAC,GAAG,+CAA+C,CAAC;AACvJ,CAAC,EAAE,mBAAmB,KAAK,mBAAmB,GAAG,EAAE,CAAC,CAAC;;ACxC9C,MAAM,GAAG,GAAG,EAAE,CAAC;AACf,MAAM,GAAG,GAAG,GAAG,CAAC;AAKhB,SAAS,YAAY,CAAC,MAAM,EAAE,KAAK,EAAE;AAC5C;AACA,IAAI,IAAI,MAAM,IAAI,IAAI,IAAI,KAAK,IAAI,IAAI,EAAE;AACzC,QAAQ,OAAO,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;AAC9B,KAAK;AACL;AACA,IAAI,IAAI,MAAM,IAAI,IAAI,IAAI,KAAK,IAAI,IAAI,EAAE;AACzC,QAAQ,OAAO,eAAe,CAAC,MAAM,CAAC,CAAC;AACvC,KAAK;AACL;AACA,IAAI,IAAI,MAAM,IAAI,IAAI,IAAI,KAAK,IAAI,IAAI,EAAE;AACzC,QAAQ,OAAO,mBAAmB,CAAC,KAAK,CAAC,CAAC;AAC1C,KAAK;AACL,IAAI,OAAO,GAAG,CAAC,qBAAqB,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACzE,CAAC;AACD,SAAS,mBAAmB,CAAC,KAAK,EAAE;AACpC,IAAI,MAAM,MAAM,GAAG,EAAE,CAAC;AACtB,IAAI,MAAM,UAAU,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;AACvC,IAAI,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AAChD,QAAQ,MAAM,IAAI,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;AACnC,QAAQ,IAAI,IAAI,IAAI,GAAG,GAAG,CAAC,EAAE;AAC7B,YAAY,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC7B,YAAY,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,KAAK,CAAC,EAAE;AAC7C,gBAAgB,MAAM,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;AACrC,gBAAgB,MAAM;AACtB,aAAa;AACb,SAAS;AACT,aAAa;AACb,YAAY,MAAM,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC;AAClC,YAAY,MAAM;AAClB,SAAS;AACT,KAAK;AACL,IAAI,OAAO,GAAG,CAAC,MAAM,CAAC,CAAC;AACvB,CAAC;AACD,SAAS,eAAe,CAAC,MAAM,EAAE;AACjC,IAAI,MAAM,MAAM,GAAG,EAAE,CAAC;AACtB,IAAI,MAAM,WAAW,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC;AACzC,IAAI,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACjD,QAAQ,MAAM,IAAI,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;AACpC,QAAQ,IAAI,IAAI,KAAK,GAAG,GAAG,CAAC,EAAE;AAC9B,YAAY,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC9B,YAAY,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,KAAK,CAAC,EAAE;AAC9C,gBAAgB,MAAM,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;AACrC,gBAAgB,MAAM;AACtB,aAAa;AACb,SAAS;AACT,aAAa;AACb,YAAY,MAAM,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC;AAClC,YAAY,MAAM;AAClB,SAAS;AACT,KAAK;AACL,IAAI,OAAO,GAAG,CAAC,MAAM,CAAC,CAAC;AACvB,CAAC;AACD,SAAS,qBAAqB,CAAC,MAAM,EAAE,KAAK,EAAE;AAC9C,IAAI,IAAI,KAAK,GAAG,CAAC,CAAC;AAClB,IAAI,MAAM,MAAM,GAAG,EAAE,CAAC;AACtB,IAAI,OAAO,IAAI,EAAE;AACjB,QAAQ,MAAM,WAAW,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC;AACjD,QAAQ,MAAM,UAAU,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC;AAC/C,QAAQ,IAAI,WAAW,GAAG,UAAU,EAAE;AACtC,YAAY,MAAM,IAAI,KAAK,CAAC,CAAC,wCAAwC,EAAE,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;AAC9F,SAAS;AACT,QAAQ,IAAI,WAAW,KAAK,UAAU,EAAE;AACxC,YAAY,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;AACrC,YAAY,KAAK,EAAE,CAAC;AACpB,YAAY,SAAS;AACrB,SAAS;AACT,QAAQ,IAAI,UAAU,GAAG,WAAW,KAAK,CAAC,EAAE;AAC5C,YAAY,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;AACrC,YAAY,MAAM,CAAC,IAAI,CAAC,GAAG,qBAAqB,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;AAC/E,YAAY,MAAM;AAClB,SAAS;AACT,QAAQ,MAAM,GAAG,GAAG,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,UAAU,GAAG,WAAW,IAAI,CAAC,CAAC,CAAC;AAC7E,QAAQ,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACzB,QAAQ,MAAM;AACd,KAAK;AACL,IAAI,OAAO,MAAM,CAAC;AAClB,CAAC;AACM,SAAS,QAAQ,CAAC,GAAG,EAAE;AAC9B,IAAI,MAAM,KAAK,GAAG,EAAE,CAAC;AACrB,IAAI,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACzC,QAAQ,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;AACtC,KAAK;AACL,IAAI,OAAO,KAAK,CAAC;AACjB,CAAC;AACM,SAAS,GAAG,CAAC,KAAK,EAAE;AAC3B,IAAI,OAAO,MAAM,CAAC,YAAY,CAAC,GAAG,KAAK,CAAC,CAAC;AACzC,CAAC;AACM,SAAS,OAAO,CAAC,KAAK,EAAE,KAAK,EAAE;AACtC,IAAI,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;AAC5C,IAAI,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;AAC5C,IAAI,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;AAC7D,IAAI,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,EAAE,CAAC,EAAE,EAAE;AACxC,QAAQ,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,IAAI,IAAI,GAAG,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;AACtD,QAAQ,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,IAAI,IAAI,GAAG,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;AACtD,QAAQ,IAAI,CAAC,KAAK,CAAC,EAAE;AACrB,YAAY,SAAS;AACrB,SAAS;AACT,aAAa;AACb,YAAY,OAAO,CAAC,GAAG,CAAC,CAAC;AACzB,SAAS;AACT,KAAK;AACL,IAAI,MAAM,IAAI,KAAK,CAAC,CAAC,wCAAwC,EAAE,KAAK,CAAC,QAAQ,CAAC,OAAO,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;AAC1G;;AC3GA,MAAM,MAAM,GAAG,MAAM,CAAC,mBAAmB,CAAC,CAAC;AAC3C,MAAM,IAAI,GAAG,MAAM,CAAC,iBAAiB,CAAC,CAAC;AAChC,SAAS,YAAY,CAAC,EAAE,EAAE,IAAI,EAAE;AACvC,IAAI,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,IAAI,CAAC,CAAC;AACvD,CAAC;AACM,SAAS,UAAU,CAAC,EAAE,EAAE,KAAK,GAAG,EAAE,EAAE;AAC3C,IAAI,OAAO;AACX,QAAQ,EAAE;AACV,QAAQ,MAAM,EAAE,IAAI;AACpB,QAAQ,MAAM,EAAE,KAAK,CAAC,MAAM;AAC5B,QAAQ,OAAO,EAAE,MAAM,KAAK;AAC5B,QAAQ,GAAG,EAAE,CAAC,QAAQ,KAAK,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC;AAC9C,KAAK,CAAC;AACN,CAAC;AACD,SAAS,IAAI,GAAG,GAAG;AACZ,MAAM,GAAG,CAAC;AACjB,IAAI,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE;AACrC,QAAQ,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;AACzB,QAAQ,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;AAC7B,QAAQ,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;AAC3B,KAAK;AACL,IAAI,OAAO,KAAK,CAAC,EAAE,GAAG,MAAM,EAAE,IAAI,GAAG,IAAI,EAAE;AAC3C,QAAQ,MAAM,IAAI,GAAG;AACrB,YAAY,EAAE;AACd,YAAY,MAAM,EAAE,MAAM;AAC1B,SAAS,CAAC;AACV,QAAQ,OAAO,IAAI,GAAG,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,IAAI,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,GAAG,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC;AAC/E,KAAK;AACL,IAAI,OAAO,cAAc,CAAC,IAAI,EAAE,EAAE,GAAG,MAAM,EAAE,IAAI,GAAG,IAAI,EAAE;AAC1D,QAAQ,IAAI,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;AACtC,QAAQ,GAAG,GAAG,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;AAClD,QAAQ,OAAO,GAAG,CAAC;AACnB,KAAK;AACL,IAAI,OAAO,IAAI,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,EAAE;AACnC,QAAQ,IAAI,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;AAC3C,QAAQ,OAAO,GAAG,CAAC,QAAQ,CAAC;AAC5B,YAAY,IAAI,EAAE,MAAM,CAAC,YAAY;AACrC,YAAY,EAAE,EAAE,IAAI,CAAC,EAAE;AACvB,YAAY,IAAI,EAAE,IAAI,CAAC,IAAI;AAC3B,SAAS,CAAC,CAAC;AACX,KAAK;AACL,IAAI,IAAI,IAAI,GAAG;AACf,QAAQ,OAAO,IAAI,CAAC,IAAI,CAAC;AACzB,KAAK;AACL,IAAI,QAAQ,CAAC,EAAE,EAAE,UAAU,GAAG,KAAK,EAAE;AACrC,QAAQ,IAAI,UAAU,EAAE;AACxB,YAAY,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;AAC3B,SAAS;AACT,QAAQ,IAAI,EAAE,CAAC,EAAE,KAAK,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE;AACpC,YAAY,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;AAClE,YAAY,OAAO,IAAI,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;AAC1D,SAAS;AACT,aAAa;AACb,YAAY,MAAM,KAAK,GAAG,WAAW,CAAC,EAAE,CAAC,EAAE,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAC9E,YAAY,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,EAAE,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;AACrE,YAAY,OAAO,IAAI,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;AAC1D,SAAS;AACT,KAAK;AACL,IAAI,QAAQ,CAAC,EAAE,EAAE;AACjB,QAAQ,IAAI,EAAE,KAAK,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE;AACjC,YAAY,OAAO,IAAI,CAAC,IAAI,CAAC;AAC7B,SAAS;AACT,QAAQ,MAAM,QAAQ,GAAG,WAAW,CAAC,EAAE,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAC1E,QAAQ,OAAO,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;AAClE,KAAK;AACL,IAAI,YAAY,CAAC,EAAE,EAAE,SAAS,EAAE;AAChC,QAAQ,MAAM,aAAa,GAAG,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AAChD,QAAQ,IAAI,aAAa,IAAI,IAAI,EAAE;AACnC,YAAY,MAAM,IAAI,KAAK,CAAC,CAAC,gBAAgB,EAAE,EAAE,CAAC,gBAAgB,CAAC,CAAC,CAAC;AACrE,SAAS;AACT,QAAQ,IAAI,IAAI,GAAG,EAAE,CAAC;AACtB,QAAQ,KAAK,MAAM,GAAG,IAAI,SAAS,EAAE;AACrC,YAAY,MAAM,KAAK,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC;AACzC,YAAY,IAAI,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC;AACzC,SAAS;AACT,QAAQ,MAAM,EAAE,GAAG;AACnB,YAAY,EAAE,EAAE,aAAa,CAAC,EAAE;AAChC,YAAY,IAAI,EAAE,MAAM,CAAC,YAAY;AACrC,YAAY,IAAI;AAChB,SAAS,CAAC;AACV,QAAQ,OAAO,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;AACvC,KAAK;AACL,IAAI,QAAQ,CAAC,EAAE,EAAE,IAAI,EAAE;AACvB,QAAQ,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AACvC,QAAQ,IAAI,IAAI,IAAI,IAAI,EAAE;AAC1B,YAAY,MAAM,IAAI,KAAK,CAAC,CAAC,cAAc,EAAE,EAAE,CAAC,gBAAgB,CAAC,CAAC,CAAC;AACnE,SAAS;AACT,QAAQ,IAAI,IAAI,CAAC,MAAM,KAAK,IAAI,EAAE;AAClC,YAAY,MAAM,IAAI,KAAK,CAAC,CAAC,cAAc,EAAE,EAAE,CAAC,eAAe,CAAC,CAAC,CAAC;AAClE,SAAS;AACT,QAAQ,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;AAC7B,YAAY,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;AACvE,SAAS;AACT,QAAQ,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;AACrC,QAAQ,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;AAC/B,YAAY,OAAO,IAAI,CAAC,QAAQ,CAAC;AACjC,gBAAgB,IAAI,EAAE,MAAM,CAAC,UAAU;AACvC,gBAAgB,EAAE,EAAE,IAAI,CAAC,EAAE;AAC3B,gBAAgB,QAAQ,EAAE,YAAY,EAAE;AACxC,gBAAgB,IAAI;AACpB,aAAa,EAAE,IAAI,CAAC,CAAC;AACrB,SAAS;AACT,QAAQ,MAAM,KAAK,GAAG,eAAe,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC;AACrE,QAAQ,MAAM,CAAC,YAAY,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AACvD,QAAQ,MAAM,QAAQ,GAAG,YAAY,CAAC,YAAY,CAAC,CAAC;AACpD,QAAQ,MAAM,SAAS,GAAG;AAC1B,YAAY,IAAI,EAAE,MAAM,CAAC,UAAU;AACnC,YAAY,EAAE,EAAE,IAAI,CAAC,EAAE;AACvB,YAAY,QAAQ;AACpB,YAAY,IAAI;AAChB,SAAS,CAAC;AACV,QAAQ,OAAO,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;AAC9C,KAAK;AACL,IAAI,QAAQ,CAAC,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE;AACrC,QAAQ,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AACvC,QAAQ,IAAI,IAAI,IAAI,IAAI,EAAE;AAC1B,YAAY,MAAM,IAAI,KAAK,CAAC,CAAC,cAAc,EAAE,EAAE,CAAC,gBAAgB,CAAC,CAAC,CAAC;AACnE,SAAS;AACT,QAAQ,IAAI,IAAI,CAAC,MAAM,KAAK,IAAI,EAAE;AAClC,YAAY,MAAM,IAAI,KAAK,CAAC,CAAC,cAAc,EAAE,EAAE,CAAC,eAAe,CAAC,CAAC,CAAC;AAClE,SAAS;AACT,QAAQ,MAAM,KAAK,GAAG,eAAe,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC;AACrE,QAAQ,IAAI,WAAW,GAAG,CAAC,EAAE;AAC7B,YAAY,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;AACjE,SAAS;AACT,QAAQ,IAAI,WAAW,IAAI,KAAK,CAAC,MAAM,EAAE;AACzC,YAAY,MAAM,IAAI,KAAK,CAAC,6DAA6D,CAAC,CAAC;AAC3F,SAAS;AACT,QAAQ,IAAI,KAAK,GAAG,CAAC,EAAE;AACvB,YAAY,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;AAC3D,SAAS;AACT,QAAQ,IAAI,KAAK,IAAI,KAAK,CAAC,MAAM,EAAE;AACnC,YAAY,MAAM,IAAI,KAAK,CAAC,uDAAuD,CAAC,CAAC;AACrF,SAAS;AACT,QAAQ,IAAI,KAAK,KAAK,WAAW,EAAE;AACnC,YAAY,OAAO,IAAI,CAAC;AACxB,SAAS;AACT,QAAQ,IAAI,cAAc,GAAG,IAAI,CAAC;AAClC,QAAQ,IAAI,aAAa,GAAG,IAAI,CAAC;AACjC,QAAQ,IAAI,KAAK,GAAG,WAAW,EAAE;AACjC,YAAY,aAAa;AACzB,gBAAgB,WAAW,KAAK,KAAK,CAAC,MAAM,GAAG,CAAC;AAChD,sBAAsB,SAAS;AAC/B,sBAAsB,KAAK,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAChD,YAAY,cAAc,GAAG,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;AACnD,SAAS;AACT,aAAa;AACb,YAAY,aAAa,GAAG,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;AAClD,YAAY,cAAc;AAC1B,gBAAgB,WAAW,KAAK,CAAC,GAAG,SAAS,GAAG,KAAK,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC1E,SAAS;AACT,QAAQ,MAAM,QAAQ,GAAG,YAAY,CAAC,cAAc,EAAE,aAAa,CAAC,CAAC;AACrE,QAAQ,MAAM,GAAG,IAAI,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC;AACtC,QAAQ,OAAO,IAAI,CAAC,QAAQ,CAAC;AAC7B,YAAY,IAAI,EAAE,MAAM,CAAC,QAAQ;AACjC,YAAY,EAAE,EAAE,IAAI,CAAC,EAAE;AACvB,YAAY,MAAM,EAAE,IAAI,CAAC,EAAE;AAC3B,YAAY,QAAQ;AACpB,SAAS,EAAE,IAAI,CAAC,CAAC;AACjB,KAAK;AACL,IAAI,UAAU,CAAC,EAAE,EAAE,KAAK,EAAE;AAC1B,QAAQ,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AACvC,QAAQ,IAAI,IAAI,IAAI,IAAI,EAAE;AAC1B,YAAY,MAAM,IAAI,KAAK,CAAC,CAAC,cAAc,EAAE,EAAE,CAAC,gBAAgB,CAAC,CAAC,CAAC;AACnE,SAAS;AACT,QAAQ,IAAI,IAAI,CAAC,MAAM,KAAK,IAAI,EAAE;AAClC,YAAY,MAAM,IAAI,KAAK,CAAC,CAAC,cAAc,EAAE,EAAE,CAAC,eAAe,CAAC,CAAC,CAAC;AAClE,SAAS;AACT,QAAQ,MAAM,KAAK,GAAG,eAAe,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC;AACrE,QAAQ,MAAM,GAAG,IAAI,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC;AACtC,QAAQ,OAAO,IAAI,CAAC,QAAQ,CAAC;AAC7B,YAAY,IAAI,EAAE,MAAM,CAAC,UAAU;AACnC,YAAY,EAAE,EAAE,IAAI,CAAC,EAAE;AACvB,YAAY,MAAM,EAAE,IAAI,CAAC,EAAE;AAC3B,SAAS,EAAE,IAAI,CAAC,CAAC;AACjB,KAAK;AACL,IAAI,cAAc,CAAC,EAAE,EAAE,MAAM,EAAE;AAC/B,QAAQ,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AACvC,QAAQ,IAAI,IAAI,IAAI,IAAI,EAAE;AAC1B,YAAY,MAAM,IAAI,KAAK,CAAC,CAAC,cAAc,EAAE,EAAE,CAAC,gBAAgB,CAAC,CAAC,CAAC;AACnE,SAAS;AACT,QAAQ,IAAI,IAAI,CAAC,MAAM,KAAK,IAAI,EAAE;AAClC,YAAY,MAAM,IAAI,KAAK,CAAC,CAAC,cAAc,EAAE,EAAE,CAAC,eAAe,CAAC,CAAC,CAAC;AAClE,SAAS;AACT,QAAQ,MAAM,QAAQ,GAAG,YAAY,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;AACvD,QAAQ,IAAI,IAAI,GAAG,IAAI,CAAC;AACxB,QAAQ,KAAK,MAAM,GAAG,IAAI,CAAC,IAAI,QAAQ,EAAE;AACzC,YAAY,IAAI,IAAI,CAAC,EAAE,KAAK,MAAM,EAAE;AACpC,gBAAgB,IAAI,GAAG,IAAI,CAAC;AAC5B,gBAAgB,MAAM;AACtB,aAAa;AACb,SAAS;AACT,QAAQ,IAAI,IAAI,IAAI,IAAI,EAAE;AAC1B,YAAY,MAAM,IAAI,KAAK,CAAC,CAAC,cAAc,EAAE,EAAE,CAAC,iCAAiC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;AAC9F,SAAS;AACT,QAAQ,OAAO,IAAI,CAAC,QAAQ,CAAC;AAC7B,YAAY,IAAI,EAAE,MAAM,CAAC,UAAU;AACnC,YAAY,EAAE,EAAE,IAAI,CAAC,EAAE;AACvB,YAAY,MAAM,EAAE,IAAI,CAAC,EAAE;AAC3B,SAAS,EAAE,IAAI,CAAC,CAAC;AACjB,KAAK;AACL,CAAC;AACD,SAAS,WAAW,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE;AACxC,IAAI,IAAI,SAAS,GAAG,EAAE,CAAC;AACvB,IAAI,MAAM,MAAM,GAAG,EAAE,CAAC;AACtB,IAAI,GAAG;AACP,QAAQ,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;AAC1C,QAAQ,IAAI,IAAI,IAAI,IAAI,EAAE;AAC1B,YAAY,MAAM,IAAI,KAAK,CAAC,CAAC,wBAAwB,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;AACrE,SAAS;AACT,QAAQ,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC;AAClC,QAAQ,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,KAAK,QAAQ,SAAS,KAAK,MAAM,EAAE;AACnC,IAAI,OAAO,MAAM,CAAC;AAClB,CAAC;AACD,SAAS,eAAe,CAAC,UAAU,EAAE,KAAK,EAAE;AAC5C,IAAI,MAAM,SAAS,GAAG,IAAI,GAAG,EAAE,CAAC;AAChC,IAAI,KAAK,MAAM,QAAQ,IAAI,UAAU,CAAC,IAAI,EAAE;AAC5C,QAAQ,MAAM,IAAI,GAAG,WAAW,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,KAAK,CAAC,CAAC;AACnE,QAAQ,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;AAC7B,YAAY,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC;AACpC,SAAS;AACT,QAAQ,SAAS,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;AACtC,QAAQ,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,UAAU,CAAC,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,CAAC;AACnF,KAAK;AACL,IAAI,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC;AAClD,IAAI,OAAO,UAAU,CAAC,UAAU,CAAC,EAAE,EAAE,gBAAgB,CAAC,SAAS,CAAC,CAAC,CAAC;AAClE,CAAC;AACD,SAAS,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE;AACrC,IAAI,MAAM,KAAK,GAAG,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;AAC9C,IAAI,IAAI,KAAK,IAAI,IAAI,EAAE;AACvB,QAAQ,MAAM,IAAI,KAAK,CAAC,CAAC,8BAA8B,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;AACpE,KAAK;AACL,IAAI,OAAO,KAAK,CAAC;AACjB,CAAC;AACD,SAAS,iBAAiB,CAAC,UAAU,EAAE,KAAK,EAAE;AAC9C,IAAI,MAAM,MAAM,GAAG;AACnB,QAAQ,EAAE,EAAE,UAAU,CAAC,EAAE;AACzB,QAAQ,MAAM,EAAE,MAAM;AACtB,KAAK,CAAC;AACN,IAAI,KAAK,MAAM,GAAG,IAAI,UAAU,CAAC,IAAI,EAAE;AACvC,QAAQ,MAAM,IAAI,GAAG,WAAW,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC,CAAC;AAC9D,QAAQ,IAAI,MAAM,CAAC,IAAI,CAAC,EAAE;AAC1B,YAAY,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE;AACrC,gBAAgB,QAAQ,EAAE,UAAU,CAAC,EAAE;AACvC,gBAAgB,SAAS,EAAE,GAAG;AAC9B,aAAa,CAAC,CAAC;AACf,SAAS;AACT,QAAQ,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;AAC3B,KAAK;AACL,IAAI,OAAO,MAAM,CAAC;AAClB,CAAC;AACD,SAAS,WAAW,CAAC,UAAU,EAAE,KAAK,EAAE;AACxC,IAAI,QAAQ,UAAU,CAAC,IAAI;AAC3B,QAAQ,KAAK,QAAQ,CAAC,QAAQ,EAAE;AAChC,YAAY,OAAO,UAAU,CAAC,IAAI,CAAC;AACnC,SAAS;AACT,QAAQ,KAAK,QAAQ,CAAC,MAAM,EAAE;AAC9B,YAAY,OAAO,iBAAiB,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;AACxD,SAAS;AACT,QAAQ,KAAK,QAAQ,CAAC,IAAI,EAAE;AAC5B,YAAY,OAAO,eAAe,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;AACtD,SAAS;AACT,QAAQ,SAAS;AACjB,YAAY,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC;AACpC,SAAS;AACT,KAAK;AACL,CAAC;AACD,SAAS,gBAAgB,CAAC,MAAM,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE;AACpD,IAAI,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;AAC5B,QAAQ,IAAI,MAAM,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;AACjC,YAAY,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC;AACpC,SAAS;AACT,QAAQ,QAAQ,EAAE,CAAC,IAAI;AACvB,YAAY,KAAK,MAAM,CAAC,YAAY,EAAE;AACtC,gBAAgB,OAAO,YAAY,CAAC,MAAM,EAAE,EAAE,EAAE,KAAK,CAAC,CAAC;AACvD,aAAa;AACb,YAAY,SAAS;AACrB,gBAAgB,OAAO,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;AACtD,gBAAgB,OAAO,MAAM,CAAC;AAC9B,aAAa;AACb,SAAS;AACT,KAAK;AACL,IAAI,MAAM,WAAW,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC;AACpC,IAAI,MAAM,KAAK,GAAG,MAAM,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;AAChD,IAAI,MAAM,OAAO,GAAG,QAAQ,CAAC,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;AACtD,IAAI,OAAO,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC,SAAS,GAAG,OAAO,EAAE,CAAC,CAAC;AAC1F,CAAC;AACD,SAAS,cAAc,CAAC,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE;AAChD,IAAI,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;AAC5B,QAAQ,IAAI,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;AAC/B,YAAY,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC;AACpC,SAAS;AACT,QAAQ,QAAQ,EAAE,CAAC,IAAI;AACvB,YAAY,KAAK,MAAM,CAAC,UAAU,EAAE;AACpC,gBAAgB,OAAO,UAAU,CAAC,IAAI,EAAE,EAAE,EAAE,KAAK,CAAC,CAAC;AACnD,aAAa;AACb,YAAY,KAAK,MAAM,CAAC,QAAQ,EAAE;AAClC,gBAAgB,OAAO,QAAQ,CAAC,IAAI,EAAE,EAAE,EAAE,KAAK,CAAC,CAAC;AACjD,aAAa;AACb,YAAY,KAAK,MAAM,CAAC,UAAU,EAAE;AACpC,gBAAgB,OAAO,UAAU,CAAC,IAAI,EAAE,EAAE,EAAE,KAAK,CAAC,CAAC;AACnD,aAAa;AACb,YAAY,SAAS;AACrB,gBAAgB,OAAO,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;AACtD,gBAAgB,OAAO,IAAI,CAAC;AAC5B,aAAa;AACb,SAAS;AACT,KAAK;AACL,IAAI,MAAM,WAAW,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC;AACpC,IAAI,MAAM,QAAQ,GAAG,WAAW,CAAC,SAAS,CAAC;AAC3C,IAAI,MAAM,KAAK,GAAG,YAAY,CAAC,KAAK,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;AAC/C,IAAI,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;AACrC,IAAI,IAAI,IAAI,IAAI,IAAI,EAAE;AACtB,QAAQ,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC;AAChC,KAAK;AACL,IAAI,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;AACrD,IAAI,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;AACjC,IAAI,OAAO,UAAU,CAAC,IAAI,CAAC,EAAE,EAAE,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC;AACxD,CAAC;AACD,SAAS,QAAQ,CAAC,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE;AAC1C,IAAI,QAAQ,IAAI,CAAC,MAAM;AACvB,QAAQ,KAAK,MAAM;AACnB,YAAY,OAAO,gBAAgB,CAAC,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;AAC5D,QAAQ,KAAK,IAAI;AACjB,YAAY,OAAO,cAAc,CAAC,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;AAC1D,QAAQ,SAAS;AACjB,YAAY,MAAM,IAAI,KAAK,CAAC,cAAc,CAAC,CAAC;AAC5C,SAAS;AACT,KAAK;AACL,CAAC;AACD,SAAS,YAAY,CAAC,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE;AACvC,IAAI,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;AAC3C,IAAI,KAAK,MAAM,GAAG,IAAI,EAAE,CAAC,IAAI,EAAE;AAC/B,QAAQ,MAAM,KAAK,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACnC,QAAQ,MAAM,IAAI,GAAG,WAAW,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;AAC/C,QAAQ,IAAI,MAAM,CAAC,IAAI,CAAC,EAAE;AAC1B,YAAY,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,CAAC;AAC5E,SAAS;AACT,QAAQ,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;AAC3B,KAAK;AACL,IAAI,OAAO,MAAM,CAAC;AAClB,CAAC;AACD,SAAS,UAAU,CAAC,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE;AACrC,IAAI,MAAM,KAAK,GAAG,YAAY,CAAC,KAAK,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;AAC/C,IAAI,MAAM,IAAI,GAAG,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;AAC7C,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,EAAE;AACtB,QAAQ,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;AACrC,QAAQ,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC;AAChF,KAAK;AACL,IAAI,OAAO,UAAU,CAAC,IAAI,CAAC,EAAE,EAAE,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC;AACxD,CAAC;AACD,SAAS,QAAQ,CAAC,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE;AACnC,IAAI,MAAM,KAAK,GAAG,YAAY,CAAC,KAAK,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;AAC/C,IAAI,MAAM,IAAI,GAAG,cAAc,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC;AAClD,IAAI,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;AAC3C,IAAI,IAAI,IAAI,IAAI,IAAI,EAAE;AACtB,QAAQ,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC;AAChC,KAAK;AACL;AACA,IAAI,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;AACjC;AACA,IAAI,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;AACjC;AACA,IAAI,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC;AAC9E,IAAI,OAAO,UAAU,CAAC,IAAI,CAAC,EAAE,EAAE,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC;AACxD,CAAC;AACD,SAAS,cAAc,CAAC,KAAK,EAAE,EAAE,EAAE;AACnC,IAAI,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AACrC,IAAI,IAAI,IAAI,IAAI,IAAI,EAAE;AACtB,QAAQ,MAAM,IAAI,KAAK,CAAC,CAAC,yBAAyB,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AAC3D,KAAK;AACL,IAAI,OAAO,IAAI,CAAC;AAChB,CAAC;AACD,SAAS,UAAU,CAAC,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE;AACrC,IAAI,MAAM,KAAK,GAAG,YAAY,CAAC,KAAK,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;AAC/C,IAAI,MAAM,IAAI,GAAG,cAAc,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC;AAClD,IAAI,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;AACjC,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC;AAClC,IAAI,OAAO,UAAU,CAAC,IAAI,CAAC,EAAE,EAAE,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC;AACxD,CAAC;AACD,SAAS,gBAAgB,CAAC,KAAK,EAAE;AACjC,IAAI,OAAO,eAAe,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AAC3D,CAAC;AACD,SAAS,eAAe,CAAC,KAAK,EAAE;AAChC,IAAI,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAC3H,CAAC;AACD,SAAS,YAAY,CAAC,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE;AAC9C,IAAI,IAAI,WAAW,GAAG,IAAI,CAAC;AAC3B,IAAI,OAAO,WAAW,CAAC,EAAE,KAAK,EAAE,EAAE;AAClC,QAAQ,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC;AACjC,QAAQ,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,CAAC,QAAQ,KAAK,WAAW,CAAC,EAAE,EAAE;AAC9D,YAAY,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC;AACpC,SAAS;AACT,QAAQ,IAAI,WAAW,CAAC,MAAM,KAAK,MAAM,EAAE;AAC3C,YAAY,WAAW,GAAG,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;AACtD,SAAS;AACT,aAAa;AACb,YAAY,MAAM,SAAS,GAAG,YAAY,CAAC,KAAK,EAAE,WAAW,CAAC,EAAE,CAAC,CAAC;AAClE,YAAY,MAAM,IAAI,GAAG,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;AACvD,YAAY,IAAI,IAAI,IAAI,IAAI,EAAE;AAC9B,gBAAgB,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC;AACxC,aAAa;AACb,YAAY,WAAW,GAAG,IAAI,CAAC;AAC/B,SAAS;AACT,KAAK;AACL,IAAI,OAAO,WAAW,CAAC;AACvB,CAAC;AACD,SAAS,QAAQ,CAAC,KAAK,EAAE;AACzB,IAAI,OAAO,KAAK,IAAI,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,KAAK,MAAM,CAAC;AACjF,CAAC;AACD,SAAS,MAAM,CAAC,KAAK,EAAE;AACvB,IAAI,OAAO,KAAK,IAAI,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,KAAK,IAAI,CAAC;AAC/E,CAAC;AACD,SAAS,MAAM,CAAC,KAAK,EAAE;AACvB,IAAI,OAAO,QAAQ,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC;AAC5C,CAAC;AACD,SAAS,eAAe,CAAC,MAAM,EAAE;AACjC,IAAI,MAAM,cAAc,GAAG,EAAE,CAAC;AAC9B,IAAI,KAAK,MAAM,GAAG,IAAI,MAAM,EAAE;AAC9B,QAAQ,IAAI,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,QAAQ,EAAE;AAC9C,YAAY,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;AACtC,YAAY,cAAc,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC;AACnD,SAAS;AACT,KAAK;AACL,IAAI,OAAO;AACX,QAAQ,EAAE,EAAE,MAAM,CAAC,EAAE;AACrB,QAAQ,IAAI,EAAE,QAAQ,CAAC,MAAM;AAC7B,QAAQ,IAAI,EAAE,cAAc;AAC5B,KAAK,CAAC;AACN,CAAC;AACD,SAAS,aAAa,CAAC,IAAI,EAAE;AAC7B,IAAI,OAAO;AACX,QAAQ,EAAE,EAAE,IAAI,CAAC,EAAE;AACnB,QAAQ,IAAI,EAAE,QAAQ,CAAC,IAAI;AAC3B,QAAQ,IAAI,EAAE,EAAE;AAChB,KAAK,CAAC;AACN,CAAC;AACD,SAAS,SAAS,CAAC,KAAK,EAAE;AAC1B,IAAI,IAAI,QAAQ,CAAC,KAAK,CAAC,EAAE;AACzB,QAAQ,OAAO,eAAe,CAAC,KAAK,CAAC,CAAC;AACtC,KAAK;AACL,SAAS,IAAI,MAAM,CAAC,KAAK,CAAC,EAAE;AAC5B,QAAQ,OAAO,aAAa,CAAC,KAAK,CAAC,CAAC;AACpC,KAAK;AACL,SAAS;AACT,QAAQ,OAAO,EAAE,IAAI,EAAE,QAAQ,CAAC,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;AACxD,KAAK;AACL;;AClcO,IAAI,gBAAgB,CAAC;AAC5B,CAAC,UAAU,gBAAgB,EAAE;AAC7B,IAAI,gBAAgB,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,GAAG,gBAAgB,CAAC;AAChF,IAAI,gBAAgB,CAAC,gBAAgB,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,GAAG,SAAS,CAAC;AAClE,IAAI,gBAAgB,CAAC,gBAAgB,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,GAAG,QAAQ,CAAC;AAChE,CAAC,EAAE,gBAAgB,KAAK,gBAAgB,GAAG,EAAE,CAAC,CAAC;;ACLxC,SAAS,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE;AACpC,IAAI,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AAC3C,QAAQ,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE;AAC/B,YAAY,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAC/B,YAAY,MAAM;AAClB,SAAS;AACT,KAAK;AACL;;ACPA,IAAI,SAAS,GAAG,CAACA,SAAI,IAAIA,SAAI,CAAC,SAAS,KAAK,UAAU,OAAO,EAAE,UAAU,EAAE,CAAC,EAAE,SAAS,EAAE;AACzF,IAAI,SAAS,KAAK,CAAC,KAAK,EAAE,EAAE,OAAO,KAAK,YAAY,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,CAAC,UAAU,OAAO,EAAE,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE;AAChH,IAAI,OAAO,KAAK,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC,EAAE,UAAU,OAAO,EAAE,MAAM,EAAE;AAC/D,QAAQ,SAAS,SAAS,CAAC,KAAK,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE;AACnG,QAAQ,SAAS,QAAQ,CAAC,KAAK,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE;AACtG,QAAQ,SAAS,IAAI,CAAC,MAAM,EAAE,EAAE,MAAM,CAAC,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC,EAAE;AACtH,QAAQ,IAAI,CAAC,CAAC,SAAS,GAAG,SAAS,CAAC,KAAK,CAAC,OAAO,EAAE,UAAU,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;AAC9E,KAAK,CAAC,CAAC;AACP,CAAC,CAAC;AACF,SAAS,cAAc,CAAC,QAAQ,EAAE,IAAI,EAAE;AACxC,IAAI,OAAO,SAAS,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,KAAK,CAAC,EAAE,aAAa;AACxD,QAAQ,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,QAAQ,EAAE;AAC1C,YAAY,MAAM,EAAE,MAAM;AAC1B,YAAY,OAAO,EAAE;AACrB,gBAAgB,cAAc,EAAE,kBAAkB;AAClD,aAAa;AACb,YAAY,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;AACjC,gBAAgB,IAAI;AACpB,aAAa,CAAC;AACd,SAAS,CAAC,CAAC;AACX,QAAQ,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE;AACrB,YAAY,MAAM,IAAI,mBAAmB,CAAC,CAAC,sFAAsF,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;AAChJ,SAAS;AACT,QAAQ,IAAI,YAAY,GAAG,IAAI,CAAC;AAChC,QAAQ,IAAI;AACZ,YAAY,YAAY,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;AAC5C,SAAS;AACT,QAAQ,OAAO,EAAE,EAAE;AACnB,YAAY,MAAM,IAAI,mBAAmB,CAAC,CAAC,sFAAsF,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;AAChJ,SAAS;AACT,QAAQ,IAAI,OAAO,YAAY,CAAC,KAAK,KAAK,QAAQ,EAAE;AACpD,YAAY,MAAM,IAAI,mBAAmB,CAAC,CAAC,sFAAsF,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;AAChJ,SAAS;AACT,QAAQ,OAAO,YAAY,CAAC,KAAK,CAAC;AAClC,KAAK,CAAC,CAAC;AACP,CAAC;AACc,SAAS,IAAI,CAAC,QAAQ,EAAE,IAAI,EAAE;AAC7C,IAAI,OAAO,SAAS,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,KAAK,CAAC,EAAE,aAAa;AACxD,QAAQ,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE;AAC1C,YAAY,OAAO,cAAc,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;AAClD,SAAS;AACT,QAAQ,IAAI,OAAO,QAAQ,KAAK,UAAU,EAAE;AAC5C,YAAY,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC;AAClC,SAAS;AACT,QAAQ,MAAM,IAAI,KAAK,CAAC,+FAA+F,CAAC,CAAC;AACzH,KAAK,CAAC,CAAC;AACP,CAAC;AACD,MAAM,mBAAmB,SAAS,KAAK,CAAC;AACxC,IAAI,WAAW,CAAC,OAAO,EAAE;AACzB,QAAQ,KAAK,CAAC,OAAO,CAAC,CAAC;AACvB,KAAK;AACL,CAAC;AACM,SAAS,UAAU,CAAC,KAAK,EAAE;AAClC,IAAI,MAAM,UAAU,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AACxC,IAAI,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE;AACjC,QAAQ,MAAM,IAAI,mBAAmB,CAAC,CAAC,6FAA6F,CAAC,CAAC,CAAC;AACvI,KAAK;AACL,IAAI,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACjD,IAAI,IAAI,OAAO,IAAI,CAAC,KAAK,KAAK,QAAQ,EAAE;AACxC,QAAQ,MAAM,IAAI,mBAAmB,CAAC,CAAC,6FAA6F,CAAC,CAAC,CAAC;AACvI,KAAK;AACL,IAAI,OAAO,IAAI,CAAC;AAChB;;AC9DA,IAAIC,WAAS,GAAG,CAACD,SAAI,IAAIA,SAAI,CAAC,SAAS,KAAK,UAAU,OAAO,EAAE,UAAU,EAAE,CAAC,EAAE,SAAS,EAAE;AACzF,IAAI,SAAS,KAAK,CAAC,KAAK,EAAE,EAAE,OAAO,KAAK,YAAY,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,CAAC,UAAU,OAAO,EAAE,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE;AAChH,IAAI,OAAO,KAAK,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC,EAAE,UAAU,OAAO,EAAE,MAAM,EAAE;AAC/D,QAAQ,SAAS,SAAS,CAAC,KAAK,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE;AACnG,QAAQ,SAAS,QAAQ,CAAC,KAAK,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE;AACtG,QAAQ,SAAS,IAAI,CAAC,MAAM,EAAE,EAAE,MAAM,CAAC,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC,EAAE;AACtH,QAAQ,IAAI,CAAC,CAAC,SAAS,GAAG,SAAS,CAAC,KAAK,CAAC,OAAO,EAAE,UAAU,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;AAC9E,KAAK,CAAC,CAAC;AACP,CAAC,CAAC;AAOF,MAAM,oBAAoB,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;AACvE,MAAM,kBAAkB,GAAG,KAAK,CAAC;AACjC;AACA,MAAM,YAAY,GAAG,IAAI,CAAC;AAC1B,SAAS,oBAAoB,CAAC,KAAK,EAAE;AACrC,IAAI,QAAQ,KAAK,KAAK,SAAS;AAC/B,QAAQ,KAAK,KAAK,aAAa;AAC/B,QAAQ,KAAK,KAAK,QAAQ;AAC1B,QAAQ,KAAK,KAAK,OAAO;AACzB,QAAQ,KAAK,KAAK,OAAO;AACzB,QAAQ,KAAK,KAAK,YAAY,EAAE;AAChC,CAAC;AACD,SAAS,aAAa,CAAC,YAAY,EAAE;AACrC,IAAI,IAAI,KAAK,GAAG,CAAC,CAAC;AAClB,IAAI,OAAO,MAAM,CAAC,EAAE,YAAY,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;AAC9C,CAAC;AACD,SAAS,UAAU,CAAC,WAAW,EAAE;AACjC,IAAI,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;AAC7C,IAAI,OAAO;AACX,QAAQ,IAAI,KAAK,GAAG;AACpB,YAAY,OAAO,KAAK,CAAC,MAAM,CAAC;AAChC,SAAS;AACT,QAAQ,GAAG,CAAC,QAAQ,EAAE;AACtB,YAAY,OAAO,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;AACvC,SAAS;AACT,QAAQ,OAAO,GAAG;AAClB,YAAY,OAAO,KAAK,CAAC;AACzB,SAAS;AACT,KAAK,CAAC;AACN,CAAC;AAKM,SAAS,gBAAgB,CAAC,KAAK,EAAE,OAAO,EAAE,aAAa,EAAE;AAChE,IAAI,MAAM,OAAO,GAAG,aAAa,IAAI;AACrC,QAAQ,YAAY,GAAG;AACvB,YAAY,OAAOC,WAAS,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,KAAK,CAAC,EAAE,aAAa;AAChE,gBAAgB,IAAI;AACpB,oBAAoB,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;AACjF,oBAAoB,MAAM,WAAW,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;AAC1D,oBAAoB,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC,CAAC,EAAE,OAAO,CAAC,gBAAgB,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;AAChG,oBAAoB,MAAM,CAAC,gBAAgB,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;AAClE,oBAAoB,MAAM,CAAC,gBAAgB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAC5D,oBAAoB,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;AAC9D,oBAAoB,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;AAC9D,oBAAoB,qBAAqB,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;AAC/D,iBAAiB;AACjB,gBAAgB,OAAO,EAAE,EAAE;AAC3B,oBAAoB,qBAAqB,CAAC,EAAE,CAAC,CAAC;AAC9C,iBAAiB;AACjB,aAAa,CAAC,CAAC;AACf,SAAS;AACT,QAAQ,IAAI,CAAC,iBAAiB,EAAE;AAChC,YAAY,IAAI,KAAK,CAAC,MAAM,IAAI,IAAI,EAAE;AACtC,gBAAgB,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;AACxE,aAAa;AACb,YAAY,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC,CAAC;AACjE,SAAS;AACT,QAAQ,UAAU,CAAC,KAAK,EAAE;AAC1B,YAAY,OAAO,UAAU,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;AAClD,SAAS;AACT,QAAQ,sBAAsB,GAAG;AACjC,YAAY,OAAO,WAAW,CAAC,SAAS,EAAE,kBAAkB,CAAC,CAAC;AAC9D,SAAS;AACT,QAAQ,mBAAmB,GAAG;AAC9B,YAAY,OAAO,UAAU,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;AACzD,SAAS;AACT,QAAQ,iBAAiB,CAAC,KAAK,EAAE;AACjC,YAAY,OAAO,UAAU,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;AAC9C,SAAS;AACT,KAAK,CAAC;AACN,IAAI,SAAS,SAAS,CAAC,IAAI,EAAE,QAAQ,EAAE;AACvC,QAAQ,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,EAAE;AACzC,YAAY,MAAM,IAAI,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,2BAA2B,CAAC,CAAC,CAAC;AACnE,SAAS;AACT,QAAQ,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAC7C,KAAK;AACL,IAAI,SAAS,WAAW,CAAC,KAAK,EAAE,QAAQ,EAAE;AAC1C,QAAQ,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,EAAE;AAC1C,YAAY,MAAM,IAAI,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,2BAA2B,CAAC,CAAC,CAAC;AACpE,SAAS;AACT,QAAQ,MAAM,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;AACjD,QAAQ,MAAM,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;AACpC,KAAK;AACL,IAAI,SAAS,kBAAkB,GAAG;AAClC,QAAQ,OAAO,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC;AACtC,KAAK;AACL,IAAI,SAAS,cAAc,GAAG;AAC9B,QAAQ,OAAO,KAAK,CAAC,UAAU,CAAC,KAAK,KAAK,MAAM;AAChD,YAAY,KAAK,CAAC,UAAU,CAAC,KAAK,KAAK,YAAY;AACnD,cAAc;AACd,gBAAgB,YAAY,EAAE,KAAK,CAAC,UAAU,CAAC,EAAE;AACjD,gBAAgB,EAAE,EAAE,KAAK,CAAC,UAAU,CAAC,MAAM;AAC3C,gBAAgB,IAAI,EAAE,KAAK,CAAC,UAAU,CAAC,QAAQ;AAC/C,gBAAgB,QAAQ,EAAE,WAAW,EAAE;AACvC,aAAa;AACb,cAAc,IAAI,CAAC;AACnB,KAAK;AACL,IAAI,SAAS,OAAO,GAAG;AACvB,QAAQ,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE;AAC3C,YAAY,OAAO;AACnB,SAAS;AACT,QAAQ,IAAI,KAAK,CAAC,UAAU,CAAC,KAAK,KAAK,QAAQ;AAC/C,YAAY,KAAK,CAAC,UAAU,CAAC,KAAK,KAAK,aAAa,EAAE;AACtD,YAAY,OAAO,IAAI,CAAC;AACxB,SAAS;AACT,QAAQ,gBAAgB,CAAC,EAAE,KAAK,EAAE,gBAAgB,EAAE,CAAC,CAAC;AACtD,QAAQ,OAAO,CAAC,YAAY,EAAE,CAAC;AAC/B,KAAK;AACL,IAAI,SAAS,cAAc,CAAC,SAAS,EAAE;AACvC,QAAQ,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,KAAK,CAAC,EAAE,CAAC,EAAE,SAAS,CAAC,CAAC;AAClF,QAAQ,IAAI,KAAK,CAAC,SAAS,CAAC,QAAQ,IAAI,IAAI,EAAE;AAC9C,YAAY,KAAK,CAAC,SAAS,CAAC,QAAQ,GAAG,SAAS,CAAC;AACjD,SAAS;AACT,aAAa;AACb,YAAY,KAAK,MAAM,GAAG,IAAI,SAAS,EAAE;AACzC,gBAAgB,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC;AAC/D,aAAa;AACb,SAAS;AACT,QAAQ,KAAK,CAAC,EAAE,GAAG,WAAW,CAAC;AAC/B,QAAQ,WAAW,EAAE,CAAC;AACtB,QAAQ,KAAK,MAAM,QAAQ,IAAI,KAAK,CAAC,SAAS,CAAC,aAAa,CAAC,EAAE;AAC/D,YAAY,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;AAC/B,SAAS;AACT,KAAK;AACL,IAAI,SAAS,qBAAqB,CAAC,KAAK,EAAE,MAAM,EAAE;AAClD,QAAQ,gBAAgB,CAAC;AACzB,YAAY,KAAK,EAAE,YAAY;AAC/B,YAAY,EAAE,EAAE,KAAK,CAAC,KAAK;AAC3B,YAAY,QAAQ,EAAE,KAAK,CAAC,IAAI;AAChC,YAAY,MAAM,EAAE,KAAK,CAAC,EAAE;AAC5B,SAAS,CAAC,CAAC;AACX,QAAQ,KAAK,CAAC,SAAS,GAAG,aAAa,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AACrD,QAAQ,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC;AAC9B,KAAK;AACL,IAAI,SAAS,qBAAqB,CAAC,KAAK,EAAE;AAC1C,QAAQ,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AAC7B,QAAQ,gBAAgB,CAAC,EAAE,KAAK,EAAE,aAAa,EAAE,CAAC,CAAC;AACnD,QAAQ,KAAK,CAAC,aAAa,EAAE,CAAC;AAC9B,QAAQ,KAAK,CAAC,cAAc,CAAC,SAAS,GAAG,OAAO,CAAC,iBAAiB,CAAC,aAAa,EAAE,CAAC,CAAC;AACpF,KAAK;AACL,IAAI,SAAS,kBAAkB,CAAC,eAAe,EAAE;AACjD,QAAQ,IAAI,eAAe,KAAK,SAAS,IAAI,KAAK,CAAC,UAAU,CAAC,KAAK,KAAK,MAAM,EAAE;AAEhF,YAAY,SAAS,EAAE,CAAC;AACxB,SAAS;AACT,KAAK;AACL,IAAI,SAAS,uBAAuB,CAAC,OAAO,EAAE;AAC9C,QAAQ,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAChD,QAAQ,IAAI,IAAI,IAAI,IAAI,EAAE;AAC1B,YAAY,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG;AACzC,gBAAgB,YAAY,EAAE,OAAO,CAAC,KAAK;AAC3C,gBAAgB,QAAQ,EAAE,OAAO,CAAC,IAAI;AACtC,aAAa,CAAC;AACd,SAAS;AACT,aAAa;AACb,YAAY,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG;AACzC,gBAAgB,EAAE,EAAE,IAAI,CAAC,EAAE;AAC3B,gBAAgB,IAAI,EAAE,IAAI,CAAC,IAAI;AAC/B,gBAAgB,YAAY,EAAE,OAAO,CAAC,KAAK;AAC3C,gBAAgB,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC;AACvF,aAAa,CAAC;AACd,SAAS;AACT,QAAQ,WAAW,CAAC;AACpB,YAAY,IAAI,EAAE,QAAQ;AAC1B,YAAY,OAAO,EAAE,OAAO,CAAC,IAAI;AACjC,YAAY,IAAI,EAAE,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;AAC5C,SAAS,CAAC,CAAC;AACX,KAAK;AACL,IAAI,SAAS,WAAW,CAAC,KAAK,EAAE;AAChC,QAAQ,KAAK,CAAC,MAAM,GAAG,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AAC/C,QAAQ,KAAK,MAAM,QAAQ,IAAI,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE;AAC1D,YAAY,QAAQ,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;AAC1C,SAAS;AACT,KAAK;AACL,IAAI,SAAS,iBAAiB,CAAC,OAAO,EAAE;AACxC,QAAQ,MAAM,eAAe,GAAG,OAAO,CAAC;AACxC,QAAQ,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;AACxD,QAAQ,IAAI,IAAI,EAAE;AAClB,YAAY,OAAO,KAAK,CAAC,KAAK,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;AACtD,YAAY,WAAW,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;AACjD,SAAS;AACT,KAAK;AACL,IAAI,SAAS,kBAAkB,CAAC,OAAO,EAAE;AACzC,QAAQ,MAAM,QAAQ,GAAG,EAAE,CAAC;AAC5B,QAAQ,KAAK,MAAM,GAAG,IAAI,OAAO,CAAC,KAAK,EAAE;AACzC,YAAY,MAAM,YAAY,GAAG,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;AACtD,YAAY,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AAC5C,YAAY,QAAQ,CAAC,YAAY,CAAC,GAAG;AACrC,gBAAgB,YAAY;AAC5B,gBAAgB,IAAI,EAAE,IAAI,CAAC,IAAI;AAC/B,gBAAgB,EAAE,EAAE,IAAI,CAAC,EAAE;AAC3B,aAAa,CAAC;AACd,SAAS;AACT,QAAQ,KAAK,CAAC,KAAK,GAAG,QAAQ,CAAC;AAC/B,QAAQ,WAAW,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;AACvC,KAAK;AACL,IAAI,SAAS,iBAAiB,GAAG;AACjC,QAAQ,IAAI,KAAK,CAAC,UAAU,CAAC,KAAK,KAAK,aAAa,EAAE;AAEtD,YAAY,SAAS,EAAE,CAAC;AACxB,SAAS;AACT,KAAK;AACL,IAAI,SAAS,OAAO,CAAC,OAAO,EAAE;AAC9B,QAAQ,KAAK,MAAM,QAAQ,IAAI,KAAK,CAAC,SAAS,CAAC,KAAK,EAAE;AACtD,YAAY,QAAQ,CAAC,EAAE,YAAY,EAAE,OAAO,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;AAC5E,SAAS;AACT,KAAK;AACL,IAAI,SAAS,mBAAmB,CAAC,OAAO,EAAE;AAC1C,QAAQ,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG;AACrC,YAAY,YAAY,EAAE,OAAO,CAAC,KAAK;AACvC,YAAY,IAAI,EAAE,OAAO,CAAC,IAAI;AAC9B,YAAY,EAAE,EAAE,OAAO,CAAC,EAAE;AAC1B,SAAS,CAAC;AACV,QAAQ,WAAW,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;AACzE,QAAQ,IAAI,KAAK,CAAC,EAAE,EAAE;AACtB;AACA;AACA,YAAY,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC;AAC1C,gBAAgB,IAAI,EAAE,iBAAiB,CAAC,cAAc;AACtD,gBAAgB,IAAI,EAAE,KAAK,CAAC,EAAE;AAC9B,gBAAgB,WAAW,EAAE,OAAO,CAAC,KAAK;AAC1C,aAAa,CAAC,CAAC;AACf,YAAY,WAAW,EAAE,CAAC;AAC1B,SAAS;AACT,KAAK;AACL,IAAI,SAAS,SAAS,CAAC,KAAK,EAAE;AAC9B,QAAQ,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,EAAE;AACnC,YAAY,YAAY,CAAC,KAAK,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC;AAC3D,YAAY,OAAO;AACnB,SAAS;AACT,QAAQ,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AAC/C,QAAQ,QAAQ,OAAO,CAAC,IAAI;AAC5B,YAAY,KAAK,iBAAiB,CAAC,mBAAmB,EAAE;AACxD,gBAAgB,qBAAqB,CAAC,OAAO,CAAC,CAAC;AAC/C,gBAAgB,MAAM;AACtB,aAAa;AACb,YAAY,KAAK,iBAAiB,CAAC,aAAa,EAAE;AAClD,gBAAgB,gBAAgB,CAAC,OAAO,CAAC,CAAC;AAC1C,gBAAgB,MAAM;AACtB,aAAa;AACb,YAAY,KAAK,iBAAiB,CAAC,UAAU,EAAE;AAC/C,gBAAgB,mBAAmB,CAAC,OAAO,CAAC,CAAC;AAC7C,gBAAgB,MAAM;AACtB,aAAa;AACb,YAAY,KAAK,iBAAiB,CAAC,cAAc,EAAE;AACnD,gBAAgB,uBAAuB,CAAC,OAAO,CAAC,CAAC;AACjD,gBAAgB,MAAM;AACtB,aAAa;AACb,YAAY,KAAK,iBAAiB,CAAC,KAAK,EAAE;AAC1C,gBAAgB,OAAO,CAAC,OAAO,CAAC,CAAC;AACjC,gBAAgB,MAAM;AACtB,aAAa;AACb,YAAY,KAAK,iBAAiB,CAAC,QAAQ,EAAE;AAC7C,gBAAgB,iBAAiB,CAAC,OAAO,CAAC,CAAC;AAC3C,gBAAgB,MAAM;AACtB,aAAa;AACb,YAAY,KAAK,iBAAiB,CAAC,SAAS,EAAE;AAC9C,gBAAgB,kBAAkB,CAAC,OAAO,CAAC,CAAC;AAC5C,gBAAgB,MAAM;AACtB,aAAa;AACb,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,SAAS,OAAO,CAAC,KAAK,EAAE;AAC5B,QAAQ,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC;AAC5B,QAAQ,YAAY,CAAC,KAAK,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC;AACvD,QAAQ,aAAa,CAAC,KAAK,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC;AACvD,QAAQ,IAAI,KAAK,CAAC,cAAc,CAAC,KAAK,EAAE;AACxC,YAAY,YAAY,CAAC,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;AACrD,SAAS;AACT,QAAQ,YAAY,CAAC,KAAK,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;AACrD,QAAQ,KAAK,CAAC,KAAK,GAAG,EAAE,CAAC;AACzB,QAAQ,WAAW,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;AACvC,QAAQ,IAAI,KAAK,CAAC,IAAI,IAAI,IAAI,IAAI,KAAK,CAAC,IAAI,IAAI,IAAI,EAAE;AACtD,YAAY,gBAAgB,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;AAClD,YAAY,MAAM,KAAK,GAAG,IAAI,eAAe,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;AACxE,YAAY,KAAK,MAAM,QAAQ,IAAI,KAAK,CAAC,SAAS,CAAC,KAAK,EAAE;AAC1D,gBAAgB,QAAQ,CAAC,KAAK,CAAC,CAAC;AAChC,aAAa;AACb,SAAS;AACT,aAAa,IAAI,KAAK,CAAC,QAAQ,KAAK,KAAK,EAAE;AAC3C,YAAY,gBAAgB,CAAC,EAAE,KAAK,EAAE,aAAa,EAAE,CAAC,CAAC;AACvD,YAAY,KAAK,CAAC,aAAa,EAAE,CAAC;AAClC,YAAY,KAAK,CAAC,cAAc,CAAC,SAAS,GAAG,OAAO,CAAC,iBAAiB,CAAC,aAAa,EAAE,CAAC,CAAC;AACxF,SAAS;AACT,aAAa;AACb,YAAY,gBAAgB,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;AAClD,SAAS;AACT,KAAK;AACL,IAAI,SAAS,gBAAgB,CAAC,UAAU,EAAE;AAC1C,QAAQ,KAAK,CAAC,UAAU,GAAG,UAAU,CAAC;AACtC,QAAQ,KAAK,MAAM,QAAQ,IAAI,KAAK,CAAC,SAAS,CAAC,UAAU,EAAE;AAC3D,YAAY,QAAQ,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;AACvC,SAAS;AACT,KAAK;AACL,IAAI,SAAS,aAAa,GAAG;AAC7B,QAAQ,OAAO,oBAAoB,CAAC,KAAK,CAAC,aAAa,GAAG,oBAAoB,CAAC,MAAM;AACrF,cAAc,KAAK,CAAC,aAAa;AACjC,cAAc,oBAAoB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AAC/C,KAAK;AACL,IAAI,SAAS,OAAO,GAAG,GAAG;AAC1B,IAAI,SAAS,MAAM,GAAG;AACtB,QAAQ,aAAa,CAAC,KAAK,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC;AACvD,QAAQ,KAAK,CAAC,eAAe,CAAC,SAAS,GAAG,OAAO,CAAC,sBAAsB,EAAE,CAAC;AAC3E,QAAQ,IAAI,KAAK,CAAC,UAAU,CAAC,KAAK,KAAK,YAAY,EAAE;AACrD,YAAY,gBAAgB,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,KAAK,CAAC,UAAU,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;AACpG,YAAY,KAAK,CAAC,aAAa,GAAG,CAAC,CAAC;AACpC,YAAY,WAAW,EAAE,CAAC;AAC1B,SAGS;AACT,KAAK;AACL,IAAI,SAAS,SAAS,GAAG;AACzB,QAAQ,IAAI,KAAK,CAAC,MAAM,IAAI,IAAI,EAAE;AAClC;AACA,YAAY,OAAO;AACnB,SAAS;AACT,QAAQ,YAAY,CAAC,KAAK,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC;AACvD,QAAQ,KAAK,CAAC,cAAc,CAAC,WAAW,GAAG,OAAO,CAAC,mBAAmB,EAAE,CAAC;AACzE,QAAQ,IAAI,KAAK,CAAC,MAAM,CAAC,UAAU,KAAK,SAAS,CAAC,IAAI,EAAE;AACxD,YAAY,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AACtC,SAAS;AACT,KAAK;AACL,IAAI,SAAS,WAAW,GAAG;AAE3B,QAAQ,SAAS,EAAE,CAAC;AACpB,KAAK;AACL,IAAI,SAAS,SAAS,GAAG;AACzB,QAAQ,IAAI,KAAK,CAAC,MAAM,EAAE;AAC1B,YAAY,KAAK,CAAC,MAAM,CAAC,mBAAmB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAC7D,YAAY,KAAK,CAAC,MAAM,CAAC,mBAAmB,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;AACnE,YAAY,KAAK,CAAC,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;AAC/D,YAAY,KAAK,CAAC,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;AAC/D,YAAY,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;AACjC,YAAY,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC;AAChC,SAAS;AACT,QAAQ,gBAAgB,CAAC,EAAE,KAAK,EAAE,aAAa,EAAE,CAAC,CAAC;AACnD,QAAQ,YAAY,CAAC,KAAK,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC;AACvD,QAAQ,IAAI,KAAK,CAAC,cAAc,CAAC,KAAK,EAAE;AACxC,YAAY,YAAY,CAAC,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;AACrD,SAAS;AACT,QAAQ,YAAY,CAAC,KAAK,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;AACrD,QAAQ,aAAa,CAAC,KAAK,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC;AACvD,QAAQ,OAAO,EAAE,CAAC;AAClB,KAAK;AACL,IAAI,SAAS,WAAW,GAAG;AAC3B,QAAQ,IAAI,KAAK,CAAC,MAAM,IAAI,IAAI,EAAE;AAClC,YAAY,OAAO;AACnB,SAAS;AACT,QAAQ,IAAI,KAAK,CAAC,MAAM,CAAC,UAAU,KAAK,SAAS,CAAC,IAAI,EAAE;AACxD,YAAY,OAAO;AACnB,SAAS;AACT,QAAQ,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;AAC/B,QAAQ,MAAM,WAAW,GAAG,GAAG,GAAG,KAAK,CAAC,aAAa,CAAC;AACtD,QAAQ,IAAI,WAAW,GAAG,OAAO,CAAC,aAAa,EAAE;AACjD,YAAY,MAAM,QAAQ,GAAG,mBAAmB,CAAC,KAAK,CAAC,CAAC;AACxD,YAAY,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE;AACvC,gBAAgB,OAAO;AACvB,aAAa;AACb,YAAY,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AACnC,YAAY,KAAK,CAAC,SAAS,GAAG;AAC9B,gBAAgB,QAAQ,EAAE,EAAE;AAC5B,gBAAgB,iBAAiB,EAAE,EAAE;AACrC,gBAAgB,QAAQ,EAAE,IAAI;AAC9B,aAAa,CAAC;AACd,YAAY,KAAK,CAAC,aAAa,GAAG,GAAG,CAAC;AACtC,SAAS;AACT,aAAa;AACb,YAAY,IAAI,KAAK,CAAC,cAAc,CAAC,KAAK,IAAI,IAAI,EAAE;AACpD,gBAAgB,YAAY,CAAC,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;AACzD,aAAa;AACb,YAAY,KAAK,CAAC,cAAc,CAAC,KAAK,GAAG,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,aAAa,IAAI,GAAG,GAAG,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC;AACjH,SAAS;AACT,KAAK;AACL,IAAI,SAAS,mBAAmB,CAAC,KAAK,EAAE;AACxC,QAAQ,MAAM,QAAQ,GAAG,EAAE,CAAC;AAC5B,QAAQ,IAAI,KAAK,CAAC,SAAS,CAAC,QAAQ,EAAE;AACtC,YAAY,QAAQ,CAAC,IAAI,CAAC;AAC1B,gBAAgB,IAAI,EAAE,iBAAiB,CAAC,cAAc;AACtD,gBAAgB,IAAI,EAAE,KAAK,CAAC,SAAS,CAAC,QAAQ;AAC9C,aAAa,CAAC,CAAC;AACf,SAAS;AACT,QAAQ,KAAK,MAAM,KAAK,IAAI,KAAK,CAAC,SAAS,CAAC,QAAQ,EAAE;AACtD,YAAY,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACjC,SAAS;AACT,QAAQ,IAAI,KAAK,CAAC,SAAS,CAAC,iBAAiB,CAAC,MAAM,GAAG,CAAC,EAAE;AAC1D,YAAY,QAAQ,CAAC,IAAI,CAAC;AAC1B,gBAAgB,IAAI,EAAE,iBAAiB,CAAC,aAAa;AACrD,gBAAgB,GAAG,EAAE,KAAK,CAAC,SAAS,CAAC,iBAAiB;AACtD,aAAa,CAAC,CAAC;AACf,SAAS;AACT,QAAQ,OAAO,QAAQ,CAAC;AACxB,KAAK;AACL,IAAI,SAAS,UAAU,GAAG;AAC1B,QAAQ,IAAI,KAAK,CAAC,MAAM,EAAE;AAC1B,YAAY,KAAK,CAAC,MAAM,CAAC,mBAAmB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAC7D,YAAY,KAAK,CAAC,MAAM,CAAC,mBAAmB,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;AACnE,YAAY,KAAK,CAAC,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;AAC/D,YAAY,KAAK,CAAC,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;AAC/D,YAAY,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;AACjC,YAAY,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC;AAChC,SAAS;AACT,QAAQ,gBAAgB,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;AAC9C,QAAQ,IAAI,KAAK,CAAC,cAAc,CAAC,KAAK,EAAE;AACxC,YAAY,YAAY,CAAC,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;AACrD,SAAS;AACT,QAAQ,YAAY,CAAC,KAAK,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;AACrD,QAAQ,YAAY,CAAC,KAAK,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC;AACvD,QAAQ,aAAa,CAAC,KAAK,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC;AACvD,QAAQ,KAAK,CAAC,KAAK,GAAG,EAAE,CAAC;AACzB,QAAQ,WAAW,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;AACvC,QAAQ,cAAc,EAAE,CAAC;AACzB,KAAK;AACL,IAAI,SAAS,cAAc,GAAG;AAC9B,QAAQ,KAAK,MAAM,GAAG,IAAI,KAAK,CAAC,SAAS,EAAE;AAC3C,YAAY,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC;AACtC,SAAS;AACT,KAAK;AACL,IAAI,SAAS,WAAW,GAAG;AAC3B,QAAQ,OAAO,KAAK,CAAC,EAAE,CAAC;AACxB,KAAK;AACL,IAAI,SAAS,SAAS,GAAG;AACzB,QAAQ,OAAO,KAAK,CAAC,MAAM,CAAC;AAC5B,KAAK;AACL,IAAI,SAAS,cAAc,CAAC,KAAK,EAAE;AACnC,QAAQ,IAAI,KAAK,CAAC,MAAM,IAAI,IAAI,EAAE;AAClC,YAAY,OAAO;AACnB,SAAS;AACT,QAAQ,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC;AACtC,YAAY,IAAI,EAAE,iBAAiB,CAAC,WAAW;AAC/C,YAAY,KAAK;AACjB,SAAS,CAAC,CAAC;AACX,QAAQ,WAAW,EAAE,CAAC;AACtB,KAAK;AACL;AACA;AACA;AACA,IAAI,SAAS,gBAAgB,CAAC,OAAO,EAAE;AACvC,QAAQ,IAAI,KAAK,CAAC,GAAG,IAAI,IAAI,EAAE;AAC/B;AACA,YAAY,OAAO;AACnB,SAAS;AACT,QAAQ,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,KAAK,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;AAChF,KAAK;AACL,IAAI,SAAS,SAAS,CAAC,GAAG,EAAE;AAC5B,QAAQ,KAAK,CAAC,GAAG,GAAG,GAAG,CAAC;AACxB,QAAQ,IAAI,GAAG,EAAE;AACjB,YAAY,KAAK,MAAM,QAAQ,IAAI,KAAK,CAAC,SAAS,CAAC,OAAO,EAAE;AAC5D,gBAAgB,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC;AACvC,aAAa;AACb,SAAS;AACT,KAAK;AACL,IAAI,SAAS,UAAU,GAAG;AAC1B,QAAQ,IAAI,KAAK,CAAC,YAAY,KAAK,gBAAgB,CAAC,MAAM,EAAE;AAC5D,YAAY,OAAO;AACnB,gBAAgB,KAAK,EAAE,KAAK,CAAC,YAAY;AACzC,gBAAgB,IAAI,EAAE,KAAK,CAAC,GAAG,CAAC,IAAI;AACpC,aAAa,CAAC;AACd,SAAS;AACT,QAAQ,OAAO;AACf,YAAY,KAAK,EAAE,KAAK,CAAC,YAAY;AACrC,SAAS,CAAC;AACV,KAAK;AACL,IAAI,SAAS,qBAAqB,CAAC,OAAO,EAAE;AAC5C,QAAQ,KAAK,CAAC,YAAY,GAAG,gBAAgB,CAAC,MAAM,CAAC;AACrD,QAAQ,IAAI,OAAO,CAAC,IAAI,IAAI,IAAI,EAAE;AAClC,YAAY,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC;AACpC,YAAY,KAAK,CAAC,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,KAAK,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC;AAChE,YAAY,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC,MAAM,EAAE,KAAK,CAAC,qBAAqB,CAAC;AACjF,gBAAgB,YAAY,EAAE,CAAC,IAAI,KAAKC,cAAY,CAAC,IAAI,CAAC;AAC1D,gBAAgB,UAAU,EAAE,MAAMC,YAAU,EAAE;AAC9C,aAAa,CAAC,CAAC,CAAC,CAAC;AACjB,SAAS;AACT,aAAa;AACb,YAAY,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AACpE,SAAS;AACT,KAAK;AACL,IAAI,SAAS,MAAM,GAAG;AACtB,QAAQ,IAAI,KAAK,CAAC,SAAS,IAAI,IAAI,EAAE;AACrC,YAAY,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;AACzE,SAAS;AACT,QAAQ,OAAO,KAAK,CAAC,SAAS,EAAE,CAAC;AACjC,KAAK;AACL,IAAI,SAAS,QAAQ,CAAC,EAAE,EAAE;AAC1B,QAAQ,KAAK,CAAC,SAAS,CAAC,iBAAiB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACnD,QAAQ,WAAW,EAAE,CAAC;AACtB,KAAK;AACL,IAAI,SAASD,cAAY,CAAC,IAAI,EAAE;AAChC,QAAQ,OAAOE,YAAiB,CAAC,MAAM,EAAE,EAAE,IAAI,CAAC,CAAC;AACjD,KAAK;AACL,IAAI,SAASD,YAAU,GAAG;AAC1B,QAAQ,OAAOE,UAAe,CAAC,MAAM,EAAE,CAAC,CAAC;AACzC,KAAK;AACL,IAAI,SAAS,YAAY,CAAC,qBAAqB,EAAE;AACjD,QAAQ,KAAK,CAAC,qBAAqB,GAAG,qBAAqB,CAAC;AAC5D,QAAQ,KAAK,CAAC,YAAY,GAAG,gBAAgB,CAAC,OAAO,CAAC;AACtD,QAAQ,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,iBAAiB,CAAC,YAAY,EAAE,CAAC,CAAC;AAChF,QAAQ,WAAW,EAAE,CAAC;AACtB,KAAK;AACL,IAAI,SAAS,YAAY,CAAC,MAAM,EAAE,SAAS,EAAE;AAC7C,QAAQ,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC,CAAC;AAChE,KAAK;AACL,IAAI,SAAS,QAAQ,CAAC,IAAI,EAAE,IAAI,EAAE;AAClC,QAAQ,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC;AACrD,KAAK;AACL,IAAI,SAAS,UAAU,CAAC,IAAI,EAAE,KAAK,EAAE;AACrC,QAAQ,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC;AACxD,KAAK;AACL,IAAI,SAAS,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE;AAC1C,QAAQ,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC;AAC7D,KAAK;AACL,IAAI,SAAS,QAAQ,CAAC,IAAI,EAAE,KAAK,EAAE,WAAW,EAAE;AAChD,QAAQ,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,EAAE,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC;AACnE,KAAK;AACL,IAAI,OAAO;AACX;AACA,QAAQ,MAAM;AACd,QAAQ,OAAO;AACf,QAAQ,SAAS;AACjB,QAAQ,qBAAqB;AAC7B,QAAQ,SAAS;AACjB,QAAQ,iBAAiB;AACzB;AACA,QAAQ,kBAAkB;AAC1B;AACA,QAAQ,OAAO;AACf,QAAQ,UAAU;AAClB,QAAQ,SAAS;AACjB,QAAQ,WAAW;AACnB;AACA,QAAQ,cAAc;AACtB,QAAQ,cAAc;AACtB;AACA,QAAQ,YAAY;AACpB,sBAAQH,cAAY;AACpB,QAAQ,YAAY;AACpB,oBAAQC,YAAU;AAClB,QAAQ,QAAQ;AAChB,QAAQ,UAAU;AAClB,QAAQ,cAAc;AACtB,QAAQ,QAAQ;AAChB,QAAQ,SAAS,EAAE;AACnB;AACA,YAAY,kBAAkB;AAC9B,YAAY,cAAc;AAC1B;AACA,YAAY,WAAW;AACvB,YAAY,SAAS;AACrB;AACA,YAAY,UAAU;AACtB,SAAS;AACT,KAAK,CAAC;AACN,CAAC;AACM,SAAS,YAAY,CAAC,EAAE,EAAE;AACjC,IAAI,OAAO;AACX,QAAQ,UAAU,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE;AACvC,QAAQ,MAAM,EAAE,IAAI;AACpB,QAAQ,SAAS,EAAE;AACnB,YAAY,OAAO,EAAE,EAAE;AACvB,YAAY,KAAK,EAAE,EAAE;AACrB,YAAY,MAAM,EAAE,EAAE;AACtB,YAAY,aAAa,EAAE,EAAE;AAC7B,YAAY,KAAK,EAAE,EAAE;AACrB,YAAY,UAAU,EAAE,EAAE;AAC1B,SAAS;AACT,QAAQ,aAAa,EAAE,CAAC;AACxB,QAAQ,aAAa,EAAE,CAAC;AACxB,QAAQ,cAAc,EAAE;AACxB,YAAY,KAAK,EAAE,IAAI;AACvB,YAAY,SAAS,EAAE,CAAC;AACxB,YAAY,WAAW,EAAE,CAAC;AAC1B,SAAS;AACT,QAAQ,SAAS,EAAE;AACnB,YAAY,QAAQ,EAAE,EAAE,IAAI,IAAI,GAAG,EAAE,GAAG,EAAE;AAC1C,YAAY,QAAQ,EAAE,EAAE;AACxB,YAAY,iBAAiB,EAAE,EAAE;AACjC,SAAS;AACT,QAAQ,eAAe,EAAE;AACzB,YAAY,SAAS,EAAE,CAAC;AACxB,SAAS;AACT,QAAQ,EAAE,EAAE,EAAE,IAAI,IAAI,GAAG,EAAE,GAAG,EAAE;AAChC,QAAQ,KAAK,EAAE,EAAE;AACjB,QAAQ,MAAM,EAAE,UAAU,CAAC,EAAE,CAAC;AAC9B,QAAQ,YAAY,EAAE,gBAAgB,CAAC,cAAc;AACrD,QAAQ,qBAAqB,EAAE,IAAI;AACnC,QAAQ,GAAG,EAAE,IAAI;AACjB,QAAQ,SAAS,EAAE,IAAI;AACvB,KAAK,CAAC;AACN,CAAC;AACM,SAAS,UAAU,CAAC,IAAI,EAAE,OAAO,EAAE;AAC1C,IAAI,MAAM,aAAa,GAAG,OAAO,CAAC,QAAQ,IAAI,GAAG,CAAC;AAClD,IAAI,MAAM,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,IAAI,sBAAsB,CAAC;AAChF,IAAI,MAAM,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC;AAC9C,IAAI,MAAM,KAAK,GAAG,YAAY,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;AACxD,IAAI,MAAM,OAAO,GAAG,gBAAgB,CAAC,KAAK,EAAE;AAC5C,QAAQ,aAAa;AACrB,QAAQ,gBAAgB;AACxB,QAAQ,YAAY;AACpB,QAAQ,IAAI,EAAE,IAAI;AAClB,KAAK,CAAC,CAAC;AACP,IAAI,MAAM,IAAI,GAAG;AACjB;AACA;AACA;AACA,QAAQ,kBAAkB,EAAE,OAAO,CAAC,SAAS,CAAC,kBAAkB;AAChE,QAAQ,cAAc,EAAE,OAAO,CAAC,SAAS,CAAC,cAAc;AACxD,QAAQ,SAAS,EAAE,OAAO,CAAC,SAAS;AACpC,QAAQ,WAAW,EAAE,OAAO,CAAC,WAAW;AACxC;AACA;AACA;AACA,QAAQ,UAAU,EAAE,OAAO,CAAC,SAAS,CAAC,UAAU;AAChD,QAAQ,YAAY,EAAE,OAAO,CAAC,YAAY;AAC1C,QAAQ,YAAY,EAAE,OAAO,CAAC,YAAY;AAC1C,QAAQ,UAAU,EAAE,OAAO,CAAC,UAAU;AACtC,QAAQ,YAAY,EAAE,OAAO,CAAC,YAAY;AAC1C,QAAQ,QAAQ,EAAE,OAAO,CAAC,QAAQ;AAClC,QAAQ,UAAU,EAAE,OAAO,CAAC,UAAU;AACtC,QAAQ,cAAc,EAAE,OAAO,CAAC,cAAc;AAC9C,QAAQ,QAAQ,EAAE,OAAO,CAAC,QAAQ;AAClC;AACA;AACA;AACA,QAAQ,WAAW,EAAE,OAAO,CAAC,SAAS,CAAC,WAAW;AAClD,QAAQ,cAAc,EAAE,OAAO,CAAC,cAAc;AAC9C,QAAQ,SAAS,EAAE,OAAO,CAAC,SAAS,CAAC,SAAS;AAC9C,QAAQ,cAAc,EAAE,OAAO,CAAC,cAAc;AAC9C,KAAK,CAAC;AACN,IAAI,OAAO;AACX,QAAQ,OAAO,EAAE,OAAO,CAAC,OAAO;AAChC,QAAQ,UAAU,EAAE,OAAO,CAAC,UAAU;AACtC,QAAQ,iBAAiB,EAAE,OAAO,CAAC,iBAAiB;AACpD,QAAQ,kBAAkB,EAAE,OAAO,CAAC,kBAAkB;AACtD,QAAQ,IAAI;AACZ,KAAK,CAAC;AACN,CAAC;AACD,MAAM,eAAe,SAAS,KAAK,CAAC;AACpC,IAAI,WAAW,CAAC,OAAO,EAAE,IAAI,EAAE;AAC/B,QAAQ,KAAK,CAAC,OAAO,CAAC,CAAC;AACvB,QAAQ,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;AACzB,KAAK;AACL;;AC1pBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAAS,YAAY,CAAC,OAAO,EAAE;AACtC,IAAI,IAAI,OAAO,OAAO,CAAC,QAAQ,KAAK,QAAQ,EAAE;AAC9C,QAAQ,IAAI,OAAO,CAAC,QAAQ,GAAG,EAAE,IAAI,OAAO,CAAC,QAAQ,GAAG,IAAI,EAAE;AAC9D,YAAY,MAAM,IAAI,KAAK,CAAC,6DAA6D,CAAC,CAAC;AAC3F,SAAS;AACT,KAAK;AACL,IAAI,MAAM,KAAK,GAAG,IAAI,GAAG,EAAE,CAAC;AAC5B,IAAI,SAAS,OAAO,CAAC,MAAM,EAAE;AAC7B,QAAQ,MAAM,YAAY,GAAG,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;AAC/C,QAAQ,OAAO,YAAY,GAAG,YAAY,CAAC,IAAI,GAAG,IAAI,CAAC;AACvD,KAAK;AACL,IAAI,SAAS,KAAK,CAAC,MAAM,EAAE,eAAe,EAAE;AAC5C,QAAQ,IAAI,YAAY,GAAG,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;AAC7C,QAAQ,IAAI,YAAY,EAAE;AAC1B,YAAY,OAAO,YAAY,CAAC,IAAI,CAAC;AACrC,SAAS;AACT,QAAQ,YAAY,GAAG,UAAU,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,OAAO,CAAC,EAAE,EAAE,eAAe,EAAE,CAAC,CAAC,CAAC;AAC1G,QAAQ,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;AACxC,QAAQ,YAAY,CAAC,OAAO,EAAE,CAAC;AAC/B,QAAQ,OAAO,YAAY,CAAC,IAAI,CAAC;AACjC,KAAK;AACL,IAAI,SAAS,KAAK,CAAC,MAAM,EAAE;AAC3B,QAAQ,IAAI,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;AACrC,QAAQ,IAAI,IAAI,EAAE;AAClB,YAAY,IAAI,CAAC,UAAU,EAAE,CAAC;AAC9B,YAAY,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;AACjC,SAAS;AACT,KAAK;AACL,IAAI,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE;AACvC;AACA,QAAQ,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,MAAM;AAChD,YAAY,KAAK,MAAM,GAAG,IAAI,CAAC,IAAI,KAAK,EAAE;AAC1C,gBAAgB,IAAI,CAAC,iBAAiB,EAAE,CAAC;AACzC,aAAa;AACb,SAAS,CAAC,CAAC;AACX,KAAK;AACL,IAAI,IAAI,OAAO,QAAQ,KAAK,WAAW,EAAE;AACzC,QAAQ,QAAQ,CAAC,gBAAgB,CAAC,kBAAkB,EAAE,MAAM;AAC5D,YAAY,KAAK,MAAM,GAAG,IAAI,CAAC,IAAI,KAAK,EAAE;AAC1C,gBAAgB,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC;AAClE,aAAa;AACb,SAAS,CAAC,CAAC;AACX,KAAK;AACL,IAAI,OAAO;AACX,QAAQ,OAAO;AACf,QAAQ,KAAK;AACb,QAAQ,KAAK;AACb,KAAK,CAAC;AACN;;ACxCA,IAAM,aAAa,GAAGG,mBAAmB,CAAgB,IAAI,CAAC,CAAC;AAC/D,IAAM,WAAW,GAAGA,mBAAmB,CAAc,IAAI,CAAC,CAAC;AAE3D;;;SAGgB,kBAAkB,CAAC,KAA8B;IAC/D,QACEC,oBAAC,aAAa,CAAC,QAAQ,IAAC,KAAK,EAAE,KAAK,CAAC,MAAM,IACxC,KAAK,CAAC,QAAQ,CACQ,EACzB;AACJ,CAAC;AAED;;;AAGA,SAAS,SAAS;IAChB,IAAM,MAAM,GAAGC,gBAAgB,CAAC,aAAa,CAAC,CAAC;IAC/C,IAAI,MAAM,IAAI,IAAI,EAAE;QAClB,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC,CAAC;KACtE;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAgBD;;;;;SAKgB,YAAY,CAAC,EAIT;QAHlB,EAAE,QAAA,EACF,QAAQ,cAAA,EACR,eAAe,qBAAA;IAEf,IAAM,MAAM,GAAG,SAAS,EAAE,CAAC;IAE3BC,eAAe,CAAC;QACd,OAAO;YACL,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;SAClB,CAAC;KACH,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC;IAEjB,IAAM,IAAI,GACR,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;QAClB,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,eAAe,GAAG,eAAe,EAAE,GAAG,SAAS,CAAC,CAAC;IAEpE,OAAOF,oBAAC,WAAW,CAAC,QAAQ,IAAC,KAAK,EAAE,IAAI,IAAG,QAAQ,CAAwB,CAAC;AAC9E,CAAC;AAED;;;AAGA,SAAS,OAAO;IACd,IAAM,IAAI,GAAGC,gBAAgB,CAAC,WAAW,CAAC,CAAC;IAE3C,IAAI,IAAI,IAAI,IAAI,EAAE;QAChB,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;KAChE;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;;;;;;;;;;;;SAgBgB,aAAa;IAI3B,IAAM,IAAI,GAAG,OAAO,EAAE,CAAC;IACvB,IAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,EAAK,CAAC;IACjC,IAAA,KAAaE,cAAc,CAAC,CAAC,CAAC,EAA3B,MAAM,QAAqB,CAAC;IAErCD,eAAe,CAAC;QACd,SAAS,kBAAkB;YACzB,MAAM,CAAC,UAAC,CAAC,IAAK,OAAA,CAAC,GAAG,CAAC,GAAA,CAAC,CAAC;SACtB;QAED,IAAI,CAAC,SAAS,CAAC,aAAa,EAAE,kBAAkB,CAAC,CAAC;QAElD,OAAO;YACL,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE,kBAAkB,CAAC,CAAC;SACrD,CAAC;KACH,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;IAEX,IAAM,WAAW,GAAGE,iBAAiB,CACnC,UAAC,SAAqB,IAAK,OAAA,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,GAAA,EACzD,CAAC,IAAI,CAAC,CACP,CAAC;IAEF,OAAO,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;AACjC,CAAC;AAED;;;;;;;;;;;;;;;SAegB,mBAAmB;IAGjC,IAAM,IAAI,GAAG,OAAO,EAAE,CAAC;IAEvB,OAAOA,iBAAiB,CACtB,UAAC,SAAqB;QACpB,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;KAChC,EACD,CAAC,IAAI,CAAC,CACP,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;;;;;;;;;;SAoBgB,SAAS;IACvB,IAAM,IAAI,GAAG,OAAO,EAAE,CAAC;IAEjB,IAAA,KAAaD,cAAc,CAAC,CAAC,CAAC,EAA3B,MAAM,QAAqB,CAAC;IAErCD,eAAe,CAAC;QACd,SAAS,cAAc;YACrB,MAAM,CAAC,UAAC,CAAC,IAAK,OAAA,CAAC,GAAG,CAAC,GAAA,CAAC,CAAC;SACtB;QAED,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC;QAEzC,OAAO;YACL,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC;SAC1C,CAAC;KACH,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;IAEX,OAAO,IAAI,CAAC,SAAS,EAAE,CAAC;AAC1B,CAAC;AAED;;;;;;;;;;;;SAYgB,iBAAiB;IAC/B,IAAM,IAAI,GAAG,OAAO,EAAE,CAAC;IAEvB,OAAOE,iBAAiB,CACtB,UAAC,KAAU;QACT,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;KAC5B,EACD,CAAC,IAAI,CAAC,CACP,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;;SAYgB,gBAAgB,CAAC,QAA6B;IAC5D,IAAM,IAAI,GAAG,OAAO,EAAE,CAAC;IACvB,IAAM,aAAa,GAAGC,YAAY,CAAC,QAAQ,CAAC,CAAC;IAE7CH,eAAe,CAAC;QACd,aAAa,CAAC,OAAO,GAAG,QAAQ,CAAC;KAClC,CAAC,CAAC;IAEHA,eAAe,CAAC;QACd,IAAM,QAAQ,GAAG,UAAC,CAAQ,IAAK,OAAA,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,GAAA,CAAC;QAExD,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;QAElC,OAAO;YACL,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;SACrC,CAAC;KACH,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;AACb,CAAC;AAED;;;;;;;;;;;;;;SAcgB,gBAAgB,CAC9B,QAMU;IAEV,IAAM,IAAI,GAAG,OAAO,EAAE,CAAC;IACvB,IAAM,aAAa,GAAGG,YAAY,CAAC,QAAQ,CAAC,CAAC;IAE7CH,eAAe,CAAC;QACd,aAAa,CAAC,OAAO,GAAG,QAAQ,CAAC;KAClC,CAAC,CAAC;IAEHA,eAAe,CAAC;QACd,IAAM,QAAQ,GAAG,UAAC,CAA0C;YAC1D,OAAA,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC;SAAA,CAAC;QAE3B,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;QAElC,OAAO;YACL,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;SACrC,CAAC;KACH,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;AACb,CAAC;AAED;;;;;;;;;;SAUgB,cAAc;IAG5B,IAAM,IAAI,GAAG,OAAO,EAAE,CAAC;IACjB,IAAA,KAAaC,cAAc,CAAC,CAAC,CAAC,EAA3B,MAAM,QAAqB,CAAC;IAErCD,eAAe,CAAC;QACd,SAAS,QAAQ;YACf,MAAM,CAAC,UAAC,CAAC,IAAK,OAAA,CAAC,GAAG,CAAC,GAAA,CAAC,CAAC;SACtB;QAED,IAAI,CAAC,SAAS,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC;QACxC,IAAI,CAAC,SAAS,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC;QAEvC,OAAO;YACL,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC;YAC1C,IAAI,CAAC,WAAW,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC;SAC1C,CAAC;KACH,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;IAEX,OAAO,IAAI,CAAC,cAAc,EAAa,CAAC;AAC1C,CAAC;SAae,UAAU,CACxB,cAA4C;IAE5C,IAAM,IAAI,GAAG,OAAO,EAAE,CAAC;IACvB,IAAM,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;IAC5B,IAAA,KAAaC,cAAc,CAAC,CAAC,CAAC,EAA3B,MAAM,QAAqB,CAAC;IAErCD,eAAe,CAAC;QACd,SAAS,eAAe;YACtB,MAAM,CAAC,UAAC,CAAC,IAAK,OAAA,CAAC,GAAG,CAAC,GAAA,CAAC,CAAC;SACtB;QAED,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC,CAAC;QAClC,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,eAAe,CAAC,CAAC;QAE3C,OAAO;YACL,IAAI,CAAC,WAAW,CAAC,SAAS,EAAE,eAAe,CAAC,CAAC;SAC9C,CAAC;KACH,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;IAEX,IAAM,IAAI,GACR,OAAO,CAAC,KAAK,KAAK,gBAAgB,CAAC,MAAM;UACpC,OAAO,CAAC,IAAsB;UAC/B,IAAI,CAAC;IAEX,IAAM,OAAO,GAAG,iBAAiB,EAAE,CAAC;IACpC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;AACzB,CAAC;SAEe,iBAAiB;IAC/B,IAAM,IAAI,GAAG,OAAO,EAAE,CAAC;IACvB,OAAOI,aAAa,CAAC;QACnB,SAAS,YAAY,CAAuB,IAAO;YACjD,OAAO,IAAI,CAAC,YAAY,CAAI,IAAI,CAAC,CAAC;SACnC;QAED,SAAS,YAAY,CACnB,MAAiB,EACjB,SAAqB;YAErB,OAAO,IAAI,CAAC,YAAY,CAAI,MAAM,EAAE,SAAS,CAAC,CAAC;SAChD;QAED,SAAS,UAAU;YACjB,OAAO,IAAI,CAAC,UAAU,EAAK,CAAC;SAC7B;QAED,SAAS,QAAQ,CACf,IAAqB,EACrB,KAAa,EACb,WAAmB;YAEnB,OAAO,IAAI,CAAC,QAAQ,CAAI,IAAI,EAAE,KAAK,EAAE,WAAW,CAAC,CAAC;SACnD;QAED,SAAS,UAAU,CACjB,IAAqB,EACrB,KAAa;YAEb,OAAO,IAAI,CAAC,UAAU,CAAI,IAAI,EAAE,KAAK,CAAC,CAAC;SACxC;QAED,SAAS,cAAc,CACrB,IAAqB,EACrB,MAAc;YAEd,OAAO,IAAI,CAAC,cAAc,CAAI,IAAI,EAAE,MAAM,CAAC,CAAC;SAC7C;QAED,SAAS,QAAQ,CACf,IAAqB,EACrB,IAAe;YAEf,OAAO,IAAI,CAAC,QAAQ,CAAI,IAAI,EAAE,IAAI,CAAC,CAAC;SACrC;QAED,OAAO;YACL,YAAY,cAAA;YACZ,YAAY,cAAA;YAEZ,UAAU,YAAA;YACV,QAAQ,UAAA;YACR,UAAU,YAAA;YACV,cAAc,gBAAA;YACd,QAAQ,UAAA;SACT,CAAC;KACH,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;AACb;;;;;;;;;;;;;;;"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../src/index.tsx"],"sourcesContent":["import {\n Client,\n Others,\n Presence,\n LiveObject,\n LiveMap,\n Room,\n User,\n LiveList,\n} from \"@liveblocks/client\";\nimport * as React from \"react\";\n\ntype LiveblocksProviderProps = {\n children: React.ReactNode;\n client: Client;\n};\n\nconst ClientContext = React.createContext<Client | null>(null);\nconst RoomContext = React.createContext<Room | null>(null);\n\n/**\n * Makes the Liveblocks client available in the component hierarchy below.\n */\nexport function LiveblocksProvider(props: LiveblocksProviderProps) {\n return (\n <ClientContext.Provider value={props.client}>\n {props.children}\n </ClientContext.Provider>\n );\n}\n\n/**\n * Returns the client of the nearest LiveblocksProvider above in the react component tree\n */\nfunction useClient(): Client {\n const client = React.useContext(ClientContext);\n if (client == null) {\n throw new Error(\"LiveblocksProvider is missing from the react tree\");\n }\n\n return client;\n}\n\ntype RoomProviderProps<TStorageRoot> = {\n /**\n * The id of the room you want to connect to\n */\n id: string;\n /**\n * A callback that let you initialize the default presence when entering the room.\n * If ommited, the default presence will be an empty object\n */\n defaultPresence?: () => Presence;\n\n defaultStorageRoot?: TStorageRoot;\n\n children: React.ReactNode;\n};\n\n/**\n * Makes a Room available in the component hierarchy below.\n * When this component is unmounted, the current user leave the room.\n * That means that you can't have 2 RoomProvider with the same room id in your react tree.\n */\nexport function RoomProvider<TStorageRoot>({\n id,\n children,\n defaultPresence,\n defaultStorageRoot,\n}: RoomProviderProps<TStorageRoot>) {\n const client = useClient();\n\n React.useEffect(() => {\n return () => {\n client.leave(id);\n };\n }, [client, id]);\n\n const room =\n client.getRoom(id) ||\n client.enter(id, {\n defaultPresence: defaultPresence ? defaultPresence() : undefined,\n defaultStorageRoot,\n });\n\n return <RoomContext.Provider value={room}>{children}</RoomContext.Provider>;\n}\n\n/**\n * Returns the room of the nearest RoomProvider above in the react component tree\n */\nfunction useRoom() {\n const room = React.useContext(RoomContext);\n\n if (room == null) {\n throw new Error(\"RoomProvider is missing from the react tree\");\n }\n\n return room;\n}\n\n/**\n * Returns the presence of the current user of the current room, and a function to update it.\n * It is different from the setState function returned by the useState hook from React.\n * You don't need to pass the full presence object to update it.\n *\n * @example\n * import { useMyPresence } from \"@liveblocks/react\";\n *\n * const [myPresence, updateMyPresence] = useMyPresence();\n * updateMyPresence({ x: 0 });\n * updateMyPresence({ y: 0 });\n *\n * // At the next render, \"myPresence\" will be equal to \"{ x: 0, y: 0 }\"\n */\nexport function useMyPresence<T extends Presence>(): [\n T,\n (overrides: Partial<T>) => void\n] {\n const room = useRoom();\n const presence = room.getPresence<T>();\n const [, update] = React.useState(0);\n\n React.useEffect(() => {\n function onMyPresenceChange() {\n update((x) => x + 1);\n }\n\n room.subscribe(\"my-presence\", onMyPresenceChange);\n\n return () => {\n room.unsubscribe(\"my-presence\", onMyPresenceChange);\n };\n }, [room]);\n\n const setPresence = React.useCallback(\n (overrides: Partial<T>) => room.updatePresence(overrides),\n [room]\n );\n\n return [presence, setPresence];\n}\n\n/**\n * useUpdateMyPresence is similar to useMyPresence but it only returns the function to update the current user presence.\n * If you don't use the current user presence in your component, but you need to update it (e.g. live cursor), it's better to use useUpdateMyPresence to avoid unnecessary renders.\n *\n * @example\n * import { useUpdateMyPresence } from \"@liveblocks/react\";\n *\n * const updateMyPresence = useUpdateMyPresence();\n * updateMyPresence({ x: 0 });\n * updateMyPresence({ y: 0 });\n *\n * // At the next render, the presence of the current user will be equal to \"{ x: 0, y: 0 }\"\n */\nexport function useUpdateMyPresence<T extends Presence>(): (\n overrides: Partial<T>\n) => void {\n const room = useRoom();\n\n return React.useCallback(\n (overrides: Partial<T>) => {\n room.updatePresence(overrides);\n },\n [room]\n );\n}\n\n/**\n * Returns an object that lets you get information about all the the users currently connected in the room.\n *\n * @example\n * import { useOthers } from \"@liveblocks/react\";\n *\n * const others = useOthers();\n *\n * // Example to map all cursors in jsx\n * {\n * others.map(({ connectionId, presence }) => {\n * if(presence == null || presence.cursor == null) {\n * return null;\n * }\n * return <Cursor key={connectionId} cursor={presence.cursor} />\n * })\n * }\n */\nexport function useOthers<T extends Presence>(): Others<T> {\n const room = useRoom();\n\n const [, update] = React.useState(0);\n\n React.useEffect(() => {\n function onOthersChange() {\n update((x) => x + 1);\n }\n\n room.subscribe(\"others\", onOthersChange);\n\n return () => {\n room.subscribe(\"others\", onOthersChange);\n };\n }, [room]);\n\n return room.getOthers();\n}\n\n/**\n * Returns a callback that lets you broadcast custom events to other users in the room\n *\n * @example\n * import { useBroadcastEvent } from \"@liveblocks/react\";\n *\n * const broadcast = useBroadcastEvent();\n *\n * broadcast({ type: \"CUSTOM_EVENT\", data: { x: 0, y: 0 } });\n */\nexport function useBroadcastEvent() {\n const room = useRoom();\n\n return React.useCallback(\n (event: any) => {\n room.broadcastEvent(event);\n },\n [room]\n );\n}\n\n/**\n * useErrorListener is a react hook that lets you react to potential room connection errors.\n *\n * @example\n * import { useErrorListener } from \"@liveblocks/react\";\n *\n * useErrorListener(er => {\n * console.error(er);\n * })\n */\nexport function useErrorListener(callback: (er: Error) => void) {\n const room = useRoom();\n const savedCallback = React.useRef(callback);\n\n React.useEffect(() => {\n savedCallback.current = callback;\n });\n\n React.useEffect(() => {\n const listener = (e: Error) => savedCallback.current(e);\n\n room.subscribe(\"error\", listener);\n\n return () => {\n room.unsubscribe(\"error\", listener);\n };\n }, [room]);\n}\n\n/**\n * useEventListener is a react hook that lets you react to event broadcasted by other users in the room.\n *\n * @example\n * import { useEventListener } from \"@liveblocks/react\";\n *\n * useEventListener(({ connectionId, event }) => {\n * if (event.type === \"CUSTOM_EVENT\") {\n * // Do something\n * }\n * });\n */\nexport function useEventListener<TEvent>(\n callback: ({\n connectionId,\n event,\n }: {\n connectionId: number;\n event: TEvent;\n }) => void\n) {\n const room = useRoom();\n const savedCallback = React.useRef(callback);\n\n React.useEffect(() => {\n savedCallback.current = callback;\n });\n\n React.useEffect(() => {\n const listener = (e: { connectionId: number; event: TEvent }) =>\n savedCallback.current(e);\n\n room.subscribe(\"event\", listener);\n\n return () => {\n room.unsubscribe(\"event\", listener);\n };\n }, [room]);\n}\n\n/**\n * Gets the current user once it is connected to the room.\n *\n * @example\n * import { useSelf } from \"@liveblocks/react\";\n *\n * const user = useSelf();\n */\nexport function useSelf<\n TPresence extends Presence = Presence\n>(): User<TPresence> | null {\n const room = useRoom();\n const [, update] = React.useState(0);\n\n React.useEffect(() => {\n function onChange() {\n update((x) => x + 1);\n }\n\n room.subscribe(\"my-presence\", onChange);\n room.subscribe(\"connection\", onChange);\n\n return () => {\n room.unsubscribe(\"my-presence\", onChange);\n room.unsubscribe(\"connection\", onChange);\n };\n }, [room]);\n\n return room.getSelf<TPresence>();\n}\n\nexport function useStorage<TRoot extends Record<string, any>>(): [\n root: LiveObject<TRoot> | null\n] {\n const room = useRoom();\n const [root, setState] = React.useState<LiveObject<TRoot> | null>(null);\n\n React.useEffect(() => {\n async function fetchStorage() {\n const storage = await room.getStorage<TRoot>();\n setState(storage.root);\n }\n\n fetchStorage();\n\n return () => {};\n }, [room]);\n\n return [root];\n}\n\nexport function useMap<TKey extends string, TValue>(\n key: string\n): LiveMap<TKey, TValue> | null {\n const [root] = useStorage();\n const [, setCount] = React.useState(0);\n\n React.useEffect(() => {\n if (root == null) {\n return;\n }\n\n let map: LiveMap<TKey, TValue> = root.get(key);\n\n if (map == null) {\n map = new LiveMap();\n root.set(key, map);\n }\n\n function onChange() {\n setCount((x) => x + 1);\n }\n\n map.subscribe(onChange);\n\n setCount((x) => x + 1);\n\n return () => {\n return map.unsubscribe(onChange);\n };\n }, [root]);\n\n return root?.get(key) ?? null;\n}\n\nexport function useList<TValue>(\n key: string,\n): LiveList<TValue> | null {\n const [root] = useStorage();\n const [, setCount] = React.useState(0);\n\n React.useEffect(() => {\n if (root == null) {\n return;\n }\n\n let list: LiveList<TValue> = root.get(key);\n\n if (list == null) {\n list = new LiveList();\n root.set(key, list);\n }\n\n function onChange() {\n setCount((x) => x + 1);\n }\n\n list.subscribe(onChange);\n\n setCount((x) => x + 1);\n\n return () => {\n return list.unsubscribe(onChange);\n };\n }, [root]);\n\n return root?.get(key) ?? null;\n}\n\nexport function useObject<TData>(\n key: string\n): LiveObject<TData> | null {\n const [root] = useStorage();\n const [, setCount] = React.useState(0);\n\n React.useEffect(() => {\n if (root == null) {\n return;\n }\n\n let obj: LiveObject<TData> = root.get(key);\n\n if (obj == null) {\n obj = new LiveObject();\n root.set(key, obj);\n }\n\n function onChange() {\n setCount((x) => x + 1);\n }\n\n obj.subscribe(onChange);\n\n setCount((x) => x + 1);\n\n return () => {\n return obj.unsubscribe(onChange);\n };\n }, [root]);\n\n return root?.get(key) ?? null;\n}\n"],"names":["React.createContext","React.createElement","React.useContext","React.useEffect","React.useState","React.useCallback","React.useRef","LiveMap","LiveList","LiveObject"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@liveblocks/react",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.12.0-beta.10",
|
|
4
4
|
"description": "",
|
|
5
5
|
"main": "./lib/index.js",
|
|
6
6
|
"files": [
|
|
@@ -22,10 +22,8 @@
|
|
|
22
22
|
"test": "jest --watch"
|
|
23
23
|
},
|
|
24
24
|
"license": "Apache-2.0",
|
|
25
|
-
"dependencies": {
|
|
26
|
-
"@liveblocks/client": "0.9.0"
|
|
27
|
-
},
|
|
28
25
|
"peerDependencies": {
|
|
26
|
+
"@liveblocks/client": "0.12.0-beta.10",
|
|
29
27
|
"react": "^16.14.0 || ^17"
|
|
30
28
|
},
|
|
31
29
|
"devDependencies": {
|