Project homepage Mailing List  Warmcat.com  API Docs  Github Mirror 
{"schema":"libjg2-1", "vpath":"/git/", "avatar":"/git/avatar/", "alang":"", "gen_ut":1745915196, "reponame":"libwebsockets", "desc":"libwebsockets lightweight C networking library", "owner": { "name": "Andy Green", "email": "andy@warmcat.com", "md5": "c50933ca2aa61e0fe2c43d46bb6b59cb" },"url":"https://libwebsockets.org/repo/libwebsockets", "f":3, "items": [ {"schema":"libjg2-1", "cid":"286bb82634dd1fe306bed70cf3efe6c6", "commit": {"type":"commit", "time": 1651650206, "time_ofs": 60, "oid_tree": { "oid": "e5a76ff80a9e8e5ffd1b167a518215d3b45414f9", "alias": []}, "oid":{ "oid": "63d2f844db3c688ce792212edff471ec3853ae47", "alias": []}, "msg": "lhp: Lightweight HTML Parser", "sig_commit": { "git_time": { "time": 1651650206, "offset": 60 }, "name": "Andy Green", "email": "andy@warmcat.com", "md5": "c50933ca2aa61e0fe2c43d46bb6b59cb" }, "sig_author": { "git_time": { "time": 1639941020, "offset": 0 }, "name": "Andy Green", "email": "andy@warmcat.com", "md5": "c50933ca2aa61e0fe2c43d46bb6b59cb" }}, "body": "lhp: Lightweight HTML Parser\n\nIntroduce a very lightweight html5 + css2.1+ stateful stream parser, along\nthe same lines as the lws json and cbor ones.\n\nThis is interesting primarily because of just how low-resource it is for\nmodest css + html, it uses an lwsac to hold the entirity of the css in\nmemory at once but the html is parsed in chunks without any need to keep\nprevious chunks around (chunks may be as small as 1 byte).\n\nA user callback receives element entry and exit callbacks with payload and\nall attributes parsed out, CSS related to the active element stack is\nparsed to provide a list of active css attributes, which takes heap for the\nduration of the parsing.\n\nIn effect this provides rich information about the html and css state to\nthe callback, which has the job of producing the layout in a user-defined\nway.\n\nAs such, there is no DOM in memory at one time, there is only a stack of\nactive elements like \u003chtml\u003e\u003cbody\u003e\u003cdiv\u003exxx with their associated attributes\n(like class). So as it is, it does not support DOM modification such as\nJS changing elements after parsing, although elements with interesting IDs\ncould be kept around by the callback. There is a corresponding tiny and\nrelatively flat heap usage regardless of html size.\n\nDefault CSS is specified as recommended in the CSS 2.1 standard.\n\nInline \u003cstyle\u003e\u003c/style\u003e elements are supported, but not pre-html5 style\u003d in\nelement attributes, since these are incompatible with strict CSP.\n\nWhat the attributes should mean on your system, eg, font-size, font-family\netc is left for the user callback to decide, along with how to lay out the\nitems using the CSS attributes, and render them.\n\nFixed point 32.32 constants are used (fraction expressed at parts in 100M)\ninstead of floating point.\n\nIf you have presentation needs, even on a constrained display on a\nconstrained microcontroller, this makes it feasible to use standardized\nmarkup and styling instead of roll your own.\n\n" , "diff": "diff --git a/CMakeLists.txt b/CMakeLists.txt\nindex 74787f4..321c5bd 100644\n--- a/CMakeLists.txt\n+++ b/CMakeLists.txt\n@@ -275,6 +275,7 @@ option(LWS_WITH_LEJP \u0022With the Lightweight JSON Parser\u0022 ON)\n option(LWS_WITH_CBOR \u0022With the Lightweight LECP CBOR Parser\u0022 OFF)\n option(LWS_WITH_CBOR_FLOAT \u0022Build floating point types if building CBOR LECP\u0022 ON)\n option(LWS_WITH_SQLITE3 \u0022Require SQLITE3 support\u0022 OFF)\n+option(LWS_WITH_LHP \u0022With the Lightweight HTML5 parser\u0022 ON)\n option(LWS_WITH_STRUCT_JSON \u0022Generic struct serialization to and from JSON\u0022 OFF)\n option(LWS_WITH_STRUCT_SQLITE3 \u0022Generic struct serialization to and from SQLITE3\u0022 OFF)\n option(LWS_WITH_JSONRPC \u0022JSON RPC support\u0022 ON)\n@@ -352,7 +353,10 @@ option(LWS_WITH_ALLOC_METADATA_LWS \u0022Build lws_*alloc() with compressed backtrace\n #\n option(LWS_WITH_OTA \u0022Build with support for Over The Air update download and validation\u0022 OFF)\n set(LWS_OTA_VARIANT \u0022set-LWS_OTA_VARIANT\u0022 CACHE STRING \u0022Build Variant ID for OTA filtering\u0022)\n-set(LWS_OTA_PUBLIC_JWK \u0022set-LWS_OTA_PUBLIC_JWK\u0022 CACHE STRING \u0022Filepath to public JWK used for OTA validation\u0022)\n+set(LWS_OTA_PUBLIC_JWK_FILE \u0022$ENV{HOME}/.lws_ota/libwebsockets.org-ota-v1.public.jwk\u0022 CACHE STRING \u0022Filepath of public JWK used to validate packages\u0022)\n+if (LWS_WITH_OTA)\n+\tfile(READ ${LWS_OTA_PUBLIC_JWK_FILE} LWS_OTA_PUBLIC_JWK)\n+endif()\n \n \n if (${CMAKE_SYSTEM_NAME} MATCHES \u0022SunOS\u0022)\ndiff --git a/READMEs/README.html-parser.md b/READMEs/README.html-parser.md\nnew file mode 100644\nindex 0000000..a5f6497\n--- /dev/null\n+++ b/READMEs/README.html-parser.md\n@@ -0,0 +1,294 @@\n+# lws LHP HTML5 and CSS parser and render pipeline\n+\n+## Please note this is working end-end, but some parts incomplete and generally pre-alpha... looking for interested parties to help\n+\n+![overview](../doc-assets/lhp-overview.png)\n+\u003cfigcaption\u003e*LHP Stream-parses HTML and CSS into a DOM and then into DLOs (lws\n+Display List Objects). Multiple, antialiased, proportional fonts, JPEG and PNGs\n+are supported. A linewise rasterizer is provided well-suited to resource-\n+constrained devices with SPI based displays.*\u003c/figcaption\u003e\n+\n+![example](../doc-assets/lhp-acep7.jpg)\n+\u003cfigcaption\u003e*Page fetched from `https://libwebsockets.org/lhp-tests/t1.html` by\n+an ESP32, and rendered by lws on a 600x448 ACEP 7-colour EPD with 24-bit\n+composition. The warning symbol at the bottom right is a .png `\u003cimg\u003e` in an\n+absolutely positioned `\u003cdiv\u003e`. The yellow shapes at the top right are divs with\n+css-styled rounded corners. The red div is partly transparent. Display only\n+has a 7 colour palette. Server only sends CSS/HTML/JPEG/PNG, all parsing and\n+rendering done on the ESP32.*\u003c/figcaption\u003e\n+\n+## Overview\n+\n+Lws is able to parse **and render** a subset of CSS + HTML5 on very constrained\n+devices such as ESP32, which have a total of 200KB heap available after boot at\n+best. There are some technology advances in lws that allow much greater\n+capability that has previously been possible on those platforms.\n+\n+The goal is that all system display content is expressed in HTML/CSS by user\n+code, which may also be dynamically generated, with CSS responsive layout\n+simplifying managing the same UI over different display dimensions.\n+\n+There are restrictions - most generic html on the internet are too complex or\n+want more assets from different hosts than tiny devices can connect to - but\n+they are quite far beyond what you would expect from a 200KB heap limit. It\n+is very possible to mix remote and local http content over h2 including large\n+JPEG and PNG images and express all UI in html/css.\n+\n+### Features\n+\n+ - Parses common HTML and CSS, somewhat beyond html5 and CSS2.1 (supports\n+ some CSS3)\n+ - Uses Secure Streams to bring in HTML, and references to JPEG and PNG `\u003cimg\u003e`,\n+ toplevel async renderer api takes an lws VFS file:// or https:// URL\n+ retrieved via SS. There's easy, customizable lws VFS support at SS for\n+ transparently referencing dynamically-generated or .text, or SD card-stored\n+ HTML, or other assets\n+ - No framebuffer... rendered strictly linewise. RGB framebuffer for 600x448\n+ image above would be 800KB, lws can render it efficiently on an ESP32 with\n+ only the default 200KB memory available.\n+ - Image data is fetched from local or remote as needed during composition,\n+ image buffering just 2 lines (PNG) or 8 or 16 lines (JPEG) plus decompressor\n+ overhead (see below for more details)\n+ - Layout supports DIVs, text wrapping, margin and padding, font colour,\n+ selection and weight supported via CSS; implementation still early on others\n+ - HTML element ID names that the user code cares about can be given, these are\n+ found during parse and layout information for the elements kept\n+ - Rendering is very flexible and lightweight, supports Y (8-) or RGB (24-) bit\n+ line buffer and composition, alpha composing, Gamma correction, RGB565 and\n+ individual palette RGB/Y packing, Dynamic Floyd-Steinberg error diffusion so\n+ the same render can look as good as possible even on B\u0026W display\n+ - EPD Gray levels and spot colour palette (eg, BW-Red) supported\n+ - Compatible with LCD/OLED but understands needs of EPD, display management is\n+ all done via the event loop without any blocking waits.\n+ - LHP, DLO and lws_display use fixed-point int32:8 sig digits, FPU not needed\n+ - SPI DMA supported crossplatform, ESP32 driver provided\n+ - lws_display drivers provided for several common SPI display chips, most\n+ support ping-pong buffering so DMA proceeds while next line rendered\n+ - 9 specific display + ESP32 example combinations provided\n+ - HTML Parse -\u003e 320x240 565 SPI Display update complete possible in under 250ms\n+ on ESP32 WROVER KIT, remote assets slow it down\n+\n+### Restrictions\n+\n+ - Only quite basic HTML + CSS implemented atm, old `style\u003d` element attributes\n+ not supported.\n+ - Requires correct HTML, not yet tolerant of missing end tags etc\n+ - CSS must be inline in the HTML atm\n+ - lws understands ETAGs but there's no support to cache assets yet, they are\n+ fetched anew in realtime each time\n+ - There is no JS support. Information can be collected from laid-out elements\n+ though by passing a list of IDs to the html parser api at the start.\n+ - There's no CSS Rotation, animation etc\n+ - There's no image scaling, images are presented 1:1\n+ - There is a DOM representation, but for optimal memory usage it is stream-\n+ parsed and destroyed element by element after using it to produce the DLO\n+ layout, so only DOM parent elements that are still open exist at any one time.\n+ This allows the parser to scale to complex html where most of it will be\n+ discarded.\n+ - CSS is parsed and kept for the whole HTML parse, since it doesn't know which\n+ pieces will be needed until it has parsed the html. So giant CSS alone will\n+ overflow available memory on constrained targets\n+\n+Heap Costs during active decode (while rendering line that includes image)\n+\n+|Feature|Decoder Cost in heap (600px width)|\n+|---|---|\n+|JPEG-Grayscale|6.5KB|\n+|JPEG-YUV 4:4:4|16.4KB|\n+|JPEG-YUV 4:4:2v|16.4KB|\n+|JPEG-YUV 4:4:2h|31KB|\n+|JPEG-YUV 4:4:0|31KB|\n+|PNG|36KB|\n+\n+Connecting to an external tls source costs around 50KB. So for very constrained\n+targets like ESP32, the only practical way is a single h2 connection that\n+provides the assets as streams multiplexed inside a single tls tunnel.\n+\n+### JIT_TRUST\n+\n+Integrates CA trust bundle dynamic querying into lws, with openssl and mbedtls.\n+It can support all the typical Mozilla 130+ trusted CAs, using the trust chain\n+information from the server cert to identify the CA cert required, and just\n+instantiating that one to validate the server cert, if it trusts it. The\n+trust CTX is kept around in heap for a little while for the case there are\n+multiple connections needing it.\n+\n+No heap is needed for trusted certs that are not actively required. This means\n+lws can securely connect over tls to arbitrary servers like a browser would\n+without using up all the memory; without this it's not possible to support\n+arbitrary connections securely within the memory constraints.\n+\n+### Display List Objects (DLO)\n+\n+Lws supports a logical Display List for graphical primitives common in HTML +\n+CSS, including compressed antialiased fonts, JPEG, PNG and rounded rectangles.\n+\n+This intermediate representation allows display surface layout without having\n+all the details to hand, and provides flexibility for how to render the logical\n+representation of the layout.\n+\n+### Linewise rendering\n+\n+There may not be enough heap to hold a framebuffer for even a midrange display\n+device, eg an RGB buffer for the 600 x 448 display at the top of the page is\n+800KB. Even if there is, for display devices that hold a framebuffer on the\n+display, eg, SPI TFT, OLED, or Electrophoretic displays, the display data is\n+anyway sent linewise (perhaps in two planes, but still linewise) to the display.\n+\n+In this case, there is no need for a framebuffer at the device, if the software\n+stack is rewritten to stream-parse all the page elements asynchronously, and\n+each time enough is buffered, processed and composed to produce the next line's\n+worth of pixels. Only one or two lines' worth of buffer is required then.\n+\n+This is the lws approach, rewrite the asset decoders to operate completely\n+statefully so they can collaborate to provide just the next line's data Just-in-\n+Time.\n+\n+### PNG and JPEG stream parsers\n+\n+Lws includes fully stream-parsed decoders, which can run dry for input or output\n+at any state safely, and pick up where they left off when more data or space is\n+next available.\n+\n+These were rewritten from UPNG and Picojpeg to be wholly stateful. These DLO\n+are bound to flow-controlled SS so the content can be provided to the composer\n+Just In Time. The rewrite requires that it can exit the decode at any byte\n+boundary, due to running out of input, or needing to flush output, and resume\n+with the same state, this is a complete inversion of the original program flow\n+where it only returns when it has rendered the whole image into a fullsize\n+buffer and decode state is spread around stack or filescope variables.\n+\n+PNG transparency is supported via its A channel and composed by modulating\n+alpha.\n+\n+### Compressed, Anti-aliased fonts\n+\n+Based on mcufont, these are 4-bit antialised fonts produced from arbitrary TTFs.\n+They are compressed, a set of a dozen different font sizes from 10px thru 32px\n+and bold sizes only costs 100KB storage. The user can choose their own fonts\n+and sizes, the encoder is included in lws.\n+\n+The mcufont decompressor was rewritten to be again completely stateful, glyphs\n+present on the current line are statefully decoded to produce that line's-worth\n+of output only and paused until the next line. Only glyphs that appear on the\n+current line have instantiated decoders.\n+\n+The anti-alias information is composed into the line buffer as alpha.\n+\n+### Integration of PNG, JPEG and file:// VFS sources into Secure Streams\n+\n+Secure Streams and lws VFS now work together via `file://` URLs, a SS can be\n+directed to a local VFS resource the same way as to an `https://` resource.\n+Resources from https:// and file:// can refer to each other in CSS or `\u003cimg\u003e`\n+cleanly.\n+\n+![example](../doc-assets/lhp-ss-unification.png)\n+\u003cfigcaption\u003e*All local and remote resources are fetched using Secure Streams with\n+a VFS `file://` or `https://` URL. Delivery of enough data to render the next\n+line from multiple sources without excess buffering is handled by `lws_flow`.*\u003c/figcaption\u003e\n+\n+Dynamic content, such as dynamic HTML, can be registered in a DLO VFS filesystem\n+and referenced via SS either as the toplevel html document or by URLs inside the\n+HTML.\n+\n+`.jpg` and `.png` resources can be used in the html and are fetched using their\n+own SS, if coming from the same server over h2, these have very modest extra\n+memory needs since they are sharing the existing h2 connection and tls.\n+\n+### H2 tx credit buffer management\n+\n+All of the efforts to make JPEG or PNG stream-parsed are not useful if either\n+there is an h1 connection requiring a new TLS session that exhausts the heap,\n+or even if multiplexed into the same h2 session, the whole JPEG or PNG is\n+dumped too quickly into the device which cannot buffer it.\n+\n+On constrained devices, the only mix that allows multiple streaming assets that\n+are decoded as they come, is an h2 server with streaming modulated by h2 tx\n+credit. The demos stream css, html, JPEG and CSS from libwebsockets.org over h2.\n+In lws, `lws_flow` provides the link between maximum buffering targets and the\n+tx_credit flow control management.\n+\n+The number of assets that can be handled simultaneously on an HTML page is\n+restricted by the irreducible heap cost of decoding them, about 36KB + an RGB\n+line buffer for PNGs, and an either 8 (YUV4:4:4) or 16 RGB (4:4:2 or 4:4:0)\n+line buffer for JPEG.\n+\n+However, PNG and JPEG decode occurs lazily starting at the render line where the\n+object starts becoming visible, and all DLO objects are destroyed after the last\n+line where they are visible. The SS responsible for fetching and regulating the\n+bufferspace needed is started at layout-time, and the parser is started too up\n+to the point that the header with the image dimensions is decoded, but not\n+beyond that where the large decoder allocation is required.\n+\n+It means only images that appear on the same line have decoders that are\n+instantiated in memory at the same time; images that don't share any horizontal\n+common lines do not exist in heap simultaneously; basically multiple vertically\n+stacked images cost little more than one.\n+\n+The demo shows that even on ESP32, the images are cheap enough to allow a full\n+size background JPEG with a partially-transparent PNG composed over it.\n+\n+### lws_display Composition, palette and dithering\n+\n+Internally, lws provides either a 8-bit Y (grayscale) or 32-bit RGBA (trucolor)\n+composition pipeline for all display elements, based on if the display device is\n+monochrome or not. Alpha (opacity) is supported. This is true regardless of\n+final the bit depth of the display device, so even B\u0026W devices can approximate\n+the same output.\n+\n+Gamma of 2.2 is also applied before palettization, then floyd-steinberg\n+dithering, all with just a line buffer and no framebuffer needed at the device.\n+The assets like JPEG can be normal, RGB ones, and the rendering adapts down to\n+the display palette and capabilities dynamically.\n+\n+The `lws_display` support in lws has been extended to a variety of common EPD\n+controllers such as UC8171, supporting B\u0026W, B\u0026W plus a third colour (red or\n+yellow typically) and 4-level Gray. The ILI9341 driver for the displays found\n+on WROVER KIT and the ESP32S Kaluga KIT has been enhanced to work with the new\n+display pipline using native 565.\n+\n+![overview](../doc-assets/lhp-400-300-red.jpg)\n+\u003cfigcaption\u003e*HTML rendered on the device from file:// VFS-stored normal RGB JPEG and HTML/CSS, by ESP32 with BW-Red palette 400x300 EPD*\u003c/figcaption\u003e\n+\n+![overview](../doc-assets/lhp-rgb-example.png)\n+\u003cfigcaption\u003e*Test html rendered to 24-bit RGB data directly*\u003c/figcaption\u003e\n+\n+![overview](../doc-assets/lhp-example-g4.jpg)\n+\u003cfigcaption\u003e*Test html rendered to 300x240 4-gray palette EPD (from RGB JPEG also fetched from server during render) using Y-only composition... notice effectiveness of error diffusion use of the palette*\u003c/figcaption\u003e\n+\n+![overview](../doc-assets/lhp-104-212-red.jpg)\n+\u003cfigcaption\u003e*Test html rendered to 104 x 212 BW-Red palette EPD, red h1 text set by CSS `color:#f00`, on a lilygo ESP32-based EPD label board*\u003c/figcaption\u003e\n+\n+![overview](../doc-assets/lhp-epd-flex-104.jpg)\n+\u003cfigcaption\u003e*Test html rendered to 104 x 212 BW flexible EPD, notice font legibility, effectiveness of dither and presence of line breaks*\u003c/figcaption\u003e\n+\n+![overview](https://libwebsockets.org/wrover-boot.gif)\n+\u003cfigcaption\u003e*ESP32 WROVER KIT running the example carousel on a 320x200 565 RGB SPI display. 10s delay between tests snipped for brevity, otherwise shown realtime. Moire is artifact of camera. As composition is linewise, the JPEG and other data from libwebsockets.org is arriving and being completely parsed / composed in the time taken to update the display. Interleaved SPI DMA used to send line to display while rendering the next.*\u003c/figcaption\u003e\n+\n+## Top level API\n+\n+```\n+int\n+lws_lhp_ss_browse(struct lws_context *cx, lws_display_render_state_t *rs,\n+\t\t const char *url, sul_cb_t render);\n+```\n+\n+You basically give it an `https://` or `file://` URL, a structure for the\n+render state, and a callback for when the DLOs have been created and lines of\n+pixels are being emitted. The source fetching, parsing, layout, and finally\n+rendering proceed asynchronously on the event loop without blocking beyond the\n+time taken to emit by default 4 lines.\n+\n+In these examples, the renderer callback passes the lines of pixels to the\n+`lws_display` blit op.\n+\n+See `./include/libwebsockets/lws-html.h` for more information.\n+\n+Also see `./minimal-examples-lowlevel/api-tests/api-test-lhp-dlo/main.c`\n+example, you can render to 24-bit RGB on stdout by giving it a URL, eg\n+\n+```\n+ $ ./bin/lws-api-test-lhp-dlo https://libwebsockets.org/lhp-tests/t1.html \u003e/tmp/a.data\n+```\n+\n+The raw RGB can be opened in GIMP.\ndiff --git a/cmake/lws_config.h.in b/cmake/lws_config.h.in\nindex 20992de..5a9e1a2 100644\n--- a/cmake/lws_config.h.in\n+++ b/cmake/lws_config.h.in\n@@ -188,6 +188,7 @@\n #cmakedefine LWS_WITH_CBOR_FLOAT\n #cmakedefine LWS_WITH_JSONRPC\n #cmakedefine LWS_WITH_LEJP\n+#cmakedefine LWS_WITH_LHP\n #cmakedefine LWS_WITH_LIBEV\n #cmakedefine LWS_WITH_LIBEVENT\n #cmakedefine LWS_WITH_LIBUV\ndiff --git a/doc-assets/lhp-104-212-red.jpg b/doc-assets/lhp-104-212-red.jpg\nnew file mode 100644\nindex 0000000..d1bc79f\nBinary files /dev/null and b/doc-assets/lhp-104-212-red.jpg differ\ndiff --git a/doc-assets/lhp-400-300-red.jpg b/doc-assets/lhp-400-300-red.jpg\nnew file mode 100644\nindex 0000000..a325f46\nBinary files /dev/null and b/doc-assets/lhp-400-300-red.jpg differ\ndiff --git a/doc-assets/lhp-acep7.jpg b/doc-assets/lhp-acep7.jpg\nnew file mode 100644\nindex 0000000..8439ad6\nBinary files /dev/null and b/doc-assets/lhp-acep7.jpg differ\ndiff --git a/doc-assets/lhp-epd-flex-104.jpg b/doc-assets/lhp-epd-flex-104.jpg\nnew file mode 100644\nindex 0000000..4b3e88d\nBinary files /dev/null and b/doc-assets/lhp-epd-flex-104.jpg differ\ndiff --git a/doc-assets/lhp-example-g4.jpg b/doc-assets/lhp-example-g4.jpg\nnew file mode 100644\nindex 0000000..0e23936\nBinary files /dev/null and b/doc-assets/lhp-example-g4.jpg differ\ndiff --git a/doc-assets/lhp-overview.png b/doc-assets/lhp-overview.png\nnew file mode 100644\nindex 0000000..c0de5e8\nBinary files /dev/null and b/doc-assets/lhp-overview.png differ\ndiff --git a/doc-assets/lhp-rgb-example.png b/doc-assets/lhp-rgb-example.png\nnew file mode 100644\nindex 0000000..e4266ad\nBinary files /dev/null and b/doc-assets/lhp-rgb-example.png differ\ndiff --git a/doc-assets/lhp-ss-unification.png b/doc-assets/lhp-ss-unification.png\nnew file mode 100644\nindex 0000000..8b8f696\nBinary files /dev/null and b/doc-assets/lhp-ss-unification.png differ\ndiff --git a/include/libwebsockets.h b/include/libwebsockets.h\nindex ebad849..0da1767 100644\n--- a/include/libwebsockets.h\n+++ b/include/libwebsockets.h\n@@ -798,6 +798,8 @@ lws_fx_string(const lws_fx_t *a, char *buf, size_t size);\n #include \u003clibwebsockets/lws-netdev.h\u003e\n #endif\n \n+#include \u003clibwebsockets/lws-html.h\u003e\n+\n #ifdef __cplusplus\n }\n #endif\ndiff --git a/include/libwebsockets/lws-dlo.h b/include/libwebsockets/lws-dlo.h\nindex 1de3415..f19aac4 100644\n--- a/include/libwebsockets/lws-dlo.h\n+++ b/include/libwebsockets/lws-dlo.h\n@@ -49,6 +49,11 @@ struct lws_dlo;\n /* stores Y in RGBY */\n #define PALETTE_RGBY(_r, _g, _b) LWSDC_RGBA(_r, _g, _b, (RGB_TO_Y(_r, _g, _b)))\n \n+typedef struct {\n+\tlws_fx_t\tw;\n+\tlws_fx_t\th;\n+} lws_dlo_dim_t;\n+\n /*\n * When using RGBA to describe native greyscale, R is Y and A is A, GB is ignored\n */\n@@ -98,20 +103,37 @@ typedef struct lws_display_id {\n typedef struct lws_dlo {\n \tlws_dll2_t\t\t\tlist;\n \n+\tlws_dll2_t\t\t\tcol_list; /* lws_dlo_t: column-mates */\n+\tlws_dll2_t\t\t\trow_list; /* lws_dlo_t: row-mates */\n+\n \t/* children are rendered \u0022inside\u0022 the parent DLO box after allowing\n \t * for parent padding */\n \tlws_dll2_owner_t\t\tchildren;\n \n+\t/* only used for dlo rect representing whole table */\n+\n+\tlws_dll2_owner_t\t\ttable_cols; /* lhp_table_col_t */\n+\tlws_dll2_owner_t\t\ttable_rows; /* lhp_table_row_t */\n+\n+\t/* may point to dlo whose width or height decides our x or y */\n+\n+\tstruct lws_dlo\t\t\t*abut_x;\n+\tstruct lws_dlo\t\t\t*abut_y;\n+\n \tlws_dlo_destroy_t\t\t_destroy; /* dlo-type specific cb */\n \tlws_dlo_renderer_t\t\trender; /* dlo-type specific cb */\n \n+\tlws_fx_t\t\t\tmargin[4];\n+\tlws_fx_t\t\t\tpadding[4]; /* child origin */\n+\n \tlws_display_id_t\t\t*id; /* only valid until ids destroyed */\n \n \tlws_box_t\t\t\tbox;\n \tlws_display_colour_t\t\tdc;\n \n \tuint8_t\t\t\t\tflag_runon:1; /* continues same line */\n-\tuint8_t\t\t\t\tflag_done_align:1; /* continues same line */\n+\tuint8_t\t\t\t\tflag_done_align:1;\n+\tuint8_t\t\t\t\tflag_toplevel:1; /* don't scan up with me (different owner) */\n \n \t/* render-specific members ... */\n } lws_dlo_t;\n@@ -232,7 +254,8 @@ typedef struct lws_dlo_jpeg {\n \n typedef enum {\n \tLWSDLOSS_TYPE_JPEG,\n-\tLWSDLOSS_TYPE_PNG\n+\tLWSDLOSS_TYPE_PNG,\n+\tLWSDLOSS_TYPE_CSS,\n } lws_dlo_image_type_t;\n \n typedef struct {\n@@ -297,6 +320,12 @@ lws_display_render_get_id(lws_display_render_state_t *rs, const char *id);\n LWS_VISIBLE LWS_EXTERN void\n lws_display_render_dump_ids(lws_dll2_owner_t *ids);\n \n+LWS_VISIBLE LWS_EXTERN void\n+lws_dlo_contents(lws_dlo_t *parent, lws_dlo_dim_t *dim);\n+\n+LWS_VISIBLE LWS_EXTERN void\n+lws_display_dlo_adjust_dims(lws_dlo_t *dlo, lws_dlo_dim_t *dim);\n+\n /**\n * lws_display_dl_init() - init display list object\n *\n@@ -424,17 +453,19 @@ typedef struct {\n \tstruct lhp_ctx\t\t\t*lhp;\n \tlws_dlo_image_t\t\t\t*u;\n \tint32_t\t\t\t\twindow;\n+\n+\tuint8_t\t\t\t\ttype;\n } lws_dlo_ss_create_info_t;\n \n-LWS_VISIBLE LWS_EXTERN lws_dlo_t *\n-lws_dlo_ss_create(lws_dlo_ss_create_info_t *i);\n+LWS_VISIBLE LWS_EXTERN int\n+lws_dlo_ss_create(lws_dlo_ss_create_info_t *i, lws_dlo_t **pdlo);\n \n typedef struct lhp_ctx lhp_ctx_t;\n \n LWS_VISIBLE LWS_EXTERN int\n lws_dlo_ss_find(struct lws_context *cx, const char *url, lws_dlo_image_t *u);\n \n-LWS_VISIBLE LWS_EXTERN signed char\n+LWS_VISIBLE LWS_EXTERN lws_stateful_ret_t\n lhp_displaylist_layout(lhp_ctx_t *ctx, char reason);\n \n #define lws_dlo_image_width(_u) ((_u)-\u003efailed ? -1 : \u005c\n@@ -471,7 +502,7 @@ lws_fonts_destroy(struct lws_context *cx);\n * Static blob registry (built-in, name-accessible blobs)\n */\n \n-LWS_VISIBLE LWS_EXTERN int\n+LWS_VISIBLE LWS_EXTERN lws_dlo_filesystem_t *\n lws_dlo_file_register(struct lws_context *cx, const lws_dlo_filesystem_t *f);\n \n /* only needed if f dynamically heap-allocated... doesn't free data; data\n@@ -481,6 +512,9 @@ lws_dlo_file_register(struct lws_context *cx, const lws_dlo_filesystem_t *f);\n LWS_VISIBLE LWS_EXTERN void\n lws_dlo_file_unregister(lws_dlo_filesystem_t **f);\n \n+LWS_VISIBLE LWS_EXTERN void\n+lws_dlo_file_unregister_by_name(struct lws_context *cx, const char *name);\n+\n LWS_VISIBLE LWS_EXTERN const lws_dlo_filesystem_t *\n lws_dlo_file_choose(struct lws_context *cx, const char *name);\n \ndiff --git a/include/libwebsockets/lws-html.h b/include/libwebsockets/lws-html.h\nnew file mode 100644\nindex 0000000..c18eaac\n--- /dev/null\n+++ b/include/libwebsockets/lws-html.h\n@@ -0,0 +1,659 @@\n+/*\n+ * libwebsockets - small server side websockets and web server implementation\n+ *\n+ * Copyright (C) 2010 - 2022 Andy Green \u003candy@warmcat.com\u003e\n+ *\n+ * Permission is hereby granted, free of charge, to any person obtaining a copy\n+ * of this software and associated documentation files (the \u0022Software\u0022), to\n+ * deal in the Software without restriction, including without limitation the\n+ * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n+ * sell copies of the Software, and to permit persons to whom the Software is\n+ * furnished to do so, subject to the following conditions:\n+ *\n+ * The above copyright notice and this permission notice shall be included in\n+ * all copies or substantial portions of the Software.\n+ *\n+ * THE SOFTWARE IS PROVIDED \u0022AS IS\u0022, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n+ * IN THE SOFTWARE.\n+ *\n+ * Extremely Lightweight HTML5 Stream Parser, same approach as lecp but for\n+ * html5.\n+ */\n+\n+#if !defined(LHP_MAX_ELEMS_NEST)\n+#define LHP_MAX_ELEMS_NEST\t\t32\n+#endif\n+#if !defined(LHP_MAX_DEPTH)\n+#define LHP_MAX_DEPTH\t\t\t12\n+#endif\n+#if !defined(LHP_STRING_CHUNK)\n+#define LHP_STRING_CHUNK\t\t254\n+#endif\n+\n+enum lhp_callbacks {\n+\n+\tLHPCB_ERR_ATTRIB_SYNTAX\t\t\u003d -5,\n+\tLHPCB_ERR_ATTRIB_LEN\t\t\u003d -4,\n+\tLHPCB_ERR_OOM\t\t\t\u003d -3,\n+\tLHPCB_ERR_ELEM_DEPTH\t\t\u003d -2,\n+\tLHPCB_CONTINUE\t\t\t\u003d -1,\n+\n+\tLHPCB_CONSTRUCTED\t\t\u003d 0,\n+\tLHPCB_DESTRUCTED\t\t\u003d 1,\n+\n+\tLHPCB_COMPLETE\t\t\t\u003d 2,\n+\tLHPCB_FAILED\t\t\t\u003d 3,\n+\n+\tLHPCB_ELEMENT_START\t\t\u003d 4,\t/* reported at end of \u003c\u003e */\n+\tLHPCB_ELEMENT_END\t\t\u003d 5,\n+\n+\tLHPCB_CONTENT\t\t\t\u003d 6,\n+\n+\tLHPCB_COMMENT\t\t\t\u003d 7,\n+};\n+\n+/*\n+ * CSS v2.1 full property set, taken from\n+ *\n+ * https://www.w3.org/TR/CSS21/propidx.html\n+ */\n+\n+typedef enum lcsp_props {\n+\tLCSP_PROP_AZIMUTH,\n+\tLCSP_PROP_BACKGROUND_ATTACHMENT,\n+\tLCSP_PROP_BACKGROUND_COLOR,\n+\tLCSP_PROP_BACKGROUND_IMAGE,\n+\tLCSP_PROP_BACKGROUND_POSITION,\n+\tLCSP_PROP_BACKGROUND_REPEAT,\n+\tLCSP_PROP_BACKGROUND,\n+\tLCSP_PROP_BORDER_COLLAPSE,\n+\tLCSP_PROP_BORDER_COLOR,\n+\tLCSP_PROP_BORDER_SPACING,\n+\tLCSP_PROP_BORDER_STYLE,\n+\tLCSP_PROP_BORDER_TOP,\n+\tLCSP_PROP_BORDER_RIGHT,\n+\tLCSP_PROP_BORDER_BOTTOM,\n+\tLCSP_PROP_BORDER_LEFT,\n+\tLCSP_PROP_BORDER_TOP_COLOR,\n+\tLCSP_PROP_BORDER_RIGHT_COLOR,\n+\tLCSP_PROP_BORDER_BOTTOM_COLOR,\n+\tLCSP_PROP_BORDER_LEFT_COLOR,\n+\tLCSP_PROP_BORDER_TOP_STYLE,\n+\tLCSP_PROP_BORDER_RIGHT_STYLE,\n+\tLCSP_PROP_BORDER_BOTTOM_STYLE,\n+\tLCSP_PROP_BORDER_LEFT_STYLE,\n+\tLCSP_PROP_BORDER_TOP_WIDTH,\n+\tLCSP_PROP_BORDER_RIGHT_WIDTH,\n+\tLCSP_PROP_BORDER_BOTTOM_WIDTH,\n+\tLCSP_PROP_BORDER_LEFT_WIDTH,\n+\tLCSP_PROP_BORDER_WIDTH,\n+\tLCSP_PROP_BORDER_TOP_LEFT_RADIUS,\n+\tLCSP_PROP_BORDER_TOP_RIGHT_RADIUS,\n+\tLCSP_PROP_BORDER_BOTTOM_LEFT_RADIUS,\n+\tLCSP_PROP_BORDER_BOTTOM_RIGHT_RADIUS,\n+\tLCSP_PROP_BORDER_RADIUS,\n+\tLCSP_PROP_BORDER,\n+\tLCSP_PROP_BOTTOM,\n+\tLCSP_PROP_CAPTION_SIDE,\n+\tLCSP_PROP_CLEAR,\n+\tLCSP_PROP_CLIP,\n+\tLCSP_PROP_COLOR,\n+\tLCSP_PROP_CONTENT,\n+\tLCSP_PROP_COUNTER_INCREMENT,\n+\tLCSP_PROP_COUNTER_RESET,\n+\tLCSP_PROP_CUE_AFTER,\n+\tLCSP_PROP_CUE_BEFORE,\n+\tLCSP_PROP_CUE,\n+\tLCSP_PROP_CURSOR,\n+\tLCSP_PROP_DIRECTION,\n+\tLCSP_PROP_DISPLAY,\n+\tLCSP_PROP_ELEVATION,\n+\tLCSP_PROP_EMPTY_CELLS,\n+\tLCSP_PROP_FLOAT,\n+\tLCSP_PROP_FONT_FAMILY,\n+\tLCSP_PROP_FONT_SIZE,\n+\tLCSP_PROP_FONT_STYLE,\n+\tLCSP_PROP_FONT_VARAIANT,\n+\tLCSP_PROP_FONT_WEIGHT,\n+\tLCSP_PROP_FONT,\n+\tLCSP_PROP_HEIGHT,\n+\tLCSP_PROP_LEFT,\n+\tLCSP_PROP_LETTER_SPACING,\n+\tLCSP_PROP_LINE_HEIGHT,\n+\tLCSP_PROP_LIST_STYLE_IMAGE,\n+\tLCSP_PROP_LIST_STYLE_POSITION,\n+\tLCSP_PROP_LIST_STYLE_TYPE,\n+\tLCSP_PROP_LIST_STYLE,\n+\tLCSP_PROP_MARGIN_RIGHT,\n+\tLCSP_PROP_MARGIN_LEFT,\n+\tLCSP_PROP_MARGIN_TOP,\n+\tLCSP_PROP_MARGIN_BOTTOM,\n+\tLCSP_PROP_MARGIN,\n+\tLCSP_PROP_MAX_HEIGHT,\n+\tLCSP_PROP_MAX_WIDTH,\n+\tLCSP_PROP_MIN_HEIGHT,\n+\tLCSP_PROP_MIN_WIDTH,\n+\tLCSP_PROP_ORPHANS,\n+\tLCSP_PROP_OUTLINE_COLOR,\n+\tLCSP_PROP_OUTLINE_STYLE,\n+\tLCSP_PROP_OUTLINE_WIDTH,\n+\tLCSP_PROP_OUTLINE,\n+\tLCSP_PROP_OVERFLOW,\n+\tLCSP_PROP_PADDING_TOP,\n+\tLCSP_PROP_PADDING_RIGHT,\n+\tLCSP_PROP_PADDING_BOTTOM,\n+\tLCSP_PROP_PADDING_LEFT,\n+\tLCSP_PROP_PADDING,\n+\tLCSP_PROP_PAGE_BREAK_AFTER,\n+\tLCSP_PROP_PAGE_BREAK_BEFORE,\n+\tLCSP_PROP_PAGE_BREAK_INSIDE,\n+\tLCSP_PROP_PAUSE_AFTER,\n+\tLCSP_PROP_PAUSE_BEFORE,\n+\tLCSP_PROP_PAUSE,\n+\tLCSP_PROP_PITCH_RANGE,\n+\tLCSP_PROP_PITCH,\n+\tLCSP_PROP_PLAY_DURING,\n+\tLCSP_PROP_POSITION,\n+\tLCSP_PROP_QUOTES,\n+\tLCSP_PROP_RICHNESS,\n+\tLCSP_PROP_RIGHT,\n+\tLCSP_PROP_SPEAK_HEADER,\n+\tLCSP_PROP_SPEAK_NUMERAL,\n+\tLCSP_PROP_SPEAK_PUNCTUATION,\n+\tLCSP_PROP_SPEAK,\n+\tLCSP_PROP_SPEECH_RATE,\n+\tLCSP_PROP_STRESS,\n+\tLCSP_PROP_TABLE_LAYOUT,\n+\tLCSP_PROP_TEXT_ALIGN,\n+\tLCSP_PROP_TEXT_DECORATION,\n+\tLCSP_PROP_TEXT_INDENT,\n+\tLCSP_PROP_TEXT_TRANSFORM,\n+\tLCSP_PROP_TOP,\n+\tLCSP_PROP_UNICODE_BIDI,\n+\tLCSP_PROP_VERTICAL_ALIGN,\n+\tLCSP_PROP_VISIBILITY,\n+\tLCSP_PROP_VOICE_FAMILY,\n+\tLCSP_PROP_VOLUME,\n+\tLCSP_PROP_WHITE_SPACE,\n+\tLCSP_PROP_WIDOWS,\n+\tLCSP_PROP_WIDTH,\n+\tLCSP_PROP_WORD_SPACING,\n+\tLCSP_PROP_Z_INDEX,\n+\n+\tLCSP_PROP__COUNT /* always last */\n+} lcsp_props_t;\n+\n+/*\n+ * Indexes for the well-known property values\n+ */\n+\n+typedef enum {\n+\tLCSP_PROPVAL_ABOVE,\n+\tLCSP_PROPVAL_ABSOLUTE,\n+\tLCSP_PROPVAL_ALWAYS,\n+\tLCSP_PROPVAL_ARMENIAN,\n+\tLCSP_PROPVAL_AUTO,\n+\tLCSP_PROPVAL_AVOID,\n+\tLCSP_PROPVAL_BASELINE,\n+\tLCSP_PROPVAL_BEHIND,\n+\tLCSP_PROPVAL_BELOW,\n+\tLCSP_PROPVAL_BIDI_OVERRIDE,\n+\tLCSP_PROPVAL_BLINK,\n+\tLCSP_PROPVAL_BLOCK,\n+\tLCSP_PROPVAL_BOLD,\n+\tLCSP_PROPVAL_BOLDER,\n+\tLCSP_PROPVAL_BOTH,\n+\tLCSP_PROPVAL_BOTTOM,\n+\tLCSP_PROPVAL_CAPITALIZE,\n+\tLCSP_PROPVAL_CAPTION,\n+\tLCSP_PROPVAL_CENTER,\n+\tLCSP_PROPVAL_CIRCLE,\n+\tLCSP_PROPVAL_CLOSE_QUOTE,\n+\tLCSP_PROPVAL_CODE,\n+\tLCSP_PROPVAL_COLLAPSE,\n+\tLCSP_PROPVAL_CONTINUOUS,\n+\tLCSP_PROPVAL_CROSSHAIR,\n+\tLCSP_PROPVAL_DECIMAL_LEADING_ZERO,\n+\tLCSP_PROPVAL_DECIMAL,\n+\tLCSP_PROPVAL_DIGITS,\n+\tLCSP_PROPVAL_DISC,\n+\tLCSP_PROPVAL_EMBED,\n+\tLCSP_PROPVAL_E_RESIZE,\n+\tLCSP_PROPVAL_FIXED,\n+\tLCSP_PROPVAL_GEORGIAN,\n+\tLCSP_PROPVAL_HELP,\n+\tLCSP_PROPVAL_HIDDEN,\n+\tLCSP_PROPVAL_HIDE,\n+\tLCSP_PROPVAL_HIGH,\n+\tLCSP_PROPVAL_HIGHER,\n+\tLCSP_PROPVAL_ICON,\n+\tLCSP_PROPVAL_INHERIT,\n+\tLCSP_PROPVAL_INLINE,\n+\tLCSP_PROPVAL_INLINE_BLOCK,\n+\tLCSP_PROPVAL_INLINE_TABLE,\n+\tLCSP_PROPVAL_INVERT,\n+\tLCSP_PROPVAL_ITALIC,\n+\tLCSP_PROPVAL_JUSTIFY,\n+\tLCSP_PROPVAL_LEFT,\n+\tLCSP_PROPVAL_LIGHTER,\n+\tLCSP_PROPVAL_LINE_THROUGH,\n+\tLCSP_PROPVAL_LIST_ITEM,\n+\tLCSP_PROPVAL_LOW,\n+\tLCSP_PROPVAL_LOWER,\n+\tLCSP_PROPVAL_LOWER_ALPHA,\n+\tLCSP_PROPVAL_LOWERCASE,\n+\tLCSP_PROPVAL_LOWER_GREEK,\n+\tLCSP_PROPVAL_LOWER_LATIN,\n+\tLCSP_PROPVAL_LOWER_ROMAN,\n+\tLCSP_PROPVAL_LTR,\n+\tLCSP_PROPVAL_MENU,\n+\tLCSP_PROPVAL_MESSAGE_BOX,\n+\tLCSP_PROPVAL_MIDDLE,\n+\tLCSP_PROPVAL_MIX,\n+\tLCSP_PROPVAL_MOVE,\n+\tLCSP_PROPVAL_NE_RESIZE,\n+\tLCSP_PROPVAL_NO_CLOSE_QUOTE,\n+\tLCSP_PROPVAL_NONE,\n+\tLCSP_PROPVAL_NO_OPEN_QUOTE,\n+\tLCSP_PROPVAL_NO_REPEAT,\n+\tLCSP_PROPVAL_NORMAL,\n+\tLCSP_PROPVAL_NOWRAP,\n+\tLCSP_PROPVAL_N_RESIZE,\n+\tLCSP_PROPVAL_NW_RESIZE,\n+\tLCSP_PROPVAL_OBLIQUE,\n+\tLCSP_PROPVAL_ONCE,\n+\tLCSP_PROPVAL_OPEN_QUOTE,\n+\tLCSP_PROPVAL_OUTSIDE,\n+\tLCSP_PROPVAL_OVERLINE,\n+\tLCSP_PROPVAL_POINTER,\n+\tLCSP_PROPVAL_PRE,\n+\tLCSP_PROPVAL_PRE_LINE,\n+\tLCSP_PROPVAL_PRE_WRAP,\n+\tLCSP_PROPVAL_PROGRESS,\n+\tLCSP_PROPVAL_RELATIVE,\n+\tLCSP_PROPVAL_REPEAT,\n+\tLCSP_PROPVAL_REPEAT_X,\n+\tLCSP_PROPVAL_REPEAT_Y,\n+\tLCSP_PROPVAL_RIGHT,\n+\tLCSP_PROPVAL_RTL,\n+\tLCSP_PROPVAL_SCROLL,\n+\tLCSP_PROPVAL_SEPARATE,\n+\tLCSP_PROPVAL_SE_RESIZE,\n+\tLCSP_PROPVAL_SHOW,\n+\tLCSP_PROPVAL_SILENT,\n+\tLCSP_PROPVAL_SMALL_CAPS,\n+\tLCSP_PROPVAL_SMALL_CAPTION,\n+\tLCSP_PROPVAL_SPELL_OUT,\n+\tLCSP_PROPVAL_SQUARE,\n+\tLCSP_PROPVAL_S_RESIZE,\n+\tLCSP_PROPVAL_STATIC,\n+\tLCSP_PROPVAL_STATUS_BAR,\n+\tLCSP_PROPVAL_SUB,\n+\tLCSP_PROPVAL_SUPER,\n+\tLCSP_PROPVAL_SW_RESIZE,\n+\tLCSP_PROPVAL_TABLE,\n+\tLCSP_PROPVAL_TABLE_CAPTION,\n+\tLCSP_PROPVAL_TABLE_CELL,\n+\tLCSP_PROPVAL_TABLE_COLUMN,\n+\tLCSP_PROPVAL_TABLE_COLUMN_GROUP,\n+\tLCSP_PROPVAL_TABLE_FOOTER_GROUP,\n+\tLCSP_PROPVAL_TABLE_HEADER_GROUP,\n+\tLCSP_PROPVAL_TABLE_ROW,\n+\tLCSP_PROPVAL_TABLE_ROW_GROUP,\n+\tLCSP_PROPVAL_TEXT_BOTTOM,\n+\tLCSP_PROPVAL_TEXT_TOP,\n+\tLCSP_PROPVAL_TEXT,\n+\tLCSP_PROPVAL_TOP,\n+\tLCSP_PROPVAL_TRANSPARENT,\n+\tLCSP_PROPVAL_UNDERLINE,\n+\tLCSP_PROPVAL_UPPER_ALPHA,\n+\tLCSP_PROPVAL_UPPERCASE,\n+\tLCSP_PROPVAL_UPPER_LATIN,\n+\tLCSP_PROPVAL_UPPER_ROMAN,\n+\tLCSP_PROPVAL_VISIBLE,\n+\tLCSP_PROPVAL_WAIT,\n+\tLCSP_PROPVAL_W_RESIZE,\n+\n+\tLCSP_PROPVAL__COUNT /* always last */\n+} lcsp_propvals_t;\n+\n+struct lhp_ctx;\n+typedef lws_stateful_ret_t (*lhp_callback)(struct lhp_ctx *ctx, char reason);\n+\n+/* html attribute */\n+\n+typedef struct lhp_atr {\n+\tlws_dll2_t\t\tlist;\n+\tsize_t\t\t\tname_len;\t/* 0 if it is elem tag */\n+\tsize_t\t\t\tvalue_len;\n+\n+\t/* name+NUL then value+NUL follow */\n+} lhp_atr_t;\n+\n+struct lcsp_atr;\n+\n+#define CCPAS_TOP 0\n+#define CCPAS_RIGHT 1\n+#define CCPAS_BOTTOM 2\n+#define CCPAS_LEFT 3\n+\n+typedef struct lhp_pstack {\n+\tlws_dll2_t\t\t\tlist;\n+\tvoid\t\t\t\t*user;\t/* private to the stack level */\n+\tlhp_callback\t\t\tcb;\n+\n+\t/* static: x,y: offset from parent, w,h: surface size of this object */\n+\tlws_box_t\t\t\tdrt;\n+\n+\t/* dynamic cursor inside drt for progressive child placement */\n+\tlws_fx_t\t\t\tcurx;\n+\tlws_fx_t\t\t\tcury;\n+\tlws_fx_t\t\t\twidest;\n+\n+\tlws_dll2_owner_t\t\tatr; /* lhp_atr_t */\n+\n+\tconst lws_display_font_t\t*f;\n+\n+\tconst struct lcsp_atr\t\t*css_background_color;\n+\tconst struct lcsp_atr\t\t*css_color;\n+\n+\tconst struct lcsp_atr\t\t*css_position;\n+\tconst struct lcsp_atr\t\t*css_display;\n+\tconst struct lcsp_atr\t\t*css_width;\n+\tconst struct lcsp_atr\t\t*css_height;\n+\n+\tconst struct lcsp_atr\t\t*css_border_radius[4];\n+\n+\tconst struct lcsp_atr\t\t*css_pos[4];\n+\tconst struct lcsp_atr\t\t*css_margin[4];\n+\tconst struct lcsp_atr\t\t*css_padding[4];\n+\n+\tuint8_t\t\t\t\tis_block; /* children use space in our drt */\n+\n+\t/* user layout owns these after initial values set */\n+\n+\tvoid\t\t\t\t*opaque1;\n+\tconst void\t\t\t*opaque2;\n+\tint\t\t\t\toi[4];\n+\tint\t\t\t\tpositioned[4];\n+\tint\t\t\t\trel_layout_cursor[4];\n+\tuint8_t\t\t\t\trunon; /* continues same line */\n+\n+} lhp_pstack_t;\n+\n+typedef enum lcsp_css_units {\n+\tLCSP_UNIT_NONE,\n+\n+\tLCSP_UNIT_NUM,\t\t\t/* u.i */\n+\n+\tLCSP_UNIT_LENGTH_EM,\t\t/* u.i */\n+\tLCSP_UNIT_LENGTH_EX,\t\t/* u.i */\n+\tLCSP_UNIT_LENGTH_IN,\t\t/* u.i */\n+\tLCSP_UNIT_LENGTH_CM,\t\t/* u.i */\n+\tLCSP_UNIT_LENGTH_MM,\t\t/* u.i */\n+\tLCSP_UNIT_LENGTH_PT,\t\t/* u.i */\n+\tLCSP_UNIT_LENGTH_PC,\t\t/* u.i */\n+\tLCSP_UNIT_LENGTH_PX,\t\t/* u.i */\n+\tLCSP_UNIT_LENGTH_PERCENT,\t/* u.i */\n+\n+\tLCSP_UNIT_ANGLE_ABS_DEG,\t/* u.i */\n+\tLCSP_UNIT_ANGLE_REL_DEG,\t/* u.i */\n+\n+\tLCSP_UNIT_FREQ_HZ,\t\t/* u.i */\n+\n+\tLCSP_UNIT_RGBA,\t\t\t/* u.rgba */\n+\n+\tLCSP_UNIT_URL,\t\t\t/* string at end of atr */\n+\tLCSP_UNIT_STRING,\t\t/* string at end of atr */\n+\tLCSP_UNIT_DATA,\t\t\t/* binary data at end of atr */\n+\n+} lcsp_css_units_t;\n+\n+typedef struct lcsp_atr {\n+\tlws_dll2_t\t\tlist;\n+\n+\tint\t\t\tpropval; /* lcsp_propvals_t LCSP_PROPVAL_ */\n+\n+\tsize_t\t\t\tvalue_len;\t/* for string . url */\n+\tlcsp_css_units_t\tunit;\n+\n+\tunion {\n+\t\tlws_fx_t\ti;\n+\t\tuint32_t \trgba;\t/* for colours */\n+\t} u;\n+\n+\tlws_fx_t\t\tr;\n+\n+\tuint8_t\t\t\top;\n+\n+\t/* .value_len bytes follow (for strings and blobs) */\n+} lcsp_atr_t;\n+\n+/* css definitions like font-weight: */\n+typedef struct lcsp_defs {\n+\tlws_dll2_t\t\tlist;\n+\tlws_dll2_owner_t\tatrs;\t\t/* lcsp_atr_t */\n+\tlcsp_props_t\t\tprop;\t\t/* lcsp_props_t, LCSP_PROP_* */\n+} lcsp_defs_t;\n+\n+typedef struct lcsp_names {\n+\tlws_dll2_t\t\tlist;\n+\tsize_t\t\t\tname_len;\n+\n+\t/* name + NUL follow */\n+} lcsp_names_t;\n+\n+typedef struct lcsp_stanza { /* css stanza, with names and defs */\n+\tlws_dll2_t\t\tlist;\n+\n+\tlws_dll2_owner_t\tnames; /* lcsp_names_t */\n+\tlws_dll2_owner_t\tdefs; /* lcsp_defs_t */\n+\n+} lcsp_stanza_t;\n+\n+/*\n+ * A list of stanza references can easily have to bring in the same stanza\n+ * multiple times, eg, \u003cdiv\u003e\u003cspan class\u003dx\u003e\u003cdiv\u003e won't work unless the div\n+ * stanzas are listed twice at different places in the list. It means we can't\n+ * use dll2 directly since the number of references is open-ended.\n+ *\n+ * lcsp_stanza_ptr provides indirection that allows multiple listings.\n+ */\n+\n+typedef struct lcsp_stanza_ptr {\n+\tlws_dll2_t\t\tlist;\n+\n+\tlcsp_stanza_t\t\t*stz;\n+} lcsp_stanza_ptr_t;\n+\n+typedef struct lcsp_atr_ptr {\n+\tlws_dll2_t\t\tlist;\n+\n+\tlcsp_atr_t\t\t*atr;\n+} lcsp_atr_ptr_t;\n+\n+#define LHP_FLAG_DOCUMENT_END\t\t\t\t\t(1 \u003c\u003c 0)\n+\n+typedef struct lhp_ctx {\n+\tlws_dll2_owner_t\tstack; /* lhp_pstack_t */\n+\n+\tstruct lwsac\t\t*cssac; /* css allocations all in an ac */\n+\tstruct lwsac\t\t*cascadeac; /* active_stanzas ac */\n+\tstruct lwsac\t\t*propatrac; /* prop atr query results ac */\n+\tlws_dll2_owner_t\tcss; /* lcsp_stanza_t (all in ac) */\n+\n+\tlws_dll2_owner_t\t*ids;\n+\n+\tlws_fx_t\t\ttf;\n+\tlcsp_css_units_t\tunit;\n+\tlcsp_stanza_t\t\t*stz; /* current stanza getting properties */\n+\tlcsp_defs_t\t\t*def; /* current property getting values */\n+\n+\tlws_dll2_owner_t\tactive_stanzas; /* lcsp_stanza_ptr_t allocated\n+\t\t\t\t\t\t * in cascadeac */\n+\tlws_dll2_owner_t\tactive_atr; /* lcsp_atr_ptr_t allocated in\n+\t\t\t\t\t * propatrac */\n+\n+\tlws_surface_info_t\tic;\n+\n+\tconst char\t\t*base_url; /* strdup of https://x.com/y.html */\n+\tsul_cb_t\t\tssevcb; /* callback for ss events */\n+\tlws_sorted_usec_list_t\t*ssevsul; /* sul to use to resume rz */\n+\n+\tvoid\t\t\t*user;\n+\tvoid\t\t\t*user1;\n+\tconst char\t\t*tag; /* private */\n+\tsize_t\t\t\ttag_len; /* private */\n+\n+\tint\t\t\tnpos;\n+\tint\t\t\tstate; /* private */\n+\tint\t\t\tstate_css_comm; /* private */\n+\tint\t\t\tnl_temp;\n+\tint\t\t\ttemp_count;\n+\n+\tuint32_t\t\tflags;\n+\tuint32_t\t\ttemp;\n+\tint32_t\t\t\twindow; /* 0, or ss item flow control limit */\n+\n+\tunion {\n+\t\tuint32_t\ts;\n+\t\tstruct {\n+\t\t\tuint32_t\tfirst:1;\n+\t\t\tuint32_t\tclosing:1;\n+\t\t\tuint32_t\tvoid_element:1;\n+\t\t\tuint32_t\tdoctype:1;\n+\t\t\tuint32_t\tinq:1;\n+\t\t\tuint32_t\ttag_used:1;\n+\t\t\tuint32_t\targ:1;\n+\t\t\tuint32_t\tdefault_css:1;\n+#define LHP_CSS_PROPVAL_INT_WHOLE\t1\n+#define LHP_CSS_PROPVAL_INT_FRAC\t2\n+#define LHP_CSS_PROPVAL_INT_UNIT\t3\n+\t\t\tuint32_t\tinteger:2;\n+\t\t\tuint32_t\tcolor:2;\n+\t\t} f;\n+\t} u;\n+\n+\tint\t\t\tprop; /* lcsp_props_t */\n+\tint\t\t\tpropval; /* lcsp_propvals_t */\n+\tint16_t\t\t\tcss_state; /* private */\n+\tint16_t\t\t\tcssval_state; /* private */\n+\n+\tuint8_t\t\t\tin_body:1;\n+\n+\t/* at end so we can memset members above it in one go */\n+\n+\tchar\t\t\tbuf[LHP_STRING_CHUNK + 1];\n+\n+} lhp_ctx_t;\n+\n+/*\n+ * lws_lhp_construct() - Construct an lhp context\n+ *\n+ * \u005cparam ctx: the lhp context to prepare\n+ * \u005cparam cb: the stream parsing callback\n+ * \u005cparam user: opaque user pointer available from the lhp context\n+ * \u005cparam ic: struct with arguments for lhp context\n+ *\n+ * The lhp context is allocated by the caller (the size is known).\n+ * Prepares an lhp context to parse html. Returns 0 for OK, or nonzero if OOM.\n+ */\n+LWS_VISIBLE LWS_EXTERN int\n+lws_lhp_construct(lhp_ctx_t *ctx, lhp_callback cb, void *user,\n+\t\t const lws_surface_info_t *ic);\n+\n+/*\n+ * lws_lhp_destruct() - Destroy an lhp context\n+ *\n+ * \u005cparam ctx: the lhp context to prepare\n+ *\n+ * Destroys an lhp context. The lhp context is allocated by the caller (the\n+ * size is known). But there are suballocations that must be destroyed with\n+ * this.\n+ */\n+LWS_VISIBLE LWS_EXTERN void\n+lws_lhp_destruct(lhp_ctx_t *ctx);\n+\n+/**\n+ * lws_lhp_ss_browse() - browse url using SS and parse via lhp to DLOs\n+ *\n+ * \u005cparam cx: the lws_context\n+ * \u005cparam rs: the user's render state object\n+ * \u005cparam url: the https://x.com/y.xyz URL to browse\n+ * \u005cparam render: the user's linewise render callback (called from \u005cp rs.sul)\n+ *\n+ * High level network fetch via SS and render html via lhp / DLO\n+ *\n+ * rs-\u003eic must be prepared before calling.\n+ *\n+ * Returns nonzero if an early, fatal problem, else returns 0 and continues\n+ * asynchronously.\n+ *\n+ * If rs-\u003ebox is (0,0,0,0) on entry, it is set to represent the whole display\n+ * surface. Otherwise if not representing the whole display surface, it\n+ * indicates partial mode should be used.\n+ */\n+LWS_VISIBLE LWS_EXTERN int\n+lws_lhp_ss_browse(struct lws_context *cx, lws_display_render_state_t *rs,\n+\t\t const char *url, sul_cb_t render);\n+\n+/**\n+ * lws_lhp_parse() - parses a chunk of input HTML\n+ *\n+ * \u005cp ctx: the parsing context\n+ * \u005cp buf: pointer to the start of the chunk of html\n+ * \u005cp len: pointer the number of bytes of html available at *\u005cpbuf\n+ *\n+ * Parses up to *len bytes at *buf. On exit, *buf and *len are adjusted\n+ * according to how much data was used. May return before processing all the\n+ * input.\n+ *\n+ * Returns LWS_SRET_WANT_INPUT if the parsing is stalled on some other async\n+ * event (eg, fetch of image to find out the dimensions).\n+ *\n+ * The lws_lhp_ss_browse() api wraps this.\n+ */\n+LWS_VISIBLE LWS_EXTERN lws_stateful_ret_t\n+lws_lhp_parse(lhp_ctx_t *ctx, const uint8_t **buf, size_t *len);\n+\n+/**\n+ * lws_css_cascade_get_prop_atr() - create active css atr list for property\n+ *\n+ * \u005cp ctx: the parsing context\n+ * \u005cp prop: the LCSP_PROP_ property to generate the attribute list for\n+ *\n+ * Returns NULL if no atr or OOM.\n+ *\n+ * Otherwise produces a list of active CSS property attributes walkable via\n+ * ctx-\u003eactive_atr, and returns the tail one. For simple attributes where the\n+ * last definition is the active one, this points to the last definition.\n+ */\n+LWS_VISIBLE LWS_EXTERN const lcsp_atr_t *\n+lws_css_cascade_get_prop_atr(lhp_ctx_t *ctx, lcsp_props_t prop);\n+\n+LWS_VISIBLE LWS_EXTERN lhp_pstack_t *\n+lws_css_get_parent_block(lhp_ctx_t *ctx, lhp_pstack_t *ps);\n+\n+LWS_VISIBLE LWS_EXTERN const char *\n+lws_css_pstack_name(lhp_pstack_t *ps);\n+\n+LWS_VISIBLE LWS_EXTERN const char *\n+lws_html_get_atr(lhp_pstack_t *ps, const char *aname, size_t aname_len);\n+\n+LWS_VISIBLE LWS_EXTERN const lws_fx_t *\n+lws_csp_px(const lcsp_atr_t *a, lhp_pstack_t *ps);\n+\n+LWS_VISIBLE LWS_EXTERN void\n+lws_lhp_tag_dlo_id(lhp_ctx_t *ctx, lhp_pstack_t *ps, lws_dlo_t *dlo);\n+\n+#define LWS_LHPREF_WIDTH\t\t0\n+#define LWS_LHPREF_HEIGHT\t\t1\n+#define LWS_LHPREF_NONE\t\t\t2\n+\n+LWS_VISIBLE LWS_EXTERN int\n+lhp_prop_axis(const lcsp_atr_t *a);\ndiff --git a/lib/misc/CMakeLists.txt b/lib/misc/CMakeLists.txt\nindex 71a3c92..3a5f4b5 100644\n--- a/lib/misc/CMakeLists.txt\n+++ b/lib/misc/CMakeLists.txt\n@@ -165,6 +165,16 @@ if (LWS_WITH_CBOR)\n \t\tmisc/lecp.c\n \t\tmisc/ieeehalfprecision.c)\n endif()\n+if (LWS_WITH_LHP)\n+\tlist(APPEND SOURCES\n+\t\tmisc/lhp.c)\n+\n+\tif (LWS_WITH_SECURE_STREAMS)\n+\t\tlist(APPEND SOURCES\n+\t\t\tmisc/lhp-ss.c)\n+\tendif()\n+\n+endif()\n \n if (UNIX)\n \tif (NOT LWS_HAVE_GETIFADDRS)\ndiff --git a/lib/misc/css-lextable-strings.txt b/lib/misc/css-lextable-strings.txt\nnew file mode 100644\nindex 0000000..a6d9211\n--- /dev/null\n+++ b/lib/misc/css-lextable-strings.txt\n@@ -0,0 +1,120 @@\n+azimuth:\n+background-attachment:\n+background-color:\n+background-image:\n+background-position:\n+background-repeat:\n+background:\n+border-collapse:\n+border-color:\n+border-spacing:\n+border-style:\n+border-top:\n+border-right:\n+border-bottom:\n+border-left:\n+border-top-color:\n+border-right-color:\n+border-bottom-color:\n+border-left-color:\n+border-top-style:\n+border-right-style:\n+border-bottom-style:\n+border-left-style:\n+border-top-width:\n+border-right-width:\n+border-bottom-width:\n+border-left-width:\n+border-width:\n+border-top-left-radius:\n+border-top-right-radius:\n+border-bottom-left-radius:\n+border-bottom-right-radius:\n+border-radius:\n+border:\n+bottom:\n+caption-side:\n+clear:\n+clip:\n+color:\n+content:\n+counter-increment:\n+counter-reset:\n+cue-after:\n+cue-before:\n+cue:\n+cursor:\n+direction:\n+display:\n+elevation:\n+empty-cells:\n+float:\n+font-family:\n+font-size:\n+font-style:\n+font-variant:\n+font-weight:\n+font:\n+height:\n+left:\n+letter-spacing:\n+line-height:\n+list-style-image:\n+list-style-position:\n+list-style-type:\n+list-style:\n+margin-right:\n+margin-left:\n+margin-top:\n+margin-bottom:\n+margin:\n+max-height:\n+max-width:\n+min-height:\n+min-width:\n+orphans:\n+outline-color:\n+outline-style:\n+outline-width:\n+outline:\n+overflow:\n+padding-top:\n+padding-right:\n+padding-bottom:\n+padding-left:\n+padding:\n+page-break-after:\n+page-break-before:\n+page-break-inside:\n+pause-after:\n+pause-before:\n+pause:\n+pitch-range:\n+pitch:\n+play-during:\n+position:\n+quotes:\n+richness:\n+right:\n+speak-header:\n+speak-numeral:\n+speak-punctuation:\n+speak:\n+speech-rate:\n+stress:\n+table-layout:\n+text-align:\n+text-decoration:\n+text-indent:\n+text-transform:\n+top:\n+unicode-bidi:\n+vertical-align:\n+visibility:\n+voice-family:\n+volume:\n+white-space:\n+widows:\n+width:\n+word-spacing:\n+z-index:\ndiff --git a/lib/misc/css-lextable.h b/lib/misc/css-lextable.h\nnew file mode 100644\nindex 0000000..446ca3c\n--- /dev/null\n+++ b/lib/misc/css-lextable.h\n@@ -0,0 +1,1337 @@\n+\t/* 0: azimuth: */\n+\t/* 1: background-attachment: */\n+\t/* 2: background-color: */\n+\t/* 3: background-image: */\n+\t/* 4: background-position: */\n+\t/* 5: background-repeat: */\n+\t/* 6: background: */\n+\t/* 7: border-collapse: */\n+\t/* 8: border-color: */\n+\t/* 9: border-spacing: */\n+\t/* 10: border-style: */\n+\t/* 11: border-top: */\n+\t/* 12: border-right: */\n+\t/* 13: border-bottom: */\n+\t/* 14: border-left: */\n+\t/* 15: border-top-color: */\n+\t/* 16: border-right-color: */\n+\t/* 17: border-bottom-color: */\n+\t/* 18: border-left-color: */\n+\t/* 19: border-top-style: */\n+\t/* 20: border-right-style: */\n+\t/* 21: border-bottom-style: */\n+\t/* 22: border-left-style: */\n+\t/* 23: border-top-width: */\n+\t/* 24: border-right-width: */\n+\t/* 25: border-bottom-width: */\n+\t/* 26: border-left-width: */\n+\t/* 27: border-width: */\n+\t/* 28: border-top-left-radius: */\n+\t/* 29: border-top-right-radius: */\n+\t/* 30: border-bottom-left-radius: */\n+\t/* 31: border-bottom-right-radius: */\n+\t/* 32: border-radius: */\n+\t/* 33: border: */\n+\t/* 34: bottom: */\n+\t/* 35: caption-side: */\n+\t/* 36: clear: */\n+\t/* 37: clip: */\n+\t/* 38: color: */\n+\t/* 39: content: */\n+\t/* 40: counter-increment: */\n+\t/* 41: counter-reset: */\n+\t/* 42: cue-after: */\n+\t/* 43: cue-before: */\n+\t/* 44: cue: */\n+\t/* 45: cursor: */\n+\t/* 46: direction: */\n+\t/* 47: display: */\n+\t/* 48: elevation: */\n+\t/* 49: empty-cells: */\n+\t/* 50: float: */\n+\t/* 51: font-family: */\n+\t/* 52: font-size: */\n+\t/* 53: font-style: */\n+\t/* 54: font-variant: */\n+\t/* 55: font-weight: */\n+\t/* 56: font: */\n+\t/* 57: height: */\n+\t/* 58: left: */\n+\t/* 59: letter-spacing: */\n+\t/* 60: line-height: */\n+\t/* 61: list-style-image: */\n+\t/* 62: list-style-position: */\n+\t/* 63: list-style-type: */\n+\t/* 64: list-style: */\n+\t/* 65: margin-right: */\n+\t/* 66: margin-left: */\n+\t/* 67: margin-top: */\n+\t/* 68: margin-bottom: */\n+\t/* 69: margin: */\n+\t/* 70: max-height: */\n+\t/* 71: max-width: */\n+\t/* 72: min-height: */\n+\t/* 73: min-width: */\n+\t/* 74: orphans: */\n+\t/* 75: outline-color: */\n+\t/* 76: outline-style: */\n+\t/* 77: outline-width: */\n+\t/* 78: outline: */\n+\t/* 79: overflow: */\n+\t/* 80: padding-top: */\n+\t/* 81: padding-right: */\n+\t/* 82: padding-bottom: */\n+\t/* 83: padding-left: */\n+\t/* 84: padding: */\n+\t/* 85: page-break-after: */\n+\t/* 86: page-break-before: */\n+\t/* 87: page-break-inside: */\n+\t/* 88: pause-after: */\n+\t/* 89: pause-before: */\n+\t/* 90: pause: */\n+\t/* 91: pitch-range: */\n+\t/* 92: pitch: */\n+\t/* 93: play-during: */\n+\t/* 94: position: */\n+\t/* 95: quotes: */\n+\t/* 96: richness: */\n+\t/* 97: right: */\n+\t/* 98: speak-header: */\n+\t/* 99: speak-numeral: */\n+\t/* 100: speak-punctuation: */\n+\t/* 101: speak: */\n+\t/* 102: speech-rate: */\n+\t/* 103: stress: */\n+\t/* 104: table-layout: */\n+\t/* 105: text-align: */\n+\t/* 106: text-decoration: */\n+\t/* 107: text-indent: */\n+\t/* 108: text-transform: */\n+\t/* 109: top: */\n+\t/* 110: unicode-bidi: */\n+\t/* 111: vertical-align: */\n+\t/* 112: visibility: */\n+\t/* 113: voice-family: */\n+\t/* 114: volume: */\n+\t/* 115: white-space: */\n+\t/* 116: widows: */\n+\t/* 117: width: */\n+\t/* 118: word-spacing: */\n+\t/* 119: z-index: */\n+/* enum {\n+\tXXXX_AZIMUTH,\n+\tXXXX_BACKGROUND_ATTACHMENT,\n+\tXXXX_BACKGROUND_COLOR,\n+\tXXXX_BACKGROUND_IMAGE,\n+\tXXXX_BACKGROUND_POSITION,\n+\tXXXX_BACKGROUND_REPEAT,\n+\tXXXX_BACKGROUND,\n+\tXXXX_BORDER_COLLAPSE,\n+\tXXXX_BORDER_COLOR,\n+\tXXXX_BORDER_SPACING,\n+\tXXXX_BORDER_STYLE,\n+\tXXXX_BORDER_TOP,\n+\tXXXX_BORDER_RIGHT,\n+\tXXXX_BORDER_BOTTOM,\n+\tXXXX_BORDER_LEFT,\n+\tXXXX_BORDER_TOP_COLOR,\n+\tXXXX_BORDER_RIGHT_COLOR,\n+\tXXXX_BORDER_BOTTOM_COLOR,\n+\tXXXX_BORDER_LEFT_COLOR,\n+\tXXXX_BORDER_TOP_STYLE,\n+\tXXXX_BORDER_RIGHT_STYLE,\n+\tXXXX_BORDER_BOTTOM_STYLE,\n+\tXXXX_BORDER_LEFT_STYLE,\n+\tXXXX_BORDER_TOP_WIDTH,\n+\tXXXX_BORDER_RIGHT_WIDTH,\n+\tXXXX_BORDER_BOTTOM_WIDTH,\n+\tXXXX_BORDER_LEFT_WIDTH,\n+\tXXXX_BORDER_WIDTH,\n+\tXXXX_BORDER_TOP_LEFT_RADIUS,\n+\tXXXX_BORDER_TOP_RIGHT_RADIUS,\n+\tXXXX_BORDER_BOTTOM_LEFT_RADIUS,\n+\tXXXX_BORDER_BOTTOM_RIGHT_RADIUS,\n+\tXXXX_BORDER_RADIUS,\n+\tXXXX_BORDER,\n+\tXXXX_BOTTOM,\n+\tXXXX_CAPTION_SIDE,\n+\tXXXX_CLEAR,\n+\tXXXX_CLIP,\n+\tXXXX_COLOR,\n+\tXXXX_CONTENT,\n+\tXXXX_COUNTER_INCREMENT,\n+\tXXXX_COUNTER_RESET,\n+\tXXXX_CUE_AFTER,\n+\tXXXX_CUE_BEFORE,\n+\tXXXX_CUE,\n+\tXXXX_CURSOR,\n+\tXXXX_DIRECTION,\n+\tXXXX_DISPLAY,\n+\tXXXX_ELEVATION,\n+\tXXXX_EMPTY_CELLS,\n+\tXXXX_FLOAT,\n+\tXXXX_FONT_FAMILY,\n+\tXXXX_FONT_SIZE,\n+\tXXXX_FONT_STYLE,\n+\tXXXX_FONT_VARIANT,\n+\tXXXX_FONT_WEIGHT,\n+\tXXXX_FONT,\n+\tXXXX_HEIGHT,\n+\tXXXX_LEFT,\n+\tXXXX_LETTER_SPACING,\n+\tXXXX_LINE_HEIGHT,\n+\tXXXX_LIST_STYLE_IMAGE,\n+\tXXXX_LIST_STYLE_POSITION,\n+\tXXXX_LIST_STYLE_TYPE,\n+\tXXXX_LIST_STYLE,\n+\tXXXX_MARGIN_RIGHT,\n+\tXXXX_MARGIN_LEFT,\n+\tXXXX_MARGIN_TOP,\n+\tXXXX_MARGIN_BOTTOM,\n+\tXXXX_MARGIN,\n+\tXXXX_MAX_HEIGHT,\n+\tXXXX_MAX_WIDTH,\n+\tXXXX_MIN_HEIGHT,\n+\tXXXX_MIN_WIDTH,\n+\tXXXX_ORPHANS,\n+\tXXXX_OUTLINE_COLOR,\n+\tXXXX_OUTLINE_STYLE,\n+\tXXXX_OUTLINE_WIDTH,\n+\tXXXX_OUTLINE,\n+\tXXXX_OVERFLOW,\n+\tXXXX_PADDING_TOP,\n+\tXXXX_PADDING_RIGHT,\n+\tXXXX_PADDING_BOTTOM,\n+\tXXXX_PADDING_LEFT,\n+\tXXXX_PADDING,\n+\tXXXX_PAGE_BREAK_AFTER,\n+\tXXXX_PAGE_BREAK_BEFORE,\n+\tXXXX_PAGE_BREAK_INSIDE,\n+\tXXXX_PAUSE_AFTER,\n+\tXXXX_PAUSE_BEFORE,\n+\tXXXX_PAUSE,\n+\tXXXX_PITCH_RANGE,\n+\tXXXX_PITCH,\n+\tXXXX_PLAY_DURING,\n+\tXXXX_POSITION,\n+\tXXXX_QUOTES,\n+\tXXXX_RICHNESS,\n+\tXXXX_RIGHT,\n+\tXXXX_SPEAK_HEADER,\n+\tXXXX_SPEAK_NUMERAL,\n+\tXXXX_SPEAK_PUNCTUATION,\n+\tXXXX_SPEAK,\n+\tXXXX_SPEECH_RATE,\n+\tXXXX_STRESS,\n+\tXXXX_TABLE_LAYOUT,\n+\tXXXX_TEXT_ALIGN,\n+\tXXXX_TEXT_DECORATION,\n+\tXXXX_TEXT_INDENT,\n+\tXXXX_TEXT_TRANSFORM,\n+\tXXXX_TOP,\n+\tXXXX_UNICODE_BIDI,\n+\tXXXX_VERTICAL_ALIGN,\n+\tXXXX_VISIBILITY,\n+\tXXXX_VOICE_FAMILY,\n+\tXXXX_VOLUME,\n+\tXXXX_WHITE_SPACE,\n+\tXXXX_WIDOWS,\n+\tXXXX_WIDTH,\n+\tXXXX_WORD_SPACING,\n+\tXXXX_Z_INDEX,\n+}; */\n+\n+/* pos 0000: 0 */ 0x61 /* 'a' */, 0x3A, 0x00 /* (to 0x003A s 1) */,\n+ 0x62 /* 'b' */, 0x40, 0x00 /* (to 0x0043 s 9) */,\n+ 0x63 /* 'c' */, 0xED, 0x01 /* (to 0x01F3 s 257) */,\n+ 0x64 /* 'd' */, 0x74, 0x02 /* (to 0x027D s 333) */,\n+ 0x65 /* 'e' */, 0x89, 0x02 /* (to 0x0295 s 349) */,\n+ 0x66 /* 'f' */, 0xA3, 0x02 /* (to 0x02B2 s 370) */,\n+ 0x68 /* 'h' */, 0xF0, 0x02 /* (to 0x0302 s 413) */,\n+ 0x6C /* 'l' */, 0xF5, 0x02 /* (to 0x030A s 420) */,\n+ 0x6D /* 'm' */, 0x55, 0x03 /* (to 0x036D s 479) */,\n+ 0x6F /* 'o' */, 0xC2, 0x03 /* (to 0x03DD s 540) */,\n+ 0x70 /* 'p' */, 0x07, 0x04 /* (to 0x0425 s 582) */,\n+ 0x71 /* 'q' */, 0xC2, 0x04 /* (to 0x04E3 s 691) */,\n+ 0x72 /* 'r' */, 0xC7, 0x04 /* (to 0x04EB s 698) */,\n+ 0x73 /* 's' */, 0xD9, 0x04 /* (to 0x0500 s 711) */,\n+ 0x74 /* 't' */, 0x28, 0x05 /* (to 0x0552 s 760) */,\n+ 0x75 /* 'u' */, 0x76, 0x05 /* (to 0x05A3 s 814) */,\n+ 0x76 /* 'v' */, 0x81, 0x05 /* (to 0x05B1 s 827) */,\n+ 0x77 /* 'w' */, 0xBB, 0x05 /* (to 0x05EE s 869) */,\n+ 0x7A /* 'z' */, 0xEC, 0x05 /* (to 0x0622 s 902) */,\n+ 0x08, /* fail */\n+/* pos 003a: 1 */ 0xFA /* 'z' -\u003e */,\n+/* pos 003b: 2 */ 0xE9 /* 'i' -\u003e */,\n+/* pos 003c: 3 */ 0xED /* 'm' -\u003e */,\n+/* pos 003d: 4 */ 0xF5 /* 'u' -\u003e */,\n+/* pos 003e: 5 */ 0xF4 /* 't' -\u003e */,\n+/* pos 003f: 6 */ 0xE8 /* 'h' -\u003e */,\n+/* pos 0040: 7 */ 0xBA /* ':' -\u003e */,\n+/* pos 0041: 8 */ 0x00, 0x00 /* - terminal marker 0 - */,\n+/* pos 0043: 9 */ 0x61 /* 'a' */, 0x07, 0x00 /* (to 0x004A s 10) */,\n+ 0x6F /* 'o' */, 0x51, 0x00 /* (to 0x0097 s 60) */,\n+ 0x08, /* fail */\n+/* pos 004a: 10 */ 0xE3 /* 'c' -\u003e */,\n+/* pos 004b: 11 */ 0xEB /* 'k' -\u003e */,\n+/* pos 004c: 12 */ 0xE7 /* 'g' -\u003e */,\n+/* pos 004d: 13 */ 0xF2 /* 'r' -\u003e */,\n+/* pos 004e: 14 */ 0xEF /* 'o' -\u003e */,\n+/* pos 004f: 15 */ 0xF5 /* 'u' -\u003e */,\n+/* pos 0050: 16 */ 0xEE /* 'n' -\u003e */,\n+/* pos 0051: 17 */ 0xE4 /* 'd' -\u003e */,\n+/* pos 0052: 18 */ 0x2D /* '-' */, 0x07, 0x00 /* (to 0x0059 s 19) */,\n+ 0x3A /* ':' */, 0x40, 0x00 /* (to 0x0095 s 59) */,\n+ 0x08, /* fail */\n+/* pos 0059: 19 */ 0x61 /* 'a' */, 0x10, 0x00 /* (to 0x0069 s 20) */,\n+ 0x63 /* 'c' */, 0x19, 0x00 /* (to 0x0075 s 31) */,\n+ 0x69 /* 'i' */, 0x1D, 0x00 /* (to 0x007C s 37) */,\n+ 0x70 /* 'p' */, 0x21, 0x00 /* (to 0x0083 s 43) */,\n+ 0x72 /* 'r' */, 0x28, 0x00 /* (to 0x008D s 52) */,\n+ 0x08, /* fail */\n+/* pos 0069: 20 */ 0xF4 /* 't' -\u003e */,\n+/* pos 006a: 21 */ 0xF4 /* 't' -\u003e */,\n+/* pos 006b: 22 */ 0xE1 /* 'a' -\u003e */,\n+/* pos 006c: 23 */ 0xE3 /* 'c' -\u003e */,\n+/* pos 006d: 24 */ 0xE8 /* 'h' -\u003e */,\n+/* pos 006e: 25 */ 0xED /* 'm' -\u003e */,\n+/* pos 006f: 26 */ 0xE5 /* 'e' -\u003e */,\n+/* pos 0070: 27 */ 0xEE /* 'n' -\u003e */,\n+/* pos 0071: 28 */ 0xF4 /* 't' -\u003e */,\n+/* pos 0072: 29 */ 0xBA /* ':' -\u003e */,\n+/* pos 0073: 30 */ 0x00, 0x01 /* - terminal marker 1 - */,\n+/* pos 0075: 31 */ 0xEF /* 'o' -\u003e */,\n+/* pos 0076: 32 */ 0xEC /* 'l' -\u003e */,\n+/* pos 0077: 33 */ 0xEF /* 'o' -\u003e */,\n+/* pos 0078: 34 */ 0xF2 /* 'r' -\u003e */,\n+/* pos 0079: 35 */ 0xBA /* ':' -\u003e */,\n+/* pos 007a: 36 */ 0x00, 0x02 /* - terminal marker 2 - */,\n+/* pos 007c: 37 */ 0xED /* 'm' -\u003e */,\n+/* pos 007d: 38 */ 0xE1 /* 'a' -\u003e */,\n+/* pos 007e: 39 */ 0xE7 /* 'g' -\u003e */,\n+/* pos 007f: 40 */ 0xE5 /* 'e' -\u003e */,\n+/* pos 0080: 41 */ 0xBA /* ':' -\u003e */,\n+/* pos 0081: 42 */ 0x00, 0x03 /* - terminal marker 3 - */,\n+/* pos 0083: 43 */ 0xEF /* 'o' -\u003e */,\n+/* pos 0084: 44 */ 0xF3 /* 's' -\u003e */,\n+/* pos 0085: 45 */ 0xE9 /* 'i' -\u003e */,\n+/* pos 0086: 46 */ 0xF4 /* 't' -\u003e */,\n+/* pos 0087: 47 */ 0xE9 /* 'i' -\u003e */,\n+/* pos 0088: 48 */ 0xEF /* 'o' -\u003e */,\n+/* pos 0089: 49 */ 0xEE /* 'n' -\u003e */,\n+/* pos 008a: 50 */ 0xBA /* ':' -\u003e */,\n+/* pos 008b: 51 */ 0x00, 0x04 /* - terminal marker 4 - */,\n+/* pos 008d: 52 */ 0xE5 /* 'e' -\u003e */,\n+/* pos 008e: 53 */ 0xF0 /* 'p' -\u003e */,\n+/* pos 008f: 54 */ 0xE5 /* 'e' -\u003e */,\n+/* pos 0090: 55 */ 0xE1 /* 'a' -\u003e */,\n+/* pos 0091: 56 */ 0xF4 /* 't' -\u003e */,\n+/* pos 0092: 57 */ 0xBA /* ':' -\u003e */,\n+/* pos 0093: 58 */ 0x00, 0x05 /* - terminal marker 5 - */,\n+/* pos 0095: 59 */ 0x00, 0x06 /* - terminal marker 6 - */,\n+/* pos 0097: 60 */ 0x72 /* 'r' */, 0x07, 0x00 /* (to 0x009E s 61) */,\n+ 0x74 /* 't' */, 0x53, 0x01 /* (to 0x01ED s 252) */,\n+ 0x08, /* fail */\n+/* pos 009e: 61 */ 0xE4 /* 'd' -\u003e */,\n+/* pos 009f: 62 */ 0xE5 /* 'e' -\u003e */,\n+/* pos 00a0: 63 */ 0xF2 /* 'r' -\u003e */,\n+/* pos 00a1: 64 */ 0x2D /* '-' */, 0x07, 0x00 /* (to 0x00A8 s 65) */,\n+ 0x3A /* ':' */, 0x47, 0x01 /* (to 0x01EB s 251) */,\n+ 0x08, /* fail */\n+/* pos 00a8: 65 */ 0x63 /* 'c' */, 0x16, 0x00 /* (to 0x00BE s 66) */,\n+ 0x73 /* 's' */, 0x27, 0x00 /* (to 0x00D2 s 78) */,\n+ 0x74 /* 't' */, 0x39, 0x00 /* (to 0x00E7 s 91) */,\n+ 0x72 /* 'r' */, 0x41, 0x00 /* (to 0x00F2 s 95) */,\n+ 0x62 /* 'b' */, 0x51, 0x00 /* (to 0x0105 s 101) */,\n+ 0x6C /* 'l' */, 0x5C, 0x00 /* (to 0x0113 s 108) */,\n+ 0x77 /* 'w' */, 0xED, 0x00 /* (to 0x01A7 s 189) */,\n+ 0x08, /* fail */\n+/* pos 00be: 66 */ 0xEF /* 'o' -\u003e */,\n+/* pos 00bf: 67 */ 0xEC /* 'l' -\u003e */,\n+/* pos 00c0: 68 */ 0x6C /* 'l' */, 0x07, 0x00 /* (to 0x00C7 s 69) */,\n+ 0x6F /* 'o' */, 0x0B, 0x00 /* (to 0x00CE s 75) */,\n+ 0x08, /* fail */\n+/* pos 00c7: 69 */ 0xE1 /* 'a' -\u003e */,\n+/* pos 00c8: 70 */ 0xF0 /* 'p' -\u003e */,\n+/* pos 00c9: 71 */ 0xF3 /* 's' -\u003e */,\n+/* pos 00ca: 72 */ 0xE5 /* 'e' -\u003e */,\n+/* pos 00cb: 73 */ 0xBA /* ':' -\u003e */,\n+/* pos 00cc: 74 */ 0x00, 0x07 /* - terminal marker 7 - */,\n+/* pos 00ce: 75 */ 0xF2 /* 'r' -\u003e */,\n+/* pos 00cf: 76 */ 0xBA /* ':' -\u003e */,\n+/* pos 00d0: 77 */ 0x00, 0x08 /* - terminal marker 8 - */,\n+/* pos 00d2: 78 */ 0x70 /* 'p' */, 0x07, 0x00 /* (to 0x00D9 s 79) */,\n+ 0x74 /* 't' */, 0x0C, 0x00 /* (to 0x00E1 s 86) */,\n+ 0x08, /* fail */\n+/* pos 00d9: 79 */ 0xE1 /* 'a' -\u003e */,\n+/* pos 00da: 80 */ 0xE3 /* 'c' -\u003e */,\n+/* pos 00db: 81 */ 0xE9 /* 'i' -\u003e */,\n+/* pos 00dc: 82 */ 0xEE /* 'n' -\u003e */,\n+/* pos 00dd: 83 */ 0xE7 /* 'g' -\u003e */,\n+/* pos 00de: 84 */ 0xBA /* ':' -\u003e */,\n+/* pos 00df: 85 */ 0x00, 0x09 /* - terminal marker 9 - */,\n+/* pos 00e1: 86 */ 0xF9 /* 'y' -\u003e */,\n+/* pos 00e2: 87 */ 0xEC /* 'l' -\u003e */,\n+/* pos 00e3: 88 */ 0xE5 /* 'e' -\u003e */,\n+/* pos 00e4: 89 */ 0xBA /* ':' -\u003e */,\n+/* pos 00e5: 90 */ 0x00, 0x0A /* - terminal marker 10 - */,\n+/* pos 00e7: 91 */ 0xEF /* 'o' -\u003e */,\n+/* pos 00e8: 92 */ 0xF0 /* 'p' -\u003e */,\n+/* pos 00e9: 93 */ 0x3A /* ':' */, 0x07, 0x00 /* (to 0x00F0 s 94) */,\n+ 0x2D /* '-' */, 0x33, 0x00 /* (to 0x011F s 113) */,\n+ 0x08, /* fail */\n+/* pos 00f0: 94 */ 0x00, 0x0B /* - terminal marker 11 - */,\n+/* pos 00f2: 95 */ 0x69 /* 'i' */, 0x07, 0x00 /* (to 0x00F9 s 96) */,\n+ 0x61 /* 'a' */, 0xEF, 0x00 /* (to 0x01E4 s 245) */,\n+ 0x08, /* fail */\n+/* pos 00f9: 96 */ 0xE7 /* 'g' -\u003e */,\n+/* pos 00fa: 97 */ 0xE8 /* 'h' -\u003e */,\n+/* pos 00fb: 98 */ 0xF4 /* 't' -\u003e */,\n+/* pos 00fc: 99 */ 0x3A /* ':' */, 0x07, 0x00 /* (to 0x0103 s 100) */,\n+ 0x2D /* '-' */, 0x37, 0x00 /* (to 0x0136 s 120) */,\n+ 0x08, /* fail */\n+/* pos 0103: 100 */ 0x00, 0x0C /* - terminal marker 12 - */,\n+/* pos 0105: 101 */ 0xEF /* 'o' -\u003e */,\n+/* pos 0106: 102 */ 0xF4 /* 't' -\u003e */,\n+/* pos 0107: 103 */ 0xF4 /* 't' -\u003e */,\n+/* pos 0108: 104 */ 0xEF /* 'o' -\u003e */,\n+/* pos 0109: 105 */ 0xED /* 'm' -\u003e */,\n+/* pos 010a: 106 */ 0x3A /* ':' */, 0x07, 0x00 /* (to 0x0111 s 107) */,\n+ 0x2D /* '-' */, 0x3A, 0x00 /* (to 0x0147 s 127) */,\n+ 0x08, /* fail */\n+/* pos 0111: 107 */ 0x00, 0x0D /* - terminal marker 13 - */,\n+/* pos 0113: 108 */ 0xE5 /* 'e' -\u003e */,\n+/* pos 0114: 109 */ 0xE6 /* 'f' -\u003e */,\n+/* pos 0115: 110 */ 0xF4 /* 't' -\u003e */,\n+/* pos 0116: 111 */ 0x3A /* ':' */, 0x07, 0x00 /* (to 0x011D s 112) */,\n+ 0x2D /* '-' */, 0x45, 0x00 /* (to 0x015E s 134) */,\n+ 0x08, /* fail */\n+/* pos 011d: 112 */ 0x00, 0x0E /* - terminal marker 14 - */,\n+/* pos 011f: 113 */ 0x63 /* 'c' */, 0x10, 0x00 /* (to 0x012F s 114) */,\n+ 0x73 /* 's' */, 0x4D, 0x00 /* (to 0x016F s 141) */,\n+ 0x77 /* 'w' */, 0x66, 0x00 /* (to 0x018B s 165) */,\n+ 0x6C /* 'l' */, 0x86, 0x00 /* (to 0x01AE s 195) */,\n+ 0x72 /* 'r' */, 0x90, 0x00 /* (to 0x01BB s 207) */,\n+ 0x08, /* fail */\n+/* pos 012f: 114 */ 0xEF /* 'o' -\u003e */,\n+/* pos 0130: 115 */ 0xEC /* 'l' -\u003e */,\n+/* pos 0131: 116 */ 0xEF /* 'o' -\u003e */,\n+/* pos 0132: 117 */ 0xF2 /* 'r' -\u003e */,\n+/* pos 0133: 118 */ 0xBA /* ':' -\u003e */,\n+/* pos 0134: 119 */ 0x00, 0x0F /* - terminal marker 15 - */,\n+/* pos 0136: 120 */ 0x63 /* 'c' */, 0x0A, 0x00 /* (to 0x0140 s 121) */,\n+ 0x73 /* 's' */, 0x3D, 0x00 /* (to 0x0176 s 147) */,\n+ 0x77 /* 'w' */, 0x56, 0x00 /* (to 0x0192 s 171) */,\n+ 0x08, /* fail */\n+/* pos 0140: 121 */ 0xEF /* 'o' -\u003e */,\n+/* pos 0141: 122 */ 0xEC /* 'l' -\u003e */,\n+/* pos 0142: 123 */ 0xEF /* 'o' -\u003e */,\n+/* pos 0143: 124 */ 0xF2 /* 'r' -\u003e */,\n+/* pos 0144: 125 */ 0xBA /* ':' -\u003e */,\n+/* pos 0145: 126 */ 0x00, 0x10 /* - terminal marker 16 - */,\n+/* pos 0147: 127 */ 0x63 /* 'c' */, 0x10, 0x00 /* (to 0x0157 s 128) */,\n+ 0x73 /* 's' */, 0x33, 0x00 /* (to 0x017D s 153) */,\n+ 0x77 /* 'w' */, 0x4C, 0x00 /* (to 0x0199 s 177) */,\n+ 0x6C /* 'l' */, 0x79, 0x00 /* (to 0x01C9 s 220) */,\n+ 0x72 /* 'r' */, 0x83, 0x00 /* (to 0x01D6 s 232) */,\n+ 0x08, /* fail */\n+/* pos 0157: 128 */ 0xEF /* 'o' -\u003e */,\n+/* pos 0158: 129 */ 0xEC /* 'l' -\u003e */,\n+/* pos 0159: 130 */ 0xEF /* 'o' -\u003e */,\n+/* pos 015a: 131 */ 0xF2 /* 'r' -\u003e */,\n+/* pos 015b: 132 */ 0xBA /* ':' -\u003e */,\n+/* pos 015c: 133 */ 0x00, 0x11 /* - terminal marker 17 - */,\n+/* pos 015e: 134 */ 0x63 /* 'c' */, 0x0A, 0x00 /* (to 0x0168 s 135) */,\n+ 0x73 /* 's' */, 0x23, 0x00 /* (to 0x0184 s 159) */,\n+ 0x77 /* 'w' */, 0x3C, 0x00 /* (to 0x01A0 s 183) */,\n+ 0x08, /* fail */\n+/* pos 0168: 135 */ 0xEF /* 'o' -\u003e */,\n+/* pos 0169: 136 */ 0xEC /* 'l' -\u003e */,\n+/* pos 016a: 137 */ 0xEF /* 'o' -\u003e */,\n+/* pos 016b: 138 */ 0xF2 /* 'r' -\u003e */,\n+/* pos 016c: 139 */ 0xBA /* ':' -\u003e */,\n+/* pos 016d: 140 */ 0x00, 0x12 /* - terminal marker 18 - */,\n+/* pos 016f: 141 */ 0xF4 /* 't' -\u003e */,\n+/* pos 0170: 142 */ 0xF9 /* 'y' -\u003e */,\n+/* pos 0171: 143 */ 0xEC /* 'l' -\u003e */,\n+/* pos 0172: 144 */ 0xE5 /* 'e' -\u003e */,\n+/* pos 0173: 145 */ 0xBA /* ':' -\u003e */,\n+/* pos 0174: 146 */ 0x00, 0x13 /* - terminal marker 19 - */,\n+/* pos 0176: 147 */ 0xF4 /* 't' -\u003e */,\n+/* pos 0177: 148 */ 0xF9 /* 'y' -\u003e */,\n+/* pos 0178: 149 */ 0xEC /* 'l' -\u003e */,\n+/* pos 0179: 150 */ 0xE5 /* 'e' -\u003e */,\n+/* pos 017a: 151 */ 0xBA /* ':' -\u003e */,\n+/* pos 017b: 152 */ 0x00, 0x14 /* - terminal marker 20 - */,\n+/* pos 017d: 153 */ 0xF4 /* 't' -\u003e */,\n+/* pos 017e: 154 */ 0xF9 /* 'y' -\u003e */,\n+/* pos 017f: 155 */ 0xEC /* 'l' -\u003e */,\n+/* pos 0180: 156 */ 0xE5 /* 'e' -\u003e */,\n+/* pos 0181: 157 */ 0xBA /* ':' -\u003e */,\n+/* pos 0182: 158 */ 0x00, 0x15 /* - terminal marker 21 - */,\n+/* pos 0184: 159 */ 0xF4 /* 't' -\u003e */,\n+/* pos 0185: 160 */ 0xF9 /* 'y' -\u003e */,\n+/* pos 0186: 161 */ 0xEC /* 'l' -\u003e */,\n+/* pos 0187: 162 */ 0xE5 /* 'e' -\u003e */,\n+/* pos 0188: 163 */ 0xBA /* ':' -\u003e */,\n+/* pos 0189: 164 */ 0x00, 0x16 /* - terminal marker 22 - */,\n+/* pos 018b: 165 */ 0xE9 /* 'i' -\u003e */,\n+/* pos 018c: 166 */ 0xE4 /* 'd' -\u003e */,\n+/* pos 018d: 167 */ 0xF4 /* 't' -\u003e */,\n+/* pos 018e: 168 */ 0xE8 /* 'h' -\u003e */,\n+/* pos 018f: 169 */ 0xBA /* ':' -\u003e */,\n+/* pos 0190: 170 */ 0x00, 0x17 /* - terminal marker 23 - */,\n+/* pos 0192: 171 */ 0xE9 /* 'i' -\u003e */,\n+/* pos 0193: 172 */ 0xE4 /* 'd' -\u003e */,\n+/* pos 0194: 173 */ 0xF4 /* 't' -\u003e */,\n+/* pos 0195: 174 */ 0xE8 /* 'h' -\u003e */,\n+/* pos 0196: 175 */ 0xBA /* ':' -\u003e */,\n+/* pos 0197: 176 */ 0x00, 0x18 /* - terminal marker 24 - */,\n+/* pos 0199: 177 */ 0xE9 /* 'i' -\u003e */,\n+/* pos 019a: 178 */ 0xE4 /* 'd' -\u003e */,\n+/* pos 019b: 179 */ 0xF4 /* 't' -\u003e */,\n+/* pos 019c: 180 */ 0xE8 /* 'h' -\u003e */,\n+/* pos 019d: 181 */ 0xBA /* ':' -\u003e */,\n+/* pos 019e: 182 */ 0x00, 0x19 /* - terminal marker 25 - */,\n+/* pos 01a0: 183 */ 0xE9 /* 'i' -\u003e */,\n+/* pos 01a1: 184 */ 0xE4 /* 'd' -\u003e */,\n+/* pos 01a2: 185 */ 0xF4 /* 't' -\u003e */,\n+/* pos 01a3: 186 */ 0xE8 /* 'h' -\u003e */,\n+/* pos 01a4: 187 */ 0xBA /* ':' -\u003e */,\n+/* pos 01a5: 188 */ 0x00, 0x1A /* - terminal marker 26 - */,\n+/* pos 01a7: 189 */ 0xE9 /* 'i' -\u003e */,\n+/* pos 01a8: 190 */ 0xE4 /* 'd' -\u003e */,\n+/* pos 01a9: 191 */ 0xF4 /* 't' -\u003e */,\n+/* pos 01aa: 192 */ 0xE8 /* 'h' -\u003e */,\n+/* pos 01ab: 193 */ 0xBA /* ':' -\u003e */,\n+/* pos 01ac: 194 */ 0x00, 0x1B /* - terminal marker 27 - */,\n+/* pos 01ae: 195 */ 0xE5 /* 'e' -\u003e */,\n+/* pos 01af: 196 */ 0xE6 /* 'f' -\u003e */,\n+/* pos 01b0: 197 */ 0xF4 /* 't' -\u003e */,\n+/* pos 01b1: 198 */ 0xAD /* '-' -\u003e */,\n+/* pos 01b2: 199 */ 0xF2 /* 'r' -\u003e */,\n+/* pos 01b3: 200 */ 0xE1 /* 'a' -\u003e */,\n+/* pos 01b4: 201 */ 0xE4 /* 'd' -\u003e */,\n+/* pos 01b5: 202 */ 0xE9 /* 'i' -\u003e */,\n+/* pos 01b6: 203 */ 0xF5 /* 'u' -\u003e */,\n+/* pos 01b7: 204 */ 0xF3 /* 's' -\u003e */,\n+/* pos 01b8: 205 */ 0xBA /* ':' -\u003e */,\n+/* pos 01b9: 206 */ 0x00, 0x1C /* - terminal marker 28 - */,\n+/* pos 01bb: 207 */ 0xE9 /* 'i' -\u003e */,\n+/* pos 01bc: 208 */ 0xE7 /* 'g' -\u003e */,\n+/* pos 01bd: 209 */ 0xE8 /* 'h' -\u003e */,\n+/* pos 01be: 210 */ 0xF4 /* 't' -\u003e */,\n+/* pos 01bf: 211 */ 0xAD /* '-' -\u003e */,\n+/* pos 01c0: 212 */ 0xF2 /* 'r' -\u003e */,\n+/* pos 01c1: 213 */ 0xE1 /* 'a' -\u003e */,\n+/* pos 01c2: 214 */ 0xE4 /* 'd' -\u003e */,\n+/* pos 01c3: 215 */ 0xE9 /* 'i' -\u003e */,\n+/* pos 01c4: 216 */ 0xF5 /* 'u' -\u003e */,\n+/* pos 01c5: 217 */ 0xF3 /* 's' -\u003e */,\n+/* pos 01c6: 218 */ 0xBA /* ':' -\u003e */,\n+/* pos 01c7: 219 */ 0x00, 0x1D /* - terminal marker 29 - */,\n+/* pos 01c9: 220 */ 0xE5 /* 'e' -\u003e */,\n+/* pos 01ca: 221 */ 0xE6 /* 'f' -\u003e */,\n+/* pos 01cb: 222 */ 0xF4 /* 't' -\u003e */,\n+/* pos 01cc: 223 */ 0xAD /* '-' -\u003e */,\n+/* pos 01cd: 224 */ 0xF2 /* 'r' -\u003e */,\n+/* pos 01ce: 225 */ 0xE1 /* 'a' -\u003e */,\n+/* pos 01cf: 226 */ 0xE4 /* 'd' -\u003e */,\n+/* pos 01d0: 227 */ 0xE9 /* 'i' -\u003e */,\n+/* pos 01d1: 228 */ 0xF5 /* 'u' -\u003e */,\n+/* pos 01d2: 229 */ 0xF3 /* 's' -\u003e */,\n+/* pos 01d3: 230 */ 0xBA /* ':' -\u003e */,\n+/* pos 01d4: 231 */ 0x00, 0x1E /* - terminal marker 30 - */,\n+/* pos 01d6: 232 */ 0xE9 /* 'i' -\u003e */,\n+/* pos 01d7: 233 */ 0xE7 /* 'g' -\u003e */,\n+/* pos 01d8: 234 */ 0xE8 /* 'h' -\u003e */,\n+/* pos 01d9: 235 */ 0xF4 /* 't' -\u003e */,\n+/* pos 01da: 236 */ 0xAD /* '-' -\u003e */,\n+/* pos 01db: 237 */ 0xF2 /* 'r' -\u003e */,\n+/* pos 01dc: 238 */ 0xE1 /* 'a' -\u003e */,\n+/* pos 01dd: 239 */ 0xE4 /* 'd' -\u003e */,\n+/* pos 01de: 240 */ 0xE9 /* 'i' -\u003e */,\n+/* pos 01df: 241 */ 0xF5 /* 'u' -\u003e */,\n+/* pos 01e0: 242 */ 0xF3 /* 's' -\u003e */,\n+/* pos 01e1: 243 */ 0xBA /* ':' -\u003e */,\n+/* pos 01e2: 244 */ 0x00, 0x1F /* - terminal marker 31 - */,\n+/* pos 01e4: 245 */ 0xE4 /* 'd' -\u003e */,\n+/* pos 01e5: 246 */ 0xE9 /* 'i' -\u003e */,\n+/* pos 01e6: 247 */ 0xF5 /* 'u' -\u003e */,\n+/* pos 01e7: 248 */ 0xF3 /* 's' -\u003e */,\n+/* pos 01e8: 249 */ 0xBA /* ':' -\u003e */,\n+/* pos 01e9: 250 */ 0x00, 0x20 /* - terminal marker 32 - */,\n+/* pos 01eb: 251 */ 0x00, 0x21 /* - terminal marker 33 - */,\n+/* pos 01ed: 252 */ 0xF4 /* 't' -\u003e */,\n+/* pos 01ee: 253 */ 0xEF /* 'o' -\u003e */,\n+/* pos 01ef: 254 */ 0xED /* 'm' -\u003e */,\n+/* pos 01f0: 255 */ 0xBA /* ':' -\u003e */,\n+/* pos 01f1: 256 */ 0x00, 0x22 /* - terminal marker 34 - */,\n+/* pos 01f3: 257 */ 0x61 /* 'a' */, 0x0D, 0x00 /* (to 0x0200 s 258) */,\n+ 0x6C /* 'l' */, 0x17, 0x00 /* (to 0x020D s 270) */,\n+ 0x6F /* 'o' */, 0x24, 0x00 /* (to 0x021D s 278) */,\n+ 0x75 /* 'u' */, 0x55, 0x00 /* (to 0x0251 s 311) */,\n+ 0x08, /* fail */\n+/* pos 0200: 258 */ 0xF0 /* 'p' -\u003e */,\n+/* pos 0201: 259 */ 0xF4 /* 't' -\u003e */,\n+/* pos 0202: 260 */ 0xE9 /* 'i' -\u003e */,\n+/* pos 0203: 261 */ 0xEF /* 'o' -\u003e */,\n+/* pos 0204: 262 */ 0xEE /* 'n' -\u003e */,\n+/* pos 0205: 263 */ 0xAD /* '-' -\u003e */,\n+/* pos 0206: 264 */ 0xF3 /* 's' -\u003e */,\n+/* pos 0207: 265 */ 0xE9 /* 'i' -\u003e */,\n+/* pos 0208: 266 */ 0xE4 /* 'd' -\u003e */,\n+/* pos 0209: 267 */ 0xE5 /* 'e' -\u003e */,\n+/* pos 020a: 268 */ 0xBA /* ':' -\u003e */,\n+/* pos 020b: 269 */ 0x00, 0x23 /* - terminal marker 35 - */,\n+/* pos 020d: 270 */ 0x65 /* 'e' */, 0x07, 0x00 /* (to 0x0214 s 271) */,\n+ 0x69 /* 'i' */, 0x09, 0x00 /* (to 0x0219 s 275) */,\n+ 0x08, /* fail */\n+/* pos 0214: 271 */ 0xE1 /* 'a' -\u003e */,\n+/* pos 0215: 272 */ 0xF2 /* 'r' -\u003e */,\n+/* pos 0216: 273 */ 0xBA /* ':' -\u003e */,\n+/* pos 0217: 274 */ 0x00, 0x24 /* - terminal marker 36 - */,\n+/* pos 0219: 275 */ 0xF0 /* 'p' -\u003e */,\n+/* pos 021a: 276 */ 0xBA /* ':' -\u003e */,\n+/* pos 021b: 277 */ 0x00, 0x25 /* - terminal marker 37 - */,\n+/* pos 021d: 278 */ 0x6C /* 'l' */, 0x0A, 0x00 /* (to 0x0227 s 279) */,\n+ 0x6E /* 'n' */, 0x0C, 0x00 /* (to 0x022C s 283) */,\n+ 0x75 /* 'u' */, 0x10, 0x00 /* (to 0x0233 s 289) */,\n+ 0x08, /* fail */\n+/* pos 0227: 279 */ 0xEF /* 'o' -\u003e */,\n+/* pos 0228: 280 */ 0xF2 /* 'r' -\u003e */,\n+/* pos 0229: 281 */ 0xBA /* ':' -\u003e */,\n+/* pos 022a: 282 */ 0x00, 0x26 /* - terminal marker 38 - */,\n+/* pos 022c: 283 */ 0xF4 /* 't' -\u003e */,\n+/* pos 022d: 284 */ 0xE5 /* 'e' -\u003e */,\n+/* pos 022e: 285 */ 0xEE /* 'n' -\u003e */,\n+/* pos 022f: 286 */ 0xF4 /* 't' -\u003e */,\n+/* pos 0230: 287 */ 0xBA /* ':' -\u003e */,\n+/* pos 0231: 288 */ 0x00, 0x27 /* - terminal marker 39 - */,\n+/* pos 0233: 289 */ 0xEE /* 'n' -\u003e */,\n+/* pos 0234: 290 */ 0xF4 /* 't' -\u003e */,\n+/* pos 0235: 291 */ 0xE5 /* 'e' -\u003e */,\n+/* pos 0236: 292 */ 0xF2 /* 'r' -\u003e */,\n+/* pos 0237: 293 */ 0xAD /* '-' -\u003e */,\n+/* pos 0238: 294 */ 0x69 /* 'i' */, 0x07, 0x00 /* (to 0x023F s 295) */,\n+ 0x72 /* 'r' */, 0x0F, 0x00 /* (to 0x024A s 305) */,\n+ 0x08, /* fail */\n+/* pos 023f: 295 */ 0xEE /* 'n' -\u003e */,\n+/* pos 0240: 296 */ 0xE3 /* 'c' -\u003e */,\n+/* pos 0241: 297 */ 0xF2 /* 'r' -\u003e */,\n+/* pos 0242: 298 */ 0xE5 /* 'e' -\u003e */,\n+/* pos 0243: 299 */ 0xED /* 'm' -\u003e */,\n+/* pos 0244: 300 */ 0xE5 /* 'e' -\u003e */,\n+/* pos 0245: 301 */ 0xEE /* 'n' -\u003e */,\n+/* pos 0246: 302 */ 0xF4 /* 't' -\u003e */,\n+/* pos 0247: 303 */ 0xBA /* ':' -\u003e */,\n+/* pos 0248: 304 */ 0x00, 0x28 /* - terminal marker 40 - */,\n+/* pos 024a: 305 */ 0xE5 /* 'e' -\u003e */,\n+/* pos 024b: 306 */ 0xF3 /* 's' -\u003e */,\n+/* pos 024c: 307 */ 0xE5 /* 'e' -\u003e */,\n+/* pos 024d: 308 */ 0xF4 /* 't' -\u003e */,\n+/* pos 024e: 309 */ 0xBA /* ':' -\u003e */,\n+/* pos 024f: 310 */ 0x00, 0x29 /* - terminal marker 41 - */,\n+/* pos 0251: 311 */ 0x65 /* 'e' */, 0x07, 0x00 /* (to 0x0258 s 312) */,\n+ 0x72 /* 'r' */, 0x23, 0x00 /* (to 0x0277 s 328) */,\n+ 0x08, /* fail */\n+/* pos 0258: 312 */ 0x2D /* '-' */, 0x07, 0x00 /* (to 0x025F s 313) */,\n+ 0x3A /* ':' */, 0x1A, 0x00 /* (to 0x0275 s 327) */,\n+ 0x08, /* fail */\n+/* pos 025f: 313 */ 0x61 /* 'a' */, 0x07, 0x00 /* (to 0x0266 s 314) */,\n+ 0x62 /* 'b' */, 0x0B, 0x00 /* (to 0x026D s 320) */,\n+ 0x08, /* fail */\n+/* pos 0266: 314 */ 0xE6 /* 'f' -\u003e */,\n+/* pos 0267: 315 */ 0xF4 /* 't' -\u003e */,\n+/* pos 0268: 316 */ 0xE5 /* 'e' -\u003e */,\n+/* pos 0269: 317 */ 0xF2 /* 'r' -\u003e */,\n+/* pos 026a: 318 */ 0xBA /* ':' -\u003e */,\n+/* pos 026b: 319 */ 0x00, 0x2A /* - terminal marker 42 - */,\n+/* pos 026d: 320 */ 0xE5 /* 'e' -\u003e */,\n+/* pos 026e: 321 */ 0xE6 /* 'f' -\u003e */,\n+/* pos 026f: 322 */ 0xEF /* 'o' -\u003e */,\n+/* pos 0270: 323 */ 0xF2 /* 'r' -\u003e */,\n+/* pos 0271: 324 */ 0xE5 /* 'e' -\u003e */,\n+/* pos 0272: 325 */ 0xBA /* ':' -\u003e */,\n+/* pos 0273: 326 */ 0x00, 0x2B /* - terminal marker 43 - */,\n+/* pos 0275: 327 */ 0x00, 0x2C /* - terminal marker 44 - */,\n+/* pos 0277: 328 */ 0xF3 /* 's' -\u003e */,\n+/* pos 0278: 329 */ 0xEF /* 'o' -\u003e */,\n+/* pos 0279: 330 */ 0xF2 /* 'r' -\u003e */,\n+/* pos 027a: 331 */ 0xBA /* ':' -\u003e */,\n+/* pos 027b: 332 */ 0x00, 0x2D /* - terminal marker 45 - */,\n+/* pos 027d: 333 */ 0xE9 /* 'i' -\u003e */,\n+/* pos 027e: 334 */ 0x72 /* 'r' */, 0x07, 0x00 /* (to 0x0285 s 335) */,\n+ 0x73 /* 's' */, 0x0D, 0x00 /* (to 0x028E s 343) */,\n+ 0x08, /* fail */\n+/* pos 0285: 335 */ 0xE5 /* 'e' -\u003e */,\n+/* pos 0286: 336 */ 0xE3 /* 'c' -\u003e */,\n+/* pos 0287: 337 */ 0xF4 /* 't' -\u003e */,\n+/* pos 0288: 338 */ 0xE9 /* 'i' -\u003e */,\n+/* pos 0289: 339 */ 0xEF /* 'o' -\u003e */,\n+/* pos 028a: 340 */ 0xEE /* 'n' -\u003e */,\n+/* pos 028b: 341 */ 0xBA /* ':' -\u003e */,\n+/* pos 028c: 342 */ 0x00, 0x2E /* - terminal marker 46 - */,\n+/* pos 028e: 343 */ 0xF0 /* 'p' -\u003e */,\n+/* pos 028f: 344 */ 0xEC /* 'l' -\u003e */,\n+/* pos 0290: 345 */ 0xE1 /* 'a' -\u003e */,\n+/* pos 0291: 346 */ 0xF9 /* 'y' -\u003e */,\n+/* pos 0292: 347 */ 0xBA /* ':' -\u003e */,\n+/* pos 0293: 348 */ 0x00, 0x2F /* - terminal marker 47 - */,\n+/* pos 0295: 349 */ 0x6C /* 'l' */, 0x07, 0x00 /* (to 0x029C s 350) */,\n+ 0x6D /* 'm' */, 0x0E, 0x00 /* (to 0x02A6 s 359) */,\n+ 0x08, /* fail */\n+/* pos 029c: 350 */ 0xE5 /* 'e' -\u003e */,\n+/* pos 029d: 351 */ 0xF6 /* 'v' -\u003e */,\n+/* pos 029e: 352 */ 0xE1 /* 'a' -\u003e */,\n+/* pos 029f: 353 */ 0xF4 /* 't' -\u003e */,\n+/* pos 02a0: 354 */ 0xE9 /* 'i' -\u003e */,\n+/* pos 02a1: 355 */ 0xEF /* 'o' -\u003e */,\n+/* pos 02a2: 356 */ 0xEE /* 'n' -\u003e */,\n+/* pos 02a3: 357 */ 0xBA /* ':' -\u003e */,\n+/* pos 02a4: 358 */ 0x00, 0x30 /* - terminal marker 48 - */,\n+/* pos 02a6: 359 */ 0xF0 /* 'p' -\u003e */,\n+/* pos 02a7: 360 */ 0xF4 /* 't' -\u003e */,\n+/* pos 02a8: 361 */ 0xF9 /* 'y' -\u003e */,\n+/* pos 02a9: 362 */ 0xAD /* '-' -\u003e */,\n+/* pos 02aa: 363 */ 0xE3 /* 'c' -\u003e */,\n+/* pos 02ab: 364 */ 0xE5 /* 'e' -\u003e */,\n+/* pos 02ac: 365 */ 0xEC /* 'l' -\u003e */,\n+/* pos 02ad: 366 */ 0xEC /* 'l' -\u003e */,\n+/* pos 02ae: 367 */ 0xF3 /* 's' -\u003e */,\n+/* pos 02af: 368 */ 0xBA /* ':' -\u003e */,\n+/* pos 02b0: 369 */ 0x00, 0x31 /* - terminal marker 49 - */,\n+/* pos 02b2: 370 */ 0x6C /* 'l' */, 0x07, 0x00 /* (to 0x02B9 s 371) */,\n+ 0x6F /* 'o' */, 0x0A, 0x00 /* (to 0x02BF s 376) */,\n+ 0x08, /* fail */\n+/* pos 02b9: 371 */ 0xEF /* 'o' -\u003e */,\n+/* pos 02ba: 372 */ 0xE1 /* 'a' -\u003e */,\n+/* pos 02bb: 373 */ 0xF4 /* 't' -\u003e */,\n+/* pos 02bc: 374 */ 0xBA /* ':' -\u003e */,\n+/* pos 02bd: 375 */ 0x00, 0x32 /* - terminal marker 50 - */,\n+/* pos 02bf: 376 */ 0xEE /* 'n' -\u003e */,\n+/* pos 02c0: 377 */ 0xF4 /* 't' -\u003e */,\n+/* pos 02c1: 378 */ 0x2D /* '-' */, 0x07, 0x00 /* (to 0x02C8 s 379) */,\n+ 0x3A /* ':' */, 0x3C, 0x00 /* (to 0x0300 s 412) */,\n+ 0x08, /* fail */\n+/* pos 02c8: 379 */ 0x66 /* 'f' */, 0x0D, 0x00 /* (to 0x02D5 s 380) */,\n+ 0x73 /* 's' */, 0x12, 0x00 /* (to 0x02DD s 387) */,\n+ 0x76 /* 'v' */, 0x21, 0x00 /* (to 0x02EF s 397) */,\n+ 0x77 /* 'w' */, 0x27, 0x00 /* (to 0x02F8 s 405) */,\n+ 0x08, /* fail */\n+/* pos 02d5: 380 */ 0xE1 /* 'a' -\u003e */,\n+/* pos 02d6: 381 */ 0xED /* 'm' -\u003e */,\n+/* pos 02d7: 382 */ 0xE9 /* 'i' -\u003e */,\n+/* pos 02d8: 383 */ 0xEC /* 'l' -\u003e */,\n+/* pos 02d9: 384 */ 0xF9 /* 'y' -\u003e */,\n+/* pos 02da: 385 */ 0xBA /* ':' -\u003e */,\n+/* pos 02db: 386 */ 0x00, 0x33 /* - terminal marker 51 - */,\n+/* pos 02dd: 387 */ 0x69 /* 'i' */, 0x07, 0x00 /* (to 0x02E4 s 388) */,\n+ 0x74 /* 't' */, 0x09, 0x00 /* (to 0x02E9 s 392) */,\n+ 0x08, /* fail */\n+/* pos 02e4: 388 */ 0xFA /* 'z' -\u003e */,\n+/* pos 02e5: 389 */ 0xE5 /* 'e' -\u003e */,\n+/* pos 02e6: 390 */ 0xBA /* ':' -\u003e */,\n+/* pos 02e7: 391 */ 0x00, 0x34 /* - terminal marker 52 - */,\n+/* pos 02e9: 392 */ 0xF9 /* 'y' -\u003e */,\n+/* pos 02ea: 393 */ 0xEC /* 'l' -\u003e */,\n+/* pos 02eb: 394 */ 0xE5 /* 'e' -\u003e */,\n+/* pos 02ec: 395 */ 0xBA /* ':' -\u003e */,\n+/* pos 02ed: 396 */ 0x00, 0x35 /* - terminal marker 53 - */,\n+/* pos 02ef: 397 */ 0xE1 /* 'a' -\u003e */,\n+/* pos 02f0: 398 */ 0xF2 /* 'r' -\u003e */,\n+/* pos 02f1: 399 */ 0xE9 /* 'i' -\u003e */,\n+/* pos 02f2: 400 */ 0xE1 /* 'a' -\u003e */,\n+/* pos 02f3: 401 */ 0xEE /* 'n' -\u003e */,\n+/* pos 02f4: 402 */ 0xF4 /* 't' -\u003e */,\n+/* pos 02f5: 403 */ 0xBA /* ':' -\u003e */,\n+/* pos 02f6: 404 */ 0x00, 0x36 /* - terminal marker 54 - */,\n+/* pos 02f8: 405 */ 0xE5 /* 'e' -\u003e */,\n+/* pos 02f9: 406 */ 0xE9 /* 'i' -\u003e */,\n+/* pos 02fa: 407 */ 0xE7 /* 'g' -\u003e */,\n+/* pos 02fb: 408 */ 0xE8 /* 'h' -\u003e */,\n+/* pos 02fc: 409 */ 0xF4 /* 't' -\u003e */,\n+/* pos 02fd: 410 */ 0xBA /* ':' -\u003e */,\n+/* pos 02fe: 411 */ 0x00, 0x37 /* - terminal marker 55 - */,\n+/* pos 0300: 412 */ 0x00, 0x38 /* - terminal marker 56 - */,\n+/* pos 0302: 413 */ 0xE5 /* 'e' -\u003e */,\n+/* pos 0303: 414 */ 0xE9 /* 'i' -\u003e */,\n+/* pos 0304: 415 */ 0xE7 /* 'g' -\u003e */,\n+/* pos 0305: 416 */ 0xE8 /* 'h' -\u003e */,\n+/* pos 0306: 417 */ 0xF4 /* 't' -\u003e */,\n+/* pos 0307: 418 */ 0xBA /* ':' -\u003e */,\n+/* pos 0308: 419 */ 0x00, 0x39 /* - terminal marker 57 - */,\n+/* pos 030a: 420 */ 0x65 /* 'e' */, 0x07, 0x00 /* (to 0x0311 s 421) */,\n+ 0x69 /* 'i' */, 0x1D, 0x00 /* (to 0x032A s 438) */,\n+ 0x08, /* fail */\n+/* pos 0311: 421 */ 0x66 /* 'f' */, 0x07, 0x00 /* (to 0x0318 s 422) */,\n+ 0x74 /* 't' */, 0x08, 0x00 /* (to 0x031C s 425) */,\n+ 0x08, /* fail */\n+/* pos 0318: 422 */ 0xF4 /* 't' -\u003e */,\n+/* pos 0319: 423 */ 0xBA /* ':' -\u003e */,\n+/* pos 031a: 424 */ 0x00, 0x3A /* - terminal marker 58 - */,\n+/* pos 031c: 425 */ 0xF4 /* 't' -\u003e */,\n+/* pos 031d: 426 */ 0xE5 /* 'e' -\u003e */,\n+/* pos 031e: 427 */ 0xF2 /* 'r' -\u003e */,\n+/* pos 031f: 428 */ 0xAD /* '-' -\u003e */,\n+/* pos 0320: 429 */ 0xF3 /* 's' -\u003e */,\n+/* pos 0321: 430 */ 0xF0 /* 'p' -\u003e */,\n+/* pos 0322: 431 */ 0xE1 /* 'a' -\u003e */,\n+/* pos 0323: 432 */ 0xE3 /* 'c' -\u003e */,\n+/* pos 0324: 433 */ 0xE9 /* 'i' -\u003e */,\n+/* pos 0325: 434 */ 0xEE /* 'n' -\u003e */,\n+/* pos 0326: 435 */ 0xE7 /* 'g' -\u003e */,\n+/* pos 0327: 436 */ 0xBA /* ':' -\u003e */,\n+/* pos 0328: 437 */ 0x00, 0x3B /* - terminal marker 59 - */,\n+/* pos 032a: 438 */ 0x6E /* 'n' */, 0x07, 0x00 /* (to 0x0331 s 439) */,\n+ 0x73 /* 's' */, 0x0F, 0x00 /* (to 0x033C s 449) */,\n+ 0x08, /* fail */\n+/* pos 0331: 439 */ 0xE5 /* 'e' -\u003e */,\n+/* pos 0332: 440 */ 0xAD /* '-' -\u003e */,\n+/* pos 0333: 441 */ 0xE8 /* 'h' -\u003e */,\n+/* pos 0334: 442 */ 0xE5 /* 'e' -\u003e */,\n+/* pos 0335: 443 */ 0xE9 /* 'i' -\u003e */,\n+/* pos 0336: 444 */ 0xE7 /* 'g' -\u003e */,\n+/* pos 0337: 445 */ 0xE8 /* 'h' -\u003e */,\n+/* pos 0338: 446 */ 0xF4 /* 't' -\u003e */,\n+/* pos 0339: 447 */ 0xBA /* ':' -\u003e */,\n+/* pos 033a: 448 */ 0x00, 0x3C /* - terminal marker 60 - */,\n+/* pos 033c: 449 */ 0xF4 /* 't' -\u003e */,\n+/* pos 033d: 450 */ 0xAD /* '-' -\u003e */,\n+/* pos 033e: 451 */ 0xF3 /* 's' -\u003e */,\n+/* pos 033f: 452 */ 0xF4 /* 't' -\u003e */,\n+/* pos 0340: 453 */ 0xF9 /* 'y' -\u003e */,\n+/* pos 0341: 454 */ 0xEC /* 'l' -\u003e */,\n+/* pos 0342: 455 */ 0xE5 /* 'e' -\u003e */,\n+/* pos 0343: 456 */ 0x2D /* '-' */, 0x07, 0x00 /* (to 0x034A s 457) */,\n+ 0x3A /* ':' */, 0x25, 0x00 /* (to 0x036B s 478) */,\n+ 0x08, /* fail */\n+/* pos 034a: 457 */ 0x69 /* 'i' */, 0x0A, 0x00 /* (to 0x0354 s 458) */,\n+ 0x70 /* 'p' */, 0x0E, 0x00 /* (to 0x035B s 464) */,\n+ 0x74 /* 't' */, 0x15, 0x00 /* (to 0x0365 s 473) */,\n+ 0x08, /* fail */\n+/* pos 0354: 458 */ 0xED /* 'm' -\u003e */,\n+/* pos 0355: 459 */ 0xE1 /* 'a' -\u003e */,\n+/* pos 0356: 460 */ 0xE7 /* 'g' -\u003e */,\n+/* pos 0357: 461 */ 0xE5 /* 'e' -\u003e */,\n+/* pos 0358: 462 */ 0xBA /* ':' -\u003e */,\n+/* pos 0359: 463 */ 0x00, 0x3D /* - terminal marker 61 - */,\n+/* pos 035b: 464 */ 0xEF /* 'o' -\u003e */,\n+/* pos 035c: 465 */ 0xF3 /* 's' -\u003e */,\n+/* pos 035d: 466 */ 0xE9 /* 'i' -\u003e */,\n+/* pos 035e: 467 */ 0xF4 /* 't' -\u003e */,\n+/* pos 035f: 468 */ 0xE9 /* 'i' -\u003e */,\n+/* pos 0360: 469 */ 0xEF /* 'o' -\u003e */,\n+/* pos 0361: 470 */ 0xEE /* 'n' -\u003e */,\n+/* pos 0362: 471 */ 0xBA /* ':' -\u003e */,\n+/* pos 0363: 472 */ 0x00, 0x3E /* - terminal marker 62 - */,\n+/* pos 0365: 473 */ 0xF9 /* 'y' -\u003e */,\n+/* pos 0366: 474 */ 0xF0 /* 'p' -\u003e */,\n+/* pos 0367: 475 */ 0xE5 /* 'e' -\u003e */,\n+/* pos 0368: 476 */ 0xBA /* ':' -\u003e */,\n+/* pos 0369: 477 */ 0x00, 0x3F /* - terminal marker 63 - */,\n+/* pos 036b: 478 */ 0x00, 0x40 /* - terminal marker 64 - */,\n+/* pos 036d: 479 */ 0x61 /* 'a' */, 0x07, 0x00 /* (to 0x0374 s 480) */,\n+ 0x69 /* 'i' */, 0x55, 0x00 /* (to 0x03C5 s 524) */,\n+ 0x08, /* fail */\n+/* pos 0374: 480 */ 0x72 /* 'r' */, 0x07, 0x00 /* (to 0x037B s 481) */,\n+ 0x78 /* 'x' */, 0x37, 0x00 /* (to 0x03AE s 509) */,\n+ 0x08, /* fail */\n+/* pos 037b: 481 */ 0xE7 /* 'g' -\u003e */,\n+/* pos 037c: 482 */ 0xE9 /* 'i' -\u003e */,\n+/* pos 037d: 483 */ 0xEE /* 'n' -\u003e */,\n+/* pos 037e: 484 */ 0x2D /* '-' */, 0x07, 0x00 /* (to 0x0385 s 485) */,\n+ 0x3A /* ':' */, 0x2B, 0x00 /* (to 0x03AC s 508) */,\n+ 0x08, /* fail */\n+/* pos 0385: 485 */ 0x72 /* 'r' */, 0x0D, 0x00 /* (to 0x0392 s 486) */,\n+ 0x6C /* 'l' */, 0x11, 0x00 /* (to 0x0399 s 492) */,\n+ 0x74 /* 't' */, 0x14, 0x00 /* (to 0x039F s 497) */,\n+ 0x62 /* 'b' */, 0x16, 0x00 /* (to 0x03A4 s 501) */,\n+ 0x08, /* fail */\n+/* pos 0392: 486 */ 0xE9 /* 'i' -\u003e */,\n+/* pos 0393: 487 */ 0xE7 /* 'g' -\u003e */,\n+/* pos 0394: 488 */ 0xE8 /* 'h' -\u003e */,\n+/* pos 0395: 489 */ 0xF4 /* 't' -\u003e */,\n+/* pos 0396: 490 */ 0xBA /* ':' -\u003e */,\n+/* pos 0397: 491 */ 0x00, 0x41 /* - terminal marker 65 - */,\n+/* pos 0399: 492 */ 0xE5 /* 'e' -\u003e */,\n+/* pos 039a: 493 */ 0xE6 /* 'f' -\u003e */,\n+/* pos 039b: 494 */ 0xF4 /* 't' -\u003e */,\n+/* pos 039c: 495 */ 0xBA /* ':' -\u003e */,\n+/* pos 039d: 496 */ 0x00, 0x42 /* - terminal marker 66 - */,\n+/* pos 039f: 497 */ 0xEF /* 'o' -\u003e */,\n+/* pos 03a0: 498 */ 0xF0 /* 'p' -\u003e */,\n+/* pos 03a1: 499 */ 0xBA /* ':' -\u003e */,\n+/* pos 03a2: 500 */ 0x00, 0x43 /* - terminal marker 67 - */,\n+/* pos 03a4: 501 */ 0xEF /* 'o' -\u003e */,\n+/* pos 03a5: 502 */ 0xF4 /* 't' -\u003e */,\n+/* pos 03a6: 503 */ 0xF4 /* 't' -\u003e */,\n+/* pos 03a7: 504 */ 0xEF /* 'o' -\u003e */,\n+/* pos 03a8: 505 */ 0xED /* 'm' -\u003e */,\n+/* pos 03a9: 506 */ 0xBA /* ':' -\u003e */,\n+/* pos 03aa: 507 */ 0x00, 0x44 /* - terminal marker 68 - */,\n+/* pos 03ac: 508 */ 0x00, 0x45 /* - terminal marker 69 - */,\n+/* pos 03ae: 509 */ 0xAD /* '-' -\u003e */,\n+/* pos 03af: 510 */ 0x68 /* 'h' */, 0x07, 0x00 /* (to 0x03B6 s 511) */,\n+ 0x77 /* 'w' */, 0x0C, 0x00 /* (to 0x03BE s 518) */,\n+ 0x08, /* fail */\n+/* pos 03b6: 511 */ 0xE5 /* 'e' -\u003e */,\n+/* pos 03b7: 512 */ 0xE9 /* 'i' -\u003e */,\n+/* pos 03b8: 513 */ 0xE7 /* 'g' -\u003e */,\n+/* pos 03b9: 514 */ 0xE8 /* 'h' -\u003e */,\n+/* pos 03ba: 515 */ 0xF4 /* 't' -\u003e */,\n+/* pos 03bb: 516 */ 0xBA /* ':' -\u003e */,\n+/* pos 03bc: 517 */ 0x00, 0x46 /* - terminal marker 70 - */,\n+/* pos 03be: 518 */ 0xE9 /* 'i' -\u003e */,\n+/* pos 03bf: 519 */ 0xE4 /* 'd' -\u003e */,\n+/* pos 03c0: 520 */ 0xF4 /* 't' -\u003e */,\n+/* pos 03c1: 521 */ 0xE8 /* 'h' -\u003e */,\n+/* pos 03c2: 522 */ 0xBA /* ':' -\u003e */,\n+/* pos 03c3: 523 */ 0x00, 0x47 /* - terminal marker 71 - */,\n+/* pos 03c5: 524 */ 0xEE /* 'n' -\u003e */,\n+/* pos 03c6: 525 */ 0xAD /* '-' -\u003e */,\n+/* pos 03c7: 526 */ 0x68 /* 'h' */, 0x07, 0x00 /* (to 0x03CE s 527) */,\n+ 0x77 /* 'w' */, 0x0C, 0x00 /* (to 0x03D6 s 534) */,\n+ 0x08, /* fail */\n+/* pos 03ce: 527 */ 0xE5 /* 'e' -\u003e */,\n+/* pos 03cf: 528 */ 0xE9 /* 'i' -\u003e */,\n+/* pos 03d0: 529 */ 0xE7 /* 'g' -\u003e */,\n+/* pos 03d1: 530 */ 0xE8 /* 'h' -\u003e */,\n+/* pos 03d2: 531 */ 0xF4 /* 't' -\u003e */,\n+/* pos 03d3: 532 */ 0xBA /* ':' -\u003e */,\n+/* pos 03d4: 533 */ 0x00, 0x48 /* - terminal marker 72 - */,\n+/* pos 03d6: 534 */ 0xE9 /* 'i' -\u003e */,\n+/* pos 03d7: 535 */ 0xE4 /* 'd' -\u003e */,\n+/* pos 03d8: 536 */ 0xF4 /* 't' -\u003e */,\n+/* pos 03d9: 537 */ 0xE8 /* 'h' -\u003e */,\n+/* pos 03da: 538 */ 0xBA /* ':' -\u003e */,\n+/* pos 03db: 539 */ 0x00, 0x49 /* - terminal marker 73 - */,\n+/* pos 03dd: 540 */ 0x72 /* 'r' */, 0x0A, 0x00 /* (to 0x03E7 s 541) */,\n+ 0x75 /* 'u' */, 0x0F, 0x00 /* (to 0x03EF s 548) */,\n+ 0x76 /* 'v' */, 0x39, 0x00 /* (to 0x041C s 574) */,\n+ 0x08, /* fail */\n+/* pos 03e7: 541 */ 0xF0 /* 'p' -\u003e */,\n+/* pos 03e8: 542 */ 0xE8 /* 'h' -\u003e */,\n+/* pos 03e9: 543 */ 0xE1 /* 'a' -\u003e */,\n+/* pos 03ea: 544 */ 0xEE /* 'n' -\u003e */,\n+/* pos 03eb: 545 */ 0xF3 /* 's' -\u003e */,\n+/* pos 03ec: 546 */ 0xBA /* ':' -\u003e */,\n+/* pos 03ed: 547 */ 0x00, 0x4A /* - terminal marker 74 - */,\n+/* pos 03ef: 548 */ 0xF4 /* 't' -\u003e */,\n+/* pos 03f0: 549 */ 0xEC /* 'l' -\u003e */,\n+/* pos 03f1: 550 */ 0xE9 /* 'i' -\u003e */,\n+/* pos 03f2: 551 */ 0xEE /* 'n' -\u003e */,\n+/* pos 03f3: 552 */ 0xE5 /* 'e' -\u003e */,\n+/* pos 03f4: 553 */ 0x2D /* '-' */, 0x07, 0x00 /* (to 0x03FB s 554) */,\n+ 0x3A /* ':' */, 0x23, 0x00 /* (to 0x041A s 573) */,\n+ 0x08, /* fail */\n+/* pos 03fb: 554 */ 0x63 /* 'c' */, 0x0A, 0x00 /* (to 0x0405 s 555) */,\n+ 0x73 /* 's' */, 0x0E, 0x00 /* (to 0x040C s 561) */,\n+ 0x77 /* 'w' */, 0x12, 0x00 /* (to 0x0413 s 567) */,\n+ 0x08, /* fail */\n+/* pos 0405: 555 */ 0xEF /* 'o' -\u003e */,\n+/* pos 0406: 556 */ 0xEC /* 'l' -\u003e */,\n+/* pos 0407: 557 */ 0xEF /* 'o' -\u003e */,\n+/* pos 0408: 558 */ 0xF2 /* 'r' -\u003e */,\n+/* pos 0409: 559 */ 0xBA /* ':' -\u003e */,\n+/* pos 040a: 560 */ 0x00, 0x4B /* - terminal marker 75 - */,\n+/* pos 040c: 561 */ 0xF4 /* 't' -\u003e */,\n+/* pos 040d: 562 */ 0xF9 /* 'y' -\u003e */,\n+/* pos 040e: 563 */ 0xEC /* 'l' -\u003e */,\n+/* pos 040f: 564 */ 0xE5 /* 'e' -\u003e */,\n+/* pos 0410: 565 */ 0xBA /* ':' -\u003e */,\n+/* pos 0411: 566 */ 0x00, 0x4C /* - terminal marker 76 - */,\n+/* pos 0413: 567 */ 0xE9 /* 'i' -\u003e */,\n+/* pos 0414: 568 */ 0xE4 /* 'd' -\u003e */,\n+/* pos 0415: 569 */ 0xF4 /* 't' -\u003e */,\n+/* pos 0416: 570 */ 0xE8 /* 'h' -\u003e */,\n+/* pos 0417: 571 */ 0xBA /* ':' -\u003e */,\n+/* pos 0418: 572 */ 0x00, 0x4D /* - terminal marker 77 - */,\n+/* pos 041a: 573 */ 0x00, 0x4E /* - terminal marker 78 - */,\n+/* pos 041c: 574 */ 0xE5 /* 'e' -\u003e */,\n+/* pos 041d: 575 */ 0xF2 /* 'r' -\u003e */,\n+/* pos 041e: 576 */ 0xE6 /* 'f' -\u003e */,\n+/* pos 041f: 577 */ 0xEC /* 'l' -\u003e */,\n+/* pos 0420: 578 */ 0xEF /* 'o' -\u003e */,\n+/* pos 0421: 579 */ 0xF7 /* 'w' -\u003e */,\n+/* pos 0422: 580 */ 0xBA /* ':' -\u003e */,\n+/* pos 0423: 581 */ 0x00, 0x4F /* - terminal marker 79 - */,\n+/* pos 0425: 582 */ 0x61 /* 'a' */, 0x0D, 0x00 /* (to 0x0432 s 583) */,\n+ 0x69 /* 'i' */, 0x92, 0x00 /* (to 0x04BA s 660) */,\n+ 0x6C /* 'l' */, 0xA3, 0x00 /* (to 0x04CE s 672) */,\n+ 0x6F /* 'o' */, 0xAC, 0x00 /* (to 0x04DA s 683) */,\n+ 0x08, /* fail */\n+/* pos 0432: 583 */ 0x64 /* 'd' */, 0x0A, 0x00 /* (to 0x043C s 584) */,\n+ 0x67 /* 'g' */, 0x3B, 0x00 /* (to 0x0470 s 613) */,\n+ 0x75 /* 'u' */, 0x61, 0x00 /* (to 0x0499 s 642) */,\n+ 0x08, /* fail */\n+/* pos 043c: 584 */ 0xE4 /* 'd' -\u003e */,\n+/* pos 043d: 585 */ 0xE9 /* 'i' -\u003e */,\n+/* pos 043e: 586 */ 0xEE /* 'n' -\u003e */,\n+/* pos 043f: 587 */ 0xE7 /* 'g' -\u003e */,\n+/* pos 0440: 588 */ 0x2D /* '-' */, 0x07, 0x00 /* (to 0x0447 s 589) */,\n+ 0x3A /* ':' */, 0x2B, 0x00 /* (to 0x046E s 612) */,\n+ 0x08, /* fail */\n+/* pos 0447: 589 */ 0x74 /* 't' */, 0x0D, 0x00 /* (to 0x0454 s 590) */,\n+ 0x72 /* 'r' */, 0x0F, 0x00 /* (to 0x0459 s 594) */,\n+ 0x62 /* 'b' */, 0x13, 0x00 /* (to 0x0460 s 600) */,\n+ 0x6C /* 'l' */, 0x18, 0x00 /* (to 0x0468 s 607) */,\n+ 0x08, /* fail */\n+/* pos 0454: 590 */ 0xEF /* 'o' -\u003e */,\n+/* pos 0455: 591 */ 0xF0 /* 'p' -\u003e */,\n+/* pos 0456: 592 */ 0xBA /* ':' -\u003e */,\n+/* pos 0457: 593 */ 0x00, 0x50 /* - terminal marker 80 - */,\n+/* pos 0459: 594 */ 0xE9 /* 'i' -\u003e */,\n+/* pos 045a: 595 */ 0xE7 /* 'g' -\u003e */,\n+/* pos 045b: 596 */ 0xE8 /* 'h' -\u003e */,\n+/* pos 045c: 597 */ 0xF4 /* 't' -\u003e */,\n+/* pos 045d: 598 */ 0xBA /* ':' -\u003e */,\n+/* pos 045e: 599 */ 0x00, 0x51 /* - terminal marker 81 - */,\n+/* pos 0460: 600 */ 0xEF /* 'o' -\u003e */,\n+/* pos 0461: 601 */ 0xF4 /* 't' -\u003e */,\n+/* pos 0462: 602 */ 0xF4 /* 't' -\u003e */,\n+/* pos 0463: 603 */ 0xEF /* 'o' -\u003e */,\n+/* pos 0464: 604 */ 0xED /* 'm' -\u003e */,\n+/* pos 0465: 605 */ 0xBA /* ':' -\u003e */,\n+/* pos 0466: 606 */ 0x00, 0x52 /* - terminal marker 82 - */,\n+/* pos 0468: 607 */ 0xE5 /* 'e' -\u003e */,\n+/* pos 0469: 608 */ 0xE6 /* 'f' -\u003e */,\n+/* pos 046a: 609 */ 0xF4 /* 't' -\u003e */,\n+/* pos 046b: 610 */ 0xBA /* ':' -\u003e */,\n+/* pos 046c: 611 */ 0x00, 0x53 /* - terminal marker 83 - */,\n+/* pos 046e: 612 */ 0x00, 0x54 /* - terminal marker 84 - */,\n+/* pos 0470: 613 */ 0xE5 /* 'e' -\u003e */,\n+/* pos 0471: 614 */ 0xAD /* '-' -\u003e */,\n+/* pos 0472: 615 */ 0xE2 /* 'b' -\u003e */,\n+/* pos 0473: 616 */ 0xF2 /* 'r' -\u003e */,\n+/* pos 0474: 617 */ 0xE5 /* 'e' -\u003e */,\n+/* pos 0475: 618 */ 0xE1 /* 'a' -\u003e */,\n+/* pos 0476: 619 */ 0xEB /* 'k' -\u003e */,\n+/* pos 0477: 620 */ 0xAD /* '-' -\u003e */,\n+/* pos 0478: 621 */ 0x61 /* 'a' */, 0x0A, 0x00 /* (to 0x0482 s 622) */,\n+ 0x62 /* 'b' */, 0x0E, 0x00 /* (to 0x0489 s 628) */,\n+ 0x69 /* 'i' */, 0x13, 0x00 /* (to 0x0491 s 635) */,\n+ 0x08, /* fail */\n+/* pos 0482: 622 */ 0xE6 /* 'f' -\u003e */,\n+/* pos 0483: 623 */ 0xF4 /* 't' -\u003e */,\n+/* pos 0484: 624 */ 0xE5 /* 'e' -\u003e */,\n+/* pos 0485: 625 */ 0xF2 /* 'r' -\u003e */,\n+/* pos 0486: 626 */ 0xBA /* ':' -\u003e */,\n+/* pos 0487: 627 */ 0x00, 0x55 /* - terminal marker 85 - */,\n+/* pos 0489: 628 */ 0xE5 /* 'e' -\u003e */,\n+/* pos 048a: 629 */ 0xE6 /* 'f' -\u003e */,\n+/* pos 048b: 630 */ 0xEF /* 'o' -\u003e */,\n+/* pos 048c: 631 */ 0xF2 /* 'r' -\u003e */,\n+/* pos 048d: 632 */ 0xE5 /* 'e' -\u003e */,\n+/* pos 048e: 633 */ 0xBA /* ':' -\u003e */,\n+/* pos 048f: 634 */ 0x00, 0x56 /* - terminal marker 86 - */,\n+/* pos 0491: 635 */ 0xEE /* 'n' -\u003e */,\n+/* pos 0492: 636 */ 0xF3 /* 's' -\u003e */,\n+/* pos 0493: 637 */ 0xE9 /* 'i' -\u003e */,\n+/* pos 0494: 638 */ 0xE4 /* 'd' -\u003e */,\n+/* pos 0495: 639 */ 0xE5 /* 'e' -\u003e */,\n+/* pos 0496: 640 */ 0xBA /* ':' -\u003e */,\n+/* pos 0497: 641 */ 0x00, 0x57 /* - terminal marker 87 - */,\n+/* pos 0499: 642 */ 0xF3 /* 's' -\u003e */,\n+/* pos 049a: 643 */ 0xE5 /* 'e' -\u003e */,\n+/* pos 049b: 644 */ 0x2D /* '-' */, 0x07, 0x00 /* (to 0x04A2 s 645) */,\n+ 0x3A /* ':' */, 0x1A, 0x00 /* (to 0x04B8 s 659) */,\n+ 0x08, /* fail */\n+/* pos 04a2: 645 */ 0x61 /* 'a' */, 0x07, 0x00 /* (to 0x04A9 s 646) */,\n+ 0x62 /* 'b' */, 0x0B, 0x00 /* (to 0x04B0 s 652) */,\n+ 0x08, /* fail */\n+/* pos 04a9: 646 */ 0xE6 /* 'f' -\u003e */,\n+/* pos 04aa: 647 */ 0xF4 /* 't' -\u003e */,\n+/* pos 04ab: 648 */ 0xE5 /* 'e' -\u003e */,\n+/* pos 04ac: 649 */ 0xF2 /* 'r' -\u003e */,\n+/* pos 04ad: 650 */ 0xBA /* ':' -\u003e */,\n+/* pos 04ae: 651 */ 0x00, 0x58 /* - terminal marker 88 - */,\n+/* pos 04b0: 652 */ 0xE5 /* 'e' -\u003e */,\n+/* pos 04b1: 653 */ 0xE6 /* 'f' -\u003e */,\n+/* pos 04b2: 654 */ 0xEF /* 'o' -\u003e */,\n+/* pos 04b3: 655 */ 0xF2 /* 'r' -\u003e */,\n+/* pos 04b4: 656 */ 0xE5 /* 'e' -\u003e */,\n+/* pos 04b5: 657 */ 0xBA /* ':' -\u003e */,\n+/* pos 04b6: 658 */ 0x00, 0x59 /* - terminal marker 89 - */,\n+/* pos 04b8: 659 */ 0x00, 0x5A /* - terminal marker 90 - */,\n+/* pos 04ba: 660 */ 0xF4 /* 't' -\u003e */,\n+/* pos 04bb: 661 */ 0xE3 /* 'c' -\u003e */,\n+/* pos 04bc: 662 */ 0xE8 /* 'h' -\u003e */,\n+/* pos 04bd: 663 */ 0x2D /* '-' */, 0x07, 0x00 /* (to 0x04C4 s 664) */,\n+ 0x3A /* ':' */, 0x0C, 0x00 /* (to 0x04CC s 671) */,\n+ 0x08, /* fail */\n+/* pos 04c4: 664 */ 0xF2 /* 'r' -\u003e */,\n+/* pos 04c5: 665 */ 0xE1 /* 'a' -\u003e */,\n+/* pos 04c6: 666 */ 0xEE /* 'n' -\u003e */,\n+/* pos 04c7: 667 */ 0xE7 /* 'g' -\u003e */,\n+/* pos 04c8: 668 */ 0xE5 /* 'e' -\u003e */,\n+/* pos 04c9: 669 */ 0xBA /* ':' -\u003e */,\n+/* pos 04ca: 670 */ 0x00, 0x5B /* - terminal marker 91 - */,\n+/* pos 04cc: 671 */ 0x00, 0x5C /* - terminal marker 92 - */,\n+/* pos 04ce: 672 */ 0xE1 /* 'a' -\u003e */,\n+/* pos 04cf: 673 */ 0xF9 /* 'y' -\u003e */,\n+/* pos 04d0: 674 */ 0xAD /* '-' -\u003e */,\n+/* pos 04d1: 675 */ 0xE4 /* 'd' -\u003e */,\n+/* pos 04d2: 676 */ 0xF5 /* 'u' -\u003e */,\n+/* pos 04d3: 677 */ 0xF2 /* 'r' -\u003e */,\n+/* pos 04d4: 678 */ 0xE9 /* 'i' -\u003e */,\n+/* pos 04d5: 679 */ 0xEE /* 'n' -\u003e */,\n+/* pos 04d6: 680 */ 0xE7 /* 'g' -\u003e */,\n+/* pos 04d7: 681 */ 0xBA /* ':' -\u003e */,\n+/* pos 04d8: 682 */ 0x00, 0x5D /* - terminal marker 93 - */,\n+/* pos 04da: 683 */ 0xF3 /* 's' -\u003e */,\n+/* pos 04db: 684 */ 0xE9 /* 'i' -\u003e */,\n+/* pos 04dc: 685 */ 0xF4 /* 't' -\u003e */,\n+/* pos 04dd: 686 */ 0xE9 /* 'i' -\u003e */,\n+/* pos 04de: 687 */ 0xEF /* 'o' -\u003e */,\n+/* pos 04df: 688 */ 0xEE /* 'n' -\u003e */,\n+/* pos 04e0: 689 */ 0xBA /* ':' -\u003e */,\n+/* pos 04e1: 690 */ 0x00, 0x5E /* - terminal marker 94 - */,\n+/* pos 04e3: 691 */ 0xF5 /* 'u' -\u003e */,\n+/* pos 04e4: 692 */ 0xEF /* 'o' -\u003e */,\n+/* pos 04e5: 693 */ 0xF4 /* 't' -\u003e */,\n+/* pos 04e6: 694 */ 0xE5 /* 'e' -\u003e */,\n+/* pos 04e7: 695 */ 0xF3 /* 's' -\u003e */,\n+/* pos 04e8: 696 */ 0xBA /* ':' -\u003e */,\n+/* pos 04e9: 697 */ 0x00, 0x5F /* - terminal marker 95 - */,\n+/* pos 04eb: 698 */ 0xE9 /* 'i' -\u003e */,\n+/* pos 04ec: 699 */ 0x63 /* 'c' */, 0x07, 0x00 /* (to 0x04F3 s 700) */,\n+ 0x67 /* 'g' */, 0x0C, 0x00 /* (to 0x04FB s 707) */,\n+ 0x08, /* fail */\n+/* pos 04f3: 700 */ 0xE8 /* 'h' -\u003e */,\n+/* pos 04f4: 701 */ 0xEE /* 'n' -\u003e */,\n+/* pos 04f5: 702 */ 0xE5 /* 'e' -\u003e */,\n+/* pos 04f6: 703 */ 0xF3 /* 's' -\u003e */,\n+/* pos 04f7: 704 */ 0xF3 /* 's' -\u003e */,\n+/* pos 04f8: 705 */ 0xBA /* ':' -\u003e */,\n+/* pos 04f9: 706 */ 0x00, 0x60 /* - terminal marker 96 - */,\n+/* pos 04fb: 707 */ 0xE8 /* 'h' -\u003e */,\n+/* pos 04fc: 708 */ 0xF4 /* 't' -\u003e */,\n+/* pos 04fd: 709 */ 0xBA /* ':' -\u003e */,\n+/* pos 04fe: 710 */ 0x00, 0x61 /* - terminal marker 97 - */,\n+/* pos 0500: 711 */ 0x70 /* 'p' */, 0x07, 0x00 /* (to 0x0507 s 712) */,\n+ 0x74 /* 't' */, 0x48, 0x00 /* (to 0x054B s 754) */,\n+ 0x08, /* fail */\n+/* pos 0507: 712 */ 0xE5 /* 'e' -\u003e */,\n+/* pos 0508: 713 */ 0x61 /* 'a' */, 0x07, 0x00 /* (to 0x050F s 714) */,\n+ 0x65 /* 'e' */, 0x36, 0x00 /* (to 0x0541 s 745) */,\n+ 0x08, /* fail */\n+/* pos 050f: 714 */ 0xEB /* 'k' -\u003e */,\n+/* pos 0510: 715 */ 0x2D /* '-' */, 0x07, 0x00 /* (to 0x0517 s 716) */,\n+ 0x3A /* ':' */, 0x2C, 0x00 /* (to 0x053F s 744) */,\n+ 0x08, /* fail */\n+/* pos 0517: 716 */ 0x68 /* 'h' */, 0x0A, 0x00 /* (to 0x0521 s 717) */,\n+ 0x6E /* 'n' */, 0x0F, 0x00 /* (to 0x0529 s 724) */,\n+ 0x70 /* 'p' */, 0x15, 0x00 /* (to 0x0532 s 732) */,\n+ 0x08, /* fail */\n+/* pos 0521: 717 */ 0xE5 /* 'e' -\u003e */,\n+/* pos 0522: 718 */ 0xE1 /* 'a' -\u003e */,\n+/* pos 0523: 719 */ 0xE4 /* 'd' -\u003e */,\n+/* pos 0524: 720 */ 0xE5 /* 'e' -\u003e */,\n+/* pos 0525: 721 */ 0xF2 /* 'r' -\u003e */,\n+/* pos 0526: 722 */ 0xBA /* ':' -\u003e */,\n+/* pos 0527: 723 */ 0x00, 0x62 /* - terminal marker 98 - */,\n+/* pos 0529: 724 */ 0xF5 /* 'u' -\u003e */,\n+/* pos 052a: 725 */ 0xED /* 'm' -\u003e */,\n+/* pos 052b: 726 */ 0xE5 /* 'e' -\u003e */,\n+/* pos 052c: 727 */ 0xF2 /* 'r' -\u003e */,\n+/* pos 052d: 728 */ 0xE1 /* 'a' -\u003e */,\n+/* pos 052e: 729 */ 0xEC /* 'l' -\u003e */,\n+/* pos 052f: 730 */ 0xBA /* ':' -\u003e */,\n+/* pos 0530: 731 */ 0x00, 0x63 /* - terminal marker 99 - */,\n+/* pos 0532: 732 */ 0xF5 /* 'u' -\u003e */,\n+/* pos 0533: 733 */ 0xEE /* 'n' -\u003e */,\n+/* pos 0534: 734 */ 0xE3 /* 'c' -\u003e */,\n+/* pos 0535: 735 */ 0xF4 /* 't' -\u003e */,\n+/* pos 0536: 736 */ 0xF5 /* 'u' -\u003e */,\n+/* pos 0537: 737 */ 0xE1 /* 'a' -\u003e */,\n+/* pos 0538: 738 */ 0xF4 /* 't' -\u003e */,\n+/* pos 0539: 739 */ 0xE9 /* 'i' -\u003e */,\n+/* pos 053a: 740 */ 0xEF /* 'o' -\u003e */,\n+/* pos 053b: 741 */ 0xEE /* 'n' -\u003e */,\n+/* pos 053c: 742 */ 0xBA /* ':' -\u003e */,\n+/* pos 053d: 743 */ 0x00, 0x64 /* - terminal marker 100 - */,\n+/* pos 053f: 744 */ 0x00, 0x65 /* - terminal marker 101 - */,\n+/* pos 0541: 745 */ 0xE3 /* 'c' -\u003e */,\n+/* pos 0542: 746 */ 0xE8 /* 'h' -\u003e */,\n+/* pos 0543: 747 */ 0xAD /* '-' -\u003e */,\n+/* pos 0544: 748 */ 0xF2 /* 'r' -\u003e */,\n+/* pos 0545: 749 */ 0xE1 /* 'a' -\u003e */,\n+/* pos 0546: 750 */ 0xF4 /* 't' -\u003e */,\n+/* pos 0547: 751 */ 0xE5 /* 'e' -\u003e */,\n+/* pos 0548: 752 */ 0xBA /* ':' -\u003e */,\n+/* pos 0549: 753 */ 0x00, 0x66 /* - terminal marker 102 - */,\n+/* pos 054b: 754 */ 0xF2 /* 'r' -\u003e */,\n+/* pos 054c: 755 */ 0xE5 /* 'e' -\u003e */,\n+/* pos 054d: 756 */ 0xF3 /* 's' -\u003e */,\n+/* pos 054e: 757 */ 0xF3 /* 's' -\u003e */,\n+/* pos 054f: 758 */ 0xBA /* ':' -\u003e */,\n+/* pos 0550: 759 */ 0x00, 0x67 /* - terminal marker 103 - */,\n+/* pos 0552: 760 */ 0x61 /* 'a' */, 0x0A, 0x00 /* (to 0x055C s 761) */,\n+ 0x65 /* 'e' */, 0x14, 0x00 /* (to 0x0569 s 773) */,\n+ 0x6F /* 'o' */, 0x47, 0x00 /* (to 0x059F s 811) */,\n+ 0x08, /* fail */\n+/* pos 055c: 761 */ 0xE2 /* 'b' -\u003e */,\n+/* pos 055d: 762 */ 0xEC /* 'l' -\u003e */,\n+/* pos 055e: 763 */ 0xE5 /* 'e' -\u003e */,\n+/* pos 055f: 764 */ 0xAD /* '-' -\u003e */,\n+/* pos 0560: 765 */ 0xEC /* 'l' -\u003e */,\n+/* pos 0561: 766 */ 0xE1 /* 'a' -\u003e */,\n+/* pos 0562: 767 */ 0xF9 /* 'y' -\u003e */,\n+/* pos 0563: 768 */ 0xEF /* 'o' -\u003e */,\n+/* pos 0564: 769 */ 0xF5 /* 'u' -\u003e */,\n+/* pos 0565: 770 */ 0xF4 /* 't' -\u003e */,\n+/* pos 0566: 771 */ 0xBA /* ':' -\u003e */,\n+/* pos 0567: 772 */ 0x00, 0x68 /* - terminal marker 104 - */,\n+/* pos 0569: 773 */ 0xF8 /* 'x' -\u003e */,\n+/* pos 056a: 774 */ 0xF4 /* 't' -\u003e */,\n+/* pos 056b: 775 */ 0xAD /* '-' -\u003e */,\n+/* pos 056c: 776 */ 0x61 /* 'a' */, 0x0D, 0x00 /* (to 0x0579 s 777) */,\n+ 0x64 /* 'd' */, 0x11, 0x00 /* (to 0x0580 s 783) */,\n+ 0x69 /* 'i' */, 0x1A, 0x00 /* (to 0x058C s 794) */,\n+ 0x74 /* 't' */, 0x1F, 0x00 /* (to 0x0594 s 801) */,\n+ 0x08, /* fail */\n+/* pos 0579: 777 */ 0xEC /* 'l' -\u003e */,\n+/* pos 057a: 778 */ 0xE9 /* 'i' -\u003e */,\n+/* pos 057b: 779 */ 0xE7 /* 'g' -\u003e */,\n+/* pos 057c: 780 */ 0xEE /* 'n' -\u003e */,\n+/* pos 057d: 781 */ 0xBA /* ':' -\u003e */,\n+/* pos 057e: 782 */ 0x00, 0x69 /* - terminal marker 105 - */,\n+/* pos 0580: 783 */ 0xE5 /* 'e' -\u003e */,\n+/* pos 0581: 784 */ 0xE3 /* 'c' -\u003e */,\n+/* pos 0582: 785 */ 0xEF /* 'o' -\u003e */,\n+/* pos 0583: 786 */ 0xF2 /* 'r' -\u003e */,\n+/* pos 0584: 787 */ 0xE1 /* 'a' -\u003e */,\n+/* pos 0585: 788 */ 0xF4 /* 't' -\u003e */,\n+/* pos 0586: 789 */ 0xE9 /* 'i' -\u003e */,\n+/* pos 0587: 790 */ 0xEF /* 'o' -\u003e */,\n+/* pos 0588: 791 */ 0xEE /* 'n' -\u003e */,\n+/* pos 0589: 792 */ 0xBA /* ':' -\u003e */,\n+/* pos 058a: 793 */ 0x00, 0x6A /* - terminal marker 106 - */,\n+/* pos 058c: 794 */ 0xEE /* 'n' -\u003e */,\n+/* pos 058d: 795 */ 0xE4 /* 'd' -\u003e */,\n+/* pos 058e: 796 */ 0xE5 /* 'e' -\u003e */,\n+/* pos 058f: 797 */ 0xEE /* 'n' -\u003e */,\n+/* pos 0590: 798 */ 0xF4 /* 't' -\u003e */,\n+/* pos 0591: 799 */ 0xBA /* ':' -\u003e */,\n+/* pos 0592: 800 */ 0x00, 0x6B /* - terminal marker 107 - */,\n+/* pos 0594: 801 */ 0xF2 /* 'r' -\u003e */,\n+/* pos 0595: 802 */ 0xE1 /* 'a' -\u003e */,\n+/* pos 0596: 803 */ 0xEE /* 'n' -\u003e */,\n+/* pos 0597: 804 */ 0xF3 /* 's' -\u003e */,\n+/* pos 0598: 805 */ 0xE6 /* 'f' -\u003e */,\n+/* pos 0599: 806 */ 0xEF /* 'o' -\u003e */,\n+/* pos 059a: 807 */ 0xF2 /* 'r' -\u003e */,\n+/* pos 059b: 808 */ 0xED /* 'm' -\u003e */,\n+/* pos 059c: 809 */ 0xBA /* ':' -\u003e */,\n+/* pos 059d: 810 */ 0x00, 0x6C /* - terminal marker 108 - */,\n+/* pos 059f: 811 */ 0xF0 /* 'p' -\u003e */,\n+/* pos 05a0: 812 */ 0xBA /* ':' -\u003e */,\n+/* pos 05a1: 813 */ 0x00, 0x6D /* - terminal marker 109 - */,\n+/* pos 05a3: 814 */ 0xEE /* 'n' -\u003e */,\n+/* pos 05a4: 815 */ 0xE9 /* 'i' -\u003e */,\n+/* pos 05a5: 816 */ 0xE3 /* 'c' -\u003e */,\n+/* pos 05a6: 817 */ 0xEF /* 'o' -\u003e */,\n+/* pos 05a7: 818 */ 0xE4 /* 'd' -\u003e */,\n+/* pos 05a8: 819 */ 0xE5 /* 'e' -\u003e */,\n+/* pos 05a9: 820 */ 0xAD /* '-' -\u003e */,\n+/* pos 05aa: 821 */ 0xE2 /* 'b' -\u003e */,\n+/* pos 05ab: 822 */ 0xE9 /* 'i' -\u003e */,\n+/* pos 05ac: 823 */ 0xE4 /* 'd' -\u003e */,\n+/* pos 05ad: 824 */ 0xE9 /* 'i' -\u003e */,\n+/* pos 05ae: 825 */ 0xBA /* ':' -\u003e */,\n+/* pos 05af: 826 */ 0x00, 0x6E /* - terminal marker 110 - */,\n+/* pos 05b1: 827 */ 0x65 /* 'e' */, 0x0A, 0x00 /* (to 0x05BB s 828) */,\n+ 0x69 /* 'i' */, 0x16, 0x00 /* (to 0x05CA s 842) */,\n+ 0x6F /* 'o' */, 0x1E, 0x00 /* (to 0x05D5 s 852) */,\n+ 0x08, /* fail */\n+/* pos 05bb: 828 */ 0xF2 /* 'r' -\u003e */,\n+/* pos 05bc: 829 */ 0xF4 /* 't' -\u003e */,\n+/* pos 05bd: 830 */ 0xE9 /* 'i' -\u003e */,\n+/* pos 05be: 831 */ 0xE3 /* 'c' -\u003e */,\n+/* pos 05bf: 832 */ 0xE1 /* 'a' -\u003e */,\n+/* pos 05c0: 833 */ 0xEC /* 'l' -\u003e */,\n+/* pos 05c1: 834 */ 0xAD /* '-' -\u003e */,\n+/* pos 05c2: 835 */ 0xE1 /* 'a' -\u003e */,\n+/* pos 05c3: 836 */ 0xEC /* 'l' -\u003e */,\n+/* pos 05c4: 837 */ 0xE9 /* 'i' -\u003e */,\n+/* pos 05c5: 838 */ 0xE7 /* 'g' -\u003e */,\n+/* pos 05c6: 839 */ 0xEE /* 'n' -\u003e */,\n+/* pos 05c7: 840 */ 0xBA /* ':' -\u003e */,\n+/* pos 05c8: 841 */ 0x00, 0x6F /* - terminal marker 111 - */,\n+/* pos 05ca: 842 */ 0xF3 /* 's' -\u003e */,\n+/* pos 05cb: 843 */ 0xE9 /* 'i' -\u003e */,\n+/* pos 05cc: 844 */ 0xE2 /* 'b' -\u003e */,\n+/* pos 05cd: 845 */ 0xE9 /* 'i' -\u003e */,\n+/* pos 05ce: 846 */ 0xEC /* 'l' -\u003e */,\n+/* pos 05cf: 847 */ 0xE9 /* 'i' -\u003e */,\n+/* pos 05d0: 848 */ 0xF4 /* 't' -\u003e */,\n+/* pos 05d1: 849 */ 0xF9 /* 'y' -\u003e */,\n+/* pos 05d2: 850 */ 0xBA /* ':' -\u003e */,\n+/* pos 05d3: 851 */ 0x00, 0x70 /* - terminal marker 112 - */,\n+/* pos 05d5: 852 */ 0x69 /* 'i' */, 0x07, 0x00 /* (to 0x05DC s 853) */,\n+ 0x6C /* 'l' */, 0x10, 0x00 /* (to 0x05E8 s 864) */,\n+ 0x08, /* fail */\n+/* pos 05dc: 853 */ 0xE3 /* 'c' -\u003e */,\n+/* pos 05dd: 854 */ 0xE5 /* 'e' -\u003e */,\n+/* pos 05de: 855 */ 0xAD /* '-' -\u003e */,\n+/* pos 05df: 856 */ 0xE6 /* 'f' -\u003e */,\n+/* pos 05e0: 857 */ 0xE1 /* 'a' -\u003e */,\n+/* pos 05e1: 858 */ 0xED /* 'm' -\u003e */,\n+/* pos 05e2: 859 */ 0xE9 /* 'i' -\u003e */,\n+/* pos 05e3: 860 */ 0xEC /* 'l' -\u003e */,\n+/* pos 05e4: 861 */ 0xF9 /* 'y' -\u003e */,\n+/* pos 05e5: 862 */ 0xBA /* ':' -\u003e */,\n+/* pos 05e6: 863 */ 0x00, 0x71 /* - terminal marker 113 - */,\n+/* pos 05e8: 864 */ 0xF5 /* 'u' -\u003e */,\n+/* pos 05e9: 865 */ 0xED /* 'm' -\u003e */,\n+/* pos 05ea: 866 */ 0xE5 /* 'e' -\u003e */,\n+/* pos 05eb: 867 */ 0xBA /* ':' -\u003e */,\n+/* pos 05ec: 868 */ 0x00, 0x72 /* - terminal marker 114 - */,\n+/* pos 05ee: 869 */ 0x68 /* 'h' */, 0x0A, 0x00 /* (to 0x05F8 s 870) */,\n+ 0x69 /* 'i' */, 0x13, 0x00 /* (to 0x0604 s 881) */,\n+ 0x6F /* 'o' */, 0x21, 0x00 /* (to 0x0615 s 890) */,\n+ 0x08, /* fail */\n+/* pos 05f8: 870 */ 0xE9 /* 'i' -\u003e */,\n+/* pos 05f9: 871 */ 0xF4 /* 't' -\u003e */,\n+/* pos 05fa: 872 */ 0xE5 /* 'e' -\u003e */,\n+/* pos 05fb: 873 */ 0xAD /* '-' -\u003e */,\n+/* pos 05fc: 874 */ 0xF3 /* 's' -\u003e */,\n+/* pos 05fd: 875 */ 0xF0 /* 'p' -\u003e */,\n+/* pos 05fe: 876 */ 0xE1 /* 'a' -\u003e */,\n+/* pos 05ff: 877 */ 0xE3 /* 'c' -\u003e */,\n+/* pos 0600: 878 */ 0xE5 /* 'e' -\u003e */,\n+/* pos 0601: 879 */ 0xBA /* ':' -\u003e */,\n+/* pos 0602: 880 */ 0x00, 0x73 /* - terminal marker 115 - */,\n+/* pos 0604: 881 */ 0xE4 /* 'd' -\u003e */,\n+/* pos 0605: 882 */ 0x6F /* 'o' */, 0x07, 0x00 /* (to 0x060C s 883) */,\n+ 0x74 /* 't' */, 0x09, 0x00 /* (to 0x0611 s 887) */,\n+ 0x08, /* fail */\n+/* pos 060c: 883 */ 0xF7 /* 'w' -\u003e */,\n+/* pos 060d: 884 */ 0xF3 /* 's' -\u003e */,\n+/* pos 060e: 885 */ 0xBA /* ':' -\u003e */,\n+/* pos 060f: 886 */ 0x00, 0x74 /* - terminal marker 116 - */,\n+/* pos 0611: 887 */ 0xE8 /* 'h' -\u003e */,\n+/* pos 0612: 888 */ 0xBA /* ':' -\u003e */,\n+/* pos 0613: 889 */ 0x00, 0x75 /* - terminal marker 117 - */,\n+/* pos 0615: 890 */ 0xF2 /* 'r' -\u003e */,\n+/* pos 0616: 891 */ 0xE4 /* 'd' -\u003e */,\n+/* pos 0617: 892 */ 0xAD /* '-' -\u003e */,\n+/* pos 0618: 893 */ 0xF3 /* 's' -\u003e */,\n+/* pos 0619: 894 */ 0xF0 /* 'p' -\u003e */,\n+/* pos 061a: 895 */ 0xE1 /* 'a' -\u003e */,\n+/* pos 061b: 896 */ 0xE3 /* 'c' -\u003e */,\n+/* pos 061c: 897 */ 0xE9 /* 'i' -\u003e */,\n+/* pos 061d: 898 */ 0xEE /* 'n' -\u003e */,\n+/* pos 061e: 899 */ 0xE7 /* 'g' -\u003e */,\n+/* pos 061f: 900 */ 0xBA /* ':' -\u003e */,\n+/* pos 0620: 901 */ 0x00, 0x76 /* - terminal marker 118 - */,\n+/* pos 0622: 902 */ 0xAD /* '-' -\u003e */,\n+/* pos 0623: 903 */ 0xE9 /* 'i' -\u003e */,\n+/* pos 0624: 904 */ 0xEE /* 'n' -\u003e */,\n+/* pos 0625: 905 */ 0xE4 /* 'd' -\u003e */,\n+/* pos 0626: 906 */ 0xE5 /* 'e' -\u003e */,\n+/* pos 0627: 907 */ 0xF8 /* 'x' -\u003e */,\n+/* pos 0628: 908 */ 0xBA /* ':' -\u003e */,\n+/* pos 0629: 909 */ 0x00, 0x77 /* - terminal marker 119 - */,\n+/* total size 1579 bytes */\ndiff --git a/lib/misc/css-prop-constants.txt b/lib/misc/css-prop-constants.txt\nnew file mode 100644\nindex 0000000..308bc1f\n--- /dev/null\n+++ b/lib/misc/css-prop-constants.txt\n@@ -0,0 +1,125 @@\n+above\n+absolute\n+always\n+armenian\n+auto\n+avoid\n+baseline\n+behind\n+below\n+bidi-override\n+blink\n+block\n+bold\n+bolder\n+both\n+bottom\n+capitalize\n+caption\n+center\n+circle\n+close-quote\n+code\n+collapse\n+continuous\n+crosshair\n+decimal-leading-zero\n+decimal\n+digits\n+disc\n+embed\n+e-resize\n+fixed\n+georgian\n+help\n+hidden\n+hide\n+high\n+higher\n+icon\n+inherit\n+inline\n+inline-block\n+inline-table\n+invert\n+italic\n+justify\n+left\n+lighter\n+line-through\n+list-item\n+low\n+lower\n+lower-alpha\n+lowercase\n+lower-greek\n+lower-latin\n+lower-roman\n+ltr\n+menu\n+message-box\n+middle\n+mix\n+move\n+ne-resize\n+no-close-quote\n+none\n+no-open-quote\n+no-repeat\n+normal\n+nowrap\n+n-resize\n+nw-resize\n+oblique\n+once\n+open-quote\n+outside\n+overline\n+pointer\n+pre\n+pre-line\n+pre-wrap\n+progress\n+relative\n+repeat\n+repeat-x\n+repeat-y\n+right\n+rtl\n+scroll\n+separate\n+se-resize\n+show\n+silent\n+small-caps\n+small-caption\n+spell-out\n+square\n+s-resize\n+static\n+status-bar\n+sub\n+super\n+sw-resize\n+table\n+table-caption\n+table-cell\n+table-column\n+table-column-group\n+table-footer-group\n+table-header-group\n+table-row\n+table-row-group\n+text-bottom\n+text-top\n+text\n+top\n+transparent\n+underline\n+upper-alpha\n+uppercase\n+upper-latin\n+upper-roman\n+visible\n+wait\n+w-resize\n\u005c No newline at end of file\ndiff --git a/lib/misc/css-propconst-lextable.h b/lib/misc/css-propconst-lextable.h\nnew file mode 100644\nindex 0000000..24b2f0f\n--- /dev/null\n+++ b/lib/misc/css-propconst-lextable.h\n@@ -0,0 +1,1110 @@\n+\t/* 0: above */\n+\t/* 1: absolute */\n+\t/* 2: always */\n+\t/* 3: armenian */\n+\t/* 4: auto */\n+\t/* 5: avoid */\n+\t/* 6: baseline */\n+\t/* 7: behind */\n+\t/* 8: below */\n+\t/* 9: bidi-override */\n+\t/* 10: blink */\n+\t/* 11: block */\n+\t/* 12: bold */\n+\t/* 13: bolder */\n+\t/* 14: both */\n+\t/* 15: bottom */\n+\t/* 16: capitalize */\n+\t/* 17: caption */\n+\t/* 18: center */\n+\t/* 19: circle */\n+\t/* 20: close-quote */\n+\t/* 21: code */\n+\t/* 22: collapse */\n+\t/* 23: continuous */\n+\t/* 24: crosshair */\n+\t/* 25: decimal-leading-zero */\n+\t/* 26: decimal */\n+\t/* 27: digits */\n+\t/* 28: disc */\n+\t/* 29: embed */\n+\t/* 30: e-resize */\n+\t/* 31: fixed */\n+\t/* 32: georgian */\n+\t/* 33: help */\n+\t/* 34: hidden */\n+\t/* 35: hide */\n+\t/* 36: high */\n+\t/* 37: higher */\n+\t/* 38: icon */\n+\t/* 39: inherit */\n+\t/* 40: inline */\n+\t/* 41: inline-block */\n+\t/* 42: inline-table */\n+\t/* 43: invert */\n+\t/* 44: italic */\n+\t/* 45: justify */\n+\t/* 46: left */\n+\t/* 47: lighter */\n+\t/* 48: line-through */\n+\t/* 49: list-item */\n+\t/* 50: low */\n+\t/* 51: lower */\n+\t/* 52: lower-alpha */\n+\t/* 53: lowercase */\n+\t/* 54: lower-greek */\n+\t/* 55: lower-latin */\n+\t/* 56: lower-roman */\n+\t/* 57: ltr */\n+\t/* 58: menu */\n+\t/* 59: message-box */\n+\t/* 60: middle */\n+\t/* 61: mix */\n+\t/* 62: move */\n+\t/* 63: ne-resize */\n+\t/* 64: no-close-quote */\n+\t/* 65: none */\n+\t/* 66: no-open-quote */\n+\t/* 67: no-repeat */\n+\t/* 68: normal */\n+\t/* 69: nowrap */\n+\t/* 70: n-resize */\n+\t/* 71: nw-resize */\n+\t/* 72: oblique */\n+\t/* 73: once */\n+\t/* 74: open-quote */\n+\t/* 75: outside */\n+\t/* 76: overline */\n+\t/* 77: pointer */\n+\t/* 78: pre */\n+\t/* 79: pre-line */\n+\t/* 80: pre-wrap */\n+\t/* 81: progress */\n+\t/* 82: relative */\n+\t/* 83: repeat */\n+\t/* 84: repeat-x */\n+\t/* 85: repeat-y */\n+\t/* 86: right */\n+\t/* 87: rtl */\n+\t/* 88: scroll */\n+\t/* 89: separate */\n+\t/* 90: se-resize */\n+\t/* 91: show */\n+\t/* 92: silent */\n+\t/* 93: small-caps */\n+\t/* 94: small-caption */\n+\t/* 95: spell-out */\n+\t/* 96: square */\n+\t/* 97: s-resize */\n+\t/* 98: static */\n+\t/* 99: status-bar */\n+\t/* 100: sub */\n+\t/* 101: super */\n+\t/* 102: sw-resize */\n+\t/* 103: table */\n+\t/* 104: table-caption */\n+\t/* 105: table-cell */\n+\t/* 106: table-column */\n+\t/* 107: table-column-group */\n+\t/* 108: table-footer-group */\n+\t/* 109: table-header-group */\n+\t/* 110: table-row */\n+\t/* 111: table-row-group */\n+\t/* 112: text-bottom */\n+\t/* 113: text-top */\n+\t/* 114: text */\n+\t/* 115: top */\n+\t/* 116: transparent */\n+\t/* 117: underline */\n+\t/* 118: upper-alpha */\n+\t/* 119: uppercase */\n+\t/* 120: upper-latin */\n+\t/* 121: upper-roman */\n+\t/* 122: visible */\n+\t/* 123: wait */\n+\t/* 124: w-resize */\n+/* enum {\n+\tXXXX_ABOVE,\n+\tXXXX_ABSOLUTE,\n+\tXXXX_ALWAYS,\n+\tXXXX_ARMENIAN,\n+\tXXXX_AUTO,\n+\tXXXX_AVOID,\n+\tXXXX_BASELINE,\n+\tXXXX_BEHIND,\n+\tXXXX_BELOW,\n+\tXXXX_BIDI_OVERRIDE,\n+\tXXXX_BLINK,\n+\tXXXX_BLOCK,\n+\tXXXX_BOLD,\n+\tXXXX_BOLDER,\n+\tXXXX_BOTH,\n+\tXXXX_BOTTOM,\n+\tXXXX_CAPITALIZE,\n+\tXXXX_CAPTION,\n+\tXXXX_CENTER,\n+\tXXXX_CIRCLE,\n+\tXXXX_CLOSE_QUOTE,\n+\tXXXX_CODE,\n+\tXXXX_COLLAPSE,\n+\tXXXX_CONTINUOUS,\n+\tXXXX_CROSSHAIR,\n+\tXXXX_DECIMAL_LEADING_ZERO,\n+\tXXXX_DECIMAL,\n+\tXXXX_DIGITS,\n+\tXXXX_DISC,\n+\tXXXX_EMBED,\n+\tXXXX_E_RESIZE,\n+\tXXXX_FIXED,\n+\tXXXX_GEORGIAN,\n+\tXXXX_HELP,\n+\tXXXX_HIDDEN,\n+\tXXXX_HIDE,\n+\tXXXX_HIGH,\n+\tXXXX_HIGHER,\n+\tXXXX_ICON,\n+\tXXXX_INHERIT,\n+\tXXXX_INLINE,\n+\tXXXX_INLINE_BLOCK,\n+\tXXXX_INLINE_TABLE,\n+\tXXXX_INVERT,\n+\tXXXX_ITALIC,\n+\tXXXX_JUSTIFY,\n+\tXXXX_LEFT,\n+\tXXXX_LIGHTER,\n+\tXXXX_LINE_THROUGH,\n+\tXXXX_LIST_ITEM,\n+\tXXXX_LOW,\n+\tXXXX_LOWER,\n+\tXXXX_LOWER_ALPHA,\n+\tXXXX_LOWERCASE,\n+\tXXXX_LOWER_GREEK,\n+\tXXXX_LOWER_LATIN,\n+\tXXXX_LOWER_ROMAN,\n+\tXXXX_LTR,\n+\tXXXX_MENU,\n+\tXXXX_MESSAGE_BOX,\n+\tXXXX_MIDDLE,\n+\tXXXX_MIX,\n+\tXXXX_MOVE,\n+\tXXXX_NE_RESIZE,\n+\tXXXX_NO_CLOSE_QUOTE,\n+\tXXXX_NONE,\n+\tXXXX_NO_OPEN_QUOTE,\n+\tXXXX_NO_REPEAT,\n+\tXXXX_NORMAL,\n+\tXXXX_NOWRAP,\n+\tXXXX_N_RESIZE,\n+\tXXXX_NW_RESIZE,\n+\tXXXX_OBLIQUE,\n+\tXXXX_ONCE,\n+\tXXXX_OPEN_QUOTE,\n+\tXXXX_OUTSIDE,\n+\tXXXX_OVERLINE,\n+\tXXXX_POINTER,\n+\tXXXX_PRE,\n+\tXXXX_PRE_LINE,\n+\tXXXX_PRE_WRAP,\n+\tXXXX_PROGRESS,\n+\tXXXX_RELATIVE,\n+\tXXXX_REPEAT,\n+\tXXXX_REPEAT_X,\n+\tXXXX_REPEAT_Y,\n+\tXXXX_RIGHT,\n+\tXXXX_RTL,\n+\tXXXX_SCROLL,\n+\tXXXX_SEPARATE,\n+\tXXXX_SE_RESIZE,\n+\tXXXX_SHOW,\n+\tXXXX_SILENT,\n+\tXXXX_SMALL_CAPS,\n+\tXXXX_SMALL_CAPTION,\n+\tXXXX_SPELL_OUT,\n+\tXXXX_SQUARE,\n+\tXXXX_S_RESIZE,\n+\tXXXX_STATIC,\n+\tXXXX_STATUS_BAR,\n+\tXXXX_SUB,\n+\tXXXX_SUPER,\n+\tXXXX_SW_RESIZE,\n+\tXXXX_TABLE,\n+\tXXXX_TABLE_CAPTION,\n+\tXXXX_TABLE_CELL,\n+\tXXXX_TABLE_COLUMN,\n+\tXXXX_TABLE_COLUMN_GROUP,\n+\tXXXX_TABLE_FOOTER_GROUP,\n+\tXXXX_TABLE_HEADER_GROUP,\n+\tXXXX_TABLE_ROW,\n+\tXXXX_TABLE_ROW_GROUP,\n+\tXXXX_TEXT_BOTTOM,\n+\tXXXX_TEXT_TOP,\n+\tXXXX_TEXT,\n+\tXXXX_TOP,\n+\tXXXX_TRANSPARENT,\n+\tXXXX_UNDERLINE,\n+\tXXXX_UPPER_ALPHA,\n+\tXXXX_UPPERCASE,\n+\tXXXX_UPPER_LATIN,\n+\tXXXX_UPPER_ROMAN,\n+\tXXXX_VISIBLE,\n+\tXXXX_WAIT,\n+\tXXXX_W_RESIZE,\n+}; */\n+\n+/* pos 0000: 0 */ 0x61 /* 'a' */, 0x40, 0x00 /* (to 0x0040 s 1) */,\n+ 0x62 /* 'b' */, 0x76, 0x00 /* (to 0x0079 s 31) */,\n+ 0x63 /* 'c' */, 0xD4, 0x00 /* (to 0x00DA s 76) */,\n+ 0x64 /* 'd' */, 0x36, 0x01 /* (to 0x013F s 135) */,\n+ 0x65 /* 'e' */, 0x61, 0x01 /* (to 0x016D s 162) */,\n+ 0x66 /* 'f' */, 0x72, 0x01 /* (to 0x0181 s 174) */,\n+ 0x67 /* 'g' */, 0x75, 0x01 /* (to 0x0187 s 179) */,\n+ 0x68 /* 'h' */, 0x7B, 0x01 /* (to 0x0190 s 187) */,\n+ 0x69 /* 'i' */, 0xA0, 0x01 /* (to 0x01B8 s 201) */,\n+ 0x6A /* 'j' */, 0xE1, 0x01 /* (to 0x01FC s 235) */,\n+ 0x6C /* 'l' */, 0xE6, 0x01 /* (to 0x0204 s 242) */,\n+ 0x6D /* 'm' */, 0x53, 0x02 /* (to 0x0274 s 300) */,\n+ 0x6E /* 'n' */, 0x80, 0x02 /* (to 0x02A4 s 322) */,\n+ 0x6F /* 'o' */, 0xE6, 0x02 /* (to 0x030D s 385) */,\n+ 0x70 /* 'p' */, 0x17, 0x03 /* (to 0x0341 s 417) */,\n+ 0x72 /* 'r' */, 0x46, 0x03 /* (to 0x0373 s 441) */,\n+ 0x73 /* 's' */, 0x76, 0x03 /* (to 0x03A6 s 462) */,\n+ 0x74 /* 't' */, 0x10, 0x04 /* (to 0x0443 s 547) */,\n+ 0x75 /* 'u' */, 0xA3, 0x04 /* (to 0x04D9 s 632) */,\n+ 0x76 /* 'v' */, 0xDB, 0x04 /* (to 0x0514 s 665) */,\n+ 0x77 /* 'w' */, 0xE0, 0x04 /* (to 0x051C s 672) */,\n+ 0x08, /* fail */\n+/* pos 0040: 1 */ 0x62 /* 'b' */, 0x10, 0x00 /* (to 0x0050 s 2) */,\n+ 0x6C /* 'l' */, 0x1F, 0x00 /* (to 0x0062 s 12) */,\n+ 0x72 /* 'r' */, 0x22, 0x00 /* (to 0x0068 s 17) */,\n+ 0x75 /* 'u' */, 0x27, 0x00 /* (to 0x0070 s 24) */,\n+ 0x76 /* 'v' */, 0x28, 0x00 /* (to 0x0074 s 27) */,\n+ 0x08, /* fail */\n+/* pos 0050: 2 */ 0x6F /* 'o' */, 0x07, 0x00 /* (to 0x0057 s 3) */,\n+ 0x73 /* 's' */, 0x08, 0x00 /* (to 0x005B s 6) */,\n+ 0x08, /* fail */\n+/* pos 0057: 3 */ 0xF6 /* 'v' -\u003e */,\n+/* pos 0058: 4 */ 0xE5 /* 'e' -\u003e */,\n+/* pos 0059: 5 */ 0x00, 0x00 /* - terminal marker 0 - */,\n+/* pos 005b: 6 */ 0xEF /* 'o' -\u003e */,\n+/* pos 005c: 7 */ 0xEC /* 'l' -\u003e */,\n+/* pos 005d: 8 */ 0xF5 /* 'u' -\u003e */,\n+/* pos 005e: 9 */ 0xF4 /* 't' -\u003e */,\n+/* pos 005f: 10 */ 0xE5 /* 'e' -\u003e */,\n+/* pos 0060: 11 */ 0x00, 0x01 /* - terminal marker 1 - */,\n+/* pos 0062: 12 */ 0xF7 /* 'w' -\u003e */,\n+/* pos 0063: 13 */ 0xE1 /* 'a' -\u003e */,\n+/* pos 0064: 14 */ 0xF9 /* 'y' -\u003e */,\n+/* pos 0065: 15 */ 0xF3 /* 's' -\u003e */,\n+/* pos 0066: 16 */ 0x00, 0x02 /* - terminal marker 2 - */,\n+/* pos 0068: 17 */ 0xED /* 'm' -\u003e */,\n+/* pos 0069: 18 */ 0xE5 /* 'e' -\u003e */,\n+/* pos 006a: 19 */ 0xEE /* 'n' -\u003e */,\n+/* pos 006b: 20 */ 0xE9 /* 'i' -\u003e */,\n+/* pos 006c: 21 */ 0xE1 /* 'a' -\u003e */,\n+/* pos 006d: 22 */ 0xEE /* 'n' -\u003e */,\n+/* pos 006e: 23 */ 0x00, 0x03 /* - terminal marker 3 - */,\n+/* pos 0070: 24 */ 0xF4 /* 't' -\u003e */,\n+/* pos 0071: 25 */ 0xEF /* 'o' -\u003e */,\n+/* pos 0072: 26 */ 0x00, 0x04 /* - terminal marker 4 - */,\n+/* pos 0074: 27 */ 0xEF /* 'o' -\u003e */,\n+/* pos 0075: 28 */ 0xE9 /* 'i' -\u003e */,\n+/* pos 0076: 29 */ 0xE4 /* 'd' -\u003e */,\n+/* pos 0077: 30 */ 0x00, 0x05 /* - terminal marker 5 - */,\n+/* pos 0079: 31 */ 0x61 /* 'a' */, 0x10, 0x00 /* (to 0x0089 s 32) */,\n+ 0x65 /* 'e' */, 0x15, 0x00 /* (to 0x0091 s 39) */,\n+ 0x69 /* 'i' */, 0x22, 0x00 /* (to 0x00A1 s 47) */,\n+ 0x6C /* 'l' */, 0x2C, 0x00 /* (to 0x00AE s 59) */,\n+ 0x6F /* 'o' */, 0x38, 0x00 /* (to 0x00BD s 66) */,\n+ 0x08, /* fail */\n+/* pos 0089: 32 */ 0xF3 /* 's' -\u003e */,\n+/* pos 008a: 33 */ 0xE5 /* 'e' -\u003e */,\n+/* pos 008b: 34 */ 0xEC /* 'l' -\u003e */,\n+/* pos 008c: 35 */ 0xE9 /* 'i' -\u003e */,\n+/* pos 008d: 36 */ 0xEE /* 'n' -\u003e */,\n+/* pos 008e: 37 */ 0xE5 /* 'e' -\u003e */,\n+/* pos 008f: 38 */ 0x00, 0x06 /* - terminal marker 6 - */,\n+/* pos 0091: 39 */ 0x68 /* 'h' */, 0x07, 0x00 /* (to 0x0098 s 40) */,\n+ 0x6C /* 'l' */, 0x09, 0x00 /* (to 0x009D s 44) */,\n+ 0x08, /* fail */\n+/* pos 0098: 40 */ 0xE9 /* 'i' -\u003e */,\n+/* pos 0099: 41 */ 0xEE /* 'n' -\u003e */,\n+/* pos 009a: 42 */ 0xE4 /* 'd' -\u003e */,\n+/* pos 009b: 43 */ 0x00, 0x07 /* - terminal marker 7 - */,\n+/* pos 009d: 44 */ 0xEF /* 'o' -\u003e */,\n+/* pos 009e: 45 */ 0xF7 /* 'w' -\u003e */,\n+/* pos 009f: 46 */ 0x00, 0x08 /* - terminal marker 8 - */,\n+/* pos 00a1: 47 */ 0xE4 /* 'd' -\u003e */,\n+/* pos 00a2: 48 */ 0xE9 /* 'i' -\u003e */,\n+/* pos 00a3: 49 */ 0xAD /* '-' -\u003e */,\n+/* pos 00a4: 50 */ 0xEF /* 'o' -\u003e */,\n+/* pos 00a5: 51 */ 0xF6 /* 'v' -\u003e */,\n+/* pos 00a6: 52 */ 0xE5 /* 'e' -\u003e */,\n+/* pos 00a7: 53 */ 0xF2 /* 'r' -\u003e */,\n+/* pos 00a8: 54 */ 0xF2 /* 'r' -\u003e */,\n+/* pos 00a9: 55 */ 0xE9 /* 'i' -\u003e */,\n+/* pos 00aa: 56 */ 0xE4 /* 'd' -\u003e */,\n+/* pos 00ab: 57 */ 0xE5 /* 'e' -\u003e */,\n+/* pos 00ac: 58 */ 0x00, 0x09 /* - terminal marker 9 - */,\n+/* pos 00ae: 59 */ 0x69 /* 'i' */, 0x07, 0x00 /* (to 0x00B5 s 60) */,\n+ 0x6F /* 'o' */, 0x08, 0x00 /* (to 0x00B9 s 63) */,\n+ 0x08, /* fail */\n+/* pos 00b5: 60 */ 0xEE /* 'n' -\u003e */,\n+/* pos 00b6: 61 */ 0xEB /* 'k' -\u003e */,\n+/* pos 00b7: 62 */ 0x00, 0x0A /* - terminal marker 10 - */,\n+/* pos 00b9: 63 */ 0xE3 /* 'c' -\u003e */,\n+/* pos 00ba: 64 */ 0xEB /* 'k' -\u003e */,\n+/* pos 00bb: 65 */ 0x00, 0x0B /* - terminal marker 11 - */,\n+/* pos 00bd: 66 */ 0x6C /* 'l' */, 0x07, 0x00 /* (to 0x00C4 s 67) */,\n+ 0x74 /* 't' */, 0x0D, 0x00 /* (to 0x00CD s 71) */,\n+ 0x08, /* fail */\n+/* pos 00c4: 67 */ 0xE4 /* 'd' -\u003e */,\n+/* pos 00c5: 68 */ 0x65 /* 'e' */, 0x05, 0x00 /* (to 0x00CA s 69) */,\n+ 0x00, 0x0C /* - terminal marker 12 - */,\n+/* pos 00ca: 69 */ 0xF2 /* 'r' -\u003e */,\n+/* pos 00cb: 70 */ 0x00, 0x0D /* - terminal marker 13 - */,\n+/* pos 00cd: 71 */ 0x68 /* 'h' */, 0x07, 0x00 /* (to 0x00D4 s 72) */,\n+ 0x74 /* 't' */, 0x06, 0x00 /* (to 0x00D6 s 73) */,\n+ 0x08, /* fail */\n+/* pos 00d4: 72 */ 0x00, 0x0E /* - terminal marker 14 - */,\n+/* pos 00d6: 73 */ 0xEF /* 'o' -\u003e */,\n+/* pos 00d7: 74 */ 0xED /* 'm' -\u003e */,\n+/* pos 00d8: 75 */ 0x00, 0x0F /* - terminal marker 15 - */,\n+/* pos 00da: 76 */ 0x61 /* 'a' */, 0x13, 0x00 /* (to 0x00ED s 77) */,\n+ 0x65 /* 'e' */, 0x25, 0x00 /* (to 0x0102 s 90) */,\n+ 0x69 /* 'i' */, 0x28, 0x00 /* (to 0x0108 s 95) */,\n+ 0x6C /* 'l' */, 0x2B, 0x00 /* (to 0x010E s 100) */,\n+ 0x6F /* 'o' */, 0x33, 0x00 /* (to 0x0119 s 110) */,\n+ 0x72 /* 'r' */, 0x4D, 0x00 /* (to 0x0136 s 127) */,\n+ 0x08, /* fail */\n+/* pos 00ed: 77 */ 0xF0 /* 'p' -\u003e */,\n+/* pos 00ee: 78 */ 0x69 /* 'i' */, 0x07, 0x00 /* (to 0x00F5 s 79) */,\n+ 0x74 /* 't' */, 0x0C, 0x00 /* (to 0x00FD s 86) */,\n+ 0x08, /* fail */\n+/* pos 00f5: 79 */ 0xF4 /* 't' -\u003e */,\n+/* pos 00f6: 80 */ 0xE1 /* 'a' -\u003e */,\n+/* pos 00f7: 81 */ 0xEC /* 'l' -\u003e */,\n+/* pos 00f8: 82 */ 0xE9 /* 'i' -\u003e */,\n+/* pos 00f9: 83 */ 0xFA /* 'z' -\u003e */,\n+/* pos 00fa: 84 */ 0xE5 /* 'e' -\u003e */,\n+/* pos 00fb: 85 */ 0x00, 0x10 /* - terminal marker 16 - */,\n+/* pos 00fd: 86 */ 0xE9 /* 'i' -\u003e */,\n+/* pos 00fe: 87 */ 0xEF /* 'o' -\u003e */,\n+/* pos 00ff: 88 */ 0xEE /* 'n' -\u003e */,\n+/* pos 0100: 89 */ 0x00, 0x11 /* - terminal marker 17 - */,\n+/* pos 0102: 90 */ 0xEE /* 'n' -\u003e */,\n+/* pos 0103: 91 */ 0xF4 /* 't' -\u003e */,\n+/* pos 0104: 92 */ 0xE5 /* 'e' -\u003e */,\n+/* pos 0105: 93 */ 0xF2 /* 'r' -\u003e */,\n+/* pos 0106: 94 */ 0x00, 0x12 /* - terminal marker 18 - */,\n+/* pos 0108: 95 */ 0xF2 /* 'r' -\u003e */,\n+/* pos 0109: 96 */ 0xE3 /* 'c' -\u003e */,\n+/* pos 010a: 97 */ 0xEC /* 'l' -\u003e */,\n+/* pos 010b: 98 */ 0xE5 /* 'e' -\u003e */,\n+/* pos 010c: 99 */ 0x00, 0x13 /* - terminal marker 19 - */,\n+/* pos 010e: 100 */ 0xEF /* 'o' -\u003e */,\n+/* pos 010f: 101 */ 0xF3 /* 's' -\u003e */,\n+/* pos 0110: 102 */ 0xE5 /* 'e' -\u003e */,\n+/* pos 0111: 103 */ 0xAD /* '-' -\u003e */,\n+/* pos 0112: 104 */ 0xF1 /* 'q' -\u003e */,\n+/* pos 0113: 105 */ 0xF5 /* 'u' -\u003e */,\n+/* pos 0114: 106 */ 0xEF /* 'o' -\u003e */,\n+/* pos 0115: 107 */ 0xF4 /* 't' -\u003e */,\n+/* pos 0116: 108 */ 0xE5 /* 'e' -\u003e */,\n+/* pos 0117: 109 */ 0x00, 0x14 /* - terminal marker 20 - */,\n+/* pos 0119: 110 */ 0x64 /* 'd' */, 0x0A, 0x00 /* (to 0x0123 s 111) */,\n+ 0x6C /* 'l' */, 0x0A, 0x00 /* (to 0x0126 s 113) */,\n+ 0x6E /* 'n' */, 0x0E, 0x00 /* (to 0x012D s 119) */,\n+ 0x08, /* fail */\n+/* pos 0123: 111 */ 0xE5 /* 'e' -\u003e */,\n+/* pos 0124: 112 */ 0x00, 0x15 /* - terminal marker 21 - */,\n+/* pos 0126: 113 */ 0xEC /* 'l' -\u003e */,\n+/* pos 0127: 114 */ 0xE1 /* 'a' -\u003e */,\n+/* pos 0128: 115 */ 0xF0 /* 'p' -\u003e */,\n+/* pos 0129: 116 */ 0xF3 /* 's' -\u003e */,\n+/* pos 012a: 117 */ 0xE5 /* 'e' -\u003e */,\n+/* pos 012b: 118 */ 0x00, 0x16 /* - terminal marker 22 - */,\n+/* pos 012d: 119 */ 0xF4 /* 't' -\u003e */,\n+/* pos 012e: 120 */ 0xE9 /* 'i' -\u003e */,\n+/* pos 012f: 121 */ 0xEE /* 'n' -\u003e */,\n+/* pos 0130: 122 */ 0xF5 /* 'u' -\u003e */,\n+/* pos 0131: 123 */ 0xEF /* 'o' -\u003e */,\n+/* pos 0132: 124 */ 0xF5 /* 'u' -\u003e */,\n+/* pos 0133: 125 */ 0xF3 /* 's' -\u003e */,\n+/* pos 0134: 126 */ 0x00, 0x17 /* - terminal marker 23 - */,\n+/* pos 0136: 127 */ 0xEF /* 'o' -\u003e */,\n+/* pos 0137: 128 */ 0xF3 /* 's' -\u003e */,\n+/* pos 0138: 129 */ 0xF3 /* 's' -\u003e */,\n+/* pos 0139: 130 */ 0xE8 /* 'h' -\u003e */,\n+/* pos 013a: 131 */ 0xE1 /* 'a' -\u003e */,\n+/* pos 013b: 132 */ 0xE9 /* 'i' -\u003e */,\n+/* pos 013c: 133 */ 0xF2 /* 'r' -\u003e */,\n+/* pos 013d: 134 */ 0x00, 0x18 /* - terminal marker 24 - */,\n+/* pos 013f: 135 */ 0x65 /* 'e' */, 0x07, 0x00 /* (to 0x0146 s 136) */,\n+ 0x69 /* 'i' */, 0x1C, 0x00 /* (to 0x015E s 155) */,\n+ 0x08, /* fail */\n+/* pos 0146: 136 */ 0xE3 /* 'c' -\u003e */,\n+/* pos 0147: 137 */ 0xE9 /* 'i' -\u003e */,\n+/* pos 0148: 138 */ 0xED /* 'm' -\u003e */,\n+/* pos 0149: 139 */ 0xE1 /* 'a' -\u003e */,\n+/* pos 014a: 140 */ 0xEC /* 'l' -\u003e */,\n+/* pos 014b: 141 */ 0x2D /* '-' */, 0x05, 0x00 /* (to 0x0150 s 142) */,\n+ 0x00, 0x1A /* - terminal marker 26 - */,\n+/* pos 0150: 142 */ 0xEC /* 'l' -\u003e */,\n+/* pos 0151: 143 */ 0xE5 /* 'e' -\u003e */,\n+/* pos 0152: 144 */ 0xE1 /* 'a' -\u003e */,\n+/* pos 0153: 145 */ 0xE4 /* 'd' -\u003e */,\n+/* pos 0154: 146 */ 0xE9 /* 'i' -\u003e */,\n+/* pos 0155: 147 */ 0xEE /* 'n' -\u003e */,\n+/* pos 0156: 148 */ 0xE7 /* 'g' -\u003e */,\n+/* pos 0157: 149 */ 0xAD /* '-' -\u003e */,\n+/* pos 0158: 150 */ 0xFA /* 'z' -\u003e */,\n+/* pos 0159: 151 */ 0xE5 /* 'e' -\u003e */,\n+/* pos 015a: 152 */ 0xF2 /* 'r' -\u003e */,\n+/* pos 015b: 153 */ 0xEF /* 'o' -\u003e */,\n+/* pos 015c: 154 */ 0x00, 0x19 /* - terminal marker 25 - */,\n+/* pos 015e: 155 */ 0x67 /* 'g' */, 0x07, 0x00 /* (to 0x0165 s 156) */,\n+ 0x73 /* 's' */, 0x09, 0x00 /* (to 0x016A s 160) */,\n+ 0x08, /* fail */\n+/* pos 0165: 156 */ 0xE9 /* 'i' -\u003e */,\n+/* pos 0166: 157 */ 0xF4 /* 't' -\u003e */,\n+/* pos 0167: 158 */ 0xF3 /* 's' -\u003e */,\n+/* pos 0168: 159 */ 0x00, 0x1B /* - terminal marker 27 - */,\n+/* pos 016a: 160 */ 0xE3 /* 'c' -\u003e */,\n+/* pos 016b: 161 */ 0x00, 0x1C /* - terminal marker 28 - */,\n+/* pos 016d: 162 */ 0x6D /* 'm' */, 0x07, 0x00 /* (to 0x0174 s 163) */,\n+ 0x2D /* '-' */, 0x09, 0x00 /* (to 0x0179 s 167) */,\n+ 0x08, /* fail */\n+/* pos 0174: 163 */ 0xE2 /* 'b' -\u003e */,\n+/* pos 0175: 164 */ 0xE5 /* 'e' -\u003e */,\n+/* pos 0176: 165 */ 0xE4 /* 'd' -\u003e */,\n+/* pos 0177: 166 */ 0x00, 0x1D /* - terminal marker 29 - */,\n+/* pos 0179: 167 */ 0xF2 /* 'r' -\u003e */,\n+/* pos 017a: 168 */ 0xE5 /* 'e' -\u003e */,\n+/* pos 017b: 169 */ 0xF3 /* 's' -\u003e */,\n+/* pos 017c: 170 */ 0xE9 /* 'i' -\u003e */,\n+/* pos 017d: 171 */ 0xFA /* 'z' -\u003e */,\n+/* pos 017e: 172 */ 0xE5 /* 'e' -\u003e */,\n+/* pos 017f: 173 */ 0x00, 0x1E /* - terminal marker 30 - */,\n+/* pos 0181: 174 */ 0xE9 /* 'i' -\u003e */,\n+/* pos 0182: 175 */ 0xF8 /* 'x' -\u003e */,\n+/* pos 0183: 176 */ 0xE5 /* 'e' -\u003e */,\n+/* pos 0184: 177 */ 0xE4 /* 'd' -\u003e */,\n+/* pos 0185: 178 */ 0x00, 0x1F /* - terminal marker 31 - */,\n+/* pos 0187: 179 */ 0xE5 /* 'e' -\u003e */,\n+/* pos 0188: 180 */ 0xEF /* 'o' -\u003e */,\n+/* pos 0189: 181 */ 0xF2 /* 'r' -\u003e */,\n+/* pos 018a: 182 */ 0xE7 /* 'g' -\u003e */,\n+/* pos 018b: 183 */ 0xE9 /* 'i' -\u003e */,\n+/* pos 018c: 184 */ 0xE1 /* 'a' -\u003e */,\n+/* pos 018d: 185 */ 0xEE /* 'n' -\u003e */,\n+/* pos 018e: 186 */ 0x00, 0x20 /* - terminal marker 32 - */,\n+/* pos 0190: 187 */ 0x65 /* 'e' */, 0x07, 0x00 /* (to 0x0197 s 188) */,\n+ 0x69 /* 'i' */, 0x08, 0x00 /* (to 0x019B s 191) */,\n+ 0x08, /* fail */\n+/* pos 0197: 188 */ 0xEC /* 'l' -\u003e */,\n+/* pos 0198: 189 */ 0xF0 /* 'p' -\u003e */,\n+/* pos 0199: 190 */ 0x00, 0x21 /* - terminal marker 33 - */,\n+/* pos 019b: 191 */ 0x64 /* 'd' */, 0x07, 0x00 /* (to 0x01A2 s 192) */,\n+ 0x67 /* 'g' */, 0x11, 0x00 /* (to 0x01AF s 197) */,\n+ 0x08, /* fail */\n+/* pos 01a2: 192 */ 0x64 /* 'd' */, 0x07, 0x00 /* (to 0x01A9 s 193) */,\n+ 0x65 /* 'e' */, 0x08, 0x00 /* (to 0x01AD s 196) */,\n+ 0x08, /* fail */\n+/* pos 01a9: 193 */ 0xE5 /* 'e' -\u003e */,\n+/* pos 01aa: 194 */ 0xEE /* 'n' -\u003e */,\n+/* pos 01ab: 195 */ 0x00, 0x22 /* - terminal marker 34 - */,\n+/* pos 01ad: 196 */ 0x00, 0x23 /* - terminal marker 35 - */,\n+/* pos 01af: 197 */ 0xE8 /* 'h' -\u003e */,\n+/* pos 01b0: 198 */ 0x65 /* 'e' */, 0x05, 0x00 /* (to 0x01B5 s 199) */,\n+ 0x00, 0x24 /* - terminal marker 36 - */,\n+/* pos 01b5: 199 */ 0xF2 /* 'r' -\u003e */,\n+/* pos 01b6: 200 */ 0x00, 0x25 /* - terminal marker 37 - */,\n+/* pos 01b8: 201 */ 0x63 /* 'c' */, 0x0A, 0x00 /* (to 0x01C2 s 202) */,\n+ 0x6E /* 'n' */, 0x0B, 0x00 /* (to 0x01C6 s 205) */,\n+ 0x74 /* 't' */, 0x38, 0x00 /* (to 0x01F6 s 230) */,\n+ 0x08, /* fail */\n+/* pos 01c2: 202 */ 0xEF /* 'o' -\u003e */,\n+/* pos 01c3: 203 */ 0xEE /* 'n' -\u003e */,\n+/* pos 01c4: 204 */ 0x00, 0x26 /* - terminal marker 38 - */,\n+/* pos 01c6: 205 */ 0x68 /* 'h' */, 0x0A, 0x00 /* (to 0x01D0 s 206) */,\n+ 0x6C /* 'l' */, 0x0D, 0x00 /* (to 0x01D6 s 211) */,\n+ 0x76 /* 'v' */, 0x25, 0x00 /* (to 0x01F1 s 226) */,\n+ 0x08, /* fail */\n+/* pos 01d0: 206 */ 0xE5 /* 'e' -\u003e */,\n+/* pos 01d1: 207 */ 0xF2 /* 'r' -\u003e */,\n+/* pos 01d2: 208 */ 0xE9 /* 'i' -\u003e */,\n+/* pos 01d3: 209 */ 0xF4 /* 't' -\u003e */,\n+/* pos 01d4: 210 */ 0x00, 0x27 /* - terminal marker 39 - */,\n+/* pos 01d6: 211 */ 0xE9 /* 'i' -\u003e */,\n+/* pos 01d7: 212 */ 0xEE /* 'n' -\u003e */,\n+/* pos 01d8: 213 */ 0xE5 /* 'e' -\u003e */,\n+/* pos 01d9: 214 */ 0x2D /* '-' */, 0x05, 0x00 /* (to 0x01DE s 215) */,\n+ 0x00, 0x28 /* - terminal marker 40 - */,\n+/* pos 01de: 215 */ 0x62 /* 'b' */, 0x07, 0x00 /* (to 0x01E5 s 216) */,\n+ 0x74 /* 't' */, 0x0A, 0x00 /* (to 0x01EB s 221) */,\n+ 0x08, /* fail */\n+/* pos 01e5: 216 */ 0xEC /* 'l' -\u003e */,\n+/* pos 01e6: 217 */ 0xEF /* 'o' -\u003e */,\n+/* pos 01e7: 218 */ 0xE3 /* 'c' -\u003e */,\n+/* pos 01e8: 219 */ 0xEB /* 'k' -\u003e */,\n+/* pos 01e9: 220 */ 0x00, 0x29 /* - terminal marker 41 - */,\n+/* pos 01eb: 221 */ 0xE1 /* 'a' -\u003e */,\n+/* pos 01ec: 222 */ 0xE2 /* 'b' -\u003e */,\n+/* pos 01ed: 223 */ 0xEC /* 'l' -\u003e */,\n+/* pos 01ee: 224 */ 0xE5 /* 'e' -\u003e */,\n+/* pos 01ef: 225 */ 0x00, 0x2A /* - terminal marker 42 - */,\n+/* pos 01f1: 226 */ 0xE5 /* 'e' -\u003e */,\n+/* pos 01f2: 227 */ 0xF2 /* 'r' -\u003e */,\n+/* pos 01f3: 228 */ 0xF4 /* 't' -\u003e */,\n+/* pos 01f4: 229 */ 0x00, 0x2B /* - terminal marker 43 - */,\n+/* pos 01f6: 230 */ 0xE1 /* 'a' -\u003e */,\n+/* pos 01f7: 231 */ 0xEC /* 'l' -\u003e */,\n+/* pos 01f8: 232 */ 0xE9 /* 'i' -\u003e */,\n+/* pos 01f9: 233 */ 0xE3 /* 'c' -\u003e */,\n+/* pos 01fa: 234 */ 0x00, 0x2C /* - terminal marker 44 - */,\n+/* pos 01fc: 235 */ 0xF5 /* 'u' -\u003e */,\n+/* pos 01fd: 236 */ 0xF3 /* 's' -\u003e */,\n+/* pos 01fe: 237 */ 0xF4 /* 't' -\u003e */,\n+/* pos 01ff: 238 */ 0xE9 /* 'i' -\u003e */,\n+/* pos 0200: 239 */ 0xE6 /* 'f' -\u003e */,\n+/* pos 0201: 240 */ 0xF9 /* 'y' -\u003e */,\n+/* pos 0202: 241 */ 0x00, 0x2D /* - terminal marker 45 - */,\n+/* pos 0204: 242 */ 0x65 /* 'e' */, 0x0D, 0x00 /* (to 0x0211 s 243) */,\n+ 0x69 /* 'i' */, 0x0E, 0x00 /* (to 0x0215 s 246) */,\n+ 0x6F /* 'o' */, 0x2E, 0x00 /* (to 0x0238 s 269) */,\n+ 0x74 /* 't' */, 0x64, 0x00 /* (to 0x0271 s 298) */,\n+ 0x08, /* fail */\n+/* pos 0211: 243 */ 0xE6 /* 'f' -\u003e */,\n+/* pos 0212: 244 */ 0xF4 /* 't' -\u003e */,\n+/* pos 0213: 245 */ 0x00, 0x2E /* - terminal marker 46 - */,\n+/* pos 0215: 246 */ 0x67 /* 'g' */, 0x0A, 0x00 /* (to 0x021F s 247) */,\n+ 0x6E /* 'n' */, 0x0D, 0x00 /* (to 0x0225 s 252) */,\n+ 0x73 /* 's' */, 0x15, 0x00 /* (to 0x0230 s 262) */,\n+ 0x08, /* fail */\n+/* pos 021f: 247 */ 0xE8 /* 'h' -\u003e */,\n+/* pos 0220: 248 */ 0xF4 /* 't' -\u003e */,\n+/* pos 0221: 249 */ 0xE5 /* 'e' -\u003e */,\n+/* pos 0222: 250 */ 0xF2 /* 'r' -\u003e */,\n+/* pos 0223: 251 */ 0x00, 0x2F /* - terminal marker 47 - */,\n+/* pos 0225: 252 */ 0xE5 /* 'e' -\u003e */,\n+/* pos 0226: 253 */ 0xAD /* '-' -\u003e */,\n+/* pos 0227: 254 */ 0xF4 /* 't' -\u003e */,\n+/* pos 0228: 255 */ 0xE8 /* 'h' -\u003e */,\n+/* pos 0229: 256 */ 0xF2 /* 'r' -\u003e */,\n+/* pos 022a: 257 */ 0xEF /* 'o' -\u003e */,\n+/* pos 022b: 258 */ 0xF5 /* 'u' -\u003e */,\n+/* pos 022c: 259 */ 0xE7 /* 'g' -\u003e */,\n+/* pos 022d: 260 */ 0xE8 /* 'h' -\u003e */,\n+/* pos 022e: 261 */ 0x00, 0x30 /* - terminal marker 48 - */,\n+/* pos 0230: 262 */ 0xF4 /* 't' -\u003e */,\n+/* pos 0231: 263 */ 0xAD /* '-' -\u003e */,\n+/* pos 0232: 264 */ 0xE9 /* 'i' -\u003e */,\n+/* pos 0233: 265 */ 0xF4 /* 't' -\u003e */,\n+/* pos 0234: 266 */ 0xE5 /* 'e' -\u003e */,\n+/* pos 0235: 267 */ 0xED /* 'm' -\u003e */,\n+/* pos 0236: 268 */ 0x00, 0x31 /* - terminal marker 49 - */,\n+/* pos 0238: 269 */ 0xF7 /* 'w' -\u003e */,\n+/* pos 0239: 270 */ 0x65 /* 'e' */, 0x05, 0x00 /* (to 0x023E s 271) */,\n+ 0x00, 0x32 /* - terminal marker 50 - */,\n+/* pos 023e: 271 */ 0xF2 /* 'r' -\u003e */,\n+/* pos 023f: 272 */ 0x2D /* '-' */, 0x08, 0x00 /* (to 0x0247 s 273) */,\n+ 0x63 /* 'c' */, 0x18, 0x00 /* (to 0x025A s 279) */,\n+ 0x00, 0x33 /* - terminal marker 51 - */,\n+/* pos 0247: 273 */ 0x61 /* 'a' */, 0x0D, 0x00 /* (to 0x0254 s 274) */,\n+ 0x67 /* 'g' */, 0x15, 0x00 /* (to 0x025F s 283) */,\n+ 0x6C /* 'l' */, 0x18, 0x00 /* (to 0x0265 s 288) */,\n+ 0x72 /* 'r' */, 0x1B, 0x00 /* (to 0x026B s 293) */,\n+ 0x08, /* fail */\n+/* pos 0254: 274 */ 0xEC /* 'l' -\u003e */,\n+/* pos 0255: 275 */ 0xF0 /* 'p' -\u003e */,\n+/* pos 0256: 276 */ 0xE8 /* 'h' -\u003e */,\n+/* pos 0257: 277 */ 0xE1 /* 'a' -\u003e */,\n+/* pos 0258: 278 */ 0x00, 0x34 /* - terminal marker 52 - */,\n+/* pos 025a: 279 */ 0xE1 /* 'a' -\u003e */,\n+/* pos 025b: 280 */ 0xF3 /* 's' -\u003e */,\n+/* pos 025c: 281 */ 0xE5 /* 'e' -\u003e */,\n+/* pos 025d: 282 */ 0x00, 0x35 /* - terminal marker 53 - */,\n+/* pos 025f: 283 */ 0xF2 /* 'r' -\u003e */,\n+/* pos 0260: 284 */ 0xE5 /* 'e' -\u003e */,\n+/* pos 0261: 285 */ 0xE5 /* 'e' -\u003e */,\n+/* pos 0262: 286 */ 0xEB /* 'k' -\u003e */,\n+/* pos 0263: 287 */ 0x00, 0x36 /* - terminal marker 54 - */,\n+/* pos 0265: 288 */ 0xE1 /* 'a' -\u003e */,\n+/* pos 0266: 289 */ 0xF4 /* 't' -\u003e */,\n+/* pos 0267: 290 */ 0xE9 /* 'i' -\u003e */,\n+/* pos 0268: 291 */ 0xEE /* 'n' -\u003e */,\n+/* pos 0269: 292 */ 0x00, 0x37 /* - terminal marker 55 - */,\n+/* pos 026b: 293 */ 0xEF /* 'o' -\u003e */,\n+/* pos 026c: 294 */ 0xED /* 'm' -\u003e */,\n+/* pos 026d: 295 */ 0xE1 /* 'a' -\u003e */,\n+/* pos 026e: 296 */ 0xEE /* 'n' -\u003e */,\n+/* pos 026f: 297 */ 0x00, 0x38 /* - terminal marker 56 - */,\n+/* pos 0271: 298 */ 0xF2 /* 'r' -\u003e */,\n+/* pos 0272: 299 */ 0x00, 0x39 /* - terminal marker 57 - */,\n+/* pos 0274: 300 */ 0x65 /* 'e' */, 0x0A, 0x00 /* (to 0x027E s 301) */,\n+ 0x69 /* 'i' */, 0x1B, 0x00 /* (to 0x0292 s 313) */,\n+ 0x6F /* 'o' */, 0x26, 0x00 /* (to 0x02A0 s 319) */,\n+ 0x08, /* fail */\n+/* pos 027e: 301 */ 0x6E /* 'n' */, 0x07, 0x00 /* (to 0x0285 s 302) */,\n+ 0x73 /* 's' */, 0x07, 0x00 /* (to 0x0288 s 304) */,\n+ 0x08, /* fail */\n+/* pos 0285: 302 */ 0xF5 /* 'u' -\u003e */,\n+/* pos 0286: 303 */ 0x00, 0x3A /* - terminal marker 58 - */,\n+/* pos 0288: 304 */ 0xF3 /* 's' -\u003e */,\n+/* pos 0289: 305 */ 0xE1 /* 'a' -\u003e */,\n+/* pos 028a: 306 */ 0xE7 /* 'g' -\u003e */,\n+/* pos 028b: 307 */ 0xE5 /* 'e' -\u003e */,\n+/* pos 028c: 308 */ 0xAD /* '-' -\u003e */,\n+/* pos 028d: 309 */ 0xE2 /* 'b' -\u003e */,\n+/* pos 028e: 310 */ 0xEF /* 'o' -\u003e */,\n+/* pos 028f: 311 */ 0xF8 /* 'x' -\u003e */,\n+/* pos 0290: 312 */ 0x00, 0x3B /* - terminal marker 59 - */,\n+/* pos 0292: 313 */ 0x64 /* 'd' */, 0x07, 0x00 /* (to 0x0299 s 314) */,\n+ 0x78 /* 'x' */, 0x09, 0x00 /* (to 0x029E s 318) */,\n+ 0x08, /* fail */\n+/* pos 0299: 314 */ 0xE4 /* 'd' -\u003e */,\n+/* pos 029a: 315 */ 0xEC /* 'l' -\u003e */,\n+/* pos 029b: 316 */ 0xE5 /* 'e' -\u003e */,\n+/* pos 029c: 317 */ 0x00, 0x3C /* - terminal marker 60 - */,\n+/* pos 029e: 318 */ 0x00, 0x3D /* - terminal marker 61 - */,\n+/* pos 02a0: 319 */ 0xF6 /* 'v' -\u003e */,\n+/* pos 02a1: 320 */ 0xE5 /* 'e' -\u003e */,\n+/* pos 02a2: 321 */ 0x00, 0x3E /* - terminal marker 62 - */,\n+/* pos 02a4: 322 */ 0x65 /* 'e' */, 0x0D, 0x00 /* (to 0x02B1 s 323) */,\n+ 0x6F /* 'o' */, 0x13, 0x00 /* (to 0x02BA s 331) */,\n+ 0x2D /* '-' */, 0x52, 0x00 /* (to 0x02FC s 370) */,\n+ 0x77 /* 'w' */, 0x57, 0x00 /* (to 0x0304 s 377) */,\n+ 0x08, /* fail */\n+/* pos 02b1: 323 */ 0xAD /* '-' -\u003e */,\n+/* pos 02b2: 324 */ 0xF2 /* 'r' -\u003e */,\n+/* pos 02b3: 325 */ 0xE5 /* 'e' -\u003e */,\n+/* pos 02b4: 326 */ 0xF3 /* 's' -\u003e */,\n+/* pos 02b5: 327 */ 0xE9 /* 'i' -\u003e */,\n+/* pos 02b6: 328 */ 0xFA /* 'z' -\u003e */,\n+/* pos 02b7: 329 */ 0xE5 /* 'e' -\u003e */,\n+/* pos 02b8: 330 */ 0x00, 0x3F /* - terminal marker 63 - */,\n+/* pos 02ba: 331 */ 0x2D /* '-' */, 0x0D, 0x00 /* (to 0x02C7 s 332) */,\n+ 0x6E /* 'n' */, 0x20, 0x00 /* (to 0x02DD s 344) */,\n+ 0x72 /* 'r' */, 0x32, 0x00 /* (to 0x02F2 s 362) */,\n+ 0x77 /* 'w' */, 0x34, 0x00 /* (to 0x02F7 s 366) */,\n+ 0x08, /* fail */\n+/* pos 02c7: 332 */ 0x63 /* 'c' */, 0x0A, 0x00 /* (to 0x02D1 s 333) */,\n+ 0x6F /* 'o' */, 0x16, 0x00 /* (to 0x02E0 s 346) */,\n+ 0x72 /* 'r' */, 0x1E, 0x00 /* (to 0x02EB s 356) */,\n+ 0x08, /* fail */\n+/* pos 02d1: 333 */ 0xEC /* 'l' -\u003e */,\n+/* pos 02d2: 334 */ 0xEF /* 'o' -\u003e */,\n+/* pos 02d3: 335 */ 0xF3 /* 's' -\u003e */,\n+/* pos 02d4: 336 */ 0xE5 /* 'e' -\u003e */,\n+/* pos 02d5: 337 */ 0xAD /* '-' -\u003e */,\n+/* pos 02d6: 338 */ 0xF1 /* 'q' -\u003e */,\n+/* pos 02d7: 339 */ 0xF5 /* 'u' -\u003e */,\n+/* pos 02d8: 340 */ 0xEF /* 'o' -\u003e */,\n+/* pos 02d9: 341 */ 0xF4 /* 't' -\u003e */,\n+/* pos 02da: 342 */ 0xE5 /* 'e' -\u003e */,\n+/* pos 02db: 343 */ 0x00, 0x40 /* - terminal marker 64 - */,\n+/* pos 02dd: 344 */ 0xE5 /* 'e' -\u003e */,\n+/* pos 02de: 345 */ 0x00, 0x41 /* - terminal marker 65 - */,\n+/* pos 02e0: 346 */ 0xF0 /* 'p' -\u003e */,\n+/* pos 02e1: 347 */ 0xE5 /* 'e' -\u003e */,\n+/* pos 02e2: 348 */ 0xEE /* 'n' -\u003e */,\n+/* pos 02e3: 349 */ 0xAD /* '-' -\u003e */,\n+/* pos 02e4: 350 */ 0xF1 /* 'q' -\u003e */,\n+/* pos 02e5: 351 */ 0xF5 /* 'u' -\u003e */,\n+/* pos 02e6: 352 */ 0xEF /* 'o' -\u003e */,\n+/* pos 02e7: 353 */ 0xF4 /* 't' -\u003e */,\n+/* pos 02e8: 354 */ 0xE5 /* 'e' -\u003e */,\n+/* pos 02e9: 355 */ 0x00, 0x42 /* - terminal marker 66 - */,\n+/* pos 02eb: 356 */ 0xE5 /* 'e' -\u003e */,\n+/* pos 02ec: 357 */ 0xF0 /* 'p' -\u003e */,\n+/* pos 02ed: 358 */ 0xE5 /* 'e' -\u003e */,\n+/* pos 02ee: 359 */ 0xE1 /* 'a' -\u003e */,\n+/* pos 02ef: 360 */ 0xF4 /* 't' -\u003e */,\n+/* pos 02f0: 361 */ 0x00, 0x43 /* - terminal marker 67 - */,\n+/* pos 02f2: 362 */ 0xED /* 'm' -\u003e */,\n+/* pos 02f3: 363 */ 0xE1 /* 'a' -\u003e */,\n+/* pos 02f4: 364 */ 0xEC /* 'l' -\u003e */,\n+/* pos 02f5: 365 */ 0x00, 0x44 /* - terminal marker 68 - */,\n+/* pos 02f7: 366 */ 0xF2 /* 'r' -\u003e */,\n+/* pos 02f8: 367 */ 0xE1 /* 'a' -\u003e */,\n+/* pos 02f9: 368 */ 0xF0 /* 'p' -\u003e */,\n+/* pos 02fa: 369 */ 0x00, 0x45 /* - terminal marker 69 - */,\n+/* pos 02fc: 370 */ 0xF2 /* 'r' -\u003e */,\n+/* pos 02fd: 371 */ 0xE5 /* 'e' -\u003e */,\n+/* pos 02fe: 372 */ 0xF3 /* 's' -\u003e */,\n+/* pos 02ff: 373 */ 0xE9 /* 'i' -\u003e */,\n+/* pos 0300: 374 */ 0xFA /* 'z' -\u003e */,\n+/* pos 0301: 375 */ 0xE5 /* 'e' -\u003e */,\n+/* pos 0302: 376 */ 0x00, 0x46 /* - terminal marker 70 - */,\n+/* pos 0304: 377 */ 0xAD /* '-' -\u003e */,\n+/* pos 0305: 378 */ 0xF2 /* 'r' -\u003e */,\n+/* pos 0306: 379 */ 0xE5 /* 'e' -\u003e */,\n+/* pos 0307: 380 */ 0xF3 /* 's' -\u003e */,\n+/* pos 0308: 381 */ 0xE9 /* 'i' -\u003e */,\n+/* pos 0309: 382 */ 0xFA /* 'z' -\u003e */,\n+/* pos 030a: 383 */ 0xE5 /* 'e' -\u003e */,\n+/* pos 030b: 384 */ 0x00, 0x47 /* - terminal marker 71 - */,\n+/* pos 030d: 385 */ 0x62 /* 'b' */, 0x10, 0x00 /* (to 0x031D s 386) */,\n+ 0x6E /* 'n' */, 0x14, 0x00 /* (to 0x0324 s 392) */,\n+ 0x70 /* 'p' */, 0x15, 0x00 /* (to 0x0328 s 395) */,\n+ 0x75 /* 'u' */, 0x1C, 0x00 /* (to 0x0332 s 404) */,\n+ 0x76 /* 'v' */, 0x20, 0x00 /* (to 0x0339 s 410) */,\n+ 0x08, /* fail */\n+/* pos 031d: 386 */ 0xEC /* 'l' -\u003e */,\n+/* pos 031e: 387 */ 0xE9 /* 'i' -\u003e */,\n+/* pos 031f: 388 */ 0xF1 /* 'q' -\u003e */,\n+/* pos 0320: 389 */ 0xF5 /* 'u' -\u003e */,\n+/* pos 0321: 390 */ 0xE5 /* 'e' -\u003e */,\n+/* pos 0322: 391 */ 0x00, 0x48 /* - terminal marker 72 - */,\n+/* pos 0324: 392 */ 0xE3 /* 'c' -\u003e */,\n+/* pos 0325: 393 */ 0xE5 /* 'e' -\u003e */,\n+/* pos 0326: 394 */ 0x00, 0x49 /* - terminal marker 73 - */,\n+/* pos 0328: 395 */ 0xE5 /* 'e' -\u003e */,\n+/* pos 0329: 396 */ 0xEE /* 'n' -\u003e */,\n+/* pos 032a: 397 */ 0xAD /* '-' -\u003e */,\n+/* pos 032b: 398 */ 0xF1 /* 'q' -\u003e */,\n+/* pos 032c: 399 */ 0xF5 /* 'u' -\u003e */,\n+/* pos 032d: 400 */ 0xEF /* 'o' -\u003e */,\n+/* pos 032e: 401 */ 0xF4 /* 't' -\u003e */,\n+/* pos 032f: 402 */ 0xE5 /* 'e' -\u003e */,\n+/* pos 0330: 403 */ 0x00, 0x4A /* - terminal marker 74 - */,\n+/* pos 0332: 404 */ 0xF4 /* 't' -\u003e */,\n+/* pos 0333: 405 */ 0xF3 /* 's' -\u003e */,\n+/* pos 0334: 406 */ 0xE9 /* 'i' -\u003e */,\n+/* pos 0335: 407 */ 0xE4 /* 'd' -\u003e */,\n+/* pos 0336: 408 */ 0xE5 /* 'e' -\u003e */,\n+/* pos 0337: 409 */ 0x00, 0x4B /* - terminal marker 75 - */,\n+/* pos 0339: 410 */ 0xE5 /* 'e' -\u003e */,\n+/* pos 033a: 411 */ 0xF2 /* 'r' -\u003e */,\n+/* pos 033b: 412 */ 0xEC /* 'l' -\u003e */,\n+/* pos 033c: 413 */ 0xE9 /* 'i' -\u003e */,\n+/* pos 033d: 414 */ 0xEE /* 'n' -\u003e */,\n+/* pos 033e: 415 */ 0xE5 /* 'e' -\u003e */,\n+/* pos 033f: 416 */ 0x00, 0x4C /* - terminal marker 76 - */,\n+/* pos 0341: 417 */ 0x6F /* 'o' */, 0x07, 0x00 /* (to 0x0348 s 418) */,\n+ 0x72 /* 'r' */, 0x0B, 0x00 /* (to 0x034F s 424) */,\n+ 0x08, /* fail */\n+/* pos 0348: 418 */ 0xE9 /* 'i' -\u003e */,\n+/* pos 0349: 419 */ 0xEE /* 'n' -\u003e */,\n+/* pos 034a: 420 */ 0xF4 /* 't' -\u003e */,\n+/* pos 034b: 421 */ 0xE5 /* 'e' -\u003e */,\n+/* pos 034c: 422 */ 0xF2 /* 'r' -\u003e */,\n+/* pos 034d: 423 */ 0x00, 0x4D /* - terminal marker 77 - */,\n+/* pos 034f: 424 */ 0x65 /* 'e' */, 0x07, 0x00 /* (to 0x0356 s 425) */,\n+ 0x6F /* 'o' */, 0x1A, 0x00 /* (to 0x036C s 435) */,\n+ 0x08, /* fail */\n+/* pos 0356: 425 */ 0x2D /* '-' */, 0x05, 0x00 /* (to 0x035B s 426) */,\n+ 0x00, 0x4E /* - terminal marker 78 - */,\n+/* pos 035b: 426 */ 0x6C /* 'l' */, 0x07, 0x00 /* (to 0x0362 s 427) */,\n+ 0x77 /* 'w' */, 0x09, 0x00 /* (to 0x0367 s 431) */,\n+ 0x08, /* fail */\n+/* pos 0362: 427 */ 0xE9 /* 'i' -\u003e */,\n+/* pos 0363: 428 */ 0xEE /* 'n' -\u003e */,\n+/* pos 0364: 429 */ 0xE5 /* 'e' -\u003e */,\n+/* pos 0365: 430 */ 0x00, 0x4F /* - terminal marker 79 - */,\n+/* pos 0367: 431 */ 0xF2 /* 'r' -\u003e */,\n+/* pos 0368: 432 */ 0xE1 /* 'a' -\u003e */,\n+/* pos 0369: 433 */ 0xF0 /* 'p' -\u003e */,\n+/* pos 036a: 434 */ 0x00, 0x50 /* - terminal marker 80 - */,\n+/* pos 036c: 435 */ 0xE7 /* 'g' -\u003e */,\n+/* pos 036d: 436 */ 0xF2 /* 'r' -\u003e */,\n+/* pos 036e: 437 */ 0xE5 /* 'e' -\u003e */,\n+/* pos 036f: 438 */ 0xF3 /* 's' -\u003e */,\n+/* pos 0370: 439 */ 0xF3 /* 's' -\u003e */,\n+/* pos 0371: 440 */ 0x00, 0x51 /* - terminal marker 81 - */,\n+/* pos 0373: 441 */ 0x65 /* 'e' */, 0x0A, 0x00 /* (to 0x037D s 442) */,\n+ 0x69 /* 'i' */, 0x28, 0x00 /* (to 0x039E s 456) */,\n+ 0x74 /* 't' */, 0x2A, 0x00 /* (to 0x03A3 s 460) */,\n+ 0x08, /* fail */\n+/* pos 037d: 442 */ 0x6C /* 'l' */, 0x07, 0x00 /* (to 0x0384 s 443) */,\n+ 0x70 /* 'p' */, 0x0B, 0x00 /* (to 0x038B s 449) */,\n+ 0x08, /* fail */\n+/* pos 0384: 443 */ 0xE1 /* 'a' -\u003e */,\n+/* pos 0385: 444 */ 0xF4 /* 't' -\u003e */,\n+/* pos 0386: 445 */ 0xE9 /* 'i' -\u003e */,\n+/* pos 0387: 446 */ 0xF6 /* 'v' -\u003e */,\n+/* pos 0388: 447 */ 0xE5 /* 'e' -\u003e */,\n+/* pos 0389: 448 */ 0x00, 0x52 /* - terminal marker 82 - */,\n+/* pos 038b: 449 */ 0xE5 /* 'e' -\u003e */,\n+/* pos 038c: 450 */ 0xE1 /* 'a' -\u003e */,\n+/* pos 038d: 451 */ 0xF4 /* 't' -\u003e */,\n+/* pos 038e: 452 */ 0x2D /* '-' */, 0x05, 0x00 /* (to 0x0393 s 453) */,\n+ 0x00, 0x53 /* - terminal marker 83 - */,\n+/* pos 0393: 453 */ 0x78 /* 'x' */, 0x07, 0x00 /* (to 0x039A s 454) */,\n+ 0x79 /* 'y' */, 0x06, 0x00 /* (to 0x039C s 455) */,\n+ 0x08, /* fail */\n+/* pos 039a: 454 */ 0x00, 0x54 /* - terminal marker 84 - */,\n+/* pos 039c: 455 */ 0x00, 0x55 /* - terminal marker 85 - */,\n+/* pos 039e: 456 */ 0xE7 /* 'g' -\u003e */,\n+/* pos 039f: 457 */ 0xE8 /* 'h' -\u003e */,\n+/* pos 03a0: 458 */ 0xF4 /* 't' -\u003e */,\n+/* pos 03a1: 459 */ 0x00, 0x56 /* - terminal marker 86 - */,\n+/* pos 03a3: 460 */ 0xEC /* 'l' -\u003e */,\n+/* pos 03a4: 461 */ 0x00, 0x57 /* - terminal marker 87 - */,\n+/* pos 03a6: 462 */ 0x63 /* 'c' */, 0x22, 0x00 /* (to 0x03C8 s 463) */,\n+ 0x65 /* 'e' */, 0x25, 0x00 /* (to 0x03CE s 468) */,\n+ 0x68 /* 'h' */, 0x38, 0x00 /* (to 0x03E4 s 482) */,\n+ 0x69 /* 'i' */, 0x39, 0x00 /* (to 0x03E8 s 485) */,\n+ 0x6D /* 'm' */, 0x3C, 0x00 /* (to 0x03EE s 490) */,\n+ 0x70 /* 'p' */, 0x4E, 0x00 /* (to 0x0403 s 503) */,\n+ 0x71 /* 'q' */, 0x54, 0x00 /* (to 0x040C s 511) */,\n+ 0x2D /* '-' */, 0x57, 0x00 /* (to 0x0412 s 516) */,\n+ 0x74 /* 't' */, 0x5C, 0x00 /* (to 0x041A s 523) */,\n+ 0x75 /* 'u' */, 0x6C, 0x00 /* (to 0x042D s 534) */,\n+ 0x77 /* 'w' */, 0x76, 0x00 /* (to 0x043A s 539) */,\n+ 0x08, /* fail */\n+/* pos 03c8: 463 */ 0xF2 /* 'r' -\u003e */,\n+/* pos 03c9: 464 */ 0xEF /* 'o' -\u003e */,\n+/* pos 03ca: 465 */ 0xEC /* 'l' -\u003e */,\n+/* pos 03cb: 466 */ 0xEC /* 'l' -\u003e */,\n+/* pos 03cc: 467 */ 0x00, 0x58 /* - terminal marker 88 - */,\n+/* pos 03ce: 468 */ 0x70 /* 'p' */, 0x07, 0x00 /* (to 0x03D5 s 469) */,\n+ 0x2D /* '-' */, 0x0B, 0x00 /* (to 0x03DC s 475) */,\n+ 0x08, /* fail */\n+/* pos 03d5: 469 */ 0xE1 /* 'a' -\u003e */,\n+/* pos 03d6: 470 */ 0xF2 /* 'r' -\u003e */,\n+/* pos 03d7: 471 */ 0xE1 /* 'a' -\u003e */,\n+/* pos 03d8: 472 */ 0xF4 /* 't' -\u003e */,\n+/* pos 03d9: 473 */ 0xE5 /* 'e' -\u003e */,\n+/* pos 03da: 474 */ 0x00, 0x59 /* - terminal marker 89 - */,\n+/* pos 03dc: 475 */ 0xF2 /* 'r' -\u003e */,\n+/* pos 03dd: 476 */ 0xE5 /* 'e' -\u003e */,\n+/* pos 03de: 477 */ 0xF3 /* 's' -\u003e */,\n+/* pos 03df: 478 */ 0xE9 /* 'i' -\u003e */,\n+/* pos 03e0: 479 */ 0xFA /* 'z' -\u003e */,\n+/* pos 03e1: 480 */ 0xE5 /* 'e' -\u003e */,\n+/* pos 03e2: 481 */ 0x00, 0x5A /* - terminal marker 90 - */,\n+/* pos 03e4: 482 */ 0xEF /* 'o' -\u003e */,\n+/* pos 03e5: 483 */ 0xF7 /* 'w' -\u003e */,\n+/* pos 03e6: 484 */ 0x00, 0x5B /* - terminal marker 91 - */,\n+/* pos 03e8: 485 */ 0xEC /* 'l' -\u003e */,\n+/* pos 03e9: 486 */ 0xE5 /* 'e' -\u003e */,\n+/* pos 03ea: 487 */ 0xEE /* 'n' -\u003e */,\n+/* pos 03eb: 488 */ 0xF4 /* 't' -\u003e */,\n+/* pos 03ec: 489 */ 0x00, 0x5C /* - terminal marker 92 - */,\n+/* pos 03ee: 490 */ 0xE1 /* 'a' -\u003e */,\n+/* pos 03ef: 491 */ 0xEC /* 'l' -\u003e */,\n+/* pos 03f0: 492 */ 0xEC /* 'l' -\u003e */,\n+/* pos 03f1: 493 */ 0xAD /* '-' -\u003e */,\n+/* pos 03f2: 494 */ 0xE3 /* 'c' -\u003e */,\n+/* pos 03f3: 495 */ 0xE1 /* 'a' -\u003e */,\n+/* pos 03f4: 496 */ 0xF0 /* 'p' -\u003e */,\n+/* pos 03f5: 497 */ 0x73 /* 's' */, 0x07, 0x00 /* (to 0x03FC s 498) */,\n+ 0x74 /* 't' */, 0x06, 0x00 /* (to 0x03FE s 499) */,\n+ 0x08, /* fail */\n+/* pos 03fc: 498 */ 0x00, 0x5D /* - terminal marker 93 - */,\n+/* pos 03fe: 499 */ 0xE9 /* 'i' -\u003e */,\n+/* pos 03ff: 500 */ 0xEF /* 'o' -\u003e */,\n+/* pos 0400: 501 */ 0xEE /* 'n' -\u003e */,\n+/* pos 0401: 502 */ 0x00, 0x5E /* - terminal marker 94 - */,\n+/* pos 0403: 503 */ 0xE5 /* 'e' -\u003e */,\n+/* pos 0404: 504 */ 0xEC /* 'l' -\u003e */,\n+/* pos 0405: 505 */ 0xEC /* 'l' -\u003e */,\n+/* pos 0406: 506 */ 0xAD /* '-' -\u003e */,\n+/* pos 0407: 507 */ 0xEF /* 'o' -\u003e */,\n+/* pos 0408: 508 */ 0xF5 /* 'u' -\u003e */,\n+/* pos 0409: 509 */ 0xF4 /* 't' -\u003e */,\n+/* pos 040a: 510 */ 0x00, 0x5F /* - terminal marker 95 - */,\n+/* pos 040c: 511 */ 0xF5 /* 'u' -\u003e */,\n+/* pos 040d: 512 */ 0xE1 /* 'a' -\u003e */,\n+/* pos 040e: 513 */ 0xF2 /* 'r' -\u003e */,\n+/* pos 040f: 514 */ 0xE5 /* 'e' -\u003e */,\n+/* pos 0410: 515 */ 0x00, 0x60 /* - terminal marker 96 - */,\n+/* pos 0412: 516 */ 0xF2 /* 'r' -\u003e */,\n+/* pos 0413: 517 */ 0xE5 /* 'e' -\u003e */,\n+/* pos 0414: 518 */ 0xF3 /* 's' -\u003e */,\n+/* pos 0415: 519 */ 0xE9 /* 'i' -\u003e */,\n+/* pos 0416: 520 */ 0xFA /* 'z' -\u003e */,\n+/* pos 0417: 521 */ 0xE5 /* 'e' -\u003e */,\n+/* pos 0418: 522 */ 0x00, 0x61 /* - terminal marker 97 - */,\n+/* pos 041a: 523 */ 0xE1 /* 'a' -\u003e */,\n+/* pos 041b: 524 */ 0xF4 /* 't' -\u003e */,\n+/* pos 041c: 525 */ 0x69 /* 'i' */, 0x07, 0x00 /* (to 0x0423 s 526) */,\n+ 0x75 /* 'u' */, 0x07, 0x00 /* (to 0x0426 s 528) */,\n+ 0x08, /* fail */\n+/* pos 0423: 526 */ 0xE3 /* 'c' -\u003e */,\n+/* pos 0424: 527 */ 0x00, 0x62 /* - terminal marker 98 - */,\n+/* pos 0426: 528 */ 0xF3 /* 's' -\u003e */,\n+/* pos 0427: 529 */ 0xAD /* '-' -\u003e */,\n+/* pos 0428: 530 */ 0xE2 /* 'b' -\u003e */,\n+/* pos 0429: 531 */ 0xE1 /* 'a' -\u003e */,\n+/* pos 042a: 532 */ 0xF2 /* 'r' -\u003e */,\n+/* pos 042b: 533 */ 0x00, 0x63 /* - terminal marker 99 - */,\n+/* pos 042d: 534 */ 0x62 /* 'b' */, 0x07, 0x00 /* (to 0x0434 s 535) */,\n+ 0x70 /* 'p' */, 0x06, 0x00 /* (to 0x0436 s 536) */,\n+ 0x08, /* fail */\n+/* pos 0434: 535 */ 0x00, 0x64 /* - terminal marker 100 - */,\n+/* pos 0436: 536 */ 0xE5 /* 'e' -\u003e */,\n+/* pos 0437: 537 */ 0xF2 /* 'r' -\u003e */,\n+/* pos 0438: 538 */ 0x00, 0x65 /* - terminal marker 101 - */,\n+/* pos 043a: 539 */ 0xAD /* '-' -\u003e */,\n+/* pos 043b: 540 */ 0xF2 /* 'r' -\u003e */,\n+/* pos 043c: 541 */ 0xE5 /* 'e' -\u003e */,\n+/* pos 043d: 542 */ 0xF3 /* 's' -\u003e */,\n+/* pos 043e: 543 */ 0xE9 /* 'i' -\u003e */,\n+/* pos 043f: 544 */ 0xFA /* 'z' -\u003e */,\n+/* pos 0440: 545 */ 0xE5 /* 'e' -\u003e */,\n+/* pos 0441: 546 */ 0x00, 0x66 /* - terminal marker 102 - */,\n+/* pos 0443: 547 */ 0x61 /* 'a' */, 0x0D, 0x00 /* (to 0x0450 s 548) */,\n+ 0x65 /* 'e' */, 0x6C, 0x00 /* (to 0x04B2 s 607) */,\n+ 0x6F /* 'o' */, 0x82, 0x00 /* (to 0x04CB s 620) */,\n+ 0x72 /* 'r' */, 0x82, 0x00 /* (to 0x04CE s 622) */,\n+ 0x08, /* fail */\n+/* pos 0450: 548 */ 0xE2 /* 'b' -\u003e */,\n+/* pos 0451: 549 */ 0xEC /* 'l' -\u003e */,\n+/* pos 0452: 550 */ 0xE5 /* 'e' -\u003e */,\n+/* pos 0453: 551 */ 0x2D /* '-' */, 0x05, 0x00 /* (to 0x0458 s 552) */,\n+ 0x00, 0x67 /* - terminal marker 103 - */,\n+/* pos 0458: 552 */ 0x63 /* 'c' */, 0x0D, 0x00 /* (to 0x0465 s 553) */,\n+ 0x66 /* 'f' */, 0x2F, 0x00 /* (to 0x048A s 574) */,\n+ 0x68 /* 'h' */, 0x39, 0x00 /* (to 0x0497 s 586) */,\n+ 0x72 /* 'r' */, 0x43, 0x00 /* (to 0x04A4 s 598) */,\n+ 0x08, /* fail */\n+/* pos 0465: 553 */ 0x61 /* 'a' */, 0x0A, 0x00 /* (to 0x046F s 554) */,\n+ 0x65 /* 'e' */, 0x0E, 0x00 /* (to 0x0476 s 560) */,\n+ 0x6F /* 'o' */, 0x0F, 0x00 /* (to 0x047A s 563) */,\n+ 0x08, /* fail */\n+/* pos 046f: 554 */ 0xF0 /* 'p' -\u003e */,\n+/* pos 0470: 555 */ 0xF4 /* 't' -\u003e */,\n+/* pos 0471: 556 */ 0xE9 /* 'i' -\u003e */,\n+/* pos 0472: 557 */ 0xEF /* 'o' -\u003e */,\n+/* pos 0473: 558 */ 0xEE /* 'n' -\u003e */,\n+/* pos 0474: 559 */ 0x00, 0x68 /* - terminal marker 104 - */,\n+/* pos 0476: 560 */ 0xEC /* 'l' -\u003e */,\n+/* pos 0477: 561 */ 0xEC /* 'l' -\u003e */,\n+/* pos 0478: 562 */ 0x00, 0x69 /* - terminal marker 105 - */,\n+/* pos 047a: 563 */ 0xEC /* 'l' -\u003e */,\n+/* pos 047b: 564 */ 0xF5 /* 'u' -\u003e */,\n+/* pos 047c: 565 */ 0xED /* 'm' -\u003e */,\n+/* pos 047d: 566 */ 0xEE /* 'n' -\u003e */,\n+/* pos 047e: 567 */ 0x2D /* '-' */, 0x05, 0x00 /* (to 0x0483 s 568) */,\n+ 0x00, 0x6A /* - terminal marker 106 - */,\n+/* pos 0483: 568 */ 0xE7 /* 'g' -\u003e */,\n+/* pos 0484: 569 */ 0xF2 /* 'r' -\u003e */,\n+/* pos 0485: 570 */ 0xEF /* 'o' -\u003e */,\n+/* pos 0486: 571 */ 0xF5 /* 'u' -\u003e */,\n+/* pos 0487: 572 */ 0xF0 /* 'p' -\u003e */,\n+/* pos 0488: 573 */ 0x00, 0x6B /* - terminal marker 107 - */,\n+/* pos 048a: 574 */ 0xEF /* 'o' -\u003e */,\n+/* pos 048b: 575 */ 0xEF /* 'o' -\u003e */,\n+/* pos 048c: 576 */ 0xF4 /* 't' -\u003e */,\n+/* pos 048d: 577 */ 0xE5 /* 'e' -\u003e */,\n+/* pos 048e: 578 */ 0xF2 /* 'r' -\u003e */,\n+/* pos 048f: 579 */ 0xAD /* '-' -\u003e */,\n+/* pos 0490: 580 */ 0xE7 /* 'g' -\u003e */,\n+/* pos 0491: 581 */ 0xF2 /* 'r' -\u003e */,\n+/* pos 0492: 582 */ 0xEF /* 'o' -\u003e */,\n+/* pos 0493: 583 */ 0xF5 /* 'u' -\u003e */,\n+/* pos 0494: 584 */ 0xF0 /* 'p' -\u003e */,\n+/* pos 0495: 585 */ 0x00, 0x6C /* - terminal marker 108 - */,\n+/* pos 0497: 586 */ 0xE5 /* 'e' -\u003e */,\n+/* pos 0498: 587 */ 0xE1 /* 'a' -\u003e */,\n+/* pos 0499: 588 */ 0xE4 /* 'd' -\u003e */,\n+/* pos 049a: 589 */ 0xE5 /* 'e' -\u003e */,\n+/* pos 049b: 590 */ 0xF2 /* 'r' -\u003e */,\n+/* pos 049c: 591 */ 0xAD /* '-' -\u003e */,\n+/* pos 049d: 592 */ 0xE7 /* 'g' -\u003e */,\n+/* pos 049e: 593 */ 0xF2 /* 'r' -\u003e */,\n+/* pos 049f: 594 */ 0xEF /* 'o' -\u003e */,\n+/* pos 04a0: 595 */ 0xF5 /* 'u' -\u003e */,\n+/* pos 04a1: 596 */ 0xF0 /* 'p' -\u003e */,\n+/* pos 04a2: 597 */ 0x00, 0x6D /* - terminal marker 109 - */,\n+/* pos 04a4: 598 */ 0xEF /* 'o' -\u003e */,\n+/* pos 04a5: 599 */ 0xF7 /* 'w' -\u003e */,\n+/* pos 04a6: 600 */ 0x2D /* '-' */, 0x05, 0x00 /* (to 0x04AB s 601) */,\n+ 0x00, 0x6E /* - terminal marker 110 - */,\n+/* pos 04ab: 601 */ 0xE7 /* 'g' -\u003e */,\n+/* pos 04ac: 602 */ 0xF2 /* 'r' -\u003e */,\n+/* pos 04ad: 603 */ 0xEF /* 'o' -\u003e */,\n+/* pos 04ae: 604 */ 0xF5 /* 'u' -\u003e */,\n+/* pos 04af: 605 */ 0xF0 /* 'p' -\u003e */,\n+/* pos 04b0: 606 */ 0x00, 0x6F /* - terminal marker 111 - */,\n+/* pos 04b2: 607 */ 0xF8 /* 'x' -\u003e */,\n+/* pos 04b3: 608 */ 0xF4 /* 't' -\u003e */,\n+/* pos 04b4: 609 */ 0x2D /* '-' */, 0x05, 0x00 /* (to 0x04B9 s 610) */,\n+ 0x00, 0x72 /* - terminal marker 114 - */,\n+/* pos 04b9: 610 */ 0x62 /* 'b' */, 0x07, 0x00 /* (to 0x04C0 s 611) */,\n+ 0x74 /* 't' */, 0x0B, 0x00 /* (to 0x04C7 s 617) */,\n+ 0x08, /* fail */\n+/* pos 04c0: 611 */ 0xEF /* 'o' -\u003e */,\n+/* pos 04c1: 612 */ 0xF4 /* 't' -\u003e */,\n+/* pos 04c2: 613 */ 0xF4 /* 't' -\u003e */,\n+/* pos 04c3: 614 */ 0xEF /* 'o' -\u003e */,\n+/* pos 04c4: 615 */ 0xED /* 'm' -\u003e */,\n+/* pos 04c5: 616 */ 0x00, 0x70 /* - terminal marker 112 - */,\n+/* pos 04c7: 617 */ 0xEF /* 'o' -\u003e */,\n+/* pos 04c8: 618 */ 0xF0 /* 'p' -\u003e */,\n+/* pos 04c9: 619 */ 0x00, 0x71 /* - terminal marker 113 - */,\n+/* pos 04cb: 620 */ 0xF0 /* 'p' -\u003e */,\n+/* pos 04cc: 621 */ 0x00, 0x73 /* - terminal marker 115 - */,\n+/* pos 04ce: 622 */ 0xE1 /* 'a' -\u003e */,\n+/* pos 04cf: 623 */ 0xEE /* 'n' -\u003e */,\n+/* pos 04d0: 624 */ 0xF3 /* 's' -\u003e */,\n+/* pos 04d1: 625 */ 0xF0 /* 'p' -\u003e */,\n+/* pos 04d2: 626 */ 0xE1 /* 'a' -\u003e */,\n+/* pos 04d3: 627 */ 0xF2 /* 'r' -\u003e */,\n+/* pos 04d4: 628 */ 0xE5 /* 'e' -\u003e */,\n+/* pos 04d5: 629 */ 0xEE /* 'n' -\u003e */,\n+/* pos 04d6: 630 */ 0xF4 /* 't' -\u003e */,\n+/* pos 04d7: 631 */ 0x00, 0x74 /* - terminal marker 116 - */,\n+/* pos 04d9: 632 */ 0x6E /* 'n' */, 0x07, 0x00 /* (to 0x04E0 s 633) */,\n+ 0x70 /* 'p' */, 0x0D, 0x00 /* (to 0x04E9 s 641) */,\n+ 0x08, /* fail */\n+/* pos 04e0: 633 */ 0xE4 /* 'd' -\u003e */,\n+/* pos 04e1: 634 */ 0xE5 /* 'e' -\u003e */,\n+/* pos 04e2: 635 */ 0xF2 /* 'r' -\u003e */,\n+/* pos 04e3: 636 */ 0xEC /* 'l' -\u003e */,\n+/* pos 04e4: 637 */ 0xE9 /* 'i' -\u003e */,\n+/* pos 04e5: 638 */ 0xEE /* 'n' -\u003e */,\n+/* pos 04e6: 639 */ 0xE5 /* 'e' -\u003e */,\n+/* pos 04e7: 640 */ 0x00, 0x75 /* - terminal marker 117 - */,\n+/* pos 04e9: 641 */ 0xF0 /* 'p' -\u003e */,\n+/* pos 04ea: 642 */ 0xE5 /* 'e' -\u003e */,\n+/* pos 04eb: 643 */ 0xF2 /* 'r' -\u003e */,\n+/* pos 04ec: 644 */ 0x2D /* '-' */, 0x07, 0x00 /* (to 0x04F3 s 645) */,\n+ 0x63 /* 'c' */, 0x14, 0x00 /* (to 0x0503 s 651) */,\n+ 0x08, /* fail */\n+/* pos 04f3: 645 */ 0x61 /* 'a' */, 0x0A, 0x00 /* (to 0x04FD s 646) */,\n+ 0x6C /* 'l' */, 0x12, 0x00 /* (to 0x0508 s 655) */,\n+ 0x72 /* 'r' */, 0x15, 0x00 /* (to 0x050E s 660) */,\n+ 0x08, /* fail */\n+/* pos 04fd: 646 */ 0xEC /* 'l' -\u003e */,\n+/* pos 04fe: 647 */ 0xF0 /* 'p' -\u003e */,\n+/* pos 04ff: 648 */ 0xE8 /* 'h' -\u003e */,\n+/* pos 0500: 649 */ 0xE1 /* 'a' -\u003e */,\n+/* pos 0501: 650 */ 0x00, 0x76 /* - terminal marker 118 - */,\n+/* pos 0503: 651 */ 0xE1 /* 'a' -\u003e */,\n+/* pos 0504: 652 */ 0xF3 /* 's' -\u003e */,\n+/* pos 0505: 653 */ 0xE5 /* 'e' -\u003e */,\n+/* pos 0506: 654 */ 0x00, 0x77 /* - terminal marker 119 - */,\n+/* pos 0508: 655 */ 0xE1 /* 'a' -\u003e */,\n+/* pos 0509: 656 */ 0xF4 /* 't' -\u003e */,\n+/* pos 050a: 657 */ 0xE9 /* 'i' -\u003e */,\n+/* pos 050b: 658 */ 0xEE /* 'n' -\u003e */,\n+/* pos 050c: 659 */ 0x00, 0x78 /* - terminal marker 120 - */,\n+/* pos 050e: 660 */ 0xEF /* 'o' -\u003e */,\n+/* pos 050f: 661 */ 0xED /* 'm' -\u003e */,\n+/* pos 0510: 662 */ 0xE1 /* 'a' -\u003e */,\n+/* pos 0511: 663 */ 0xEE /* 'n' -\u003e */,\n+/* pos 0512: 664 */ 0x00, 0x79 /* - terminal marker 121 - */,\n+/* pos 0514: 665 */ 0xE9 /* 'i' -\u003e */,\n+/* pos 0515: 666 */ 0xF3 /* 's' -\u003e */,\n+/* pos 0516: 667 */ 0xE9 /* 'i' -\u003e */,\n+/* pos 0517: 668 */ 0xE2 /* 'b' -\u003e */,\n+/* pos 0518: 669 */ 0xEC /* 'l' -\u003e */,\n+/* pos 0519: 670 */ 0xE5 /* 'e' -\u003e */,\n+/* pos 051a: 671 */ 0x00, 0x7A /* - terminal marker 122 - */,\n+/* pos 051c: 672 */ 0x61 /* 'a' */, 0x07, 0x00 /* (to 0x0523 s 673) */,\n+ 0x2D /* '-' */, 0x08, 0x00 /* (to 0x0527 s 676) */,\n+ 0x08, /* fail */\n+/* pos 0523: 673 */ 0xE9 /* 'i' -\u003e */,\n+/* pos 0524: 674 */ 0xF4 /* 't' -\u003e */,\n+/* pos 0525: 675 */ 0x00, 0x7B /* - terminal marker 123 - */,\n+/* pos 0527: 676 */ 0xF2 /* 'r' -\u003e */,\n+/* pos 0528: 677 */ 0xE5 /* 'e' -\u003e */,\n+/* pos 0529: 678 */ 0xF3 /* 's' -\u003e */,\n+/* pos 052a: 679 */ 0xE9 /* 'i' -\u003e */,\n+/* pos 052b: 680 */ 0xFA /* 'z' -\u003e */,\n+/* pos 052c: 681 */ 0xE5 /* 'e' -\u003e */,\n+/* pos 052d: 682 */ 0x00, 0x7C /* - terminal marker 124 - */,\n+/* total size 1327 bytes */\ndiff --git a/lib/misc/dlo/dlo.c b/lib/misc/dlo/dlo.c\nindex 6d113fd..a310a5c 100644\n--- a/lib/misc/dlo/dlo.c\n+++ b/lib/misc/dlo/dlo.c\n@@ -534,8 +534,8 @@ lws_display_render_dump_ids(lws_dll2_owner_t *ids)\n \t\t\tlwsl_notice(\u0022 id: '%s' (not present)\u005cn\u0022, id-\u003eid);\n \t\telse\n \t\t\tlwsl_notice(\u0022 id: '%s', (%d,%d), %dx%d\u005cn\u0022, id-\u003eid,\n-\t\t\t\t\tid-\u003ebox.x.whole, id-\u003ebox.y.whole,\n-\t\t\t\t\tid-\u003ebox.w.whole, id-\u003ebox.h.whole);\n+\t\t\t\t\t(int)id-\u003ebox.x.whole, (int)id-\u003ebox.y.whole,\n+\t\t\t\t\t(int)id-\u003ebox.w.whole, (int)id-\u003ebox.h.whole);\n \t} lws_end_foreach_dll(d);\n }\n \ndiff --git a/lib/misc/lhp-ss.c b/lib/misc/lhp-ss.c\nnew file mode 100644\nindex 0000000..27c30a3\n--- /dev/null\n+++ b/lib/misc/lhp-ss.c\n@@ -0,0 +1,241 @@\n+/*\n+ * libwebsockets - small server side websockets and web server implementation\n+ *\n+ * Copyright (C) 2010 - 2022 Andy Green \u003candy@warmcat.com\u003e\n+ *\n+ * Permission is hereby granted, free of charge, to any person obtaining a copy\n+ * of this software and associated documentation files (the \u0022Software\u0022), to\n+ * deal in the Software without restriction, including without limitation the\n+ * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n+ * sell copies of the Software, and to permit persons to whom the Software is\n+ * furnished to do so, subject to the following conditions:\n+ *\n+ * The above copyright notice and this permission notice shall be included in\n+ * all copies or substantial portions of the Software.\n+ *\n+ * THE SOFTWARE IS PROVIDED \u0022AS IS\u0022, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n+ * IN THE SOFTWARE.\n+ *\n+ * SS bindings for html5 parser\n+ */\n+\n+#include \u003cprivate-lib-core.h\u003e\n+\n+LWS_SS_USER_TYPEDEF\n+\tlws_flow_t\t\t\tflow;\n+\tlhp_ctx_t\t\t\tlhp; /* html ss owns html parser */\n+\tlws_dl_rend_t\t\t\tdrt;\n+\tlws_sorted_usec_list_t\t\tsul;\n+\tlws_display_render_state_t\t*rs;\n+\tstruct lws_context\t\t*cx;\n+} htmlss_t;\n+\n+static void\n+lws_lhp_ss_html_parse(lws_sorted_usec_list_t *sul)\n+{\n+\thtmlss_t *m \u003d lws_container_of(sul, htmlss_t, sul);\n+\tlws_stateful_ret_t r;\n+\tsize_t zero \u003d 0;\n+\n+\tdo {\n+\t\tif (lws_flow_feed(\u0026m-\u003eflow)) {\n+\t\t\tlwsl_notice(\u0022%s: returning from flow_feed\u005cn\u0022, __func__);\n+\t\t\treturn;\n+\t\t}\n+\n+\t\t// lwsl_notice(\u0022%s: html_parse in len %d\u005cn\u0022, __func__, (int)m-\u003eflow.len);\n+\n+\t\t/* creates display list objects from html */\n+\t\tr \u003d lws_lhp_parse(\u0026m-\u003elhp, (const uint8_t **)\u0026m-\u003eflow.data,\n+\t\t\t\t (size_t *)\u0026m-\u003eflow.len);\n+\n+\t\tlws_flow_req(\u0026m-\u003eflow);\n+\n+\t\tif ((r \u0026 LWS_SRET_WANT_INPUT) \u0026\u0026 !m-\u003eflow.len \u0026\u0026 !m-\u003elhp.await_css_done) {\n+\t\t\tif (m-\u003eflow.state \u003d\u003d LWSDLOFLOW_STATE_READ) {\n+\t\t\t\tlwsl_warn(\u0022%s: returning to await more input\u005cn\u0022, __func__);\n+\t\t\t\treturn;\n+\t\t\t}\n+\t\t\tlwsl_warn(\u0022%s: inferring we are finished\u005cn\u0022, __func__);\n+\t\t\tbreak;\n+\t\t}\n+\n+\t\tif (r \u0026 LWS_SRET_AWAIT_RETRY) {\n+\t\t\tif (!m-\u003elhp.await_css_done)\n+\t\t\t\tlws_sul_schedule(m-\u003ecx, 0, \u0026m-\u003esul, lws_lhp_ss_html_parse, 1);\n+\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tif (r \u0026 (LWS_SRET_NO_FURTHER_OUT | LWS_SRET_FATAL)) {\n+\t\t\tlwsl_warn(\u0022%s: r 0x%x\u005cn\u0022, __func__, r);\n+\t\t\tbreak;\n+\t\t}\n+\t} while (1);\n+\n+\t/* Finalize the html parse and clean up */\n+\n+\tlwsl_notice(\u0022%s: DESTROYING the lhp\u005cn\u0022, __func__);\n+\n+\tm-\u003elhp.flags \u003d LHP_FLAG_DOCUMENT_END;\n+\tlws_lhp_parse(\u0026m-\u003elhp, (const uint8_t **)NULL, \u0026zero);\n+\tlws_lhp_destruct(\u0026m-\u003elhp);\n+\tm-\u003ers-\u003ehtml \u003d 2; /* html completed.. rs outlives the html ss and priv */\n+\n+\tlws_display_dl_dump(m-\u003edrt.dl);\n+\n+ /* schedule starting the render */\n+\n+\tlws_sul_schedule(m-\u003ecx, 0, \u0026m-\u003ers-\u003esul, m-\u003elhp.ssevcb, 1);\n+\tlws_ss_destroy(\u0026m-\u003ess);\n+}\n+\n+void\n+lws_lhp_ss_html_parse_from_lhp(lhp_ctx_t *lhp)\n+{\n+\thtmlss_t *m \u003d lws_container_of(lhp, htmlss_t, lhp);\n+\n+\tlws_lhp_ss_html_parse(\u0026m-\u003esul);\n+}\n+\n+/* secure streams payload interface */\n+\n+static lws_ss_state_return_t\n+htmlss_rx(void *userobj, const uint8_t *buf, size_t len, int flags)\n+{\n+\thtmlss_t *m \u003d (htmlss_t *)userobj;\n+\tlws_ss_state_return_t r \u003d LWSSSSRET_OK;\n+\n+\tif (len \u0026\u0026\n+\t lws_buflist_append_segment(\u0026m-\u003eflow.bl, buf, len) \u003c 0)\n+\t\treturn LWSSSSRET_DISCONNECT_ME;\n+\n+\tlwsl_notice(\u0022%s: buflen size %d\u005cn\u0022, __func__,\n+\t\t\t(int)lws_buflist_total_len(\u0026m-\u003eflow.bl));\n+\n+\tif (flags \u0026 LWSSS_FLAG_EOM) {\n+\t\tm-\u003eflow.state \u003d LWSDLOFLOW_STATE_READ_COMPLETED;\n+\t\tr \u003d LWSSSSRET_DISCONNECT_ME;\n+\t}\n+\n+\tlws_sul_schedule(m-\u003ecx, 0, \u0026m-\u003esul, lws_lhp_ss_html_parse, 1);\n+\n+\treturn r;\n+}\n+\n+static lws_ss_state_return_t\n+htmlss_state(void *userobj, void *sh, lws_ss_constate_t state,\n+\t lws_ss_tx_ordinal_t ack)\n+{\n+\thtmlss_t *m \u003d (htmlss_t *)userobj;\n+\n+\tswitch (state) {\n+\tcase LWSSSCS_CREATING:\n+\t\tbreak;\n+\n+\tcase LWSSSCS_DISCONNECTED:\n+\t\tm-\u003eflow.state \u003d LWSDLOFLOW_STATE_READ_COMPLETED;\n+\t\tm-\u003eflow.h \u003d NULL;\n+\t\tbreak;\n+\n+\tcase LWSSSCS_DESTROYING:\n+\t\tlws_lhp_destruct(\u0026m-\u003elhp);\n+\t\tlws_buflist_destroy_all_segments(\u0026m-\u003eflow.bl);\n+\t\tm-\u003edrt.dl \u003d NULL;\n+\t\tbreak;\n+\n+\tdefault:\n+\t\tbreak;\n+\t}\n+\n+\treturn LWSSSSRET_OK;\n+}\n+\n+static LWS_SS_INFO(\u0022__default\u0022, htmlss_t)\n+\t.rx\t\t\t\t\u003d htmlss_rx,\n+\t.state\t\t\t\t\u003d htmlss_state,\n+\t.manual_initial_tx_credit\t\u003d 1024\n+};\n+\n+/* prep rs-\u003edisplaylist, rs-\u003eic */\n+\n+int\n+lws_lhp_ss_browse(struct lws_context *cx, lws_display_render_state_t *rs,\n+\t\t const char *url, sul_cb_t render)\n+{\n+\tstruct lws_ss_handle *h \u003d NULL;\n+\tlws_ss_info_t ssi;\n+\tint32_t w \u003d 64 * 1024;\n+\thtmlss_t *m;\n+\n+\t/* fetch via SS */\n+#if defined(LWS_PLAT_BAREMETAL) || defined(LWS_PLAT_FREERTOS)\n+\tw \u003d 4096;\n+#endif\n+\n+\tssi \u003d ssi_htmlss_t;\n+\tssi.manual_initial_tx_credit \u003d w;\n+\n+\tif (lws_ss_create(cx, 0, \u0026ssi, NULL, \u0026h, NULL, NULL)) {\n+\t\tlwsl_err(\u0022%s: ss create failed\u005cn\u0022, __func__);\n+\t\treturn 1; /* failed */\n+\t}\n+\n+\tm \u003d (htmlss_t *)lws_ss_to_user_object(h);\n+\tm-\u003ecx \u003d cx;\n+\tm-\u003eflow.h \u003d h;\n+\tm-\u003eflow.window \u003d w;\n+\n+\tm-\u003edrt.dl \u003d \u0026rs-\u003edisplaylist;\n+\tm-\u003edrt.w \u003d rs-\u003eic-\u003ewh_px[0].whole;\n+\tm-\u003edrt.h \u003d rs-\u003eic-\u003ewh_px[1].whole;\n+\n+\tm-\u003ers \u003d rs;\n+\tm-\u003ers-\u003ehtml \u003d 1; /* render must wait for html to complete */\n+\n+\tif (lws_lhp_construct(\u0026m-\u003elhp, lhp_displaylist_layout, \u0026m-\u003edrt, rs-\u003eic)) {\n+\t\tlwsl_err(\u0022%s: lhp create %s failed\u005cn\u0022, __func__, url);\n+\t\tgoto bail1;\n+\t}\n+\n+\tm-\u003elhp.user1 \u003d cx;\n+\tm-\u003elhp.base_url \u003d strdup(url);\n+\tm-\u003elhp.ssevcb \u003d render;\n+\tm-\u003elhp.ssevsul \u003d \u0026rs-\u003esul;\n+\tm-\u003elhp.sshtmlevcb \u003d lws_lhp_ss_html_parse;\n+\tm-\u003elhp.sshtmlevsul \u003d \u0026m-\u003esul;\n+\tm-\u003elhp.ids \u003d \u0026rs-\u003eids;\n+\n+\tif (lws_ss_set_metadata(m-\u003ess, \u0022endpoint\u0022, url, strlen(url))) {\n+\t\tlwsl_err(\u0022%s: failed to use metadata %s\u005cn\u0022, __func__, url);\n+\t\tgoto bail2;\n+\t}\n+\n+\tif (lws_ss_set_metadata(m-\u003ess, \u0022ua\u0022, \u0022Mozilla/5.0 (X11; Fedora; Linux x86_64; rv:95.0) Gecko/20100101 Firefox/95.0\u0022, 76)) {\n+\t\tlwsl_err(\u0022%s: failed to use metadata ua\u005cn\u0022, __func__);\n+\t\tgoto bail2;\n+\t}\n+\n+\tif (lws_ss_set_metadata(m-\u003ess, \u0022acc\u0022, \u0022text/html,image/jpeg,image/png,\u0022, 30)) {\n+\t\tlwsl_err(\u0022%s: failed to use metadata ua\u005cn\u0022, __func__);\n+\t\tgoto bail2;\n+\t}\n+\n+\tif (lws_ss_client_connect(m-\u003ess))\n+\t\tgoto bail2;\n+\n+\treturn 0;\n+\n+bail2:\n+\tlws_lhp_destruct(\u0026m-\u003elhp);\n+\n+bail1:\n+\tlws_ss_destroy(\u0026h);\n+\n+\treturn 1;\n+}\ndiff --git a/lib/misc/lhp.c b/lib/misc/lhp.c\nnew file mode 100644\nindex 0000000..59a227d\n--- /dev/null\n+++ b/lib/misc/lhp.c\n@@ -0,0 +1,2146 @@\n+/*\n+ * libwebsockets - small server side websockets and web server implementation\n+ *\n+ * Copyright (C) 2010 - 2022 Andy Green \u003candy@warmcat.com\u003e\n+ *\n+ * Permission is hereby granted, free of charge, to any person obtaining a copy\n+ * of this software and associated documentation files (the \u0022Software\u0022), to\n+ * deal in the Software without restriction, including without limitation the\n+ * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n+ * sell copies of the Software, and to permit persons to whom the Software is\n+ * furnished to do so, subject to the following conditions:\n+ *\n+ * The above copyright notice and this permission notice shall be included in\n+ * all copies or substantial portions of the Software.\n+ *\n+ * THE SOFTWARE IS PROVIDED \u0022AS IS\u0022, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n+ * IN THE SOFTWARE.\n+ *\n+ * Stream parser for HTML 5\n+ * https://w3c.github.io/html-reference/syntax.html\n+ *\n+ */\n+\n+#include \u003cprivate-lib-core.h\u003e\n+\n+#define FAIL_CHAR 0x08\n+static uint8_t css_lextable[] \u003d { /* the css property names */\n+\t#include \u0022css-lextable.h\u0022\n+};\n+\n+static uint8_t css_propconst_lextable[] \u003d { /* the css property values */\n+\t#include \u0022css-propconst-lextable.h\u0022\n+};\n+\n+#define LHP_AC_GRANULE 512\n+\n+enum {\n+\t/* html */\n+\n+\tLHPS_INIT, /* default css injection */\n+\n+\tLHPS_OUTER,\n+\tLHPS_TAG,\n+\tLHPS_BAD_TAG,\n+\tLHPS_DO_START_ELEM,\n+\tLHPS_ATTRIB,\n+\tLHPS_ATTRIB_VAL,\n+\tLHPS_AMP,\n+\tLHPS_AMPHASH,\n+\tLHPS_AMPHASH_HEX,\n+\tLHPS_SCOMMENT1,\n+\tLHPS_SCOMMENT2,\n+\tLHPS_COMMENT,\n+\tLHPS_ECOMMENT1,\n+\tLHPS_ECOMMENT2,\n+\n+\t/* css */\n+\n+\tLCSPS_CSS_OUTER,\n+\tLCSPS_CCOM_S1,\n+\tLCSPS_CCOM_E1,\n+\tLCSPS_CCOM,\n+\tLCSPS_CSS_OUTER_TAG1,\n+\tLCSPS_CSS_NAMES,\n+\tLCSPS_CSS_DEF_NAME,\n+\tLCSPS_CSS_DEF_VALUE,\n+\tLCSPS_SCOMMENT1,\n+\tLCSPS_SCOMMENT2,\n+\tLCSPS_COMMENT,\n+\tLCSPS_ECOMMENT1,\n+\tLCSPS_ECOMMENT2,\n+\n+\tLCSPS_CSS_STANZA,\n+};\n+\n+/*\n+ * 17 well-known colours specified by CSS 2.1\n+ * https://www.w3.org/TR/CSS21/syndata.html#value-def-color\n+ */\n+\n+#if 0\n+static struct cols {\n+\tconst char * const\tname;\n+\tuint32_t\t\trgba;\n+} cols[] \u003d {\n+\t{ \u0022maroon\u0022, \tLWSDC_RGBA(0x80, 0x00, 0x00, 255) },\n+\t{ \u0022red\u0022, \tLWSDC_RGBA(0xff, 0x00, 0x00, 255) },\n+\t{ \u0022orange\u0022, \tLWSDC_RGBA(0xff, 0xa5, 0x00, 255) },\n+\t{ \u0022yellow\u0022, \tLWSDC_RGBA(0xff, 0xff, 0x00, 255) },\n+\t{ \u0022olive\u0022, \tLWSDC_RGBA(0x80, 0x80, 0x00, 255) },\n+\t{ \u0022purple\u0022, \tLWSDC_RGBA(0x80, 0x00, 0x80, 255) },\n+\t{ \u0022fuchsia\u0022, \tLWSDC_RGBA(0xff, 0x00, 0xff, 255) },\n+\t{ \u0022white\u0022, \tLWSDC_RGBA(0xff, 0xff, 0xff, 255) },\n+\t{ \u0022lime\u0022, \tLWSDC_RGBA(0x00, 0xff, 0x00, 255) },\n+\t{ \u0022green\u0022, \tLWSDC_RGBA(0x00, 0x80, 0x00, 255) },\n+\t{ \u0022navy\u0022, \tLWSDC_RGBA(0x00, 0x00, 0x80, 255) },\n+\t{ \u0022blue\u0022, \tLWSDC_RGBA(0x00, 0x00, 0xff, 255) },\n+\t{ \u0022aqua\u0022, \tLWSDC_RGBA(0x00, 0xff, 0xff, 255) },\n+\t{ \u0022teal\u0022, \tLWSDC_RGBA(0x00, 0x80, 0x80, 255) },\n+\t{ \u0022black\u0022, \tLWSDC_RGBA(0x00, 0x00, 0x00, 255) },\n+\t{ \u0022silver\u0022, \tLWSDC_RGBA(0xc0, 0xc0, 0xc0, 255) },\n+\t{ \u0022gray\u0022, \tLWSDC_RGBA(0x80, 0x80, 0x80, 255) },\n+};\n+#endif\n+\n+/*\n+ * \u0022void elements\u0022 are html elements that don't have a scope, and so don't\n+ * have a scope closure\n+ */\n+static const char * const void_elems[] \u003d {\n+\t\u0022area\u0022, \u0022base\u0022, \u0022br\u0022, \u0022col\u0022, \u0022command\u0022, \u0022embed\u0022, \u0022hr\u0022, \u0022img\u0022,\n+\t\u0022input\u0022, \u0022keygen\u0022, \u0022link\u0022, \u0022meta\u0022, \u0022param\u0022, \u0022source\u0022, \u0022track\u0022, \u0022wbr\u0022\n+};\n+static const uint8_t void_elems_lens[] \u003d /* lengths for the table above */\n+\t{ 4, 4, 2, 3, 7, 5, 2, 3, 5, 6, 4, 4, 5, 6, 5, 3 };\n+\n+static const char *const default_css \u003d\n+\t\u0022/* lws_lhp default css */\u0022\n+\t\u0022html, address,blockquote, dd, div,dl, dt, fieldset, form, frame, \u0022\n+\t\u0022frameset, h1, h2, h3, h4, h5, h6, noframes, ol, p, ul, center, \u0022\n+\t\u0022dir, hr, menu, pre { top: 0px; right: 0px; bottom: 0px; left: 0px;\u0022\n+\t\t\u0022 unicode-bidi: embed; color: #000;\u0022\n+\t\t\u0022padding-top: 2px; padding-left: 2px; padding-bottom: 2px; padding-right: 2px;\u0022\n+\t\t\u0022margin-top: 2px; margin-left: 2px; margin-bottom: 2px; margin-right: 2px;\u0022\n+\t\t\u0022position: static; width: auto; height: auto;\u0022\n+\t\t\t \u0022}\u005cn\u0022\n+\t\u0022div { display: block; width: auto; }\u005cn\u0022\n+\t\u0022body\t\t { display: block}\u005cn\u0022\n+\t\u0022li { display: list-item }\u005cn\u0022\n+\t\u0022head { display: none }\u005cn\u0022\n+\t\u0022table { display: table; }\u005cn\u0022\n+\t\u0022tr { display: table-row }\u005cn\u0022\n+\t\u0022thead { display: table-header-group }\u005cn\u0022\n+\t\u0022tbody { display: table-row-group }\u005cn\u0022\n+\t\u0022tfoot { display: table-footer-group }\u005cn\u0022\n+\t\u0022col { display: table-column }\u005cn\u0022\n+\t\u0022colgroup { display: table-column-group }\u005cn\u0022\n+\t\u0022td, th { display: table-cell }\u005cn\u0022\n+\t\u0022caption { display: table-caption }\u005cn\u0022\n+\t\u0022th { font-weight: bolder; text-align: center }\u005cn\u0022\n+\t\u0022caption { text-align: center }\u005cn\u0022\n+\t\u0022body { margin: 8px }\u005cn\u0022\n+\t\u0022h1 { font-size: 2em; margin: .67em 0 }\u005cn\u0022\n+\t\u0022h2 { font-size: 1.5em; margin: .75em 0 }\u005cn\u0022\n+\t\u0022h3 { font-size: 1.17em; margin: .83em 0 }\u005cn\u0022\n+\t\u0022h4, p, blockquote, ul, fieldset, form, ol, dl, dir, menu \u0022\n+\t\t\u0022{ margin: 1.12em 0 }\u005cn\u0022\n+\t\u0022h5 { font-size: .83em; margin: 1.5em 0 }\u005cn\u0022\n+\t\u0022h6 { font-size: .75em; margin: 1.67em 0 }\u005cn\u0022\n+\t\u0022h1, h2, h3, h4, h5, h6, b, strong { font-weight: bolder }\u005cn\u0022\n+\t\u0022blockquote { margin-left: 40px; margin-right: 40px }\u005cn\u0022\n+\t\u0022i, cite, em, var, address { font-style: italic }\u005cn\u0022\n+\t\u0022 pre, tt, code, kbd, samp { font-family: monospace }\u005cn\u0022\n+\t\u0022pre { white-space: pre }\u005cn\u0022\n+\t\u0022button, textarea, input, select { display: inline-block }\u005cn\u0022\n+\t\u0022big { font-size: 1.17em }\u005cn\u0022\n+\t\u0022small, sub, sup { font-size: .83em }\u005cn\u0022\n+\t\u0022sub { vertical-align: sub }\u005cn\u0022\n+\t\u0022sup { vertical-align: super }\u005cn\u0022\n+\t\u0022table { border-spacing: 2px; padding-top: 2px; padding-left: 2px; padding-bottom: 2px; padding-right: 2px; margin-top: 2px; margin-bottom: 2px; margin-left: 2px; margin-right: 2px }\u005cn\u0022\n+\t\u0022thead, tbody, tfoot { vertical-align: middle }\u005cn\u0022\n+\t\u0022td, th, tr { vertical-align: inherit; width: auto; padding-top: 2px; padding-left: 2px; padding-bottom: 2px; padding-right: 2px; margin-top: 2px; margin-bottom: 2px; margin-left: 2px; margin-right: 2px }\u005cn\u0022\n+\t\u0022s, strike, del { text-decoration: line-through }\u005cn\u0022\n+\t\u0022hr { border: 1px inset }\u005cn\u0022\n+\t\u0022ol, ul, dir, menu, dd { margin-left: 40px }\u005cn\u0022\n+\t\u0022ol { list-style-type: decimal }\u005cn\u0022\n+\t\u0022ol ul, ul ol, ul ul, ol ol { margin-top: 0; margin-bottom: 0 }\u005cn\u0022\n+\t\u0022u, ins { text-decoration: underline }\u005cn\u0022\n+\t\u0022br:before { content: \u005c\u0022A\u005c\u0022; white-space: pre-line }\u005cn\u0022\n+\t\u0022center { text-align: center }\u005cn\u0022\n+\t\u0022:link, :visited { text-decoration: underline }\u005cn\u0022\n+\t\u0022:focus { outline: thin dotted invert }\u005cn\u0022\n+\n+\t\u0022BDO[DIR\u003d\u005c\u0022ltr\u005c\u0022] { direction: ltr; unicode-bidi: bidi-override }\u0022\n+\t\u0022BDO[DIR\u003d\u005c\u0022rtl\u005c\u0022] { direction: rtl; unicode-bidi: bidi-override }\u0022\n+\n+\t\u0022*[DIR\u003d\u005c\u0022ltr\u005c\u0022] { direction: ltr; unicode-bidi: embed }\u0022\n+\t\u0022*[DIR\u003d\u005c\u0022rtl\u005c\u0022] { direction: rtl; unicode-bidi: embed }\u0022\n+\n+\t\u0022@media print {\u0022\n+\t\u0022 h1 { page-break-before: always }\u005cn\u0022\n+\t\u0022 h1, h2, h3, h4, h5, h6 { page-break-after: avoid }\u005cn\u0022\n+\t\u0022 ul, ol, dl { page-break-before: avoid }\u005cn\u0022\n+\t\u0022}\u005cn\u0022\n+;\n+\n+\n+\n+static int\n+lhp_clean_atr(lws_dll2_t *d, void *user)\n+{\n+\tlhp_atr_t *atr \u003d lws_container_of(d, lhp_atr_t, list);\n+\n+\tlws_dll2_remove(d);\n+\tlws_free(atr);\n+\n+\treturn 0;\n+}\n+\n+static void\n+lhp_clean_level(lhp_pstack_t *ps)\n+{\n+\tlws_dll2_foreach_safe(\u0026ps-\u003eatr, NULL, lhp_clean_atr);\n+\tlws_dll2_remove(\u0026ps-\u003elist);\n+\n+\tlws_free(ps);\n+}\n+\n+int\n+lws_lhp_construct(lhp_ctx_t *ctx, lhp_callback cb, void *user,\n+\t\t const lws_surface_info_t *ic)\n+{\n+\tlhp_pstack_t *ps \u003d lws_zalloc(sizeof(*ps), __func__);\n+\n+\tif (!ps)\n+\t\treturn 1;\n+\n+\tmemset(ctx, 0, sizeof(*ctx) - sizeof(ctx-\u003ebuf));\n+\tctx-\u003euser\t\t\u003d user;\n+\tctx-\u003eic\t\t\t\u003d *ic;\n+\n+\t/*\n+\t * these are done implicitly by the memset above\n+\t * ctx-\u003estate\t\t\t\u003d LHPS_INIT;\n+\t * ctx-\u003esp\t\t\t\u003d 0;\n+\t */\n+\n+\tps-\u003ecb\t\t\t\u003d cb;\n+\tlws_dll2_add_tail(\u0026ps-\u003elist, \u0026ctx-\u003estack);\n+\n+\treturn 0;\n+}\n+\n+static int\n+lhp_clean_stack(lws_dll2_t *d, void *user)\n+{\n+\tlhp_pstack_t *ps \u003d lws_container_of(d, lhp_pstack_t, list);\n+\n+\tlhp_clean_level(ps);\n+\treturn 0;\n+}\n+\n+static const lws_fx_t c_254\u003d { 2,54000000 }, c_10 \u003d { 10,0 },\n+\t\t\t c_72 \u003d { 72,0 }, c_6 \u003d { 6,0 }, c_100 \u003d { 100,0 };\n+\n+/*\n+ * We need to go backward until we reach an absolute length for the reference\n+ * axis, then base off that and go forward applying relative operations (like %)\n+ * on it in order.\n+ */\n+\n+static int\n+lws_css_compute_cascaded_length(lhp_ctx_t *ctx, int ref, lhp_pstack_t *ps,\n+\t\t\t\tlws_fx_t *t1)\n+{\n+\tlhp_pstack_t *psb \u003d ps, *psmap[20];\n+\tconst struct lcsp_atr *atrmap[20];\n+\tlws_fx_t t2;\n+\tint amp \u003d 0;\n+\n+\tdo {\n+\t\tconst struct lcsp_atr *a;\n+\n+\t\tpsb \u003d lws_css_get_parent_block(ctx, psb);\n+\t\tif (!psb)\n+\t\t\tbreak;\n+\n+\t\ta \u003d (ref \u003d\u003d LWS_LHPREF_WIDTH) ? psb-\u003ecss_width : psb-\u003ecss_height;\n+\t\tif (!a)\n+\t\t\t/* skip levels that don't change it */\n+\t\t\tcontinue;\n+\n+\t\tif (amp + 1 \u003d\u003d LWS_ARRAY_SIZE(atrmap))\n+\t\t\t/* uhh... */\n+\t\t\tbreak;\n+\n+\t\tpsmap[amp] \u003d psb;\n+\t\tatrmap[amp++] \u003d a;\n+\n+\t\tif (a-\u003eunit \u003d\u003d LCSP_UNIT_LENGTH_PERCENT ||\n+\t\t a-\u003eunit \u003d\u003d LCSP_UNIT_ANGLE_REL_DEG ||\n+\t\t a-\u003eunit \u003d\u003d LCSP_UNIT_NONE)\n+\t\t\t/* need earlier info to compute... keep going back */\n+\t\t\tcontinue;\n+\n+\t\tbreak;\n+\t} while (1);\n+\n+\t/*\n+\t * We have the path back through the elements to the first\n+\t * absolute one\n+\t */\n+\n+\twhile (amp-- \u003e 0) {\n+\t\tif (atrmap[amp]-\u003eunit !\u003d LCSP_UNIT_LENGTH_PERCENT) {\n+\t\t\t*t1 \u003d *lws_csp_px(atrmap[amp], psmap[amp]);\n+\t\t} else\n+\t\t\tif (amp)\n+\t\t\t\tlws_fx_div(t1,\n+\t\t\t\t\tlws_fx_mul(\u0026t2, \u0026atrmap[amp]-\u003eu.i, t1),\n+\t\t\t\t\t\t\t\t\t\u0026c_100);\n+\t}\n+\n+\treturn 0;\n+}\n+\n+const lws_fx_t *\n+lws_csp_px(const lcsp_atr_t *a, lhp_pstack_t *ps)\n+{\n+\tlhp_ctx_t *ctx \u003d lws_container_of(ps-\u003elist.owner, lhp_ctx_t, stack);\n+\tconst lws_display_font_t *f \u003d ps-\u003efont;\n+\tlws_fx_t t1, t2, t3;\n+\tint ref;\n+\n+\tif (!a)\n+\t\treturn NULL;\n+\n+\tref \u003d lhp_prop_axis(a);\n+\n+\tswitch (a-\u003eunit) {\n+\tcase LCSP_UNIT_LENGTH_EM:\n+\t\treturn lws_fx_mul((lws_fx_t *)\u0026a-\u003er, \u0026a-\u003eu.i, \u0026f-\u003eem);\n+\n+\tcase LCSP_UNIT_LENGTH_EX:\n+\t\treturn lws_fx_mul((lws_fx_t *)\u0026a-\u003er, \u0026a-\u003eu.i, \u0026f-\u003eex);\n+\n+\tcase LCSP_UNIT_LENGTH_IN:\t/* (inches * 2.54 * hwmm) / hwpx */\n+\t\tif (ref \u003d\u003d LWS_LHPREF_NONE)\n+\t\t\tbreak;\n+\t\treturn lws_fx_div((lws_fx_t *)\u0026a-\u003er, lws_fx_mul(\u0026t2,\n+\t\t\tlws_fx_mul(\u0026t3, \u0026a-\u003eu.i, \u0026c_254),\n+\t\t\t\t\u0026ctx-\u003eic.wh_mm[ref]), \u0026ctx-\u003eic.wh_px[ref]);\n+\n+\tcase LCSP_UNIT_LENGTH_CM:\t/* (cm * 10 * hwmm) / hwpx */\n+\t\tif (ref \u003d\u003d LWS_LHPREF_NONE)\n+\t\t\tbreak;\n+\t\treturn lws_fx_div((lws_fx_t *)\u0026a-\u003er,\n+\t\t\t\tlws_fx_mul(\u0026t2,\n+\t\t\t\t\tlws_fx_mul(\u0026t3, \u0026a-\u003eu.i, \u0026c_10),\n+\t\t\t\t\t\u0026ctx-\u003eic.wh_mm[ref]), \u0026ctx-\u003eic.wh_px[ref]);\n+\tcase LCSP_UNIT_LENGTH_MM:\t/* (mm * hwmm) / hwpx */\n+\t\tif (ref \u003d\u003d LWS_LHPREF_NONE)\n+\t\t\tbreak;\n+\t\treturn lws_fx_div((lws_fx_t *)\u0026a-\u003er, lws_fx_mul(\u0026t2,\n+\t\t\t\t\u0026a-\u003eu.i, \u0026ctx-\u003eic.wh_mm[ref]), \u0026ctx-\u003eic.wh_px[ref]);\n+\n+\tcase LCSP_UNIT_LENGTH_PT:\t/* ((pt * 2.54 * hwmm) / hwpx ) / 72 */\n+\t\tif (ref \u003d\u003d LWS_LHPREF_NONE)\n+\t\t\tbreak;\n+\t\treturn lws_fx_div((lws_fx_t *)\u0026a-\u003er, lws_fx_div(\u0026t1,\n+\t\t\t lws_fx_mul(\u0026t2, lws_fx_mul(\u0026t3,\n+\t\t\t\t\t \u0026a-\u003eu.i, \u0026c_254),\n+\t\t\t\t\t \u0026ctx-\u003eic.wh_mm[ref]),\n+\t\t\t\t\t \u0026ctx-\u003eic.wh_px[ref]), \u0026c_72);\n+\n+\tcase LCSP_UNIT_LENGTH_PC:\t/* ((pc * 2.54 * hwmm) / hwpx ) / 6 */\n+\t\tif (ref \u003d\u003d LWS_LHPREF_NONE)\n+\t\t\tbreak;\n+\t\treturn lws_fx_div((lws_fx_t *)\u0026a-\u003er, lws_fx_div(\u0026t1,\n+\t\t\t\tlws_fx_mul(\u0026t2, lws_fx_mul(\u0026t3,\n+\t\t\t\t\t\u0026a-\u003eu.i, \u0026c_254), \u0026ctx-\u003eic.wh_mm[ref]),\n+\t\t\t\t\t\t \u0026ctx-\u003eic.wh_px[ref]), \u0026c_6);\n+\tcase LCSP_UNIT_LENGTH_PX:\t/* px */\n+\t\treturn \u0026a-\u003eu.i;\n+\n+\tcase LCSP_UNIT_LENGTH_PERCENT:\t/* (percent * psb-\u003ew) / 100 */\n+\t\tif (ref \u003d\u003d LWS_LHPREF_NONE)\n+\t\t\tbreak;\n+\n+\t\tt1.whole \u003d 0;\n+\t\tt1.frac \u003d 0;\n+\n+\t\tlws_css_compute_cascaded_length(ctx, ref, ps, \u0026t1);\n+\n+\t\treturn lws_fx_div((lws_fx_t *)\u0026a-\u003er,\n+\t\t\t\tlws_fx_mul(\u0026t2, \u0026a-\u003eu.i, \u0026t1), \u0026c_100);\n+\n+\tdefault:\n+\t\tbreak;\n+\t}\n+\n+\treturn \u0026a-\u003eu.i;\n+}\n+\n+static lhp_atr_t *\n+lhp_atr_new(lhp_ctx_t *ctx, size_t name_len, size_t value_len)\n+{\n+\tlhp_pstack_t *ps \u003d lws_container_of(ctx-\u003estack.tail, lhp_pstack_t, list);\n+\n+\t/* create the element name attribute */\n+\tlhp_atr_t *a \u003d lws_malloc(sizeof(*a) + name_len + 1 + value_len + 1,\n+\t\t\t\t \u0022html_elem_atr\u0022);\n+\tsize_t n;\n+\n+\tif (!a)\n+\t\treturn NULL;\n+\n+\tif (!ps-\u003eatr.count) {\n+\t\t/* only check the tag string, not the attributes */\n+\t\tctx-\u003eu.f.void_element \u003d 0;\n+\n+\t\t/*\n+\t\t * mark ps that are elements that contain others for layout as\n+\t\t * being the parent block\n+\t\t */\n+\t\tif ((name_len \u003d\u003d 4 \u0026\u0026 !strncmp(ctx-\u003ebuf, \u0022body\u0022, 4)) ||\n+\t\t (name_len \u003d\u003d 3 \u0026\u0026 !strncmp(ctx-\u003ebuf, \u0022div\u0022, 3)))\n+\t\t\tps-\u003eis_block \u003d 1;\n+\n+\t\tfor (n \u003d 0; n \u003c LWS_ARRAY_SIZE(void_elems); n++)\n+\t\t\tif (ctx-\u003enpos \u003d\u003d void_elems_lens[n] \u0026\u0026\n+\t\t\t !strncmp(void_elems[n], ctx-\u003ebuf, (size_t)ctx-\u003enpos))\n+\t\t\t\tctx-\u003eu.f.void_element \u003d 1;\n+\t}\n+\n+\tlws_dll2_clear(\u0026a-\u003elist);\n+\ta-\u003ename_len \u003d name_len;\n+\ta-\u003evalue_len \u003d value_len;\n+\tctx-\u003ebuf[ctx-\u003enpos] \u003d '\u005c0';\n+\tmemcpy(\u0026a[1], ctx-\u003ebuf, (unsigned int)ctx-\u003enpos + 1u);\n+\t*(((uint8_t *)\u0026a[1]) + name_len) \u003d '\u005c0';\n+\tlws_dll2_add_tail(\u0026a-\u003elist, \u0026ps-\u003eatr);\n+\n+\tctx-\u003enpos \u003d 0;\n+\n+\treturn a;\n+}\n+\n+static int\n+hspace(uint8_t c)\n+{\n+\treturn c \u003d\u003d ' ' || c \u003d\u003d 9 || c \u003d\u003d 10 || c \u003d\u003d 12 || c \u003d\u003d 13;\n+}\n+\n+void\n+lhp_uni_emit(lhp_ctx_t *ctx)\n+{\n+\t/* emit */\n+\tif (ctx-\u003etemp \u003c\u003d 0x7f) {\n+\t\tctx-\u003ebuf[ctx-\u003enpos++] \u003d (char)(ctx-\u003etemp \u0026 0x7f);\n+\t\treturn;\n+\t}\n+\tif (ctx-\u003etemp \u003c\u003d 0x7ff) {\n+\t\tctx-\u003ebuf[ctx-\u003enpos++] \u003d (char)(0xc0 | ((uint8_t)(ctx-\u003etemp \u003e\u003e 6) \u0026 0x1f));\n+\t\tgoto a;\n+\t}\n+\tif (ctx-\u003etemp \u003c\u003d 0xffff) {\n+\t\tctx-\u003ebuf[ctx-\u003enpos++] \u003d (char)(0xe0 | ((uint8_t)(ctx-\u003etemp \u003e\u003e 12) \u0026 0xf));\n+\t\tgoto b;\n+\t}\n+\tif (ctx-\u003etemp \u003c\u003d 0x10ffff) {\n+\t\tctx-\u003ebuf[ctx-\u003enpos++] \u003d (char)(0xf0 | ((uint8_t)(ctx-\u003etemp \u003e\u003e 18) \u0026 7));\n+\t\tctx-\u003ebuf[ctx-\u003enpos++] \u003d (char)(0x80 | ((uint8_t)(ctx-\u003etemp \u003e\u003e 12) \u0026 0x3f));\n+\t}\n+b:\n+\tctx-\u003ebuf[ctx-\u003enpos++] \u003d (char)(0x80 | ((uint8_t)(ctx-\u003etemp \u003e\u003e 6) \u0026 0x3f));\n+a:\n+\tctx-\u003ebuf[ctx-\u003enpos++] \u003d (char)(0x80 | ((uint8_t)(ctx-\u003etemp) \u0026 0x3f));\n+}\n+\n+static int\n+lcsp_append_cssval_int(lhp_ctx_t *ctx)\n+{\n+\tlcsp_atr_t *atr \u003d lwsac_use_zero(\u0026ctx-\u003ecssac, sizeof(*atr), LHP_AC_GRANULE);\n+\tif (!atr)\n+\t\treturn 1;\n+\n+\t/* add this prop value atr to the def */\n+\n+\t//lwsl_err(\u0022%s: tf %d.%u\u005cn\u0022, __func__, ctx-\u003etf.whole, ctx-\u003etf.frac);\n+\tatr-\u003eu.i \u003d ctx-\u003etf;\n+\tatr-\u003eunit \u003d ctx-\u003eunit;\n+\n+\tlws_dll2_add_tail(\u0026atr-\u003elist, \u0026ctx-\u003edef-\u003eatrs);\n+\n+\treturn 0;\n+}\n+\n+static int\n+lcsp_append_cssval_color(lhp_ctx_t *ctx)\n+{\n+\tlcsp_atr_t *atr \u003d lwsac_use_zero(\u0026ctx-\u003ecssac, sizeof(*atr), LHP_AC_GRANULE);\n+\tunsigned int r, g, b, a \u003d 0xff;\n+\n+\tif (!atr)\n+\t\treturn 1;\n+\n+\t/* add this prop value atr to the def */\n+\n+\tswitch (ctx-\u003etemp_count) {\n+\tcase 3:\n+\t\tr \u003d (ctx-\u003etemp \u003e\u003e 8) \u0026 0xf;\n+\t\tg \u003d (ctx-\u003etemp \u003e\u003e 4) \u0026 0xf;\n+\t\tb \u003d ctx-\u003etemp \u0026 0xf;\n+\t\tatr-\u003eu.rgba \u003d (a \u003c\u003c 24) | (b \u003c\u003c 20) | (b \u003c\u003c 16) |\n+\t\t\t\t(g \u003c\u003c 12) | (g \u003c\u003c 8) | (r \u003c\u003c 4) | r;\n+\t\tbreak;\n+\tcase 4:\n+\t\tr \u003d (ctx-\u003etemp \u003e\u003e 12) \u0026 0xf;\n+\t\tg \u003d (ctx-\u003etemp \u003e\u003e 8) \u0026 0xf;\n+\t\tb \u003d (ctx-\u003etemp \u003e\u003e 4) \u0026 0xf;\n+\t\ta \u003d ctx-\u003etemp \u0026 0xf;\n+\t\tatr-\u003eu.rgba \u003d (a \u003c\u003c 28) | (a \u003c\u003c 24) | (b \u003c\u003c 20) | (b \u003c\u003c 16) |\n+\t\t\t\t(g \u003c\u003c 12) | (g \u003c\u003c 8) | (r \u003c\u003c 4) | r;\n+\t\tbreak;\n+\tcase 6:\n+\t\tr \u003d (ctx-\u003etemp \u003e\u003e 16) \u0026 0xff;\n+\t\tg \u003d (ctx-\u003etemp \u003e\u003e 8) \u0026 0xff;\n+\t\tb \u003d (ctx-\u003etemp) \u0026 0xff;\n+\t\tatr-\u003eu.rgba \u003d (a \u003c\u003c 24) | (b \u003c\u003c 16) | (g \u003c\u003c 8) | r;\n+\t\tbreak;\n+\tcase 8:\n+\t\tr \u003d (ctx-\u003etemp \u003e\u003e 24) \u0026 0xff;\n+\t\tg \u003d (ctx-\u003etemp \u003e\u003e 16) \u0026 0xff;\n+\t\tb \u003d (ctx-\u003etemp \u003e\u003e 8) \u0026 0xff;\n+\t\ta \u003d (ctx-\u003etemp) \u0026 0xff;\n+\t\tatr-\u003eu.rgba \u003d (a \u003c\u003c 24) | (b \u003c\u003c 16) | (g \u003c\u003c 8) | r;\n+\t\tbreak;\n+\t}\n+\n+\t// lwsl_err(\u0022%s: %d, 0x%08x, 0x%08x\u005cn\u0022, __func__, ctx-\u003etemp_count, ctx-\u003etemp, atr-\u003eu.rgba);\n+\n+\tatr-\u003eunit \u003d LCSP_UNIT_RGBA;\n+\n+\tlws_dll2_add_tail(\u0026atr-\u003elist, \u0026ctx-\u003edef-\u003eatrs);\n+\n+\tctx-\u003eu.f.color \u003d 0;\n+\tctx-\u003etemp \u003d 0;\n+\tctx-\u003etemp_count \u003d 0;\n+\n+\treturn 0;\n+}\n+\n+static int\n+lcsp_append_cssval_string(lhp_ctx_t *ctx)\n+{\n+\tlcsp_atr_t *atr;\n+\tchar *v, *c \u003d \u0026ctx-\u003ebuf[0];\n+\n+\tif (c[0] \u003d\u003d '\u005c\u0022' || c[0] \u003d\u003d '\u005c'') {\n+\t\tc++;\n+\t\tctx-\u003enpos--;\n+\t}\n+\tif (ctx-\u003enpos \u0026\u0026 (c[ctx-\u003enpos - 1] \u003d\u003d '\u005c\u0022' || c[ctx-\u003enpos - 1] \u003d\u003d '\u005c''))\n+\t\tctx-\u003enpos--;\n+\n+\tatr \u003d lwsac_use_zero(\u0026ctx-\u003ecssac, sizeof(*atr) + (size_t)ctx-\u003enpos + 1u,\n+\t\t\t LHP_AC_GRANULE);\n+\tif (!atr)\n+\t\treturn 1;\n+\n+\tv \u003d (char *)\u0026atr[1];\n+\tatr-\u003evalue_len \u003d (size_t)ctx-\u003enpos;\n+\tmemcpy(v, c, (size_t)ctx-\u003enpos);\n+\tv[ctx-\u003enpos] \u003d '\u005c0';\n+\n+\t//lwsl_notice(\u0022%s: %s\u005cn\u0022, __func__, v);\n+\n+\tlws_dll2_add_tail(\u0026atr-\u003elist, \u0026ctx-\u003edef-\u003eatrs);\n+\n+\treturn 0;\n+}\n+\n+static int\n+lws_css_cascade_atr_match(lhp_ctx_t *ctx, const char *tag, size_t tag_len)\n+{\n+\tlws_start_foreach_dll(struct lws_dll2 *, q, ctx-\u003ecss.head) {\n+\t\tlcsp_stanza_t *stz \u003d lws_container_of(q, lcsp_stanza_t, list);\n+\n+\t\t/* ... does this stanza mention our name? */\n+\n+\t\tlws_start_foreach_dll(struct lws_dll2 *, z, stz-\u003enames.head) {\n+\t\t\tlcsp_names_t *nm \u003d lws_container_of(z, lcsp_names_t,\n+\t\t\t\t\t\t\t list);\n+\t\t\tconst char *p \u003d (const char *)\u0026nm[1];\n+\t\t\tsize_t nl \u003d nm-\u003ename_len;\n+\n+\t\t\tif (nl \u0026\u0026 *p \u003d\u003d '.') { /* match .mycss as mycss */\n+\t\t\t\tp++;\n+\t\t\t\tnl--;\n+\t\t\t}\n+\n+\t\t\tif (nl \u003d\u003d tag_len \u0026\u0026 !memcmp(p, tag, tag_len)) {\n+\n+\t\t\t\tlcsp_stanza_ptr_t *sp \u003d lwsac_use_zero(\n+\t\t\t\t\t\t\u0026ctx-\u003ecascadeac,\n+\t\t\t\t\t\tsizeof(*sp), LHP_AC_GRANULE);\n+\t\t\t\tif (!sp)\n+\t\t\t\t\treturn 1;\n+\n+\t\t\t\tsp-\u003estz \u003d stz;\n+\t\t\t\tlws_dll2_add_tail(\u0026sp-\u003elist,\n+\t\t\t\t\t\t \u0026ctx-\u003eactive_stanzas);\n+\t\t\t\tbreak;\n+\t\t\t}\n+\n+\t\t} lws_end_foreach_dll(z);\n+\n+\t} lws_end_foreach_dll(q);\n+\n+\treturn 0;\n+}\n+\n+const char *\n+lws_html_get_atr(lhp_pstack_t *ps, const char *aname, size_t aname_len)\n+{\n+\t/* look for src\u003d attribute */\n+\tlws_start_foreach_dll(struct lws_dll2 *, p,\n+\t\t\t lws_dll2_get_head(\u0026ps-\u003eatr)) {\n+\t\tconst lhp_atr_t *at \u003d lws_container_of(p,\n+\t\t\t\t\t\tlhp_atr_t, list);\n+\t\tconst char *ats \u003d (const char *)\u0026at[1];\n+\n+\t\tif (at-\u003ename_len \u003d\u003d aname_len \u0026\u0026 !strcmp(ats, aname))\n+\t\t\treturn ats + aname_len + 1;\n+\n+\t} lws_end_foreach_dll(p);\n+\n+\treturn NULL;\n+}\n+\n+/*\n+ * Produce an ordered list of css stanzas that apply to the current html\n+ * parsing context, accounting for class\u003d\u0022xxx\u0022 at each level\n+ */\n+\n+static int\n+lws_css_cascade(lhp_ctx_t *ctx)\n+{\n+\tlws_dll2_owner_clear(\u0026ctx-\u003eactive_stanzas);\n+\tlwsac_free(\u0026ctx-\u003ecascadeac);\n+\tlws_dll2_owner_clear(\u0026ctx-\u003eactive_atr);\n+\tlwsac_free(\u0026ctx-\u003epropatrac);\n+\tctx-\u003ein_body \u003d 0;\n+\n+\t/* let's proceed through the html element stack that applies */\n+\n+\tlws_start_foreach_dll(struct lws_dll2 *, p, ctx-\u003estack.head) {\n+\t\tlhp_pstack_t *ps \u003d lws_container_of(p, lhp_pstack_t, list);\n+\n+\t\t/*\n+\t\t * if there is a css definition for the html entity at this\n+\t\t * stack level, add its stanza to the results\n+\t\t */\n+\n+\t\tlws_start_foreach_dll(struct lws_dll2 *, ha, ps-\u003eatr.head) {\n+\t\t\tlhp_atr_t *a \u003d lws_container_of(ha, lhp_atr_t, list);\n+\t\t\tstruct lws_tokenize ts;\n+\n+\t\t\tmemset(\u0026ts, 0, sizeof(ts));\n+\n+\t\t\tif (ha \u003d\u003d ps-\u003eatr.head) {\n+\t\t\t\tts.start \u003d (const char *)\u0026a[1];\n+\t\t\t\tts.len \u003d a-\u003ename_len;\n+\t\t\t}\n+\n+\n+\t\t\tif (a-\u003ename_len \u003d\u003d 5 \u0026\u0026\n+\t\t\t !strcmp((const char *)\u0026a[1], \u0022class\u0022)) {\n+\t\t\t\tts.start \u003d ((const char *)\u0026a[1]) + 5 + 1;\n+\t\t\t\tts.len \u003d a-\u003evalue_len;\n+\t\t\t}\n+\n+\t\t\tdo {\n+\t\t\t\tts.e \u003d (int8_t)lws_tokenize(\u0026ts);\n+\t\t\t\tif (ts.e \u003d\u003d LWS_TOKZE_TOKEN) {\n+\n+\t\t\t\t\tif (ha \u003d\u003d ps-\u003eatr.head \u0026\u0026\n+\t\t\t\t\t ts.token_len \u003d\u003d 4 \u0026\u0026\n+\t\t\t\t\t !memcmp(ts.token, \u0022body\u0022, 4))\n+\t\t\t\t\t\tctx-\u003ein_body \u003d 1;\n+\n+\t\t\t\t\t/*\n+\t\t\t\t\t * let's look through the css stanzas\n+\t\t\t\t\t * for a tag match\n+\t\t\t\t\t */\n+\n+\t\t\t\t\tif (lws_css_cascade_atr_match(ctx,\n+\t\t\t\t\t\t\tts.token, ts.token_len))\n+\t\t\t\t\t\treturn 1;\n+\t\t\t\t}\n+\n+\t\t\t} while (ts.e \u003e 0);\n+\n+\t\t} lws_end_foreach_dll(ha);\n+\n+\t\t/*\n+\t\t * ... fill layout-related CSS lookups into the element\n+\t\t * stack item... these are all pointers to the attribute\n+\t\t * not necessarily computed scalars. Eg lws_csp_px() can be\n+\t\t * used later to resolve atr like 50% to pixel values.\n+\t\t */\n+\n+\t\tps-\u003ecss_position \u003d lws_css_cascade_get_prop_atr(ctx, LCSP_PROP_POSITION);\n+\t\tps-\u003ecss_width \u003d lws_css_cascade_get_prop_atr(ctx, LCSP_PROP_WIDTH);\n+\t\tps-\u003ecss_height \u003d lws_css_cascade_get_prop_atr(ctx, LCSP_PROP_HEIGHT);\n+\t\tps-\u003ecss_display \u003d lws_css_cascade_get_prop_atr(ctx, LCSP_PROP_DISPLAY);\n+\n+\t\tps-\u003ecss_border_radius[0] \u003d lws_css_cascade_get_prop_atr(ctx, LCSP_PROP_BORDER_TOP_LEFT_RADIUS);\n+\t\tps-\u003ecss_border_radius[1] \u003d lws_css_cascade_get_prop_atr(ctx, LCSP_PROP_BORDER_TOP_RIGHT_RADIUS);\n+\t\tps-\u003ecss_border_radius[2] \u003d lws_css_cascade_get_prop_atr(ctx, LCSP_PROP_BORDER_BOTTOM_LEFT_RADIUS);\n+\t\tps-\u003ecss_border_radius[3] \u003d lws_css_cascade_get_prop_atr(ctx, LCSP_PROP_BORDER_BOTTOM_RIGHT_RADIUS);\n+\n+\t\tps-\u003ecss_background_color \u003d lws_css_cascade_get_prop_atr(ctx, LCSP_PROP_BACKGROUND_COLOR);\n+\t\tps-\u003ecss_color \u003d lws_css_cascade_get_prop_atr(ctx, LCSP_PROP_COLOR);\n+\n+\t\tps-\u003ecss_pos[CCPAS_TOP] \u003d lws_css_cascade_get_prop_atr(ctx, LCSP_PROP_TOP);\n+\t\tps-\u003ecss_pos[CCPAS_RIGHT] \u003d lws_css_cascade_get_prop_atr(ctx, LCSP_PROP_RIGHT);\n+\t\tps-\u003ecss_pos[CCPAS_BOTTOM] \u003d lws_css_cascade_get_prop_atr(ctx, LCSP_PROP_BOTTOM);\n+\t\tps-\u003ecss_pos[CCPAS_LEFT] \u003d lws_css_cascade_get_prop_atr(ctx, LCSP_PROP_LEFT);\n+\n+\t\tps-\u003ecss_margin[CCPAS_TOP] \u003d lws_css_cascade_get_prop_atr(ctx, LCSP_PROP_MARGIN_TOP);\n+\t\tps-\u003ecss_margin[CCPAS_RIGHT] \u003d lws_css_cascade_get_prop_atr(ctx, LCSP_PROP_MARGIN_RIGHT);\n+\t\tps-\u003ecss_margin[CCPAS_BOTTOM] \u003d lws_css_cascade_get_prop_atr(ctx, LCSP_PROP_MARGIN_BOTTOM);\n+\t\tps-\u003ecss_margin[CCPAS_LEFT] \u003d lws_css_cascade_get_prop_atr(ctx, LCSP_PROP_MARGIN_LEFT);\n+\n+\t\tps-\u003ecss_padding[CCPAS_TOP] \u003d lws_css_cascade_get_prop_atr(ctx, LCSP_PROP_PADDING_TOP);\n+\t\tps-\u003ecss_padding[CCPAS_RIGHT] \u003d lws_css_cascade_get_prop_atr(ctx, LCSP_PROP_PADDING_RIGHT);\n+\t\tps-\u003ecss_padding[CCPAS_BOTTOM] \u003d lws_css_cascade_get_prop_atr(ctx, LCSP_PROP_PADDING_BOTTOM);\n+\t\tps-\u003ecss_padding[CCPAS_LEFT] \u003d lws_css_cascade_get_prop_atr(ctx, LCSP_PROP_PADDING_LEFT);\n+\n+\t} lws_end_foreach_dll(p);\n+\n+\treturn 0;\n+}\n+\n+void\n+lws_lhp_destruct(lhp_ctx_t *ctx)\n+{\n+\tif (ctx-\u003ebase_url) {\n+\t\tfree((void *)ctx-\u003ebase_url);\n+\t\tctx-\u003ebase_url \u003d NULL;\n+\t}\n+\tlws_dll2_foreach_safe(\u0026ctx-\u003estack, NULL, lhp_clean_stack);\n+\tlws_dll2_owner_clear(\u0026ctx-\u003eactive_stanzas);\n+\tlws_dll2_owner_clear(\u0026ctx-\u003eactive_atr);\n+\tlwsac_free(\u0026ctx-\u003epropatrac);\n+\tlwsac_free(\u0026ctx-\u003ecascadeac);\n+\tlwsac_free(\u0026ctx-\u003ecssac);\n+}\n+\n+void\n+lws_lhp_tag_dlo_id(lhp_ctx_t *ctx, lhp_pstack_t *ps, lws_dlo_t *dlo)\n+{\n+\tconst char *pname;\n+\n+\t/* Deal with ID matching */\n+\n+\tpname \u003d lws_html_get_atr(ps, \u0022id\u0022, 2);\n+\tif (!pname)\n+\t\treturn;\n+\n+\tlws_start_foreach_dll(struct lws_dll2 *, d, lws_dll2_get_head(ctx-\u003eids)) {\n+\t\tlws_display_id_t *id \u003d lws_container_of(d, lws_display_id_t, list);\n+\n+\t\tif (!strcmp(pname, id-\u003eid)) {\n+\t\t\tdlo-\u003eid \u003d id;\n+\t\t\tid-\u003eexists \u003d 1;\n+\t\t\tlwsl_debug(\u0022%s: %s tagged\u005cn\u0022, __func__, pname);\n+\t\t\treturn;\n+\t\t}\n+\n+\t} lws_end_foreach_dll(d);\n+}\n+\n+lws_stateful_ret_t\n+lws_lhp_parse(lhp_ctx_t *ctx, const uint8_t **buf, size_t *len)\n+{\n+\tlhp_pstack_t *ps1, *ps \u003d lws_container_of(ctx-\u003estack.tail,\n+\t\t\t\t\t\t lhp_pstack_t, list);\n+\tstruct lws_context *cx \u003d (struct lws_context *)ctx-\u003euser1;\n+\tlws_dl_rend_t *drt \u003d (lws_dl_rend_t *)ctx-\u003euser;\n+\tlws_stateful_ret_t r;\n+\tconst uint8_t *rbuf;\n+\tsize_t rsize;\n+\tlhp_atr_t *a;\n+\n+\tif (ctx-\u003eawait_css_done \u0026\u0026 !ctx-\u003eis_css)\n+\t\treturn LWS_SRET_AWAIT_RETRY;\n+\n+\tassert(drt);\n+\n+\tif (!*len \u0026\u0026 ctx-\u003eis_css \u0026\u0026 ctx-\u003eawait_css_done \u0026\u0026 ctx-\u003efinish_css)\n+\t\tgoto finish_css;\n+\n+\twhile (*len) {\n+\t\tuint8_t c \u003d *(*buf)++;\n+\n+\t\t(*len)--;\n+\n+\t\tif (ctx-\u003estate \u003d\u003d LHPS_DO_START_ELEM) {\n+\t\t\t/* we are retrying the inner callback */\n+\t\t\t(*len)++;\n+\t\t\t(*buf)--;\n+\t\t}\n+\n+\t\t// lwsl_notice(\u0022%s: %d, '%c', %02X\u005cn\u0022, __func__, ctx-\u003estate, c, c);\n+\n+\t\tswitch (ctx-\u003estate) {\n+\n+\t\tcase LHPS_INIT:\n+\n+\t\t\t/* default css injection first, then... */\n+\n+\t\t\tctx-\u003estate \u003d LCSPS_CSS_OUTER;\n+\t\t\tctx-\u003eu.f.default_css \u003d 1;\n+\t\t\t/*\n+\t\t\t * recurse (there's no stack usage to speak of) to\n+\t\t\t * do the default css parse first, CSS doesn't have a\n+\t\t\t * way to recurse further.\n+\t\t\t */\n+\t\t\trbuf \u003d (const uint8_t *)default_css;\n+\t\t\trsize \u003d strlen(default_css);\n+\t\t\tr \u003d lws_lhp_parse(ctx, \u0026rbuf, \u0026rsize);\n+\t\t\tif (r \u003e\u003d LWS_SRET_FATAL) {\n+\t\t\t\tlwsl_err(\u0022%s: css parse fail\u005cn\u0022, __func__);\n+\t\t\t\treturn r;\n+\t\t\t}\n+\t\t\tctx-\u003eu.f.default_css \u003d 0;\n+\t\t\tctx-\u003enpos \u003d 0;\n+\t\t\tctx-\u003estate \u003d LHPS_OUTER;\n+\n+\t\t\t/* fallthru */\n+\n+\t\tcase LHPS_OUTER:\n+\t\t\tswitch (c) {\n+\t\t\tcase '\u003c':\n+\t\t\t\tctx-\u003eu.s \u003d 0;\n+\t\t\t\tctx-\u003eu.f.first \u003d 1;\n+\n+\t\t\t\tctx-\u003etag \u003d NULL;\n+\t\t\t\tctx-\u003etag_len \u003d 0;\n+\n+\t\t\t\tctx-\u003estate \u003d LHPS_TAG;\n+\n+\t\t\t\tif (ctx-\u003estack.count \u003d\u003d LHP_MAX_ELEMS_NEST /* sanity */) {\n+\t\t\t\t\tlwsl_err(\u0022%s: MAX_ELEMS_NEST\u005cn\u0022, __func__);\n+\t\t\t\t\tps-\u003ecb(ctx, LHPCB_FAILED);\n+\t\t\t\t\treturn LWS_SRET_FATAL;\n+\n+\t\t\t\t}\n+\n+\t\t\t\tps1 \u003d lws_zalloc(sizeof(*ps1), __func__);\n+\t\t\t\tif (!ps1)\n+\t\t\t\t\tgoto oom;\n+\n+\t\t\t\t/* inherit user and cb to start with */\n+\t\t\t\tps1-\u003euser\t\u003d ps-\u003euser;\n+\t\t\t\tps1-\u003ecb\t\t\u003d ps-\u003ecb;\n+\t\t\t\tlws_dll2_owner_clear(\u0026ps1-\u003eatr);\n+\t\t\t\tlws_dll2_add_tail(\u0026ps1-\u003elist, \u0026ctx-\u003estack);\n+\t\t\t\tps\t\t\u003d ps1;\n+\t\t\t\tbreak;\n+\n+\t\t\tcase '\u0026':\n+\t\t\t\tctx-\u003estate \u003d LHPS_AMP;\n+\t\t\t\tctx-\u003etemp_count \u003d 0;\n+\t\t\t\tcontinue;\n+\n+\t\t\tcase '\u005ct':\n+\t\t\tcase '\u005cn':\n+\t\t\t\tc \u003d ' ';\n+\t\t\t\t/* fallthru */\n+\t\t\tdefault:\n+\t\t\t\tif (c !\u003d ' ' || !ctx-\u003enpos ||\n+\t\t\t\t ctx-\u003ebuf[ctx-\u003enpos - 1] !\u003d ' ')\n+\t\t\t\t\tctx-\u003ebuf[ctx-\u003enpos++] \u003d (char)c;\n+\t\t\t\tbreak;\n+\t\t\t}\n+\n+\t\t\tif (ctx-\u003enpos \u0026\u0026\n+\t\t\t (ctx-\u003estate !\u003d LHPS_OUTER ||\n+\t\t\t ctx-\u003enpos \u003e\u003d LHP_STRING_CHUNK - 4)) {\n+\t\t\t\tif (ctx-\u003ein_body \u0026\u0026 (ctx-\u003enpos !\u003d 1 || ctx-\u003ebuf[0] !\u003d ' ')) {\n+\t\t\t\t\tlws_css_cascade(ctx);\n+\t\t\t\t\tps-\u003ecb(ctx, LHPCB_CONTENT);\n+\t\t\t\t}\n+\t\t\t\tctx-\u003enpos \u003d 0;\n+\t\t\t}\n+\t\t\tbreak;\n+\n+\t\tcase LHPS_TAG:\n+\t\t\tif (c \u003d\u003d '!' \u0026\u0026 ctx-\u003eu.f.first) {\n+\t\t\t\tctx-\u003estate \u003d LHPS_SCOMMENT1;\n+\t\t\t\tctx-\u003eu.f.first \u003d 0;\n+\t\t\t\tbreak;\n+\t\t\t}\n+\n+\t\t\tif (c \u003d\u003d '/' \u0026\u0026 ctx-\u003eu.f.first) {\n+\t\t\t\t/* remove the level we just prepared for this */\n+\t\t\t\tlhp_clean_level(ps);\n+\t\t\t\tps \u003d lws_container_of(ctx-\u003estack.tail,\n+\t\t\t\t\t\t lhp_pstack_t, list);\n+\t\t\t\tctx-\u003eu.f.closing \u003d 1;\n+\t\t\t\tctx-\u003eu.f.first \u003d 0;\n+\t\t\t\tbreak;\n+\t\t\t}\n+\t\t\tctx-\u003eu.f.first \u003d 0;\n+\n+\t\t\t/* it implies the end of the tag name */\n+\n+\t\t\tif (hspace(c) || c \u003d\u003d '/' || c \u003d\u003d '\u003e') {\n+\t\t\t\tif (!ctx-\u003eu.f.tag_used \u0026\u0026 ctx-\u003enpos \u0026\u0026 !ctx-\u003eu.f.closing) {\n+\t\t\t\t\ta \u003d lhp_atr_new(ctx, (size_t)ctx-\u003enpos, 0);\n+\t\t\t\t\tif (!a)\n+\t\t\t\t\t\tgoto oom;\n+\t\t\t\t\tctx-\u003etag \u003d (const char *)\u0026a[1];\n+\t\t\t\t\tctx-\u003etag_len \u003d a-\u003ename_len;\n+\n+\t\t\t\t\tctx-\u003eu.f.tag_used \u003d 1;\n+\n+\t\t\t\t\tif (ctx-\u003etag_len \u003d\u003d 8 \u0026\u0026\n+\t\t\t\t\t !strncasecmp(ctx-\u003ebuf, \u0022!doctype\u0022, 8))\n+\t\t\t\t\t\tctx-\u003eu.f.doctype \u003d 1;\n+\t\t\t\t}\n+\n+\t\t\t\tif (c !\u003d '/' \u0026\u0026 c !\u003d '\u003e') {\n+\n+\t\t\t\t\t/* after that, there may be attributes */\n+\t\t\t\t\tctx-\u003estate \u003d LHPS_ATTRIB;\n+\t\t\t\t\tbreak;\n+\t\t\t\t}\n+\n+\t\t\t\t/* \u003cstyle\u003e trapdoor into inline css parsing */\n+\n+\t\t\t\tif (ctx-\u003eu.f.tag_used \u0026\u0026 c \u003d\u003d '\u003e' \u0026\u0026\n+\t\t\t\t ctx-\u003etag_len \u003d\u003d 5 \u0026\u0026\n+\t\t\t\t !strncasecmp(ctx-\u003ebuf, \u0022style\u0022, 5)) {\n+\t\t\t\t\tctx-\u003enpos \u003d 5;\n+\n+\t\t\t\t\tps-\u003ecb(ctx, LHPCB_ELEMENT_START);\n+\t\t\t\t\tctx-\u003enpos \u003d 0;\n+\t\t\t\t\t// lwsl_warn(\u0022leaving html for css\u005cn\u0022);\n+\t\t\t\t\tctx-\u003estate \u003d LCSPS_CSS_OUTER;\n+\t\t\t\t\tbreak;\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\tif (ctx-\u003eu.f.void_element \u0026\u0026 c \u003d\u003d '/') {\n+\t\t\t\t/* we had something like \u003cbr and then we see a\n+\t\t\t\t * closing / */\n+\t\t\t\tctx-\u003eu.f.closing \u003d 1;\n+\t\t\t\tbreak;\n+\t\t\t}\n+\n+\t\t\tif (c \u003d\u003d '\u003e') {\n+\t\t\t\tctx-\u003estate \u003d LHPS_DO_START_ELEM;\n+\t\t\t\tgoto elem_start;\n+\t\t\t}\n+\n+\t\t\t/* tag names may only contain 0–9, a–z, and A–Z */\n+\n+\t\t\tif ( //ctx-\u003eclosing ||\n+\t\t\t c \u003c '0' ||\n+\t\t\t (c \u003e '9' \u0026\u0026 c \u003c 'A') ||\n+\t\t\t (c \u003e 'Z' \u0026\u0026 c \u003c 'a') ||\n+\t\t\t c \u003e 'z') {\n+\t\t\t\tctx-\u003estate \u003d LHPS_BAD_TAG;\n+\t\t\t\tbreak;\n+\t\t\t}\n+\n+\t\t\t/* collect the tag name */\n+\n+\t\t\tif (!hspace(c))\n+\t\t\t\tctx-\u003ebuf[ctx-\u003enpos++] \u003d (char)c;\n+\t\t\tif (ctx-\u003enpos \u003d\u003d 32) { /* sanity */\n+\t\t\t\tctx-\u003enpos \u003d 0;\n+\t\t\t\tctx-\u003estate \u003d LHPS_BAD_TAG;\n+\t\t\t\tbreak;\n+\t\t\t}\n+\n+\t\t\tbreak;\n+\t\tcase LHPS_BAD_TAG:\n+\t\t\t/* just sit it out until the element end */\n+\t\t\tif (c !\u003d '\u003e')\n+\t\t\t\tbreak;\n+\n+\t\t\tctx-\u003estate \u003d LHPS_DO_START_ELEM;\n+\n+\t\t\t/* fallthru */\n+\n+\t\tcase LHPS_DO_START_ELEM:\n+elem_start:\n+\t\t\t/* present the tag in buf, if any */\n+\t\t\tif (ctx-\u003etag_len)\n+\t\t\t\tmemcpy(ctx-\u003ebuf, ctx-\u003etag, ctx-\u003etag_len);\n+\t\t\tctx-\u003ebuf[ctx-\u003etag_len] \u003d '\u005c0';\n+\t\t\tctx-\u003enpos \u003d (int)ctx-\u003etag_len;\n+\n+\t\t\tif (!ctx-\u003eu.f.closing || ctx-\u003eu.f.void_element) {\n+\t\t\t\tconst char *pname \u003d NULL, *rel \u003d NULL;\n+\t\t\t\tconst struct lcsp_atr *aa \u003d NULL;\n+\t\t\t\tlws_dlo_ss_create_info_t i;\n+\t\t\t\tlws_dlo_image_t u;\n+\t\t\t\tlhp_pstack_t *psb;\n+\t\t\t\tlws_dlo_t *dlo;\n+\t\t\t\tlws_box_t box;\n+\t\t\t\tchar url[128];\n+\n+\t\t\t\tmemset(\u0026i, 0, sizeof(i));\n+\t\t\t\tlws_css_cascade(ctx);\n+\n+\t\t\t\tif (ctx-\u003enpos \u003d\u003d 4 \u0026\u0026 !strncmp(ctx-\u003ebuf, \u0022body\u0022, 4)) {\n+\t\t\t\t\tlws_display_colour_t col \u003d\n+\t\t\t\t\t\tLWSDC_RGBA(255, 255, 255, 255);\n+\n+\t\t\t\t\tif (ps-\u003ecss_background_color \u0026\u0026\n+\t\t\t\t\t ps-\u003ecss_background_color-\u003eunit \u003d\u003d LCSP_UNIT_RGBA)\n+\t\t\t\t\t\tcol \u003d ps-\u003ecss_background_color-\u003eu.rgba;\n+\n+\t\t\t\t\tps-\u003edrt.w \u003d ctx-\u003eic.wh_px[LWS_LHPREF_WIDTH];\n+\t\t\t\t\tif (ps-\u003ecss_width \u0026\u0026\n+\t\t\t\t\t ps-\u003ecss_width-\u003epropval !\u003d LCSP_PROPVAL_AUTO// \u0026\u0026\n+\t\t\t\t\t //lws_fx_comp(lws_csp_px(ps-\u003ecss_width, ps), \u0026box.w) \u003c 0\n+\t\t\t\t\t )\n+\t\t\t\t\t\tps-\u003edrt.w \u003d *lws_csp_px(ps-\u003ecss_width, ps);\n+\n+\t\t\t\t\tps-\u003edrt.h \u003d ctx-\u003eic.wh_px[LWS_LHPREF_HEIGHT];\n+\t\t\t\t\tif (ps-\u003ecss_height \u0026\u0026\n+\t\t\t\t\t ps-\u003ecss_height-\u003epropval !\u003d LCSP_PROPVAL_AUTO) //\u0026\u0026\n+\t\t\t\t\t //lws_fx_comp(lws_csp_px(ps-\u003ecss_height, ps),\n+\t\t\t\t\t\t//\t\t \u0026ps-\u003edrt.h) \u003c 0)\n+\t\t\t\t\t\tps-\u003edrt.h \u003d *lws_csp_px(ps-\u003ecss_height, ps);\n+\n+\t\t\t\t\t/* put a default white body background behind everything */\n+\n+\t\t\t\t\tlws_fx_set(box.x, 0, 0);\n+\t\t\t\t\tlws_fx_set(box.y, 0, 0);\n+\t\t\t\t\tbox.w \u003d ps-\u003edrt.w;\n+\t\t\t\t\tbox.h \u003d ps-\u003edrt.h;\n+\n+\t\t\t\t\tps-\u003edlo \u003d (lws_dlo_t *)lws_display_dlo_rect_new(\n+\t\t\t\t\t\t\tdrt-\u003edl, NULL, \u0026box, 0,\n+\t\t\t\t\t\t\tcol);\n+\n+\t\t\t\t\tps-\u003edlo-\u003eflag_toplevel \u003d 1;\n+\n+\t\t\t\t\tlhp_set_dlo_padding_margin(ps, ps-\u003edlo);\n+\t\t\t\t}\n+\n+\t\t\t\t/* it's a link? */\n+\n+\t\t\t\tif (ctx-\u003enpos \u003d\u003d 4 \u0026\u0026 !strncmp(ctx-\u003ebuf, \u0022link\u0022, 4)) {\n+\t\t\t\t\tpname \u003d lws_html_get_atr(ps, \u0022href\u0022, 4);\n+\t\t\t\t\trel \u003d lws_html_get_atr(ps, \u0022rel\u0022, 3);\n+\n+\t\t\t\t\tif (!rel || strncmp(rel, \u0022stylesheet\u0022, 10))\n+\t\t\t\t\t\tgoto issue_elem_start;\n+\t\t\t\t}\n+\n+\t\t\t\t/* it's an img? */\n+\n+\t\t\t\tif (ctx-\u003enpos \u003d\u003d 3 \u0026\u0026 !strncmp(ctx-\u003ebuf, \u0022img\u0022, 3))\n+\t\t\t\t\tpname \u003d lws_html_get_atr(ps, \u0022src\u0022, 3);\n+\t\t\t\telse {\n+\t\t\t\t\taa \u003d lws_css_cascade_get_prop_atr(ctx,\n+\t\t\t\t\t\tLCSP_PROP_BACKGROUND_IMAGE);\n+\n+\t\t\t\t\tif (ctx-\u003enpos \u003d\u003d 4 \u0026\u0026\n+\t\t\t\t\t !strncmp(ctx-\u003ebuf, \u0022body\u0022, 4) \u0026\u0026 aa)\n+\t\t\t\t\t\tpname \u003d (const char *)(aa + 1);\n+\t\t\t\t}\n+\n+\t\t\t\tassert(ctx-\u003ebase_url);\n+\n+\t\t\t\tif (!pname)\n+\t\t\t\t\tgoto issue_elem_start;\n+\n+\t\t\t\t/* we should be in an \u003cimg tag or\n+\t\t\t\t * something with a background image */\n+\n+\t\t\t\tassert(ctx-\u003ebase_url);\n+\n+\t\t\t\tif (lws_http_rel_to_url(url, sizeof(url),\n+\t\t\t\t\t\t\tctx-\u003ebase_url, pname))\n+\t\t\t\t\tgoto skip_image;\n+\n+\t\t\t\tpsb \u003d lws_css_get_parent_block(ctx, ps);\n+\t\t\t\t//if (!psb)\n+\t\t\t\t//\tlwsl_err(\u0022%s: NULL psb\u005cn\u0022, __func__);\n+\n+\t\t\t\tif (ctx-\u003enpos \u003d\u003d 3 \u0026\u0026 !strncmp(ctx-\u003ebuf, \u0022img\u0022, 3)) {\n+\t\t\t\t\tlws_fx_set(box.x, 0, 0);\n+\t\t\t\t\tlws_fx_set(box.y, 0, 0);\n+\n+\t\t\t\t\tif (ps-\u003ecss_position-\u003epropval \u003d\u003d LCSP_PROPVAL_ABSOLUTE) {\n+\t\t\t\t\t//\tbox.x \u003d *lws_csp_px(ps-\u003ecss_pos[CCPAS_LEFT], ps);\n+\t\t\t\t\t///\tbox.y \u003d *lws_csp_px(ps-\u003ecss_pos[CCPAS_TOP], ps);\n+\t\t\t\t\t//\tabs \u003d 1;\n+\t\t\t\t\t} else {\n+\t\t\t\t\t\tif (psb) {\n+\t\t\t\t\t\t\tbox.x \u003d psb-\u003ecurx;\n+\t\t\t\t\t\t\tbox.y \u003d psb-\u003ecury;\n+\t\t\t\t\t\t}\n+\t\t\t\t\t}\n+\n+\t\t\t\t\tif (psb) {\n+\t\t\t\t\t\tlws_fx_add(\u0026box.x, \u0026box.x,\n+\t\t\t\t\t\t\tlws_csp_px(psb-\u003ecss_margin[CCPAS_LEFT], psb));\n+\t\t\t\t\t\tlws_fx_add(\u0026box.y, \u0026box.y,\n+\t\t\t\t\t\t\tlws_csp_px(psb-\u003ecss_margin[CCPAS_TOP], psb));\n+\t\t\t\t\t}\n+\n+\t\t\t\t\tbox.h \u003d ctx-\u003eic.wh_px[LWS_LHPREF_HEIGHT]; /* placeholder */\n+\t\t\t\t\tlws_fx_sub(\u0026box.w, \u0026ctx-\u003eic.wh_px[0], \u0026box.x);\n+\n+\t\t\t\t\tif (ps-\u003ecss_width \u0026\u0026\n+\t\t\t\t\t lws_fx_comp(lws_csp_px(ps-\u003ecss_width, ps), \u0026box.w) \u003e 0)\n+\t\t\t\t\t\tbox.w \u003d *lws_csp_px(ps-\u003ecss_width, ps);\n+\t\t\t\t}\n+\n+\t\t\t\tmemset(\u0026u, 0, sizeof(u));\n+\t\t\t\tif (lws_dlo_ss_find(cx, url, \u0026u)) {\n+\n+\t\t\t\t\ti.cx \u003d cx;\n+\t\t\t\t\ti.dl \u003d drt-\u003edl;\n+\t\t\t\t\tif (psb)\n+\t\t\t\t\t\ti.dlo_parent \u003d psb-\u003edlo;\n+\t\t\t\t\ti.box \u003d \u0026box;\n+\t\t\t\t\ti.on_rx \u003d ctx-\u003essevcb;\n+\t\t\t\t\ti.on_rx_sul \u003d ctx-\u003essevsul;\n+\t\t\t\t\ti.url \u003d url;\n+\t\t\t\t\ti.lhp \u003d ctx;\n+\t\t\t\t\ti.u \u003d \u0026u;\n+\t\t\t\t\ti.window \u003d ctx-\u003ewindow;\n+\n+\t\t\t\t\tlwsl_cx_warn(cx, \u0022not already in progress: %s\u0022, url);\n+\t\t\t\t\tif (lws_dlo_ss_create(\u0026i, \u0026dlo)) {\n+\t\t\t\t\t\t/* we can't get it */\n+\t\t\t\t\t\tlwsl_cx_warn(cx, \u0022Can't get %s\u0022, url);\n+\t\t\t\t\t\tgoto issue_elem_start;\n+\t\t\t\t\t} else {\n+\t\t\t\t\t\tlwsl_cx_warn(cx, \u0022Created SS for %s\u005cn\u0022, url);\n+\t\t\t\t\t\tif (psb)\n+\t\t\t\t\t\t\tpsb-\u003edlo \u003d dlo;\n+\t\t\t\t\t//\telse\n+\t\t\t\t\t\tps-\u003edlo \u003d dlo;\n+\t\t\t\t\t}\n+\t\t\t\t} else {\n+\t\t\t\t\t// lwsl_cx_warn(cx, \u0022Found in-progress %s\u005cn\u0022, url);\n+\t\t\t\t\tif (psb)\n+\t\t\t\t\t\tpsb-\u003edlo \u003d \u0026u.u.dlo_png-\u003edlo;\n+\t\t\t\t\t//else\n+\t\t\t\t\tps-\u003edlo \u003d \u0026u.u.dlo_png-\u003edlo;\n+\t\t\t\t}\n+\n+\t\t\t\tif (ctx-\u003enpos \u003d\u003d 4 \u0026\u0026 !strncmp(ctx-\u003ebuf, \u0022link\u0022, 4)) {\n+\t\t\t\t\tps-\u003ecb(ctx, LHPCB_ELEMENT_START);\n+\t\t\t\t\tctx-\u003enpos \u003d 0;\n+\t\t\t\t\tctx-\u003estate \u003d LCSPS_CSS_OUTER;\n+\t\t\t\t\tctx-\u003eawait_css_done \u003d 1;\n+\n+\t\t\t\t\treturn LWS_SRET_AWAIT_RETRY;\n+\t\t\t\t}\n+\n+\t\t\t\t/*\n+\t\t\t\t * It's on its way to some extent and *u set...\n+\t\t\t\t *\n+\t\t\t\t * If he has given explicit width and height\n+\t\t\t\t * for the image, no need to wait for them\n+\t\t\t\t */\n+\n+\t\t\t\tif (lws_csp_px(lws_css_cascade_get_prop_atr(ctx,\n+\t\t\t\t\t\t\tLCSP_PROP_HEIGHT), ps)-\u003ewhole \u0026\u0026\n+\t\t\t\t\t\tlws_csp_px(lws_css_cascade_get_prop_atr(ctx,\n+\t\t\t\t\t\t\tLCSP_PROP_WIDTH), ps)-\u003ewhole) {\n+\t\t\t\t\tlwsl_cx_warn(cx, \u0022Have width and height %d x %d\u0022,\n+\t\t\t\t\t\t\t(int)lws_csp_px(lws_css_cascade_get_prop_atr(ctx,\n+\t\t\t\t\t\t\t\tLCSP_PROP_WIDTH), ps)-\u003ewhole,\n+\t\t\t\t\t\t\t(int)lws_csp_px(lws_css_cascade_get_prop_atr(ctx,\n+\t\t\t\t\t\t\t\tLCSP_PROP_HEIGHT), ps)-\u003ewhole);\n+\n+\t\t\t\t\tu.u.dlo_png-\u003edlo.box.w.whole \u003d lws_csp_px(lws_css_cascade_get_prop_atr(ctx,\n+\t\t\t\t\t\t\tLCSP_PROP_WIDTH), ps)-\u003ewhole;\n+\t\t\t\t\tu.u.dlo_png-\u003edlo.box.h.whole \u003d lws_csp_px(lws_css_cascade_get_prop_atr(ctx,\n+\t\t\t\t\t\t\tLCSP_PROP_HEIGHT), ps)-\u003ewhole;\n+\t\t\t\t\tgoto issue_elem_start;\n+\t\t\t\t}\n+\n+\t\t\t\t/*\n+\t\t\t\t * Do we have the dimensions? If not, bail\n+\t\t\t\t * from here and await a retry (maybe caused by\n+\t\t\t\t * data coming for the image)\n+\t\t\t\t */\n+\n+\t\t\t\tif (!lws_dlo_image_width(\u0026u) ||\n+\t\t\t\t !lws_dlo_image_height(\u0026u)) {\n+\t\t\t\t\t// lwsl_warn(\u0022%s: exiting with AWAIT_RETRY\u005cn\u0022, __func__);\n+\t\t\t\t\treturn LWS_SRET_AWAIT_RETRY;\n+\t\t\t\t}\n+\n+\t\t\t\tu.u.dlo_png-\u003edlo.box.w.whole \u003d (int32_t)lws_dlo_image_width(\u0026u);\n+\t\t\t\tu.u.dlo_png-\u003edlo.box.h.whole \u003d (int32_t)lws_dlo_image_height(\u0026u);\n+\n+\t\t\t\t/* did it fail to retreive it? */\n+\n+\t\t\t\tif (u.u.dlo_png-\u003edlo.box.w.whole \u003c 0) {\n+\t\t\t\t\tlwsl_notice(\u0022%s: understanding image failed\u005cn\u0022, __func__);\n+\t\t\t\t\tgoto skip_image;\n+\t\t\t\t}\n+\n+\t\t\t\t/*\n+\t\t\t\t * ... we needed it, we have it... we set it...\n+\t\t\t\t * ... let's go\n+\t\t\t\t */\n+\n+issue_elem_start:\n+\t\t\t\tr \u003d ps-\u003ecb(ctx, LHPCB_ELEMENT_START);\n+\t\t\t\tctx-\u003enpos \u003d 0;\n+\t\t\t\tif (r) {\n+\t\t\t\t\tlwsl_notice(\u0022%s: inner cb returned %d\u005cn\u0022, __func__, r);\n+\t\t\t\t\treturn r;\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\tif (ctx-\u003eu.f.closing || ctx-\u003eu.f.void_element){\n+\t\t\t\tif (ctx-\u003estack.count \u003d\u003d 1) {\n+\t\t\t\t\tlwsl_err(\u0022%s: element close mismatch\u005cn\u0022, __func__);\n+\t\t\t\t\tps-\u003ecb(ctx, LHPCB_FAILED);\n+\t\t\t\t\treturn LWS_SRET_FATAL;\n+\t\t\t\t}\n+\t\t\t\tif (ps-\u003eatr.head) {\n+\t\t\t\t\tlhp_atr_t *a \u003d lws_container_of(ps-\u003eatr.head, lhp_atr_t, list);\n+\t\t\t\t\tmemcpy(ctx-\u003ebuf, \u0026a[1], a-\u003ename_len);\n+\t\t\t\t\tctx-\u003enpos \u003d (int)a-\u003ename_len;\n+\t\t\t\t}\n+\t\t\t\tps-\u003ecb(ctx, LHPCB_ELEMENT_END);\n+\t\t\t\tctx-\u003enpos \u003d 0;\n+\t\t\t\t/* remove the start level */\n+\t\t\t\tlhp_clean_level(ps);\n+\t\t\t\tlws_css_cascade(ctx);\n+\t\t\t\tps \u003d lws_container_of(ctx-\u003estack.tail,\n+\t\t\t\t\t\t lhp_pstack_t, list);\n+\t\t\t}\n+skip_image:\n+\t\t\tctx-\u003enpos \u003d 0;\n+\t\t\tctx-\u003estate \u003d LHPS_OUTER;\n+\t\t\tbreak;\n+\n+\t\tcase LHPS_ATTRIB:\n+\n+\t\t\tif (ctx-\u003eu.f.doctype \u0026\u0026 c \u003d\u003d '\u005c\u0022') {\n+\t\t\t\tctx-\u003eu.f.inq \u003d ctx-\u003eu.f.inq ^ 1u;\n+\t\t\t\tif (ctx-\u003eu.f.inq)\n+\t\t\t\t\tbreak;\n+\t\t\t}\n+\n+\t\t\tif ((ctx-\u003eu.f.inq || !hspace(c)) \u0026\u0026\n+\t\t\t (c !\u003d '/' || ctx-\u003eu.f.inq) \u0026\u0026 c !\u003d '\u003e') {\n+\t\t\t\t/* collect the attrib name */\n+\t\t\t\tctx-\u003ebuf[ctx-\u003enpos++] \u003d (char)c;\n+\t\t\t\t/* sanity */\n+\t\t\t\tif (ctx-\u003enpos \u003d\u003d LHP_STRING_CHUNK) {\n+\t\t\t\t\tlwsl_err(\u0022%s: string chunk\u005cn\u0022, __func__);\n+\t\t\t\t\tps-\u003ecb(ctx, LHPCB_FAILED);\n+\t\t\t\t\treturn LWS_SRET_FATAL;\n+\t\t\t\t}\n+\t\t\t\tif (c \u003d\u003d '\u003d') {\n+\t\t\t\t\tctx-\u003enl_temp \u003d ctx-\u003enpos - 1;\n+\t\t\t\t\tctx-\u003estate \u003d LHPS_ATTRIB_VAL;\n+\t\t\t\t}\n+\t\t\t\tbreak;\n+\t\t\t}\n+\t\t\tif (c \u003d\u003d '/') {\n+\t\t\t\tctx-\u003eu.f.closing \u003d 1;\n+\t\t\t\tbreak;\n+\t\t\t}\n+\n+\t\t\tif (ctx-\u003enpos \u0026\u0026\n+\t\t\t !lhp_atr_new(ctx, (size_t)ctx-\u003enpos, 0))\n+\t\t\t\tgoto oom;\n+\n+\t\t\tif (c \u003d\u003d '\u003e') {\n+\t\t\t\tctx-\u003estate \u003d LHPS_DO_START_ELEM;\n+\t\t\t\tgoto elem_start;\n+\t\t\t}\n+\t\t\tbreak;\n+\n+\t\tcase LHPS_ATTRIB_VAL:\n+\n+\t\t\tif (/*ctx-\u003eu.f.doctype \u0026\u0026 */c \u003d\u003d '\u005c\u0022') {\n+\t\t\t\tctx-\u003eu.f.inq \u003d ctx-\u003eu.f.inq ^ 1u;\n+\t\t\t\tif (ctx-\u003eu.f.inq)\n+\t\t\t\t\tbreak;\n+\t\t\t}\n+\n+\t\t\tif ((ctx-\u003eu.f.inq || !hspace(c)) \u0026\u0026\n+\t\t\t c !\u003d '\u003e' \u0026\u0026 c !\u003d '\u005c'' \u0026\u0026 c !\u003d '\u005c\u0022') {\n+\t\t\t\t/* collect the attrib value */\n+\t\t\t\tctx-\u003ebuf[ctx-\u003enpos++] \u003d (char)c;\n+\t\t\t\t/* sanity */\n+\t\t\t\tif (ctx-\u003enpos \u003d\u003d LHP_STRING_CHUNK) {\n+\t\t\t\t\tlwsl_err(\u0022%s: string chunk 2\u005cn\u0022, __func__);\n+\t\t\t\t\tps-\u003ecb(ctx, LHPCB_FAILED);\n+\t\t\t\t\treturn LWS_SRET_FATAL;\n+\t\t\t\t}\n+\t\t\t\tif (c \u003d\u003d '\u003d') {\n+\t\t\t\t\t// !!! lwsl_err(\u0022%s: equal\u005cn\u0022, __func__);\n+\t\t\t\t\t//ps-\u003ecb(ctx, LHPCB_FAILED);\n+\t\t\t\t\t//return LWS_SRET_FATAL;\n+\t\t\t\t}\n+\t\t\t\tbreak;\n+\t\t\t}\n+\t\t\tif (c \u003d\u003d '/') {\n+\t\t\t\tctx-\u003eu.f.closing \u003d 1;\n+\t\t\t\tbreak;\n+\t\t\t}\n+\n+\t\t\tif (c \u003d\u003d '\u005c'' || c \u003d\u003d '\u005c\u0022')\n+\t\t\t\tbreak;\n+\n+\t\t\tif (ctx-\u003eu.f.inq)\n+\t\t\t\tbreak;\n+\n+\t\t\tif (ctx-\u003enpos) {\n+\t\t\t\tctx-\u003ebuf[ctx-\u003enpos] \u003d '\u005c0';\n+\t\t\t\tif (!lhp_atr_new(ctx, (size_t)ctx-\u003enl_temp,\n+\t\t\t\t\t (size_t)ctx-\u003enpos - (size_t)ctx-\u003enl_temp - 1u))\n+\t\t\t\t\tgoto oom;\n+\t\t\t\tctx-\u003estate \u003d LHPS_ATTRIB;\n+\t\t\t\tctx-\u003enpos \u003d 0;\n+\t\t\t\tif (c !\u003d '\u003e')\n+\t\t\t\t\tbreak;\n+\t\t\t}\n+\n+\t\t\tif (c \u003d\u003d '\u003e') {\n+\t\t\t\tctx-\u003estate \u003d LHPS_DO_START_ELEM;\n+\t\t\t\tgoto elem_start;\n+\t\t\t}\n+\n+\t\t\tbreak;\n+\n+\t\tcase LHPS_AMP:\n+\t\t\t/* the character after the \u0026 */\n+\t\t\tif (c \u003d\u003d '#') {\n+\t\t\t\tctx-\u003estate \u003d LHPS_AMPHASH;\n+\t\t\t\tctx-\u003etemp \u003d 0;\n+\t\t\t\tbreak;\n+\t\t\t}\n+\t\t\t/*\n+\t\t\t * These are supposed to be named chars, like \u0026dagger;\n+\t\t\t * but not supported yet.\n+\t\t\t */\n+\t\t\tctx-\u003estate \u003d LHPS_OUTER;\n+\t\t\tbreak;\n+\t\tcase LHPS_AMPHASH:\n+\t\t\t/*\n+\t\t\t * This is either decimal or hex unicode like\n+\t\t\t * \u0026#1234; or \u0026#xfc16;\n+\t\t\t */\n+\t\t\tif (c \u003d\u003d 'x' || c \u003d\u003d 'X') {\n+\t\t\t\tctx-\u003estate \u003d LHPS_AMPHASH_HEX;\n+\t\t\t\tbreak;\n+\t\t\t}\n+\n+\t\t\tif (ctx-\u003etemp_count++ \u003e 32 /* sanity */) {\n+\t\t\t\tctx-\u003estate \u003d LHPS_OUTER;\n+\t\t\t\tbreak;\n+\t\t\t}\n+\t\t\tif (c \u003d\u003d ';') {\n+\t\t\t\tif (ctx-\u003enpos \u003e\u003d LHP_STRING_CHUNK - 5) {\n+\t\t\t\t\tif (ctx-\u003ein_body)\n+\t\t\t\t\t\tps-\u003ecb(ctx, LHPCB_CONTENT);\n+\t\t\t\t\tctx-\u003enpos \u003d 0;\n+\t\t\t\t}\n+\t\t\t\tctx-\u003estate \u003d LHPS_OUTER;\n+\t\t\t\tlhp_uni_emit(ctx);\n+\t\t\t\tbreak;\n+\t\t\t}\n+\n+\t\t\tif (c \u003e\u003d '0' \u0026\u0026 c \u003c\u003d '9')\n+\t\t\t\tctx-\u003etemp \u003d (uint32_t)(((int)ctx-\u003etemp * 10) + ((int)c - '0'));\n+\t\t\telse\n+\t\t\t\tctx-\u003estate \u003d LHPS_OUTER;\n+\n+\t\t\tbreak;\n+\n+\t\tcase LHPS_AMPHASH_HEX:\n+\t\t\tif (c \u003d\u003d ';') {\n+\t\t\t\tif (ctx-\u003enpos \u003e\u003d LHP_STRING_CHUNK - 5) {\n+\t\t\t\t\tif (ctx-\u003ein_body)\n+\t\t\t\t\t\tps-\u003ecb(ctx, LHPCB_CONTENT);\n+\t\t\t\t\tctx-\u003enpos \u003d 0;\n+\t\t\t\t}\n+\t\t\t\tctx-\u003estate \u003d LHPS_OUTER;\n+\t\t\t\tlhp_uni_emit(ctx);\n+\t\t\t\tbreak;\n+\t\t\t}\n+\n+\t\t\tif (ctx-\u003etemp_count++ \u003e 8 /* sanity */) {\n+\t\t\t\tctx-\u003estate \u003d LHPS_OUTER;\n+\t\t\t\tbreak;\n+\t\t\t}\n+\n+\t\t\tif (c \u003e\u003d '0' \u0026\u0026 c \u003c\u003d '9') {\n+\t\t\t\tctx-\u003etemp \u003d (uint32_t)(((int)ctx-\u003etemp \u003c\u003c 4) + ((int)c - '0'));\n+\t\t\t\tbreak;\n+\t\t\t}\n+\n+\t\t\tif (c \u003e\u003d 'A' \u0026\u0026 c \u003c\u003d 'F') {\n+\t\t\t\tctx-\u003etemp \u003d (uint32_t)(((int)ctx-\u003etemp \u003c\u003c 4) + ((int)c - 'A') + 10);\n+\t\t\t\tbreak;\n+\t\t\t}\n+\n+\t\t\tif (c \u003e\u003d 'a' \u0026\u0026 c \u003c\u003d 'f') {\n+\t\t\t\tctx-\u003etemp \u003d (uint32_t)(((int)ctx-\u003etemp \u003c\u003c 4) + ((int)c - 'a') + 10);\n+\t\t\t\tbreak;\n+\t\t\t}\n+\n+\t\t\tctx-\u003estate \u003d LHPS_OUTER;\n+\t\t\tbreak;\n+\t\tcase LHPS_SCOMMENT1: /* we have \u003c! */\n+\t\t\tif (c \u003d\u003d '-') {\n+\t\t\t\tctx-\u003estate \u003d LHPS_SCOMMENT2;\n+\t\t\t\tbreak;\n+\t\t\t}\n+\t\t\t/* !doctype is an element tag */\n+\t\t\tctx-\u003ebuf[ctx-\u003enpos++] \u003d '!';\n+\t\t\tctx-\u003ebuf[ctx-\u003enpos++] \u003d (char)c;\n+\t\t\tctx-\u003estate \u003d LHPS_TAG;\n+\t\t\tbreak;\n+\t\tcase LHPS_SCOMMENT2: /* we have \u003c!- */\n+\t\t\tif (c \u003d\u003d '-') {\n+\t\t\t\tctx-\u003estate \u003d LHPS_COMMENT;\n+\t\t\t\tbreak;\n+\t\t\t}\n+\t\t\t/* it can't be an element tag with - in it */\n+\t\t\tctx-\u003estate \u003d LHPS_BAD_TAG;\n+\t\t\tbreak;\n+\t\tcase LHPS_COMMENT:\n+\t\t\t/* sanity */\n+\t\t\tif (ctx-\u003enpos \u003e\u003d LHP_STRING_CHUNK - 4) {\n+\t\t\t\tps-\u003ecb(ctx, LHPCB_COMMENT);\n+\t\t\t\tctx-\u003enpos \u003d 0;\n+\t\t\t}\n+\t\t\tif (c \u003d\u003d '-') {\n+\t\t\t\tctx-\u003estate \u003d LHPS_ECOMMENT1;\n+\t\t\t\tbreak;\n+\t\t\t}\n+\n+\t\t\t/* collect the comment */\n+\t\t\tctx-\u003ebuf[ctx-\u003enpos++] \u003d (char)c;\n+\t\t\t/* sanity */\n+\t\t\tif (ctx-\u003enpos \u003e\u003d LHP_STRING_CHUNK - 4) {\n+\t\t\t\tps-\u003ecb(ctx, LHPCB_COMMENT);\n+\t\t\t\tctx-\u003enpos \u003d 0;\n+\t\t\t}\n+\n+\t\t\tbreak;\n+\t\tcase LHPS_ECOMMENT1:\n+\t\t\tif (c \u003d\u003d '-') {\n+\t\t\t\tctx-\u003estate \u003d LHPS_ECOMMENT2;\n+\t\t\t\tbreak;\n+\t\t\t}\n+\t\t\tctx-\u003ebuf[ctx-\u003enpos++] \u003d '-';\n+\t\t\tctx-\u003ebuf[ctx-\u003enpos++] \u003d (char)c;\n+\t\t\tctx-\u003estate \u003d LHPS_COMMENT;\n+\t\t\tbreak;\n+\t\tcase LHPS_ECOMMENT2:\n+\t\t\tif (c \u003d\u003d '\u003e') {\n+\t\t\t\tif (ctx-\u003enpos) {\n+\t\t\t\t\tps-\u003ecb(ctx, LHPCB_COMMENT);\n+\t\t\t\t\tctx-\u003enpos \u003d 0;\n+\t\t\t\t}\n+\t\t\t\tctx-\u003estate \u003d LHPS_OUTER;\n+\t\t\t\tbreak;\n+\t\t\t}\n+\t\t\tctx-\u003ebuf[ctx-\u003enpos++] \u003d '-';\n+\t\t\tctx-\u003ebuf[ctx-\u003enpos++] \u003d '-';\n+\t\t\tctx-\u003ebuf[ctx-\u003enpos++] \u003d (char)c;\n+\t\t\tctx-\u003estate \u003d LHPS_COMMENT;\n+\t\t\tbreak;\n+\n+\t\t\t/*\n+\t\t\t * CSS parser\n+\t\t\t */\n+\n+\t\tcase LCSPS_CSS_OUTER:\n+\t\t\t/* comments... */\n+\t\t\tctx-\u003estate_css_comm \u003d LCSPS_CSS_OUTER;\n+\n+\t\t\tif (c \u003d\u003d '\u003c') {\n+\t\t\t\tctx-\u003estate \u003d LCSPS_CSS_OUTER_TAG1;\n+\t\t\t\tctx-\u003eu.f.first \u003d 1;\n+\t\t\t\tbreak;\n+\t\t\t}\n+\t\t\tif (c \u003d\u003d '/') {\n+\t\t\t\tctx-\u003estate \u003d LCSPS_CCOM_S1;\n+\t\t\t\tbreak;\n+\t\t\t}\n+\n+\t\t\tif (c \u003d\u003d '{') { /* open stanza */\n+\t\t\t\tstruct lws_tokenize ts;\n+\n+\t\t\t\t/* create the stanza object */\n+\n+\t\t\t\tctx-\u003estz \u003d lwsac_use_zero(\u0026ctx-\u003ecssac,\n+\t\t\t\t\t\t\t sizeof(*ctx-\u003estz),\n+\t\t\t\t\t\t\t LHP_AC_GRANULE);\n+\t\t\t\tif (!ctx-\u003estz)\n+\t\t\t\t\tgoto oom;\n+\n+\t\t\t\t/* attach names to it */\n+\n+\t\t\t\tmemset(\u0026ts, 0, sizeof(ts));\n+\t\t\t\tts.start \u003d ctx-\u003ebuf;\n+\t\t\t\tts.len \u003d (size_t)ctx-\u003enpos;\n+\t\t\t\tts.flags \u003d LWS_TOKENIZE_F_COMMA_SEP_LIST |\n+\t\t\t\t\t\tLWS_TOKENIZE_F_DOT_NONTERM;\n+\n+\t\t\t\tdo {\n+\t\t\t\t\tts.e \u003d (int8_t)lws_tokenize(\u0026ts);\n+\t\t\t\t\tif (ts.e \u003d\u003d LWS_TOKZE_TOKEN) {\n+\t\t\t\t\t\tlcsp_names_t *na \u003d lwsac_use_zero(\n+\t\t\t\t\t\t\t\u0026ctx-\u003ecssac,\n+\t\t\t\t\t\t\tsizeof(*na) +\n+\t\t\t\t\t\t\tts.token_len + 1,\n+\t\t\t\t\t\t\tLHP_AC_GRANULE);\n+\t\t\t\t\t\tif (!na)\n+\t\t\t\t\t\t\tgoto oom;\n+\n+\t\t\t\t\t\t//lwsl_notice(\u0022%s: CSS name %.*s\u005cn\u0022,\n+\t\t\t\t\t\t//\t__func__,\n+\t\t\t\t\t\t//\t(int)ts.token_len, ts.token);\n+\n+\t\t\t\t\t\tna-\u003ename_len \u003d ts.token_len;\n+\t\t\t\t\t\tmemcpy(\u0026na[1], ts.token, ts.token_len);\n+\t\t\t\t\t\t((char *)(\u0026na[1]))[ts.token_len] \u003d '\u005c0';\n+\t\t\t\t\t\tlws_dll2_add_tail(\u0026na-\u003elist, \u0026ctx-\u003estz-\u003enames);\n+\t\t\t\t\t}\n+\n+\t\t\t\t} while (ts.e \u003e 0);\n+\n+\n+\t\t\t\t/* list this stanza in our lhp context CSS */\n+\n+\t\t\t\tlws_dll2_add_tail(\u0026ctx-\u003estz-\u003elist, \u0026ctx-\u003ecss);\n+\n+\t\t\t\tctx-\u003ebuf[ctx-\u003enpos] \u003d '\u005c0';\n+\n+\t\t\t\tctx-\u003estate \u003d LCSPS_CSS_STANZA;\n+\t\t\t\tctx-\u003ecssval_state \u003d 0;\n+\t\t\t\tctx-\u003ecss_state \u003d 0;\n+\t\t\t\tctx-\u003eu.f.arg \u003d 0;\n+\t\t\t\tctx-\u003eu.f.integer \u003d 0;\n+\t\t\t\tctx-\u003eu.f.color \u003d 0;\n+\t\t\t\tbreak;\n+\t\t\t}\n+\n+\t\t\t/* otherwise let's collect the name pieces */\n+\n+\t\t\tif (ctx-\u003enpos \u003e\u003d LHP_STRING_CHUNK) {\n+\t\t\t\tlwsl_err(\u0022%s: css lhs too long\u005cn\u0022, __func__);\n+\t\t\t\treturn LWS_SRET_FATAL;\n+\t\t\t}\n+\n+\t\t\tif (!hspace(c))\n+\t\t\t\tctx-\u003ebuf[ctx-\u003enpos++] \u003d (char)c;\n+\n+\t\t\tbreak;\n+\n+\t\tcase LCSPS_CSS_STANZA:\n+\t\t\tctx-\u003estate_css_comm \u003d LCSPS_CSS_STANZA;\n+\t\t\tif (c \u003d\u003d '}') {\n+\t\t\t\tctx-\u003estate \u003d LCSPS_CSS_OUTER;\n+\n+\t\t\t\tctx-\u003eu.f.arg \u003d 0;\n+\n+\t\t\t\tif (ctx-\u003eu.f.color) {\n+\t\t\t\t\tlcsp_append_cssval_color(ctx);\n+\t\t\t\t\tctx-\u003enpos \u003d 0;\n+\t\t\t\t\tbreak;\n+\t\t\t\t}\n+\t\t\t\tif (ctx-\u003eu.f.integer) {/* x: 123} */\n+\t\t\t\t\tif (lcsp_append_cssval_int(ctx))\n+\t\t\t\t\t\tgoto oom;\n+\n+\t\t\t\t\tctx-\u003eu.f.integer \u003d 0;\n+\t\t\t\t\tctx-\u003enpos \u003d 0;\n+\t\t\t\t\tbreak;\n+\t\t\t\t}\n+\t\t\t\t//lwsl_notice(\u0022close curly cssval_state %d\u005cn\u0022, ctx-\u003ecssval_state);\n+\t\t\t\tif (ctx-\u003ecssval_state || ctx-\u003enpos)\n+\t\t\t\t\tgoto for_term;\n+\t\t\t\tctx-\u003enpos \u003d 0;\n+\t\t\t\tbreak;\n+\t\t\t}\n+\t\t\tif (c \u003d\u003d '/') {\n+\t\t\t\tctx-\u003estate \u003d LCSPS_CCOM_S1;\n+\t\t\t\tbreak;\n+\t\t\t}\n+\n+\t\t\tif (ctx-\u003eu.f.arg) {\n+\t\t\t\t/* we're on the value side of prop: value */\n+\n+\t\t\t\tif (c \u003d\u003d ';') {\n+\t\t\t\t\t/* resync after unknown prop: restart with\n+\t\t\t\t\t * whatever is after the ';' */\n+\t\t\t\t\tctx-\u003ecss_state \u003d 0;\n+\t\t\t\t\tctx-\u003eu.f.arg \u003d 0;\n+\n+\t\t\t\t\tif (ctx-\u003eu.f.color) {\n+\t\t\t\t\t\tlcsp_append_cssval_color(ctx);\n+\t\t\t\t\t\tctx-\u003enpos \u003d 0;\n+\t\t\t\t\t\tbreak;\n+\t\t\t\t\t}\n+\n+\t\t\t\t\tif (ctx-\u003eu.f.integer) { /* x: 123; */\n+\t\t\t\t\t\tif (lcsp_append_cssval_int(ctx))\n+\t\t\t\t\t\t\tgoto oom;\n+\t\t\t\t\t\tctx-\u003eu.f.integer \u003d 0;\n+\t\t\t\t\t\tctx-\u003enpos \u003d 0;\n+\t\t\t\t\t}\n+\n+\t\t\t\t\tif (ctx-\u003ecssval_state)\n+\t\t\t\t\t\tgoto for_term;\n+\t\t\t\t\tctx-\u003enpos \u003d 0;\n+\t\t\t\t\tbreak;\n+\t\t\t\t}\n+\n+\t\t\t\tif (ctx-\u003ecssval_state \u003d\u003d (int16_t)-1 \u0026\u0026\n+\t\t\t\t hspace(c)) {\n+\t\t\t\t\t/* resync after unknown prop: restart\n+\t\t\t\t\t * with whatever is after the ';' */\n+\t\t\t\t\tctx-\u003ecssval_state \u003d 0;\n+\t\t\t\t\tbreak;\n+\t\t\t\t}\n+\n+\t\t\t\tif (ctx-\u003eu.f.color \u0026\u0026\n+\t\t\t\t\t((c \u003e\u003d '0' \u0026\u0026 c \u003c\u003d '9') ||\n+\t\t\t\t\t(c \u003e\u003d 'a' \u0026\u0026 c \u003c\u003d 'f') ||\n+\t\t\t\t\t(c \u003e\u003d 'A' \u0026\u0026 c \u003c\u003d 'F'))) {\n+\t\t\t\t\tctx-\u003etemp \u003d (uint32_t)(((int)ctx-\u003etemp \u003c\u003c 4) |\n+\t\t\t\t\t\t((c \u003e\u003d '0' \u0026\u0026 c \u003c\u003d '9') ? c - '0' :\n+\t\t\t\t\t\t\t(c \u003e\u003d 'a' \u0026\u0026 c \u003c\u003d 'f') ? 10 + (c - 'a') :\n+\t\t\t\t\t\t\t\t10 + (c - 'A')));\n+\t\t\t\t\tctx-\u003etemp_count++;\n+\t\t\t\t\tbreak;\n+\t\t\t\t}\n+\n+\t\t\t\tif (!ctx-\u003eu.f.integer \u0026\u0026 hspace(c))\n+\t\t\t\t\tbreak;\n+\n+\t\t\t\tif (!ctx-\u003ecssval_state \u0026\u0026 !ctx-\u003eu.f.integer \u0026\u0026\n+\t\t\t\t ((c \u003e\u003d '0' \u0026\u0026 c \u003c\u003d '9') || c \u003d\u003d '.')) {\n+\t\t\t\t\t// lwsl_notice(\u0022integer...\u005cn\u0022);\n+\t\t\t\t\tlws_fx_set(ctx-\u003etf, 0, 0);\n+\t\t\t\t\tctx-\u003eu.f.integer \u003d LHP_CSS_PROPVAL_INT_WHOLE;\n+\t\t\t\t\tctx-\u003etemp \u003d LWS_FX_FRACTION_MSD / 10;\n+\t\t\t\t\tctx-\u003eunit \u003d LCSP_UNIT_NONE;\n+\t\t\t\t}\n+\n+\t\t\t\tif (ctx-\u003eu.f.integer) {\n+\t\t\t\t\tif (c \u003d\u003d '.' \u0026\u0026\n+\t\t\t\t\t ctx-\u003eu.f.integer \u003c\u003d LHP_CSS_PROPVAL_INT_FRAC) {\n+\t\t\t\t\t\tctx-\u003eu.f.integer \u003d LHP_CSS_PROPVAL_INT_FRAC;\n+\t\t\t\t\t\tbreak;\n+\t\t\t\t\t}\n+\n+\t\t\t\t\tif (ctx-\u003eu.f.integer \u003c LHP_CSS_PROPVAL_INT_UNIT \u0026\u0026\n+\t\t\t\t\t c \u003e\u003d '0' \u0026\u0026 c \u003c\u003d '9') {\n+\t\t\t\t\t\tif (ctx-\u003eu.f.integer \u003d\u003d LHP_CSS_PROPVAL_INT_WHOLE)\n+\t\t\t\t\t\t\tctx-\u003etf.whole \u003d\n+\t\t\t\t\t\t\t\t(ctx-\u003etf.whole * 10) +\n+\t\t\t\t\t\t\t\t(c - '0');\n+\t\t\t\t\t\telse {\n+\t\t\t\t\t\t\tif (ctx-\u003etemp) {\n+\t\t\t\t\t\t\t\tctx-\u003etf.frac +\u003d (int32_t)ctx-\u003etemp * (c - '0');\n+\t\t\t\t\t\t\t\tctx-\u003etemp /\u003d 10;\n+\t\t\t\t\t\t\t}\n+\t\t\t\t\t\t}\n+\t\t\t\t\t\tbreak;\n+\t\t\t\t\t}\n+\t\t\t\t\tif (hspace(c)) {\n+\t\t\t\t\t\tctx-\u003eu.f.integer \u003d 0;\n+\t\t\t\t\t\tbreak;\n+\t\t\t\t\t}\n+\n+\t\t\t\t\tif (ctx-\u003eu.f.integer !\u003d LHP_CSS_PROPVAL_INT_UNIT) {\n+\t\t\t\t\t\tctx-\u003eu.f.integer \u003d LHP_CSS_PROPVAL_INT_UNIT;\n+\t\t\t\t\t\tctx-\u003enpos \u003d 0;\n+\t\t\t\t\t}\n+\n+\t\t\t\t\tif (c \u003d\u003d '%') {\n+\t\t\t\t\t\tctx-\u003eunit \u003d LCSP_UNIT_LENGTH_PERCENT;\n+\t\t\t\t\t\tgoto issue_post;\n+\t\t\t\t\t}\n+\n+\t\t\t\t\tif (ctx-\u003enpos \u003c 4 \u0026\u0026 !ctx-\u003eunit) {\n+\n+\t\t\t\t\t\tctx-\u003ebuf[ctx-\u003enpos++] \u003d (char)c;\n+\t\t\t\t\t\tctx-\u003ebuf[ctx-\u003enpos] \u003d '\u005c0';\n+\n+\t\t\t\t\t\tif (ctx-\u003enpos \u003d\u003d 2) {\n+\t\t\t\t\t\t\tif (!strcmp(ctx-\u003ebuf, \u0022em\u0022))\n+\t\t\t\t\t\t\t\tctx-\u003eunit \u003d LCSP_UNIT_LENGTH_EM;\n+\t\t\t\t\t\t\tif (!strcmp(ctx-\u003ebuf, \u0022ex\u0022))\n+\t\t\t\t\t\t\t\tctx-\u003eunit \u003d LCSP_UNIT_LENGTH_EX;\n+\t\t\t\t\t\t\tif (!strcmp(ctx-\u003ebuf, \u0022in\u0022))\n+\t\t\t\t\t\t\t\tctx-\u003eunit \u003d LCSP_UNIT_LENGTH_IN;\n+\t\t\t\t\t\t\tif (!strcmp(ctx-\u003ebuf, \u0022cm\u0022))\n+\t\t\t\t\t\t\t\tctx-\u003eunit \u003d LCSP_UNIT_LENGTH_CM;\n+\t\t\t\t\t\t\tif (!strcmp(ctx-\u003ebuf, \u0022mm\u0022))\n+\t\t\t\t\t\t\t\tctx-\u003eunit \u003d LCSP_UNIT_LENGTH_MM;\n+\t\t\t\t\t\t\tif (!strcmp(ctx-\u003ebuf, \u0022pt\u0022))\n+\t\t\t\t\t\t\t\tctx-\u003eunit \u003d LCSP_UNIT_LENGTH_PT;\n+\t\t\t\t\t\t\tif (!strcmp(ctx-\u003ebuf, \u0022pc\u0022))\n+\t\t\t\t\t\t\t\tctx-\u003eunit \u003d LCSP_UNIT_LENGTH_PC;\n+\t\t\t\t\t\t\tif (!strcmp(ctx-\u003ebuf, \u0022px\u0022))\n+\t\t\t\t\t\t\t\tctx-\u003eunit \u003d LCSP_UNIT_LENGTH_PX;\n+\t\t\t\t\t\t}\n+\t\t\t\t\t\tif (ctx-\u003enpos \u003d\u003d 3) {\n+\t\t\t\t\t\t\tif (!strcmp(ctx-\u003ebuf, \u0022deg\u0022))\n+\t\t\t\t\t\t\t\tctx-\u003eunit \u003d LCSP_UNIT_ANGLE_ABS_DEG;\n+\t\t\t\t\t\t\tif (!strcmp(ctx-\u003ebuf, \u0022rad\u0022))\n+\t\t\t\t\t\t\t\tctx-\u003eunit \u003d LCSP_UNIT_ANGLE_ABS_DEG;\n+\t\t\t\t\t\t}\n+\t\t\t\t\t\tif (ctx-\u003enpos \u003d\u003d 4) {\n+\t\t\t\t\t\t\tif (!strcmp(ctx-\u003ebuf, \u0022grad\u0022))\n+\t\t\t\t\t\t\t\tctx-\u003eunit \u003d LCSP_UNIT_ANGLE_ABS_DEG;\n+\t\t\t\t\t\t}\n+\n+issue_post:\n+\t\t\t\t\t\tif (ctx-\u003eunit) {\n+\t\t\t\t\t\t\tif (lcsp_append_cssval_int(ctx))\n+\t\t\t\t\t\t\t\tgoto oom;\n+\t\t\t\t\t\t\tctx-\u003eu.f.integer \u003d 0;\n+\t\t\t\t\t\t\tctx-\u003enpos \u003d 0;\n+\t\t\t\t\t\t}\n+\t\t\t\t\t\tbreak;\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\n+\t\t\t\tif (c \u003d\u003d '#') {\n+\t\t\t\t\tctx-\u003etemp \u003d 0;\n+\t\t\t\t\tctx-\u003etemp_count \u003d 0;\n+\t\t\t\t\tctx-\u003eu.f.color \u003d 1;\n+\t\t\t\t\tbreak;\n+\t\t\t\t}\n+\n+\n+\t\t\t\tif (ctx-\u003enpos \u003e\u003d LHP_STRING_CHUNK) {\n+\t\t\t\t\tlwsl_err(\u0022%s: prop value string too long\u005cn\u0022, __func__);\n+\t\t\t\t\tgoto oom;\n+\t\t\t\t}\n+\n+\t\t\t\tctx-\u003ebuf[ctx-\u003enpos++] \u003d (char)c;\n+\n+\t\t\t\t/* well-known property value strings */\n+\n+for_term:\n+\n+\t\t\t\tswitch(lws_minilex_parse(css_propconst_lextable,\n+\t\t\t\t\t\t\t \u0026ctx-\u003ecssval_state,\n+\t\t\t\t\t\t\t c, \u0026ctx-\u003epropval)) {\n+\t\t\t\tcase LWS_MINILEX_FAIL:\n+\t\t\t\t\t/*\n+\t\t\t\t\t * We don't know this property value, keep\n+\t\t\t\t\t * eating until we can resync at next\n+\t\t\t\t\t * ';', or we hit the '}'.\n+\t\t\t\t\t */\n+\t\t\t\t\t//lwsl_notice(\u0022minilex val fail %c\u005cn\u0022, c);\n+\t\t\t\t\t/* fallthru */\n+\t\t\t\tcase LWS_MINILEX_CONTINUE:\n+\t\t\t\t\tif (!ctx-\u003eu.f.arg) { /* term */\n+\t\t\t\t\t\tif (ctx-\u003enpos)\n+\t\t\t\t\t\t\tlcsp_append_cssval_string(ctx);\n+\t\t\t\t\t\tctx-\u003enpos \u003d 0;\n+\t\t\t\t\t}\n+\t\t\t\t\tbreak;\n+\t\t\t\tcase LWS_MINILEX_MATCH:\n+\t\t\t\t\t/* we have an unambiguous well-known\n+\t\t\t\t\t * property value match */\n+\t\t\t\t\t//lwsl_notice(\u0022propval %d\u005cn\u0022, ctx-\u003epropval);\n+\t\t\t\t\t{\n+\t\t\t\t\t\tlcsp_atr_t *atr \u003d lwsac_use_zero(\n+\t\t\t\t\t\t\t \u0026ctx-\u003ecssac,\n+\t\t\t\t\t\t\t sizeof(*atr),\n+\t\t\t\t\t\t\t LHP_AC_GRANULE);\n+\t\t\t\t\t\tif (!atr)\n+\t\t\t\t\t\t\tgoto oom;\n+\t\t\t\t\t\t/* add this prop value atr to the def */\n+\n+\t\t\t\t\t\tatr-\u003epropval \u003d ctx-\u003epropval;\n+\n+\t\t\t\t\t\tlws_dll2_add_tail(\u0026atr-\u003elist,\n+\t\t\t\t\t\t\t\t\u0026ctx-\u003edef-\u003eatrs);\n+\n+\t\t\t\t\t\tctx-\u003enpos \u003d 0;\n+\t\t\t\t\t}\n+\t\t\t\t\tctx-\u003ecssval_state \u003d 0;\n+\t\t\t\t\tbreak;\n+\t\t\t\t}\n+\n+\t\t\t\tbreak;\n+\t\t\t}\n+\n+\t\t\t/* we're trying to figure out the well-known prop name\n+\t\t\t * The matches all have the : attached, so they will\n+\t\t\t * match unambiguously */\n+\n+\t\t\tif (ctx-\u003ecss_state \u003d\u003d (int16_t)-1 \u0026\u0026 c \u003d\u003d ';') {\n+\t\t\t\t/* resync after unknown prop: restart with\n+\t\t\t\t * whatever is after the ';' */\n+\t\t\t\tctx-\u003ecss_state \u003d 0;\n+\t\t\t\tbreak;\n+\t\t\t}\n+\n+\t\t\tif (hspace(c)) {\n+\t\t\t\tctx-\u003eu.f.color \u003d 0;\n+\t\t\t\tif (ctx-\u003ecss_state) /* space after the start\n+\t\t\t\t\t\t * means no match */\n+\t\t\t\t\tctx-\u003ecss_state \u003d (int16_t)-1;\n+\t\t\t\tbreak;\n+\t\t\t}\n+\n+\t\t\tswitch(lws_minilex_parse(css_lextable, \u0026ctx-\u003ecss_state,\n+\t\t\t\t\t\t c, \u0026ctx-\u003eprop)) {\n+\t\t\tcase LWS_MINILEX_FAIL:\n+\t\t\t\t/*\n+\t\t\t\t * We don't know this property, keep eating\n+\t\t\t\t * until we can resync at next ';', or we hit\n+\t\t\t\t * the '}'.\n+\t\t\t\t */\n+\t\t\t\tbreak;\n+\t\t\tcase LWS_MINILEX_CONTINUE:\n+\t\t\t\tbreak;\n+\t\t\tcase LWS_MINILEX_MATCH:\n+\t\t\t\t/* we have an unambiguous match, now we are\n+\t\t\t\t * doing the property args */\n+\t\t\t\tctx-\u003edef \u003d lwsac_use_zero(\u0026ctx-\u003ecssac,\n+\t\t\t\t\t\t sizeof(*ctx-\u003edef),\n+\t\t\t\t\t\t LHP_AC_GRANULE);\n+\t\t\t\tif (!ctx-\u003edef)\n+\t\t\t\t\tgoto oom;\n+\t\t\t\tctx-\u003edef-\u003eprop \u003d (lcsp_props_t)ctx-\u003eprop;\n+\t\t\t\t/* add this prop def to the stanza */\n+\t\t\t\tlws_dll2_add_tail(\u0026ctx-\u003edef-\u003elist, \u0026ctx-\u003estz-\u003edefs);\n+\t\t\t\tctx-\u003eu.f.arg \u003d 1;\n+\t\t\t\tctx-\u003enpos \u003d 0;\n+\t\t\t\tctx-\u003ecssval_state \u003d 0;\n+\t\t\t\t//lwsl_notice(\u0022%s: minilex prop match %d\u005cn\u0022, __func__, ctx-\u003eprop);\n+\t\t\t\tbreak;\n+\t\t\t}\n+\t\t\tbreak;\n+\n+\t\tcase LCSPS_CCOM_S1:\n+\t\t\tif (c \u003d\u003d '*') {\n+\t\t\t\tctx-\u003estate \u003d LCSPS_CCOM;\n+\t\t\t\tbreak;\n+\t\t\t}\n+\t\t\tctx-\u003estate \u003d ctx-\u003estate_css_comm;\n+\t\t\tbreak;\n+\n+\t\tcase LCSPS_CSS_OUTER_TAG1:\n+\t\t\t/*\n+\t\t\t * We could see \u003c!-- or perhaps \u003c/script\u003e if we are\n+\t\t\t * inside a \u003cscript\u003e section\n+\t\t\t */\n+\t\t\tif (c \u003d\u003d '!' \u0026\u0026 ctx-\u003eu.f.first) {\n+\t\t\t\tctx-\u003estate \u003d LCSPS_SCOMMENT1;\n+\t\t\t\tctx-\u003eu.f.first \u003d 0;\n+\t\t\t\tbreak;\n+\t\t\t}\n+\t\t\tif (ctx-\u003estate_css_comm \u003d\u003d LCSPS_CSS_OUTER \u0026\u0026\n+\t\t\t c \u003d\u003d '/' \u0026\u0026 ctx-\u003eu.f.first) {\n+\n+finish_css:\n+\t\t\t\tr \u003d ctx-\u003eawait_css_done;\n+\t\t\t\t// lwsl_warn(\u0022leaving css for tag\u0022);\n+\t\t\t\tctx-\u003eu.s \u003d 0;\n+\n+\t\t\t\tctx-\u003etag \u003d NULL;\n+\t\t\t\tctx-\u003etag_len \u003d 0;\n+\t\t\t\tctx-\u003enpos \u003d 0;\n+\t\t\t\tctx-\u003estate \u003d LHPS_TAG;\n+\t\t\t\tctx-\u003eawait_css_done \u003d 0;\n+\t\t\t\tctx-\u003efinish_css \u003d 0;\n+\t\t\t\tif (r)\n+\t\t\t\t\treturn LWS_SRET_AWAIT_RETRY;\n+\t\t\t\tctx-\u003eu.f.closing \u003d 1;\n+\t\t\t\tbreak;\n+\t\t\t}\n+\t\t\tif (hspace(c))\n+\t\t\t\tbreak;\n+\t\t\tbreak;\n+\t\tcase LCSPS_CSS_NAMES:\n+\t\t\tbreak;\n+\t\tcase LCSPS_CSS_DEF_NAME:\n+\t\t\tbreak;\n+\t\tcase LCSPS_CSS_DEF_VALUE:\n+\t\t\tbreak;\n+\n+\t\tcase LCSPS_SCOMMENT1:\n+\t\t\tif (c \u003d\u003d '-') {\n+\t\t\t\tctx-\u003estate \u003d LCSPS_SCOMMENT2;\n+\t\t\t\tbreak;\n+\t\t\t}\n+\t\t\t/* we saw \u003c! and then not - */\n+\t\t\tctx-\u003estate \u003d ctx-\u003estate_css_comm;\n+\t\t\tbreak;\n+\t\tcase LCSPS_SCOMMENT2:\n+\t\t\tif (c \u003d\u003d '-') {\n+\t\t\t\tctx-\u003estate \u003d LCSPS_COMMENT;\n+\t\t\t\tbreak;\n+\t\t\t}\n+\t\t\t/* we saw \u003c!- and then not - */\n+\t\t\tctx-\u003estate \u003d ctx-\u003estate_css_comm;\n+\t\t\tbreak;\n+\n+\t\tcase LCSPS_CCOM:\n+\t\t\t/* fallthru */\n+\t\tcase LCSPS_COMMENT:\n+\t\t\t/* sanity */\n+\t\t\tif (ctx-\u003enpos \u003e\u003d LHP_STRING_CHUNK - 4) {\n+\t\t\t\tps-\u003ecb(ctx, LHPCB_COMMENT);\n+\t\t\t\tctx-\u003enpos \u003d 0;\n+\t\t\t}\n+\t\t\tif (ctx-\u003estate \u003d\u003d LCSPS_COMMENT \u0026\u0026 c \u003d\u003d '-') {\n+\t\t\t\tctx-\u003estate \u003d LCSPS_ECOMMENT1;\n+\t\t\t\tbreak;\n+\t\t\t}\n+\t\t\tif (ctx-\u003estate \u003d\u003d LCSPS_CCOM \u0026\u0026 c \u003d\u003d '*') {\n+\t\t\t\tctx-\u003estate \u003d LCSPS_CCOM_E1;\n+\t\t\t\tbreak;\n+\t\t\t}\n+\n+\t\t\t/* collect the comment */\n+\t\t\tctx-\u003ebuf[ctx-\u003enpos++] \u003d (char)c;\n+\t\t\t/* sanity */\n+\t\t\tif (ctx-\u003enpos \u003e\u003d LHP_STRING_CHUNK - 4) {\n+\t\t\t\tps-\u003ecb(ctx, LHPCB_COMMENT);\n+\t\t\t\tctx-\u003enpos \u003d 0;\n+\t\t\t}\n+\n+\t\t\tbreak;\n+\n+\t\tcase LCSPS_CCOM_E1:\n+\t\t\tif (c \u003d\u003d '/') {\n+\t\t\t\tif (ctx-\u003enpos) {\n+\t\t\t\t\tps-\u003ecb(ctx, LHPCB_COMMENT);\n+\t\t\t\t\tctx-\u003enpos \u003d 0;\n+\t\t\t\t}\n+\t\t\t\tctx-\u003estate \u003d ctx-\u003estate_css_comm;\n+\t\t\t\tbreak;\n+\t\t\t}\n+\t\t\tctx-\u003estate \u003d LCSPS_CCOM;\n+\t\t\tbreak;\n+\n+\t\tcase LCSPS_ECOMMENT1:\n+\t\t\tif (c \u003d\u003d '-') {\n+\t\t\t\tctx-\u003estate \u003d LCSPS_ECOMMENT2;\n+\t\t\t\tbreak;\n+\t\t\t}\n+\t\t\tctx-\u003ebuf[ctx-\u003enpos++] \u003d '-';\n+\t\t\tctx-\u003ebuf[ctx-\u003enpos++] \u003d (char)c;\n+\t\t\tctx-\u003estate \u003d LCSPS_COMMENT;\n+\t\t\tbreak;\n+\n+\t\tcase LCSPS_ECOMMENT2:\n+\t\t\tif (c \u003d\u003d '\u003e') {\n+\t\t\t\tif (ctx-\u003enpos) {\n+\t\t\t\t\tps-\u003ecb(ctx, LHPCB_COMMENT);\n+\t\t\t\t\tctx-\u003enpos \u003d 0;\n+\t\t\t\t}\n+\t\t\t\tctx-\u003estate \u003d ctx-\u003estate_css_comm;\n+\t\t\t\tbreak;\n+\t\t\t}\n+\t\t\tctx-\u003ebuf[ctx-\u003enpos++] \u003d '-';\n+\t\t\tctx-\u003ebuf[ctx-\u003enpos++] \u003d '-';\n+\t\t\tctx-\u003ebuf[ctx-\u003enpos++] \u003d (char)c;\n+\t\t\tctx-\u003estate \u003d LCSPS_COMMENT;\n+\t\t\tbreak;\n+\n+\t\t}\n+\t\tif (!*len \u0026\u0026 ctx-\u003eis_css \u0026\u0026 ctx-\u003eawait_css_done \u0026\u0026 ctx-\u003efinish_css)\n+\t\t\tgoto finish_css;\n+\t}\n+\n+\tif (!ctx-\u003eu.f.default_css \u0026\u0026 ctx-\u003eflags \u0026 LHP_FLAG_DOCUMENT_END) {\n+\t\t/*\n+\t\t * if we're holding on to anything in case more comes, no more\n+\t\t * is coming and we should flush it.\n+\t\t */\n+\n+\t\tif (ctx-\u003estate \u003d\u003d LHPS_OUTER \u0026\u0026 ctx-\u003enpos) {\n+\t\t\tif (ctx-\u003ein_body \u0026\u0026 (ctx-\u003enpos !\u003d 1 || ctx-\u003ebuf[0] !\u003d ' '))\n+\t\t\t\tps-\u003ecb(ctx, LHPCB_CONTENT);\n+\t\t\tctx-\u003enpos \u003d 0;\n+\t\t}\n+\n+\t\tps-\u003ecb(ctx, LHPCB_COMPLETE);\n+\t\treturn LWS_SRET_NO_FURTHER_OUT;\n+\t}\n+\n+\treturn LWS_SRET_WANT_INPUT;\n+\n+oom:\n+\tlwsl_err(\u0022%s: OOM\u005cn\u0022, __func__);\n+\tps-\u003ecb(ctx, LHPCB_FAILED);\n+\treturn LWS_SRET_FATAL;\n+}\n+\n+/*\n+ * Query the css cascade active at this html parsing point for a list of active\n+ * css attributes belonging to a particular property, accounting for cascading\n+ * overriding inside the list.\n+ */\n+\n+const lcsp_atr_t *\n+lws_css_cascade_get_prop_atr(lhp_ctx_t *ctx, lcsp_props_t prop)\n+{\n+\tlcsp_atr_ptr_t *ap;\n+\n+\tlws_dll2_owner_clear(\u0026ctx-\u003eactive_atr);\n+\tlwsac_free(\u0026ctx-\u003epropatrac);\n+\n+\t/*\n+\t * Let's go through the active stanzas looking for defs that relate to\n+\t * the property we care about\n+\t */\n+\n+\tlws_start_foreach_dll(struct lws_dll2 *, q, ctx-\u003eactive_stanzas.head) {\n+\t\tlcsp_stanza_ptr_t *pstz \u003d lws_container_of(q, lcsp_stanza_ptr_t,\n+\t\t\t\t\t\t\t list);\n+\n+\t\t/* each def entry in the stanza in turn */\n+\n+\t\tlws_start_foreach_dll(struct lws_dll2 *, p, pstz-\u003estz-\u003edefs.head) {\n+\t\t\tlcsp_defs_t *def \u003d lws_container_of(p, lcsp_defs_t, list);\n+\n+\t\t\tif (def-\u003eprop \u003d\u003d prop) {\n+\n+\t\t\t\tlws_start_foreach_dll(struct lws_dll2 *, z,\n+\t\t\t\t\t\t def-\u003eatrs.head) {\n+\t\t\t\t\tlcsp_atr_ptr_t *patr \u003d lwsac_use_zero(\n+\t\t\t\t\t\t\t\u0026ctx-\u003epropatrac,\n+\t\t\t\t\t\t\tsizeof(*patr),\n+\t\t\t\t\t\t\tLHP_AC_GRANULE);\n+\t\t\t\t\tif (!patr)\n+\t\t\t\t\t\treturn NULL;\n+\n+\t\t\t\t\tpatr-\u003eatr \u003d lws_container_of(z,\n+\t\t\t\t\t\t\tlcsp_atr_t, list);\n+\n+\t\t\t\t\tlws_dll2_add_tail(\u0026patr-\u003elist,\n+\t\t\t\t\t\t\t \u0026ctx-\u003eactive_atr);\n+\t\t\t\t} lws_end_foreach_dll(z);\n+\t\t\t}\n+\n+\t\t} lws_end_foreach_dll(p);\n+\n+\t} lws_end_foreach_dll(q);\n+\n+\tif (!ctx-\u003eactive_atr.count)\n+\t\treturn NULL;\n+\n+\tap \u003d lws_container_of(ctx-\u003eactive_atr.tail, lcsp_atr_ptr_t, list);\n+\n+\treturn ap-\u003eatr;\n+}\n+\n+lhp_pstack_t *\n+lws_css_get_parent_block(lhp_ctx_t *ctx, lhp_pstack_t *ps)\n+{\n+\tdo {\n+\n+\t\tif (!ps-\u003elist.prev)\n+\t\t\treturn NULL;\n+\n+\t\tps \u003d lws_container_of(ps-\u003elist.prev, lhp_pstack_t, list);\n+\n+\t\tif (ps-\u003edlo)\n+\t\t\treturn ps;\n+\n+\t} while(1);\n+}\n+\n+const char *\n+lws_css_pstack_name(lhp_pstack_t *ps)\n+{\n+\tlhp_atr_t *a;\n+\n+\tif (!ps)\n+\t\treturn \u0022(null ps)\u0022;\n+\n+\tif (!ps-\u003eatr.head)\n+\t\treturn \u0022no-name\u0022;\n+\n+\ta \u003d lws_container_of(ps-\u003eatr.head, lhp_atr_t, list);\n+\n+\treturn (const char *)\u0026a[1];\n+}\n+\n+/*\n+ * Some properties have an impied affinity for an axis, eg, left: references\n+ * the parent width if it has a % expression\n+ */\n+\n+int\n+lhp_prop_axis(const lcsp_atr_t *a)\n+{\n+\tconst lcsp_defs_t *d \u003d lws_container_of(a-\u003elist.owner, lcsp_defs_t, atrs);\n+\n+\tswitch (d-\u003eprop) {\n+\t/* referenced to height */\n+\tcase LCSP_PROP_BORDER_TOP_WIDTH:\n+\tcase LCSP_PROP_BORDER_BOTTOM_WIDTH:\n+\tcase LCSP_PROP_HEIGHT:\n+\tcase LCSP_PROP_TOP:\n+\tcase LCSP_PROP_BOTTOM:\n+\tcase LCSP_PROP_MARGIN_TOP:\n+\tcase LCSP_PROP_MARGIN_BOTTOM:\n+\tcase LCSP_PROP_PADDING_TOP:\n+\tcase LCSP_PROP_PADDING_BOTTOM:\n+\tcase LCSP_PROP_MAX_HEIGHT:\n+\tcase LCSP_PROP_MIN_HEIGHT:\n+\t\t//lwsl_notice(\u0022%s: %d: LWS_LHPREF_HEIGHT\u005cn\u0022, __func__, d-\u003eprop);\n+\t\treturn LWS_LHPREF_HEIGHT;\n+\n+\t/* referenced to width */\n+\tcase LCSP_PROP_BORDER_LEFT_WIDTH:\n+\tcase LCSP_PROP_BORDER_RIGHT_WIDTH:\n+\tcase LCSP_PROP_WHITE_SPACE:\n+\tcase LCSP_PROP_WIDTH:\n+\tcase LCSP_PROP_LEFT:\n+\tcase LCSP_PROP_RIGHT:\n+\tcase LCSP_PROP_MARGIN_LEFT:\n+\tcase LCSP_PROP_MARGIN_RIGHT:\n+\tcase LCSP_PROP_PADDING_LEFT:\n+\tcase LCSP_PROP_PADDING_RIGHT:\n+\tcase LCSP_PROP_MAX_WIDTH:\n+\tcase LCSP_PROP_MIN_WIDTH:\n+\t\t//lwsl_notice(\u0022%s: %d: LWS_LHPREF_WIDTH\u005cn\u0022, __func__, d-\u003eprop);\n+\t\treturn LWS_LHPREF_WIDTH;\n+\n+\tdefault:\n+\t\t//lwsl_notice(\u0022%s: %d: LWS_LHPREF_NONE\u005cn\u0022, __func__, d-\u003eprop);\n+\t\treturn LWS_LHPREF_NONE;\n+\t}\n+}\ndiff --git a/minimal-examples-lowlevel/api-tests/api-test-lhp/CMakeLists.txt b/minimal-examples-lowlevel/api-tests/api-test-lhp/CMakeLists.txt\nnew file mode 100644\nindex 0000000..0e4214a\n--- /dev/null\n+++ b/minimal-examples-lowlevel/api-tests/api-test-lhp/CMakeLists.txt\n@@ -0,0 +1,23 @@\n+project(lws-api-test-lhp C)\n+cmake_minimum_required(VERSION 2.8.12)\n+find_package(libwebsockets CONFIG REQUIRED)\n+list(APPEND CMAKE_MODULE_PATH ${LWS_CMAKE_DIR})\n+include(CheckCSourceCompiles)\n+include(LwsCheckRequirements)\n+\n+set(requirements 1)\n+require_lws_config(LWS_WITH_LHP 1 requirements)\n+require_lws_config(LWS_WITH_SECURE_STREAMS 1 requirements)\n+\n+if (requirements)\n+\n+\tadd_executable(${PROJECT_NAME} main.c)\n+\tadd_test(NAME api-test-lhp COMMAND lws-api-test-lhp)\n+\n+\tif (websockets_shared)\n+\t\ttarget_link_libraries(${PROJECT_NAME} websockets_shared ${LIBWEBSOCKETS_DEP_LIBS})\n+\t\tadd_dependencies(${PROJECT_NAME} websockets_shared)\n+\telse()\n+\t\ttarget_link_libraries(${PROJECT_NAME} websockets ${LIBWEBSOCKETS_DEP_LIBS})\n+\tendif()\n+endif()\ndiff --git a/minimal-examples-lowlevel/api-tests/api-test-lhp/main.c b/minimal-examples-lowlevel/api-tests/api-test-lhp/main.c\nnew file mode 100644\nindex 0000000..c320ef1\n--- /dev/null\n+++ b/minimal-examples-lowlevel/api-tests/api-test-lhp/main.c\n@@ -0,0 +1,319 @@\n+/*\n+ * lws-api-test-lhp\n+ *\n+ * Written in 2010-2022 by Andy Green \u003candy@warmcat.com\u003e\n+ *\n+ * This file is made available under the Creative Commons CC0 1.0\n+ * Universal Public Domain Dedication.\n+ *\n+ * sanity tests for lhp\n+ */\n+\n+#include \u003clibwebsockets.h\u003e\n+#include \u003cstdio.h\u003e\n+\n+static const char * const cb_reasons[] \u003d {\n+\t\t\u0022LHPCB_CONSTRUCTED\u0022,\n+\t\t\u0022LHPCB_DESTRUCTED\u0022,\n+\t\t\u0022LHPCB_COMPLETE\u0022,\n+\t\t\u0022LHPCB_FAILED\u0022,\n+\t\t\u0022LHPCB_ELEMENT_START\u0022,\t/* reported at end of \u003c\u003e */\n+\t\t\u0022LHPCB_ELEMENT_END\u0022,\n+\t\t\u0022LHPCB_CONTENT\u0022,\n+\t\t\u0022LHPCB_COMMENT\u0022,\n+};\n+\n+static const char * const html_tests[] \u003d {\n+\t/* test 1 */\n+\t\u0022hello\u0022,\n+\t/* test 2 */\n+\t\u0022\u003c!doctype html\u003e\u0022,\n+\t/* test 3 */\n+\t\u0022\u003c!DOCTYPE html PUBLIC \u005c\u0022-//W3C//DTD HTML 4.0//EN\u005c\u0022\u003e\u0022,\n+\t/* test 4 */\n+\t\u0022\u003c!doctype html\u003e\u003chtml\u003e\u003chead\u003e\u003c/head\u003e\u003cbody\u003ehello\u003c/body\u003e\u003c/html\u003e\u0022,\n+\t/* test 5 */\n+\t\u0022\u003c!doctype html\u003e\u005cn\u0022\n+\t \u0022\u003chtml\u003e\u005cn\u0022\n+\t \u0022\u003chead\u003e\u005cn\u0022\n+\t \u0022\u003ctitle\u003eAn HTML standard template\u003c/title\u003e\u005cn\u0022\n+\t \u0022\u003cmeta charset\u003d\u005c\u0022utf-8\u005c\u0022 /\u003e\u005cn\u0022\n+\t \u0022\u003c/head\u003e\u005cn\u0022\n+\t \u0022\u003cbody\u003e\u005cn\u0022\n+\t \u0022\u003ch1\u003eheading\u003c/h1\u003e\u005cn\u0022\n+\t \u0022\u003cb\u003ebold\u003c/b\u003e, normal\u003cbr\u003e\u005cn\u0022\n+\t \u0022\u003c/body\u003e\u005cn\u0022\n+\t \u0022\u003c/html\u003e\u005cn\u0022,\n+\t\u0022\u003c\u003e\u0022,\n+\t\u0022\u003cthing\u003e\u003c/thing\u003e\u0022,\n+\t\u0022\u003cthing a\u003e\u003c/thing\u003e\u0022,\n+\t\u0022\u003cthing a b\u003dc\u003e\u003c/thing\u003e\u0022,\n+\t\u0022\u003cthing a b\u003d'd'\u003e\u003c/thing\u003e\u0022,\n+\t\u0022\u003cthing a b\u003d\u005c\u0022e\u005c\u0022\u003e\u003c/thing\u003e\u0022,\n+\t\u0022\u003cthing \u003e\u003c/thing\u003e\u0022,\n+\t\u0022\u003cthing a \u003e\u003c/thing\u003e\u0022,\n+\t\u0022\u003cthing a b\u003dc \u003e\u003c/thing\u003e\u0022,\n+\t\u0022\u003cthing a b\u003d'd' \u003e\u003c/thing\u003e\u0022,\n+\t\u0022\u003cthing a b\u003d\u005c\u0022e\u005c\u0022 \u003e\u003c/thing\u003e\u0022,\n+\t\u0022\u003cbr/\u003e\u0022,\n+\t\u0022\u003cbr /\u003e\u0022,\n+\t\u0022\u003cbr something/\u003e\u0022,\n+\t\u0022\u003cbr something /\u003e\u0022,\n+\t\u0022\u003c!--comment--\u003e\u0022,\n+\t\u0022\u003c!doctype html\u003e\u005cn\u0022\n+\t \u0022\u003chtml\u003e\u005cn\u0022\n+\t \u0022\u003chead\u003e\u005cn\u0022\n+\t \u0022\u003ctitle\u003eTest html\u003c/title\u003e\u005cn\u0022\n+\t \u0022\u003cmeta charset\u003d\u005c\u0022utf-8\u005c\u0022 /\u003e\u005cn\u0022\n+\t \u0022\u003c/head\u003e\u005cn\u0022\n+\t \u0022\u003cstyle\u003e\u0022\n+\t\t\u0022h1 { font-size: 32px },\u0022\n+\t\t\u0022b { font-weight: bold }\u0022\n+\t \u0022\u003c/style\u003e\u0022\n+\t \u0022\u003cbody\u003e\u005cn\u0022\n+\t \u0022\u003ch1\u003elibwebsockets.org\u003c/h1\u003e\u005cn\u0022\n+\t \u0022A bunch of normal text, long enough that it is going to want to wrap\u003cbr\u003e\u0022\n+\t \u0022\u003cb\u003ebold\u003c/b\u003e, normal\u003cbr\u003e\u005cn\u0022\n+\t \u0022\u003cimg src\u003d\u005c\u0022something.png\u005c\u0022\u003e\u0022\n+\t \u0022\u003c/body\u003e\u005cn\u0022\n+\t \u0022\u003c/html\u003e\u005cn\u0022,\n+\t \u0022\u0026#x20ac;\u0026#x1f44d;\u0022,\n+\t \u0022\u003chtml\u003e\u003chead\u003e\u003ctitle\u003ethe title\u003c/title\u003e\u003c/head\u003e\u003cbody\u003e\u003cstyle\u003e\u0022\n+\t\t \u0022\u003c!-- css comment--\u003e\u0022\n+\t\t \u0022/* another css comment */\u0022\n+\t\t \u0022body { font-size: 16px; font-family: default }\u0022\n+\t\t \u0022div { font-size: 16px; display: inline-block }\u0022\n+\t\t \u0022h1 { font-size: 32px; font-family: \u005c\u0022term\u005c\u0022 }\u0022\n+\t\t \u0022b { font-weight: bold; color: #f00 }\u0022\n+\t\t \u0022.wordy { position: absolute; width: 280px; left: 10px; right: 10px; font-size: 16px; color: #7a7b7c }\u0022\n+\t\t \u0022.cat { display: list-item; }\u0022\n+\t \u0022\u003c/style\u003e\u0022\n+\t \u0022\u003ch1\u003eHeading\u003c/h1\u003e\u005cn\u0022\n+\t \u0022\u003cdiv class\u003d\u005c\u0022wordy cat\u005c\u0022\u003e\u0022\n+\t \u0022A bunch of normal \u003cb\u003e and bold\u003c/b\u003etext in a div\u0022\n+\t \u0022\u003c/div\u003e\u0022\n+\t \u0022hello\u003c/body\u003e\u003c/html\u003e\u0022\n+};\n+\n+static unsigned int m, step;\n+\n+static int\n+dump_atr(lws_dll2_t *d, void *user)\n+{\n+\tlhp_atr_t *atr \u003d lws_container_of(d, lhp_atr_t, list);\n+\tconst char *p \u003d (const char *)\u0026atr[1];\n+\n+\tprintf(\u0022{ \u005c\u0022%.*s\u005c\u0022, \u005c\u0022%.*s\u005c\u0022 }, \u0022,\n+\t\t (int)atr-\u003ename_len, p, (int)atr-\u003evalue_len, p + atr-\u003ename_len + 1);\n+\n+\treturn 0;\n+}\n+\n+#if 0\n+static int\n+dump_css_atr(lws_dll2_t *d, void *user)\n+{\n+\tlcsp_atr_ptr_t *pa \u003d lws_container_of(d, lcsp_atr_ptr_t, list);\n+\tlcsp_atr_t *a \u003d pa-\u003eatr;\n+\n+\tif (a-\u003eunit \u003d\u003d LCSP_UNIT_RGBA)\n+\t\tlwsl_notice(\u0022css attr: color 0x%08x\u005cn\u0022, a-\u003eu.rgba);\n+\telse\n+\t\tlwsl_notice(\u0022css attr: %d %u.%u %u\u005cn\u0022, a-\u003epropval, a-\u003eu.i.whole, a-\u003eu.i.frac, a-\u003eunit);\n+\n+\treturn 0;\n+}\n+#endif\n+\n+static lws_stateful_ret_t\n+test_cb(lhp_ctx_t *ctx, char reason)\n+{\n+\tlhp_pstack_t *ps \u003d lws_container_of(ctx-\u003estack.tail, lhp_pstack_t, list);\n+\tconst lcsp_atr_t *a;\n+\n+\tprintf(\u0022{ %s, %u, \u005c\u0022%.*s\u005c\u0022, %u, { \u0022, cb_reasons[(unsigned int)reason], ctx-\u003enpos, ctx-\u003enpos, ctx-\u003ebuf, ps-\u003eatr.count);\n+\n+\tif (reason \u003d\u003d LHPCB_ELEMENT_START || reason \u003d\u003d LHPCB_ELEMENT_END) {\n+\t\tlws_dll2_foreach_safe(\u0026ps-\u003eatr, NULL, dump_atr);\n+\n+\t\ta \u003d lws_css_cascade_get_prop_atr(ctx, LCSP_PROP_DISPLAY);\n+\t\tif (a)\n+\t\t\tlwsl_notice(\u0022display: %d\u005cn\u0022, a-\u003epropval);\n+\n+\t\ta \u003d lws_css_cascade_get_prop_atr(ctx, LCSP_PROP_COLOR);\n+\t\tif (a)\n+\t\t\tlwsl_notice(\u0022color: %d 0x%08X\u005cn\u0022, a-\u003epropval, a-\u003eu.rgba);\n+\t\t//lwsl_notice(\u0022color: active_stz %d, atr %d\u005cn\u0022, ctx-\u003eactive_stanzas.count, ctx-\u003eactive_atr.count);\n+\t\t//lws_dll2_foreach_safe(\u0026ctx-\u003eactive_atr, NULL, dump_css_atr);\n+\n+\t\ta \u003d ps-\u003ecss_position;\n+\t\tif (a)\n+\t\t\tlwsl_notice(\u0022position: %d\u005cn\u0022, a-\u003epropval);\n+\n+\t\ta \u003d ps-\u003ecss_width;\n+\t\tif (a)\n+\t\t\tlwsl_notice(\u0022width: %d.%u\u005cn\u0022, a-\u003eu.i.whole, a-\u003eu.i.frac);\n+\n+\t\ta \u003d ps-\u003ecss_height;\n+\t\tif (a)\n+\t\t\tlwsl_notice(\u0022height: %d.%u\u005cn\u0022, a-\u003eu.i.whole, a-\u003eu.i.frac);\n+\n+\t\ta \u003d ps-\u003ecss_pos[CCPAS_TOP];\n+\t\tif (a)\n+\t\t\tlwsl_notice(\u0022top: %d.%u\u005cn\u0022, a-\u003eu.i.whole, a-\u003eu.i.frac);\n+\t\ta \u003d ps-\u003ecss_pos[CCPAS_RIGHT];\n+\t\tif (a)\n+\t\t\tlwsl_notice(\u0022right: %d.%u\u005cn\u0022, a-\u003eu.i.whole, a-\u003eu.i.frac);\n+\t\ta \u003d ps-\u003ecss_pos[CCPAS_BOTTOM];\n+\t\tif (a)\n+\t\t\tlwsl_notice(\u0022bottom: %d.%u\u005cn\u0022, a-\u003eu.i.whole, a-\u003eu.i.frac);\n+\t\ta \u003d ps-\u003ecss_pos[CCPAS_LEFT];\n+\t\tif (a)\n+\t\t\tlwsl_notice(\u0022left: %d.%u\u005cn\u0022, a-\u003eu.i.whole, a-\u003eu.i.frac);\n+\n+\t\ta \u003d ps-\u003ecss_margin[CCPAS_TOP];\n+\t\tif (a)\n+\t\t\tlwsl_notice(\u0022margin top: %d.%u\u005cn\u0022, a-\u003eu.i.whole, a-\u003eu.i.frac);\n+\t\ta \u003d ps-\u003ecss_margin[CCPAS_RIGHT];\n+\t\tif (a)\n+\t\t\tlwsl_notice(\u0022margin right: %d.%u\u005cn\u0022, a-\u003eu.i.whole, a-\u003eu.i.frac);\n+\t\ta \u003d ps-\u003ecss_margin[CCPAS_BOTTOM];\n+\t\tif (a)\n+\t\t\tlwsl_notice(\u0022margin bottom: %d.%u\u005cn\u0022, a-\u003eu.i.whole, a-\u003eu.i.frac);\n+\t\ta \u003d ps-\u003ecss_margin[CCPAS_LEFT];\n+\t\tif (a)\n+\t\t\tlwsl_notice(\u0022margin left: %d.%u\u005cn\u0022, a-\u003eu.i.whole, a-\u003eu.i.frac);\n+\n+\t\ta \u003d ps-\u003ecss_padding[CCPAS_TOP];\n+\t\tif (a)\n+\t\t\tlwsl_notice(\u0022padding top: %d.%u\u005cn\u0022, a-\u003eu.i.whole, a-\u003eu.i.frac);\n+\t\ta \u003d ps-\u003ecss_padding[CCPAS_RIGHT];\n+\t\tif (a)\n+\t\t\tlwsl_notice(\u0022padding right: %d.%u\u005cn\u0022, a-\u003eu.i.whole, a-\u003eu.i.frac);\n+\t\ta \u003d ps-\u003ecss_padding[CCPAS_BOTTOM];\n+\t\tif (a)\n+\t\t\tlwsl_notice(\u0022padding bottom: %d.%u\u005cn\u0022, a-\u003eu.i.whole, a-\u003eu.i.frac);\n+\t\ta \u003d ps-\u003ecss_padding[CCPAS_LEFT];\n+\t\tif (a)\n+\t\t\tlwsl_notice(\u0022padding left: %d.%u\u005cn\u0022, a-\u003eu.i.whole, a-\u003eu.i.frac);\n+\n+\t\ta \u003d lws_css_cascade_get_prop_atr(ctx, LCSP_PROP_FONT_SIZE);\n+\t\tif (a)\n+\t\t\tlwsl_notice(\u0022font-size: %d.%u\u005cn\u0022, a-\u003eu.i.whole, a-\u003eu.i.frac);\n+\n+\t\ta \u003d lws_css_cascade_get_prop_atr(ctx, LCSP_PROP_FONT_FAMILY);\n+\t\tif (a)\n+\t\t\tlwsl_notice(\u0022font-family: %s\u005cn\u0022, (const char *)\u0026a[1]);\n+\t}\n+\n+\tprintf(\u0022 },\u005cn\u0022);\n+\n+#if 0\n+\tif (m \u003c LWS_ARRAY_SIZE(rpkg)) {\n+\t\tif (step \u003c rpkg[m].len) {\n+\t\t\t// lwsl_notice(\u0022test %d, step %d\u005cn\u0022, m, step);\n+\t\t\tif (reason !\u003d rpkg[m].r[step].reason) {\n+\t\t\t\tlwsl_err(\u0022%s: reason mismatch %d vs %d\u005cn\u0022, __func__, reason, rpkg[m].r[step].reason);\n+\t\t\t\treturn -1;\n+\t\t\t}\n+\t\t\tif (ctx-\u003eipos !\u003d rpkg[m].r[step].ipos) {\n+\t\t\t\tlwsl_err(\u0022%s: ipos mismatch %d vs %d\u005cn\u0022, __func__, ctx-\u003eipos, rpkg[m].r[step].ipos);\n+\t\t\t\treturn -1;\n+\t\t\t}\n+\t\t\tif (ctx-\u003eipos \u0026\u0026 memcmp(ctx-\u003ei, rpkg[m].r[step].indexes, ctx-\u003eipos)) {\n+\t\t\t\tlwsl_err(\u0022%s: indexes mismatch\u005cn\u0022, __func__);\n+\t\t\t\tlwsl_hexdump_err(ctx-\u003ei, ctx-\u003eipos);\n+\t\t\t\tlwsl_hexdump_err(rpkg[m].r[step].indexes, ctx-\u003eipos);\n+\t\t\t\treturn -1;\n+\t\t\t}\n+\t\t\tif (ctx-\u003epath_match !\u003d rpkg[m].r[step].path_match) {\n+\t\t\t\tlwsl_err(\u0022%s: path_match mismatch %d vs %d\u005cn\u0022, __func__, ctx-\u003epath_match, rpkg[m].r[step].path_match);\n+\t\t\t\treturn -1;\n+\t\t\t}\n+\t\t\tif (strcmp(ctx-\u003epath, rpkg[m].r[step].path)) {\n+\t\t\t\tlwsl_err(\u0022%s: path mismatch '%s' vs '%s'\u005cn\u0022, __func__, ctx-\u003epath, rpkg[m].r[step].path);\n+\t\t\t\treturn -1;\n+\t\t\t}\n+\t\t\tif (strcmp(ctx-\u003ebuf, rpkg[m].r[step].buf)) {\n+\t\t\t\tlwsl_err(\u0022%s: buf mismatch '%s' vs '%s'\u005cn\u0022, __func__, ctx-\u003ebuf, rpkg[m].r[step].buf);\n+\t\t\t\treturn -1;\n+\t\t\t}\n+\t\t} else {\n+\t\t\tlwsl_err(\u0022%s: extra steps\u005cn\u0022, __func__);\n+\t\t\treturn -1;\n+\t\t}\n+\n+\t\tstep++;\n+\t}\n+#endif\n+\treturn 0;\n+}\n+\n+static const lws_surface_info_t ic \u003d {\n+\t.wh_px \u003d { { 600,0 }, { 448,0 } },\n+\t.wh_mm \u003d { { 114,5000000 }, { 82,5000000 } },\n+};\n+\n+static lws_displaylist_t displaylist;\n+\n+int\n+main(int argc, const char **argv)\n+{\n+\tint e \u003d 0, logs \u003d LLL_USER | LLL_ERR | LLL_WARN | LLL_NOTICE;\n+\tlws_stateful_ret_t n;\n+\tlws_dl_rend_t drt;\n+\tlhp_ctx_t ctx;\n+\tconst char *p;\n+\n+\n+\tmemset(\u0026ctx, 0, sizeof(ctx));\n+\n+\tif ((p \u003d lws_cmdline_option(argc, argv, \u0022-d\u0022)))\n+\t\tlogs \u003d atoi(p);\n+\n+\tlws_set_log_level(logs, NULL);\n+\tlwsl_user(\u0022LWS API selftest: lhp HTML5 parser\u005cn\u0022);\n+\n+\tfor (m \u003d 0; m \u003c (int)LWS_ARRAY_SIZE(html_tests); m++) {\n+\t\tconst uint8_t *data;\n+\t\tsize_t size;\n+\n+\t\tlwsl_user(\u0022%s: ++++++++++++++++ test %d\u005cn\u0022, __func__, m + 1);\n+\t\tstep \u003d 0;\n+\n+\t\tdrt.dl \u003d \u0026displaylist;\n+\t\tdrt.w \u003d ic.wh_px[0].whole;\n+\t\tdrt.h \u003d ic.wh_px[1].whole;\n+\n+\t\tif (lws_lhp_construct(\u0026ctx, test_cb, \u0026drt, \u0026ic)) {\n+\t\t\te++;\n+\t\t\tcontinue;\n+\t\t}\n+\t\tctx.flags \u003d LHP_FLAG_DOCUMENT_END;\n+\t\tctx.base_url \u003d strdup(\u0022\u0022);\n+\n+\t\tdata \u003d (uint8_t *)html_tests[m];\n+\t\tsize \u003d strlen(html_tests[m]);\n+\n+\t\tlwsl_hexdump_info(data, size);\n+\t\tn \u003d lws_lhp_parse(\u0026ctx, \u0026data, \u0026size);\n+\n+\t\tlwsl_notice(\u0022n \u003d %d\u005cn\u0022, (int)n);\n+\t\tif (n \u0026 LWS_SRET_FATAL)\n+\t\t\te \u003d 1;\n+\n+\t\tlws_lhp_destruct(\u0026ctx);\n+\t}\n+\n+\tif (e)\n+\t\tgoto bail;\n+\n+\tlwsl_user(\u0022Completed: PASS\u005cn\u0022);\n+\n+\treturn 0;\n+\n+bail:\n+\tlwsl_user(\u0022Completed: FAIL\u005cn\u0022);\n+\n+\treturn 1;\n+}\n","s":{"c":1745694928,"u": 45461}} ],"g": 106354,"chitpc": 0,"ehitpc": 0,"indexed":0 , "ab": 0, "si": 0, "db":0, "di":0, "sat":0, "lfc": "7d0a"}